ARI Adminer – WordPress Database Manager - Version 1.1.13

Version Description

  • Update Adminer to v. .4.7.1
Download this release

Release Info

Developer arisoft
Plugin Icon 128x128 ARI Adminer – WordPress Database Manager
Version 1.1.13
Comparing to
See all releases

Code changes from version 1.11.2 to 1.1.13

Files changed (50) hide show
  1. adminer/adminer/adminer/call.inc.php +1 -1
  2. adminer/adminer/adminer/create.inc.php +12 -17
  3. adminer/adminer/adminer/database.inc.php +1 -1
  4. adminer/adminer/adminer/db.inc.php +2 -0
  5. adminer/adminer/adminer/drivers/clickhouse.inc.php +354 -0
  6. adminer/adminer/adminer/drivers/mongo.inc.php +2 -2
  7. adminer/adminer/adminer/drivers/mssql.inc.php +8 -2
  8. adminer/adminer/adminer/drivers/mysql.inc.php +5 -8
  9. adminer/adminer/adminer/drivers/oracle.inc.php +1 -1
  10. adminer/adminer/adminer/drivers/pgsql.inc.php +14 -4
  11. adminer/adminer/adminer/drivers/sqlite.inc.php +1 -1
  12. adminer/adminer/adminer/dump.inc.php +1 -1
  13. adminer/adminer/adminer/event.inc.php +3 -3
  14. adminer/adminer/adminer/include/adminer.inc.php +10 -8
  15. adminer/adminer/adminer/include/auth.inc.php +3 -2
  16. adminer/adminer/adminer/include/bootstrap.inc.php +1 -0
  17. adminer/adminer/adminer/include/editing.inc.php +32 -7
  18. adminer/adminer/adminer/include/functions.inc.php +6 -6
  19. adminer/adminer/adminer/include/lang.inc.php +1 -0
  20. adminer/adminer/adminer/include/version.inc.php +1 -1
  21. adminer/adminer/adminer/indexes.inc.php +3 -1
  22. adminer/adminer/adminer/lang/cs.inc.php +2 -1
  23. adminer/adminer/adminer/lang/he.inc.php +1 -1
  24. adminer/adminer/adminer/lang/ja.inc.php +11 -1
  25. adminer/adminer/adminer/lang/ka.inc.php +303 -0
  26. adminer/adminer/adminer/lang/ms.inc.php +1 -1
  27. adminer/adminer/adminer/lang/pl.inc.php +1 -1
  28. adminer/adminer/adminer/lang/tr.inc.php +1 -1
  29. adminer/adminer/adminer/lang/vi.inc.php +5 -5
  30. adminer/adminer/adminer/lang/xx.inc.php +2 -1
  31. adminer/adminer/adminer/lang/zh-tw.inc.php +281 -200
  32. adminer/adminer/adminer/lang/zh.inc.php +280 -199
  33. adminer/adminer/adminer/procedure.inc.php +3 -1
  34. adminer/adminer/adminer/processlist.inc.php +2 -0
  35. adminer/adminer/adminer/select.inc.php +8 -6
  36. adminer/adminer/adminer/sql.inc.php +8 -5
  37. adminer/adminer/adminer/static/default.css +2 -2
  38. adminer/adminer/adminer/static/editing.js +42 -17
  39. adminer/adminer/adminer/static/functions.js +19 -14
  40. adminer/adminer/adminer/trigger.inc.php +2 -2
  41. adminer/adminer/adminer/user.inc.php +3 -3
  42. adminer/adminer/adminer/view.inc.php +1 -1
  43. adminer/adminer/editor/db.inc.php +2 -0
  44. adminer/adminer/editor/include/adminer.inc.php +7 -7
  45. adminer/adminer/editor/static/editing.js +1 -1
  46. adminer/adminer/plugins/slugify.php +1 -1
  47. adminer/adminer/plugins/tables-filter.php +2 -2
  48. ari-adminer.php +1 -1
  49. includes/defines.php +1 -1
  50. readme.txt +8 -2
