Thread: [adminer-svn] SF.net SVN: adminer:[1100] trunk (Page 3)
Database management in a single PHP file
Brought to you by:
jakubvrana
From: <jak...@us...> - 2009-09-12 04:44:26
|
Revision: 1100 http://adminer.svn.sourceforge.net/adminer/?rev=1100&view=rev Author: jakubvrana Date: 2009-09-12 04:44:18 +0000 (Sat, 12 Sep 2009) Log Message: ----------- Display EXPLAIN in SQL query Modified Paths: -------------- trunk/adminer/sql.inc.php trunk/changes.txt Modified: trunk/adminer/sql.inc.php =================================================================== --- trunk/adminer/sql.inc.php 2009-09-11 21:00:40 UTC (rev 1099) +++ trunk/adminer/sql.inc.php 2009-09-12 04:44:18 UTC (rev 1100) @@ -20,12 +20,12 @@ $query = get_file("sql_file", true); } if (is_string($query)) { // get_file() returns error as number, fread() as false + if (!$fp && strlen($query) && (!$history || end($history) != $query)) { // don't add repeated + $history[] = $query; + } $space = "(\\s|/\\*.*\\*/|(#|-- )[^\n]*\n|--\n)"; $alter_database = "(CREATE|DROP)$space+(DATABASE|SCHEMA)\\b~isU"; $databases = &$_SESSION["databases"][$_GET["server"]]; - if (!$fp && strlen($query) && (!$history || end($history) != $query)) { // don't add repeated - $history[] = $query; - } if (isset($databases) && !preg_match("~\\b$alter_database", $query)) { // quick check - may be inside string //! false positive with $fp session_write_close(); @@ -33,10 +33,11 @@ $delimiter = ";"; $offset = 0; $empty = true; - $dbh2 = (strlen(DB) ? connect() : null); // connection for exploring indexes (to not replace FOUND_ROWS()) //! PDO - silent error + $dbh2 = (strlen(DB) ? connect() : null); // connection for exploring indexes and EXPLAIN (to not replace FOUND_ROWS()) //! PDO - silent error if (is_object($dbh2)) { $dbh2->select_db(DB); } + $explain = 1; while (strlen($query)) { if (!$offset && preg_match('~^\\s*DELIMITER\\s+(.+)~i', $query, $match)) { $delimiter = $match[1]; @@ -53,27 +54,32 @@ } if (!$found || $found == $delimiter) { // end of a query $empty = false; - echo "<pre class='jush-sql'>" . shorten_utf8(trim(substr($query, 0, $match[0][1]))) . "</pre>\n"; + $q = substr($query, 0, $match[0][1]); + echo "<pre class='jush-sql'>" . shorten_utf8(trim($q)) . "</pre>\n"; ob_flush(); flush(); // can take a long time - show the running query $start = explode(" ", microtime()); // microtime(true) is available since PHP 5 //! don't allow changing of character_set_results, convert encoding of displayed query - if (!$dbh->multi_query(substr($query, 0, $match[0][1]))) { + if (!$dbh->multi_query($q)) { echo "<p class='error'>" . lang('Error in query') . ": " . h($dbh->error) . "\n"; if ($_POST["error_stops"]) { break; } } else { $end = explode(" ", microtime()); - $i = 0; + echo "<p class='time'>" . lang('%.3f s', max(0, $end[0] - $start[0] + $end[1] - $start[1])) . "</p>\n"; do { $result = $dbh->store_result(); - if (!$i) { - echo "<p class='time'>" . (is_object($result) ? lang('%d row(s)', $result->num_rows) . ", ": "") . lang('%.3f s', max(0, $end[0] - $start[0] + $end[1] - $start[1])) . "</p>\n"; - $i++; - } if (is_object($result)) { select($result, $dbh2); + if (preg_match("~^$space*SELECT$space+~isU", $q)) { + $id = "explain-$explain"; + echo "<p>" . lang('%d row(s)', $result->num_rows) . ", <a href='#$id' onclick=\"return !toggle('$id');\">EXPLAIN</a>\n"; + echo "<div id='$id' class='hidden'>\n"; + select($dbh2->query("EXPLAIN $q")); + echo "</div>\n"; + $explain++; + } } else { if (preg_match("~^$space*$alter_database", $query)) { $databases = null; // clear cache Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2009-09-11 21:00:40 UTC (rev 1099) +++ trunk/changes.txt 2009-09-12 04:44:18 UTC (rev 1100) @@ -1,11 +1,12 @@ Adminer 2.1.0-dev: Edit default values directly in table creation Execute SQL file stored on server disk +Display EXPLAIN in SQL query Compress export and import Display column comments in table overview Use ON DUPLICATE KEY UPDATE for CSV import +Print ALTER export instead of executing it Click on row selects it -Print ALTER export instead of executing it Fix Editor date format Fix long SQL query crash (bug #2839231) Speedup of simple alter table This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-09-19 20:16:23
|
Revision: 1118 http://adminer.svn.sourceforge.net/adminer/?rev=1118&view=rev Author: jakubvrana Date: 2009-09-19 20:16:15 +0000 (Sat, 19 Sep 2009) Log Message: ----------- Move <h1> to $adminer->navigation Modified Paths: -------------- trunk/adminer/include/adminer.inc.php trunk/adminer/include/design.inc.php trunk/editor/editing.js trunk/editor/include/adminer.inc.php Modified: trunk/adminer/include/adminer.inc.php =================================================================== --- trunk/adminer/include/adminer.inc.php 2009-09-19 19:58:12 UTC (rev 1117) +++ trunk/adminer/include/adminer.inc.php 2009-09-19 20:16:15 UTC (rev 1118) @@ -414,7 +414,18 @@ * @return null */ function navigation($missing) { - global $dbh; + global $VERSION; + ?> +<h1> +<a href="http://www.adminer.org/" id="h1"><?php echo $this->name(); ?></a> +<span class="version"><?php echo $VERSION; ?></span> +<a href="http://www.adminer.org/#download" id="version"><?php echo (version_compare($VERSION, $_COOKIE["adminer_version"]) < 0 ? h($_COOKIE["adminer_version"]) : ""); ?></a> +</h1> +<script type="text/javascript"> +body_load(); +<?php echo (isset($_COOKIE["adminer_version"]) ? "" : "verify_version();"); ?> +</script> +<?php if ($missing != "auth") { $databases = get_databases(); ?> @@ -442,19 +453,28 @@ </p> </form> <?php - if ($missing != "db" && strlen(DB) && $dbh->select_db(DB)) { - $result = $dbh->query("SHOW TABLES"); - if (!$result->num_rows) { - echo "<p class='message'>" . lang('No tables.') . "\n"; - } else { - echo "<p id='tables'>\n"; - while ($row = $result->fetch_row()) { - echo '<a href="' . h(ME) . 'select=' . urlencode($row[0]) . '">' . lang('select') . '</a> '; - echo '<a href="' . h(ME) . 'table=' . urlencode($row[0]) . '">' . $this->tableName(array("Name" => $row[0])) . "</a><br>\n"; //! Adminer::tableName may work with full table status - } + $this->printTables($missing); + } + } + + /** Prints table list in menu + * @param string can be "db" if there is no database selected + * @return null + */ + function printTables($missing) { + global $dbh; + if ($missing != "db" && strlen(DB) && $dbh->select_db(DB)) { + $result = $dbh->query("SHOW TABLES"); + if (!$result->num_rows) { + echo "<p class='message'>" . lang('No tables.') . "\n"; + } else { + echo "<p id='tables'>\n"; + while ($row = $result->fetch_row()) { + echo '<a href="' . h(ME) . 'select=' . urlencode($row[0]) . '">' . lang('select') . '</a> '; + echo '<a href="' . h(ME) . 'table=' . urlencode($row[0]) . '">' . $this->tableName(array("Name" => $row[0])) . "</a><br>\n"; //! Adminer::tableName may work with full table status } - echo '<p><a href="' . h(ME) . 'create=">' . lang('Create new table') . "</a>\n"; } + echo '<p><a href="' . h(ME) . 'create=">' . lang('Create new table') . "</a>\n"; } } Modified: trunk/adminer/include/design.inc.php =================================================================== --- trunk/adminer/include/design.inc.php 2009-09-19 19:58:12 UTC (rev 1117) +++ trunk/adminer/include/design.inc.php 2009-09-19 20:16:15 UTC (rev 1118) @@ -15,7 +15,7 @@ <link rel="stylesheet" type="text/css" href="adminer.css"> <?php } ?> -<body onload="body_load();<?php echo (isset($_COOKIE["adminer_version"]) ? "" : " verify_version();"); ?>"> +<body> <script type="text/javascript" src="../adminer/functions.js"></script> <script type="text/javascript" src="editing.js"></script> @@ -56,17 +56,12 @@ } function page_footer($missing = false) { - global $VERSION, $adminer; + global $adminer; ?> </div> <?php switch_lang(); ?> <div id="menu"> -<h1> -<a href="http://www.adminer.org/" id="h1"><?php echo $adminer->name(); ?></a> -<span class="version"><?php echo $VERSION; ?></span> -<a href="http://www.adminer.org/#download" id="version"><?php echo (version_compare($VERSION, $_COOKIE["adminer_version"]) < 0 ? h($_COOKIE["adminer_version"]) : ""); ?></a> -</h1> <?php $adminer->navigation($missing); ?> </div> <?php Modified: trunk/editor/editing.js =================================================================== --- trunk/editor/editing.js 2009-09-19 19:58:12 UTC (rev 1117) +++ trunk/editor/editing.js 2009-09-19 20:16:15 UTC (rev 1118) @@ -1,4 +1,2 @@ // Editor specific functions -function body_load() { -} Modified: trunk/editor/include/adminer.inc.php =================================================================== --- trunk/editor/include/adminer.inc.php 2009-09-19 19:58:12 UTC (rev 1117) +++ trunk/editor/include/adminer.inc.php 2009-09-19 20:16:15 UTC (rev 1118) @@ -348,6 +348,15 @@ } function navigation($missing) { + global $VERSION; + ?> +<h1> +<a href="http://www.adminer.org/" id="h1"><?php echo $this->name(); ?></a> +<span class="version"><?php echo $VERSION; ?></span> +<a href="http://www.adminer.org/editor/#download" id="version"><?php echo (version_compare($VERSION, $_COOKIE["adminer_version"]) < 0 ? h($_COOKIE["adminer_version"]) : ""); ?></a> +</h1> +<?php + echo (isset($_COOKIE["adminer_version"]) ? "" : "<script type='text/javascript'>verify_version();</script>\n"); if ($missing != "auth") { ?> <form action="" method="post"> @@ -357,17 +366,21 @@ </p> </form> <?php - if ($missing != "db") { - $table_status = table_status(); - if (!$table_status) { - echo "<p class='message'>" . lang('No tables.') . "\n"; - } else { - echo "<p id='tables'>\n"; - foreach ($table_status as $row) { - $name = $this->tableName($row); - if (isset($row["Engine"]) && strlen($name)) { // ignore views and tables without name - echo "<a href='" . h(ME) . 'select=' . urlencode($row["Name"]) . "'>$name</a><br>\n"; - } + $this->printTables($missing); + } + } + + function printTables($missing) { + if ($missing != "db") { + $table_status = table_status(); + if (!$table_status) { + echo "<p class='message'>" . lang('No tables.') . "\n"; + } else { + echo "<p id='tables'>\n"; + foreach ($table_status as $row) { + $name = $this->tableName($row); + if (isset($row["Engine"]) && strlen($name)) { // ignore views and tables without name + echo "<a href='" . h(ME) . 'select=' . urlencode($row["Name"]) . "'>$name</a><br>\n"; } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-09-22 10:51:47
|
Revision: 1124 http://adminer.svn.sourceforge.net/adminer/?rev=1124&view=rev Author: jakubvrana Date: 2009-09-22 10:51:40 +0000 (Tue, 22 Sep 2009) Log Message: ----------- Rename get_dbh to connection Modified Paths: -------------- trunk/adminer/call.inc.php trunk/adminer/create.inc.php trunk/adminer/database.inc.php trunk/adminer/db.inc.php trunk/adminer/download.inc.php trunk/adminer/dump.inc.php trunk/adminer/edit.inc.php trunk/adminer/event.inc.php trunk/adminer/include/adminer.inc.php trunk/adminer/include/auth.inc.php trunk/adminer/include/connect.inc.php trunk/adminer/include/editing.inc.php trunk/adminer/include/export.inc.php trunk/adminer/include/functions.inc.php trunk/adminer/include/mysql.inc.php trunk/adminer/privileges.inc.php trunk/adminer/processlist.inc.php trunk/adminer/select.inc.php trunk/adminer/sql.inc.php trunk/adminer/table.inc.php trunk/adminer/trigger.inc.php trunk/adminer/user.inc.php trunk/adminer/variables.inc.php trunk/changes.txt trunk/editor/include/adminer.inc.php trunk/editor/include/connect.inc.php trunk/editor/include/export.inc.php trunk/todo.txt Modified: trunk/adminer/call.inc.php =================================================================== --- trunk/adminer/call.inc.php 2009-09-22 10:33:56 UTC (rev 1123) +++ trunk/adminer/call.inc.php 2009-09-22 10:51:40 UTC (rev 1124) @@ -23,25 +23,25 @@ $val = "''"; } if (isset($out[$key])) { - $dbh->query("SET @" . idf_escape($field["field"]) . " = $val"); + $connection->query("SET @" . idf_escape($field["field"]) . " = $val"); } } $call[] = (isset($out[$key]) ? "@" . idf_escape($field["field"]) : $val); } - $result = $dbh->multi_query((isset($_GET["callf"]) ? "SELECT" : "CALL") . " " . idf_escape($PROCEDURE) . "(" . implode(", ", $call) . ")"); + $result = $connection->multi_query((isset($_GET["callf"]) ? "SELECT" : "CALL") . " " . idf_escape($PROCEDURE) . "(" . implode(", ", $call) . ")"); if (!$result) { - echo "<p class='error'>" . h($dbh->error) . "\n"; + echo "<p class='error'>" . h($connection->error) . "\n"; } else { do { - $result = $dbh->store_result(); + $result = $connection->store_result(); if (is_object($result)) { select($result); } else { - echo "<p class='message'>" . lang('Routine has been called, %d row(s) affected.', $dbh->affected_rows) . "\n"; + echo "<p class='message'>" . lang('Routine has been called, %d row(s) affected.', $connection->affected_rows) . "\n"; } - } while ($dbh->next_result()); + } while ($connection->next_result()); if ($out) { - select($dbh->query("SELECT " . implode(", ", $out))); + select($connection->query("SELECT " . implode(", ", $out))); } } } Modified: trunk/adminer/create.inc.php =================================================================== --- trunk/adminer/create.inc.php 2009-09-22 10:33:56 UTC (rev 1123) +++ trunk/adminer/create.inc.php 2009-09-22 10:51:40 UTC (rev 1124) @@ -62,9 +62,9 @@ $orig_field = next($orig_fields); } } - $status = "COMMENT=" . $dbh->quote($_POST["Comment"]) - . ($_POST["Engine"] && $_POST["Engine"] != $orig_status["Engine"] ? " ENGINE=" . $dbh->quote($_POST["Engine"]) : "") - . ($_POST["Collation"] && $_POST["Collation"] != $orig_status["Collation"] ? " COLLATE " . $dbh->quote($_POST["Collation"]) : "") + $status = "COMMENT=" . $connection->quote($_POST["Comment"]) + . ($_POST["Engine"] && $_POST["Engine"] != $orig_status["Engine"] ? " ENGINE=" . $connection->quote($_POST["Engine"]) : "") + . ($_POST["Collation"] && $_POST["Collation"] != $orig_status["Collation"] ? " COLLATE " . $connection->quote($_POST["Collation"]) : "") . (strlen($_POST["auto_increment"]) ? " AUTO_INCREMENT=" . intval($_POST["auto_increment"]) : "") ; if (in_array($_POST["partition_by"], $partition_by)) { @@ -79,7 +79,7 @@ ? " (" . implode(",", $partitions) . "\n)" : ($_POST["partitions"] ? " PARTITIONS " . intval($_POST["partitions"]) : "") ); - } elseif ($dbh->server_info >= 5.1 && strlen($TABLE)) { + } elseif ($connection->server_info >= 5.1 && strlen($TABLE)) { $status .= "\nREMOVE PARTITIONING"; } $location = ME . "table=" . urlencode($_POST["name"]); @@ -94,7 +94,7 @@ page_header((strlen($TABLE) ? lang('Alter table') : lang('Create table')), $error, array("table" => $TABLE), $TABLE); $engines = array(); -$result = $dbh->query("SHOW ENGINES"); +$result = $connection->query("SHOW ENGINES"); while ($row = $result->fetch_assoc()) { if ($row["Support"] == "YES" || $row["Support"] == "DEFAULT") { $engines[] = $row["Engine"]; @@ -123,13 +123,13 @@ } $row["fields"][] = $field; } - if ($dbh->server_info >= 5.1) { - $from = "FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = " . $dbh->quote(DB) . " AND TABLE_NAME = " . $dbh->quote($TABLE); - $result = $dbh->query("SELECT PARTITION_METHOD, PARTITION_ORDINAL_POSITION, PARTITION_EXPRESSION $from ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1"); + if ($connection->server_info >= 5.1) { + $from = "FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = " . $connection->quote(DB) . " AND TABLE_NAME = " . $connection->quote($TABLE); + $result = $connection->query("SELECT PARTITION_METHOD, PARTITION_ORDINAL_POSITION, PARTITION_EXPRESSION $from ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1"); list($row["partition_by"], $row["partitions"], $row["partition"]) = $result->fetch_row(); $row["partition_names"] = array(); $row["partition_values"] = array(); - $result = $dbh->query("SELECT PARTITION_NAME, PARTITION_DESCRIPTION $from AND PARTITION_NAME != '' ORDER BY PARTITION_ORDINAL_POSITION"); + $result = $connection->query("SELECT PARTITION_NAME, PARTITION_DESCRIPTION $from AND PARTITION_NAME != '' ORDER BY PARTITION_ORDINAL_POSITION"); while ($row1 = $result->fetch_assoc()) { $row["partition_names"][] = $row1["PARTITION_NAME"]; $row["partition_values"][] = $row1["PARTITION_DESCRIPTION"]; @@ -173,7 +173,7 @@ <input type="hidden" name="token" value="<?php echo $token; ?>"> <input type="submit" value="<?php echo lang('Save'); ?>"> <?php -if ($dbh->server_info >= 5.1) { +if ($connection->server_info >= 5.1) { $partition_table = ereg('RANGE|LIST', $row["partition_by"]); ?> <fieldset><legend><?php echo lang('Partition by'); ?></legend> Modified: trunk/adminer/database.inc.php =================================================================== --- trunk/adminer/database.inc.php 2009-09-22 10:33:56 UTC (rev 1123) +++ trunk/adminer/database.inc.php 2009-09-22 10:51:40 UTC (rev 1124) @@ -11,14 +11,14 @@ $last = ""; foreach ($dbs as $db) { if (count($dbs) == 1 || strlen($db)) { // ignore empty lines but always try to create single database - if (!queries("CREATE DATABASE " . idf_escape($db) . ($_POST["collation"] ? " COLLATE " . $dbh->quote($_POST["collation"]) : ""))) { + if (!queries("CREATE DATABASE " . idf_escape($db) . ($_POST["collation"] ? " COLLATE " . $connection->quote($_POST["collation"]) : ""))) { $failed = true; } $last = $db; } } if (query_redirect(queries(), ME . "db=" . urlencode($last), lang('Database has been created.'), !strlen(DB), false, $failed)) { - $result = $dbh->query("SHOW TABLES"); + $result = $connection->query("SHOW TABLES"); while ($row = $result->fetch_row()) { if (!queries("RENAME TABLE " . idf_escape($row[0]) . " TO " . idf_escape($_POST["name"]) . "." . idf_escape($row[0]))) { break; @@ -34,7 +34,7 @@ if (!$_POST["collation"]) { redirect(substr(ME, 0, -1)); } - query_redirect("ALTER DATABASE " . idf_escape($_POST["name"]) . " COLLATE " . $dbh->quote($_POST["collation"]), substr(ME, 0, -1), lang('Database has been altered.')); + query_redirect("ALTER DATABASE " . idf_escape($_POST["name"]) . " COLLATE " . $connection->quote($_POST["collation"]), substr(ME, 0, -1), lang('Database has been altered.')); } } @@ -48,15 +48,15 @@ $collate = $_POST["collation"]; } elseif (!strlen(DB)) { // propose database name with limited privileges - $result = $dbh->query("SHOW GRANTS"); + $result = $connection->query("SHOW GRANTS"); while ($row = $result->fetch_row()) { if (preg_match('~ ON (`(([^\\\\`]|``|\\\\.)*)%`\\.\\*)?~', $row[0], $match) && $match[1]) { $name = stripcslashes(idf_unescape($match[2])); break; } } -} elseif (($result = $dbh->query("SHOW CREATE DATABASE " . idf_escape(DB)))) { - $create = $dbh->result($result, 1); +} elseif (($result = $connection->query("SHOW CREATE DATABASE " . idf_escape(DB)))) { + $create = $connection->result($result, 1); if (preg_match('~ COLLATE ([^ ]+)~', $create, $match)) { $collate = $match[1]; } elseif (preg_match('~ CHARACTER SET ([^ ]+)~', $create, $match)) { Modified: trunk/adminer/db.inc.php =================================================================== --- trunk/adminer/db.inc.php 2009-09-22 10:33:56 UTC (rev 1123) +++ trunk/adminer/db.inc.php 2009-09-22 10:51:40 UTC (rev 1124) @@ -75,10 +75,10 @@ echo "</form>\n"; } -if ($dbh->server_info >= 5) { +if ($connection->server_info >= 5) { echo '<p><a href="' . h(ME) . 'view=">' . lang('Create view') . "</a>\n"; echo "<h3>" . lang('Routines') . "</h3>\n"; - $result = $dbh->query("SELECT * FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = " . $dbh->quote(DB)); + $result = $connection->query("SELECT * FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = " . $connection->quote(DB)); if ($result->num_rows) { echo "<table cellspacing='0'>\n"; while ($row = $result->fetch_assoc()) { @@ -92,7 +92,7 @@ echo '<p><a href="' . h(ME) . 'procedure=">' . lang('Create procedure') . '</a> <a href="' . h(ME) . 'function=">' . lang('Create function') . "</a>\n"; } -if ($dbh->server_info >= 5.1 && ($result = $dbh->query("SHOW EVENTS"))) { +if ($connection->server_info >= 5.1 && ($result = $connection->query("SHOW EVENTS"))) { echo "<h3>" . lang('Events') . "</h3>\n"; if ($result->num_rows) { echo "<table cellspacing='0'>\n"; Modified: trunk/adminer/download.inc.php =================================================================== --- trunk/adminer/download.inc.php 2009-09-22 10:33:56 UTC (rev 1123) +++ trunk/adminer/download.inc.php 2009-09-22 10:51:40 UTC (rev 1124) @@ -2,5 +2,5 @@ $TABLE = $_GET["download"]; header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=" . friendly_url("$TABLE-" . implode("_", $_GET["where"])) . "." . friendly_url($_GET["field"])); -echo $dbh->result($dbh->query("SELECT " . idf_escape($_GET["field"]) . " FROM " . idf_escape($TABLE) . " WHERE " . where($_GET) . " LIMIT 1")); +echo $connection->result($connection->query("SELECT " . idf_escape($_GET["field"]) . " FROM " . idf_escape($TABLE) . " WHERE " . where($_GET) . " LIMIT 1")); exit; // don't output footer Modified: trunk/adminer/dump.inc.php =================================================================== --- trunk/adminer/dump.inc.php 2009-09-22 10:33:56 UTC (rev 1123) +++ trunk/adminer/dump.inc.php 2009-09-22 10:51:40 UTC (rev 1124) @@ -7,7 +7,7 @@ dump("-- Adminer $VERSION dump SET NAMES utf8; SET foreign_key_checks = 0; -SET time_zone = " . $dbh->quote($dbh->result($dbh->query("SELECT @@time_zone"))) . "; +SET time_zone = " . $connection->quote($connection->result($connection->query("SELECT @@time_zone"))) . "; SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'; "); @@ -15,31 +15,31 @@ $style = $_POST["db_style"]; foreach ((strlen(DB) ? array(DB) : (array) $_POST["databases"]) as $db) { - if ($dbh->select_db($db)) { - if ($_POST["format"] == "sql" && ereg('CREATE', $style) && ($result = $dbh->query("SHOW CREATE DATABASE " . idf_escape($db)))) { + if ($connection->select_db($db)) { + if ($_POST["format"] == "sql" && ereg('CREATE', $style) && ($result = $connection->query("SHOW CREATE DATABASE " . idf_escape($db)))) { if ($style == "DROP+CREATE") { dump("DROP DATABASE IF EXISTS " . idf_escape($db) . ";\n"); } - $create = $dbh->result($result, 1); + $create = $connection->result($result, 1); dump(($style == "CREATE+ALTER" ? preg_replace('~^CREATE DATABASE ~', '\\0IF NOT EXISTS ', $create) : $create) . ";\n"); } if ($style && $_POST["format"] == "sql") { dump("USE " . idf_escape($db) . ";\n" . ($style == "CREATE+ALTER" ? "SET @adminer_alter = '';\n" : "") . "\n"); $out = ""; - if ($dbh->server_info >= 5) { + if ($connection->server_info >= 5) { foreach (array("FUNCTION", "PROCEDURE") as $routine) { - $result = $dbh->query("SHOW $routine STATUS WHERE Db = " . $dbh->quote($db)); + $result = $connection->query("SHOW $routine STATUS WHERE Db = " . $connection->quote($db)); while ($row = $result->fetch_assoc()) { $out .= ($style != 'DROP+CREATE' ? "DROP $routine IF EXISTS " . idf_escape($row["Name"]) . ";;\n" : "") - . $dbh->result($dbh->query("SHOW CREATE $routine " . idf_escape($row["Name"])), 2) . ";;\n\n"; + . $connection->result($connection->query("SHOW CREATE $routine " . idf_escape($row["Name"])), 2) . ";;\n\n"; } } } - if ($dbh->server_info >= 5.1) { - $result = $dbh->query("SHOW EVENTS"); + if ($connection->server_info >= 5.1) { + $result = $connection->query("SHOW EVENTS"); while ($row = $result->fetch_assoc()) { $out .= ($style != 'DROP+CREATE' ? "DROP EVENT IF EXISTS " . idf_escape($row["Name"]) . ";;\n" : "") - . $dbh->result($dbh->query("SHOW CREATE EVENT " . idf_escape($row["Name"])), 3) . ";;\n\n"; + . $connection->result($connection->query("SHOW CREATE EVENT " . idf_escape($row["Name"])), 3) . ";;\n\n"; } } if ($out) { @@ -97,11 +97,11 @@ FETCH tables INTO _table_name, _engine, _table_collation, _table_comment; IF NOT done THEN CASE _table_name"); - $result = $dbh->query($query); + $result = $connection->query($query); while ($row = $result->fetch_assoc()) { - $comment = $dbh->quote($row["ENGINE"] == "InnoDB" ? preg_replace('~(?:(.+); )?InnoDB free: .*~', '\\1', $row["TABLE_COMMENT"]) : $row["TABLE_COMMENT"]); + $comment = $connection->quote($row["ENGINE"] == "InnoDB" ? preg_replace('~(?:(.+); )?InnoDB free: .*~', '\\1', $row["TABLE_COMMENT"]) : $row["TABLE_COMMENT"]); dump(" - WHEN " . $dbh->quote($row["TABLE_NAME"]) . " THEN + WHEN " . $connection->quote($row["TABLE_NAME"]) . " THEN " . (isset($row["ENGINE"]) ? "IF _engine != '$row[ENGINE]' OR _table_collation != '$row[TABLE_COLLATION]' OR _table_comment != $comment THEN ALTER TABLE " . idf_escape($row["TABLE_NAME"]) . " ENGINE=$row[ENGINE] COLLATE=$row[TABLE_COLLATION] COMMENT=$comment; END IF" : "BEGIN END") . ";"); @@ -137,7 +137,7 @@ $db_style = array('', 'USE', 'DROP+CREATE', 'CREATE'); $table_style = array('', 'DROP+CREATE', 'CREATE'); $data_style = array('', 'TRUNCATE+INSERT', 'INSERT', 'INSERT+UPDATE'); -if ($dbh->server_info >= 5) { +if ($connection->server_info >= 5) { $db_style[] = 'CREATE+ALTER'; $table_style[] = 'CREATE+ALTER'; } Modified: trunk/adminer/edit.inc.php =================================================================== --- trunk/adminer/edit.inc.php 2009-09-22 10:33:56 UTC (rev 1123) +++ trunk/adminer/edit.inc.php 2009-09-22 10:51:40 UTC (rev 1124) @@ -56,7 +56,7 @@ } $row = array(); if ($select) { - $result = $dbh->query("SELECT " . implode(", ", $select) . " FROM " . idf_escape($TABLE) . " WHERE $where " . (isset($_GET["select"]) ? "HAVING COUNT(*) = 1" : "LIMIT 1")); + $result = $connection->query("SELECT " . implode(", ", $select) . " FROM " . idf_escape($TABLE) . " WHERE $where " . (isset($_GET["select"]) ? "HAVING COUNT(*) = 1" : "LIMIT 1")); $row = $result->fetch_assoc(); } } Modified: trunk/adminer/event.inc.php =================================================================== --- trunk/adminer/event.inc.php 2009-09-22 10:33:56 UTC (rev 1123) +++ trunk/adminer/event.inc.php 2009-09-22 10:51:40 UTC (rev 1124) @@ -8,17 +8,17 @@ query_redirect("DROP EVENT " . idf_escape($EVENT), substr(ME, 0, -1), lang('Event has been dropped.')); } elseif (in_array($_POST["INTERVAL_FIELD"], $intervals) && isset($statuses[$_POST["STATUS"]])) { $schedule = "\nON SCHEDULE " . ($_POST["INTERVAL_VALUE"] - ? "EVERY " . $dbh->quote($_POST["INTERVAL_VALUE"]) . " $_POST[INTERVAL_FIELD]" - . ($_POST["STARTS"] ? " STARTS " . $dbh->quote($_POST["STARTS"]) : "") - . ($_POST["ENDS"] ? " ENDS " . $dbh->quote($_POST["ENDS"]) : "") //! ALTER EVENT doesn't drop ENDS - MySQL bug #39173 - : "AT " . $dbh->quote($_POST["STARTS"]) + ? "EVERY " . $connection->quote($_POST["INTERVAL_VALUE"]) . " $_POST[INTERVAL_FIELD]" + . ($_POST["STARTS"] ? " STARTS " . $connection->quote($_POST["STARTS"]) : "") + . ($_POST["ENDS"] ? " ENDS " . $connection->quote($_POST["ENDS"]) : "") //! ALTER EVENT doesn't drop ENDS - MySQL bug #39173 + : "AT " . $connection->quote($_POST["STARTS"]) ) . " ON COMPLETION" . ($_POST["ON_COMPLETION"] ? "" : " NOT") . " PRESERVE" ; query_redirect((strlen($EVENT) ? "ALTER EVENT " . idf_escape($EVENT) . $schedule . ($EVENT != $_POST["EVENT_NAME"] ? "\nRENAME TO " . idf_escape($_POST["EVENT_NAME"]) : "") : "CREATE EVENT " . idf_escape($_POST["EVENT_NAME"]) . $schedule - ) . "\n" . $statuses[$_POST["STATUS"]] . " COMMENT " . $dbh->quote($_POST["EVENT_COMMENT"]) + ) . "\n" . $statuses[$_POST["STATUS"]] . " COMMENT " . $connection->quote($_POST["EVENT_COMMENT"]) . " DO\n$_POST[EVENT_DEFINITION]" , substr(ME, 0, -1), (strlen($EVENT) ? lang('Event has been altered.') : lang('Event has been created.'))); } @@ -30,7 +30,7 @@ if ($_POST) { $row = $_POST; } elseif (strlen($EVENT)) { - $result = $dbh->query("SELECT * FROM information_schema.EVENTS WHERE EVENT_SCHEMA = " . $dbh->quote(DB) . " AND EVENT_NAME = " . $dbh->quote($EVENT)); + $result = $connection->query("SELECT * FROM information_schema.EVENTS WHERE EVENT_SCHEMA = " . $connection->quote(DB) . " AND EVENT_NAME = " . $connection->quote($EVENT)); $row = $result->fetch_assoc(); } ?> Modified: trunk/adminer/include/adminer.inc.php =================================================================== --- trunk/adminer/include/adminer.inc.php 2009-09-22 10:33:56 UTC (rev 1123) +++ trunk/adminer/include/adminer.inc.php 2009-09-22 10:51:40 UTC (rev 1124) @@ -278,11 +278,11 @@ * @return array expressions to join by AND */ function selectSearchProcess($fields, $indexes) { - global $dbh; + global $connection; $return = array(); foreach ($indexes as $i => $index) { if ($index["type"] == "FULLTEXT" && strlen($_GET["fulltext"][$i])) { - $return[] = "MATCH (" . implode(", ", array_map('idf_escape', $index["columns"])) . ") AGAINST (" . $dbh->quote($_GET["fulltext"][$i]) . (isset($_GET["boolean"][$i]) ? " IN BOOLEAN MODE" : "") . ")"; + $return[] = "MATCH (" . implode(", ", array_map('idf_escape', $index["columns"])) . ") AGAINST (" . $connection->quote($_GET["fulltext"][$i]) . (isset($_GET["boolean"][$i]) ? " IN BOOLEAN MODE" : "") . ")"; } } foreach ((array) $_GET["where"] as $val) { @@ -404,9 +404,9 @@ * @return string expression to use in a query */ function processInput($field, $value, $function = "") { - global $dbh; + global $connection; $name = $field["field"]; - $return = $dbh->quote($value); + $return = $connection->quote($value); if (ereg('^(now|uuid)$', $function)) { $return = "$function()"; } elseif (ereg('^[+-]$', $function)) { @@ -470,9 +470,9 @@ * @return null */ function printTables($missing) { - global $dbh; - if ($missing != "db" && strlen(DB) && $dbh->select_db(DB)) { - $result = $dbh->query("SHOW TABLES"); + global $connection; + if ($missing != "db" && strlen(DB) && $connection->select_db(DB)) { + $result = $connection->query("SHOW TABLES"); if (!$result->num_rows) { echo "<p class='message'>" . lang('No tables.') . "\n"; } else { Modified: trunk/adminer/include/auth.inc.php =================================================================== --- trunk/adminer/include/auth.inc.php 2009-09-22 10:33:56 UTC (rev 1123) +++ trunk/adminer/include/auth.inc.php 2009-09-22 10:51:40 UTC (rev 1124) @@ -31,10 +31,10 @@ } function auth_error($exception = null) { - global $ignore, $dbh, $adminer; + global $ignore, $connection, $adminer; $username = $_SESSION["usernames"][$_GET["server"]]; unset($_SESSION["usernames"][$_GET["server"]]); - page_header(lang('Login'), (isset($username) ? h($exception ? $exception->getMessage() : (is_string($dbh) ? $dbh : lang('Invalid credentials.'))) : (isset($_POST["server"]) ? lang('Session support must be enabled.') : ($_POST ? lang('Session expired, please login again.') : ""))), null); + page_header(lang('Login'), (isset($username) ? h($exception ? $exception->getMessage() : (is_string($connection) ? $connection : lang('Invalid credentials.'))) : (isset($_POST["server"]) ? lang('Session support must be enabled.') : ($_POST ? lang('Session expired, please login again.') : ""))), null); echo "<form action='' method='post'>\n"; $adminer->loginForm($username); echo "<p>\n"; @@ -50,8 +50,8 @@ if (!isset($username)) { $username = $_GET["username"]; // default username can be passed in URL } -$dbh = (isset($username) ? connect() : ''); -if (is_string($dbh) || !$adminer->login($username, $_SESSION["passwords"][$_GET["server"]])) { +$connection = (isset($username) ? connect() : ''); +if (is_string($connection) || !$adminer->login($username, $_SESSION["passwords"][$_GET["server"]])) { auth_error(); exit; } Modified: trunk/adminer/include/connect.inc.php =================================================================== --- trunk/adminer/include/connect.inc.php 2009-09-22 10:33:56 UTC (rev 1123) +++ trunk/adminer/include/connect.inc.php 2009-09-22 10:51:40 UTC (rev 1124) @@ -1,6 +1,6 @@ <?php function connect_error() { - global $dbh, $VERSION; + global $connection, $VERSION; if (strlen(DB)) { page_header(lang('Database') . ": " . h(DB), lang('Invalid database.'), false); } else { @@ -13,13 +13,13 @@ ) as $key => $val) { echo "<p><a href='" . h(ME) . "$key='>$val</a>\n"; } - echo "<p>" . lang('MySQL version: %s through PHP extension %s', "<b" . ($dbh->server_info < 4.1 ? " class='binary'" : "") . ">$dbh->server_info</b>", "<b>$dbh->extension</b>") . "\n"; - echo "<p>" . lang('Logged as: %s', "<b>" . h($dbh->result($dbh->query("SELECT USER()"))) . "</b>") . "\n"; + echo "<p>" . lang('MySQL version: %s through PHP extension %s', "<b" . ($connection->server_info < 4.1 ? " class='binary'" : "") . ">$connection->server_info</b>", "<b>$connection->extension</b>") . "\n"; + echo "<p>" . lang('Logged as: %s', "<b>" . h($connection->result($connection->query("SELECT USER()"))) . "</b>") . "\n"; } page_footer("db"); } -if (!(strlen(DB) ? $dbh->select_db(DB) : isset($_GET["sql"]) || isset($_GET["dump"]) || isset($_GET["database"]) || isset($_GET["processlist"]) || isset($_GET["privileges"]) || isset($_GET["user"]) || isset($_GET["variables"]))) { +if (!(strlen(DB) ? $connection->select_db(DB) : isset($_GET["sql"]) || isset($_GET["dump"]) || isset($_GET["database"]) || isset($_GET["processlist"]) || isset($_GET["privileges"]) || isset($_GET["user"]) || isset($_GET["variables"]))) { if (strlen(DB)) { unset($_SESSION["databases"][$_GET["server"]]); } Modified: trunk/adminer/include/editing.inc.php =================================================================== --- trunk/adminer/include/editing.inc.php 2009-09-22 10:33:56 UTC (rev 1123) +++ trunk/adminer/include/editing.inc.php 2009-09-22 10:51:40 UTC (rev 1124) @@ -4,7 +4,7 @@ * @param Min_DB connection to examine indexes * @return null */ -function select($result, $dbh2 = null) { +function select($result, $connection2 = null) { if (!$result->num_rows) { echo "<p class='message'>" . lang('No rows.') . "\n"; } else { @@ -24,7 +24,7 @@ if (!isset($indexes[$field->orgtable])) { // find primary key in each table $indexes[$field->orgtable] = array(); - foreach (indexes($field->orgtable, $dbh2) as $index) { + foreach (indexes($field->orgtable, $connection2) as $index) { if ($index["type"] == "PRIMARY") { $indexes[$field->orgtable] = array_flip($index["columns"]); break; @@ -112,21 +112,21 @@ } function process_type($field, $collate = "COLLATE") { - global $dbh, $enum_length, $unsigned; + global $connection, $enum_length, $unsigned; return " $field[type]" . ($field["length"] && !ereg('^date|time$', $field["type"]) ? "(" . process_length($field["length"]) . ")" : "") . (ereg('int|float|double|decimal', $field["type"]) && in_array($field["unsigned"], $unsigned) ? " $field[unsigned]" : "") - . (ereg('char|text|enum|set', $field["type"]) && $field["collation"] ? " $collate " . $dbh->quote($field["collation"]) : "") + . (ereg('char|text|enum|set', $field["type"]) && $field["collation"] ? " $collate " . $connection->quote($field["collation"]) : "") ; } function process_field($field, $type_field) { - global $dbh; + global $connection; $default = $field["default"] . ($field["on_update"] ? " ON UPDATE $field[on_update]" : ""); return idf_escape($field["field"]) . process_type($type_field) . ($field["null"] ? " NULL" : " NOT NULL") // NULL for timestamp - . (!isset($field["default"]) || $field["auto_increment"] || ereg('text|blob', $field["type"]) ? "" : " DEFAULT " . ($field["type"] == "timestamp" && eregi("^CURRENT_TIMESTAMP( on update CURRENT_TIMESTAMP)?$", $default) ? $default : $dbh->quote($default))) - . " COMMENT " . $dbh->quote($field["comment"]) + . (!isset($field["default"]) || $field["auto_increment"] || ereg('text|blob', $field["type"]) ? "" : " DEFAULT " . ($field["type"] == "timestamp" && eregi("^CURRENT_TIMESTAMP( on update CURRENT_TIMESTAMP)?$", $default) ? $default : $connection->quote($default))) + . " COMMENT " . $connection->quote($field["comment"]) ; } @@ -233,11 +233,11 @@ } function routine($name, $type) { - global $dbh, $enum_length, $inout, $types; + global $connection, $enum_length, $inout, $types; $aliases = array("bit" => "tinyint", "bool" => "tinyint", "boolean" => "tinyint", "integer" => "int", "double precision" => "float", "real" => "float", "dec" => "decimal", "numeric" => "decimal", "fixed" => "decimal", "national char" => "char", "national varchar" => "varchar"); $type_pattern = "(" . implode("|", array_keys($types + $aliases)) . ")(?:\\s*\\(((?:[^'\")]*|$enum_length)+)\\))?\\s*(zerofill\\s*)?(unsigned(?:\\s+zerofill)?)?(?:\\s*(?:CHARSET|CHARACTER\\s+SET)\\s*['\"]?([^'\"\\s]+)['\"]?)?"; $pattern = "\\s*(" . ($type == "FUNCTION" ? "" : implode("|", $inout)) . ")?\\s*(?:`((?:[^`]|``)*)`\\s*|\\b(\\S+)\\s+)$type_pattern"; - $create = $dbh->result($dbh->query("SHOW CREATE $type " . idf_escape($name)), 2); + $create = $connection->result($connection->query("SHOW CREATE $type " . idf_escape($name)), 2); preg_match("~\\(((?:$pattern\\s*,?)*)\\)" . ($type == "FUNCTION" ? "\\s*RETURNS\\s+$type_pattern" : "") . "\\s*(.*)~is", $create, $match); $fields = array(); preg_match_all("~$pattern\\s*,?~is", $match[1], $matches, PREG_SET_ORDER); Modified: trunk/adminer/include/export.inc.php =================================================================== --- trunk/adminer/include/export.inc.php 2009-09-22 10:33:56 UTC (rev 1123) +++ trunk/adminer/include/export.inc.php 2009-09-22 10:51:40 UTC (rev 1124) @@ -10,9 +10,9 @@ } function dump_triggers($table, $style) { - global $dbh; - if ($_POST["format"] == "sql" && $style && $dbh->server_info >= 5) { - $result = $dbh->query("SHOW TRIGGERS LIKE " . $dbh->quote(addcslashes($table, "%_"))); + global $connection; + if ($_POST["format"] == "sql" && $style && $connection->server_info >= 5) { + $result = $connection->query("SHOW TRIGGERS LIKE " . $connection->quote(addcslashes($table, "%_"))); if ($result->num_rows) { $s = "\nDELIMITER ;;\n"; while ($row = $result->fetch_assoc()) { @@ -25,24 +25,24 @@ } function dump_table($table, $style, $is_view = false) { - global $dbh; + global $connection; if ($_POST["format"] == "csv") { dump("\xef\xbb\xbf"); // UTF-8 byte order mark if ($style) { dump_csv(array_keys(fields($table))); } } elseif ($style) { - $result = $dbh->query("SHOW CREATE TABLE " . idf_escape($table)); + $result = $connection->query("SHOW CREATE TABLE " . idf_escape($table)); if ($result) { if ($style == "DROP+CREATE") { dump("DROP " . ($is_view ? "VIEW" : "TABLE") . " IF EXISTS " . idf_escape($table) . ";\n"); } - $create = $dbh->result($result, 1); + $create = $connection->result($result, 1); dump(($style != "CREATE+ALTER" ? $create : ($is_view ? substr_replace($create, " OR REPLACE", 6, 0) : substr_replace($create, " IF NOT EXISTS", 12, 0))) . ";\n\n"); } if ($style == "CREATE+ALTER" && !$is_view) { // create procedure which iterates over original columns and adds new and removes old - $query = "SELECT COLUMN_NAME, COLUMN_DEFAULT, IS_NULLABLE, COLLATION_NAME, COLUMN_TYPE, EXTRA, COLUMN_COMMENT FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = " . $dbh->quote($table) . " ORDER BY ORDINAL_POSITION"; + $query = "SELECT COLUMN_NAME, COLUMN_DEFAULT, IS_NULLABLE, COLLATION_NAME, COLUMN_TYPE, EXTRA, COLUMN_COMMENT FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = " . $connection->quote($table) . " ORDER BY ORDINAL_POSITION"; dump("DELIMITER ;; CREATE PROCEDURE adminer_alter (INOUT alter_command text) BEGIN DECLARE _column_name, _collation_name, _column_type, after varchar(64) DEFAULT ''; @@ -53,18 +53,18 @@ DECLARE done, set_after bool DEFAULT 0; DECLARE add_columns text DEFAULT '"); $fields = array(); - $result = $dbh->query($query); + $result = $connection->query($query); $after = ""; while ($row = $result->fetch_assoc()) { - $row["default"] = (isset($row["COLUMN_DEFAULT"]) ? $dbh->quote($row["COLUMN_DEFAULT"]) : "NULL"); - $row["after"] = $dbh->quote($after); //! rgt AFTER lft, lft AFTER id doesn't work + $row["default"] = (isset($row["COLUMN_DEFAULT"]) ? $connection->quote($row["COLUMN_DEFAULT"]) : "NULL"); + $row["after"] = $connection->quote($after); //! rgt AFTER lft, lft AFTER id doesn't work $row["alter"] = escape_string(idf_escape($row["COLUMN_NAME"]) . " $row[COLUMN_TYPE]" . ($row["COLLATION_NAME"] ? " COLLATE $row[COLLATION_NAME]" : "") . (isset($row["COLUMN_DEFAULT"]) ? " DEFAULT $row[default]" : "") . ($row["IS_NULLABLE"] == "YES" ? "" : " NOT NULL") . ($row["EXTRA"] ? " $row[EXTRA]" : "") - . ($row["COLUMN_COMMENT"] ? " COMMENT " . $dbh->quote($row["COLUMN_COMMENT"]) : "") + . ($row["COLUMN_COMMENT"] ? " COMMENT " . $connection->quote($row["COLUMN_COMMENT"]) : "") . ($after ? " AFTER " . idf_escape($after) : " FIRST") ); dump(", ADD $row[alter]"); @@ -83,9 +83,9 @@ CASE _column_name"); foreach ($fields as $row) { dump(" - WHEN " . $dbh->quote($row["COLUMN_NAME"]) . " THEN + WHEN " . $connection->quote($row["COLUMN_NAME"]) . " THEN SET add_columns = REPLACE(add_columns, ', ADD $row[alter]', ''); - IF NOT (_column_default <=> $row[default]) OR _is_nullable != '$row[IS_NULLABLE]' OR _collation_name != '$row[COLLATION_NAME]' OR _column_type != '$row[COLUMN_TYPE]' OR _extra != '$row[EXTRA]' OR _column_comment != " . $dbh->quote($row["COLUMN_COMMENT"]) . " OR after != $row[after] THEN + IF NOT (_column_default <=> $row[default]) OR _is_nullable != '$row[IS_NULLABLE]' OR _collation_name != '$row[COLLATION_NAME]' OR _column_type != '$row[COLUMN_TYPE]' OR _extra != '$row[EXTRA]' OR _column_comment != " . $connection->quote($row["COLUMN_COMMENT"]) . " OR after != $row[after] THEN SET @alter_table = CONCAT(@alter_table, ', MODIFY $row[alter]'); END IF;"); //! don't replace in comment } @@ -115,13 +115,13 @@ } function dump_data($table, $style, $select = "") { - global $dbh, $max_packet; + global $connection, $max_packet; if ($style) { if ($_POST["format"] != "csv" && $style == "TRUNCATE+INSERT") { dump("TRUNCATE " . idf_escape($table) . ";\n"); } $fields = fields($table); - $result = $dbh->query(($select ? $select : "SELECT * FROM " . idf_escape($table)), 1); // 1 - MYSQLI_USE_RESULT //! enum and set as numbers, microtime + $result = $connection->query(($select ? $select : "SELECT * FROM " . idf_escape($table)), 1); // 1 - MYSQLI_USE_RESULT //! enum and set as numbers, microtime if ($result) { $insert = ""; $buffer = ""; @@ -133,7 +133,7 @@ $insert = "INSERT INTO " . idf_escape($table) . " (" . implode(", ", array_map('idf_escape', array_keys($row))) . ") VALUES"; } foreach ($row as $key => $val) { - $row[$key] = (isset($val) ? (ereg('int|float|double|decimal', $fields[$key]["type"]) ? $val : $dbh->quote($val)) : "NULL"); //! columns looking like functions + $row[$key] = (isset($val) ? (ereg('int|float|double|decimal', $fields[$key]["type"]) ? $val : $connection->quote($val)) : "NULL"); //! columns looking like functions } $s = implode(",\t", $row); if ($style == "INSERT+UPDATE") { Modified: trunk/adminer/include/functions.inc.php =================================================================== --- trunk/adminer/include/functions.inc.php 2009-09-22 10:33:56 UTC (rev 1123) +++ trunk/adminer/include/functions.inc.php 2009-09-22 10:51:40 UTC (rev 1124) @@ -2,10 +2,10 @@ /** Get database connection * @return Min_DB */ -function get_dbh() { - // can be used in customization, $dbh is minified - global $dbh; - return $dbh; +function connection() { + // can be used in customization, $connection is minified + global $connection; + return $connection; } /** Escape database identifier @@ -87,9 +87,9 @@ * @return array */ function get_vals($query, $column = 0) { - global $dbh; + global $connection; $return = array(); - $result = $dbh->query($query); + $result = $connection->query($query); if ($result) { while ($row = $result->fetch_row()) { $return[] = $row[$column]; @@ -130,11 +130,11 @@ * @return string */ function where($where) { - global $dbh; + global $connection; $return = array(); foreach ((array) $where["where"] as $key => $val) { $key = bracket_escape($key, "back"); - $return[] = (preg_match('~^[A-Z0-9_]+\\(`(?:[^`]|``)+`\\)$~', $key) ? $key : idf_escape($key)) . " = BINARY " . $dbh->quote($val); //! enum and set, columns looking like functions + $return[] = (preg_match('~^[A-Z0-9_]+\\(`(?:[^`]|``)+`\\)$~', $key) ? $key : idf_escape($key)) . " = BINARY " . $connection->quote($val); //! enum and set, columns looking like functions } foreach ((array) $where["null"] as $key) { $key = bracket_escape($key, "back"); @@ -194,16 +194,16 @@ * @return bool */ function query_redirect($query, $location, $message, $redirect = true, $execute = true, $failed = false) { - global $dbh, $error, $adminer; + global $connection, $error, $adminer; $sql = ""; if ($query) { $sql = $adminer->messageQuery($query); } if ($execute) { - $failed = !$dbh->query($query); + $failed = !$connection->query($query); } if ($failed) { - $error = h($dbh->error) . $sql; + $error = h($connection->error) . $sql; return false; } if ($redirect) { @@ -217,14 +217,14 @@ * @return Min_Result */ function queries($query = null) { - global $dbh; + global $connection; static $queries = array(); if (!isset($query)) { // return executed queries without parameter return implode(";\n", $queries); } $queries[] = $query; - return $dbh->query($query); + return $connection->query($query); } /** Remove parameter from query string @@ -413,7 +413,7 @@ * @return string */ function process_input($field) { - global $dbh, $adminer; + global $connection, $adminer; $idf = bracket_escape($field["field"]); $function = $_POST["function"][$idf]; $value = $_POST["fields"][$idf]; @@ -430,7 +430,7 @@ if (!is_string($file)) { return false; //! report errors } - return "_binary" . $dbh->quote($file); + return "_binary" . $connection->quote($file); } else { return $adminer->processInput($field, $value, $function); } Modified: trunk/adminer/include/mysql.inc.php =================================================================== --- trunk/adminer/include/mysql.inc.php 2009-09-22 10:33:56 UTC (rev 1123) +++ trunk/adminer/include/mysql.inc.php 2009-09-22 10:51:40 UTC (rev 1124) @@ -145,14 +145,14 @@ */ function connect() { global $adminer; - $dbh = new Min_DB; + $connection = new Min_DB; $credentials = $adminer->credentials(); - if ($dbh->connect($credentials[0], $credentials[1], $credentials[2])) { - $dbh->query("SET SQL_QUOTE_SHOW_CREATE=1"); - $dbh->query("SET NAMES utf8"); - return $dbh; + if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) { + $connection->query("SET SQL_QUOTE_SHOW_CREATE=1"); + $connection->query("SET NAMES utf8"); + return $connection; } - return $dbh->error; + return $connection->error; } /** Get cached list of databases @@ -177,9 +177,9 @@ * @return array */ function table_status($name = "") { - global $dbh; + global $connection; $return = array(); - $result = $dbh->query("SHOW TABLE STATUS" . (strlen($name) ? " LIKE " . $dbh->quote(addcslashes($name, "%_")) : "")); + $result = $connection->query("SHOW TABLE STATUS" . (strlen($name) ? " LIKE " . $connection->quote(addcslashes($name, "%_")) : "")); while ($row = $result->fetch_assoc()) { if ($row["Engine"] == "InnoDB") { // ignore internal comment, unnecessary since MySQL 5.1.21 @@ -208,9 +208,9 @@ * @return array array($name => array("field" => , "full_type" => , "type" => , "length" => , "unsigned" => , "default" => , "null" => , "auto_increment" => , "on_update" => , "collation" => , "privileges" => , "comment" => , "primary" => )) */ function fields($table) { - global $dbh; + global $connection; $return = array(); - $result = $dbh->query("SHOW FULL COLUMNS FROM " . idf_escape($table)); + $result = $connection->query("SHOW FULL COLUMNS FROM " . idf_escape($table)); if ($result) { while ($row = $result->fetch_assoc()) { preg_match('~^([^( ]+)(?:\\((.+)\\))?( unsigned)?( zerofill)?$~', $row["Type"], $match); @@ -239,13 +239,13 @@ * @param string Min_DB to use * @return array array($key_name => array("type" => , "columns" => array(), "lengths" => array())) */ -function indexes($table, $dbh2 = null) { - global $dbh; - if (!is_object($dbh2)) { // use the main connection if the separate connection is unavailable - $dbh2 = $dbh; +function indexes($table, $connection2 = null) { + global $connection; + if (!is_object($connection2)) { // use the main connection if the separate connection is unavailable + $connection2 = $connection; } $return = array(); - $result = $dbh2->query("SHOW INDEX FROM " . idf_escape($table)); + $result = $connection2->query("SHOW INDEX FROM " . idf_escape($table)); if ($result) { while ($row = $result->fetch_assoc()) { $return[$row["Key_name"]]["type"] = ($row["Key_name"] == "PRIMARY" ? "PRIMARY" : ($row["Index_type"] == "FULLTEXT" ? "FULLTEXT" : ($row["Non_unique"] ? "INDEX" : "UNIQUE"))); @@ -261,12 +261,12 @@ * @return array array($name => array("db" => , "table" => , "source" => array(), "target" => array(), "on_delete" => , "on_update" => )) */ function foreign_keys($table) { - global $dbh, $on_actions; + global $connection, $on_actions; static $pattern = '(?:[^`]|``)+'; $return = array(); - $result = $dbh->query("SHOW CREATE TABLE " . idf_escape($table)); + $result = $connection->query("SHOW CREATE TABLE " . idf_escape($table)); if ($result) { - $create_table = $dbh->result($result, 1); + $create_table = $connection->result($result, 1); preg_match_all("~CONSTRAINT `($pattern)` FOREIGN KEY \\(((?:`$pattern`,? ?)+)\\) REFERENCES `($pattern)`(?:\\.`($pattern)`)? \\(((?:`$pattern`,? ?)+)\\)(?: ON DELETE (" . implode("|", $on_actions) . "))?(?: ON UPDATE (" . implode("|", $on_actions) . "))?~", $create_table, $matches, PREG_SET_ORDER); foreach ($matches as $match) { preg_match_all("~`($pattern)`~", $match[2], $source); @@ -289,17 +289,17 @@ * @return array array("select" => ) */ function view($name) { - global $dbh; - return array("select" => preg_replace('~^(?:[^`]|`[^`]*`)* AS ~U', '', $dbh->result($dbh->query("SHOW CREATE VIEW " . idf_escape($name)), 1))); + global $connection; + return array("select" => preg_replace('~^(?:[^`]|`[^`]*`)* AS ~U', '', $connection->result($connection->query("SHOW CREATE VIEW " . idf_escape($name)), 1))); } /** Get sorted grouped list of collations * @return array */ function collations() { - global $dbh; + global $connection; $return = array(); - $result = $dbh->query("SHOW COLLATION"); + $result = $connection->query("SHOW COLLATION"); while ($row = $result->fetch_assoc()) { $return[$row["Charset"]][] = $row["Collation"]; } @@ -315,8 +315,8 @@ * @return string */ function escape_string($val) { - global $dbh; - return substr($dbh->quote($val), 1, -1); + global $connection; + return substr($connection->quote($val), 1, -1); } /** Find out if database is information_schema @@ -324,8 +324,8 @@ * @return bool */ function information_schema($db) { - global $dbh; - return ($dbh->server_info >= 5 && $db == "information_schema"); + global $connection; + return ($connection->server_info >= 5 && $db == "information_schema"); } // value means maximum unsigned length Modified: trunk/adminer/privileges.inc.php =================================================================== --- trunk/adminer/privileges.inc.php 2009-09-22 10:33:56 UTC (rev 1123) +++ trunk/adminer/privileges.inc.php 2009-09-22 10:51:40 UTC (rev 1124) @@ -1,7 +1,7 @@ <?php page_header(lang('Privileges')); -$result = $dbh->query("SELECT User, Host FROM mysql.user ORDER BY Host, User"); +$result = $connection->query("SELECT User, Host FROM mysql.user ORDER BY Host, User"); if (!$result) { ?> <form action=""><p> @@ -14,7 +14,7 @@ </form> <?php // list logged user, information_schema.USER_PRIVILEGES lists just the current user too - $result = $dbh->query("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', 1) AS User, SUBSTRING_INDEX(CURRENT_USER, '@', -1) AS Host"); + $result = $connection->query("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', 1) AS User, SUBSTRING_INDEX(CURRENT_USER, '@', -1) AS Host"); } echo "<table cellspacing='0'>\n"; echo "<thead><tr><th> <th>" . lang('Username') . "<th>" . lang('Server') . "</thead>\n"; Modified: trunk/adminer/processlist.inc.php =================================================================== --- trunk/adminer/processlist.inc.php 2009-09-22 10:33:56 UTC (rev 1123) +++ trunk/adminer/processlist.inc.php 2009-09-22 10:51:40 UTC (rev 1124) @@ -15,7 +15,7 @@ <form action="" method="post"> <table cellspacing="0" onclick="table_click(event);"> <?php -$result = $dbh->query("SHOW PROCESSLIST"); +$result = $connection->query("SHOW PROCESSLIST"); for ($i=0; $row = $result->fetch_assoc(); $i++) { if (!$i) { echo "<thead><tr lang='en'><th> <th>" . implode("<th>", array_keys($row)) . "</thead>\n"; Modified: trunk/adminer/select.inc.php =================================================================== --- trunk/adminer/select.inc.php 2009-09-22 10:33:56 UTC (rev 1123) +++ trunk/adminer/select.inc.php 2009-09-22 10:51:40 UTC (rev 1124) @@ -74,7 +74,7 @@ if ($_POST["delete"] || $set) { if ($_POST["all"] || ($primary === array() && $_POST["check"])) { $result = queries($command . ($_POST["all"] ? ($where ? "\nWHERE " . implode(" AND ", $where) : "") : "\nWHERE $where_check")); - $affected = $dbh->affected_rows; + $affected = $connection->affected_rows; } else { foreach ((array) $_POST["check"] as $val) { // where is not unique so OR can't be used @@ -82,7 +82,7 @@ if (!$result) { break; } - $affected += $dbh->affected_rows; + $affected += $connection->affected_rows; } } } @@ -103,7 +103,7 @@ } else { $set = ""; foreach ($matches2[1] as $i => $col) { - $set .= ", " . idf_escape($cols[$i]) . " = " . (!strlen($col) && $fields[$cols[$i]]["null"] ? "NULL" : $dbh->quote(str_replace('""', '"', preg_replace('~^"|"$~', '', $col)))); + $set .= ", " . idf_escape($cols[$i]) . " = " . (!strlen($col) && $fields[$cols[$i]]["null"] ? "NULL" : $connection->quote(str_replace('""', '"', preg_replace('~^"|"$~', '', $col)))); } $set = substr($set, 1); $result = queries("INSERT INTO " . idf_escape($_GET["select"]) . " SET$set ON DUPLICATE KEY UPDATE$set"); @@ -136,7 +136,7 @@ $adminer->selectLinks($table_status, $set); if (!$columns) { - echo "<p class='error'>" . lang('Unable to select the table') . ($fields ? "" : ": " . h($dbh->error)) . ".\n"; + echo "<p class='error'>" . lang('Unable to select the table') . ($fields ? "" : ": " . h($connection->error)) . ".\n"; } else { echo "<form action='' id='form'>\n"; echo "<div style='display: none;'>"; @@ -155,9 +155,9 @@ $query = "SELECT " . (intval($limit) && $group && count($group) < count($select) ? "SQL_CALC_FOUND_ROWS " : "") . $from . $group_by . (strlen($limit) ? " LIMIT " . intval($limit) . (intval($_GET["page"]) ? " OFFSET " . ($limit * $_GET["page"]) : "") : ""); echo $adminer->selectQuery($query); - $result = $dbh->query($query); + $result = $connection->query($query); if (!$result) { - echo "<p class='error'>" . h($dbh->error) . "\n"; + echo "<p class='error'>" . h($connection->error) . "\n"; } else { $email_fields = array(); echo "<form action='' method='post' enctype='multipart/form-data'>\n"; @@ -170,7 +170,7 @@ } // use count($rows) without LIMIT, COUNT(*) without grouping, FOUND_ROWS otherwise (slowest) $found_rows = (intval($limit) && $group && count($group) < count($select) - ? $dbh->result($dbh->query(" SELECT FOUND_ROWS()")) // space to allow mysql.trace_mode + ? $connection->result($connection->query(" SELECT FOUND_ROWS()")) // space to allow mysql.trace_mode : count($rows) ); @@ -266,7 +266,7 @@ // slow with big tables ob_flush(); flush(); - $found_rows = $dbh->result($dbh->query("SELECT COUNT(*) FROM " . idf_escape($TABLE) . ($where ? " WHERE " . implode(" AND ", $where) : ""))); + $found_rows = $connection->result($connection->query("SELECT COUNT(*) FROM " . idf_escape($TABLE) . ($where ? " WHERE " . implode(" AND ", $where) : ""))); } echo "<p>"; if (intval($limit) && $found_rows > $limit) { Modified: trunk/adminer/sql.inc.php =================================================================== --- trunk/adminer/sql.inc.php 2009-09-22 10:33:56 UTC (rev 1123) +++ trunk/adminer/sql.inc.php 2009-09-22 10:51:40 UTC (rev 1124) @@ -33,9 +33,9 @@ $delimiter = ";"; $offset = 0; $empty = true; - $dbh2 = (strlen(DB) ? connect() : null); // connection for exploring indexes and EXPLAIN (to not replace FOUND_ROWS()) //! PDO - silent error - if (is_object($dbh2)) { - $dbh2->select_db(DB); + $connection2 = (strlen(DB) ? connect() : null); // connection for exploring indexes and EXPLAIN (to not replace FOUND_ROWS()) //! PDO - silent error + if (is_object($connection2)) { + $connection2->select_db(DB); } $explain = 1; while (strlen($query)) { @@ -60,8 +60,8 @@ flush(); // can take a long time - show the running query $start = explode(" ", microtime()); // microtime(true) is available since PHP 5 //! don't allow changing of character_set_results, convert encoding of displayed query - if (!$dbh->multi_query($q)) { - echo "<p class='error'>" . lang('Error in query') . ": " . h($dbh->error) . "\n"; + if (!$connection->multi_query($q)) { + echo "<p class='error'>" . lang('Error in query') . ": " . h($connection->error) . "\n"; if ($_POST["error_stops"]) { break; } @@ -69,15 +69,15 @@ $end = explode(" ", microtime()); echo "<p class='time'>" . lang('%.3f s', max(0, $end[0] - $start[0] + $end[1] - $start[1])) . "</p>\n"; do { - $result = $dbh->store_result(); + $result = $connection->store_result(); if (is_object($result)) { - select($result, $dbh2); + select($result, $connection2); echo "<p>" . lang('%d row(s)', $result->num_rows); - if ($dbh2 && preg_match("~^$space*SELECT$space+~isU", $q)) { + if ($connection2 && preg_match("~^$space*SELECT$space+~isU", $q)) { $id = "explain-$explain"; echo ", <a href='#$id' onclick=\"return !toggle('$id');\">EXPLAIN</a>\n"; echo "<div id='$id' class='hidden'>\n"; - select($dbh2->query("EXPLAIN $q"), $dbh2); + select($connection2->query("EXPLAIN $q"), $connection2); echo "</div>\n"; $explain++; } @@ -85,10 +85,10 @@ if (preg_match("~^$space*$alter_database", $query)) { $databases = null; // clear cache } - echo "<p class='message'>" . lang('Query executed OK, %d row(s) affected.', $dbh->affected_rows) . "\n"; + echo "<p class='message'>" . lang('Query executed OK, %d row(s) affected.', $connection->affected_rows) . "\n"; } unset($result); // free resultset - } while ($dbh->next_result()); + } while ($connection->next_result()); } $query = substr($query, $offset); $offset = 0; Modified: trunk/adminer/table.inc.php =================================================================== --- trunk/adminer/table.inc.php 2009-09-22 10:33:56 UTC (rev 1123) +++ trunk/adminer/table.inc.php 2009-09-22 10:51:40 UTC (rev 1124) @@ -1,8 +1,8 @@ <?php $TABLE = $_GET["table"]; -$result = $dbh->query("SHOW FULL COLUMNS FROM " . idf_escape($TABLE)); +$result = $connection->query("SHOW FULL COLUMNS FROM " . idf_escape($TABLE)); if (!$result) { - $error = h($dbh->error); + $error = h($connection->error); } $table_status = ($result ? table_status($TABLE) : array()); @@ -55,9 +55,9 @@ echo '<p><a href="' . h(ME) . 'foreign=' . urlencode($TABLE) . '">' . lang('Add foreign key') . "</a>\n"; } - if ($dbh->server_info >= 5) { + if ($connection->server_info >= 5) { echo "<h3>" . lang('Triggers') . "</h3>\n"; - $result = $dbh->query("SHOW TRIGGERS LIKE " . $dbh->quote(addcslashes($TABLE, "%_"))); + $result = $connection->query("SHOW TRIGGERS LIKE " . $connection->quote(addcslashes($TABLE, "%_"))); if ($result->num_rows) { echo "<table cellspacing='0'>\n"; while ($row = $result->fetch_assoc()) { Modified: trunk/adminer/trigger.inc.php =================================================================== --- trunk/adminer/trigger.inc.php 2009-09-22 10:33:56 UTC (rev 1123) +++ trunk/adminer/trigger.inc.php 2009-09-22 10:51:40 UTC (rev 1124) @@ -21,7 +21,7 @@ if ($_POST) { $row = $_POST; } elseif (strlen($_GET["name"])) { - $result = $dbh->query("SHOW TRIGGERS WHERE `Trigger` = " . $dbh->quote($_GET["name"])); + $result = $connection->query("SHOW TRIGGERS WHERE `Trigger` = " . $connection->quote($_GET["name"])); $row = $result->fetch_assoc(); } ?> Modified: trunk/adminer/user.inc.php =================================================================== --- trunk/adminer/user.inc.php 2009-09-22 10:33:56 UTC (rev 1123) +++ trunk/adminer/user.inc.php 2009-09-22 10:51:40 UTC (rev 1124) @@ -1,7 +1,7 @@ <?php $USER = $_GET["user"]; $privileges = array("" => array("All privileges" => "")); -$result = $dbh->query("SHOW PRIVILEGES"); +$result = $connection->query("SHOW PRIVILEGES"); while ($row = $result->fetch_assoc()) { foreach (explode(",", ($row["Privilege"] == "Grant option" ? "" : $row["Context"])) as $context) { $privileges[$context][$row["Privilege"]] = $row["Comment"]; @@ -27,7 +27,7 @@ } $grants = array(); $old_pass = ""; -if (isset($_GET["host"]) && ($result = $dbh->query("SHOW GRANTS FOR " . $dbh->quote($USER) . "@" . $dbh->quote($_GET["host"])))) { //! use information_schema for MySQL 5 - column names in column privileges are not escaped +if (isset($_GET["host"]) && ($result = $connection->query("SHOW GRANTS FOR " . $connection->quote($USER) . "@" . $connection->quote($_GET["host"])))) { //! use information_schema for MySQL 5 - column names in column privileges are not escaped while ($row = $result->fetch_row()) { if (preg_match('~GRANT (.*) ON (.*) TO ~', $row[0], $match) && preg_match_all('~ *([^(,]*[^ ,(])( *\\([^)]+\\))?~', $match[1], $matches, PREG_SET_ORDER)) { //! escape the part between ON and TO foreach ($matches as $val) { @@ -44,16 +44,16 @@ } if ($_POST && !$error) { - $old_user = (isset($_GET["host"]) ? $dbh->quote($USER) . "@" . $dbh->quote($_GET["host"]) : "''"); - $new_user = $dbh->quote($_POST["user"]) . "@" . $dbh->quote($_POST["host"]); // if $_GET["host"] is not set then $new_user is always different - $pass = $dbh->quote($_POST["pass"]); + $old_user = (isset($_GET["host"]) ? $connection->quote($USER) . "@" . $connection->quote($_GET["host"]) : "''"); + $new_user = $connection->quote($_POST["user"]) . "@" . $connection->quote($_POST["host"]); // if $_GET["host"] is not set then $new_user is always different + $pass = $connection->quote($_POST["pass"]); if ($_POST["drop"]) { query_redirect("DROP USER $old_user", ME . "privileges=", lang('User has been dropped.')); } else { if ($old_user == $new_user) { queries("SET PASSWORD FOR $new_user = " . ($_POST["hashed"] ? $pass : "PASSWORD($pass)")); } else { - $error = !queries(($dbh->server_info < 5 ? "GRANT USAGE ON *.* TO" : "CREATE USER") . " $new_user IDENTIFIED BY" . ($_POST["hashed"] ? " PASSWORD" : "") . " $pass"); + $error = !queries(($connection->server_info < 5 ? "GRANT USAGE ON *.* TO" : "CREATE USER") . " $new_user IDENTIFIED BY" . ($_POST["hashed"] ? " PASSWORD" : "") . " $pass"); } if (!$error) { $revoke = array(); @@ -94,7 +94,7 @@ query_redirect(queries(), ME . "privileges=", (isset($_GET["host"]) ? lang('User has been altered.') : lang('User has been created.')), !$error, false, $error); if ($old_user != $new_user) { // delete new user in case of an error - $dbh->query("DROP USER $new_user"); + $connection->query("DROP USER $new_user"); } } } @@ -105,7 +105,7 @@ $row = $_POST; $grants = $new_grants; } else { - $row = $_GET + array("host" => $dbh->result($dbh->query("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', -1)"))); // create user on the same domain by default + $row = $_GET + array("host" => $connection->result($connection->query("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', -1)"))); // create user on the same domain by default $row["pass"] = $old_pass; if (strlen($old_pass)) { $row["hashed"] = true; Modified: trunk/adminer/variables.inc.php =================================================================== --- trunk/adminer/variables.inc.php 2009-09-22 10:33:56 UTC (rev 1123) +++ trunk/adminer/variables.inc.php 2009-09-22 10:51:40 UTC (rev 1124) @@ -2,7 +2,7 @@ page_header(lang('Variables')); echo "<table cellspacing='0'>\n"; -$result = $dbh->query("SHOW VARIABLES"); +$result = $connection->query("SHOW VARIABLES"); while ($row = $result->fetch_assoc()) { echo "<tr>"; echo "<th><code class='jush-sqlset'>" . h($row["Variable_name"]) . "</code>"; Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2009-09-22 10:33:56 UTC (rev 1123) +++ trunk/changes.txt 2009-09-22 10:51:40 UTC (rev 1124) @@ -1,3 +1,10 @@ +Adminer 2.1.1-dev: +Display table links above table structure +Fix removed default in ALTER +Display whitespace in texts (bug #2858042) +Move <h1> to $adminer->navigation (customization) +Rename get_dbh to connection (customization) + Adminer 2.1.0 (released 2009-09-12): Edit default values directly in table creation Execute SQL file stored on server disk Modified: trunk/editor/include/adminer.inc.php =================================================================== --- trunk/editor/include/adminer.inc.php 2009-09-22 10:33:56 UTC (rev 1123) +++ trunk/editor/include/adminer.inc.php 2009-09-22 10:51:40 UTC (rev 1124) @@ -10,10 +10,10 @@ } function database() { - global $dbh; + global $connection; $dbs = get_databases(false); return (!$dbs - ? $dbh->result($dbh->query("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', 1)")) // username without the database list + ? $connection->result($connection->query("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', 1)")) // username without the database list : $dbs[(information_schema($dbs[0]) ? 1 : 0)] // first available database ); } @@ -47,13 +47,13 @@ } function backwardKeys($table) { - global $dbh; + global $connection; $return = array(); - $result = $dbh->query("SELECT TABLE_NAME, CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_COLUMN_NAME + $result = $connection->query("SELECT TABLE_NAME, CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_COLUMN_NAME FROM information_schema.KEY_COLUMN_USAGE -WHERE TABLE_SCHEMA = " . $dbh->quote($this->database()) . " -AND REFERENCED_TABLE_SCHEMA = " . $dbh->quote($this->database()) . " -AND REFERENCED_TABLE_NAME = " . $dbh->quote($table) . " +WHERE TABLE_SCHEMA = " . $connection->quote($this->database()) . " +AND REFERENCED_TABLE_SCHEMA = " . $connection->quote($this->database()) . " +AND REFERENCED_TABLE_NAME = " . $connection->quote($table) . " ORDER BY ORDINAL_POSITION"); //! requires MySQL 5 if ($result) { while ($row = $result->fetch_assoc()) { @@ -78,7 +78,7 @@ } function rowDescriptions($rows, $foreignKeys) { - global $dbh; + global $connection; $return = $rows; foreach ($rows[0] as $key => $val) { foreach ((array) $foreignKeys[$key] as $foreignKey) { @@ -89,11 +89,11 @@ // find all used ids $ids = array(); foreach ($rows as $row) { - $ids[$row[$key]] = $dbh->quote($row[$key]); + $ids[$row[$key]] = $connection->quote($row[$key]); } // uses constant number of queries to get the descriptions, join would be complex, multiple queries would be slow $descriptions = array(); - $result = $dbh->query("SELECT $id, $name FROM " . idf_escape($foreignKey["table"]) . " WHERE $id IN (" . implode(", ", $ids) . ")"); + $result = $connection->query("SELECT $id, $name FROM " . idf_escape($foreignKey["table"]) . " WHERE $id IN (" . implode(", ", $ids) . ")"); while ($row = $result->fetch_row()) { $descriptions[$row[0]] = $row[1]; } @@ -254,7 +254,7 @@ } function selectEmailProcess($where, $foreignKeys) { - global $dbh; + global $connection; if ($_POST["email_append"]) { return true; } @@ -265,7 +265,7 @@ $subject = $_POST["email_subject"]; $message = $_POST["email_message"]; preg_match_all('~\\{\\$([a-z0-9_]+)\\}~i', "$subject.$message", $matches); // allows {$name} in subject or message - $result = $dbh->query("SELECT DISTINCT $field, " . implode(", ", array_map('idf_escape', array_unique($matches[1]))) . " FROM " . idf_escape($_GET["select"]) + $result = $connection->query("SELECT DISTINCT $field, " . implode(", ", array_map('idf_escape', array_unique($matches[1]))) . " FROM " . idf_escape($_GET["select"]) . " WHERE $field IS NOT NULL AND $field != ''" . ($where ? " AND " . implode(" AND ", $where) : "") . ($_POST["all"] ? "" : " AND ((" . implode(") OR (", array_map('where_check', (array) $_POST["check"])) . "))") @@ -310,15 +310,15 @@ } function editInput($table, $field, $attrs, $value) { - global $dbh; + global $connection; $foreign_keys = column_foreign_keys($table); foreach ((array) $foreign_keys[$field["field"]] as $foreign_key) { if (count($foreign_key["source"]) == 1) { $id = idf_escape($foreign_key["target"][0]); $name = $this->rowDescription($foreign_key["table"]); - if (strlen($name) && $dbh->result($dbh->query("SELECT COUNT(*) FROM " . idf_escape($foreign_key["table"]))) <= 1000) { // optionlist with more than 1000 options would be too big + if (strlen($name) && $connection->result($connection->query("SELECT COUNT(*) FROM " . idf_escape($foreign_key["table"]))) <= 1000) { // optionlist with more than 1000 options would be too big $return = array("" => ""); - $result = $dbh->query("SELECT $id, $name FROM " . idf_... [truncated message content] |
From: <jak...@us...> - 2009-09-22 15:09:52
|
Revision: 1128 http://adminer.svn.sourceforge.net/adminer/?rev=1128&view=rev Author: jakubvrana Date: 2009-09-22 15:09:45 +0000 (Tue, 22 Sep 2009) Log Message: ----------- E-mail attachments Modified Paths: -------------- trunk/changes.txt trunk/editor/include/adminer.inc.php Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2009-09-22 15:08:26 UTC (rev 1127) +++ trunk/changes.txt 2009-09-22 15:09:45 UTC (rev 1128) @@ -2,6 +2,7 @@ Display table links above table structure Fix removed default in ALTER Display whitespace in texts (bug #2858042) +E-mail attachments (Editor) Move <h1> to $adminer->navigation (customization) Rename get_dbh to connection (customization) Modified: trunk/editor/include/adminer.inc.php =================================================================== --- trunk/editor/include/adminer.inc.php 2009-09-22 15:08:26 UTC (rev 1127) +++ trunk/editor/include/adminer.inc.php 2009-09-22 15:09:45 UTC (rev 1128) @@ -192,6 +192,7 @@ echo lang('Subject') . ": <input name='email_subject' value='" . h($_POST["email_subject"]) . "'>\n"; echo "<p><textarea name='email_message' rows='15' cols='60'>" . h($_POST["email_message"] . ($_POST["email_append"] ? '{$' . "$_POST[email_addition]}" : "")) . "</textarea><br>\n"; echo "<select name='email_addition'>" . optionlist($columns, $_POST["email_addition"]) . "</select> <input type='submit' name='email_append' value='" . lang('Insert') . "'>\n"; //! JavaScript + echo "<p><input type='file' name='email_files[]' onchange=\"var el = this.cloneNode(true); el.value = ''; this.parentNode.appendChild(el);\">"; echo "<p>" . (count($emailFields) == 1 ? '<input type="hidden" name="email_field" value="' . h(key($emailFields)) . '">' : '<select name="email_field">' . optionlist($emailFields) . '</select> '); echo "<input type='submit' name='email' value='" . lang('Send') . "'$confirm>\n"; echo "</div></fieldset>\n"; @@ -263,9 +264,9 @@ if ($_POST["all"] || $_POST["check"]) { $field = idf_escape($_POST["email_field"]); $subject = $_POST["email_subject"]; - $message = $_POST["email_message"]; + $message = "$_POST[email_message]\n"; preg_match_all('~\\{\\$([a-z0-9_]+)\\}~i', "$subject.$message", $matches); // allows {$name} in subject or message - $result = $connection->query("SELECT DISTINCT $field, " . implode(", ", array_map('idf_escape', array_unique($matches[1]))) . " FROM " . idf_escape($_GET["select"]) + $result = $connection->query("SELECT DISTINCT $field" . ($matches[1] ? ", " . implode(", ", array_map('idf_escape', array_unique($matches[1]))) : "") . " FROM " . idf_escape($_GET["select"]) . " WHERE $field IS NOT NULL AND $field != ''" . ($where ? " AND " . implode(" AND ", $where) : "") . ($_POST["all"] ? "" : " AND ((" . implode(") OR (", array_map('where_check', (array) $_POST["check"])) . "))") @@ -274,16 +275,34 @@ while ($row = $result->fetch_assoc()) { $rows[] = $row; } + $boundary = uniqid("boundary"); + $attachments = ""; + $email_files = $_FILES["email_files"]; + foreach ($email_files["error"] as $key => $val) { + if (!$val) { + $attachments .= "--$boundary\n" + . "Content-Type: " . str_replace("\n", "", $email_files["type"][$key]) . "\n" + . "Content-Disposition: attachment; filename=\"" . preg_replace('~["\\n]~', '', $email_files["name"][$key]) . "\"\n" + . "Content-Transfer-Encoding: base64\n" + . "\n" . chunk_split(base64_encode(file_get_contents($email_files["tmp_name"][$key])), 76, "\n") . "\n" + ; + } + } + $beginning = ""; + $headers = "Content-Type: text/plain; charset=utf-8\nContent-Transfer-Encoding: 8bit"; + if ($attachments) { + $attachments .= "--$boundary--\n"; + $beginning = "--$boundary\n$headers\n\n"; + $headers = "Content-Type: multipart/mixed; boundary=\"$boundary\""; + } + $headers .= "\nMIME-Version: 1.0" . ($_POST["email_from"] ? "\nFrom: " . str_replace("\n", "", $_POST["email_from"]) : ""); //! should escape display name foreach ($this->rowDescriptions($rows, $foreignKeys) as $row) { $replace = array(); foreach ($matches[1] as $val) { $replace['{$' . "$val}"] = $row[$val]; //! allow literal {$name} } $email = $row[$_POST["email_field"]]; - if (is_email($email) && mail($email, email_header(strtr($subject, $replace)), strtr($message, $replace), - "MIME-Version: 1.0\nContent-Type: text/plain; charset=utf-8\nContent-Transfer-Encoding: 8bit" - . (is_email($_POST["email_from"]) ? "\nFrom: $_POST[email_from]" : "") //! should allow address with a name but simple application of email_header() adds the default server domain - )) { + if (is_email($email) && mail($email, email_header(strtr($subject, $replace)), $beginning . strtr($message, $replace) . $attachments, $headers)) { //! replace \n by \r\n on Windows $sent++; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-09-23 09:56:24
|
Revision: 1131 http://adminer.svn.sourceforge.net/adminer/?rev=1131&view=rev Author: jakubvrana Date: 2009-09-23 09:56:07 +0000 (Wed, 23 Sep 2009) Log Message: ----------- Separate static files Modified Paths: -------------- trunk/adminer/database.inc.php trunk/adminer/include/bootstrap.inc.php trunk/adminer/include/design.inc.php trunk/adminer/include/editing.inc.php trunk/adminer/schema.inc.php trunk/compile.php trunk/editor/include/adminer.inc.php Added Paths: ----------- trunk/adminer/static/ trunk/adminer/static/arrow.gif trunk/adminer/static/cross.gif trunk/adminer/static/default.css trunk/adminer/static/down.gif trunk/adminer/static/editing.js trunk/adminer/static/favicon.ico trunk/adminer/static/functions.js trunk/adminer/static/plus.gif trunk/adminer/static/up.gif trunk/editor/static/ trunk/editor/static/editing.js Removed Paths: ------------- trunk/adminer/arrow.gif trunk/adminer/cross.gif trunk/adminer/default.css trunk/adminer/down.gif trunk/adminer/editing.js trunk/adminer/favicon.ico trunk/adminer/functions.js trunk/adminer/plus.gif trunk/adminer/up.gif trunk/editor/editing.js Deleted: trunk/adminer/arrow.gif =================================================================== (Binary files differ) Deleted: trunk/adminer/cross.gif =================================================================== (Binary files differ) Modified: trunk/adminer/database.inc.php =================================================================== --- trunk/adminer/database.inc.php 2009-09-23 09:40:56 UTC (rev 1130) +++ trunk/adminer/database.inc.php 2009-09-23 09:56:07 UTC (rev 1131) @@ -79,7 +79,7 @@ if (strlen(DB)) { echo "<input type='submit' name='drop' value='" . lang('Drop') . "'$confirm>\n"; } elseif (!$_POST["add_x"]) { - echo "<input type='image' name='add' src='../adminer/plus.gif' alt='+' title='" . lang('Add next') . "'>\n"; + echo "<input type='image' name='add' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>\n"; } ?> </form> Deleted: trunk/adminer/default.css =================================================================== --- trunk/adminer/default.css 2009-09-23 09:40:56 UTC (rev 1130) +++ trunk/adminer/default.css 2009-09-23 09:56:07 UTC (rev 1131) @@ -1,49 +0,0 @@ -body { color: #000; background: #fff; font: 90%/1.25 Verdana, Arial, Helvetica, sans-serif; margin: 0; } -a { color: blue; } -a:visited { color: navy; } -a:hover { color: red; } -h1 { font-size: 150%; margin: 0; padding: .8em 1em; border-bottom: 1px solid #999; font-weight: normal; color: #777; background: #eee; } -h2 { font-size: 150%; margin: 0 0 20px -18px; padding: .8em 1em; border-bottom: 1px solid #000; color: #000; font-weight: normal; background: #ddf; } -h3 { font-weight: normal; font-size: 130%; margin: .8em 0; } -form { margin: 0; } -table { margin: 0 20px .8em 0; border: 0; border-top: 1px solid #999; border-left: 1px solid #999; font-size: 90%; } -td, th { margin-bottom: 1em; border: 0; border-right: 1px solid #999; border-bottom: 1px solid #999; padding: .2em .3em; } -th { background: #eee; text-align: left; } -thead th { text-align: center; } -thead td, thead th { background: #ddf; } -fieldset { display: inline; vertical-align: top; padding: .5em .8em; margin: 0 .5em .5em 0; border: 1px solid #999; } -p { margin: 0 20px 1em 0; } -img { vertical-align: middle; border: 0; } -code { background: #eee; } -tr:hover td, tr:hover th { background: #ddf; } -.version { color: #777; font-size: 67%; } -.js .hidden { display: none; } -.nowrap { white-space: nowrap; } -.wrap { white-space: normal; } -.error { color: red; background: #fee; } -.message { color: green; background: #efe; } -.error, .message { padding: .5em .8em; margin: 0 20px 1em 0; } -.char { color: #007F00; } -.date { color: #7F007F; } -.enum { color: #007F7F; } -.binary { color: red; } -.odd td { background: #F5F5F5; } -.time { color: silver; font-size: 70%; float: right; margin-top: -3em; } -.function { text-align: right; } -.type { width: 15ex; width: auto\9; } -#menu { position: absolute; margin: 10px 0 0; padding: 0 0 30px 0; top: 2em; left: 0; width: 19em; overflow: auto; overflow-y: hidden; white-space: nowrap; } -#menu p { padding: .8em 1em; margin: 0; border-bottom: 1px solid #ccc; } -#content { margin: 2em 0 0 21em; padding: 10px 20px 20px 0; } -#lang { position: absolute; top: 0; left: 0; line-height: 1.8em; padding: .3em 1em; } -#breadcrumb { white-space: nowrap; position: absolute; top: 0; left: 21em; background: #eee; height: 2em; line-height: 1.8em; padding: 0 1em; margin: 0 0 0 -18px; } -#h1 { color: #777; text-decoration: none; font-style: italic; } -#version { font-size: 67%; color: red; } -#schema { margin-left: 60px; position: relative; } -#schema .table { border: 1px solid silver; padding: 0 2px; cursor: move; position: absolute; } -#schema .references { position: absolute; } - -@media print { - #lang, #menu { display: none; } - #content { margin-left: 1em; } - #breadcrumb { left: 1em; } -} Deleted: trunk/adminer/down.gif =================================================================== (Binary files differ) Deleted: trunk/adminer/editing.js =================================================================== --- trunk/adminer/editing.js 2009-09-23 09:40:56 UTC (rev 1130) +++ trunk/adminer/editing.js 2009-09-23 09:56:07 UTC (rev 1131) @@ -1,285 +0,0 @@ -// Adminer specific functions - -function body_load() { - var jush_root = '../externals/jush/'; - var script = document.createElement('script'); - script.src = jush_root + 'jush.js'; - script.onload = function () { - if (window.jush) { // IE runs in case of an error too - jush.style(jush_root + 'jush.css'); - jush.highlight_tag('pre'); - jush.highlight_tag('code'); - } - }; - script.onreadystatechange = function () { - if (/^(loaded|complete)$/.test(script.readyState)) { - script.onload(); - } - }; - document.body.appendChild(script); -} - - - -function select_value(select) { - return select.options[select.selectedIndex].text; -} - -function form_field(form, name) { - for (var i=0; i < form.length; i++) { - if (form[i].name == name) { - return form[i]; - } - } -} - -function type_password(el, disable) { - try { - el.type = (disable ? 'text' : 'password'); - } catch (e) { - } -} - - - -var added = '.', row_count; - -function re_escape(s) { - return s.replace(/[\[\]\\^$*+?.(){|}]/, '\\$&'); -} - -function idf_escape(s) { - return '`' + s.replace(/`/, '``') + '`'; -} - -function editing_name_change(field) { - var name = field.name.substr(0, field.name.length - 7); - var type = form_field(field.form, name + '[type]'); - var opts = type.options; - var table = re_escape(field.value); - var column = ''; - var match; - if ((match = /(.+)_(.+)/.exec(table)) || (match = /(.*[a-z])([A-Z].*)/.exec(table))) { // limited to single word columns - table = match[1]; - column = match[2]; - } - var plural = '(?:e?s)?'; - var tab_col = table + plural + '_?' + column; - var re = new RegExp('(^' + idf_escape(table + plural) + '\\.' + idf_escape(column) + '$' // table_column - + '|^' + idf_escape(tab_col) + '\\.' // table - + '|^' + idf_escape(column + plural) + '\\.' + idf_escape(table) + '$' // column_table - + ')|\\.' + idf_escape(tab_col) + '$' // column - , 'i'); - var candidate; // don't select anything with ambiguous match (like column `id`) - for (var i = opts.length; i--; ) { - if (opts[i].value.substr(0, 1) != '`') { // common type - if (i == opts.length - 2 && candidate && !match[1] && name == 'fields[1]') { // single target table, link to column, first field - probably `id` - return false; - } - break; - } - if (match = re.exec(opts[i].value)) { - if (candidate) { - return false; - } - candidate = i; - } - } - if (candidate) { - type.selectedIndex = candidate; - type.onchange(); - } -} - -function editing_add_row(button, allowed) { - if (allowed && row_count >= allowed) { - return false; - } - var match = /([0-9]+)(\.[0-9]+)?/.exec(button.name); - var x = match[0] + (match[2] ? added.substr(match[2].length) : added) + '1'; - var row = button.parentNode.parentNode; - var row2 = row.cloneNode(true); - var tags = row.getElementsByTagName('select'); - var tags2 = row2.getElementsByTagName('select'); - for (var i=0; i < tags.length; i++) { - tags2[i].name = tags[i].name.replace(/([0-9.]+)/, x); - tags2[i].selectedIndex = tags[i].selectedIndex; - } - tags = row.getElementsByTagName('input'); - tags2 = row2.getElementsByTagName('input'); - var ret = tags2[0]; // IE loose tags2 after insertBefore() - for (var i=0; i < tags.length; i++) { - if (tags[i].name == 'auto_increment_col') { - tags2[i].value = x; - tags2[i].checked = false; - } - tags2[i].name = tags[i].name.replace(/([0-9.]+)/, x); - if (/\[(orig|field|comment|default)/.test(tags[i].name)) { - tags2[i].value = ''; - } - if (/\[(has_default)/.test(tags[i].name)) { - tags2[i].checked = false; - } - } - tags[0].onchange = function () { - editing_name_change(tags[0]); - }; - row.parentNode.insertBefore(row2, row.nextSibling); - added += '0'; - row_count++; - return ret; -} - -function editing_remove_row(button) { - var field = form_field(button.form, button.name.replace(/drop_col(.+)/, 'fields$1[field]')); - field.parentNode.removeChild(field); - button.parentNode.parentNode.style.display = 'none'; - return true; -} - -function editing_type_change(type) { - var name = type.name.substr(0, type.name.length - 6); - var text = select_value(type); - for (var i=0; i < type.form.elements.length; i++) { - var el = type.form.elements[i]; - if (el.name == name + '[collation]') { - el.className = (/(char|text|enum|set)$/.test(text) ? '' : 'hidden'); - } - if (el.name == name + '[unsigned]') { - el.className = (/(int|float|double|decimal)$/.test(text) ? '' : 'hidden'); - } - } -} - -function column_show(checked, column) { - var trs = document.getElementById('edit-fields').getElementsByTagName('tr'); - for (var i=0; i < trs.length; i++) { - trs[i].getElementsByTagName('td')[column].className = (checked ? 'nowrap' : 'hidden'); - } -} - -function partition_by_change(el) { - var partition_table = /RANGE|LIST/.test(select_value(el)); - el.form['partitions'].className = (partition_table || !el.selectedIndex ? 'hidden' : ''); - document.getElementById('partition-table').className = (partition_table ? '' : 'hidden'); -} - -function partition_name_change(el) { - var row = el.parentNode.parentNode.cloneNode(true); - row.firstChild.firstChild.value = ''; - el.parentNode.parentNode.parentNode.appendChild(row); - el.onchange = function () {}; -} - - - -function foreign_add_row(field) { - var row = field.parentNode.parentNode.cloneNode(true); - var selects = row.getElementsByTagName('select'); - for (var i=0; i < selects.length; i++) { - selects[i].name = selects[i].name.replace(/\]/, '1$&'); - selects[i].selectedIndex = 0; - } - field.parentNode.parentNode.parentNode.appendChild(row); - field.onchange = function () { }; -} - - - -function indexes_add_row(field) { - var row = field.parentNode.parentNode.cloneNode(true); - var spans = row.getElementsByTagName('span'); - for (var i=0; i < spans.length - 1; i++) { - row.removeChild(spans[i]); - } - var selects = row.getElementsByTagName('select'); - for (var i=0; i < selects.length; i++) { - selects[i].name = selects[i].name.replace(/indexes\[[0-9]+/, '$&1'); - selects[i].selectedIndex = 0; - } - var input = row.getElementsByTagName('input')[0]; - input.name = input.name.replace(/indexes\[[0-9]+/, '$&1'); - input.value = ''; - field.parentNode.parentNode.parentNode.appendChild(row); - field.onchange = function () { }; -} - -function indexes_add_column(field) { - var column = field.parentNode.cloneNode(true); - var select = column.getElementsByTagName('select')[0]; - select.name = select.name.replace(/\]\[[0-9]+/, '$&1'); - select.selectedIndex = 0; - var input = column.getElementsByTagName('input')[0]; - input.name = input.name.replace(/\]\[[0-9]+/, '$&1'); - input.value = ''; - field.parentNode.parentNode.appendChild(column); - field.onchange = function () { }; -} - - - -var that, x, y, em, table_pos; - -function schema_mousedown(el, event) { - that = el; - x = event.clientX - el.offsetLeft; - y = event.clientY - el.offsetTop; -} - -function schema_mousemove(ev) { - if (that !== undefined) { - ev = ev || event; - var left = (ev.clientX - x) / em; - var top = (ev.clientY - y) / em; - var divs = that.getElementsByTagName('div'); - var line_set = { }; - for (var i=0; i < divs.length; i++) { - if (divs[i].className == 'references') { - var div2 = document.getElementById((divs[i].id.substr(0, 4) == 'refs' ? 'refd' : 'refs') + divs[i].id.substr(4)); - var ref = (table_pos[divs[i].title] ? table_pos[divs[i].title] : [ div2.parentNode.offsetTop / em, 0 ]); - var left1 = -1; - var is_top = true; - var id = divs[i].id.replace(/^ref.(.+)-.+/, '$1'); - if (divs[i].parentNode != div2.parentNode) { - left1 = Math.min(0, ref[1] - left) - 1; - divs[i].style.left = left1 + 'em'; - divs[i].getElementsByTagName('div')[0].style.width = -left1 + 'em'; - var left2 = Math.min(0, left - ref[1]) - 1; - div2.style.left = left2 + 'em'; - div2.getElementsByTagName('div')[0].style.width = -left2 + 'em'; - is_top = (div2.offsetTop + ref[0] * em > divs[i].offsetTop + top * em); - } - if (!line_set[id]) { - var line = document.getElementById(divs[i].id.replace(/^....(.+)-[0-9]+$/, 'refl$1')); - var shift = ev.clientY - y - that.offsetTop; - line.style.left = (left + left1) + 'em'; - if (is_top) { - line.style.top = (line.offsetTop + shift) / em + 'em'; - } - if (divs[i].parentNode != div2.parentNode) { - line = line.getElementsByTagName('div')[0]; - line.style.height = (line.offsetHeight + (is_top ? -1 : 1) * shift) / em + 'em'; - } - line_set[id] = true; - } - } - } - that.style.left = left + 'em'; - that.style.top = top + 'em'; - } -} - -function schema_mouseup(ev) { - if (that !== undefined) { - ev = ev || event; - table_pos[that.firstChild.firstChild.firstChild.data] = [ (ev.clientY - y) / em, (ev.clientX - x) / em ]; - that = undefined; - var date = new Date(); - date.setMonth(date.getMonth() + 1); - var s = ''; - for (var key in table_pos) { - s += '_' + key + ':' + Math.round(table_pos[key][0] * 10000) / 10000 + 'x' + Math.round(table_pos[key][1] * 10000) / 10000; - } - document.cookie = 'adminer_schema=' + encodeURIComponent(s.substr(1)) + '; expires=' + date + '; path=' + location.pathname + location.search; - } -} Deleted: trunk/adminer/favicon.ico =================================================================== (Binary files differ) Deleted: trunk/adminer/functions.js =================================================================== --- trunk/adminer/functions.js 2009-09-23 09:40:56 UTC (rev 1130) +++ trunk/adminer/functions.js 2009-09-23 09:56:07 UTC (rev 1131) @@ -1,59 +0,0 @@ -document.body.className = 'js'; - -function toggle(id) { - var el = document.getElementById(id); - el.className = (el.className == 'hidden' ? '' : 'hidden'); - return true; -} - -function verify_version() { - document.cookie = 'adminer_version=0'; - var script = document.createElement('script'); - script.src = 'https://adminer.svn.sourceforge.net/svnroot/adminer/trunk/version.js'; - document.body.appendChild(script); -} - -function form_check(el, name) { - var elems = el.form.elements; - for (var i=0; i < elems.length; i++) { - if (name.test(elems[i].name)) { - elems[i].checked = el.checked; - } - } -} - -function form_uncheck(id) { - document.getElementById(id).checked = false; -} - -function table_click(event) { - var el = event.target || event.srcElement; - while (!/^tr$/i.test(el.tagName)) { - if (/^(table|a|input)$/i.test(el.tagName)) { - return; - } - el = el.parentNode; - } - el = el.firstChild.firstChild; - el.click && el.click(); - el.onclick && el.onclick(); -} - - - -function select_add_row(field) { - var row = field.parentNode.cloneNode(true); - var selects = row.getElementsByTagName('select'); - for (var i=0; i < selects.length; i++) { - selects[i].name = selects[i].name.replace(/[a-z]\[[0-9]+/, '$&1'); - selects[i].selectedIndex = 0; - } - var inputs = row.getElementsByTagName('input'); - if (inputs.length) { - inputs[0].name = inputs[0].name.replace(/[a-z]\[[0-9]+/, '$&1'); - inputs[0].value = ''; - inputs[0].className = ''; - } - field.parentNode.parentNode.appendChild(row); - field.onchange = function () { }; -} Modified: trunk/adminer/include/bootstrap.inc.php =================================================================== --- trunk/adminer/include/bootstrap.inc.php 2009-09-23 09:40:56 UTC (rev 1130) +++ trunk/adminer/include/bootstrap.inc.php 2009-09-23 09:56:07 UTC (rev 1131) @@ -19,21 +19,21 @@ header("Expires: " . gmdate("D, d M Y H:i:s", time() + 365*24*60*60) . " GMT"); if ($_GET["file"] == "favicon.ico") { header("Content-Type: image/x-icon"); - echo base64_decode("compile_file('../adminer/favicon.ico', 'base64_encode');"); + echo base64_decode("compile_file('../adminer/static/favicon.ico', 'base64_encode');"); } elseif ($_GET["file"] == "default.css") { header("Content-Type: text/css"); - ?>compile_file('../adminer/default.css', 'minify_css');<?php + ?>compile_file('../adminer/static/default.css', 'minify_css');<?php } elseif ($_GET["file"] == "functions.js") { header("Content-Type: text/javascript"); - ?>compile_file('../adminer/functions.js', 'JSMin::minify');compile_file('editing.js', 'JSMin::minify');<?php + ?>compile_file('../adminer/static/functions.js', 'JSMin::minify');compile_file('static/editing.js', 'JSMin::minify');<?php } else { header("Content-Type: image/gif"); switch ($_GET["file"]) { - case "plus.gif": echo base64_decode("compile_file('../adminer/plus.gif', 'base64_encode');"); break; - case "cross.gif": echo base64_decode("compile_file('../adminer/cross.gif', 'base64_encode');"); break; - case "up.gif": echo base64_decode("compile_file('../adminer/up.gif', 'base64_encode');"); break; - case "down.gif": echo base64_decode("compile_file('../adminer/down.gif', 'base64_encode');"); break; - case "arrow.gif": echo base64_decode("compile_file('../adminer/arrow.gif', 'base64_encode');"); break; + case "plus.gif": echo base64_decode("compile_file('../adminer/static/plus.gif', 'base64_encode');"); break; + case "cross.gif": echo base64_decode("compile_file('../adminer/static/cross.gif', 'base64_encode');"); break; + case "up.gif": echo base64_decode("compile_file('../adminer/static/up.gif', 'base64_encode');"); break; + case "down.gif": echo base64_decode("compile_file('../adminer/static/down.gif', 'base64_encode');"); break; + case "arrow.gif": echo base64_decode("compile_file('../adminer/static/arrow.gif', 'base64_encode');"); break; } } exit; Modified: trunk/adminer/include/design.inc.php =================================================================== --- trunk/adminer/include/design.inc.php 2009-09-23 09:40:56 UTC (rev 1130) +++ trunk/adminer/include/design.inc.php 2009-09-23 09:56:07 UTC (rev 1131) @@ -10,15 +10,15 @@ <meta http-equiv="Content-Script-Type" content="text/javascript"> <meta name="robots" content="noindex"> <title><?php echo $title_all . (strlen($_GET["server"]) && $_GET["server"] != "localhost" ? h("- $_GET[server]") : "") . " - " . $adminer->name(); ?></title> -<link rel="shortcut icon" type="image/x-icon" href="../adminer/favicon.ico"> -<link rel="stylesheet" type="text/css" href="../adminer/default.css<?php // Ondrej Valka, http://valka.info ?>"> +<link rel="shortcut icon" type="image/x-icon" href="../adminer/static/favicon.ico"> +<link rel="stylesheet" type="text/css" href="../adminer/static/default.css<?php // Ondrej Valka, http://valka.info ?>"> <?php if (file_exists("adminer.css")) { ?> <link rel="stylesheet" type="text/css" href="adminer.css"> <?php } ?> <body onload="body_load();<?php echo (isset($_COOKIE["adminer_version"]) ? "" : " verify_version();"); ?>"> -<script type="text/javascript" src="../adminer/functions.js"></script> -<script type="text/javascript" src="editing.js"></script> +<script type="text/javascript" src="../adminer/static/functions.js"></script> +<script type="text/javascript" src="static/editing.js"></script> <div id="content"> <?php Modified: trunk/adminer/include/editing.inc.php =================================================================== --- trunk/adminer/include/editing.inc.php 2009-09-23 09:40:56 UTC (rev 1130) +++ trunk/adminer/include/editing.inc.php 2009-09-23 09:56:07 UTC (rev 1131) @@ -164,7 +164,7 @@ <td class="hidden"><?php echo lang('Default values'); ?> <td<?php echo ($column_comments ? "" : " class='hidden'"); ?>><?php echo lang('Comment'); ?> <?php } ?> -<td><?php echo "<input type='image' name='add[0]' src='../adminer/plus.gif' alt='+' title='" . lang('Add next') . "'>"; ?><script type="text/javascript">row_count = <?php echo count($fields); ?>;</script> +<td><?php echo "<input type='image' name='add[0]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>"; ?><script type="text/javascript">row_count = <?php echo count($fields); ?>;</script> </thead> <?php foreach ($fields as $i => $field) { @@ -182,10 +182,10 @@ <td<?php echo ($column_comments ? "" : " class='hidden'"); ?>><input name="fields[<?php echo $i; ?>][comment]" value="<?php echo h($field["comment"]); ?>" maxlength="255"> <?php } ?> <?php - echo "<td class='nowrap'><input type='image' name='add[$i]' src='../adminer/plus.gif' alt='+' title='" . lang('Add next') . "' onclick='var x = editing_add_row(this, $allowed); if (x) { x.focus(); x.onchange = function () { }; } return !x;'>"; - echo " <input type='image' name='drop_col[$i]' src='../adminer/cross.gif' alt='x' title='" . lang('Remove') . "' onclick='return !editing_remove_row(this);'>"; - echo " <input type='image' name='up[$i]' src='../adminer/up.gif' alt='^' title='" . lang('Move up') . "'>"; - echo " <input type='image' name='down[$i]' src='../adminer/down.gif' alt='v' title='" . lang('Move down') . "'>"; + echo "<td class='nowrap'><input type='image' name='add[$i]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "' onclick='var x = editing_add_row(this, $allowed); if (x) { x.focus(); x.onchange = function () { }; } return !x;'>"; + echo " <input type='image' name='drop_col[$i]' src='../adminer/static/cross.gif' alt='x' title='" . lang('Remove') . "' onclick='return !editing_remove_row(this);'>"; + echo " <input type='image' name='up[$i]' src='../adminer/static/up.gif' alt='^' title='" . lang('Move up') . "'>"; + echo " <input type='image' name='down[$i]' src='../adminer/static/down.gif' alt='v' title='" . lang('Move down') . "'>"; echo "\n\n"; } return $column_comments; Deleted: trunk/adminer/plus.gif =================================================================== (Binary files differ) Modified: trunk/adminer/schema.inc.php =================================================================== --- trunk/adminer/schema.inc.php 2009-09-23 09:40:56 UTC (rev 1130) +++ trunk/adminer/schema.inc.php 2009-09-23 09:56:07 UTC (rev 1131) @@ -79,7 +79,7 @@ $left1 = $left - $table_pos[$name][1]; $i = 0; foreach ($columns as $target) { - echo "<div class='references' title='" . h($target_name) . "' id='refd$left-" . ($i++) . "' style='left: $left1" . "em; top: " . $table["fields"][$target]["pos"] . "em; height: 1.25em; background: url(../adminer/arrow.gif) no-repeat right center;'><div style='height: .5em; border-bottom: 1px solid Gray; width: " . (-$left1) . "em;'></div></div>\n"; + echo "<div class='references' title='" . h($target_name) . "' id='refd$left-" . ($i++) . "' style='left: $left1" . "em; top: " . $table["fields"][$target]["pos"] . "em; height: 1.25em; background: url(../adminer/static/arrow.gif) no-repeat right center;'><div style='height: .5em; border-bottom: 1px solid Gray; width: " . (-$left1) . "em;'></div></div>\n"; } } } Property changes on: trunk/adminer/static ___________________________________________________________________ Added: tsvn:projectlanguage + 1033 Copied: trunk/adminer/static/arrow.gif (from rev 1121, trunk/adminer/arrow.gif) =================================================================== (Binary files differ) Copied: trunk/adminer/static/cross.gif (from rev 1121, trunk/adminer/cross.gif) =================================================================== (Binary files differ) Copied: trunk/adminer/static/default.css (from rev 1126, trunk/adminer/default.css) =================================================================== --- trunk/adminer/static/default.css (rev 0) +++ trunk/adminer/static/default.css 2009-09-23 09:56:07 UTC (rev 1131) @@ -0,0 +1,49 @@ +body { color: #000; background: #fff; font: 90%/1.25 Verdana, Arial, Helvetica, sans-serif; margin: 0; } +a { color: blue; } +a:visited { color: navy; } +a:hover { color: red; } +h1 { font-size: 150%; margin: 0; padding: .8em 1em; border-bottom: 1px solid #999; font-weight: normal; color: #777; background: #eee; } +h2 { font-size: 150%; margin: 0 0 20px -18px; padding: .8em 1em; border-bottom: 1px solid #000; color: #000; font-weight: normal; background: #ddf; } +h3 { font-weight: normal; font-size: 130%; margin: .8em 0; } +form { margin: 0; } +table { margin: 0 20px .8em 0; border: 0; border-top: 1px solid #999; border-left: 1px solid #999; font-size: 90%; } +td, th { margin-bottom: 1em; border: 0; border-right: 1px solid #999; border-bottom: 1px solid #999; padding: .2em .3em; } +th { background: #eee; text-align: left; } +thead th { text-align: center; } +thead td, thead th { background: #ddf; } +fieldset { display: inline; vertical-align: top; padding: .5em .8em; margin: 0 .5em .5em 0; border: 1px solid #999; } +p { margin: 0 20px 1em 0; } +img { vertical-align: middle; border: 0; } +code { background: #eee; } +tr:hover td, tr:hover th { background: #ddf; } +.version { color: #777; font-size: 67%; } +.js .hidden { display: none; } +.nowrap { white-space: nowrap; } +.wrap { white-space: normal; } +.error { color: red; background: #fee; } +.message { color: green; background: #efe; } +.error, .message { padding: .5em .8em; margin: 0 20px 1em 0; } +.char { color: #007F00; } +.date { color: #7F007F; } +.enum { color: #007F7F; } +.binary { color: red; } +.odd td { background: #F5F5F5; } +.time { color: silver; font-size: 70%; float: right; margin-top: -3em; } +.function { text-align: right; } +.type { width: 15ex; width: auto\9; } +#menu { position: absolute; margin: 10px 0 0; padding: 0 0 30px 0; top: 2em; left: 0; width: 19em; overflow: auto; overflow-y: hidden; white-space: nowrap; } +#menu p { padding: .8em 1em; margin: 0; border-bottom: 1px solid #ccc; } +#content { margin: 2em 0 0 21em; padding: 10px 20px 20px 0; } +#lang { position: absolute; top: 0; left: 0; line-height: 1.8em; padding: .3em 1em; } +#breadcrumb { white-space: nowrap; position: absolute; top: 0; left: 21em; background: #eee; height: 2em; line-height: 1.8em; padding: 0 1em; margin: 0 0 0 -18px; } +#h1 { color: #777; text-decoration: none; font-style: italic; } +#version { font-size: 67%; color: red; } +#schema { margin-left: 60px; position: relative; } +#schema .table { border: 1px solid silver; padding: 0 2px; cursor: move; position: absolute; } +#schema .references { position: absolute; } + +@media print { + #lang, #menu { display: none; } + #content { margin-left: 1em; } + #breadcrumb { left: 1em; } +} Copied: trunk/adminer/static/down.gif (from rev 1121, trunk/adminer/down.gif) =================================================================== (Binary files differ) Copied: trunk/adminer/static/editing.js (from rev 1121, trunk/adminer/editing.js) =================================================================== --- trunk/adminer/static/editing.js (rev 0) +++ trunk/adminer/static/editing.js 2009-09-23 09:56:07 UTC (rev 1131) @@ -0,0 +1,285 @@ +// Adminer specific functions + +function body_load() { + var jush_root = '../externals/jush/'; + var script = document.createElement('script'); + script.src = jush_root + 'jush.js'; + script.onload = function () { + if (window.jush) { // IE runs in case of an error too + jush.style(jush_root + 'jush.css'); + jush.highlight_tag('pre'); + jush.highlight_tag('code'); + } + }; + script.onreadystatechange = function () { + if (/^(loaded|complete)$/.test(script.readyState)) { + script.onload(); + } + }; + document.body.appendChild(script); +} + + + +function select_value(select) { + return select.options[select.selectedIndex].text; +} + +function form_field(form, name) { + for (var i=0; i < form.length; i++) { + if (form[i].name == name) { + return form[i]; + } + } +} + +function type_password(el, disable) { + try { + el.type = (disable ? 'text' : 'password'); + } catch (e) { + } +} + + + +var added = '.', row_count; + +function re_escape(s) { + return s.replace(/[\[\]\\^$*+?.(){|}]/, '\\$&'); +} + +function idf_escape(s) { + return '`' + s.replace(/`/, '``') + '`'; +} + +function editing_name_change(field) { + var name = field.name.substr(0, field.name.length - 7); + var type = form_field(field.form, name + '[type]'); + var opts = type.options; + var table = re_escape(field.value); + var column = ''; + var match; + if ((match = /(.+)_(.+)/.exec(table)) || (match = /(.*[a-z])([A-Z].*)/.exec(table))) { // limited to single word columns + table = match[1]; + column = match[2]; + } + var plural = '(?:e?s)?'; + var tab_col = table + plural + '_?' + column; + var re = new RegExp('(^' + idf_escape(table + plural) + '\\.' + idf_escape(column) + '$' // table_column + + '|^' + idf_escape(tab_col) + '\\.' // table + + '|^' + idf_escape(column + plural) + '\\.' + idf_escape(table) + '$' // column_table + + ')|\\.' + idf_escape(tab_col) + '$' // column + , 'i'); + var candidate; // don't select anything with ambiguous match (like column `id`) + for (var i = opts.length; i--; ) { + if (opts[i].value.substr(0, 1) != '`') { // common type + if (i == opts.length - 2 && candidate && !match[1] && name == 'fields[1]') { // single target table, link to column, first field - probably `id` + return false; + } + break; + } + if (match = re.exec(opts[i].value)) { + if (candidate) { + return false; + } + candidate = i; + } + } + if (candidate) { + type.selectedIndex = candidate; + type.onchange(); + } +} + +function editing_add_row(button, allowed) { + if (allowed && row_count >= allowed) { + return false; + } + var match = /([0-9]+)(\.[0-9]+)?/.exec(button.name); + var x = match[0] + (match[2] ? added.substr(match[2].length) : added) + '1'; + var row = button.parentNode.parentNode; + var row2 = row.cloneNode(true); + var tags = row.getElementsByTagName('select'); + var tags2 = row2.getElementsByTagName('select'); + for (var i=0; i < tags.length; i++) { + tags2[i].name = tags[i].name.replace(/([0-9.]+)/, x); + tags2[i].selectedIndex = tags[i].selectedIndex; + } + tags = row.getElementsByTagName('input'); + tags2 = row2.getElementsByTagName('input'); + var ret = tags2[0]; // IE loose tags2 after insertBefore() + for (var i=0; i < tags.length; i++) { + if (tags[i].name == 'auto_increment_col') { + tags2[i].value = x; + tags2[i].checked = false; + } + tags2[i].name = tags[i].name.replace(/([0-9.]+)/, x); + if (/\[(orig|field|comment|default)/.test(tags[i].name)) { + tags2[i].value = ''; + } + if (/\[(has_default)/.test(tags[i].name)) { + tags2[i].checked = false; + } + } + tags[0].onchange = function () { + editing_name_change(tags[0]); + }; + row.parentNode.insertBefore(row2, row.nextSibling); + added += '0'; + row_count++; + return ret; +} + +function editing_remove_row(button) { + var field = form_field(button.form, button.name.replace(/drop_col(.+)/, 'fields$1[field]')); + field.parentNode.removeChild(field); + button.parentNode.parentNode.style.display = 'none'; + return true; +} + +function editing_type_change(type) { + var name = type.name.substr(0, type.name.length - 6); + var text = select_value(type); + for (var i=0; i < type.form.elements.length; i++) { + var el = type.form.elements[i]; + if (el.name == name + '[collation]') { + el.className = (/(char|text|enum|set)$/.test(text) ? '' : 'hidden'); + } + if (el.name == name + '[unsigned]') { + el.className = (/(int|float|double|decimal)$/.test(text) ? '' : 'hidden'); + } + } +} + +function column_show(checked, column) { + var trs = document.getElementById('edit-fields').getElementsByTagName('tr'); + for (var i=0; i < trs.length; i++) { + trs[i].getElementsByTagName('td')[column].className = (checked ? 'nowrap' : 'hidden'); + } +} + +function partition_by_change(el) { + var partition_table = /RANGE|LIST/.test(select_value(el)); + el.form['partitions'].className = (partition_table || !el.selectedIndex ? 'hidden' : ''); + document.getElementById('partition-table').className = (partition_table ? '' : 'hidden'); +} + +function partition_name_change(el) { + var row = el.parentNode.parentNode.cloneNode(true); + row.firstChild.firstChild.value = ''; + el.parentNode.parentNode.parentNode.appendChild(row); + el.onchange = function () {}; +} + + + +function foreign_add_row(field) { + var row = field.parentNode.parentNode.cloneNode(true); + var selects = row.getElementsByTagName('select'); + for (var i=0; i < selects.length; i++) { + selects[i].name = selects[i].name.replace(/\]/, '1$&'); + selects[i].selectedIndex = 0; + } + field.parentNode.parentNode.parentNode.appendChild(row); + field.onchange = function () { }; +} + + + +function indexes_add_row(field) { + var row = field.parentNode.parentNode.cloneNode(true); + var spans = row.getElementsByTagName('span'); + for (var i=0; i < spans.length - 1; i++) { + row.removeChild(spans[i]); + } + var selects = row.getElementsByTagName('select'); + for (var i=0; i < selects.length; i++) { + selects[i].name = selects[i].name.replace(/indexes\[[0-9]+/, '$&1'); + selects[i].selectedIndex = 0; + } + var input = row.getElementsByTagName('input')[0]; + input.name = input.name.replace(/indexes\[[0-9]+/, '$&1'); + input.value = ''; + field.parentNode.parentNode.parentNode.appendChild(row); + field.onchange = function () { }; +} + +function indexes_add_column(field) { + var column = field.parentNode.cloneNode(true); + var select = column.getElementsByTagName('select')[0]; + select.name = select.name.replace(/\]\[[0-9]+/, '$&1'); + select.selectedIndex = 0; + var input = column.getElementsByTagName('input')[0]; + input.name = input.name.replace(/\]\[[0-9]+/, '$&1'); + input.value = ''; + field.parentNode.parentNode.appendChild(column); + field.onchange = function () { }; +} + + + +var that, x, y, em, table_pos; + +function schema_mousedown(el, event) { + that = el; + x = event.clientX - el.offsetLeft; + y = event.clientY - el.offsetTop; +} + +function schema_mousemove(ev) { + if (that !== undefined) { + ev = ev || event; + var left = (ev.clientX - x) / em; + var top = (ev.clientY - y) / em; + var divs = that.getElementsByTagName('div'); + var line_set = { }; + for (var i=0; i < divs.length; i++) { + if (divs[i].className == 'references') { + var div2 = document.getElementById((divs[i].id.substr(0, 4) == 'refs' ? 'refd' : 'refs') + divs[i].id.substr(4)); + var ref = (table_pos[divs[i].title] ? table_pos[divs[i].title] : [ div2.parentNode.offsetTop / em, 0 ]); + var left1 = -1; + var is_top = true; + var id = divs[i].id.replace(/^ref.(.+)-.+/, '$1'); + if (divs[i].parentNode != div2.parentNode) { + left1 = Math.min(0, ref[1] - left) - 1; + divs[i].style.left = left1 + 'em'; + divs[i].getElementsByTagName('div')[0].style.width = -left1 + 'em'; + var left2 = Math.min(0, left - ref[1]) - 1; + div2.style.left = left2 + 'em'; + div2.getElementsByTagName('div')[0].style.width = -left2 + 'em'; + is_top = (div2.offsetTop + ref[0] * em > divs[i].offsetTop + top * em); + } + if (!line_set[id]) { + var line = document.getElementById(divs[i].id.replace(/^....(.+)-[0-9]+$/, 'refl$1')); + var shift = ev.clientY - y - that.offsetTop; + line.style.left = (left + left1) + 'em'; + if (is_top) { + line.style.top = (line.offsetTop + shift) / em + 'em'; + } + if (divs[i].parentNode != div2.parentNode) { + line = line.getElementsByTagName('div')[0]; + line.style.height = (line.offsetHeight + (is_top ? -1 : 1) * shift) / em + 'em'; + } + line_set[id] = true; + } + } + } + that.style.left = left + 'em'; + that.style.top = top + 'em'; + } +} + +function schema_mouseup(ev) { + if (that !== undefined) { + ev = ev || event; + table_pos[that.firstChild.firstChild.firstChild.data] = [ (ev.clientY - y) / em, (ev.clientX - x) / em ]; + that = undefined; + var date = new Date(); + date.setMonth(date.getMonth() + 1); + var s = ''; + for (var key in table_pos) { + s += '_' + key + ':' + Math.round(table_pos[key][0] * 10000) / 10000 + 'x' + Math.round(table_pos[key][1] * 10000) / 10000; + } + document.cookie = 'adminer_schema=' + encodeURIComponent(s.substr(1)) + '; expires=' + date + '; path=' + location.pathname + location.search; + } +} Copied: trunk/adminer/static/favicon.ico (from rev 1121, trunk/adminer/favicon.ico) =================================================================== (Binary files differ) Copied: trunk/adminer/static/functions.js (from rev 1121, trunk/adminer/functions.js) =================================================================== --- trunk/adminer/static/functions.js (rev 0) +++ trunk/adminer/static/functions.js 2009-09-23 09:56:07 UTC (rev 1131) @@ -0,0 +1,59 @@ +document.body.className = 'js'; + +function toggle(id) { + var el = document.getElementById(id); + el.className = (el.className == 'hidden' ? '' : 'hidden'); + return true; +} + +function verify_version() { + document.cookie = 'adminer_version=0'; + var script = document.createElement('script'); + script.src = 'https://adminer.svn.sourceforge.net/svnroot/adminer/trunk/version.js'; + document.body.appendChild(script); +} + +function form_check(el, name) { + var elems = el.form.elements; + for (var i=0; i < elems.length; i++) { + if (name.test(elems[i].name)) { + elems[i].checked = el.checked; + } + } +} + +function form_uncheck(id) { + document.getElementById(id).checked = false; +} + +function table_click(event) { + var el = event.target || event.srcElement; + while (!/^tr$/i.test(el.tagName)) { + if (/^(table|a|input)$/i.test(el.tagName)) { + return; + } + el = el.parentNode; + } + el = el.firstChild.firstChild; + el.click && el.click(); + el.onclick && el.onclick(); +} + + + +function select_add_row(field) { + var row = field.parentNode.cloneNode(true); + var selects = row.getElementsByTagName('select'); + for (var i=0; i < selects.length; i++) { + selects[i].name = selects[i].name.replace(/[a-z]\[[0-9]+/, '$&1'); + selects[i].selectedIndex = 0; + } + var inputs = row.getElementsByTagName('input'); + if (inputs.length) { + inputs[0].name = inputs[0].name.replace(/[a-z]\[[0-9]+/, '$&1'); + inputs[0].value = ''; + inputs[0].className = ''; + } + field.parentNode.parentNode.appendChild(row); + field.onchange = function () { }; +} Copied: trunk/adminer/static/plus.gif (from rev 1121, trunk/adminer/plus.gif) =================================================================== (Binary files differ) Copied: trunk/adminer/static/up.gif (from rev 1121, trunk/adminer/up.gif) =================================================================== (Binary files differ) Deleted: trunk/adminer/up.gif =================================================================== (Binary files differ) Modified: trunk/compile.php =================================================================== --- trunk/compile.php 2009-09-23 09:40:56 UTC (rev 1130) +++ trunk/compile.php 2009-09-23 09:56:07 UTC (rev 1131) @@ -190,8 +190,8 @@ $file = str_replace('<script type="text/javascript" src="editing.js"></script>' . "\n", "", $file); $file = preg_replace_callback("~compile_file\\('([^']+)', '([^']+)'\\);~", 'compile_file', $file); // integrate static files $replace = 'h(preg_replace("~\\\\\\\\?.*~", "", $_SERVER["REQUEST_URI"])) . "?file=\\1&version=' . $VERSION; -$file = preg_replace('~\\.\\./adminer/(default\\.css|functions\\.js|favicon\\.ico)~', '<?php echo ' . $replace . '"; ?>', $file); -$file = preg_replace('~\\.\\./adminer/((plus|cross|up|down|arrow)\\.gif)~', '" . ' . $replace, $file); +$file = preg_replace('~\\.\\./adminer/static/(default\\.css|functions\\.js|favicon\\.ico)~', '<?php echo ' . $replace . '"; ?>', $file); +$file = preg_replace('~\\.\\./adminer/static/([^\'"]*)~', '" . ' . $replace, $file); $file = str_replace("../externals/jush/", "https://jush.svn.sourceforge.net/svnroot/jush/trunk/", $file); // mixed-content warning if Adminer runs on HTTPS and external files on HTTP $file = preg_replace("~<\\?php\\s*\\?>\n?|\\?>\n?<\\?php~", '', $file); $file = php_shrink($file); Deleted: trunk/editor/editing.js =================================================================== --- trunk/editor/editing.js 2009-09-23 09:40:56 UTC (rev 1130) +++ trunk/editor/editing.js 2009-09-23 09:56:07 UTC (rev 1131) @@ -1,4 +0,0 @@ -// Editor specific functions - -function body_load() { -} Modified: trunk/editor/include/adminer.inc.php =================================================================== --- trunk/editor/include/adminer.inc.php 2009-09-23 09:40:56 UTC (rev 1130) +++ trunk/editor/include/adminer.inc.php 2009-09-23 09:56:07 UTC (rev 1131) @@ -118,7 +118,7 @@ } } if ($field["full_type"] == "tinyint(1)" && $return != " ") { // bool - $return = '<img src="' . ($val ? "../adminer/plus.gif" : "../adminer/cross.gif") . '" alt="' . h($val) . '">'; + $return = '<img src="' . ($val ? "../adminer/static/plus.gif" : "../adminer/static/cross.gif") . '" alt="' . h($val) . '">'; } return ($link ? "<a href='$link'>$return</a>" : $return); } Property changes on: trunk/editor/static ___________________________________________________________________ Added: tsvn:projectlanguage + 1033 Copied: trunk/editor/static/editing.js (from rev 1121, trunk/editor/editing.js) =================================================================== --- trunk/editor/static/editing.js (rev 0) +++ trunk/editor/static/editing.js 2009-09-23 09:56:07 UTC (rev 1131) @@ -0,0 +1,4 @@ +// Editor specific functions + +function body_load() { +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-09-23 15:01:34
|
Revision: 1135 http://adminer.svn.sourceforge.net/adminer/?rev=1135&view=rev Author: jakubvrana Date: 2009-09-23 15:01:17 +0000 (Wed, 23 Sep 2009) Log Message: ----------- Simplify tablesPrint Modified Paths: -------------- trunk/adminer/include/adminer.inc.php trunk/editor/include/adminer.inc.php Modified: trunk/adminer/include/adminer.inc.php =================================================================== --- trunk/adminer/include/adminer.inc.php 2009-09-23 14:28:06 UTC (rev 1134) +++ trunk/adminer/include/adminer.inc.php 2009-09-23 15:01:17 UTC (rev 1135) @@ -435,7 +435,7 @@ * @return null */ function navigation($missing) { - global $VERSION; + global $VERSION, $connection; ?> <h1> <a href="http://www.adminer.org/" id="h1"><?php echo $this->name(); ?></a> @@ -470,28 +470,27 @@ </p> </form> <?php - $this->tablesPrint($missing); + if ($missing != "db" && strlen(DB) && $connection->select_db(DB)) { + $tables = get_vals("SHOW TABLES"); + if (!$tables) { + echo "<p class='message'>" . lang('No tables.') . "\n"; + } else { + $this->tablesPrint($tables); + } + echo '<p><a href="' . h(ME) . 'create=">' . lang('Create new table') . "</a>\n"; + } } } /** Prints table list in menu - * @param string can be "db" if there is no database selected + * @param array * @return null */ - function tablesPrint($missing) { - global $connection; - if ($missing != "db" && strlen(DB) && $connection->select_db(DB)) { - $result = $connection->query("SHOW TABLES"); - if (!$result->num_rows) { - echo "<p class='message'>" . lang('No tables.') . "\n"; - } else { - echo "<p id='tables'>\n"; - while ($row = $result->fetch_row()) { - echo '<a href="' . h(ME) . 'select=' . urlencode($row[0]) . '">' . lang('select') . '</a> '; - echo '<a href="' . h(ME) . 'table=' . urlencode($row[0]) . '">' . $this->tableName(array("Name" => $row[0])) . "</a><br>\n"; //! Adminer::tableName may work with full table status - } - } - echo '<p><a href="' . h(ME) . 'create=">' . lang('Create new table') . "</a>\n"; + function tablesPrint($tables) { + echo "<p id='tables'>\n"; + foreach ($tables as $table) { + echo '<a href="' . h(ME) . 'select=' . urlencode($table) . '">' . lang('select') . '</a> '; + echo '<a href="' . h(ME) . 'table=' . urlencode($table) . '">' . $this->tableName(array("Name" => $table)) . "</a><br>\n"; //! Adminer::tableName may work with full table status } } Modified: trunk/editor/include/adminer.inc.php =================================================================== --- trunk/editor/include/adminer.inc.php 2009-09-23 14:28:06 UTC (rev 1134) +++ trunk/editor/include/adminer.inc.php 2009-09-23 15:01:17 UTC (rev 1135) @@ -415,23 +415,23 @@ </p> </form> <?php - $this->tablesPrint($missing); + if ($missing != "db") { + $table_status = table_status(); + if (!$table_status) { + echo "<p class='message'>" . lang('No tables.') . "\n"; + } else { + $this->tablesPrint($table_status); + } + } } } - function tablesPrint($missing) { - if ($missing != "db") { - $table_status = table_status(); - if (!$table_status) { - echo "<p class='message'>" . lang('No tables.') . "\n"; - } else { - echo "<p id='tables'>\n"; - foreach ($table_status as $row) { - $name = $this->tableName($row); - if (isset($row["Engine"]) && strlen($name)) { // ignore views and tables without name - echo "<a href='" . h(ME) . 'select=' . urlencode($row["Name"]) . "'>$name</a><br>\n"; - } - } + function tablesPrint($tables) { + echo "<p id='tables'>\n"; + foreach ($tables as $row) { + $name = $this->tableName($row); + if (isset($row["Engine"]) && strlen($name)) { // ignore views and tables without name + echo "<a href='" . h(ME) . 'select=' . urlencode($row["Name"]) . "'>$name</a><br>\n"; } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-09-24 08:58:51
|
Revision: 1137 http://adminer.svn.sourceforge.net/adminer/?rev=1137&view=rev Author: jakubvrana Date: 2009-09-24 08:58:39 +0000 (Thu, 24 Sep 2009) Log Message: ----------- Optional year in date Modified Paths: -------------- trunk/adminer/lang/cs.inc.php trunk/adminer/lang/de.inc.php trunk/adminer/lang/es.inc.php trunk/adminer/lang/et.inc.php trunk/adminer/lang/fr.inc.php trunk/adminer/lang/it.inc.php trunk/adminer/lang/nl.inc.php trunk/adminer/lang/ru.inc.php trunk/adminer/lang/sk.inc.php trunk/adminer/lang/zh-tw.inc.php trunk/adminer/lang/zh.inc.php trunk/changes.txt trunk/editor/include/adminer.inc.php Modified: trunk/adminer/lang/cs.inc.php =================================================================== --- trunk/adminer/lang/cs.inc.php 2009-09-23 15:33:54 UTC (rev 1136) +++ trunk/adminer/lang/cs.inc.php 2009-09-24 08:58:39 UTC (rev 1137) @@ -204,7 +204,7 @@ '(anywhere)' => '(kdekoliv)', '%.3f s' => '%.3f s', '$1-$3-$5' => '$6.$4.$1', - 'yyyy-mm-dd' => 'd.m.yyyy', + '[yyyy]-mm-dd' => 'd.m.[rrrr]', 'History' => 'Historie', 'Variables' => 'Proměnné', 'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Zdrojové a cílové sloupce musí mít stejný datový typ, nad cílovými sloupci musí být definován index a odkazovaná data musí existovat.', Modified: trunk/adminer/lang/de.inc.php =================================================================== --- trunk/adminer/lang/de.inc.php 2009-09-23 15:33:54 UTC (rev 1136) +++ trunk/adminer/lang/de.inc.php 2009-09-24 08:58:39 UTC (rev 1137) @@ -204,7 +204,7 @@ 'Select table' => 'Tabelle auswählen', '%.3f s' => '%.3f s', '$1-$3-$5' => '$6.$4.$1', - 'yyyy-mm-dd' => 'd.m.yyyy', + '[yyyy]-mm-dd' => 't.m.[jjjj]', 'History' => 'History', 'Variables' => 'Variablen', 'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Spalten des Ursprungs und des Zieles müssen vom gleichen Datentyp sein, es muss unter den Zielspalten ein Index existieren und die referenzierten Daten müssen existieren.', Modified: trunk/adminer/lang/es.inc.php =================================================================== --- trunk/adminer/lang/es.inc.php 2009-09-23 15:33:54 UTC (rev 1136) +++ trunk/adminer/lang/es.inc.php 2009-09-24 08:58:39 UTC (rev 1137) @@ -204,7 +204,7 @@ 'Select table' => 'Seleccionar tabla', '%.3f s' => '%.3f s', '$1-$3-$5' => '$5/$3/$1', - 'yyyy-mm-dd' => 'dd/mm/yyyy', + '[yyyy]-mm-dd' => 'dd/mm/[aaaa]', 'History' => 'History', 'Variables' => 'Variables', 'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Las columnas de origen y destino deben ser del mismo tipo, debe existir un índice entre las columnas del destino y el registro referenciado debe existir.', Modified: trunk/adminer/lang/et.inc.php =================================================================== --- trunk/adminer/lang/et.inc.php 2009-09-23 15:33:54 UTC (rev 1136) +++ trunk/adminer/lang/et.inc.php 2009-09-24 08:58:39 UTC (rev 1137) @@ -204,7 +204,7 @@ 'Select table' => 'Vali tabel', '%.3f s' => '%.3f s', '$1-$3-$5' => '$6.$4.$1', - 'yyyy-mm-dd' => 'd.m.yyyy', + '[yyyy]-mm-dd' => 'd.m.[yyyy]', 'History' => 'Ajalugu', 'Variables' => 'Muutujad', 'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Lähte- ja sihtveerud peavad eksisteerima ja omama sama andmetüüpi, sihtveergudel peab olema määratud indeks ning viidatud andmed peavad eksisteerima.', Modified: trunk/adminer/lang/fr.inc.php =================================================================== --- trunk/adminer/lang/fr.inc.php 2009-09-23 15:33:54 UTC (rev 1136) +++ trunk/adminer/lang/fr.inc.php 2009-09-24 08:58:39 UTC (rev 1137) @@ -204,7 +204,7 @@ 'Select table' => 'Selectionner la table', '%.3f s' => '%.3f s', '$1-$3-$5' => '$5/$3/$1', - 'yyyy-mm-dd' => 'dd/mm/yyyy', + '[yyyy]-mm-dd' => 'jj/mm/[aaaa]', 'History' => 'Historique', 'Variables' => 'Variables', 'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Les colonnes selectionnées et les colonnes de destination doivent être du même type, il doit y avoir un index sur les colonnes de destination et les données de référence doivent exister.', Modified: trunk/adminer/lang/it.inc.php =================================================================== --- trunk/adminer/lang/it.inc.php 2009-09-23 15:33:54 UTC (rev 1136) +++ trunk/adminer/lang/it.inc.php 2009-09-24 08:58:39 UTC (rev 1137) @@ -204,7 +204,7 @@ 'Select table' => 'Scegli tabella', '%.3f s' => '%.3f s', '$1-$3-$5' => '$5/$3/$1', - 'yyyy-mm-dd' => 'dd/mm/yyyy', + '[yyyy]-mm-dd' => 'dd/mm/[yyyy]', 'History' => 'Storico', 'Variables' => 'Variabili', 'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Le colonne sorgente e destinazione devono essere dello stesso tipo e ci deve essere un indice sulla colonna di destinazione e sui dati referenziati.', Modified: trunk/adminer/lang/nl.inc.php =================================================================== --- trunk/adminer/lang/nl.inc.php 2009-09-23 15:33:54 UTC (rev 1136) +++ trunk/adminer/lang/nl.inc.php 2009-09-24 08:58:39 UTC (rev 1137) @@ -204,7 +204,7 @@ 'Select table' => 'Selecteer tabel', '%.3f s' => '%.3f s', '$1-$3-$5' => '$5-$3-$1', - 'yyyy-mm-dd' => 'dd-mm-yyyy', + '[yyyy]-mm-dd' => 'dd-mm-[jjjj]', 'History' => 'Geschiedenis', 'Variables' => 'Variabelen', 'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Bron- en doelkolommen moeten van hetzelfde data type zijn, er moet een index bestaan op de gekozen kolommen en er moet gerelateerde data bestaan.', Modified: trunk/adminer/lang/ru.inc.php =================================================================== --- trunk/adminer/lang/ru.inc.php 2009-09-23 15:33:54 UTC (rev 1136) +++ trunk/adminer/lang/ru.inc.php 2009-09-24 08:58:39 UTC (rev 1137) @@ -204,7 +204,7 @@ '(anywhere)' => '(в любом месте)', '%.3f s' => '%.3f s', '$1-$3-$5' => '$5.$3.$1', - 'yyyy-mm-dd' => 'dd.mm.yyyy', + '[yyyy]-mm-dd' => 'дд.мм.[гггг]', 'History' => 'История', 'Variables' => 'Переменные', 'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Колонки должны иметь одинаковые типы данных, в результирующей колонке должен быть индекс, данные для импорта должны существовать.', Modified: trunk/adminer/lang/sk.inc.php =================================================================== --- trunk/adminer/lang/sk.inc.php 2009-09-23 15:33:54 UTC (rev 1136) +++ trunk/adminer/lang/sk.inc.php 2009-09-24 08:58:39 UTC (rev 1137) @@ -204,7 +204,7 @@ '(anywhere)' => '(kdekoľvek)', '%.3f s' => '%.3f s', '$1-$3-$5' => '$6.$4.$1', - 'yyyy-mm-dd' => 'd.m.yyyy', + '[yyyy]-mm-dd' => 'd.m.[rrrr]', 'History' => 'História', 'Variables' => 'Premenné', 'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Zdrojové a cieľové stĺpce musia mať rovnaký datový typ, nad cieľovými stĺpcami musí byť definovaný index a odkazované dáta musia existovať.', Modified: trunk/adminer/lang/zh-tw.inc.php =================================================================== --- trunk/adminer/lang/zh-tw.inc.php 2009-09-23 15:33:54 UTC (rev 1136) +++ trunk/adminer/lang/zh-tw.inc.php 2009-09-24 08:58:39 UTC (rev 1137) @@ -204,7 +204,7 @@ 'Select table' => '選擇資料表', '%.3f s' => '%.3f秒', '$1-$3-$5' => '$1.$3.$5', - 'yyyy-mm-dd' => 'dd.mm.yyyy', + '[yyyy]-mm-dd' => '[yyyy].mm.dd', 'History' => '歷史', 'Variables' => '變數', 'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => '源列和目標列必須具有相同的數據類型,在目標列上必須有一個索引並且引用的數據必須存在。', Modified: trunk/adminer/lang/zh.inc.php =================================================================== --- trunk/adminer/lang/zh.inc.php 2009-09-23 15:33:54 UTC (rev 1136) +++ trunk/adminer/lang/zh.inc.php 2009-09-24 08:58:39 UTC (rev 1137) @@ -204,7 +204,7 @@ 'Select table' => '选择表', '%.3f s' => '%.3f 秒', '$1-$3-$5' => '$1.$3.$5', - 'yyyy-mm-dd' => 'dd.mm.yyyy', + '[yyyy]-mm-dd' => '[yyyy].mm.dd', 'History' => '历史', 'Variables' => '变量', 'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => '源列和目标列必须具有相同的数据类型,在目标列上必须有一个索引并且引用的数据必须存在。', Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2009-09-23 15:33:54 UTC (rev 1136) +++ trunk/changes.txt 2009-09-24 08:58:39 UTC (rev 1137) @@ -4,6 +4,7 @@ Display whitespace in texts (bug #2858042) Display number of manipulated rows in JS confirm E-mail attachments (Editor) +Optional year in date (Editor) Move <h1> to $adminer->navigation (customization) Rename get_dbh to connection (customization) Modified: trunk/editor/include/adminer.inc.php =================================================================== --- trunk/editor/include/adminer.inc.php 2009-09-23 15:33:54 UTC (rev 1136) +++ trunk/editor/include/adminer.inc.php 2009-09-24 08:58:39 UTC (rev 1137) @@ -377,7 +377,7 @@ return '<input type="checkbox" value="' . h($value ? $value : 1) . '"' . ($value ? ' checked' : '') . "$attrs>"; } if (ereg('date|timestamp', $field["type"])) { - return "<input value='" . h($value) . "'$attrs> (" . lang('yyyy-mm-dd') . ")"; //! maxlength + return "<input value='" . h($value) . "'$attrs> (" . lang('[yyyy]-mm-dd') . ")"; //! maxlength } return ''; } @@ -387,8 +387,8 @@ if ($function == "now") { return "$function()"; } - $return = $connection->quote(ereg('date|timestamp', $field["type"]) && preg_match('(^' . str_replace('\\$1', '(?P<p1>[0-9]+)', preg_replace('~(\\\\\\$([2-6]))~', '(?P<p\\2>[0-9]{1,2})', preg_quote(lang('$1-$3-$5')))) . '(.*))', $value, $match) - ? ($match["p1"] ? $match["p1"] : ($match["p2"] < 70 ? 20 : 19) . $match["p2"]) . "-$match[p3]$match[p4]-$match[p5]$match[p6]" . end($match) + $return = $connection->quote(ereg('date|timestamp', $field["type"]) && preg_match('(^' . str_replace('\\$1', '(?P<p1>[0-9]*)', preg_replace('~(\\\\\\$([2-6]))~', '(?P<p\\2>[0-9]{1,2})', preg_quote(lang('$1-$3-$5')))) . '(.*))', $value, $match) + ? (strlen($match["p1"]) ? $match["p1"] : (strlen($match["p2"]) ? ($match["p2"] < 70 ? 20 : 19) . $match["p2"] : gmdate("Y"))) . "-$match[p3]$match[p4]-$match[p5]$match[p6]" . end($match) : $value ); if (!ereg('varchar|text', $field["type"]) && $field["full_type"] != "tinyint(1)" && !strlen($value)) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-09-25 13:48:12
|
Revision: 1148 http://adminer.svn.sourceforge.net/adminer/?rev=1148&view=rev Author: jakubvrana Date: 2009-09-25 13:48:00 +0000 (Fri, 25 Sep 2009) Log Message: ----------- Search operators Modified Paths: -------------- trunk/changes.txt trunk/editor/include/adminer.inc.php Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2009-09-25 12:03:30 UTC (rev 1147) +++ trunk/changes.txt 2009-09-25 13:48:00 UTC (rev 1148) @@ -5,6 +5,7 @@ Display number of manipulated rows in JS confirm E-mail attachments (Editor) Optional year in date (Editor) +Search operators (Editor) Move <h1> to $adminer->navigation (customization) Rename get_dbh to connection (customization) Modified: trunk/editor/include/adminer.inc.php =================================================================== --- trunk/editor/include/adminer.inc.php 2009-09-25 12:03:30 UTC (rev 1147) +++ trunk/editor/include/adminer.inc.php 2009-09-25 13:48:00 UTC (rev 1148) @@ -1,5 +1,6 @@ <?php class Adminer { + var $operators = array("<=", ">="); function name() { return lang('Editor'); @@ -167,11 +168,13 @@ foreach ((array) $_GET["where"] as $val) { if (strlen("$val[col]$val[val]")) { echo "<div><select name='where[$i][col]'><option value=''>" . lang('(anywhere)') . optionlist($columns, $val["col"], true) . "</select>"; + echo "<select name='where[$i][op]'><option>" . optionlist($this->operators, $val["op"]) . "</select>"; echo "<input name='where[$i][val]' value='" . h($val["val"]) . "'></div>\n"; $i++; } } echo "<div><select name='where[$i][col]' onchange='select_add_row(this);'><option value=''>" . lang('(anywhere)') . optionlist($columns, null, true) . "</select>"; + echo "<select name='where[$i][op]'><option>" . optionlist($this->operators) . "</select>"; echo "<input name='where[$i][val]'></div>\n"; echo "</div></fieldset>\n"; } @@ -238,7 +241,7 @@ if (strlen($col) || is_numeric($val["val"]) || !ereg('int|float|double|decimal', $field["type"])) { $text_type = ereg('char|text|enum|set', $field["type"]); $value = $this->processInput($field, (strlen($val["val"]) && $text_type && strpos($val["val"], "%") === false ? "%$val[val]%" : $val["val"])); - $conds[] = idf_escape($name) . ($value == "NULL" ? " IS" : ($val["op"] != "=" && $text_type ? " LIKE" : " =")) . " $value"; + $conds[] = idf_escape($name) . (in_array($val["op"], $this->operators) ? " $val[op]" : ($value == "NULL" ? " IS" : ($val["op"] != "=" && $text_type ? " LIKE" : " ="))) . " $value"; } } $return[] = ($conds ? "(" . implode(" OR ", $conds) . ")" : "0"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-09-25 14:52:37
|
Revision: 1149 http://adminer.svn.sourceforge.net/adminer/?rev=1149&view=rev Author: jakubvrana Date: 2009-09-25 14:52:30 +0000 (Fri, 25 Sep 2009) Log Message: ----------- Align numbers to right in select Modified Paths: -------------- trunk/adminer/select.inc.php trunk/adminer/static/default.css trunk/changes.txt trunk/editor/include/adminer.inc.php Modified: trunk/adminer/select.inc.php =================================================================== --- trunk/adminer/select.inc.php 2009-09-25 13:48:00 UTC (rev 1148) +++ trunk/adminer/select.inc.php 2009-09-25 14:52:30 UTC (rev 1149) @@ -127,7 +127,7 @@ $set = ""; foreach ((array) $_GET["where"] as $val) { if (count($foreign_keys[$val["col"]]) == 1 && ($val["op"] == "=" - || ($val["op"] == "" && !ereg('[_%]', $val["val"])) // LIKE in Editor + || (!$val["op"] && !ereg('[_%]', $val["val"])) // LIKE in Editor )) { $set .= "&set" . urlencode("[" . bracket_escape($val["col"]) . "]") . "=" . urlencode($val["val"]); } @@ -198,20 +198,21 @@ echo "<tr" . odd() . "><td>" . checkbox("check[]", $unique_idf, in_array($unique_idf, (array) $_POST["check"]), "", "this.form['all'].checked = false; form_uncheck('all-page');") . (count($select) != count($group) || information_schema(DB) ? '' : " <a href='" . h(ME . "edit=" . urlencode($TABLE) . "&$unique_idf") . "'>" . lang('edit') . "</a>"); foreach ($row as $key => $val) { if (isset($names[$key])) { + $field = $fields[$key]; if (strlen($val) && (!isset($email_fields[$key]) || strlen($email_fields[$key]))) { $email_fields[$key] = (is_email($val) ? $names[$key] : ""); //! filled e-mails may be contained on other pages } $link = ""; - $val = $adminer->editVal($val, $fields[$key]); + $val = $adminer->editVal($val, $field); if (!isset($val)) { $val = "<i>NULL</i>"; } else { - if (ereg('blob|binary', $fields[$key]["type"]) && strlen($val)) { + if (ereg('blob|binary', $field["type"]) && strlen($val)) { $link = h(ME . 'download=' . urlencode($TABLE) . '&field=' . urlencode($key) . "&$unique_idf"); } if (!strlen($val)) { $val = " "; - } elseif (strlen($text_length) && ereg('blob|text', $fields[$key]["type"]) && is_utf8($val)) { + } elseif (strlen($text_length) && ereg('text|blob', $field["type"]) && is_utf8($val)) { $val = whitespace(shorten_utf8($val, max(0, intval($text_length)))); // usage of LEFT() would reduce traffic but complicate query } else { $val = whitespace(h($val)); @@ -232,7 +233,7 @@ if (!$link && is_email($val)) { $link = "mailto:$val"; } - $val = $adminer->selectVal($val, $link, $fields[$key]); + $val = $adminer->selectVal($val, $link, $field); echo "<td>$val"; } } Modified: trunk/adminer/static/default.css =================================================================== --- trunk/adminer/static/default.css 2009-09-25 13:48:00 UTC (rev 1148) +++ trunk/adminer/static/default.css 2009-09-25 14:52:30 UTC (rev 1149) @@ -30,6 +30,7 @@ .odd td { background: #F5F5F5; } .time { color: silver; font-size: 70%; float: right; margin-top: -3em; } .function { text-align: right; } +.number { text-align: right; } .type { width: 15ex; width: auto\9; } #menu { position: absolute; margin: 10px 0 0; padding: 0 0 30px 0; top: 2em; left: 0; width: 19em; overflow: auto; overflow-y: hidden; white-space: nowrap; } #menu p { padding: .8em 1em; margin: 0; border-bottom: 1px solid #ccc; } Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2009-09-25 13:48:00 UTC (rev 1148) +++ trunk/changes.txt 2009-09-25 14:52:30 UTC (rev 1149) @@ -6,6 +6,7 @@ E-mail attachments (Editor) Optional year in date (Editor) Search operators (Editor) +Align numbers to right in select (Editor) Move <h1> to $adminer->navigation (customization) Rename get_dbh to connection (customization) Modified: trunk/editor/include/adminer.inc.php =================================================================== --- trunk/editor/include/adminer.inc.php 2009-09-25 13:48:00 UTC (rev 1148) +++ trunk/editor/include/adminer.inc.php 2009-09-25 14:52:30 UTC (rev 1149) @@ -147,7 +147,13 @@ if ($field["full_type"] == "tinyint(1)" && $return != " ") { // bool $return = '<img src="' . ($val ? "../adminer/static/plus.gif" : "../adminer/static/cross.gif") . '" alt="' . h($val) . '">'; } - return ($link ? "<a href='$link'>$return</a>" : $return); + if ($link) { + $return = "<a href='$link'>$return</a>"; + } + if (!$link && $field["full_type"] != "tinyint(1)" && ereg('int|float|double|decimal', $field["type"])) { + $return = "<div class='number'>$return</div>"; // Firefox doesn't support <colgroup> + } + return $return; } function editVal($val, $field) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-09-25 15:30:48
|
Revision: 1150 http://adminer.svn.sourceforge.net/adminer/?rev=1150&view=rev Author: jakubvrana Date: 2009-09-25 15:30:38 +0000 (Fri, 25 Sep 2009) Log Message: ----------- ClickJacking protection Modified Paths: -------------- trunk/adminer/include/design.inc.php trunk/changes.txt Modified: trunk/adminer/include/design.inc.php =================================================================== --- trunk/adminer/include/design.inc.php 2009-09-25 14:52:30 UTC (rev 1149) +++ trunk/adminer/include/design.inc.php 2009-09-25 15:30:38 UTC (rev 1150) @@ -2,6 +2,7 @@ function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") { global $LANG, $VERSION, $adminer; header("Content-Type: text/html; charset=utf-8"); + header("X-Frame-Options: deny"); // ClickJacking protection in IE8, Safari 4, Chrome 2, NoScript plugin $title_all = $title . (strlen($title2) ? ": " . h($title2) : ""); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2009-09-25 14:52:30 UTC (rev 1149) +++ trunk/changes.txt 2009-09-25 15:30:38 UTC (rev 1150) @@ -3,6 +3,7 @@ Fix removed default in ALTER Display whitespace in texts (bug #2858042) Display number of manipulated rows in JS confirm +ClickJacking protection in modern browsers E-mail attachments (Editor) Optional year in date (Editor) Search operators (Editor) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-09-26 16:52:41
|
Revision: 1151 http://adminer.svn.sourceforge.net/adminer/?rev=1151&view=rev Author: jakubvrana Date: 2009-09-26 16:52:32 +0000 (Sat, 26 Sep 2009) Log Message: ----------- Clickable labels in IE6 Modified Paths: -------------- trunk/adminer/dump.inc.php trunk/adminer/include/functions.inc.php trunk/todo.txt Modified: trunk/adminer/dump.inc.php =================================================================== --- trunk/adminer/dump.inc.php 2009-09-25 15:30:38 UTC (rev 1150) +++ trunk/adminer/dump.inc.php 2009-09-26 16:52:32 UTC (rev 1151) @@ -170,7 +170,7 @@ echo "</thead>\n"; $views = ""; foreach (table_status() as $row) { - $checked = (strlen($TABLE) && $row["Name"] != $TABLE); + $checked = !strlen($TABLE) || $row["Name"] == $TABLE; $print = "<tr><td>" . checkbox("tables[]", $row["Name"], $checked, $row["Name"], "form_uncheck('check-tables');"); if (!$row["Engine"]) { $views .= "$print\n"; Modified: trunk/adminer/include/functions.inc.php =================================================================== --- trunk/adminer/include/functions.inc.php 2009-09-25 15:30:38 UTC (rev 1150) +++ trunk/adminer/include/functions.inc.php 2009-09-26 16:52:32 UTC (rev 1151) @@ -68,8 +68,10 @@ * @return string */ function checkbox($name, $value, $checked, $label = "", $onclick = "") { - $return = "<input type='checkbox' name='$name' value='" . h($value) . "'" . ($checked ? " checked" : "") . ($onclick ? " onclick=\"$onclick\"" : "") . ">"; - return (strlen($label) ? "<label>$return" . h($label) . "</label>" : $return); + static $id = 0; + $id++; + $return = "<input type='checkbox' name='$name' value='" . h($value) . "'" . ($checked ? " checked" : "") . ($onclick ? " onclick=\"$onclick\"" : "") . " id='checkbox-$id'>"; + return (strlen($label) ? "<label for='checkbox-$id'>$return" . h($label) . "</label>" : $return); } /** Generate list of HTML options Modified: trunk/todo.txt =================================================================== --- trunk/todo.txt 2009-09-25 15:30:38 UTC (rev 1150) +++ trunk/todo.txt 2009-09-26 16:52:32 UTC (rev 1151) @@ -7,7 +7,6 @@ Function to fix database encoding - http://php.vrana.cz/prevod-kodovani-mysql.php Highlight SQL textarea - may use external CodePress Mass editation of individual rows -IE6 - <label for> Offer enum and set items in search - whisperer Use event $intervals + microseconds in relative date functions ? Column and table names auto-completition in SQL textarea This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-10-02 13:21:46
|
Revision: 1162 http://adminer.svn.sourceforge.net/adminer/?rev=1162&view=rev Author: jakubvrana Date: 2009-10-02 13:21:34 +0000 (Fri, 02 Oct 2009) Log Message: ----------- Utilize html_select Modified Paths: -------------- trunk/adminer/create.inc.php trunk/adminer/database.inc.php trunk/adminer/db.inc.php trunk/adminer/dump.inc.php trunk/adminer/event.inc.php trunk/adminer/foreign.inc.php trunk/adminer/include/adminer.inc.php trunk/adminer/include/editing.inc.php trunk/adminer/include/functions.inc.php trunk/adminer/include/lang.inc.php trunk/adminer/indexes.inc.php trunk/adminer/trigger.inc.php trunk/editor/include/adminer.inc.php Modified: trunk/adminer/create.inc.php =================================================================== --- trunk/adminer/create.inc.php 2009-10-02 12:31:28 UTC (rev 1161) +++ trunk/adminer/create.inc.php 2009-10-02 13:21:34 UTC (rev 1162) @@ -155,8 +155,8 @@ <form action="" method="post" id="form"> <p> <?php echo lang('Table name'); ?>: <input name="name" maxlength="64" value="<?php echo h($row["name"]); ?>"> -<select name="Engine"><option value="">(<?php echo lang('engine'); ?>)<?php echo optionlist($engines, $row["Engine"]); ?></select> -<select name="Collation"><option value="">(<?php echo lang('collation'); ?>)<?php echo optionlist($collations, $row["Collation"]); ?></select> +<?php echo html_select("Engine", array("" => "(" . lang('engine') . ")") + $engines, $row["Engine"]); ?> +<?php echo html_select("Collation", array("" => "(" . lang('collation') . ")") + $collations, $row["Collation"]); ?> <input type="submit" value="<?php echo lang('Save'); ?>"> </p> <table cellspacing="0" id="edit-fields"> @@ -178,7 +178,7 @@ ?> <fieldset><legend><?php echo lang('Partition by'); ?></legend> <p> -<select name="partition_by" onchange="partition_by_change(this);"><option><?php echo optionlist($partition_by, $row["partition_by"]); ?></select> +<?php echo html_select("partition_by", array(-1 => "") + $partition_by, $row["partition_by"], "partition_by_change(this);"); ?> (<input name="partition" value="<?php echo h($row["partition"]); ?>">) <?php echo lang('Partitions'); ?>: <input name="partitions" size="2" value="<?php echo h($row["partitions"]); ?>"<?php echo ($partition_table || !$row["partition_by"] ? " class='hidden'" : ""); ?>> <table cellspacing="0" id="partition-table"<?php echo ($partition_table ? "" : " class='hidden'"); ?>> Modified: trunk/adminer/database.inc.php =================================================================== --- trunk/adminer/database.inc.php 2009-10-02 12:31:28 UTC (rev 1161) +++ trunk/adminer/database.inc.php 2009-10-02 13:21:34 UTC (rev 1162) @@ -72,7 +72,7 @@ ? '<textarea name="name" rows="10" cols="40">' . h($name) . '</textarea><br>' : '<input name="name" value="' . h($name) . '" maxlength="64">' ) . "\n"; ?> -<select name="collation"><option value="">(<?php echo lang('collation'); ?>)<?php echo optionlist($collations, $collate); ?></select> +<?php echo html_select("collation", array("" => "(" . lang('collation') . ")") + $collations, $collate); ?> <input type="hidden" name="token" value="<?php echo $token; ?>"> <input type="submit" value="<?php echo lang('Save'); ?>"> <?php Modified: trunk/adminer/db.inc.php =================================================================== --- trunk/adminer/db.inc.php 2009-10-02 12:31:28 UTC (rev 1161) +++ trunk/adminer/db.inc.php 2009-10-02 13:21:34 UTC (rev 1162) @@ -68,7 +68,7 @@ $dbs = get_databases(); if (count($dbs) != 1) { $db = (isset($_POST["target"]) ? $_POST["target"] : DB); - echo "<p>" . lang('Move to other database') . ($dbs ? ": <select name='target'>" . optionlist($dbs, $db) . "</select>" : ': <input name="target" value="' . h($db) . '">') . " <input type='submit' name='move' value='" . lang('Move') . "'>\n"; + echo "<p>" . lang('Move to other database') . ($dbs ? ": " . html_select("target", $dbs, $db) : ': <input name="target" value="' . h($db) . '">') . " <input type='submit' name='move' value='" . lang('Move') . "'>\n"; } echo "</form>\n"; } Modified: trunk/adminer/dump.inc.php =================================================================== --- trunk/adminer/dump.inc.php 2009-10-02 12:31:28 UTC (rev 1161) +++ trunk/adminer/dump.inc.php 2009-10-02 13:21:34 UTC (rev 1162) @@ -144,16 +144,16 @@ } echo "<tr><th>" . lang('Output') . "<td><input type='hidden' name='token' value='$token'>" . $adminer->dumpOutput(0) . "\n"; // token is not needed but checked in bootstrap for all POST data echo "<tr><th>" . lang('Format') . "<td>" . $adminer->dumpFormat(0) . "\n"; -echo "<tr><th>" . lang('Database') . "<td><select name='db_style'>" . optionlist($db_style, (strlen(DB) ? '' : 'CREATE')) . "</select>\n"; +echo "<tr><th>" . lang('Database') . "<td>" . html_select('db_style', $db_style, (strlen(DB) ? '' : 'CREATE')); if ($connection->server_info >= 5) { $checked = strlen($_GET["dump"]); - checkbox("routines", 1, $checked, lang('Routines')); + echo checkbox("routines", 1, $checked, lang('Routines')); if ($connection->server_info >= 5.1) { - checkbox("events", 1, $checked, lang('Events')); + echo checkbox("events", 1, $checked, lang('Events')); } } -echo "<tr><th>" . lang('Tables') . "<td><select name='table_style'>" . optionlist($table_style, 'DROP+CREATE') . "</select>\n"; -echo "<tr><th>" . lang('Data') . "<td><select name='data_style'>" . optionlist($data_style, 'INSERT') . "</select>\n"; +echo "<tr><th>" . lang('Tables') . "<td>" . html_select('table_style', $table_style, 'DROP+CREATE'); +echo "<tr><th>" . lang('Data') . "<td>" . html_select('data_style', $data_style, 'INSERT'); ?> </table> <p><input type="submit" value="<?php echo lang('Export'); ?>"></p> Modified: trunk/adminer/event.inc.php =================================================================== --- trunk/adminer/event.inc.php 2009-10-02 12:31:28 UTC (rev 1161) +++ trunk/adminer/event.inc.php 2009-10-02 13:21:34 UTC (rev 1162) @@ -40,8 +40,8 @@ <tr><th><?php echo lang('Name'); ?><td><input name="EVENT_NAME" value="<?php echo h($row["EVENT_NAME"]); ?>" maxlength="64"> <tr><th><?php echo lang('Start'); ?><td><input name="STARTS" value="<?php echo h("$row[EXECUTE_AT]$row[STARTS]"); ?>"> <tr><th><?php echo lang('End'); ?><td><input name="ENDS" value="<?php echo h($row["ENDS"]); ?>"> -<tr><th><?php echo lang('Every'); ?><td><input name="INTERVAL_VALUE" value="<?php echo h($row["INTERVAL_VALUE"]); ?>" size="6"> <select name="INTERVAL_FIELD"><?php echo optionlist($intervals, $row["INTERVAL_FIELD"]); ?></select> -<tr><th><?php echo lang('Status'); ?><td><select name="STATUS"><?php echo optionlist($statuses, $row["STATUS"]); ?></select> +<tr><th><?php echo lang('Every'); ?><td><input name="INTERVAL_VALUE" value="<?php echo h($row["INTERVAL_VALUE"]); ?>" size="6"> <?php echo html_select("INTERVAL_FIELD", $intervals, $row["INTERVAL_FIELD"]); ?> +<tr><th><?php echo lang('Status'); ?><td><?php echo html_select("STATUS", $statuses, $row["STATUS"]); ?> <tr><th><?php echo lang('Comment'); ?><td><input name="EVENT_COMMENT" value="<?php echo h($row["EVENT_COMMENT"]); ?>" maxlength="64"> <tr><th> <td><?php echo checkbox("ON_COMPLETION", "PRESERVE", $row["ON_COMPLETION"] == "PRESERVE", lang('On completion preserve')); ?> </table> Modified: trunk/adminer/foreign.inc.php =================================================================== --- trunk/adminer/foreign.inc.php 2009-10-02 12:31:28 UTC (rev 1161) +++ trunk/adminer/foreign.inc.php 2009-10-02 13:21:34 UTC (rev 1162) @@ -44,7 +44,7 @@ <form action="" method="post"> <p> <?php echo lang('Target table'); ?>: -<select name="table" onchange="this.form['change-js'].value = '1'; this.form.submit();"><?php echo optionlist(array_keys(table_status_referencable()), $row["table"]); ?></select> +<?php echo html_select("table", array_keys(table_status_referencable()), $row["table"], "this.form['change-js'].value = '1'; this.form.submit();"); ?> <input type="hidden" name="change-js" value=""> </p> <noscript><p><input type="submit" name="change" value="<?php echo lang('Change'); ?>"></noscript> @@ -54,15 +54,15 @@ $j = 0; foreach ($row["source"] as $key => $val) { echo "<tr>"; - echo "<td><select name='source[" . intval($key) . "]'" . ($j == count($row["source"]) - 1 ? " onchange='foreign_add_row(this);'" : "") . "><option>" . optionlist($source, $val) . "</select>"; - echo "<td><select name='target[" . intval($key) . "]'>" . optionlist($target, $row["target"][$key]) . "</select>"; + echo "<td>" . html_select("source[" . intval($key) . "]", array(-1 => "") + $source, $val, ($j == count($row["source"]) - 1 ? "foreign_add_row(this);" : 1)); + echo "<td>" . html_select("target[" . intval($key) . "]", $target, $row["target"][$key]); $j++; } ?> </table> <p> -<?php echo lang('ON DELETE'); ?>: <select name="on_delete"><option><?php echo optionlist($on_actions, $row["on_delete"]); ?></select> -<?php echo lang('ON UPDATE'); ?>: <select name="on_update"><option><?php echo optionlist($on_actions, $row["on_update"]); ?></select> +<?php echo lang('ON DELETE'); ?>: <?php echo html_select("on_delete", array(-1 => "") + $on_actions, $row["on_delete"]); ?> + <?php echo lang('ON UPDATE'); ?>: <?php echo html_select("on_update", array(-1 => "") + $on_actions, $row["on_update"]); ?> <p> <input type="hidden" name="token" value="<?php echo $token; ?>"> <input type="submit" value="<?php echo lang('Save'); ?>"> Modified: trunk/adminer/include/adminer.inc.php =================================================================== --- trunk/adminer/include/adminer.inc.php 2009-10-02 12:31:28 UTC (rev 1161) +++ trunk/adminer/include/adminer.inc.php 2009-10-02 13:21:34 UTC (rev 1162) @@ -162,11 +162,11 @@ $fun_group = array(lang('Functions') => $this->functions, lang('Aggregation') => $this->grouping); foreach ($select as $key => $val) { $val = $_GET["columns"][$key]; - echo "<div><select name='columns[$i][fun]'><option>" . optionlist($fun_group, $val["fun"]) . "</select>"; + echo "<div>" . html_select("columns[$i][fun]", array(-1 => "") + $fun_group, $val["fun"]); echo "<select name='columns[$i][col]'><option>" . optionlist($columns, $val["col"], true) . "</select></div>\n"; $i++; } - echo "<div><select name='columns[$i][fun]' onchange='this.nextSibling.onchange();'><option>" . optionlist($fun_group) . "</select>"; + echo "<div>" . html_select("columns[$i][fun]", array(-1 => "") + $fun_group, "", "this.nextSibling.onchange();"); echo "<select name='columns[$i][col]' onchange='select_add_row(this);'><option>" . optionlist($columns, null, true) . "</select></div>\n"; echo "</div></fieldset>\n"; } @@ -191,13 +191,13 @@ foreach ((array) $_GET["where"] as $val) { if (strlen("$val[col]$val[val]") && in_array($val["op"], $this->operators)) { echo "<div><select name='where[$i][col]'><option value=''>" . lang('(anywhere)') . optionlist($columns, $val["col"], true) . "</select>"; - echo "<select name='where[$i][op]'>" . optionlist($this->operators, $val["op"]) . "</select>"; + echo html_select("where[$i][op]", $this->operators, $val["op"]); echo "<input name='where[$i][val]' value='" . h($val["val"]) . "'></div>\n"; $i++; } } echo "<div><select name='where[$i][col]' onchange='select_add_row(this);'><option value=''>" . lang('(anywhere)') . optionlist($columns, null, true) . "</select>"; - echo "<select name='where[$i][op]'>" . optionlist($this->operators) . "</select>"; + echo html_select("where[$i][op]", $this->operators); echo "<input name='where[$i][val]'></div>\n"; echo "</div></fieldset>\n"; } @@ -482,11 +482,7 @@ <p> <?php if (SID) { ?><input type="hidden" name="<?php echo session_name(); ?>" value="<?php echo h(session_id()); ?>"><?php } ?> <?php if (strlen($_GET["server"])) { ?><input type="hidden" name="server" value="<?php echo h($_GET["server"]); ?>"><?php } ?> -<?php if ($databases) { ?> -<select name="db" onchange="this.form.submit();"><option value="">(<?php echo lang('database'); ?>)<?php echo optionlist($databases, DB); ?></select> -<?php } else { ?> -<input name="db" value="<?php echo h(DB); ?>"> -<?php } ?> +<?php echo ($databases ? html_select("db", array("" => "(" . lang('database') . ")") + $databases, DB, "this.form.submit();") : '<input name="db" value="' . h(DB) . '">'); ?> <?php if (isset($_GET["sql"])) { ?><input type="hidden" name="sql" value=""><?php } ?> <?php if (isset($_GET["schema"])) { ?><input type="hidden" name="schema" value=""><?php } ?> <?php if (isset($_GET["dump"])) { ?><input type="hidden" name="dump" value=""><?php } ?> Modified: trunk/adminer/include/editing.inc.php =================================================================== --- trunk/adminer/include/editing.inc.php 2009-10-02 12:31:28 UTC (rev 1161) +++ trunk/adminer/include/editing.inc.php 2009-10-02 13:21:34 UTC (rev 1162) @@ -97,7 +97,7 @@ function edit_type($key, $field, $collations, $foreign_keys = array()) { global $structured_types, $unsigned, $inout; ?> -<td><select name="<?php echo $key; ?>[type]" class="type" onchange="editing_type_change(this);"><?php echo optionlist($structured_types + ($foreign_keys ? array(lang('Foreign keys') => $foreign_keys) : array()), $field["type"]); // foreign keys can be wide but style="width: 15ex;" narrows expanded optionlist in IE too ?></select> +<td><select name="<?php echo $key; ?>[type]" class="type" onchange="editing_type_change(this);"><?php echo optionlist($structured_types + ($foreign_keys ? array(lang('Foreign keys') => $foreign_keys) : array()), $field["type"]); ?></select> <td><input name="<?php echo $key; ?>[length]" value="<?php echo h($field["length"]); ?>" size="3"> <td><?php echo "<select name='$key" . "[collation]'" . (ereg('(char|text|enum|set)$', $field["type"]) ? "" : " class='hidden'") . '><option value="">(' . lang('collation') . ')' . optionlist($collations, $field["collation"]) . '</select>'; @@ -172,7 +172,11 @@ $display = (isset($_POST["add"][$i-1]) || (isset($field["field"]) && !$_POST["drop_col"][$i])); ?> <tr<?php echo ($display ? "" : " style='display: none;'"); ?>> -<?php if ($type == "PROCEDURE") { ?><td><select name="fields[<?php echo $i; ?>][inout]"><?php echo optionlist($inout, $field["inout"]); ?></select><?php } ?> +<?php +if ($type == "PROCEDURE") { + echo "<td>" . html_select("fields[$i][inout]", $inout, $field["inout"]); +} +?> <th><?php if ($display) { ?><input name="fields[<?php echo $i; ?>][field]" value="<?php echo h($field["field"]); ?>" onchange="<?php echo (strlen($field["field"]) || count($fields) > 1 ? "" : "editing_add_row(this, $allowed); "); ?>editing_name_change(this);" maxlength="64"><?php } ?><input type="hidden" name="fields[<?php echo $i; ?>][orig]" value="<?php echo h($field[($_POST ? "orig" : "field")]); ?>"> <?php edit_type("fields[$i]", $field, $collations, $foreign_keys); ?> <?php if ($type == "TABLE") { ?> Modified: trunk/adminer/include/functions.inc.php =================================================================== --- trunk/adminer/include/functions.inc.php 2009-10-02 12:31:28 UTC (rev 1161) +++ trunk/adminer/include/functions.inc.php 2009-10-02 13:21:34 UTC (rev 1162) @@ -78,12 +78,12 @@ * @param string * @param array * @param string -* @param bool generate select (otherwise radio) +* @param string true for no onchange, false for radio * @return string */ -function html_select($name, $options, $value, $select = true) { - if ($select) { - return "<select name='" . h($name) . "'>" . optionlist($options, $value) . "</select>"; +function html_select($name, $options, $value = "", $onchange = true) { + if ($onchange) { + return "<select name='" . h($name) . "'" . (is_string($onchange) ? " onchange=\"$onchange\"" : "") . ">" . optionlist($options, $value) . "</select>"; } $return = ""; foreach ($options as $key => $val) { @@ -418,7 +418,7 @@ $first++; } $onchange = ($first ? " onchange=\"var f = this.form['function[" . addcslashes($name, "\r\n'\\") . "]']; if ($first > f.selectedIndex) f.selectedIndex = $first;\"" : ""); - echo (count($functions) > 1 ? "<select name='function[$name]'>" . optionlist($functions, !isset($function) || in_array($function, $functions) ? $function : "") . "</select>" : nbsp(reset($functions))) . '<td>'; + echo (count($functions) > 1 ? html_select("function[$name]", $functions, !isset($function) || in_array($function, $functions) ? $function : "") : nbsp(reset($functions))) . '<td>'; $input = $adminer->editInput($_GET["edit"], $field, " name='fields[$name]'$onchange", $value); // usage in call is without a table if (strlen($input)) { echo $input; Modified: trunk/adminer/include/lang.inc.php =================================================================== --- trunk/adminer/include/lang.inc.php 2009-10-02 12:31:28 UTC (rev 1161) +++ trunk/adminer/include/lang.inc.php 2009-10-02 13:21:34 UTC (rev 1162) @@ -32,9 +32,9 @@ global $LANG, $langs; echo "<form action=''>\n<div id='lang'>"; hidden_fields($_GET, array('lang')); - echo lang('Language') . ": <select name='lang' onchange='this.form.submit();'>"; - echo optionlist($langs, $LANG); - echo "</select>\n<noscript><div style='display: inline;'><input type='submit' value='" . lang('Use') . "'></div></noscript>\n</div>\n</form>\n"; + echo lang('Language') . ": " . html_select("lang", $langs, $LANG, "this.form.submit();"); + echo "<noscript><div style='display: inline;'><input type='submit' value='" . lang('Use') . "'></div></noscript>\n"; + echo "</div>\n</form>\n"; } if (isset($_GET["lang"])) { Modified: trunk/adminer/indexes.inc.php =================================================================== --- trunk/adminer/indexes.inc.php 2009-10-02 12:31:28 UTC (rev 1161) +++ trunk/adminer/indexes.inc.php 2009-10-02 13:21:34 UTC (rev 1162) @@ -73,10 +73,10 @@ <?php $j = 0; foreach ($row["indexes"] as $index) { - echo "<tr><td><select name='indexes[$j][type]'" . ($j == count($row["indexes"]) - 1 ? " onchange='indexes_add_row(this);'" : "") . "><option>" . optionlist($index_types, $index["type"]) . "</select><td>\n"; + echo "<tr><td>" . html_select("indexes[$j][type]", array(-1 => "") + $index_types, $index["type"], ($j == count($row["indexes"]) - 1 ? "indexes_add_row(this);" : 1)) . "<td>\n"; ksort($index["columns"]); foreach ($index["columns"] as $i => $column) { - echo "<span><select name='indexes[$j][columns][$i]'" . ($i == count($index["columns"]) ? " onchange='indexes_add_column(this);'" : "") . "><option>" . optionlist($fields, $column) . "</select>"; + echo "<span>" . html_select("indexes[$j][columns][$i]", array(-1 => "") + $fields, $column, ($i == count($index["columns"]) ? "indexes_add_column(this);" : 1)); echo "<input name='indexes[$j][lengths][$i]' size='2' value='" . h($index["lengths"][$i]) . "'> </span>\n"; } echo "\n"; Modified: trunk/adminer/trigger.inc.php =================================================================== --- trunk/adminer/trigger.inc.php 2009-10-02 12:31:28 UTC (rev 1161) +++ trunk/adminer/trigger.inc.php 2009-10-02 13:21:34 UTC (rev 1162) @@ -28,8 +28,8 @@ <form action="" method="post" id="form"> <table cellspacing="0"> -<tr><th><?php echo lang('Time'); ?><td><select name="Timing" onchange="if (/^<?php echo h(preg_quote($TABLE, "/")); ?>_[ba][iud]$/.test(this.form['Trigger'].value)) this.form['Trigger'].value = '<?php echo h(addcslashes($TABLE, "\r\n'\\")); ?>_' + select_value(this).charAt(0).toLowerCase() + select_value(this.form['Event']).charAt(0).toLowerCase();"><?php echo optionlist($trigger_time, $row["Timing"]); ?></select> -<tr><th><?php echo lang('Event'); ?><td><select name="Event" onchange="this.form['Timing'].onchange();"><?php echo optionlist($trigger_event, $row["Event"]); ?></select> +<tr><th><?php echo lang('Time'); ?><td><?php echo html_select("Timing", $trigger_time, $row["Timing"], "if (/^" . h(preg_quote($TABLE, "/")) . "_[ba][iud]$/.test(this.form['Trigger'].value)) this.form['Trigger'].value = '" . h(addcslashes($TABLE, "\r\n'\\")) . "_' + select_value(this).charAt(0).toLowerCase() + select_value(this.form['Event']).charAt(0).toLowerCase();"); ?> +<tr><th><?php echo lang('Event'); ?><td><?php echo html_select("Event", $trigger_event, $row["Event"], "this.form['Timing'].onchange();"); ?> <tr><th><?php echo lang('Name'); ?><td><input name="Trigger" value="<?php echo h($row["Trigger"]); ?>" maxlength="64"> </table> <p><textarea name="Statement" rows="10" cols="80" style="width: 98%;"><?php echo h($row["Statement"]); ?></textarea> Modified: trunk/editor/include/adminer.inc.php =================================================================== --- trunk/editor/include/adminer.inc.php 2009-10-02 12:31:28 UTC (rev 1161) +++ trunk/editor/include/adminer.inc.php 2009-10-02 13:21:34 UTC (rev 1162) @@ -174,13 +174,13 @@ foreach ((array) $_GET["where"] as $val) { if (strlen("$val[col]$val[val]")) { echo "<div><select name='where[$i][col]'><option value=''>" . lang('(anywhere)') . optionlist($columns, $val["col"], true) . "</select>"; - echo "<select name='where[$i][op]'><option>" . optionlist($this->operators, $val["op"]) . "</select>"; + echo html_select("where[$i][op]", array(-1 => "") + $this->operators, $val["op"]); echo "<input name='where[$i][val]' value='" . h($val["val"]) . "'></div>\n"; $i++; } } echo "<div><select name='where[$i][col]' onchange='select_add_row(this);'><option value=''>" . lang('(anywhere)') . optionlist($columns, null, true) . "</select>"; - echo "<select name='where[$i][op]'><option>" . optionlist($this->operators) . "</select>"; + echo html_select("where[$i][op]", array(-1 => "") + $this->operators); echo "<input name='where[$i][val]'></div>\n"; echo "</div></fieldset>\n"; } @@ -206,7 +206,7 @@ function selectLimitPrint($limit) { echo "<fieldset><legend>" . lang('Limit') . "</legend><div>"; // <div> for easy styling - echo "<select name='limit'>" . optionlist(array("", "30", "100"), $limit) . "</select>"; + echo html_select("limit", array("", "30", "100"), $limit); echo "</div></fieldset>\n"; } @@ -225,9 +225,9 @@ echo "<p>" . lang('From') . ": <input name='email_from' value='" . h($_POST ? $_POST["email_from"] : $_COOKIE["adminer_email"]) . "'>\n"; echo lang('Subject') . ": <input name='email_subject' value='" . h($_POST["email_subject"]) . "'>\n"; echo "<p><textarea name='email_message' rows='15' cols='60'>" . h($_POST["email_message"] . ($_POST["email_append"] ? '{$' . "$_POST[email_addition]}" : "")) . "</textarea><br>\n"; - echo "<select name='email_addition'>" . optionlist($columns, $_POST["email_addition"]) . "</select> <input type='submit' name='email_append' value='" . lang('Insert') . "'>\n"; //! JavaScript + echo html_select("email_addition", $columns, $_POST["email_addition"]) . "<input type='submit' name='email_append' value='" . lang('Insert') . "'>\n"; //! JavaScript echo "<p><input type='file' name='email_files[]' onchange=\"var el = this.cloneNode(true); el.value = ''; this.parentNode.appendChild(el); this.onchange = function () { };\">"; - echo "<p>" . (count($emailFields) == 1 ? '<input type="hidden" name="email_field" value="' . h(key($emailFields)) . '">' : '<select name="email_field">' . optionlist($emailFields) . '</select> '); + echo "<p>" . (count($emailFields) == 1 ? '<input type="hidden" name="email_field" value="' . h(key($emailFields)) . '">' : html_select("email_field", $emailFields)); echo "<input type='submit' name='email' value='" . lang('Send') . "' onclick=\"return this.form['delete'].onclick();\">\n"; echo "</div></fieldset>\n"; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-10-02 14:25:26
|
Revision: 1163 http://adminer.svn.sourceforge.net/adminer/?rev=1163&view=rev Author: jakubvrana Date: 2009-10-02 14:25:18 +0000 (Fri, 02 Oct 2009) Log Message: ----------- Link URLs in select Modified Paths: -------------- trunk/adminer/include/functions.inc.php trunk/adminer/select.inc.php trunk/changes.txt Modified: trunk/adminer/include/functions.inc.php =================================================================== --- trunk/adminer/include/functions.inc.php 2009-10-02 13:21:34 UTC (rev 1162) +++ trunk/adminer/include/functions.inc.php 2009-10-02 14:25:18 UTC (rev 1163) @@ -501,6 +501,15 @@ return eregi("^$atom+(\\.$atom+)*@($domain?\\.)+$domain\$", $email); } +/** Check whether the string is URL address +* @param string +* @return bool +*/ +function is_url($string) { + $domain = '[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])'; // one domain component + return preg_match("~^https?://($domain?\\.)+$domain(:[0-9]+)?(/.*)?(\\?.*)?(#.*)?\$~i", $string); //! restrict path, query and fragment characters +} + /** Print header for hidden fieldset (close by </div></fieldset>) * @param string * @param string Modified: trunk/adminer/select.inc.php =================================================================== --- trunk/adminer/select.inc.php 2009-10-02 13:21:34 UTC (rev 1162) +++ trunk/adminer/select.inc.php 2009-10-02 14:25:18 UTC (rev 1163) @@ -232,6 +232,9 @@ if (!$link && is_email($val)) { $link = "mailto:$val"; } + if (!$link && is_url($val)) { + $link = "http://www.adminer.org/redirect/?url=" . urlencode($val); // intermediate page to hide Referer + } $val = $adminer->selectVal($val, $link, $field); echo "<td>$val"; } Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2009-10-02 13:21:34 UTC (rev 1162) +++ trunk/changes.txt 2009-10-02 14:25:18 UTC (rev 1163) @@ -1,8 +1,9 @@ Adminer 2.1.1-dev: Display table links above table structure +Link URLs in select +Display number of manipulated rows in JS confirm Fix removed default in ALTER Display whitespace in texts (bug #2858042) -Display number of manipulated rows in JS confirm ClickJacking protection in modern browsers E-mail attachments (Editor) Optional year in date (Editor) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-10-02 22:29:04
|
Revision: 1160 http://adminer.svn.sourceforge.net/adminer/?rev=1160&view=rev Author: jakubvrana Date: 2009-10-02 12:21:55 +0000 (Fri, 02 Oct 2009) Log Message: ----------- Use radio in export Modified Paths: -------------- trunk/adminer/dump.inc.php trunk/adminer/include/adminer.inc.php trunk/adminer/include/export.inc.php trunk/adminer/include/functions.inc.php trunk/adminer/lang/cs.inc.php trunk/adminer/lang/de.inc.php trunk/adminer/lang/es.inc.php trunk/adminer/lang/et.inc.php trunk/adminer/lang/fr.inc.php trunk/adminer/lang/it.inc.php trunk/adminer/lang/nl.inc.php trunk/adminer/lang/ru.inc.php trunk/adminer/lang/sk.inc.php trunk/adminer/lang/zh-tw.inc.php trunk/adminer/lang/zh.inc.php trunk/adminer/select.inc.php trunk/adminer/sql.inc.php trunk/editor/include/adminer.inc.php trunk/editor/include/export.inc.php Modified: trunk/adminer/dump.inc.php =================================================================== --- trunk/adminer/dump.inc.php 2009-10-02 10:32:27 UTC (rev 1159) +++ trunk/adminer/dump.inc.php 2009-10-02 12:21:55 UTC (rev 1160) @@ -143,9 +143,8 @@ $db_style[] = 'CREATE+ALTER'; $table_style[] = 'CREATE+ALTER'; } -echo "<tr><th>" . lang('Output') . "<td><input type='hidden' name='token' value='$token'>$dump_output\n"; // token is not needed but checked in bootstrap for all POST data -echo "<tr><th>" . lang('Format') . "<td>$dump_format\n"; -echo "<tr><th>" . lang('Compression') . "<td>" . ($dump_compress ? $dump_compress : lang('None of the supported PHP extensions (%s) are available.', 'zlib, bz2')) . "\n"; +echo "<tr><th>" . lang('Output') . "<td><input type='hidden' name='token' value='$token'>" . $adminer->dumpOutput(0) . "\n"; // token is not needed but checked in bootstrap for all POST data +echo "<tr><th>" . lang('Format') . "<td>" . $adminer->dumpFormat(0) . "\n"; echo "<tr><th>" . lang('Database') . "<td><select name='db_style'>" . optionlist($db_style, (strlen(DB) ? '' : 'CREATE')) . "</select>\n"; if ($connection->server_info >= 5) { $checked = strlen($_GET["dump"]); Modified: trunk/adminer/include/adminer.inc.php =================================================================== --- trunk/adminer/include/adminer.inc.php 2009-10-02 10:32:27 UTC (rev 1159) +++ trunk/adminer/include/adminer.inc.php 2009-10-02 12:21:55 UTC (rev 1160) @@ -430,6 +430,30 @@ return $return; } + /** Returns export output options + * @param bool generate select (otherwise radio) + * @return string + */ + function dumpOutput($select) { + $return = array('text' => lang('open'), 'file' => lang('save')); + if (function_exists('gzencode')) { + $return['gz'] = 'gzip'; + } + if (function_exists('bzcompress')) { + $return['bz2'] = 'bzip2'; + } + // ZipArchive requires temporary file, ZIP can be created by gzcompress - see PEAR File_Archive + return html_select("output", $return, "text", $select); + } + + /** Returns export format options + * @param bool generate select (otherwise radio) + * @return string + */ + function dumpFormat($select) { + return html_select("format", array('sql' => 'SQL', 'csv' => 'CSV'), "sql", $select); + } + /** Prints navigation after Adminer title * @param string can be "auth" if there is no database connection or "db" if there is no database selected * @return null Modified: trunk/adminer/include/export.inc.php =================================================================== --- trunk/adminer/include/export.inc.php 2009-10-02 10:32:27 UTC (rev 1159) +++ trunk/adminer/include/export.inc.php 2009-10-02 12:21:55 UTC (rev 1160) @@ -115,7 +115,8 @@ } function dump_data($table, $style, $select = "") { - global $connection, $max_packet; + global $connection; + $max_packet = 1048576; // default, minimum is 1024 if ($style) { if ($_POST["format"] != "csv" && $style == "TRUNCATE+INSERT") { dump("TRUNCATE " . idf_escape($table) . ";\n"); @@ -165,31 +166,18 @@ } function dump_headers($identifier, $multi_table = false) { - $compress = $_POST["compress"]; $filename = (strlen($identifier) ? friendly_url($identifier) : "dump"); + $output = $_POST["output"]; $ext = ($_POST["format"] == "sql" ? "sql" : ($multi_table ? "tar" : "csv")); // multiple CSV packed to TAR header("Content-Type: " . - ($compress == "bz2" ? "application/x-bzip" : - ($compress == "gz" ? "application/x-gzip" : + ($output == "bz2" ? "application/x-bzip" : + ($output == "gz" ? "application/x-gzip" : ($ext == "tar" ? "application/x-tar" : - ($ext == "sql" || $_POST["output"] != "file" ? "text/plain" : "text/csv") . "; charset=utf-8" + ($ext == "sql" || $output != "file" ? "text/plain" : "text/csv") . "; charset=utf-8" )))); - if ($_POST["output"] == "file" || $compress) { - header("Content-Disposition: attachment; filename=$filename.$ext" . (ereg('[0-9a-z]', $compress) ? ".$compress" : "")); + if ($output != "text") { + header("Content-Disposition: attachment; filename=$filename.$ext" . ($output != "file" && !ereg('[^0-9a-z]', $output) ? ".$output" : "")); } session_write_close(); return $ext; } - -$compress = array(); -if (function_exists('gzencode')) { - $compress['gz'] = 'gzip'; -} -if (function_exists('bzcompress')) { - $compress['bz2'] = 'bzip2'; -} -// ZipArchive requires temporary file, ZIP can be created by gzcompress - see PEAR File_Archive -$dump_output = "<select name='output'>" . optionlist(array('text' => lang('open'), 'file' => lang('save'))) . "</select>"; -$dump_format = "<select name='format'>" . optionlist(array('sql' => 'SQL', 'csv' => 'CSV')) . "</select>"; -$dump_compress = ($compress ? "<select name='compress'><option>" . optionlist($compress) . "</select>" : ""); -$max_packet = 1048576; // default, minimum is 1024 Modified: trunk/adminer/include/functions.inc.php =================================================================== --- trunk/adminer/include/functions.inc.php 2009-10-02 10:32:27 UTC (rev 1159) +++ trunk/adminer/include/functions.inc.php 2009-10-02 12:21:55 UTC (rev 1160) @@ -74,6 +74,24 @@ return (strlen($label) ? "<label for='checkbox-$id'>$return" . h($label) . "</label>" : $return); } +/** Generate HTML radio list +* @param string +* @param array +* @param string +* @param bool generate select (otherwise radio) +* @return string +*/ +function html_select($name, $options, $value, $select = true) { + if ($select) { + return "<select name='" . h($name) . "'>" . optionlist($options, $value) . "</select>"; + } + $return = ""; + foreach ($options as $key => $val) { + $return .= "<label><input type='radio' name='" . h($name) . "' value='" . h($key) . "'" . ($key == $value ? " checked" : "") . ">" . h($val) . "</label>"; + } + return $return; +} + /** Generate list of HTML options * @param array array of strings or arrays (creates optgroup) * @param mixed @@ -457,10 +475,10 @@ */ function dump($string = null) { // null $string forces sending of buffer static $buffer = ""; // used to improve compression and to allow GZ archives unpackable in Total Commander - if ($_POST["compress"]) { + if (!ereg("text|file", $_POST["output"])) { $buffer .= $string; if (!isset($string) || strlen($buffer) > 1e6) { - if ($_POST["compress"] == "bz2") { + if ($_POST["output"] == "bz2") { echo bzcompress($buffer); // should not be called repeatedly but it would require whole buffer in memory or temporary file } else { echo gzencode($buffer); Modified: trunk/adminer/lang/cs.inc.php =================================================================== --- trunk/adminer/lang/cs.inc.php 2009-10-02 10:32:27 UTC (rev 1159) +++ trunk/adminer/lang/cs.inc.php 2009-10-02 12:21:55 UTC (rev 1160) @@ -225,5 +225,4 @@ 'Editor' => 'Editor', 'Webserver file %s' => 'Soubor %s na webovém serveru', 'File does not exist.' => 'Soubor neexistuje.', - 'Compression' => 'Komprese', ); Modified: trunk/adminer/lang/de.inc.php =================================================================== --- trunk/adminer/lang/de.inc.php 2009-10-02 10:32:27 UTC (rev 1159) +++ trunk/adminer/lang/de.inc.php 2009-10-02 12:21:55 UTC (rev 1160) @@ -223,7 +223,6 @@ 'Subject' => 'Betreff', 'Send' => 'Abschicken', '%d e-mail(s) have been sent.' => array('%d e-mail abgeschickt.', '%d e-mails abgeschickt.'), - 'Compression' => 'Kompression', 'Webserver file %s' => 'Webserver Datei %s', 'File does not exist.' => 'Datei existiert nicht.', ); Modified: trunk/adminer/lang/es.inc.php =================================================================== --- trunk/adminer/lang/es.inc.php 2009-10-02 10:32:27 UTC (rev 1159) +++ trunk/adminer/lang/es.inc.php 2009-10-02 12:21:55 UTC (rev 1160) @@ -223,7 +223,6 @@ 'Subject' => 'Asunto', 'Send' => 'Enviar', '%d e-mail(s) have been sent.' => array('%d email enviado.', '%d emails enviados.'), - 'Compression' => 'Compresión', 'Webserver file %s' => 'Archivo de servidor web %s', 'File does not exist.' => 'Archivo no existe.', ); Modified: trunk/adminer/lang/et.inc.php =================================================================== --- trunk/adminer/lang/et.inc.php 2009-10-02 10:32:27 UTC (rev 1159) +++ trunk/adminer/lang/et.inc.php 2009-10-02 12:21:55 UTC (rev 1160) @@ -223,7 +223,6 @@ 'Subject' => 'Pealkiri', 'Send' => 'Saada', '%d e-mail(s) have been sent.' => array('Saadetud kirju: %d.', 'Saadetud kirju: %d.'), - 'Compression' => 'Kokkupakkimine', 'Webserver file %s' => 'Fail serveris: %s', 'File does not exist.' => 'Faili ei leitud.', ); Modified: trunk/adminer/lang/fr.inc.php =================================================================== --- trunk/adminer/lang/fr.inc.php 2009-10-02 10:32:27 UTC (rev 1159) +++ trunk/adminer/lang/fr.inc.php 2009-10-02 12:21:55 UTC (rev 1160) @@ -223,7 +223,6 @@ 'Subject' => 'Sujet', 'Send' => 'Envoyer', '%d e-mail(s) have been sent.' => array('%d message a été envoyé.', '%d messages ont été envoyés.'), - 'Compression' => 'Compression', 'Webserver file %s' => '%s fichier du serveur Web', 'File does not exist.' => 'Le fichier est introuvable.', ); Modified: trunk/adminer/lang/it.inc.php =================================================================== --- trunk/adminer/lang/it.inc.php 2009-10-02 10:32:27 UTC (rev 1159) +++ trunk/adminer/lang/it.inc.php 2009-10-02 12:21:55 UTC (rev 1160) @@ -223,7 +223,6 @@ 'Subject' => 'Oggetto', 'Send' => 'Invia', '%d e-mail(s) have been sent.' => array('%d e-mail inviata.','%d e-mail inviate.'), - 'Compression' => 'Compressione', 'Webserver file %s' => 'Webserver file %s', 'File does not exist.' => 'Il file non esiste.', ); Modified: trunk/adminer/lang/nl.inc.php =================================================================== --- trunk/adminer/lang/nl.inc.php 2009-10-02 10:32:27 UTC (rev 1159) +++ trunk/adminer/lang/nl.inc.php 2009-10-02 12:21:55 UTC (rev 1160) @@ -223,7 +223,6 @@ 'Subject' => 'Onderwerp', 'Send' => 'Verzenden', '%d e-mail(s) have been sent.' => array('%d e-mail verzonden.', '%d e-mails verzonden.'), - 'Compression' => 'Compressie', 'Webserver file %s' => 'Webserver bestand %s', 'File does not exist.' => 'Bestand niet gevonden.', ); Modified: trunk/adminer/lang/ru.inc.php =================================================================== --- trunk/adminer/lang/ru.inc.php 2009-10-02 10:32:27 UTC (rev 1159) +++ trunk/adminer/lang/ru.inc.php 2009-10-02 12:21:55 UTC (rev 1160) @@ -223,7 +223,6 @@ 'Subject' => 'Кому', 'Send' => 'Послать', '%d e-mail(s) have been sent.' => array('Было отправлено %d письмо.', 'Было отправлено %d письма.', 'Было отправлено %d писем.'), - 'Compression' => 'Сжатие', 'Webserver file %s' => 'Файл %s на вебсервере', 'File does not exist.' => 'Такого файла не существует.', ); Modified: trunk/adminer/lang/sk.inc.php =================================================================== --- trunk/adminer/lang/sk.inc.php 2009-10-02 10:32:27 UTC (rev 1159) +++ trunk/adminer/lang/sk.inc.php 2009-10-02 12:21:55 UTC (rev 1160) @@ -223,7 +223,6 @@ 'Maximum allowed file size is %sB.' => 'Maximálna povolená veľkosť súboru je %sB.', 'Clear' => 'Vyčistiť', 'Editor' => 'Editor', - 'Compression' => 'Kompresia', 'Webserver file %s' => 'Súbor %s na webovom serveri', 'File does not exist.' => 'Súbor neexistuje.', ); Modified: trunk/adminer/lang/zh-tw.inc.php =================================================================== --- trunk/adminer/lang/zh-tw.inc.php 2009-10-02 10:32:27 UTC (rev 1159) +++ trunk/adminer/lang/zh-tw.inc.php 2009-10-02 12:21:55 UTC (rev 1160) @@ -223,7 +223,6 @@ 'Subject' => '主題', 'Send' => '發送', '%d e-mail(s) have been sent.' => '已發送 %d 封郵件。', - 'Compression' => '壓縮', 'Webserver file %s' => '網頁伺服器檔案 %s', 'File does not exist.' => '檔案不存在', ); Modified: trunk/adminer/lang/zh.inc.php =================================================================== --- trunk/adminer/lang/zh.inc.php 2009-10-02 10:32:27 UTC (rev 1159) +++ trunk/adminer/lang/zh.inc.php 2009-10-02 12:21:55 UTC (rev 1160) @@ -223,7 +223,6 @@ 'Subject' => '主题', 'Send' => '发送', '%d e-mail(s) have been sent.' => '%d 封邮件已发送。', - 'Compression' => '压缩', 'Webserver file %s' => 'Web服务器文件 %s', 'File does not exist.' => '文件不存在', ); Modified: trunk/adminer/select.inc.php =================================================================== --- trunk/adminer/select.inc.php 2009-10-02 10:32:27 UTC (rev 1159) +++ trunk/adminer/select.inc.php 2009-10-02 12:21:55 UTC (rev 1160) @@ -262,7 +262,8 @@ echo (information_schema(DB) ? "" : "<fieldset><legend>" . lang('Edit') . "</legend><div><input type='submit' name='edit' value='" . lang('Edit') . "'> <input type='submit' name='clone' value='" . lang('Clone') . "'> <input type='submit' name='delete' value='" . lang('Delete') . "' onclick=\"return confirm('" . lang('Are you sure?') . " (' + (this.form['all'].checked ? $found_rows : form_checked(this, /check/)) + ')');\"></div></fieldset>\n"); print_fieldset("export", lang('Export')); - echo "$dump_output $dump_format $dump_compress <input type='submit' name='export' value='" . lang('Export') . "'>\n"; + echo $adminer->dumpOutput(1) . " " . $adminer->dumpFormat(1); // 1 - select + echo " <input type='submit' name='export' value='" . lang('Export') . "'>\n"; echo "</div></fieldset>\n"; } print_fieldset("import", lang('CSV Import'), !$result->num_rows); Modified: trunk/adminer/sql.inc.php =================================================================== --- trunk/adminer/sql.inc.php 2009-10-02 10:32:27 UTC (rev 1159) +++ trunk/adminer/sql.inc.php 2009-10-02 12:21:55 UTC (rev 1160) @@ -48,7 +48,7 @@ $found = $match[0][0]; $offset = $match[0][1] + strlen($found); if (!$found && $fp && !feof($fp)) { - $query .= fread($fp, 1e6); + $query .= fread($fp, 1e5); } else { if (!$found && !strlen(rtrim($query))) { break; Modified: trunk/editor/include/adminer.inc.php =================================================================== --- trunk/editor/include/adminer.inc.php 2009-10-02 10:32:27 UTC (rev 1159) +++ trunk/editor/include/adminer.inc.php 2009-10-02 12:21:55 UTC (rev 1160) @@ -406,6 +406,14 @@ return $return; } + function dumpOutput($select) { + return ""; + } + + function dumpFormat($select) { + return "CSV"; + } + function navigation($missing) { global $VERSION; ?> Modified: trunk/editor/include/export.inc.php =================================================================== --- trunk/editor/include/export.inc.php 2009-10-02 10:32:27 UTC (rev 1159) +++ trunk/editor/include/export.inc.php 2009-10-02 12:21:55 UTC (rev 1160) @@ -5,7 +5,7 @@ function dump_data($table, $style, $select = "") { global $connection; - $result = $connection->query(($select ? $select : "SELECT * FROM " . idf_escape($table))); + $result = $connection->query(($select ? $select : "SELECT * FROM " . idf_escape($table)), 1); // 1 - MYSQLI_USE_RESULT if ($result) { while ($row = $result->fetch_assoc()) { dump_csv($row); @@ -21,7 +21,3 @@ session_write_close(); return $ext; } - -$dump_output = ""; -$dump_format = "CSV"; -$dump_compress = ""; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-10-07 09:51:04
|
Revision: 1161 http://adminer.svn.sourceforge.net/adminer/?rev=1161&view=rev Author: jakubvrana Date: 2009-10-02 12:31:28 +0000 (Fri, 02 Oct 2009) Log Message: ----------- Use output buffering for dump compression Modified Paths: -------------- trunk/adminer/dump.inc.php trunk/adminer/include/export.inc.php trunk/adminer/include/functions.inc.php trunk/adminer/select.inc.php trunk/editor/include/export.inc.php Modified: trunk/adminer/dump.inc.php =================================================================== --- trunk/adminer/dump.inc.php 2009-10-02 12:21:55 UTC (rev 1160) +++ trunk/adminer/dump.inc.php 2009-10-02 12:31:28 UTC (rev 1161) @@ -4,13 +4,13 @@ if ($_POST) { $ext = dump_headers((strlen($TABLE) ? $TABLE : DB), (!strlen(DB) || count((array) $_POST["tables"] + (array) $_POST["data"]) > 1)); if ($_POST["format"] == "sql") { - dump("-- Adminer $VERSION dump + echo "-- Adminer $VERSION dump SET NAMES utf8; SET foreign_key_checks = 0; SET time_zone = " . $connection->quote($connection->result($connection->query("SELECT @@time_zone"))) . "; SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'; -"); +"; } $style = $_POST["db_style"]; @@ -18,14 +18,14 @@ if ($connection->select_db($db)) { if ($_POST["format"] == "sql" && ereg('CREATE', $style) && ($result = $connection->query("SHOW CREATE DATABASE " . idf_escape($db)))) { if ($style == "DROP+CREATE") { - dump("DROP DATABASE IF EXISTS " . idf_escape($db) . ";\n"); + echo "DROP DATABASE IF EXISTS " . idf_escape($db) . ";\n"; } $create = $connection->result($result, 1); - dump(($style == "CREATE+ALTER" ? preg_replace('~^CREATE DATABASE ~', '\\0IF NOT EXISTS ', $create) : $create) . ";\n"); + echo ($style == "CREATE+ALTER" ? preg_replace('~^CREATE DATABASE ~', '\\0IF NOT EXISTS ', $create) : $create) . ";\n"; } if ($_POST["format"] == "sql") { if ($style) { - dump("USE " . idf_escape($db) . ";\n" . ($style == "CREATE+ALTER" ? "SET @adminer_alter = '';\n" : "") . "\n"); + echo "USE " . idf_escape($db) . ";\n" . ($style == "CREATE+ALTER" ? "SET @adminer_alter = '';\n" : "") . "\n"; } $out = ""; if ($_POST["routines"]) { @@ -45,7 +45,7 @@ } } if ($out) { - dump("DELIMITER ;;\n\n$out" . "DELIMITER ;\n\n"); + echo "DELIMITER ;;\n\n$out" . "DELIMITER ;\n\n"; } } @@ -67,9 +67,9 @@ dump_triggers($row["Name"], $_POST["table_style"]); } if ($ext == "tar") { - dump(tar_file((strlen(DB) ? "" : "$db/") . "$row[Name].csv", ob_get_clean())); + echo tar_file((strlen(DB) ? "" : "$db/") . "$row[Name].csv", ob_get_clean()); } elseif ($_POST["format"] == "sql") { - dump("\n"); + echo "\n"; } } elseif ($_POST["format"] == "sql") { $views[] = $row["Name"]; @@ -80,14 +80,14 @@ dump_table($view, $_POST["table_style"], true); } if ($ext == "tar") { - dump(pack("x512")); + echo pack("x512"); } } if ($style == "CREATE+ALTER" && $_POST["format"] == "sql") { // drop old tables $query = "SELECT TABLE_NAME, ENGINE, TABLE_COLLATION, TABLE_COMMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE()"; - dump("DELIMITER ;; + echo "DELIMITER ;; CREATE PROCEDURE adminer_alter (INOUT alter_command text) BEGIN DECLARE _table_name, _engine, _table_collation varchar(64); DECLARE _table_comment varchar(64); @@ -98,17 +98,17 @@ REPEAT FETCH tables INTO _table_name, _engine, _table_collation, _table_comment; IF NOT done THEN - CASE _table_name"); + CASE _table_name"; $result = $connection->query($query); while ($row = $result->fetch_assoc()) { $comment = $connection->quote($row["ENGINE"] == "InnoDB" ? preg_replace('~(?:(.+); )?InnoDB free: .*~', '\\1', $row["TABLE_COMMENT"]) : $row["TABLE_COMMENT"]); - dump(" + echo " WHEN " . $connection->quote($row["TABLE_NAME"]) . " THEN " . (isset($row["ENGINE"]) ? "IF _engine != '$row[ENGINE]' OR _table_collation != '$row[TABLE_COLLATION]' OR _table_comment != $comment THEN ALTER TABLE " . idf_escape($row["TABLE_NAME"]) . " ENGINE=$row[ENGINE] COLLATE=$row[TABLE_COLLATION] COMMENT=$comment; - END IF" : "BEGIN END") . ";"); + END IF" : "BEGIN END") . ";"; } - dump(" + echo " ELSE SET alter_command = CONCAT(alter_command, 'DROP TABLE `', REPLACE(_table_name, '`', '``'), '`;\\n'); END CASE; @@ -119,14 +119,13 @@ DELIMITER ; CALL adminer_alter(@adminer_alter); DROP PROCEDURE adminer_alter; -"); +"; } if (in_array("CREATE+ALTER", array($style, $_POST["table_style"])) && $_POST["format"] == "sql") { - dump("SELECT @adminer_alter;\n"); + echo "SELECT @adminer_alter;\n"; } } } - dump(); exit; } Modified: trunk/adminer/include/export.inc.php =================================================================== --- trunk/adminer/include/export.inc.php 2009-10-02 12:21:55 UTC (rev 1160) +++ trunk/adminer/include/export.inc.php 2009-10-02 12:31:28 UTC (rev 1161) @@ -19,7 +19,7 @@ $s .= "\n" . ($style == 'CREATE+ALTER' ? "DROP TRIGGER IF EXISTS " . idf_escape($row["Trigger"]) . ";;\n" : "") . "CREATE TRIGGER " . idf_escape($row["Trigger"]) . " $row[Timing] $row[Event] ON " . idf_escape($row["Table"]) . " FOR EACH ROW\n$row[Statement];;\n"; } - dump("$s\nDELIMITER ;\n"); + echo "$s\nDELIMITER ;\n"; } } } @@ -27,7 +27,7 @@ function dump_table($table, $style, $is_view = false) { global $connection; if ($_POST["format"] == "csv") { - dump("\xef\xbb\xbf"); // UTF-8 byte order mark + echo "\xef\xbb\xbf"; // UTF-8 byte order mark if ($style) { dump_csv(array_keys(fields($table))); } @@ -35,15 +35,15 @@ $result = $connection->query("SHOW CREATE TABLE " . idf_escape($table)); if ($result) { if ($style == "DROP+CREATE") { - dump("DROP " . ($is_view ? "VIEW" : "TABLE") . " IF EXISTS " . idf_escape($table) . ";\n"); + echo "DROP " . ($is_view ? "VIEW" : "TABLE") . " IF EXISTS " . idf_escape($table) . ";\n"; } $create = $connection->result($result, 1); - dump(($style != "CREATE+ALTER" ? $create : ($is_view ? substr_replace($create, " OR REPLACE", 6, 0) : substr_replace($create, " IF NOT EXISTS", 12, 0))) . ";\n\n"); + echo ($style != "CREATE+ALTER" ? $create : ($is_view ? substr_replace($create, " OR REPLACE", 6, 0) : substr_replace($create, " IF NOT EXISTS", 12, 0))) . ";\n\n"; } if ($style == "CREATE+ALTER" && !$is_view) { // create procedure which iterates over original columns and adds new and removes old $query = "SELECT COLUMN_NAME, COLUMN_DEFAULT, IS_NULLABLE, COLLATION_NAME, COLUMN_TYPE, EXTRA, COLUMN_COMMENT FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = " . $connection->quote($table) . " ORDER BY ORDINAL_POSITION"; - dump("DELIMITER ;; + echo "DELIMITER ;; CREATE PROCEDURE adminer_alter (INOUT alter_command text) BEGIN DECLARE _column_name, _collation_name, _column_type, after varchar(64) DEFAULT ''; DECLARE _column_default longtext; @@ -51,7 +51,7 @@ DECLARE _extra varchar(20); DECLARE _column_comment varchar(255); DECLARE done, set_after bool DEFAULT 0; - DECLARE add_columns text DEFAULT '"); + DECLARE add_columns text DEFAULT '"; $fields = array(); $result = $connection->query($query); $after = ""; @@ -67,11 +67,11 @@ . ($row["COLUMN_COMMENT"] ? " COMMENT " . $connection->quote($row["COLUMN_COMMENT"]) : "") . ($after ? " AFTER " . idf_escape($after) : " FIRST") ); - dump(", ADD $row[alter]"); + echo ", ADD $row[alter]"; $fields[] = $row; $after = $row["COLUMN_NAME"]; } - dump("'; + echo "'; DECLARE columns CURSOR FOR $query; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; SET @alter_table = ''; @@ -80,16 +80,16 @@ FETCH columns INTO _column_name, _column_default, _is_nullable, _collation_name, _column_type, _extra, _column_comment; IF NOT done THEN SET set_after = 1; - CASE _column_name"); + CASE _column_name"; foreach ($fields as $row) { - dump(" + echo " WHEN " . $connection->quote($row["COLUMN_NAME"]) . " THEN SET add_columns = REPLACE(add_columns, ', ADD $row[alter]', ''); IF NOT (_column_default <=> $row[default]) OR _is_nullable != '$row[IS_NULLABLE]' OR _collation_name != '$row[COLLATION_NAME]' OR _column_type != " . $connection->quote($row["COLUMN_TYPE"]) . " OR _extra != '$row[EXTRA]' OR _column_comment != " . $connection->quote($row["COLUMN_COMMENT"]) . " OR after != $row[after] THEN SET @alter_table = CONCAT(@alter_table, ', MODIFY $row[alter]'); - END IF;"); //! don't replace in comment + END IF;"; //! don't replace in comment } - dump(" + echo " ELSE SET @alter_table = CONCAT(@alter_table, ', DROP ', _column_name); SET set_after = 0; @@ -108,7 +108,7 @@ CALL adminer_alter(@adminer_alter); DROP PROCEDURE adminer_alter; -"); +"; //! indexes } } @@ -119,7 +119,7 @@ $max_packet = 1048576; // default, minimum is 1024 if ($style) { if ($_POST["format"] != "csv" && $style == "TRUNCATE+INSERT") { - dump("TRUNCATE " . idf_escape($table) . ";\n"); + echo "TRUNCATE " . idf_escape($table) . ";\n"; } $fields = fields($table); $result = $connection->query(($select ? $select : "SELECT * FROM " . idf_escape($table)), 1); // 1 - MYSQLI_USE_RESULT //! enum and set as numbers, microtime @@ -142,7 +142,7 @@ foreach ($row as $key => $val) { $set[] = idf_escape($key) . " = $val"; } - dump("$insert ($s) ON DUPLICATE KEY UPDATE " . implode(", ", $set) . ";\n"); + echo "$insert ($s) ON DUPLICATE KEY UPDATE " . implode(", ", $set) . ";\n"; } else { $s = "\n($s)"; if (!$buffer) { @@ -151,7 +151,7 @@ $buffer .= ",$s"; } else { $buffer .= ";\n"; - dump($buffer); + echo $buffer; $buffer = $insert . $s; } } @@ -159,7 +159,7 @@ } if ($_POST["format"] != "csv" && $style != "INSERT+UPDATE" && $buffer) { $buffer .= ";\n"; - dump($buffer); + echo $buffer; } } } @@ -179,5 +179,11 @@ header("Content-Disposition: attachment; filename=$filename.$ext" . ($output != "file" && !ereg('[^0-9a-z]', $output) ? ".$output" : "")); } session_write_close(); + if ($_POST["output"] == "bz2") { + ob_start('bzcompress', 1e6); + } + if ($_POST["output"] == "gz") { + ob_start('gzencode', 1e6); + } return $ext; } Modified: trunk/adminer/include/functions.inc.php =================================================================== --- trunk/adminer/include/functions.inc.php 2009-10-02 12:21:55 UTC (rev 1160) +++ trunk/adminer/include/functions.inc.php 2009-10-02 12:31:28 UTC (rev 1161) @@ -469,27 +469,6 @@ } } -/** Print data with optional compression -* @param string null to force output -* @return null -*/ -function dump($string = null) { // null $string forces sending of buffer - static $buffer = ""; // used to improve compression and to allow GZ archives unpackable in Total Commander - if (!ereg("text|file", $_POST["output"])) { - $buffer .= $string; - if (!isset($string) || strlen($buffer) > 1e6) { - if ($_POST["output"] == "bz2") { - echo bzcompress($buffer); // should not be called repeatedly but it would require whole buffer in memory or temporary file - } else { - echo gzencode($buffer); - } - $buffer = ""; - } - } else { - echo $string; - } -} - /** Print CSV row * @param array * @return null @@ -500,7 +479,7 @@ $row[$key] = '"' . str_replace('"', '""', $val) . '"'; } } - dump(implode(",", $row) . "\n"); + echo implode(",", $row) . "\n"; } /** Apply SQL function Modified: trunk/adminer/select.inc.php =================================================================== --- trunk/adminer/select.inc.php 2009-10-02 12:21:55 UTC (rev 1160) +++ trunk/adminer/select.inc.php 2009-10-02 12:31:28 UTC (rev 1161) @@ -51,7 +51,6 @@ } dump_data($TABLE, "INSERT", implode(" UNION ALL ", $union)); } - dump(); exit; } if (!$adminer->selectEmailProcess($where, $foreign_keys)) { Modified: trunk/editor/include/export.inc.php =================================================================== --- trunk/editor/include/export.inc.php 2009-10-02 12:21:55 UTC (rev 1160) +++ trunk/editor/include/export.inc.php 2009-10-02 12:31:28 UTC (rev 1161) @@ -1,6 +1,6 @@ <?php function dump_table($table) { - dump("\xef\xbb\xbf"); // UTF-8 byte order mark + echo "\xef\xbb\xbf"; // UTF-8 byte order mark } function dump_data($table, $style, $select = "") { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-10-16 12:26:31
|
Revision: 1192 http://adminer.svn.sourceforge.net/adminer/?rev=1192&view=rev Author: jakubvrana Date: 2009-10-16 12:26:16 +0000 (Fri, 16 Oct 2009) Log Message: ----------- Prepare for SQLite Modified Paths: -------------- trunk/adminer/create.inc.php trunk/adminer/edit.inc.php trunk/adminer/foreign.inc.php trunk/adminer/include/adminer.inc.php trunk/adminer/include/functions.inc.php trunk/adminer/include/mysql.inc.php trunk/adminer/table.inc.php trunk/editor/include/adminer.inc.php Modified: trunk/adminer/create.inc.php =================================================================== --- trunk/adminer/create.inc.php 2009-10-13 20:08:58 UTC (rev 1191) +++ trunk/adminer/create.inc.php 2009-10-16 12:26:16 UTC (rev 1192) @@ -98,14 +98,6 @@ page_header((strlen($TABLE) ? lang('Alter table') : lang('Create table')), $error, array("table" => $TABLE), $TABLE); -$engines = array(); -$result = $connection->query("SHOW ENGINES"); -while ($row = $result->fetch_assoc()) { - if (ereg("YES|DEFAULT", $row["Support"])) { - $engines[] = $row["Engine"]; - } -} - $row = array( "Engine" => $_COOKIE["adminer_engine"], "fields" => array(array("field" => "")), @@ -148,6 +140,8 @@ if ($suhosin && count($row["fields"]) > $suhosin) { echo "<p class='error'>" . h(lang('Maximum number of allowed fields exceeded. Please increase %s and %s.', 'suhosin.post.max_vars', 'suhosin.request.max_vars')) . "\n"; } + +$engines = engines(); // case of engine may differ foreach ($engines as $engine) { if (!strcasecmp($engine, $row["Engine"])) { @@ -160,7 +154,7 @@ <form action="" method="post" id="form"> <p> <?php echo lang('Table name'); ?>: <input name="name" maxlength="64" value="<?php echo h($row["name"]); ?>"> -<?php echo html_select("Engine", array("" => "(" . lang('engine') . ")") + $engines, $row["Engine"]); ?> +<?php echo ($engines ? html_select("Engine", array("" => "(" . lang('engine') . ")") + $engines, $row["Engine"]) : ""); ?> <?php echo html_select("Collation", array("" => "(" . lang('collation') . ")") + $collations, $row["Collation"]); ?> <input type="submit" value="<?php echo lang('Save'); ?>"> </p> Modified: trunk/adminer/edit.inc.php =================================================================== --- trunk/adminer/edit.inc.php 2009-10-13 20:08:58 UTC (rev 1191) +++ trunk/adminer/edit.inc.php 2009-10-16 12:26:16 UTC (rev 1192) @@ -22,8 +22,10 @@ $set = array(); foreach ($fields as $name => $field) { $val = process_input($field); - if ($val !== false || !$update) { - $set[] = "\n" . idf_escape($name) . " = " . ($val !== false ? $val : "''"); + if (!$update) { + $set[idf_escape($name)] = ($val !== false ? $val : "''"); + } elseif ($val !== false) { + $set[] = "\n" . idf_escape($name) . " = $val"; } } if (!$set) { @@ -32,7 +34,7 @@ if ($update) { query_redirect("UPDATE " . idf_escape($TABLE) . " SET" . implode(",", $set) . "\nWHERE $where\nLIMIT 1", $location, lang('Item has been updated.')); } else { - query_redirect("INSERT INTO " . idf_escape($TABLE) . " SET" . implode(",", $set), $location, lang('Item has been inserted.')); + query_redirect("INSERT INTO " . idf_escape($TABLE) . " (" . implode(", ", array_keys($set)) . ")\nVALUES (" . implode(", ", $set) . ")", $location, lang('Item has been inserted.')); } } Modified: trunk/adminer/foreign.inc.php =================================================================== --- trunk/adminer/foreign.inc.php 2009-10-13 20:08:58 UTC (rev 1191) +++ trunk/adminer/foreign.inc.php 2009-10-16 12:26:16 UTC (rev 1192) @@ -37,8 +37,8 @@ $row["source"][] = ""; } -$source = get_vals("SHOW COLUMNS FROM " . idf_escape($TABLE)); //! no text and blob -$target = ($TABLE === $row["table"] ? $source : get_vals("SHOW COLUMNS FROM " . idf_escape($row["table"]))); +$source = array_keys(fields($TABLE)); //! no text and blob +$target = ($TABLE === $row["table"] ? $source : array_keys(fields($row["table"]))); ?> <form action="" method="post"> Modified: trunk/adminer/include/adminer.inc.php =================================================================== --- trunk/adminer/include/adminer.inc.php 2009-10-13 20:08:58 UTC (rev 1191) +++ trunk/adminer/include/adminer.inc.php 2009-10-16 12:26:16 UTC (rev 1192) @@ -491,7 +491,7 @@ </form> <?php if ($missing != "db" && strlen(DB) && $connection->select_db(DB)) { - $tables = get_vals("SHOW TABLES"); + $tables = tables_list(); if (!$tables) { echo "<p class='message'>" . lang('No tables.') . "\n"; } else { Modified: trunk/adminer/include/functions.inc.php =================================================================== --- trunk/adminer/include/functions.inc.php 2009-10-13 20:08:58 UTC (rev 1191) +++ trunk/adminer/include/functions.inc.php 2009-10-16 12:26:16 UTC (rev 1192) @@ -24,6 +24,15 @@ return str_replace("``", "`", $idf); } +/** Escape string to use inside '' +* @param string +* @return string +*/ +function escape_string($val) { + global $connection; + return substr($connection->quote($val), 1, -1); +} + /** Escape or unescape string to use inside form [] * @param string * @param bool @@ -155,11 +164,10 @@ * @return string */ function where($where) { - global $connection; $return = array(); foreach ((array) $where["where"] as $key => $val) { $key = bracket_escape($key, "back"); - $return[] = (preg_match('~^[A-Z0-9_]+\\(`(?:[^`]|``)+`\\)$~', $key) ? $key : idf_escape($key)) . " = BINARY " . $connection->quote($val); //! enum and set, columns looking like functions + $return[] = (preg_match('~^[A-Z0-9_]+\\(`(?:[^`]|``)+`\\)$~', $key) ? $key : idf_escape($key)) . " = " . exact_value($val); //! enum and set, columns looking like functions } foreach ((array) $where["null"] as $key) { $key = bracket_escape($key, "back"); Modified: trunk/adminer/include/mysql.inc.php =================================================================== --- trunk/adminer/include/mysql.inc.php 2009-10-13 20:08:58 UTC (rev 1191) +++ trunk/adminer/include/mysql.inc.php 2009-10-16 12:26:16 UTC (rev 1192) @@ -177,6 +177,25 @@ return $return; } +function engines() { + global $connection; + $return = array(); + $result = $connection->query("SHOW ENGINES"); + while ($row = $result->fetch_assoc()) { + if (ereg("YES|DEFAULT", $row["Support"])) { + $return[] = $row["Engine"]; + } + } + return $return; +} + +/** Get tables list +* @return array +*/ +function tables_list() { + return get_vals("SHOW TABLES"); +} + /** Get table status * @param string * @return array @@ -315,22 +334,22 @@ return $return; } -/** Escape string to use inside '' +/** Find out if database is information_schema * @param string -* @return string +* @return bool */ -function escape_string($val) { +function information_schema($db) { global $connection; - return substr($connection->quote($val), 1, -1); + return ($connection->server_info >= 5 && $db == "information_schema"); } -/** Find out if database is information_schema +/** Return expression for binary comparison * @param string -* @return bool +* @return string */ -function information_schema($db) { +function exact_value($val) { global $connection; - return ($connection->server_info >= 5 && $db == "information_schema"); + return "BINARY " . $connection->quote($val); } // value means maximum unsigned length Modified: trunk/adminer/table.inc.php =================================================================== --- trunk/adminer/table.inc.php 2009-10-13 20:08:58 UTC (rev 1191) +++ trunk/adminer/table.inc.php 2009-10-16 12:26:16 UTC (rev 1192) @@ -1,22 +1,22 @@ <?php $TABLE = $_GET["table"]; -$result = $connection->query("SHOW FULL COLUMNS FROM " . idf_escape($TABLE)); -if (!$result) { +$fields = fields($TABLE); +if (!$fields) { $error = h($connection->error); } -$table_status = ($result ? table_status($TABLE) : array()); +$table_status = ($fields ? table_status($TABLE) : array()); $is_view = !isset($table_status["Rows"]); -page_header(($result && $is_view ? lang('View') : lang('Table')) . ": " . h($TABLE), $error); +page_header(($fields && $is_view ? lang('View') : lang('Table')) . ": " . h($TABLE), $error); $adminer->selectLinks($table_status, $is_view ? null : ""); -if ($result) { +if ($fields) { echo "<table cellspacing='0'>\n"; echo "<thead><tr><th>" . lang('Column') . "<td>" . lang('Type') . "<td>" . lang('Comment') . "</thead>\n"; - while ($row = $result->fetch_assoc()) { - echo "<tr><th>" . h($row["Field"]); - echo "<td>" . h($row["Type"]) . ($row["Null"] == "YES" ? " <i>NULL</i>" : "") . ($row["Extra"] == "auto_increment" ? " <i>" . lang('Auto Increment') . "</i>" : ""); - echo "<td>" . nbsp($row["Comment"]); + foreach ($fields as $field) { + echo "<tr><th>" . h($field["field"]); + echo "<td>" . h($field["full_type"]) . ($field["null"] ? " <i>NULL</i>" : "") . ($field["auto_increment"] ? " <i>" . lang('Auto Increment') . "</i>" : ""); + echo "<td>" . nbsp($field["comment"]); echo "\n"; } echo "</table>\n"; Modified: trunk/editor/include/adminer.inc.php =================================================================== --- trunk/editor/include/adminer.inc.php 2009-10-13 20:08:58 UTC (rev 1191) +++ trunk/editor/include/adminer.inc.php 2009-10-16 12:26:16 UTC (rev 1192) @@ -116,7 +116,7 @@ // find all used ids $ids = array(); foreach ($rows as $row) { - $ids[$row[$key]] = "BINARY " . $connection->quote($row[$key]); + $ids[$row[$key]] = exact_value($row[$key]); } // uses constant number of queries to get the descriptions, join would be complex, multiple queries would be slow $descriptions = array(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-10-18 09:29:11
|
Revision: 1195 http://adminer.svn.sourceforge.net/adminer/?rev=1195&view=rev Author: jakubvrana Date: 2009-10-18 09:29:01 +0000 (Sun, 18 Oct 2009) Log Message: ----------- Database list - bulk drop, number of tables Modified Paths: -------------- trunk/adminer/database.inc.php trunk/adminer/db.inc.php trunk/adminer/include/connect.inc.php trunk/adminer/include/mysql.inc.php trunk/todo.txt Modified: trunk/adminer/database.inc.php =================================================================== --- trunk/adminer/database.inc.php 2009-10-17 07:16:02 UTC (rev 1194) +++ trunk/adminer/database.inc.php 2009-10-18 09:29:01 UTC (rev 1195) @@ -1,9 +1,6 @@ <?php if ($_POST && !$error && !isset($_POST["add_x"])) { // add is an image and PHP changes add.x to add_x - if ($_POST["drop"]) { - unset($_SESSION["databases"][$_GET["server"]]); - query_redirect("DROP DATABASE " . idf_escape(DB), substr(preg_replace('~db=[^&]*&~', '', ME), 0, -1), lang('Database has been dropped.')); - } elseif (DB !== $_POST["name"]) { + if (DB !== $_POST["name"]) { // create or rename database unset($_SESSION["databases"][$_GET["server"]]); // clear cache $dbs = explode("\n", str_replace("\r", "", $_POST["name"])); @@ -42,7 +39,7 @@ $collations = collations(); $name = DB; -$collate = array(); +$collate = null; if ($_POST) { $name = $_POST["name"]; $collate = $_POST["collation"]; @@ -55,14 +52,8 @@ break; } } -} elseif (($result = $connection->query("SHOW CREATE DATABASE " . idf_escape(DB)))) { - $create = $connection->result($result, 1); - if (preg_match('~ COLLATE ([^ ]+)~', $create, $match)) { - $collate = $match[1]; - } elseif (preg_match('~ CHARACTER SET ([^ ]+)~', $create, $match)) { - // default collation - $collate = $collations[$match[1]][0]; - } +} else { + $collate = db_collation(DB, $collations); } ?> @@ -76,9 +67,7 @@ <input type="hidden" name="token" value="<?php echo $token; ?>"> <input type="submit" value="<?php echo lang('Save'); ?>"> <?php -if (strlen(DB)) { - echo "<input type='submit' name='drop' value='" . lang('Drop') . "'$confirm>\n"; -} elseif (!$_POST["add_x"]) { +if (!$_POST["add_x"]) { echo "<input type='image' name='add' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>\n"; } ?> Modified: trunk/adminer/db.inc.php =================================================================== --- trunk/adminer/db.inc.php 2009-10-17 07:16:02 UTC (rev 1194) +++ trunk/adminer/db.inc.php 2009-10-18 09:29:01 UTC (rev 1195) @@ -39,7 +39,7 @@ page_header(lang('Database') . ": " . h(DB), $error, false); echo '<p><a href="' . h(ME) . 'database=">' . lang('Alter database') . "</a>\n"; -echo '<p><a href="' . h(ME) . 'schema=">' . lang('Database schema') . "</a>\n"; +echo '<a href="' . h(ME) . 'schema=">' . lang('Database schema') . "</a>\n"; echo "<h3>" . lang('Tables and views') . "</h3>\n"; $table_status = table_status(); Modified: trunk/adminer/include/connect.inc.php =================================================================== --- trunk/adminer/include/connect.inc.php 2009-10-17 07:16:02 UTC (rev 1194) +++ trunk/adminer/include/connect.inc.php 2009-10-18 09:29:01 UTC (rev 1195) @@ -1,20 +1,50 @@ <?php function connect_error() { - global $connection, $VERSION; + global $connection, $VERSION, $token, $error; if (strlen(DB)) { page_header(lang('Database') . ": " . h(DB), lang('Invalid database.'), false); } else { + if ($_POST["db"] && !$error) { + unset($_SESSION["databases"][$_GET["server"]]); + foreach ($_POST["db"] as $db) { + if (!queries("DROP DATABASE " . idf_escape($db))) { + break; + } + } + queries_redirect(substr(ME, 0, -1), lang('Database has been dropped.'), !$connection->error); + } + page_header(lang('Select database'), "", null); + echo "<p>"; foreach (array( 'database' => lang('Create new database'), 'privileges' => lang('Privileges'), 'processlist' => lang('Process list'), 'variables' => lang('Variables'), ) as $key => $val) { - echo "<p><a href='" . h(ME) . "$key='>$val</a>\n"; + echo "<a href='" . h(ME) . "$key='>$val</a>\n"; } echo "<p>" . lang('MySQL version: %s through PHP extension %s', "<b" . ($connection->server_info < 4.1 ? " class='binary'" : "") . ">$connection->server_info</b>", "<b>$connection->extension</b>") . "\n"; echo "<p>" . lang('Logged as: %s', "<b>" . h($connection->result($connection->query("SELECT USER()"))) . "</b>") . "\n"; + $databases = get_databases(); + if ($databases) { + $collations = collations(); + echo "<form action='' method='post'>\n"; + echo "<table cellspacing='0' onclick='table_click(event);'>\n"; + echo "<thead><tr><td><input type='hidden' name='token' value='$token'> <th>" . lang('Database') . "<td>" . lang('Collation') . "<td>" . lang('Tables') . "</thead>\n"; + foreach ($databases as $db) { + $root = h(ME) . "db=" . urlencode($db); + echo "<tr><td>" . checkbox("db[]", $db, false); + echo "<th><a href='$root'>" . h($db) . "</a>"; + echo "<td><a href='$root&database='>" . nbsp(db_collation($db, $collations)) . "</a>"; + $result = $connection->query("SHOW TABLES FROM " . idf_escape($db)); + echo "<td><a href='$root&schema='>$result->num_rows</a>"; + echo "\n"; + } + echo "</table>\n"; + echo "<p><input type='submit' name='drop' value='" . lang('Drop') . "' onclick=\"return confirm('" . lang('Are you sure?') . " (' + form_checked(this, /db/) + ')');\">\n"; + echo "</form>\n"; + } } page_footer("db"); } Modified: trunk/adminer/include/mysql.inc.php =================================================================== --- trunk/adminer/include/mysql.inc.php 2009-10-17 07:16:02 UTC (rev 1194) +++ trunk/adminer/include/mysql.inc.php 2009-10-18 09:29:01 UTC (rev 1195) @@ -177,6 +177,30 @@ return $return; } +/** Get database collation +* @param string +* @param array result of collations() +* @return +*/ +function db_collation($db, $collations) { + global $connection; + $return = null; + $result = $connection->query("SHOW CREATE DATABASE " . idf_escape($db)); + if ($result) { + $create = $connection->result($result, 1); + if (preg_match('~ COLLATE ([^ ]+)~', $create, $match)) { + $return = $match[1]; + } elseif (preg_match('~ CHARACTER SET ([^ ]+)~', $create, $match)) { + // default collation + $return = $collations[$match[1]][0]; + } + } + return $return; +} + +/**Get supported engines +* @return array +*/ function engines() { global $connection; $return = array(); Modified: trunk/todo.txt =================================================================== --- trunk/todo.txt 2009-10-17 07:16:02 UTC (rev 1194) +++ trunk/todo.txt 2009-10-18 09:29:01 UTC (rev 1195) @@ -1,4 +1,3 @@ -Bulk database drop Add whisperer to fields with foreign key Highlight found fields MySQL 5 BIT data type This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-10-19 05:11:54
|
Revision: 1198 http://adminer.svn.sourceforge.net/adminer/?rev=1198&view=rev Author: jakubvrana Date: 2009-10-19 05:11:45 +0000 (Mon, 19 Oct 2009) Log Message: ----------- Enlarge field for enum and set definition Modified Paths: -------------- trunk/adminer/include/editing.inc.php trunk/adminer/include/version.inc.php trunk/adminer/static/editing.js trunk/changes.txt Modified: trunk/adminer/include/editing.inc.php =================================================================== --- trunk/adminer/include/editing.inc.php 2009-10-19 04:46:33 UTC (rev 1197) +++ trunk/adminer/include/editing.inc.php 2009-10-19 05:11:45 UTC (rev 1198) @@ -98,7 +98,7 @@ global $structured_types, $unsigned, $inout; ?> <td><select name="<?php echo $key; ?>[type]" class="type" onchange="editing_type_change(this);"><?php echo optionlist($structured_types + ($foreign_keys ? array(lang('Foreign keys') => $foreign_keys) : array()), $field["type"]); ?></select> -<td><input name="<?php echo $key; ?>[length]" value="<?php echo h($field["length"]); ?>" size="3"> +<td><input name="<?php echo $key; ?>[length]" value="<?php echo h($field["length"]); ?>" size="3" onfocus="editing_length_focus(this);"> <td><?php echo "<select name='$key" . "[collation]'" . (ereg('(char|text|enum|set)$', $field["type"]) ? "" : " class='hidden'") . '><option value="">(' . lang('collation') . ')' . optionlist($collations, $field["collation"]) . '</select>'; echo ($unsigned ? " <select name='$key" . "[unsigned]'" . (!$field["type"] || ereg('(int|float|double|decimal)$', $field["type"]) ? "" : " class='hidden'") . '><option>' . optionlist($unsigned, $field["unsigned"]) . '</select>' : ''); @@ -153,7 +153,7 @@ <thead><tr> <?php if ($type == "PROCEDURE") { ?><td> <?php } ?> <th><?php echo ($type == "TABLE" ? lang('Column name') : lang('Parameter name')); ?> -<td><?php echo lang('Type'); ?> +<td><?php echo lang('Type'); ?><textarea id="enum-edit" rows="4" cols="10" style="display: none;" onblur="editing_length_blur(this);"></textarea> <td><?php echo lang('Length'); ?> <td><?php echo lang('Options'); ?> <?php if ($type == "TABLE") { ?> Modified: trunk/adminer/include/version.inc.php =================================================================== --- trunk/adminer/include/version.inc.php 2009-10-19 04:46:33 UTC (rev 1197) +++ trunk/adminer/include/version.inc.php 2009-10-19 05:11:45 UTC (rev 1198) @@ -1,2 +1,2 @@ <?php -$VERSION = "2.1.1-dev"; +$VERSION = "2.2.0-dev"; Modified: trunk/adminer/static/editing.js =================================================================== --- trunk/adminer/static/editing.js 2009-10-19 04:46:33 UTC (rev 1197) +++ trunk/adminer/static/editing.js 2009-10-19 05:11:45 UTC (rev 1198) @@ -157,6 +157,27 @@ } } +function editing_length_focus(field) { + var td = field.parentNode; + if (/enum|set/.test(select_value(td.previousSibling.firstChild))) { + var edit = document.getElementById('enum-edit'); + var val = field.value; + edit.value = (/^'.+','.+'$/.test(val) ? val.substr(1, val.length - 2).replace(/','/g, "\n").replace(/''/g, "'") : val); + td.appendChild(edit); + field.style.display = 'none'; + edit.style.display = 'inline'; + edit.focus(); + } +} + +function editing_length_blur(edit) { + var field = edit.parentNode.firstChild; + var val = edit.value; + field.value = (/\n/.test(val) ? "'" + val.replace(/\n+$/, '').replace(/'/g, "''").replace(/\n/g, "','") + "'" : val); + field.style.display = 'inline'; + edit.style.display = 'none'; +} + function column_show(checked, column) { var trs = document.getElementById('edit-fields').getElementsByTagName('tr'); for (var i=0; i < trs.length; i++) { Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2009-10-19 04:46:33 UTC (rev 1197) +++ trunk/changes.txt 2009-10-19 05:11:45 UTC (rev 1198) @@ -1,4 +1,6 @@ -Adminer 2.1.1-dev: +Adminer 2.2.0-dev: +Database list - bulk drop, number of tables +Enlarge field for enum and set definition Display table links above table structure Link URLs in select Display number of manipulated rows in JS confirm This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-10-19 12:54:29
|
Revision: 1201 http://adminer.svn.sourceforge.net/adminer/?rev=1201&view=rev Author: jakubvrana Date: 2009-10-19 12:54:15 +0000 (Mon, 19 Oct 2009) Log Message: ----------- Align table count Modified Paths: -------------- trunk/adminer/include/connect.inc.php trunk/todo.txt Modified: trunk/adminer/include/connect.inc.php =================================================================== --- trunk/adminer/include/connect.inc.php 2009-10-19 10:47:53 UTC (rev 1200) +++ trunk/adminer/include/connect.inc.php 2009-10-19 12:54:15 UTC (rev 1201) @@ -38,7 +38,7 @@ echo "<th><a href='$root'>" . h($db) . "</a>"; echo "<td><a href='$root&database='>" . nbsp(db_collation($db, $collations)) . "</a>"; $result = $connection->query("SHOW TABLES FROM " . idf_escape($db)); - echo "<td><a href='$root&schema='>$result->num_rows</a>"; + echo "<td align='right'><a href='$root&schema='>$result->num_rows</a>"; echo "\n"; } echo "</table>\n"; Modified: trunk/todo.txt =================================================================== --- trunk/todo.txt 2009-10-19 10:47:53 UTC (rev 1200) +++ trunk/todo.txt 2009-10-19 12:54:15 UTC (rev 1201) @@ -7,9 +7,9 @@ Highlight SQL textarea - may use external CodePress Mass editation of individual rows Offer enum and set items in search - whisperer -Textarea for enum and set in Alter table Variables editation, especially timezone Use event $intervals + microseconds in relative date functions +Improve concurrency by calling session_write_close before executing command, message id will be sent in query string ? Column and table names auto-completition in SQL textarea ? Aliasing of built-in functions can save 7 KB, function minification can save 7 KB, substitution of repetitive $a["a"] can save 4 KB, substitution of $_GET and friends can save 2 KB, JS packer can save 1 KB, not enclosing HTML attribute values can save 1.2 KB, replacing \\n by \n can save .3 KB ? Branch binary_compile: LZW compression of translations can save 30 KB, LZW compression of all texts can save 11 KB, remove of base64_decode() + using chars 127-255 in minification can save 1 KB This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-10-20 15:36:23
|
Revision: 1204 http://adminer.svn.sourceforge.net/adminer/?rev=1204&view=rev Author: jakubvrana Date: 2009-10-20 15:36:17 +0000 (Tue, 20 Oct 2009) Log Message: ----------- Release Modified Paths: -------------- trunk/adminer/include/version.inc.php trunk/changes.txt trunk/version.js Modified: trunk/adminer/include/version.inc.php =================================================================== --- trunk/adminer/include/version.inc.php 2009-10-20 15:17:04 UTC (rev 1203) +++ trunk/adminer/include/version.inc.php 2009-10-20 15:36:17 UTC (rev 1204) @@ -1,2 +1,2 @@ <?php -$VERSION = "2.2.0-dev"; +$VERSION = "2.2.1-dev"; Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2009-10-20 15:17:04 UTC (rev 1203) +++ trunk/changes.txt 2009-10-20 15:36:17 UTC (rev 1204) @@ -1,4 +1,4 @@ -Adminer 2.2.0-dev: +Adminer 2.2.0 (released 2009-10-20): Database list - bulk drop, number of tables Enlarge field for enum and set definition Display table links above table structure Modified: trunk/version.js =================================================================== --- trunk/version.js 2009-10-20 15:17:04 UTC (rev 1203) +++ trunk/version.js 2009-10-20 15:36:17 UTC (rev 1204) @@ -1,2 +1,2 @@ // downloaded from repository by version_checker() -document.cookie = 'adminer_version=2.1.0'; // last released version +document.cookie = 'adminer_version=2.2.0'; // last released version This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-10-23 14:38:53
|
Revision: 1211 http://adminer.svn.sourceforge.net/adminer/?rev=1211&view=rev Author: jakubvrana Date: 2009-10-23 14:38:44 +0000 (Fri, 23 Oct 2009) Log Message: ----------- Link new item in backward keys Modified Paths: -------------- trunk/changes.txt trunk/editor/include/adminer.inc.php Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2009-10-22 12:30:50 UTC (rev 1210) +++ trunk/changes.txt 2009-10-23 14:38:44 UTC (rev 1211) @@ -1,3 +1,6 @@ +Adminer 2.2.1-dev: +Link new item in backward keys (Editor) + Adminer 2.2.0 (released 2009-10-20): Database list - bulk drop, number of tables Enlarge field for enum and set definition Modified: trunk/editor/include/adminer.inc.php =================================================================== --- trunk/editor/include/adminer.inc.php 2009-10-22 12:30:50 UTC (rev 1210) +++ trunk/editor/include/adminer.inc.php 2009-10-23 14:38:44 UTC (rev 1211) @@ -85,6 +85,11 @@ $link .= where_link($i++, $column, $row[$val]); } echo " <a href='" . h($link) . "'>$backwardKey[name]</a>"; + $link = ME . 'edit=' . urlencode($table); + foreach ($cols as $column => $val) { + $link .= "&set" . urlencode("[" . bracket_escape($column) . "]") . "=" . urlencode($row[$val]); + } + echo "<a href='" . h($link) . "' title='" . lang('New item') . "'>+</a>"; } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-10-28 12:21:27
|
Revision: 1218 http://adminer.svn.sourceforge.net/adminer/?rev=1218&view=rev Author: jakubvrana Date: 2009-10-28 12:21:21 +0000 (Wed, 28 Oct 2009) Log Message: ----------- Add CSS classes (thanks to cvicebni ubor) Modified Paths: -------------- trunk/adminer/include/adminer.inc.php trunk/adminer/select.inc.php trunk/editor/include/adminer.inc.php trunk/todo.txt Modified: trunk/adminer/include/adminer.inc.php =================================================================== --- trunk/adminer/include/adminer.inc.php 2009-10-28 12:14:38 UTC (rev 1217) +++ trunk/adminer/include/adminer.inc.php 2009-10-28 12:21:21 UTC (rev 1218) @@ -73,7 +73,7 @@ */ function selectLinks($tableStatus, $set = "") { $TABLE = $tableStatus["Name"]; - echo '<p><a href="' . h(ME) . 'select=' . urlencode($TABLE) . '">' . lang('Select table') . '</a>'; + echo '<p class="tabs"><a href="' . h(ME) . 'select=' . urlencode($TABLE) . '">' . lang('Select table') . '</a>'; echo ' <a href="' . h(ME) . 'table=' . urlencode($TABLE) . '">' . lang('Table structure') . '</a>'; if (isset($tableStatus["Rows"])) { echo ' <a href="' . h(ME) . 'create=' . urlencode($TABLE) . '">' . lang('Alter table') . '</a>'; @@ -471,7 +471,7 @@ $databases = get_databases(); ?> <form action="" method="post"> -<p> +<p class="logout"> <a href="<?php echo h(ME); ?>sql="><?php echo lang('SQL command'); ?></a> <a href="<?php echo h(ME); ?>dump=<?php echo urlencode(isset($_GET["table"]) ? $_GET["table"] : $_GET["select"]); ?>"><?php echo lang('Dump'); ?></a> <input type="hidden" name="token" value="<?php echo $_SESSION["tokens"][$_GET["server"]]; ?>"> Modified: trunk/adminer/select.inc.php =================================================================== --- trunk/adminer/select.inc.php 2009-10-28 12:14:38 UTC (rev 1217) +++ trunk/adminer/select.inc.php 2009-10-28 12:21:21 UTC (rev 1218) @@ -252,7 +252,7 @@ flush(); $found_rows = $connection->result($connection->query("SELECT COUNT(*) FROM " . idf_escape($TABLE) . ($where ? " WHERE " . implode(" AND ", $where) : ""))); } - echo "<p>"; + echo "<p class='pages'>"; if (intval($limit) && $found_rows > $limit) { // display first, previous 3, next 3 and last page $max_page = floor(($found_rows - 1) / $limit); Modified: trunk/editor/include/adminer.inc.php =================================================================== --- trunk/editor/include/adminer.inc.php 2009-10-28 12:14:38 UTC (rev 1217) +++ trunk/editor/include/adminer.inc.php 2009-10-28 12:21:21 UTC (rev 1218) @@ -43,7 +43,7 @@ function selectLinks($tableStatus, $set = "") { $TABLE = $tableStatus["Name"]; if (isset($set)) { - echo '<p><a href="' . h(ME . 'edit=' . urlencode($TABLE) . $set) . '">' . lang('New item') . "</a>\n"; + echo '<p class="tabs"><a href="' . h(ME . 'edit=' . urlencode($TABLE) . $set) . '">' . lang('New item') . "</a>\n"; } } @@ -433,7 +433,7 @@ if ($missing != "auth") { ?> <form action="" method="post"> -<p> +<p class="logout"> <input type="hidden" name="token" value="<?php echo $_SESSION["tokens"][$_GET["server"]]; ?>"> <input type="submit" name="logout" value="<?php echo lang('Logout'); ?>"> </p> Modified: trunk/todo.txt =================================================================== --- trunk/todo.txt 2009-10-28 12:14:38 UTC (rev 1217) +++ trunk/todo.txt 2009-10-28 12:21:21 UTC (rev 1218) @@ -1,5 +1,3 @@ -Add whisperer to fields with foreign key -Highlight found fields MySQL 5 BIT data type Transactions in export Create view and routine options @@ -19,3 +17,4 @@ JavaScript data validation - columns containing word email, url, ... Joining tables - PRIMARY KEY (table, joining) Rank, Tree structure +Add whisperer to fields with foreign key to big table This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-11-02 22:09:31
|
Revision: 1225 http://adminer.svn.sourceforge.net/adminer/?rev=1225&view=rev Author: jakubvrana Date: 2009-11-02 22:09:23 +0000 (Mon, 02 Nov 2009) Log Message: ----------- Improve concurrency Modified Paths: -------------- trunk/adminer/include/adminer.inc.php trunk/adminer/include/bootstrap.inc.php trunk/adminer/include/design.inc.php trunk/adminer/include/editing.inc.php trunk/adminer/include/functions.inc.php trunk/adminer/include/mysql.inc.php trunk/adminer/sql.inc.php trunk/changes.txt Modified: trunk/adminer/include/adminer.inc.php =================================================================== --- trunk/adminer/include/adminer.inc.php 2009-11-02 21:10:27 UTC (rev 1224) +++ trunk/adminer/include/adminer.inc.php 2009-11-02 22:09:23 UTC (rev 1225) @@ -358,6 +358,7 @@ * @return string */ function messageQuery($query) { + session_start(); $id = "sql-" . count($_SESSION["messages"]); $_SESSION["history"][$_GET["server"]][DB][] = $query; return " <a href='#$id' onclick=\"return !toggle('$id');\">" . lang('SQL command') . "</a><div id='$id' class='hidden'><pre class='jush-sql'>" . shorten_utf8($query, 1000) . '</pre><a href="' . h(ME . 'sql=&history=' . (count($_SESSION["history"][$_GET["server"]][DB]) - 1)) . '">' . lang('Edit') . '</a></div>'; Modified: trunk/adminer/include/bootstrap.inc.php =================================================================== --- trunk/adminer/include/bootstrap.inc.php 2009-11-02 21:10:27 UTC (rev 1224) +++ trunk/adminer/include/bootstrap.inc.php 2009-11-02 22:09:23 UTC (rev 1225) @@ -91,6 +91,11 @@ include "./include/editing.inc.php"; include "./include/export.inc.php"; +session_cache_limiter(""); // to allow restarting session +if (@ini_set("session.use_cookies", false) !== false) { // @ - may be disabled + session_write_close(); // improves concurrency, may be restarted later +} + $confirm = " onclick=\"return confirm('" . lang('Are you sure?') . "');\""; $token = $_SESSION["tokens"][$_GET["server"]]; $error = ($_POST Modified: trunk/adminer/include/design.inc.php =================================================================== --- trunk/adminer/include/design.inc.php 2009-11-02 21:10:27 UTC (rev 1224) +++ trunk/adminer/include/design.inc.php 2009-11-02 22:09:23 UTC (rev 1225) @@ -40,6 +40,7 @@ echo "$title\n"; } echo "<h2>$title_all</h2>\n"; + restart_session(); if ($_SESSION["messages"]) { echo "<div class='message'>" . implode("</div>\n<div class='message'>", $_SESSION["messages"]) . "</div>\n"; $_SESSION["messages"] = array(); @@ -51,7 +52,7 @@ if (strlen(DB) && $databases && !in_array(DB, $databases, true)) { $databases = null; } - if (isset($databases) && !isset($_GET["sql"])) { + if ((isset($databases) && !isset($_GET["sql"])) || !ini_get("session.use_cookies")) { // improves concurrency if a user opens several pages at once session_write_close(); } Modified: trunk/adminer/include/editing.inc.php =================================================================== --- trunk/adminer/include/editing.inc.php 2009-11-02 21:10:27 UTC (rev 1224) +++ trunk/adminer/include/editing.inc.php 2009-11-02 22:09:23 UTC (rev 1225) @@ -351,6 +351,7 @@ $dropped = strlen($name) && ($_POST["dropped"] || queries($drop)); $created = queries($create); if (!queries_redirect($location, (strlen($name) ? $message_alter : $message_create), $created) && $dropped) { + session_start(); $_SESSION["messages"][] = $message_drop; } return $dropped; Modified: trunk/adminer/include/functions.inc.php =================================================================== --- trunk/adminer/include/functions.inc.php 2009-11-02 21:10:27 UTC (rev 1224) +++ trunk/adminer/include/functions.inc.php 2009-11-02 22:09:23 UTC (rev 1225) @@ -204,6 +204,15 @@ return setcookie($name, $value, time() + 2592000, preg_replace('~\\?.*~', '', $_SERVER["REQUEST_URI"])); // 2592000 = 30 * 24 * 60 * 60 } +/** Restart stopped session +* @return null +*/ +function restart_session() { + if (!ini_get("session.use_cookies")) { + session_start(); + } +} + /** Send Location header and exit * @param string * @param string @@ -211,6 +220,7 @@ */ function redirect($location, $message = null) { if (isset($message)) { + session_start(); $_SESSION["messages"][] = $message; } header("Location: " . (strlen($location) ? $location : ".")); @@ -228,13 +238,13 @@ */ function query_redirect($query, $location, $message, $redirect = true, $execute = true, $failed = false) { global $connection, $error, $adminer; + if ($execute) { + $failed = !$connection->query($query); + } $sql = ""; if ($query) { $sql = $adminer->messageQuery($query); } - if ($execute) { - $failed = !$connection->query($query); - } if ($failed) { $error = h($connection->error) . $sql; return false; Modified: trunk/adminer/include/mysql.inc.php =================================================================== --- trunk/adminer/include/mysql.inc.php 2009-11-02 21:10:27 UTC (rev 1224) +++ trunk/adminer/include/mysql.inc.php 2009-11-02 22:09:23 UTC (rev 1225) @@ -168,6 +168,7 @@ // SHOW DATABASES can take a very long time so it is cached $return = &$_SESSION["databases"][$_GET["server"]]; if (!isset($return)) { + restart_session(); $return = get_vals("SHOW DATABASES"); if ($flush) { ob_flush(); Modified: trunk/adminer/sql.inc.php =================================================================== --- trunk/adminer/sql.inc.php 2009-11-02 21:10:27 UTC (rev 1224) +++ trunk/adminer/sql.inc.php 2009-11-02 22:09:23 UTC (rev 1225) @@ -27,8 +27,8 @@ $space = "(\\s|/\\*.*\\*/|(#|-- )[^\n]*\n|--\n)"; $alter_database = "(CREATE|DROP)$space+(DATABASE|SCHEMA)\\b~isU"; $databases = &$_SESSION["databases"][$_GET["server"]]; - if (isset($databases) && !preg_match("~\\b$alter_database", $query)) { // quick check - may be inside string - //! false positive with $fp + if ((isset($databases) && !preg_match("~\\b$alter_database", $query)) || !ini_get("session.use_cookies")) { // quick check - may be inside string + //! false positive with $fp and disabled ini_set() and enabled session.use_cookies session_write_close(); } $delimiter = ";"; Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2009-11-02 21:10:27 UTC (rev 1224) +++ trunk/changes.txt 2009-11-02 22:09:23 UTC (rev 1225) @@ -1,4 +1,5 @@ Adminer 2.2.1-dev: +Improve concurrency Link new item in backward keys (Editor) Adminer 2.2.0 (released 2009-10-20): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-11-02 23:14:45
|
Revision: 1226 http://adminer.svn.sourceforge.net/adminer/?rev=1226&view=rev Author: jakubvrana Date: 2009-11-02 23:14:37 +0000 (Mon, 02 Nov 2009) Log Message: ----------- Display number of tables Modified Paths: -------------- trunk/adminer/db.inc.php trunk/changes.txt Modified: trunk/adminer/db.inc.php =================================================================== --- trunk/adminer/db.inc.php 2009-11-02 22:09:23 UTC (rev 1225) +++ trunk/adminer/db.inc.php 2009-11-02 23:14:37 UTC (rev 1226) @@ -48,7 +48,7 @@ } else { echo "<form action='' method='post'>\n"; echo "<table cellspacing='0' class='nowrap' onclick='table_click(event);'>\n"; - echo '<thead><tr class="wrap"><td><input id="check-all" type="checkbox" onclick="form_check(this, /^(tables|views)\[/);"><th>' . lang('Table') . '<td>' . lang('Engine') . '<td>' . lang('Collation') . '<td>' . lang('Data Length') . '<td>' . lang('Index Length') . '<td>' . lang('Data Free') . '<td>' . lang('Auto Increment') . '<td>' . lang('Rows') . '<td>' . lang('Comment') . "</thead>\n"; + echo '<thead><tr class="wrap"><td><input id="check-all" type="checkbox" onclick="form_check(this, /^(tables|views)\[/);" title="' . count($table_status) . '"><th>' . lang('Table') . '<td>' . lang('Engine') . '<td>' . lang('Collation') . '<td>' . lang('Data Length') . '<td>' . lang('Index Length') . '<td>' . lang('Data Free') . '<td>' . lang('Auto Increment') . '<td>' . lang('Rows') . '<td>' . lang('Comment') . "</thead>\n"; foreach ($table_status as $row) { $name = $row["Name"]; echo '<tr' . odd() . '><td>' . checkbox((isset($row["Rows"]) ? "tables[]" : "views[]"), $name, in_array($name, $tables_views, true), "", "form_uncheck('check-all');"); Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2009-11-02 22:09:23 UTC (rev 1225) +++ trunk/changes.txt 2009-11-02 23:14:37 UTC (rev 1226) @@ -1,5 +1,6 @@ Adminer 2.2.1-dev: Improve concurrency +Move number of tables to DB info (performance) Link new item in backward keys (Editor) Adminer 2.2.0 (released 2009-10-20): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-11-19 09:29:13
|
Revision: 1245 http://adminer.svn.sourceforge.net/adminer/?rev=1245&view=rev Author: jakubvrana Date: 2009-11-19 09:29:06 +0000 (Thu, 19 Nov 2009) Log Message: ----------- Align dates (Editor) Modified Paths: -------------- trunk/adminer/static/default.css trunk/editor/include/adminer.inc.php Modified: trunk/adminer/static/default.css =================================================================== --- trunk/adminer/static/default.css 2009-11-18 12:32:39 UTC (rev 1244) +++ trunk/adminer/static/default.css 2009-11-19 09:29:06 UTC (rev 1245) @@ -31,6 +31,7 @@ .time { color: silver; font-size: 70%; float: right; margin-top: -3em; } .function { text-align: right; } .number { text-align: right; } +.datetime { text-align: right; } .type { width: 15ex; width: auto\9; } #menu { position: absolute; margin: 10px 0 0; padding: 0 0 30px 0; top: 2em; left: 0; width: 19em; overflow: auto; overflow-y: hidden; white-space: nowrap; } #menu p { padding: .8em 1em; margin: 0; border-bottom: 1px solid #ccc; } Modified: trunk/editor/include/adminer.inc.php =================================================================== --- trunk/editor/include/adminer.inc.php 2009-11-18 12:32:39 UTC (rev 1244) +++ trunk/editor/include/adminer.inc.php 2009-11-19 09:29:06 UTC (rev 1245) @@ -159,6 +159,8 @@ } if (!$link && $field["full_type"] != "tinyint(1)" && ereg('int|float|double|decimal', $field["type"])) { $return = "<div class='number'>$return</div>"; // Firefox doesn't support <colgroup> + } elseif (ereg('date', $field["type"])) { + $return = "<div class='datetime'>$return</div>"; } return $return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |