Thread: [adminer-svn] SF.net SVN: adminer:[1487] trunk (Page 5)
Database management in a single PHP file
Brought to you by:
jakubvrana
From: <jak...@us...> - 2010-04-23 15:27:06
|
Revision: 1487 http://adminer.svn.sourceforge.net/adminer/?rev=1487&view=rev Author: jakubvrana Date: 2010-04-23 15:26:59 +0000 (Fri, 23 Apr 2010) Log Message: ----------- In-place editation in select Modified Paths: -------------- trunk/adminer/include/functions.inc.php trunk/adminer/select.inc.php trunk/adminer/static/functions.js trunk/changes.txt trunk/todo.txt Modified: trunk/adminer/include/functions.inc.php =================================================================== --- trunk/adminer/include/functions.inc.php 2010-04-23 09:05:30 UTC (rev 1486) +++ trunk/adminer/include/functions.inc.php 2010-04-23 15:26:59 UTC (rev 1487) @@ -515,7 +515,7 @@ } elseif (ereg('binary|blob|bytea', $field["type"]) && ini_bool("file_uploads")) { echo "<input type='file' name='fields-$name'$onchange>"; } elseif (ereg('text|blob', $field["type"])) { - echo "<textarea cols='50' rows='" . ($driver != "sqlite" || ereg("\n", $value) ? 12 : 1) . "'$attrs>" . h($value) . '</textarea>'; + echo "<textarea " . ($driver != "sqlite" || ereg("\n", $value) ? "cols='50' rows='12'" : "cols='30' rows='1' style='height: 1.2em;'") . "$attrs>" . h($value) . '</textarea>'; // 1.2em - line-height } else { // int(3) is only a display hint $maxlength = (!ereg('int', $field["type"]) && preg_match('~^([0-9]+)(,([0-9]+))?$~', $field["length"], $match) ? ($match[1] + ($match[3] ? 1 : 0) + ($match[2] && !$field["unsigned"] ? 1 : 0)) : ($types[$field["type"]] ? $types[$field["type"]] + ($field["unsigned"] ? 0 : 1) : 0)); Modified: trunk/adminer/select.inc.php =================================================================== --- trunk/adminer/select.inc.php 2010-04-23 09:05:30 UTC (rev 1486) +++ trunk/adminer/select.inc.php 2010-04-23 15:26:59 UTC (rev 1487) @@ -61,7 +61,7 @@ exit; } if (!$adminer->selectEmailProcess($where, $foreign_keys)) { - if (!$_POST["import"]) { // edit + if ($_POST["save"]) { // edit $result = true; $affected = 0; $query = idf_escape($TABLE); @@ -105,6 +105,21 @@ } queries_redirect(remove_from_uri("page"), lang('%d item(s) have been affected.', $affected), $result); //! display edit page in case of an error + } elseif (!$_POST["import"]) { // modify + $result = true; + $affected = 0; + foreach ($_POST["val"] as $unique_idf => $row) { + $set = array(); + foreach ($row as $key => $val) { + $set[] = idf_escape(bracket_escape($key, 1)) . " = " . $connection->quote($val); // 1 - back //! $adminer->editVal($val) + } + $result = queries("UPDATE " . idf_escape($TABLE) . " SET " . implode(", ", $set) . " WHERE " . where_check($unique_idf)); + if (!$result) { + break; + } + $affected += $connection->affected_rows; + } + queries_redirect(remove_from_uri(), lang('%d item(s) have been affected.', $affected), $result); } elseif (is_string($file = get_file("csv_file", true))) { $file = preg_replace("~^\xEF\xBB\xBF~", '', $file); //! character set $result = true; @@ -144,6 +159,7 @@ $table_name = $adminer->tableName($table_status); page_header(lang('Select') . ": $table_name", $error); +session_write_close(); $set = null; if (isset($rights["insert"])) { @@ -177,7 +193,6 @@ $page = $_GET["page"]; if ($page == "last") { - session_write_close(); $found_rows = $connection->result("SELECT COUNT(*) FROM " . idf_escape($TABLE) . ($where ? " WHERE " . implode(" AND ", $where) : "")); $page = floor(($found_rows - 1) / $limit); } @@ -212,7 +227,7 @@ $backward_keys = $adminer->backwardKeys($TABLE, $table_name); echo "<table cellspacing='0' class='nowrap' onclick='tableClick(event);'>\n"; - echo "<thead><tr><td><input type='checkbox' id='all-page' onclick='formCheck(this, /check/);'>"; + echo "<thead><tr><td><input type='checkbox' id='all-page' onclick='formCheck(this, /check/);'> <a href='" . h($_GET["modify"] ? remove_from_uri("modify") : $_SERVER["REQUEST_URI"] . "&modify=1") . "'>" . lang('edit') . "</a>"; $names = array(); reset($select); $order = 1; @@ -227,6 +242,14 @@ } next($select); } + $lengths = array(); + if ($_GET["modify"]) { + foreach ($rows as $row) { + foreach ($row as $key => $val) { + $lengths[$key] = max($lengths[$key], min(40, strlen(utf8_decode($val)))); + } + } + } echo ($backward_keys ? "<th>" . lang('Relations') : "") . "</thead>\n"; foreach ($adminer->rowDescriptions($rows, $foreign_keys) as $n => $row) { $unique_array = unique_array($rows[$n], $indexes); @@ -239,7 +262,7 @@ if (isset($names[$key])) { $field = $fields[$key]; if ($val != "" && (!isset($email_fields[$key]) || $email_fields[$key] != "")) { - $email_fields[$key] = (is_email($val) ? $names[$key] : ""); //! filled e-mails may be contained on other pages + $email_fields[$key] = (is_email($val) ? $names[$key] : ""); //! filled e-mails can be contained on other pages } $link = ""; $val = $adminer->editVal($val, $field); @@ -285,10 +308,17 @@ $link = "mailto:$val"; } if (!$link && is_url($row[$key])) { - $link = "http://www.adminer.org/redirect/?url=" . urlencode($row[$key]); // intermediate page to hide Referer + $link = "http://www.adminer.org/redirect/?url=" . urlencode($row[$key]); // intermediate page to hide Referer, may be changed to rel="noreferrer" in HTML5 } - $val = $adminer->selectVal($val, $link, $field); - echo "<td>$val"; + $id = h("val[$unique_idf][" . bracket_escape($key) . "]"); + $value = $_POST["val"][$unique_idf][bracket_escape($key)]; + $h_value = h(isset($value) ? $value : $row[$key]); + $editable = is_utf8($val) && !strpos($val, "<em>...</em>"); + $text = ereg('text|blob', $field["type"]); + echo (($_GET["modify"] && $editable) || isset($value) + ? "<td>" . ($text ? "<textarea name='$id' cols='30' rows='" . (substr_count($row[$key], "\n") + 1) . "'>$h_value</textarea>" : "<input name='$id' value='$h_value' size='$lengths[$key]'>") + : "<td id='$id'" . ($editable ? " ondblclick='selectDblClick(this, event" . ($text ? ", 1" : "") . ");'" : "") . ">" . $adminer->selectVal($val, $link, $field) + ); } } $adminer->backwardKeysPrint($backward_keys, $rows[$n]); @@ -324,7 +354,16 @@ } echo " (" . ($exact_count ? "" : "~ ") . lang('%d row(s)', $found_rows) . ") " . checkbox("all", 1, 0, lang('whole result')) . "\n"; - 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 : formChecked(this, /check/)) + ')');\"></div></fieldset>\n"); + if (!information_schema(DB)) { + ?> +<fieldset><legend><?php echo lang('Edit'); ?></legend><div> +<input type="submit" value="<?php echo lang('Save'); ?>"<?php if (!$_GET["modify"] && !$_POST["val"]) { ?> onclick="if (!selectDblClicked) { alert('<?php echo lang('Double click on a field to edit it.'); ?>'); return false; };"<?php } ?>> +<input type="submit" name="edit" value="<?php echo lang('Edit'); ?>"> +<input type="submit" name="clone" value="<?php echo lang('Clone'); ?>"> +<input type="submit" name="delete" value="<?php echo lang('Delete'); ?>" onclick="return confirm('<?php echo lang('Are you sure?'); ?> (' + (this.form['all'].checked ? <?php echo $found_rows; ?> : formChecked(this, /check/)) + ')');"> +</div></fieldset> +<?php + } print_fieldset("export", lang('Export')); echo $adminer->dumpOutput(1, $adminer_export["output"]) . " " . $adminer->dumpFormat(1, $adminer_export["format"]); // 1 - select echo " <input type='submit' name='export' value='" . lang('Export') . "'>\n"; Modified: trunk/adminer/static/functions.js =================================================================== --- trunk/adminer/static/functions.js 2010-04-23 09:05:30 UTC (rev 1486) +++ trunk/adminer/static/functions.js 2010-04-23 15:26:59 UTC (rev 1487) @@ -119,3 +119,40 @@ field.parentNode.parentNode.appendChild(row); field.onchange = function () { }; } + +var selectDblClicked = false; +function selectDblClick(td, event, text) { + selectDblClicked = true; + var pos = event.rangeOffset; + var value = (td.firstChild.firstChild ? td.firstChild.firstChild.data : td.firstChild.data); + var input = document.createElement(text ? 'textarea' : 'input'); + input.name = td.id; + input.value = (value == '\u00A0' || td.getElementsByTagName('i').length ? '' : value); // or i - NULL + input.style.width = (td.clientWidth - 14) + 'px'; // 14 = 2 * (td.border + td.padding + input.border) + if (text) { + var rows = 1; + value.replace(/\n/g, function () { + rows++; + }); + input.rows = rows; + } + if (document.selection) { + var range = document.selection.createRange(); + range.moveToPoint(event.x, event.y); + var range2 = range.duplicate(); + range2.moveToElementText(td); + range2.setEndPoint('EndToEnd', range); + pos = range2.text.length; + } + td.innerHTML = ''; + td.appendChild(input); + input.focus(); + input.selectionStart = pos; + input.selectionEnd = pos; + if (document.selection) { + var range = document.selection.createRange(); + range.moveStart('character', pos); + range.select(); + } + td.ondblclick = function () { }; +} Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2010-04-23 09:05:30 UTC (rev 1486) +++ trunk/changes.txt 2010-04-23 15:26:59 UTC (rev 1487) @@ -1,7 +1,8 @@ Adminer 3.0.0-dev: Drivers for MS SQL, SQLite, PostgreSQL +Allow concurrent logins on the same server +In-place editation in select Show number of tables in server overview -Allow concurrent logins on the same server Operator LIKE %% Remember export parameters in cookie Allow semicolon as CSV separator Modified: trunk/todo.txt =================================================================== --- trunk/todo.txt 2010-04-23 09:05:30 UTC (rev 1486) +++ trunk/todo.txt 2010-04-23 15:26:59 UTC (rev 1487) @@ -1,6 +1,5 @@ Transactions in export Create view and routine options -Mass editation of individual rows Variables editation, especially timezone Optionally check IP address Disable spell checking in SQL textareas - spellcheck="false" @@ -11,10 +10,11 @@ Shift-click in checkboxes to select range Export by GET parameters Only first part of big BZ2 export is readable +Auto-refresh processlist (thanks to Jan Garaj) +Show pagination above and under the table in select ? 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, aliasing of $connection->query, $connection->result and $connection->quote can save ~ 3 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 -? AJAX editing - select page has all data to display edit form Editor: JavaScript data validation - columns containing word email, url, ... This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-23 23:52:11
|
Revision: 1491 http://adminer.svn.sourceforge.net/adminer/?rev=1491&view=rev Author: jakubvrana Date: 2010-04-23 23:52:05 +0000 (Fri, 23 Apr 2010) Log Message: ----------- BIT data type Modified Paths: -------------- trunk/adminer/drivers/mysql.inc.php trunk/todo.txt Modified: trunk/adminer/drivers/mysql.inc.php =================================================================== --- trunk/adminer/drivers/mysql.inc.php 2010-04-23 23:49:21 UTC (rev 1490) +++ trunk/adminer/drivers/mysql.inc.php 2010-04-23 23:52:05 UTC (rev 1491) @@ -759,7 +759,7 @@ lang('Numbers') => array("tinyint" => 3, "smallint" => 5, "mediumint" => 8, "int" => 10, "bigint" => 20, "decimal" => 66, "float" => 12, "double" => 21), lang('Date and time') => array("date" => 10, "datetime" => 19, "timestamp" => 19, "time" => 10, "year" => 4), lang('Strings') => array("char" => 255, "varchar" => 65535, "tinytext" => 255, "text" => 65535, "mediumtext" => 16777215, "longtext" => 4294967295), - lang('Binary') => array("binary" => 255, "varbinary" => 65535, "tinyblob" => 255, "blob" => 65535, "mediumblob" => 16777215, "longblob" => 4294967295), + lang('Binary') => array("bit" => 20, "binary" => 255, "varbinary" => 65535, "tinyblob" => 255, "blob" => 65535, "mediumblob" => 16777215, "longblob" => 4294967295), lang('Lists') => array("enum" => 65535, "set" => 64), ) as $key => $val) { $types += $val; Modified: trunk/todo.txt =================================================================== --- trunk/todo.txt 2010-04-23 23:49:21 UTC (rev 1490) +++ trunk/todo.txt 2010-04-23 23:52:05 UTC (rev 1491) @@ -1,7 +1,6 @@ Transactions in export Create view and routine options Variables editation, especially timezone -Optionally check IP address Disable spell checking in SQL textareas - spellcheck="false" Accept Tab in SQL textareas, Ctrl+Enter to send form Highlight SQL textarea, then display query inside textarea in select - may use external CodePress @@ -21,9 +20,10 @@ Joining tables - PRIMARY KEY (table, joining) Rank, Tree structure Add whisperer to fields with foreign key to big table +In-place editation of foreign keys and date MySQL: -MySQL 5 BIT data type +Saving of MySQL 5 BIT data type - don't use quote() ? Geometry support SQLite: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-25 07:26:01
|
Revision: 1493 http://adminer.svn.sourceforge.net/adminer/?rev=1493&view=rev Author: jakubvrana Date: 2010-04-25 07:25:55 +0000 (Sun, 25 Apr 2010) Log Message: ----------- Japanese translation Modified Paths: -------------- trunk/adminer/include/lang.inc.php trunk/changes.txt Added Paths: ----------- trunk/adminer/lang/ja.inc.php Modified: trunk/adminer/include/lang.inc.php =================================================================== --- trunk/adminer/include/lang.inc.php 2010-04-23 23:53:07 UTC (rev 1492) +++ trunk/adminer/include/lang.inc.php 2010-04-25 07:25:55 UTC (rev 1493) @@ -14,6 +14,7 @@ 'ru' => 'Русский язык', // Maksim Izmaylov 'zh' => '简体中文', // Mr. Lodar 'zh-tw' => '繁體中文', // http://tzangms.com + 'ja' => '日本語', // Hitoshi Ozawa - http://sourceforge.jp/projects/oss-ja-jpn/releases/ ); function lang($idf, $number = null) { Added: trunk/adminer/lang/ja.inc.php =================================================================== --- trunk/adminer/lang/ja.inc.php (rev 0) +++ trunk/adminer/lang/ja.inc.php 2010-04-25 07:25:55 UTC (rev 1493) @@ -0,0 +1,231 @@ +<?php +$translations = array( + 'Login' => 'ログイン', + 'Logout successful.' => 'ログアウト', + 'Invalid credentials.' => '不正なログイン', + 'Server' => 'サーバ', + 'Username' => 'ユーザ名', + 'Password' => 'パスワード', + 'Select database' => 'データベースを選択してください', + 'Invalid database.' => '不正なデータベース', + 'Create new database' => '新規にデータベースを作成', + 'Table has been dropped.' => 'テーブルを削除しました', + 'Table has been altered.' => 'テーブルを変更しました', + 'Table has been created.' => 'テーブルを作成しました', + 'Alter table' => 'テーブルの変更', + 'Create table' => 'テーブルを作成', + 'Table name' => 'テーブル名', + 'engine' => 'エンジン', + 'collation' => '照合順序', + 'Column name' => '列名', + 'Type' => '型', + 'Length' => '長さ', + 'Auto Increment' => '連番', + 'Options' => '設定', + 'Save' => '保存', + 'Drop' => '削除', + 'Database has been dropped.' => 'データベースを削除しました', + 'Database has been created.' => 'データベースを作成しました', + 'Database has been renamed.' => 'データベースの名前を変えました', + 'Database has been altered.' => 'データベースを変更しました', + 'Alter database' => 'データベースを変更', + 'Create database' => 'データベースを作成', + 'SQL command' => 'SQLコマンド', + 'Dump' => 'ダンプ', + 'Logout' => 'ログアウト', + 'database' => 'データベース', + 'Use' => '使用', + 'No tables.' => 'テーブルがありません没有表。', + 'select' => '選択', + 'Create new table' => 'テーブルを作成', + 'Item has been deleted.' => '項目を削除しました', + 'Item has been updated.' => '項目を更新しました', + 'Item has been inserted.' => '項目を挿入しました', + 'Edit' => '編集', + 'Insert' => '挿入', + 'Save and insert next' => '保存/追加', + 'Delete' => '削除', + 'Database' => 'データベース', + 'Routines' => 'ルーチン', + 'Indexes have been altered.' => '索引を変更しました', + 'Indexes' => '索引', + 'Alter indexes' => '索引の変更', + 'Add next' => '追加', + 'Language' => '言語', + 'Select' => '選択', + 'New item' => '項目の作成', + 'Search' => '検索', + 'Sort' => 'ソート', + 'descending' => '降順', + 'Limit' => '制約', + 'No rows.' => '行がありません', + 'Action' => '動作', + 'edit' => '編集', + 'Page' => 'ページ', + 'Query executed OK, %d row(s) affected.' => 'クエリーを実行しました。%d 行を変更しました', + 'Error in query' => 'クエリーのエラー', + 'Execute' => '実行', + 'Table' => 'テーブル', + 'Foreign keys' => '外部キー', + 'Triggers' => 'トリガー', + 'View' => 'ビュー', + 'Unable to select the table' => 'テーブルを選択できません', + 'Invalid CSRF token. Send the form again.' => '不正なCSRFトークン。再送信してください', + 'Comment' => 'コメント', + 'Default values' => '規定値', + 'Show column comments' => '列コメントを表示', + '%d byte(s)' => '%d バイト', + 'No commands to execute.' => '実行するコマンドがありません', + 'Unable to upload a file.' => 'ファイルをアップロードできません', + 'File upload' => 'ファイルをアップロード', + 'File uploads are disabled.' => 'ファイルのアップロードが無効です', + 'Routine has been called, %d row(s) affected.' => 'ルーチンを呼びました。%d 行を変更しました', + 'Call' => '呼出し', + 'No extension' => '拡張機能がありません', + 'None of the supported PHP extensions (%s) are available.' => 'PHPの拡張機能(%s)がセットアップされていません', + 'Session support must be enabled.' => 'セッションを有効にしてください', + 'Session expired, please login again.' => 'セッションの期限切れ。ログインし直してください', + 'Text length' => '文字列の長さ', + 'Foreign key has been dropped.' => '外部キーを削除しました', + 'Foreign key has been altered.' => '外部キーを変更しました', + 'Foreign key has been created.' => '外部キーを作成しました', + 'Foreign key' => '外キー', + 'Target table' => 'テーブル', + 'Change' => '変更', + 'Source' => 'ソース', + 'Target' => 'ターゲット', + 'Add column' => '列を追加', + 'Alter' => '変更', + 'Add foreign key' => '外部キーを追加', + 'ON DELETE' => 'ON DELETE', + 'ON UPDATE' => 'ON UPDATE', + 'Index Type' => '索引の型', + 'Column (length)' => '列(長さ)', + 'View has been dropped.' => 'ビューを削除しました', + 'View has been altered.' => 'ビューを変更しました', + 'View has been created.' => 'ビューを作成しました', + 'Alter view' => 'ビューを変更', + 'Create view' => 'ビューを作成', + 'Name' => '名称', + 'Process list' => 'プロセス一覧', + '%d process(es) have been killed.' => '%d プロセスを強制終了しました', + 'Kill' => '強制終了', + 'Parameter name' => '参数名', + 'Database schema' => '数据?概要', + 'Create procedure' => 'プロシージャの作成', + 'Create function' => '関数の作成', + 'Routine has been dropped.' => 'ルーチンを作成', + 'Routine has been altered.' => 'ルーチンを変更', + 'Routine has been created.' => 'ルーチンを作成', + 'Alter function' => '関数の変更', + 'Alter procedure' => 'プロシージャの変更', + 'Return type' => '戻り値の型', + 'Add trigger' => 'トリガーの追加', + 'Trigger has been dropped.' => 'トリガーを削除しました', + 'Trigger has been altered.' => 'トリガーを変更しました', + 'Trigger has been created.' => 'トリガーを追加しました', + 'Alter trigger' => 'トリガーの変更', + 'Create trigger' => 'トリガーの作成', + 'Time' => '時間', + 'Event' => 'イベント', + '%s version: %s through PHP extension %s' => '%sバージョン:%s、 PHP拡張機能 %s', + '%d row(s)' => '%d 行', + 'Remove' => '移除', + 'Are you sure?' => '実行しますか?', + 'Privileges' => '権限', + 'Create user' => 'ユーザを作成', + 'User has been dropped.' => 'ユーザを削除', + 'User has been altered.' => 'ユーザを変更', + 'User has been created.' => 'ユーザを作成', + 'Hashed' => 'Hashed', + 'Column' => '列', + 'Routine' => 'ルーチン', + 'Grant' => '権限の付与', + 'Revoke' => '権限の取消し', + 'Logged as: %s' => 'ログ:%s', + 'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POSTデータが大きすぎます。データサイズを小さくするか %s 設定を大きくしてください', + 'Move up' => '上', + 'Move down' => '下', + 'Export' => 'エクスポート', + 'Tables' => 'テーブル', + 'Data' => 'データ', + 'Output' => '出力', + 'open' => '開く', + 'save' => '保存', + 'Format' => '形式', + 'Functions' => '関数', + 'Aggregation' => '集合', + 'Event has been dropped.' => '削除しました', + 'Event has been altered.' => '変更しました', + 'Event has been created.' => '作成しました', + 'Alter event' => '変更', + 'Create event' => '作成', + 'Start' => '開始', + 'End' => '終了', + 'Every' => '毎回', + 'Status' => '状態', + 'On completion preserve' => '完成後に保存', + 'Events' => 'イベント', + 'Schedule' => 'スケジュール', + 'At given time' => '指定時刻', + 'Tables have been truncated.' => 'テーブルをtruncateしました', + 'Tables have been moved.' => 'テーブルを移動しました', + 'Tables and views' => 'テーブルとビュー', + 'Engine' => 'エンジン', + 'Collation' => '照合順序', + 'Data Length' => 'データ長', + 'Index Length' => '索引長', + 'Data Free' => '空き', + 'Rows' => '行数', + ',' => ',', + 'Analyze' => '分析', + 'Optimize' => '最適化', + 'Check' => 'チェック', + 'Repair' => '修復', + 'Truncate' => 'Truncate', + 'Move to other database' => '別のデータベースへ移動?', + 'Move' => '移動', + 'Save and continue edit' => '保存して継続', + 'original' => '元', + '%d item(s) have been affected.' => '%d を更新しました', + 'whole result' => '全結果', + 'Tables have been dropped.' => 'テーブルを削除しました', + 'Clone' => 'クローン', + 'Maximum number of allowed fields exceeded. Please increase %s and %s.' => '定義可能な最大フィールド数を越えました。%s と %s を増やしてください。', + 'Partition by' => 'パーティション', + 'Partitions' => 'パーティション', + 'Partition name' => 'パーティション名', + 'Values' => '値', + '%d row(s) have been imported.' => '%d 行をインポートしました', + 'Show structure' => '構造', + 'anywhere' => '任意', + 'CSV Import' => 'CSV インポート', + 'Import' => 'インポート', + 'Stop on error' => 'エラーの場合は停止', + 'Select data' => 'データ', + '%.3f s' => '%.3f 秒', + '$1-$3-$5' => '$1.$3.$5', + '[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.' => 'ソースとターゲットの列は同じデータ型でなければなりません。ターゲット列に索引があり、データが存在しなければなりません。', + 'Relations' => '関係', + 'Run file' => 'ファイルを実行', + 'Clear' => '消去', + 'Maximum allowed file size is %sB.' => '最大ファイルサイズ %sB', + 'Numbers' => '数字', + 'Date and time' => '日時', + 'Strings' => '文字列', + 'Binary' => 'バイナリ', + 'Lists' => 'リスト', + 'Editor' => 'エディタ', + 'E-mail' => 'メール', + 'From' => '差出人', + 'Subject' => '題名', + 'Send' => '送信', + '%d e-mail(s) have been sent.' => '%d メールを送信しました', + 'Webserver file %s' => 'Webサーバファイル %s', + 'File does not exist.' => 'ファイルは存在しません', + '%d in total' => '合計 %d', + 'Permanent login' => '永続的にログイン', +); Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2010-04-23 23:53:07 UTC (rev 1492) +++ trunk/changes.txt 2010-04-25 07:25:55 UTC (rev 1493) @@ -6,6 +6,7 @@ Operator LIKE %% Remember export parameters in cookie Allow semicolon as CSV separator +Japanese translation Defer table information in database overview to JavaScript (performance) Big tables optimizations (performance) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-26 16:35:10
|
Revision: 1498 http://adminer.svn.sourceforge.net/adminer/?rev=1498&view=rev Author: jakubvrana Date: 2010-04-26 16:22:24 +0000 (Mon, 26 Apr 2010) Log Message: ----------- Disable spell checking in SQL textareas Modified Paths: -------------- trunk/adminer/event.inc.php trunk/adminer/include/functions.inc.php trunk/adminer/procedure.inc.php trunk/adminer/sql.inc.php trunk/adminer/trigger.inc.php trunk/adminer/view.inc.php trunk/changes.txt trunk/todo.txt Modified: trunk/adminer/event.inc.php =================================================================== --- trunk/adminer/event.inc.php 2010-04-26 16:21:28 UTC (rev 1497) +++ trunk/adminer/event.inc.php 2010-04-26 16:22:24 UTC (rev 1498) @@ -45,7 +45,7 @@ <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> -<p><textarea name="EVENT_DEFINITION" rows="10" cols="80" style="width: 98%;"><?php echo h($row["EVENT_DEFINITION"]); ?></textarea> +<p><?php textarea("EVENT_DEFINITION", $row["EVENT_DEFINITION"]); ?> <p> <input type="hidden" name="token" value="<?php echo $token; ?>"> <input type="submit" value="<?php echo lang('Save'); ?>"> Modified: trunk/adminer/include/functions.inc.php =================================================================== --- trunk/adminer/include/functions.inc.php 2010-04-26 16:21:28 UTC (rev 1497) +++ trunk/adminer/include/functions.inc.php 2010-04-26 16:22:24 UTC (rev 1498) @@ -116,6 +116,21 @@ return $return; } +/** Print SQL <textarea> tag +* @param string +* @param int +* @param int +* @param string +* @return null +*/ +function textarea($name, $value, $rows = 10, $cols = 80) { + echo "<textarea name='$name' rows='$rows' cols='$cols' style='width: 98%;' spellcheck='false'>" . h($value) . "</textarea>"; // spellcheck - not valid before HTML5 +} + + + +// other functions + /** Get INI boolean value * @param string * @return bool Modified: trunk/adminer/procedure.inc.php =================================================================== --- trunk/adminer/procedure.inc.php 2010-04-26 16:21:28 UTC (rev 1497) +++ trunk/adminer/procedure.inc.php 2010-04-26 16:22:24 UTC (rev 1498) @@ -48,7 +48,7 @@ } ?> </table> -<p><textarea name="definition" rows="10" cols="80" style="width: 98%;"><?php echo h($row["definition"]); ?></textarea> +<p><?php textarea("definition", $row["definition"]); ?> <p> <input type="hidden" name="token" value="<?php echo $token; ?>"> <?php if ($dropped) { ?><input type="hidden" name="dropped" value="1"><?php } ?> Modified: trunk/adminer/sql.inc.php =================================================================== --- trunk/adminer/sql.inc.php 2010-04-26 16:21:28 UTC (rev 1497) +++ trunk/adminer/sql.inc.php 2010-04-26 16:22:24 UTC (rev 1498) @@ -129,15 +129,15 @@ ?> <form action="" method="post" enctype="multipart/form-data"> -<p><textarea name="query" rows="20" cols="80" style="width: 98%;"><?php +<p><?php $q = $_GET["sql"]; // overwrite $q from if ($_POST) to save memory if ($_POST) { $q = $_POST["query"]; } elseif ($_GET["history"] != "") { $q = $history[$_GET["history"]]; } -echo h($q); -?></textarea> +textarea("query", $q, 20); +?> <p> <input type="hidden" name="token" value="<?php echo $token; ?>"> <input type="submit" value="<?php echo lang('Execute'); ?>"> Modified: trunk/adminer/trigger.inc.php =================================================================== --- trunk/adminer/trigger.inc.php 2010-04-26 16:21:28 UTC (rev 1497) +++ trunk/adminer/trigger.inc.php 2010-04-26 16:22:24 UTC (rev 1498) @@ -34,7 +34,7 @@ <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('Type'); ?><td><?php echo html_select("Type", $trigger_options["Type"], $row["Type"]); ?> </table> -<p><textarea name="Statement" rows="10" cols="80" style="width: 98%;"><?php echo h($row["Statement"]); ?></textarea> +<p><?php textarea("Statement", $row["Statement"]); ?> <p> <input type="hidden" name="token" value="<?php echo $token; ?>"> <?php if ($dropped) { ?><input type="hidden" name="dropped" value="1"><?php } ?> Modified: trunk/adminer/view.inc.php =================================================================== --- trunk/adminer/view.inc.php 2010-04-26 16:21:28 UTC (rev 1497) +++ trunk/adminer/view.inc.php 2010-04-26 16:22:24 UTC (rev 1498) @@ -25,7 +25,7 @@ ?> <form action="" method="post"> -<p><textarea name="select" rows="10" cols="80" style="width: 98%;"><?php echo h($row["select"]); ?></textarea> +<p><?php textarea("select", $row["select"]); ?> <p> <input type="hidden" name="token" value="<?php echo $token; ?>"> <?php if ($dropped) { // old view was dropped but new wasn't created ?><input type="hidden" name="dropped" value="1"><?php } ?> Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2010-04-26 16:21:28 UTC (rev 1497) +++ trunk/changes.txt 2010-04-26 16:22:24 UTC (rev 1498) @@ -6,6 +6,8 @@ Operator LIKE %% Remember export parameters in cookie Allow semicolon as CSV separator +Autofocus username in login form +Disable spellchecking in SQL textareas Japanese translation Defer table information in database overview to JavaScript (performance) Big tables optimizations (performance) Modified: trunk/todo.txt =================================================================== --- trunk/todo.txt 2010-04-26 16:21:28 UTC (rev 1497) +++ trunk/todo.txt 2010-04-26 16:22:24 UTC (rev 1498) @@ -1,7 +1,6 @@ Transactions in export Create view and routine options Variables editation, especially timezone -Disable spell checking in SQL textareas - spellcheck="false" Accept Tab in SQL textareas, Ctrl+Enter to send form Highlight SQL textarea, then display query inside textarea in select - may use external CodePress Blob download and image display in edit form (important for Editor with hidden fields in select) @@ -11,6 +10,7 @@ Only first part of big BZ2 export is readable Auto-refresh processlist (thanks to Jan Garaj) Show pagination above and under the table in select +? Filter by value in row under <thead> in select ? 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, aliasing of $connection->query, $connection->result and $connection->quote can save ~ 3 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 @@ -30,6 +30,7 @@ CSV import - ON DUPLICATE KEY UPDATE Export - triggers, CREATE DATABASE Delimiter in export and SQL command +Backward keys in Editor PostgreSQL: Users - SELECT * FROM pg_user This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-04-26 16:35:13
|
Revision: 1497 http://adminer.svn.sourceforge.net/adminer/?rev=1497&view=rev Author: jakubvrana Date: 2010-04-26 16:21:28 +0000 (Mon, 26 Apr 2010) Log Message: ----------- Auto-focus user-name in login form 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 2010-04-26 16:20:39 UTC (rev 1496) +++ trunk/adminer/include/adminer.inc.php 2010-04-26 16:21:28 UTC (rev 1497) @@ -41,9 +41,12 @@ <table cellspacing="0"> <tr><th><?php echo lang('System'); ?><td><?php echo (count($possible_drivers) > 3 ? html_select("driver", $drivers, DRIVER) : "<input type='hidden' name='driver' value='" . key($drivers) . "'>" . reset($drivers)); ?></tr> <tr><th><?php echo lang('Server'); ?><td><input name="server" value="<?php echo h(SERVER); ?>"> -<tr><th><?php echo lang('Username'); ?><td><input name="username" value="<?php echo h($_GET["username"]); ?>"> +<tr><th><?php echo lang('Username'); ?><td><input id="username" name="username" value="<?php echo h($_GET["username"]); ?>"> <tr><th><?php echo lang('Password'); ?><td><input type="password" name="password"> </table> +<script type="text/javascript"> +document.getElementById('username').focus(); +</script> <?php echo "<p><input type='submit' value='" . lang('Login') . "'>\n"; if ($this->permanentLogin()) { Modified: trunk/editor/include/adminer.inc.php =================================================================== --- trunk/editor/include/adminer.inc.php 2010-04-26 16:20:39 UTC (rev 1496) +++ trunk/editor/include/adminer.inc.php 2010-04-26 16:21:28 UTC (rev 1497) @@ -29,9 +29,12 @@ function loginForm() { ?> <table cellspacing="0"> -<tr><th><?php echo lang('Username'); ?><td><input type="hidden" name="driver" value="server"><input type="hidden" name="server" value=""><input name="username" value="<?php echo h($_GET["username"]); ?>"> +<tr><th><?php echo lang('Username'); ?><td><input type="hidden" name="driver" value="server"><input type="hidden" name="server" value=""><input id="username" name="username" value="<?php echo h($_GET["username"]); ?>"> <tr><th><?php echo lang('Password'); ?><td><input type="password" name="password"> </table> +<script type="text/javascript"> +document.getElementById('username').focus(); +</script> <?php echo "<p><input type='submit' value='" . lang('Login') . "'>\n"; if ($this->permanentLogin()) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-05-02 21:37:15
|
Revision: 1510 http://adminer.svn.sourceforge.net/adminer/?rev=1510&view=rev Author: jakubvrana Date: 2010-05-02 21:37:05 +0000 (Sun, 02 May 2010) Log Message: ----------- Link table names in SQL queries Modified Paths: -------------- trunk/adminer/include/adminer.inc.php trunk/adminer/static/editing.js trunk/changes.txt Modified: trunk/adminer/include/adminer.inc.php =================================================================== --- trunk/adminer/include/adminer.inc.php 2010-04-30 21:31:44 UTC (rev 1509) +++ trunk/adminer/include/adminer.inc.php 2010-05-02 21:37:05 UTC (rev 1510) @@ -483,7 +483,7 @@ * @return null */ function navigation($missing) { - global $VERSION, $connection, $token; + global $VERSION, $connection, $token, $driver; ?> <h1> <a href="http://www.adminer.org/" id="h1"><?php echo $this->name(); ?></a> @@ -519,6 +519,17 @@ echo "<p class='message'>" . lang('No tables.') . "\n"; } else { $this->tablesPrint($tables); + $links = array(); + foreach ($tables as $table => $type) { + $links[] = preg_quote($table, '/'); + } + echo "<script type='text/javascript'>\n"; + echo "var jushLinks = { $driver: [ '" . addcslashes(h(ME), "\\'/") . "table=\$&', /\\b(" . implode("|", $links) . ")\\b/g ] };\n"; + echo "jushLinks.bac = jushLinks.$driver;\n"; + echo "jushLinks.bra = jushLinks.$driver;\n"; + echo "jushLinks.mssql_bra = jushLinks.$driver;\n"; + echo "jushLinks.sqlite_quo = jushLinks.$driver;\n"; + echo "</script>\n"; } echo '<p><a href="' . h(ME) . 'create=">' . bold(lang('Create new table'), $_GET["create"] === "") . "</a>\n"; } Modified: trunk/adminer/static/editing.js =================================================================== --- trunk/adminer/static/editing.js 2010-04-30 21:31:44 UTC (rev 1509) +++ trunk/adminer/static/editing.js 2010-05-02 21:37:05 UTC (rev 1510) @@ -15,6 +15,9 @@ jush.urls.sqlset[0] = jush.urls.sql[0]; jush.urls.sqlstatus[0] = jush.urls.sql[0]; jush.style(jushRoot + 'jush.css'); + if (window.jushLinks) { + jush.custom_links = jushLinks; + } jush.highlight_tag('pre', 0); jush.highlight_tag('code'); } Modified: trunk/changes.txt =================================================================== --- trunk/changes.txt 2010-04-30 21:31:44 UTC (rev 1509) +++ trunk/changes.txt 2010-05-02 21:37:05 UTC (rev 1510) @@ -9,6 +9,7 @@ Autofocus username in login form Disable spellchecking in SQL textareas Japanese translation +Link table names in SQL queries Defer table information in database overview to JavaScript (performance) Big tables optimizations (performance) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-05-05 16:28:43
|
Revision: 1519 http://adminer.svn.sourceforge.net/adminer/?rev=1519&view=rev Author: jakubvrana Date: 2010-05-05 16:28:37 +0000 (Wed, 05 May 2010) Log Message: ----------- Driver specific trigger export Modified Paths: -------------- trunk/adminer/drivers/mysql.inc.php trunk/adminer/drivers/sqlite.inc.php trunk/adminer/dump.inc.php trunk/adminer/include/export.inc.php trunk/todo.txt Modified: trunk/adminer/drivers/mysql.inc.php =================================================================== --- trunk/adminer/drivers/mysql.inc.php 2010-05-05 16:27:39 UTC (rev 1518) +++ trunk/adminer/drivers/mysql.inc.php 2010-05-05 16:28:37 UTC (rev 1519) @@ -770,6 +770,24 @@ return "USE " . idf_escape($database); } + /** Get SQL commands to create triggers + * @param string + * @param string + * @return string + */ + function trigger_sql($table, $style) { + global $connection; + $result = $connection->query("SHOW TRIGGERS LIKE " . $connection->quote(addcslashes($table, "%_"))); + $return = ""; + if ($result->num_rows) { + while ($row = $result->fetch_assoc()) { + $return .= "\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"; + } + } + return $return; + } + /** Get server variables * @return array ($name => $value) */ Modified: trunk/adminer/drivers/sqlite.inc.php =================================================================== --- trunk/adminer/drivers/sqlite.inc.php 2010-05-05 16:27:39 UTC (rev 1518) +++ trunk/adminer/drivers/sqlite.inc.php 2010-05-05 16:28:37 UTC (rev 1519) @@ -498,7 +498,7 @@ function create_sql($table) { global $connection; - return $connection->result("SELECT sql FROM sqlite_master WHERE name = " . $connection->quote($table)); + return $connection->result("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = " . $connection->quote($table)); } function use_sql($database) { @@ -506,6 +506,11 @@ return "ATTACH " . $connection->quote($database) . " AS " . idf_escape($database); } + function trigger_sql($table, $style) { + global $connection; + return implode("", get_vals("SELECT sql || ';;\n' FROM sqlite_master WHERE type = 'trigger' AND name = " . $connection->quote($table))); + } + function show_variables() { global $connection; $return = array(); Modified: trunk/adminer/dump.inc.php =================================================================== --- trunk/adminer/dump.inc.php 2010-05-05 16:27:39 UTC (rev 1518) +++ trunk/adminer/dump.inc.php 2010-05-05 16:28:37 UTC (rev 1519) @@ -80,8 +80,11 @@ if ($data) { dump_data($row["Name"], $_POST["data_style"]); } - if ($_POST["triggers"]) { - dump_triggers($row["Name"], $_POST["table_style"]); + if ($_POST["format"] == "sql" && $_POST["triggers"]) { + $triggers = trigger_sql($row["Name"], $_POST["table_style"]); + if ($triggers) { + echo "\nDELIMITER ;;\n$triggers\nDELIMITER ;\n"; + } } if ($ext == "tar") { echo tar_file((DB != "" ? "" : "$db/") . "$row[Name].csv", ob_get_clean()); Modified: trunk/adminer/include/export.inc.php =================================================================== --- trunk/adminer/include/export.inc.php 2010-05-05 16:27:39 UTC (rev 1518) +++ trunk/adminer/include/export.inc.php 2010-05-05 16:28:37 UTC (rev 1519) @@ -9,21 +9,6 @@ return $return . str_repeat("\0", 512 - strlen($return)) . $contents . str_repeat("\0", 511 - (strlen($contents) + 511) % 512); } -function dump_triggers($table, $style) { - global $connection; - if ($_POST["format"] == "sql" && $style && support("trigger")) { - $result = $connection->query("SHOW TRIGGERS LIKE " . $connection->quote(addcslashes($table, "%_"))); - if ($result->num_rows) { - $s = "\nDELIMITER ;;\n"; - while ($row = $result->fetch_assoc()) { - $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"; - } - echo "$s\nDELIMITER ;\n"; - } - } -} - function dump_table($table, $style, $is_view = false) { global $connection; if ($_POST["format"] != "sql") { Modified: trunk/todo.txt =================================================================== --- trunk/todo.txt 2010-05-05 16:27:39 UTC (rev 1518) +++ trunk/todo.txt 2010-05-05 16:28:37 UTC (rev 1519) @@ -28,7 +28,7 @@ SQLite: CSV import - ON DUPLICATE KEY UPDATE -Export - triggers, CREATE DATABASE +Export - CREATE DATABASE Delimiter in export and SQL command Backward keys in Editor This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |