mirror of
https://github.com/vrana/adminer.git
synced 2025-08-30 17:50:00 +02:00
Compare commits
120 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
514ff41c7c | ||
|
dafd2deef2 | ||
|
6a96c14948 | ||
|
091a4d04f4 | ||
|
a71b99096c | ||
|
a833468c0a | ||
|
54f464a893 | ||
|
7de0b21e16 | ||
|
b78b0cd109 | ||
|
f158d5e392 | ||
|
5b57706890 | ||
|
0d5543c9ac | ||
|
7363429b52 | ||
|
6ca4082e6c | ||
|
8daf581c21 | ||
|
eb05475337 | ||
|
b2f5f5689d | ||
|
a1e4e87b82 | ||
|
97566acd75 | ||
|
4a6c72cd1c | ||
|
7f1fcc2286 | ||
|
a2378af008 | ||
|
56ac3d1817 | ||
|
739bcb0979 | ||
|
b0666e537d | ||
|
8339b14da3 | ||
|
5dc90731eb | ||
|
f498219f29 | ||
|
2db14e4bc2 | ||
|
8be29afb9b | ||
|
f595f9313e | ||
|
6591d485e9 | ||
|
40ad846d20 | ||
|
c4a57246ac | ||
|
20cf6d29c5 | ||
|
17ef1f0dfc | ||
|
5ac72dd739 | ||
|
06595f90e4 | ||
|
4f3fddc870 | ||
|
336a32c144 | ||
|
0e31b09543 | ||
|
20e11be093 | ||
|
d6c5f85a24 | ||
|
a280179bd5 | ||
|
7f1afde592 | ||
|
70fb696fbd | ||
|
b16bb54219 | ||
|
9188d21ea3 | ||
|
3ada73d5ed | ||
|
047ce184f5 | ||
|
4815c7d020 | ||
|
bf54c13dfe | ||
|
48df7aa1c9 | ||
|
77ec05d50b | ||
|
4dc3ec6a0d | ||
|
24c51fe11f | ||
|
b254503fb2 | ||
|
ea0a6a5a01 | ||
|
e36afcc127 | ||
|
bf4f0a1f9e | ||
|
a6f10787bb | ||
|
cc1398e5a4 | ||
|
00b3bc3f2c | ||
|
a186460648 | ||
|
2d942e692d | ||
|
2dcfb70d08 | ||
|
405ad5f07e | ||
|
b959ba41c6 | ||
|
22125790b3 | ||
|
f539836fd5 | ||
|
2ca26386c2 | ||
|
4cc29e0137 | ||
|
a25fa67e06 | ||
|
99a75c3c44 | ||
|
83113cbe67 | ||
|
d35f83fb8d | ||
|
7f2e97f0d2 | ||
|
c6c48553b8 | ||
|
27c046f753 | ||
|
9e7fcdf32c | ||
|
c7f1a6322e | ||
|
640afc74d7 | ||
|
6bcbb0f1d8 | ||
|
41e197ac06 | ||
|
9fd2880968 | ||
|
70994abcbd | ||
|
7e97fcd0b9 | ||
|
bbbf4eeb79 | ||
|
3c5c08e793 | ||
|
27b5e46a45 | ||
|
af3b762067 | ||
|
1e70b74f4c | ||
|
543e172513 | ||
|
841cbbb7d2 | ||
|
fd7e8cbaae | ||
|
468644e2d8 | ||
|
319abbaf2f | ||
|
b848764299 | ||
|
ed25431f3c | ||
|
6b3e3c2532 | ||
|
0e0b79b815 | ||
|
998e2f5027 | ||
|
ef867e6bd1 | ||
|
bed3856f2d | ||
|
3ed7f453bc | ||
|
dd85aa5d6a | ||
|
c456f52d9f | ||
|
9d34071eb9 | ||
|
db3ae281bb | ||
|
de056d41c2 | ||
|
0f1c2c217b | ||
|
ce0d001e8b | ||
|
3a333e92ff | ||
|
9d944c8fc1 | ||
|
2348c4cd4c | ||
|
e6843dfbc1 | ||
|
2dd39c6df5 | ||
|
a4c2b4a7cb | ||
|
daf60b29f8 | ||
|
a88dccb961 |
9
.gitmodules
vendored
9
.gitmodules
vendored
@@ -1,9 +1,6 @@
|
||||
[submodule "jush"]
|
||||
path = externals/jush
|
||||
url = git://jush.git.sourceforge.net/gitroot/jush/jush
|
||||
[submodule "jsmin-php"]
|
||||
path = externals/jsmin-php
|
||||
url = git://github.com/rgrove/jsmin-php.git
|
||||
[submodule "tinymce"]
|
||||
path = externals/tinymce
|
||||
url = git://github.com/tinymce/tinymce.git
|
||||
@@ -16,3 +13,9 @@
|
||||
[submodule "wymeditor"]
|
||||
path = externals/wymeditor
|
||||
url = git://github.com/wymeditor/wymeditor.git
|
||||
[submodule "JsShrink"]
|
||||
path = externals/JsShrink
|
||||
url = git://github.com/vrana/JsShrink.git
|
||||
[submodule "CodeMirror2"]
|
||||
path = externals/CodeMirror2
|
||||
url = git://github.com/marijnh/CodeMirror2.git
|
||||
|
@@ -29,7 +29,7 @@ if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"] && !$_POST["up"]
|
||||
$after = "FIRST";
|
||||
foreach ($_POST["fields"] as $key => $field) {
|
||||
$foreign_key = $foreign_keys[$field["type"]];
|
||||
$type_field = (isset($foreign_key) ? $referencable_primary[$foreign_key] : $field); //! can collide with user defined type
|
||||
$type_field = ($foreign_key !== null ? $referencable_primary[$foreign_key] : $field); //! can collide with user defined type
|
||||
if ($field["field"] != "") {
|
||||
if (!$field["has_default"]) {
|
||||
$field["default"] = null;
|
||||
@@ -46,7 +46,7 @@ if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"] && !$_POST["up"]
|
||||
if ($process_field != process_field($orig_field, $orig_field)) {
|
||||
$fields[] = array($field["orig"], $process_field, $after);
|
||||
}
|
||||
if (isset($foreign_key)) {
|
||||
if ($foreign_key !== null) {
|
||||
$foreign[idf_escape($field["field"])] = ($TABLE != "" ? "ADD" : " ") . " FOREIGN KEY (" . idf_escape($field["field"]) . ") REFERENCES " . table($foreign_keys[$field["type"]]) . " (" . idf_escape($type_field["field"]) . ")" . (ereg("^($on_actions)\$", $field["on_delete"]) ? " ON DELETE $field[on_delete]" : "");
|
||||
}
|
||||
$after = "AFTER " . idf_escape($field["field"]);
|
||||
@@ -78,9 +78,10 @@ if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"] && !$_POST["up"]
|
||||
cookie("adminer_engine", $_POST["Engine"]);
|
||||
$message = lang('Table has been created.');
|
||||
}
|
||||
queries_redirect(ME . "table=" . urlencode($_POST["name"]), $message, alter_table(
|
||||
$name = trim($_POST["name"]);
|
||||
queries_redirect(ME . "table=" . urlencode($name), $message, alter_table(
|
||||
$TABLE,
|
||||
$_POST["name"],
|
||||
$name,
|
||||
$fields,
|
||||
$foreign,
|
||||
$_POST["Comment"],
|
||||
|
@@ -1,16 +1,17 @@
|
||||
<?php
|
||||
if ($_POST && !$error && !isset($_POST["add_x"])) { // add is an image and PHP changes add.x to add_x
|
||||
restart_session();
|
||||
$name = trim($_POST["name"]);
|
||||
if ($_POST["drop"]) {
|
||||
$_GET["db"] = ""; // to save in global history
|
||||
queries_redirect(remove_from_uri("db|database"), lang('Database has been dropped.'), drop_databases(array(DB)));
|
||||
} elseif (DB !== $_POST["name"]) {
|
||||
} elseif (DB !== $name) {
|
||||
// create or rename database
|
||||
if (DB != "") {
|
||||
$_GET["db"] = $_POST["name"];
|
||||
queries_redirect(preg_replace('~db=[^&]*&~', '', ME) . "db=" . urlencode($_POST["name"]), lang('Database has been renamed.'), rename_database($_POST["name"], $_POST["collation"]));
|
||||
$_GET["db"] = $name;
|
||||
queries_redirect(preg_replace('~db=[^&]*&~', '', ME) . "db=" . urlencode($name), lang('Database has been renamed.'), rename_database($name, $_POST["collation"]));
|
||||
} else {
|
||||
$databases = explode("\n", str_replace("\r", "", $_POST["name"]));
|
||||
$databases = explode("\n", str_replace("\r", "", $name));
|
||||
$success = true;
|
||||
$last = "";
|
||||
foreach ($databases as $db) {
|
||||
@@ -28,7 +29,7 @@ if ($_POST && !$error && !isset($_POST["add_x"])) { // add is an image and PHP c
|
||||
if (!$_POST["collation"]) {
|
||||
redirect(substr(ME, 0, -1));
|
||||
}
|
||||
query_redirect("ALTER DATABASE " . idf_escape($_POST["name"]) . (eregi('^[a-z0-9_]+$', $_POST["collation"]) ? " COLLATE $_POST[collation]" : ""), substr(ME, 0, -1), lang('Database has been altered.'));
|
||||
query_redirect("ALTER DATABASE " . idf_escape($name) . (eregi('^[a-z0-9_]+$', $_POST["collation"]) ? " COLLATE $_POST[collation]" : ""), substr(ME, 0, -1), lang('Database has been altered.'));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -26,6 +26,12 @@ if ($tables_views && !$error && !$_POST["search"]) {
|
||||
$result = drop_tables($_POST["tables"]);
|
||||
}
|
||||
$message = lang('Tables have been dropped.');
|
||||
} elseif ($jush != "sql") {
|
||||
$result = ($jush == "sqlite"
|
||||
? queries("VACUUM")
|
||||
: apply_queries("VACUUM" . ($_POST["optimize"] ? "" : " ANALYZE"), $_POST["tables"])
|
||||
);
|
||||
$message = lang('Tables have been optimized.');
|
||||
} elseif ($_POST["tables"] && ($result = queries(($_POST["optimize"] ? "OPTIMIZE" : ($_POST["check"] ? "CHECK" : ($_POST["repair"] ? "REPAIR" : "ANALYZE"))) . " TABLE " . implode(", ", array_map('idf_escape', $_POST["tables"]))))) {
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
$message .= "<b>" . h($row["Table"]) . "</b>: " . h($row["Msg_text"]) . "<br>";
|
||||
@@ -61,7 +67,7 @@ if ($adminer->homepage()) {
|
||||
echo (support("comment") ? '<td>' . lang('Comment') : '');
|
||||
echo "</thead>\n";
|
||||
foreach ($tables_list as $name => $type) {
|
||||
$view = (isset($type) && !eregi("table", $type));
|
||||
$view = ($type !== null && !eregi("table", $type));
|
||||
echo '<tr' . odd() . '><td>' . checkbox(($view ? "views[]" : "tables[]"), $name, in_array($name, $tables_views, true), "", "formUncheck('check-all');");
|
||||
echo '<th><a href="' . h(ME) . 'table=' . urlencode($name) . '" title="' . lang('Show structure') . '">' . h($name) . '</a>';
|
||||
if ($view) {
|
||||
@@ -91,14 +97,17 @@ if ($adminer->homepage()) {
|
||||
echo "</table>\n";
|
||||
echo "<script type='text/javascript'>tableCheck();</script>\n";
|
||||
if (!information_schema(DB)) {
|
||||
echo "<p>" . ($jush == "sql" ? "<input type='submit' value='" . lang('Analyze') . "'> <input type='submit' name='optimize' value='" . lang('Optimize') . "'> <input type='submit' name='check' value='" . lang('Check') . "'> <input type='submit' name='repair' value='" . lang('Repair') . "'> " : "") . "<input type='submit' name='truncate' value='" . lang('Truncate') . "'" . confirm("formChecked(this, /tables/)") . "> <input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm("formChecked(this, /tables|views/)", 1) . ">\n"; // 1 - eventStop
|
||||
$databases = (support("scheme") ? schemas() : get_databases());
|
||||
echo "<p>" . (ereg('^(sql|sqlite|pgsql)$', $jush)
|
||||
? ($jush != "sqlite" ? "<input type='submit' value='" . lang('Analyze') . "'> " : "")
|
||||
. "<input type='submit' name='optimize' value='" . lang('Optimize') . "'> " : ""
|
||||
) . ($jush == "sql" ? "<input type='submit' name='check' value='" . lang('Check') . "'> <input type='submit' name='repair' value='" . lang('Repair') . "'> " : "") . "<input type='submit' name='truncate' value='" . lang('Truncate') . "'" . confirm("formChecked(this, /tables/)") . "> <input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm("formChecked(this, /tables|views/)") . ">\n";
|
||||
$databases = (support("scheme") ? schemas() : $adminer->databases());
|
||||
if (count($databases) != 1 && $jush != "sqlite") {
|
||||
$db = (isset($_POST["target"]) ? $_POST["target"] : (support("scheme") ? $_GET["ns"] : DB));
|
||||
echo "<p>" . lang('Move to other database') . ": ";
|
||||
echo ($databases ? html_select("target", $databases, $db) : '<input name="target" value="' . h($db) . '">');
|
||||
echo " <input type='submit' name='move' value='" . lang('Move') . "' onclick='eventStop(event);'>";
|
||||
echo (support("copy") ? " <input type='submit' name='copy' value='" . lang('Copy') . "' onclick='eventStop(event);'>" : "");
|
||||
echo " <input type='submit' name='move' value='" . lang('Move') . "'>";
|
||||
echo (support("copy") ? " <input type='submit' name='copy' value='" . lang('Copy') . "'>" : "");
|
||||
echo "\n";
|
||||
}
|
||||
echo "<input type='hidden' name='token' value='$token'>\n";
|
||||
@@ -173,6 +182,10 @@ if ($adminer->homepage()) {
|
||||
echo "<td>$row[Ends]";
|
||||
}
|
||||
echo "</table>\n";
|
||||
$event_scheduler = $connection->result("SELECT @@event_scheduler");
|
||||
if ($event_scheduler && $event_scheduler != "ON") {
|
||||
echo "<p class='error'><code class='jush-sqlset'>event_scheduler</code>: " . h($event_scheduler) . "\n";
|
||||
}
|
||||
}
|
||||
echo '<p><a href="' . h(ME) . 'event=">' . lang('Create event') . "</a>\n";
|
||||
}
|
||||
|
@@ -23,7 +23,7 @@ if (isset($_GET["mssql"])) {
|
||||
}
|
||||
|
||||
function connect($server, $username, $password) {
|
||||
$this->_link = @sqlsrv_connect($server, array("UID" => $username, "PWD" => $password));
|
||||
$this->_link = @sqlsrv_connect($server, array("UID" => $username, "PWD" => $password, "CharacterSet" => "UTF-8"));
|
||||
if ($this->_link) {
|
||||
$info = sqlsrv_server_info($this->_link);
|
||||
$this->server_info = $info['SQLServerVersion'];
|
||||
@@ -252,7 +252,7 @@ if (isset($_GET["mssql"])) {
|
||||
}
|
||||
|
||||
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
|
||||
return (isset($limit) ? " TOP (" . ($limit + $offset) . ")" : "") . " $query$where"; // seek later
|
||||
return ($limit !== null ? " TOP (" . ($limit + $offset) . ")" : "") . " $query$where"; // seek later
|
||||
}
|
||||
|
||||
function limit1($query, $where) {
|
||||
|
@@ -48,7 +48,7 @@ if (!defined("DRIVER")) {
|
||||
}
|
||||
}
|
||||
|
||||
} elseif (extension_loaded("mysql")) {
|
||||
} elseif (extension_loaded("mysql") && !(ini_get("sql.safe_mode") && extension_loaded("pdo_mysql"))) {
|
||||
class Min_DB {
|
||||
var
|
||||
$extension = "MySQL", ///< @var string extension name
|
||||
@@ -250,7 +250,7 @@ if (!defined("DRIVER")) {
|
||||
$connection = new Min_DB;
|
||||
$credentials = $adminer->credentials();
|
||||
if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) {
|
||||
$connection->query("SET sql_quote_show_create = 1");
|
||||
$connection->query("SET sql_quote_show_create = 1, autocommit = 1");
|
||||
return $connection;
|
||||
}
|
||||
$return = $connection->error;
|
||||
@@ -268,7 +268,7 @@ if (!defined("DRIVER")) {
|
||||
global $connection;
|
||||
// SHOW DATABASES can take a very long time so it is cached
|
||||
$return = &get_session("dbs");
|
||||
if (!isset($return)) {
|
||||
if ($return === null) {
|
||||
if ($flush) {
|
||||
restart_session();
|
||||
ob_flush();
|
||||
@@ -288,7 +288,7 @@ if (!defined("DRIVER")) {
|
||||
* @return string
|
||||
*/
|
||||
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
|
||||
return " $query$where" . (isset($limit) ? $separator . "LIMIT $limit" . ($offset ? " OFFSET $offset" : "") : "");
|
||||
return " $query$where" . ($limit !== null ? $separator . "LIMIT $limit" . ($offset ? " OFFSET $offset" : "") : "");
|
||||
}
|
||||
|
||||
/** Formulate SQL modification query with limit 1
|
||||
@@ -457,8 +457,8 @@ if (!defined("DRIVER")) {
|
||||
"table" => idf_unescape($match[4] != "" ? $match[4] : $match[3]),
|
||||
"source" => array_map('idf_unescape', $source[0]),
|
||||
"target" => array_map('idf_unescape', $target[0]),
|
||||
"on_delete" => $match[6],
|
||||
"on_update" => $match[7],
|
||||
"on_delete" => ($match[6] ? $match[6] : "RESTRICT"),
|
||||
"on_update" => ($match[7] ? $match[7] : "RESTRICT"),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -510,6 +510,16 @@ if (!defined("DRIVER")) {
|
||||
return h(preg_replace('~^You have an error.*syntax to use~U', "Syntax error", $connection->error));
|
||||
}
|
||||
|
||||
/** Get line of error
|
||||
* @return int 0 for first line
|
||||
*/
|
||||
function error_line() {
|
||||
global $connection;
|
||||
if (ereg(' at line ([0-9]+)$', $connection->error, $regs)) {
|
||||
return $regs[1] - 1;
|
||||
}
|
||||
}
|
||||
|
||||
/** Return expression for binary comparison
|
||||
* @param string
|
||||
* @return string
|
||||
@@ -739,10 +749,10 @@ if (!defined("DRIVER")) {
|
||||
function routine($name, $type) {
|
||||
global $connection, $enum_length, $inout, $types;
|
||||
$aliases = array("bool", "boolean", "integer", "double precision", "real", "dec", "numeric", "fixed", "national char", "national varchar");
|
||||
$type_pattern = "((" . implode("|", array_merge(array_keys($types), $aliases)) . ")(?:\\s*\\(((?:[^'\")]*|$enum_length)+)\\))?\\s*(zerofill\\s*)?(unsigned(?:\\s+zerofill)?)?)(?:\\s*(?:CHARSET|CHARACTER\\s+SET)\\s*['\"]?([^'\"\\s]+)['\"]?)?";
|
||||
$type_pattern = "((" . implode("|", array_merge(array_keys($types), $aliases)) . ")\\b(?:\\s*\\(((?:[^'\")]*|$enum_length)+)\\))?\\s*(zerofill\\s*)?(unsigned(?:\\s+zerofill)?)?)(?:\\s*(?:CHARSET|CHARACTER\\s+SET)\\s*['\"]?([^'\"\\s]+)['\"]?)?";
|
||||
$pattern = "\\s*(" . ($type == "FUNCTION" ? "" : $inout) . ")?\\s*(?:`((?:[^`]|``)*)`\\s*|\\b(\\S+)\\s+)$type_pattern";
|
||||
$create = $connection->result("SHOW CREATE $type " . idf_escape($name), 2);
|
||||
preg_match("~\\(((?:$pattern\\s*,?)*)\\)" . ($type == "FUNCTION" ? "\\s*RETURNS\\s+$type_pattern" : "") . "\\s*(.*)~is", $create, $match);
|
||||
preg_match("~\\(((?:$pattern\\s*,?)*)\\)\\s*" . ($type == "FUNCTION" ? "RETURNS\\s+$type_pattern\\s+" : "") . "(.*)~is", $create, $match);
|
||||
$fields = array();
|
||||
preg_match_all("~$pattern\\s*,?~is", $match[1], $matches, PREG_SET_ORDER);
|
||||
foreach ($matches as $param) {
|
||||
|
@@ -154,7 +154,7 @@ if (isset($_GET["oracle"])) {
|
||||
|
||||
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
|
||||
return ($offset ? " * FROM (SELECT t.*, rownum AS rnum FROM (SELECT $query$where) t WHERE rownum <= " . ($limit + $offset) . ") WHERE rnum > $offset"
|
||||
: (isset($limit) ? " * FROM (SELECT $query$where) WHERE rownum <= " . ($limit + $offset)
|
||||
: ($limit !== null ? " * FROM (SELECT $query$where) WHERE rownum <= " . ($limit + $offset)
|
||||
: " $query$where"
|
||||
));
|
||||
}
|
||||
@@ -190,8 +190,8 @@ UNION SELECT view_name, 'view' FROM user_views"
|
||||
function table_status($name = "") {
|
||||
$return = array();
|
||||
$search = q($name);
|
||||
foreach (get_rows('SELECT table_name "Name", \'table\' "Engine" FROM all_tables WHERE tablespace_name = ' . q(DB) . ($name != "" ? " AND table_name = $search" : "") . "
|
||||
UNION SELECT view_name, 'view' FROM user_views" . ($name != "" ? " WHERE view_name = $search" : "")
|
||||
foreach (get_rows('SELECT table_name "Name", \'table\' "Engine", avg_row_len * num_rows "Data_length", num_rows "Rows" FROM all_tables WHERE tablespace_name = ' . q(DB) . ($name != "" ? " AND table_name = $search" : "") . "
|
||||
UNION SELECT view_name, 'view', 0, 0 FROM user_views" . ($name != "" ? " WHERE view_name = $search" : "")
|
||||
) as $row) {
|
||||
if ($name != "") {
|
||||
return $row;
|
||||
@@ -329,28 +329,39 @@ ORDER BY uc.constraint_type, uic.column_position", $connection2) as $row) {
|
||||
}
|
||||
|
||||
function schemas() {
|
||||
return array();
|
||||
return get_vals("SELECT DISTINCT owner FROM dba_segments WHERE owner IN (SELECT username FROM dba_users WHERE default_tablespace NOT IN ('SYSTEM','SYSAUX'))");
|
||||
}
|
||||
|
||||
function get_schema() {
|
||||
return "";
|
||||
global $connection;
|
||||
return $connection->result("SELECT sys_context('USERENV', 'SESSION_USER') FROM dual");
|
||||
}
|
||||
|
||||
function set_schema($scheme) {
|
||||
return true;
|
||||
global $connection;
|
||||
return $connection->query("ALTER SESSION SET CURRENT_SCHEMA = " . idf_escape($scheme));
|
||||
}
|
||||
|
||||
function show_variables() {
|
||||
return get_key_vals('SELECT name, display_value FROM v$parameter');
|
||||
}
|
||||
|
||||
function process_list() {
|
||||
return get_rows('SELECT sess.process AS "process", sess.username AS "user", sess.schemaname AS "schema", sess.status AS "status", sess.wait_class AS "wait_class", sess.seconds_in_wait AS "seconds_in_wait", sql.sql_text AS "sql_text", sess.machine AS "machine", sess.port AS "port"
|
||||
FROM v$session sess LEFT OUTER JOIN v$sql sql
|
||||
ON sql.sql_id = sess.sql_id
|
||||
WHERE sess.type = \'USER\'
|
||||
ORDER BY PROCESS
|
||||
');
|
||||
}
|
||||
|
||||
function show_status() {
|
||||
$rows = get_rows('SELECT * FROM v$instance');
|
||||
return reset($rows);
|
||||
}
|
||||
|
||||
function support($feature) {
|
||||
return ereg("view|drop_col|variables|status", $feature); //!
|
||||
return ereg("view|scheme|processlist|drop_col|variables|status", $feature); //!
|
||||
}
|
||||
|
||||
$jush = "oracle";
|
||||
|
@@ -21,11 +21,11 @@ if (isset($_GET["pgsql"])) {
|
||||
$db = $adminer->database();
|
||||
set_error_handler(array($this, '_error'));
|
||||
$this->_string = "host='" . str_replace(":", "' port='", addcslashes($server, "'\\")) . "' user='" . addcslashes($username, "'\\") . "' password='" . addcslashes($password, "'\\") . "'";
|
||||
$this->_link = @pg_connect($this->_string . ($db != "" ? " dbname='" . addcslashes($db, "'\\") . "'" : " dbname='template1'"), PGSQL_CONNECT_FORCE_NEW);
|
||||
$this->_link = @pg_connect("$this->_string dbname='" . ($db != "" ? addcslashes($db, "'\\") : "postgres") . "'", PGSQL_CONNECT_FORCE_NEW);
|
||||
if (!$this->_link && $db != "") {
|
||||
// try to connect directly with database for performance
|
||||
$this->_database = false;
|
||||
$this->_link = @pg_connect("$this->_string dbname='template1'", PGSQL_CONNECT_FORCE_NEW);
|
||||
$this->_link = @pg_connect("$this->_string dbname='postgres'", PGSQL_CONNECT_FORCE_NEW);
|
||||
}
|
||||
restore_error_handler();
|
||||
if ($this->_link) {
|
||||
@@ -53,7 +53,7 @@ if (isset($_GET["pgsql"])) {
|
||||
}
|
||||
|
||||
function close() {
|
||||
$this->_link = @pg_connect("$this->_string dbname='template1'");
|
||||
$this->_link = @pg_connect("$this->_string dbname='postgres'");
|
||||
}
|
||||
|
||||
function query($query, $unbuffered = false) {
|
||||
@@ -132,7 +132,7 @@ if (isset($_GET["pgsql"])) {
|
||||
global $adminer;
|
||||
$db = $adminer->database();
|
||||
$string = "pgsql:host='" . str_replace(":", "' port='", addcslashes($server, "'\\")) . "' options='-c client_encoding=utf8'";
|
||||
$this->dsn($string . ($db != "" ? " dbname='" . addcslashes($db, "'\\") . "'" : ""), $username, $password);
|
||||
$this->dsn("$string dbname='" . ($db != "" ? addcslashes($db, "'\\") : "postgres") . "'", $username, $password);
|
||||
//! connect without DB in case of an error
|
||||
return true;
|
||||
}
|
||||
@@ -161,6 +161,9 @@ if (isset($_GET["pgsql"])) {
|
||||
$connection = new Min_DB;
|
||||
$credentials = $adminer->credentials();
|
||||
if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) {
|
||||
if ($connection->server_info >= 9) {
|
||||
$connection->query("SET application_name = 'Adminer'");
|
||||
}
|
||||
return $connection;
|
||||
}
|
||||
return $connection->error;
|
||||
@@ -171,7 +174,7 @@ if (isset($_GET["pgsql"])) {
|
||||
}
|
||||
|
||||
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
|
||||
return " $query$where" . (isset($limit) ? $separator . "LIMIT $limit" . ($offset ? " OFFSET $offset" : "") : "");
|
||||
return " $query$where" . ($limit !== null ? $separator . "LIMIT $limit" . ($offset ? " OFFSET $offset" : "") : "");
|
||||
}
|
||||
|
||||
function limit1($query, $where) {
|
||||
@@ -202,7 +205,7 @@ if (isset($_GET["pgsql"])) {
|
||||
|
||||
function table_status($name = "") {
|
||||
$return = array();
|
||||
foreach (get_rows("SELECT relname AS \"Name\", CASE relkind WHEN 'r' THEN '' ELSE 'view' END AS \"Engine\", pg_relation_size(oid) AS \"Data_length\", pg_total_relation_size(oid) - pg_relation_size(oid) AS \"Index_length\", obj_description(oid, 'pg_class') AS \"Comment\", relhasoids AS \"Oid\"
|
||||
foreach (get_rows("SELECT relname AS \"Name\", CASE relkind WHEN 'r' THEN 'table' ELSE 'view' END AS \"Engine\", pg_relation_size(oid) AS \"Data_length\", pg_total_relation_size(oid) - pg_relation_size(oid) AS \"Index_length\", obj_description(oid, 'pg_class') AS \"Comment\", relhasoids AS \"Oid\", reltuples as \"Rows\"
|
||||
FROM pg_class
|
||||
WHERE relkind IN ('r','v')
|
||||
AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema())"
|
||||
@@ -255,7 +258,7 @@ ORDER BY a.attnum"
|
||||
$connection2 = $connection;
|
||||
}
|
||||
$return = array();
|
||||
$table_oid = $connection2->result("SELECT oid FROM pg_class WHERE relname = " . q($table));
|
||||
$table_oid = $connection2->result("SELECT oid FROM pg_class WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema()) AND relname = " . q($table));
|
||||
$columns = get_key_vals("SELECT attnum, attname FROM pg_attribute WHERE attrelid = $table_oid AND attnum > 0", $connection2);
|
||||
foreach (get_rows("SELECT relname, indisunique, indisprimary, indkey FROM pg_index i, pg_class ci WHERE i.indrelid = $table_oid AND ci.oid = i.indexrelid", $connection2) as $row) {
|
||||
$return[$row["relname"]]["type"] = ($row["indisprimary"] == "t" ? "PRIMARY" : ($row["indisunique"] == "t" ? "UNIQUE" : "INDEX"));
|
||||
@@ -273,7 +276,7 @@ ORDER BY a.attnum"
|
||||
$return = array();
|
||||
foreach (get_rows("SELECT conname, pg_get_constraintdef(oid) AS definition
|
||||
FROM pg_constraint
|
||||
WHERE conrelid = (SELECT oid FROM pg_class WHERE relname = " . q($table) . ")
|
||||
WHERE conrelid = (SELECT pc.oid FROM pg_class AS pc INNER JOIN pg_namespace AS pn ON (pn.oid = pc.relnamespace) WHERE pc.relname = " . q($table) . " AND pn.nspname = current_schema())
|
||||
AND contype = 'f'::char
|
||||
ORDER BY conkey, conname") as $row) {
|
||||
if (preg_match('~FOREIGN KEY\s*\((.+)\)\s*REFERENCES (.+)\((.+)\)(.*)$~iA', $row['definition'], $match)) {
|
||||
@@ -284,8 +287,8 @@ ORDER BY conkey, conname") as $row) {
|
||||
$row['table'] = $match2[2];
|
||||
}
|
||||
$row['target'] = array_map('trim', explode(',', $match[3]));
|
||||
$row['on_delete'] = (preg_match("~ON DELETE ($on_actions)~", $match[4], $match2) ? $match2[1] : '');
|
||||
$row['on_update'] = (preg_match("~ON UPDATE ($on_actions)~", $match[4], $match2) ? $match2[1] : '');
|
||||
$row['on_delete'] = (preg_match("~ON DELETE ($on_actions)~", $match[4], $match2) ? $match2[1] : 'NO ACTION');
|
||||
$row['on_update'] = (preg_match("~ON UPDATE ($on_actions)~", $match[4], $match2) ? $match2[1] : 'NO ACTION');
|
||||
$return[$row['conname']] = $row;
|
||||
}
|
||||
}
|
||||
|
@@ -30,7 +30,10 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
}
|
||||
|
||||
function quote($string) {
|
||||
return "'" . $this->_link->escapeString($string) . "'";
|
||||
return (is_utf8($string)
|
||||
? "'" . $this->_link->escapeString($string) . "'"
|
||||
: "x'" . reset(unpack('H*', $string)) . "'"
|
||||
);
|
||||
}
|
||||
|
||||
function store_result() {
|
||||
@@ -181,7 +184,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
}
|
||||
|
||||
function select_db($filename) {
|
||||
if (is_readable($filename) && $this->query("ATTACH " . $this->quote(ereg("(^[/\\]|:)", $filename) ? $filename : dirname($_SERVER["SCRIPT_FILENAME"]) . "/$filename") . " AS a")) { // is_readable - SQLite 3
|
||||
if (is_readable($filename) && $this->query("ATTACH " . $this->quote(ereg("(^[/\\\\]|:)", $filename) ? $filename : dirname($_SERVER["SCRIPT_FILENAME"]) . "/$filename") . " AS a")) { // is_readable - SQLite 3
|
||||
$this->Min_SQLite($filename);
|
||||
return true;
|
||||
}
|
||||
@@ -215,7 +218,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
}
|
||||
|
||||
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
|
||||
return " $query$where" . (isset($limit) ? $separator . "LIMIT $limit" . ($offset ? " OFFSET $offset" : "") : "");
|
||||
return " $query$where" . ($limit !== null ? $separator . "LIMIT $limit" . ($offset ? " OFFSET $offset" : "") : "");
|
||||
}
|
||||
|
||||
function limit1($query, $where) {
|
||||
|
@@ -208,7 +208,7 @@ if (DB != "") {
|
||||
echo $views;
|
||||
} else {
|
||||
echo "<thead><tr><th style='text-align: left;'><label><input type='checkbox' id='check-databases'" . ($TABLE == "" ? " checked" : "") . " onclick='formCheck(this, /^databases\\[/);'>" . lang('Database') . "</label></thead>\n";
|
||||
$databases = get_databases();
|
||||
$databases = $adminer->databases();
|
||||
if ($databases) {
|
||||
foreach ($databases as $db) {
|
||||
if (!information_schema($db)) {
|
||||
|
@@ -75,14 +75,14 @@ if ($fields) {
|
||||
foreach ($fields as $name => $field) {
|
||||
echo "<tr><th>" . $adminer->fieldName($field);
|
||||
$default = $_GET["set"][bracket_escape($name)];
|
||||
$value = (isset($row)
|
||||
$value = ($row !== null
|
||||
? ($row[$name] != "" && ereg("enum|set", $field["type"]) ? (is_array($row[$name]) ? array_sum($row[$name]) : +$row[$name]) : $row[$name])
|
||||
: (!$update && $field["auto_increment"] ? "" : (isset($_GET["select"]) ? false : (isset($default) ? $default : $field["default"])))
|
||||
: (!$update && $field["auto_increment"] ? "" : (isset($_GET["select"]) ? false : ($default !== null ? $default : $field["default"])))
|
||||
);
|
||||
if (!$_POST["save"] && is_string($value)) {
|
||||
$value = $adminer->editVal($value, $field);
|
||||
}
|
||||
$function = ($_POST["save"] ? (string) $_POST["function"][$name] : ($update && $field["on_update"] == "CURRENT_TIMESTAMP" ? "now" : ($value === false ? null : (isset($value) ? '' : 'NULL'))));
|
||||
$function = ($_POST["save"] ? (string) $_POST["function"][$name] : ($update && $field["on_update"] == "CURRENT_TIMESTAMP" ? "now" : ($value === false ? null : ($value !== null ? '' : 'NULL'))));
|
||||
if ($field["type"] == "timestamp" && $value == "CURRENT_TIMESTAMP") {
|
||||
$value = "";
|
||||
$function = "now";
|
||||
|
@@ -9,7 +9,7 @@ if ($_GET["file"] == "favicon.ico") {
|
||||
?>compile_file('../adminer/static/default.css', 'minify_css');<?php
|
||||
} elseif ($_GET["file"] == "functions.js") {
|
||||
header("Content-Type: text/javascript; charset=utf-8");
|
||||
?>compile_file('../adminer/static/functions.js', 'JSMin::minify');compile_file('static/editing.js', 'JSMin::minify');<?php
|
||||
?>compile_file('../adminer/static/functions.js', 'jsShrink');compile_file('static/editing.js', 'jsShrink');<?php
|
||||
} else {
|
||||
header("Content-Type: image/gif");
|
||||
switch ($_GET["file"]) {
|
||||
@@ -18,7 +18,6 @@ if ($_GET["file"] == "favicon.ico") {
|
||||
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;
|
||||
case "loader.gif": echo base64_decode("compile_file('../adminer/static/loader.gif', 'base64_encode');"); break;
|
||||
}
|
||||
}
|
||||
exit;
|
||||
|
@@ -11,7 +11,7 @@ if ($_POST && !$error && !$_POST["add"] && !$_POST["change"] && !$_POST["change-
|
||||
$target[$key] = $_POST["target"][$key];
|
||||
}
|
||||
query_redirect("ALTER TABLE " . table($TABLE)
|
||||
. ($_GET["name"] != "" ? "\nDROP FOREIGN KEY " . idf_escape($_GET["name"]) . "," : "")
|
||||
. ($_GET["name"] != "" ? "\nDROP " . ($jush == "sql" ? "FOREIGN KEY " : "CONSTRAINT ") . idf_escape($_GET["name"]) . "," : "")
|
||||
. "\nADD FOREIGN KEY (" . implode(", ", array_map('idf_escape', $source)) . ") REFERENCES " . table($_POST["table"]) . " (" . implode(", ", array_map('idf_escape', $target)) . ")" //! reuse $_GET["name"] - check in older MySQL versions
|
||||
. (ereg("^($on_actions)\$", $_POST["on_delete"]) ? " ON DELETE $_POST[on_delete]" : "")
|
||||
. (ereg("^($on_actions)\$", $_POST["on_update"]) ? " ON UPDATE $_POST[on_update]" : "")
|
||||
@@ -51,7 +51,7 @@ foreach (table_status() as $name => $table_status) {
|
||||
<p>
|
||||
<?php if ($row["db"] == "" && $row["ns"] == "") { ?>
|
||||
<?php echo lang('Target table'); ?>:
|
||||
<?php echo html_select("table", $referencable, $row["table"], "this.form['change-js'].value = '1'; if (!ajaxForm(this.form)) this.form.submit();"); ?>
|
||||
<?php echo html_select("table", $referencable, $row["table"], "this.form['change-js'].value = '1'; this.form.submit();"); ?>
|
||||
<input type="hidden" name="change-js" value="">
|
||||
<noscript><p><input type="submit" name="change" value="<?php echo lang('Change'); ?>"></noscript>
|
||||
<table cellspacing="0">
|
||||
|
@@ -34,6 +34,14 @@ class Adminer {
|
||||
return DB;
|
||||
}
|
||||
|
||||
/** Get cached list of databases
|
||||
* @param bool
|
||||
* @return array
|
||||
*/
|
||||
function databases($flush = true) {
|
||||
return get_databases($flush);
|
||||
}
|
||||
|
||||
/** Headers to send before HTML output
|
||||
* @return bool true to send security headers
|
||||
*/
|
||||
@@ -55,19 +63,20 @@ class Adminer {
|
||||
global $drivers;
|
||||
?>
|
||||
<table cellspacing="0">
|
||||
<tr><th><?php echo lang('System'); ?><td><?php echo html_select("driver", $drivers, DRIVER, "loginDriver(this);"); ?>
|
||||
<tr><th><?php echo lang('Server'); ?><td><input name="server" value="<?php echo h(SERVER); ?>" title="hostname[:port]">
|
||||
<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">
|
||||
<tr><th><?php echo lang('System'); ?><td><?php echo html_select("auth[driver]", $drivers, DRIVER, "loginDriver(this);"); ?>
|
||||
<tr><th><?php echo lang('Server'); ?><td><input name="auth[server]" value="<?php echo h(SERVER); ?>" title="hostname[:port]">
|
||||
<tr><th><?php echo lang('Username'); ?><td><input id="username" name="auth[username]" value="<?php echo h($_GET["username"]); ?>">
|
||||
<tr><th><?php echo lang('Password'); ?><td><input type="password" name="auth[password]">
|
||||
<tr><th><?php echo lang('Database'); ?><td><input name="auth[db]" value="<?php echo h($_GET["db"]); ?>">
|
||||
</table>
|
||||
<script type="text/javascript">
|
||||
var username = document.getElementById('username');
|
||||
username.focus();
|
||||
username.form['driver'].onchange();
|
||||
username.form['auth[driver]'].onchange();
|
||||
</script>
|
||||
<?php
|
||||
echo "<p><input type='submit' value='" . lang('Login') . "'>\n";
|
||||
echo checkbox("permanent", 1, $_COOKIE["adminer_permanent"], lang('Permanent login')) . "\n";
|
||||
echo checkbox("auth[permanent]", 1, $_COOKIE["adminer_permanent"], lang('Permanent login')) . "\n";
|
||||
}
|
||||
|
||||
/** Authorize the user
|
||||
@@ -109,7 +118,7 @@ username.form['driver'].onchange();
|
||||
} else {
|
||||
$links["create"] = lang('Alter table');
|
||||
}
|
||||
if (isset($set)) {
|
||||
if ($set !== null) {
|
||||
$links["edit"] = lang('New item');
|
||||
}
|
||||
foreach ($links as $key => $val) {
|
||||
@@ -176,9 +185,9 @@ username.form['driver'].onchange();
|
||||
* @return string
|
||||
*/
|
||||
function selectVal($val, $link, $field) {
|
||||
$return = ($val != "<i>NULL</i>" && ereg("char|binary", $field["type"]) && !ereg("var", $field["type"]) ? "<code>$val</code>" : $val);
|
||||
$return = ($val === null ? "<i>NULL</i>" : (ereg("char|binary", $field["type"]) && !ereg("var", $field["type"]) ? "<code>$val</code>" : $val));
|
||||
if (ereg('blob|bytea|raw|file', $field["type"]) && !is_utf8($val)) {
|
||||
$return = lang('%d byte(s)', strlen(html_entity_decode($val, ENT_QUOTES)));
|
||||
$return = lang('%d byte(s)', strlen($val));
|
||||
}
|
||||
return ($link ? "<a href='$link'>$return</a>" : $return);
|
||||
}
|
||||
@@ -224,23 +233,22 @@ username.form['driver'].onchange();
|
||||
foreach ($indexes as $i => $index) {
|
||||
if ($index["type"] == "FULLTEXT") {
|
||||
echo "(<i>" . implode("</i>, <i>", array_map('h', $index["columns"])) . "</i>) AGAINST";
|
||||
echo " <input name='fulltext[$i]' value='" . h($_GET["fulltext"][$i]) . "'>";
|
||||
echo " <input name='fulltext[$i]' value='" . h($_GET["fulltext"][$i]) . "' onchange='selectFieldChange(this.form);'>";
|
||||
echo checkbox("boolean[$i]", 1, isset($_GET["boolean"][$i]), "BOOL");
|
||||
echo "<br>\n";
|
||||
}
|
||||
}
|
||||
$i = 0;
|
||||
foreach ((array) $_GET["where"] as $val) {
|
||||
if ("$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 html_select("where[$i][op]", $this->operators, $val["op"]);
|
||||
echo "<input name='where[$i][val]' value='" . h($val["val"]) . "'></div>\n";
|
||||
$i++;
|
||||
$_GET["where"] = (array) $_GET["where"];
|
||||
reset($_GET["where"]);
|
||||
$change_next = "this.nextSibling.onchange();";
|
||||
for ($i = 0; $i <= count($_GET["where"]); $i++) {
|
||||
list(, $val) = each($_GET["where"]);
|
||||
if (!$val || ("$val[col]$val[val]" != "" && in_array($val["op"], $this->operators))) {
|
||||
echo "<div><select name='where[$i][col]' onchange='$change_next'><option value=''>(" . lang('anywhere') . ")" . optionlist($columns, $val["col"], true) . "</select>";
|
||||
echo html_select("where[$i][op]", $this->operators, $val["op"], $change_next);
|
||||
echo "<input name='where[$i][val]' value='" . h($val["val"]) . "' onchange='" . ($val ? "selectFieldChange(this.form)" : "selectAddRow(this)") . ";'></div>\n";
|
||||
}
|
||||
}
|
||||
echo "<div><select name='where[$i][col]' onchange='selectAddRow(this);'><option value=''>(" . lang('anywhere') . ")" . optionlist($columns, null, true) . "</select>";
|
||||
echo html_select("where[$i][op]", $this->operators, "=");
|
||||
echo "<input name='where[$i][val]'></div>\n";
|
||||
echo "</div></fieldset>\n";
|
||||
}
|
||||
|
||||
@@ -255,7 +263,7 @@ username.form['driver'].onchange();
|
||||
$i = 0;
|
||||
foreach ((array) $_GET["order"] as $key => $val) {
|
||||
if (isset($columns[$val])) {
|
||||
echo "<div><select name='order[$i]'><option>" . optionlist($columns, $val, true) . "</select>";
|
||||
echo "<div><select name='order[$i]' onchange='selectFieldChange(this.form);'><option>" . optionlist($columns, $val, true) . "</select>";
|
||||
echo checkbox("desc[$i]", 1, isset($_GET["desc"][$key]), lang('descending')) . "</div>\n";
|
||||
$i++;
|
||||
}
|
||||
@@ -280,7 +288,7 @@ username.form['driver'].onchange();
|
||||
* @return null
|
||||
*/
|
||||
function selectLengthPrint($text_length) {
|
||||
if (isset($text_length)) {
|
||||
if ($text_length !== null) {
|
||||
echo "<fieldset><legend>" . lang('Text length') . "</legend><div>";
|
||||
echo '<input name="text_length" size="3" value="' . h($text_length) . '">';
|
||||
echo "</div></fieldset>\n";
|
||||
@@ -288,11 +296,28 @@ username.form['driver'].onchange();
|
||||
}
|
||||
|
||||
/** Print action box in select
|
||||
* @param array
|
||||
* @return null
|
||||
*/
|
||||
function selectActionPrint() {
|
||||
function selectActionPrint($indexes) {
|
||||
echo "<fieldset><legend>" . lang('Action') . "</legend><div>";
|
||||
echo "<input type='submit' value='" . lang('Select') . "'>";
|
||||
echo " <span id='noindex' title='" . lang('Full table scan') . "'></span>";
|
||||
echo "<script type='text/javascript'>\n";
|
||||
echo "var indexColumns = ";
|
||||
$columns = array();
|
||||
foreach ($indexes as $index) {
|
||||
if ($index["type"] != "FULLTEXT") {
|
||||
$columns[reset($index["columns"])] = 1;
|
||||
}
|
||||
}
|
||||
$columns[""] = 1;
|
||||
foreach ($columns as $key => $val) {
|
||||
json_row($key);
|
||||
}
|
||||
echo ";\n";
|
||||
echo "selectFieldChange(document.getElementById('form'));\n";
|
||||
echo "</script>\n";
|
||||
echo "</div></fieldset>\n";
|
||||
}
|
||||
|
||||
@@ -430,11 +455,11 @@ username.form['driver'].onchange();
|
||||
restart_session();
|
||||
$id = "sql-" . ($count++);
|
||||
$history = &get_session("queries");
|
||||
if (strlen($query) > 1e6) { // not DB - reset in drop database
|
||||
if (strlen($query) > 1e6) {
|
||||
$query = ereg_replace('[\x80-\xFF]+$', '', substr($query, 0, 1e6)) . "\n..."; // [\x80-\xFF] - valid UTF-8, \n - can end by one-line comment
|
||||
}
|
||||
$history[$_GET["db"]][] = $query; // not DB - $_GET["db"] is changed in database.inc.php //! respect $_GET["ns"]
|
||||
return " <a href='#$id' onclick=\"return !toggle('$id');\">" . lang('SQL command') . "</a><div id='$id' class='hidden'><pre><code class='jush-$jush'>" . shorten_utf8($query, 1000) . '</code></pre><p><a href="' . h(str_replace("db=" . urlencode(DB), "db=" . urlencode($_GET["db"]), ME) . 'sql=&history=' . (count($history[$_GET["db"]]) - 1)) . '">' . lang('Edit') . '</a></div>';
|
||||
$history[$_GET["db"]][] = array($query, time()); // not DB - $_GET["db"] is changed in database.inc.php //! respect $_GET["ns"]
|
||||
return " <span class='time'>" . @date("H:i:s") . "</span> <a href='#$id' onclick=\"return !toggle('$id');\">" . lang('SQL command') . "</a><div id='$id' class='hidden'><pre><code class='jush-$jush'>" . shorten_utf8($query, 1000) . '</code></pre><p><a href="' . h(str_replace("db=" . urlencode(DB), "db=" . urlencode($_GET["db"]), ME) . 'sql=&history=' . (count($history[$_GET["db"]]) - 1)) . '">' . lang('Edit') . '</a></div>'; // @ - time zone may be not set
|
||||
}
|
||||
|
||||
/** Functions displayed in edit form
|
||||
@@ -469,7 +494,7 @@ username.form['driver'].onchange();
|
||||
function editInput($table, $field, $attrs, $value) {
|
||||
if ($field["type"] == "enum") {
|
||||
return (isset($_GET["select"]) ? "<label><input type='radio'$attrs value='-1' checked><i>" . lang('original') . "</i></label> " : "")
|
||||
. ($field["null"] ? "<label><input type='radio'$attrs value=''" . (isset($value) || isset($_GET["select"]) ? "" : " checked") . "><i>NULL</i></label> " : "")
|
||||
. ($field["null"] ? "<label><input type='radio'$attrs value=''" . ($value !== null || isset($_GET["select"]) ? "" : " checked") . "><i>NULL</i></label> " : "")
|
||||
. enum_input("radio", $attrs, $field, $value, 0) // 0 - empty
|
||||
;
|
||||
}
|
||||
@@ -523,7 +548,7 @@ username.form['driver'].onchange();
|
||||
}
|
||||
|
||||
/** Returns export format options
|
||||
* @return array
|
||||
* @return array empty to disable export
|
||||
*/
|
||||
function dumpFormat() {
|
||||
return array('sql' => 'SQL', 'csv' => 'CSV,', 'csv;' => 'CSV;', 'tsv' => 'TSV');
|
||||
@@ -569,12 +594,12 @@ CREATE PROCEDURE adminer_alter (INOUT alter_command text) BEGIN
|
||||
$after = "";
|
||||
foreach (get_rows($query) as $row) {
|
||||
$default = $row["COLUMN_DEFAULT"];
|
||||
$row["default"] = (isset($default) ? q($default) : "NULL");
|
||||
$row["default"] = ($default !== null ? q($default) : "NULL");
|
||||
$row["after"] = q($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($default) ? " DEFAULT " . ($default == "CURRENT_TIMESTAMP" ? $default : $row["default"]) : "")
|
||||
. ($default !== null ? " DEFAULT " . ($default == "CURRENT_TIMESTAMP" ? $default : $row["default"]) : "")
|
||||
. ($row["IS_NULLABLE"] == "YES" ? "" : " NOT NULL")
|
||||
. ($row["EXTRA"] ? " $row[EXTRA]" : "")
|
||||
. ($row["COLUMN_COMMENT"] ? " COMMENT " . q($row["COLUMN_COMMENT"]) : "")
|
||||
@@ -659,7 +684,7 @@ DROP PROCEDURE adminer_alter;
|
||||
$insert = "INSERT INTO " . table($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 : q($val)) : "NULL"); //! columns looking like functions
|
||||
$row[$key] = ($val !== null ? (ereg('int|float|double|decimal|bit', $fields[$key]["type"]) ? $val : q($val)) : "NULL"); //! columns looking like functions
|
||||
}
|
||||
$s = implode(",\t", $row);
|
||||
if ($style == "INSERT+UPDATE") {
|
||||
@@ -691,6 +716,14 @@ DROP PROCEDURE adminer_alter;
|
||||
}
|
||||
}
|
||||
|
||||
/** Set export filename
|
||||
* @param string
|
||||
* @return string filename without extension
|
||||
*/
|
||||
function dumpFilename($identifier) {
|
||||
return friendly_url($identifier != "" ? $identifier : (SERVER != "" ? SERVER : "localhost"));
|
||||
}
|
||||
|
||||
/** Send headers for export
|
||||
* @param string
|
||||
* @param bool
|
||||
@@ -742,9 +775,9 @@ DROP PROCEDURE adminer_alter;
|
||||
foreach ((array) $_SESSION["pwds"] as $driver => $servers) {
|
||||
foreach ($servers as $server => $usernames) {
|
||||
foreach ($usernames as $username => $password) {
|
||||
if (isset($password)) {
|
||||
if ($password !== null) {
|
||||
if ($first) {
|
||||
echo "<p onclick='eventStop(event);'>\n";
|
||||
echo "<p>\n";
|
||||
$first = false;
|
||||
}
|
||||
echo "<a href='" . h(auth_url($driver, $server, $username)) . "'>($drivers[$driver]) " . h($username . ($server != "" ? "@$server" : "")) . "</a><br>\n";
|
||||
@@ -753,7 +786,7 @@ DROP PROCEDURE adminer_alter;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$databases = get_databases();
|
||||
$databases = $this->databases();
|
||||
?>
|
||||
<form action="" method="post">
|
||||
<p class="logout">
|
||||
@@ -765,7 +798,7 @@ DROP PROCEDURE adminer_alter;
|
||||
}
|
||||
}
|
||||
?>
|
||||
<input type="submit" name="logout" value="<?php echo lang('Logout'); ?>" onclick="eventStop(event);">
|
||||
<input type="submit" name="logout" value="<?php echo lang('Logout'); ?>">
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</p>
|
||||
</form>
|
||||
@@ -773,7 +806,7 @@ DROP PROCEDURE adminer_alter;
|
||||
<p>
|
||||
<?php hidden_fields_get(); ?>
|
||||
<?php echo ($databases ? html_select("db", array("" => "(" . lang('database') . ")") + $databases, DB, "this.form.submit();") : '<input name="db" value="' . h(DB) . '">'); ?>
|
||||
<input type="submit" value="<?php echo lang('Use'); ?>"<?php echo ($databases ? " class='hidden'" : ""); ?> onclick="eventStop(event);">
|
||||
<input type="submit" value="<?php echo lang('Use'); ?>"<?php echo ($databases ? " class='hidden'" : ""); ?>>
|
||||
<?php
|
||||
if ($missing != "db" && DB != "" && $connection->select_db(DB)) {
|
||||
if (support("scheme")) {
|
||||
@@ -825,6 +858,6 @@ DROP PROCEDURE adminer_alter;
|
||||
}
|
||||
|
||||
$adminer = (function_exists('adminer_object') ? adminer_object() : new Adminer);
|
||||
if (!isset($adminer->operators)) {
|
||||
if ($adminer->operators === null) {
|
||||
$adminer->operators = $operators;
|
||||
}
|
||||
|
@@ -14,21 +14,23 @@ if ($_COOKIE["adminer_permanent"]) {
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_POST["server"])) {
|
||||
$auth = $_POST["auth"];
|
||||
if ($auth) {
|
||||
session_regenerate_id(); // defense against session fixation
|
||||
$_SESSION["pwds"][$_POST["driver"]][$_POST["server"]][$_POST["username"]] = $_POST["password"];
|
||||
if ($_POST["permanent"]) {
|
||||
$key = base64_encode($_POST["driver"]) . "-" . base64_encode($_POST["server"]) . "-" . base64_encode($_POST["username"]);
|
||||
$_SESSION["pwds"][$auth["driver"]][$auth["server"]][$auth["username"]] = $auth["password"];
|
||||
if ($auth["permanent"]) {
|
||||
$key = base64_encode($auth["driver"]) . "-" . base64_encode($auth["server"]) . "-" . base64_encode($auth["username"]);
|
||||
$private = $adminer->permanentLogin();
|
||||
$permanent[$key] = "$key:" . base64_encode($private ? encrypt_string($_POST["password"], $private) : "");
|
||||
$permanent[$key] = "$key:" . base64_encode($private ? encrypt_string($auth["password"], $private) : "");
|
||||
cookie("adminer_permanent", implode(" ", $permanent));
|
||||
}
|
||||
if (count($_POST) == ($_POST["permanent"] ? 5 : 4) // 4 - driver, server, username, password
|
||||
|| DRIVER != $_POST["driver"]
|
||||
|| SERVER != $_POST["server"]
|
||||
|| $_GET["username"] !== $_POST["username"] // "0" == "00"
|
||||
if (count($_POST) == 1 // 1 - auth
|
||||
|| DRIVER != $auth["driver"]
|
||||
|| SERVER != $auth["server"]
|
||||
|| $_GET["username"] !== $auth["username"] // "0" == "00"
|
||||
|| DB != $auth["db"]
|
||||
) {
|
||||
redirect(auth_url($_POST["driver"], $_POST["server"], $_POST["username"]));
|
||||
redirect(auth_url($auth["driver"], $auth["server"], $auth["username"], $auth["db"]));
|
||||
}
|
||||
} elseif ($_POST["logout"]) {
|
||||
if ($token && $_POST["token"] != $token) {
|
||||
@@ -67,17 +69,17 @@ function auth_error($exception = null) {
|
||||
$error = lang('Session expired, please login again.');
|
||||
} else {
|
||||
$password = &get_session("pwds");
|
||||
if (isset($password)) {
|
||||
if ($password !== null) {
|
||||
$error = h($exception ? $exception->getMessage() : (is_string($connection) ? $connection : lang('Invalid credentials.')));
|
||||
$password = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
page_header(lang('Login'), $error, null);
|
||||
echo "<form action='' method='post' onclick='eventStop(event);'>\n";
|
||||
echo "<form action='' method='post'>\n";
|
||||
$adminer->loginForm();
|
||||
echo "<div>";
|
||||
hidden_fields($_POST, array("driver", "server", "username", "password", "permanent")); // expired session
|
||||
hidden_fields($_POST, array("auth")); // expired session
|
||||
echo "</div>\n";
|
||||
echo "</form>\n";
|
||||
page_footer("auth");
|
||||
@@ -98,7 +100,7 @@ if (is_string($connection) || !$adminer->login($_GET["username"], get_session("p
|
||||
}
|
||||
|
||||
$token = $_SESSION["token"]; ///< @var string CSRF protection
|
||||
if (isset($_POST["server"]) && $_POST["token"]) {
|
||||
if ($auth && $_POST["token"]) {
|
||||
$_POST["token"] = $token; // reset token after explicit login
|
||||
}
|
||||
$error = ($_POST ///< @var string
|
||||
|
@@ -4,7 +4,7 @@ error_reporting(6135); // errors and warnings
|
||||
include "../adminer/include/coverage.inc.php";
|
||||
|
||||
// disable filter.default
|
||||
$filter = (!ereg('^(unsafe_raw)?$', ini_get("filter.default")));
|
||||
$filter = !ereg('^(unsafe_raw)?$', ini_get("filter.default"));
|
||||
if ($filter || ini_get("filter.default_flags")) {
|
||||
foreach (array('_GET', '_POST', '_COOKIE', '_SERVER') as $val) {
|
||||
$unsafe = filter_input_array(constant("INPUT$val"), FILTER_UNSAFE_RAW);
|
||||
@@ -22,8 +22,11 @@ if (isset($_GET["file"])) {
|
||||
include "../adminer/include/functions.inc.php";
|
||||
|
||||
global $adminer, $connection, $drivers, $edit_functions, $enum_length, $error, $functions, $grouping, $HTTPS, $inout, $jush, $LANG, $langs, $on_actions, $structured_types, $token, $translations, $types, $unsigned, $VERSION; // allows including Adminer inside a function
|
||||
if (!isset($_SERVER["REQUEST_URI"])) {
|
||||
$_SERVER["REQUEST_URI"] = $_SERVER["ORIG_PATH_INFO"] . ($_SERVER["QUERY_STRING"] != "" ? "?$_SERVER[QUERY_STRING]" : ""); // IIS 5 compatibility
|
||||
if (!$_SERVER["REQUEST_URI"]) { // IIS 5 compatibility
|
||||
$_SERVER["REQUEST_URI"] = $_SERVER["ORIG_PATH_INFO"];
|
||||
}
|
||||
if (!strpos($_SERVER["REQUEST_URI"], '?') && $_SERVER["QUERY_STRING"] != "") { // IIS 7 compatibility
|
||||
$_SERVER["REQUEST_URI"] .= "?$_SERVER[QUERY_STRING]";
|
||||
}
|
||||
$HTTPS = $_SERVER["HTTPS"] && strcasecmp($_SERVER["HTTPS"], "off");
|
||||
|
||||
@@ -78,4 +81,4 @@ if (!ini_bool("session.use_cookies") || @ini_set("session.use_cookies", false) !
|
||||
session_write_close(); // improves concurrency if a user opens several pages at once, may be restarted later
|
||||
}
|
||||
|
||||
$on_actions = "RESTRICT|CASCADE|SET NULL|NO ACTION"; ///< @var string used in foreign_keys()
|
||||
$on_actions = "RESTRICT|NO ACTION|CASCADE|SET NULL|SET DEFAULT"; ///< @var string used in foreign_keys()
|
||||
|
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
function connect_error() {
|
||||
global $connection, $token, $error, $drivers;
|
||||
global $adminer, $connection, $token, $error, $drivers;
|
||||
$databases = array();
|
||||
if (DB != "") {
|
||||
page_header(lang('Database') . ": " . h(DB), lang('Invalid database.'), true);
|
||||
@@ -26,7 +26,7 @@ function connect_error() {
|
||||
if ($_GET["refresh"]) {
|
||||
set_session("dbs", null);
|
||||
}
|
||||
$databases = get_databases();
|
||||
$databases = $adminer->databases();
|
||||
if ($databases) {
|
||||
$scheme = support("scheme");
|
||||
$collations = collations();
|
||||
@@ -43,9 +43,9 @@ function connect_error() {
|
||||
}
|
||||
echo "</table>\n";
|
||||
echo "<script type='text/javascript'>tableCheck();</script>\n";
|
||||
echo "<p><input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm("formChecked(this, /db/)", 1) . ">\n"; // 1 - eventStop
|
||||
echo "<p><input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm("formChecked(this, /db/)") . ">\n";
|
||||
echo "<input type='hidden' name='token' value='$token'>\n";
|
||||
echo "<a href='" . h(ME) . "refresh=1' onclick='eventStop(event);'>" . lang('Refresh') . "</a>\n";
|
||||
echo "<a href='" . h(ME) . "refresh=1'>" . lang('Refresh') . "</a>\n";
|
||||
echo "</form>\n";
|
||||
}
|
||||
}
|
||||
|
@@ -15,10 +15,7 @@ function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") {
|
||||
}
|
||||
$title_all = $title . ($title2 != "" ? ": " . h($title2) : "");
|
||||
$title_page = strip_tags($title_all . (SERVER != "" && SERVER != "localhost" ? h(" - " . SERVER) : "") . " - " . $adminer->name());
|
||||
if (is_ajax()) {
|
||||
header("X-AJAX-Title: " . rawurlencode($title_page));
|
||||
} else {
|
||||
?>
|
||||
?>
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||
<html lang="<?php echo $LANG; ?>" dir="<?php echo lang('ltr'); ?>">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
@@ -26,9 +23,6 @@ function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") {
|
||||
<meta name="robots" content="noindex">
|
||||
<title><?php echo $title_page; ?></title>
|
||||
<link rel="stylesheet" type="text/css" href="../adminer/static/default.css">
|
||||
<script type="text/javascript">
|
||||
var areYouSure = '<?php echo lang('Resend POST data?'); ?>';
|
||||
</script>
|
||||
<script type="text/javascript" src="../adminer/static/functions.js"></script>
|
||||
<script type="text/javascript" src="static/editing.js"></script>
|
||||
<?php if ($adminer->head()) { ?>
|
||||
@@ -38,15 +32,14 @@ var areYouSure = '<?php echo lang('Resend POST data?'); ?>';
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
|
||||
<body class="<?php echo lang('ltr'); ?> nojs"<?php echo ($_POST ? "" : " onclick=\"return bodyClick(event, '" . h(js_escape(DB) . "', '" . js_escape($_GET["ns"])) . "');\""); // avoid re-post confirmation after refreshing the next page in Google Chrome ?> onkeydown="bodyKeydown(event);" onload="bodyLoad('<?php echo (is_object($connection) ? substr($connection->server_info, 0, 3) : ""); ?>');<?php echo (isset($_COOKIE["adminer_version"]) ? "" : " verifyVersion();"); ?>">
|
||||
<body class="<?php echo lang('ltr'); ?> nojs" onkeydown="bodyKeydown(event);" onload="bodyLoad('<?php echo (is_object($connection) ? substr($connection->server_info, 0, 3) : ""); ?>');<?php echo (isset($_COOKIE["adminer_version"]) ? "" : " verifyVersion();"); ?>">
|
||||
<script type="text/javascript">
|
||||
document.body.className = document.body.className.replace(/(^|\s)nojs(\s|$)/, '$1js$2');
|
||||
document.body.className = document.body.className.replace(/ nojs/, ' js');
|
||||
</script>
|
||||
|
||||
<div id="content">
|
||||
<?php
|
||||
}
|
||||
if (isset($breadcrumb)) {
|
||||
if ($breadcrumb !== null) {
|
||||
$link = substr(preg_replace('~(username|db|ns)=[^&]*&~', '', ME), 0, -1);
|
||||
echo '<p id="breadcrumb"><a href="' . h($link ? $link : ".") . '">' . $drivers[DRIVER] . '</a> » ';
|
||||
$link = substr(preg_replace('~(db|ns)=[^&]*&~', '', ME), 0, -1);
|
||||
@@ -72,7 +65,6 @@ document.body.className = document.body.className.replace(/(^|\s)nojs(\s|$)/, '$
|
||||
echo "$title\n";
|
||||
}
|
||||
}
|
||||
echo "<span id='loader'></span>\n";
|
||||
echo "<h2>$title_all</h2>\n";
|
||||
restart_session();
|
||||
$uri = preg_replace('~^[^?]*~', '', $_SERVER["REQUEST_URI"]);
|
||||
@@ -97,8 +89,7 @@ document.body.className = document.body.className.replace(/(^|\s)nojs(\s|$)/, '$
|
||||
*/
|
||||
function page_footer($missing = "") {
|
||||
global $adminer;
|
||||
if (!is_ajax()) {
|
||||
?>
|
||||
?>
|
||||
</div>
|
||||
|
||||
<?php switch_lang(); ?>
|
||||
@@ -106,5 +97,4 @@ function page_footer($missing = "") {
|
||||
<?php $adminer->navigation($missing); ?>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
|
@@ -3,14 +3,16 @@
|
||||
* @param Min_Result
|
||||
* @param Min_DB connection to examine indexes
|
||||
* @param string base link for <th> fields
|
||||
* @param array
|
||||
* @return null
|
||||
*/
|
||||
function select($result, $connection2 = null, $href = "") {
|
||||
function select($result, $connection2 = null, $href = "", $orgtables = array()) {
|
||||
$links = array(); // colno => orgtable - create links from these columns
|
||||
$indexes = array(); // orgtable => array(column => colno) - primary keys
|
||||
$columns = array(); // orgtable => array(column => ) - not selected columns in primary key
|
||||
$blobs = array(); // colno => bool - display bytes for blobs
|
||||
$types = array(); // colno => type - display char in <code>
|
||||
$return = array(); // table => orgtable - mapping to use in EXPLAIN
|
||||
odd(''); // reset odd for each result
|
||||
for ($i=0; $row = $result->fetch_row(); $i++) {
|
||||
if (!$i) {
|
||||
@@ -21,6 +23,7 @@ function select($result, $connection2 = null, $href = "") {
|
||||
$name = $field->name;
|
||||
$orgtable = $field->orgtable;
|
||||
$orgname = $field->orgname;
|
||||
$return[$field->table] = $orgtable;
|
||||
if ($href) { // MySQL EXPLAIN
|
||||
$links[$j] = ($name == "table" ? "table=" : ($name == "possible_keys" ? "indexes=" : null));
|
||||
} elseif ($orgtable != "") {
|
||||
@@ -52,7 +55,7 @@ function select($result, $connection2 = null, $href = "") {
|
||||
}
|
||||
echo "<tr" . odd() . ">";
|
||||
foreach ($row as $key => $val) {
|
||||
if (!isset($val)) {
|
||||
if ($val === null) {
|
||||
$val = "<i>NULL</i>";
|
||||
} elseif ($blobs[$key] && !is_utf8($val)) {
|
||||
$val = "<i>" . lang('%d byte(s)', strlen($val)) . "</i>"; //! link to download
|
||||
@@ -66,7 +69,8 @@ function select($result, $connection2 = null, $href = "") {
|
||||
}
|
||||
if (isset($links[$key]) && !$columns[$links[$key]]) {
|
||||
if ($href) { // MySQL EXPLAIN
|
||||
$link = $links[$key] . urlencode($row[array_search("table=", $links)]);
|
||||
$table = $row[array_search("table=", $links)];
|
||||
$link = $links[$key] . urlencode($orgtables[$table] != "" ? $orgtables[$table] : $table);
|
||||
} else {
|
||||
$link = "edit=" . urlencode($links[$key]);
|
||||
foreach ($indexes[$links[$key]] as $col => $j) {
|
||||
@@ -79,6 +83,7 @@ function select($result, $connection2 = null, $href = "") {
|
||||
}
|
||||
}
|
||||
echo ($i ? "</table>" : "<p class='message'>" . lang('No rows.')) . "\n";
|
||||
return $return;
|
||||
}
|
||||
|
||||
/** Get referencable tables with single column primary key except self
|
||||
@@ -114,7 +119,7 @@ function textarea($name, $value, $rows = 10, $cols = 80) {
|
||||
echo "<textarea name='$name' rows='$rows' cols='$cols' class='sqlarea' spellcheck='false' wrap='off' onkeydown='return textareaKeydown(this, event);'>"; // spellcheck, wrap - not valid before HTML5
|
||||
if (is_array($value)) {
|
||||
foreach ($value as $val) { // not implode() to save memory
|
||||
echo h($val) . "\n\n\n";
|
||||
echo h($val[0]) . "\n\n\n"; // $val == array($query, $time)
|
||||
}
|
||||
} else {
|
||||
echo h($value);
|
||||
@@ -178,7 +183,7 @@ function process_type($field, $collate = "COLLATE") {
|
||||
*/
|
||||
function process_field($field, $type_field) {
|
||||
return array(
|
||||
idf_escape($field["field"]),
|
||||
idf_escape(trim($field["field"])),
|
||||
process_type($type_field),
|
||||
($field["null"] ? " NULL" : " NOT NULL"), // NULL for timestamp
|
||||
(isset($field["default"]) ? " DEFAULT " . (($field["type"] == "timestamp" && eregi('^CURRENT_TIMESTAMP$', $field["default"])) || ($field["type"] == "bit" && ereg("^([0-9]+|b'[0-1]+')\$", $field["default"])) ? $field["default"] : q($field["default"])) : ""),
|
||||
@@ -229,7 +234,7 @@ function edit_fields($fields, $collations, $type = "TABLE", $allowed = 0, $forei
|
||||
<td<?php echo ($_POST["defaults"] ? "" : " class='hidden'"); ?>><?php echo lang('Default values'); ?>
|
||||
<?php echo (support("comment") ? "<td" . ($comments ? "" : " class='hidden'") . ">" . lang('Comment') : ""); ?>
|
||||
<?php } ?>
|
||||
<td><?php echo "<input type='image' name='add[" . (support("move_col") ? 0 : count($fields)) . "]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>"; ?><script type="text/javascript">row_count = <?php echo count($fields); ?>;</script>
|
||||
<td><?php echo "<input type='image' class='icon' name='add[" . (support("move_col") ? 0 : count($fields)) . "]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>"; ?><script type="text/javascript">row_count = <?php echo count($fields); ?>;</script>
|
||||
</thead>
|
||||
<tbody onkeydown="return editingKeydown(event);">
|
||||
<?php
|
||||
@@ -251,11 +256,11 @@ function edit_fields($fields, $collations, $type = "TABLE", $allowed = 0, $forei
|
||||
<?php
|
||||
echo "<td>";
|
||||
echo (support("move_col") ?
|
||||
"<input type='image' name='add[$i]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "' onclick='return !editingAddRow(this, $allowed, 1);'> "
|
||||
. "<input type='image' name='up[$i]' src='../adminer/static/up.gif' alt='^' title='" . lang('Move up') . "'> "
|
||||
. "<input type='image' name='down[$i]' src='../adminer/static/down.gif' alt='v' title='" . lang('Move down') . "'> "
|
||||
"<input type='image' class='icon' name='add[$i]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "' onclick='return !editingAddRow(this, $allowed, 1);'> "
|
||||
. "<input type='image' class='icon' name='up[$i]' src='../adminer/static/up.gif' alt='^' title='" . lang('Move up') . "'> "
|
||||
. "<input type='image' class='icon' name='down[$i]' src='../adminer/static/down.gif' alt='v' title='" . lang('Move down') . "'> "
|
||||
: "");
|
||||
echo ($orig == "" || support("drop_col") ? "<input type='image' name='drop_col[$i]' src='../adminer/static/cross.gif' alt='x' title='" . lang('Remove') . "' onclick='return !editingRemoveRow(this);'>" : "");
|
||||
echo ($orig == "" || support("drop_col") ? "<input type='image' class='icon' name='drop_col[$i]' src='../adminer/static/cross.gif' alt='x' title='" . lang('Remove') . "' onclick='return !editingRemoveRow(this);'>" : "");
|
||||
echo "\n";
|
||||
}
|
||||
}
|
||||
@@ -361,8 +366,22 @@ function tar_file($filename, $contents) {
|
||||
$return = pack("a100a8a8a8a12a12", $filename, 644, 0, 0, decoct(strlen($contents)), decoct(time()));
|
||||
$checksum = 8*32; // space for checksum itself
|
||||
for ($i=0; $i < strlen($return); $i++) {
|
||||
$checksum += ord($return{$i});
|
||||
$checksum += ord($return[$i]);
|
||||
}
|
||||
$return .= sprintf("%06o", $checksum) . "\0 ";
|
||||
return $return . str_repeat("\0", 512 - strlen($return)) . $contents . str_repeat("\0", 511 - (strlen($contents) + 511) % 512);
|
||||
}
|
||||
|
||||
/** Get INI bytes value
|
||||
* @param string
|
||||
* @return int
|
||||
*/
|
||||
function ini_bytes($ini) {
|
||||
$val = ini_get($ini);
|
||||
switch (strtolower(substr($val, -1))) {
|
||||
case 'g': $val *= 1024; // no break
|
||||
case 'm': $val *= 1024; // no break
|
||||
case 'k': $val *= 1024;
|
||||
}
|
||||
return $val;
|
||||
}
|
||||
|
@@ -149,11 +149,10 @@ function html_select($name, $options, $value = "", $onchange = true) {
|
||||
|
||||
/** Get onclick confirmation
|
||||
* @param string JavaScript expression
|
||||
* @param bool stop event propagation
|
||||
* @return string
|
||||
*/
|
||||
function confirm($count = "", $stop = false) {
|
||||
return " onclick=\"" . ($stop ? "eventStop(event); " : "") . "return confirm('" . lang('Are you sure?') . ($count ? " (' + $count + ')" : "") . "');\"";
|
||||
function confirm($count = "") {
|
||||
return " onclick=\"return confirm('" . lang('Are you sure?') . ($count ? " (' + $count + ')" : "") . "');\"";
|
||||
}
|
||||
|
||||
/** Print header for hidden fieldset (close by </div></fieldset>)
|
||||
@@ -206,7 +205,7 @@ function json_row($key, $val = null) {
|
||||
echo "{";
|
||||
}
|
||||
if ($key != "") {
|
||||
echo ($first ? "" : ",") . "\n\t\"" . addcslashes($key, "\r\n\"\\") . '": ' . (isset($val) ? '"' . addcslashes($val, "\r\n\"\\") . '"' : 'undefined');
|
||||
echo ($first ? "" : ",") . "\n\t\"" . addcslashes($key, "\r\n\"\\") . '": ' . ($val !== null ? '"' . addcslashes($val, "\r\n\"\\") . '"' : 'undefined');
|
||||
$first = false;
|
||||
} else {
|
||||
echo "\n}\n";
|
||||
@@ -228,7 +227,7 @@ function ini_bool($ini) {
|
||||
*/
|
||||
function sid() {
|
||||
static $return;
|
||||
if (!isset($return)) { // restart_session() defines SID
|
||||
if ($return === null) { // restart_session() defines SID
|
||||
$return = (SID && !($_COOKIE && ini_bool("session.use_cookies"))); // $_COOKIE - don't pass SID with permanent login
|
||||
}
|
||||
return $return;
|
||||
@@ -282,20 +281,20 @@ function get_key_vals($query, $connection2 = null) {
|
||||
|
||||
/** Get all rows of result
|
||||
* @param string
|
||||
* @param Min_DB
|
||||
* @param string
|
||||
* @return array associative
|
||||
*/
|
||||
function get_rows($query, $connection2 = null, $error = "<p class='error'>") {
|
||||
global $connection;
|
||||
if (!is_object($connection2)) {
|
||||
$connection2 = $connection;
|
||||
}
|
||||
$conn = (is_object($connection2) ? $connection2 : $connection);
|
||||
$return = array();
|
||||
$result = $connection2->query($query);
|
||||
$result = $conn->query($query);
|
||||
if (is_object($result)) { // can return true
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
$return[] = $row;
|
||||
}
|
||||
} elseif (!$result && $connection->error && $error && defined("PAGE_HEADER")) {
|
||||
} elseif (!$result && !is_object($connection2) && $error && defined("PAGE_HEADER")) {
|
||||
echo $error . error() . "\n";
|
||||
}
|
||||
return $return;
|
||||
@@ -337,7 +336,7 @@ function where($where) {
|
||||
$return = array();
|
||||
foreach ((array) $where["where"] as $key => $val) {
|
||||
$return[] = idf_escape(bracket_escape($key, 1)) // 1 - back
|
||||
. (ereg('\\.', $val) || $jush == "mssql" ? " LIKE " . exact_value(addcslashes($val, "%_\\")) : " = " . exact_value($val)) // LIKE because of floats, but slow with ints, in MS SQL because of text
|
||||
. (($jush == "sql" && ereg('\\.', $val)) || $jush == "mssql" ? " LIKE " . exact_value(addcslashes($val, "%_\\")) : " = " . exact_value($val)) // LIKE because of floats, but slow with ints, in MS SQL because of text
|
||||
; //! enum and set
|
||||
}
|
||||
foreach ((array) $where["null"] as $key) {
|
||||
@@ -364,7 +363,7 @@ function where_check($val) {
|
||||
* @return string
|
||||
*/
|
||||
function where_link($i, $column, $value, $operator = "=") {
|
||||
return "&where%5B$i%5D%5Bcol%5D=" . urlencode($column) . "&where%5B$i%5D%5Bop%5D=" . urlencode((isset($value) ? $operator : "IS NULL")) . "&where%5B$i%5D%5Bval%5D=" . urlencode($value);
|
||||
return "&where%5B$i%5D%5Bcol%5D=" . urlencode($column) . "&where%5B$i%5D%5Bop%5D=" . urlencode(($value !== null ? $operator : "IS NULL")) . "&where%5B$i%5D%5Bval%5D=" . urlencode($value);
|
||||
}
|
||||
|
||||
/** Set cookie valid for 1 month
|
||||
@@ -418,15 +417,17 @@ function set_session($key, $val) {
|
||||
* @param string
|
||||
* @param string
|
||||
* @param string
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function auth_url($driver, $server, $username) {
|
||||
function auth_url($driver, $server, $username, $db = null) {
|
||||
global $drivers;
|
||||
preg_match('~([^?]*)\\??(.*)~', remove_from_uri(implode("|", array_keys($drivers)) . "|username|" . session_name()), $match);
|
||||
preg_match('~([^?]*)\\??(.*)~', remove_from_uri(implode("|", array_keys($drivers)) . "|username|" . ($db !== null ? "db|" : "") . session_name()), $match);
|
||||
return "$match[1]?"
|
||||
. (sid() ? SID . "&" : "")
|
||||
. ($driver != "server" || $server != "" ? urlencode($driver) . "=" . urlencode($server) . "&" : "")
|
||||
. "username=" . urlencode($username)
|
||||
. ($db != "" ? "&db=" . urlencode($db) : "")
|
||||
. ($match[2] ? "&$match[2]" : "")
|
||||
;
|
||||
}
|
||||
@@ -444,15 +445,15 @@ function is_ajax() {
|
||||
* @return null
|
||||
*/
|
||||
function redirect($location, $message = null) {
|
||||
if (isset($message)) {
|
||||
if ($message !== null) {
|
||||
restart_session();
|
||||
$_SESSION["messages"][preg_replace('~^[^?]*~', '', (isset($location) ? $location : $_SERVER["REQUEST_URI"]))][] = $message;
|
||||
$_SESSION["messages"][preg_replace('~^[^?]*~', '', ($location !== null ? $location : $_SERVER["REQUEST_URI"]))][] = $message;
|
||||
}
|
||||
if (isset($location)) {
|
||||
if ($location !== null) {
|
||||
if ($location == "") {
|
||||
$location = ".";
|
||||
}
|
||||
header((is_ajax() ? "X-AJAX-Redirect" : "Location") . ": $location");
|
||||
header("Location: $location");
|
||||
exit;
|
||||
}
|
||||
}
|
||||
@@ -492,7 +493,7 @@ function query_redirect($query, $location, $message, $redirect = true, $execute
|
||||
function queries($query = null) {
|
||||
global $connection;
|
||||
static $queries = array();
|
||||
if (!isset($query)) {
|
||||
if ($query === null) {
|
||||
// return executed queries without parameter
|
||||
return implode(";\n", $queries);
|
||||
}
|
||||
@@ -571,7 +572,7 @@ function get_file($key, $decompress = false) {
|
||||
* @return string
|
||||
*/
|
||||
function upload_error($error) {
|
||||
$max_size = ($error == UPLOAD_ERR_INI_SIZE ? ini_get("upload_max_filesize") : null); // post_max_size is checked in index.php
|
||||
$max_size = ($error == UPLOAD_ERR_INI_SIZE ? ini_get("upload_max_filesize") : 0); // post_max_size is checked in index.php
|
||||
return ($error ? lang('Unable to upload a file.') . ($max_size ? " " . lang('Maximum allowed file size is %sB.', $max_size) : "") : lang('File does not exist.'));
|
||||
}
|
||||
|
||||
@@ -668,7 +669,7 @@ function column_foreign_keys($table) {
|
||||
function enum_input($type, $attrs, $field, $value, $empty = null) {
|
||||
global $adminer;
|
||||
preg_match_all("~'((?:[^']|'')*)'~", $field["length"], $matches);
|
||||
$return = (isset($empty) ? "<label><input type='$type'$attrs value='$empty'" . ((is_array($value) ? in_array($empty, $value) : $value === 0) ? " checked" : "") . "><i>" . lang('empty') . "</i></label>" : "");
|
||||
$return = ($empty !== null ? "<label><input type='$type'$attrs value='$empty'" . ((is_array($value) ? in_array($empty, $value) : $value === 0) ? " checked" : "") . "><i>" . lang('empty') . "</i></label>" : "");
|
||||
foreach ($matches[1] as $i => $val) {
|
||||
$val = stripcslashes(str_replace("''", "'", $val));
|
||||
$checked = (is_int($value) ? $value == $i+1 : (is_array($value) ? in_array($i+1, $value) : $value === $val));
|
||||
@@ -705,7 +706,7 @@ function input($field, $value, $function) {
|
||||
}
|
||||
$onchange = ($first ? " onchange=\"var f = this.form['function[" . h(js_escape(bracket_escape($field["field"]))) . "]']; if ($first > f.selectedIndex) f.selectedIndex = $first;\"" : "");
|
||||
$attrs .= $onchange;
|
||||
echo (count($functions) > 1 ? html_select("function[$name]", $functions, !isset($function) || in_array($function, $functions) || isset($functions[$function]) ? $function : "", "functionChange(this);") : nbsp(reset($functions))) . '<td>';
|
||||
echo (count($functions) > 1 ? html_select("function[$name]", $functions, $function === null || in_array($function, $functions) || isset($functions[$function]) ? $function : "", "functionChange(this);") : nbsp(reset($functions))) . '<td>';
|
||||
$input = $adminer->editInput($_GET["edit"], $field, $attrs, $value); // usage in call is without a table
|
||||
if ($input != "") {
|
||||
echo $input;
|
||||
@@ -804,7 +805,7 @@ function dump_headers($identifier, $multi_table = false) {
|
||||
$return = $adminer->dumpHeaders($identifier, $multi_table);
|
||||
$output = $_POST["output"];
|
||||
if ($output != "text") {
|
||||
header("Content-Disposition: attachment; filename=" . friendly_url($identifier != "" ? $identifier : (SERVER != "" ? SERVER : "localhost")) . ".$return" . ($output != "file" && !ereg('[^0-9a-z]', $output) ? ".$output" : ""));
|
||||
header("Content-Disposition: attachment; filename=" . $adminer->dumpFilename($identifier) . ".$return" . ($output != "file" && !ereg('[^0-9a-z]', $output) ? ".$output" : ""));
|
||||
}
|
||||
session_write_close();
|
||||
return $return;
|
||||
|
@@ -14,17 +14,21 @@ $langs = array(
|
||||
'hu' => 'Magyar', // Borsos Szilárd (Borsosfi) - http://www.borsosfi.hu, info@borsosfi.hu
|
||||
'pl' => 'Polski', // Radosław Kowalewski - http://srsbiz.pl/
|
||||
'ca' => 'Català', // Joan Llosas
|
||||
'pt' => 'Português', // Gian Live - gian@live.com
|
||||
'pt' => 'Português', // Gian Live - gian@live.com, Davi Alexandre davi@davialexandre.com.br
|
||||
'sl' => 'Slovenski', // Matej Ferlan - www.itdinamik.com, matej.ferlan@itdinamik.com
|
||||
'lt' => 'Lietuvių', // Paulius Leščinskas - http://www.lescinskas.lt
|
||||
'tr' => 'Türkçe', // Bilgehan Korkmaz - turktron.com
|
||||
'ro' => 'Limba Română', // .nick .messing - dot.nick.dot.messing@gmail.com
|
||||
'id' => 'Bahasa Indonesia', // Ivan Lanin - http://ivan.lanin.org
|
||||
'ru' => 'Русский язык', // Maksim Izmaylov
|
||||
'uk' => 'Українська', // Valerii Kryzhov
|
||||
'zh' => '简体中文', // Mr. Lodar
|
||||
'zh-tw' => '繁體中文', // http://tzangms.com
|
||||
'ja' => '日本語', // Hitoshi Ozawa - http://sourceforge.jp/projects/oss-ja-jpn/releases/
|
||||
'ta' => 'தமிழ்', // G. Sampath Kumar, Chennai, India, sampathkumar11@gmail.com
|
||||
'bn' => 'বাংলা', // Dipak Kumar - dipak.ndc@gmail.com
|
||||
'ar' => 'العربية', // Y.M Amine - Algeria - nbr7@live.fr
|
||||
'fa' => 'فارسی', // mojtaba barghbani - Iran - mbarghbani@gmail.com
|
||||
);
|
||||
|
||||
/** Get current language
|
||||
@@ -42,7 +46,7 @@ function get_lang() {
|
||||
*/
|
||||
function lang($idf, $number = null) {
|
||||
global $LANG, $translations;
|
||||
$translation = $translations[$idf];
|
||||
$translation = (isset($translations[$idf]) ? $translations[$idf] : $idf);
|
||||
if (is_array($translation)) {
|
||||
$pos = ($number == 1 ? 0
|
||||
: ($LANG == 'cs' || $LANG == 'sk' ? ($number && $number < 5 ? 1 : 2) // different forms for 1, 2-4, other
|
||||
@@ -50,14 +54,18 @@ function lang($idf, $number = null) {
|
||||
: ($LANG == 'pl' ? ($number % 10 > 1 && $number % 10 < 5 && $number / 10 % 10 != 1 ? 1 : 2) // different forms for 1, 2-4, other
|
||||
: ($LANG == 'sl' ? ($number % 100 == 1 ? 0 : ($number % 100 == 2 ? 1 : ($number % 100 == 3 || $number % 100 == 4 ? 2 : 3))) // different forms for 1, 2, 3-4, other
|
||||
: ($LANG == 'lt' ? ($number % 10 == 1 && $number % 100 != 11 ? 0 : ($number % 10 > 1 && $number / 10 % 10 != 1 ? 1 : 2)) // different forms for 1, 12-19, other
|
||||
: ($LANG == 'ru' ? ($number % 10 == 1 && $number % 100 != 11 ? 0 : ($number % 10 > 1 && $number % 10 < 5 && $number / 10 % 10 != 1 ? 1 : 2)) // different forms for 1, 2-4, other
|
||||
: ($LANG == 'ru' || $LANG == 'uk' ? ($number % 10 == 1 && $number % 100 != 11 ? 0 : ($number % 10 > 1 && $number % 10 < 5 && $number / 10 % 10 != 1 ? 1 : 2)) // different forms for 1, 2-4, other
|
||||
: 1
|
||||
))))))); // http://www.gnu.org/software/gettext/manual/html_node/Plural-forms.html
|
||||
$translation = $translation[$pos];
|
||||
}
|
||||
$args = func_get_args();
|
||||
array_shift($args);
|
||||
return vsprintf((isset($translation) ? $translation : $idf), $args);
|
||||
$format = str_replace("%d", "%s", $translation);
|
||||
if ($format != $translation) {
|
||||
$args[0] = number_format($number, 0, ".", lang(','));
|
||||
}
|
||||
return vsprintf($format, $args);
|
||||
}
|
||||
|
||||
function switch_lang() {
|
||||
|
@@ -5,6 +5,11 @@ if (extension_loaded('pdo')) {
|
||||
var $_result, $server_info, $affected_rows, $error;
|
||||
|
||||
function __construct() {
|
||||
global $adminer;
|
||||
$pos = array_search("", $adminer->operators);
|
||||
if ($pos !== false) {
|
||||
unset($adminer->operators[$pos]);
|
||||
}
|
||||
}
|
||||
|
||||
function dsn($dsn, $username, $password, $exception_handler = 'auth_error') {
|
||||
@@ -45,7 +50,8 @@ if (extension_loaded('pdo')) {
|
||||
}
|
||||
|
||||
function next_result() {
|
||||
return $this->_result->nextRowset();
|
||||
$this->_result->_offset = 0;
|
||||
return @$this->_result->nextRowset(); // @ - PDO_PgSQL doesn't support it
|
||||
}
|
||||
|
||||
function result($query, $field = 0) {
|
||||
@@ -73,7 +79,7 @@ if (extension_loaded('pdo')) {
|
||||
$row = (object) $this->getColumnMeta($this->_offset++);
|
||||
$row->orgtable = $row->table;
|
||||
$row->orgname = $row->name;
|
||||
$row->charsetnr = (in_array("blob", $row->flags) ? 63 : 0);
|
||||
$row->charsetnr = (in_array("blob", (array) $row->flags) ? 63 : 0);
|
||||
return $row;
|
||||
}
|
||||
}
|
||||
|
@@ -1,2 +1,2 @@
|
||||
<?php
|
||||
$VERSION = "3.3.3";
|
||||
$VERSION = "3.4.0";
|
||||
|
@@ -268,6 +268,5 @@ $translations = array(
|
||||
'Copy' => 'نسخ',
|
||||
'Permanent link' => 'وصلة دائمة',
|
||||
'Edit all' => 'تعديل الكل',
|
||||
'Resend POST data?' => 'هل تود إعادة إرسال بيانات POST ؟',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
272
adminer/lang/bn.inc.php
Normal file
272
adminer/lang/bn.inc.php
Normal file
@@ -0,0 +1,272 @@
|
||||
<?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%s 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.' => array('কোয়্যারী সম্পাদন হয়েছে, %d সারি প্রভাবিত হয়েছে।', 'কোয়্যারী সম্পাদন হয়েছে, %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' => 'ডিফল্ট মান',
|
||||
'%d byte(s)' => array('%d বাইট', '%d বাইটসমূহ'),
|
||||
'No commands to execute.' => 'সম্পাদন করার মত কোন নির্দেশ নাই।',
|
||||
'Unable to upload a file.' => 'ফাইল আপলোড করা সম্ভব হচ্ছে না।',
|
||||
'File upload' => 'ফাইল আপলোড',
|
||||
'File uploads are disabled.' => 'ফাইল আপলোড নিষ্ক্রিয় করা আছে।',
|
||||
'Routine has been called, %d row(s) affected.' => array('রুটিন কল করা হয়েছে, %d টি সারি (সমূহ) প্রভাবিত হয়েছে।', 'রুটিন কল করা হয়েছে, %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 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.' => array('%d টি প্রসেস (সমূহ) বিনষ্ট করা হয়েছে।', '%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, %s PHP এক্সটেনশনের মধ্য দিয়ে',
|
||||
'%d row(s)' => array('%d সারি', '%d সারি সমূহ'),
|
||||
'Remove' => 'অপসারণ',
|
||||
'Are you sure?' => 'তুমি কি নিশ্চিত?',
|
||||
'Privileges' => 'প্রিভিলেজেস',
|
||||
'Create user' => 'ইউজার তৈরী করো',
|
||||
'User has been dropped.' => 'ইউজার মুছে ফেলা হয়েছে।',
|
||||
'User has been altered.' => 'ইউজার সম্পাদনা করা হয়েছে।',
|
||||
'User has been created.' => 'ইউজার তৈরী করা হয়েছে।',
|
||||
'Hashed' => 'হ্যাসড',
|
||||
'Column' => 'কলাম',
|
||||
'Routine' => 'রুটিন',
|
||||
'Grant' => 'গ্র্যান্ট',
|
||||
'Revoke' => 'রিভোক',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'খুব বড় POST ডাটা। ডাটা সংক্ষিপ্ত করো অথবা %s কনফিগারেশন নির্দেশ বৃদ্ধি করো',
|
||||
'Logged as: %s' => '%s হিসাবে লগড',
|
||||
'Move up' => 'উপরে স্থানান্তর',
|
||||
'Move down' => 'নীচে স্থানান্তর',
|
||||
'Functions' => 'ফাংশন সমূহ',
|
||||
'Aggregation' => 'মোট পরিমাণ',
|
||||
'Export' => 'এক্সপোর্ট',
|
||||
'Output' => 'আউটপুট',
|
||||
'open' => 'খোলা',
|
||||
'save' => 'সংরক্ষণ',
|
||||
'Format' => 'বিন্যাস',
|
||||
'Tables' => 'টেবিলসমূহ',
|
||||
'Data' => 'ডাটা',
|
||||
'Event has been dropped.' => 'ইভেন্ট মুছে ফেলা হয়েছে।',
|
||||
'Event has been altered.' => 'ইভেন্ট সম্পাদনা করা হয়েছে।',
|
||||
'Event has been created.' => 'ইভেন্ট তৈরী করা হয়েছে।',
|
||||
'Alter event' => 'ইভেন্ট সম্পাদনা করো',
|
||||
'Create event' => 'ইভেন্ট তৈরী করো',
|
||||
'At given time' => 'প্রদত্ত সময়ে',
|
||||
'Every' => 'প্রত্যেক',
|
||||
'Events' => 'ইভেন্টসমূহ',
|
||||
'Schedule' => 'সময়সূচি',
|
||||
'Start' => 'শুরু',
|
||||
'End' => 'সমাপ্তি',
|
||||
'Status' => 'স্ট্যাটাস',
|
||||
'On completion preserve' => 'সমাপ্ত হওয়ার পর সংরক্ষন করো',
|
||||
'Tables and views' => 'টেবিল এবং ভিউ সমূহ',
|
||||
'Data Length' => 'ডাটার দৈর্ঘ্য',
|
||||
'Index Length' => 'ইনডেক্স এর দৈর্ঘ্য',
|
||||
'Data Free' => 'তথ্য মুক্ত',
|
||||
'Collation' => 'কলোকেশন',
|
||||
'Analyze' => 'বিশ্লেষণ',
|
||||
'Optimize' => 'অপটিমাইজ',
|
||||
'Check' => 'পরীক্ষা',
|
||||
'Repair' => 'মেরামত',
|
||||
'Truncate' => 'ছাঁটাই',
|
||||
'Tables have been truncated.' => 'টেবিল ছাঁটাই করা হয়েছে',
|
||||
'Rows' => 'সারি',
|
||||
',' => ',',
|
||||
'Tables have been moved.' => 'টেবিল স্থানান্তর করা হয়েছে।',
|
||||
'Move to other database' => 'অন্য ডাটাবেজে স্থানান্তর করো',
|
||||
'Move' => 'স্থানান্তর করো',
|
||||
'Engine' => 'ইঞ্জিন',
|
||||
'Save and continue edit' => 'সংরক্ষণ করো এবং সম্পাদনা চালিয়ে যাও',
|
||||
'original' => 'প্রকৃত',
|
||||
'Tables have been dropped.' => 'টেবিলসমূহ মুছে ফেলা হয়েছে।',
|
||||
'%d item(s) have been affected.' => '%d টি বিষয়বস্তু প্রভাবিত হয়েছে',
|
||||
'whole result' => 'সম্পূর্ণ ফলাফল',
|
||||
'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.' => array('%d টি সারি (সমূহ) ইমপোর্ট করা হয়েছে।', '%d টি সারি (সমূহ) ইমপোর্ট করা হয়েছে।'),
|
||||
'anywhere' => 'যে কোন স্থানে',
|
||||
'Import' => 'ইমপোর্ট',
|
||||
'Stop on error' => 'ত্রুটি পেলে থেমে যাও',
|
||||
'%.3f s' => '%.3f s',
|
||||
'$1-$3-$5' => '$6.$4.$1',
|
||||
'[yyyy]-mm-dd' => 't.m.[jjjj]',
|
||||
'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.' => array('%d ইমেইল (গুলি) পাঠানো হয়েছে।', '%d ইমেইল (গুলি) পাঠানো হয়েছে।'),
|
||||
'Webserver file %s' => 'ওয়েবসার্ভার ফাইল %s',
|
||||
'File does not exist.' => 'ফাইলের কোন অস্তিত্ব নেই।',
|
||||
'%d in total' => 'সর্বমোটঃ %d টি',
|
||||
'Permanent login' => 'স্থায়ী লগইন',
|
||||
'Databases have been dropped.' => 'ডাটাবেজসমূহ মুছে ফেলা হয়েছে।',
|
||||
'Search data in tables' => 'টেবিলে খোঁজ করো',
|
||||
'schema' => 'স্কিমা',
|
||||
'Schema' => 'স্কিমা',
|
||||
'Alter schema' => 'স্কিমা পরিবর্তন করো',
|
||||
'Create schema' => 'স্কিমা তৈরী করো',
|
||||
'Schema has been dropped.' => 'স্কিমা মুছে ফেলা হয়েছে।',
|
||||
'Schema has been created.' => 'স্কিমা তৈরি করা হয়েছে।',
|
||||
'Schema has been altered.' => 'স্কিমা সম্পাদনা করা হয়েছে।',
|
||||
'Sequences' => 'অনুক্রম',
|
||||
'Create sequence' => 'অনুক্রম তৈরি করো',
|
||||
'Alter sequence' => 'অনুক্রম সম্পাদনা করো',
|
||||
'Sequence has been dropped.' => 'অনুক্রম মুছে ফেলা হয়েছে।',
|
||||
'Sequence has been created.' => 'অনুক্রম তৈরি করা হয়েছে।',
|
||||
'Sequence has been altered.' => 'অনুক্রম সম্পাদনা করা হয়েছে।',
|
||||
'User types' => 'ইউজারের টাইপ',
|
||||
'Create type' => 'টাইপ তৈরী করো',
|
||||
'Alter type' => 'টাইপ পরিবর্তন করো',
|
||||
'Type has been dropped.' => 'টাইপ মুছে ফেলা হয়েছে।',
|
||||
'Type has been created.' => 'টাইপ তৈরি করা হয়েছে।',
|
||||
'Double click on a value to modify it.' => 'কোন মানকে পরিবর্তন করতে এতে ডবল ক্লিক করো।',
|
||||
'Use edit link to modify this value.' => 'এই মান পরিবর্তনের জন্য সম্পাদনা লিঙ্ক ব্যবহার করো।',
|
||||
'last' => 'সর্বশেষ',
|
||||
'From server' => 'সার্ভার থেকে',
|
||||
'System' => 'সিস্টেম',
|
||||
'Select data' => 'তথ্য নির্বাচন করো',
|
||||
'Show structure' => 'গঠন দেখাও',
|
||||
'empty' => 'খালি',
|
||||
'Network' => 'নেটওয়ার্ক',
|
||||
'Geometry' => 'জ্যামিতি',
|
||||
'File exists.' => 'ফাইল রয়েছে।',
|
||||
'Attachments' => 'সংযুক্তি',
|
||||
'%d query(s) executed OK.' => array('SQL-কোয়্যারী সফলভাবে সম্পন্ন হয়েছে', '%d SQL-কোয়্যারীসমূহ সফলভাবে সম্পন্ন হয়েছে'),
|
||||
'Show only errors' => 'শুধুমাত্র ত্রুটি দেখাও',
|
||||
'Last page' => 'শেষ পাতা',
|
||||
'Refresh' => 'রিফ্রেশ',
|
||||
'Invalid schema.' => 'অবৈধ স্কিমা।',
|
||||
'Please use one of the extensions %s.' => 'কোন একটা এক্সটেনশন %s ব্যবহার করো।',
|
||||
'now' => 'এখন',
|
||||
'ltr' => 'ltr',
|
||||
'Tables have been copied.' => 'টেবিল কপি করা হয়েছে।',
|
||||
'Copy' => 'কপি',
|
||||
'Permanent link' => 'স্থায়ী লিংক',
|
||||
'Edit all' => 'সকল সম্পাদনা করো',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
@@ -268,6 +268,5 @@ $translations = array(
|
||||
'Copy' => 'Còpia',
|
||||
'Permanent link' => 'Enllaç permanent',
|
||||
'Edit all' => 'Edita-ho tot',
|
||||
'Resend POST data?' => 'Torna a enviar les dades POST?',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
@@ -13,11 +13,11 @@ $translations = array(
|
||||
'Invalid credentials.' => 'Neplatné přihlašovací údaje.',
|
||||
'Language' => 'Jazyk',
|
||||
'Invalid CSRF token. Send the form again.' => 'Neplatný token CSRF. Odešlete formulář znovu.',
|
||||
'No extension' => 'Žádná extenze',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Není dostupná žádná z podporovaných PHP extenzí (%s).',
|
||||
'No extension' => 'Žádné rozšíření',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Není dostupné žádné z podporovaných PHP rozšíření (%s).',
|
||||
'Session support must be enabled.' => 'Session proměnné musí být povolené.',
|
||||
'Session expired, please login again.' => 'Session vypršela, přihlašte se prosím znovu.',
|
||||
'%s version: %s through PHP extension %s' => 'Verze %s: %s přes PHP extenzi %s',
|
||||
'%s version: %s through PHP extension %s' => 'Verze %s: %s přes PHP rozšíření %s',
|
||||
'Refresh' => 'Obnovit',
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
@@ -147,6 +147,7 @@ $translations = array(
|
||||
'Create new table' => 'Vytvořit novou tabulku',
|
||||
'Table has been dropped.' => 'Tabulka byla odstraněna.',
|
||||
'Tables have been dropped.' => 'Tabulky byly odstraněny.',
|
||||
'Tables have been optimized.' => 'Tabulky byly optimalizovány.',
|
||||
'Table has been altered.' => 'Tabulka byla změněna.',
|
||||
'Table has been created.' => 'Tabulka byla vytvořena.',
|
||||
'Table name' => 'Název tabulky',
|
||||
@@ -226,6 +227,7 @@ $translations = array(
|
||||
'Limit' => 'Limit',
|
||||
'Text length' => 'Délka textů',
|
||||
'Action' => 'Akce',
|
||||
'Full table scan' => 'Průchod celé tabulky',
|
||||
'Unable to select the table' => 'Nepodařilo se vypsat tabulku',
|
||||
'No rows.' => 'Žádné řádky.',
|
||||
'%d row(s)' => array('%d řádek', '%d řádky', '%d řádků'),
|
||||
@@ -277,9 +279,6 @@ $translations = array(
|
||||
'Geometry' => 'Geometrie',
|
||||
'Relations' => 'Vztahy',
|
||||
|
||||
// reload confirmation in AJAX
|
||||
'Resend POST data?' => 'Znovu odeslat POST data?',
|
||||
|
||||
'Editor' => 'Editor',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$6.$4.$1',
|
||||
@@ -288,6 +287,8 @@ $translations = array(
|
||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'now' => 'teď',
|
||||
'yes' => 'ano',
|
||||
'no' => 'ne',
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'Soubor existuje.',
|
||||
|
@@ -268,6 +268,5 @@ $translations = array(
|
||||
'Copy' => 'Kopieren',
|
||||
'Permanent link' => 'Dauerhafter Link',
|
||||
'Edit all' => 'Alle ändern',
|
||||
'Resend POST data?' => 'POST data noch einmal senden ?',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
@@ -13,7 +13,7 @@ $translations = array(
|
||||
'Table has been altered.' => 'Tabla modificada.',
|
||||
'Table has been created.' => 'Tabla creada.',
|
||||
'Alter table' => 'Modifique estructura',
|
||||
'Create table' => 'Cree tabla',
|
||||
'Create table' => 'Crear tabla',
|
||||
'Table name' => 'Nombre de la tabla',
|
||||
'engine' => 'motor',
|
||||
'collation' => 'colación',
|
||||
@@ -104,7 +104,7 @@ $translations = array(
|
||||
'View has been altered.' => 'Vista modificada.',
|
||||
'View has been created.' => 'Vista creada.',
|
||||
'Alter view' => 'Modificar vista',
|
||||
'Create view' => 'Cear vista',
|
||||
'Create view' => 'Crear vista',
|
||||
'Name' => 'Nombre',
|
||||
'Process list' => 'Lista de procesos',
|
||||
'%d process(es) have been killed.' => array('%d proceso detenido.', '%d procesos detenidos.'),
|
||||
@@ -268,6 +268,5 @@ $translations = array(
|
||||
'Copy' => 'Copiar',
|
||||
'Permanent link' => 'Enlace permanente',
|
||||
'Edit all' => 'Editar todos',
|
||||
'Resend POST data?' => 'Volver a enviar POST data?',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
@@ -268,6 +268,5 @@ $translations = array(
|
||||
'Copy' => 'Kopeeri',
|
||||
'Permanent link' => 'Püsilink',
|
||||
'Edit all' => 'Muuda kõiki',
|
||||
'Resend POST data?' => 'Saada POST andmed uuesti?',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
317
adminer/lang/fa.inc.php
Normal file
317
adminer/lang/fa.inc.php
Normal file
@@ -0,0 +1,317 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
// label for database system selection (MySQL, SQLite, ...)
|
||||
'System' => 'سيستم',
|
||||
'Server' => 'سرور',
|
||||
'Username' => 'نام كاربري',
|
||||
'Password' => 'كلمه عبور',
|
||||
'Permanent login' => '',
|
||||
'Login' => 'ورود',
|
||||
'Logout' => 'خروج',
|
||||
'Logged as: %s' => 'ورود به عنوان: %s',
|
||||
'Logout successful.' => 'با موفقيت خارج شديد',
|
||||
'Invalid credentials.' => 'اعتبار سنجي نامعتبر',
|
||||
'Language' => 'زبان',
|
||||
'Invalid CSRF token. Send the form again.' => 'نامعتبر است. دوباره سعی کنید Token CSRF',
|
||||
'No extension' => 'پسوند نامعتبر',
|
||||
'None of the supported PHP extensions (%s) are available.' => ' پسوند پی اچ پی در دسترس نیست (%s) تعداد',
|
||||
'Session support must be enabled.' => 'پشتيباني از نشست بايستي فعال گردد',
|
||||
'Session expired, please login again.' => 'نشست پايان يافته، لطفا دوباره وارد شويد',
|
||||
'%s version: %s through PHP extension %s' => 'نسخه %s : %s توسعه پی اچ پی %s',
|
||||
'Refresh' => 'بازيابي',
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'rtl',
|
||||
|
||||
'Privileges' => 'امتيازات',
|
||||
'Create user' => 'ایجاد كاربر',
|
||||
'User has been dropped.' => 'كاربر حذف شد',
|
||||
'User has been altered.' => 'كاربر ويرايش گرديد',
|
||||
'User has been created.' => 'كاربر ايجاد شد',
|
||||
'Hashed' => 'به هم ريخته',
|
||||
'Column' => 'ستون',
|
||||
'Routine' => 'روتين',
|
||||
'Grant' => 'اعطا',
|
||||
'Revoke' => 'لغو كردن',
|
||||
|
||||
'Process list' => 'ليست فرآيند',
|
||||
'%d process(es) have been killed.' => '%d فرآيند متوقف شد',
|
||||
'Kill' => 'حذف فرآيند',
|
||||
|
||||
'Variables' => 'متغيرها',
|
||||
'Status' => 'وضعيت',
|
||||
|
||||
'SQL command' => 'دستور اس كيو ال',
|
||||
'%d query(s) executed OK.' => '%d كوئري اجرا شد',
|
||||
'Query executed OK, %d row(s) affected.' => 'كوئري اجرا شد. %d سطر تغيير كرد.',
|
||||
'No commands to execute.' => 'دستوري براي اجرا وجود ندارد',
|
||||
'Error in query' => 'خطا در كوئري',
|
||||
'Execute' => 'اجرا',
|
||||
'Stop on error' => 'توقف در خطا',
|
||||
'Show only errors' => 'فقط نمايش خطاها',
|
||||
// sprintf() format for time of the command
|
||||
'%.3f s' => '%.3f s',
|
||||
'History' => 'تاريخ',
|
||||
'Clear' => 'پاك كردن',
|
||||
'Edit all' => 'ويرايش همه',
|
||||
|
||||
'File upload' => 'بارگذاري فايل',
|
||||
'From server' => 'از سرور',
|
||||
'Webserver file %s' => '%s فايل وب سرور',
|
||||
'Run file' => 'نمايش فايل',
|
||||
'File does not exist.' => 'فايل وجود ندارد',
|
||||
'File uploads are disabled.' => 'بارگذاري غير فعال است',
|
||||
'Unable to upload a file.' => 'قادر به بارگذاري فايل نيستيد',
|
||||
'Maximum allowed file size is %sB.' => ' %sB حداكثر اندازه فايل',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'حجم داده ارسالي برزگ است. حجم داده كاهش دهيد و يا مقدار %s را در پيكربندي افزايش دهيد.',
|
||||
|
||||
'Export' => 'استخراج',
|
||||
'Dump' => 'خالي كردن',
|
||||
'Output' => 'خروجي',
|
||||
'open' => 'بازكردن',
|
||||
'save' => 'ذخيره',
|
||||
'Format' => 'حذف',
|
||||
'Data' => 'داده',
|
||||
|
||||
'Database' => 'پايگاه داده',
|
||||
'database' => 'پايگاه داده',
|
||||
'Use' => 'استفاده',
|
||||
'Select database' => 'انتخاب پايگاه داده',
|
||||
'Invalid database.' => 'پايگاه داده نامعتبر',
|
||||
'Create new database' => 'ایجاد پايگاه داده جديد',
|
||||
'Database has been dropped.' => 'پايگاه داده حذف شد',
|
||||
'Databases have been dropped.' => 'پايگاه دادها حذف شدند',
|
||||
'Database has been created.' => 'پايگاه داده ايجاد شد',
|
||||
'Database has been renamed.' => 'نام پايگاه داده تغيير كرد',
|
||||
'Database has been altered.' => 'پايگاه داده ويرايش شد',
|
||||
'Alter database' => 'ويرايش پايگاه داده',
|
||||
'Create database' => 'ایجاد پايگاه داده',
|
||||
'Database schema' => 'ساختار پايگاه داده',
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'ارتباط دائم',
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ' ',
|
||||
'Engine' => 'موتور',
|
||||
'Collation' => 'تطبیق',
|
||||
'Data Length' => 'طول داده',
|
||||
'Index Length' => 'طول ایندکس',
|
||||
'Data Free' => 'داده اختیاری',
|
||||
'Rows' => 'سطرها',
|
||||
'%d in total' => ' به طور کل %d ',
|
||||
'Analyze' => 'تحلیل',
|
||||
'Optimize' => 'بهینه سازی',
|
||||
'Check' => 'بررسی',
|
||||
'Repair' => 'تعمیر',
|
||||
'Truncate' => 'کوتاه کردن',
|
||||
'Tables have been truncated.' => 'جدولها بریده شدند',
|
||||
'Move to other database' => 'انتقال به یک پایگاه داده دیگر',
|
||||
'Move' => 'انتقال',
|
||||
'Tables have been moved.' => 'جدولها انتقال داده شدند',
|
||||
'Copy' => 'کپی کردن',
|
||||
'Tables have been copied.' => 'جدولها کپی شدند',
|
||||
|
||||
'Routines' => 'روالها',
|
||||
'Routine has been called, %d row(s) affected.' => array('روال فراخوانی شد %d سطر متاثر شد', 'روال فراخوانی شد %d سطر متاثر شد'),
|
||||
'Call' => 'صدا زدن',
|
||||
'Parameter name' => 'نام پارامتر',
|
||||
'Create procedure' => 'ایجاد زیربرنامه',
|
||||
'Create function' => 'ایجاد تابع',
|
||||
'Routine has been dropped.' => 'روال حذف شد',
|
||||
'Routine has been altered.' => 'روال ویرایش شد',
|
||||
'Routine has been created.' => 'روال ایجاد شد',
|
||||
'Alter function' => 'ویرایش تابع',
|
||||
'Alter procedure' => 'ویرایش زیربرنامه',
|
||||
'Return type' => 'برگرداندن نوع',
|
||||
|
||||
'Events' => 'رویدادها',
|
||||
'Event has been dropped.' => 'رویداد حذف شد',
|
||||
'Event has been altered.' => 'رویداد ویرایش شد',
|
||||
'Event has been created.' => 'رویداد ایجاد شد',
|
||||
'Alter event' => 'ویرایش رویداد',
|
||||
'Create event' => 'ایجاد رویداد',
|
||||
'At given time' => 'زمان معین',
|
||||
'Every' => 'همه',
|
||||
'Schedule' => 'زمانبندی',
|
||||
'Start' => 'آغاز',
|
||||
'End' => 'پایان',
|
||||
'On completion preserve' => 'تکمیل حفاظت فعال است',
|
||||
|
||||
'Tables' => 'جدولها',
|
||||
'Tables and views' => 'جدولها و نمایه ها',
|
||||
'Table' => 'جدول',
|
||||
'No tables.' => 'جدولی وجود ندارد',
|
||||
'Alter table' => 'ویرایش جدول',
|
||||
'Create table' => 'ایجاد جدول',
|
||||
'Create new table' => 'ایجاد جدول جدید',
|
||||
'Table has been dropped.' => 'جدول حذف شد',
|
||||
'Tables have been dropped.' => 'جدولها حذف شدند',
|
||||
'Table has been altered.' => 'جدول ویرایش شد',
|
||||
'Table has been created.' => 'جدول ایجاد شد',
|
||||
'Table name' => 'نام جدول',
|
||||
'Show structure' => 'نمایش ساختار',
|
||||
'engine' => 'موتور',
|
||||
'collation' => 'تطبیق',
|
||||
'Column name' => 'نام ستون',
|
||||
'Type' => 'نوع',
|
||||
'Length' => 'طول',
|
||||
'Auto Increment' => 'افزایش خودکار',
|
||||
'Options' => 'اختیارات',
|
||||
'Comment' => 'توضیح',
|
||||
'Default values' => 'مقادیر پیش فرض',
|
||||
'Drop' => 'حذف',
|
||||
'Are you sure?' => 'مطمئن هستید؟',
|
||||
'Move up' => 'انتقال به بالا',
|
||||
'Move down' => 'انتقال به پایین',
|
||||
'Remove' => 'حذف',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'حداکثر مجاز فیلدهای مجاز اشباع شد. لطفا %s و %s را کاهش دهید',
|
||||
|
||||
'Partition by' => 'بخشبندی توسط',
|
||||
'Partitions' => 'بخشبندیها',
|
||||
'Partition name' => 'نام بخش',
|
||||
'Values' => 'مقادیر',
|
||||
|
||||
'View' => 'نمایش',
|
||||
'View has been dropped.' => 'نمایش حذف شد',
|
||||
'View has been altered.' => 'نمایش ویرایش شد',
|
||||
'View has been created.' => 'نمایش ایجاد شد',
|
||||
'Alter view' => 'حذف نمایش',
|
||||
'Create view' => 'ایجاد نمایش',
|
||||
|
||||
'Indexes' => 'ایندکسها',
|
||||
'Indexes have been altered.' => 'ایندکسها ویرایش شد',
|
||||
'Alter indexes' => 'ویرایش ایندکسها',
|
||||
'Add next' => 'افرودن بعدی',
|
||||
'Index Type' => 'نوع ایندکس',
|
||||
'Column (length)' => 'ستون (طول)',
|
||||
|
||||
'Foreign keys' => 'کلیدهای خارجی',
|
||||
'Foreign key' => 'کلید خارجی',
|
||||
'Foreign key has been dropped.' => 'کلید خارجی حذف شد',
|
||||
'Foreign key has been altered.' => 'کلید خارجی ویرایش شد',
|
||||
'Foreign key has been created.' => 'کلید خارجی ایجاد شد',
|
||||
'Target table' => 'جدول هدف',
|
||||
'Change' => 'تغییر',
|
||||
'Source' => 'منبع',
|
||||
'Target' => 'هدف',
|
||||
'Add column' => 'افزودن ستون',
|
||||
'Alter' => 'ویرایش',
|
||||
'Add foreign key' => 'افزودن کلید خارجی',
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'داده مبدا و مقصد ستونها بایستی شبیه هم باشند',
|
||||
|
||||
'Triggers' => 'تریگرها',
|
||||
'Add trigger' => 'افزودن تریگر',
|
||||
'Trigger has been dropped.' => 'تریگر حذف شد',
|
||||
'Trigger has been altered.' => 'تریگر ویرایش شد',
|
||||
'Trigger has been created.' => 'تریگر ایجاد شد',
|
||||
'Alter trigger' => 'ویرایش تریگر',
|
||||
'Create trigger' => 'ایجاد تریگر',
|
||||
'Time' => 'زمان',
|
||||
'Event' => 'رویداد',
|
||||
'Name' => 'نام',
|
||||
|
||||
'select' => 'انتخاب',
|
||||
'Select' => 'انتخاب',
|
||||
'Select data' => 'انتخاب داده',
|
||||
'Functions' => 'توابع',
|
||||
'Aggregation' => 'تجمع',
|
||||
'Search' => 'جستجو',
|
||||
'anywhere' => 'هرکجا',
|
||||
'Search data in tables' => 'جستجوی داده در جدول',
|
||||
'Sort' => 'مرتب کردن',
|
||||
'descending' => 'نزولی',
|
||||
'Limit' => 'محدودیت',
|
||||
'Text length' => 'طول متن',
|
||||
'Action' => 'عملیات',
|
||||
'Unable to select the table' => 'قادر به انتخاب جدول نیستید',
|
||||
'No rows.' => 'سطری وجود ندارد',
|
||||
'%d row(s)' => array('%d سطر', '%d سطر'),
|
||||
'Page' => 'صفحه',
|
||||
'last' => 'آخری',
|
||||
'Last page' => 'صفحه آخر',
|
||||
'whole result' => 'همه نتایج',
|
||||
'%d byte(s)' => array('%d بایت', '%d بایت'),
|
||||
|
||||
'Import' => 'وارد کردن',
|
||||
'%d row(s) have been imported.' => array('%d سطر وارد شد', '%d سطر وارد شد'),
|
||||
|
||||
// in-place editing in select
|
||||
'Double click on a value to modify it.' => 'روی مقدار دوبار کلیک کنید تا آنرا ویرایش کنید',
|
||||
'Use edit link to modify this value.' => 'از لینک ویرایش برای ویرایش این مقدار استفاده کنید',
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => '%s آیتم درج شد',
|
||||
'Item has been deleted.' => 'آیتم حذف شد',
|
||||
'Item has been updated.' => 'آیتم بروز رسانی شد',
|
||||
'%d item(s) have been affected.' => array('%d آیتم متاثر شد', '%d آیتم متاثر شد'),
|
||||
'New item' => 'آیتم جدید',
|
||||
'original' => 'اصلی',
|
||||
// label for value '' in enum data type
|
||||
'empty' => 'خالی',
|
||||
'edit' => 'ویرایش',
|
||||
'Edit' => 'ویرایش',
|
||||
'Insert' => 'درج',
|
||||
'Save' => 'ذخیره',
|
||||
'Save and continue edit' => 'ذخیره و ادامه ویرایش',
|
||||
'Save and insert next' => 'ذخیره و درج بعدی',
|
||||
'Clone' => 'تکثیر',
|
||||
'Delete' => 'حذف',
|
||||
|
||||
'E-mail' => 'پست الکترونیک',
|
||||
'From' => 'فرستنده',
|
||||
'Subject' => 'موضوع',
|
||||
'Attachments' => 'پیوست ها',
|
||||
'Send' => 'ارسال',
|
||||
'%d e-mail(s) have been sent.' => array('%d ایمیل ارسال شد', '%d ایمیل ارسال شد'),
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'اعداد',
|
||||
'Date and time' => 'تاریخ و زمان',
|
||||
'Strings' => 'رشته ها',
|
||||
'Binary' => 'دودویی',
|
||||
'Lists' => 'لیستها',
|
||||
'Network' => 'شبکه',
|
||||
'Geometry' => 'هندسه',
|
||||
'Relations' => 'رابطه ها',
|
||||
|
||||
'Editor' => 'ویرایشگر',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$1-$3-$5',
|
||||
// hint for date format - use language equivalents for day, month and year shortcuts
|
||||
'[yyyy]-mm-dd' => '[yyyy]-mm-dd',
|
||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'now' => 'اکنون',
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'فایل موجود است',
|
||||
'Please use one of the extensions %s.' => 'لطفا یکی از پسوندهای زیر را انتخاب نمائید %s ',
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => 'ویرایش ساختار',
|
||||
'Create schema' => 'ایجاد ساختار',
|
||||
'Schema has been dropped.' => 'ساختار حذف شد',
|
||||
'Schema has been created.' => 'ساختار ایجاد شد',
|
||||
'Schema has been altered.' => 'ساختار ویرایش شد',
|
||||
'schema' => 'ساختار',
|
||||
'Schema' => 'ساختار',
|
||||
'Invalid schema.' => 'ساختار نامعتبر',
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'صف ها',
|
||||
'Create sequence' => 'ایجاد صف',
|
||||
'Sequence has been dropped.' => 'صف حذف شد',
|
||||
'Sequence has been created.' => 'صف ایجاد شد',
|
||||
'Sequence has been altered.' => 'صف ویرایش شد',
|
||||
'Alter sequence' => 'ویرایش صف',
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => 'انواع کاربر',
|
||||
'Create type' => 'ایجاد نوع',
|
||||
'Type has been dropped.' => 'نوع حذف شد',
|
||||
'Type has been created.' => 'نوع ایجاد شد',
|
||||
'Alter type' => 'ویرایش نوع',
|
||||
);
|
@@ -268,6 +268,5 @@ $translations = array(
|
||||
'Copy' => 'Copier',
|
||||
'Permanent link' => 'Lien permanent',
|
||||
'Edit all' => 'Tout modifier',
|
||||
'Resend POST data?' => 'Renvoyer les données POST ?',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
@@ -268,6 +268,5 @@ $translations = array(
|
||||
'Copy' => 'Másolás',
|
||||
'Permanent link' => 'Hivatkozás',
|
||||
'Edit all' => 'Összes szerkesztése',
|
||||
'Resend POST data?' => 'Újraküldi a POST adatokat?',
|
||||
'HH:MM:SS' => 'óó:pp:mm',
|
||||
);
|
||||
|
321
adminer/lang/id.inc.php
Normal file
321
adminer/lang/id.inc.php
Normal file
@@ -0,0 +1,321 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
// label for database system selection (MySQL, SQLite, ...)
|
||||
'System' => 'Sistem',
|
||||
'Server' => 'Server',
|
||||
'Username' => 'Pengguna',
|
||||
'Password' => 'Sandi',
|
||||
'Permanent login' => 'Masuk permanen',
|
||||
'Login' => 'Masuk',
|
||||
'Logout' => 'Keluar',
|
||||
'Logged as: %s' => 'Masuk sebagai: %s',
|
||||
'Logout successful.' => 'Berhasil keluar.',
|
||||
'Invalid credentials.' => 'Akses invalid.',
|
||||
'Language' => 'Bahasa',
|
||||
'Invalid CSRF token. Send the form again.' => 'Token CSRF invalid. Kirim ulang formulir.',
|
||||
'No extension' => 'Ekstensi tidak tersedia',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Ekstensi PHP yang didukung (%s) tidak tersedia.',
|
||||
'Session support must be enabled.' => 'Dukungan sesi harus aktif.',
|
||||
'Session expired, please login again.' => 'Sesi habis, silakan masuk lagi.',
|
||||
'%s version: %s through PHP extension %s' => 'Versi %s: %s dengan ekstensi PHP %s',
|
||||
'Refresh' => 'Segarkan',
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'ltr',
|
||||
|
||||
'Privileges' => 'Privilese',
|
||||
'Create user' => 'Buat pengguna',
|
||||
'User has been dropped.' => 'Pengguna berhasil dihapus.',
|
||||
'User has been altered.' => 'Pengguna berhasil diubah.',
|
||||
'User has been created.' => 'Pengguna berhasil dibuat.',
|
||||
'Hashed' => 'Hashed*',
|
||||
'Column' => 'Kolom',
|
||||
'Routine' => 'Rutin',
|
||||
'Grant' => 'Beri',
|
||||
'Revoke' => 'Tarik',
|
||||
|
||||
'Process list' => 'Daftar proses',
|
||||
'%d process(es) have been killed.' => '%d proses berhasil dihentikan.',
|
||||
'Kill' => 'Hentikan',
|
||||
|
||||
'Variables' => 'Variabel',
|
||||
'Status' => 'Status',
|
||||
|
||||
'SQL command' => 'Perintah SQL',
|
||||
'%d query(s) executed OK.' => '%d kueri berhasil dijalankan.',
|
||||
'Query executed OK, %d row(s) affected.' => 'Kueri berhasil, %d baris terpengaruh.',
|
||||
'No commands to execute.' => 'Tiada perintah untuk dijalankan.',
|
||||
'Error in query' => 'Kesalahan dalam kueri',
|
||||
'Execute' => 'Jalankan',
|
||||
'Stop on error' => 'Hentikan pada kesalahan',
|
||||
'Show only errors' => 'Hanya tampilkan kesalahan',
|
||||
// sprintf() format for time of the command
|
||||
'%.3f s' => '%.3f s',
|
||||
'History' => 'Riwayat',
|
||||
'Clear' => 'Bersihkan',
|
||||
'Edit all' => 'Edit semua',
|
||||
|
||||
'File upload' => 'Unggah berkas',
|
||||
'From server' => 'Dari server',
|
||||
'Webserver file %s' => 'Berkas server web %s',
|
||||
'Run file' => 'Jalankan berkas',
|
||||
'File does not exist.' => 'Berkas tidak ditemukan.',
|
||||
'File uploads are disabled.' => 'Pengunggahan berkas dimatikan.',
|
||||
'Unable to upload a file.' => 'Tidak dapat mengunggah berkas.',
|
||||
'Maximum allowed file size is %sB.' => 'Besar berkas yang diizinkan adalah %s bita.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Data POST terlalu besar. Kurangi data atau perbesar pengarah konfigurasi %s.',
|
||||
|
||||
'Export' => 'Ekspor',
|
||||
'Dump' => 'Ekspor',
|
||||
'Output' => 'Hasil',
|
||||
'open' => 'buka',
|
||||
'save' => 'simpan',
|
||||
'Format' => 'Format',
|
||||
'Data' => 'Data',
|
||||
|
||||
'Database' => 'Basis data',
|
||||
'database' => 'basis data',
|
||||
'Use' => 'Gunakan',
|
||||
'Select database' => 'Pilih basis data',
|
||||
'Invalid database.' => 'Basis data invalid.',
|
||||
'Create new database' => 'Buat basis data baru',
|
||||
'Database has been dropped.' => 'Basis data berhasil dihapus.',
|
||||
'Databases have been dropped.' => 'Basis data berhasil dihapus.',
|
||||
'Database has been created.' => 'Basis data berhasil dibuat.',
|
||||
'Database has been renamed.' => 'Basis data berhasil diganti nama.',
|
||||
'Database has been altered.' => 'Basis data berhasil diubah.',
|
||||
'Alter database' => 'Ubah basis data',
|
||||
'Create database' => 'Buat basis data',
|
||||
'Database schema' => 'Skema basis data',
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'Tautan permanen',
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => '.',
|
||||
'Engine' => 'Mesin',
|
||||
'Collation' => 'Kolasi',
|
||||
'Data Length' => 'Panjang Data',
|
||||
'Index Length' => 'Panjang Indeks',
|
||||
'Data Free' => 'Data Bebas',
|
||||
'Rows' => 'Baris',
|
||||
'%d in total' => '%d total',
|
||||
'Analyze' => 'Analisis',
|
||||
'Optimize' => 'Optimalkan',
|
||||
'Check' => 'Periksa',
|
||||
'Repair' => 'Perbaiki',
|
||||
'Truncate' => 'Kosongkan',
|
||||
'Tables have been truncated.' => 'Tabel berhasil dikosongkan.',
|
||||
'Move to other database' => 'Pindahkan ke basis data lain',
|
||||
'Move' => 'Pindahkan',
|
||||
'Tables have been moved.' => 'Tabel berhasil dipindahkan.',
|
||||
'Copy' => 'Salin',
|
||||
'Tables have been copied.' => 'Tabel berhasil disalin.',
|
||||
|
||||
'Routines' => 'Rutin',
|
||||
'Routine has been called, %d row(s) affected.' => array('Rutin telah dipanggil, %d baris terpengaruh.', 'Rutin telah dipanggil, %d baris terpengaruh'),
|
||||
'Call' => 'Panggilan',
|
||||
'Parameter name' => 'Nama paramater',
|
||||
'Create procedure' => 'Buat prosedur',
|
||||
'Create function' => 'Buat fungsi',
|
||||
'Routine has been dropped.' => 'Rutin berhasil dihapus.',
|
||||
'Routine has been altered.' => 'Rutin berhasil diubah.',
|
||||
'Routine has been created.' => 'Rutin berhasil dibuat.',
|
||||
'Alter function' => 'Ubah fungsi',
|
||||
'Alter procedure' => 'Ubah prosedur',
|
||||
'Return type' => 'Jenis balikan',
|
||||
|
||||
'Events' => 'Peristiwa',
|
||||
'Event has been dropped.' => 'Peristiwa berhasil dihapus.',
|
||||
'Event has been altered.' => 'Peristiwa berhasil diubah.',
|
||||
'Event has been created.' => 'Peristiwa berhasil dibuat.',
|
||||
'Alter event' => 'Ubah peristiwa',
|
||||
'Create event' => 'Buat peristiwa',
|
||||
'At given time' => 'Pada waktu tertentu',
|
||||
'Every' => 'Setiap',
|
||||
'Schedule' => 'Jadwal',
|
||||
'Start' => 'Mulai',
|
||||
'End' => 'Selesai',
|
||||
'On completion preserve' => 'Pertahankan saat selesai',
|
||||
|
||||
'Tables' => 'Tabel',
|
||||
'Tables and views' => 'Tabel dan tampilan',
|
||||
'Table' => 'Tabel',
|
||||
'No tables.' => 'Tiada tabel.',
|
||||
'Alter table' => 'Ubah tabel',
|
||||
'Create table' => 'Buat tabel',
|
||||
'Create new table' => 'Buat tabel baru',
|
||||
'Table has been dropped.' => 'Tabel berhasil dihapus.',
|
||||
'Tables have been dropped.' => 'Tabel berhasil dihapus.',
|
||||
'Tables have been optimized.' => 'Tabel berhasil dioptimalkan.',
|
||||
'Table has been altered.' => 'Tabel berhasil diubah.',
|
||||
'Table has been created.' => 'Tabel berhasil dibuat.',
|
||||
'Table name' => 'Nama tabel',
|
||||
'Show structure' => 'Lihat struktur',
|
||||
'engine' => 'mesin',
|
||||
'collation' => 'kolasi',
|
||||
'Column name' => 'Nama kolom',
|
||||
'Type' => 'Jenis',
|
||||
'Length' => 'Panjang',
|
||||
'Auto Increment' => 'Kenaikan Otomatis',
|
||||
'Options' => 'Opsi',
|
||||
'Comment' => 'Komentar',
|
||||
'Default values' => 'Nilai bawaan',
|
||||
'Drop' => 'Hapus',
|
||||
'Are you sure?' => 'Anda yakin',
|
||||
'Move up' => 'Naik',
|
||||
'Move down' => 'Turun',
|
||||
'Remove' => 'Hapus',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Jumlah ruas maksimum yang diizinkan dilewati. Harap naikkan %s dan %s.',
|
||||
|
||||
'Partition by' => 'Partisi menurut',
|
||||
'Partitions' => 'Partisi',
|
||||
'Partition name' => 'Nama partisi',
|
||||
'Values' => 'Nilai',
|
||||
|
||||
'View' => 'Tampilan',
|
||||
'View has been dropped.' => 'Tampilan berhasil dihapus.',
|
||||
'View has been altered.' => 'Tampilan berhasil diubah.',
|
||||
'View has been created.' => 'Tampilan berhasil dibuat.',
|
||||
'Alter view' => 'Ubah tampilan',
|
||||
'Create view' => 'Buat tampilan',
|
||||
|
||||
'Indexes' => 'Indeks',
|
||||
'Indexes have been altered.' => 'Indeks berhasil diubah.',
|
||||
'Alter indexes' => 'Ubah indeks',
|
||||
'Add next' => 'Tambah setelahnya',
|
||||
'Index Type' => 'Jenis Indeks',
|
||||
'Column (length)' => 'Kolom (panjang)',
|
||||
|
||||
'Foreign keys' => 'Kunci asing',
|
||||
'Foreign key' => 'Kunci asing',
|
||||
'Foreign key has been dropped.' => 'Kunci asing berhasil dihapus.',
|
||||
'Foreign key has been altered.' => 'Kunci asing berhasil diubah.',
|
||||
'Foreign key has been created.' => 'Kunci asing berhasil dibuat.',
|
||||
'Target table' => 'Tabel sasaran',
|
||||
'Change' => 'Ubah',
|
||||
'Source' => 'Sumber',
|
||||
'Target' => 'Sasaran',
|
||||
'Add column' => 'Tambah kolom',
|
||||
'Alter' => 'Ubah',
|
||||
'Add foreign key' => 'Tambah kunci asing',
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Kolom sumber dan sasaran harus memiliki jenis data yang sama. Kolom sasaran harus memiliki indeks dan data rujukan harus ada.',
|
||||
|
||||
'Triggers' => 'Picu',
|
||||
'Add trigger' => 'Tambah picu',
|
||||
'Trigger has been dropped.' => 'Picu berhasil dihapus.',
|
||||
'Trigger has been altered.' => 'Picu berhasil diubah.',
|
||||
'Trigger has been created.' => 'Picu berhasil dibuat.',
|
||||
'Alter trigger' => 'Ubah picu',
|
||||
'Create trigger' => 'Buat picu',
|
||||
'Time' => 'Waktu',
|
||||
'Event' => 'Peristiwa',
|
||||
'Name' => 'Nama',
|
||||
|
||||
'select' => 'pilih',
|
||||
'Select' => 'Pilih',
|
||||
'Select data' => 'Pilih data',
|
||||
'Functions' => 'Fungsi',
|
||||
'Aggregation' => 'Agregasi',
|
||||
'Search' => 'Cari',
|
||||
'anywhere' => 'di mana pun',
|
||||
'Search data in tables' => 'Cari data dalam tabel',
|
||||
'Sort' => 'Urutan',
|
||||
'descending' => 'menurun',
|
||||
'Limit' => 'Limit',
|
||||
'Text length' => 'Panjang teks',
|
||||
'Action' => 'Tindakan',
|
||||
'Full table scan' => 'Pindai tabel lengkap',
|
||||
'Unable to select the table' => 'Gagal memilih tabel',
|
||||
'No rows.' => 'Tiada baris.',
|
||||
'%d row(s)' => '%d baris',
|
||||
'Page' => 'Halaman',
|
||||
'last' => 'terakhir',
|
||||
'Last page' => 'Halaman terakhir',
|
||||
'whole result' => 'Seluruh hasil',
|
||||
'%d byte(s)' => '%d bita',
|
||||
|
||||
'Import' => 'Impor',
|
||||
'%d row(s) have been imported.' => '%d baris berhasil diimpor.',
|
||||
|
||||
// in-place editing in select
|
||||
'Double click on a value to modify it.' => 'Klik ganda suatu nilai untuk mengubahnya.',
|
||||
'Use edit link to modify this value.' => 'Gunakan tautan edit untuk mengubah nilai ini.',
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => 'Entri%s berhasil disisipkan.',
|
||||
'Item has been deleted.' => 'Entri berhasil dihapus.',
|
||||
'Item has been updated.' => 'Entri berhasil diperbarui.',
|
||||
'%d item(s) have been affected.' => '%d entri terpengaruh.',
|
||||
'New item' => 'Entri baru',
|
||||
'original' => 'orisinal',
|
||||
// label for value '' in enum data type
|
||||
'empty' => 'kosong',
|
||||
'edit' => 'edit',
|
||||
'Edit' => 'Edit',
|
||||
'Insert' => 'Sisipkan',
|
||||
'Save' => 'Simpan',
|
||||
'Save and continue edit' => 'Simpan dan terus mengedit',
|
||||
'Save and insert next' => 'Simpan dan sisipkan yang lain',
|
||||
'Clone' => 'Gandakan',
|
||||
'Delete' => 'Hapus',
|
||||
|
||||
'E-mail' => 'Surel',
|
||||
'From' => 'Dari',
|
||||
'Subject' => 'Subjek',
|
||||
'Attachments' => 'Lampiran',
|
||||
'Send' => 'Kirim',
|
||||
'%d e-mail(s) have been sent.' => array('%d surel berhasil dikirim.', '%d surel berhasil dikirim'),
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'Angka',
|
||||
'Date and time' => 'Tanggal dan waktu',
|
||||
'Strings' => 'String',
|
||||
'Binary' => 'Biner',
|
||||
'Lists' => 'Daftar',
|
||||
'Network' => 'Jaringan',
|
||||
'Geometry' => 'Geometri',
|
||||
'Relations' => 'Relasi',
|
||||
|
||||
'Editor' => 'Editor',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$1-$3-$5',
|
||||
// hint for date format - use language equivalents for day, month and year shortcuts
|
||||
'[yyyy]-mm-dd' => '[yyyy]-mm-dd',
|
||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'now' => 'now',
|
||||
'yes' => 'yes',
|
||||
'no' => 'no',
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'Berkas sudah ada.',
|
||||
'Please use one of the extensions %s.' => 'Harap gunakan salah satu ekstensi %s.',
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => 'Ubah skema',
|
||||
'Create schema' => 'Buat skema',
|
||||
'Schema has been dropped.' => 'Skema berhasil dihapus.',
|
||||
'Schema has been created.' => 'Skema berhasil dibuat.',
|
||||
'Schema has been altered.' => 'Skema berhasil diubah.',
|
||||
'schema' => 'skema',
|
||||
'Schema' => 'Skema',
|
||||
'Invalid schema.' => 'Skema invalid.',
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'Deret',
|
||||
'Create sequence' => 'Buat deret',
|
||||
'Sequence has been dropped.' => 'Deret berhasil dihapus.',
|
||||
'Sequence has been created.' => 'Deret berhasil dibuat.',
|
||||
'Sequence has been altered.' => 'Deret berhasil diubah.',
|
||||
'Alter sequence' => 'Ubah deret',
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => 'Jenis pengguna',
|
||||
'Create type' => 'Buat jenis',
|
||||
'Type has been dropped.' => 'Jenis berhasil dihapus.',
|
||||
'Type has been created.' => 'Jenis berhasil dibuat.',
|
||||
'Alter type' => 'Ubah jenis',
|
||||
);
|
@@ -268,6 +268,5 @@ $translations = array(
|
||||
'Copy' => 'Copia',
|
||||
'Permanent link' => 'Link permanente',
|
||||
'Edit all' => 'Modifica tutto',
|
||||
'Resend POST data?' => 'Reinvio i dati POST?',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
@@ -268,6 +268,5 @@ $translations = array(
|
||||
'Copy' => 'コピー',
|
||||
'Permanent link' => 'パーマネントリンク',
|
||||
'Edit all' => 'すべて編集',
|
||||
'Resend POST data?' => '再送信しますか?',
|
||||
'HH:MM:SS' => '時:分:秒',
|
||||
);
|
||||
|
@@ -277,9 +277,6 @@ $translations = array(
|
||||
'Geometry' => 'Geometrija',
|
||||
'Relations' => 'Ryšiai',
|
||||
|
||||
// reload confirmation in AJAX
|
||||
'Resend POST data?' => 'Persiųsti POST duomenis?',
|
||||
|
||||
'Editor' => 'Redaktorius',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$1-$3-$5',
|
||||
|
@@ -268,6 +268,5 @@ $translations = array(
|
||||
'Copy' => 'Kopieren',
|
||||
'Permanent link' => 'Permanente link',
|
||||
'Edit all' => 'Alles bewerken',
|
||||
'Resend POST data?' => 'POST data opnieuw verzenden',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
@@ -20,7 +20,7 @@ $translations = array(
|
||||
'%s version: %s through PHP extension %s' => 'Wersja %s: %s za pomocą %s',
|
||||
'Refresh' => 'Odśwież',
|
||||
|
||||
// text direction
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'ltr',
|
||||
|
||||
'Privileges' => 'Uprawnienia użytkowników',
|
||||
@@ -147,6 +147,7 @@ $translations = array(
|
||||
'Create new table' => 'Utwórz nową tabelę',
|
||||
'Table has been dropped.' => 'Tabela została usunięta.',
|
||||
'Tables have been dropped.' => 'Tabele zostały usunięte.',
|
||||
'Tables have been optimized.' => 'Tabele zostały zoptymalizowane.',
|
||||
'Table has been altered.' => 'Tabela została zmieniona.',
|
||||
'Table has been created.' => 'Tabela została utworzona.',
|
||||
'Table name' => 'Nazwa tabeli',
|
||||
@@ -277,9 +278,6 @@ $translations = array(
|
||||
'Geometry' => 'Geometria',
|
||||
'Relations' => 'Relacje',
|
||||
|
||||
// reload confirmation in AJAX
|
||||
'Resend POST data?' => 'Wysłać dane ponownie?',
|
||||
|
||||
'Editor' => 'Edytor',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$6.$4.$1',
|
||||
@@ -288,6 +286,8 @@ $translations = array(
|
||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'now' => 'teraz',
|
||||
'yes' => 'tak',
|
||||
'no' => 'nie',
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'Plik już istnieje.',
|
||||
|
@@ -4,7 +4,7 @@ $translations = array(
|
||||
'Logout successful.' => 'Saida bem sucedida.',
|
||||
'Invalid credentials.' => 'Identificação inválida.',
|
||||
'Server' => 'Servidor',
|
||||
'Username' => 'Usuario',
|
||||
'Username' => 'Usuário',
|
||||
'Password' => 'Senha',
|
||||
'Select database' => 'Selecionar Base de dados',
|
||||
'Invalid database.' => 'Base de dados inválida.',
|
||||
@@ -47,9 +47,9 @@ $translations = array(
|
||||
'Delete' => 'Apagar',
|
||||
'Database' => 'Base de dados',
|
||||
'Routines' => 'Procedimentos',
|
||||
'Indexes have been altered.' => 'Indices modificados.',
|
||||
'Indexes' => 'Indices',
|
||||
'Alter indexes' => 'Modificar indices',
|
||||
'Indexes have been altered.' => 'Índices modificados.',
|
||||
'Indexes' => 'Índices',
|
||||
'Alter indexes' => 'Modificar índices',
|
||||
'Add next' => 'Adicionar proximo',
|
||||
'Language' => 'Idioma',
|
||||
'Select' => 'Selecionar',
|
||||
@@ -62,7 +62,7 @@ $translations = array(
|
||||
'Action' => 'Ação',
|
||||
'edit' => 'modificar',
|
||||
'Page' => 'Página',
|
||||
'Query executed OK, %d row(s) affected.' => array('Consulta executada, %d registro afetados.', 'Consulta executada, %d registros afetados.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Consulta executada, %d registro afetado.', 'Consulta executada, %d registros afetados.'),
|
||||
'Error in query' => 'Erro na consulta',
|
||||
'Execute' => 'Executar',
|
||||
'Table' => 'Tabela',
|
||||
@@ -71,17 +71,17 @@ $translations = array(
|
||||
'View' => 'Visualizar',
|
||||
'Unable to select the table' => 'Não é possivel selecionar a Tabela',
|
||||
'Invalid CSRF token. Send the form again.' => 'Token CSRF inválido. Enviar o formulario novamente.',
|
||||
'Comment' => 'Comentario',
|
||||
'Comment' => 'Comentário',
|
||||
'Default values' => 'Valores predeterminados',
|
||||
'%d byte(s)' => array('%d byte', '%d bytes'),
|
||||
'No commands to execute.' => 'Nenhum comando para executar.',
|
||||
'Unable to upload a file.' => 'Não é possivel enviar o arquivo.',
|
||||
'Unable to upload a file.' => 'Não é possível enviar o arquivo.',
|
||||
'File upload' => 'Importar arquivo',
|
||||
'File uploads are disabled.' => 'Importação de arquivos desablilitado.',
|
||||
'File uploads are disabled.' => 'Importação de arquivos desablilitada.',
|
||||
'Routine has been called, %d row(s) affected.' => array('Consulta executada, %d registro afetado.', 'Consulta executada, %d registros afetados.'),
|
||||
'Call' => 'Chamar',
|
||||
'No extension' => 'Não ha extension',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Nenhuma das extensões PHP soportadas (%s) está disponivel.',
|
||||
'No extension' => 'Não há extension',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Nenhuma das extensões PHP suportadas (%s) está disponivel.',
|
||||
'Session support must be enabled.' => 'Devem estar habilitadas as sessões.',
|
||||
'Session expired, please login again.' => 'Sessão expirada, por favor entre sua Chave de novo.',
|
||||
'Text length' => 'Tamanho de texto',
|
||||
@@ -109,7 +109,7 @@ $translations = array(
|
||||
'Process list' => 'Lista de processos',
|
||||
'%d process(es) have been killed.' => array('%d processo terminado.', '%d processos terminados.'),
|
||||
'Kill' => 'Parar',
|
||||
'Parameter name' => 'Nome de Parametro',
|
||||
'Parameter name' => 'Nome de Parâmetro',
|
||||
'Database schema' => 'Esquema de Base de dados',
|
||||
'Create procedure' => 'Criar procedimento',
|
||||
'Create function' => 'Criar função',
|
||||
@@ -117,7 +117,7 @@ $translations = array(
|
||||
'Routine has been altered.' => 'Procedimento modificado.',
|
||||
'Routine has been created.' => 'Procedimento criado.',
|
||||
'Alter function' => 'Modificar Função',
|
||||
'Alter procedure' => 'Modificar procedimiento',
|
||||
'Alter procedure' => 'Modificar procedimento',
|
||||
'Return type' => 'Tipo de valor de regreso',
|
||||
'Add trigger' => 'Adicionar trigger',
|
||||
'Trigger has been dropped.' => 'Trigger eliminado.',
|
||||
@@ -131,11 +131,11 @@ $translations = array(
|
||||
'%d row(s)' => array('%d registro', '%d registros'),
|
||||
'Remove' => 'Remover',
|
||||
'Are you sure?' => 'Está seguro?',
|
||||
'Privileges' => 'Privilegios',
|
||||
'Create user' => 'Criar Usuario',
|
||||
'User has been dropped.' => 'Usuario eliminado.',
|
||||
'User has been altered.' => 'Usuario modificado.',
|
||||
'User has been created.' => 'Usuario criado.',
|
||||
'Privileges' => 'Privilégios',
|
||||
'Create user' => 'Criar Usuário',
|
||||
'User has been dropped.' => 'Usuário eliminado.',
|
||||
'User has been altered.' => 'Usuário modificado.',
|
||||
'User has been created.' => 'Usuário criado.',
|
||||
'Hashed' => 'Hash',
|
||||
'Column' => 'Coluna',
|
||||
'Routine' => 'Rotina',
|
||||
@@ -148,7 +148,7 @@ $translations = array(
|
||||
'Functions' => 'Funções',
|
||||
'Aggregation' => 'Adições',
|
||||
'Export' => 'Exportar',
|
||||
'Output' => 'Saida',
|
||||
'Output' => 'Saída',
|
||||
'open' => 'mostrar',
|
||||
'save' => 'salvas',
|
||||
'Format' => 'Formato',
|
||||
@@ -163,7 +163,7 @@ $translations = array(
|
||||
'Every' => 'Cada',
|
||||
'Events' => 'Eventos',
|
||||
'Schedule' => 'Agenda',
|
||||
'Start' => 'Inicio',
|
||||
'Start' => 'Início',
|
||||
'End' => 'Fim',
|
||||
'Status' => 'Estado',
|
||||
'On completion preserve' => 'Ao completar preservar',
|
||||
@@ -187,10 +187,10 @@ $translations = array(
|
||||
'Save and continue edit' => 'Salvar e continuar editando',
|
||||
'original' => 'original',
|
||||
'Tables have been dropped.' => 'Tabelas eliminadas.',
|
||||
'%d item(s) have been affected.' => array('%d ítem afetado.', '%d itens afetados.'),
|
||||
'%d item(s) have been affected.' => array('%d item afetado.', '%d itens afetados.'),
|
||||
'whole result' => 'resultado completo',
|
||||
'Clone' => 'Clonar',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Cantida máxima de campos permitidos excedidos. Por favor aumente %s y %s.',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Quantidade máxima de campos permitidos excedidos. Por favor aumente %s e %s.',
|
||||
'Partition by' => 'Particionar por',
|
||||
'Partitions' => 'Partições',
|
||||
'Partition name' => 'Nome da Partição',
|
||||
@@ -202,8 +202,8 @@ $translations = array(
|
||||
'%.3f s' => '%.3f s',
|
||||
'$1-$3-$5' => '$5/$3/$1',
|
||||
'[yyyy]-mm-dd' => 'dd/mm/[aaaa]',
|
||||
'History' => 'Historico',
|
||||
'Variables' => 'Variaveis',
|
||||
'History' => 'Histórico',
|
||||
'Variables' => 'Variáveis',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'As colunas de origen e destino devem ser do mesmo tipo, deve existir um índice entre as colunas de destino e o registro referenciado deve existir.',
|
||||
'Relations' => 'Relações',
|
||||
'Run file' => 'Executar Arquivo',
|
||||
@@ -212,7 +212,7 @@ $translations = array(
|
||||
'Numbers' => 'Números',
|
||||
'Date and time' => 'Data e hora',
|
||||
'Strings' => 'Cadena',
|
||||
'Binary' => 'Binario',
|
||||
'Binary' => 'Binário',
|
||||
'Lists' => 'Listas',
|
||||
'Editor' => 'Editor',
|
||||
'E-mail' => 'E-mail',
|
||||
@@ -233,18 +233,18 @@ $translations = array(
|
||||
'Schema has been dropped.' => 'Esquema eliminado.',
|
||||
'Schema has been created.' => 'Esquema criado.',
|
||||
'Schema has been altered.' => 'Esquema modificado.',
|
||||
'Sequences' => 'Sequencias',
|
||||
'Create sequence' => 'Criar sequencias',
|
||||
'Alter sequence' => 'Modificar sequencia',
|
||||
'Sequence has been dropped.' => 'Sequencia eliminada.',
|
||||
'Sequence has been created.' => 'Sequencia criada.',
|
||||
'Sequence has been altered.' => 'Sequencia modificada.',
|
||||
'User types' => 'Tipos definido pelo usuario',
|
||||
'Sequences' => 'Sequências',
|
||||
'Create sequence' => 'Criar sequências',
|
||||
'Alter sequence' => 'Modificar sequência',
|
||||
'Sequence has been dropped.' => 'Sequência eliminada.',
|
||||
'Sequence has been created.' => 'Sequência criada.',
|
||||
'Sequence has been altered.' => 'Sequência modificada.',
|
||||
'User types' => 'Tipos definido pelo usuário',
|
||||
'Create type' => 'Criar tipo',
|
||||
'Alter type' => 'Modificar tipo',
|
||||
'Type has been dropped.' => 'Tipo eliminado.',
|
||||
'Type has been created.' => 'Tipo criado.',
|
||||
'Double click on a value to modify it.' => 'Doble-clic sobre o valor para edita-lo.',
|
||||
'Double click on a value to modify it.' => 'Clique duas vezes sobre o valor para edita-lo.',
|
||||
'Use edit link to modify this value.' => 'Utilize o link modificar para alterar.',
|
||||
'last' => 'último',
|
||||
'From server' => 'Desde servidor',
|
||||
@@ -253,12 +253,12 @@ $translations = array(
|
||||
'Show structure' => 'Mostrar estrutura',
|
||||
'empty' => 'vazio',
|
||||
'Network' => 'Rede',
|
||||
'Geometry' => 'Geometría',
|
||||
'File exists.' => 'Arquivo ja existe.',
|
||||
'Geometry' => 'Geometria',
|
||||
'File exists.' => 'Arquivo já existe.',
|
||||
'Attachments' => 'Anexos',
|
||||
'%d query(s) executed OK.' => array('%d consulta sql executada corretamente.', '%d consulta sql executadas corretamente.'),
|
||||
'%d query(s) executed OK.' => array('%d consulta sql executada corretamente.', '%d consultas sql executadas corretamente.'),
|
||||
'Show only errors' => 'Mostrar somente erros',
|
||||
'Last page' => 'Ultima página',
|
||||
'Last page' => 'Última página',
|
||||
'Refresh' => 'Atualizar',
|
||||
'Invalid schema.' => 'Esquema inválido.',
|
||||
'Please use one of the extensions %s.' => 'Por favor use uma das extensões %s.',
|
||||
|
@@ -268,6 +268,5 @@ $translations = array(
|
||||
'Copy' => 'Copiază',
|
||||
'Permanent link' => 'Adresă permanentă',
|
||||
'Edit all' => 'Editează tot',
|
||||
'Resend POST data?' => 'Retrimite datele POST?',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
@@ -268,6 +268,5 @@ $translations = array(
|
||||
'Copy' => 'Копировать',
|
||||
'Permanent link' => 'Постоянная ссылка',
|
||||
'Edit all' => 'Редактировать всё',
|
||||
'Resend POST data?' => 'Еще раз послать данные POST запроса?',
|
||||
'HH:MM:SS' => 'ЧЧ:ММ:СС',
|
||||
);
|
||||
|
@@ -268,6 +268,5 @@ $translations = array(
|
||||
'Copy' => 'Kopírovať',
|
||||
'Permanent link' => 'Permanentný odkaz',
|
||||
'Edit all' => 'Upraviť všetko',
|
||||
'Resend POST data?' => 'Znovu poslať POST data?',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
@@ -138,7 +138,7 @@ $translations = array(
|
||||
'Routine' => 'ரொட்டீன்',
|
||||
'Grant' => 'அனுமதியளி',
|
||||
'Revoke' => 'இரத்துச்செய்',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'மிக அதிகமான POST தகவல். தகவலை குறைக்கவும் அல்லது %s வடிவமைப்பை (configuration directive) மாற்றவும்.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'மிக அதிகமான POST தகவல். தகவலை குறைக்கவும் அல்லது %s வடிவமைப்பை (configuration directive) மாற்றவும்.',
|
||||
'Logged as: %s' => 'பயனாளர்: %s',
|
||||
'Move up' => 'மேலே நகர்த்து',
|
||||
'Move down' => 'கீழே நகர்த்து',
|
||||
@@ -268,6 +268,5 @@ $translations = array(
|
||||
'Copy' => 'நகல்',
|
||||
'Permanent link' => 'நிரந்தர இணைப்பு',
|
||||
'Edit all' => 'அனைத்தையும் தொகு',
|
||||
'Resend POST data?' => 'POST data வை மீண்டும் அனுப்பவா?',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
320
adminer/lang/uk.inc.php
Normal file
320
adminer/lang/uk.inc.php
Normal file
@@ -0,0 +1,320 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
// label for database system selection (MySQL, SQLite, ...)
|
||||
'System' => 'Система Бази Даних',
|
||||
'Server' => 'Сервер',
|
||||
'Username' => 'Користувач',
|
||||
'Password' => 'Пароль',
|
||||
'Permanent login' => 'Пам\'ятати сесію',
|
||||
'Login' => 'Увійти',
|
||||
'Logout' => 'Вийти',
|
||||
'Logged as: %s' => 'Ви увійшли як: %s',
|
||||
'Logout successful.' => 'Ви вдало вийшли з системи.',
|
||||
'Invalid credentials.' => 'Неправильні дані входу.',
|
||||
'Language' => 'Мова',
|
||||
'Invalid CSRF token. Send the form again.' => 'Недійсний CSRF токен. Надішліть форму ще раз.',
|
||||
'No extension' => 'Нема розширень',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Жодне з PHP-розширень (%s), що підтримуються, не доступне.',
|
||||
'Session support must be enabled.' => 'Сесії повинні бути дозволені.',
|
||||
'Session expired, please login again.' => 'Сесія закінчилась, будь ласка, увійдіть в систему знову.',
|
||||
'%s version: %s through PHP extension %s' => 'Версія %s: %s з PHP-розширенням %s',
|
||||
'Refresh' => 'Оновити',
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'ltr',
|
||||
|
||||
'Privileges' => 'Привілеї',
|
||||
'Create user' => 'Створити користувача',
|
||||
'User has been dropped.' => 'Користувача було видалено.',
|
||||
'User has been altered.' => 'Користувача було змінено.',
|
||||
'User has been created.' => 'Користувача було створено.',
|
||||
'Hashed' => 'Хешовано',
|
||||
'Column' => 'Колонка',
|
||||
'Routine' => 'Процедура',
|
||||
'Grant' => 'Дозволити',
|
||||
'Revoke' => 'Заборонити',
|
||||
|
||||
'Process list' => 'Перелік процесів',
|
||||
'%d process(es) have been killed.' => array('Було завершено %d процес.', 'Було завершено %d процеси.', 'Було завершёно %d процесів.'),
|
||||
'Kill' => 'Завершити процес',
|
||||
|
||||
'Variables' => 'Змінні',
|
||||
'Status' => 'Статус',
|
||||
|
||||
'SQL command' => 'SQL запит',
|
||||
'%d query(s) executed OK.' => array('%d запит виконано успішно.', '%d запити виконано успішно.', '%d запитів виконано успішно.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Запит виконано успішно, змінено %d рядок.', 'Запит виконано успішно, змінено %d рядки.', 'Запит виконано успішно, змінено %d рядків.'),
|
||||
'No commands to execute.' => 'Нема запитів до виконання.',
|
||||
'Error in query' => 'Помилка в запиті',
|
||||
'Execute' => 'Виконати',
|
||||
'Stop on error' => 'Зупинитись при помилці',
|
||||
'Show only errors' => 'Показувати тільки помилки',
|
||||
// sprintf() format for time of the command
|
||||
'%.3f s' => '%.3f s',
|
||||
'History' => 'Історія',
|
||||
'Clear' => 'Очистити',
|
||||
'Edit all' => 'Редагувати все',
|
||||
|
||||
'File upload' => 'Завантажити файл',
|
||||
'From server' => 'З сервера',
|
||||
'Webserver file %s' => 'Файл %s на вебсервері',
|
||||
'Run file' => 'Запустити файл',
|
||||
'File does not exist.' => 'Файл не існує.',
|
||||
'File uploads are disabled.' => 'Завантаження файлів заборонене.',
|
||||
'Unable to upload a file.' => 'Неможливо завантажити файл.',
|
||||
'Maximum allowed file size is %sB.' => 'Максимально допустимий розмір файлу %sБ.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Занадто великий об\'єм POST-даних. Зменшіть об\'єм або збільшіть параметр директиви %s конфигурації.',
|
||||
|
||||
'Export' => 'Експорт',
|
||||
'Dump' => 'Дамп',
|
||||
'Output' => 'Вихідні дані',
|
||||
'open' => 'відкрити',
|
||||
'save' => 'зберегти',
|
||||
'Format' => 'Формат',
|
||||
'Data' => 'Дані',
|
||||
|
||||
'Database' => 'База даних',
|
||||
'database' => 'база даних',
|
||||
'Use' => 'Обрати',
|
||||
'Select database' => 'Обрати базу даних',
|
||||
'Invalid database.' => 'Погана база даних.',
|
||||
'Create new database' => 'Створити нову базу даних',
|
||||
'Database has been dropped.' => 'Базу даних було видалено.',
|
||||
'Databases have been dropped.' => 'Бази даних були видалені.',
|
||||
'Database has been created.' => 'Базу даних було створено.',
|
||||
'Database has been renamed.' => 'Базу даних було переіменовано.',
|
||||
'Database has been altered.' => 'Базу даних було змінено.',
|
||||
'Alter database' => 'Змінити базу даних',
|
||||
'Create database' => 'Створити базу даних',
|
||||
'Database schema' => 'Схема бази даних',
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'Постійне посилання',
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ' ',
|
||||
'Engine' => 'Рушій',
|
||||
'Collation' => 'Співставлення',
|
||||
'Data Length' => 'Об\'єм даних',
|
||||
'Index Length' => 'Об\'єм індексів',
|
||||
'Data Free' => 'Вільне місце',
|
||||
'Rows' => 'Рядків',
|
||||
'%d in total' => '%d всього',
|
||||
'Analyze' => 'Аналізувати',
|
||||
'Optimize' => 'Оптимізувати',
|
||||
'Check' => 'Перевірити',
|
||||
'Repair' => 'Виправити',
|
||||
'Truncate' => 'Очистити',
|
||||
'Tables have been truncated.' => 'Таблиці було очищено.',
|
||||
'Move to other database' => 'Перенести до іншої бази даних',
|
||||
'Move' => 'Перенести',
|
||||
'Tables have been moved.' => 'Таблиці було перенесено.',
|
||||
'Copy' => 'копіювати',
|
||||
'Tables have been copied.' => 'Таблиці було зкопійовано.',
|
||||
|
||||
'Routines' => 'Збережені процедури',
|
||||
'Routine has been called, %d row(s) affected.' => array('Була викликана процедура, %d запис було змінено.', 'Була викликана процедура, %d записи було змінено.', 'Була викликана процедура, %d записів було змінено.'),
|
||||
'Call' => 'Викликати',
|
||||
'Parameter name' => 'Назва параметра',
|
||||
'Create procedure' => 'Створити процедуру',
|
||||
'Create function' => 'Створити функцію',
|
||||
'Routine has been dropped.' => 'Процедуру було видалено.',
|
||||
'Routine has been altered.' => 'Процедуру було змінено.',
|
||||
'Routine has been created.' => 'Процедуру було створено.',
|
||||
'Alter function' => 'Змінити функцію',
|
||||
'Alter procedure' => 'Змінити процедуру',
|
||||
'Return type' => 'Тип, що повернеться',
|
||||
|
||||
'Events' => 'Події',
|
||||
'Event has been dropped.' => 'Подію було видалено.',
|
||||
'Event has been altered.' => 'Подію було змінено.',
|
||||
'Event has been created.' => 'Подію було створено.',
|
||||
'Alter event' => 'Змінити подію',
|
||||
'Create event' => 'Створити подію',
|
||||
'At given time' => 'В даний час',
|
||||
'Every' => 'Кожного',
|
||||
'Schedule' => 'Розклад',
|
||||
'Start' => 'Початок',
|
||||
'End' => 'Кінець',
|
||||
'On completion preserve' => 'Після завершення зберегти',
|
||||
|
||||
'Tables' => 'Таблиці',
|
||||
'Tables and views' => 'Таблиці і вигляди',
|
||||
'Table' => 'Таблиця',
|
||||
'No tables.' => 'Нема таблиць.',
|
||||
'Alter table' => 'Змінити таблицю',
|
||||
'Create table' => 'Створити таблицю',
|
||||
'Create new table' => 'Створити нову таблицю',
|
||||
'Table has been dropped.' => 'Таблицю було видалено.',
|
||||
'Tables have been dropped.' => 'Таблиці були видалені.',
|
||||
'Tables have been optimized.' => 'Таблиці були оптимізовані.',
|
||||
'Table has been altered.' => 'Таблица була змінена.',
|
||||
'Table has been created.' => 'Таблиця була створена.',
|
||||
'Table name' => 'Назва таблиці',
|
||||
'Show structure' => 'Показати структуру',
|
||||
'engine' => 'рушій',
|
||||
'collation' => 'співставлення',
|
||||
'Column name' => 'Назва стовпця',
|
||||
'Type' => 'Тип',
|
||||
'Length' => 'Довжина',
|
||||
'Auto Increment' => 'Автоматичне збільшення',
|
||||
'Options' => 'Опції',
|
||||
'Comment' => 'Коментарі',
|
||||
'Default values' => 'Значення за замовчуванням',
|
||||
'Drop' => 'Видалити',
|
||||
'Are you sure?' => 'Ви впевнені?',
|
||||
'Move up' => 'Пересунути вгору',
|
||||
'Move down' => 'Пересунути вниз',
|
||||
'Remove' => 'Видалити',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Досягнута максимальна кількість доступних полів. Будь ласка, збільшіть %s і %s.',
|
||||
|
||||
'Partition by' => 'Розділити по',
|
||||
'Partitions' => 'Розділи',
|
||||
'Partition name' => 'Назва розділу',
|
||||
'Values' => 'Значення',
|
||||
|
||||
'View' => 'Вигляд',
|
||||
'View has been dropped.' => 'Вигляд було видалено.',
|
||||
'View has been altered.' => 'Вигляд було змінено.',
|
||||
'View has been created.' => 'Вигляд було створено.',
|
||||
'Alter view' => 'Змінити вигляд',
|
||||
'Create view' => 'Створити вигляд',
|
||||
|
||||
'Indexes' => 'Індекси',
|
||||
'Indexes have been altered.' => 'Індексування було змінено.',
|
||||
'Alter indexes' => 'Змінити індексування',
|
||||
'Add next' => 'Додати ще',
|
||||
'Index Type' => 'Тип індексу',
|
||||
'Column (length)' => 'Стовпець (довжина)',
|
||||
|
||||
'Foreign keys' => 'Зовнішні ключі',
|
||||
'Foreign key' => 'Зовнішній ключ',
|
||||
'Foreign key has been dropped.' => 'Зовнішній ключ було видалено.',
|
||||
'Foreign key has been altered.' => 'Зовнішній ключ було змінено.',
|
||||
'Foreign key has been created.' => 'Зовнішній ключ було створено.',
|
||||
'Target table' => 'Цільова таблиця',
|
||||
'Change' => 'Змінити',
|
||||
'Source' => 'Джерело',
|
||||
'Target' => 'Ціль',
|
||||
'Add column' => 'Додати стовпець',
|
||||
'Alter' => 'Змінити',
|
||||
'Add foreign key' => 'Додати зовнішній ключ',
|
||||
'ON DELETE' => 'ПРИ ВИДАЛЕННІ',
|
||||
'ON UPDATE' => 'ПРИ ЗМІНІ',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Стовпці повинні мати той самий тип даних, цільові стовпці повинні бути проіндексовані і дані, на які посилаються повинні існувати.',
|
||||
|
||||
'Triggers' => 'Тригери',
|
||||
'Add trigger' => 'Додати тригер',
|
||||
'Trigger has been dropped.' => 'Тригер було видалено.',
|
||||
'Trigger has been altered.' => 'Тригер було змінено.',
|
||||
'Trigger has been created.' => 'Тригер було створено.',
|
||||
'Alter trigger' => 'Змінити тригер',
|
||||
'Create trigger' => 'Створити тригер',
|
||||
'Time' => 'Час',
|
||||
'Event' => 'Подія',
|
||||
'Name' => 'Назва',
|
||||
|
||||
'select' => 'вибрати',
|
||||
'Select' => 'Вибрати',
|
||||
'Select data' => 'Вибрати дані',
|
||||
'Functions' => 'Функції',
|
||||
'Aggregation' => 'Агрегація',
|
||||
'Search' => 'Пошук',
|
||||
'anywhere' => 'будь-де',
|
||||
'Search data in tables' => 'Шукати дані в таблицях',
|
||||
'Sort' => 'Сортувати',
|
||||
'descending' => 'по спаданню',
|
||||
'Limit' => 'Обмеження',
|
||||
'Text length' => 'Довжина тексту',
|
||||
'Action' => 'Дія',
|
||||
'Unable to select the table' => 'Неможливо вибрати таблицю',
|
||||
'No rows.' => 'Нема рядків.',
|
||||
'%d row(s)' => array('%d рядок', '%d рядки', '%d рядків'),
|
||||
'Page' => 'Сторінка',
|
||||
'last' => 'остання',
|
||||
'Last page' => 'Остання сторінка',
|
||||
'whole result' => 'весь результат',
|
||||
'%d byte(s)' => array('%d байт', '%d байта', '%d байтів'),
|
||||
|
||||
'Import' => 'Імпортувати',
|
||||
'%d row(s) have been imported.' => array('%d рядок було імпортовано.', '%d рядки було імпортовано.', '%d рядків було імпортовано.'),
|
||||
|
||||
// in-place editing in select
|
||||
'Double click on a value to modify it.' => 'Двічі клікніть на значенні щоб змінити його.',
|
||||
'Use edit link to modify this value.' => 'Використовуйте посилання щоб змінити це значення.',
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => 'Запис%s було вставлено.',
|
||||
'Item has been deleted.' => 'Запис було видалено.',
|
||||
'Item has been updated.' => 'Запис було змінено.',
|
||||
'%d item(s) have been affected.' => array('Було змінено %d запис.', 'Було змінено %d записи.', 'Було змінено %d записів.'),
|
||||
'New item' => 'Новий запис',
|
||||
'original' => 'початковий',
|
||||
// label for value '' in enum data type
|
||||
'empty' => 'порожньо',
|
||||
'edit' => 'редагувати',
|
||||
'Edit' => 'Редагувати',
|
||||
'Insert' => 'Вставити',
|
||||
'Save' => 'Зберегти',
|
||||
'Save and continue edit' => 'Зберегти і продовжити редагування',
|
||||
'Save and insert next' => 'Зберегти і вставити знову',
|
||||
'Clone' => 'Клонувати',
|
||||
'Delete' => 'Видалити',
|
||||
|
||||
'E-mail' => 'E-mail',
|
||||
'From' => 'Від',
|
||||
'Subject' => 'Заголовок',
|
||||
'Attachments' => 'Додатки',
|
||||
'Send' => 'Надіслати',
|
||||
'%d e-mail(s) have been sent.' => array('Було надіслано %d повідомлення.', 'Було надіслано %d повідомлення.', 'Було надіслано %d повідомлень.'),
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'Числа',
|
||||
'Date and time' => 'Дата і час',
|
||||
'Strings' => 'Радки',
|
||||
'Binary' => 'Двійкові',
|
||||
'Lists' => 'Списки',
|
||||
'Network' => 'Мережа',
|
||||
'Geometry' => 'Геометрія',
|
||||
'Relations' => 'Зв\'язки',
|
||||
|
||||
'Editor' => 'Редактор',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$5.$3.$1',
|
||||
// hint for date format - use language equivalents for day, month and year shortcuts
|
||||
'[yyyy]-mm-dd' => 'дд.мм.[рррр]',
|
||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
||||
'HH:MM:SS' => 'ГГ:ХХ:СС',
|
||||
'now' => 'зараз',
|
||||
'yes' => 'так',
|
||||
'no' => 'ні',
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'Файл існує.',
|
||||
'Please use one of the extensions %s.' => 'Будь ласка, використовуйте одне з розширень %s.',
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => 'Змінити схему',
|
||||
'Create schema' => 'Створити схему',
|
||||
'Schema has been dropped.' => 'Схему було видалено.',
|
||||
'Schema has been created.' => 'Схему було створено.',
|
||||
'Schema has been altered.' => 'Схему було змінено.',
|
||||
'schema' => 'схема',
|
||||
'Schema' => 'Схема',
|
||||
'Invalid schema.' => 'Невірна схема.',
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'Послідовності',
|
||||
'Create sequence' => 'Створити послідовність',
|
||||
'Sequence has been dropped.' => 'Послідовність було видалено.',
|
||||
'Sequence has been created.' => 'Послідовність було створено.',
|
||||
'Sequence has been altered.' => 'Послідовність було змінено.',
|
||||
'Alter sequence' => 'Змінити послідовність',
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => 'Типи користувачів',
|
||||
'Create type' => 'Створити тип',
|
||||
'Type has been dropped.' => 'Тип було видалено.',
|
||||
'Type has been created.' => 'Тип було створено.',
|
||||
'Alter type' => 'Змінити тип',
|
||||
);
|
321
adminer/lang/xx.inc.php
Normal file
321
adminer/lang/xx.inc.php
Normal file
@@ -0,0 +1,321 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
// label for database system selection (MySQL, SQLite, ...)
|
||||
'System' => 'xx',
|
||||
'Server' => 'xx',
|
||||
'Username' => 'xx',
|
||||
'Password' => 'xx',
|
||||
'Permanent login' => 'xx',
|
||||
'Login' => 'xx',
|
||||
'Logout' => 'xx',
|
||||
'Logged as: %s' => 'xx',
|
||||
'Logout successful.' => 'xx',
|
||||
'Invalid credentials.' => 'xx',
|
||||
'Language' => 'xx',
|
||||
'Invalid CSRF token. Send the form again.' => 'xx',
|
||||
'No extension' => 'xx',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'xx',
|
||||
'Session support must be enabled.' => 'xx',
|
||||
'Session expired, please login again.' => 'xx',
|
||||
'%s version: %s through PHP extension %s' => 'xx',
|
||||
'Refresh' => 'xx',
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'xx',
|
||||
|
||||
'Privileges' => 'xx',
|
||||
'Create user' => 'xx',
|
||||
'User has been dropped.' => 'xx',
|
||||
'User has been altered.' => 'xx',
|
||||
'User has been created.' => 'xx',
|
||||
'Hashed' => 'xx',
|
||||
'Column' => 'xx',
|
||||
'Routine' => 'xx',
|
||||
'Grant' => 'xx',
|
||||
'Revoke' => 'xx',
|
||||
|
||||
'Process list' => 'xx',
|
||||
'%d process(es) have been killed.' => array('xx', 'xx'),
|
||||
'Kill' => 'xx',
|
||||
|
||||
'Variables' => 'xx',
|
||||
'Status' => 'xx',
|
||||
|
||||
'SQL command' => 'xx',
|
||||
'%d query(s) executed OK.' => array('xx', 'xx'),
|
||||
'Query executed OK, %d row(s) affected.' => array('xx', 'xx'),
|
||||
'No commands to execute.' => 'xx',
|
||||
'Error in query' => 'xx',
|
||||
'Execute' => 'xx',
|
||||
'Stop on error' => 'xx',
|
||||
'Show only errors' => 'xx',
|
||||
// sprintf() format for time of the command
|
||||
'%.3f s' => 'xx',
|
||||
'History' => 'xx',
|
||||
'Clear' => 'xx',
|
||||
'Edit all' => 'xx',
|
||||
|
||||
'File upload' => 'xx',
|
||||
'From server' => 'xx',
|
||||
'Webserver file %s' => 'xx',
|
||||
'Run file' => 'xx',
|
||||
'File does not exist.' => 'xx',
|
||||
'File uploads are disabled.' => 'xx',
|
||||
'Unable to upload a file.' => 'xx',
|
||||
'Maximum allowed file size is %sB.' => 'xx',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'xx',
|
||||
|
||||
'Export' => 'xx',
|
||||
'Dump' => 'xx',
|
||||
'Output' => 'xx',
|
||||
'open' => 'xx',
|
||||
'save' => 'xx',
|
||||
'Format' => 'xx',
|
||||
'Data' => 'xx',
|
||||
|
||||
'Database' => 'xx',
|
||||
'database' => 'xx',
|
||||
'Use' => 'xx',
|
||||
'Select database' => 'xx',
|
||||
'Invalid database.' => 'xx',
|
||||
'Create new database' => 'xx',
|
||||
'Database has been dropped.' => 'xx',
|
||||
'Databases have been dropped.' => 'xx',
|
||||
'Database has been created.' => 'xx',
|
||||
'Database has been renamed.' => 'xx',
|
||||
'Database has been altered.' => 'xx',
|
||||
'Alter database' => 'xx',
|
||||
'Create database' => 'xx',
|
||||
'Database schema' => 'xx',
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'xx',
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => 'xx',
|
||||
'Engine' => 'xx',
|
||||
'Collation' => 'xx',
|
||||
'Data Length' => 'xx',
|
||||
'Index Length' => 'xx',
|
||||
'Data Free' => 'xx',
|
||||
'Rows' => 'xx',
|
||||
'%d in total' => 'xx',
|
||||
'Analyze' => 'xx',
|
||||
'Optimize' => 'xx',
|
||||
'Check' => 'xx',
|
||||
'Repair' => 'xx',
|
||||
'Truncate' => 'xx',
|
||||
'Tables have been truncated.' => 'xx',
|
||||
'Move to other database' => 'xx',
|
||||
'Move' => 'xx',
|
||||
'Tables have been moved.' => 'xx',
|
||||
'Copy' => 'xx',
|
||||
'Tables have been copied.' => 'xx',
|
||||
|
||||
'Routines' => 'xx',
|
||||
'Routine has been called, %d row(s) affected.' => array('xx', 'xx'),
|
||||
'Call' => 'xx',
|
||||
'Parameter name' => 'xx',
|
||||
'Create procedure' => 'xx',
|
||||
'Create function' => 'xx',
|
||||
'Routine has been dropped.' => 'xx',
|
||||
'Routine has been altered.' => 'xx',
|
||||
'Routine has been created.' => 'xx',
|
||||
'Alter function' => 'xx',
|
||||
'Alter procedure' => 'xx',
|
||||
'Return type' => 'xx',
|
||||
|
||||
'Events' => 'xx',
|
||||
'Event has been dropped.' => 'xx',
|
||||
'Event has been altered.' => 'xx',
|
||||
'Event has been created.' => 'xx',
|
||||
'Alter event' => 'xx',
|
||||
'Create event' => 'xx',
|
||||
'At given time' => 'xx',
|
||||
'Every' => 'xx',
|
||||
'Schedule' => 'xx',
|
||||
'Start' => 'xx',
|
||||
'End' => 'xx',
|
||||
'On completion preserve' => 'xx',
|
||||
|
||||
'Tables' => 'xx',
|
||||
'Tables and views' => 'xx',
|
||||
'Table' => 'xx',
|
||||
'No tables.' => 'xx',
|
||||
'Alter table' => 'xx',
|
||||
'Create table' => 'xx',
|
||||
'Create new table' => 'xx',
|
||||
'Table has been dropped.' => 'xx',
|
||||
'Tables have been dropped.' => 'xx',
|
||||
'Tables have been optimized.' => 'xx',
|
||||
'Table has been altered.' => 'xx',
|
||||
'Table has been created.' => 'xx',
|
||||
'Table name' => 'xx',
|
||||
'Show structure' => 'xx',
|
||||
'engine' => 'xx',
|
||||
'collation' => 'xx',
|
||||
'Column name' => 'xx',
|
||||
'Type' => 'xx',
|
||||
'Length' => 'xx',
|
||||
'Auto Increment' => 'xx',
|
||||
'Options' => 'xx',
|
||||
'Comment' => 'xx',
|
||||
'Default values' => 'xx',
|
||||
'Drop' => 'xx',
|
||||
'Are you sure?' => 'xx',
|
||||
'Move up' => 'xx',
|
||||
'Move down' => 'xx',
|
||||
'Remove' => 'xx',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'xx',
|
||||
|
||||
'Partition by' => 'xx',
|
||||
'Partitions' => 'xx',
|
||||
'Partition name' => 'xx',
|
||||
'Values' => 'xx',
|
||||
|
||||
'View' => 'xx',
|
||||
'View has been dropped.' => 'xx',
|
||||
'View has been altered.' => 'xx',
|
||||
'View has been created.' => 'xx',
|
||||
'Alter view' => 'xx',
|
||||
'Create view' => 'xx',
|
||||
|
||||
'Indexes' => 'xx',
|
||||
'Indexes have been altered.' => 'xx',
|
||||
'Alter indexes' => 'xx',
|
||||
'Add next' => 'xx',
|
||||
'Index Type' => 'xx',
|
||||
'Column (length)' => 'xx',
|
||||
|
||||
'Foreign keys' => 'xx',
|
||||
'Foreign key' => 'xx',
|
||||
'Foreign key has been dropped.' => 'xx',
|
||||
'Foreign key has been altered.' => 'xx',
|
||||
'Foreign key has been created.' => 'xx',
|
||||
'Target table' => 'xx',
|
||||
'Change' => 'xx',
|
||||
'Source' => 'xx',
|
||||
'Target' => 'xx',
|
||||
'Add column' => 'xx',
|
||||
'Alter' => 'xx',
|
||||
'Add foreign key' => 'xx',
|
||||
'ON DELETE' => 'xx',
|
||||
'ON UPDATE' => 'xx',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'xx',
|
||||
|
||||
'Triggers' => 'xx',
|
||||
'Add trigger' => 'xx',
|
||||
'Trigger has been dropped.' => 'xx',
|
||||
'Trigger has been altered.' => 'xx',
|
||||
'Trigger has been created.' => 'xx',
|
||||
'Alter trigger' => 'xx',
|
||||
'Create trigger' => 'xx',
|
||||
'Time' => 'xx',
|
||||
'Event' => 'xx',
|
||||
'Name' => 'xx',
|
||||
|
||||
'select' => 'xx',
|
||||
'Select' => 'xx',
|
||||
'Select data' => 'xx',
|
||||
'Functions' => 'xx',
|
||||
'Aggregation' => 'xx',
|
||||
'Search' => 'xx',
|
||||
'anywhere' => 'xx',
|
||||
'Search data in tables' => 'xx',
|
||||
'Sort' => 'xx',
|
||||
'descending' => 'xx',
|
||||
'Limit' => 'xx',
|
||||
'Text length' => 'xx',
|
||||
'Action' => 'xx',
|
||||
'Full table scan' => 'xx',
|
||||
'Unable to select the table' => 'xx',
|
||||
'No rows.' => 'xx',
|
||||
'%d row(s)' => array('xx', 'xx'),
|
||||
'Page' => 'xx',
|
||||
'last' => 'xx',
|
||||
'Last page' => 'xx',
|
||||
'whole result' => 'xx',
|
||||
'%d byte(s)' => array('xx', 'xx'),
|
||||
|
||||
'Import' => 'xx',
|
||||
'%d row(s) have been imported.' => array('xx', 'xx'),
|
||||
|
||||
// in-place editing in select
|
||||
'Double click on a value to modify it.' => 'xx',
|
||||
'Use edit link to modify this value.' => 'xx',
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => 'xx',
|
||||
'Item has been deleted.' => 'xx',
|
||||
'Item has been updated.' => 'xx',
|
||||
'%d item(s) have been affected.' => array('xx', 'xx'),
|
||||
'New item' => 'xx',
|
||||
'original' => 'xx',
|
||||
// label for value '' in enum data type
|
||||
'empty' => 'xx',
|
||||
'edit' => 'xx',
|
||||
'Edit' => 'xx',
|
||||
'Insert' => 'xx',
|
||||
'Save' => 'xx',
|
||||
'Save and continue edit' => 'xx',
|
||||
'Save and insert next' => 'xx',
|
||||
'Clone' => 'xx',
|
||||
'Delete' => 'xx',
|
||||
|
||||
'E-mail' => 'xx',
|
||||
'From' => 'xx',
|
||||
'Subject' => 'xx',
|
||||
'Attachments' => 'xx',
|
||||
'Send' => 'xx',
|
||||
'%d e-mail(s) have been sent.' => array('xx', 'xx'),
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'xx',
|
||||
'Date and time' => 'xx',
|
||||
'Strings' => 'xx',
|
||||
'Binary' => 'xx',
|
||||
'Lists' => 'xx',
|
||||
'Network' => 'xx',
|
||||
'Geometry' => 'xx',
|
||||
'Relations' => 'xx',
|
||||
|
||||
'Editor' => 'xx',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => 'xx',
|
||||
// hint for date format - use language equivalents for day, month and year shortcuts
|
||||
'[yyyy]-mm-dd' => 'xx',
|
||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
||||
'HH:MM:SS' => 'xx',
|
||||
'now' => 'xx',
|
||||
'yes' => 'xx',
|
||||
'no' => 'xx',
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'xx',
|
||||
'Please use one of the extensions %s.' => 'xx',
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => 'xx',
|
||||
'Create schema' => 'xx',
|
||||
'Schema has been dropped.' => 'xx',
|
||||
'Schema has been created.' => 'xx',
|
||||
'Schema has been altered.' => 'xx',
|
||||
'schema' => 'xx',
|
||||
'Schema' => 'xx',
|
||||
'Invalid schema.' => 'xx',
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'xx',
|
||||
'Create sequence' => 'xx',
|
||||
'Sequence has been dropped.' => 'xx',
|
||||
'Sequence has been created.' => 'xx',
|
||||
'Sequence has been altered.' => 'xx',
|
||||
'Alter sequence' => 'xx',
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => 'xx',
|
||||
'Create type' => 'xx',
|
||||
'Type has been dropped.' => 'xx',
|
||||
'Type has been created.' => 'xx',
|
||||
'Alter type' => 'xx',
|
||||
);
|
@@ -268,6 +268,5 @@ $translations = array(
|
||||
'Copy' => '複製',
|
||||
'Permanent link' => '永久鏈接',
|
||||
'Edit all' => '編輯全部',
|
||||
'Resend POST data?' => '重新發送表單資料?',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
@@ -268,6 +268,5 @@ $translations = array(
|
||||
'Copy' => '复制',
|
||||
'Permanent link' => '固定链接',
|
||||
'Edit all' => '编辑全部',
|
||||
'Resend POST data?' => '重新发送 POST 数据?',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
@@ -10,6 +10,7 @@ function adminer_object() {
|
||||
|
||||
$plugins = array(
|
||||
// specify enabled plugins here
|
||||
new AdminerDatabaseHide(array('information_schema')),
|
||||
new AdminerDumpZip,
|
||||
new AdminerDumpXml,
|
||||
//~ new AdminerSqlLog("past-" . rtrim(`git describe --tags --abbrev=0`) . ".sql"),
|
||||
|
@@ -15,7 +15,7 @@ if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"] && !$_POST["up"]
|
||||
}
|
||||
$dropped = drop_create(
|
||||
"DROP $routine " . idf_escape($PROCEDURE),
|
||||
"CREATE $routine " . idf_escape($_POST["name"]) . " (" . implode(", ", $set) . ")" . (isset($_GET["function"]) ? " RETURNS" . process_type($_POST["returns"], "CHARACTER SET") : "") . (in_array($_POST["language"], $routine_languages) ? " LANGUAGE $_POST[language]" : "") . rtrim("\n$_POST[definition]", ";") . ";",
|
||||
"CREATE $routine " . idf_escape(trim($_POST["name"])) . " (" . implode(", ", $set) . ")" . (isset($_GET["function"]) ? " RETURNS" . process_type($_POST["returns"], "CHARACTER SET") : "") . (in_array($_POST["language"], $routine_languages) ? " LANGUAGE $_POST[language]" : "") . rtrim("\n$_POST[definition]", ";") . ";",
|
||||
substr(ME, 0, -1),
|
||||
lang('Routine has been dropped.'),
|
||||
lang('Routine has been altered.'),
|
||||
|
@@ -23,7 +23,13 @@ foreach (process_list() as $i => $row) {
|
||||
}
|
||||
echo "<tr" . odd() . ">" . (support("kill") ? "<td>" . checkbox("kill[]", $row["Id"], 0) : "");
|
||||
foreach ($row as $key => $val) {
|
||||
echo "<td>" . (($jush == "sql" ? $key == "Info" && $val != "" : $key == "current_query" && $val != "<IDLE>") ? "<code class='jush-$jush'>" . shorten_utf8($val, 100, "</code>") . ' <a href="' . h(ME . ($row["db"] != "" ? "db=" . urlencode($row["db"]) . "&" : "") . "sql=" . urlencode($val)) . '">' . lang('Edit') . '</a>' : nbsp($val));
|
||||
echo "<td>" . (
|
||||
($jush == "sql" && $key == "Info" && $row["Command"] == "Query" && $val != "") ||
|
||||
($jush == "pgsql" && $key == "current_query" && $val != "<IDLE>") ||
|
||||
($jush == "oracle" && $key == "sql_text" && $val != "")
|
||||
? "<code class='jush-$jush'>" . shorten_utf8($val, 100, "</code>") . ' <a href="' . h(ME . ($row["db"] != "" ? "db=" . urlencode($row["db"]) . "&" : "") . "sql=" . urlencode($val)) . '">' . lang('Edit') . '</a>'
|
||||
: nbsp($val)
|
||||
);
|
||||
}
|
||||
echo "\n";
|
||||
}
|
||||
|
@@ -49,10 +49,10 @@ foreach (table_status() as $table_status) {
|
||||
}
|
||||
|
||||
?>
|
||||
<div id="schema" style="height: <?php echo $top; ?>em;">
|
||||
<div id="schema" style="height: <?php echo $top; ?>em;" onselectstart="return false;">
|
||||
<script type="text/javascript">
|
||||
tablePos = {<?php echo implode(",", $table_pos_js) . "\n"; ?>};
|
||||
em = document.getElementById('schema').offsetHeight / <?php echo $top; ?>;
|
||||
var tablePos = {<?php echo implode(",", $table_pos_js) . "\n"; ?>};
|
||||
var em = document.getElementById('schema').offsetHeight / <?php echo $top; ?>;
|
||||
document.onmousemove = schemaMousemove;
|
||||
document.onmouseup = function (ev) {
|
||||
schemaMouseup(ev, '<?php echo js_escape(DB); ?>');
|
||||
@@ -61,17 +61,17 @@ document.onmouseup = function (ev) {
|
||||
<?php
|
||||
foreach ($schema as $name => $table) {
|
||||
echo "<div class='table' style='top: " . $table["pos"][0] . "em; left: " . $table["pos"][1] . "em;' onmousedown='schemaMousedown(this, event);'>";
|
||||
echo '<a href="' . h(ME) . 'table=' . urlencode($name) . '"><b>' . h($name) . "</b></a><br>\n";
|
||||
echo '<a href="' . h(ME) . 'table=' . urlencode($name) . '"><b>' . h($name) . "</b></a>";
|
||||
foreach ($table["fields"] as $field) {
|
||||
$val = '<span' . type_class($field["type"]) . ' title="' . h($field["full_type"] . ($field["null"] ? " NULL" : '')) . '">' . h($field["field"]) . '</span>';
|
||||
echo ($field["primary"] ? "<i>$val</i>" : $val) . "<br>\n";
|
||||
echo "<br>" . ($field["primary"] ? "<i>$val</i>" : $val);
|
||||
}
|
||||
foreach ((array) $table["references"] as $target_name => $refs) {
|
||||
foreach ($refs as $left => $ref) {
|
||||
$left1 = $left - $table_pos[$name][1];
|
||||
$i = 0;
|
||||
foreach ($ref[0] as $source) {
|
||||
echo "<div class='references' title='" . h($target_name) . "' id='refs$left-" . ($i++) . "' style='left: $left1" . "em; top: " . $table["fields"][$source]["pos"] . "em; padding-top: .5em;'><div style='border-top: 1px solid Gray; width: " . (-$left1) . "em;'></div></div>\n";
|
||||
echo "\n<div class='references' title='" . h($target_name) . "' id='refs$left-" . ($i++) . "' style='left: $left1" . "em; top: " . $table["fields"][$source]["pos"] . "em; padding-top: .5em;'><div style='border-top: 1px solid Gray; width: " . (-$left1) . "em;'></div></div>";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -80,11 +80,11 @@ foreach ($schema as $name => $table) {
|
||||
$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/static/arrow.gif) no-repeat right center;'><div style='height: .5em; border-bottom: 1px solid Gray; width: " . (-$left1) . "em;'></div></div>\n";
|
||||
echo "\n<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>";
|
||||
}
|
||||
}
|
||||
}
|
||||
echo "</div>\n";
|
||||
echo "\n</div>\n";
|
||||
}
|
||||
foreach ($schema as $name => $table) {
|
||||
foreach ((array) $table["references"] as $target_name => $refs) {
|
||||
|
@@ -4,11 +4,12 @@ if ($_POST && !$error) {
|
||||
if ($_POST["drop"]) {
|
||||
query_redirect("DROP SCHEMA " . idf_escape($_GET["ns"]), $link, lang('Schema has been dropped.'));
|
||||
} else {
|
||||
$link .= urlencode($_POST["name"]);
|
||||
$name = trim($_POST["name"]);
|
||||
$link .= urlencode($name);
|
||||
if ($_GET["ns"] == "") {
|
||||
query_redirect("CREATE SCHEMA " . idf_escape($_POST["name"]), $link, lang('Schema has been created.'));
|
||||
} elseif ($_GET["ns"] != $_POST["name"]) {
|
||||
query_redirect("ALTER SCHEMA " . idf_escape($_GET["ns"]) . " RENAME TO " . idf_escape($_POST["name"]), $link, lang('Schema has been altered.')); //! sp_rename in MS SQL
|
||||
query_redirect("CREATE SCHEMA " . idf_escape($name), $link, lang('Schema has been created.'));
|
||||
} elseif ($_GET["ns"] != $name) {
|
||||
query_redirect("ALTER SCHEMA " . idf_escape($_GET["ns"]) . " RENAME TO " . idf_escape($name), $link, lang('Schema has been altered.')); //! sp_rename in MS SQL
|
||||
} else {
|
||||
redirect($link);
|
||||
}
|
||||
@@ -24,7 +25,8 @@ if (!$row) {
|
||||
?>
|
||||
|
||||
<form action="" method="post">
|
||||
<p><input name="name" value="<?php echo h($row["name"]); ?>">
|
||||
<p><input id="name" name="name" value="<?php echo h($row["name"]); ?>">
|
||||
<script type='text/javascript'>document.getElementById('name').focus();</script>
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||
<?php
|
||||
if ($_GET["ns"] != "") {
|
||||
|
@@ -13,8 +13,12 @@ if ($_GET["script"] == "db") {
|
||||
foreach ($sums + array("Auto_increment" => 0, "Rows" => 0) as $key => $val) {
|
||||
if ($table_status[$key] != "") {
|
||||
$val = number_format($table_status[$key], 0, '.', lang(','));
|
||||
json_row("$key-$id", ($key == "Rows" && $table_status["Engine"] == "InnoDB" && $val ? "~ $val" : $val));
|
||||
json_row("$key-$id", ($key == "Rows" && $val && (
|
||||
$table_status["Engine"] == "InnoDB" || // MySQL InnoDB
|
||||
$table_status["Engine"] == "table" // PostgreSQL table reltype
|
||||
) ? "~ $val" : $val));
|
||||
if (isset($sums[$key])) {
|
||||
// ignore innodb_file_per_table because it is not active for tables created before it was enabled
|
||||
$sums[$key] += ($table_status["Engine"] != "InnoDB" || $key != "Data_free" ? $table_status[$key] : 0);
|
||||
}
|
||||
} elseif (array_key_exists($key, $table_status)) {
|
||||
@@ -28,7 +32,7 @@ if ($_GET["script"] == "db") {
|
||||
}
|
||||
json_row("");
|
||||
} else { // connect
|
||||
foreach (count_tables(get_databases()) as $db => $val) {
|
||||
foreach (count_tables($adminer->databases()) as $db => $val) {
|
||||
json_row("tables-" . js_escape($db), $val);
|
||||
}
|
||||
json_row("");
|
||||
|
@@ -209,7 +209,7 @@ if (!$columns) {
|
||||
$adminer->selectOrderPrint($order, $columns, $indexes);
|
||||
$adminer->selectLimitPrint($limit);
|
||||
$adminer->selectLengthPrint($text_length);
|
||||
$adminer->selectActionPrint();
|
||||
$adminer->selectActionPrint($indexes);
|
||||
echo "</form>\n";
|
||||
|
||||
$page = $_GET["page"];
|
||||
@@ -265,9 +265,9 @@ if (!$columns) {
|
||||
$rank++;
|
||||
$names[$key] = $name;
|
||||
$column = idf_escape($key);
|
||||
echo '<th><a href="' . h(remove_from_uri('(order|desc)[^=]*|page') . '&order%5B0%5D=' . urlencode($key)
|
||||
. ($order[0] == $column || $order[0] == $key || (!$order && count($group) < count($select) && $group[0] == $column) ? '&desc%5B0%5D=1' : '') // $order[0] == $key - COUNT(*)
|
||||
) . '">' . (!$select || $val ? apply_sql_function($val["fun"], $name) : h(current($select))) . "</a>"; //! columns looking like functions
|
||||
$href = remove_from_uri('(order|desc)[^=]*|page') . '&order%5B0%5D=' . urlencode($key);
|
||||
echo '<th><a href="' . h($href) . '">' . (!$select || $val ? apply_sql_function($val["fun"], $name) : h(current($select))) . "</a>"; //! columns looking like functions
|
||||
echo "<a href='" . h("$href&desc%5B0%5D=1") . "' title='" . lang('descending') . "' class='text'> ↓</a>";
|
||||
}
|
||||
$functions[$key] = $val["fun"];
|
||||
next($select);
|
||||
@@ -286,7 +286,7 @@ if (!$columns) {
|
||||
$unique_array = unique_array($rows[$n], $indexes);
|
||||
$unique_idf = "";
|
||||
foreach ($unique_array as $key => $val) {
|
||||
$unique_idf .= "&" . (isset($val) ? urlencode("where[" . bracket_escape($key) . "]") . "=" . urlencode($val) : "null%5B%5D=" . urlencode($key));
|
||||
$unique_idf .= "&" . ($val !== null ? urlencode("where[" . bracket_escape($key) . "]") . "=" . urlencode($val) : "null%5B%5D=" . urlencode($key));
|
||||
}
|
||||
echo "<tr" . odd() . ">" . (!$group && $select ? "" : "<td>" . checkbox("check[]", substr($unique_idf, 1), in_array(substr($unique_idf, 1), (array) $_POST["check"]), "", "this.form['all'].checked = false; formUncheck('all-page');") . (count($group) < count($select) || information_schema(DB) ? "" : " <a href='" . h(ME . "edit=" . urlencode($TABLE) . $unique_idf) . "'>" . lang('edit') . "</a>"));
|
||||
foreach ($row as $key => $val) {
|
||||
@@ -297,18 +297,18 @@ if (!$columns) {
|
||||
}
|
||||
$link = "";
|
||||
$val = $adminer->editVal($val, $field);
|
||||
if (!isset($val)) {
|
||||
$val = "<i>NULL</i>";
|
||||
} else {
|
||||
if ($val !== null) {
|
||||
if (ereg('blob|bytea|raw|file', $field["type"]) && $val != "") {
|
||||
$link = h(ME . 'download=' . urlencode($TABLE) . '&field=' . urlencode($key) . $unique_idf);
|
||||
}
|
||||
if ($val === "") { // === - may be int
|
||||
$val = " ";
|
||||
} elseif ($text_length != "" && ereg('text|blob', $field["type"]) && is_utf8($val)) {
|
||||
$val = shorten_utf8($val, max(0, +$text_length)); // usage of LEFT() would reduce traffic but complicate query - expected average speedup: .001 s VS .01 s on local network
|
||||
} else {
|
||||
$val = h($val);
|
||||
} elseif (is_utf8($val)) {
|
||||
if ($text_length != "" && ereg('text|blob', $field["type"])) {
|
||||
$val = shorten_utf8($val, max(0, +$text_length)); // usage of LEFT() would reduce traffic but complicate query - expected average speedup: .001 s VS .01 s on local network
|
||||
} else {
|
||||
$val = h($val);
|
||||
}
|
||||
}
|
||||
|
||||
if (!$link) { // link related items
|
||||
@@ -351,11 +351,11 @@ if (!$columns) {
|
||||
}
|
||||
$id = h("val[$unique_idf][" . bracket_escape($key) . "]");
|
||||
$value = $_POST["val"][$unique_idf][bracket_escape($key)];
|
||||
$h_value = h(isset($value) ? $value : $row[$key]);
|
||||
$h_value = h($value !== null ? $value : $row[$key]);
|
||||
$long = strpos($val, "<i>...</i>");
|
||||
$editable = is_utf8($val) && $rows[$n][$key] == $row[$key] && !$functions[$key];
|
||||
$text = ereg('text|lob', $field["type"]);
|
||||
echo (($_GET["modify"] && $editable) || isset($value)
|
||||
echo (($_GET["modify"] && $editable) || $value !== null
|
||||
? "<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' ondblclick=\"" . ($editable ? "selectDblClick(this, event" . ($long ? ", 2" : ($text ? ", 1" : "")) . ")" : "alert('" . h(lang('Use edit link to modify this value.')) . "')") . ";\">" . $adminer->selectVal($val, $link, $field)
|
||||
);
|
||||
@@ -377,7 +377,7 @@ if (!$columns) {
|
||||
$found_rows = found_rows($table_status, $where);
|
||||
if ($found_rows < max(1e4, 2 * ($page + 1) * $limit)) {
|
||||
// slow with big tables
|
||||
ob_flush(); //! doesn't work with AJAX
|
||||
ob_flush();
|
||||
flush();
|
||||
$found_rows = $connection->result("SELECT COUNT(*) FROM " . table($TABLE) . ($where ? " WHERE " . implode(" AND ", $where) : ""));
|
||||
} else {
|
||||
@@ -407,12 +407,15 @@ if (!$columns) {
|
||||
</div></fieldset>
|
||||
<?php
|
||||
}
|
||||
print_fieldset("export", lang('Export'));
|
||||
$output = $adminer->dumpOutput();
|
||||
echo ($output ? html_select("output", $output, $adminer_import["output"]) . " " : "");
|
||||
echo html_select("format", $adminer->dumpFormat(), $adminer_import["format"]);
|
||||
echo " <input type='submit' name='export' value='" . lang('Export') . "' onclick='eventStop(event);'>\n";
|
||||
echo "</div></fieldset>\n";
|
||||
$format = $adminer->dumpFormat();
|
||||
if ($format) {
|
||||
print_fieldset("export", lang('Export'));
|
||||
$output = $adminer->dumpOutput();
|
||||
echo ($output ? html_select("output", $output, $adminer_import["output"]) . " " : "");
|
||||
echo html_select("format", $format, $adminer_import["format"]);
|
||||
echo " <input type='submit' name='export' value='" . lang('Export') . "'>\n";
|
||||
echo "</div></fieldset>\n";
|
||||
}
|
||||
}
|
||||
if ($adminer->selectImportPrint()) {
|
||||
print_fieldset("import", lang('Import'), !$rows);
|
||||
|
@@ -3,12 +3,13 @@ $SEQUENCE = $_GET["sequence"];
|
||||
|
||||
if ($_POST && !$error) {
|
||||
$link = substr(ME, 0, -1);
|
||||
$name = trim($_POST["name"]);
|
||||
if ($_POST["drop"]) {
|
||||
query_redirect("DROP SEQUENCE " . idf_escape($SEQUENCE), $link, lang('Sequence has been dropped.'));
|
||||
} elseif ($SEQUENCE == "") {
|
||||
query_redirect("CREATE SEQUENCE " . idf_escape($_POST["name"]), $link, lang('Sequence has been created.'));
|
||||
} elseif ($SEQUENCE != $_POST["name"]) {
|
||||
query_redirect("ALTER SEQUENCE " . idf_escape($SEQUENCE) . " RENAME TO " . idf_escape($_POST["name"]), $link, lang('Sequence has been altered.'));
|
||||
query_redirect("CREATE SEQUENCE " . idf_escape($name), $link, lang('Sequence has been created.'));
|
||||
} elseif ($SEQUENCE != $name) {
|
||||
query_redirect("ALTER SEQUENCE " . idf_escape($SEQUENCE) . " RENAME TO " . idf_escape($name), $link, lang('Sequence has been altered.'));
|
||||
} else {
|
||||
redirect($link);
|
||||
}
|
||||
|
@@ -25,17 +25,17 @@ if (!$error && $_POST) {
|
||||
: "compress.bzip2://adminer.sql.bz2"
|
||||
)), "rb");
|
||||
$query = ($fp ? fread($fp, 1e6) : false);
|
||||
} elseif ($_FILES && $_FILES["sql_file"]["error"] != 4) { // 4 - UPLOAD_ERR_NO_FILE
|
||||
} elseif ($_FILES && $_FILES["sql_file"]["error"] != UPLOAD_ERR_NO_FILE) {
|
||||
$query = get_file("sql_file", true);
|
||||
}
|
||||
if (is_string($query)) { // get_file() returns error as number, fread() as false
|
||||
if (function_exists('memory_get_usage')) {
|
||||
@ini_set("memory_limit", max(ini_get("memory_limit"), 2 * strlen($query) + memory_get_usage() + 8e6)); // @ - may be disabled, 2 - substr and trim, 8e6 - other variables
|
||||
@ini_set("memory_limit", max(ini_bytes("memory_limit"), 2 * strlen($query) + memory_get_usage() + 8e6)); // @ - may be disabled, 2 - substr and trim, 8e6 - other variables
|
||||
}
|
||||
if ($query != "" && strlen($query) < 1e6) { // don't add big queries
|
||||
$q = $query . (ereg(';$', $query) ? "" : ";"); //! doesn't work with DELIMITER |
|
||||
if (!$history || end($history) != $q) { // no repeated queries
|
||||
$history[] = $q;
|
||||
$q = $query . (ereg(";[ \t\r\n]*\$", $query) ? "" : ";"); //! doesn't work with DELIMITER |
|
||||
if (!$history || reset(end($history)) != $q) { // no repeated queries
|
||||
$history[] = array($q, time());
|
||||
}
|
||||
}
|
||||
$space = "(?:\\s|/\\*.*\\*/|(?:#|-- )[^\n]*\n|--\n)";
|
||||
@@ -51,6 +51,7 @@ if (!$error && $_POST) {
|
||||
}
|
||||
$commands = 0;
|
||||
$errors = array();
|
||||
$line = 0;
|
||||
$parse = '[\'"' . ($jush == "sql" ? '`#' : ($jush == "sqlite" ? '`[' : ($jush == "mssql" ? '[' : ''))) . ']|/\\*|-- |$' . ($jush == "pgsql" ? '|\\$[^$]*\\$' : '');
|
||||
$total_start = microtime();
|
||||
parse_str($_COOKIE["adminer_export"], $adminer_export);
|
||||
@@ -61,29 +62,30 @@ if (!$error && $_POST) {
|
||||
$delimiter = $match[1];
|
||||
$query = substr($query, strlen($match[0]));
|
||||
} else {
|
||||
preg_match('(' . preg_quote($delimiter) . "|$parse)", $query, $match, PREG_OFFSET_CAPTURE, $offset); // should always match
|
||||
$found = $match[0][0];
|
||||
preg_match('(' . preg_quote($delimiter) . "\\s*|$parse)", $query, $match, PREG_OFFSET_CAPTURE, $offset); // should always match
|
||||
list($found, $pos) = $match[0];
|
||||
if (!$found && $fp && !feof($fp)) {
|
||||
$query .= fread($fp, 1e5);
|
||||
} else {
|
||||
$offset = $match[0][1] + strlen($found);
|
||||
if (!$found && rtrim($query) == "") {
|
||||
break;
|
||||
}
|
||||
if ($found && $found != $delimiter) { // find matching quote or comment end
|
||||
$offset = $pos + strlen($found);
|
||||
if ($found && rtrim($found) != $delimiter) { // find matching quote or comment end
|
||||
while (preg_match('(' . ($found == '/*' ? '\\*/' : ($found == '[' ? ']' : (ereg('^-- |^#', $found) ? "\n" : preg_quote($found) . "|\\\\."))) . '|$)s', $query, $match, PREG_OFFSET_CAPTURE, $offset)) { //! respect sql_mode NO_BACKSLASH_ESCAPES
|
||||
$s = $match[0][0];
|
||||
$offset = $match[0][1] + strlen($s);
|
||||
if (!$s && $fp && !feof($fp)) {
|
||||
$offset -= strlen($found); // strlen($found) >= strlen("\\.") - 1
|
||||
$query .= fread($fp, 1e5);
|
||||
} elseif ($s[0] != "\\") {
|
||||
break;
|
||||
} else {
|
||||
$offset = $match[0][1] + strlen($s);
|
||||
if ($s[0] != "\\") {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else { // end of a query
|
||||
$empty = false;
|
||||
$q = substr($query, 0, $match[0][1]);
|
||||
$q = substr($query, 0, $pos);
|
||||
$commands++;
|
||||
$print = "<pre id='sql-$commands'><code class='jush-$jush'>" . shorten_utf8(trim($q), 1000) . "</code></pre>\n";
|
||||
if (!$_POST["only_errors"]) {
|
||||
@@ -108,7 +110,7 @@ if (!$error && $_POST) {
|
||||
break 2;
|
||||
}
|
||||
} elseif (is_object($result)) {
|
||||
select($result, $connection2);
|
||||
$orgtables = select($result, $connection2);
|
||||
if (!$_POST["only_errors"]) {
|
||||
echo "<form action='' method='post'>\n";
|
||||
echo "<p>" . ($result->num_rows ? lang('%d row(s)', $result->num_rows) : "") . $time;
|
||||
@@ -117,13 +119,13 @@ if (!$error && $_POST) {
|
||||
. html_select("output", $adminer->dumpOutput(), $adminer_export["output"]) . " "
|
||||
. html_select("format", $dump_format, $adminer_export["format"])
|
||||
. "<input type='hidden' name='query' value='" . h($q) . "'>"
|
||||
. " <input type='submit' name='export' value='" . lang('Export') . "' onclick='eventStop(event);'><input type='hidden' name='token' value='$token'></span>\n"
|
||||
. " <input type='submit' name='export' value='" . lang('Export') . "'><input type='hidden' name='token' value='$token'></span>\n"
|
||||
;
|
||||
if ($connection2 && preg_match("~^($space|\\()*SELECT\\b~isU", $q) && ($explain = explain($connection2, $q))) {
|
||||
$id = "explain-$commands";
|
||||
echo ", <a href='#$id' onclick=\"return !toggle('$id');\">EXPLAIN</a>$export";
|
||||
echo "<div id='$id' class='hidden'>\n";
|
||||
select($explain, $connection2, ($jush == "sql" ? "http://dev.mysql.com/doc/refman/" . substr($connection->server_info, 0, 3) . "/en/explain-output.html#explain_" : ""));
|
||||
select($explain, $connection2, ($jush == "sql" ? "http://dev.mysql.com/doc/refman/" . substr($connection->server_info, 0, 3) . "/en/explain-output.html#explain_" : ""), $orgtables);
|
||||
echo "</div>\n";
|
||||
} else {
|
||||
echo $export;
|
||||
@@ -142,6 +144,7 @@ if (!$error && $_POST) {
|
||||
}
|
||||
$start = $end;
|
||||
} while ($connection->next_result());
|
||||
$line += substr_count($q.$found, "\n");
|
||||
$query = substr($query, $offset);
|
||||
$offset = 0;
|
||||
}
|
||||
@@ -170,7 +173,7 @@ if ($_POST) {
|
||||
} elseif ($_GET["history"] == "all") {
|
||||
$q = $history;
|
||||
} elseif ($_GET["history"] != "") {
|
||||
$q = $history[$_GET["history"]];
|
||||
$q = $history[$_GET["history"]][0];
|
||||
}
|
||||
textarea("query", $q, 20);
|
||||
echo ($_POST ? "" : "<script type='text/javascript'>document.getElementsByTagName('textarea')[0].focus();</script>\n");
|
||||
@@ -201,8 +204,8 @@ echo "</div></fieldset>\n";
|
||||
if ($history) {
|
||||
print_fieldset("history", lang('History'), $_GET["history"] != "");
|
||||
foreach ($history as $key => $val) {
|
||||
//! save and display timestamp
|
||||
echo '<a href="' . h(ME . "sql=&history=$key") . '">' . lang('Edit') . "</a> <code class='jush-$jush'>" . shorten_utf8(ltrim(str_replace("\n", " ", str_replace("\r", "", preg_replace('~^(#|-- ).*~m', '', $val)))), 80, "</code>") . "<br>\n";
|
||||
list($q, $time) = $val;
|
||||
echo '<a href="' . h(ME . "sql=&history=$key") . '">' . lang('Edit') . "</a> <span class='time'>" . @date("H:i:s", $time) . "</span> <code class='jush-$jush'>" . shorten_utf8(ltrim(str_replace("\n", " ", str_replace("\r", "", preg_replace('~^(#|-- ).*~m', '', $q)))), 80, "</code>") . "<br>\n"; // @ - time zone may be not set
|
||||
}
|
||||
echo "<input type='submit' name='clear' value='" . lang('Clear') . "'>\n";
|
||||
echo "<a href='" . h(ME . "sql=&history=all") . "'>" . lang('Edit all') . "</a>\n";
|
||||
|
@@ -3,6 +3,7 @@ body { color: #000; background: #fff; font: 90%/1.25 Verdana, Arial, Helvetica,
|
||||
a { color: blue; }
|
||||
a:visited { color: navy; }
|
||||
a:hover { color: red; }
|
||||
a.text { text-decoration: none; }
|
||||
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: 1em 0 0; }
|
||||
@@ -42,15 +43,15 @@ input[type=image] { vertical-align: middle; }
|
||||
.options select { width: 20ex; width: auto\9; }
|
||||
.active { font-weight: bold; }
|
||||
.sqlarea { width: 98%; }
|
||||
.icon { width: 18px; height: 18px; }
|
||||
#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; }
|
||||
#loader { position: fixed; top: 0; left: 18em; z-index: 1; }
|
||||
#h1 { color: #777; text-decoration: none; font-style: italic; }
|
||||
#version { font-size: 67%; color: red; }
|
||||
#schema { margin-left: 60px; position: relative; }
|
||||
#schema { margin-left: 60px; position: relative; -moz-user-select: none; -webkit-user-select: none; }
|
||||
#schema .table { border: 1px solid silver; padding: 0 2px; cursor: move; position: absolute; }
|
||||
#schema .references { position: absolute; }
|
||||
|
||||
|
@@ -6,10 +6,14 @@ var jushRoot = '../externals/jush/'; // global variable to allow simple customiz
|
||||
* @param string first three characters of database system version
|
||||
*/
|
||||
function bodyLoad(version) {
|
||||
if (history.state !== undefined) { // copied from editor/static/editing.js
|
||||
onpopstate(history);
|
||||
}
|
||||
if (jushRoot) {
|
||||
// copy of jush.style to load JS and CSS at once
|
||||
var link = document.createElement('link');
|
||||
link.rel = 'stylesheet';
|
||||
link.type = 'text/css';
|
||||
link.href = jushRoot + 'jush.css';
|
||||
document.getElementsByTagName('head')[0].appendChild(link);
|
||||
|
||||
var script = document.createElement('script');
|
||||
script.src = jushRoot + 'jush.js';
|
||||
script.onload = function () {
|
||||
@@ -19,7 +23,6 @@ function bodyLoad(version) {
|
||||
var pgsql = 'http://www.postgresql.org/docs/' + version + '/static/';
|
||||
jush.urls.pgsql_pgsqlset = jush.urls.pgsql[0] = pgsql + '$key';
|
||||
jush.urls.pgsqlset[0] = pgsql + 'runtime-config-$key.html#GUC-$1';
|
||||
jush.style(jushRoot + 'jush.css');
|
||||
if (window.jushLinks) {
|
||||
jush.custom_links = jushLinks;
|
||||
}
|
||||
@@ -62,7 +65,7 @@ function typePassword(el, disable) {
|
||||
|
||||
function loginDriver(driver) {
|
||||
var trs = driver.parentNode.parentNode.parentNode.rows;
|
||||
for (var i=1; i < trs.length; i++) {
|
||||
for (var i=1; i < trs.length - 1; i++) {
|
||||
trs[i].className = (/sqlite/.test(driver.value) ? 'hidden' : '');
|
||||
}
|
||||
}
|
||||
@@ -393,16 +396,18 @@ function indexesAddColumn(field, prefix) {
|
||||
|
||||
|
||||
|
||||
var that, x, y, em, tablePos;
|
||||
var that, x, y; // em and tablePos defined in schema.inc.php
|
||||
|
||||
/** Get mouse position
|
||||
* @param HTMLElement
|
||||
* @param MouseEvent
|
||||
*/
|
||||
function schemaMousedown(el, event) {
|
||||
that = el;
|
||||
x = event.clientX - el.offsetLeft;
|
||||
y = event.clientY - el.offsetTop;
|
||||
if ((event.which ? event.which : event.button) == 1) {
|
||||
that = el;
|
||||
x = event.clientX - el.offsetLeft;
|
||||
y = event.clientY - el.offsetTop;
|
||||
}
|
||||
}
|
||||
|
||||
/** Move object
|
||||
@@ -417,10 +422,9 @@ function schemaMousemove(ev) {
|
||||
var lineSet = { };
|
||||
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 div2 = document.getElementById((/^refs/.test(divs[i].id) ? 'refd' : 'refs') + divs[i].id.substr(4));
|
||||
var ref = (tablePos[divs[i].title] ? tablePos[divs[i].title] : [ div2.parentNode.offsetTop / em, 0 ]);
|
||||
var left1 = -1;
|
||||
var isTop = true;
|
||||
var id = divs[i].id.replace(/^ref.(.+)-.+/, '$1');
|
||||
if (divs[i].parentNode != div2.parentNode) {
|
||||
left1 = Math.min(0, ref[1] - left) - 1;
|
||||
@@ -429,19 +433,17 @@ function schemaMousemove(ev) {
|
||||
var left2 = Math.min(0, left - ref[1]) - 1;
|
||||
div2.style.left = left2 + 'em';
|
||||
div2.getElementsByTagName('div')[0].style.width = -left2 + 'em';
|
||||
isTop = (div2.offsetTop + ref[0] * em > divs[i].offsetTop + top * em);
|
||||
}
|
||||
if (!lineSet[id]) {
|
||||
var line = document.getElementById(divs[i].id.replace(/^....(.+)-\d+$/, 'refl$1'));
|
||||
var shift = ev.clientY - y - that.offsetTop;
|
||||
line.style.left = (left + left1) + 'em';
|
||||
if (isTop) {
|
||||
line.style.top = (line.offsetTop + shift) / em + 'em';
|
||||
}
|
||||
var line = document.getElementById(divs[i].id.replace(/^....(.+)-.+$/, 'refl$1'));
|
||||
var top1 = top + divs[i].offsetTop / em;
|
||||
var top2 = top + div2.offsetTop / em;
|
||||
if (divs[i].parentNode != div2.parentNode) {
|
||||
line = line.getElementsByTagName('div')[0];
|
||||
line.style.height = (line.offsetHeight + (isTop ? -1 : 1) * shift) / em + 'em';
|
||||
top2 += ref[0] - top;
|
||||
line.getElementsByTagName('div')[0].style.height = Math.abs(top1 - top2) + 'em';
|
||||
}
|
||||
line.style.left = (left + left1) + 'em';
|
||||
line.style.top = Math.min(top1, top2) + 'em';
|
||||
lineSet[id] = true;
|
||||
}
|
||||
}
|
||||
|
@@ -103,13 +103,14 @@ function formChecked(el, name) {
|
||||
* @param MouseEvent
|
||||
*/
|
||||
function tableClick(event) {
|
||||
var click = true;
|
||||
var click = (!window.getSelection || getSelection().isCollapsed);
|
||||
var el = event.target || event.srcElement;
|
||||
while (!/^tr$/i.test(el.tagName)) {
|
||||
if (/^table$/i.test(el.tagName)) {
|
||||
return;
|
||||
}
|
||||
if (/^(a|input|textarea)$/i.test(el.tagName)) {
|
||||
if (/^(table|a|input|textarea)$/i.test(el.tagName)) {
|
||||
if (el.type != 'checkbox') {
|
||||
return;
|
||||
}
|
||||
checkboxClick(event, el);
|
||||
click = false;
|
||||
}
|
||||
el = el.parentNode;
|
||||
@@ -122,6 +123,39 @@ function tableClick(event) {
|
||||
trCheck(el);
|
||||
}
|
||||
|
||||
var lastChecked;
|
||||
|
||||
/** Shift-click on checkbox for multiple selection.
|
||||
* @param MouseEvent
|
||||
* @param HTMLInputElement
|
||||
*/
|
||||
function checkboxClick(event, el) {
|
||||
if (!el.name) {
|
||||
return;
|
||||
}
|
||||
if (event.shiftKey && (!lastChecked || lastChecked.name == el.name)) {
|
||||
var checked = (lastChecked ? lastChecked.checked : true);
|
||||
var inputs = el.parentNode.parentNode.parentNode.getElementsByTagName('input');
|
||||
var checking = !lastChecked;
|
||||
for (var i=0; i < inputs.length; i++) {
|
||||
var input = inputs[i];
|
||||
if (input.name === el.name) {
|
||||
if (checking) {
|
||||
input.checked = checked;
|
||||
trCheck(input);
|
||||
}
|
||||
if (input === el || input === lastChecked) {
|
||||
if (checking) {
|
||||
break;
|
||||
}
|
||||
checking = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
lastChecked = el;
|
||||
}
|
||||
|
||||
/** Set HTML code of an element
|
||||
* @param string
|
||||
* @param string undefined to set parentNode to
|
||||
@@ -157,9 +191,7 @@ function nodePosition(el) {
|
||||
function pageClick(href, page, event) {
|
||||
if (!isNaN(page) && page) {
|
||||
href += (page != 1 ? '&page=' + (page - 1) : '');
|
||||
if (!ajaxSend(href)) {
|
||||
location.href = href;
|
||||
}
|
||||
location.href = href;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -169,7 +201,10 @@ function pageClick(href, page, event) {
|
||||
* @param HTMLSelectElement
|
||||
*/
|
||||
function selectAddRow(field) {
|
||||
field.onchange = function () { };
|
||||
field.onchange = function () {
|
||||
selectFieldChange(field.form);
|
||||
};
|
||||
field.onchange();
|
||||
var row = field.parentNode.cloneNode(true);
|
||||
var selects = row.getElementsByTagName('select');
|
||||
for (var i=0; i < selects.length; i++) {
|
||||
@@ -185,6 +220,46 @@ function selectAddRow(field) {
|
||||
field.parentNode.parentNode.appendChild(row);
|
||||
}
|
||||
|
||||
/** Check whether the query will be executed with index
|
||||
* @param HTMLFormElement
|
||||
*/
|
||||
function selectFieldChange(form) {
|
||||
var ok = (function () {
|
||||
var inputs = form.getElementsByTagName('input');
|
||||
for (var i=0; i < inputs.length; i++) {
|
||||
var input = inputs[i];
|
||||
if (/^fulltext/.test(input.name) && input.value) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
var ok = true;
|
||||
var selects = form.getElementsByTagName('select');
|
||||
for (var i=0; i < selects.length; i++) {
|
||||
var select = selects[i];
|
||||
var col = selectValue(select);
|
||||
var match = /^(where.+)col\]/.exec(select.name);
|
||||
if (match) {
|
||||
var op = selectValue(form[match[1] + 'op]']);
|
||||
var val = form[match[1] + 'val]'].value;
|
||||
if (col in indexColumns && (!/LIKE|REGEXP/.test(op) || (op == 'LIKE' && val.charAt(0) != '%'))) {
|
||||
return true;
|
||||
} else if (col || val) {
|
||||
ok = false;
|
||||
}
|
||||
}
|
||||
//! take grouping in select into account
|
||||
if (col && /^order/.test(select.name)) {
|
||||
if (!(col in indexColumns)) {
|
||||
ok = false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ok;
|
||||
})();
|
||||
setHtml('noindex', (ok ? '' : '!'));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** Send form by Ctrl+Enter on <select> and <textarea>
|
||||
@@ -196,12 +271,10 @@ function bodyKeydown(event, button) {
|
||||
var target = event.target || event.srcElement;
|
||||
if (event.ctrlKey && (event.keyCode == 13 || event.keyCode == 10) && !event.altKey && !event.metaKey && /select|textarea|input/i.test(target.tagName)) { // 13|10 - Enter, shiftKey allowed
|
||||
target.blur();
|
||||
if (!ajaxForm(target.form, (button ? button + '=1' : ''))) {
|
||||
if (button) {
|
||||
target.form[button].click();
|
||||
} else {
|
||||
target.form.submit();
|
||||
}
|
||||
if (button) {
|
||||
target.form[button].click();
|
||||
} else {
|
||||
target.form.submit();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -255,21 +328,21 @@ function functionChange(select) {
|
||||
* @return XMLHttpRequest or false in case of an error
|
||||
*/
|
||||
function ajax(url, callback, data) {
|
||||
var xmlhttp = (window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : false));
|
||||
if (xmlhttp) {
|
||||
xmlhttp.open((data ? 'POST' : 'GET'), url);
|
||||
var request = (window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : false));
|
||||
if (request) {
|
||||
request.open((data ? 'POST' : 'GET'), url);
|
||||
if (data) {
|
||||
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
||||
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
||||
}
|
||||
xmlhttp.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
|
||||
xmlhttp.onreadystatechange = function () {
|
||||
if (xmlhttp.readyState == 4) {
|
||||
callback(xmlhttp);
|
||||
request.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
|
||||
request.onreadystatechange = function () {
|
||||
if (request.readyState == 4) {
|
||||
callback(request);
|
||||
}
|
||||
};
|
||||
xmlhttp.send(data);
|
||||
request.send(data);
|
||||
}
|
||||
return xmlhttp;
|
||||
return request;
|
||||
}
|
||||
|
||||
/** Use setHtml(key, value) for JSON response
|
||||
@@ -277,9 +350,9 @@ function ajax(url, callback, data) {
|
||||
* @return XMLHttpRequest or false in case of an error
|
||||
*/
|
||||
function ajaxSetHtml(url) {
|
||||
return ajax(url, function (xmlhttp) {
|
||||
if (xmlhttp.status) {
|
||||
var data = eval('(' + xmlhttp.responseText + ')');
|
||||
return ajax(url, function (request) {
|
||||
if (request.status) {
|
||||
var data = eval('(' + request.responseText + ')');
|
||||
for (var key in data) {
|
||||
setHtml(key, data[key]);
|
||||
}
|
||||
@@ -287,134 +360,6 @@ function ajaxSetHtml(url) {
|
||||
});
|
||||
}
|
||||
|
||||
var originalFavicon;
|
||||
|
||||
/** Replace favicon
|
||||
* @param string
|
||||
*/
|
||||
function replaceFavicon(href) {
|
||||
var favicon = document.getElementById('favicon');
|
||||
if (favicon) {
|
||||
favicon.href = href;
|
||||
favicon.parentNode.appendChild(favicon); // to replace the icon in Firefox
|
||||
}
|
||||
}
|
||||
|
||||
var ajaxState = 0;
|
||||
|
||||
/** Safely load content to #content
|
||||
* @param string
|
||||
* @param [string]
|
||||
* @param [boolean]
|
||||
* @param [boolean]
|
||||
* @return XMLHttpRequest or false in case of an error
|
||||
*/
|
||||
function ajaxSend(url, data, popState, noscroll) {
|
||||
if (!history.pushState) {
|
||||
return false;
|
||||
}
|
||||
var currentState = ++ajaxState;
|
||||
onblur = function () {
|
||||
if (!originalFavicon) {
|
||||
originalFavicon = (document.getElementById('favicon') || {}).href;
|
||||
}
|
||||
replaceFavicon('../adminer/static/loader.gif');
|
||||
};
|
||||
setHtml('loader', '<img src="../adminer/static/loader.gif" alt="">');
|
||||
return ajax(url, function (xmlhttp) {
|
||||
if (currentState == ajaxState) {
|
||||
var title = xmlhttp.getResponseHeader('X-AJAX-Title');
|
||||
if (title) {
|
||||
document.title = decodeURIComponent(title);
|
||||
}
|
||||
var redirect = xmlhttp.getResponseHeader('X-AJAX-Redirect');
|
||||
if (redirect) {
|
||||
return ajaxSend(redirect, '', popState);
|
||||
}
|
||||
onblur = function () { };
|
||||
if (originalFavicon) {
|
||||
replaceFavicon(originalFavicon);
|
||||
}
|
||||
if (!xmlhttp.status) {
|
||||
setHtml('loader', '');
|
||||
} else {
|
||||
if (!popState) {
|
||||
if (data || url != location.href) {
|
||||
history.pushState(data, '', url); //! remember window position
|
||||
}
|
||||
}
|
||||
if (!noscroll && !/&order/.test(url)) {
|
||||
scrollTo(0, 0);
|
||||
}
|
||||
setHtml('content', xmlhttp.responseText);
|
||||
var content = document.getElementById('content');
|
||||
var scripts = content.getElementsByTagName('script');
|
||||
var length = scripts.length; // required to avoid infinite loop
|
||||
for (var i=0; i < length; i++) {
|
||||
var script = document.createElement('script');
|
||||
script.text = scripts[i].text;
|
||||
content.appendChild(script);
|
||||
}
|
||||
|
||||
var as = document.getElementById('menu').getElementsByTagName('a');
|
||||
var href = location.href.replace(/(&(sql=|dump=|(select|table)=[^&]*)).*/, '$1');
|
||||
for (var i=0; i < as.length; i++) {
|
||||
as[i].className = (href == as[i].href ? 'active' : '');
|
||||
}
|
||||
var dump = document.getElementById('dump');
|
||||
if (dump) {
|
||||
var match = /&(select|table)=([^&]+)/.exec(href);
|
||||
dump.href = dump.href.replace(/[^=]+$/, '') + (match ? match[2] : '');
|
||||
}
|
||||
//! modify Change database hidden fields
|
||||
|
||||
if (window.jush) {
|
||||
jush.highlight_tag('code', 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}, data);
|
||||
}
|
||||
|
||||
/** Revive page from history
|
||||
* @param PopStateEvent|history
|
||||
*/
|
||||
onpopstate = function (event) {
|
||||
if ((ajaxState || event.state) && !/#/.test(location.href)) {
|
||||
ajaxSend(location.href, (event.state && confirm(areYouSure) ? event.state : ''), 1); // 1 - disable pushState
|
||||
} else {
|
||||
ajaxState++;
|
||||
}
|
||||
};
|
||||
|
||||
/** Send form by AJAX GET
|
||||
* @param HTMLFormElement
|
||||
* @param [string]
|
||||
* @param [boolean]
|
||||
* @return XMLHttpRequest or false in case of an error
|
||||
*/
|
||||
function ajaxForm(form, data, noscroll) {
|
||||
if ((/&(database|scheme|create|view|sql|user|dump|call)=/.test(location.href) && !/\./.test(data)) || (form.onsubmit && form.onsubmit() === false)) { // . - type="image"
|
||||
return false;
|
||||
}
|
||||
var params = [ ];
|
||||
for (var i=0; i < form.elements.length; i++) {
|
||||
var el = form.elements[i];
|
||||
if (/file/i.test(el.type) && el.value) {
|
||||
return false;
|
||||
} else if (el.name && (!/checkbox|radio|submit|file/i.test(el.type) || el.checked)) {
|
||||
params.push(encodeURIComponent(el.name) + '=' + encodeURIComponent(/select/i.test(el.tagName) ? selectValue(el) : el.value));
|
||||
}
|
||||
}
|
||||
if (data) {
|
||||
params.push(data);
|
||||
}
|
||||
if (form.method == 'post') {
|
||||
return ajaxSend((/\?/.test(form.action) ? form.action : location.href), params.join('&'), false, noscroll); // ? - always part of Adminer URL
|
||||
}
|
||||
return ajaxSend((form.action || location.href).replace(/\?.*/, '') + '?' + params.join('&'), '', false, noscroll);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** Display edit field
|
||||
@@ -461,9 +406,9 @@ function selectDblClick(td, event, text) {
|
||||
td.appendChild(input);
|
||||
input.focus();
|
||||
if (text == 2) { // long text
|
||||
return ajax(location.href + '&' + encodeURIComponent(td.id) + '=', function (xmlhttp) {
|
||||
if (xmlhttp.status) {
|
||||
input.value = xmlhttp.responseText;
|
||||
return ajax(location.href + '&' + encodeURIComponent(td.id) + '=', function (request) {
|
||||
if (request.status) {
|
||||
input.value = request.responseText;
|
||||
input.name = td.id;
|
||||
}
|
||||
});
|
||||
@@ -481,34 +426,6 @@ function selectDblClick(td, event, text) {
|
||||
|
||||
|
||||
|
||||
/** Load link by AJAX
|
||||
* @param MouseEvent
|
||||
* @param string
|
||||
* @param string
|
||||
* @return boolean
|
||||
*/
|
||||
function bodyClick(event, db, ns) {
|
||||
if (event.button || event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {
|
||||
return;
|
||||
}
|
||||
if (event.getPreventDefault ? event.getPreventDefault() : event.returnValue === false || event.defaultPrevented) {
|
||||
return false;
|
||||
}
|
||||
var el = event.target || event.srcElement;
|
||||
if (/^a$/i.test(el.parentNode.tagName)) {
|
||||
el = el.parentNode;
|
||||
}
|
||||
if (/^a$/i.test(el.tagName) && !/:|#|&download=/i.test(el.getAttribute('href')) && /[&?]username=/.test(el.href)) {
|
||||
var match = /&db=([^&]*)/.exec(el.href);
|
||||
var match2 = /&ns=([^&]*)/.exec(el.href);
|
||||
return !(db == (match ? match[1] : '') && ns == (match2 ? match2[1] : '') && ajaxSend(el.href));
|
||||
}
|
||||
if (/^input$/i.test(el.tagName) && /image|submit/.test(el.type)) {
|
||||
return !ajaxForm(el.form, (el.name ? encodeURIComponent(el.name) + (el.type == 'image' ? '.x' : '') + '=1' : ''), el.type == 'image');
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/** Stop event propagation
|
||||
* @param Event
|
||||
*/
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 673 B |
@@ -6,7 +6,7 @@ if ($_POST && !$error) {
|
||||
if ($_POST["drop"]) {
|
||||
query_redirect("DROP TYPE " . idf_escape($TYPE), $link, lang('Type has been dropped.'));
|
||||
} else {
|
||||
query_redirect("CREATE TYPE " . idf_escape($_POST["name"]) . " $_POST[as]", $link, lang('Type has been created.'));
|
||||
query_redirect("CREATE TYPE " . idf_escape(trim($_POST["name"])) . " $_POST[as]", $link, lang('Type has been created.'));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -113,7 +113,7 @@ if ($_POST) {
|
||||
if ($old_pass != "") {
|
||||
$row["hashed"] = true;
|
||||
}
|
||||
$grants[DB != "" && !isset($_GET["host"]) ? idf_escape(addcslashes(DB, "%_")) . ".*" : ""] = array();
|
||||
$grants[(DB != "" && !isset($_GET["host"]) ? idf_escape(addcslashes(DB, "%_")) : "") . ".*"] = array();
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -150,7 +150,7 @@ foreach (array(
|
||||
foreach ($grants as $object => $grant) {
|
||||
$name = "'grants[$i][" . h(strtoupper($privilege)) . "]'";
|
||||
$value = $grant[strtoupper($privilege)];
|
||||
if ($context == "Server Admin" && $object != (isset($grants["*.*"]) ? "*.*" : "")) {
|
||||
if ($context == "Server Admin" && $object != (isset($grants["*.*"]) ? "*.*" : ".*")) {
|
||||
echo "<td> ";
|
||||
} elseif (isset($_GET["grant"])) {
|
||||
echo "<td><select name=$name><option><option value='1'" . ($value ? " selected" : "") . ">" . lang('Grant') . "<option value='0'" . ($value == "0" ? " selected" : "") . ">" . lang('Revoke') . "</select>";
|
||||
|
@@ -2,10 +2,11 @@
|
||||
$TABLE = $_GET["view"];
|
||||
$dropped = false;
|
||||
if ($_POST && !$error) {
|
||||
$name = trim($_POST["name"]);
|
||||
$dropped = drop_create(
|
||||
"DROP VIEW " . table($TABLE),
|
||||
"CREATE VIEW " . table($_POST["name"]) . " AS\n$_POST[select]",
|
||||
($_POST["drop"] ? substr(ME, 0, -1) : ME . "table=" . urlencode($_POST["name"])),
|
||||
"CREATE VIEW " . table($name) . " AS\n$_POST[select]",
|
||||
($_POST["drop"] ? substr(ME, 0, -1) : ME . "table=" . urlencode($name)),
|
||||
lang('View has been dropped.'),
|
||||
lang('View has been altered.'),
|
||||
lang('View has been created.'),
|
||||
|
45
changes.txt
45
changes.txt
@@ -1,3 +1,48 @@
|
||||
Adminer 3.4.0 (released 2012-06-30):
|
||||
Link to descending order
|
||||
Shift+click on checkbox to select consecutive rows
|
||||
Print current time next to executed SQL queries
|
||||
Warn about selecting data without index
|
||||
Allow specifying database in login form
|
||||
Link to original table in EXPLAIN of SELECT * FROM table t
|
||||
Format numbers in translations
|
||||
MySQL: inform about disabled event_scheduler
|
||||
SQLite: support binary data
|
||||
PostgreSQL: approximate row count in table overview
|
||||
PostgreSQL: improve PDO support in SQL command
|
||||
Oracle: schema, processlist, table overview numbers
|
||||
Simplify work with NULL values (customization)
|
||||
Use namespace in login form (customization)
|
||||
Customizable export filename (customization)
|
||||
Replace JSMin by better JavaScript minifier
|
||||
Don't use AJAX links and forms
|
||||
Indonesian translation
|
||||
Ukrainian translation
|
||||
Bengali translation
|
||||
|
||||
Adminer 3.3.4 (released 2012-03-07):
|
||||
Foreign keys default actions (bug #3397606)
|
||||
SET DEFAULT foreign key action
|
||||
Fix minor parser bug in SQL command with webserver file
|
||||
Ctrl+click on button opens form to a blank window
|
||||
Trim table and column names (bug #3405309)
|
||||
Error message with no response from server in AJAX
|
||||
Esc to cancel AJAX request
|
||||
Move AJAX loading indicator to the right
|
||||
Don't quote bit type in export
|
||||
Don't check row while selecting text
|
||||
Fix invalid references line position on Database schema
|
||||
Disable selecting text on Database schema
|
||||
Ability to disable export (customization)
|
||||
Extensible list of databases (customization)
|
||||
MySQL: set autocommit after connect
|
||||
SQLite, PostgreSQL: vacuum
|
||||
SQLite, PostgreSQL: don't use LIKE for numbers (bug #3420408)
|
||||
PostgreSQL: fix alter foreign key
|
||||
PostgreSQL over PDO: connect if the eponymous database does not exist (bug #3391619)
|
||||
Boolean search (Editor)
|
||||
Persian translation
|
||||
|
||||
Adminer 3.3.3 (released 2011-08-12):
|
||||
Highlight checked rows
|
||||
Titles of links in database overview and navigation
|
||||
|
60
compile.php
Normal file → Executable file
60
compile.php
Normal file → Executable file
@@ -1,21 +1,12 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
error_reporting(6135); // errors and warnings
|
||||
include dirname(__FILE__) . "/adminer/include/version.inc.php";
|
||||
include dirname(__FILE__) . "/externals/jsmin-php/jsmin.php";
|
||||
include dirname(__FILE__) . "/externals/JsShrink/jsShrink.php";
|
||||
|
||||
if (!class_exists("JSMin")) {
|
||||
/** Simple JS minifier without full support for regex literals
|
||||
* @link http://pastebin.com/2Jc2swSr
|
||||
*/
|
||||
class JSMin {
|
||||
/*private static*/ function callback($match) {
|
||||
$s = trim($match[0]);
|
||||
return ($s === "" ? "\n" : ($s[0] === "/" && ($s[1] === "*" || $s[1] === "/") ? "" : $s));
|
||||
}
|
||||
|
||||
/*static*/ function minify($input) {
|
||||
return preg_replace_callback('~//[^\n]*|/\*.*?\*/|/(?!\s)(?:\\\\.|[^/\\\\])*/|\'(?:\\\\.|[^\'\\\\])*\'|"(?:\\\\.|[^"\\\\])*"|\s*[^0-9a-z_$\'"/\s]\s*|\s+~si', array('JSMin', 'callback'), $input);
|
||||
}
|
||||
if (!function_exists('jsShrink')) {
|
||||
function jsShrink($code) {
|
||||
return $code;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +27,7 @@ function remove_lang($match) {
|
||||
function lang_ids($match) {
|
||||
global $lang_ids;
|
||||
$lang_id = &$lang_ids[stripslashes($match[1])];
|
||||
if (!isset($lang_id)) {
|
||||
if ($lang_id === null) {
|
||||
$lang_id = count($lang_ids) - 1;
|
||||
}
|
||||
return ($_SESSION["lang"] ? $match[0] : "lang($lang_id$match[2]");
|
||||
@@ -60,7 +51,9 @@ function put_file($match) {
|
||||
function lang(\$translation, \$number) {
|
||||
\$pos = $match2[2]\t\t: " . (preg_match("~\\\$LANG == '$_SESSION[lang]'.* \\? (.+)\n~U", $match2[1], $match3) ? $match3[1] : "1") . '
|
||||
);
|
||||
return sprintf($translation[$pos], $number);
|
||||
$translation = str_replace("%d", "%s", $translation[$pos]);
|
||||
$number = number_format($number, 0, ".", lang(\',\'));
|
||||
return sprintf($translation, $number);
|
||||
}
|
||||
';
|
||||
} else {
|
||||
@@ -78,7 +71,7 @@ function put_file_lang($match) {
|
||||
include dirname(__FILE__) . "/adminer/lang/$lang.inc.php"; // assign $translations
|
||||
$translation_ids = array_flip($lang_ids); // default translation
|
||||
foreach ($translations as $key => $val) {
|
||||
if (isset($val)) {
|
||||
if ($val !== null) {
|
||||
$translation_ids[$lang_ids[$key]] = $val;
|
||||
}
|
||||
}
|
||||
@@ -94,7 +87,7 @@ function put_file_lang($match) {
|
||||
function short_identifier($number, $chars) {
|
||||
$return = '';
|
||||
while ($number >= 0) {
|
||||
$return .= $chars{$number % strlen($chars)};
|
||||
$return .= $chars[$number % strlen($chars)];
|
||||
$number = floor($number / strlen($chars)) - 1;
|
||||
}
|
||||
return $return;
|
||||
@@ -108,6 +101,33 @@ function php_shrink($input) {
|
||||
$shortening = true;
|
||||
$tokens = token_get_all($input);
|
||||
|
||||
// remove unnecessary { }
|
||||
//! change also `while () { if () {;} }` to `while () if () ;` but be careful about `if () { if () { } } else { }
|
||||
$shorten = 0;
|
||||
$opening = -1;
|
||||
foreach ($tokens as $i => $token) {
|
||||
if (in_array($token[0], array(T_IF, T_ELSE, T_ELSEIF, T_WHILE, T_DO, T_FOR, T_FOREACH), true)) {
|
||||
$shorten = ($token[0] == T_FOR ? 4 : 2);
|
||||
$opening = -1;
|
||||
} elseif (in_array($token[0], array(T_SWITCH, T_FUNCTION, T_CLASS, T_CLOSE_TAG), true)) {
|
||||
$shorten = 0;
|
||||
} elseif ($token === ';') {
|
||||
$shorten--;
|
||||
} elseif ($token === '{') {
|
||||
if ($opening < 0) {
|
||||
$opening = $i;
|
||||
} elseif ($shorten > 1) {
|
||||
$shorten = 0;
|
||||
}
|
||||
} elseif ($token === '}' && $opening >= 0 && $shorten == 1) {
|
||||
unset($tokens[$opening]);
|
||||
unset($tokens[$i]);
|
||||
$shorten = 0;
|
||||
$opening = -1;
|
||||
}
|
||||
}
|
||||
$tokens = array_values($tokens);
|
||||
|
||||
foreach ($tokens as $i => $token) {
|
||||
if ($token[0] === T_VARIABLE && !isset($special_variables[$token[1]])) {
|
||||
$short_variables[$token[1]]++;
|
||||
@@ -201,7 +221,7 @@ $_SESSION["lang"] = $_SERVER["argv"][1]; // Adminer functions read language from
|
||||
include dirname(__FILE__) . "/adminer/include/lang.inc.php";
|
||||
if (isset($_SESSION["lang"])) {
|
||||
if (isset($_SERVER["argv"][2]) || !isset($langs[$_SESSION["lang"]])) {
|
||||
echo "Usage: php compile.php [lang]\nPurpose: Compile adminer[-lang].php and editor[-lang].php.\n";
|
||||
echo "Usage: php compile.php [driver] [lang]\nPurpose: Compile adminer[-driver][-lang].php and editor[-driver][-lang].php.\n";
|
||||
exit(1);
|
||||
}
|
||||
include dirname(__FILE__) . "/adminer/lang/$_SESSION[lang].inc.php";
|
||||
@@ -272,8 +292,6 @@ foreach (array("adminer", "editor") as $project) {
|
||||
$file = str_replace('<script type="text/javascript" src="static/editing.js"></script>' . "\n", "", $file);
|
||||
$file = preg_replace_callback("~compile_file\\('([^']+)', '([^']+)'\\);~", 'compile_file', $file); // integrate static files
|
||||
$replace = 'h(preg_replace("~\\\\\\\\?.*~", "", ME)) . "?file=\\1&version=' . $VERSION;
|
||||
$file = preg_replace("~'\\.\\./adminer/static/(loader\\.gif)~", "location.pathname+'?file=\\1&version=$VERSION", $file);
|
||||
$file = preg_replace('~\\.\\./adminer/static/(loader\\.gif)~', "'+location.pathname+'?file=\\1&version=$VERSION", $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/'", "location.protocol + '//www.adminer.org/static/'", $file);
|
||||
|
@@ -33,7 +33,7 @@ if (!extension_loaded("xdebug")) {
|
||||
$filename = $_GET["coverage"];
|
||||
$coverage = (file_exists($coverage_filename) ? unserialize(file_get_contents($coverage_filename)) : array());
|
||||
$file = explode("<br />", highlight_file($filename, true));
|
||||
unset($prev_color);
|
||||
$prev_color = null;
|
||||
$s = "";
|
||||
for ($l=0; $l <= count($file); $l++) {
|
||||
$line = $file[$l];
|
||||
@@ -43,10 +43,10 @@ if (!extension_loaded("xdebug")) {
|
||||
case -2: $color = "Silver"; break; // dead code
|
||||
case null: $color = ""; break; // not executable
|
||||
}
|
||||
if (!isset($prev_color)) {
|
||||
if ($prev_color === null) {
|
||||
$prev_color = $color;
|
||||
}
|
||||
if ($prev_color != $color || !isset($line)) {
|
||||
if ($prev_color != $color || $line === null) {
|
||||
echo "<div" . ($prev_color ? " style='background-color: $prev_color;'" : "") . ">$s";
|
||||
$open_tags = xhtml_open_tags($s);
|
||||
foreach (array_reverse($open_tags) as $tag) {
|
||||
|
@@ -141,4 +141,3 @@ fieldset, legend, table, .error, .message {-moz-border-radius: 5px; -khtml-borde
|
||||
#breadcrumb, #lang, #menu {-moz-border-radius-bottomright: 5px; -khtml-border-bottom-right-radius: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px;}
|
||||
#breadcrumb, #lang {-moz-border-radius-bottomleft: 5px; -khtml-border-bottom-left-radius: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px;}
|
||||
#menu {-moz-border-radius-topright: 5px; -khtml-border-top-right-radius: 5px; -webkit-border-top-right-radius: 5px; border-bottom-top-radius: 5px;}
|
||||
#loader {margin-left: 35px;}
|
||||
|
@@ -123,4 +123,3 @@ fieldset, legend, h2, table, .error, .message {-moz-border-radius: 5px; -khtml-b
|
||||
#breadcrumb, #lang, #menu {-moz-border-radius-bottomright: 5px; -khtml-border-bottom-right-radius: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px;}
|
||||
#breadcrumb {-moz-border-radius-bottomleft: 5px; -khtml-border-bottom-left-radius: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px;}
|
||||
#menu {-moz-border-radius-topright: 5px; -khtml-border-top-right-radius: 5px; -webkit-border-top-right-radius: 5px; border-bottom-top-radius: 5px;}
|
||||
#loader {margin-left: 35px;}
|
225
designs/ng9/adminer.css
Normal file
225
designs/ng9/adminer.css
Normal file
@@ -0,0 +1,225 @@
|
||||
* {
|
||||
font: 13px/1.5 Verdana, 'Geneva CE', lucida, sans-serif;
|
||||
color:#333333;
|
||||
margin:0px;
|
||||
padding:0px;
|
||||
}
|
||||
|
||||
a,a:visited {
|
||||
color:#006aeb;
|
||||
text-decoration:none;
|
||||
padding:3px 1px;
|
||||
}
|
||||
|
||||
#content table thead span, #content table thead a {
|
||||
font-weight:bold;
|
||||
color:black;
|
||||
}
|
||||
|
||||
#content table thead a:hover {
|
||||
background:none;
|
||||
text-decoration:underline;
|
||||
color:black;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color:white;
|
||||
background:#006aeb;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size:1.9em;
|
||||
font-weight:normal;
|
||||
background:white;
|
||||
color:#1e5eb6;
|
||||
border-bottom:1px solid #f4f4f4;
|
||||
|
||||
padding:20px;
|
||||
margin:0px;
|
||||
}
|
||||
|
||||
#menu h1 {
|
||||
padding:0px 0px 5px 20px;
|
||||
background:none;
|
||||
}
|
||||
|
||||
h2,h3 {
|
||||
font-size:1.5em;
|
||||
font-weight:normal;
|
||||
background:white;
|
||||
color:#1e5eb6;
|
||||
border-bottom:1px solid #f4f4f4;
|
||||
|
||||
padding:20px 0px;
|
||||
margin:0px;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
padding:5px;
|
||||
border:1px solid #f4f4f4;
|
||||
}
|
||||
|
||||
input,select,textarea {
|
||||
border:1px solid #e5e5e5;
|
||||
margin:1px;
|
||||
padding:3px;
|
||||
}
|
||||
|
||||
input[type=submit] {
|
||||
color:white;
|
||||
background:#3390e6;
|
||||
padding:3px 10px;
|
||||
cursor:pointer;
|
||||
border:0px solid;
|
||||
}
|
||||
|
||||
input[type=submit]:hover{
|
||||
background:blue;
|
||||
}
|
||||
|
||||
input[type=checkbox]{
|
||||
margin-right:5px;
|
||||
}
|
||||
|
||||
input[type=image] {
|
||||
border:1px solid #d0cdc4;
|
||||
}
|
||||
|
||||
input[type=checkbox],input[type=radio]{
|
||||
border:1px solid #e5e5e5;
|
||||
padding:2px 5px;
|
||||
}
|
||||
|
||||
code{
|
||||
background:#f0ffe1;
|
||||
border:1px dashed #d5f1b9;
|
||||
padding:2px 4px;
|
||||
font-family:"Courier New";
|
||||
}
|
||||
code a:hover{background:transparent}
|
||||
|
||||
table{
|
||||
margin:10px 0px;
|
||||
border:1px solid #d0cdc4;
|
||||
border-collapse:collapse;
|
||||
}
|
||||
|
||||
tbody tr:hover td,tbody tr:hover th{
|
||||
background:#edf4ff
|
||||
}
|
||||
|
||||
thead th, thead td {
|
||||
text-align:center;
|
||||
vertical-align:middle;
|
||||
font-weight:bold;
|
||||
white-space:nowrap;
|
||||
background:#f2eee1;
|
||||
color:#808080;
|
||||
}
|
||||
|
||||
th,td{
|
||||
border:1px solid #d0cdc4;
|
||||
padding:3px 6px;
|
||||
vertical-align:top;
|
||||
}
|
||||
|
||||
th a {
|
||||
font-weight:bold;
|
||||
padding-bottom:0px;
|
||||
}
|
||||
|
||||
th {
|
||||
background:white;
|
||||
}
|
||||
|
||||
tr.odd td {
|
||||
background:#fcfaf5;
|
||||
}
|
||||
|
||||
#content tbody tr.checked td, tr.checked.odd td {
|
||||
background:#fbe2e2;
|
||||
color:red;
|
||||
}
|
||||
|
||||
.hidden{
|
||||
display:none
|
||||
}
|
||||
|
||||
.error,.message{
|
||||
padding:0px;
|
||||
background:transparent;
|
||||
font-weight:bold
|
||||
}
|
||||
|
||||
.error{
|
||||
color:#c00
|
||||
}
|
||||
|
||||
.message{
|
||||
color:#090
|
||||
}
|
||||
|
||||
#content{
|
||||
margin:0px 0px 0px 320px;
|
||||
padding:50px 20px 40px 0px;
|
||||
height:100%;
|
||||
}
|
||||
|
||||
#lang {
|
||||
background:#f2eee1;
|
||||
color:#808080;
|
||||
position:fixed;
|
||||
top:0px;
|
||||
left:0px;
|
||||
width:100%;
|
||||
padding:10px 20px;
|
||||
z-index:1;
|
||||
}
|
||||
|
||||
#breadcrumb {
|
||||
position:fixed;
|
||||
top:0px;
|
||||
left:300px;
|
||||
background:#f2eee1;
|
||||
z-index:2;
|
||||
width:100%;
|
||||
padding:10px;
|
||||
}
|
||||
|
||||
#menu {
|
||||
background:#fcfaf5;
|
||||
position:fixed;
|
||||
top:-10px;
|
||||
padding:20px;
|
||||
padding-top:40px;
|
||||
bottom:0px;
|
||||
overflow:auto;
|
||||
left:0px;
|
||||
width:240px;
|
||||
border-right:5px solid #f2eee1;
|
||||
}
|
||||
|
||||
#schema .table {
|
||||
padding:5px;
|
||||
background:#fcfaf5;
|
||||
border:1px solid #d0cdc4;
|
||||
}
|
||||
|
||||
#schema .table b {
|
||||
color:#006aeb;
|
||||
font-weight:bold;
|
||||
text-decoration:underline;
|
||||
}
|
||||
|
||||
#schema .table b:hover {
|
||||
color:white;
|
||||
}
|
||||
|
||||
input[name=logout] {
|
||||
color:#fce2e2;
|
||||
background:#d73e3e;
|
||||
}
|
||||
|
||||
input[name=logout]:hover {
|
||||
background:#ea0202;
|
||||
}
|
290
designs/pokorny/adminer.css
Normal file
290
designs/pokorny/adminer.css
Normal file
@@ -0,0 +1,290 @@
|
||||
/**
|
||||
* Alternative style for Adminer.
|
||||
* Created by Miroslav Pokorný [http://fuch.cz].
|
||||
* Icons by Yusuke Kamiyamane [http://p.yusukekamiyamane.com/] (some of them were modified).
|
||||
* Slightly inspired by themes created by Martin Hořínek and Klemens Häckel.
|
||||
*/
|
||||
|
||||
/*** Fonts ***/
|
||||
@import url(http://fonts.googleapis.com/css?family=Ubuntu:300&subset=latin,latin-ext);
|
||||
@import url(http://fonts.googleapis.com/css?family=Ubuntu+Mono&subset=latin,latin-ext);
|
||||
* {
|
||||
font-family: 'Ubuntu', sans-serif
|
||||
}
|
||||
textarea, pre, code, samp, kbd, var {
|
||||
font-family: 'Ubuntu Mono', Consolas, 'Courier New', monospace
|
||||
}
|
||||
/*** Icons ***/
|
||||
/* Error message */
|
||||
html>/**/body .error {
|
||||
background: #FFEEEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlpJREFUeNqkU8tu2lAQHT8wtlEQcUKUIjVVgaiCVkhIlSq1isSKTdRNuu5P8AX5Alb9g+6zqZR8QNWmC3ZRa1UJIm0hAWpeNthg/OiMechl00UtHXvuvXPOnbn3mPF9H/7n4en1nmGAwy+BAUghTjB8iThY5v1EfMatzhB3Lg4Ib3FzfkPwdUSSKulCIZs6PFSkeFykCi1dL95dXx81rq7e2JZVxbwPf1WwIkuJxOmL4+Ocz/PSzHHgvtEIFhRFkfdzOTmZTu/ULi5OJ6MRrERYemFZKU4UK8VyOTcyTWk4HEKr1YLC+XkAimluPJ1Kz0qlHBuNVoizFsB+Tg7y+ezAMKQRqhuGAaZprkujmOZ0XQcDRfYymay7OKdFCw7Aq61kUtH6/TVpPB5Dp9MJSLfYiue6i555Hna3txXi4PDdSuChx7Kig3278zkYgwGYkwk0m02IRCLA4jy3Usb1qWmKxAlXAA4u2FQ6VuHjbhGcI3IsFgNh47Q5zHXCtzAH+GV0u0Vf02QpZCy1VAq+8Y27ntv2lDjrQ0S1T912u7eF/ck4lheGgpKqQrleD2I5BN2y+sQJC5zd9np1YFlLRldSUhQhCEKwYzRE9jzPas9mN8RZC3hoz4nrVi81TcUFS0KRJM5/yWQCUCwhbCTXxmPV9LwqcYjLkFUZJDzCwXN042OWreQEIftEEJQEx4mUNHTd6Xfb7qu2fdNAcg1d+IMMSNylAB3mDmIX7bWfBzjaA3iKV/dgabT7LsDXbwAfcVsM4TdCQ66zEmBDbfL/+IPJURMyKHK9PwIMAA7iHkoee771AAAAAElFTkSuQmCC") no-repeat 0.8em center;
|
||||
padding-left: 38px;
|
||||
}
|
||||
/* Ok message */
|
||||
html>/**/body .message, html>/**/body #menu p.message {
|
||||
background: #EEFFEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnZJREFUeNqkk01PE0EYx/+zu/TNanTbGCjWhrCmlp6MGl94kUQ9eOCC8chHMDG9mHjiE/QjePGOJsR4QQ8Q0UOJHqgVA6kiKQXa0th97+4OM1tq25MHJ/lvdmae3z/PzDMPoZTif4bEP+RVHBAJE5+QBAjm2d9dpsuncbtM66BYAqUVuGzmUtCFWsegb8yFpEAuPZpWUvGkHA1GQzw/zVSv/aztTm9Vfjy22laeLS0PZNCFzwXPLs5mZzISpLBjO1BttbsXGZfHIkn5Umy1uLbYMvx130TwtykSQSGQm746mbE0K6yqKkzTHFC1WoXe1MK3lVuZABnKcaZn4NL5K8PjiqmaYV3XYRjGgOr1OtZn3mJh5Akcox1OxZIKZ3oGDp2MR+Nyq9VCs9mEZVloqS0cHB6gXC7jdfol9vb28GhoFpvFTXiGJ3OmdwcOTQoQQpqmYePhCpQ3N6HbOii76Y17K36IKIqYeDfpV8q0zRBn+jOA67p4rjzFzs4Ovtz/ACp2YEmSfGXfTwFRFhtm4ZLjMz2DNv1d047MZ6UX/vT4+Bgbd/rgVQZf4LXoyCaWyZn+DD5Wj/Yboixi6vvcX9CHPzH4Yg/mMv/oDc70Gyw1d+vbAohBRgmubz7owAUGjw7CnucaVlXf5kzPwKMVV3Py9c/7Jep4BkkRZL8yONU5c1ee7RhqoVHydC/PGb8NeDMRwvogxa73hjAnjIm5QOaMEkhHZPG8FPKfSdMx7S29YZe0ba/s5lHwlvHLhc+eGvByxpjiSJBhTJBpdu4sK9lI56FhH4co4htdQ4UespUjphpjna6B0HdS6R8dzHtRY9IZ650IMACI9kBqNfbjbgAAAABJRU5ErkJggg==") no-repeat scroll 0.8em center; padding-left:38px;
|
||||
}
|
||||
/* Sql */
|
||||
html>/**/body a[href$="sql="] {
|
||||
background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAARpJREFUeNrE0z9LQlEYx/Fr/gXdJILegSQJEk13yrUxxDFwUhqagyAEF8E34BsIFKlozpqao8K9WVrCJSWu30d+F44SOjj4wId77nPOeTjn3HMjQRB4m8SOt2Fsv0CE8HleYoRdnGEPF8jhB4+4xw0ONLc7R4E7VJBX23JNtJBFSflD9YXjrT3fQhxpfKqqRQEf+MaLxuTVF3e3bo02yjjBrTMojD+9R52+sO3F8KxC13YmeELCHbT0vtBnE6ua1EfDGZRQO7qiQNEK1LiNRzynSKpjCJ+8fY1T5d/VZ+2Y5nQs8YVXPW01+zjGg3JvuFK+q1yoZ3tOaVnJpcOzqOtwzzF28rbaX0zWXbQMBvqc/r83cet/40yAAQCHjz1eQkhXqAAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Dump */
|
||||
html>/**/body #dump {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjpJREFUeNqMU8+LElEc/8w4qeM4urvsCgqpEO7VYu/9YAmkNqiDRNdOQtC5k3QIL127BF78G+rQqegQlBRRhz24S0jWuumOrs74c2be9H2jkuJi+4XPvMe87/f73ufzPk/IZrOYxh1CFOeLOuEVn0izP6PRKFosFl/2ej0MBgNYlo1m06A5g98vQ1VVhEIhhMMh5HL3H3k8Hiw04GFZFjqdDjRNcxs0GjqGIwZFUWHZFkSPiIAiLxxFXHlQAXBocAQ2ASY4fwNKnxQ602LbxXzMU/hSKBRep9PpPcYY+v3+lIpFGvgRDAaJfxiVSuUN5X4+q8FOPp/fmxexcdJFbziG1+dFUFUQJhFv3r6XeZx7yG+g/F8R/5x00BuPIZNwJltD9WAffUNHq9VyeM5Sg2UR/3Fngo3uaRuZBxm6xhzX7grh60oRGbPAzCH6py38qlRgmia0Yw2H2uELWr7OaQszJ5KRduLx+NN5EU3bxPrWOhKXEohejCKgBhY2SG2mnkg8ebIbWxLx5+9jNNtNHOz/wLdP3zEaDLF7dxeRWATbW9t5QRDei7VaDbquwzAMZyZivV4nHKHV0WBYA1zYUJC4nMKYBJ0WP6M93xI+iuVyGdVqlSsvrTQTQVkLovi8iGQy2ZZl+YNt2+4tyGQONRaLBSRJcs3i9XpdCh6fjMCwC9EnQAnKuHrrmuuFUqkk0IkjVKuT27FBiFHHG47jbPKuNE5fAoimwD8QRZGPDp/TepN0ekfrR38FGAASfDL3E+dZ1QAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Modified adminer logo */
|
||||
html>/**/body h1 {
|
||||
background: #eee url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpFMEMzMjFEREIzNENFMTExOTE4QkYwQjc5MjcxNEMzNyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxOUM1RjA3QTRENkIxMUUxODFCNkVBNEZGMDk2NUJEMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxOUM1RjA3OTRENkIxMUUxODFCNkVBNEZGMDk2NUJEMSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFM0MzMjFEREIzNENFMTExOTE4QkYwQjc5MjcxNEMzNyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFMEMzMjFEREIzNENFMTExOTE4QkYwQjc5MjcxNEMzNyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Ph6vyIoAAAJsSURBVHjalFNNaxNRFD3z0Uxm2iRtGhVdBOxOcFkESQ2GNoXgwk1X/Q9uxB+QRf6CP6HQbQs1UFqisREhG4MYJVlEiyR2IM4kZjL5mJnnfZOMpAsFH5y5dz7OefeeuU8AECIs5XK5p6Io3nFdV2aMiRyHh4fPMF+CIPDA+GV/f/95sVg8onTK78OEWDabfaHrOmu1WqxerzPbHrHBYMjY5iZF248c06nHDMP4wTkEVaQLh+R5nuQ4Dnq9HpLJJBxniuXHaRin5+DPB6Uy7HIF8sMHoOqEVCrFNxY4mdcm8ZIXSsVKJgPz7NzPi6cXflTTKUzfvffzSqXiLQoIXNVvkvlt0o4lrO5s+23ndrf8aJdnQnt7ey8DnhiYRKV/yufzpWq1ioODA4zHY+gnJ1jb3cFkYtO9TRVsod83h9TS54AnB0ksFrtfKBQylmXBtm202x1sbGzgV+k1VGqL/hBGFxVEJUmTZfkeUd5cE+ArMLHb7VLu4sPHL7DpmaIqiK+tIrG+jhuJxCIFIv61BAbXc6h7F55AYLP8PwTIOsGbgYvMsbikYBLj8bjSaDRuUX6Xt9But/H921eYug7LMGH9NDGg+Oro+G2z2TzudDqXfBL/eBCJRK6ZyD3QidSzLciKiOUVFdFoBOkn249qtdoZUS4WTWTD4dC7bqKDK8NAb2JB0UJYZVGIMoOmKXwDNzgX4jxhRPyLH2zBhxlM0xQCnjw/THESCNH/5fOAUCjktyApKrRRH6Ii+C1omgpJFrnAEucQulzpNiEZDoczNMY36ThL8zENxtw/HzRIjKJHcOm7q9FoVKJXl78FGAAi7FBT6eTVegAAAABJRU5ErkJggg==") no-repeat 14px center;
|
||||
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;
|
||||
font-size: 1em;
|
||||
padding: 6px 6px 5px 35px;
|
||||
}
|
||||
/* Logout */
|
||||
html>/**/body input[name="logout"] {
|
||||
background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAkVJREFUeNqMU01rE1EUPZkMaGI+JEMkXyaNiKINzSJLBSEEaRbRVf6Ai1Jw68K9O3dCN3ZR/AUxC0UCwW4k4KKoGKVioGATg4kNY2aSTDqZifdOmmmKFr1weG/e3HPeue++59i4BTgceAogg3/H6+kUm+YUDdMEaIRICyBkvPeeZVwul5XlIEVBEGyMXz7C8vJ1HHz/ttT49C4/UPqvKG2T0BANcybNZEmSTpCdTqeFPcqp1Wr8X1q5eVtSep3w14/v8yoJCSwwF/kbmedsN5lMotlsol6vo6eMpBurd1OmgawwMQDGnCzLMkajkU3mkTeYUp2hUAjRaBStVgu6rmNC6yKTOex6x2MLPA8EAhBF0RIwyQaL8Oj1emEYBoF4X4SLIOwwiS3yj2KxiG63i06nYzngTRYFZmWZMwcfxgE2sLNRKNi9GgwGKNB3uVxGIpGwHbC4oihQVdWas7AY1/aZkymVSrZALpdDtVpFPB7/w8H+Txnp+1uYvHkyK+EqeiBkgsEgUqmUpVypVBCLxRCJRGaHuCDAF+fFwzvHDvSjQ+REPjCPx2PdBxbgNe7O5KgEjnjkAiT/udkZsMBYPxZgsIv5nMkM6pjVWo65EDvgzYXnbUBWcKLvi2SO/hDw+/3QNM3CXECldfHHIc7vKdh9vJo97QEJ7rP4PD1wp69cuxT2+XxSu922nPQHJEAJ2lsdDzjx1Dd4iNG6PJS2t+trZ1zu/Ep6KUxuJZWqcuA/Yz0O/KIdlSEuazrWqIIsNWT3twADAMZTN2W0KIqPAAAAAElFTkSuQmCC") no-repeat 2px bottom;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
height: 18px;
|
||||
line-height: 18px;
|
||||
overflow: hidden;
|
||||
padding: 0;
|
||||
position: absolute;
|
||||
right: 8px;
|
||||
text-indent: 18px;
|
||||
top: 5px;
|
||||
width: 18px;
|
||||
}
|
||||
/* Alter table */
|
||||
html>/**/body a[href*="&create="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAl1JREFUeNqck19IU1Ecx7/3drfrXVpJf6BEx53bjK02UaLIJdQsiOrJJvVaL/UePgS52LvPKdRe68GCQOohg4gYmGTZnEzndNPWXpqbNPfH3T+dc3BrDp888OP8zv2d7+/3+f24h/P5/bcAnMT+VlrQNO3URCAwth/17ZGRB4KmqpxODte+Abqu14wkZqbTvf68E//qPQKq5VVV5ekFuq52cmwfsPz3vcT3ynrte9WnGqoVVEXhVJaAw4e4DotQIp0VWOUBiVRMa+BInPpazSdi/RCoVlAUZReB9quIR45Wdp5ZWsI5u535oUgEF51O5n+emyMEHaDaOgIwAq8IfF9ZYf0ebGrCdDTKem6WJHwJh5lPF9VQLU+zqORy/QzOmM1wyTK2SiX02GzoJRT5YhHnHQ5cIBQiocn5fDi7uGhnLTQSzCeTjEASRczGYqyqidIsLCC3sYHc6io83d3oGR29ziuVSq2FKsHp9nY4CEWxXIarsxNuqxUFQmM/+gfq5ibuDg/j2fY2ptzuqV1DrBJE19cZgWg04mc8zgiMlXn8CI3hZr8HjwMzGBwaQjCRWKYEfCOBra0NXYSiTKo4ySzMLWlk4+PwEvHkuxA8fTIsZC5UK5RLpQONBLFUihHQFQ5PIJ98gSuX+vDq9Ue0Wu+h+UQv+5GoVshmMqLBYECwK7/zh4u1t1XIxPB7+SUTvyWV3Zf9OGbuZzGqoVpOkuWHvMnUsddjueNMeZ4Hpz1Pn7jW3oePhyLpw4n6uFYorNGmJWItxIQ9cqTu3+Ams1sYf/NJn22IKcT+/hNgALjZYbRNSSf5AAAAAElFTkSuQmCC") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Create table */
|
||||
html>/**/body a[href$="&create="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi9JREFUeNqck8trE1EUxr+ZTjKZ+kB31UwtSUiVRFykRsGFKGkEF7qqe5e6FARdtVBc+B+0brTg1pU7dSGIWm2sMebRkDQNTVMSoUWC2qZmHp57kkzTuFB64HK/MzPfub9z517pxtTUNQDHsL+oKZZlHX82PT27H/fE5OQtxTJNyabkyiJg27YzqDAPW8y9eef9QuwIhFc2TVMWH4iIBySex/27OkY65rOd510tPMKrmIYhmVxAwquSDb/SpM62eOVxjVasWZDovdCWo8lsH4bwKoZh7CGwqtu4GzrKeaJQQHR0lPX7bBYXwmHWb1IpIjgB4e0hABPEVCC5ssL9HvB48DGf554PahreptOsRQiPQ2DSx7sEwOmREc6/lEqIBINtGip0PhRiPZ/JQHiYgAv0EWRWV5lAU1V8LhZ51UFBk8vtIWgXaLWcFroEp4aHOc+UyzgTCLBO0n483ZlDspGGbul4EnoE4ZV7N1EQiMivrSFHFKrbja/URmp5GR6ieVddwNnoGAq/ivwbuwRyP0HQ6+V8iYqEfT7cSdzDfP0TBqlIw2wALQvxF1dRCX+bUHaazQGrbw+K6+u8ByKy1MaHSgLeeLvohrEB76XOAuUlXfm+uam6XC48Pvmzc8LVv+7WuWoUqZfJ9gm8LEN+TQdKorniriuNWq3uj0Qe/s/l2b5evTl0UR+q56t17bk+J2+5KuLAazQO0VD+WeG2+wH9vzEMSIuY+X2fnvz4I8AAYtpfN5Cu7WwAAAAASUVORK5CYII=") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Create new database */
|
||||
html>/**/body #content a[href*="&database="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjpJREFUeNqUkr+LE1EQx7/7g93sJptERPFSbCGSJkUKK20CinB4d8UVQWytAqIiWEoKi4CVlYJwWNwfoMVZCIJWFhcuTQiCORFDJN5tNtns5TY/Nm93fW8TNcHTOwdmZ1hm5s18Zrh8Po+ZrFFdwsnkO9Ut5og//4zH46WNjY3njuNgOByCEA/t9iH1fUQiCjRNQzweRyIRR6Fw47YgCFgowIQQAtu20el0wgKG0cdo7CMa1UA8Al7goUaVhVb4fzbKAQE1AedPFVM9eQEaPk0MZsleqPMyP0KlVCq9zmazq77vYzAYzEYhlEEEsViMzp9AvV5/Q2N3jipwsVgsrs5DNMwDOCMXkiwhpkWRoBCvrawv3y3cYhsoHwtx37ThuC4UCm7iJylEQFHl/4H4e3af845lcPQWfm3Aw2PjCb7sNWDl2jdPm/FnxCcQMplMGOt5HqrVaoraNBuh1WrhW+MreoYBx+rB6fawxb1F7moOH5rbg70znafmqR5ERpwJtX9CpEn20MGL4SZ2x7tQeQW2Z0MccCqRgx3aVkVsNptIJpNwXTdYhEiwb1mwXQe1UQ3n1y6ED5nExKX1yzp19fcv30Esl8tIp9OQZVn82zHpQQqNV58hiiKk5Sg+bdaak4hnUEYVlqTQ49BSqZTKAtixSJIUjiDICtTRAe7LdxCNKbi3/QBdrwv/kHB42L9Oc/thAapnLctydV1/xGAGQTDbATgq7AOe5zG54q/4ZZzj2sFHlsNO54cAAwDujTg3Gh40tQAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Privileges */
|
||||
html>/**/body #content a[href*="&privileges="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlNJREFUeNp8U11Ik1EYfr795kynaBBLglbtqiyRSMiMunCCF0FgBP14U5d1JdHFJAKD8rKrEAIjqMlGF/0hTHKLSpi15ZoMjdZgbi23ydzn3PZ93/b1nuFkK7cXHs457/s8z/ee853DybKMckxbVNAowSkUOELLXoJhqxQlfCwW4RcKkAfGpG2NCtXBSUUMtuw1DR3qGeqVtXqjkOUh55LBlW/TPalY0EactwR5R4O8KHe27Tt86fjgyOWvTmvg15LbUShKMHTs7zh5+sI173ubcu13KEzUhbJGUWmQE3Cus/+G2ee2BoMRhx369WFla2Y4lg7Y/QuvgkdPDZgZp1JT1cGmgANNzXvao8n5sEoHM6XM5dqfjdB6d4PKyDi1DfIynxdyOXP/eFdBkpBKxZHhk9BpJOzWyhAEMcc4lZrqLYj47PnkWCySOJ9OYy0WRTwSBJ8IoyDl4fniW2Scmh3QIc7MvrEbE6ur+WMn+kxaXWN7g6SHCCnhdLqXAz6/leMwU7MD5lEo4rF37oNl8tGYq7GlFSq1Bi+fT7m+e/0WVmOcegYsRMIsQc0WSnVpUG/lxH/JVVsQpf9rticT72gYLSfpNqJmB+xWV4BjuSs3b5+l+QOWY+KfsToG9+zAcgTIZkso/a6Jh+OvaX4nswk8dQGTrjoGLF7MAUsrQJpHjq1v3R29yPMY+UHGofgOJ8ZeYxnsMRE0hKar3bBGPfdlGqf6DuI85fSEXeyjlRqu8jlzHMc60hGauww4Y2rD9UAcz3wxzFOObSlN2CDN9nH/FWAAi5Yew8BvpusAAAAASUVORK5CYII=") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Process list */
|
||||
html>/**/body #content a[href*="&processlist="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAj5JREFUeNp0k8FrE0EUxr/ZrNvEWlqITdKqTS/ai6AWTyIWFHsTETx4KF49KR68+Q8IHqwgQr2pBasVBEUFL6KtejBLQRDEoiKShBpzWGya3ZnsjG92Z9co6cCPN/Ptm5n33r5huD8MM3acP3LOqbfWWC6Xw93lewFpVf2BnfmFzYaFUMFQ7nQ6E5zzCW1pPa51triR+B4mFo0dM/NRG0IlDnuFECPtdls5jgPS66S9gUy/XyROEw+NZVr85wAuxG7f91U2m2Wkr0ZqmEbLelkbXCYOewTn+4IgAEUC0q34gPSC68Qj4hpRjtIHijaC1GF7KGUpDENQDUB6VEB1zAF76uvpa0MyTsVF1BEYlIyjkfKvxp75yYZDxGMznzLzKRu/KUknTosLDs/z4hQCk1ohvfF7V/6XiBPEExs+OQrSMwyNnw00m83YxY9/rxphYLso3R+SmbzRbS0ozJFjBQ3ekRk6rI/2ZSgqWke6/r4zunjcbNT2KvFcW8Yu9LnTZ09OSqVQ9Wqoe3WUBooobBumFpBYWnjhkuNBdkP07MQMDlgbX9xP5dzk4Gg9oN7JAuushdCRWLm97EJilr2XH1BTR8l/LmlvGg+IlzqFeQg5+/HmOzdfzAODwFBhCKu3XFfrqKp5VKKCXiamjf0WXZ4WtUT2uDWDGatS/rxfaRutS6w72qUedkyfsgXr9Di+qhb60fJW1vJ0/gJeqbek90fdGlMj7hBXCMc0kstMKAPE1v/qo18BN3Q2e85/BBgADNADzS2n40UAAAAASUVORK5CYII=") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Variables */
|
||||
html>/**/body #content a[href*="&variables="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi5JREFUeNqMU0FoE0EUfTvZlArmFpR4L0jT3HvoKR6EQG6eC5bQeuwhIAhpYREUDz2IYKG0SEvoxbOtBIVC793oRTCQQyOlFGNNUrK72Z3x/8nOpkUQP/z9uzv/vX3vz6z1aG0NHJZllank8O/4LKVsySiCUgrfjo9h8w0H1Xu76+ubAS2OOKVERGtm3XVd7DYaT/hblN/53f2FBQhmi9OSDBqNdAaeh+HVFQaDAfr9vq7vHWeT+h4QdsZIsiMCx2ExtaBrOpWaiA5DhETc7Xbxpl5HcXb27et6vUYrzzWBnBAIBgtNg79IisWitpPJZPDRdX8loJAI4qQ5jgnarRb2trbQabfhk/QP+/vwyI4Vk3OvwYmI2ONMLDQODvB4ZQWfDg+RzWbh+z7SQsCmZBLuNTibLzcsUBMD+P56nSJLU7aN1JhATCzwkMYpjIJSuYwXjoOHpRJ+XlzAox0Z9HqYTqf1bLjX4OxwokDPgLNQKCA/NwfeVkmDe1qr6cqZIoWEsRIFZt8pEwVfm01UV1e1nebJCZ5Vq/hCB4nXtAXqNbibFlgBn+dcLvH/bnsbrzY2sLezo58tvasTC+L32ZkhSHaBIwgCbYcrK9E13mbuZQxjRevoCN1Oh4+tHQ8CndNTjEjeD3pfWV7G0uIiliqVRAH3MoaxHLco79ydn3fUtaCBqUhKRcdY0c+l6CdTXhgqn565lzGMtQ1B7/z88nY+/xL/EXI4vIwJwj8CDAAVoIrz1xox8QAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Status */
|
||||
html>/**/body #content a[href*="&status="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAftJREFUeNqkU7+LE0EU/mZ2d3bD7pqckhQqB4YDuQRsTj2t1ULESkgnWKloYRMQizQ2dhZXxkq8fyCFjdrYCAqCCIIgLCgWIkQ0m+Q2+9P3ZnMrNsJ5Ax/zivd973vvzYiiKLCfY/Z6vTbdmwR/j9yQ8NrMsuxsv9+/12q1ulmWIk0zQoIk4ThFnucoTRoQwtQwTYXxePxhOHz4wKSEA7PZrBsEgU5mkKjGv2JCdzQauaZlWflgMECz2dS+eCZl1aKKGUmSIIpiSMkOTO1Sz4BsCiZ3Op2qCltfnFpD9vK9Jk4mIWGOet3X9hnz+aQSkFyJSbtgUnH0EFWMiDil5BiW5RBKMrmmnOiPgBACcRxr4i6c1RbCcIbFIoNt15ZEtXRgUTzVApKSJdvmaumZ4/pm8CEdeJ02jmzdROPSaS1k2w6UsrWIdkCVjdqFk0g3T2Dx6Su8+9eqRXvrx9C4dRE/7j6Bf/083HNXcLi2go2VNh5fvVMJSPHiLSbvPush/nz6Su/dXV/DwduXEQ6fwXUbyLbfIC1yBAIIiMhtVw4cx9F98wC5HaU8qG8LTB89h/M9gUG9S2n89Qx3dsoZmPSILKVUtffyWDTAMYyPvxARUUqxrCgqgSgKaa11T/i+f8MwjNX/+Ujk9gtL1pYfydwjP+UPJfb7nX8LMAC+uy+OK4sAWgAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Alter database */
|
||||
html>/**/body #content a[href*="&database="][href*="&db="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAltJREFUeNqMks1rE1EUxc98kMlkMkkqbaXRhaEStCAhaDeuKii2JBWFtiqCYFcBof+BKW6yU3FpyUJxU1Eo2IKtXdRFV7EiFMG0pVAsxnRmYpPWSTLT+fDNpGpCwfbC4T1m7rvvnt991PDwMPZjkKgLR4sfRNPOhv3zRdO0rmw2+0xVVdRqNRiGCVn+RfYWvF4eoigiEAggGAwglbp5n2EYtBRwwjAMVCoVlEolt4Ak7aKuWRAEEYZpgGZo+AS+pRX6v41SgE0Wm7IaQkNHL0DSGwft/cOmq+ZotvApk8nMxGKxpGVZqFar+1YMwsALv99P/Aexuro6S3KXTisKhhYXWwqcT6fTyWaIkrIDta7Dw3ngFwUECcQriRv9Y6nR6f58PncoxC2lAlXXwRNwe1aIQAR4H4ceWY5EFGWqCDw9BOI/7xbV8C/JRewwzJnI+Ph1GXjIHjqFvxMwsacuYX2Dw6P5+eTV7u4nt2179sgQ620S9rhF3LmWQDwen5Dq9ecjwDLrJDtB1oMQf5ZRqang6RWYpfe43JfA1NsPuHBOqC6vnFzOt7eD3dzcRCgUgq7rditEA1vb29C1zzCNOQwODGDyzRy6e8fw/dWLfEcHjYVyGWwul0M0GgXHcQd4UHoRgvYOg8kEXk7OoLPnHtpO9JILHjNOl2tra+4YefI4xHA47GNZ1n0sHo/HtVBan8Stu6+RnRjB8bOj6Dx1EQxLQ1EUvlAodJKzu4QzjhGFeZ6/ZNt2u2mScdm22wCx8WCoj/76ZYP5uFFkvlEUZRM5/2XSwQLJKfwWYAAtt0zt3hIutwAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Database schema */
|
||||
html>/**/body #content a[href*="&schema="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAcZJREFUeNqkU7tOAkEUvfuABIgsyksTAkgBtISS0kIbYk/sTKgt7PgF/QEK/QMaSDREjQmFNhu0oLEglISHbniEAAE8l8AG2O2Y5OTOnT1z7rk7M8JisaB9hkh7DjmXyx2KoniGuRvozufz19ls9lev13VSJBIhSZJMeVI8Hr/MZDLXwI3T6VQqlUq/2+3W8FEXGA6HNJ1ODbzRaFSTG43GMUTOmcQR+ZOiKNlNm+PxmFqtlm2Xx9/gTIp5PB4lEAiclkqlt2Kx+Gmz2R5kWVYnk0kSnHy/31exwcDTNO1bgB0P7KZB9AEtCBbRayeRSHABdpKvVquEnk15MhY76O9x07LX66XBYKDnbrebms2mgQcBks2OxmKxEGzrOaxTNBpdblgPOCL+0QYBq9VKvV5vay0YDBIu3BE2XbAe0EH+jPhLDoeD/+RWdZzCGlm73U4+n49SqdRVuVx+QdUFR84BEkyvJ/cmL82lUemEJ+Fw+EBV1bs1J5lM3iLcS2YC/D64P1j+wVxdIeb3+12hUChcKBTecYwf7Xb7a9MBz1mQS1u5m1VcAq5cAN8LF6BBXAXquwLC6oFJJhA3wLwp33Jh3+f8L8AAZ3ntkRsbeCkAAAAASUVORK5CYII=") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Refresh */
|
||||
html>/**/body #content a[href*="&refresh="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAt9JREFUeNqkU0tPE1EUPtOZQh9QSVsKtAgB5A3RWDRaU+PCR4RUDSZGSTeuiDvjD3DRhJ1xYeI/MJi4wMRHosTEuJCNEqJBQQtFaAuhb0amnee9nlsLNW5cOMk3c+fc8333nO/McJRS+J9LYLfjD1ZBMJtBEAQw8byX47hxDAcQPZW874g5PGyGELLJ83wY34Nvb3omhb8EQwJPI4cO2tytjRanwybYWFAs6v2JtByMrktXCaVzhq5f2COY9qmUhqy1MHXltOdIm9PSyulgK5UMUBSCZXK2dpeldeyk+4yO5PCY14/PaguUEC/PkchYoGk4tVmCkqrLK1tSMpEuFth+h8/ecKzf1ZVNy3D9vM+/k1dBU9VqBbqqjnf5rO6tuAjZ/K785kPiy3qycBeFRzRZHonGcq+mX0bnPS1WWI/mQNd00BWlKqAqyim3w+zcyRfhayybRPX7aNi0JIpsL4w4cSs86BfzJWhwWcBiFVi82gKe0s1znE2SNUhuFwo4iWlD0wAdZ94E2ajvPZyb/9NtnNT8vgBTkxQdJIOU18QwwDB0qLVY2XgnmRDrGUn+kcPt9c1NdfT568X1aguyHN0uyEXJJIDjgLUBPZlQSzLkUinIZzKwg8Aqj9bV1ZzDnKF4erdRUxTzvgC+vF+LZ3KiUAstvW0+PO0Olj1R2cMu6CjGrnn72lswh9tIZFWM71YFVHVmbflHhtitkODtlqHRwKCnrTGCU/iIeIfr20MXAwNJcz1lORvRuIScbNkLZpAj/Jj1HeLttinX5dHhkk7BbubAUVPWF0WVJCWNxqwCt5J9+mLBKMmzaPSW+OjGbwE0B0yePjD1XgqZfMMRc0+3m+vscBKni33KoimXjdHV2JIWjX4mycUn5NuzGEktQ5lbEWDTcCHcnGegmes8GwRn9yDw5k6MSaDLC5BZ+kRXZpdpfu0nxtKIDHL1PQFWq60C4R9/sFEWBSgil/wSYABg+JOXZhLaRAAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Show structure */
|
||||
html>/**/body .tabs a[href*="&table="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAoJJREFUeNqkU01oE1EQnk02iTFQE7QihUKRkKTF1iU9+FdQCoWYgAcPegkIeiiIWiHgwUvpQXs1Ggo99OYlFwUhWAhYhZJWUmhMxJbYYk1LFDcmJraSv911vjQbevPgg9kZ5vu+eW9n3hM0TaP/WSI+gUCADAYDmUwmEgSBUNRoNJ5jaKjNSyuKsqRjjUaDVFWlWCy2X0BfDJ5nd5r9KxZI0Wh0BuRgMHibcznGrrD/wD6hawwHxBdcLte12dnZGYfDcYOFhkJBpnL5F3Y0IAcMHHB1nYAj+Xw+xHeZ8FSWf1BPTw+trqY2JElyAkilUhsej8dZKhWpu/s4jY+P3+P0s/n5+f0TVCoVqlarL0Oh0KTZbCZZlmlgoN+pqgrBEO/u/iZg4IALTecX+BQX6/X69Xw+v8e7bYqiSMvLy+t+f2AGhhg5YOCAC43+7+T1eh+srCS1hYU32tJSQkun09rg4NA0TwLTIMTIAQMHXGigbU2hVqsZq9UaNZsKKYrKoxRZKDYwKizEyAEDB1xoOk3kzo6xP4PExMT9WyMjl/q2t7+npqYevkBucvLx1d7eE9Li4tutcPjJXEsoCO+z2WxcP0GcC3zmDt8ZHj7bVyyWyO32SLHYOwl4ufyTdna+ELCuriN2nlSEC2x1mshdRZGbkchcSJaLfCOtFI+//prLbRIMMXLAwAEXmk4T+ZLALo+Ojj1PJtc1t7s/bLfbHyUSGQ2GGDlg4IALTesd6Y8JY7JarX6bzTZtsVhOwq+tfdMymZx2MAcOuPrmrSYKaDHRUbZjbIcA8sM6xQ9sADFP4xNf54/t21tnk9kKrG3qBdCLw20T//GCFbY9tj+sVf8KMAACOoVxz9PPRwAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Edit row */
|
||||
html>/**/body table a[href*="&edit="][href*="&where"] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2lpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wUmlnaHRzPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvcmlnaHRzLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcFJpZ2h0czpNYXJrZWQ9IkZhbHNlIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjcwNEVCNDY0MDM4NzExRTFBREUyQ0JDMzAwQUI1NjI2IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjcwNEVCNDYzMDM4NzExRTFBREUyQ0JDMzAwQUI1NjI2IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzMgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ1dWlkOkFDMUYyRTgzMzI0QURGMTFBQUI4QzUzOTBEODVCNUIzIiBzdFJlZjpkb2N1bWVudElEPSJ1dWlkOkM5RDM0OTY2NEEzQ0REMTFCMDhBQkJCQ0ZGMTcyMTU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+MT7FiQAAAiZJREFUeNqMk1FIU1EYx/9nO3e+NranKIw2ErM9SQQXxCKMRdFDCWEaNIuIetseQiIKG/jQQ4H0kkQxdLRaYiijtdWwljjKjQlNRQPHEhWUjca9eb3bPd2tFTdrrgMf53x8/98533e+cwhqDFsDQccpILHYXvbv+f1NBcD5DfB8BcZpLfDAvp9+YrE81c+azc6jLlf3RE/PLgWgtBaoGVZZltv4dLpbcjph6+w8Fhgc3CD/AQIMhzOr5osOV7orlUrBaDTC29gY2L25eZPurwfOtAIHW6rUosKyjOtXr7ns4bEW7G1+Bp7n3Tv1eq+V42bojfMAIdvDpzv67MWiDIvFguFHTS8FgfrnCJmZ4zhUvUQtLEkiVlYWEJ98MW7dg35F0SV/yWgtWBByyGaXEH379L16oFtPyRutlG4H53KrEIQsXo0ORQ0c7qg9C2+V02rw2loakvQdwz7PhMGAXkYR0krVlpaN/gteXp6HohQw9MQzqcK3GSO/Yd8YgyiKf2bAGBrEPC6fdfTZM5nPqq/g8YA3pqZ9S42V4ZEww0iI/VUxFSUYCkW0nbsSOT415YbJZMbDB76PtARTvA5GgWBUqdosmhdJs413tBOdbofR1CXev+uI19Ux94ckCb77xGr9NdD1PE4eOnKhdfR5/3Qk5I99WUIgkkBcLcykxhWNFbf4pd2V0htkl06QgdkMYskFTOdFtlERF0qXXZm1a7kSL9sPAQYA2Q4Ie25SbgYAAAAASUVORK5CYII=") no-repeat 5px bottom;
|
||||
display: block;
|
||||
float: left;
|
||||
height: 16px;
|
||||
overflow: hidden;
|
||||
padding-left: 24px;
|
||||
width: 0;
|
||||
}
|
||||
/* Select data */
|
||||
html>/**/body #menu p a[href*="&select="], html>/**/body .tabs a[href*="&select="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdVJREFUeNqck8tO21AQhn8bB8ehRe0SUEBOlIsSVFGqqlK3oey6K+9A96wTKU/RFU/AG7CrKhAg7gmKiJKIplFWqItWIQEfuzOT2LmsSo408j+2/5lvjo+1rULhM4AFTLfahuu6i3vF4rdp3F/y+W3DVUrzKNk8BTzPC4IKS3h8Hc0Hz49zr8BeXSml8wu8PsU1uW7EhjpHOmd7wX1fs4e9hnIcTUkBDfs1DzGjS5N1pPOGRR3bLjR6ztoNNJm9ebDXcBxnjMD99YCdzGvJT25v8T6ZFH1QLuNjNiv6++UlESyDvSMEEIKcCZzX6zLvXDiMo0pFZn5hWfhxfS2aF3sCAkUvDwmA1ZUVyS9qNawnEn0aKvQhkxF9WCqBPUIgBSYISnd3QmCZJs6qVekaYZqbmzGCfoGnp2AEnyAdjUpeajTwJh4XfU778S6d7tNQISlA3rFN9AkqzaYQmLOzuKIxuGuYaE4H++F/RvbqVEVXE+cgsbSEFFH0Hh+RtW2sxmLo9npYoy/yNpUajkBeo9ftzkwSVFstIeBVpjH8rhc0xigBe43f9/dmKBTCburv4ISb//VvsYe9mmXbX/VIZHman8ntdH7y0BbFSwrjmX6H4s8/AQYAQChL+KIinhAAAAAASUVORK5CYII=") no-repeat left bottom
|
||||
}
|
||||
html>/**/body #menu p a[href*="&select="] {
|
||||
clear: left;
|
||||
display: block;
|
||||
float: left;
|
||||
height: 18px;
|
||||
margin-right: 5px;
|
||||
overflow: hidden;
|
||||
padding-left: 16px;
|
||||
text-decoration: none;
|
||||
width: 0;
|
||||
}
|
||||
html>/**/body .tabs a[href*="&select="] {
|
||||
background-position: 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Edit Sql */
|
||||
html>/**/body #content a[href*="&sql="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY1Mjg3MUE5NEQwOTExRTFBMTlFQjAzMEMzRTgwNzJGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY1Mjg3MUFBNEQwOTExRTFBMTlFQjAzMEMzRTgwNzJGIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RjUyODcxQTc0RDA5MTFFMUExOUVCMDMwQzNFODA3MkYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RjUyODcxQTg0RDA5MTFFMUExOUVCMDMwQzNFODA3MkYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz67SGPfAAABvElEQVR42sTTSyhEURgH8O94jRqTJg1lo6YsptGIpEzKa2FhRGhY2chCWZDSbHATmkgkC81CInklpCxGmlGy8QqTopnFJEXyiGsadDv+p87UbKwsfPXr3PP67nncyzjn9JdIoD/G/ydgiFKUXfAIJmiCLOgEC7zBNmyCAlabwZAx9f6uTybqFRk2oAXy5LNoG4ZRyIAq2W7bXWBkNBq9DRbLClcUvsXYvtgCEpEeArAqV5YPl8v9/AmlX47Jw4WVmUym7MXTU2e1xzPxzPmwSDAOTqiEJZkgObZH7zxpot7iIGvkg3rP/Y1Ws9m8fhyNzqHDm4ROnzzMPnEmsAcpkBhLUlJAmeXF5Kiuc9mUAfdrmi4xFInoL2K30CYnrcOgnJMi0ecXVTgqKKe1zWWbnXH7dvx0FwxrN5qmUTtjhSJBB77GIpTfoJMJrqD0IED2+wca6+5xGacn3SeqykcCQYqiL0lVVTHHIwaH4VCWYjXZUAxbtXb2ytVrrnSyUH0VNctDDsdZE3tOlcvVxR8eIhPOakrY0+0jDV0E+RHqX2JX8AGq9GukQS4cwAvUQLq88lT5sgT273/jjwADAGLJkFFBwODaAAAAAElFTkSuQmCC") no-repeat 2px bottom;
|
||||
margin-left: 10px;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Inline plus */
|
||||
html>/**/body #content input[src*="file=plus.gif"] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAelJREFUeNqkU81qFEEQ/tr50UncrI4iwq6oRJCIIV6zxFxE9iCIbxHwXXwA32CPXgRFEZFgPGgiIcfNn0hgYU1mnV070zPTbXXP7Mwke4hgNzVT3f3VV9VV1Uwphf8ZDJ2r9GUXSVuhdZvEP8PmkOQtFF5CqaFttpRauXN99vmDmwtNz7ngVtGnI+QxF9/3Nme3ezt6+cJGavbbCzfmm+JP5ApEBXgwGJh/vV6vcrj3G/ea2wc77ZzAePAtWG54HBaoMAzxefm10VufnqBWqxVnnue5ZGeuaiPJQoyiCJzzAiSEOKFXzxhjGNsVBBpUJdF6v9836/0f+5BSZga2Dd/3JwniOMZoNMK3x+/R6/UwHA4NgeM4+PronTHUMvemhTAKJwnSNAVPOLrdrsm8BmvjseFYQDVKnKRCEGfKkThC4AR4uPU0uyhhNpY+GKP5j8samY0ZcsaodPGpCAIrgJoifWpccJReL+vUl3WUNCciENQBOIcqqiQ4j5JYNxfNMoLIZPcwllQGD2UXkse59VamN072suSSSiZ1S8PCLt3nFq5Jnt61G+40m2aWua+dvwo/13MhnDj+MviZHkQddMQaM5AZdhtL7BmuYJHWl854TAF+YQ2r6hV+q12Wp6eGMs//OhLd8X8FGACYiuElnjs9iAAAAABJRU5ErkJggg==") no-repeat left center;
|
||||
height: 16px;
|
||||
overflow: hidden;
|
||||
padding-left: 16px;
|
||||
width: 0;
|
||||
}
|
||||
/* Inline up */
|
||||
html>/**/body #content input[src*="file=up.gif"] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi1JREFUeNqkUz2IE0EYfZOZ3WySi9FAPLU4fwjEw8IUhyjXxUYrK8FOG8FWQQst7OxEUE7wOq200qv0GguR4+BEMIpwGDxNBE8vcMZcsv87fjPJrkl1iB885s238958M/Mtk1Lif0KI6iINLAfGzhOpEXZto9kkvISUDwHZE4OcvFA9svfS7LH9ZSttWOPrJeIi1Wg7vrO08rVS//idUWpOIArVt9qJmaly51ff6oxIO53BrFAojDpaM0f3lesfvtUGBlIbFFNMWo7jjO399HZFj+eufxnLm2bGIl1R8ZSugOB5LmzbTvD41oFEoPjoN9t2EOuEDAO1hjmOB9d1teDF/arm3W5XC6Iowr3LOZy8+AZccJRKRSogYMMKyCAKmO/7CMMQC3em0Ww28Wyxjna7TZV5eLfaBeccrx/N0pUK9Pu+1ihtbIAgCGG7ARqNBpberuPm/AYMw6B3Frh2t4n3n3qaCzMLyUzEOoHhEbb6EXoex9kb6+D0kkZmx0BAUPzq3AZCvwUzUwDjVP3wCEI7kYEdmjDSeQ0VvttLDISRpXxuvD2i2CD0tQFSalH6b/tQ1yQGZjYxTiL0hwaBp9vT86UrrInEgThOX/mseb50aEzr9Xsu6VRLg8Ndpf0PTwaOU9m5ZypnWBMixQ0oZPK7NeK5gu/Y7trKq9bWz9YT/H6wrMooghUPgp86AzZ5nNy2+ZnkJuSPZYTPF4iuKYOMqlIf599C3X73jwADAG6CADM79TwjAAAAAElFTkSuQmCC") no-repeat left center;
|
||||
height: 16px;
|
||||
overflow: hidden;
|
||||
padding-left: 16px;
|
||||
width: 0;
|
||||
}
|
||||
/* Inline down */
|
||||
html>/**/body #content input[src*="file=down.gif"] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjVJREFUeNqkU01oE1EQ/l72vWTTZps22B+ltCiBRItYsYhSBIkXxUMv9qzgQaH04kEFe/WsIh486s1jDyJePIhIoRepogjRYipoNRBjmuz/Pue9dJf0VKQDHzP7Zr5vZ97sMikl9mKcT78kx/rB2GUKKoShXTgNwitI+QSQbd49k1emp/Zfnz05WTQzwtxZLxE3qbzt+M7b1W+ltY8/GB094ohClaucnpkoNv90zGYPtdnsPuXz+V5Fc+bYgeLah++VroDUAoUUk6bjOElVq9XC84dHdXxx8T0sy0py6XTWJF5B38F2B/A8F7ZtJ0We5+2Ie3NCUPfbPC7DQHnmOB5c102KFKFer2tfq9UQRd2LMLiB4eECNRCoO0AKEQlEAfN9H2EYYvneYSxeMvG73tAC6u0SBh7cnsKbp7MUc3Q6vuYoLtcCZEEQwnYDVKtVTI5I3F0Yp1YF7Znj/s0SThwZ1DFP90EygZiXghqB2tnqRGh7Bubv/NSFx8sDXQIhJp+5+g7CtMBEVnMUNxnBDtMQGQu5oXHML9UTcoyz1z7pXJoEDJFLRqAOaJ7QZ0j1aQGFgX2HMHdrMyGfW/iiz+K8guYQlyPQ62p4vnS5mcvEW8iPlXHhxtck7jWv03aJ19BbgfuZllgeDRynNDg20S/MHE8ZAgpZa0QjflbwHdtdX329sfVr4xn+Pl5RuyyAFQ7COD8HNnqK1Hb5mWQDcnMF4YtlCteVAF0pLP1V/p+pPbb+CTAAmwfytdL1/44AAAAASUVORK5CYII=") no-repeat left center;
|
||||
height: 16px;
|
||||
overflow: hidden;
|
||||
padding-left: 16px;
|
||||
width: 0;
|
||||
}
|
||||
/* Inline cross */
|
||||
html>/**/body #content input[src*="file=cross.gif"] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAe5JREFUeNqkk89KG1EUxr+ZubnUjJaipgtNtTZKxE1AVIi4yM5tF30Hoe/iA3TnQkTBRbZFKApCAl1142CJqLR0ZUNJJpPJZP70nJvcEK0SpAPfzD3n5vedM2dujCRJ8D+XODIMGMA4aYfibdLkCKZO+kxlP5FcwRla7MytrHxcLhazMp2WT5HcbeB5gVOp5H44Dqd2RdTb217a2Mi6vi/h+6O6lu9WV7M3jsPd7ppsQJqMTVO6rgtWdn8fev1YrpskkhlmzZBuLJ8qN5tNLJfLqgw/OX4sxyaaE2G/L8/z0Gq1cLy4iA+1mjKcOzhQ+RrFpmniy9oaUqkUMpkMNDcwCIIAYRhiwraxNz2NwskJLMtSgJQSZwSr6Xa7aDca/xowHFB7Xr0OO47vwazx4W9PJpozu2xK6hCY3N1hLIqQPz29BwshULq8RJp+x5JUTHODIRpkkKbv/GYI/ra+jq+FgjJgbV5dKYMX1KHmBh1ImgFv3pZKCr4geJZiVjWfV+2e53K9LqiQ5kSnfzwjmuIY+cxT8J3g+aF35nWVYJ1rx3HQ6R1pWNd0ewu8bkdRfkYI2zYMi/8M4oF0juGq7//8FUWHh0DF4L2XwMIW8H4KKFL8asRR/vObwHOg3ACu2YA6x0S/wHMunmHzrwADAPb07huzEp/RAAAAAElFTkSuQmCC") no-repeat left center;
|
||||
height: 16px;
|
||||
overflow: hidden;
|
||||
padding-left: 16px;
|
||||
width: 0;
|
||||
}
|
||||
/* Delete */
|
||||
html>/**/body input[name="delete"], html>/**/body input[name="drop"] {
|
||||
background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjE0RDRCQjlFNENFRDExRTFCRkZGOUEzNzI5RTFCODEwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjE0RDRCQjlGNENFRDExRTFCRkZGOUEzNzI5RTFCODEwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTRENEJCOUM0Q0VEMTFFMUJGRkY5QTM3MjlFMUI4MTAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MTRENEJCOUQ0Q0VEMTFFMUJGRkY5QTM3MjlFMUI4MTAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5zX5oGAAAB3klEQVR42qRSvU7CUBS+LQXaBgIpgSiJEpIuxMlVwgMwuOAb8Ah9AgZnJmfeABYegMHoGxiW6qAJJg3UEJAWaIvfKW1TjamDJ/l6b+893/n57uEOhwP7jwn0GQwGjOM4H7Aq0AGugPPA7xV4BEbAjJISut3uMUDMrgVB0CqViqrAstmsSI673e7SNM2WYRg3juP04Tf+VkFIBqGnqmoDlUie5zHLssI7GfHkYrFY0nW9t91uWRiEDxyqqVRKq9frDWSTiEhOcdAZ3dVqtQbP81rQ6rEClNkpl8uqbdsSSkwUDYkkVKLO53PS6S4M0JQkSdlsNpGj67qU0QftCUEAJsuyQpx4gDMsIjm12222XC4ZqvFfJZPJMGjjE8mGwyHb7/diwIla8DPggkFpf0+En2RfNP4oWzg/fgAo/obyLxFAnkwmf2lA/jZx4hU8rNfrJjLKwTAlGpKZxImeET8j9P0MsoVBYkmA4UUtnTjxADOaMPQ/xd6iPn8DtLEWi8UUa584UQuYLiaK4rhQKNCzafl8XgWUdDot0j20sVerlQnoKL+Pasf0SvFRFnBQAl6g+m0ul2tBjwucnwb37wj8BJ3uMZUG/k+AOeCEATzgk7qBwwcwTdDQDXyJw74EGAC1PioqQ6UN2AAAAABJRU5ErkJggg==") no-repeat left center;
|
||||
border: 0;
|
||||
cursor: pointer;
|
||||
font-size: .9em;
|
||||
padding: 1px 5px 1px 18px;
|
||||
}
|
||||
html>/**/body input[name="delete"]:hover, html>/**/body input[name="drop"]:hover {
|
||||
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjFJREFUeNqkU0tPE1EUPvPoOHdaSSkUsYkY2xLTmpCQmJBAumBNZIFLoz+CX8Av6MpfoHHLhgXsTTWE7ohtDRhEkrGpQy0M7e3ceXnO2Db1BQtv8s3cx/m+87pXCsMQ/meo9HktSaDgnyABZBAbOF1GzA3sviDeoatthOnjgvAcnau/CT6JMbaZXVjIZ+bnU2xiQqcI+eXlonl0VDo5PHwqOC+j3c4vEQzJLJncWlpbK4SqyhzPA+fiYnhmzBYKRjqbnaru7m51f+5HIhJ5eCVJmVu6/mZ5fX2Juy4LguCv+UqYqhqG/GBvb184zrMXYWhGEWA+G3PFYv67bTPHca4tWiwWYzO5XP60VqM6vYwEPICV2+l0ymq3R4au60Kv240ghAAPU4pyVlWYnpxMEWdc4F4gyzoZlSoVME0TOp0OKIoC8XgcEokEaJoWCezkctDv9XTijIpI2h56FLYNjUYj8oah/kGmwajdaOuNd8EFOLNbrcXQsozG6uq1NUiQvRB94oxHUGk1myt3VNUwUP2mccZ5mzg0lwcC25/Pzz+BLHMDW2VQ4/8BbDFvOs4xcUYC2HWz6/vl95ZVxwPOUIQN8h2HQHL16qreC4IycUYXiS7IfVw8xtv4QJY3C5qWf6hpqaSi6GTU8f3+RyHadSGOT5BcxWac4n7EHQhQLaYQ0xmA2SJAaQbgET6uu4OL9rUF8KEG8Bbd4hS+ISzkekMBeSxN9YYa0kPsInrIDX4IMADJaAE/Me2jPAAAAABJRU5ErkJggg==");
|
||||
color: red;
|
||||
}
|
||||
/* New item */
|
||||
html>/**/body #content p a[href*="&edit="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAetJREFUeNqUU01LG1EUPW/yQsigUmOISZSkYxdVwW2lm4KkFrpwV6F/QGj3Lrpy4a9oN/0FBcFNQYWIuFHoIsRSWxzFkjZCsKaZNElN5r3eOzMOtEg1F87MvTPvnHfu+xDPVlYghFgAkEH/UZVaaxCy71ZXX/fLpslfSOW6nAtNjycfgEAQSqkQ19X7hTsgrpCuL2AozRIC8/cENo6091aKQL83bKBgsYiPrWOAxxPXkG6v5zlwA4FNW2NCdqC//4Lm2QiP40Q8UxDKB9euHgJxhez5AoED+DNX2lieToS97h0eYnZyMqx3SiVykANxDfnz4QkGd3Pf2MFisgs0NKxhidNaLVwPK5PBcbUa1plkEjzec3A53NQXD+w5l6y9+fz01jtQTL/3HbQc5xSmU2RFyjH1aOZG8qedsufAE2icn+cHOqk5+lCkHHtr27dy4Al0u0IatbgY+mg9V0sarwoHoC4xEWnDku2w53/BoQIHRrI0zUmeFdfrcbQTJsoOkE0kMDYygnFasEaziVwqhfzoKO6m0/hRr185MOTvTocFI1fbyOegEAO+VCrhyeMo2/ZfNY8nbkReUN8UsWg0irf3m0GHpIDsf9eAxxM3JmJkyzDNl4Rcv5dJtVpfRZCbhEFupQ8+XyLnjwADAJgWSEmnMNKYAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;
|
||||
}
|
||||
/* Create view */
|
||||
html>/**/body #content a[href*="&view="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAkVJREFUeNqkU89rE1EQns1udhOCrk2KlxIhaaGHFPfQBFJYxFbc+gtvkQq5+uPoQfAPEHJQemnFIAFFzCFYycGLGEgVElgMRhG7OTRiKiaVKCkYSTTbbF5nYuJBDxYy8LFv3sw384b5lmOMwShmgxFt5AIcWv8wGOUg4jhCQ/gR7kHeDuIjIoN4iWgOecMCHBY4L0nSJU3TpqLR6GHDMFz5fF6koKqqZiAQaCWTya+ZTOZDp9NJIO8p9aURHIhroVDoRi6XU9Pp9LRlWWNer1dstdpAQJJIdxSjHMolTp/L8/wp7Lper9c77XabEbLZLCNLJO4zVZ1nmnaO4avYME65xCGugFWWwuGwG58vmqbZnysWi2FnC1ZX431/cnIGqtUSDOOUSxxstEQFHhYKhbFmszntQKMEn88H2awOc3Mn+wSHQwK73fenwC805HwiLm+z2b5UKpWerutWMBgcl2X5AM4LhvEe/H4FZNmN3Q1YWDgG8e4juLm5vLvyPP7ZePD2Dm2Fx1EtPGzUarXtVCr1vVwuNxRF4Z1Ou1gqvRIbjS1QlMAPj8ezdbt6Vzhz+qwrV9W/Iedq77qrSzvkEYcQHlyNG180gd8j6MuDDYF12bnIpvhxEDgzcjHiX3uyZgDPdVGGBW6gRkp0Imjv3D9yW5GfzUdOHP37+kV6/Q33X60uSqhL6R4wmCV35oIyu/H4XfG3DKEo7EvwDK5AF6W+y17vWKjqnz0AOxfEkUDY919TxxV2WXH71iYgsUhkmJBgT4ABAOtC+bduhTyuAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;
|
||||
}
|
||||
/*** Messages ***/
|
||||
.error {
|
||||
border: red 1px solid
|
||||
}
|
||||
.message {
|
||||
border: green 1px solid
|
||||
}
|
||||
.error, .message {
|
||||
margin: 1em 0 0 0
|
||||
}
|
||||
/*** Content ***/
|
||||
#breadcrumb {
|
||||
background: #fbfbfb;
|
||||
border-radius: 2px !important;
|
||||
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;
|
||||
margin-left: 0em;
|
||||
}
|
||||
h2 {
|
||||
display: none
|
||||
}
|
||||
#content {
|
||||
margin: 2em 0 0 21em
|
||||
}
|
||||
.tabs {
|
||||
margin: 12px auto 10px auto
|
||||
}
|
||||
#form + p {
|
||||
margin: 20px 0
|
||||
}
|
||||
/*** Tables ***/
|
||||
html>/**/body table tbody input[name*="check"] {
|
||||
display: block;
|
||||
float: left;
|
||||
}
|
||||
table {
|
||||
border-radius: 2px !important;
|
||||
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;
|
||||
}
|
||||
thead td, thead th {
|
||||
background: #eee
|
||||
}
|
||||
table tbody td:first-child {
|
||||
white-space: normal
|
||||
}
|
||||
td, th {
|
||||
border-color: #bbb;
|
||||
border-width: 0 1px 1px 0;
|
||||
}
|
||||
#tables a {
|
||||
height: 18px;
|
||||
line-height: 18px;
|
||||
}
|
||||
/*** Links ***/
|
||||
a:hover {
|
||||
color: #3b82ca
|
||||
}
|
||||
a, a:visited {
|
||||
color: #385a75
|
||||
}
|
||||
/*** Sidebar ***/
|
||||
#h1 {
|
||||
color: #222;
|
||||
font-style: normal;
|
||||
}
|
||||
#menu {
|
||||
background-color: #fafafa;
|
||||
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;
|
||||
margin: 0;
|
||||
padding-bottom: 0;
|
||||
top: 0;
|
||||
}
|
||||
/*** Forms ***/
|
||||
fieldset {
|
||||
border-radius: 1px !important
|
||||
}
|
||||
/*** Others ***/
|
||||
#lang {
|
||||
font-size: 0.8em;
|
||||
left: auto;
|
||||
right: 6px;
|
||||
}
|
||||
.sqlarea {
|
||||
width: 99%
|
||||
}
|
||||
.jush-sql {
|
||||
padding: 1px 2px
|
||||
}
|
||||
p {
|
||||
margin: 0.8em 0 0 0
|
||||
}
|
@@ -19,13 +19,17 @@ class Adminer {
|
||||
|
||||
function database() {
|
||||
global $connection;
|
||||
$databases = get_databases(false);
|
||||
$databases = $this->databases(false);
|
||||
return (!$databases
|
||||
? $connection->result("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', 1)") // username without the database list
|
||||
: $databases[(information_schema($databases[0]) ? 1 : 0)] // first available database
|
||||
);
|
||||
}
|
||||
|
||||
function databases($flush = true) {
|
||||
return get_databases($flush);
|
||||
}
|
||||
|
||||
function headers() {
|
||||
return true;
|
||||
}
|
||||
@@ -37,15 +41,15 @@ class Adminer {
|
||||
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 id="username" name="username" value="<?php echo h($_GET["username"]); ?>">
|
||||
<tr><th><?php echo lang('Password'); ?><td><input type="password" name="password">
|
||||
<tr><th><?php echo lang('Username'); ?><td><input type="hidden" name="auth[driver]" value="server"><input id="username" name="auth[username]" value="<?php echo h($_GET["username"]); ?>">
|
||||
<tr><th><?php echo lang('Password'); ?><td><input type="password" name="auth[password]">
|
||||
</table>
|
||||
<script type="text/javascript">
|
||||
document.getElementById('username').focus();
|
||||
</script>
|
||||
<?php
|
||||
echo "<p><input type='submit' value='" . lang('Login') . "'>\n";
|
||||
echo checkbox("permanent", 1, $_COOKIE["adminer_permanent"], lang('Permanent login')) . "\n";
|
||||
echo checkbox("auth[permanent]", 1, $_COOKIE["adminer_permanent"], lang('Permanent login')) . "\n";
|
||||
}
|
||||
|
||||
function login($login, $password) {
|
||||
@@ -64,7 +68,7 @@ document.getElementById('username').focus();
|
||||
|
||||
function selectLinks($tableStatus, $set = "") {
|
||||
$TABLE = $tableStatus["Name"];
|
||||
if (isset($set)) {
|
||||
if ($set !== null) {
|
||||
echo '<p class="tabs"><a href="' . h(ME . 'edit=' . urlencode($TABLE) . $set) . '">' . lang('New item') . "</a>\n";
|
||||
}
|
||||
echo "<a href='" . h(remove_from_uri("page")) . "&page=last' title='" . lang('Last page') . "'>>></a>\n";
|
||||
@@ -155,7 +159,7 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
}
|
||||
|
||||
function selectVal($val, $link, $field) {
|
||||
$return = ($val == "<i>NULL</i>" ? " " : $val);
|
||||
$return = ($val === null ? " " : $val);
|
||||
if (ereg('blob|bytea', $field["type"]) && !is_utf8($val)) {
|
||||
$return = lang('%d byte(s)', strlen($val));
|
||||
if (ereg("^(GIF|\xFF\xD8\xFF|\x89PNG\x0D\x0A\x1A\x0A)", $val)) { // GIF|JPG|PNG, getimagetype() works with filename
|
||||
@@ -163,7 +167,7 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
}
|
||||
}
|
||||
if (like_bool($field) && $return != " ") { // bool
|
||||
$return = '<img src="' . ($val ? "../adminer/static/plus.gif" : "../adminer/static/cross.gif") . '" alt="' . h($val) . '">';
|
||||
$return = ($val ? lang('yes') : lang('no'));
|
||||
}
|
||||
if ($link) {
|
||||
$return = "<a href='$link'>$return</a>";
|
||||
@@ -177,7 +181,7 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
}
|
||||
|
||||
function editVal($val, $field) {
|
||||
if (ereg('date|timestamp', $field["type"]) && isset($val)) {
|
||||
if (ereg('date|timestamp', $field["type"]) && $val !== null) {
|
||||
return preg_replace('~^(\\d{2}(\\d+))-(0?(\\d+))-(0?(\\d+))~', lang('$1-$3-$5'), $val);
|
||||
}
|
||||
return (ereg("binary", $field["type"]) ? reset(unpack("H*", $val)) : $val);
|
||||
@@ -196,20 +200,19 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
}
|
||||
$i = 0;
|
||||
$fields = fields($_GET["select"]);
|
||||
foreach ($fields as $name => $field) {
|
||||
$desc = $columns[$name];
|
||||
if (ereg("enum", $field["type"]) && $desc != "") { //! set - uses 1 << $i and FIND_IN_SET()
|
||||
foreach ($columns as $name => $desc) {
|
||||
$field = $fields[$name];
|
||||
if (ereg("enum", $field["type"]) || like_bool($field)) { //! set - uses 1 << $i and FIND_IN_SET()
|
||||
$key = $keys[$name];
|
||||
$i--;
|
||||
echo "<div>" . h($desc) . "<input type='hidden' name='where[$i][col]' value='" . h($name) . "'>:";
|
||||
echo enum_input("checkbox", " name='where[$i][val][]'", $field, (array) $where[$key]["val"], ($field["null"] ? 0 : null));
|
||||
echo (like_bool($field)
|
||||
? " <select name='where[$i][val]'>" . optionlist(array("" => "", lang('no'), lang('yes')), $where[$key]["val"], true) . "</select>"
|
||||
: enum_input("checkbox", " name='where[$i][val][]'", $field, (array) $where[$key]["val"], ($field["null"] ? 0 : null))
|
||||
);
|
||||
echo "</div>\n";
|
||||
unset($columns[$name]);
|
||||
}
|
||||
}
|
||||
foreach ($columns as $name => $desc) {
|
||||
$options = $this->_foreignKeyOptions($_GET["select"], $name);
|
||||
if (is_array($options)) {
|
||||
} elseif (is_array($options = $this->_foreignKeyOptions($_GET["select"], $name))) {
|
||||
if ($fields[$name]["null"]) {
|
||||
$options[0] = '(' . lang('empty') . ')';
|
||||
}
|
||||
@@ -228,9 +231,9 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
echo "<div><select name='where[$i][col]' onchange='selectAddRow(this);'><option value=''>(" . lang('anywhere') . ")" . optionlist($columns, null, true) . "</select>";
|
||||
echo "<div><select name='where[$i][col]' onchange='this.nextSibling.nextSibling.onchange();'><option value=''>(" . lang('anywhere') . ")" . optionlist($columns, null, true) . "</select>";
|
||||
echo html_select("where[$i][op]", array(-1 => "") + $this->operators);
|
||||
echo "<input name='where[$i][val]'></div>\n";
|
||||
echo "<input name='where[$i][val]' onchange='selectAddRow(this);'></div>\n";
|
||||
echo "</div></fieldset>\n";
|
||||
}
|
||||
|
||||
@@ -268,7 +271,7 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
function selectLengthPrint($text_length) {
|
||||
}
|
||||
|
||||
function selectActionPrint() {
|
||||
function selectActionPrint($indexes) {
|
||||
echo "<fieldset><legend>" . lang('Action') . "</legend><div>";
|
||||
echo "<input type='submit' value='" . lang('Select') . "'>";
|
||||
echo "</div></fieldset>\n";
|
||||
@@ -288,7 +291,7 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
echo "<div onkeydown=\"eventStop(event); return bodyKeydown(event, 'email');\">\n";
|
||||
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='75'>" . h($_POST["email_message"] . ($_POST["email_append"] ? '{$' . "$_POST[email_addition]}" : "")) . "</textarea>\n"; //! Ctrl+Enter for this.form.email
|
||||
echo "<p><textarea name='email_message' rows='15' cols='75'>" . h($_POST["email_message"] . ($_POST["email_append"] ? '{$' . "$_POST[email_addition]}" : "")) . "</textarea>\n";
|
||||
echo "<p onkeydown=\"eventStop(event); return bodyKeydown(event, 'email_append');\">" . html_select("email_addition", $columns, $_POST["email_addition"]) . "<input type='submit' name='email_append' value='" . lang('Insert') . "'>\n"; //! JavaScript
|
||||
echo "<p>" . lang('Attachments') . ": <input type='file' name='email_files[]' onchange=\"this.onchange = function () { }; 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)) . '">' : html_select("email_field", $emailFields));
|
||||
@@ -405,7 +408,7 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
}
|
||||
|
||||
function messageQuery($query) {
|
||||
return "<!--\n" . str_replace("--", "--><!-- ", $query) . "\n-->";
|
||||
return " <span class='time'>" . @date("H:i:s") . "</span><!--\n" . str_replace("--", "--><!-- ", $query) . "\n-->";
|
||||
}
|
||||
|
||||
function editFunctions($field) {
|
||||
@@ -431,7 +434,7 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
;
|
||||
}
|
||||
$options = $this->_foreignKeyOptions($table, $field["field"], $value);
|
||||
if (isset($options)) {
|
||||
if ($options !== null) {
|
||||
return (is_array($options)
|
||||
? "<select$attrs>" . optionlist($options, $value, true) . "</select>"
|
||||
: "<input value='" . h($value) . "'$attrs class='hidden'><input value='" . h($options) . "' class='jsonly' onkeyup=\"whisper('" . h(ME . "script=complete&source=" . urlencode($table) . "&field=" . urlencode($field["field"])) . "&value=', this);\"><div onclick='return whisperClick(event, this.previousSibling);'></div>"
|
||||
@@ -502,6 +505,10 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
}
|
||||
}
|
||||
|
||||
function dumpFilename($identifier) {
|
||||
return friendly_url($identifier);
|
||||
}
|
||||
|
||||
function dumpHeaders($identifier, $multi_table = false) {
|
||||
$ext = "csv";
|
||||
header("Content-Type: text/csv; charset=utf-8");
|
||||
@@ -523,9 +530,9 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
if ($missing == "auth") {
|
||||
$first = true;
|
||||
foreach ((array) $_SESSION["pwds"]["server"][""] as $username => $password) {
|
||||
if (isset($password)) {
|
||||
if ($password !== null) {
|
||||
if ($first) {
|
||||
echo "<p onclick='eventStop(event);'>\n";
|
||||
echo "<p>\n";
|
||||
$first = false;
|
||||
}
|
||||
echo "<a href='" . h(auth_url("server", "", $username)) . "'>" . ($username != "" ? h($username) : "<i>" . lang('empty') . "</i>") . "</a><br>\n";
|
||||
@@ -535,7 +542,7 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
?>
|
||||
<form action="" method="post">
|
||||
<p class="logout">
|
||||
<input type="submit" name="logout" value="<?php echo lang('Logout'); ?>" onclick="eventStop(event);">
|
||||
<input type="submit" name="logout" value="<?php echo lang('Logout'); ?>">
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</p>
|
||||
</form>
|
||||
@@ -577,11 +584,11 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
global $connection;
|
||||
if (list($target, $id, $name) = $this->_foreignColumn(column_foreign_keys($table), $column)) {
|
||||
$return = &$this->_values[$target];
|
||||
if (!isset($return)) {
|
||||
if ($return === null) {
|
||||
$table_status = table_status($target);
|
||||
$return = ($table_status["Rows"] > 1000 ? "" : array("" => "") + get_key_vals("SELECT $id, $name FROM " . table($target) . " ORDER BY 2"));
|
||||
}
|
||||
if (!$return && isset($value)) {
|
||||
if (!$return && $value !== null) {
|
||||
return $connection->result("SELECT $name FROM " . table($target) . " WHERE $id = " . q($value));
|
||||
}
|
||||
return $return;
|
||||
|
@@ -1,9 +1,6 @@
|
||||
// Editor specific functions
|
||||
|
||||
function bodyLoad(version) {
|
||||
if (history.state !== undefined) {
|
||||
onpopstate(history);
|
||||
}
|
||||
}
|
||||
|
||||
function whisperClick(event, field) {
|
||||
@@ -12,7 +9,6 @@ function whisperClick(event, field) {
|
||||
field.value = el.firstChild.data;
|
||||
field.previousSibling.value = decodeURIComponent(el.href.replace(/.*=/, ''));
|
||||
field.nextSibling.style.display = 'none';
|
||||
eventStop(event);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
1
externals/CodeMirror2
vendored
Submodule
1
externals/CodeMirror2
vendored
Submodule
Submodule externals/CodeMirror2 added at 8feb48b37c
1
externals/JsShrink
vendored
Submodule
1
externals/JsShrink
vendored
Submodule
Submodule externals/JsShrink added at 2298c30f3f
1
externals/jsmin-php
vendored
1
externals/jsmin-php
vendored
Submodule externals/jsmin-php deleted from 8689392dab
2
externals/jush
vendored
2
externals/jush
vendored
Submodule externals/jush updated: 1d32833803...1dbb89b3d1
1
lang.php
Normal file → Executable file
1
lang.php
Normal file → Executable file
@@ -1,3 +1,4 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
error_reporting(6135); // errors and warnings
|
||||
unset($_COOKIE["adminer_lang"]);
|
||||
|
29
plugins/database-hide.php
Normal file
29
plugins/database-hide.php
Normal file
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
/** Hide some databases from the interface - just to improve design, not a security plugin
|
||||
* @link http://www.adminer.org/plugins/#use
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
*/
|
||||
class AdminerDatabaseHide {
|
||||
protected $disabled;
|
||||
|
||||
/**
|
||||
* @param array case insensitive database names in values
|
||||
*/
|
||||
function AdminerDatabaseHide($disabled) {
|
||||
$this->disabled = array_map('strtolower', $disabled);
|
||||
}
|
||||
|
||||
function databases($flush = true) {
|
||||
$return = array();
|
||||
foreach (get_databases($flush) as $db) {
|
||||
if (!in_array(strtolower($db), $this->disabled)) {
|
||||
$return[] = $db;
|
||||
}
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
}
|
16
plugins/dump-date.php
Normal file
16
plugins/dump-date.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
/** Include current date and time in export filename
|
||||
* @link http://www.adminer.org/plugins/#use
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
*/
|
||||
class AdminerDumpDate {
|
||||
|
||||
function dumpFilename($identifier) {
|
||||
$connection = connection();
|
||||
return friendly_url(($identifier != "" ? $identifier : (SERVER != "" ? SERVER : "localhost")) . "-" . $connection->result("SELECT NOW()"));
|
||||
}
|
||||
|
||||
}
|
@@ -1,11 +1,14 @@
|
||||
<?php
|
||||
|
||||
/** Dump to XML format in structure <database name=""><table name=""><column name="">value
|
||||
* @link http://www.adminer.org/plugins/#use
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
*/
|
||||
class AdminerDumpXml {
|
||||
/** @access protected */
|
||||
var $database = false;
|
||||
|
||||
function dumpFormat() {
|
||||
return array('xml' => 'XML');
|
||||
@@ -22,10 +25,9 @@ class AdminerDumpXml {
|
||||
}
|
||||
|
||||
function dumpData($table, $style, $query) {
|
||||
static $database = false;
|
||||
if ($_POST["format"] == "xml") {
|
||||
if (!$database) {
|
||||
$database = true;
|
||||
if (!$this->database) {
|
||||
$this->database = true;
|
||||
echo "<database name='" . h(DB) . "'>\n";
|
||||
register_shutdown_function(array($this, '_database'));
|
||||
}
|
||||
|
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
/** Dump to ZIP format
|
||||
* @link http://www.adminer.org/plugins/#use
|
||||
* @uses ZipArchive, tempnam("")
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
@@ -8,7 +9,7 @@
|
||||
*/
|
||||
class AdminerDumpZip {
|
||||
/** @access protected */
|
||||
var $filename;
|
||||
var $filename, $data;
|
||||
|
||||
function dumpOutput() {
|
||||
if (!class_exists('ZipArchive')) {
|
||||
@@ -18,13 +19,12 @@ class AdminerDumpZip {
|
||||
}
|
||||
|
||||
function _zip($string, $state) {
|
||||
static $data = "";
|
||||
$data .= $string;
|
||||
$this->data .= $string;
|
||||
if ($state & PHP_OUTPUT_HANDLER_END) {
|
||||
$zip = new ZipArchive;
|
||||
$zipFile = tempnam("", "zip");
|
||||
$zip->open($zipFile, ZipArchive::OVERWRITE); // php://output is not supported
|
||||
$zip->addFromString($this->filename, $data);
|
||||
$zip->addFromString($this->filename, $this->data);
|
||||
$zip->close();
|
||||
$return = file_get_contents($zipFile);
|
||||
unlink($zipFile);
|
||||
@@ -37,8 +37,8 @@ class AdminerDumpZip {
|
||||
$this->filename = "$identifier." . ($multi_table && ereg("[ct]sv", $_POST["format"]) ? "tar" : $_POST["format"]);
|
||||
if ($_POST["output"] == "zip") {
|
||||
header("Content-Type: application/zip");
|
||||
ob_start(array($this, '_zip'));
|
||||
}
|
||||
ob_start(array($this, '_zip'));
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
/** Display jQuery UI Timepicker for each date and datetime field
|
||||
* @link http://www.adminer.org/plugins/#use
|
||||
* @uses jQuery-Timepicker, http://trentrichardson.com/examples/timepicker/
|
||||
* @uses jQuery UI: core, widget, mouse, slider, datepicker
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
@@ -36,11 +37,11 @@ class AdminerEditCalendar {
|
||||
if (ereg("date|time", $field["type"])) {
|
||||
$dateFormat = "changeYear: true, dateFormat: 'yy-mm-dd'"; //! yy-mm-dd regional
|
||||
$timeFormat = "showSecond: true, timeFormat: 'hh:mm:ss'";
|
||||
return "<input id='fields-" . h($field["field"]) . "' value='" . h($value) . "'" . (+$field["length"] ? " maxlength='" . (+$field["length"]) . "'" : "") . "$attrs><script type='text/javascript'>jQuery(function () { jQuery('#fields-" . js_escape($field["field"]) . "')."
|
||||
return "<input id='fields-" . h($field["field"]) . "' value='" . h($value) . "'" . (+$field["length"] ? " maxlength='" . (+$field["length"]) . "'" : "") . "$attrs><script type='text/javascript'>jQuery('#fields-" . js_escape($field["field"]) . "')."
|
||||
. ($field["type"] == "time" ? "timepicker({ $timeFormat })"
|
||||
: (ereg("time", $field["type"]) ? "datetimepicker({ $dateFormat, $timeFormat })"
|
||||
: "datepicker({ $dateFormat })"
|
||||
)) . "; });</script>";
|
||||
)) . ";</script>";
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
/** Select foreign key in edit form
|
||||
* @link http://www.adminer.org/plugins/#use
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
@@ -11,7 +12,7 @@ class AdminerEditForeign {
|
||||
static $foreignTables = array();
|
||||
static $values = array();
|
||||
$foreignKeys = &$foreignTables[$table];
|
||||
if (!isset($foreignKeys)) {
|
||||
if ($foreignKeys === null) {
|
||||
$foreignKeys = column_foreign_keys($table);
|
||||
}
|
||||
foreach ((array) $foreignKeys[$field["field"]] as $foreignKey) {
|
||||
|
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
/** Use <textarea> for char and varchar
|
||||
* @link http://www.adminer.org/plugins/#use
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
|
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
/** Get e-mail subject and message from database (Adminer Editor)
|
||||
* @link http://www.adminer.org/plugins/#use
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
|
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
/** Use <select><option> for enum edit instead of <input type="radio">
|
||||
* @link http://www.adminer.org/plugins/#use
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
@@ -16,7 +17,7 @@ class AdminerEnumOption {
|
||||
}
|
||||
if ($field["null"]) {
|
||||
$options[""][""] = "NULL";
|
||||
if (!isset($value) && !isset($_GET["select"])) {
|
||||
if ($value === null && !isset($_GET["select"])) {
|
||||
$selected = "";
|
||||
}
|
||||
}
|
||||
|
@@ -1,21 +1,25 @@
|
||||
<?php
|
||||
//! delete
|
||||
|
||||
/** Edit fields ending with "_path" by <input type="file"> and link to the uploaded files from select
|
||||
* @link http://www.adminer.org/plugins/#use
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
*/
|
||||
class AdminerFileUpload {
|
||||
/** @access protected */
|
||||
var $uploadPath, $displayPath;
|
||||
var $uploadPath, $displayPath, $extensions;
|
||||
|
||||
/**
|
||||
* @param string prefix for uploading data (create writable subdirectory for each table containing uploadable fields)
|
||||
* @param string prefix for displaying data, null stands for $uploadPath
|
||||
* @param string regular expression with allowed file extensions
|
||||
*/
|
||||
function AdminerFileUpload($uploadPath = "../static/data/", $displayPath = null) {
|
||||
function AdminerFileUpload($uploadPath = "../static/data/", $displayPath = null, $extensions = "[a-zA-Z0-9]+") {
|
||||
$this->uploadPath = $uploadPath;
|
||||
$this->displayPath = (isset($displayPath) ? $displayPath : $uploadPath);
|
||||
$this->displayPath = ($displayPath !== null ? $displayPath : $uploadPath);
|
||||
$this->extensions = $extensions;
|
||||
}
|
||||
|
||||
function editInput($table, $field, $attrs, $value) {
|
||||
@@ -28,7 +32,7 @@ class AdminerFileUpload {
|
||||
if (ereg('(.*)_path$', $field["field"], $regs)) {
|
||||
$table = ($_GET["edit"] != "" ? $_GET["edit"] : $_GET["select"]);
|
||||
$name = "fields-$field[field]";
|
||||
if ($_FILES[$name]["error"] || !eregi('(\\.([a-z0-9]+))?$', $_FILES[$name]["name"], $regs2)) {
|
||||
if ($_FILES[$name]["error"] || !ereg("(\\.($this->extensions))?\$", $_FILES[$name]["name"], $regs2)) {
|
||||
return false;
|
||||
}
|
||||
//! unlink old
|
||||
|
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
/** Link system tables (in mysql and information_schema databases) by foreign keys
|
||||
* @link http://www.adminer.org/plugins/#use
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
|
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
/** Allow using Adminer inside a frame (disables ClickJacking protection)
|
||||
* @link http://www.adminer.org/plugins/#use
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
|
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
/** Display constant list of servers in login form
|
||||
* @link http://www.adminer.org/plugins/#use
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
@@ -37,13 +38,13 @@ class AdminerLoginServers {
|
||||
function loginForm() {
|
||||
?>
|
||||
<table cellspacing="0">
|
||||
<tr><th><?php echo lang('Server'); ?><td><input type="hidden" name="driver" value="<?php echo $this->driver; ?>"><select name="server"><?php echo optionlist($this->servers, SERVER); ?></select>
|
||||
<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">
|
||||
<tr><th><?php echo lang('Server'); ?><td><input type="hidden" name="auth[driver]" value="<?php echo $this->driver; ?>"><select name="auth[server]"><?php echo optionlist($this->servers, SERVER); ?></select>
|
||||
<tr><th><?php echo lang('Username'); ?><td><input id="username" name="auth[username]" value="<?php echo h($_GET["username"]); ?>">
|
||||
<tr><th><?php echo lang('Password'); ?><td><input type="password" name="auth[password]">
|
||||
</table>
|
||||
<p><input type="submit" value="<?php echo lang('Login'); ?>">
|
||||
<?php
|
||||
echo checkbox("permanent", 1, $_COOKIE["adminer_permanent"], lang('Permanent login')) . "\n";
|
||||
echo checkbox("auth[permanent]", 1, $_COOKIE["adminer_permanent"], lang('Permanent login')) . "\n";
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@@ -10,6 +10,7 @@ CREATE TABLE login (
|
||||
*/
|
||||
|
||||
/** Authenticate a user from the login table
|
||||
* @link http://www.adminer.org/plugins/#use
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
|
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
/** Store password's SHA1 to session
|
||||
* @link http://www.adminer.org/plugins/#use
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
@@ -18,8 +19,8 @@ class AdminerPasswordSha1 {
|
||||
$this->login = $login;
|
||||
$this->passwordSha1 = $passwordSha1;
|
||||
$this->credentials = $credentials;
|
||||
if (isset($_POST["password"])) {
|
||||
$_POST["password"] = sha1($_POST["password"]);
|
||||
if (isset($_POST["auth"])) {
|
||||
$_POST["auth"]["password"] = sha1($_POST["auth"]["password"]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,7 +33,7 @@ class AdminerPasswordSha1 {
|
||||
}
|
||||
|
||||
function permanentLogin() {
|
||||
//! should save original $_POST["password"] and hash after load
|
||||
//! should save original $_POST["auth"]["password"] and hash after load
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
/** Adminer customization allowing usage of plugins
|
||||
* @link http://www.adminer.org/plugins/#use
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
@@ -20,7 +21,7 @@ class AdminerPlugin extends Adminer {
|
||||
* @param array object instances or null to register all classes starting by 'Adminer'
|
||||
*/
|
||||
function AdminerPlugin($plugins) {
|
||||
if (!isset($plugins)) {
|
||||
if ($plugins === null) {
|
||||
$plugins = array();
|
||||
foreach (get_declared_classes() as $class) {
|
||||
if (preg_match('~^Adminer.~i', $class) && strcasecmp($this->_findRootClass($class), 'Adminer')) { // can use interface since PHP 5
|
||||
@@ -54,7 +55,7 @@ class AdminerPlugin extends Adminer {
|
||||
case 4: $return = $plugin->$function($args[0], $args[1], $args[2], $args[3]); break;
|
||||
default: trigger_error('Too many parameters.', E_USER_WARNING);
|
||||
}
|
||||
if (isset($return)) {
|
||||
if ($return !== null) {
|
||||
return $return;
|
||||
}
|
||||
}
|
||||
@@ -111,6 +112,11 @@ class AdminerPlugin extends Adminer {
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function databases() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function headers() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
@@ -286,6 +292,11 @@ class AdminerPlugin extends Adminer {
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function dumpFilename() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function dumpHeaders() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
|
@@ -1,2 +1,2 @@
|
||||
../adminer/plugin.php - demo usage
|
||||
http://www.adminer.org/en/plugins/ - documentation
|
||||
http://www.adminer.org/plugins/ - documentation
|
||||
|
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
/** Prefill field containing "_slug" with slugified value of a previous field (JavaScript)
|
||||
* @link http://www.adminer.org/plugins/#use
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
@@ -21,7 +22,7 @@ class AdminerSlugify {
|
||||
function editInput($table, $field, $attrs, $value) {
|
||||
static $slugify;
|
||||
if (!$_GET["select"] && !$_GET["where"]) {
|
||||
if (!isset($slugify)) {
|
||||
if ($slugify === null) {
|
||||
$slugify = array();
|
||||
$prev = null;
|
||||
foreach (fields($table) as $name => $val) {
|
||||
@@ -32,7 +33,7 @@ class AdminerSlugify {
|
||||
}
|
||||
}
|
||||
$slug = $slugify[$field["field"]];
|
||||
if (isset($slug)) {
|
||||
if ($slug !== null) {
|
||||
return "<input value='" . h($value) . "' maxlength='$field[length]' size='40'$attrs onchange=\"var find = '$this->from'; var repl = '$this->to'; this.form['fields[$slug]'].value = this.value.toLowerCase().replace(new RegExp('[' + find + ']', 'g'), function (str) { return repl[find.indexOf(str)]; }).replace(/[^a-z0-9_]+/g, '-').replace(/^-|-\$/g, '').substr(0, $field[length]);\">";
|
||||
}
|
||||
}
|
||||
|
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
/** Log all queries to SQL file (manual queries through SQL command are not logged)
|
||||
* @link http://www.adminer.org/plugins/#use
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
|
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
/** Use filter in tables list
|
||||
* @link http://www.adminer.org/plugins/#use
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
|
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
/** Edit all fields containing "_html" by HTML editor TinyMCE and display the HTML in select
|
||||
* @link http://www.adminer.org/plugins/#use
|
||||
* @uses TinyMCE, http://tinymce.moxiecode.com/
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
|
@@ -11,6 +11,7 @@ CREATE TABLE translation (
|
||||
*/
|
||||
|
||||
/** Translate all table and field comments, enum and set values from the translation table (inserts new translations)
|
||||
* @link http://www.adminer.org/plugins/#use
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
@@ -19,17 +20,17 @@ class AdminerTranslation {
|
||||
|
||||
function _translate($idf) {
|
||||
static $translations, $lang;
|
||||
if (!isset($lang)) {
|
||||
if ($lang === null) {
|
||||
$lang = get_lang();
|
||||
}
|
||||
if ($idf == "" || $lang == "en") {
|
||||
return $idf;
|
||||
}
|
||||
if (!isset($translations)) {
|
||||
if ($translations === null) {
|
||||
$translations = get_key_vals("SELECT idf, translation FROM translation WHERE language_id = " . q($lang));
|
||||
}
|
||||
$return = &$translations[$idf];
|
||||
if (!isset($return)) {
|
||||
if ($return === null) {
|
||||
$return = $idf;
|
||||
$connection = connection();
|
||||
$connection->query("INSERT INTO translation (language_id, idf, translation) VALUES (" . q($lang) . ", " . q($idf) . ", " . q($idf) . ")");
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user