Hello community, here is the log from the commit of package adminer for openSUSE:Factory checked in at 2019-08-29 17:29:18 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/adminer (Old) and /work/SRC/openSUSE:Factory/.adminer.new.7948 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "adminer" Thu Aug 29 17:29:18 2019 rev:20 rq:727019 version:4.7.3 Changes: -------- --- /work/SRC/openSUSE:Factory/adminer/adminer.changes 2019-07-21 11:33:52.508782055 +0200 +++ /work/SRC/openSUSE:Factory/.adminer.new.7948/adminer.changes 2019-08-29 17:29:20.467250877 +0200 @@ -1,0 +2,33 @@ +Thu Aug 29 13:18:42 UTC 2019 - [email protected] + +- Update to version 4.7.3: + * Release 4.7.3 + * Fix blocking of concurrent instances in PHP >7.2 (bug #703) + * setup Mongo authSource by ENV + * Reset table after changing DB + * Move <p> after a possible error + * Allow editing foreign keys pointing to tables in other database/schema (bug #694) + * MS SQL: Support foreign keys to other DB + * Do not display error for foreign keys to other databases + * Save bytes + * MSSQL: use textarea in edit form for Memo type (#357) + * MySQL: Support STORED GENERATED + * SQLite: Skip renaming when recreating table if not necessary + * SQLite: Preserve auto increment when recreating table + * SQLite: Allow setting auto increment for empty tables + * Remove extra space in alter table command + * SQLite: Handle error in altering table (bug #697) + * init mancave-hever design + * MySQL: Allow editing rows identified by negative floats (bug #695) + * added floating footer css for adminer-theme-mancave2-2.1.alpha + * Add a comment (bug #691) + * Use is_numeric() + * Support MariaDB virtual columns + * MySQL: Speed up displaying tables in large databases (bug #700) + * Support unquoted floats in export + * SQLite: Quote strings stored in integer columns in export (bug #696) + * MySQL: Skip editing generated columns + * Add AdminerLoginIp + * Close </ul> of logins + +------------------------------------------------------------------- Old: ---- adminer-4.7.2.tar.xz New: ---- adminer-4.7.3.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ adminer.spec ++++++ --- /var/tmp/diff_new_pack.IOrcv4/_old 2019-08-29 17:29:21.007250793 +0200 +++ /var/tmp/diff_new_pack.IOrcv4/_new 2019-08-29 17:29:21.011250792 +0200 @@ -22,7 +22,7 @@ %bcond_with mongodb %bcond_with mssql Name: adminer -Version: 4.7.2 +Version: 4.7.3 Release: 0 Summary: Database management in a single PHP file License: GPL-2.0-only OR Apache-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.IOrcv4/_old 2019-08-29 17:29:21.035250789 +0200 +++ /var/tmp/diff_new_pack.IOrcv4/_new 2019-08-29 17:29:21.035250789 +0200 @@ -2,7 +2,7 @@ <service name="tar_scm" mode="disabled"> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> - <param name="revision">refs/tags/v4.7.2</param> + <param name="revision">refs/tags/v4.7.3</param> <param name="url">https://github.com/vrana/adminer.git</param> <param name="scm">git</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.IOrcv4/_old 2019-08-29 17:29:21.059250785 +0200 +++ /var/tmp/diff_new_pack.IOrcv4/_new 2019-08-29 17:29:21.059250785 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/vrana/adminer.git</param> - <param name="changesrevision">fd1691cb1d875cc23a7a51a0f890a6e932b6b304</param> + <param name="changesrevision">32955f780271467572024b1dc91728d959efc1b6</param> </service> </servicedata> ++++++ adminer-4.7.2.tar.xz -> adminer-4.7.3.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/adminer-4.7.2/adminer/drivers/mongo.inc.php new/adminer-4.7.3/adminer/drivers/mongo.inc.php --- old/adminer-4.7.2/adminer/drivers/mongo.inc.php 2019-07-18 08:56:37.000000000 +0200 +++ new/adminer-4.7.3/adminer/drivers/mongo.inc.php 2019-08-27 17:58:21.000000000 +0200 @@ -618,6 +618,9 @@ if ($db != "") { $options["db"] = $db; } + if (($auth_source = getenv("MONGO_AUTH_SOURCE"))) { + $options["authSource"] = $auth_source; + } try { $connection->_link = $connection->connect("mongodb://$server", $options); if ($password != "") { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/adminer-4.7.2/adminer/drivers/mssql.inc.php new/adminer-4.7.3/adminer/drivers/mssql.inc.php --- old/adminer-4.7.2/adminer/drivers/mssql.inc.php 2019-07-18 08:56:37.000000000 +0200 +++ new/adminer-4.7.3/adminer/drivers/mssql.inc.php 2019-08-27 17:58:21.000000000 +0200 @@ -542,6 +542,7 @@ $return = array(); foreach (get_rows("EXEC sp_fkeys @fktable_name = " . q($table)) as $row) { $foreign_key = &$return[$row["FK_NAME"]]; + $foreign_key["db"] = $row["PKTABLE_QUALIFIER"]; $foreign_key["table"] = $row["PKTABLE_NAME"]; $foreign_key["source"][] = $row["FKCOLUMN_NAME"]; $foreign_key["target"][] = $row["PKCOLUMN_NAME"]; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/adminer-4.7.2/adminer/drivers/mysql.inc.php new/adminer-4.7.3/adminer/drivers/mysql.inc.php --- old/adminer-4.7.2/adminer/drivers/mysql.inc.php 2019-07-18 08:56:37.000000000 +0200 +++ new/adminer-4.7.3/adminer/drivers/mysql.inc.php 2019-08-27 17:58:21.000000000 +0200 @@ -555,6 +555,8 @@ "privileges" => array_flip(preg_split('~, *~', $row["Privileges"])), "comment" => $row["Comment"], "primary" => ($row["Key"] == "PRI"), + // https://mariadb.com/kb/en/library/show-columns/, https://github.com/vrana/adminer/pull/359#pullrequestreview-276677186 + "generated" => preg_match('~^(VIRTUAL|PERSISTENT|STORED)~', $row["Extra"]), ); } return $return; @@ -582,18 +584,24 @@ * @return array array($name => array("db" => , "ns" => , "table" => , "source" => array(), "target" => array(), "on_delete" => , "on_update" => )) */ function foreign_keys($table) { + global $connection, $on_actions; + static $pattern = '(?:`(?:[^`]|``)+`|"(?:[^"]|"")+")'; $return = array(); - foreach (get_rows("SELECT * FROM information_schema.REFERENTIAL_CONSTRAINTS WHERE CONSTRAINT_SCHEMA = DATABASE() AND TABLE_NAME = " . q($table)) as $row) { - $columns = get_key_vals("SELECT COLUMN_NAME, REFERENCED_COLUMN_NAME FROM information_schema.KEY_COLUMN_USAGE WHERE CONSTRAINT_SCHEMA = DATABASE() AND CONSTRAINT_NAME = " . q($row["CONSTRAINT_NAME"]) . " ORDER BY ORDINAL_POSITION"); - $db = $row["UNIQUE_CONSTRAINT_SCHEMA"]; - $return[$row["CONSTRAINT_NAME"]] = array( - "db" => ($db == DB ? "" : $db), - "table" => $row["REFERENCED_TABLE_NAME"], - "source" => array_keys($columns), - "target" => array_values($columns), - "on_delete" => $row["DELETE_RULE"], - "on_update" => $row["UPDATE_RULE"], - ); + $create_table = $connection->result("SHOW CREATE TABLE " . table($table), 1); + if ($create_table) { + preg_match_all("~CONSTRAINT ($pattern) FOREIGN KEY ?\\(((?:$pattern,? ?)+)\\) REFERENCES ($pattern)(?:\\.($pattern))? \\(((?:$pattern,? ?)+)\\)(?: ON DELETE ($on_actions))?(?: ON UPDATE ($on_actions))?~", $create_table, $matches, PREG_SET_ORDER); + foreach ($matches as $match) { + preg_match_all("~$pattern~", $match[2], $source); + preg_match_all("~$pattern~", $match[5], $target); + $return[idf_unescape($match[1])] = array( + "db" => idf_unescape($match[4] != "" ? $match[3] : $match[4]), + "table" => idf_unescape($match[4] != "" ? $match[4] : $match[3]), + "source" => array_map('idf_unescape', $source[0]), + "target" => array_map('idf_unescape', $target[0]), + "on_delete" => ($match[6] ? $match[6] : "RESTRICT"), + "on_update" => ($match[7] ? $match[7] : "RESTRICT"), + ); + } } return $return; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/adminer-4.7.2/adminer/drivers/sqlite.inc.php new/adminer-4.7.3/adminer/drivers/sqlite.inc.php --- old/adminer-4.7.2/adminer/drivers/sqlite.inc.php 2019-07-18 08:56:37.000000000 +0200 +++ new/adminer-4.7.3/adminer/drivers/sqlite.inc.php 2019-08-27 17:58:21.000000000 +0200 @@ -482,6 +482,7 @@ } function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) { + global $connection; $use_all_fields = ($table == "" || $foreign); foreach ($fields as $field) { if ($field[0] != "" || !$field[1] || $field[2]) { @@ -508,16 +509,22 @@ if ($table != $name && !queries("ALTER TABLE " . table($table) . " RENAME TO " . table($name))) { return false; } - } elseif (!recreate_table($table, $name, $alter, $originals, $foreign)) { + } elseif (!recreate_table($table, $name, $alter, $originals, $foreign, $auto_increment)) { return false; } if ($auto_increment) { + queries("BEGIN"); queries("UPDATE sqlite_sequence SET seq = $auto_increment WHERE name = " . q($name)); // ignores error + if (!$connection->affected_rows) { + queries("INSERT INTO sqlite_sequence (name, seq) VALUES (" . q($name) . ", $auto_increment)"); + } + queries("COMMIT"); } return true; } - function recreate_table($table, $name, $fields, $originals, $foreign, $indexes = array()) { + function recreate_table($table, $name, $fields, $originals, $foreign, $auto_increment, $indexes = array()) { + global $connection; if ($table != "") { if (!$fields) { foreach (fields($table) as $key => $field) { @@ -578,12 +585,13 @@ $fields[$key] = " " . implode($field); } $fields = array_merge($fields, array_filter($foreign)); - if (!queries("CREATE TABLE " . table($table != "" ? "adminer_$name" : $name) . " (\n" . implode(",\n", $fields) . "\n)")) { + $temp_name = ($table == $name ? "adminer_$name" : $name); + if (!queries("CREATE TABLE " . table($temp_name) . " (\n" . implode(",\n", $fields) . "\n)")) { // implicit ROLLBACK to not overwrite $connection->error return false; } if ($table != "") { - if ($originals && !queries("INSERT INTO " . table("adminer_$name") . " (" . implode(", ", $originals) . ") SELECT " . implode(", ", array_map('idf_escape', array_keys($originals))) . " FROM " . table($table))) { + if ($originals && !queries("INSERT INTO " . table($temp_name) . " (" . implode(", ", $originals) . ") SELECT " . implode(", ", array_map('idf_escape', array_keys($originals))) . " FROM " . table($table))) { return false; } $triggers = array(); @@ -591,12 +599,15 @@ $trigger = trigger($trigger_name); $triggers[] = "CREATE TRIGGER " . idf_escape($trigger_name) . " " . implode(" ", $timing_event) . " ON " . table($name) . "\n$trigger[Statement]"; } - if (!queries("DROP TABLE " . table($table))) { // drop before creating indexes and triggers to allow using old names + $auto_increment = $auto_increment ? 0 : $connection->result("SELECT seq FROM sqlite_sequence WHERE name = " . q($table)); // if $auto_increment is set then it will be updated later + if (!queries("DROP TABLE " . table($table)) // drop before creating indexes and triggers to allow using old names + || ($table == $name && !queries("ALTER TABLE " . table($temp_name) . " RENAME TO " . table($name))) + || !alter_indexes($name, $indexes) + ) { return false; } - queries("ALTER TABLE " . table("adminer_$name") . " RENAME TO " . table($name)); - if (!alter_indexes($name, $indexes)) { - return false; + if ($auto_increment) { + queries("UPDATE sqlite_sequence SET seq = $auto_increment WHERE name = " . q($name)); // ignores error } foreach ($triggers as $trigger) { if (!queries($trigger)) { @@ -619,7 +630,7 @@ function alter_indexes($table, $alter) { foreach ($alter as $primary) { if ($primary[0] == "PRIMARY") { - return recreate_table($table, $table, array(), array(), array(), $alter); + return recreate_table($table, $table, array(), array(), array(), 0, $alter); } } foreach (array_reverse($alter) as $val) { @@ -675,7 +686,7 @@ $return = array(); $trigger_options = trigger_options(); foreach (get_rows("SELECT * FROM sqlite_master WHERE type = 'trigger' AND tbl_name = " . q($table)) as $row) { - preg_match('~^CREATE\s+TRIGGER\s*(?:[^`"\s]+|`[^`]*`|"[^"]*")+\s*(' . implode("|", $trigger_options["Timing"]) . ')\s*(.*)\s+ON\b~iU', $row["sql"], $match); + preg_match('~^CREATE\s+TRIGGER\s*(?:[^`"\s]+|`[^`]*`|"[^"]*")+\s*(' . implode("|", $trigger_options["Timing"]) . ')\s*(.*?)\s+ON\b~i', $row["sql"], $match); $return[$row["name"]] = array($match[1], $match[2]); } return $return; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/adminer-4.7.2/adminer/edit.inc.php new/adminer-4.7.3/adminer/edit.inc.php --- old/adminer-4.7.2/adminer/edit.inc.php 2019-07-18 08:56:37.000000000 +0200 +++ new/adminer-4.7.3/adminer/edit.inc.php 2019-08-27 17:58:21.000000000 +0200 @@ -4,7 +4,7 @@ $where = (isset($_GET["select"]) ? ($_POST["check"] && count($_POST["check"]) == 1 ? where_check($_POST["check"][0], $fields) : "") : where($_GET, $fields)); $update = (isset($_GET["select"]) ? $_POST["edit"] : $where); foreach ($fields as $name => $field) { - if (!isset($field["privileges"][$update ? "update" : "insert"]) || $adminer->fieldName($field) == "") { + if (!isset($field["privileges"][$update ? "update" : "insert"]) || $adminer->fieldName($field) == "" || $field["generated"]) { unset($fields[$name]); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/adminer-4.7.2/adminer/foreign.inc.php new/adminer-4.7.3/adminer/foreign.inc.php --- old/adminer-4.7.2/adminer/foreign.inc.php 2019-07-18 08:56:37.000000000 +0200 +++ new/adminer-4.7.3/adminer/foreign.inc.php 2019-08-27 17:58:21.000000000 +0200 @@ -48,17 +48,33 @@ $row["table"] = $TABLE; $row["source"] = array(""); } +?> +<form action="" method="post"> +<?php $source = array_keys(fields($TABLE)); //! no text and blob -$target = ($TABLE === $row["table"] ? $source : array_keys(fields($row["table"]))); +if ($row["db"] != "") { + $connection->select_db($row["db"]); +} +if ($row["ns"] != "") { + set_schema($row["ns"]); +} $referencable = array_keys(array_filter(table_status('', true), 'fk_support')); +$target = ($TABLE === $row["table"] ? $source : array_keys(fields(in_array($row["table"], $referencable) ? $row["table"] : reset($referencable)))); +$onchange = "this.form['change-js'].value = '1'; this.form.submit();"; +echo "<p>" . lang('Target table') . ": " . html_select("table", $referencable, $row["table"], $onchange) . "\n"; +if ($jush == "pgsql") { + echo lang('Schema') . ": " . html_select("ns", $adminer->schemas(), $row["ns"] != "" ? $row["ns"] : $_GET["ns"], $onchange); +} elseif ($jush != "sqlite") { + $dbs = array(); + foreach ($adminer->databases() as $db) { + if (!information_schema($db)) { + $dbs[] = $db; + } + } + echo lang('DB') . ": " . html_select("db", $dbs, $row["db"] != "" ? $row["db"] : $_GET["db"], $onchange); +} ?> - -<form action="" method="post"> -<p> -<?php if ($row["db"] == "" && $row["ns"] == "") { ?> -<?php echo lang('Target table'); ?>: -<?php echo html_select("table", $referencable, $row["table"], "this.form['change-js'].value = '1'; this.form.submit();"); ?> <input type="hidden" name="change-js" value=""> <noscript><p><input type="submit" name="change" value="<?php echo lang('Change'); ?>"></noscript> <table cellspacing="0"> @@ -86,7 +102,6 @@ <p> <input type="submit" value="<?php echo lang('Save'); ?>"> <noscript><p><input type="submit" name="add" value="<?php echo lang('Add column'); ?>"></noscript> -<?php } ?> <?php if ($name != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"><?php echo confirm(lang('Drop %s?', $name)); ?><?php } ?> <input type="hidden" name="token" value="<?php echo $token; ?>"> </form> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/adminer-4.7.2/adminer/include/adminer.inc.php new/adminer-4.7.3/adminer/include/adminer.inc.php --- old/adminer-4.7.2/adminer/include/adminer.inc.php 2019-07-18 08:56:37.000000000 +0200 +++ new/adminer-4.7.3/adminer/include/adminer.inc.php 2019-08-27 17:58:21.000000000 +0200 @@ -845,7 +845,7 @@ foreach ($row as $key => $val) { $field = $fields[$key]; $row[$key] = ($val !== null - ? unconvert_field($field, preg_match(number_type(), $field["type"]) && $val != '' && !preg_match('~\[~', $field["full_type"]) ? $val : q(($val === false ? 0 : $val))) + ? unconvert_field($field, preg_match(number_type(), $field["type"]) && !preg_match('~\[~', $field["full_type"]) && is_numeric($val) ? $val : q(($val === false ? 0 : $val))) : "NULL" ); } @@ -927,23 +927,22 @@ </h1> <?php if ($missing == "auth") { - $first = true; + $output = ""; foreach ((array) $_SESSION["pwds"] as $vendor => $servers) { foreach ($servers as $server => $usernames) { foreach ($usernames as $username => $password) { if ($password !== null) { - if ($first) { - echo "<ul id='logins'>" . script("mixin(qs('#logins'), {onmouseover: menuOver, onmouseout: menuOut});"); - $first = false; - } $dbs = $_SESSION["db"][$vendor][$server][$username]; foreach (($dbs ? array_keys($dbs) : array("")) as $db) { - echo "<li><a href='" . h(auth_url($vendor, $server, $username, $db)) . "'>($drivers[$vendor]) " . h($username . ($server != "" ? "@" . $this->serverName($server) : "") . ($db != "" ? " - $db" : "")) . "</a>\n"; + $output .= "<li><a href='" . h(auth_url($vendor, $server, $username, $db)) . "'>($drivers[$vendor]) " . h($username . ($server != "" ? "@" . $this->serverName($server) : "") . ($db != "" ? " - $db" : "")) . "</a>\n"; } } } } } + if ($output) { + echo "<ul id='logins'>\n$output</ul>\n" . script("mixin(qs('#logins'), {onmouseover: menuOver, onmouseout: menuOut});"); + } } else { if ($_GET["ns"] !== "" && !$missing && DB != "") { $connection->select_db(DB); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/adminer-4.7.2/adminer/include/editing.inc.php new/adminer-4.7.3/adminer/include/editing.inc.php --- old/adminer-4.7.2/adminer/include/editing.inc.php 2019-07-18 08:56:37.000000000 +0200 +++ new/adminer-4.7.3/adminer/include/editing.inc.php 2019-08-27 17:58:21.000000000 +0200 @@ -470,12 +470,17 @@ } /** Format foreign key to use in SQL query -* @param array ("table" => string, "source" => array, "target" => array, "on_delete" => one of $on_actions, "on_update" => one of $on_actions) +* @param array ("db" => string, "ns" => string, "table" => string, "source" => array, "target" => array, "on_delete" => one of $on_actions, "on_update" => one of $on_actions) * @return string */ function format_foreign_key($foreign_key) { global $on_actions; - return " FOREIGN KEY (" . implode(", ", array_map('idf_escape', $foreign_key["source"])) . ") REFERENCES " . table($foreign_key["table"]) + $db = $foreign_key["db"]; + $ns = $foreign_key["ns"]; + return " FOREIGN KEY (" . implode(", ", array_map('idf_escape', $foreign_key["source"])) . ") REFERENCES " + . ($db != "" && $db != $_GET["db"] ? idf_escape($db) . "." : "") + . ($ns != "" && $ns != $_GET["ns"] ? idf_escape($ns) . "." : "") + . table($foreign_key["table"]) . " (" . implode(", ", array_map('idf_escape', $foreign_key["target"])) . ")" //! reuse $name - check in older MySQL versions . (preg_match("~^($on_actions)\$~", $foreign_key["on_delete"]) ? " ON DELETE $foreign_key[on_delete]" : "") . (preg_match("~^($on_actions)\$~", $foreign_key["on_update"]) ? " ON UPDATE $foreign_key[on_update]" : "") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/adminer-4.7.2/adminer/include/functions.inc.php new/adminer-4.7.3/adminer/include/functions.inc.php --- old/adminer-4.7.2/adminer/include/functions.inc.php 2019-07-18 08:56:37.000000000 +0200 +++ new/adminer-4.7.3/adminer/include/functions.inc.php 2019-08-27 17:58:21.000000000 +0200 @@ -479,10 +479,10 @@ $key = bracket_escape($key, 1); // 1 - back $column = escape_key($key); $return[] = $column - . ($jush == "sql" && preg_match('~^[0-9]*\.[0-9]*$~', $val) ? " LIKE " . q(addcslashes($val, "%_\\")) - : ($jush == "mssql" ? " LIKE " . q(preg_replace('~[_%[]~', '[\0]', $val)) + . ($jush == "sql" && is_numeric($val) && preg_match('~\.~', $val) ? " LIKE " . q($val) // LIKE because of floats but slow with ints + : ($jush == "mssql" ? " LIKE " . q(preg_replace('~[_%[]~', '[\0]', $val)) // LIKE because of text : " = " . unconvert_field($fields[$key], q($val)) - )) // LIKE because of floats but slow with ints, in MS SQL because of text + )) ; //! enum and set if ($jush == "sql" && preg_match('~char|text~', $fields[$key]["type"]) && preg_match("~[^ -@]~", $val)) { // not just [a-z] to catch non-ASCII characters $return[] = "$column = " . q($val) . " COLLATE " . charset($connection) . "_bin"; @@ -566,8 +566,12 @@ * @return null */ function stop_session($force = false) { - if (!ini_bool("session.use_cookies") || ($force && @ini_set("session.use_cookies", false) !== false)) { // @ - may be disabled + $use_cookies = ini_bool("session.use_cookies"); + if (!$use_cookies || $force) { session_write_close(); // improves concurrency if a user opens several pages at once, may be restarted later + if ($use_cookies && @ini_set("session.use_cookies", false) === false) { // @ - may be disabled + session_start(); + } } } @@ -960,7 +964,7 @@ } } elseif (preg_match('~blob|bytea|raw|file~', $field["type"]) && ini_bool("file_uploads")) { echo "<input type='file' name='fields-$name'>"; - } elseif (($text = preg_match('~text|lob~', $field["type"])) || preg_match("~\n~", $value)) { + } elseif (($text = preg_match('~text|lob|memo~i', $field["type"])) || preg_match("~\n~", $value)) { if ($text && $jush != "sqlite") { $attrs .= " cols='50' rows='12'"; } else { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/adminer-4.7.2/adminer/include/version.inc.php new/adminer-4.7.3/adminer/include/version.inc.php --- old/adminer-4.7.2/adminer/include/version.inc.php 2019-07-18 08:56:37.000000000 +0200 +++ new/adminer-4.7.3/adminer/include/version.inc.php 2019-08-27 17:58:21.000000000 +0200 @@ -1,2 +1,2 @@ <?php -$VERSION = "4.7.2"; +$VERSION = "4.7.3"; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/adminer-4.7.2/changes.txt new/adminer-4.7.3/changes.txt --- old/adminer-4.7.2/changes.txt 2019-07-18 08:56:37.000000000 +0200 +++ new/adminer-4.7.3/changes.txt 2019-08-27 17:58:21.000000000 +0200 @@ -1,10 +1,23 @@ +Adminer 4.7.3 (released 2019-08-27): +Allow editing foreign keys pointing to tables in other database/schema (bug #694) +Fix blocking of concurrent instances in PHP >7.2 (bug #703) +MySQL: Speed up displaying tables in large databases (bug #700, regression from 4.7.2) +MySQL: Allow editing rows identified by negative floats (bug #695) +MySQL: Skip editing generated columns +SQLite: Quote strings stored in integer columns in export (bug #696) +SQLite: Handle error in altering table (bug #697) +SQLite: Allow setting auto increment for empty tables +SQLite: Preserve auto increment when recreating table +MS SQL: Support foreign keys to other DB +MongoDB: Allow setting authSource from environment variable + Adminer 4.7.2 (released 2019-07-18): Do not attempt logging in without password (bug #676) Stretch footer over the whole table width (bug #624) Allow overwriting tables when copying them Fix displaying SQL command after Save and continue edit Cache busting for adminer.css -MySQL: Fix displaying multi-columns foreign keys (bug #675) +MySQL: Fix displaying multi-columns foreign keys (bug #675, regression from 4.7.0) MySQL: Fix creating users and changing password in MySQL 8 (bug #663) MySQL: Pass SRID to GeomFromText PostgreSQL: Fix setting column comments on new table diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/adminer-4.7.2/designs/mancave/adminer.css new/adminer-4.7.3/designs/mancave/adminer.css --- old/adminer-4.7.2/designs/mancave/adminer.css 2019-07-18 08:56:37.000000000 +0200 +++ new/adminer-4.7.3/designs/mancave/adminer.css 2019-08-27 17:58:21.000000000 +0200 @@ -1,6 +1,6 @@ /* - VERSION: adminer-theme-mancave2-2.0.alpha + VERSION: adminer-theme-mancave2-2.1.alpha AUTHORS: [email protected], [email protected] //NOTE: CREDITS below that we stole from ;-) @@ -244,6 +244,8 @@ line-height: 70px; color: #555; background: none; + position: relative; + top: 12px; } h2{ @@ -717,6 +719,10 @@ color: #999; } +.footer legend { + background-color: #49526D; +} + /* menu ----------------------------------------------------------------------- */ @@ -751,7 +757,7 @@ .version { color: #555; - font-size: inherit; + font-size: 18px; } /* db select */ @@ -1196,3 +1202,13 @@ .pages {background:#817F5A;} +.footer, .footer>div { + background-color: #49526D; + opacity: .9; +} +.footer { + border-image: none; + padding: 20px 12px 0px; + border: 1px #BBB dashed; + margin: 12px; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/adminer-4.7.2/designs/mancave-hever/adminer.css new/adminer-4.7.3/designs/mancave-hever/adminer.css --- old/adminer-4.7.2/designs/mancave-hever/adminer.css 1970-01-01 01:00:00.000000000 +0100 +++ new/adminer-4.7.3/designs/mancave-hever/adminer.css 2019-08-27 17:58:21.000000000 +0200 @@ -0,0 +1,202 @@ +/* + VERSION: mancave-hever1-27.1.alpha +*/ + +/* Merged and fixed version of Hever's and Frank Bueltge's skins by Oguz KONYA. I liked Bueltge's skin but I wanted the icons, too. + So I merged them into one file, fixed a couple of problems, added some paddings here and there, voila! */ + +/* Redesigned (iconized) by Hever [hev.cz] - June 2009, ver 0.1.3 */ +/** + * * Alternative style for Adminer by Frank Bueltge + * * @link http://bueltge.de/ + * */ + +/* Added icons */ +/* IE doesn't support inline images - using some hack that eliminate IE*/ + +html/*\*/>/*/*/body .error {background:#FFEEEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIsSURBVDjLpVNLSJQBEP7+h6uu62vLVAJDW1KQTMrINQ1vPQzq1GOpa9EppGOHLh0kCEKL7JBEhVCHihAsESyJiE4FWShGRmauu7KYiv6Pma+DGoFrBQ7MzGFmPr5vmDFIYj1mr1WYfrHPovA9VVOqbC7e/1rS9ZlrAVDYHig5WB0oPtBI0TNrUiC5yhP9jeF4X8NPcWfopoY48XT39PjjXeF0vWkZqOjd7LJYrmGasHPCCJbHwhS9/F8M4s8baid764Xi0Ilfp5voorpJfn2wwx/r3l77TwZUvR+qajXVn8PnvocYfXYH6k2ioOaCpaIdf11ivDcayyiMVudsOYqFb60gARJYHG9DbqQFmSVNjaO3K2NpAeK90ZCqtgcrjkP9aUCXp0moetDFEeRXnYCKXhm+uTW0CkBFu4JlxzZkFlbASz4CQGQVBFeEwZm8geyiMuRVntzsL3oXV+YMkvjRsydC1U+lhwZsWXgHb+oWVAEzIwvzyVlk5igsi7DymmHlHsFQR50rjl+981Jy1Fw6Gu0ObTtnU+cgs28AKgDiy+Awpj5OACBAhZ/qh2HOo6i+NeA73jUAML4/qWux8mt6NjW1w599CS9xb0mSEqQBEDAtwqALUmBaG5FV3oYPnTHMjAwetlWksyByaukxQg2wQ9FlccaK/OXA3/uAEUDp3rNIDQ1ctSk6kHh1/jRFoaL4M4snEMeD73gQx4M4PsT1IZ5AfYH68tZY7zv/ApRMY9mnuVMvAAAAAElFTkSuQmCC") no-repeat scroll 0.8em center; padding-left:38px;} +html/*\*/>/*/*/body .message, #menu p.message {background:#49526D url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKfSURBVDjLpZPrS1NhHMf9O3bOdmwDCWREIYKEUHsVJBI7mg3FvCxL09290jZj2EyLMnJexkgpLbPUanNOberU5taUMnHZUULMvelCtWF0sW/n7MVMEiN64AsPD8/n83uucQDi/id/DBT4Dolypw/qsz0pTMbj/WHpiDgsdSUyUmeiPt2+V7SrIM+bSss8ySGdR4abQQv6lrui6VxsRonrGCS9VEjSQ9E7CtiqdOZ4UuTqnBHO1X7YXl6Daa4yGq7vWO1D40wVDtj4kWQbn94myPGkCDPdSesczE2sCZShwl8CzcwZ6NiUs6n2nYX99T1cnKqA2EKui6+TwphA5k4yqMayopU5mANV3lNQTBdCMVUA9VQh3GuDMHiVcLCS3J4jSLhCGmKCjBEx0xlshjXYhApfMZRP5CyYD+UkG08+xt+4wLVQZA1tzxthm2tEfD3JxARH7QkbD1ZuozaggdZbxK5kAIsf5qGaKMTY2lAU/rH5HW3PLsEwUYy+YCcERmIjJpDcpzb6l7th9KtQ69fi09ePUej9l7cx2DJbD7UrG3r3afQHOyCo+V3QQzE35pvQvnAZukk5zL5qRL59jsKbPzdheXoBZc4saFhBS6AO7V4zqCpiawuptwQG+UAa7Ct3UT0hh9p9EnXT5Vh6t4C22QaUDh6HwnECOmcO7K+6kW49DKqS2DrEZCtfuI+9GrNHg4fMHVSO5kE7nAPVkAxKBxcOzsajpS4Yh4ohUPPWKTUh3PaQEptIOr6BiJjcZXCwktaAGfrRIpwblqOV3YKdhfXOIvBLeREWpnd8ynsaSJoyESFphwTtfjN6X1jRO2+FxWtCWksqBApeiFIR9K6fiTpPiigDoadqCEag5YUFKl6Yrciw0VOlhOivv/Ff8wtn0KzlebrUYwAAAABJRU5ErkJggg==") no-repeat scroll 0.8em center; padding-left:38px;} + +html/*\*/>/*/*/body a[href$="sql="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHGSURBVHjaxFPNLkNREP5aB6WhaKLSVtKFiIUqK1sLT2DhTXgDL2FlxSOw8FOLRiyQWhDRiKSEhKQJou49P9fMnFsLsevCJCcz594z3/m+mTmJKIrQjSXRpXUNoGqbm39qcMbAkbyIvbVwYQhD3tIeWsOQ1+QVH86Xyz+JXJPIOb9iAI4ZpOMd/yN/vb/vAdiC93cP0El2dNA6z4RjYyW2MaPU0BB0u+0BOGGsVML49LSA3J+cYDCblb0l6jeHBwg/26isrOB0a8uzYBlBgKShgD8M53J4aTTQqFaRSCYl+WxnG83zcxTmKpKg+vtFu9W8NDQDMCXW+VivYyAzjKmlJahUSpiYUKPVbCKTz0sCGzOyOpBLzdcXlCMdDDIxO4vboyoyhQIKlYocLi0uIjczIyBcA98dYqx9NywxUEyDi/P29IyF1VU5dFeroS+dRnF+Xvajk5N0ayjx8tq6+FuSyiwUF4LRHi/reLg4o9ijs6xG9RjWGowUi/h4fcXexoa0L4oc0mNZuVgFzID09VKBnFXoUb7Pnb5zQrvVovpkZC4QzwfiN6QM1eBqdxcmnq6IAA395Mlz8eTxTZwg/pcl/v01fgswAESqYZbsIsnLAAAAAElFTkSuQmCC") no-repeat scroll left bottom; padding-left:22px;} +html/*\*/>/*/*/body a[href*="dump="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJrSURBVHjajFPPaxNREP72V8ymTbGQbRB/IT0otdV6CcWTgqCoUFQQEXoSEQ/+AypK755E1KsULIpGgw1F9KC22lgstFgQLdoWhSab2PRHTNrs7nvObGhSsRa/ZXjv7c6b+eabWUVKiX9AJQuRRci2k+260N91VwgJIQSEV1mVnjf5axTjvCfFFn7hCcBlBzJNVRA0gAZTQ1ODgXC4gDtjV9AW2QNFUTA0/Q66kPLSqVg4shYF8vEdKQ7mln+i+/VVRM0oFpbmETLq/SS6J4R/OfHtHmV24XouHFo94REDAyE9hMZgBMkvT2GZFqxQE6by0/g4P74SoKLB2ZZzWA8ffqRQLBcxNTuFjRTwxpmbfad7Oo/rHhdN6B20/6JvaKyBCnODhqNbL+PRxHXUGXWINV5kl9TDrkQct/pnZKHkyPsDGcl4MJiWq5Ecsf84LxTL8nbyK2+Pke3XHWJAQkLXgMdDNjRNRTxlQ6UmakRD0vN8NEd7EBsFO6Impu1fzGCCrOSXwCro5HEiZiExnEVnrKlaypNhG4fba02aTC8ik1/ibZrM9RlIkkGnjH0jWWJQWRn8TpLI8fcZ6MSA1WrZFERx2eHPTEPqjksBqASDLh7ZZ+HlWA6H9tYyvhjNomNnI8Km7p8/f5+HGdB46/lJeOoYPHV8mbGy8gA59HngU74asNkKYKVzlQCuW9GA6B5si+DVeA4HWmsM4qksTnZY1TMz0NRauysaUAmt2+oxM1tCM6k8mS74WXjIdm8O+JdWg36oKgXqgnzb3TvRXvZEneN6YPNIFw7MY70W5haXnlUHbp3f+b/wW4ABAAtWTLcKdqLcAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;} +html/*\*/>/*/*/body a[href$="dump="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHzSURBVHjajJPPS+NQEMcnaaxpdWsp6Q8vtWtdkIo9+B948SjIgruCUg8F/wGP/glePe5JcBehwl4qePGm0J6KQj30UBHEzaFLUromTfPizJMnrxhhB4bJvDfzme97SZQgCOB/be98J2AsAMYYMP81KjKg0WhMYljHtS30RSz4gjkGdot559F7OLt8vvi1bJRBURS4vr8CTTQ3m80SFv1MpVJlwzBA13XuNGUwGKyY1p+Vk9aPzWw8C7ZjQXximu+9ATA5KhQK5Uwmw+nCIpEIJBIJOLjah3Q8w7379x5urFsOUEUhTl/C6R+ef35mARzPhW6vC+q/iHvyvaYwXwIQje6j1+tBv98H13VhNBpxxyPA5tw2TI50MPQsrMbXbOo53fmtaJIC7iSZAMPhkOe+73MA5Ruz3yCfz9NlvykLBUSjUR41TQPP8zhE7JNSyj8E0CbJpkiXKRoIRFABeQcQd0DFwlVV5evUTFBZRSiATEwnp4lCAa0LI2AoQC4WimRl4qgyYOw12rYNyWSSX6L4mKiBnukDK5VKYJrmmBpZwW6r1TotFotTuVyOQwQgnU7zV9npdKDdbj+hgnXRN/Yz1ev1zwg6QP+KU2disRiXblkWOI7zhJOPce+wWq2aoQDZarXaJ2xYQGfod5VKxQ2rexFgAI4OiAKxKkWeAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;} + +html/*\*/>/*/*/body select[name="db"] {background:white url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEYSURBVBgZBcHPio5hGAfg6/2+R980k6wmJgsJ5U/ZOAqbSc2GnXOwUg7BESgLUeIQ1GSjLFnMwsKGGg1qxJRmPM97/1zXFAAAAEADdlfZzr26miup2svnelq7d2aYgt3rebl585wN6+K3I1/9fJe7O/uIePP2SypJkiRJ0vMhr55FLCA3zgIAOK9uQ4MS361ZOSX+OrTvkgINSjS/HIvhjxNNFGgQsbSmabohKDNoUGLohsls6BaiQIMSs2FYmnXdUsygQYmumy3Nhi6igwalDEOJEjPKP7CA2aFNK8Bkyy3fdNCg7r9/fW3jgpVJbDmy5+PB2IYp4MXFelQ7izPrhkPHB+P5/PjhD5gCgCenx+VR/dODEwD+A3T7nqbxwf1HAAAAAElFTkSuQmCC") no-repeat scroll left bottom; padding-left:16px; background: #49526D;} +html/*\*/>/*/*/body select[name="db"] option {padding-left:18px;} + +html/*\*/>/*/*/body #menu li a[href*="&select="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=") no-repeat scroll left bottom; clear:left; display:block; float:left; height:16px; margin-right:8px; padding-top:1px; overflow:hidden; padding-left:16px; width:0; text-decoration:none;} + +html/*\*/>/*/*/body #menu li a[href*="&table="], html/*\*/>/*/*/body #menu li a[href*="&view="] {clear:right; margin-left:24px; display:block; height:17px; padding-bottom:1px; text-decoration:none;} + +html/*\*/>/*/*/body #menu p#tables br {display:none;} + +html/*\*/>/*/*/body a[href*="&create="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ6SURBVDjLpZNZSNRRGMV//2XGsjFrMg2z0so2K21xIFpepYUiAsGIICLffI8eWiBBeg3qQV+KwBYKLB8qpHUmrahcKLc0QsxldNSxdPz/79LD1ChBUXTh8sG93POdc75zDa01/7NsgGvPR09rzQmpVZZSCqlAKIWUCqk0QqoZWyKFRir1uvxIbsAGUFqXHQqkpP1L57M3Pm5MMJBKpQHUdF9BKIGQAlcJXOlOVykSdye3leO6MmkGQNyHw+uO/1X3bzGBK+S0B1IqAKqDg3986HeCZPffwvJtoNT7lOZLvUdtAPEDAKBkRzo3QwMUb89InN1uGGD3spdE214xe8MRUnM2MfppNW0Pqy7YAK5UKK2xLbhdP4hlmdxpGMQwwQT8ziNiI534c7cT6WrFazikzF2Eb8HS1IQEDdiWwcHAQmpehTkQSAcgNvSMiYFW5uUUMdV3HW+ywefGNqITJsbUUL75k4FWYJtQ+yaMZcXrk1ANk/33mbdiD7EvlRieETy+FJLkMFcjRRSW3emIAwiF1hqPBfu2LGSWbbA1uZ41SfWkrtxPrPcypsfFiWYzFGzGKTjFV28WEJeIUHETLdOgrmkI1VdHpCdEet5enP4qLK9mKrqMgedv6cyrAP+qxOTiUxAi7oEJi8frELoFoTLpa7nI/HQvscgSRt+0kV1SSW7qYtp7xrBMphm4Mi5h/VIfTcEq1u0oJaknSEdNiMYHET7UvcMpPEN31Ed7zxgASmk1I0g6dK66s8CRak5mVxjnfS05+TsZCw/T9baTx1nnGb47DrQksjE6HrsHYPz6nYt3+Sc3L8+wA2tz0J6pF5OD4WP7Kpq7f5fO79DfSxjdtCtDAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;} +html/*\*/>/*/*/body a[href$="&create="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIpSURBVDjLpZNPSFRRFMZ/749/Kt3IqFTSRoSMmrGIYTTbpEJtjBCCok1Em9JVG1dRC8FFEES5aGFEgRRZWq1iLKKxBiNqLDcltQgmHR9hY6LOu+feFm+YGVsZXbh8nHO53/nud8+xjDH8z3IB7r5avGgMZ8XoBq01okFpjYhGtEGJLtmCKINo/XbgVFPUBdDG9PVEq0P/UvnSvdlwQYFoHQIY/3obpRVKFL5W+OIXUVThrL91AN+XihKCwIeTu85sqPryqsJXUvRARAMwkshsiKB7fw25UgKVJwA40V7H/cl5jh+oL+RGk/P0xIqxl11dr8AXjTYG14HRNxkcx+ZhMoNlg52/ND6VAWMoc6F5+2Zy/l9PMIDrWByL1jI+tcDRaN06BaXxbDqLUnq9AqPBteHpuwUcJ0AIcgBXH93h+/wEyyuLrPk5cmv7gNY8gdIYYyhz4PDeWuIpj85IsS2ujQ2zJAk6DkZpqGnixcwYyU+PifUOX7Eh6DoAx7aIpzwA4imPeMrj+bTH+88PaNkZQWwhsrULsXxie9oAzgcESgUe2NAZCeE6AXZGQhwKh/Cyc5RZVXQ39wFwoeMmjXVhgMqiB8awe0cVP36u0Fi/iW9zvwuzkF3+xUz6Nal0gv6uWww+O02lUwGwmv8FM3l55EtLTvQWXwm+EkRpfNEoUZRXHCE5PUFbuJ0nH4cot1wSH14C3LA2Os6x3m2DwDmgGlgChpLX0/1/AIu8MA7WsWBMAAAAAElFTkSuQmCC") no-repeat scroll left bottom; padding-left:22px;} + +html/*\*/>/*/*/body #content p a {padding-left:2px;} +html/*\*/>/*/*/body #content p a[href*="&create="] {padding-left:22px;} +html/*\*/>/*/*/body #content p a[href*="&select="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=") no-repeat scroll 2px bottom; padding-left:22px;} +html/*\*/>/*/*/body #content p a[href*="&page="] {background-image:none; padding-left:0;} +html/*\*/>/*/*/body #content p a[href$="?database="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIkSURBVDjLpVNNiFJRFP7eU1E0KSLTMpAwYSxyaidDtChm0WYQ3NSutv2s2kwwm2igNgMtooUQEQhhA9GqhSDTQsZZFDbNDBgVg5bSw9J8rzFF33udc+HGg0ladOHj3nPe+b7zc99VbNvG/yy30yiVSl4SnCNcsixrivYEgY7WJu0faX9EKGUyGVNyFFkBkY/T+WkoFEpFIhEEAgH4/X7w916vB8Mw0Gg00G63y+S7mM1mm4LIAYxisbhSr9c5nT1pjUYju1qt2oVC4YnkqbIUMk6Ew+F/9hyNRkFJLuyaATmFoqZp8Pl88Hq98Hg8wtfv99HpdNBsNhGPx0XsRAG3241ut4vBYCDs8XgMXdcxHA7FN/b9VUD25HK5RAUczKC+hYgcNpNN05xcAQdLkqIoIlj6VFWdXIEUkAQGV8M2k2vaG3z6sYGfVR39XzsHlm/dX3h5d31xlwAHM5goBd5+LuO75z3OnU3jyP4EVrZeKGub2p309cP7VKcAQ2Znoiz3deMVTk1Nw1RNTB+ahamMkD45w7RrfwSYwFdFf6K4Quf6pmvwKHswl7wh7Jvnc4gfTPHR52zhcqVSeZZMJgOxWEyI8BC5CmOnh63WKtZbZczPPsa94hX4XCLJQHG+xnw+f5SEFghZmvhefgvcTqn2HN3gBmZSZ5CInMaHr1Wsvivjy3ZvSZn0nHO5XJDIxwgWDbW2vL10m9xXCUGCQXi49qA1/xvyq6BCh7yZeQAAAABJRU5ErkJggg==") no-repeat scroll 2px bottom; padding-left:22px;} +html/*\*/>/*/*/body #content p a[href*="&edit="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJvSURBVDjLpZPrS5NhGIf9W7YvBYOkhlkoqCklWChv2WyKik7blnNris72bi6dus0DLZ0TDxW1odtopDs4D8MDZuLU0kXq61CijSIIasOvv94VTUfLiB74fXngup7nvrnvJABJ/5PfLnTTdcwOj4RsdYmo5glBWP6iOtzwvIKSWstI0Wgx80SBblpKtE9KQs/We7EaWoT/8wbWP61gMmCH0lMDvokT4j25TiQU/ITFkek9Ow6+7WH2gwsmahCPdwyw75uw9HEO2gUZSkfyI9zBPCJOoJ2SMmg46N61YO/rNoa39Xi41oFuXysMfh36/Fp0b7bAfWAH6RGi0HglWNCbzYgJaFjRv6zGuy+b9It96N3SQvNKiV9HvSaDfFEIxXItnPs23BzJQd6DDEVM0OKsoVwBG/1VMzpXVWhbkUM2K4oJBDYuGmbKIJ0qxsAbHfRLzbjcnUbFBIpx/qH3vQv9b3U03IQ/HfFkERTzfFj8w8jSpR7GBE123uFEYAzaDRIqX/2JAtJbDat/COkd7CNBva2cMvq0MGxp0PRSCPF8BXjWG3FgNHc9XPT71Ojy3sMFdfJRCeKxEsVtKwFHwALZfCUk3tIfNR8XiJwc1LmL4dg141JPKtj3WUdNFJqLGFVPC4OkR4BxajTWsChY64wmCnMxsWPCHcutKBxMVp5mxA1S+aMComToaqTRUQknLTH62kHOVEE+VQnjahscNCy0cMBWsSI0TCQcZc5ALkEYckL5A5noWSBhfm2AecMAjbcRWV0pUTh0HE64TNf0mczcnnQyu/MilaFJCae1nw2fbz1DnVOxyGTlKeZft/Ff8x1BRssfACjTwQAAAABJRU5ErkJggg==") no-repeat scroll 2px bottom; padding-left:22px;} +html/*\*/>/*/*/body #content p a[href*="&table="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJcSURBVDjLpZPtT5JhFMafrW997I9rscA+FFu2QRurtlw5cQ4InLpwBogIPNFSiNJ4C+JVkj0QTBHQKFPQlJfwlanY1tXz3ARkn2jd27Wz++yc33XOvd0UAOp/RNGR/X5zeH9rOlTDVKAK3fsqJrxlqN27GHPuYHh+G4rXRQzZNjEws47Hli/oo/PxNsAU3qvWT3/gX3TPuHrWBhiC30nSktXDtKLB1NI4NKkxqBMqjDByPFkcxNBCPwbCfXgUeEBq705m0AZM+qsk2e3hau88W+4ANOy+XPLFQrkrcbW31KkOYJx9rBaAOzPR0gVHW6x593q9cDgcqB6e4sZoogMYdXzD0ck5ZhfLsHGKVfAqVoadKcMdzcLr82PuwwZCoRACgQCWVzdhoK2gaVpDAMNzWzhkAXamQpze/I4t13w+j2AwiFwuh7W1NXg8HmQyGSgUCshkssuU3F7AQf0c84kK3n68KFc4hXQ6DavVCqlUCqVSSdaIx+NQq9UGMsHg7Ab2jxtwp5rOvqUqia3CUqnEObWn0mp1KBaLcLlckMvloPpfrhOAl230/SGLxQK3241CoQC9Xg9nskKk1emQzWZZkBZCoRBU3/NP2GMBgXTTObjSjI1GA8lkEgzDwO/3E4iObXY6nYhEIhCJRHoWcIW6b1pF7egMlYNT7NROUKzU8XX3GJ+3D2E0GgmAm4Zbh2s0mUyIRqMcAGKx+BIlMeSiYu1K/fbEMm4+TaFnJIHrSgZX5TFIZNPo7e1Fj9QOs9kMlUqFaw9pCASCnzwe7x15xG6/rUQiAZ/Px9/5XyhZOMVGKlOdAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;} + +html/*\*/>/*/*/body #content a[href*="&database="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKRSURBVDjLhVNLTBNRFD3TTju1FCcBaxuaQEr94ydiZIHGpcFISBOi0YREZWHCVoyRxKUxxq0LXcACQyLsjO6KjSEiDfHDz0S0CLSxlFKd2g7MTDudGd+bMAQCxJucuXfuu+fcO/PeYwzDALVoNMqRuI3guq7rR4g/SEBC/Svxc8T3EUTD4bCGTcZQAUI+RvxLr9d70u/3o6KiAm63G3Qtn89DFEUkk0lks9lRkrvW3t6e2lCgRZFI5F0ikaDtjN1MVVVjYmLCGBoa6qccC7Z1kQafz4f/WSAQAGlyaXOOpQ+SNNUymQxcLhc4joPD4TBzkiRBEASkUimEQiGzdlcBlmWRy+WgKIr5Xi6XUSgUUCwWzTVN+IAzeOOde71orP0eAaOkbrDWf6Cw2+3mBLSYgny3KULXPOUY2BUB/hMd4IOn8XfhMGYjvU+2TECLLRLDMNA0zYw5JYa6Ghke/hyEn9/gZEqo3OuHp7qW3yJgESjoNPSdlb8gWCOCr29BMT0Ip5tBYnIWqlL6o8irzVsEaHcKSqQCen4cweok+FAblNRz2JxlODx1cEkzGWmVbTl7Z/jHhgCF1Z3GYjIKf+U8+ANhQn4Gm6OMUiGI9MhHg5Gl1sbu8UnKNc8B7Ui3ipxEcwvlpVFw6hz2N1xGabkXdqeBYqEOmfefEZWac4e6xz9Z22hbn+BmLBZbi8fjEBdG4NF/QdUDSM88hQ4FawKJR6cxLDZl86qzZdtdoDYwMBAkQg/2LL/ovNLVh++Dd7G0OAau9hTkrKgnnE39GW3f/Z6enpUdBSx7ePu4eq+zi4VNw+TbV0gsxFd5b9X5i4+mpnY63tsErl6okhvrfWzT0SAMR3FMXsnean08Pb/b/fgHqpjCspi90kkAAAAASUVORK5CYII=") no-repeat scroll 2px bottom; padding-left:22px;} +html/*\*/>/*/*/body #content p a[href*="&schema="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFOSURBVDjLtVK7SgNRED0b9iuM2lr4QK1DQIyk0FZsJAj+gH+ilRZb2NjaRHTLmA9QFKz9huzm7t37Hu+u7IJgQjR6YLjDzOXMmcMERIR5EE5qXA4z4sqACYWEC5wfLQXf/WtMIuDSoL0A7DZDjBj/uYI0l8jzEEJYJMkvCEZM4PqZIxlzpGk+kSCY18TGtGYcx9Tv96dOqBUMBgNyzsFaC621312Ac+59yJFlGRhj5VvVoigKvniglEK32w1mkd3r9ejPPAjOhqdknYX18p1/rzo3pYqTh0OSRkJI5UMgPn4s61sX66SkhtEGcISGsQad5gH2FvehfV5BaIF2cwet5RZyKeu68pe5ubKG7dUNP5AQGltMN57Mosgr5EIiVQmYGvtc1PVicqHY+dXpk8Dg7v22XKFo1ARe9v1bDOlXKKKCs4Sn1xdU1v3vIc2CD3bN4xJjfJWvAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;} + +html/*\*/>/*/*/body #content p a[href*="&sql="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ5SURBVHjapFNLaxNRFP4mnZmQZtKYpJ2I8ZE0NSbSWKpgBYNUhIJQUDddCaILwb34C0RcCi60vpa14sZFoSjxUWxTFEubFkxf9kFS+7Jp0yQmM5mH905SF9pSwQt3vnPnnvPNd86cA13Xsds+23XKsdMdQx//s0z/6hi54he3e8/0d3ZuK0FTFGhUJkVVhSbLUAiq5IxSCQrBEkGWOu8Lh38HGrlpWnlXCKhNSbZQo3cEE9FomYAuKZstE2wFa8RR1cpKqK2o4JhxmLVJVAlh5Df6IFj5MgENcHq9EAMBg2RucBDVLpdxVon0iXdvIf8sQHRIsNReht3XjI3ZI8iuPAOrkDyorBq3G6vT08ikUuAsFiN46HkXXL56eI41QV1/BMF+GulvCfCMDFvNXtSIHrC0KDTPhXgc7lAQdQ2thk2XIpewnkzCJvTA4T8PabEbfDWD+ZFxyEUdX94sw6QVCkZlxWAQU+8/YGZgALV+v0HgbWmBNzQMR0M7it8fg+HWwQk2cLkkcvJh5NNFsCVJMgq1ubiE5o4OI5CS8FYrya8b9saLKC48gIlTIG/6sBaLw3PpHrTEMrSXr4kPIaAKFkbjSA0PEVuFlB+DO8Ah2HoB8tITVPE6iplDWOn7jLn0CSQevoDV6TI+zEpUASkkZzaTYrLIrH3C/qMCFEbE4th9OEQexfQBrPYP44d+DuY91eBp+1dGgFVIDb729kKpdJfQtIy2yFNMdN/E5McYzAebUEhOYjZuQXaj5+9W/nOYbl9vLN26doOFScVI9BXmZ6dy9jpnpO1O5dfsRtBxxlk4Xu9mT4Z80DkpVlhZvdp+d3RmpyH7JcAAnHiAVYWMsdkAAAAASUVORK5CYII=") no-repeat scroll 2px bottom; padding-left:24px;} + +html/*\*/>/*/*/body table tbody input[name*="check"] {display:block; float:left;} + +html/*\*/>/*/*/body table a[href*="&edit="][href*="&where"] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFUSURBVDjLrZM/SAJxGIZdWwuDlnCplkAEm1zkaIiGFFpyMIwGK5KGoK2lphDKkMDg3LLUSIJsSKhIi+684CokOtTiMizCGuzEU5K3vOEgKvtBDe/2Pc8H3x8NAM1fQlx4H9M3pcOWp6TXWmM8A7j0629v1nraiAVC0IrrwATKIgs5xyG5QiE+Z4iQdoeU2oAsnqCSO1NSTu+D9VhqRLD8nIB8F0Q2MgmJDyipCzjvYJkIfpN2UBLG8MpP4dxvQ3ZzGuyyBQ2H+AnOOCBd9aL6soh81A5hyYSGWyCFvxUcerqI4S+CvYVOFPMHxLAq8I3qdHVY5LbBhJzEsCrwutpRFBlUHy6wO2tEYtWAzLELPN2P03kjfj3luqDycV2F8AgefWbEnVqEHa2IznSD6BdsVDNStB0lfh0FPoQjdx8RrAqGzC0YprSgxzsUMOY2bf37N/6Ud1Vc9yYcH50CAAAAAElFTkSuQmCC") no-repeat scroll right bottom; padding-right:18px;} + +html/*\*/>/*/*/body table input + a[href*="&edit="][href*="&where"] {width:0; float:left; display:block; height:16px; overflow:hidden; text-decoration:none; padding:0 0 0 18px; background-position:2px bottom; margin-left:5px;} +html/*\*/>/*/*/body table tbody td:first-child {white-space:normal;} +html/*\*/>/*/*/body table thead input {margin-right: 5px;} + +html/*\*/>/*/*/body input[name="delete"], html/*\*/>/*/*/body input[name="drop"] {background:transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHSSURBVHjapFM5bsJQEB2zSIDFJrHYpEtyAyoKJAp6CrqIkBPkNDlBAKXjBEgUpKOBCyQNijFiEZvZl8z7wsjESYpkpNFfPO/Nmz9j6Xg80n/M9fWi3W7fMOnd4XAo8qogAbvO5xKvL6lU6s0aL1kVMDjP5ye/36+Gw2FyOp3EQFqtVtTr9WixWHT5/JhOp6s2ghP4ORaLyaFQiGazGa3Xa0HgdrvJ6/WSpmk0Go0MjnvIZDLVM0Gr1brm/WskEkkA3O/3abvdQjq5XC6xgoiVka7rNB6PNT6ns9nsu+OkpODxeBLBYJAGgwHt9/uzQ8Vms6Hdbie+KYqC+ASTFrARBMx2HwgEaDKZiHqn0yktl0uxtzrMMAyKx+MCc+4Cs13hwQCC1GQy+W3Lms2mUIUygbEqEBLNun8z8zswVgUfLO0WD4Z6kekn8/l8okNM8GFVUMYDoVWQ6HA4bEAzoyzL1O12kbRsJajwhYZhiUajJEnShWSAQaqqKnU6HahEGysXg9RoNPJ8+cwZZLSKp47m8/k5Kxzg4XBocNxDLper2ka5Xq+LUeatilahJLN1mEJ+ZDHKJthGAKvVauJnYi9ysHIqQee1xOsLg3/+mf5inwIMAJMhb74NwG5wAAAAAElFTkSuQmCC") no-repeat scroll left center; padding:1px 5px 1px 18px; border:0; cursor:pointer; font-size:.9em;} +html/*\*/>/*/*/body input[name="delete"]:hover, html/*\*/>/*/*/body input[name="drop"]:hover {color:red; background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJdSURBVDjLpZP7S1NhGMf9W7YfogSJboSEUVCY8zJ31trcps6zTI9bLGJpjp1hmkGNxVz4Q6ildtXKXzJNbJRaRmrXoeWx8tJOTWptnrNryre5YCYuI3rh+8vL+/m8PA/PkwIg5X+y5mJWrxfOUBXm91QZM6UluUmthntHqplxUml2lciF6wrmdHriI0Wx3xw2hAediLwZRWRkCPzdDswaSvGqkGCfq8VEUsEyPF1O8Qu3O7A09RbRvjuIttsRbT6HHzebsDjcB4/JgFFlNv9MnkmsEszodIIY7Oaut2OJcSF68Qx8dgv8tmqEL1gQaaARtp5A+N4NzB0lMXxon/uxbI8gIYjB9HytGYuusfiPIQcN71kjgnW6VeFOkgh3XcHLvAwMSDPohOADdYQJdF1FtLMZPmslvhZJk2ahkgRvq4HHUoWHRDqTEDDl2mDkfheiDgt8pw340/EocuClCuFvboQzb0cwIZgki4KhzlaE6w0InipbVzBfqoK/qRH94i0rgokSFeO11iBkp8EdV8cfJo0yD75aE2ZNRvSJ0lZKcBXLaUYmQrCzDT6tDN5SyRqYlWeDLZAg0H4JQ+Jt6M3atNLE10VSwQsN4Z6r0CBwqzXesHmV+BeoyAUri8EyMfi2FowXS5dhd7doo2DVII0V5BAjigP89GEVAtda8b2ehodU4rNaAW+dGfzlFkyo89GTlcrHYCLpKD+V7yeeHNzLjkp24Uu1Ed6G8/F8qjqGRzlbl2H2dzjpMg1KdwsHxOlmJ7GTeZC/nesXbeZ6c9OYnuxUc3fmBuFft/Ff8xMd0s65SXIb/gAAAABJRU5ErkJggg==")} + +.logout {font-size: 8pt !important;} +#logout{ height:17px; border: none; background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJHSURBVDjLlZPNi81hFMc/z7137p1mTCFvNZfGSzLIWNjZKRvFRoqNhRCSYm8xS3+AxRRZ2JAFJWJHSQqTQkbEzYwIM+6Yid/znJfH4prLXShOnb6r8/nWOd8Tcs78bz0/f+KMu50y05nK/wy+uHDylbutqS5extvGcxaWqtoGDA8PZ3dnrs2srQc2Zko41UXLmLdyDW5OfvsUkUgbYGbU63UAQggdmvMzFmzZCgTi7CQmkZwdEaX0JwDgTnGbTCaE0G4zw80omhPI92lcEtkNkdgJCCHwJX7mZvNaB0A14SaYJlwTrpHsTkoFlV1nt2c3x5YYo1/vM9A/gKpxdfwyu/v3teCayKq4JEwT5EB2R6WgYmrs2bYbcUNNUVfEhIfFYy69uci+1fuRX84mkawFSxd/4nVWUopUVIykwlQxRTJBTIDA4Pp1jBZPuNW4wUAPmCqWIn29X1k4f5Ku8g9mpKCkakRLVEs1auVuauVuyqHMo8ejNCe+sWPVTkQKXCMmkeZUmUZjETF1tc6ooly+fgUVw9So1/tRN6YnZji46QghBFKKuAouERNhMlbAHZFE6e7pB+He8MMw+GGI4xtOMf1+lsl3TQ4NHf19BSlaO1DB9BfMHdX0O0iqSgiBbJkjm491hClJbA1LxCURgpPzXwAHhg63necAIi3XngXLcRU0fof8ETMljIyM5LGxMcbHxzvy/6fuXdWgt6+PWncv1e4euqo1ZmabvHs5+jn8yzufO7hiiZmuNpNBM13rbvVSpbrXJE7/BMkHtU9jFIC/AAAAAElFTkSuQmCC") no-repeat center left; overflow: hidden; text-indent: 18px; line-height: 0px; cursor:pointer; margin-left:6px; color: #21759B; text-decoration: underline;} +#logout:hover {text-decoration: none; color: #D54E21;} +#logins a, #tables a {background: none repeat scroll 0 0 transparent;} +/*body {margin: 0; line-height: 1.25em; font-size: 13px; background: #F9F9F9;}*/ +body {margin: 0; line-height: 1.25em; font-size: 13px; background: #110236; color: #fff;} +body, select, option, optgroup, button {font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;} /* IE6 */ +input[type='submit'], input[type='reset'], input[type='button'], input[type='file'] {font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;} +input, textarea, pre, code, samp, kbd, var {font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif; font-size: 12px;} +/*a {color: #21759B;} +a:visited {color: #21759B;} +a:hover {text-decoration: none; color: #D54E21;}*/ +a {color: #F1E5B3;} +a:visited {color: #F1E5B3;} +a:hover {text-decoration: none; color: #D68D20;} +form {margin: 0;} +table {margin: 10px 12px 12px 0; border: 1px #BBB solid; font-size: 90%;} +th {text-align: left;} +/*td, th {background-color: #fff; padding: 4px 6px; border: 1px #DfDfDf solid; border-width: 1px 0 0 1px;}*/ +td, th {background-color: #1D294D; padding: 4px 6px; border: 1px #DfDfDf solid; border-width: 1px 0 0 1px;} +tr:first-child td, tr:first-child th {border-top-width: 0;} +tr:first-child th {padding-right: 30px;} +td:first-child, th:first-child {border-left-width: 0;} +/*thead td, thead th {background-color: #DFDFDF; border: none; border-bottom: 1px #BBB solid;}*/ +thead td, thead th {background-color: #110236; border: none; border-bottom: 1px #BBB solid;} +thead tr:hover td, thead tr:hover th {background-color: #110236 !important;} +/*tr:nth-child(2n) td, tr:nth-child(2n) th, .odd td, .odd th, tr.odd {background-color: #F1F1F1;}*/ +tr:nth-child(2n) td, tr:nth-child(2n) th, .odd td, .odd th, tr.odd {background-color: #49526D;} +/*tr:hover td, tr:hover th {background-color: #BCD;}*/ +tr:hover td, tr:hover th {background-color: red; /* #3D4E80;*/} +/*fieldset {display: inline; vertical-align: top; padding: 2px 12px; margin: 25px 12px 12px 0; border: none; background-color: #F1F1F1; border: 1px solid #E3E3E3; position: relative; padding-top: 14px;}*/ +fieldset {display: inline; vertical-align: top; padding: 2px 12px; margin: 25px 12px 12px 0; border: none; background-color: #1D294D; border: 1px solid #E3E3E3; position: relative; padding-top: 14px;} +fieldset, x:-moz-any-link {padding-top: 4px;} +fieldset {%padding-top: 14px;} +legend {font-weight: 900; color: #fff; position: absolute; top: -1.666em; left: -1em; padding: 0 4px;} +input[name='limit'], input[name*='length'] {width: 3em; xtext-align: right;} +input[name='text_length'] {width: 5em;} +select + input, select + select {margin-left: 2px;} +/*textarea, input, select {border-width: 1px; border-style: solid; -moz-border-radius: 4px; -khtml-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; border-color: #DFDFDF;}*/ +textarea, input, select {border-width: 1px; border-style: solid; -moz-border-radius: 4px; -khtml-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; border-color: #5C5C5C; background-color: #49526D; color: #ccc} +input[type="checkbox"], input[type="radio"], input[type="image"] {border: 0 none;} +/*input[type=button], input[type=submit] {border-color: #bbb; color: #464646;}*/ +input[type=button], input[type=submit] {border-color: #999; color: #fff;} +/*input[type=button]:hover, input[type=submit]:hover {color: #fff; border-color: #666;}*/ +input[type=button]:hover, input[type=submit]:hover {color: #fff; border-color: #fff; background-color:#49526D;} +input[type=button], input[type=submit] {text-decoration: none; font-size: 11px !important; line-height: 14px; padding: 2px 8px; cursor: pointer; border-width: 1px; border-style: solid; -moz-border-radius: 11px; -khtml-border-radius: 11px; -webkit-border-radius: 11px; border-radius: 11px; -moz-box-sizing: content-box; -webkit-box-sizing: content-box; -khtml-box-sizing: content-box; box-sizing: content-box;background-color:#49526D;} +input + label input, select + label input {margin-left: 4px;} +td input[type='checkbox']:first-child, td input[type='radio']:first-child {margin-left: 2px;} +label:hover {text-decoration: underline;} +fieldset div {margin-bottom: 2px;} +input[name='Comment'] { /* !!! */ width: 24em;} +input[name='Auto_increment'] { /* !!! */width: 6em;} +img {vertical-align: middle; margin: 0; padding: 0;} +.error {padding: 8px; color: red; background-color: #FEE;} +/*.message {padding: 8px; background-color: #DDD;}*/ +.message {padding: 8px; background-color: #49526D;} +.char {color: #070;} +.date {color: #707;} +.enum {color: #077;} +.binary {color: red;} +/*.jush-sql {padding: 2px 4px; margin-right: 4px; outline: 1px #BBB dashed; font-size: 9pt;}*/ +.jush-sql {padding: 2px 4px; margin-right: 4px; font-size: 9pt;background-color:#49526D;} +.jush a { + color: #B4D5FF !important; +} +.jush, .jush-bac { + color: #fff; +} +#content {margin: 2px 0 0 300px; padding: 10px 20px 20px 0;} +#lang {height: 23px; width: 250px; display: block; padding: 1px 10px; position: absolute; top: 0; left: 0; text-align: center; background-color: #f1f1f1; border: 1px solid #E3E3E3; line-height: 1.25em;} +#lang select {font-size: 8pt;} +/*#breadcrumb {margin: 0; height: 21px; display: block; position: absolute; top: 0; left: 300px; background-color: #f1f1f1; border: 1px solid #E3E3E3; padding: 2px 12px; line-height: 1.25em } +#menu {position: absolute; padding: 10px; margin: 0; top: 28px; left: 0; width: 250px; background-color: #f1f1f1; border: 1px solid #E3E3E3;}*/ +#breadcrumb {margin: 0; height: 21px; display: block; position: absolute; top: 0; left: 300px; background-color: #000; border: 1px solid #E3E3E3; padding: 2px 12px; line-height: 1.25em; color:#ccc; } +#breadcrumb a { + color:red; +} +#menu {position: absolute; padding: 10px; margin: 0; top: 28px; left: 0; width: 250px; background-color: #110236; border: 1px solid #E3E3E3;} +#menu form {margin: 0;} +#menu p {padding-left: 8px; font-size: 10pt; border-bottom: none;} +#menu form p {padding-left: 0; text-align: left;} +h1 .h1:hover {text-decoration: underline;} +/*h1, h2 {font: italic normal normal 24px/29px Georgia, "Times New Roman", "Bitstream Charter", Times, serif; margin: 0; padding: 14px 15px 3px 10px; line-height: 35px; text-shadow: rgba(255,255,255,1) 0 1px 0px; background: none;}*/ +h1, h2 {font: italic normal normal 24px/29px Georgia, "Times New Roman", "Bitstream Charter", Times, serif; margin: 0; padding: 14px 15px 3px 10px; line-height: 35px; /*text-shadow: rgba(185,185,185,1) 0 1px 0px;*/ background: none;color:#A3A3A3} +h1 {font-size: 12px;} +h1 .h1 {font-size: 12px;} +h2 {padding: 22px 0 0 10px;} +h3 {margin: 40px 0 0; font-weight: 400; font-size: 130%;} +#schema {margin: 1.5em 0 0 220px; position: relative;} +/*#schema .table {border: 1px solid #E3E3E3; background-color: #F1F1F1; padding: 0 2px; cursor: move; position: absolute;}*/ +#schema .table {border: 1px solid #E3E3E3; background-color: #110236; padding: 0 2px; cursor: move; position: absolute;} +#schema .references {position: absolute;} +.js .hidden {display: inline;} +.js td.hidden, .js input.hidden {display: none;} +legend a {color: #F1E5B3; text-decoration: none; cursor: default;} +legend a:hover {color: #333;} +code {background: transparent;} +fieldset, legend, h2, table, .error, .message {-moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px;border-radius: 5px;} +#breadcrumb, #lang, #menu {-moz-border-radius-bottomright: 5px; -khtml-border-bottom-right-radius: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px;} +#breadcrumb {-moz-border-radius-bottomleft: 5px; -khtml-border-bottom-left-radius: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px;} +#menu {-moz-border-radius-topright: 5px; -khtml-border-top-right-radius: 5px; -webkit-border-top-right-radius: 5px; border-bottom-top-radius: 5px;} +#loader {margin-left: 35px;} + +/*custom*/ +.js .checked td,.js .checked th, .js .checkable .checked td, .js .checkable .checked th{ + background:#5A3901; +} +tbody tr:hover td,tbody tr:hover th{ + background:#333333; +} +.js .column { + background: none repeat scroll 0 0 #110236; + margin-top: -0.3em; + padding: 0.3em 1ex 0.3em 0; + position: absolute; +} +.js:hover .column:hover { + background: none repeat scroll 0 0 #110236; +} + +#content pre {background-color:#49526D} + +#lang{background:#110236;} + +.pages {background:#43486F;} +.pages {background:#999671;} +.pages {background:#817F5A;} + +#logins a:hover, #tables a[title]:hover, #tables a.active, #tables a.select:hover + a, #tables a.select.active + a { + color: red; +} + +.footer, .footer>div { + background-color: #49526D; + opacity: .9; +} +.footer { + border-image: none; + padding: 30px 12px 0px; + border: 1px #BBB solid; + margin: 12px -20px 12px -1px; + margin-right: none; +} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/adminer-4.7.2/plugins/login-ip.php new/adminer-4.7.3/plugins/login-ip.php --- old/adminer-4.7.2/plugins/login-ip.php 1970-01-01 01:00:00.000000000 +0100 +++ new/adminer-4.7.3/plugins/login-ip.php 2019-08-27 17:58:21.000000000 +0200 @@ -0,0 +1,42 @@ +<?php + +/** Check IP address and allow empty password +* @link https://www.adminer.org/plugins/#use +* @author Jakub Vrana, https://www.vrana.cz/ +* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 +* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other) +*/ +class AdminerLoginIp { + /** @access protected */ + var $ips; + /** @access protected */ + var $forwarded_for; + + /** Set allowed IP addresses + * @param array IP address prefixes + * @param array X-Forwarded-For prefixes if IP address matches, empty array means anything + */ + function __construct($ips, $forwarded_for = array()) { + $this->ips = $ips; + $this->forwarded_for= $forwarded_for; + } + + function login($login, $password) { + foreach ($this->ips as $ip) { + if (strncasecmp($_SERVER["REMOTE_ADDR"], $ip, strlen($ip))) { + if (!$this->forwarded_for) { + return true; + } + if ($_SERVER["HTTP_X_FORWARDED_FOR"]) { + foreach ($this->forwarded_for as $forwarded_for) { + if (strncasecmp(preg_replace('~.*, *~', '', $_SERVER["HTTP_X_FORWARDED_FOR"]), $forwarded_for, strlen($forwarded_for))) { + return true; + } + } + } + } + } + return false; + } + +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/adminer-4.7.2/plugins/translation.php new/adminer-4.7.3/plugins/translation.php --- old/adminer-4.7.2/plugins/translation.php 2019-07-18 08:56:37.000000000 +0200 +++ new/adminer-4.7.3/plugins/translation.php 2019-08-27 17:58:21.000000000 +0200 @@ -10,7 +10,7 @@ ); */ -/** Translate all table and field comments, enum and set values from the translation table (inserts new translations) +/** Translate all table and field comments, enum and set values in Editor from the translation table (inserts new translations) * @link https://www.adminer.org/plugins/#use * @author Jakub Vrana, https://www.vrana.cz/ * @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