adminer/adminer/adminer/call.inc.php CHANGED
@@ -62,7 +62,7 @@ if (!$error && $_POST) {
62
  <form action="" method="post">
63
  <?php
64
  if ($in) {
65
- echo "<table cellspacing='0'>\n";
66
  foreach ($in as $key) {
67
  $field = $routine["fields"][$key];
68
  $name = $field["field"];
62
  <form action="" method="post">
63
  <?php
64
  if ($in) {
65
+ echo "<table cellspacing='0' class='layout'>\n";
66
  foreach ($in as $key) {
67
  $field = $routine["fields"][$key];
68
  $name = $field["field"];
adminer/adminer/adminer/create.inc.php CHANGED
@@ -27,6 +27,10 @@ if ($row["auto_increment_col"]) {
27
  $row["fields"][$row["auto_increment_col"]]["auto_increment"] = true;
28
  }
29
 
 
 
 
 
30
  if ($_POST && !process_fields($row["fields"]) && !$error) {
31
  if ($_POST["drop"]) {
32
  queries_redirect(substr(ME, 0, -1), lang('Table has been dropped.'), drop_tables(array($TABLE)));
@@ -162,7 +166,7 @@ foreach ($engines as $engine) {
162
  <form action="" method="post" id="form">
163
  <p>
164
  <?php if (support("columns") || $TABLE == "") { ?>
165
- <?php echo lang('Table name'); ?>: <input name="name" maxlength="64" value="<?php echo h($row["name"]); ?>" autocapitalize="off">
166
  <?php if ($TABLE == "" && !$_POST) { echo script("focus(qs('#form')['name']);"); } ?>
167
  <?php echo ($engines ? "<select name='Engine'>" . optionlist(array("" => "(" . lang('engine') . ")") + $engines, $row["Engine"]) . "</select>" . on_help("getTarget(event).value", 1) . script("qsl('select').onchange = helpClose;") : ""); ?>
168
  <?php echo ($collations && !preg_match("~sqlite|mssql~", $jush) ? html_select("Collation", array("" => "(" . lang('collation') . ")") + $collations, $row["Collation"]) : ""); ?>
@@ -170,28 +174,19 @@ foreach ($engines as $engine) {
170
  <?php } ?>
171
 
172
  <?php if (support("columns")) { ?>
 
173
  <table cellspacing="0" id="edit-fields" class="nowrap">
174
  <?php
175
- $comments = ($_POST ? $_POST["comments"] : $row["Comment"] != "");
176
- if (!$_POST && !$comments) {
177
- foreach ($row["fields"] as $field) {
178
- if ($field["comment"] != "") {
179
- $comments = true;
180
- break;
181
- }
182
- }
183
- }
184
- edit_fields($row["fields"], $collations, "TABLE", $foreign_keys, $comments);
185
  ?>
186
  </table>
 
187
  <p>
188
  <?php echo lang('Auto Increment'); ?>: <input type="number" name="Auto_increment" size="6" value="<?php echo h($row["Auto_increment"]); ?>">
189
- <?php echo checkbox("defaults", 1, !$_POST || $_POST["defaults"], lang('Default values'), "columnShow(this.checked, 5)", "jsonly"); ?>
190
- <?php echo ($_POST ? "" : script("editingHideDefaults();")); ?>
191
  <?php echo (support("comment")
192
- ? "<label><input type='checkbox' name='comments' value='1' class='jsonly'" . ($comments ? " checked" : "") . ">" . lang('Comment') . "</label>"
193
- . script("qsl('input').onclick = partial(editingCommentsClick, true);")
194
- . ' <input name="Comment" value="' . h($row["Comment"]) . '" maxlength="' . (min_version(5.5) ? 2048 : 60) . '"' . ($comments ? '' : ' class="hidden"') . '>'
195
  : '')
196
  ; ?>
197
  <p>
@@ -225,4 +220,4 @@ foreach ($row["partition_names"] as $key => $val) {
225
  ?>
226
  <input type="hidden" name="token" value="<?php echo $token; ?>">
227
  </form>
228
- <?php echo script("qs('#form')['defaults'].onclick();" . (support("comment") ? " editingCommentsClick.call(qs('#form')['comments']);" : "")); ?>
27
  $row["fields"][$row["auto_increment_col"]]["auto_increment"] = true;
28
  }
29
 
30
+ if ($_POST) {
31
+ set_adminer_settings(array("comments" => $_POST["comments"], "defaults" => $_POST["defaults"]));
32
+ }
33
+
34
  if ($_POST && !process_fields($row["fields"]) && !$error) {
35
  if ($_POST["drop"]) {
36
  queries_redirect(substr(ME, 0, -1), lang('Table has been dropped.'), drop_tables(array($TABLE)));
166
  <form action="" method="post" id="form">
167
  <p>
168
  <?php if (support("columns") || $TABLE == "") { ?>
169
+ <?php echo lang('Table name'); ?>: <input name="name" data-maxlength="64" value="<?php echo h($row["name"]); ?>" autocapitalize="off">
170
  <?php if ($TABLE == "" && !$_POST) { echo script("focus(qs('#form')['name']);"); } ?>
171
  <?php echo ($engines ? "<select name='Engine'>" . optionlist(array("" => "(" . lang('engine') . ")") + $engines, $row["Engine"]) . "</select>" . on_help("getTarget(event).value", 1) . script("qsl('select').onchange = helpClose;") : ""); ?>
172
  <?php echo ($collations && !preg_match("~sqlite|mssql~", $jush) ? html_select("Collation", array("" => "(" . lang('collation') . ")") + $collations, $row["Collation"]) : ""); ?>
174
  <?php } ?>
175
 
176
  <?php if (support("columns")) { ?>
177
+ <div class="scrollable">
178
  <table cellspacing="0" id="edit-fields" class="nowrap">
179
  <?php
180
+ edit_fields($row["fields"], $collations, "TABLE", $foreign_keys);
 
 
 
 
 
 
 
 
 
181
  ?>
182
  </table>
183
+ </div>
184
  <p>
185
  <?php echo lang('Auto Increment'); ?>: <input type="number" name="Auto_increment" size="6" value="<?php echo h($row["Auto_increment"]); ?>">
186
+ <?php echo checkbox("defaults", 1, ($_POST ? $_POST["defaults"] : adminer_setting("defaults")), lang('Default values'), "columnShow(this.checked, 5)", "jsonly"); ?>
 
187
  <?php echo (support("comment")
188
+ ? checkbox("comments", 1, ($_POST ? $_POST["comments"] : adminer_setting("comments")), lang('Comment'), "editingCommentsClick(this, true);", "jsonly")
189
+ . ' <input name="Comment" value="' . h($row["Comment"]) . '" data-maxlength="' . (min_version(5.5) ? 2048 : 60) . '">'
 
190
  : '')
191
  ; ?>
192
  <p>
220
  ?>
221
  <input type="hidden" name="token" value="<?php echo $token; ?>">
222
  </form>
223
+ <?php echo script("qs('#form')['defaults'].onclick();" . (support("comment") ? " editingCommentsClick(qs('#form')['comments']);" : "")); ?>
adminer/adminer/adminer/database.inc.php CHANGED
@@ -60,7 +60,7 @@ if ($_POST) {
60
  <?php
61
  echo ($_POST["add_x"] || strpos($name, "\n")
62
  ? '<textarea id="name" name="name" rows="10" cols="40">' . h($name) . '</textarea><br>'
63
- : '<input name="name" id="name" value="' . h($name) . '" maxlength="64" autocapitalize="off">'
64
  ) . "\n" . ($collations ? html_select("collation", array("" => "(" . lang('collation') . ")") + $collations, $row["collation"]) . doc_link(array(
65
  'sql' => "charset-charsets.html",
66
  'mariadb' => "supported-character-sets-and-collations/",
60
  <?php
61
  echo ($_POST["add_x"] || strpos($name, "\n")
62
  ? '<textarea id="name" name="name" rows="10" cols="40">' . h($name) . '</textarea><br>'
63
+ : '<input name="name" id="name" value="' . h($name) . '" data-maxlength="64" autocapitalize="off">'
64
  ) . "\n" . ($collations ? html_select("collation", array("" => "(" . lang('collation') . ")") + $collations, $row["collation"]) . doc_link(array(
65
  'sql' => "charset-charsets.html",
66
  'mariadb' => "supported-character-sets-and-collations/",
adminer/adminer/adminer/db.inc.php CHANGED
@@ -66,6 +66,7 @@ if ($adminer->homepage()) {
66
  }
67
  }
68
  $doc_link = doc_link(array('sql' => 'show-table-status.html'));
 
69
  echo "<table cellspacing='0' class='nowrap checkable'>\n";
70
  echo script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});");
71
  echo '<thead><tr class="wrap">';
@@ -119,6 +120,7 @@ if ($adminer->homepage()) {
119
  }
120
 
121
  echo "</table>\n";
 
122
  if (!information_schema(DB)) {
123
  echo "<div class='footer'><div>\n";
124
  $vacuum = "<input type='submit' value='" . lang('Vacuum') . "'> " . on_help("'VACUUM'");
66
  }
67
  }
68
  $doc_link = doc_link(array('sql' => 'show-table-status.html'));
69
+ echo "<div class='scrollable'>\n";
70
  echo "<table cellspacing='0' class='nowrap checkable'>\n";
71
  echo script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});");
72
  echo '<thead><tr class="wrap">';
120
  }
121
 
122
  echo "</table>\n";
123
+ echo "</div>\n";
124
  if (!information_schema(DB)) {
125
  echo "<div class='footer'><div>\n";
126
  $vacuum = "<input type='submit' value='" . lang('Vacuum') . "'> " . on_help("'VACUUM'");
adminer/adminer/adminer/drivers/clickhouse.inc.php ADDED
@@ -0,0 +1,354 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $drivers["clickhouse"] = "ClickHouse (alpha)";
3
+
4
+ if (isset($_GET["clickhouse"])) {
5
+ define("DRIVER", "clickhouse");
6
+
7
+ class Min_DB {
8
+ var $extension = "JSON", $server_info, $errno, $_result, $error, $_url;
9
+ var $_db = 'default';
10
+
11
+ function rootQuery($db, $query) {
12
+ @ini_set('track_errors', 1); // @ - may be disabled
13
+ $file = @file_get_contents("$this->_url/?database=$db", false, stream_context_create(array('http' => array(
14
+ 'method' => 'POST',
15
+ 'content' => $this->isQuerySelectLike($query) ? "$query FORMAT JSONCompact" : $query,
16
+ 'header' => 'Content-type: application/x-www-form-urlencoded',
17
+ 'ignore_errors' => 1, // available since PHP 5.2.10
18
+ ))));
19
+
20
+ if ($file === false) {
21
+ $this->error = $php_errormsg;
22
+ return $file;
23
+ }
24
+ if (!preg_match('~^HTTP/[0-9.]+ 2~i', $http_response_header[0])) {
25
+ $this->error = $file;
26
+ return false;
27
+ }
28
+ $return = json_decode($file, true);
29
+ if ($return === null) {
30
+ $this->errno = json_last_error();
31
+ if (function_exists('json_last_error_msg')) {
32
+ $this->error = json_last_error_msg();
33
+ } else {
34
+ $constants = get_defined_constants(true);
35
+ foreach ($constants['json'] as $name => $value) {
36
+ if ($value == $this->errno && preg_match('~^JSON_ERROR_~', $name)) {
37
+ $this->error = $name;
38
+ break;
39
+ }
40
+ }
41
+ }
42
+ }
43
+ return new Min_Result($return);
44
+ }
45
+
46
+ function isQuerySelectLike($query) {
47
+ return (bool) preg_match('~^(select|show)~i', $query);
48
+ }
49
+
50
+ function query($query) {
51
+ return $this->rootQuery($this->_db, $query);
52
+ }
53
+
54
+ function connect($server, $username, $password) {
55
+ preg_match('~^(https?://)?(.*)~', $server, $match);
56
+ $this->_url = ($match[1] ? $match[1] : "http://") . "$username:$password@$match[2]";
57
+ $return = $this->query('SELECT 1');
58
+ return (bool) $return;
59
+ }
60
+
61
+ function select_db($database) {
62
+ $this->_db = $database;
63
+ return true;
64
+ }
65
+
66
+ function quote($string) {
67
+ return "'" . addcslashes($string, "\\'") . "'";
68
+ }
69
+
70
+ function multi_query($query) {
71
+ return $this->_result = $this->query($query);
72
+ }
73
+
74
+ function store_result() {
75
+ return $this->_result;
76
+ }
77
+
78
+ function next_result() {
79
+ return false;
80
+ }
81
+
82
+ function result($query, $field = 0) {
83
+ $result = $this->query($query);
84
+ return $result['data'];
85
+ }
86
+ }
87
+
88
+ class Min_Result {
89
+ var $num_rows, $_rows, $columns, $meta, $_offset = 0;
90
+
91
+ function __construct($result) {
92
+ $this->num_rows = $result['rows'];
93
+ $this->_rows = $result['data'];
94
+ $this->meta = $result['meta'];
95
+ $this->columns = array_column($this->meta, 'name');
96
+ reset($this->_rows);
97
+ }
98
+
99
+ function fetch_assoc() {
100
+ $row = current($this->_rows);
101
+ next($this->_rows);
102
+ return $row === false ? false : array_combine($this->columns, $row);
103
+ }
104
+
105
+ function fetch_row() {
106
+ $row = current($this->_rows);
107
+ next($this->_rows);
108
+ return $row;
109
+ }
110
+
111
+ function fetch_field() {
112
+ $column = $this->_offset++;
113
+ $return = new stdClass;
114
+ if ($column < count($this->columns)) {
115
+ $return->name = $this->meta[$column]['name'];
116
+ $return->orgname = $return->name;
117
+ $return->type = $this->meta[$column]['type'];
118
+ }
119
+ return $return;
120
+ }
121
+ }
122
+
123
+
124
+ class Min_Driver extends Min_SQL {
125
+ function delete($table, $queryWhere, $limit = 0) {
126
+ return queries("ALTER TABLE " . table($table) . " DELETE $queryWhere");
127
+ }
128
+
129
+ function update($table, $set, $queryWhere, $limit = 0, $separator = "\n") {
130
+ $values = array();
131
+ foreach ($set as $key => $val) {
132
+ $values[] = "$key = $val";
133
+ }
134
+ $query = $separator . implode(",$separator", $values);
135
+ return queries("ALTER TABLE " . table($table) . " UPDATE $query$queryWhere");
136
+ }
137
+ }
138
+
139
+ function idf_escape($idf) {
140
+ return "`" . str_replace("`", "``", $idf) . "`";
141
+ }
142
+
143
+ function table($idf) {
144
+ return idf_escape($idf);
145
+ }
146
+
147
+ function explain($connection, $query) {
148
+ return '';
149
+ }
150
+
151
+ function found_rows($table_status, $where) {
152
+ $rows = get_vals("SELECT COUNT(*) FROM " . idf_escape($table_status["Name"]) . ($where ? " WHERE " . implode(" AND ", $where) : ""));
153
+ return empty($rows) ? false : $rows[0];
154
+ }
155
+
156
+ function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
157
+ foreach ($fields as $field) {
158
+ if ($field[1][2] === " NULL") {
159
+ $field[1][1] = " Nullable({$field[1][1]})";
160
+ }
161
+ unset($field[1][2]);
162
+ }
163
+ }
164
+
165
+ function truncate_tables($tables) {
166
+ return apply_queries("TRUNCATE TABLE", $tables);
167
+ }
168
+
169
+ function drop_views($views) {
170
+ return drop_tables($views);
171
+ }
172
+
173
+ function drop_tables($tables) {
174
+ return apply_queries("DROP TABLE", $tables);
175
+ }
176
+
177
+ function connect() {
178
+ global $adminer;
179
+ $connection = new Min_DB;
180
+ $credentials = $adminer->credentials();
181
+ if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) {
182
+ return $connection;
183
+ }
184
+ return $connection->error;
185
+ }
186
+
187
+ function get_databases($flush) {
188
+ global $connection;
189
+ $result = get_rows('SHOW DATABASES');
190
+
191
+ $return = array();
192
+ foreach ($result as $row) {
193
+ $return[] = $row['name'];
194
+ }
195
+ sort($return);
196
+ return $return;
197
+ }
198
+
199
+ function limit($query, $where, $limit, $offset = 0, $separator = " ") {
200
+ return " $query$where" . ($limit !== null ? $separator . "LIMIT $limit" . ($offset ? ", $offset" : "") : "");
201
+ }
202
+
203
+ function limit1($table, $query, $where, $separator = "\n") {
204
+ return limit($query, $where, 1, 0, $separator);
205
+ }
206
+
207
+ function db_collation($db, $collations) {
208
+ }
209
+
210
+ function engines() {
211
+ return array('MergeTree');
212
+ }
213
+
214
+ function logged_user() {
215
+ global $adminer;
216
+ $credentials = $adminer->credentials();
217
+ return $credentials[1];
218
+ }
219
+
220
+ function tables_list() {
221
+ $result = get_rows('SHOW TABLES');
222
+ $return = array();
223
+ foreach ($result as $row) {
224
+ $return[$row['name']] = 'table';
225
+ }
226
+ ksort($return);
227
+ return $return;
228
+ }
229
+
230
+ function count_tables($databases) {
231
+ return array();
232
+ }
233
+
234
+ function table_status($name = "", $fast = false) {
235
+ global $connection;
236
+ $return = array();
237
+ $tables = get_rows("SELECT name, engine FROM system.tables WHERE database = " . q($connection->_db));
238
+ foreach ($tables as $table) {
239
+ $return[$table['name']] = array(
240
+ 'Name' => $table['name'],
241
+ 'Engine' => $table['engine'],
242
+ );
243
+ if ($name === $table['name']) {
244
+ return $return[$table['name']];
245
+ }
246
+ }
247
+ return $return;
248
+ }
249
+
250
+ function is_view($table_status) {
251
+ return false;
252
+ }
253
+
254
+ function fk_support($table_status) {
255
+ return false;
256
+ }
257
+
258
+ function convert_field($field) {
259
+ }
260
+
261
+ function unconvert_field($field, $return) {
262
+ if (in_array($field['type'], array("Int8", "Int16", "Int32", "Int64", "UInt8", "UInt16", "UInt32", "UInt64", "Float32", "Float64"))) {
263
+ return "to$field[type]($return)";
264
+ }
265
+ return $return;
266
+ }
267
+
268
+ function fields($table) {
269
+ $return = array();
270
+ $result = get_rows("SELECT name, type, default_expression FROM system.columns WHERE " . idf_escape('table') . " = " . q($table));
271
+ foreach($result as $row) {
272
+ $type = trim($row['type']);
273
+ $nullable = strpos($type, 'Nullable(') === 0;
274
+ $return[trim($row['name'])] = array(
275
+ "field" => trim($row['name']),
276
+ "full_type" => $type,
277
+ "type" => $type,
278
+ "default" => trim($row['default_expression']),
279
+ "null" => $nullable,
280
+ "auto_increment" => '0',
281
+ "privileges" => array("insert" => 1, "select" => 1, "update" => 0),
282
+ );
283
+ }
284
+
285
+ return $return;
286
+ }
287
+
288
+ function indexes($table, $connection2 = null) {
289
+ return array();
290
+ }
291
+
292
+ function foreign_keys($table) {
293
+ return array();
294
+ }
295
+
296
+ function collations() {
297
+ return array();
298
+ }
299
+
300
+ function information_schema($db) {
301
+ return false;
302
+ }
303
+
304
+ function error() {
305
+ global $connection;
306
+ return h($connection->error);
307
+ }
308
+
309
+ function types() {
310
+ return array();
311
+ }
312
+
313
+ function schemas() {
314
+ return array();
315
+ }
316
+
317
+ function get_schema() {
318
+ return "";
319
+ }
320
+
321
+ function set_schema($schema) {
322
+ return true;
323
+ }
324
+
325
+ function auto_increment() {
326
+ return '';
327
+ }
328
+
329
+ function last_id() {
330
+ return 0; // ClickHouse doesn't have it
331
+ }
332
+
333
+ function support($feature) {
334
+ return preg_match("~^(columns|sql|status|table)$~", $feature);
335
+ }
336
+
337
+ $jush = "clickhouse";
338
+ $types = array();
339
+ $structured_types = array();
340
+ foreach (array( //! arrays
341
+ lang('Numbers') => array("Int8" => 3, "Int16" => 5, "Int32" => 10, "Int64" => 19, "UInt8" => 3, "UInt16" => 5, "UInt32" => 10, "UInt64" => 20, "Float32" => 7, "Float64" => 16, 'Decimal' => 38, 'Decimal32' => 9, 'Decimal64' => 18, 'Decimal128' => 38),
342
+ lang('Date and time') => array("Date" => 13, "DateTime" => 20),
343
+ lang('Strings') => array("String" => 0),
344
+ lang('Binary') => array("FixedString" => 0),
345
+ ) as $key => $val) {
346
+ $types += $val;
347
+ $structured_types[$key] = array_keys($val);
348
+ }
349
+ $unsigned = array();
350
+ $operators = array("=", "<", ">", "<=", ">=", "!=", "~", "!~", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL", "SQL");
351
+ $functions = array();
352
+ $grouping = array("avg", "count", "count distinct", "max", "min", "sum");
353
+ $edit_functions = array();
354
+ }
adminer/adminer/adminer/drivers/mongo.inc.php CHANGED
@@ -526,7 +526,7 @@ if (isset($_GET["mongo"])) {
526
  $op = '$regex';
527
  break;
528
  default:
529
- continue;
530
  }
531
  if ($type == 'and') {
532
  $data['$and'][] = array($col => array($op => $val));
@@ -662,7 +662,7 @@ if (isset($_GET["mongo"])) {
662
  }
663
 
664
  function support($feature) {
665
- return preg_match("~database|indexes~", $feature);
666
  }
667
 
668
  function db_collation($db, $collations) {
526
  $op = '$regex';
527
  break;
528
  default:
529
+ continue 2;
530
  }
531
  if ($type == 'and') {
532
  $data['$and'][] = array($col => array($op => $val));
662
  }
663
 
664
  function support($feature) {
665
+ return preg_match("~database|indexes|descidx~", $feature);
666
  }
667
 
668
  function db_collation($db, $collations) {
adminer/adminer/adminer/drivers/mssql.inc.php CHANGED
@@ -24,7 +24,13 @@ if (isset($_GET["mssql"])) {
24
  }
25
 
26
  function connect($server, $username, $password) {
27
- $this->_link = @sqlsrv_connect(preg_replace('~:~', ',', $server), array("UID" => $username, "PWD" => $password, "CharacterSet" => "UTF-8"));
 
 
 
 
 
 
28
  if ($this->_link) {
29
  $info = sqlsrv_server_info($this->_link);
30
  $this->server_info = $info['SQLServerVersion'];
@@ -626,7 +632,7 @@ WHERE sys1.xtype = 'TR' AND sys2.name = " . q($table)
626
  }
627
 
628
  function support($feature) {
629
- return preg_match('~^(columns|database|drop_col|indexes|scheme|sql|table|trigger|view|view_trigger)$~', $feature); //! routine|
630
  }
631
 
632
  $jush = "mssql";
24
  }
25
 
26
  function connect($server, $username, $password) {
27
+ global $adminer;
28
+ $db = $adminer->database();
29
+ $connection_info = array("UID" => $username, "PWD" => $password, "CharacterSet" => "UTF-8");
30
+ if ($db != "") {
31
+ $connection_info["Database"] = $db;
32
+ }
33
+ $this->_link = @sqlsrv_connect(preg_replace('~:~', ',', $server), $connection_info);
34
  if ($this->_link) {
35
  $info = sqlsrv_server_info($this->_link);
36
  $this->server_info = $info['SQLServerVersion'];
632
  }
633
 
634
  function support($feature) {
635
+ return preg_match('~^(columns|database|drop_col|indexes|descidx|scheme|sql|table|trigger|view|view_trigger)$~', $feature); //! routine|
636
  }
637
 
638
  $jush = "mssql";
adminer/adminer/adminer/drivers/mysql.inc.php CHANGED
@@ -579,7 +579,7 @@ if (!defined("DRIVER")) {
579
  */
580
  function foreign_keys($table) {
581
  global $connection, $on_actions;
582
- static $pattern = '`(?:[^`]|``)+`';
583
  $return = array();
584
  $create_table = $connection->result("SHOW CREATE TABLE " . table($table), 1);
585
  if ($create_table) {
@@ -810,8 +810,7 @@ if (!defined("DRIVER")) {
810
  queries("SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'");
811
  foreach ($tables as $table) {
812
  $name = ($target == DB ? table("copy_$table") : idf_escape($target) . "." . table($table));
813
- if (!queries("\nDROP TABLE IF EXISTS $name")
814
- || !queries("CREATE TABLE $name LIKE " . table($table))
815
  || !queries("INSERT INTO $name SELECT * FROM " . table($table))
816
  ) {
817
  return false;
@@ -826,9 +825,7 @@ if (!defined("DRIVER")) {
826
  foreach ($views as $table) {
827
  $name = ($target == DB ? table("copy_$table") : idf_escape($target) . "." . table($table));
828
  $view = view($table);
829
- if (!queries("DROP VIEW IF EXISTS $name")
830
- || !queries("CREATE VIEW $name AS $view[select]") //! USE to avoid db.table
831
- ) {
832
  return false;
833
  }
834
  }
@@ -1086,11 +1083,11 @@ if (!defined("DRIVER")) {
1086
  }
1087
 
1088
  /** Check whether a feature is supported
1089
- * @param string "comment", "copy", "database", "drop_col", "dump", "event", "kill", "materializedview", "partitioning", "privileges", "procedure", "processlist", "routine", "scheme", "sequence", "status", "table", "trigger", "type", "variables", "view", "view_trigger"
1090
  * @return bool
1091
  */
1092
  function support($feature) {
1093
- return !preg_match("~scheme|sequence|type|view_trigger|materializedview" . (min_version(5.1) ? "" : "|event|partitioning" . (min_version(5) ? "" : "|routine|trigger|view")) . "~", $feature);
1094
  }
1095
 
1096
  function kill_process($val) {
579
  */
580
  function foreign_keys($table) {
581
  global $connection, $on_actions;
582
+ static $pattern = '(?:`(?:[^`]|``)+`)|(?:"(?:[^"]|"")+")';
583
  $return = array();
584
  $create_table = $connection->result("SHOW CREATE TABLE " . table($table), 1);
585
  if ($create_table) {
810
  queries("SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'");
811
  foreach ($tables as $table) {
812
  $name = ($target == DB ? table("copy_$table") : idf_escape($target) . "." . table($table));
813
+ if (!queries("CREATE TABLE $name LIKE " . table($table))
 
814
  || !queries("INSERT INTO $name SELECT * FROM " . table($table))
815
  ) {
816
  return false;
825
  foreach ($views as $table) {
826
  $name = ($target == DB ? table("copy_$table") : idf_escape($target) . "." . table($table));
827
  $view = view($table);
828
+ if (!queries("CREATE VIEW $name AS $view[select]")) { //! USE to avoid db.table
 
 
829
  return false;
830
  }
831
  }
1083
  }
1084
 
1085
  /** Check whether a feature is supported
1086
+ * @param string "comment", "copy", "database", "descidx", "drop_col", "dump", "event", "indexes", "kill", "materializedview", "partitioning", "privileges", "procedure", "processlist", "routine", "scheme", "sequence", "status", "table", "trigger", "type", "variables", "view", "view_trigger"
1087
  * @return bool
1088
  */
1089
  function support($feature) {
1090
+ return !preg_match("~scheme|sequence|type|view_trigger|materializedview" . (min_version(8) ? "" : "|descidx" . (min_version(5.1) ? "" : "|event|partitioning" . (min_version(5) ? "" : "|routine|trigger|view"))) . "~", $feature);
1091
  }
1092
 
1093
  function kill_process($val) {
adminer/adminer/adminer/drivers/oracle.inc.php CHANGED
@@ -398,7 +398,7 @@ ORDER BY PROCESS
398
  }
399
 
400
  function support($feature) {
401
- return preg_match('~^(columns|database|drop_col|indexes|processlist|scheme|sql|status|table|variables|view|view_trigger)$~', $feature); //!
402
  }
403
 
404
  $jush = "oracle";
398
  }
399
 
400
  function support($feature) {
401
+ return preg_match('~^(columns|database|drop_col|indexes|descidx|processlist|scheme|sql|status|table|variables|view|view_trigger)$~', $feature); //!
402
  }
403
 
404
  $jush = "oracle";
adminer/adminer/adminer/drivers/pgsql.inc.php CHANGED
@@ -349,7 +349,10 @@ WHERE relkind IN ('r', 'm', 'v', 'f')
349
  'timestamp without time zone' => 'timestamp',
350
  'timestamp with time zone' => 'timestamptz',
351
  );
352
- foreach (get_rows("SELECT a.attname AS field, format_type(a.atttypid, a.atttypmod) AS full_type, d.adsrc AS default, a.attnotnull::int, col_description(c.oid, a.attnum) AS comment
 
 
 
353
  FROM pg_class c
354
  JOIN pg_namespace n ON c.relnamespace = n.oid
355
  JOIN pg_attribute a ON c.oid = a.attrelid
@@ -372,8 +375,11 @@ ORDER BY a.attnum"
372
  $row["type"] = $type;
373
  $row["full_type"] = $row["type"] . $length . $addon . $array;
374
  }
 
 
 
375
  $row["null"] = !$row["attnotnull"];
376
- $row["auto_increment"] = preg_match('~^nextval\(~i', $row["default"]);
377
  $row["privileges"] = array("insert" => 1, "select" => 1, "update" => 1);
378
  if (preg_match('~(.+)::[^)]+(.*)~', $row["default"], $match)) {
379
  $row["default"] = ($match[1] == "NULL" ? null : (($match[1][0] == "'" ? idf_unescape($match[1]) : $match[1]) . $match[2]));
@@ -758,7 +764,11 @@ AND typelem = 0"
758
  // "basic" indexes after table definition
759
  foreach ($indexes as $index_name => $index) {
760
  if ($index['type'] == 'INDEX') {
761
- $return .= "\n\nCREATE INDEX " . idf_escape($index_name) . " ON " . idf_escape($status['nspname']) . "." . idf_escape($status['Name']) . " USING btree (" . implode(', ', array_map('idf_escape', $index['columns'])) . ");";
 
 
 
 
762
  }
763
  }
764
 
@@ -814,7 +824,7 @@ AND typelem = 0"
814
  }
815
 
816
  function support($feature) {
817
- return preg_match('~^(database|table|columns|sql|indexes|comment|view|' . (min_version(9.3) ? 'materializedview|' : '') . 'scheme|routine|processlist|sequence|trigger|type|variables|drop_col|kill|dump)$~', $feature);
818
  }
819
 
820
  function kill_process($val) {
349
  'timestamp without time zone' => 'timestamp',
350
  'timestamp with time zone' => 'timestamptz',
351
  );
352
+
353
+ $identity_column = min_version(10) ? "(a.attidentity = 'd')::int" : '0';
354
+
355
+ foreach (get_rows("SELECT a.attname AS field, format_type(a.atttypid, a.atttypmod) AS full_type, d.adsrc AS default, a.attnotnull::int, col_description(c.oid, a.attnum) AS comment, $identity_column AS identity
356
  FROM pg_class c
357
  JOIN pg_namespace n ON c.relnamespace = n.oid
358
  JOIN pg_attribute a ON c.oid = a.attrelid
375
  $row["type"] = $type;
376
  $row["full_type"] = $row["type"] . $length . $addon . $array;
377
  }
378
+ if ($row['identity']) {
379
+ $row['default'] = 'GENERATED BY DEFAULT AS IDENTITY';
380
+ }
381
  $row["null"] = !$row["attnotnull"];
382
+ $row["auto_increment"] = $row['identity'] || preg_match('~^nextval\(~i', $row["default"]);
383
  $row["privileges"] = array("insert" => 1, "select" => 1, "update" => 1);
384
  if (preg_match('~(.+)::[^)]+(.*)~', $row["default"], $match)) {
385
  $row["default"] = ($match[1] == "NULL" ? null : (($match[1][0] == "'" ? idf_unescape($match[1]) : $match[1]) . $match[2]));
764
  // "basic" indexes after table definition
765
  foreach ($indexes as $index_name => $index) {
766
  if ($index['type'] == 'INDEX') {
767
+ $columns = array();
768
+ foreach ($index['columns'] as $key => $val) {
769
+ $columns[] = idf_escape($val) . ($index['descs'][$key] ? " DESC" : "");
770
+ }
771
+ $return .= "\n\nCREATE INDEX " . idf_escape($index_name) . " ON " . idf_escape($status['nspname']) . "." . idf_escape($status['Name']) . " USING btree (" . implode(', ', $columns) . ");";
772
  }
773
  }
774
 
824
  }
825
 
826
  function support($feature) {
827
+ return preg_match('~^(database|table|columns|sql|indexes|descidx|comment|view|' . (min_version(9.3) ? 'materializedview|' : '') . 'scheme|routine|processlist|sequence|trigger|type|variables|drop_col|kill|dump)$~', $feature);
828
  }
829
 
830
  function kill_process($val) {
adminer/adminer/adminer/drivers/sqlite.inc.php CHANGED
@@ -770,7 +770,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
770
  }
771
 
772
  function support($feature) {
773
- return preg_match('~^(columns|database|drop_col|dump|indexes|move_col|sql|status|table|trigger|variables|view|view_trigger)$~', $feature);
774
  }
775
 
776
  $jush = "sqlite";
770
  }
771
 
772
  function support($feature) {
773
+ return preg_match('~^(columns|database|drop_col|dump|indexes|descidx|move_col|sql|status|table|trigger|variables|view|view_trigger)$~', $feature);
774
  }
775
 
776
  $jush = "sqlite";
adminer/adminer/adminer/dump.inc.php CHANGED
@@ -126,7 +126,7 @@ page_header(lang('Export'), $error, ($_GET["export"] != "" ? array("table" => $_
126
  ?>
127
 
128
  <form action="" method="post">
129
- <table cellspacing="0">
130
  <?php
131
  $db_style = array('', 'USE', 'DROP+CREATE', 'CREATE');
132
  $table_style = array('', 'DROP+CREATE', 'CREATE');
126
  ?>
127
 
128
  <form action="" method="post">
129
+ <table cellspacing="0" class="layout">
130
  <?php
131
  $db_style = array('', 'USE', 'DROP+CREATE', 'CREATE');
132
  $table_style = array('', 'DROP+CREATE', 'CREATE');
adminer/adminer/adminer/event.inc.php CHANGED
@@ -35,13 +35,13 @@ if (!$row && $EVENT != "") {
35
  ?>
36
 
37
  <form action="" method="post">
38
- <table cellspacing="0">
39
- <tr><th><?php echo lang('Name'); ?><td><input name="EVENT_NAME" value="<?php echo h($row["EVENT_NAME"]); ?>" maxlength="64" autocapitalize="off">
40
  <tr><th title="datetime"><?php echo lang('Start'); ?><td><input name="STARTS" value="<?php echo h("$row[EXECUTE_AT]$row[STARTS]"); ?>">
41
  <tr><th title="datetime"><?php echo lang('End'); ?><td><input name="ENDS" value="<?php echo h($row["ENDS"]); ?>">
42
  <tr><th><?php echo lang('Every'); ?><td><input type="number" name="INTERVAL_VALUE" value="<?php echo h($row["INTERVAL_VALUE"]); ?>" class="size"> <?php echo html_select("INTERVAL_FIELD", $intervals, $row["INTERVAL_FIELD"]); ?>
43
  <tr><th><?php echo lang('Status'); ?><td><?php echo html_select("STATUS", $statuses, $row["STATUS"]); ?>
44
- <tr><th><?php echo lang('Comment'); ?><td><input name="EVENT_COMMENT" value="<?php echo h($row["EVENT_COMMENT"]); ?>" maxlength="64">
45
  <tr><th><td><?php echo checkbox("ON_COMPLETION", "PRESERVE", $row["ON_COMPLETION"] == "PRESERVE", lang('On completion preserve')); ?>
46
  </table>
47
  <p><?php textarea("EVENT_DEFINITION", $row["EVENT_DEFINITION"]); ?>
35
  ?>
36
 
37
  <form action="" method="post">
38
+ <table cellspacing="0" class="layout">
39
+ <tr><th><?php echo lang('Name'); ?><td><input name="EVENT_NAME" value="<?php echo h($row["EVENT_NAME"]); ?>" data-maxlength="64" autocapitalize="off">
40
  <tr><th title="datetime"><?php echo lang('Start'); ?><td><input name="STARTS" value="<?php echo h("$row[EXECUTE_AT]$row[STARTS]"); ?>">
41
  <tr><th title="datetime"><?php echo lang('End'); ?><td><input name="ENDS" value="<?php echo h($row["ENDS"]); ?>">
42
  <tr><th><?php echo lang('Every'); ?><td><input type="number" name="INTERVAL_VALUE" value="<?php echo h($row["INTERVAL_VALUE"]); ?>" class="size"> <?php echo html_select("INTERVAL_FIELD", $intervals, $row["INTERVAL_FIELD"]); ?>
43
  <tr><th><?php echo lang('Status'); ?><td><?php echo html_select("STATUS", $statuses, $row["STATUS"]); ?>
44
+ <tr><th><?php echo lang('Comment'); ?><td><input name="EVENT_COMMENT" value="<?php echo h($row["EVENT_COMMENT"]); ?>" data-maxlength="64">
45
  <tr><th><td><?php echo checkbox("ON_COMPLETION", "PRESERVE", $row["ON_COMPLETION"] == "PRESERVE", lang('On completion preserve')); ?>
46
  </table>
47
  <p><?php textarea("EVENT_DEFINITION", $row["EVENT_DEFINITION"]); ?>
adminer/adminer/adminer/include/adminer.inc.php CHANGED
@@ -118,11 +118,11 @@ class Adminer {
118
  */
119
  function loginForm() {
120
  global $drivers;
121
- echo "<table cellspacing='0'>\n";
122
- echo $this->loginFormField('driver', '<tr><th>' . lang('System') . '<td>', html_select("auth[driver]", $drivers, DRIVER) . "\n");
123
  echo $this->loginFormField('server', '<tr><th>' . lang('Server') . '<td>', '<input name="auth[server]" value="' . h(SERVER) . '" title="hostname[:port]" placeholder="localhost" autocapitalize="off">' . "\n");
124
- echo $this->loginFormField('username', '<tr><th>' . lang('Username') . '<td>', '<input name="auth[username]" id="username" value="' . h($_GET["username"]) . '" autocapitalize="off">' . script("focus(qs('#username'));"));
125
- echo $this->loginFormField('password', '<tr><th>' . lang('Password') . '<td>', '<input type="password" name="auth[password]">' . "\n");
126
  echo $this->loginFormField('db', '<tr><th>' . lang('Database') . '<td>', '<input name="auth[db]" value="' . h($_GET["db"]) . '" autocapitalize="off">' . "\n");
127
  echo "</table>\n";
128
  echo "<p><input type='submit' value='" . lang('Login') . "'>\n";
@@ -310,6 +310,7 @@ class Adminer {
310
  * @return null
311
  */
312
  function tableStructurePrint($fields) {
 
313
  echo "<table cellspacing='0' class='nowrap'>\n";
314
  echo "<thead><tr><th>" . lang('Column') . "<td>" . lang('Type') . (support("comment") ? "<td>" . lang('Comment') : "") . "</thead>\n";
315
  foreach ($fields as $field) {
@@ -322,6 +323,7 @@ class Adminer {
322
  echo "\n";
323
  }
324
  echo "</table>\n";
 
325
  }
326
 
327
  /** Print list of indexes on table in tabular format
@@ -639,7 +641,7 @@ class Adminer {
639
  $history[$_GET["db"]] = array();
640
  }
641
  if (strlen($query) > 1e6) {
642
- $query = preg_replace('~[\x80-\xFF]+$~', '', substr($query, 0, 1e6)) . "\n..."; // [\x80-\xFF] - valid UTF-8, \n - can end by one-line comment
643
  }
644
  $history[$_GET["db"]][] = array($query, time(), $time); // not DB - $_GET["db"] is changed in database.inc.php //! respect $_GET["ns"]
645
  $sql_id = "sql-" . count($history[$_GET["db"]]);
@@ -843,7 +845,7 @@ class Adminer {
843
  foreach ($row as $key => $val) {
844
  $field = $fields[$key];
845
  $row[$key] = ($val !== null
846
- ? unconvert_field($field, preg_match(number_type(), $field["type"]) && $val != '' ? $val : q(($val === false ? 0 : $val)))
847
  : "NULL"
848
  );
849
  }
@@ -931,12 +933,12 @@ class Adminer {
931
  foreach ($usernames as $username => $password) {
932
  if ($password !== null) {
933
  if ($first) {
934
- echo "<p id='logins'>" . script("mixin(qs('#logins'), {onmouseover: menuOver, onmouseout: menuOut});");
935
  $first = false;
936
  }
937
  $dbs = $_SESSION["db"][$vendor][$server][$username];
938
  foreach (($dbs ? array_keys($dbs) : array("")) as $db) {
939
- echo "<a href='" . h(auth_url($vendor, $server, $username, $db)) . "'>($drivers[$vendor]) " . h($username . ($server != "" ? "@" . $this->serverName($server) : "") . ($db != "" ? " - $db" : "")) . "</a><br>\n";
940
  }
941
  }
942
  }
118
  */
119
  function loginForm() {
120
  global $drivers;
121
+ echo "<table cellspacing='0' class='layout'>\n";
122
+ echo $this->loginFormField('driver', '<tr><th>' . lang('System') . '<td>', html_select("auth[driver]", $drivers, DRIVER, "loginDriver(this);") . "\n");
123
  echo $this->loginFormField('server', '<tr><th>' . lang('Server') . '<td>', '<input name="auth[server]" value="' . h(SERVER) . '" title="hostname[:port]" placeholder="localhost" autocapitalize="off">' . "\n");
124
+ echo $this->loginFormField('username', '<tr><th>' . lang('Username') . '<td>', '<input name="auth[username]" id="username" value="' . h($_GET["username"]) . '" autocomplete="username" autocapitalize="off">' . script("focus(qs('#username')); qs('#username').form['auth[driver]'].onchange();"));
125
+ echo $this->loginFormField('password', '<tr><th>' . lang('Password') . '<td>', '<input type="password" name="auth[password]" autocomplete="current-password">' . "\n");
126
  echo $this->loginFormField('db', '<tr><th>' . lang('Database') . '<td>', '<input name="auth[db]" value="' . h($_GET["db"]) . '" autocapitalize="off">' . "\n");
127
  echo "</table>\n";
128
  echo "<p><input type='submit' value='" . lang('Login') . "'>\n";
310
  * @return null
311
  */
312
  function tableStructurePrint($fields) {
313
+ echo "<div class='scrollable'>\n";
314
  echo "<table cellspacing='0' class='nowrap'>\n";
315
  echo "<thead><tr><th>" . lang('Column') . "<td>" . lang('Type') . (support("comment") ? "<td>" . lang('Comment') : "") . "</thead>\n";
316
  foreach ($fields as $field) {
323
  echo "\n";
324
  }
325
  echo "</table>\n";
326
+ echo "</div>\n";
327
  }
328
 
329
  /** Print list of indexes on table in tabular format
641
  $history[$_GET["db"]] = array();
642
  }
643
  if (strlen($query) > 1e6) {
644
+ $query = preg_replace('~[\x80-\xFF]+$~', '', substr($query, 0, 1e6)) . "\n"; // [\x80-\xFF] - valid UTF-8, \n - can end by one-line comment
645
  }
646
  $history[$_GET["db"]][] = array($query, time(), $time); // not DB - $_GET["db"] is changed in database.inc.php //! respect $_GET["ns"]
647
  $sql_id = "sql-" . count($history[$_GET["db"]]);
845
  foreach ($row as $key => $val) {
846
  $field = $fields[$key];
847
  $row[$key] = ($val !== null
848
+ ? unconvert_field($field, preg_match(number_type(), $field["type"]) && $val != '' && !preg_match('~\[~', $field["full_type"]) ? $val : q(($val === false ? 0 : $val)))
849
  : "NULL"
850
  );
851
  }
933
  foreach ($usernames as $username => $password) {
934
  if ($password !== null) {
935
  if ($first) {
936
+ echo "<ul id='logins'>" . script("mixin(qs('#logins'), {onmouseover: menuOver, onmouseout: menuOut});");
937
  $first = false;
938
  }
939
  $dbs = $_SESSION["db"][$vendor][$server][$username];
940
  foreach (($dbs ? array_keys($dbs) : array("")) as $db) {
941
+ echo "<li><a href='" . h(auth_url($vendor, $server, $username, $db)) . "'>($drivers[$vendor]) " . h($username . ($server != "" ? "@" . $this->serverName($server) : "") . ($db != "" ? " - $db" : "")) . "</a>\n";
942
  }
943
  }
944
  }
adminer/adminer/adminer/include/auth.inc.php CHANGED
@@ -83,7 +83,7 @@ if ($auth) {
83
  set_session($key, null);
84
  }
85
  unset_permanent();
86
- redirect(substr(preg_replace('~\b(username|db|ns)=[^&]*&~', '', ME), 0, -1), lang('Logout successful.') . ' ' . lang('Thanks for using Adminer, consider <a href="%s">donating</a>.', 'https://sourceforge.net/donate/index.php?group_id=264133'));
87
  }
88
 
89
  } elseif ($permanent && !$_SESSION["pwds"]) {
@@ -172,7 +172,8 @@ if (isset($_GET["username"])) {
172
 
173
  $login = null;
174
  if (!is_object($connection) || ($login = $adminer->login($_GET["username"], get_password())) !== true) {
175
- auth_error((is_string($connection) ? h($connection) : (is_string($login) ? $login : lang('Invalid credentials.'))));
 
176
  }
177
 
178
  if ($auth && $_POST["token"]) {
83
  set_session($key, null);
84
  }
85
  unset_permanent();
86
+ redirect(substr(preg_replace('~\b(username|db|ns)=[^&]*&~', '', ME), 0, -1), lang('Logout successful.') . ' ' . lang('Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.'));
87
  }
88
 
89
  } elseif ($permanent && !$_SESSION["pwds"]) {
172
 
173
  $login = null;
174
  if (!is_object($connection) || ($login = $adminer->login($_GET["username"], get_password())) !== true) {
175
+ $error = (is_string($connection) ? h($connection) : (is_string($login) ? $login : lang('Invalid credentials.')));
176
+ auth_error($error . (preg_match('~^ | $~', get_password()) ? '<br>' . lang('There is a space in the input password which might be the cause.') : ''));
177
  }
178
 
179
  if ($auth && $_POST["token"]) {
adminer/adminer/adminer/include/bootstrap.inc.php CHANGED
@@ -79,6 +79,7 @@ include "../adminer/drivers/firebird.inc.php";
79
  include "../adminer/drivers/simpledb.inc.php";
80
  include "../adminer/drivers/mongo.inc.php";
81
  include "../adminer/drivers/elastic.inc.php";
 
82
  include "../adminer/drivers/mysql.inc.php"; // must be included as last driver
83
 
84
  define("SERVER", $_GET[DRIVER]); // read from pgsql=localhost
79
  include "../adminer/drivers/simpledb.inc.php";
80
  include "../adminer/drivers/mongo.inc.php";
81
  include "../adminer/drivers/elastic.inc.php";
82
+ include "../adminer/drivers/clickhouse.inc.php";
83
  include "../adminer/drivers/mysql.inc.php"; // must be included as last driver
84
 
85
  define("SERVER", $_GET[DRIVER]); // read from pgsql=localhost
adminer/adminer/adminer/include/editing.inc.php CHANGED
@@ -17,6 +17,7 @@ function select($result, $connection2 = null, $orgtables = array(), $limit = 0)
17
  odd(''); // reset odd for each result
18
  for ($i=0; (!$limit || $i < $limit) && ($row = $result->fetch_row()); $i++) {
19
  if (!$i) {
 
20
  echo "<table cellspacing='0' class='nowrap'>\n";
21
  echo "<thead><tr>";
22
  for ($j=0; $j < count($row); $j++) {
@@ -85,7 +86,7 @@ function select($result, $connection2 = null, $orgtables = array(), $limit = 0)
85
  echo "<td>$val";
86
  }
87
  }
88
- echo ($i ? "</table>" : "<p class='message'>" . lang('No rows.')) . "\n";
89
  return $return;
90
  }
91
 
@@ -111,6 +112,31 @@ function referencable_primary($self) {
111
  return $return;
112
  }
113
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114
  /** Print SQL <textarea> tag
115
  * @param string
116
  * @param string or array in which case [0] of every element is used
@@ -157,7 +183,7 @@ echo optionlist(array_merge($extra_types, $structured_types), $type);
157
  <td><input name="<?php echo h($key); ?>[length]" value="<?php echo h($field["length"]); ?>" size="3"<?php echo (!$field["length"] && preg_match('~var(char|binary)$~', $type) ? " class='required'" : ""); //! type="number" with enabled JavaScript ?> aria-labelledby="label-length"><?php echo script("mixin(qsl('input'), {onfocus: editingLengthFocus, oninput: editingLengthChange});", ""); ?><td class="options"><?php
158
  echo "<select name='" . h($key) . "[collation]'" . (preg_match('~(char|text|enum|set)$~', $type) ? "" : " class='hidden'") . '><option value="">(' . lang('collation') . ')' . optionlist($collations, $field["collation"]) . '</select>';
159
  echo ($unsigned ? "<select name='" . h($key) . "[unsigned]'" . (!$type || preg_match(number_type(), $type) ? "" : " class='hidden'") . '><option>' . optionlist($unsigned, $field["unsigned"]) . '</select>' : '');
160
- echo (isset($field['on_update']) ? "<select name='" . h($key) . "[on_update]'" . (preg_match('~timestamp|datetime~', $type) ? "" : " class='hidden'") . '>' . optionlist(array("" => "(" . lang('ON UPDATE') . ")", "CURRENT_TIMESTAMP"), $field["on_update"]) . '</select>' : '');
161
  echo ($foreign_keys ? "<select name='" . h($key) . "[on_delete]'" . (preg_match("~`~", $type) ? "" : " class='hidden'") . "><option value=''>(" . lang('ON DELETE') . ")" . optionlist(explode("|", $on_actions), $field["on_delete"]) . "</select> " : " "); // space for IE
162
  }
163
 
@@ -235,10 +261,9 @@ function type_class($type) {
235
  * @param array
236
  * @param string TABLE or PROCEDURE
237
  * @param array returned by referencable_primary()
238
- * @param bool display comments column
239
  * @return null
240
  */
241
- function edit_fields($fields, $collations, $type = "TABLE", $foreign_keys = array(), $comments = false) {
242
  global $inout;
243
  $fields = array_values($fields);
244
  ?>
@@ -258,7 +283,7 @@ function edit_fields($fields, $collations, $type = "TABLE", $foreign_keys = arra
258
  'mssql' => "ms186775.aspx",
259
  )); ?>
260
  <td id="label-default"><?php echo lang('Default value'); ?>
261
- <?php echo (support("comment") ? "<td id='label-comment'" . ($comments ? "" : " class='hidden'") . ">" . lang('Comment') : ""); ?>
262
  <?php } ?>
263
  <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("row_count = " . count($fields) . ";"); ?>
264
  </thead>
@@ -272,14 +297,14 @@ function edit_fields($fields, $collations, $type = "TABLE", $foreign_keys = arra
272
  ?>
273
  <tr<?php echo ($display ? "" : " style='display: none;'"); ?>>
274
  <?php echo ($type == "PROCEDURE" ? "<td>" . html_select("fields[$i][inout]", explode("|", $inout), $field["inout"]) : ""); ?>
275
- <th><?php if ($display) { ?><input name="fields[<?php echo $i; ?>][field]" value="<?php echo h($field["field"]); ?>" maxlength="64" autocapitalize="off" aria-labelledby="label-name"><?php echo script("qsl('input').oninput = function () { editingNameChange.call(this);" . ($field["field"] != "" || count($fields) > 1 ? "" : " editingAddRow.call(this);") . " };", ""); ?><?php } ?>
276
  <input type="hidden" name="fields[<?php echo $i; ?>][orig]" value="<?php echo h($orig); ?>">
277
  <?php edit_type("fields[$i]", $field, $collations, $foreign_keys); ?>
278
  <?php if ($type == "TABLE") { ?>
279
  <td><?php echo checkbox("fields[$i][null]", 1, $field["null"], "", "", "block", "label-null"); ?>
280
  <td><label class="block"><input type="radio" name="auto_increment_col" value="<?php echo $i; ?>"<?php if ($field["auto_increment"]) { ?> checked<?php } ?> aria-labelledby="label-ai"></label><td><?php
281
  echo checkbox("fields[$i][has_default]", 1, $field["has_default"], "", "", "", "label-default"); ?><input name="fields[<?php echo $i; ?>][default]" value="<?php echo h($field["default"]); ?>" aria-labelledby="label-default"><?php
282
- echo (support("comment") ? "<td" . ($comments ? "" : " class='hidden'") . "><input name='fields[$i][comment]' value='" . h($field["comment"]) . "' maxlength='" . (min_version(5.5) ? 1024 : 255) . "' aria-labelledby='label-comment'>" : "");
283
  }
284
  echo "<td>";
285
  echo (support("move_col") ?
17
  odd(''); // reset odd for each result
18
  for ($i=0; (!$limit || $i < $limit) && ($row = $result->fetch_row()); $i++) {
19
  if (!$i) {
20
+ echo "<div class='scrollable'>\n";
21
  echo "<table cellspacing='0' class='nowrap'>\n";
22
  echo "<thead><tr>";
23
  for ($j=0; $j < count($row); $j++) {
86
  echo "<td>$val";
87
  }
88
  }
89
+ echo ($i ? "</table>\n</div>" : "<p class='message'>" . lang('No rows.')) . "\n";
90
  return $return;
91
  }
92
 
112
  return $return;
113
  }
114
 
115
+ /** Get settings stored in a cookie
116
+ * @return array
117
+ */
118
+ function adminer_settings() {
119
+ parse_str($_COOKIE["adminer_settings"], $settings);
120
+ return $settings;
121
+ }
122
+
123
+ /** Get setting stored in a cookie
124
+ * @param string
125
+ * @return array
126
+ */
127
+ function adminer_setting($key) {
128
+ $settings = adminer_settings();
129
+ return $settings[$key];
130
+ }
131
+
132
+ /** Store settings to a cookie
133
+ * @param array
134
+ * @return bool
135
+ */
136
+ function set_adminer_settings($settings) {
137
+ return cookie("adminer_settings", http_build_query($settings + adminer_settings()));
138
+ }
139
+
140
  /** Print SQL <textarea> tag
141
  * @param string
142
  * @param string or array in which case [0] of every element is used
183
  <td><input name="<?php echo h($key); ?>[length]" value="<?php echo h($field["length"]); ?>" size="3"<?php echo (!$field["length"] && preg_match('~var(char|binary)$~', $type) ? " class='required'" : ""); //! type="number" with enabled JavaScript ?> aria-labelledby="label-length"><?php echo script("mixin(qsl('input'), {onfocus: editingLengthFocus, oninput: editingLengthChange});", ""); ?><td class="options"><?php
184
  echo "<select name='" . h($key) . "[collation]'" . (preg_match('~(char|text|enum|set)$~', $type) ? "" : " class='hidden'") . '><option value="">(' . lang('collation') . ')' . optionlist($collations, $field["collation"]) . '</select>';
185
  echo ($unsigned ? "<select name='" . h($key) . "[unsigned]'" . (!$type || preg_match(number_type(), $type) ? "" : " class='hidden'") . '><option>' . optionlist($unsigned, $field["unsigned"]) . '</select>' : '');
186
+ echo (isset($field['on_update']) ? "<select name='" . h($key) . "[on_update]'" . (preg_match('~timestamp|datetime~', $type) ? "" : " class='hidden'") . '>' . optionlist(array("" => "(" . lang('ON UPDATE') . ")", "CURRENT_TIMESTAMP"), (preg_match('~^CURRENT_TIMESTAMP~i', $field["on_update"]) ? "CURRENT_TIMESTAMP" : $field["on_update"])) . '</select>' : '');
187
  echo ($foreign_keys ? "<select name='" . h($key) . "[on_delete]'" . (preg_match("~`~", $type) ? "" : " class='hidden'") . "><option value=''>(" . lang('ON DELETE') . ")" . optionlist(explode("|", $on_actions), $field["on_delete"]) . "</select> " : " "); // space for IE
188
  }
189
 
261
  * @param array
262
  * @param string TABLE or PROCEDURE
263
  * @param array returned by referencable_primary()
 
264
  * @return null
265
  */
266
+ function edit_fields($fields, $collations, $type = "TABLE", $foreign_keys = array()) {
267
  global $inout;
268
  $fields = array_values($fields);
269
  ?>
283
  'mssql' => "ms186775.aspx",
284
  )); ?>
285
  <td id="label-default"><?php echo lang('Default value'); ?>
286
+ <?php echo (support("comment") ? "<td id='label-comment'>" . lang('Comment') : ""); ?>
287
  <?php } ?>
288
  <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("row_count = " . count($fields) . ";"); ?>
289
  </thead>
297
  ?>
298
  <tr<?php echo ($display ? "" : " style='display: none;'"); ?>>
299
  <?php echo ($type == "PROCEDURE" ? "<td>" . html_select("fields[$i][inout]", explode("|", $inout), $field["inout"]) : ""); ?>
300
+ <th><?php if ($display) { ?><input name="fields[<?php echo $i; ?>][field]" value="<?php echo h($field["field"]); ?>" data-maxlength="64" autocapitalize="off" aria-labelledby="label-name"><?php echo script("qsl('input').oninput = function () { editingNameChange.call(this);" . ($field["field"] != "" || count($fields) > 1 ? "" : " editingAddRow.call(this);") . " };", ""); ?><?php } ?>
301
  <input type="hidden" name="fields[<?php echo $i; ?>][orig]" value="<?php echo h($orig); ?>">
302
  <?php edit_type("fields[$i]", $field, $collations, $foreign_keys); ?>
303
  <?php if ($type == "TABLE") { ?>
304
  <td><?php echo checkbox("fields[$i][null]", 1, $field["null"], "", "", "block", "label-null"); ?>
305
  <td><label class="block"><input type="radio" name="auto_increment_col" value="<?php echo $i; ?>"<?php if ($field["auto_increment"]) { ?> checked<?php } ?> aria-labelledby="label-ai"></label><td><?php
306
  echo checkbox("fields[$i][has_default]", 1, $field["has_default"], "", "", "", "label-default"); ?><input name="fields[<?php echo $i; ?>][default]" value="<?php echo h($field["default"]); ?>" aria-labelledby="label-default"><?php
307
+ echo (support("comment") ? "<td><input name='fields[$i][comment]' value='" . h($field["comment"]) . "' data-maxlength='" . (min_version(5.5) ? 1024 : 255) . "' aria-labelledby='label-comment'>" : "");
308
  }
309
  echo "<td>";
310
  echo (support("move_col") ?
adminer/adminer/adminer/include/functions.inc.php CHANGED
@@ -815,7 +815,7 @@ function shorten_utf8($string, $length = 80, $suffix = "") {
815
  if (!preg_match("(^(" . repeat_pattern("[\t\r\n -\x{10FFFF}]", $length) . ")($)?)u", $string, $match)) { // ~s causes trash in $match[2] under some PHP versions, (.|\n) is slow
816
  preg_match("(^(" . repeat_pattern("[\t\r\n -~]", $length) . ")($)?)", $string, $match);
817
  }
818
- return h($match[1]) . $suffix . (isset($match[2]) ? "" : "<i>...</i>");
819
  }
820
 
821
  /** Format decimal number
@@ -1021,7 +1021,7 @@ function process_input($field) {
1021
  return null;
1022
  }
1023
  if ($function == "orig") {
1024
- return ($field["on_update"] == "CURRENT_TIMESTAMP" ? idf_escape($field["field"]) : false);
1025
  }
1026
  if ($function == "NULL") {
1027
  return "NULL";
@@ -1419,7 +1419,7 @@ function edit_form($TABLE, $fields, $row, $update) {
1419
  if (!$fields) {
1420
  echo "<p class='error'>" . lang('You have no privileges to update this table.') . "\n";
1421
  } else {
1422
- echo "<table cellspacing='0'>" . script("qsl('table').onkeydown = editingKeydown;");
1423
 
1424
  foreach ($fields as $name => $field) {
1425
  echo "<tr><th>" . $adminer->fieldName($field);
@@ -1445,12 +1445,12 @@ function edit_form($TABLE, $fields, $row, $update) {
1445
  }
1446
  $function = ($_POST["save"]
1447
  ? (string) $_POST["function"][$name]
1448
- : ($update && $field["on_update"] == "CURRENT_TIMESTAMP"
1449
  ? "now"
1450
  : ($value === false ? null : ($value !== null ? '' : 'NULL'))
1451
  )
1452
  );
1453
- if (preg_match("~time~", $field["type"]) && $value == "CURRENT_TIMESTAMP") {
1454
  $value = "";
1455
  $function = "now";
1456
  }
@@ -1476,7 +1476,7 @@ function edit_form($TABLE, $fields, $row, $update) {
1476
  ? lang('Save and continue edit')
1477
  : lang('Save and insert next')
1478
  ) . "' title='Ctrl+Shift+Enter'>\n";
1479
- echo ($update ? script("qsl('input').onclick = function () { return !ajaxForm(this.form, '" . lang('Saving') . "...', this); };") : "");
1480
  }
1481
  }
1482
  echo ($update ? "<input type='submit' name='delete' value='" . lang('Delete') . "'>" . confirm() . "\n"
815
  if (!preg_match("(^(" . repeat_pattern("[\t\r\n -\x{10FFFF}]", $length) . ")($)?)u", $string, $match)) { // ~s causes trash in $match[2] under some PHP versions, (.|\n) is slow
816
  preg_match("(^(" . repeat_pattern("[\t\r\n -~]", $length) . ")($)?)", $string, $match);
817
  }
818
+ return h($match[1]) . $suffix . (isset($match[2]) ? "" : "<i>…</i>");
819
  }
820
 
821
  /** Format decimal number
1021
  return null;
1022
  }
1023
  if ($function == "orig") {
1024
+ return (preg_match('~^CURRENT_TIMESTAMP~i', $field["on_update"]) ? idf_escape($field["field"]) : false);
1025
  }
1026
  if ($function == "NULL") {
1027
  return "NULL";
1419
  if (!$fields) {
1420
  echo "<p class='error'>" . lang('You have no privileges to update this table.') . "\n";
1421
  } else {
1422
+ echo "<table cellspacing='0' class='layout'>" . script("qsl('table').onkeydown = editingKeydown;");
1423
 
1424
  foreach ($fields as $name => $field) {
1425
  echo "<tr><th>" . $adminer->fieldName($field);
1445
  }
1446
  $function = ($_POST["save"]
1447
  ? (string) $_POST["function"][$name]
1448
+ : ($update && preg_match('~^CURRENT_TIMESTAMP~i', $field["on_update"])
1449
  ? "now"
1450
  : ($value === false ? null : ($value !== null ? '' : 'NULL'))
1451
  )
1452
  );
1453
+ if (preg_match("~time~", $field["type"]) && preg_match('~^CURRENT_TIMESTAMP~i', $value)) {
1454
  $value = "";
1455
  $function = "now";
1456
  }
1476
  ? lang('Save and continue edit')
1477
  : lang('Save and insert next')
1478
  ) . "' title='Ctrl+Shift+Enter'>\n";
1479
+ echo ($update ? script("qsl('input').onclick = function () { return !ajaxForm(this.form, '" . lang('Saving') . "', this); };") : "");
1480
  }
1481
  }
1482
  echo ($update ? "<input type='submit' name='delete' value='" . lang('Delete') . "'>" . confirm() . "\n"
adminer/adminer/adminer/include/lang.inc.php CHANGED
@@ -23,6 +23,7 @@ $langs = array(
23
  'id' => 'Bahasa Indonesia', // Ivan Lanin - http://ivan.lanin.org
24
  'it' => 'Italiano', // Alessandro Fiorotto, Paolo Asperti
25
  'ja' => '日本語', // Hitoshi Ozawa - http://sourceforge.jp/projects/oss-ja-jpn/releases/
 
26
  'ko' => '한국어', // dalli - skcha67@gmail.com
27
  'lt' => 'Lietuvių', // Paulius Leščinskas - http://www.lescinskas.lt
28
  'ms' => 'Bahasa Melayu', // Pisyek
23
  'id' => 'Bahasa Indonesia', // Ivan Lanin - http://ivan.lanin.org
24
  'it' => 'Italiano', // Alessandro Fiorotto, Paolo Asperti
25
  'ja' => '日本語', // Hitoshi Ozawa - http://sourceforge.jp/projects/oss-ja-jpn/releases/
26
+ 'ka' => 'ქართული', // Saba Khmaladze skhmaladze@uglt.org
27
  'ko' => '한국어', // dalli - skcha67@gmail.com
28
  'lt' => 'Lietuvių', // Paulius Leščinskas - http://www.lescinskas.lt
29
  'ms' => 'Bahasa Melayu', // Pisyek
adminer/adminer/adminer/include/version.inc.php CHANGED
@@ -1,2 +1,2 @@
1
  <?php
2
- $VERSION = "4.6.3";
1
  <?php
2
+ $VERSION = "4.7.1";
adminer/adminer/adminer/indexes.inc.php CHANGED
@@ -94,6 +94,7 @@ if (!$row) {
94
  ?>
95
 
96
  <form action="" method="post">
 
97
  <table cellspacing="0" class="nowrap">
98
  <thead><tr>
99
  <th id="label-type"><?php echo lang('Index Type'); ?>
@@ -126,7 +127,7 @@ foreach ($row["indexes"] as $index) {
126
  "partial(" . ($i == count($index["columns"]) ? "indexesAddColumn" : "indexesChangeColumn") . ", '" . js_escape($jush == "sql" ? "" : $_GET["indexes"] . "_") . "')"
127
  );
128
  echo ($jush == "sql" || $jush == "mssql" ? "<input type='number' name='indexes[$j][lengths][$i]' class='size' value='" . h($index["lengths"][$key]) . "' title='" . lang('Length') . "'>" : "");
129
- echo ($jush != "sql" ? checkbox("indexes[$j][descs][$i]", 1, $index["descs"][$key], lang('descending')) : "");
130
  echo " </span>";
131
  $i++;
132
  }
@@ -138,6 +139,7 @@ foreach ($row["indexes"] as $index) {
138
  }
139
  ?>
140
  </table>
 
141
  <p>
142
  <input type="submit" value="<?php echo lang('Save'); ?>">
143
  <input type="hidden" name="token" value="<?php echo $token; ?>">
94
  ?>
95
 
96
  <form action="" method="post">
97
+ <div class="scrollable">
98
  <table cellspacing="0" class="nowrap">
99
  <thead><tr>
100
  <th id="label-type"><?php echo lang('Index Type'); ?>
127
  "partial(" . ($i == count($index["columns"]) ? "indexesAddColumn" : "indexesChangeColumn") . ", '" . js_escape($jush == "sql" ? "" : $_GET["indexes"] . "_") . "')"
128
  );
129
  echo ($jush == "sql" || $jush == "mssql" ? "<input type='number' name='indexes[$j][lengths][$i]' class='size' value='" . h($index["lengths"][$key]) . "' title='" . lang('Length') . "'>" : "");
130
+ echo (support("descidx") ? checkbox("indexes[$j][descs][$i]", 1, $index["descs"][$key], lang('descending')) : "");
131
  echo " </span>";
132
  $i++;
133
  }
139
  }
140
  ?>
141
  </table>
142
+ </div>
143
  <p>
144
  <input type="submit" value="<?php echo lang('Save'); ?>">
145
  <input type="hidden" name="token" value="<?php echo $token; ?>">
adminer/adminer/adminer/lang/cs.inc.php CHANGED
@@ -10,8 +10,9 @@ $translations = array(
10
  'Logout' => 'Odhlásit',
11
  'Logged as: %s' => 'Přihlášen jako: %s',
12
  'Logout successful.' => 'Odhlášení proběhlo v pořádku.',
13
- 'Thanks for using Adminer, consider <a href="%s">donating</a>.' => 'Díky za použití Admineru, <a href="%s">příspějte</a> na vývoj.',
14
  'Invalid credentials.' => 'Neplatné přihlašovací údaje.',
 
15
  'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer nepodporuje přístup k databázi bez hesla, <a href="https://www.adminer.org/cs/password/"%s>více informací</a>.',
16
  'Database does not support password.' => 'Databáze nepodporuje heslo.',
17
  'Too many unsuccessful logins, try again in %d minute(s).' => array('Příliš mnoho pokusů o přihlášení, zkuste to znovu za %d minutu.', 'Příliš mnoho pokusů o přihlášení, zkuste to znovu za %d minuty.', 'Příliš mnoho pokusů o přihlášení, zkuste to znovu za %d minut.'),
10
  'Logout' => 'Odhlásit',
11
  'Logged as: %s' => 'Přihlášen jako: %s',
12
  'Logout successful.' => 'Odhlášení proběhlo v pořádku.',
13
+ 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Díky za použití Admineru, <a href="https://www.adminer.org/cs/donation/">přispějte</a> na vývoj.',
14
  'Invalid credentials.' => 'Neplatné přihlašovací údaje.',
15
+ 'There is a space in the input password which might be the cause.' => 'Problém může být, že je v zadaném hesle mezera.',
16
  'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer nepodporuje přístup k databázi bez hesla, <a href="https://www.adminer.org/cs/password/"%s>více informací</a>.',
17
  'Database does not support password.' => 'Databáze nepodporuje heslo.',
18
  'Too many unsuccessful logins, try again in %d minute(s).' => array('Příliš mnoho pokusů o přihlášení, zkuste to znovu za %d minutu.', 'Příliš mnoho pokusů o přihlášení, zkuste to znovu za %d minuty.', 'Příliš mnoho pokusů o přihlášení, zkuste to znovu za %d minut.'),
adminer/adminer/adminer/lang/he.inc.php CHANGED
@@ -279,7 +279,7 @@ $translations = array(
279
  'Default value' => 'ערך ברירת מחדל',
280
  'Full table scan' => 'סריקה טבלה מלאה',
281
  'Too many unsuccessful logins, try again in %d minute(s).' => 'יותר מידי נסיונות כניסה נכשלו, אנא נסה עוד %d דקות',
282
- 'Thanks for using Adminer, consider <a href="%s">donating</a>.' => 'תודה שהשתמש ב-adminer אנא שקול <a href="%s">לתרום</a>.',
283
  'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'סיסמת המאסטר פגה <a href="https://www.adminer.org/en/extension/"%s>התקן תוסף</a> על מנת להפוך את זה לתמידי',
284
  'If you did not send this request from Adminer then close this page.' => 'אם לא אתה שלחת בקשה ל-Adminer הינך יכול לסגור חלון זה',
285
  'You can upload a big SQL file via FTP and import it from server.' => 'ניתן לעלות קבצים ב-FTP ואז למשוך אותם מהשרת',
279
  'Default value' => 'ערך ברירת מחדל',
280
  'Full table scan' => 'סריקה טבלה מלאה',
281
  'Too many unsuccessful logins, try again in %d minute(s).' => 'יותר מידי נסיונות כניסה נכשלו, אנא נסה עוד %d דקות',
282
+ 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'תודה שהשתמש ב-adminer אנא שקול <a href="https://www.adminer.org/en/donation/">לתרום</a>.',
283
  'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'סיסמת המאסטר פגה <a href="https://www.adminer.org/en/extension/"%s>התקן תוסף</a> על מנת להפוך את זה לתמידי',
284
  'If you did not send this request from Adminer then close this page.' => 'אם לא אתה שלחת בקשה ל-Adminer הינך יכול לסגור חלון זה',
285
  'You can upload a big SQL file via FTP and import it from server.' => 'ניתן לעלות קבצים ב-FTP ואז למשוך אותם מהשרת',
adminer/adminer/adminer/lang/ja.inc.php CHANGED
@@ -178,7 +178,7 @@ $translations = array(
178
  'Optimize' => '最適化',
179
  'Check' => 'チェック',
180
  'Repair' => '修復',
181
- 'Truncate' => 'Truncate',
182
  'Move to other database' => '別のデータベースへ移動',
183
  'Move' => '移動',
184
  'Save and continue edit' => '保存して継続',
@@ -264,4 +264,14 @@ $translations = array(
264
  'Permanent link' => 'パーマネントリンク',
265
  'Edit all' => 'すべて編集',
266
  'HH:MM:SS' => '時:分:秒',
 
 
 
 
 
 
 
 
 
 
267
  );
178
  'Optimize' => '最適化',
179
  'Check' => 'チェック',
180
  'Repair' => '修復',
181
+ 'Truncate' => '空にする',
182
  'Move to other database' => '別のデータベースへ移動',
183
  'Move' => '移動',
184
  'Save and continue edit' => '保存して継続',
264
  'Permanent link' => 'パーマネントリンク',
265
  'Edit all' => 'すべて編集',
266
  'HH:MM:SS' => '時:分:秒',
267
+ 'Selected' => '選択済',
268
+ 'Modify' => '修正',
269
+ 'Load more data' => '続きを読み込み',
270
+ 'Loading' => '読み込み中',
271
+ 'Size' => 'サイズ',
272
+ 'Compute' => '算出',
273
+ 'Saving' => '保存中',
274
+ 'yes' => 'はい',
275
+ 'no' => 'いいえ',
276
+ 'Default value' => '既定値',
277
  );
adminer/adminer/adminer/lang/ka.inc.php ADDED
@@ -0,0 +1,303 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $translations = array(
3
+ 'Login' => 'შესვლა',
4
+ 'Logout successful.' => 'გამოხვედით სისტემიდან.',
5
+ 'Invalid credentials.' => 'არასწორი მომხმარებელი ან პაროლი.',
6
+ 'Server' => 'სერვერი',
7
+ 'Username' => 'მომხმარებელი',
8
+ 'Password' => 'პაროლი',
9
+ 'Select database' => 'ბაზა',
10
+ 'Invalid database.' => 'არასწორი ბაზა.',
11
+ 'Table has been dropped.' => 'ცხრილი წაიშალა.',
12
+ 'Table has been altered.' => 'ცხრილი შეიცვალა.',
13
+ 'Table has been created.' => 'ცხრილი შეიქმნა.',
14
+ 'Alter table' => 'ცხრილის შეცვლა',
15
+ 'Create table' => 'ცხრილის შექმნა',
16
+ 'Table name' => 'სახელი',
17
+ 'engine' => 'სახეობა',
18
+ 'collation' => 'კოდირება',
19
+ 'Column name' => 'ველი',
20
+ 'Type' => 'სახეობა',
21
+ 'Length' => 'სიგრძე',
22
+ 'Auto Increment' => 'ავტომატურად გაზრდა',
23
+ 'Options' => 'მოქმედება',
24
+ 'Save' => 'შენახვა',
25
+ 'Drop' => 'წაშლა',
26
+ 'Database has been dropped.' => 'ბაზა წაიშალა.',
27
+ 'Database has been created.' => 'ბაზა შეიქმნა.',
28
+ 'Database has been renamed.' => 'ბაზას გადაერქვა.',
29
+ 'Database has been altered.' => 'ბაზა შეიცვალა.',
30
+ 'Alter database' => 'ბაზის შეცვლა',
31
+ 'Create database' => 'ბაზის შექმნა',
32
+ 'SQL command' => 'SQL-ბრძანება',
33
+ 'Logout' => 'გასვლა',
34
+ 'database' => 'ბაზა',
35
+ 'Use' => 'არჩევა',
36
+ 'No tables.' => 'ბაზაში ცხრილი არაა.',
37
+ 'select' => 'არჩევა',
38
+ 'Item has been deleted.' => 'ჩანაწერი წაიშალა.',
39
+ 'Item has been updated.' => 'ჩანაწერი განახლდა.',
40
+ 'Item%s has been inserted.' => 'ჩანაწერი%s ჩაჯდა.',
41
+ 'Edit' => 'შეცვლა',
42
+ 'Insert' => 'ჩასმა',
43
+ 'Save and insert next' => 'შენახვა და სხვის ჩასმა',
44
+ 'Delete' => 'წაშლა',
45
+ 'Database' => 'ბაზა',
46
+ 'Indexes have been altered.' => 'შეიცვალა ინდექსები.',
47
+ 'Indexes' => 'ინდექსები',
48
+ 'Alter indexes' => 'ინდექსის შეცვლა',
49
+ 'Add next' => 'კიდევ დამატება',
50
+ 'Language' => 'ენა',
51
+ 'Select' => 'არჩევა',
52
+ 'New item' => 'ახალი ჩანაწერი',
53
+ 'Search' => 'ძებნა',
54
+ 'Sort' => 'დალაგება',
55
+ 'descending' => 'კლებადობით',
56
+ 'Limit' => 'ზღვარი',
57
+ 'No rows.' => 'ჩანაწერი არაა.',
58
+ 'Action' => 'მოქმედება',
59
+ 'edit' => 'რედაქტირება',
60
+ 'Page' => 'გვერდი',
61
+ 'Query executed OK, %d row(s) affected.' => 'მოთხოვდა შესრულდა, შეიცვალა %d ჩანაწერი.',
62
+ 'Error in query' => 'შეცდომა მოთხოვნაში',
63
+ 'Execute' => 'შესრულება',
64
+ 'Table' => 'ცხრილი',
65
+ 'Foreign keys' => 'გარე გასაღები',
66
+ 'Triggers' => 'ტრიგერები',
67
+ 'View' => 'ნახვა',
68
+ 'Unable to select the table' => 'ცხრილიდან ინფორმაცია ვერ მოვიპოვე',
69
+ 'Invalid CSRF token. Send the form again.' => 'უმოქმედო CSRF-ტოკენი. ფორმის კიდევ ერთხელ გაგზავნა.',
70
+ 'Comment' => 'კომენტარები',
71
+ 'Default values' => 'სტანდარტული მნიშვნელობა',
72
+ '%d byte(s)' => '%d ბაიტი',
73
+ 'No commands to execute.' => 'შესასრულებელი ბრძანება არაა.',
74
+ 'Unable to upload a file.' => 'ფაილი არ აიტვირთა სერვერზე.',
75
+ 'File upload' => 'ფაილის ატვირთვა სერვერზე',
76
+ 'File uploads are disabled.' => 'ფაილის სერვერზე ატვირთვა გათიშულია.',
77
+ 'Routine has been called, %d row(s) affected.' => 'გამოძახებულია პროცედურა, შეიცვალა %d ჩანაწერი.',
78
+ 'Call' => 'გამოძახეება',
79
+ 'No extension' => 'გაფართოება არაა',
80
+ 'None of the supported PHP extensions (%s) are available.' => 'არც ერთი მხარდაჭერილი გაფართოება არ მოიძებნა (%s).',
81
+ 'Session support must be enabled.' => 'ჩართული უნდა იყოს სესია.',
82
+ 'Session expired, please login again.' => 'სესიის მოქმედების დრო ამოიწურა, გაიარეთ ხელახალი ავტორიზაცია.',
83
+ 'Text length' => 'ტექსტის სიგრძე',
84
+ 'Foreign key has been dropped.' => 'გარე გასაღები წაიშალა.',
85
+ 'Foreign key has been altered.' => 'გარე გასაღები შეიცვალა.',
86
+ 'Foreign key has been created.' => 'გარე გასაღები შეიქმნა.',
87
+ 'Foreign key' => 'გარე გასაღები',
88
+ 'Change' => 'შეცვლა',
89
+ 'Source' => 'წყარო',
90
+ 'Target' => 'სამიზნე',
91
+ 'Add column' => 'ველის დამატება',
92
+ 'Alter' => 'შეცვლა',
93
+ 'Add foreign key' => 'გარე გასაღები დამატება',
94
+ 'ON DELETE' => 'წაშლისას',
95
+ 'ON UPDATE' => 'განახლებისას',
96
+ 'Index Type' => 'ინდექსის სახეობა',
97
+ 'Column (length)' => 'ველი (სიგრძე)',
98
+ 'View has been dropped.' => 'წარმოდგენა წაიშალა.',
99
+ 'View has been altered.' => 'წარმოდგენა შეიცვალა.',
100
+ 'View has been created.' => 'წარმოდგენა შეიქმნა.',
101
+ 'Alter view' => 'წარმოდგენის შეცვლა',
102
+ 'Create view' => 'წარმოდგენის შექმნა',
103
+ 'Name' => 'სახელი',
104
+ 'Process list' => 'პროცესების სია',
105
+ '%d process(es) have been killed.' => 'გაითიშა %d პროცესი.',
106
+ 'Kill' => 'დასრულება',
107
+ 'Parameter name' => 'პარამეტრი',
108
+ 'Database schema' => 'ბაზის სქემა',
109
+ 'Create procedure' => 'პროცედურის შექმნა',
110
+ 'Create function' => 'ფუნქციის შექმნა',
111
+ 'Routine has been dropped.' => 'პროცედურა წაიშალა.',
112
+ 'Routine has been altered.' => 'პროცედურა შეიცვალა.',
113
+ 'Routine has been created.' => 'პროცედურა შეიქმნა.',
114
+ 'Alter function' => 'ფუნქციის შეცვლა',
115
+ 'Alter procedure' => 'პროცედურის შეცვლა',
116
+ 'Return type' => 'დაბრუნების სახეობა',
117
+ 'Add trigger' => 'ტრიგერის დამატება',
118
+ 'Trigger has been dropped.' => 'ტრიგერი წაიშალა.',
119
+ 'Trigger has been altered.' => 'ტრიგერი შეიცვალა.',
120
+ 'Trigger has been created.' => 'ტრიგერი შეიქმნა.',
121
+ 'Alter trigger' => 'ტრიგერის შეცვლა',
122
+ 'Create trigger' => 'ტრიგერის შექმნა',
123
+ 'Time' => 'დრო',
124
+ 'Event' => 'ღონისძიება',
125
+ '%s version: %s through PHP extension %s' => 'ვერსია %s: %s PHP-გაფართოება %s',
126
+ '%d row(s)' => '%d რიგი',
127
+ 'Remove' => 'წაშლა',
128
+ 'Are you sure?' => 'ნამდვილად?',
129
+ 'Privileges' => 'უფლებამოსილება',
130
+ 'Create user' => 'მომხმარებლის შექმან',
131
+ 'User has been dropped.' => 'მომხმარებელი წაიშალა.',
132
+ 'User has been altered.' => 'მომხმარებელი შეიცვალა.',
133
+ 'User has been created.' => 'მომხმარებელი შეიქმნა.',
134
+ 'Hashed' => 'ჰეშირებული',
135
+ 'Column' => 'ველი',
136
+ 'Routine' => 'პროცედურა',
137
+ 'Grant' => 'დაშვება',
138
+ 'Revoke' => 'შეზღუდვა',
139
+ 'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST ინფორმაცია ძალიან დიდია. შეამცირეთ ზომა ან გაზარდეს POST ინფორმაციის ზომა პარამეტრებიდან %s.',
140
+ 'Logged as: %s' => 'შესული ხართ როგორც: %s',
141
+ 'Move up' => 'ზემოთ ატანა',
142
+ 'Move down' => 'ქვემოთ ჩატანა',
143
+ 'Functions' => 'ფუნქციები',
144
+ 'Aggregation' => 'აგრეგაცია',
145
+ 'Export' => 'ექსპორტი',
146
+ 'Output' => 'გამომავალი ინფორმაცია',
147
+ 'open' => 'გახსნა',
148
+ 'save' => 'შენახვა',
149
+ 'Format' => 'ფორმატი',
150
+ 'Tables' => 'ცხრილები',
151
+ 'Data' => 'ინფორმაცია',
152
+ 'Event has been dropped.' => 'ღონისძიება წაიშალა.',
153
+ 'Event has been altered.' => 'ღონისძიება შეიცვალა.',
154
+ 'Event has been created.' => 'ღონისძიება შეიქმნა.',
155
+ 'Alter event' => 'ღონისძიების შეცვლა',
156
+ 'Create event' => 'ღონისძიების შექმნა',
157
+ 'At given time' => 'მოცემულ დროში',
158
+ 'Every' => 'ყოველ',
159
+ 'Events' => 'ღონისძიება',
160
+ 'Schedule' => 'განრიგი',
161
+ 'Start' => 'დასაწყისი',
162
+ 'End' => 'დასასრული',
163
+ 'Status' => 'მდგომარეობა',
164
+ 'On completion preserve' => 'შენახვა დასრულებისას',
165
+ 'Tables and views' => 'ცხრილები და წარმოდგენები',
166
+ 'Data Length' => 'ინფორმაციის მოცულობა',
167
+ 'Index Length' => 'ინდექსების მოცულობა',
168
+ 'Data Free' => 'თავისუფალი სივრცე',
169
+ 'Collation' => 'კოდირება',
170
+ 'Analyze' => 'ანალიზი',
171
+ 'Optimize' => 'ოპტიმიზაცია',
172
+ 'Check' => 'შემოწმება',
173
+ 'Repair' => 'გასწორება',
174
+ 'Truncate' => 'გასუფთავება',
175
+ 'Tables have been truncated.' => 'ცხრილი გასუფთავდა.',
176
+ 'Rows' => 'რიგი',
177
+ ',' => ' ',
178
+ '0123456789' => '0123456789',
179
+ 'Tables have been moved.' => 'ცხრილი გადაადგილდა.',
180
+ 'Move to other database' => 'გადატანა სხვა ბაზაში',
181
+ 'Move' => 'გადატანა',
182
+ 'Engine' => 'ძრავი',
183
+ 'Save and continue edit' => 'შენახვა და ცვლილების გაგრძელება',
184
+ 'original' => 'საწყისი',
185
+ '%d item(s) have been affected.' => 'შეიცვალა %d ჩანაწერი.',
186
+ 'Whole result' => 'სრული შედეგი',
187
+ 'Tables have been dropped.' => 'ცხრილები წაიშალა.',
188
+ 'Clone' => 'კლონირება',
189
+ 'Partition by' => 'დაყოფა',
190
+ 'Partitions' => 'დანაყოფები',
191
+ 'Partition name' => 'დანაყოფის სახელი',
192
+ 'Values' => 'პარამეტრები',
193
+ '%d row(s) have been imported.' => 'დაიმპორტდა %d რიგი.',
194
+ 'Import' => 'იმპორტი',
195
+ 'Stop on error' => 'გაჩერება შეცდომისას',
196
+ 'Maximum number of allowed fields exceeded. Please increase %s.' => 'მიღწეულია დაშვებული ველების მაქსიმალური რაოდენობა, გაზარდეთ %s.',
197
+ 'anywhere' => 'ნებისმიერ ადგილას',
198
+ '%.3f s' => '%.3f s',
199
+ '$1-$3-$5' => '$5.$3.$1',
200
+ '[yyyy]-mm-dd' => 'დდ.თთ.[წწწწ]',
201
+ 'History' => 'ისტორია',
202
+ 'Variables' => 'ცვლადები',
203
+ 'Relations' => 'ურთიერთობა',
204
+ 'Run file' => 'ფაილის გაშვება',
205
+ 'Clear' => 'გასუფთავება',
206
+ 'Maximum allowed file size is %sB.' => 'ფაილის მაქსიმალური ზომა - %sB.',
207
+ 'Numbers' => 'ციფრები',
208
+ 'Date and time' => 'დრო და თარიღი',
209
+ 'Binary' => 'ორობითი',
210
+ 'Lists' => 'სია',
211
+ 'Editor' => 'რედაქტორი',
212
+ 'E-mail' => 'ელ. ფოსტა',
213
+ 'From' => 'ავტორი:',
214
+ 'Subject' => 'თემა',
215
+ 'Send' => 'გაგზავნა',
216
+ '%d e-mail(s) have been sent.' => 'გაიგზავნა %d წერილი.',
217
+ 'Webserver file %s' => 'ფაილი %s ვებსერვერზე',
218
+ 'File does not exist.' => 'ასეთი ფაილი არ არსებობს.',
219
+ '%d in total' => 'სულ %d',
220
+ 'Permanent login' => 'სისტემაში დარჩენა',
221
+ 'Databases have been dropped.' => 'ბაზა წაიშალა.',
222
+ 'Search data in tables' => 'ცხრილებში ძებნა',
223
+ 'Schema' => 'სქემა',
224
+ 'Alter schema' => 'სქემის შეცვლა',
225
+ 'Create schema' => 'ახალი სქემა',
226
+ 'Schema has been dropped.' => 'სქემა წაიშალა.',
227
+ 'Schema has been created.' => 'შეიქმნა ახალი სქემა.',
228
+ 'Schema has been altered.' => 'სქემა შეიცვალა.',
229
+ 'Sequences' => 'მიმდევრობა',
230
+ 'Create sequence' => 'მიმდევრობის შექმნა',
231
+ 'Alter sequence' => 'მიმდევრობის შეცვლა',
232
+ 'Sequence has been dropped.' => 'მიმდევრობა წაიშალა.',
233
+ 'Sequence has been created.' => 'მიმდევრობა შეიქმნა.',
234
+ 'Sequence has been altered.' => 'მიმდევრობა შეიცვალა.',
235
+ 'User types' => 'მომხმარებლის სახეობა',
236
+ 'Create type' => 'სახეობის შექმნა',
237
+ 'Alter type' => 'სახეობის შეცვლა',
238
+ 'Type has been dropped.' => 'სახეობა წაიშალა.',
239
+ 'Type has been created.' => 'სახეობა შეიქმნა.',
240
+ 'Ctrl+click on a value to modify it.' => 'შესაცვლელად გამოიყენეთ Ctrl+თაგვის ღილაკი.',
241
+ 'Use edit link to modify this value.' => 'ამ მნიშვნელობის შესაცვლელად გამოიყენეთ ბმული «შეცვლა».',
242
+ 'last' => 'ბოლო',
243
+ 'From server' => 'სერვერიდან',
244
+ 'System' => 'სისტემა',
245
+ 'Select data' => 'არჩევა',
246
+ 'Show structure' => 'სტრუქტურის ჩვენება',
247
+ 'empty' => 'ცარიელი',
248
+ 'Network' => 'ქსელი',
249
+ 'Geometry' => 'გეომეტრია',
250
+ 'File exists.' => 'ფაილი უკვე არსებობს.',
251
+ 'Attachments' => 'მიმაგრებული ფაილები',
252
+ '%d query(s) executed OK.' => '%d მოთხოვნა შესრულდა.',
253
+ 'Show only errors' => 'მხოლოდ შეცდომები',
254
+ 'Refresh' => 'განახლება',
255
+ 'Invalid schema.' => 'არასწორი სქემა.',
256
+ 'Please use one of the extensions %s.' => 'გამოიყენეთ ერთ-ერთი გაფართოება %s.',
257
+ 'now' => 'ახლა',
258
+ 'ltr' => 'ltr',
259
+ 'Tables have been copied.' => 'ცხრილი დაკოპირდა.',
260
+ 'Copy' => 'კოპირება',
261
+ 'Permanent link' => 'მუდმივი ბმული',
262
+ 'Edit all' => 'ყველას შეცვლა',
263
+ 'HH:MM:SS' => 'სთ:წთ:წმ',
264
+ 'Tables have been optimized.' => 'ცხრილებს გაუკეთდა ოპტიმიზაცია.',
265
+ 'Materialized view' => 'მატერიალური ხედი',
266
+ 'Vacuum' => 'ვაკუუმი',
267
+ 'Selected' => 'არჩეული',
268
+ 'File must be in UTF-8 encoding.' => 'ფაილი უნდა იყოს კოდირებაში UTF-8.',
269
+ 'Modify' => 'შეცვლა',
270
+ 'Loading' => 'ჩატვირთვა',
271
+ 'Load more data' => 'მეტი ინფორმაციის ჩატვირთვა',
272
+ 'ATTACH queries are not supported.' => 'ATTACH-მოთხოვნები არაა მხარდაჭერილი.',
273
+ '%d / ' => '%d / ',
274
+ 'Limit rows' => 'რიგების შეზღუდვა',
275
+ 'Default value' => 'სტანდარტული მნიშვნელობა',
276
+ 'Full table scan' => 'სრული ცხრილის ანალიზი',
277
+ 'Too many unsuccessful logins, try again in %d minute(s).' => 'ძალიან ბევრჯერ შეგეშალათ მომხმარებელი და პაროლი. სცადეთ %d წუთში.',
278
+ 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'ძირითად პაროლს ვადა გაუვიდა. <a href="https://www.adminer.org/en/extension/"%s>გამოიყენეთ</a> მეთოდი %s, რათა ის მუდმივი გახადოთ.',
279
+ 'If you did not send this request from Adminer then close this page.' => 'ეს მოთხოვნა თქვენ თუ არ გაგიგზავნაით Adminer-იდან, დახურეთ ეს ფანჯარა..',
280
+ 'You can upload a big SQL file via FTP and import it from server.' => 'დიდი ფაილი უნდა ატვირტოთ FTP-თი და შემდეგ გაუკეთოთ იმპორტი სერვერიდან.',
281
+ 'Size' => 'ზომა',
282
+ 'Compute' => 'გამოთვლა',
283
+ 'You are offline.' => 'არ გაგივლიათ ავტორიზაცია.',
284
+ 'You have no privileges to update this table.' => 'ამ ცხრილის განახლების უფლება არ გაქვთ.',
285
+ 'Saving' => 'შენახვა',
286
+ 'yes' => 'კი',
287
+ 'no' => 'არა',
288
+ 'Routines' => 'რუტინები',
289
+ 'Target table' => 'მიზნობრივი ცხრილი',
290
+ 'Strings' => 'ველები',
291
+ 'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'საწყისი და მიზნობრივი ველები უნდა იყოს ერთიდაიგივე სახეობის, მიზნობრივ ველზე უნდა იყოს ინდექსი და უნდა არსებობდეს შესაბამისი ინფორმაცია.',
292
+ 'Drop %s?' => 'წაიშალოს %s?',
293
+ 'Warnings' => 'გაფრთხილება',
294
+ 'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'უპაროლო წვდომა ბაზასთან არაა დაშვებული Adminer-ში, მეტი ინფორმაციისთვის ეწვიეთ <a href="https://www.adminer.org/en/password/"%s>ბმულს</a>.',
295
+ 'DB' => 'ბაზა',
296
+ 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'მადლობას გიხდით Adminer-ით სარგებლობისთვის, გადახედეთ ბმულს <a href="https://www.adminer.org/en/donation/">შემოწირულობა</a>.',
297
+ 'The action will be performed after successful login with the same credentials.' => 'მოქმედება შესრულდება იგივე მომხმარებლით წარმატებული ავტორიზაციის შემდეგ.',
298
+ 'Connecting to privileged ports is not allowed.' => 'პრივილეგირებულ პორტთან წვდომა დაუშვებელია.',
299
+ 'There is a space in the input password which might be the cause.' => 'პაროლში არის გამოტოვება, შეიძლება ეს ქმნის პრობლემას.',
300
+ 'Unknown error.' => 'უცნობი შეცდომა.',
301
+ 'Database does not support password.' => 'ბაზაში არაა მხარდაჭერილი პაროლი.',
302
+ 'Disable %s or enable %s or %s extensions.' => 'გათიშეთ %s ან ჩართეთ %s ან %s გაფართოება.',
303
+ );
adminer/adminer/adminer/lang/ms.inc.php CHANGED
@@ -10,7 +10,7 @@ $translations = array(
10
  'Logout' => 'Log keluar',
11
  'Logged as: %s' => 'Log masuk sebagai: %s',
12
  'Logout successful.' => 'Log keluar berjaya.',
13
- 'Thanks for using Adminer, consider <a href="%s">donating</a>.' => 'Terima kasih kerana menggunakan Adminer, pertimbangkan untuk <a href="%s">menderma</a>.',
14
  'Invalid credentials.' => 'Akses tidak sah.',
15
  'Too many unsuccessful logins, try again in %d minute(s).' => 'Terlalu banyak percubaan log masuk yang gagal, sila cuba lagi dalam masa %d minit.',
16
  'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Kata laluan utama telah luput. <a href="https://www.adminer.org/en/extension/"%s>Gunakan</a> cara %s untuk mengekalkannya.',
10
  'Logout' => 'Log keluar',
11
  'Logged as: %s' => 'Log masuk sebagai: %s',
12
  'Logout successful.' => 'Log keluar berjaya.',
13
+ 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Terima kasih kerana menggunakan Adminer, pertimbangkan untuk <a href="https://www.adminer.org/en/donation/">menderma</a>.',
14
  'Invalid credentials.' => 'Akses tidak sah.',
15
  'Too many unsuccessful logins, try again in %d minute(s).' => 'Terlalu banyak percubaan log masuk yang gagal, sila cuba lagi dalam masa %d minit.',
16
  'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Kata laluan utama telah luput. <a href="https://www.adminer.org/en/extension/"%s>Gunakan</a> cara %s untuk mengekalkannya.',
adminer/adminer/adminer/lang/pl.inc.php CHANGED
@@ -10,7 +10,7 @@ $translations = array(
10
  'Logout' => 'Wyloguj',
11
  'Logged as: %s' => 'Zalogowany jako: %s',
12
  'Logout successful.' => 'Wylogowano pomyślnie.',
13
- 'Thanks for using Adminer, consider <a href="%s">donating</a>.' => 'Dziękujemy za używanie Adminera, rozważ proszę <a href="%s">dotację</a>.',
14
  'Invalid credentials.' => 'Nieprawidłowe dane logowania.',
15
  'Too many unsuccessful logins, try again in %d minute(s).' => array('Za dużo nieudanych prób logowania, spróbuj ponownie za %d minutę.', 'Za dużo nieudanych prób logowania, spróbuj ponownie za %d minuty.', 'Za dużo nieudanych prób logowania, spróbuj ponownie za %d minut.'),
16
  'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Ważność hasła głównego wygasła. <a href="https://www.adminer.org/pl/extension/"%s>Zaimplementuj</a> własną metodę %s, aby ustawić je na stałe.',
10
  'Logout' => 'Wyloguj',
11
  'Logged as: %s' => 'Zalogowany jako: %s',
12
  'Logout successful.' => 'Wylogowano pomyślnie.',
13
+ 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Dziękujemy za używanie Adminera, rozważ proszę <a href="https://www.adminer.org/pl/donation/">dotację</a>.',
14
  'Invalid credentials.' => 'Nieprawidłowe dane logowania.',
15
  'Too many unsuccessful logins, try again in %d minute(s).' => array('Za dużo nieudanych prób logowania, spróbuj ponownie za %d minutę.', 'Za dużo nieudanych prób logowania, spróbuj ponownie za %d minuty.', 'Za dużo nieudanych prób logowania, spróbuj ponownie za %d minut.'),
16
  'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Ważność hasła głównego wygasła. <a href="https://www.adminer.org/pl/extension/"%s>Zaimplementuj</a> własną metodę %s, aby ustawić je na stałe.',
adminer/adminer/adminer/lang/tr.inc.php CHANGED
@@ -10,7 +10,7 @@ $translations = array(
10
  'Logout' => 'Çıkış',
11
  'Logged as: %s' => '%s olarak giriş yapıldı.',
12
  'Logout successful.' => 'Oturum başarıyla sonlandı.',
13
- 'Thanks for using Adminer, consider <a href="%s">donating</a>.' => 'Adminer kullandığınız için teşekkür ederiz <a href="%s">bağış yapmayı düşünün</a>.',
14
  'Invalid credentials.' => 'Geçersiz kimlik bilgileri.',
15
  'Too many unsuccessful logins, try again in %d minute(s).' => array('Çok fazla oturum açma denemesi yapıldı.', '%d Dakika sonra tekrar deneyiniz.'),
16
  'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Ana şifrenin süresi doldu. Kalıcı olması için <a href="https://www.adminer.org/en/extension/"%s>%s medodunu</a> kullanın.',
10
  'Logout' => 'Çıkış',
11
  'Logged as: %s' => '%s olarak giriş yapıldı.',
12
  'Logout successful.' => 'Oturum başarıyla sonlandı.',
13
+ 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Adminer kullandığınız için teşekkür ederiz <a href="https://www.adminer.org/en/donation/">bağış yapmayı düşünün</a>.',
14
  'Invalid credentials.' => 'Geçersiz kimlik bilgileri.',
15
  'Too many unsuccessful logins, try again in %d minute(s).' => array('Çok fazla oturum açma denemesi yapıldı.', '%d Dakika sonra tekrar deneyiniz.'),
16
  'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Ana şifrenin süresi doldu. Kalıcı olması için <a href="https://www.adminer.org/en/extension/"%s>%s medodunu</a> kullanın.',
adminer/adminer/adminer/lang/vi.inc.php CHANGED
@@ -206,8 +206,8 @@ $translations = array(
206
  'ON UPDATE' => 'Khi cập nhật',
207
  'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Cột gốc và cột đích phải cùng kiểu, phải đặt chỉ mục trong cột đích và dữ liệu tham chiếu phải tồn tại.',
208
 
209
- 'Triggers' => 'xx',
210
- 'Add trigger' => 'xx',
211
  'Trigger has been dropped.' => 'Đã xoá phản xạ.',
212
  'Trigger has been altered.' => 'Đã sửa phản xạ.',
213
  'Trigger has been created.' => 'Đã tạo phản xạ.',
@@ -308,12 +308,12 @@ $translations = array(
308
  'Schema has been dropped.' => 'Đã xoá schema.',
309
  'Schema has been created.' => 'Đã tạo schema.',
310
  'Schema has been altered.' => 'Đã thay đổi schema.',
311
- 'Schema' => 'schema',
312
- 'Invalid schema.' => 'Schema khong hợp lệ.',
313
 
314
  // PostgreSQL sequences support
315
  'Sequences' => 'Dãy số',
316
- 'Create sequence' => 'Tạo đãy số',
317
  'Sequence has been dropped.' => 'Dãy số đã bị xoá.',
318
  'Sequence has been created.' => 'Đã tạo dãy số.',
319
  'Sequence has been altered.' => 'Đã sửa dãy số.',
206
  'ON UPDATE' => 'Khi cập nhật',
207
  'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Cột gốc và cột đích phải cùng kiểu, phải đặt chỉ mục trong cột đích và dữ liệu tham chiếu phải tồn tại.',
208
 
209
+ 'Triggers' => 'Phản xạ',
210
+ 'Add trigger' => 'Thêm phản xạ',
211
  'Trigger has been dropped.' => 'Đã xoá phản xạ.',
212
  'Trigger has been altered.' => 'Đã sửa phản xạ.',
213
  'Trigger has been created.' => 'Đã tạo phản xạ.',
308
  'Schema has been dropped.' => 'Đã xoá schema.',
309
  'Schema has been created.' => 'Đã tạo schema.',
310
  'Schema has been altered.' => 'Đã thay đổi schema.',
311
+ 'Schema' => 'Schema',
312
+ 'Invalid schema.' => 'Schema không hợp lệ.',
313
 
314
  // PostgreSQL sequences support
315
  'Sequences' => 'Dãy số',
316
+ 'Create sequence' => 'Tạo dãy số',
317
  'Sequence has been dropped.' => 'Dãy số đã bị xoá.',
318
  'Sequence has been created.' => 'Đã tạo dãy số.',
319
  'Sequence has been altered.' => 'Đã sửa dãy số.',
adminer/adminer/adminer/lang/xx.inc.php CHANGED
@@ -10,8 +10,9 @@ $translations = array(
10
  'Logout' => 'Xx',
11
  'Logged as: %s' => 'Xx: %s',
12
  'Logout successful.' => 'Xx.',
13
- 'Thanks for using Adminer, consider <a href="%s">donating</a>.' => 'Xx <a href="%s">xx</a>.',
14
  'Invalid credentials.' => 'Xx.',
 
15
  'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Xx, <a href="https://www.adminer.org/en/password/"%s>xx</a>.',
16
  'Database does not support password.' => 'Xx.',
17
  'Too many unsuccessful logins, try again in %d minute(s).' => array('Xx %d.', 'Xx %d.'),
10
  'Logout' => 'Xx',
11
  'Logged as: %s' => 'Xx: %s',
12
  'Logout successful.' => 'Xx.',
13
+ 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Xx <a href="https://www.adminer.org/en/donation/">xx</a>.',
14
  'Invalid credentials.' => 'Xx.',
15
+ 'There is a space in the input password which might be the cause.' => 'Xx.',
16
  'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Xx, <a href="https://www.adminer.org/en/password/"%s>xx</a>.',
17
  'Database does not support password.' => 'Xx.',
18
  'Too many unsuccessful logins, try again in %d minute(s).' => array('Xx %d.', 'Xx %d.'),
adminer/adminer/adminer/lang/zh-tw.inc.php CHANGED
@@ -1,267 +1,348 @@
1
  <?php
2
  $translations = array(
3
- 'Login' => '登入',
4
- 'Logout successful.' => '成功登出。',
5
- 'Invalid credentials.' => '無效的憑證。',
6
  'Server' => '伺服器',
7
  'Username' => '帳號',
8
  'Password' => '密碼',
9
- 'Select database' => '選擇資料庫',
10
- 'Invalid database.' => '無效的資料庫。',
11
- 'Table has been altered.' => '資料表已修改。',
12
- 'Table has been created.' => '資料表已修改。',
13
- 'Alter table' => '修改資料表',
14
- 'Create table' => '建立資料表',
15
- 'Table name' => '資料表名稱',
16
- 'engine' => '引擎',
17
- 'collation' => '校對',
18
- 'Column name' => '列名',
19
- 'Type' => '類型',
20
- 'Length' => '長度',
21
- 'Auto Increment' => '自動遞增',
22
- 'Options' => '選項',
23
- 'Save' => '儲存',
24
- 'Drop' => '刪除',
25
- 'Database has been dropped.' => '資料庫已刪除。',
26
- 'Database has been created.' => '已建立資料庫。',
27
- 'Database has been renamed.' => '已重新命名資料庫。',
28
- 'Database has been altered.' => '已修改資料庫。',
29
- 'Alter database' => '修改資料庫',
30
- 'Create database' => '建立資料庫',
31
- 'SQL command' => 'SQL命令',
32
  'Logout' => '登出',
33
- 'database' => '資料庫',
34
- 'Use' => '使用',
35
- 'No tables.' => '沒有資料表。',
36
- 'select' => '選擇',
37
- 'Item has been updated.' => '已更新項目。',
38
- 'Item%s has been inserted.' => '已新增項目%s',
39
- 'Edit' => '編輯',
40
- 'Insert' => '新增',
41
- 'Save and insert next' => '儲存並新增下一筆',
42
- 'Delete' => '刪除',
43
- 'Database' => '資料庫',
44
- 'Routines' => '程序',
45
- 'Indexes have been altered.' => '已修改索引。',
46
- 'Indexes' => '索引',
47
- 'Alter indexes' => '修改索引',
48
- 'Add next' => '新增下一筆',
49
  'Language' => '語言',
50
- 'Select' => '選擇',
51
- 'New item' => '新增項目',
52
- 'Search' => '搜尋',
53
- 'Sort' => '排序',
54
- 'descending' => '降冪(遞減)',
55
- 'Limit' => '限定',
56
- 'No rows.' => '沒有行。',
57
- 'Action' => '動作',
58
- 'edit' => '編輯',
59
- 'Page' => '頁',
60
- 'Query executed OK, %d row(s) affected.' => '執行查詢OK,%d行受影響',
61
- 'Error in query' => '查詢發生錯誤',
62
- 'Execute' => '執行',
63
- 'Table' => '資料表',
64
- 'Foreign keys' => '外來鍵',
65
- 'Triggers' => '觸發器',
66
- 'View' => '檢視表',
67
- 'Unable to select the table' => '無法選擇該資料表',
68
  'Invalid CSRF token. Send the form again.' => '無效的 CSRF token。請重新發送表單。',
69
- 'Comment' => '註解',
70
- 'Default values' => '預設值',
71
- '%d byte(s)' => '%d byte(s)',
72
- 'No commands to execute.' => '沒有命令可執行。',
73
- 'Unable to upload a file.' => '無法上傳檔案。',
74
- 'File upload' => '檔案上傳',
75
- 'File uploads are disabled.' => '檔案上傳已經被停用。',
76
- 'Routine has been called, %d row(s) affected.' => '程序已被執行,%d行被影響',
77
- 'Call' => '呼叫',
78
  'No extension' => '無擴充模組',
79
- 'None of the supported PHP extensions (%s) are available.' => '沒有任何支援的PHP擴充模組(%s)。',
 
 
80
  'Session support must be enabled.' => 'Session 必須被啟用。',
81
  'Session expired, please login again.' => 'Session 已過期,請重新登入。',
82
- 'Text length' => 'Text 長度',
83
- 'Foreign key has been dropped.' => '已刪除外來鍵。',
84
- 'Foreign key has been altered.' => '已修改外來鍵。',
85
- 'Foreign key has been created.' => '已建立外來鍵。',
86
- 'Foreign key' => '外來鍵',
87
- 'Target table' => '目標資料表',
88
- 'Change' => '修改',
89
- 'Source' => '來源',
90
- 'Target' => '目標',
91
- 'Add column' => '新增資料列',
92
- 'Alter' => '修改',
93
- 'Add foreign key' => '新增外來鍵',
94
- 'ON DELETE' => 'ON DELETE',
95
- 'ON UPDATE' => 'ON UPDATE',
96
- 'Index Type' => '索引類型',
97
- 'Column (length)' => '列(長度)',
98
- 'View has been dropped.' => '已刪除檢視表。',
99
- 'View has been altered.' => '已修改檢視表。',
100
- 'View has been created.' => '已建立檢視表。',
101
- 'Alter view' => '修改檢視表',
102
- 'Create view' => '建立檢視表',
103
- 'Name' => '名稱',
104
- 'Process list' => '處理程序列表',
105
- '%d process(es) have been killed.' => '%d 個 Process(es) 被終止',
106
- 'Kill' => '終止',
107
- 'Parameter name' => '參數名稱',
108
- 'Database schema' => '資料庫架構',
109
- 'Create procedure' => '建立預存程序',
110
- 'Create function' => '建立函數',
111
- 'Routine has been dropped.' => '已刪除程序。',
112
- 'Routine has been altered.' => '已修改子程序。',
113
- 'Routine has been created.' => '已建立子程序。',
114
- 'Alter function' => '修改函數',
115
- 'Alter procedure' => '修改過程',
116
- 'Return type' => '回傳類型',
117
- 'Add trigger' => '建立觸發器',
118
- 'Trigger has been dropped.' => '已刪除觸發器。',
119
- 'Trigger has been altered.' => '已修改觸發器。',
120
- 'Trigger has been created.' => '已建立觸發器。',
121
- 'Alter trigger' => '修改觸發器',
122
- 'Create trigger' => '建立觸發器',
123
- 'Time' => '時間',
124
- 'Event' => '事件',
125
- '%s version: %s through PHP extension %s' => '%s版本:%s 透過PHP擴充模組 %s',
126
- '%d row(s)' => '%d行',
127
- 'Remove' => '移除',
128
- 'Are you sure?' => '你確定嗎?',
129
  'Privileges' => '權限',
130
  'Create user' => '建立使用者',
131
  'User has been dropped.' => '已刪除使用者。',
132
  'User has been altered.' => '已修改使用者。',
133
  'User has been created.' => '已建立使用者。',
134
  'Hashed' => 'Hashed',
135
- 'Column' => '',
136
  'Routine' => '程序',
137
  'Grant' => '授權',
138
  'Revoke' => '廢除',
139
- 'Logged as: %s' => '登錄為:%s',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
  'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST 資料太大。減少資料或者增加 %s 的設定值。',
141
- 'Move up' => '上移',
142
- 'Move down' => '下移',
 
143
  'Export' => '匯出',
144
- 'Tables' => '資料表',
145
- 'Data' => '資料',
146
  'Output' => '輸出',
147
  'open' => '打開',
148
  'save' => '儲存',
 
149
  'Format' => '格式',
150
- 'Functions' => '函數',
151
- 'Aggregation' => '集合',
152
- 'Event has been dropped.' => '已刪除事件。',
153
- 'Event has been altered.' => '已修改事件。',
154
- 'Event has been created.' => '已建立事件。',
155
- 'Alter event' => '修改事件',
156
- 'Create event' => '建立事件',
157
- 'Start' => '開始',
158
- 'End' => '結束',
159
- 'Every' => '',
160
- 'Status' => '狀態',
161
- 'On completion preserve' => '在完成後儲存',
162
- 'Events' => '事件',
163
- 'Schedule' => '排程',
164
- 'At given time' => '在指定時間',
165
- 'Tables have been truncated.' => '已清空資料表。',
166
- 'Tables have been moved.' => '已轉移資料表。',
167
- 'Tables and views' => '資料表和檢視表',
 
 
 
 
 
168
  'Engine' => '引擎',
169
  'Collation' => '校對',
170
  'Data Length' => '資料長度',
171
  'Index Length' => '索引長度',
172
  'Data Free' => '資料空閒',
173
  'Rows' => '行數',
174
- ',' => ',',
175
- '0123456789' => '0123456789',
176
  'Analyze' => '分析',
177
  'Optimize' => '最佳化',
 
178
  'Check' => '檢查',
179
  'Repair' => '修復',
180
  'Truncate' => '清空',
 
181
  'Move to other database' => '轉移到其它資料庫',
182
  'Move' => '轉移',
183
- 'Save and continue edit' => '儲存並繼續編輯',
184
- 'original' => '原始',
185
- '%d item(s) have been affected.' => '%d個項目受到影響。',
186
- 'Whole result' => '所有結果',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
187
  'Tables have been dropped.' => '已經將資料表刪除。',
188
- 'Clone' => '複製',
189
- 'Maximum number of allowed fields exceeded. Please increase %s.' => '超過允許的字段數量的最大值。請增加%s。',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
190
  'Partition by' => '分區類型',
191
  'Partitions' => '分區',
192
  'Partition name' => '分區名稱',
193
  'Values' => '值',
194
- '%d row(s) have been imported.' => '已匯入%d行。',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
195
  'anywhere' => '任意位置',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
196
  'Import' => '匯入',
197
- 'Stop on error' => '出錯時停止',
198
- '%.3f s' => '%.3f秒',
199
- '$1-$3-$5' => '$1.$3.$5',
200
- '[yyyy]-mm-dd' => '[yyyy].mm.dd',
201
- 'History' => '紀錄',
202
- 'Variables' => '變數',
203
- 'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => '來源列和目標列必須具有相同的資料類型,在目標列上必須有一個索引並且引用的資料必須存在。',
204
- 'Relations' => '關聯',
205
- 'Run file' => '執行檔案',
206
- 'Clear' => '清除',
207
- 'Maximum allowed file size is %sB.' => '允許的檔案上限大小為%sB',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
208
  'Numbers' => '數字',
209
  'Date and time' => '日期時間',
210
  'Strings' => '字串',
211
  'Binary' => '二進位',
212
  'Lists' => '列表',
 
 
 
 
213
  'Editor' => '編輯器',
214
- 'E-mail' => '電子郵件',
215
- 'From' => '來自',
216
- 'Subject' => '主旨',
217
- 'Send' => '寄出',
218
- '%d e-mail(s) have been sent.' => '已寄出 %d 封郵件。',
219
- 'Webserver file %s' => '網頁伺服器檔案 %s',
220
- 'File does not exist.' => '檔案不存在',
221
- 'Item has been deleted.' => '該項目已被刪除',
222
- '%d in total' => '總共 %d 個',
223
- 'Permanent login' => '永久登入',
224
- 'Table has been dropped.' => '已經刪除資料表。',
225
- 'Databases have been dropped.' => '資料庫已刪除。',
226
- 'Search data in tables' => '在資料庫搜尋',
227
- 'Schema' => '資料表結構',
 
228
  'Alter schema' => '修改資料表結構',
229
  'Create schema' => '建立資料表結構',
230
  'Schema has been dropped.' => '已刪除資料表結構。',
231
  'Schema has been created.' => '已建立資料表結構。',
232
  'Schema has been altered.' => '已修改資料表結構。',
 
 
 
 
233
  'Sequences' => '序列',
234
  'Create sequence' => '建立序列',
235
- 'Alter sequence' => '修改序列',
236
  'Sequence has been dropped.' => '已刪除序列。',
237
  'Sequence has been created.' => '已建立序列。',
238
  'Sequence has been altered.' => '已修改序列。',
 
 
 
239
  'User types' => '使用者類型',
240
  'Create type' => '建立類型',
241
- 'Alter type' => '修改類型',
242
  'Type has been dropped.' => '已刪除類型。',
243
  'Type has been created.' => '已建立類型。',
244
- 'Use edit link to modify this value.' => '使用編輯連結來修改。',
245
- 'last' => '最後一頁',
246
- 'From server' => '從伺服器',
247
- 'System' => '資料庫系統',
248
- 'Select data' => '選擇資料',
249
- 'Show structure' => '顯示結構',
250
- 'empty' => '空值',
251
- 'Network' => '網路',
252
- 'Geometry' => '幾何',
253
- 'File exists.' => '檔案已存在。',
254
- 'Attachments' => '附件',
255
- '%d query(s) executed OK.' => '已順利執行 %d 個查詢。',
256
- 'Show only errors' => '僅顯示錯誤訊息',
257
- 'Refresh' => '重新載入',
258
- 'Invalid schema.' => '無效的資料表結構。',
259
- 'Please use one of the extensions %s.' => '請使用下列其中一個擴充模組 %s。',
260
- 'now' => '現在',
261
- 'ltr' => 'ltr',
262
- 'Tables have been copied.' => '資料表已經複製',
263
- 'Copy' => '複製',
264
- 'Permanent link' => '永久連結',
265
- 'Edit all' => '編輯全部',
266
- 'HH:MM:SS' => 'HH:MM:SS',
267
  );
1
  <?php
2
  $translations = array(
3
+ // label for database system selection (MySQL, SQLite, ...)
4
+ 'System' => '資料庫系統',
 
5
  'Server' => '伺服器',
6
  'Username' => '帳號',
7
  'Password' => '密碼',
8
+ 'Permanent login' => '永久登入',
9
+ 'Login' => '登入',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  'Logout' => '登出',
11
+ 'Logged as: %s' => '登錄為: %s',
12
+ 'Logout successful.' => '成功登出。',
13
+ 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => '感謝使用Adminer,請考慮為我們<a href="https://www.adminer.org/en/donation/">捐款(英文網頁)</a>.',
14
+ 'Invalid credentials.' => '無效的憑證。',
15
+ 'There is a space in the input password which might be the cause.' => '您輸入的密碼中有一個空格,這可能是導致問題的原因。',
16
+ 'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer預設不支援訪問沒有密碼的資料庫,<a href="https://www.adminer.org/en/password/"%s>詳情見這裡</a>.',
17
+ 'Database does not support password.' => '資料庫不支援密碼。',
18
+ 'Too many unsuccessful logins, try again in %d minute(s).' => '登錄失敗次數過多,請 %d 分鐘後重試。',
19
+ 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => '主密碼已過期。<a href="https://www.adminer.org/en/extension/"%s>請擴展</a> %s 方法讓它永久化。',
 
 
 
 
 
 
 
20
  'Language' => '語言',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  'Invalid CSRF token. Send the form again.' => '無效的 CSRF token。請重新發送表單。',
22
+ 'If you did not send this request from Adminer then close this page.' => '如果您並沒有從Adminer發送請求,請關閉此頁面。',
 
 
 
 
 
 
 
 
23
  'No extension' => '無擴充模組',
24
+ 'None of the supported PHP extensions (%s) are available.' => '沒有任何支援的 PHP 擴充模組(%s)。',
25
+ 'Connecting to privileged ports is not allowed.' => '不允許連接到特權埠。',
26
+ 'Disable %s or enable %s or %s extensions.' => '禁用 %s 或啟用 %s 或 %s 擴充模組。',
27
  'Session support must be enabled.' => 'Session 必須被啟用。',
28
  'Session expired, please login again.' => 'Session 已過期,請重新登入。',
29
+ 'The action will be performed after successful login with the same credentials.' => '此操作將在成功使用相同的憑據登錄後執行。',
30
+ '%s version: %s through PHP extension %s' => '%s 版本:%s 透過 PHP 擴充模組 %s',
31
+ 'Refresh' => '重新載入',
32
+
33
+ // text direction - 'ltr' or 'rtl'
34
+ 'ltr' => 'ltr',
35
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  'Privileges' => '權限',
37
  'Create user' => '建立使用者',
38
  'User has been dropped.' => '已刪除使用者。',
39
  'User has been altered.' => '已修改使用者。',
40
  'User has been created.' => '已建立使用者。',
41
  'Hashed' => 'Hashed',
42
+ 'Column' => '欄位',
43
  'Routine' => '程序',
44
  'Grant' => '授權',
45
  'Revoke' => '廢除',
46
+
47
+ 'Process list' => '處理程序列表',
48
+ '%d process(es) have been killed.' => '%d 個 Process(es) 被終止',
49
+ 'Kill' => '終止',
50
+
51
+ 'Variables' => '變數',
52
+ 'Status' => '狀態',
53
+
54
+ 'SQL command' => 'SQL 命令',
55
+ '%d query(s) executed OK.' => '已順利執行 %d 個查詢。',
56
+ 'Query executed OK, %d row(s) affected.' => '執行查詢 OK,%d 行受影響。',
57
+ 'No commands to execute.' => '沒有命令可執行。',
58
+ 'Error in query' => '查詢發生錯誤',
59
+ 'Unknown error.' => '未知錯誤。',
60
+ 'Warnings' => '警告',
61
+ 'ATTACH queries are not supported.' => '不支援ATTACH查詢。',
62
+ 'Execute' => '執行',
63
+ 'Stop on error' => '出錯時停止',
64
+ 'Show only errors' => '僅顯示錯誤訊息',
65
+ // sprintf() format for time of the command
66
+ '%.3f s' => '%.3f 秒',
67
+ 'History' => '紀錄',
68
+ 'Clear' => '清除',
69
+ 'Edit all' => '編輯全部',
70
+
71
+ 'File upload' => '檔案上傳',
72
+ 'From server' => '從伺服器',
73
+ 'Webserver file %s' => '網頁伺服器檔案 %s',
74
+ 'Run file' => '執行檔案',
75
+ 'File does not exist.' => '檔案不存在',
76
+ 'File uploads are disabled.' => '檔案上傳已經被停用。',
77
+ 'Unable to upload a file.' => '無法上傳檔案。',
78
+ 'Maximum allowed file size is %sB.' => '允許的檔案上限大小為 %sB',
79
  'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST 資料太大。減少資料或者增加 %s 的設定值。',
80
+ 'You can upload a big SQL file via FTP and import it from server.' => '您可以通過FTP上傳大型SQL檔並從伺服器導入。',
81
+ 'You are offline.' => '您離線了。',
82
+
83
  'Export' => '匯出',
 
 
84
  'Output' => '輸出',
85
  'open' => '打開',
86
  'save' => '儲存',
87
+ 'Saving' => '保存中',
88
  'Format' => '格式',
89
+ 'Data' => '資料',
90
+
91
+ 'Database' => '資料庫',
92
+ 'database' => '資料庫',
93
+ 'DB' => '資料庫',
94
+ 'Use' => '使用',
95
+ 'Select database' => '選擇資料庫',
96
+ 'Invalid database.' => '無效的資料庫。',
97
+ 'Database has been dropped.' => '資料庫已刪除。',
98
+ 'Databases have been dropped.' => '資料庫已刪除。',
99
+ 'Database has been created.' => '已建立資料庫。',
100
+ 'Database has been renamed.' => '已重新命名資料庫。',
101
+ 'Database has been altered.' => '已修改資料庫。',
102
+ 'Alter database' => '修改資料庫',
103
+ 'Create database' => '建立資料庫',
104
+ 'Database schema' => '資料庫結構',
105
+
106
+ // link to current database schema layout
107
+ 'Permanent link' => '永久連結',
108
+
109
+ // thousands separator - must contain single byte
110
+ ',' => ',',
111
+ '0123456789' => '0123456789',
112
  'Engine' => '引擎',
113
  'Collation' => '校對',
114
  'Data Length' => '資料長度',
115
  'Index Length' => '索引長度',
116
  'Data Free' => '資料空閒',
117
  'Rows' => '行數',
118
+ '%d in total' => '總共 %d 個',
 
119
  'Analyze' => '分析',
120
  'Optimize' => '最佳化',
121
+ 'Vacuum' => '整理(Vacuum)',
122
  'Check' => '檢查',
123
  'Repair' => '修復',
124
  'Truncate' => '清空',
125
+ 'Tables have been truncated.' => '已清空資料表。',
126
  'Move to other database' => '轉移到其它資料庫',
127
  'Move' => '轉移',
128
+ 'Tables have been moved.' => '已轉移資料表。',
129
+ 'Copy' => '複製',
130
+ 'Tables have been copied.' => '資料表已經複製',
131
+
132
+ 'Routines' => '程序',
133
+ 'Routine has been called, %d row(s) affected.' => '程序已被執行,%d 行被影響',
134
+ 'Call' => '呼叫',
135
+ 'Parameter name' => '參數名稱',
136
+ 'Create procedure' => '建立預存程序',
137
+ 'Create function' => '建立函式',
138
+ 'Routine has been dropped.' => '已刪除程序。',
139
+ 'Routine has been altered.' => '已修改子程序。',
140
+ 'Routine has been created.' => '已建立子程序。',
141
+ 'Alter function' => '修改函式',
142
+ 'Alter procedure' => '修改預存程序',
143
+ 'Return type' => '回傳類型',
144
+
145
+ 'Events' => '事件',
146
+ 'Event has been dropped.' => '已刪除事件。',
147
+ 'Event has been altered.' => '已修改事件。',
148
+ 'Event has been created.' => '已建立事件。',
149
+ 'Alter event' => '修改事件',
150
+ 'Create event' => '建立事件',
151
+ 'At given time' => '在指定時間',
152
+ 'Every' => '每',
153
+ 'Schedule' => '排程',
154
+ 'Start' => '開始',
155
+ 'End' => '結束',
156
+ 'On completion preserve' => '在完成後儲存',
157
+
158
+ 'Tables' => '資料表',
159
+ 'Tables and views' => '資料表和檢視表',
160
+ 'Table' => '資料表',
161
+ 'No tables.' => '沒有資料表。',
162
+ 'Alter table' => '修改資料表',
163
+ 'Create table' => '建立資料表',
164
+ 'Table has been dropped.' => '已經刪除資料表。',
165
  'Tables have been dropped.' => '已經將資料表刪除。',
166
+ 'Tables have been optimized.' => '已優化資料表。',
167
+ 'Table has been altered.' => '資料表已修改。',
168
+ 'Table has been created.' => '資料表已建立。',
169
+ 'Table name' => '資料表名稱',
170
+ 'Show structure' => '顯示結構',
171
+ 'engine' => '引擎',
172
+ 'collation' => '校對',
173
+ 'Column name' => '欄位名稱',
174
+ 'Type' => '類型',
175
+ 'Length' => '長度',
176
+ 'Auto Increment' => '自動遞增',
177
+ 'Options' => '選項',
178
+ 'Comment' => '註解',
179
+ 'Default value' => '預設值',
180
+ 'Default values' => '預設值',
181
+ 'Drop' => '刪除',
182
+ 'Drop %s?' => '刪除 %s?',
183
+ 'Are you sure?' => '你確定嗎?',
184
+ 'Size' => '大小',
185
+ 'Compute' => '計算',
186
+ 'Move up' => '上移',
187
+ 'Move down' => '下移',
188
+ 'Remove' => '移除',
189
+ 'Maximum number of allowed fields exceeded. Please increase %s.' => '超過允許的字段數量的最大值。請增加 %s。',
190
+
191
  'Partition by' => '分區類型',
192
  'Partitions' => '分區',
193
  'Partition name' => '分區名稱',
194
  'Values' => '值',
195
+
196
+ 'View' => '檢視表',
197
+ 'Materialized view' => '物化視圖',
198
+ 'View has been dropped.' => '已刪除檢視表。',
199
+ 'View has been altered.' => '已修改檢視表。',
200
+ 'View has been created.' => '已建立檢視表。',
201
+ 'Alter view' => '修改檢視表',
202
+ 'Create view' => '建立檢視表',
203
+
204
+ 'Indexes' => '索引',
205
+ 'Indexes have been altered.' => '已修改索引。',
206
+ 'Alter indexes' => '修改索引',
207
+ 'Add next' => '新增下一筆',
208
+ 'Index Type' => '索引類型',
209
+ 'Column (length)' => '欄位(長度)',
210
+
211
+ 'Foreign keys' => '外來鍵',
212
+ 'Foreign key' => '外來鍵',
213
+ 'Foreign key has been dropped.' => '已刪除外來鍵。',
214
+ 'Foreign key has been altered.' => '已修改外來鍵。',
215
+ 'Foreign key has been created.' => '已建立外來鍵。',
216
+ 'Target table' => '目標資料表',
217
+ 'Change' => '變更',
218
+ 'Source' => '來源',
219
+ 'Target' => '目標',
220
+ 'Add column' => '新增欄位',
221
+ 'Alter' => '修改',
222
+ 'Add foreign key' => '新增外來鍵',
223
+ 'ON DELETE' => 'ON DELETE',
224
+ 'ON UPDATE' => 'ON UPDATE',
225
+ 'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => '來源列和目標列必須具有相同的資料類型,在目標列上必須有一個索引並且引用的資料必須存在。',
226
+
227
+ 'Triggers' => '觸發器',
228
+ 'Add trigger' => '建立觸發器',
229
+ 'Trigger has been dropped.' => '已刪除觸發器。',
230
+ 'Trigger has been altered.' => '已修改觸發器。',
231
+ 'Trigger has been created.' => '已建立觸發器。',
232
+ 'Alter trigger' => '修改觸發器',
233
+ 'Create trigger' => '建立觸發器',
234
+ 'Time' => '時間',
235
+ 'Event' => '事件',
236
+ 'Name' => '名稱',
237
+
238
+ 'select' => '選擇',
239
+ 'Select' => '選擇',
240
+ 'Select data' => '選擇資料',
241
+ 'Functions' => '函式',
242
+ 'Aggregation' => '集合',
243
+ 'Search' => '搜尋',
244
  'anywhere' => '任意位置',
245
+ 'Search data in tables' => '在資料庫搜尋',
246
+ 'Sort' => '排序',
247
+ 'descending' => '降冪 (遞減)',
248
+ 'Limit' => '限定',
249
+ 'Limit rows' => '限制行數',
250
+ 'Text length' => 'Text 長度',
251
+ 'Action' => '動作',
252
+ 'Full table scan' => '全資料表掃描',
253
+ 'Unable to select the table' => '無法選擇該資料表',
254
+ 'No rows.' => '沒有資料行。',
255
+ '%d / ' => '%d / ',
256
+ '%d row(s)' => '%d 行',
257
+ 'Page' => '頁',
258
+ 'last' => '最後一頁',
259
+ 'Load more data' => '載入更多資料',
260
+ 'Loading' => '載入中',
261
+ 'Whole result' => '所有結果',
262
+ '%d byte(s)' => '%d byte(s)',
263
+
264
  'Import' => '匯入',
265
+ '%d row(s) have been imported.' => '已匯入 %d 行。',
266
+ 'File must be in UTF-8 encoding.' => '檔必須使用UTF-8編碼。',
267
+
268
+ // in-place editing in select
269
+ 'Modify' => '修改',
270
+ 'Ctrl+click on a value to modify it.' => '按住Ctrl並按一下某個值進行修改。',
271
+ 'Use edit link to modify this value.' => '使用編輯連結來修改。',
272
+
273
+ // %s can contain auto-increment value
274
+ 'Item%s has been inserted.' => '已新增項目 %s。',
275
+ 'Item has been deleted.' => '該項目已被刪除',
276
+ 'Item has been updated.' => '已更新項目。',
277
+ '%d item(s) have been affected.' => '%d 個項目受到影響。',
278
+ 'New item' => '新增項目',
279
+ 'original' => '原始',
280
+ // label for value '' in enum data type
281
+ 'empty' => '空值',
282
+ 'edit' => '編輯',
283
+ 'Edit' => '編輯',
284
+ 'Insert' => '新增',
285
+ 'Save' => '儲存',
286
+ 'Save and continue edit' => '儲存並繼續編輯',
287
+ 'Save and insert next' => '儲存並新增下一筆',
288
+ 'Selected' => '已選中',
289
+ 'Clone' => '複製',
290
+ 'Delete' => '刪除',
291
+ 'You have no privileges to update this table.' => '您沒有許可權更新這個資料表。',
292
+
293
+ 'E-mail' => '電子郵件',
294
+ 'From' => '來自',
295
+ 'Subject' => '主旨',
296
+ 'Attachments' => '附件',
297
+ 'Send' => '寄出',
298
+ '%d e-mail(s) have been sent.' => '已寄出 %d 封郵件。',
299
+
300
+ // data type descriptions
301
  'Numbers' => '數字',
302
  'Date and time' => '日期時間',
303
  'Strings' => '字串',
304
  'Binary' => '二進位',
305
  'Lists' => '列表',
306
+ 'Network' => '網路',
307
+ 'Geometry' => '幾何',
308
+ 'Relations' => '關聯',
309
+
310
  'Editor' => '編輯器',
311
+ // date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
312
+ '$1-$3-$5' => '$1.$3.$5',
313
+ // hint for date format - use language equivalents for day, month and year shortcuts
314
+ '[yyyy]-mm-dd' => '[yyyy].mm.dd',
315
+ // hint for time format - use language equivalents for hour, minute and second shortcuts
316
+ 'HH:MM:SS' => 'HH:MM:SS',
317
+ 'now' => '現在',
318
+ 'yes' => '',
319
+ 'no' => '',
320
+
321
+ // general SQLite error in create, drop or rename database
322
+ 'File exists.' => '檔案已存在。',
323
+ 'Please use one of the extensions %s.' => '請使用下列其中一個擴充模組 %s。',
324
+
325
+ // PostgreSQL and MS SQL schema support
326
  'Alter schema' => '修改資料表結構',
327
  'Create schema' => '建立資料表結構',
328
  'Schema has been dropped.' => '已刪除資料表結構。',
329
  'Schema has been created.' => '已建立資料表結構。',
330
  'Schema has been altered.' => '已修改資料表結構。',
331
+ 'Schema' => '資料表結構',
332
+ 'Invalid schema.' => '無效的資料表結構。',
333
+
334
+ // PostgreSQL sequences support
335
  'Sequences' => '序列',
336
  'Create sequence' => '建立序列',
 
337
  'Sequence has been dropped.' => '已刪除序列。',
338
  'Sequence has been created.' => '已建立序列。',
339
  'Sequence has been altered.' => '已修改序列。',
340
+ 'Alter sequence' => '修改序列',
341
+
342
+ // PostgreSQL user types support
343
  'User types' => '使用者類型',
344
  'Create type' => '建立類型',
 
345
  'Type has been dropped.' => '已刪除類型。',
346
  'Type has been created.' => '已建立類型。',
347
+ 'Alter type' => '修改類型',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
348
  );
adminer/adminer/adminer/lang/zh.inc.php CHANGED
@@ -1,19 +1,173 @@
1
  <?php
2
  $translations = array(
3
- 'Login' => '登录',
4
- 'Logout successful.' => '注销成功。',
5
- 'Invalid credentials.' => '无效凭据。',
6
  'Server' => '服务器',
7
  'Username' => '用户名',
8
  'Password' => '密码',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  'Select database' => '选择数据库',
10
  'Invalid database.' => '无效数据库。',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  'Table has been dropped.' => '已删除表。',
 
 
12
  'Table has been altered.' => '已修改表。',
13
  'Table has been created.' => '已创建表。',
14
- 'Alter table' => '修改表',
15
- 'Create table' => '创建表',
16
  'Table name' => '表名',
 
17
  'engine' => '引擎',
18
  'collation' => '校对',
19
  'Column name' => '字段名',
@@ -21,71 +175,44 @@ $translations = array(
21
  'Length' => '长度',
22
  'Auto Increment' => '自动增量',
23
  'Options' => '选项',
24
- 'Save' => '保存',
 
 
25
  'Drop' => '删除',
26
- 'Database has been dropped.' => '已删除数据库。',
27
- 'Database has been created.' => '已创建数据库。',
28
- 'Database has been renamed.' => '已重命名数据库。',
29
- 'Database has been altered.' => '已修改数据库。',
30
- 'Alter database' => '修改数据库',
31
- 'Create database' => '创建数据库',
32
- 'SQL command' => 'SQL命令',
33
- 'Logout' => '注销',
34
- 'database' => '数据库',
35
- 'Use' => '使用',
36
- 'No tables.' => '没有表。',
37
- 'select' => '选择',
38
- 'Item has been deleted.' => '已删除项目。',
39
- 'Item has been updated.' => '已更新项目。',
40
- 'Item%s has been inserted.' => '已插入项目%s。',
41
- 'Edit' => '编辑',
42
- 'Insert' => '插入',
43
- 'Save and insert next' => '保存并插入下一个',
44
- 'Delete' => '删除',
45
- 'Database' => '数据库',
46
- 'Routines' => '子程序',
47
- 'Indexes have been altered.' => '已修改索引。',
48
  'Indexes' => '索引',
 
49
  'Alter indexes' => '修改索引',
50
  'Add next' => '下一行插入',
51
- 'Language' => '语言',
52
- 'Select' => '选择',
53
- 'New item' => '新建数据',
54
- 'Search' => '搜索',
55
- 'Sort' => '排序',
56
- 'descending' => '降序',
57
- 'Limit' => '范围',
58
- 'No rows.' => '无数据。',
59
- 'Action' => '动作',
60
- 'edit' => '编辑',
61
- 'Page' => '页面',
62
- 'Query executed OK, %d row(s) affected.' => '查询执行完毕,%d 行受影响。',
63
- 'Error in query' => '查询出错',
64
- 'Execute' => '执行',
65
- 'Table' => '表',
66
  'Foreign keys' => '外键',
67
- 'Triggers' => '触发器',
68
- 'View' => '视图',
69
- 'Unable to select the table' => '不能选择该表',
70
- 'Invalid CSRF token. Send the form again.' => '无效 CSRF 令牌。重新发送表单。',
71
- 'Comment' => '注释',
72
- 'Default values' => '默认值',
73
- '%d byte(s)' => '%d 字节',
74
- 'No commands to execute.' => '没有命令被执行。',
75
- 'Unable to upload a file.' => '不能上传文件。',
76
- 'File upload' => '文件上传',
77
- 'File uploads are disabled.' => '文件上传被禁用。',
78
- 'Routine has been called, %d row(s) affected.' => '子程序被调用,%d 行被影响。',
79
- 'Call' => '调用',
80
- 'No extension' => '没有扩展',
81
- 'None of the supported PHP extensions (%s) are available.' => '没有支持的 PHP 扩展可用(%s)。',
82
- 'Session support must be enabled.' => 'Session 必须被启用。',
83
- 'Session expired, please login again.' => 'Session 已过期,请重新登录。',
84
- 'Text length' => '文本显示限制',
85
  'Foreign key has been dropped.' => '已删除外键。',
86
  'Foreign key has been altered.' => '已修改外键。',
87
  'Foreign key has been created.' => '已创建外键。',
88
- 'Foreign key' => '外键',
89
  'Target table' => '目标表',
90
  'Change' => '修改',
91
  'Source' => '源',
@@ -95,27 +222,9 @@ $translations = array(
95
  'Add foreign key' => '添加外键',
96
  'ON DELETE' => 'ON DELETE',
97
  'ON UPDATE' => 'ON UPDATE',
98
- 'Index Type' => '索引类型',
99
- 'Column (length)' => '列(长度)',
100
- 'View has been dropped.' => '已删除视图。',
101
- 'View has been altered.' => '已修改视图。',
102
- 'View has been created.' => '已创建视图。',
103
- 'Alter view' => '修改视图',
104
- 'Create view' => '创建视图',
105
- 'Name' => '名称',
106
- 'Process list' => '进程列表',
107
- '%d process(es) have been killed.' => '%d 个进程被终止',
108
- 'Kill' => '终止',
109
- 'Parameter name' => '参数名',
110
- 'Database schema' => '数据库概要',
111
- 'Create procedure' => '创建过程',
112
- 'Create function' => '创建函数',
113
- 'Routine has been dropped.' => '已删除子程序。',
114
- 'Routine has been altered.' => '已修改子程序。',
115
- 'Routine has been created.' => '已创建子程序。',
116
- 'Alter function' => '修改函数',
117
- 'Alter procedure' => '修改过程',
118
- 'Return type' => '返回类型',
119
  'Add trigger' => '创建触发器',
120
  'Trigger has been dropped.' => '已删除触发器。',
121
  'Trigger has been altered.' => '已修改触发器。',
@@ -124,144 +233,116 @@ $translations = array(
124
  'Create trigger' => '创建触发器',
125
  'Time' => '时间',
126
  'Event' => '事件',
127
- '%s version: %s through PHP extension %s' => '%s 版本:%s, 使用PHP扩展 %s',
128
- '%d row(s)' => '%d 行',
129
- 'Remove' => '移除',
130
- 'Are you sure?' => '你确定吗?',
131
- 'Privileges' => '权限',
132
- 'Create user' => '创建用户',
133
- 'User has been dropped.' => '已删除用户。',
134
- 'User has been altered.' => '已修改用户。',
135
- 'User has been created.' => '已创建用户。',
136
- 'Hashed' => 'Hashed',
137
- 'Column' => '列',
138
- 'Routine' => '子程序',
139
- 'Grant' => '授权',
140
- 'Revoke' => '废除',
141
- 'Logged as: %s' => '登录用户:%s',
142
- 'Too big POST data. Reduce the data or increase the %s configuration directive.' => '太大的 POST 数据。减少数据或者增加 %s 配置命令。',
143
- 'Move up' => '上移',
144
- 'Move down' => '下移',
145
- 'Export' => '导出',
146
- 'Tables' => '表',
147
- 'Data' => '数据',
148
- 'Output' => '输出',
149
- 'open' => '打开',
150
- 'save' => '保存',
151
- 'Format' => '格式',
152
  'Functions' => '函数',
153
  'Aggregation' => '集合',
154
- 'Event has been dropped.' => '已删除事件。',
155
- 'Event has been altered.' => '已修改事件。',
156
- 'Event has been created.' => '已创建事件。',
157
- 'Alter event' => '修改事件',
158
- 'Create event' => '创建事件',
159
- 'Start' => '开始',
160
- 'End' => '结束',
161
- 'Every' => '每',
162
- 'Status' => '状态',
163
- 'On completion preserve' => '完成后保存',
164
- 'Events' => '事件',
165
- 'Schedule' => '调度',
166
- 'At given time' => '在指定时间',
167
- 'Tables have been truncated.' => '已清空表。',
168
- 'Tables have been moved.' => '已转移表。',
169
- 'Tables and views' => '表和视图',
170
- 'Engine' => '引擎',
171
- 'Collation' => '校对',
172
- 'Data Length' => '数据长度',
173
- 'Index Length' => '索引长度',
174
- 'Data Free' => '数据空闲',
175
- 'Rows' => '行数',
176
- ',' => ',',
177
- '0123456789' => '0123456789',
178
- 'Analyze' => '分析',
179
- 'Optimize' => '优化',
180
- 'Check' => '检查',
181
- 'Repair' => '修复',
182
- 'Truncate' => '清空',
183
- 'Move to other database' => '转移到其它数据库',
184
- 'Move' => '转移',
185
- 'Save and continue edit' => '保存并继续编辑',
186
- 'original' => '原始',
187
- '%d item(s) have been affected.' => '%d 个项目受到影响。',
188
- 'Whole result' => '所有结果',
189
- 'Tables have been dropped.' => '已删除表。',
190
- 'Clone' => '复制',
191
- 'Maximum number of allowed fields exceeded. Please increase %s.' => '超过最多允许的字段数量。请增加 %s。',
192
- 'Partition by' => '分区类型',
193
- 'Partitions' => '分区',
194
- 'Partition name' => '分区名',
195
- 'Values' => '值',
196
- '%d row(s) have been imported.' => '%d 行已导入。',
197
  'anywhere' => '任意位置',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
198
  'Import' => '导入',
199
- 'Stop on error' => '出错时停止',
200
- '%.3f s' => '%.3f 秒',
201
- '$1-$3-$5' => '$1.$3.$5',
202
- '[yyyy]-mm-dd' => '[yyyy].mm.dd',
203
- 'History' => '历史',
204
- 'Variables' => '变量',
205
- 'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => '源列和目标列必须具有相同的数据类型,在目标列上必须有一个索引并且引用的数据必须存在。',
206
- 'Relations' => '关联信息',
207
- 'Run file' => '运行文件',
208
- 'Clear' => '清除',
209
- 'Maximum allowed file size is %sB.' => '最多允许的文件大小为 %sB',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
210
  'Numbers' => '数字',
211
  'Date and time' => '日期时间',
212
  'Strings' => '字符串',
213
  'Binary' => '二进制',
214
  'Lists' => '列表',
 
 
 
 
215
  'Editor' => '编辑器',
216
- 'E-mail' => '电子邮件',
217
- 'From' => '来自',
218
- 'Subject' => '主题',
219
- 'Send' => '发送',
220
- '%d e-mail(s) have been sent.' => '%d 封邮件已发送。',
221
- 'Webserver file %s' => 'Web服务器文件 %s',
222
- 'File does not exist.' => '文件不存在。',
223
- '%d in total' => '共计 %d',
224
- 'Permanent login' => '保持登录',
225
- 'Databases have been dropped.' => '已删除数据库。',
226
- 'Search data in tables' => '在表中搜索数据',
227
- 'Schema' => '模式',
 
 
 
228
  'Alter schema' => '修改模式',
229
  'Create schema' => '创建模式',
230
  'Schema has been dropped.' => '已删除模式。',
231
  'Schema has been created.' => '已创建模式。',
232
  'Schema has been altered.' => '已修改模式。',
 
 
 
 
233
  'Sequences' => '序列',
234
  'Create sequence' => '创建序列',
235
- 'Alter sequence' => '修改序列',
236
  'Sequence has been dropped.' => '已删除序列。',
237
  'Sequence has been created.' => '已创建序列。',
238
  'Sequence has been altered.' => '已修改序列。',
 
 
 
239
  'User types' => '用户类型',
240
  'Create type' => '创建类型',
241
- 'Alter type' => '修改类型',
242
  'Type has been dropped.' => '已删除类型。',
243
  'Type has been created.' => '已创建类型。',
244
- 'Use edit link to modify this value.' => '使用编辑链接来修改该值。',
245
- 'last' => '最后',
246
- 'From server' => '来自服务器',
247
- 'System' => '系统',
248
- 'Select data' => '选择数据',
249
- 'Show structure' => '显示结构',
250
- 'empty' => '空',
251
- 'Network' => '网络',
252
- 'Geometry' => '几何图形',
253
- 'File exists.' => '文件已存在。',
254
- 'Attachments' => '附件',
255
- '%d query(s) executed OK.' => '%d 条查询已成功执行。',
256
- 'Show only errors' => '仅显示错误',
257
- 'Refresh' => '刷新',
258
- 'Invalid schema.' => '非法模式。',
259
- 'Please use one of the extensions %s.' => '请使用这些扩展中的一个:%s。',
260
- 'now' => '现在',
261
- 'ltr' => 'ltr',
262
- 'Tables have been copied.' => '表已复制。',
263
- 'Copy' => '复制',
264
- 'Permanent link' => '固定链接',
265
- 'Edit all' => '编辑全部',
266
- 'HH:MM:SS' => 'HH:MM:SS',
267
  );
1
  <?php
2
  $translations = array(
3
+ // label for database system selection (MySQL, SQLite, ...)
4
+ 'System' => '系统',
 
5
  'Server' => '服务器',
6
  'Username' => '用户名',
7
  'Password' => '密码',
8
+ 'Permanent login' => '保持登录',
9
+ 'Login' => '登录',
10
+ 'Logout' => '登出',
11
+ 'Logged as: %s' => '登录用户:%s',
12
+ 'Logout successful.' => '成功登出。',
13
+ 'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => '感谢使用Adminer,请考虑为我们<a href="https://www.adminer.org/en/donation/">捐款(英文页面)</a>.',
14
+ 'Invalid credentials.' => '无效凭据。',
15
+ 'There is a space in the input password which might be the cause.' => '您输入的密码中有一个空格,这可能是导致问题的原因。',
16
+ 'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer默认不支持访问没有密码的数据库,<a href="https://www.adminer.org/en/password/"%s>详情见这里</a>.',
17
+ 'Database does not support password.' => '数据库不支持密码。',
18
+ 'Too many unsuccessful logins, try again in %d minute(s).' => '登录失败次数过多,请 %d 分钟后重试。',
19
+ 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => '主密码已过期。<a href="https://www.adminer.org/en/extension/"%s>请扩展</a> %s 方法让它永久化。',
20
+ 'Language' => '语言',
21
+ 'Invalid CSRF token. Send the form again.' => '无效 CSRF 令牌。请重新发送表单。',
22
+ 'If you did not send this request from Adminer then close this page.' => '如果您并没有从Adminer发送请求,请关闭此页面。',
23
+ 'No extension' => '没有扩展',
24
+ 'None of the supported PHP extensions (%s) are available.' => '没有支持的 PHP 扩展可用(%s)。',
25
+ 'Connecting to privileged ports is not allowed.' => '不允许连接到特权端口。',
26
+ 'Disable %s or enable %s or %s extensions.' => '禁用 %s 或启用 %s 或 %s 扩展。',
27
+ 'Session support must be enabled.' => '必须启用会话支持。',
28
+ 'Session expired, please login again.' => '会话已过期,请重新登录。',
29
+ 'The action will be performed after successful login with the same credentials.' => '此操作将在成功使用相同的凭据登录后执行。',
30
+ '%s version: %s through PHP extension %s' => '%s 版本:%s, 使用PHP扩展 %s',
31
+ 'Refresh' => '刷新',
32
+
33
+ // text direction - 'ltr' or 'rtl'
34
+ 'ltr' => 'ltr',
35
+
36
+ 'Privileges' => '权限',
37
+ 'Create user' => '创建用户',
38
+ 'User has been dropped.' => '已删除用户。',
39
+ 'User has been altered.' => '已修改用户。',
40
+ 'User has been created.' => '已创建用户。',
41
+ 'Hashed' => 'Hashed',
42
+ 'Column' => '列',
43
+ 'Routine' => '子程序',
44
+ 'Grant' => '授权',
45
+ 'Revoke' => '废除',
46
+
47
+ 'Process list' => '进程列表',
48
+ '%d process(es) have been killed.' => '%d 个进程被终止',
49
+ 'Kill' => '终止',
50
+
51
+ 'Variables' => '变量',
52
+ 'Status' => '状态',
53
+
54
+ 'SQL command' => 'SQL命令',
55
+ '%d query(s) executed OK.' => '%d 条查询已成功执行。',
56
+ 'Query executed OK, %d row(s) affected.' => '查询执行完毕,%d 行受影响。',
57
+ 'No commands to execute.' => '没有命令被执行。',
58
+ 'Error in query' => '查询出错',
59
+ 'Unknown error.' => '未知错误。',
60
+ 'Warnings' => '警告',
61
+ 'ATTACH queries are not supported.' => '不支持ATTACH查询。',
62
+ 'Execute' => '执行',
63
+ 'Stop on error' => '出错时停止',
64
+ 'Show only errors' => '仅显示错误',
65
+ // sprintf() format for time of the command
66
+ '%.3f s' => '%.3f 秒',
67
+ 'History' => '历史',
68
+ 'Clear' => '清除',
69
+ 'Edit all' => '编辑全部',
70
+
71
+ 'File upload' => '文件上传',
72
+ 'From server' => '来自服务器',
73
+ 'Webserver file %s' => 'Web服务器文件 %s',
74
+ 'Run file' => '运行文件',
75
+ 'File does not exist.' => '文件不存在。',
76
+ 'File uploads are disabled.' => '文件上传被禁用。',
77
+ 'Unable to upload a file.' => '不能上传文件。',
78
+ 'Maximum allowed file size is %sB.' => '最多允许的文件大小为 %sB。',
79
+ 'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST 数据太大。请减少数据或者增加 %s 配置命令。',
80
+ 'You can upload a big SQL file via FTP and import it from server.' => '您可以通过FTP上传大型SQL文件并从服务器导入。',
81
+ 'You are offline.' => '您离线了。',
82
+
83
+ 'Export' => '导出',
84
+ 'Output' => '输出',
85
+ 'open' => '打开',
86
+ 'save' => '保存',
87
+ 'Saving' => '保存中',
88
+ 'Format' => '格式',
89
+ 'Data' => '数据',
90
+
91
+ 'Database' => '数据库',
92
+ 'database' => '数据库',
93
+ 'DB' => '数据库',
94
+ 'Use' => '使用',
95
  'Select database' => '选择数据库',
96
  'Invalid database.' => '无效数据库。',
97
+ 'Database has been dropped.' => '已删除数据库。',
98
+ 'Databases have been dropped.' => '已删除数据库。',
99
+ 'Database has been created.' => '已创建数据库。',
100
+ 'Database has been renamed.' => '已重命名数据库。',
101
+ 'Database has been altered.' => '已修改数据库。',
102
+ 'Alter database' => '修改数据库',
103
+ 'Create database' => '创建数据库',
104
+ 'Database schema' => '数据库概要',
105
+
106
+ // link to current database schema layout
107
+ 'Permanent link' => '固定链接',
108
+
109
+ // thousands separator - must contain single byte
110
+ ',' => ',',
111
+ '0123456789' => '0123456789',
112
+ 'Engine' => '引擎',
113
+ 'Collation' => '校对',
114
+ 'Data Length' => '数据长度',
115
+ 'Index Length' => '索引长度',
116
+ 'Data Free' => '数据空闲',
117
+ 'Rows' => '行数',
118
+ '%d in total' => '共计 %d',
119
+ 'Analyze' => '分析',
120
+ 'Optimize' => '优化',
121
+ 'Vacuum' => '整理(Vacuum)',
122
+ 'Check' => '检查',
123
+ 'Repair' => '修复',
124
+ 'Truncate' => '清空',
125
+ 'Tables have been truncated.' => '已清空表。',
126
+ 'Move to other database' => '转移到其它数据库',
127
+ 'Move' => '转移',
128
+ 'Tables have been moved.' => '已转移表。',
129
+ 'Copy' => '复制',
130
+ 'Tables have been copied.' => '已复制表。',
131
+
132
+ 'Routines' => '子程序',
133
+ 'Routine has been called, %d row(s) affected.' => '子程序被调用,%d 行被影响。',
134
+ 'Call' => '调用',
135
+ 'Parameter name' => '参数名',
136
+ 'Create procedure' => '创建过程',
137
+ 'Create function' => '创建函数',
138
+ 'Routine has been dropped.' => '已删除子程序。',
139
+ 'Routine has been altered.' => '已修改子程序。',
140
+ 'Routine has been created.' => '已创建子程序。',
141
+ 'Alter function' => '修改函数',
142
+ 'Alter procedure' => '修改过程',
143
+ 'Return type' => '返回类型',
144
+
145
+ 'Events' => '事件',
146
+ 'Event has been dropped.' => '已删除事件。',
147
+ 'Event has been altered.' => '已修改事件。',
148
+ 'Event has been created.' => '已创建事件。',
149
+ 'Alter event' => '修改事件',
150
+ 'Create event' => '创建事件',
151
+ 'At given time' => '在指定时间',
152
+ 'Every' => '每',
153
+ 'Schedule' => '调度',
154
+ 'Start' => '开始',
155
+ 'End' => '结束',
156
+ 'On completion preserve' => '完成后仍保留',
157
+
158
+ 'Tables' => '表',
159
+ 'Tables and views' => '表和视图',
160
+ 'Table' => '表',
161
+ 'No tables.' => '没有表。',
162
+ 'Alter table' => '修改表',
163
+ 'Create table' => '创建表',
164
  'Table has been dropped.' => '已删除表。',
165
+ 'Tables have been dropped.' => '已删除表。',
166
+ 'Tables have been optimized.' => '已优化表。',
167
  'Table has been altered.' => '已修改表。',
168
  'Table has been created.' => '已创建表。',
 
 
169
  'Table name' => '表名',
170
+ 'Show structure' => '显示结构',
171
  'engine' => '引擎',
172
  'collation' => '校对',
173
  'Column name' => '字段名',
175
  'Length' => '长度',
176
  'Auto Increment' => '自动增量',
177
  'Options' => '选项',
178
+ 'Comment' => '注释',
179
+ 'Default value' => '默认值',
180
+ 'Default values' => '默认值',
181
  'Drop' => '删除',
182
+ 'Drop %s?' => '删除 %s?',
183
+ 'Are you sure?' => '您确定吗?',
184
+ 'Size' => '大小',
185
+ 'Compute' => '计算',
186
+ 'Move up' => '上移',
187
+ 'Move down' => '下移',
188
+ 'Remove' => '移除',
189
+ 'Maximum number of allowed fields exceeded. Please increase %s.' => '超过最多允许的字段数量。请增加 %s。',
190
+
191
+ 'Partition by' => '分区类型',
192
+ 'Partitions' => '分区',
193
+ 'Partition name' => '分区名',
194
+ 'Values' => '',
195
+
196
+ 'View' => '视图',
197
+ 'Materialized view' => '物化视图',
198
+ 'View has been dropped.' => '已删除视图。',
199
+ 'View has been altered.' => '已修改视图。',
200
+ 'View has been created.' => '已创建视图。',
201
+ 'Alter view' => '修改视图',
202
+ 'Create view' => '创建视图',
203
+
204
  'Indexes' => '索引',
205
+ 'Indexes have been altered.' => '已修改索引。',
206
  'Alter indexes' => '修改索引',
207
  'Add next' => '下一行插入',
208
+ 'Index Type' => '索引类型',
209
+ 'Column (length)' => '列(长度)',
210
+
 
 
 
 
 
 
 
 
 
 
 
 
211
  'Foreign keys' => '外键',
212
+ 'Foreign key' => '外键',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
213
  'Foreign key has been dropped.' => '已删除外键。',
214
  'Foreign key has been altered.' => '已修改外键。',
215
  'Foreign key has been created.' => '已创建外键。',
 
216
  'Target table' => '目标表',
217
  'Change' => '修改',
218
  'Source' => '源',
222
  'Add foreign key' => '添加外键',
223
  'ON DELETE' => 'ON DELETE',
224
  'ON UPDATE' => 'ON UPDATE',
225
+ 'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => '源列和目标列必须具有相同的数据类型,在目标列上必须有一个索引并且引用的数据必须存在。',
226
+
227
+ 'Triggers' => '触发器',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
228
  'Add trigger' => '创建触发器',
229
  'Trigger has been dropped.' => '已删除触发器。',
230
  'Trigger has been altered.' => '已修改触发器。',
233
  'Create trigger' => '创建触发器',
234
  'Time' => '时间',
235
  'Event' => '事件',
236
+ 'Name' => '名称',
237
+
238
+ 'select' => '选择',
239
+ 'Select' => '选择',
240
+ 'Select data' => '选择数据',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
241
  'Functions' => '函数',
242
  'Aggregation' => '集合',
243
+ 'Search' => '搜索',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
244
  'anywhere' => '任意位置',
245
+ 'Search data in tables' => '在表中搜索数据',
246
+ 'Sort' => '排序',
247
+ 'descending' => '降序',
248
+ 'Limit' => '范围',
249
+ 'Limit rows' => '限制行数',
250
+ 'Text length' => '文本显示限制',
251
+ 'Action' => '动作',
252
+ 'Full table scan' => '全表扫描',
253
+ 'Unable to select the table' => '不能选择该表',
254
+ 'No rows.' => '无数据。',
255
+ '%d / ' => '%d / ',
256
+ '%d row(s)' => '%d 行',
257
+ 'Page' => '页面',
258
+ 'last' => '最后',
259
+ 'Load more data' => '加载更多数据',
260
+ 'Loading' => '加载中',
261
+ 'Whole result' => '所有结果',
262
+ '%d byte(s)' => '%d 字节',
263
+
264
  'Import' => '导入',
265
+ '%d row(s) have been imported.' => '%d 行已导入。',
266
+ 'File must be in UTF-8 encoding.' => '文件必须使用UTF-8编码。',
267
+
268
+ // in-place editing in select
269
+ 'Modify' => '修改',
270
+ 'Ctrl+click on a value to modify it.' => '按住Ctrl并单击某个值进行修改。',
271
+ 'Use edit link to modify this value.' => '使用编辑链接修改该值。',
272
+
273
+ // %s can contain auto-increment value
274
+ 'Item%s has been inserted.' => '已插入项目%s。',
275
+ 'Item has been deleted.' => '已删除项目。',
276
+ 'Item has been updated.' => '已更新项目。',
277
+ '%d item(s) have been affected.' => '%d 个项目受到影响。',
278
+ 'New item' => '新建数据',
279
+ 'original' => '原始',
280
+ // label for value '' in enum data type
281
+ 'empty' => '空',
282
+ 'edit' => '编辑',
283
+ 'Edit' => '编辑',
284
+ 'Insert' => '插入',
285
+ 'Save' => '保存',
286
+ 'Save and continue edit' => '保存并继续编辑',
287
+ 'Save and insert next' => '保存并插入下一个',
288
+ 'Selected' => '已选中',
289
+ 'Clone' => '复制',
290
+ 'Delete' => '删除',
291
+ 'You have no privileges to update this table.' => '您没有权限更新这个表。',
292
+
293
+ 'E-mail' => '电子邮件',
294
+ 'From' => '来自',
295
+ 'Subject' => '主题',
296
+ 'Attachments' => '附件',
297
+ 'Send' => '发送',
298
+ '%d e-mail(s) have been sent.' => '%d 封邮件已发送。',
299
+
300
+ // data type descriptions
301
  'Numbers' => '数字',
302
  'Date and time' => '日期时间',
303
  'Strings' => '字符串',
304
  'Binary' => '二进制',
305
  'Lists' => '列表',
306
+ 'Network' => '网络',
307
+ 'Geometry' => '几何图形',
308
+ 'Relations' => '关联信息',
309
+
310
  'Editor' => '编辑器',
311
+ // date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
312
+ '$1-$3-$5' => '$1.$3.$5',
313
+ // hint for date format - use language equivalents for day, month and year shortcuts
314
+ '[yyyy]-mm-dd' => '[yyyy].mm.dd',
315
+ // hint for time format - use language equivalents for hour, minute and second shortcuts
316
+ 'HH:MM:SS' => 'HH:MM:SS',
317
+ 'now' => '现在',
318
+ 'yes' => '',
319
+ 'no' => '',
320
+
321
+ // general SQLite error in create, drop or rename database
322
+ 'File exists.' => '文件已存在。',
323
+ 'Please use one of the extensions %s.' => '请使用其中一个扩展:%s。',
324
+
325
+ // PostgreSQL and MS SQL schema support
326
  'Alter schema' => '修改模式',
327
  'Create schema' => '创建模式',
328
  'Schema has been dropped.' => '已删除模式。',
329
  'Schema has been created.' => '已创建模式。',
330
  'Schema has been altered.' => '已修改模式。',
331
+ 'Schema' => '模式',
332
+ 'Invalid schema.' => '非法模式。',
333
+
334
+ // PostgreSQL sequences support
335
  'Sequences' => '序列',
336
  'Create sequence' => '创建序列',
 
337
  'Sequence has been dropped.' => '已删除序列。',
338
  'Sequence has been created.' => '已创建序列。',
339
  'Sequence has been altered.' => '已修改序列。',
340
+ 'Alter sequence' => '修改序列',
341
+
342
+ // PostgreSQL user types support
343
  'User types' => '用户类型',
344
  'Create type' => '创建类型',
 
345
  'Type has been dropped.' => '已删除类型。',
346
  'Type has been created.' => '已创建类型。',
347
+ 'Alter type' => '修改类型',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
348
  );
adminer/adminer/adminer/procedure.inc.php CHANGED
@@ -35,9 +35,10 @@ $routine_languages = routine_languages();
35
  ?>
36
 
37
  <form action="" method="post" id="form">
38
- <p><?php echo lang('Name'); ?>: <input name="name" value="<?php echo h($row["name"]); ?>" maxlength="64" autocapitalize="off">
39
  <?php echo ($routine_languages ? lang('Language') . ": " . html_select("language", $routine_languages, $row["language"]) . "\n" : ""); ?>
40
  <input type="submit" value="<?php echo lang('Save'); ?>">
 
41
  <table cellspacing="0" class="nowrap">
42
  <?php
43
  edit_fields($row["fields"], $collations, $routine);
@@ -47,6 +48,7 @@ if (isset($_GET["function"])) {
47
  }
48
  ?>
49
  </table>
 
50
  <p><?php textarea("definition", $row["definition"]); ?>
51
  <p>
52
  <input type="submit" value="<?php echo lang('Save'); ?>">
35
  ?>
36
 
37
  <form action="" method="post" id="form">
38
+ <p><?php echo lang('Name'); ?>: <input name="name" value="<?php echo h($row["name"]); ?>" data-maxlength="64" autocapitalize="off">
39
  <?php echo ($routine_languages ? lang('Language') . ": " . html_select("language", $routine_languages, $row["language"]) . "\n" : ""); ?>
40
  <input type="submit" value="<?php echo lang('Save'); ?>">
41
+ <div class="scrollable">
42
  <table cellspacing="0" class="nowrap">
43
  <?php
44
  edit_fields($row["fields"], $collations, $routine);
48
  }
49
  ?>
50
  </table>
51
+ </div>
52
  <p><?php textarea("definition", $row["definition"]); ?>
53
  <p>
54
  <input type="submit" value="<?php echo lang('Save'); ?>">
adminer/adminer/adminer/processlist.inc.php CHANGED
@@ -13,6 +13,7 @@ page_header(lang('Process list'), $error);
13
  ?>
14
 
15
  <form action="" method="post">
 
16
  <table cellspacing="0" class="nowrap checkable">
17
  <?php
18
  echo script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});");
@@ -45,6 +46,7 @@ foreach (process_list() as $i => $row) {
45
  }
46
  ?>
47
  </table>
 
48
  <p>
49
  <?php
50
  if (support("kill")) {
13
  ?>
14
 
15
  <form action="" method="post">
16
+ <div class="scrollable">
17
  <table cellspacing="0" class="nowrap checkable">
18
  <?php
19
  echo script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});");
46
  }
47
  ?>
48
  </table>
49
+ </div>
50
  <p>
51
  <?php
52
  if (support("kill")) {
adminer/adminer/adminer/select.inc.php CHANGED
@@ -309,6 +309,7 @@ if (!$columns && support("table")) {
309
  } else {
310
  $backward_keys = $adminer->backwardKeys($TABLE, $table_name);
311
 
 
312
  echo "<table id='table' cellspacing='0' class='nowrap checkable'>";
313
  echo script("mixin(qs('#table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true), onkeydown: editingKeydown});");
314
  echo "<thead><tr>" . (!$group && $select
@@ -439,7 +440,7 @@ if (!$columns && support("table")) {
439
  $h_value = h($value !== null ? $value : $row[$key]);
440
  echo "<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]'>");
441
  } else {
442
- $long = strpos($val, "<i>...</i>");
443
  echo "<td id='$id' data-text='" . ($long ? 2 : ($text ? 1 : 0)) . "'"
444
  . ($editable ? "" : " data-warning='" . h(lang('Use edit link to modify this value.')) . "'")
445
  . ">$val</td>"
@@ -459,6 +460,7 @@ if (!$columns && support("table")) {
459
  exit;
460
  }
461
  echo "</table>\n";
 
462
  }
463
 
464
  if (!is_ajax()) {
@@ -482,7 +484,7 @@ if (!$columns && support("table")) {
482
  if ($pagination) {
483
  echo (($found_rows === false ? count($rows) + 1 : $found_rows - $page * $limit) > $limit
484
  ? '<p><a href="' . h(remove_from_uri("page") . "&page=" . ($page + 1)) . '" class="loadmore">' . lang('Load more data') . '</a>'
485
- . script("qsl('a').onclick = partial(selectLoadMore, " . (+$limit) . ", '" . lang('Loading') . "...');", "")
486
  : ''
487
  );
488
  echo "\n";
@@ -501,12 +503,12 @@ if (!$columns && support("table")) {
501
  if ($jush != "simpledb") {
502
  echo "<legend><a href='" . h(remove_from_uri("page")) . "'>" . lang('Page') . "</a></legend>";
503
  echo script("qsl('a').onclick = function () { pageClick(this.href, +prompt('" . lang('Page') . "', '" . ($page + 1) . "')); return false; };");
504
- echo pagination(0, $page) . ($page > 5 ? " ..." : "");
505
  for ($i = max(1, $page - 4); $i < min($max_page, $page + 5); $i++) {
506
  echo pagination($i, $page);
507
  }
508
  if ($max_page > 0) {
509
- echo ($page + 5 < $max_page ? " ..." : "");
510
  echo ($exact_count && $found_rows !== false
511
  ? pagination($max_page, $page)
512
  : " <a href='" . h(remove_from_uri("page") . "&page=last") . "' title='~$max_page'>" . lang('last') . "</a>"
@@ -514,9 +516,9 @@ if (!$columns && support("table")) {
514
  }
515
  } else {
516
  echo "<legend>" . lang('Page') . "</legend>";
517
- echo pagination(0, $page) . ($page > 1 ? " ..." : "");
518
  echo ($page ? pagination($page, $page) : "");
519
- echo ($max_page > $page ? pagination($page + 1, $page) . ($max_page > $page + 1 ? " ..." : "") : "");
520
  }
521
  echo "</fieldset>\n";
522
  }
309
  } else {
310
  $backward_keys = $adminer->backwardKeys($TABLE, $table_name);
311
 
312
+ echo "<div class='scrollable'>";
313
  echo "<table id='table' cellspacing='0' class='nowrap checkable'>";
314
  echo script("mixin(qs('#table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true), onkeydown: editingKeydown});");
315
  echo "<thead><tr>" . (!$group && $select
440
  $h_value = h($value !== null ? $value : $row[$key]);
441
  echo "<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]'>");
442
  } else {
443
+ $long = strpos($val, "<i>…</i>");
444
  echo "<td id='$id' data-text='" . ($long ? 2 : ($text ? 1 : 0)) . "'"
445
  . ($editable ? "" : " data-warning='" . h(lang('Use edit link to modify this value.')) . "'")
446
  . ">$val</td>"
460
  exit;
461
  }
462
  echo "</table>\n";
463
+ echo "</div>\n";
464
  }
465
 
466
  if (!is_ajax()) {
484
  if ($pagination) {
485
  echo (($found_rows === false ? count($rows) + 1 : $found_rows - $page * $limit) > $limit
486
  ? '<p><a href="' . h(remove_from_uri("page") . "&page=" . ($page + 1)) . '" class="loadmore">' . lang('Load more data') . '</a>'
487
+ . script("qsl('a').onclick = partial(selectLoadMore, " . (+$limit) . ", '" . lang('Loading') . "');", "")
488
  : ''
489
  );
490
  echo "\n";
503
  if ($jush != "simpledb") {
504
  echo "<legend><a href='" . h(remove_from_uri("page")) . "'>" . lang('Page') . "</a></legend>";
505
  echo script("qsl('a').onclick = function () { pageClick(this.href, +prompt('" . lang('Page') . "', '" . ($page + 1) . "')); return false; };");
506
+ echo pagination(0, $page) . ($page > 5 ? " " : "");
507
  for ($i = max(1, $page - 4); $i < min($max_page, $page + 5); $i++) {
508
  echo pagination($i, $page);
509
  }
510
  if ($max_page > 0) {
511
+ echo ($page + 5 < $max_page ? " " : "");
512
  echo ($exact_count && $found_rows !== false
513
  ? pagination($max_page, $page)
514
  : " <a href='" . h(remove_from_uri("page") . "&page=last") . "' title='~$max_page'>" . lang('last') . "</a>"
516
  }
517
  } else {
518
  echo "<legend>" . lang('Page') . "</legend>";
519
+ echo pagination(0, $page) . ($page > 1 ? " " : "");
520
  echo ($page ? pagination($page, $page) : "");
521
+ echo ($max_page > $page ? pagination($page + 1, $page) . ($max_page > $page + 1 ? " " : "") : "");
522
  }
523
  echo "</fieldset>\n";
524
  }
adminer/adminer/adminer/sql.inc.php CHANGED
@@ -219,7 +219,7 @@ if (!isset($_GET["import"])) {
219
  }
220
  echo "<p>";
221
  textarea("query", $q, 20);
222
- echo ($_POST ? "" : script("qs('textarea').focus();"));
223
  echo "<p>$execute\n";
224
  echo lang('Limit rows') . ": <input type='number' name='limit' class='size' value='" . h($_POST ? $_POST["limit"] : $_GET["limit"]) . "'>\n";
225
 
@@ -231,10 +231,13 @@ if (!isset($_GET["import"])) {
231
  : lang('File uploads are disabled.')
232
  );
233
  echo "</div></fieldset>\n";
234
- echo "<fieldset><legend>" . lang('From server') . "</legend><div>";
235
- echo lang('Webserver file %s', "<code>" . h($adminer->importServerPath()) . "$gz</code>");
236
- echo ' <input type="submit" name="webfile" value="' . lang('Run file') . '">';
237
- echo "</div></fieldset>\n";
 
 
 
238
  echo "<p>";
239
  }
240
 
219
  }
220
  echo "<p>";
221
  textarea("query", $q, 20);
222
+ echo script(($_POST ? "" : "qs('textarea').focus();\n") . "qs('#form').onsubmit = partial(sqlSubmit, qs('#form'), '" . remove_from_uri("sql|limit|error_stops|only_errors") . "');");
223
  echo "<p>$execute\n";
224
  echo lang('Limit rows') . ": <input type='number' name='limit' class='size' value='" . h($_POST ? $_POST["limit"] : $_GET["limit"]) . "'>\n";
225
 
231
  : lang('File uploads are disabled.')
232
  );
233
  echo "</div></fieldset>\n";
234
+ $importServerPath = $adminer->importServerPath();
235
+ if ($importServerPath) {
236
+ echo "<fieldset><legend>" . lang('From server') . "</legend><div>";
237
+ echo lang('Webserver file %s', "<code>" . h($importServerPath) . "$gz</code>");
238
+ echo ' <input type="submit" name="webfile" value="' . lang('Run file') . '">';
239
+ echo "</div></fieldset>\n";
240
+ }
241
  echo "<p>";
242
  }
243
 
adminer/adminer/adminer/static/default.css CHANGED
@@ -66,8 +66,8 @@ input.wayoff { left: -1000px; position: absolute; }
66
  .loadmore { margin-left: 1ex; }
67
  /* .edit used in designs */
68
  #menu { position: absolute; margin: 10px 0 0; padding: 0 0 30px 0; top: 2em; left: 0; width: 19em; }
69
- #menu p, #tables { padding: .8em 1em; margin: 0; border-bottom: 1px solid #ccc; }
70
- #tables li{ list-style: none; }
71
  #dbs { overflow: hidden; }
72
  #logins, #tables { white-space: nowrap; overflow: auto; }
73
  #logins a, #tables a, #tables span { background: #fff; }
66
  .loadmore { margin-left: 1ex; }
67
  /* .edit used in designs */
68
  #menu { position: absolute; margin: 10px 0 0; padding: 0 0 30px 0; top: 2em; left: 0; width: 19em; }
69
+ #menu p, #logins, #tables { padding: .8em 1em; margin: 0; border-bottom: 1px solid #ccc; }
70
+ #logins li, #tables li { list-style: none; }
71
  #dbs { overflow: hidden; }
72
  #logins, #tables { white-space: nowrap; overflow: auto; }
73
  #logins a, #tables a, #tables span { background: #fff; }
adminer/adminer/adminer/static/editing.js CHANGED
@@ -15,7 +15,11 @@ function bodyLoad(version, maria) {
15
  key = 0;
16
  if (maria) {
17
  for (var i = 1; i < obj.length; i++) {
18
- obj[i] = obj[i].replace(/\.html/, '/');
 
 
 
 
19
  }
20
  }
21
  }
@@ -78,6 +82,18 @@ function messagesPrint() {
78
 
79
 
80
 
 
 
 
 
 
 
 
 
 
 
 
 
81
  var dbCtrl;
82
  var dbPrevious = {};
83
 
@@ -444,14 +460,6 @@ function columnShow(checked, column) {
444
  }
445
  }
446
 
447
- /** Hide column with default values in narrow window
448
- */
449
- function editingHideDefaults() {
450
- if (innerWidth < document.documentElement.scrollWidth) {
451
- qs('#form')['defaults'].checked = false;
452
- }
453
- }
454
-
455
  /** Display partition options
456
  * @this HTMLSelectElement
457
  */
@@ -473,14 +481,14 @@ function partitionNameChange() {
473
  }
474
 
475
  /** Show or hide comment fields
 
476
  * @param [boolean] whether to focus Comment if checked
477
- * @this HTMLInputElement
478
  */
479
- function editingCommentsClick(focus) {
480
- var comment = this.form['Comment'];
481
- columnShow(this.checked, 6);
482
- alterClass(comment, 'hidden', !this.checked);
483
- if (focus && this.checked) {
484
  comment.focus();
485
  }
486
  }
@@ -509,8 +517,8 @@ function dumpClick(event) {
509
  * @this HTMLSelectElement
510
  */
511
  function foreignAddRow() {
512
- this.onchange = function () { };
513
  var row = cloneNode(parentTag(this, 'tr'));
 
514
  var selects = qsa('select', row);
515
  for (var i=0; i < selects.length; i++) {
516
  selects[i].name = selects[i].name.replace(/\]/, '1$&');
@@ -525,8 +533,8 @@ function foreignAddRow() {
525
  * @this HTMLSelectElement
526
  */
527
  function indexesAddRow() {
528
- this.onchange = function () { };
529
  var row = cloneNode(parentTag(this, 'tr'));
 
530
  var selects = qsa('select', row);
531
  for (var i=0; i < selects.length; i++) {
532
  selects[i].name = selects[i].name.replace(/indexes\[\d+/, '$&1');
@@ -595,6 +603,23 @@ function indexesAddColumn(prefix) {
595
 
596
 
597
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
598
  /** Handle changing trigger time or event
599
  * @param RegExp
600
  * @param string
15
  key = 0;
16
  if (maria) {
17
  for (var i = 1; i < obj.length; i++) {
18
+ obj[i] = obj[i]
19
+ .replace(/\.html/, '/')
20
+ .replace(/(numeric)(-type-overview)/, '$1-data$2')
21
+ .replace(/#statvar_.*/, '#$$1')
22
+ ;
23
  }
24
  }
25
  }
82
 
83
 
84
 
85
+ /** Hide or show some login rows for selected driver
86
+ * @param HTMLSelectElement
87
+ */
88
+ function loginDriver(driver) {
89
+ var trs = parentTag(driver, 'table').rows;
90
+ var disabled = /sqlite/.test(selectValue(driver));
91
+ alterClass(trs[1], 'hidden', disabled); // 1 - row with server
92
+ trs[1].getElementsByTagName('input')[0].disabled = disabled;
93
+ }
94
+
95
+
96
+
97
  var dbCtrl;
98
  var dbPrevious = {};
99
 
460
  }
461
  }
462
 
 
 
 
 
 
 
 
 
463
  /** Display partition options
464
  * @this HTMLSelectElement
465
  */
481
  }
482
 
483
  /** Show or hide comment fields
484
+ * @param HTMLInputElement
485
  * @param [boolean] whether to focus Comment if checked
 
486
  */
487
+ function editingCommentsClick(el, focus) {
488
+ var comment = el.form['Comment'];
489
+ columnShow(el.checked, 6);
490
+ alterClass(comment, 'hidden', !el.checked);
491
+ if (focus && el.checked) {
492
  comment.focus();
493
  }
494
  }
517
  * @this HTMLSelectElement
518
  */
519
  function foreignAddRow() {
 
520
  var row = cloneNode(parentTag(this, 'tr'));
521
+ this.onchange = function () { };
522
  var selects = qsa('select', row);
523
  for (var i=0; i < selects.length; i++) {
524
  selects[i].name = selects[i].name.replace(/\]/, '1$&');
533
  * @this HTMLSelectElement
534
  */
535
  function indexesAddRow() {
 
536
  var row = cloneNode(parentTag(this, 'tr'));
537
+ this.onchange = function () { };
538
  var selects = qsa('select', row);
539
  for (var i=0; i < selects.length; i++) {
540
  selects[i].name = selects[i].name.replace(/indexes\[\d+/, '$&1');
603
 
604
 
605
 
606
+ /** Updates the form action
607
+ * @param HTMLFormElement
608
+ * @param string
609
+ */
610
+ function sqlSubmit(form, root) {
611
+ if (encodeURIComponent(form['query'].value).length < 2e3) {
612
+ form.action = root
613
+ + '&sql=' + encodeURIComponent(form['query'].value)
614
+ + (form['limit'].value ? '&limit=' + +form['limit'].value : '')
615
+ + (form['error_stops'].checked ? '&error_stops=1' : '')
616
+ + (form['only_errors'].checked ? '&only_errors=1' : '')
617
+ ;
618
+ }
619
+ }
620
+
621
+
622
+
623
  /** Handle changing trigger time or event
624
  * @param RegExp
625
  * @param string
adminer/adminer/adminer/static/functions.js CHANGED
@@ -143,7 +143,7 @@ function selectValue(select) {
143
  */
144
  function isTag(el, tag) {
145
  var re = new RegExp('^(' + tag + ')$', 'i');
146
- return re.test(el.tagName);
147
  }
148
 
149
  /** Get parent node with specified tag name
@@ -491,6 +491,9 @@ function bodyKeydown(event, button) {
491
  if (button) {
492
  target.form[button].click();
493
  } else {
 
 
 
494
  target.form.submit();
495
  }
496
  target.focus();
@@ -540,20 +543,22 @@ function editingKeydown(event) {
540
  */
541
  function functionChange() {
542
  var input = this.form[this.name.replace(/^function/, 'fields')];
543
- if (selectValue(this)) {
544
- if (input.origType === undefined) {
545
- input.origType = input.type;
546
- input.origMaxLength = input.getAttribute('data-maxlength');
547
- }
548
- input.removeAttribute('data-maxlength');
549
- input.type = 'text';
550
- } else if (input.origType) {
551
- input.type = input.origType;
552
- if (input.origMaxLength >= 0) {
553
- input.setAttribute('data-maxlength', input.origMaxLength);
 
 
554
  }
 
555
  }
556
- oninput({target: input});
557
  helpClose();
558
  }
559
 
@@ -702,7 +707,7 @@ function selectClick(event, text, warning) {
702
  }
703
  };
704
  var pos = event.rangeOffset;
705
- var value = td.firstChild.alt || td.textContent || td.innerText;
706
  input.style.width = Math.max(td.clientWidth - 14, 20) + 'px'; // 14 = 2 * (td.border + td.padding + input.border)
707
  if (text) {
708
  var rows = 1;
143
  */
144
  function isTag(el, tag) {
145
  var re = new RegExp('^(' + tag + ')$', 'i');
146
+ return el && re.test(el.tagName);
147
  }
148
 
149
  /** Get parent node with specified tag name
491
  if (button) {
492
  target.form[button].click();
493
  } else {
494
+ if (target.form.onsubmit) {
495
+ target.form.onsubmit();
496
+ }
497
  target.form.submit();
498
  }
499
  target.focus();
543
  */
544
  function functionChange() {
545
  var input = this.form[this.name.replace(/^function/, 'fields')];
546
+ if (input) { // undefined with the set data type
547
+ if (selectValue(this)) {
548
+ if (input.origType === undefined) {
549
+ input.origType = input.type;
550
+ input.origMaxLength = input.getAttribute('data-maxlength');
551
+ }
552
+ input.removeAttribute('data-maxlength');
553
+ input.type = 'text';
554
+ } else if (input.origType) {
555
+ input.type = input.origType;
556
+ if (input.origMaxLength >= 0) {
557
+ input.setAttribute('data-maxlength', input.origMaxLength);
558
+ }
559
  }
560
+ oninput({target: input});
561
  }
 
562
  helpClose();
563
  }
564
 
707
  }
708
  };
709
  var pos = event.rangeOffset;
710
+ var value = (td.firstChild && td.firstChild.alt) || td.textContent || td.innerText;
711
  input.style.width = Math.max(td.clientWidth - 14, 20) + 'px'; // 14 = 2 * (td.border + td.padding + input.border)
712
  if (text) {
713
  var rows = 1;
adminer/adminer/adminer/trigger.inc.php CHANGED
@@ -33,13 +33,13 @@ page_header(($name != "" ? lang('Alter trigger') . ": " . h($name) : lang('Creat
33
  ?>
34
 
35
  <form action="" method="post" id="form">
36
- <table cellspacing="0">
37
  <tr><th><?php echo lang('Time'); ?><td><?php echo html_select("Timing", $trigger_options["Timing"], $row["Timing"], "triggerChange(/^" . preg_quote($TABLE, "/") . "_[ba][iud]$/, '" . js_escape($TABLE) . "', this.form);"); ?>
38
  <tr><th><?php echo lang('Event'); ?><td><?php echo html_select("Event", $trigger_options["Event"], $row["Event"], "this.form['Timing'].onchange();"); ?>
39
  <?php echo (in_array("UPDATE OF", $trigger_options["Event"]) ? " <input name='Of' value='" . h($row["Of"]) . "' class='hidden'>": ""); ?>
40
  <tr><th><?php echo lang('Type'); ?><td><?php echo html_select("Type", $trigger_options["Type"], $row["Type"]); ?>
41
  </table>
42
- <p><?php echo lang('Name'); ?>: <input name="Trigger" value="<?php echo h($row["Trigger"]); ?>" maxlength="64" autocapitalize="off">
43
  <?php echo script("qs('#form')['Timing'].onchange();"); ?>
44
  <p><?php textarea("Statement", $row["Statement"]); ?>
45
  <p>
33
  ?>
34
 
35
  <form action="" method="post" id="form">
36
+ <table cellspacing="0" class="layout">
37
  <tr><th><?php echo lang('Time'); ?><td><?php echo html_select("Timing", $trigger_options["Timing"], $row["Timing"], "triggerChange(/^" . preg_quote($TABLE, "/") . "_[ba][iud]$/, '" . js_escape($TABLE) . "', this.form);"); ?>
38
  <tr><th><?php echo lang('Event'); ?><td><?php echo html_select("Event", $trigger_options["Event"], $row["Event"], "this.form['Timing'].onchange();"); ?>
39
  <?php echo (in_array("UPDATE OF", $trigger_options["Event"]) ? " <input name='Of' value='" . h($row["Of"]) . "' class='hidden'>": ""); ?>
40
  <tr><th><?php echo lang('Type'); ?><td><?php echo html_select("Type", $trigger_options["Type"], $row["Type"]); ?>
41
  </table>
42
+ <p><?php echo lang('Name'); ?>: <input name="Trigger" value="<?php echo h($row["Trigger"]); ?>" data-maxlength="64" autocapitalize="off">
43
  <?php echo script("qs('#form')['Timing'].onchange();"); ?>
44
  <p><?php textarea("Statement", $row["Statement"]); ?>
45
  <p>
adminer/adminer/adminer/user.inc.php CHANGED
@@ -131,9 +131,9 @@ if ($_POST) {
131
 
132
  ?>
133
  <form action="" method="post">
134
- <table cellspacing="0">
135
- <tr><th><?php echo lang('Server'); ?><td><input name="host" maxlength="60" value="<?php echo h($row["host"]); ?>" autocapitalize="off">
136
- <tr><th><?php echo lang('Username'); ?><td><input name="user" maxlength="16" value="<?php echo h($row["user"]); ?>" autocapitalize="off">
137
  <tr><th><?php echo lang('Password'); ?><td><input name="pass" id="pass" value="<?php echo h($row["pass"]); ?>" autocomplete="new-password">
138
  <?php if (!$row["hashed"]) { echo script("typePassword(qs('#pass'));"); } ?>
139
  <?php echo checkbox("hashed", 1, $row["hashed"], lang('Hashed'), "typePassword(this.form['pass'], this.checked);"); ?>
131
 
132
  ?>
133
  <form action="" method="post">
134
+ <table cellspacing="0" class="layout">
135
+ <tr><th><?php echo lang('Server'); ?><td><input name="host" data-maxlength="60" value="<?php echo h($row["host"]); ?>" autocapitalize="off">
136
+ <tr><th><?php echo lang('Username'); ?><td><input name="user" data-maxlength="80" value="<?php echo h($row["user"]); ?>" autocapitalize="off">
137
  <tr><th><?php echo lang('Password'); ?><td><input name="pass" id="pass" value="<?php echo h($row["pass"]); ?>" autocomplete="new-password">
138
  <?php if (!$row["hashed"]) { echo script("typePassword(qs('#pass'));"); } ?>
139
  <?php echo checkbox("hashed", 1, $row["hashed"], lang('Hashed'), "typePassword(this.form['pass'], this.checked);"); ?>
adminer/adminer/adminer/view.inc.php CHANGED
@@ -48,7 +48,7 @@ page_header(($TABLE != "" ? lang('Alter view') : lang('Create view')), $error, a
48
  ?>
49
 
50
  <form action="" method="post">
51
- <p><?php echo lang('Name'); ?>: <input name="name" value="<?php echo h($row["name"]); ?>" maxlength="64" autocapitalize="off">
52
  <?php echo (support("materializedview") ? " " . checkbox("materialized", 1, $row["materialized"], lang('Materialized view')) : ""); ?>
53
  <p><?php textarea("select", $row["select"]); ?>
54
  <p>
48
  ?>
49
 
50
  <form action="" method="post">
51
+ <p><?php echo lang('Name'); ?>: <input name="name" value="<?php echo h($row["name"]); ?>" data-maxlength="64" autocapitalize="off">
52
  <?php echo (support("materializedview") ? " " . checkbox("materialized", 1, $row["materialized"], lang('Materialized view')) : ""); ?>
53
  <p><?php textarea("select", $row["select"]); ?>
54
  <p>
adminer/adminer/editor/db.inc.php CHANGED
@@ -7,6 +7,7 @@ if ($adminer->homepage()) {
7
  if ($_POST["query"] != "") {
8
  search_tables();
9
  }
 
10
  echo "<table cellspacing='0' class='nowrap checkable'>\n";
11
  echo script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});");
12
  echo '<thead><tr class="wrap">';
@@ -26,6 +27,7 @@ if ($adminer->homepage()) {
26
  }
27
 
28
  echo "</table>\n";
 
29
  echo "</form>\n";
30
  echo script("tableCheck();");
31
  }
7
  if ($_POST["query"] != "") {
8
  search_tables();
9
  }
10
+ echo "<div class='scrollable'>\n";
11
  echo "<table cellspacing='0' class='nowrap checkable'>\n";
12
  echo script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});");
13
  echo '<thead><tr class="wrap">';
27
  }
28
 
29
  echo "</table>\n";
30
+ echo "</div>\n";
31
  echo "</form>\n";
32
  echo script("tableCheck();");
33
  }
adminer/adminer/editor/include/adminer.inc.php CHANGED
@@ -71,9 +71,9 @@ class Adminer {
71
  }
72
 
73
  function loginForm() {
74
- echo "<table cellspacing='0'>\n";
75
- echo $this->loginFormField('username', '<tr><th>' . lang('Username') . '<td>', '<input type="hidden" name="auth[driver]" value="server"><input name="auth[username]" id="username" value="' . h($_GET["username"]) . '" autocapitalize="off">' . script("focus(qs('#username'));"));
76
- echo $this->loginFormField('password', '<tr><th>' . lang('Password') . '<td>', '<input type="password" name="auth[password]">' . "\n");
77
  echo "</table>\n";
78
  echo "<p><input type='submit' value='" . lang('Login') . "'>\n";
79
  echo checkbox("auth[permanent]", 1, $_COOKIE["adminer_permanent"], lang('Permanent login')) . "\n";
@@ -485,7 +485,7 @@ qsl('div').onclick = whisperClick;", "")
485
  );
486
  }
487
  if (like_bool($field)) {
488
- return '<input type="checkbox" value="' . h($value ? $value : 1) . '"' . (preg_match('~^(1|t|true|y|yes|on)$~i', $value) ? ' checked' : '') . "$attrs>";
489
  }
490
  $hint = "";
491
  if (preg_match('~time~', $field["type"])) {
@@ -517,7 +517,7 @@ qsl('div').onclick = whisperClick;", "")
517
  }
518
  $return = ($field["type"] == "bit" && preg_match('~^[0-9]+$~', $value) ? $return : q($return));
519
  if ($value == "" && like_bool($field)) {
520
- $return = "0";
521
  } elseif ($value == "" && ($field["null"] || !preg_match('~char|text~', $field["type"]))) {
522
  $return = "NULL";
523
  } elseif (preg_match('~^(md5|sha1)$~', $function)) {
@@ -586,11 +586,11 @@ qsl('div').onclick = whisperClick;", "")
586
  foreach ($servers[""] as $username => $password) {
587
  if ($password !== null) {
588
  if ($first) {
589
- echo "<p id='logins'>";
590
  echo script("mixin(qs('#logins'), {onmouseover: menuOver, onmouseout: menuOut});");
591
  $first = false;
592
  }
593
- echo "<a href='" . h(auth_url($vendor, "", $username)) . "'>" . ($username != "" ? h($username) : "<i>" . lang('empty') . "</i>") . "</a><br>\n";
594
  }
595
  }
596
  }
71
  }
72
 
73
  function loginForm() {
74
+ echo "<table cellspacing='0' class='layout'>\n";
75
+ echo $this->loginFormField('username', '<tr><th>' . lang('Username') . '<td>', '<input type="hidden" name="auth[driver]" value="server"><input name="auth[username]" id="username" value="' . h($_GET["username"]) . '" autocomplete="username" autocapitalize="off">' . script("focus(qs('#username'));"));
76
+ echo $this->loginFormField('password', '<tr><th>' . lang('Password') . '<td>', '<input type="password" name="auth[password]" autocomplete="current-password">' . "\n");
77
  echo "</table>\n";
78
  echo "<p><input type='submit' value='" . lang('Login') . "'>\n";
79
  echo checkbox("auth[permanent]", 1, $_COOKIE["adminer_permanent"], lang('Permanent login')) . "\n";
485
  );
486
  }
487
  if (like_bool($field)) {
488
+ return '<input type="checkbox" value="1"' . (preg_match('~^(1|t|true|y|yes|on)$~i', $value) ? ' checked' : '') . "$attrs>";
489
  }
490
  $hint = "";
491
  if (preg_match('~time~', $field["type"])) {
517
  }
518
  $return = ($field["type"] == "bit" && preg_match('~^[0-9]+$~', $value) ? $return : q($return));
519
  if ($value == "" && like_bool($field)) {
520
+ $return = "'0'";
521
  } elseif ($value == "" && ($field["null"] || !preg_match('~char|text~', $field["type"]))) {
522
  $return = "NULL";
523
  } elseif (preg_match('~^(md5|sha1)$~', $function)) {
586
  foreach ($servers[""] as $username => $password) {
587
  if ($password !== null) {
588
  if ($first) {
589
+ echo "<ul id='logins'>";
590
  echo script("mixin(qs('#logins'), {onmouseover: menuOver, onmouseout: menuOut});");
591
  $first = false;
592
  }
593
+ echo "<li><a href='" . h(auth_url($vendor, "", $username)) . "'>" . ($username != "" ? h($username) : "<i>" . lang('empty') . "</i>") . "</a>\n";
594
  }
595
  }
596
  }
adminer/adminer/editor/static/editing.js CHANGED
@@ -55,8 +55,8 @@ function whisperClick(event) {
55
  * @this HTMLInputElement
56
  */
57
  function emailFileChange() {
58
- this.onchange = function () { };
59
  var el = this.cloneNode(true);
 
60
  el.value = '';
61
  this.parentNode.appendChild(el);
62
  }
55
  * @this HTMLInputElement
56
  */
57
  function emailFileChange() {
 
58
  var el = this.cloneNode(true);
59
+ this.onchange = function () { };
60
  el.value = '';
61
  this.parentNode.appendChild(el);
62
  }
adminer/adminer/plugins/slugify.php CHANGED
@@ -34,7 +34,7 @@ class AdminerSlugify {
34
  }
35
  $slug = $slugify[$field["field"]];
36
  if ($slug !== null) {
37
- return "<input value='" . h($value) . "' maxlength='$field[length]' size='40'$attrs>"
38
  . script("qsl('input').onchange = function () {
39
  var find = '$this->from';
40
  var repl = '$this->to';
34
  }
35
  $slug = $slugify[$field["field"]];
36
  if ($slug !== null) {
37
+ return "<input value='" . h($value) . "' data-maxlength='$field[length]' size='40'$attrs>"
38
  . script("qsl('input').onchange = function () {
39
  var find = '$this->from';
40
  var repl = '$this->to';
adminer/adminer/plugins/tables-filter.php CHANGED
@@ -53,7 +53,7 @@ function tablesFilterInput() {
53
  tablesFilterTimeout = window.setTimeout(tablesFilter, 200);
54
  }
55
 
56
- if (sessionStorage){
57
  var db = qs('#dbs').querySelector('select');
58
  db = db.options[db.selectedIndex].text;
59
  if (db == sessionStorage.getItem('adminer_tables_filter_db') && sessionStorage.getItem('adminer_tables_filter')){
@@ -61,7 +61,7 @@ if (sessionStorage){
61
  tablesFilter();
62
  }
63
  sessionStorage.setItem('adminer_tables_filter_db', db);
64
- }
65
  </script>
66
  <p class="jsonly"><input id="filter-field" autocomplete="off"><?php echo script("qs('#filter-field').oninput = tablesFilterInput;"); ?>
67
  <?php
53
  tablesFilterTimeout = window.setTimeout(tablesFilter, 200);
54
  }
55
 
56
+ sessionStorage && document.addEventListener('DOMContentLoaded', function () {
57
  var db = qs('#dbs').querySelector('select');
58
  db = db.options[db.selectedIndex].text;
59
  if (db == sessionStorage.getItem('adminer_tables_filter_db') && sessionStorage.getItem('adminer_tables_filter')){
61
  tablesFilter();
62
  }
63
  sessionStorage.setItem('adminer_tables_filter_db', db);
64
+ });
65
  </script>
66
  <p class="jsonly"><input id="filter-field" autocomplete="off"><?php echo script("qs('#filter-field').oninput = tablesFilterInput;"); ?>
67
  <?php
ari-adminer.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: ARI Adminer
4
  Plugin URI: http://wp-quiz.ari-soft.com/plugins/wordpress-adminer.html
5
  Description: Powerful, compact and easy to use database manager plugin for WordPress.
6
- Version: 1.1.12
7
  Author: ARI Soft
8
  Author URI: http://www.ari-soft.com
9
  Text Domain: ari-adminer
3
  Plugin Name: ARI Adminer
4
  Plugin URI: http://wp-quiz.ari-soft.com/plugins/wordpress-adminer.html
5
  Description: Powerful, compact and easy to use database manager plugin for WordPress.
6
+ Version: 1.1.13
7
  Author: ARI Soft
8
  Author URI: http://www.ari-soft.com
9
  Text Domain: ari-adminer
includes/defines.php CHANGED
@@ -1,5 +1,5 @@
1
  <?php
2
- define( 'ARIADMINER_VERSION', '1.1.12' );
3
  define( 'ARIADMINER_SLUG', 'ari-adminer' );
4
  define( 'ARIADMINER_ASSETS_URL', ARIADMINER_URL . 'assets/' );
5
  define( 'ARIADMINER_VERSION_OPTION', 'ari_adminer' );
1
  <?php
2
+ define( 'ARIADMINER_VERSION', '1.1.13' );
3
  define( 'ARIADMINER_SLUG', 'ari-adminer' );
4
  define( 'ARIADMINER_ASSETS_URL', ARIADMINER_URL . 'assets/' );
5
  define( 'ARIADMINER_VERSION_OPTION', 'ari_adminer' );
readme.txt CHANGED
@@ -3,8 +3,8 @@ Contributors: arisoft
3
  Donate link: http://wp-quiz.ari-soft.com/plugins/wordpress-adminer.html
4
  Tags: adminer, sql, database, mysql, report, sqlite, table, postgresql, dump, backup, import, export, phpmyadmin
5
  Requires at least: 3.4
6
- Tested up to: 4.9.8
7
- Stable tag: 1.1.12
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -74,6 +74,9 @@ Sure, it is available [here](http://www.ari-soft.com/docs/wordpress/ari-adminer/
74
 
75
  == Changelog ==
76
 
 
 
 
77
  = 1.1.12 =
78
  * Update Adminer to v. 4.6.3
79
 
@@ -145,6 +148,9 @@ Sure, it is available [here](http://www.ari-soft.com/docs/wordpress/ari-adminer/
145
 
146
  == Upgrade Notice ==
147
 
 
 
 
148
  = 1.1.12 =
149
  * Update Adminer to v. 4.6.3
150
 
3
  Donate link: http://wp-quiz.ari-soft.com/plugins/wordpress-adminer.html
4
  Tags: adminer, sql, database, mysql, report, sqlite, table, postgresql, dump, backup, import, export, phpmyadmin
5
  Requires at least: 3.4
6
+ Tested up to: 5.1.1
7
+ Stable tag: 1.1.13
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
74
 
75
  == Changelog ==
76
 
77
+ = 1.1.13 =
78
+ * Update Adminer to v. .4.7.1
79
+
80
  = 1.1.12 =
81
  * Update Adminer to v. 4.6.3
82
 
148
 
149
  == Upgrade Notice ==
150
 
151
+ = 1.1.13 =
152
+ * Update Adminer to v. .4.7.1
153
+
154
  = 1.1.12 =
155
  * Update Adminer to v. 4.6.3
156