mirror of
https://github.com/vrana/adminer.git
synced 2025-08-31 10:01:50 +02:00
Compare commits
78 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
6aed2f510a | ||
|
c7f444049d | ||
|
2e9ac3ba75 | ||
|
bc466f7f85 | ||
|
15ea9bba81 | ||
|
c2ae381aaf | ||
|
96c8e6fb71 | ||
|
ba7af8e31c | ||
|
794ba74be4 | ||
|
3ac662c755 | ||
|
ee124dadb1 | ||
|
06f4346cfe | ||
|
619b49c3d4 | ||
|
cd64b707bd | ||
|
6980d1a1d2 | ||
|
00da70626d | ||
|
4d491d704e | ||
|
73629178d8 | ||
|
8670cfc31b | ||
|
bbcc8f141d | ||
|
2f881b2674 | ||
|
46bb56cab9 | ||
|
fc668ea326 | ||
|
95b0237061 | ||
|
fa01efa059 | ||
|
6a3ede75f6 | ||
|
d9fe03e1b4 | ||
|
67a29ff495 | ||
|
828a54deba | ||
|
fd4344c866 | ||
|
c369236333 | ||
|
a710c28d38 | ||
|
8ea900534f | ||
|
4c5667b93f | ||
|
7da82a12a6 | ||
|
9567e5cb1a | ||
|
052b019210 | ||
|
4d8667db7b | ||
|
0fdedcbaa5 | ||
|
7639ff8b95 | ||
|
990b3b8ccc | ||
|
2b78d06646 | ||
|
1088cc5dca | ||
|
8e4882b801 | ||
|
d53ffc2158 | ||
|
ef81b5c1b2 | ||
|
849f9259b8 | ||
|
1602db304a | ||
|
822f3f2498 | ||
|
150301ed5f | ||
|
3e2288eee5 | ||
|
f4592e3603 | ||
|
cbb612aaaa | ||
|
38f4735758 | ||
|
6acf188c2f | ||
|
125b519937 | ||
|
d5a2afeef7 | ||
|
147957cef7 | ||
|
adae922f36 | ||
|
81037ca4fb | ||
|
7e9725782d | ||
|
32d542b633 | ||
|
bb7331e6a0 | ||
|
60c8ec61e3 | ||
|
e9b5616657 | ||
|
24eb008794 | ||
|
9edfe6d1ff | ||
|
91bb94eda6 | ||
|
63a04ff753 | ||
|
c106cf2a34 | ||
|
5136b62e84 | ||
|
ed13006512 | ||
|
9824540ed8 | ||
|
48848de529 | ||
|
2a9a50553b | ||
|
4bab88a1a0 | ||
|
f301fc2dcd | ||
|
b99148daeb |
9
.gitmodules
vendored
9
.gitmodules
vendored
@@ -1,15 +1,6 @@
|
||||
[submodule "jush"]
|
||||
path = externals/jush
|
||||
url = git://git.code.sf.net/p/jush/git
|
||||
[submodule "tinymce"]
|
||||
path = externals/tinymce
|
||||
url = git://github.com/tinymce/tinymce.git
|
||||
[submodule "jquery-ui"]
|
||||
path = externals/jquery-ui
|
||||
url = git://github.com/jquery/jquery-ui.git
|
||||
[submodule "jquery-timepicker"]
|
||||
path = externals/jquery-timepicker
|
||||
url = git://github.com/trentrichardson/jQuery-Timepicker-Addon.git
|
||||
[submodule "wymeditor"]
|
||||
path = externals/wymeditor
|
||||
url = git://github.com/wymeditor/wymeditor.git
|
||||
|
@@ -123,7 +123,7 @@ if ($adminer->homepage()) {
|
||||
. "<input type='submit' name='check' value='" . lang('Check') . "'" . on_help("'CHECK TABLE'") . "> "
|
||||
. "<input type='submit' name='repair' value='" . lang('Repair') . "'" . on_help("'REPAIR TABLE'") . "> "
|
||||
: "")))
|
||||
. (support("table") ? "<input type='submit' name='truncate' value='" . lang('Truncate') . "'" . confirm() . on_help($jush == "sqlite" ? "'DELETE'" : "'TRUNCATE" . ($jush == "pgsql" ? "'" : " TABLE'")) . "> " : "")
|
||||
. "<input type='submit' name='truncate' value='" . lang('Truncate') . "'" . confirm() . on_help($jush == "sqlite" ? "'DELETE'" : "'TRUNCATE" . ($jush == "pgsql" ? "'" : " TABLE'")) . "> "
|
||||
. "<input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm() . on_help("'DROP TABLE'") . ">\n";
|
||||
$databases = (support("scheme") ? $adminer->schemas() : $adminer->databases());
|
||||
if (count($databases) != 1 && $jush != "sqlite") {
|
||||
|
@@ -3,5 +3,8 @@ $TABLE = $_GET["download"];
|
||||
$fields = fields($TABLE);
|
||||
header("Content-Type: application/octet-stream");
|
||||
header("Content-Disposition: attachment; filename=" . friendly_url("$TABLE-" . implode("_", $_GET["where"])) . "." . friendly_url($_GET["field"]));
|
||||
echo $connection->result("SELECT" . limit(idf_escape($_GET["field"]) . " FROM " . table($TABLE), " WHERE " . where($_GET, $fields), 1));
|
||||
$select = array(idf_escape($_GET["field"]));
|
||||
$result = $driver->select($TABLE, $select, array(where($_GET, $fields)), $select);
|
||||
$row = ($result ? $result->fetch_row() : array());
|
||||
echo $row[0];
|
||||
exit; // don't output footer
|
||||
|
@@ -9,9 +9,15 @@ if (isset($_GET["elastic"])) {
|
||||
class Min_DB {
|
||||
var $extension = "JSON", $server_info, $errno, $error, $_url;
|
||||
|
||||
function query($path, $content = array(), $method = 'GET') {
|
||||
/** Performs query
|
||||
* @param string
|
||||
* @param array
|
||||
* @param string
|
||||
* @return mixed
|
||||
*/
|
||||
function rootQuery($path, $content = array(), $method = 'GET') {
|
||||
@ini_set('track_errors', 1); // @ - may be disabled
|
||||
$file = @file_get_contents($this->_url . ($this->_db != "" ? "$this->_db/" : "") . $path, false, stream_context_create(array('http' => array(
|
||||
$file = @file_get_contents($this->_url . '/' . ltrim($path, '/'), false, stream_context_create(array('http' => array(
|
||||
'method' => $method,
|
||||
'content' => json_encode($content),
|
||||
'ignore_errors' => 1, // available since PHP 5.2.10
|
||||
@@ -42,6 +48,16 @@ if (isset($_GET["elastic"])) {
|
||||
return $return;
|
||||
}
|
||||
|
||||
/** Performs query relative to actual selected DB
|
||||
* @param string
|
||||
* @param array
|
||||
* @param string
|
||||
* @return mixed
|
||||
*/
|
||||
function query($path, $content = array(), $method = 'GET') {
|
||||
return $this->rootQuery(($this->_db != "" ? "$this->_db/" : "/") . ltrim($path, '/'), $content, $method);
|
||||
}
|
||||
|
||||
function connect($server, $username, $password) {
|
||||
$this->_url = "http://$username:$password@$server/";
|
||||
$return = $this->query('');
|
||||
@@ -89,7 +105,7 @@ if (isset($_GET["elastic"])) {
|
||||
|
||||
class Min_Driver extends Min_SQL {
|
||||
|
||||
function select($table, $select, $where, $group, $order, $limit, $page, $print = false) {
|
||||
function select($table, $select, $where, $group, $order = array(), $limit = 1, $page = 0, $print = false) {
|
||||
global $adminer;
|
||||
$data = array();
|
||||
$query = "$table/_search";
|
||||
@@ -123,10 +139,11 @@ if (isset($_GET["elastic"])) {
|
||||
if ($data["query"] && !$data["query"]["filtered"]["query"]) {
|
||||
$data["query"]["filtered"]["query"] = array("match_all" => array());
|
||||
}
|
||||
if ($print) {
|
||||
echo $adminer->selectQuery("$query: " . print_r($data, true));
|
||||
}
|
||||
$start = microtime(true);
|
||||
$search = $this->_conn->query($query, $data);
|
||||
if ($print) {
|
||||
echo $adminer->selectQuery("$query: " . print_r($data, true), format_time($start));
|
||||
}
|
||||
if (!$search) {
|
||||
return false;
|
||||
}
|
||||
@@ -174,7 +191,7 @@ if (isset($_GET["elastic"])) {
|
||||
|
||||
function get_databases() {
|
||||
global $connection;
|
||||
$return = $connection->query('_aliases');
|
||||
$return = $connection->rootQuery('_aliases');
|
||||
if ($return) {
|
||||
$return = array_keys($return);
|
||||
}
|
||||
@@ -207,12 +224,26 @@ if (isset($_GET["elastic"])) {
|
||||
}
|
||||
|
||||
function table_status($name = "", $fast = false) {
|
||||
$return = tables_list();
|
||||
if ($return) {
|
||||
foreach ($return as $key => $type) { // _stats have just info about database
|
||||
$return[$key] = array("Name" => $key, "Engine" => $type);
|
||||
global $connection;
|
||||
$search = $connection->query("_search?search_type=count", array(
|
||||
"facets" => array(
|
||||
"count_by_type" => array(
|
||||
"terms" => array(
|
||||
"field" => "_type",
|
||||
)
|
||||
)
|
||||
)
|
||||
), "POST");
|
||||
$return = array();
|
||||
if ($search) {
|
||||
foreach ($search["facets"]["count_by_type"]["terms"] as $table) {
|
||||
$return[$table["term"]] = array(
|
||||
"Name" => $table["term"],
|
||||
"Engine" => "table",
|
||||
"Rows" => $table["count"],
|
||||
);
|
||||
}
|
||||
if ($name != "") {
|
||||
if ($name != "" && $name == $table["term"]) {
|
||||
return $return[$name];
|
||||
}
|
||||
}
|
||||
@@ -285,7 +316,7 @@ if (isset($_GET["elastic"])) {
|
||||
*/
|
||||
function create_database($db) {
|
||||
global $connection;
|
||||
return $connection->query(urlencode($db), array(), 'PUT');
|
||||
return $connection->rootQuery(urlencode($db), array(), 'PUT');
|
||||
}
|
||||
|
||||
/** Drop databases
|
||||
@@ -294,7 +325,7 @@ if (isset($_GET["elastic"])) {
|
||||
*/
|
||||
function drop_databases($databases) {
|
||||
global $connection;
|
||||
return $connection->query(urlencode(implode(',', $databases)), array(), 'DELETE');
|
||||
return $connection->rootQuery(urlencode(implode(',', $databases)), array(), 'DELETE');
|
||||
}
|
||||
|
||||
/** Drop tables
|
||||
|
@@ -7,7 +7,7 @@ if (isset($_GET["mongo"])) {
|
||||
|
||||
if (class_exists('MongoDB')) {
|
||||
class Min_DB {
|
||||
var $extension = "Mongo", $error, $_link, $_db;
|
||||
var $extension = "Mongo", $error, $last_id, $_link, $_db;
|
||||
|
||||
function connect($server, $username, $password) {
|
||||
global $adminer;
|
||||
@@ -114,7 +114,13 @@ if (isset($_GET["mongo"])) {
|
||||
|
||||
|
||||
class Min_Driver extends Min_SQL {
|
||||
function select($table, $select, $where, $group, $order, $limit, $page, $print = false) {
|
||||
public $primary = "_id";
|
||||
|
||||
function quote($value) {
|
||||
return ($value === null ? $value : parent::quote($value));
|
||||
}
|
||||
|
||||
function select($table, $select, $where, $group, $order = array(), $limit = 1, $page = 0, $print = false) {
|
||||
$select = ($select == array("*")
|
||||
? array()
|
||||
: array_fill_keys($select, true)
|
||||
@@ -124,12 +130,12 @@ if (isset($_GET["mongo"])) {
|
||||
$val = preg_replace('~ DESC$~', '', $val, 1, $count);
|
||||
$sort[$val] = ($count ? -1 : 1);
|
||||
}
|
||||
return new Min_Result(iterator_to_array($this->_conn->_db->selectCollection($table)
|
||||
return new Min_Result($this->_conn->_db->selectCollection($table)
|
||||
->find(array(), $select)
|
||||
->sort($sort)
|
||||
->limit(+$limit)
|
||||
->skip($page * $limit)
|
||||
));
|
||||
);
|
||||
}
|
||||
|
||||
function insert($table, $set) {
|
||||
@@ -137,6 +143,7 @@ if (isset($_GET["mongo"])) {
|
||||
$return = $this->_conn->_db->selectCollection($table)->insert($set);
|
||||
$this->_conn->errno = $return['code'];
|
||||
$this->_conn->error = $return['err'];
|
||||
$this->_conn->last_id = $set['_id'];
|
||||
return !$return['err'];
|
||||
} catch (Exception $ex) {
|
||||
$this->_conn->error = $ex->getMessage();
|
||||
@@ -238,6 +245,7 @@ if (isset($_GET["mongo"])) {
|
||||
$return[$index["name"]] = array(
|
||||
"type" => ($index["name"] == "_id_" ? "PRIMARY" : ($index["unique"] ? "UNIQUE" : "INDEX")),
|
||||
"columns" => array_keys($index["key"]),
|
||||
"lengths" => array(),
|
||||
"descs" => $descs,
|
||||
);
|
||||
}
|
||||
@@ -245,7 +253,7 @@ if (isset($_GET["mongo"])) {
|
||||
}
|
||||
|
||||
function fields($table) {
|
||||
return array();
|
||||
return fields_from_edit();
|
||||
}
|
||||
|
||||
function convert_field($field) {
|
||||
@@ -302,6 +310,37 @@ if (isset($_GET["mongo"])) {
|
||||
return true;
|
||||
}
|
||||
|
||||
function alter_indexes($table, $alter) {
|
||||
global $connection;
|
||||
foreach ($alter as $val) {
|
||||
list($type, $name, $set) = $val;
|
||||
if ($set == "DROP") {
|
||||
$return = $connection->_db->command(array("deleteIndexes" => $table, "index" => $name));
|
||||
} else {
|
||||
$columns = array();
|
||||
foreach ($set as $column) {
|
||||
$column = preg_replace('~ DESC$~', '', $column, 1, $count);
|
||||
$columns[$column] = ($count ? -1 : 1);
|
||||
}
|
||||
$return = $connection->_db->selectCollection($table)->ensureIndex($columns, array(
|
||||
"unique" => ($type == "UNIQUE"),
|
||||
"name" => $name,
|
||||
//! "sparse"
|
||||
));
|
||||
}
|
||||
if ($return['errmsg']) {
|
||||
$connection->error = $return['errmsg'];
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function last_id() {
|
||||
global $connection;
|
||||
return $connection->last_id;
|
||||
}
|
||||
|
||||
function table($idf) {
|
||||
return $idf;
|
||||
}
|
||||
|
@@ -480,7 +480,7 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
||||
} elseif (!queries(($val[0] != "PRIMARY"
|
||||
? "CREATE $val[0] " . ($val[0] != "INDEX" ? "INDEX " : "") . idf_escape($val[1] != "" ? $val[1] : uniqid($table . "_")) . " ON " . table($table)
|
||||
: "ALTER TABLE " . table($table) . " ADD PRIMARY KEY"
|
||||
) . " $val[2]")) {
|
||||
) . " (" . implode(", ", $val[2]) . ")")) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -567,6 +567,7 @@ WHERE sys1.xtype = 'TR' AND sys2.name = " . q($table)
|
||||
function trigger_options() {
|
||||
return array(
|
||||
"Timing" => array("AFTER", "INSTEAD OF"),
|
||||
"Event" => array("INSERT", "UPDATE", "DELETE"),
|
||||
"Type" => array("AS"),
|
||||
);
|
||||
}
|
||||
|
@@ -672,14 +672,14 @@ if (!defined("DRIVER")) {
|
||||
|
||||
/** Run commands to alter indexes
|
||||
* @param string escaped table name
|
||||
* @param array of array("index type", "name", "(columns definition)") or array("index type", "name", "DROP")
|
||||
* @param array of array("index type", "name", array("column definition", ...)) or array("index type", "name", "DROP")
|
||||
* @return bool
|
||||
*/
|
||||
function alter_indexes($table, $alter) {
|
||||
foreach ($alter as $key => $val) {
|
||||
$alter[$key] = ($val[2] == "DROP"
|
||||
? "\nDROP INDEX " . idf_escape($val[1])
|
||||
: "\nADD $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "") . ($val[1] != "" ? idf_escape($val[1]) . " " : "") . $val[2]
|
||||
: "\nADD $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "") . ($val[1] != "" ? idf_escape($val[1]) . " " : "") . "(" . implode(", ", $val[2]) . ")"
|
||||
);
|
||||
}
|
||||
return queries("ALTER TABLE " . table($table) . implode(",", $alter));
|
||||
@@ -734,7 +734,7 @@ if (!defined("DRIVER")) {
|
||||
queries("SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'");
|
||||
foreach ($tables as $table) {
|
||||
$name = ($target == DB ? table("copy_$table") : idf_escape($target) . "." . table($table));
|
||||
if (!queries("DROP TABLE IF EXISTS $name")
|
||||
if (!queries("\nDROP TABLE IF EXISTS $name")
|
||||
|| !queries("CREATE TABLE $name LIKE " . table($table))
|
||||
|| !queries("INSERT INTO $name SELECT * FROM " . table($table))
|
||||
) {
|
||||
@@ -755,7 +755,7 @@ if (!defined("DRIVER")) {
|
||||
|
||||
/** Get information about trigger
|
||||
* @param string trigger name
|
||||
* @return array array("Trigger" => , "Timing" => , "Event" => , "Type" => , "Statement" => )
|
||||
* @return array array("Trigger" => , "Timing" => , "Event" => , "Of" => , "Type" => , "Statement" => )
|
||||
*/
|
||||
function trigger($name) {
|
||||
if ($name == "") {
|
||||
@@ -778,12 +778,12 @@ if (!defined("DRIVER")) {
|
||||
}
|
||||
|
||||
/** Get trigger options
|
||||
* @return array ("Timing" => array(), "Type" => array())
|
||||
* @return array ("Timing" => array(), "Event" => array(), "Type" => array())
|
||||
*/
|
||||
function trigger_options() {
|
||||
return array(
|
||||
"Timing" => array("BEFORE", "AFTER"),
|
||||
// Event is always INSERT, UPDATE, DELETE
|
||||
"Event" => array("INSERT", "UPDATE", "DELETE"),
|
||||
"Type" => array("FOR EACH ROW"),
|
||||
);
|
||||
}
|
||||
@@ -796,7 +796,7 @@ if (!defined("DRIVER")) {
|
||||
function routine($name, $type) {
|
||||
global $connection, $enum_length, $inout, $types;
|
||||
$aliases = array("bool", "boolean", "integer", "double precision", "real", "dec", "numeric", "fixed", "national char", "national varchar");
|
||||
$type_pattern = "((" . implode("|", array_merge(array_keys($types), $aliases)) . ")\\b(?:\\s*\\(((?:[^'\")]*|$enum_length)++)\\))?\\s*(zerofill\\s*)?(unsigned(?:\\s+zerofill)?)?)(?:\\s*(?:CHARSET|CHARACTER\\s+SET)\\s*['\"]?([^'\"\\s]+)['\"]?)?";
|
||||
$type_pattern = "((" . implode("|", array_merge(array_keys($types), $aliases)) . ")\\b(?:\\s*\\(((?:[^'\")]|$enum_length)++)\\))?\\s*(zerofill\\s*)?(unsigned(?:\\s+zerofill)?)?)(?:\\s*(?:CHARSET|CHARACTER\\s+SET)\\s*['\"]?([^'\"\\s]+)['\"]?)?";
|
||||
$pattern = "\\s*(" . ($type == "FUNCTION" ? "" : $inout) . ")?\\s*(?:`((?:[^`]|``)*)`\\s*|\\b(\\S+)\\s+)$type_pattern";
|
||||
$create = $connection->result("SHOW CREATE $type " . idf_escape($name), 2);
|
||||
preg_match("~\\(((?:$pattern\\s*,?)*)\\)\\s*" . ($type == "FUNCTION" ? "RETURNS\\s+$type_pattern\\s+" : "") . "(.*)~is", $create, $match);
|
||||
|
@@ -439,12 +439,12 @@ ORDER BY conkey, conname") as $row) {
|
||||
//! descending UNIQUE indexes results in syntax error
|
||||
$create[] = ($val[2] == "DROP"
|
||||
? "\nDROP CONSTRAINT " . idf_escape($val[1])
|
||||
: "\nADD" . ($val[1] != "" ? " CONSTRAINT " . idf_escape($val[1]) : "") . " $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "") . $val[2]
|
||||
: "\nADD" . ($val[1] != "" ? " CONSTRAINT " . idf_escape($val[1]) : "") . " $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "") . "(" . implode(", ", $val[2]) . ")"
|
||||
);
|
||||
} elseif ($val[2] == "DROP") {
|
||||
$drop[] = idf_escape($val[1]);
|
||||
} else {
|
||||
$queries[] = "CREATE INDEX " . idf_escape($val[1] != "" ? $val[1] : uniqid($table . "_")) . " ON " . table($table) . " $val[2]";
|
||||
$queries[] = "CREATE INDEX " . idf_escape($val[1] != "" ? $val[1] : uniqid($table . "_")) . " ON " . table($table) . " (" . implode(", ", $val[2]) . ")";
|
||||
}
|
||||
}
|
||||
if ($create) {
|
||||
@@ -507,6 +507,7 @@ ORDER BY conkey, conname") as $row) {
|
||||
function trigger_options() {
|
||||
return array(
|
||||
"Timing" => array("BEFORE", "AFTER"),
|
||||
"Event" => array("INSERT", "UPDATE", "DELETE"),
|
||||
"Type" => array("FOR EACH ROW", "FOR EACH STATEMENT"),
|
||||
);
|
||||
}
|
||||
|
@@ -118,6 +118,7 @@ if (isset($_GET["simpledb"])) {
|
||||
|
||||
|
||||
class Min_Driver extends Min_SQL {
|
||||
public $primary = "itemName()";
|
||||
|
||||
function _chunkRequest($ids, $action, $params, $expand = array()) {
|
||||
global $connection;
|
||||
@@ -149,7 +150,7 @@ if (isset($_GET["simpledb"])) {
|
||||
return $return;
|
||||
}
|
||||
|
||||
function select($table, $select, $where, $group, $order, $limit, $page, $print = false) {
|
||||
function select($table, $select, $where, $group, $order = array(), $limit = 1, $page = 0, $print = false) {
|
||||
global $connection;
|
||||
$connection->next = $_GET["next"];
|
||||
$return = parent::select($table, $select, $where, $group, $order, $limit, $page, $print);
|
||||
@@ -323,19 +324,7 @@ if (isset($_GET["simpledb"])) {
|
||||
}
|
||||
|
||||
function fields($table) {
|
||||
$return = array();
|
||||
foreach ((array) $_POST["field_keys"] as $key => $val) {
|
||||
if ($val != "") {
|
||||
$val = bracket_escape($val);
|
||||
$_POST["function"][$val] = $_POST["field_funs"][$key];
|
||||
$_POST["fields"][$val] = $_POST["field_vals"][$key];
|
||||
}
|
||||
}
|
||||
foreach ((array) $_POST["fields"] as $key => $val) {
|
||||
$name = bracket_escape($key, 1); // 1 - back
|
||||
$return[$name] = array("field" => $name, "privileges" => array("insert" => 1, "update" => 1), "null" => 1);
|
||||
}
|
||||
return $return;
|
||||
return fields_from_edit();
|
||||
}
|
||||
|
||||
function foreign_keys($table) {
|
||||
|
@@ -352,20 +352,24 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
$sqls = get_key_vals("SELECT name, sql FROM sqlite_master WHERE type = 'index' AND tbl_name = " . q($table), $connection2);
|
||||
foreach (get_rows("PRAGMA index_list(" . table($table) . ")", $connection2) as $row) {
|
||||
$name = $row["name"];
|
||||
if (!preg_match("~^sqlite_~", $name)) {
|
||||
$return[$name]["type"] = ($row["unique"] ? "UNIQUE" : "INDEX");
|
||||
$return[$name]["lengths"] = array();
|
||||
foreach (get_rows("PRAGMA index_info(" . idf_escape($name) . ")", $connection2) as $row1) {
|
||||
$return[$name]["columns"][] = $row1["name"];
|
||||
}
|
||||
$return[$name]["descs"] = array();
|
||||
if (preg_match('~^CREATE( UNIQUE)? INDEX ' . preg_quote(idf_escape($name) . ' ON ' . idf_escape($table), '~') . ' \((.*)\)$~i', $sqls[$name], $regs)) {
|
||||
preg_match_all('/("[^"]*+")+( DESC)?/', $regs[2], $matches);
|
||||
foreach ($matches[2] as $val) {
|
||||
$return[$name]["descs"][] = ($val ? '1' : null);
|
||||
$index = array("type" => ($row["unique"] ? "UNIQUE" : "INDEX"));
|
||||
$index["lengths"] = array();
|
||||
$index["descs"] = array();
|
||||
foreach (get_rows("PRAGMA index_info(" . idf_escape($name) . ")", $connection2) as $row1) {
|
||||
$index["columns"][] = $row1["name"];
|
||||
$index["descs"][] = null;
|
||||
}
|
||||
if (preg_match('~^CREATE( UNIQUE)? INDEX ' . preg_quote(idf_escape($name) . ' ON ' . idf_escape($table), '~') . ' \((.*)\)$~i', $sqls[$name], $regs)) {
|
||||
preg_match_all('/("[^"]*+")+( DESC)?/', $regs[2], $matches);
|
||||
foreach ($matches[2] as $key => $val) {
|
||||
if ($val) {
|
||||
$index["descs"][$key] = '1';
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!$return[""] || $index["type"] != "UNIQUE" || $index["columns"] != $return[""]["columns"] || $index["descs"] != $return[""]["descs"] || !preg_match("~^sqlite_~", $name)) {
|
||||
$return[$name] = $index;
|
||||
}
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
@@ -497,7 +501,6 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
}
|
||||
|
||||
function recreate_table($table, $name, $fields, $originals, $foreign, $indexes = array()) {
|
||||
queries("BEGIN");
|
||||
if ($table != "") {
|
||||
if (!$fields) {
|
||||
foreach (fields($table) as $key => $field) {
|
||||
@@ -506,11 +509,10 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
}
|
||||
}
|
||||
$primary_key = false;
|
||||
foreach ($fields as $key => $field) {
|
||||
foreach ($fields as $field) {
|
||||
if ($field[6]) {
|
||||
$primary_key = true;
|
||||
}
|
||||
$fields[$key] = " " . implode($field);
|
||||
}
|
||||
$drop_indexes = array();
|
||||
foreach ($indexes as $key => $val) {
|
||||
@@ -527,7 +529,6 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
}
|
||||
$columns[] = $originals[$column] . ($index["descs"][$key] ? " DESC" : "");
|
||||
}
|
||||
$columns = "(" . implode(", ", $columns) . ")";
|
||||
if (!$drop_indexes[$key_name]) {
|
||||
if ($index["type"] != "PRIMARY" || !$primary_key) {
|
||||
$indexes[] = array($index["type"], $key_name, $columns);
|
||||
@@ -537,7 +538,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
foreach ($indexes as $key => $val) {
|
||||
if ($val[0] == "PRIMARY") {
|
||||
unset($indexes[$key]);
|
||||
$foreign[] = " PRIMARY KEY $val[2]";
|
||||
$foreign[] = " PRIMARY KEY (" . implode(", ", $val[2]) . ")";
|
||||
}
|
||||
}
|
||||
foreach (foreign_keys($table) as $key_name => $foreign_key) {
|
||||
@@ -551,6 +552,10 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
$foreign[] = " " . format_foreign_key($foreign_key);
|
||||
}
|
||||
}
|
||||
queries("BEGIN");
|
||||
}
|
||||
foreach ($fields as $key => $field) {
|
||||
$fields[$key] = " " . implode($field);
|
||||
}
|
||||
$fields = array_merge($fields, array_filter($foreign));
|
||||
if (!queries("CREATE TABLE " . table($table != "" ? "adminer_$name" : $name) . " (\n" . implode(",\n", $fields) . "\n)")) {
|
||||
@@ -600,7 +605,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
foreach (array_reverse($alter) as $val) {
|
||||
if (!queries($val[2] == "DROP"
|
||||
? "DROP INDEX " . idf_escape($val[1])
|
||||
: index_sql($table, $val[0], $val[1], $val[2])
|
||||
: index_sql($table, $val[0], $val[1], "(" . implode(", ", $val[2]) . ")")
|
||||
)) {
|
||||
return false;
|
||||
}
|
||||
@@ -629,18 +634,28 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
if ($name == "") {
|
||||
return array("Statement" => "BEGIN\n\t;\nEND");
|
||||
}
|
||||
$idf = '(?:[^`"\\s]+|`[^`]*`|"[^"]*")+';
|
||||
$trigger_options = trigger_options();
|
||||
preg_match(
|
||||
'~^CREATE\\s+TRIGGER\\s*(?:[^`"\\s]+|`[^`]*`|"[^"]*")+\\s*(BEFORE|AFTER|INSTEAD\\s+OF)\\s+([a-z]+)\\s+ON\\s*(?:[^`"\\s]+|`[^`]*`|"[^"]*")+\\s*(?:FOR\\s*EACH\\s*ROW\\s)?(.*)~is',
|
||||
"~^CREATE\\s+TRIGGER\\s*$idf\\s*(" . implode("|", $trigger_options["Timing"]) . ")\\s+([a-z]+)(?:\\s+OF\\s+($idf))?\\s+ON\\s*$idf\\s*(?:FOR\\s+EACH\\s+ROW\\s)?(.*)~is",
|
||||
$connection->result("SELECT sql FROM sqlite_master WHERE type = 'trigger' AND name = " . q($name)),
|
||||
$match
|
||||
);
|
||||
return array("Timing" => strtoupper($match[1]), "Event" => strtoupper($match[2]), "Trigger" => $name, "Statement" => $match[3]);
|
||||
$of = $match[3];
|
||||
return array(
|
||||
"Timing" => strtoupper($match[1]),
|
||||
"Event" => strtoupper($match[2]) . ($of ? " OF" : ""),
|
||||
"Of" => ($of[0] == '`' || $of[0] == '"' ? idf_unescape($of) : $of),
|
||||
"Trigger" => $name,
|
||||
"Statement" => $match[4],
|
||||
);
|
||||
}
|
||||
|
||||
function triggers($table) {
|
||||
$return = array();
|
||||
$trigger_options = trigger_options();
|
||||
foreach (get_rows("SELECT * FROM sqlite_master WHERE type = 'trigger' AND tbl_name = " . q($table)) as $row) {
|
||||
preg_match('~^CREATE\\s+TRIGGER\\s*(?:[^`"\\s]+|`[^`]*`|"[^"]*")+\\s*([a-z]+)\\s*([a-z]+)~i', $row["sql"], $match);
|
||||
preg_match('~^CREATE\\s+TRIGGER\\s*(?:[^`"\\s]+|`[^`]*`|"[^"]*")+\\s*(' . implode("|", $trigger_options["Timing"]) . ')\\s*(.*)\\s+ON\\b~iU', $row["sql"], $match);
|
||||
$return[$row["name"]] = array($match[1], $match[2]);
|
||||
}
|
||||
return $return;
|
||||
@@ -649,6 +664,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
function trigger_options() {
|
||||
return array(
|
||||
"Timing" => array("BEFORE", "AFTER", "INSTEAD OF"),
|
||||
"Event" => array("INSERT", "UPDATE", "UPDATE OF", "DELETE"),
|
||||
"Type" => array("FOR EACH ROW"),
|
||||
);
|
||||
}
|
||||
|
@@ -14,14 +14,16 @@ if ($_POST && !$error) {
|
||||
$is_sql = preg_match('~sql~', $_POST["format"]);
|
||||
|
||||
if ($is_sql) {
|
||||
echo "-- Adminer $VERSION " . $drivers[DRIVER] . " dump
|
||||
|
||||
" . ($jush != "sql" ? "" : "SET NAMES utf8;
|
||||
echo "-- Adminer $VERSION " . $drivers[DRIVER] . " dump\n\n";
|
||||
if ($jush == "sql") {
|
||||
echo "SET NAMES utf8;
|
||||
SET time_zone = '+00:00';
|
||||
" . ($_POST["data_style"] ? "SET foreign_key_checks = 0;
|
||||
SET time_zone = " . q(substr(preg_replace('~^[^-]~', '+\0', $connection->result("SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP)")), 0, 6)) . ";
|
||||
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
|
||||
" : "") . "
|
||||
");
|
||||
";
|
||||
$connection->query("SET time_zone = '+00:00';");
|
||||
}
|
||||
}
|
||||
|
||||
$style = $_POST["db_style"];
|
||||
|
@@ -59,14 +59,6 @@ if ($_POST && !$error && !isset($_GET["select"])) {
|
||||
}
|
||||
}
|
||||
|
||||
$table_name = $adminer->tableName(table_status1($TABLE, true));
|
||||
page_header(
|
||||
($update ? lang('Edit') : lang('Insert')),
|
||||
$error,
|
||||
array("select" => array($TABLE, $table_name)),
|
||||
$table_name
|
||||
);
|
||||
|
||||
$row = null;
|
||||
if ($_POST["save"]) {
|
||||
$row = (array) $_POST["fields"];
|
||||
@@ -89,8 +81,11 @@ if ($_POST["save"]) {
|
||||
$select = array("*");
|
||||
}
|
||||
if ($select) {
|
||||
$result = $driver->select($TABLE, $select, array($where), $select, array(), (isset($_GET["select"]) ? 2 : 1), 0);
|
||||
$result = $driver->select($TABLE, $select, array($where), $select, array(), (isset($_GET["select"]) ? 2 : 1));
|
||||
$row = $result->fetch_assoc();
|
||||
if (!$row) { // MySQLi returns null
|
||||
$row = false;
|
||||
}
|
||||
if (isset($_GET["select"]) && (!$row || $result->fetch_assoc())) { // $result->num_rows != 1 isn't available in all drivers
|
||||
$row = null;
|
||||
}
|
||||
@@ -98,97 +93,21 @@ if ($_POST["save"]) {
|
||||
}
|
||||
|
||||
if (!support("table") && !$fields) {
|
||||
$id = ($jush == "mongo" ? "_id" : "itemName()"); // simpledb
|
||||
if (!$where) { // insert
|
||||
$row = $driver->select($TABLE, array("*"), $where, array("*"), array(), 1, 0);
|
||||
$row = ($row ? $row->fetch_assoc() : array($id => ""));
|
||||
$result = $driver->select($TABLE, array("*"), $where, array("*"));
|
||||
$row = ($result ? $result->fetch_assoc() : false);
|
||||
if (!$row) {
|
||||
$row = array($driver->primary => "");
|
||||
}
|
||||
}
|
||||
if ($row) {
|
||||
foreach ($row as $key => $val) {
|
||||
if (!$where) {
|
||||
$row[$key] = null;
|
||||
}
|
||||
$fields[$key] = array("field" => $key, "null" => ($key != $id), "auto_increment" => ($key == $id));
|
||||
$fields[$key] = array("field" => $key, "null" => ($key != $driver->primary), "auto_increment" => ($key == $driver->primary));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($row === false) {
|
||||
echo "<p class='error'>" . lang('No rows.') . "\n";
|
||||
}
|
||||
?>
|
||||
|
||||
<div id="message"></div>
|
||||
|
||||
<form action="" method="post" enctype="multipart/form-data" id="form">
|
||||
<?php
|
||||
if (!$fields) {
|
||||
echo "<p class='error'>" . lang('You have no privileges to update this table.') . "\n";
|
||||
} else {
|
||||
echo "<table cellspacing='0' onkeydown='return editingKeydown(event);'>\n";
|
||||
|
||||
foreach ($fields as $name => $field) {
|
||||
echo "<tr><th>" . $adminer->fieldName($field);
|
||||
$default = $_GET["set"][bracket_escape($name)];
|
||||
if ($default === null) {
|
||||
$default = $field["default"];
|
||||
if ($field["type"] == "bit" && preg_match("~^b'([01]*)'\$~", $default, $regs)) {
|
||||
$default = $regs[1];
|
||||
}
|
||||
}
|
||||
$value = ($row !== null
|
||||
? ($row[$name] != "" && $jush == "sql" && preg_match("~enum|set~", $field["type"])
|
||||
? (is_array($row[$name]) ? array_sum($row[$name]) : +$row[$name])
|
||||
: $row[$name]
|
||||
)
|
||||
: (!$update && $field["auto_increment"]
|
||||
? ""
|
||||
: (isset($_GET["select"]) ? false : $default)
|
||||
)
|
||||
);
|
||||
if (!$_POST["save"] && is_string($value)) {
|
||||
$value = $adminer->editVal($value, $field);
|
||||
}
|
||||
$function = ($_POST["save"] ? (string) $_POST["function"][$name] : ($update && $field["on_update"] == "CURRENT_TIMESTAMP" ? "now" : ($value === false ? null : ($value !== null ? '' : 'NULL'))));
|
||||
if (preg_match("~time~", $field["type"]) && $value == "CURRENT_TIMESTAMP") {
|
||||
$value = "";
|
||||
$function = "now";
|
||||
}
|
||||
input($field, $value, $function);
|
||||
echo "\n";
|
||||
}
|
||||
|
||||
if (!support("table")) {
|
||||
echo "<tr>"
|
||||
. "<th><input name='field_keys[]' value='" . h($_POST["field_keys"][0]) . "'>"
|
||||
. "<td class='function'>" . html_select("field_funs[]", $adminer->editFunctions(array()), $_POST["field_funs"][0])
|
||||
. "<td><input name='field_vals[]' value='" . h($_POST["field_vals"][0]) . "'>"
|
||||
. "\n"
|
||||
;
|
||||
}
|
||||
|
||||
echo "</table>\n";
|
||||
}
|
||||
?>
|
||||
<p>
|
||||
<?php
|
||||
if ($fields) {
|
||||
echo "<input type='submit' value='" . lang('Save') . "'>\n";
|
||||
if (!isset($_GET["select"])) {
|
||||
echo "<input type='submit' name='insert' value='" . ($update
|
||||
? lang('Save and continue edit') . "' onclick='return !ajaxForm(this.form, \"" . lang('Saving') . '...", this)'
|
||||
: lang('Save and insert next')
|
||||
) . "' title='Ctrl+Shift+Enter'>\n";
|
||||
}
|
||||
}
|
||||
echo ($update ? "<input type='submit' name='delete' value='" . lang('Delete') . "'" . confirm() . ">\n"
|
||||
: ($_POST || !$fields ? "" : "<script type='text/javascript'>focus(document.getElementById('form').getElementsByTagName('td')[1].firstChild);</script>\n")
|
||||
);
|
||||
if (isset($_GET["select"])) {
|
||||
hidden_fields(array("check" => (array) $_POST["check"], "clone" => $_POST["clone"], "all" => $_POST["all"]));
|
||||
}
|
||||
?>
|
||||
<input type="hidden" name="referer" value="<?php echo h(isset($_POST["referer"]) ? $_POST["referer"] : $_SERVER["HTTP_REFERER"]); ?>">
|
||||
<input type="hidden" name="save" value="1">
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</form>
|
||||
edit_form($TABLE, $fields, $row, $update);
|
||||
|
@@ -15,7 +15,10 @@ if ($_GET["file"] == "favicon.ico") {
|
||||
echo lzw_decompress(compile_file('../adminer/static/default.css;../externals/jush/jush.css', 'minify_css'));
|
||||
} elseif ($_GET["file"] == "functions.js") {
|
||||
header("Content-Type: text/javascript; charset=utf-8");
|
||||
echo lzw_decompress(compile_file('../adminer/static/functions.js;static/editing.js;../externals/jush/modules/jush.js;../externals/jush/modules/jush-textarea.js;../externals/jush/modules/jush-txt.js;../externals/jush/modules/jush-sql.js;../externals/jush/modules/jush-pgsql.js;../externals/jush/modules/jush-sqlite.js;../externals/jush/modules/jush-mssql.js;../externals/jush/modules/jush-oracle.js;../externals/jush/modules/jush-simpledb.js', 'minify_js'));
|
||||
echo lzw_decompress(compile_file('../adminer/static/functions.js;static/editing.js', 'minify_js'));
|
||||
} elseif ($_GET["file"] == "jush.js") {
|
||||
header("Content-Type: text/javascript; charset=utf-8");
|
||||
echo lzw_decompress(compile_file('../externals/jush/modules/jush.js;../externals/jush/modules/jush-textarea.js;../externals/jush/modules/jush-txt.js;../externals/jush/modules/jush-sql.js;../externals/jush/modules/jush-pgsql.js;../externals/jush/modules/jush-sqlite.js;../externals/jush/modules/jush-mssql.js;../externals/jush/modules/jush-oracle.js;../externals/jush/modules/jush-simpledb.js', 'minify_js'));
|
||||
} else {
|
||||
header("Content-Type: image/gif");
|
||||
switch ($_GET["file"]) {
|
||||
|
@@ -27,6 +27,13 @@ class Adminer {
|
||||
return password_file($create);
|
||||
}
|
||||
|
||||
/** Return key used to group brute force attacks; behind a reverse proxy, you want to return the last part of X-Forwarded-For
|
||||
* @return string
|
||||
*/
|
||||
function bruteForceKey() {
|
||||
return $_SERVER["REMOTE_ADDR"];
|
||||
}
|
||||
|
||||
/** Identifier of selected database
|
||||
* @return string
|
||||
*/
|
||||
@@ -68,13 +75,8 @@ class Adminer {
|
||||
* @return bool true to link adminer.css if exists
|
||||
*/
|
||||
function head() {
|
||||
global $jush;
|
||||
?>
|
||||
<link rel="stylesheet" type="text/css" href="../externals/jush/jush.css">
|
||||
<script type="text/javascript" src="../externals/jush/modules/jush.js"></script>
|
||||
<script type="text/javascript" src="../externals/jush/modules/jush-textarea.js"></script>
|
||||
<script type="text/javascript" src="../externals/jush/modules/jush-txt.js"></script>
|
||||
<script type="text/javascript" src="../externals/jush/modules/jush-<?php echo $jush; ?>.js"></script>
|
||||
<?php
|
||||
return true;
|
||||
}
|
||||
@@ -182,11 +184,12 @@ username.form['auth[driver]'].onchange();
|
||||
|
||||
/** Query printed in select before execution
|
||||
* @param string query to be executed
|
||||
* @param string elapsed time
|
||||
* @return string
|
||||
*/
|
||||
function selectQuery($query) {
|
||||
function selectQuery($query, $time) {
|
||||
global $jush;
|
||||
return "<p><code class='jush-$jush'>" . h(str_replace("\n", " ", $query)) . "</code>"
|
||||
return "<p><code class='jush-$jush'>" . h(str_replace("\n", " ", $query)) . "</code> <span class='time'>($time)</span>"
|
||||
. (support("sql") ? " <a href='" . h(ME) . "sql=" . urlencode($query) . "'>" . lang('Edit') . "</a>" : "")
|
||||
. "</p>" // </p> - required for IE9 inline edit
|
||||
;
|
||||
@@ -229,7 +232,7 @@ username.form['auth[driver]'].onchange();
|
||||
if (preg_match('~blob|bytea|raw|file~', $field["type"]) && !is_utf8($val)) {
|
||||
$return = lang('%d byte(s)', strlen($original));
|
||||
}
|
||||
return ($link ? "<a href='" . h($link) . "'>$return</a>" : $return);
|
||||
return ($link ? "<a href='" . h($link) . "'" . (is_url($link) ? " rel='noreferrer'" : "") . ">$return</a>" : $return);
|
||||
}
|
||||
|
||||
/** Value conversion used in select and edit
|
||||
@@ -505,9 +508,10 @@ username.form['auth[driver]'].onchange();
|
||||
|
||||
/** Query printed after execution in the message
|
||||
* @param string executed query
|
||||
* @param string elapsed time
|
||||
* @return string
|
||||
*/
|
||||
function messageQuery($query) {
|
||||
function messageQuery($query, $time) {
|
||||
global $jush;
|
||||
restart_session();
|
||||
$history = &get_session("queries");
|
||||
@@ -515,9 +519,10 @@ username.form['auth[driver]'].onchange();
|
||||
if (strlen($query) > 1e6) {
|
||||
$query = preg_replace('~[\x80-\xFF]+$~', '', substr($query, 0, 1e6)) . "\n..."; // [\x80-\xFF] - valid UTF-8, \n - can end by one-line comment
|
||||
}
|
||||
$history[$_GET["db"]][] = array($query, time()); // not DB - $_GET["db"] is changed in database.inc.php //! respect $_GET["ns"]
|
||||
$history[$_GET["db"]][] = array($query, time(), $time); // not DB - $_GET["db"] is changed in database.inc.php //! respect $_GET["ns"]
|
||||
return " <span class='time'>" . @date("H:i:s") . "</span> <a href='#$id' onclick=\"return !toggle('$id');\">" . lang('SQL command') . "</a>" // @ - time zone may be not set
|
||||
. "<div id='$id' class='hidden'><pre><code class='jush-$jush'>" . shorten_utf8($query, 1000) . '</code></pre>'
|
||||
. ($time ? " <span class='time'>($time)</span>" : '')
|
||||
. (support("sql") ? '<p><a href="' . h(str_replace("db=" . urlencode(DB), "db=" . urlencode($_GET["db"]), ME) . 'sql=&history=' . (count($history[$_GET["db"]]) - 1)) . '">' . lang('Edit') . '</a>' : '')
|
||||
. '</div>'
|
||||
;
|
||||
@@ -745,7 +750,7 @@ username.form['auth[driver]'].onchange();
|
||||
($ext == "sql" || $output != "file" ? "text/plain" : "text/csv") . "; charset=utf-8"
|
||||
)));
|
||||
if ($output == "gz") {
|
||||
ob_start('gzencode', 1e6);
|
||||
ob_start('ob_gzencode', 1e6);
|
||||
}
|
||||
return $ext;
|
||||
}
|
||||
@@ -766,7 +771,7 @@ username.form['auth[driver]'].onchange();
|
||||
* @return null
|
||||
*/
|
||||
function navigation($missing) {
|
||||
global $VERSION, $jush, $drivers;
|
||||
global $VERSION, $jush, $drivers, $connection;
|
||||
?>
|
||||
<h1>
|
||||
<?php echo $this->name(); ?> <span class="version"><?php echo $VERSION; ?></span>
|
||||
@@ -792,6 +797,33 @@ username.form['auth[driver]'].onchange();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if ($_GET["ns"] !== "" && !$missing && DB != "") {
|
||||
$connection->select_db(DB);
|
||||
$tables = table_status('', true);
|
||||
}
|
||||
if (support("sql")) {
|
||||
?>
|
||||
<script type="text/javascript" src="../externals/jush/modules/jush.js"></script>
|
||||
<script type="text/javascript" src="../externals/jush/modules/jush-textarea.js"></script>
|
||||
<script type="text/javascript" src="../externals/jush/modules/jush-txt.js"></script>
|
||||
<script type="text/javascript" src="../externals/jush/modules/jush-<?php echo $jush; ?>.js"></script>
|
||||
<script type="text/javascript">
|
||||
<?php
|
||||
if ($tables) {
|
||||
$links = array();
|
||||
foreach ($tables as $table => $type) {
|
||||
$links[] = preg_quote($table, '/');
|
||||
}
|
||||
echo "var jushLinks = { $jush: [ '" . js_escape(ME) . (support("table") ? "table=" : "select=") . "\$&', /\\b(" . implode("|", $links) . ")\\b/g ] };\n";
|
||||
foreach (array("bac", "bra", "sqlite_quo", "mssql_bra") as $val) {
|
||||
echo "jushLinks.$val = jushLinks.$jush;\n";
|
||||
}
|
||||
}
|
||||
?>
|
||||
bodyLoad('<?php echo (is_object($connection) ? substr($connection->server_info, 0, 3) : ""); ?>');
|
||||
</script>
|
||||
<?php
|
||||
}
|
||||
$this->databasesPrint($missing);
|
||||
if (DB == "" || !$missing) {
|
||||
echo "<p class='links'>" . (support("sql") ? "<a href='" . h(ME) . "sql='" . bold(isset($_GET["sql"]) && !isset($_GET["import"])) . ">" . lang('SQL command') . "</a>\n<a href='" . h(ME) . "import='" . bold(isset($_GET["import"])) . ">" . lang('Import') . "</a>\n" : "") . "";
|
||||
@@ -801,22 +833,10 @@ username.form['auth[driver]'].onchange();
|
||||
}
|
||||
if ($_GET["ns"] !== "" && !$missing && DB != "") {
|
||||
echo '<a href="' . h(ME) . 'create="' . bold($_GET["create"] === "") . ">" . lang('Create table') . "</a>\n";
|
||||
$tables = table_status('', true);
|
||||
if (!$tables) {
|
||||
echo "<p class='message'>" . lang('No tables.') . "\n";
|
||||
} else {
|
||||
$this->tablesPrint($tables);
|
||||
$links = array();
|
||||
foreach ($tables as $table => $type) {
|
||||
$links[] = preg_quote($table, '/');
|
||||
}
|
||||
echo "<script type='text/javascript'>\n";
|
||||
echo "var jushLang = '$jush';\n";
|
||||
echo "var jushLinks = { $jush: [ '" . js_escape(ME) . (support("table") ? "table=" : "select=") . "\$&', /\\b(" . implode("|", $links) . ")\\b/g ] };\n";
|
||||
foreach (array("bac", "bra", "sqlite_quo", "mssql_bra") as $val) {
|
||||
echo "jushLinks.$val = jushLinks.$jush;\n";
|
||||
}
|
||||
echo "</script>\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -842,7 +862,7 @@ username.form['auth[driver]'].onchange();
|
||||
echo "<input type='submit' value='" . lang('Use') . "'" . ($databases ? " class='hidden'" : "") . ">\n";
|
||||
if ($missing != "db" && DB != "" && $connection->select_db(DB)) {
|
||||
if (support("scheme")) {
|
||||
echo "<br><select name='ns'$db_events>" . optionlist(array("" => "(" . lang('schema') . ")") + $adminer->schemas(), $_GET["ns"]) . "</select>";
|
||||
echo "<br>" . lang('Schema') . ": <select name='ns'$db_events>" . optionlist(array("" => "") + $adminer->schemas(), $_GET["ns"]) . "</select>";
|
||||
if ($_GET["ns"] != "") {
|
||||
set_schema($_GET["ns"]);
|
||||
}
|
||||
|
@@ -15,13 +15,52 @@ if ($_COOKIE["adminer_permanent"]) {
|
||||
}
|
||||
}
|
||||
|
||||
function add_invalid_login() {
|
||||
global $adminer;
|
||||
$filename = get_temp_dir() . "/adminer.invalid";
|
||||
$fp = @fopen($filename, "r+"); // @ - may not exist
|
||||
if (!$fp) { // c+ is available since PHP 5.2.6
|
||||
$fp = @fopen($filename, "w"); // @ - may not be writable
|
||||
if (!$fp) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
flock($fp, LOCK_EX);
|
||||
$invalids = unserialize(stream_get_contents($fp));
|
||||
$time = time();
|
||||
if ($invalids) {
|
||||
foreach ($invalids as $ip => $val) {
|
||||
if ($val[0] < $time) {
|
||||
unset($invalids[$ip]);
|
||||
}
|
||||
}
|
||||
}
|
||||
$invalid = &$invalids[$adminer->bruteForceKey()];
|
||||
if (!$invalid) {
|
||||
$invalid = array($time + 30*60, 0); // active for 30 minutes
|
||||
}
|
||||
$invalid[1]++;
|
||||
$serialized = serialize($invalids);
|
||||
rewind($fp);
|
||||
fwrite($fp, $serialized);
|
||||
ftruncate($fp, strlen($serialized));
|
||||
flock($fp, LOCK_UN);
|
||||
fclose($fp);
|
||||
}
|
||||
|
||||
$auth = $_POST["auth"];
|
||||
if ($auth) {
|
||||
$invalids = unserialize(@file_get_contents(get_temp_dir() . "/adminer.invalid")); // @ - may not exist
|
||||
$invalid = $invalids[$adminer->bruteForceKey()];
|
||||
$next_attempt = ($invalid[1] > 30 ? $invalid[0] - time() : 0); // allow 30 invalid attempts
|
||||
if ($next_attempt > 0) { //! do the same with permanent login
|
||||
auth_error(lang('Too many unsuccessful logins, try again in %d minute(s).', ceil($next_attempt / 60)));
|
||||
}
|
||||
session_regenerate_id(); // defense against session fixation
|
||||
$driver = $auth["driver"];
|
||||
$server = $auth["server"];
|
||||
$username = $auth["username"];
|
||||
$password = $auth["password"];
|
||||
$password = (string) $auth["password"];
|
||||
$db = $auth["db"];
|
||||
set_password($driver, $server, $username, $password);
|
||||
$_SESSION["db"][$driver][$server][$username][$db] = true;
|
||||
@@ -75,19 +114,18 @@ function unset_permanent() {
|
||||
cookie("adminer_permanent", implode(" ", $permanent));
|
||||
}
|
||||
|
||||
function auth_error($exception = null) {
|
||||
global $connection, $adminer, $has_token;
|
||||
function auth_error($error) {
|
||||
global $adminer, $has_token;
|
||||
$session_name = session_name();
|
||||
$error = "";
|
||||
if (!$_COOKIE[$session_name] && $_GET[$session_name] && ini_bool("session.use_only_cookies")) {
|
||||
$error = lang('Session support must be enabled.');
|
||||
} elseif (isset($_GET["username"])) {
|
||||
if (($_COOKIE[$session_name] || $_GET[$session_name]) && !$has_token) {
|
||||
$error = lang('Session expired, please login again.');
|
||||
} else {
|
||||
add_invalid_login();
|
||||
$password = get_password();
|
||||
if ($password !== null) {
|
||||
$error = h($exception ? $exception->getMessage() : (is_string($connection) ? $connection : lang('Invalid credentials.')));
|
||||
if ($password === false) {
|
||||
$error .= '<br>' . lang('Master password expired. <a href="http://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.', '<code>permanentLogin()</code>');
|
||||
}
|
||||
@@ -106,24 +144,7 @@ function auth_error($exception = null) {
|
||||
echo "</div>\n";
|
||||
echo "</form>\n";
|
||||
page_footer("auth");
|
||||
}
|
||||
|
||||
function set_password($vendor, $server, $username, $password) {
|
||||
$_SESSION["pwds"][$vendor][$server][$username] = ($_COOKIE["adminer_key"]
|
||||
? array(encrypt_string($password, $_COOKIE["adminer_key"]))
|
||||
: $password
|
||||
);
|
||||
}
|
||||
|
||||
function get_password() {
|
||||
$return = get_session("pwds");
|
||||
if (is_array($return)) {
|
||||
$return = ($_COOKIE["adminer_key"]
|
||||
? decrypt_string($return[0], $_COOKIE["adminer_key"])
|
||||
: false
|
||||
);
|
||||
}
|
||||
return $return;
|
||||
exit;
|
||||
}
|
||||
|
||||
if (isset($_GET["username"])) {
|
||||
@@ -137,13 +158,12 @@ if (isset($_GET["username"])) {
|
||||
$connection = connect();
|
||||
}
|
||||
|
||||
if (!is_object($connection) || !$adminer->login($_GET["username"], get_password())) {
|
||||
auth_error();
|
||||
exit;
|
||||
}
|
||||
|
||||
$driver = new Min_Driver($connection);
|
||||
|
||||
if (!is_object($connection) || !$adminer->login($_GET["username"], get_password())) {
|
||||
auth_error((is_string($connection) ? $connection : lang('Invalid credentials.')));
|
||||
}
|
||||
|
||||
if ($auth && $_POST["token"]) {
|
||||
$_POST["token"] = $token; // reset token after explicit login
|
||||
}
|
||||
|
@@ -88,7 +88,7 @@ if (!ini_bool("session.use_cookies") || @ini_set("session.use_cookies", false) !
|
||||
session_write_close(); // improves concurrency if a user opens several pages at once, may be restarted later
|
||||
}
|
||||
|
||||
include "./include/connect.inc.php";
|
||||
include "./include/editing.inc.php";
|
||||
include "./include/connect.inc.php";
|
||||
|
||||
$on_actions = "RESTRICT|NO ACTION|CASCADE|SET NULL|SET DEFAULT"; ///< @var string used in foreign_keys()
|
||||
|
@@ -1,7 +1,6 @@
|
||||
<?php
|
||||
function connect_error() {
|
||||
global $adminer, $connection, $token, $error, $drivers;
|
||||
$databases = array();
|
||||
if (DB != "") {
|
||||
header("HTTP/1.1 404 Not Found");
|
||||
page_header(lang('Database') . ": " . h(DB), lang('Invalid database.'), true);
|
||||
@@ -23,7 +22,7 @@ function connect_error() {
|
||||
echo "<a href='" . h(ME) . "$key='>$val</a>\n";
|
||||
}
|
||||
}
|
||||
echo "<p>" . lang('%s version: %s through PHP extension %s', $drivers[DRIVER], "<b>$connection->server_info</b>", "<b>$connection->extension</b>") . "\n";
|
||||
echo "<p>" . lang('%s version: %s through PHP extension %s', $drivers[DRIVER], "<b>" . h($connection->server_info) . "</b>", "<b>$connection->extension</b>") . "\n";
|
||||
echo "<p>" . lang('Logged as: %s', "<b>" . h(logged_user()) . "</b>") . "\n";
|
||||
$databases = $adminer->databases();
|
||||
if ($databases) {
|
||||
@@ -31,15 +30,25 @@ function connect_error() {
|
||||
$collations = collations();
|
||||
echo "<form action='' method='post'>\n";
|
||||
echo "<table cellspacing='0' class='checkable' onclick='tableClick(event);' ondblclick='tableClick(event, true);'>\n";
|
||||
echo "<thead><tr>" . (support("database") ? "<td> " : "") . "<th>" . lang('Database') . "<td>" . lang('Collation') . "<td>" . lang('Tables') . "</thead>\n";
|
||||
echo "<thead><tr>"
|
||||
. (support("database") ? "<td> " : "")
|
||||
. "<th>" . lang('Database') . " - <a href='" . h(ME) . "refresh=1'>" . lang('Refresh') . "</a>"
|
||||
. "<td>" . lang('Collation')
|
||||
. "<td>" . lang('Tables')
|
||||
. "<td>" . lang('Size') . " - <a href='" . h(ME) . "dbsize=1' onclick=\"return !ajaxSetHtml('" . js_escape(ME) . "script=connect');\">" . lang('Compute') . "</a>"
|
||||
. "</thead>\n"
|
||||
;
|
||||
|
||||
foreach ($databases as $db) {
|
||||
$databases = ($_GET["dbsize"] ? count_tables($databases) : array_flip($databases));
|
||||
|
||||
foreach ($databases as $db => $tables) {
|
||||
$root = h(ME) . "db=" . urlencode($db);
|
||||
echo "<tr" . odd() . ">" . (support("database") ? "<td>" . checkbox("db[]", $db, in_array($db, (array) $_POST["db"])) : "");
|
||||
echo "<th><a href='$root'>" . h($db) . "</a>";
|
||||
$collation = nbsp(db_collation($db, $collations));
|
||||
echo "<td>" . (support("database") ? "<a href='$root" . ($scheme ? "&ns=" : "") . "&database=' title='" . lang('Alter database') . "'>$collation</a>" : $collation);
|
||||
echo "<td align='right'><a href='$root&schema=' id='tables-" . h($db) . "' title='" . lang('Database schema') . "'>?</a>";
|
||||
echo "<td align='right'><a href='$root&schema=' id='tables-" . h($db) . "' title='" . lang('Database schema') . "'>" . ($_GET["dbsize"] ? $tables : "?") . "</a>";
|
||||
echo "<td align='right' id='size-" . h($db) . "'>" . ($_GET["dbsize"] ? db_size($db) : "?");
|
||||
echo "\n";
|
||||
}
|
||||
|
||||
@@ -55,13 +64,9 @@ function connect_error() {
|
||||
echo "<input type='hidden' name='token' value='$token'>\n";
|
||||
echo "</form>\n";
|
||||
}
|
||||
echo "<p><a href='" . h(ME) . "refresh=1'>" . lang('Refresh') . "</a>\n";
|
||||
}
|
||||
|
||||
page_footer("db");
|
||||
if ($databases) {
|
||||
echo "<script type='text/javascript'>ajaxSetHtml('" . js_escape(ME) . "script=connect');</script>\n";
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_GET["status"])) {
|
||||
|
@@ -7,7 +7,7 @@
|
||||
* @return null
|
||||
*/
|
||||
function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") {
|
||||
global $LANG, $VERSION, $adminer, $connection, $drivers, $jush;
|
||||
global $LANG, $VERSION, $adminer, $drivers, $jush;
|
||||
page_headers();
|
||||
$title_all = $title . ($title2 != "" ? ": $title2" : "");
|
||||
$title_page = strip_tags($title_all . (SERVER != "" && SERVER != "localhost" ? h(" - " . SERVER) : "") . " - " . $adminer->name());
|
||||
@@ -29,7 +29,7 @@ function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") {
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
|
||||
<body class="<?php echo lang('ltr'); ?> nojs" onkeydown="bodyKeydown(event);" onclick="bodyClick(event);" onload="bodyLoad('<?php echo (is_object($connection) ? substr($connection->server_info, 0, 3) : ""); ?>');<?php echo (isset($_COOKIE["adminer_version"]) ? "" : " verifyVersion('$VERSION');"); ?>">
|
||||
<body class="<?php echo lang('ltr'); ?> nojs" onkeydown="bodyKeydown(event);" onclick="bodyClick(event);"<?php echo (isset($_COOKIE["adminer_version"]) ? "" : " onload=\"verifyVersion('$VERSION');\""); ?>>
|
||||
<script type="text/javascript">
|
||||
document.body.className = document.body.className.replace(/ nojs/, ' js');
|
||||
</script>
|
||||
|
@@ -10,6 +10,14 @@
|
||||
$this->_conn = $connection;
|
||||
}
|
||||
|
||||
/** Quote a SQL string or null value
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function quote($value) {
|
||||
return ($value === null ? "NULL" : $this->_conn->quote($value));
|
||||
}
|
||||
|
||||
/** Select data from table
|
||||
* @param string
|
||||
* @param array result of $adminer->selectColumnsProcess()[0]
|
||||
@@ -21,7 +29,7 @@
|
||||
* @param bool whether to print the query
|
||||
* @return Min_Result
|
||||
*/
|
||||
function select($table, $select, $where, $group, $order, $limit, $page, $print = false) {
|
||||
function select($table, $select, $where, $group, $order = array(), $limit = 1, $page = 0, $print = false) {
|
||||
global $adminer, $jush;
|
||||
$is_group = (count($group) < count($select));
|
||||
$query = $adminer->selectQueryBuild($select, $where, $group, $order, $limit, $page);
|
||||
@@ -34,10 +42,12 @@
|
||||
"\n"
|
||||
);
|
||||
}
|
||||
$start = microtime(true);
|
||||
$return = $this->_conn->query($query);
|
||||
if ($print) {
|
||||
echo $adminer->selectQuery($query);
|
||||
echo $adminer->selectQuery($query, format_time($start));
|
||||
}
|
||||
return $this->_conn->query($query);
|
||||
return $return;
|
||||
}
|
||||
|
||||
/** Delete data from table
|
||||
|
@@ -111,9 +111,9 @@ function referencable_primary($self) {
|
||||
|
||||
/** Print SQL <textarea> tag
|
||||
* @param string
|
||||
* @param string or array in which case [0] of every element is used
|
||||
* @param int
|
||||
* @param int
|
||||
* @param string
|
||||
* @return null
|
||||
*/
|
||||
function textarea($name, $value, $rows = 10, $cols = 80) {
|
||||
@@ -121,7 +121,7 @@ function textarea($name, $value, $rows = 10, $cols = 80) {
|
||||
echo "<textarea name='$name' rows='$rows' cols='$cols' class='sqlarea jush-$jush' spellcheck='false' wrap='off'>";
|
||||
if (is_array($value)) {
|
||||
foreach ($value as $val) { // not implode() to save memory
|
||||
echo h($val[0]) . "\n\n\n"; // $val == array($query, $time)
|
||||
echo h($val[0]) . "\n\n\n"; // $val == array($query, $time, $elapsed)
|
||||
}
|
||||
} else {
|
||||
echo h($value);
|
||||
@@ -152,7 +152,7 @@ echo optionlist($structured_types, $type);
|
||||
<td><input name="<?php echo $key; ?>[length]" value="<?php echo h($field["length"]); ?>" size="3" onfocus="editingLengthFocus(this);"<?php echo (!$field["length"] && preg_match('~var(char|binary)$~', $type) ? " class='required'" : ""); ?> onchange="editingLengthChange(this);" onkeyup="this.onchange();"><td class="options"><?php //! type="number" with enabled JavaScript
|
||||
echo "<select name='$key" . "[collation]'" . (preg_match('~(char|text|enum|set)$~', $type) ? "" : " class='hidden'") . '><option value="">(' . lang('collation') . ')' . optionlist($collations, $field["collation"]) . '</select>';
|
||||
echo ($unsigned ? "<select name='$key" . "[unsigned]'" . (!$type || preg_match('~((^|[^o])int|float|double|decimal)$~', $type) ? "" : " class='hidden'") . '><option>' . optionlist($unsigned, $field["unsigned"]) . '</select>' : '');
|
||||
echo (isset($field['on_update']) ? "<select name='$key" . "[on_update]'" . ($type == "timestamp" ? "" : " class='hidden'") . '>' . optionlist(array("" => "(" . lang('ON UPDATE') . ")", "CURRENT_TIMESTAMP"), $field["on_update"]) . '</select>' : '');
|
||||
echo (isset($field['on_update']) ? "<select name='$key" . "[on_update]'" . (preg_match('~timestamp|datetime~', $type) ? "" : " class='hidden'") . '>' . optionlist(array("" => "(" . lang('ON UPDATE') . ")", "CURRENT_TIMESTAMP"), $field["on_update"]) . '</select>' : '');
|
||||
echo ($foreign_keys ? "<select name='$key" . "[on_delete]'" . (preg_match("~`~", $type) ? "" : " class='hidden'") . "><option value=''>(" . lang('ON DELETE') . ")" . optionlist(explode("|", $on_actions), $field["on_delete"]) . "</select> " : " "); // space for IE
|
||||
}
|
||||
|
||||
@@ -199,7 +199,7 @@ function process_field($field, $type_field) {
|
||||
|| ($field["type"] == "bit" && preg_match("~^([0-9]+|b'[0-1]+')\$~", $default))
|
||||
|| ($jush == "pgsql" && preg_match("~^[a-z]+\\(('[^']*')+\\)\$~", $default))
|
||||
? $default : q($default)) : ""),
|
||||
($field["type"] == "timestamp" && $field["on_update"] ? " ON UPDATE $field[on_update]" : ""),
|
||||
(preg_match('~timestamp|datetime~', $field["type"]) && $field["on_update"] ? " ON UPDATE $field[on_update]" : ""),
|
||||
(support("comment") && $field["comment"] != "" ? " COMMENT " . q($field["comment"]) : ""),
|
||||
($field["auto_increment"] ? auto_increment() : null),
|
||||
);
|
||||
@@ -394,7 +394,7 @@ function drop_create($drop, $create, $drop_created, $test, $drop_test, $location
|
||||
*/
|
||||
function create_trigger($on, $row) {
|
||||
global $jush;
|
||||
$timing_event = " $row[Timing] $row[Event]";
|
||||
$timing_event = " $row[Timing] $row[Event]" . ($row["Event"] == "UPDATE OF" ? " " . idf_escape($row["Of"]) : "");
|
||||
return "CREATE TRIGGER "
|
||||
. idf_escape($row["Trigger"])
|
||||
. ($jush == "mssql" ? $on . $timing_event : $timing_event . $on)
|
||||
@@ -496,3 +496,28 @@ function doc_link($paths) {
|
||||
);
|
||||
return ($paths[$jush] ? "<a href='$urls[$jush]$paths[$jush]' target='_blank' rel='noreferrer'><sup>?</sup></a>" : "");
|
||||
}
|
||||
|
||||
/** Wrap gzencode() for usage in ob_start()
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function ob_gzencode($string) {
|
||||
// ob_start() callback recieves an optional parameter $phase but gzencode() accepts optional parameter $level
|
||||
return gzencode($string);
|
||||
}
|
||||
|
||||
/** Compute size of database
|
||||
* @param string
|
||||
* @return string formatted
|
||||
*/
|
||||
function db_size($db) {
|
||||
global $connection;
|
||||
if (!$connection->select_db($db)) {
|
||||
return "?";
|
||||
}
|
||||
$return = 0;
|
||||
foreach (table_status() as $table_status) {
|
||||
$return += $table_status["Data_length"] + $table_status["Index_length"];
|
||||
}
|
||||
return format_number($return);
|
||||
}
|
||||
|
@@ -159,7 +159,7 @@ function html_select($name, $options, $value = "", $onchange = true) {
|
||||
function select_input($attrs, $options, $value = "", $placeholder = "") {
|
||||
return ($options
|
||||
? "<select$attrs><option value=''>$placeholder" . optionlist($options, $value, true) . "</select>"
|
||||
: "<input$attrs value='" . h($value) . "' placeholder='$placeholder'>"
|
||||
: "<input$attrs size='10' value='" . h($value) . "' placeholder='$placeholder'>"
|
||||
);
|
||||
}
|
||||
|
||||
@@ -249,13 +249,41 @@ function sid() {
|
||||
return $return;
|
||||
}
|
||||
|
||||
/** Shortcut for $connection->quote($string)
|
||||
/** Set password to session
|
||||
* @param string
|
||||
* @param string
|
||||
* @param string
|
||||
* @param string
|
||||
* @return null
|
||||
*/
|
||||
function set_password($vendor, $server, $username, $password) {
|
||||
$_SESSION["pwds"][$vendor][$server][$username] = ($_COOKIE["adminer_key"] && is_string($password)
|
||||
? array(encrypt_string($password, $_COOKIE["adminer_key"]))
|
||||
: $password
|
||||
);
|
||||
}
|
||||
|
||||
/** Get password from session
|
||||
* @return string
|
||||
*/
|
||||
function get_password() {
|
||||
$return = get_session("pwds");
|
||||
if (is_array($return)) {
|
||||
$return = ($_COOKIE["adminer_key"]
|
||||
? decrypt_string($return[0], $_COOKIE["adminer_key"])
|
||||
: false
|
||||
);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
/** Shortcut for $driver->quote($string)
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function q($string) {
|
||||
global $connection;
|
||||
return $connection->quote($string);
|
||||
global $driver;
|
||||
return $driver->quote($string);
|
||||
}
|
||||
|
||||
/** Get list of values from database
|
||||
@@ -357,7 +385,7 @@ function where($where, $fields = array()) {
|
||||
: " = " . unconvert_field($fields[$key], q($val))
|
||||
) // LIKE because of floats but slow with ints, in MS SQL because of text
|
||||
; //! enum and set
|
||||
if ($jush == "sql" && preg_match("~[^ -@]~", $val)) { // not just [a-z] to catch non-ASCII characters
|
||||
if ($jush == "sql" && preg_match('~char|text~', $fields[$key]["type"]) && preg_match("~[^ -@]~", $val)) { // not just [a-z] to catch non-ASCII characters
|
||||
$return[] = "$column = " . q($val) . " COLLATE utf8_bin";
|
||||
}
|
||||
}
|
||||
@@ -520,17 +548,16 @@ function redirect($location, $message = null) {
|
||||
* @param bool
|
||||
* @return bool
|
||||
*/
|
||||
function query_redirect($query, $location, $message, $redirect = true, $execute = true, $failed = false) {
|
||||
function query_redirect($query, $location, $message, $redirect = true, $execute = true, $failed = false, $time = "") {
|
||||
global $connection, $error, $adminer;
|
||||
$time = "";
|
||||
if ($execute) {
|
||||
$start = microtime(true);
|
||||
$failed = !$connection->query($query);
|
||||
$time = "; -- " . format_time($start, microtime(true));
|
||||
$time = format_time($start);
|
||||
}
|
||||
$sql = "";
|
||||
if ($query) {
|
||||
$sql = $adminer->messageQuery($query . $time);
|
||||
$sql = $adminer->messageQuery($query, $time);
|
||||
}
|
||||
if ($failed) {
|
||||
$error = error() . $sql;
|
||||
@@ -543,21 +570,22 @@ function query_redirect($query, $location, $message, $redirect = true, $execute
|
||||
}
|
||||
|
||||
/** Execute and remember query
|
||||
* @param string null to return remembered queries, end with ';' to use DELIMITER
|
||||
* @return Min_Result
|
||||
* @param string or null to return remembered queries, end with ';' to use DELIMITER
|
||||
* @return Min_Result or array($queries, $time) if $query = null
|
||||
*/
|
||||
function queries($query = null) {
|
||||
function queries($query) {
|
||||
global $connection;
|
||||
static $queries = array();
|
||||
if ($query === null) {
|
||||
// return executed queries without parameter
|
||||
return implode("\n", $queries);
|
||||
static $start;
|
||||
if (!$start) {
|
||||
$start = microtime(true);
|
||||
}
|
||||
$start = microtime(true);
|
||||
$return = $connection->query($query);
|
||||
$queries[] = (preg_match('~;$~', $query) ? "DELIMITER ;;\n$query;\nDELIMITER " : $query)
|
||||
. "; -- " . format_time($start, microtime(true));
|
||||
return $return;
|
||||
if ($query === null) {
|
||||
// return executed queries
|
||||
return array(implode("\n", $queries), format_time($start));
|
||||
}
|
||||
$queries[] = (preg_match('~;$~', $query) ? "DELIMITER ;;\n$query;\nDELIMITER " : $query) . ";";
|
||||
return $connection->query($query);
|
||||
}
|
||||
|
||||
/** Apply command to all array items
|
||||
@@ -582,16 +610,16 @@ function apply_queries($query, $tables, $escape = 'table') {
|
||||
* @return bool
|
||||
*/
|
||||
function queries_redirect($location, $message, $redirect) {
|
||||
return query_redirect(queries(), $location, $message, $redirect, false, !$redirect);
|
||||
list($queries, $time) = queries(null);
|
||||
return query_redirect($queries, $location, $message, $redirect, false, !$redirect, $time);
|
||||
}
|
||||
|
||||
/** Format time difference
|
||||
* @param string output of microtime(true)
|
||||
* @param string output of microtime(true)
|
||||
/** Format elapsed time
|
||||
* @param float output of microtime(true)
|
||||
* @return string HTML code
|
||||
*/
|
||||
function format_time($start, $end) {
|
||||
return lang('%.3f s', max(0, $end - $start));
|
||||
function format_time($start) {
|
||||
return lang('%.3f s', max(0, microtime(true) - $start));
|
||||
}
|
||||
|
||||
/** Remove parameter from query string
|
||||
@@ -695,6 +723,14 @@ function shorten_utf8($string, $length = 80, $suffix = "") {
|
||||
return h($match[1]) . $suffix . (isset($match[2]) ? "" : "<i>...</i>");
|
||||
}
|
||||
|
||||
/** Format decimal number
|
||||
* @param int
|
||||
* @return string
|
||||
*/
|
||||
function format_number($val) {
|
||||
return strtr(number_format($val, 0, ".", lang(',')), preg_split('~~u', lang('0123456789'), -1, PREG_SPLIT_NO_EMPTY));
|
||||
}
|
||||
|
||||
/** Generate friendly URL
|
||||
* @param string
|
||||
* @return string
|
||||
@@ -711,12 +747,14 @@ function friendly_url($val) {
|
||||
*/
|
||||
function hidden_fields($process, $ignore = array()) {
|
||||
while (list($key, $val) = each($process)) {
|
||||
if (is_array($val)) {
|
||||
foreach ($val as $k => $v) {
|
||||
$process[$key . "[$k]"] = $v;
|
||||
if (!in_array($key, $ignore)) {
|
||||
if (is_array($val)) {
|
||||
foreach ($val as $k => $v) {
|
||||
$process[$key . "[$k]"] = $v;
|
||||
}
|
||||
} else {
|
||||
echo '<input type="hidden" name="' . h($key) . '" value="' . h($val) . '">';
|
||||
}
|
||||
} elseif (!in_array($key, $ignore)) {
|
||||
echo '<input type="hidden" name="' . h($key) . '" value="' . h($val) . '">';
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -880,7 +918,7 @@ function process_input($field) {
|
||||
return ($field["on_update"] == "CURRENT_TIMESTAMP" ? idf_escape($field["field"]) : false);
|
||||
}
|
||||
if ($function == "NULL") {
|
||||
return "NULL";
|
||||
$value = null;
|
||||
}
|
||||
if ($field["type"] == "set") {
|
||||
return array_sum((array) $value);
|
||||
@@ -903,6 +941,31 @@ function process_input($field) {
|
||||
return $adminer->processInput($field, $value, $function);
|
||||
}
|
||||
|
||||
/** Compute fields() from $_POST edit data
|
||||
* @return array
|
||||
*/
|
||||
function fields_from_edit() {
|
||||
global $driver;
|
||||
$return = array();
|
||||
foreach ((array) $_POST["field_keys"] as $key => $val) {
|
||||
if ($val != "") {
|
||||
$val = bracket_escape($val);
|
||||
$_POST["function"][$val] = $_POST["field_funs"][$key];
|
||||
$_POST["fields"][$val] = $_POST["field_vals"][$key];
|
||||
}
|
||||
}
|
||||
foreach ((array) $_POST["fields"] as $key => $val) {
|
||||
$name = bracket_escape($key, 1); // 1 - back
|
||||
$return[$name] = array(
|
||||
"field" => $name,
|
||||
"privileges" => array("insert" => 1, "update" => 1),
|
||||
"null" => 1,
|
||||
"auto_increment" => ($key == $driver->primary),
|
||||
);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
/** Print results of search in all tables
|
||||
* @uses $_GET["where"][0]
|
||||
* @uses $_POST["tables"]
|
||||
@@ -971,26 +1034,33 @@ function apply_sql_function($function, $column) {
|
||||
return ($function ? ($function == "unixepoch" ? "DATETIME($column, '$function')" : ($function == "count distinct" ? "COUNT(DISTINCT " : strtoupper("$function(")) . "$column)") : $column);
|
||||
}
|
||||
|
||||
/** Read password from file adminer.key in temporary directory or create one
|
||||
* @param bool
|
||||
* @return string or false if the file can not be created
|
||||
/** Get path of the temporary directory
|
||||
* @return string
|
||||
*/
|
||||
function password_file($create) {
|
||||
$dir = ini_get("upload_tmp_dir"); // session_save_path() may contain other storage path
|
||||
if (!$dir) {
|
||||
function get_temp_dir() {
|
||||
$return = ini_get("upload_tmp_dir"); // session_save_path() may contain other storage path
|
||||
if (!$return) {
|
||||
if (function_exists('sys_get_temp_dir')) {
|
||||
$dir = sys_get_temp_dir();
|
||||
$return = sys_get_temp_dir();
|
||||
} else {
|
||||
$filename = @tempnam("", ""); // @ - temp directory can be disabled by open_basedir
|
||||
if (!$filename) {
|
||||
return false;
|
||||
}
|
||||
$dir = dirname($filename);
|
||||
$return = dirname($filename);
|
||||
unlink($filename);
|
||||
}
|
||||
}
|
||||
$filename = "$dir/adminer.key";
|
||||
$return = @file_get_contents($filename); // @ - can not exist
|
||||
return $return;
|
||||
}
|
||||
|
||||
/** Read password from file adminer.key in temporary directory or create one
|
||||
* @param bool
|
||||
* @return string or false if the file can not be created
|
||||
*/
|
||||
function password_file($create) {
|
||||
$filename = get_temp_dir() . "/adminer.key";
|
||||
$return = @file_get_contents($filename); // @ - may not exist
|
||||
if ($return || !$create) {
|
||||
return $return;
|
||||
}
|
||||
@@ -1037,9 +1107,9 @@ function select_value($val, $link, $field, $text_length) {
|
||||
$link = "mailto:$val";
|
||||
}
|
||||
if ($protocol = is_url($val)) {
|
||||
$link = ($protocol == "http" && $HTTPS
|
||||
$link = (($protocol == "http" && $HTTPS) || preg_match('~WebKit~i', $_SERVER["HTTP_USER_AGENT"]) // WebKit supports noreferrer since 2009
|
||||
? $val // HTTP links from HTTPS pages don't receive Referer automatically
|
||||
: "$protocol://www.adminer.org/redirect/?url=" . urlencode($val) // intermediate page to hide Referer, may be changed to rel="noreferrer" in HTML5
|
||||
: "$protocol://www.adminer.org/redirect/?url=" . urlencode($val) // intermediate page to hide Referer
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1194,3 +1264,101 @@ function lzw_decompress($binary) {
|
||||
function on_help($command, $side = 0) {
|
||||
return " onmouseover='helpMouseover(this, event, " . h($command) . ", $side);' onmouseout='helpMouseout(this, event);'";
|
||||
}
|
||||
|
||||
/** Print edit data form
|
||||
* @param string
|
||||
* @param array
|
||||
* @param mixed
|
||||
* @param bool
|
||||
* @return null
|
||||
*/
|
||||
function edit_form($TABLE, $fields, $row, $update) {
|
||||
global $adminer, $jush, $token, $error;
|
||||
$table_name = $adminer->tableName(table_status1($TABLE, true));
|
||||
page_header(
|
||||
($update ? lang('Edit') : lang('Insert')),
|
||||
$error,
|
||||
array("select" => array($TABLE, $table_name)),
|
||||
$table_name
|
||||
);
|
||||
if ($row === false) {
|
||||
echo "<p class='error'>" . lang('No rows.') . "\n";
|
||||
}
|
||||
?>
|
||||
<div id="message"></div>
|
||||
<form action="" method="post" enctype="multipart/form-data" id="form">
|
||||
<?php
|
||||
if (!$fields) {
|
||||
echo "<p class='error'>" . lang('You have no privileges to update this table.') . "\n";
|
||||
} else {
|
||||
echo "<table cellspacing='0' onkeydown='return editingKeydown(event);'>\n";
|
||||
|
||||
foreach ($fields as $name => $field) {
|
||||
echo "<tr><th>" . $adminer->fieldName($field);
|
||||
$default = $_GET["set"][bracket_escape($name)];
|
||||
if ($default === null) {
|
||||
$default = $field["default"];
|
||||
if ($field["type"] == "bit" && preg_match("~^b'([01]*)'\$~", $default, $regs)) {
|
||||
$default = $regs[1];
|
||||
}
|
||||
}
|
||||
$value = ($row !== null
|
||||
? ($row[$name] != "" && $jush == "sql" && preg_match("~enum|set~", $field["type"])
|
||||
? (is_array($row[$name]) ? array_sum($row[$name]) : +$row[$name])
|
||||
: $row[$name]
|
||||
)
|
||||
: (!$update && $field["auto_increment"]
|
||||
? ""
|
||||
: (isset($_GET["select"]) ? false : $default)
|
||||
)
|
||||
);
|
||||
if (!$_POST["save"] && is_string($value)) {
|
||||
$value = $adminer->editVal($value, $field);
|
||||
}
|
||||
$function = ($_POST["save"]
|
||||
? (string) $_POST["function"][$name]
|
||||
: ($update && $field["on_update"] == "CURRENT_TIMESTAMP"
|
||||
? "now"
|
||||
: ($value === false ? null : ($value !== null ? '' : 'NULL'))
|
||||
)
|
||||
);
|
||||
if (preg_match("~time~", $field["type"]) && $value == "CURRENT_TIMESTAMP") {
|
||||
$value = "";
|
||||
$function = "now";
|
||||
}
|
||||
input($field, $value, $function);
|
||||
echo "\n";
|
||||
}
|
||||
if (!support("table")) {
|
||||
echo "<tr>"
|
||||
. "<th><input name='field_keys[]' onkeyup='keyupChange.call(this);' onchange='fieldChange(this);' value=''>" // needs empty value for keyupChange()
|
||||
. "<td class='function'>" . html_select("field_funs[]", $adminer->editFunctions(array("null" => isset($_GET["select"]))))
|
||||
. "<td><input name='field_vals[]'>"
|
||||
. "\n"
|
||||
;
|
||||
}
|
||||
echo "</table>\n";
|
||||
}
|
||||
echo "<p>\n";
|
||||
if ($fields) {
|
||||
echo "<input type='submit' value='" . lang('Save') . "'>\n";
|
||||
if (!isset($_GET["select"])) {
|
||||
echo "<input type='submit' name='insert' value='" . ($update
|
||||
? lang('Save and continue edit') . "' onclick='return !ajaxForm(this.form, \"" . lang('Saving') . '...", this)'
|
||||
: lang('Save and insert next')
|
||||
) . "' title='Ctrl+Shift+Enter'>\n";
|
||||
}
|
||||
}
|
||||
echo ($update ? "<input type='submit' name='delete' value='" . lang('Delete') . "'" . confirm() . ">\n"
|
||||
: ($_POST || !$fields ? "" : "<script type='text/javascript'>focus(document.getElementById('form').getElementsByTagName('td')[1].firstChild);</script>\n")
|
||||
);
|
||||
if (isset($_GET["select"])) {
|
||||
hidden_fields(array("check" => (array) $_POST["check"], "clone" => $_POST["clone"], "all" => $_POST["all"]));
|
||||
}
|
||||
?>
|
||||
<input type="hidden" name="referer" value="<?php echo h(isset($_POST["referer"]) ? $_POST["referer"] : $_SERVER["HTTP_REFERER"]); ?>">
|
||||
<input type="hidden" name="save" value="1">
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</form>
|
||||
<?php
|
||||
}
|
||||
|
@@ -19,9 +19,10 @@ $langs = array(
|
||||
'ko' => '한국어', // dalli - skcha67@gmail.com
|
||||
'lt' => 'Lietuvių', // Paulius Leščinskas - http://www.lescinskas.lt
|
||||
'nl' => 'Nederlands', // Maarten Balliauw - http://blog.maartenballiauw.be
|
||||
'no' => 'Norsk', // Iver Odin Kvello, mupublishing.com
|
||||
'pl' => 'Polski', // Radosław Kowalewski - http://srsbiz.pl/
|
||||
'pt' => 'Português', // André Dias
|
||||
'pt-br' => 'Português (Brazil)', // Gian Live - gian@live.com, Davi Alexandre davi@davialexandre.com.br
|
||||
'pt-br' => 'Português (Brazil)', // Gian Live - gian@live.com, Davi Alexandre davi@davialexandre.com.br, RobertoPC - http://www.robertopc.com.br
|
||||
'ro' => 'Limba Română', // .nick .messing - dot.nick.dot.messing@gmail.com
|
||||
'ru' => 'Русский язык', // Maksim Izmaylov
|
||||
'sk' => 'Slovenčina', // Ivan Suchy - http://www.ivansuchy.com, Juraj Krivda - http://www.jstudio.cz
|
||||
@@ -31,6 +32,7 @@ $langs = array(
|
||||
'th' => 'ภาษาไทย', // Panya Saraphi, elect.tu@gmail.com - http://www.opencart2u.com/
|
||||
'tr' => 'Türkçe', // Bilgehan Korkmaz - turktron.com
|
||||
'uk' => 'Українська', // Valerii Kryzhov
|
||||
'vi' => 'Tiếng Việt', // Giang Manh @ manhgd google mail
|
||||
'zh' => '简体中文', // Mr. Lodar, vea - urn2.net - vea.urn2@gmail.com
|
||||
'zh-tw' => '繁體中文', // http://tzangms.com
|
||||
);
|
||||
@@ -67,7 +69,7 @@ function lang($idf, $number = null) {
|
||||
array_shift($args);
|
||||
$format = str_replace("%d", "%s", $translation);
|
||||
if ($format != $translation) {
|
||||
$args[0] = number_format($number, 0, ".", lang(','));
|
||||
$args[0] = format_number($number);
|
||||
}
|
||||
return vsprintf($format, $args);
|
||||
}
|
||||
|
@@ -16,8 +16,7 @@ if (extension_loaded('pdo')) {
|
||||
try {
|
||||
parent::__construct($dsn, $username, $password);
|
||||
} catch (Exception $ex) {
|
||||
auth_error($ex);
|
||||
exit;
|
||||
auth_error($ex->getMessage());
|
||||
}
|
||||
$this->setAttribute(13, array('Min_PDOStatement')); // 13 - PDO::ATTR_STATEMENT_CLASS
|
||||
$this->server_info = $this->getAttribute(4); // 4 - PDO::ATTR_SERVER_VERSION
|
||||
|
@@ -1,2 +1,2 @@
|
||||
<?php
|
||||
$VERSION = "4.0.2";
|
||||
$VERSION = "4.1.0";
|
||||
|
@@ -10,7 +10,7 @@
|
||||
include "./include/bootstrap.inc.php";
|
||||
include "./include/tmpfile.inc.php";
|
||||
|
||||
$enum_length = "'(?:''|[^'\\\\]|\\\\.)*+'";
|
||||
$enum_length = "'(?:''|[^'\\\\]|\\\\.)*'";
|
||||
$inout = "IN|OUT|INOUT";
|
||||
|
||||
if (isset($_GET["select"]) && ($_POST["edit"] || $_POST["clone"]) && !$_POST["save"]) {
|
||||
|
@@ -51,7 +51,7 @@ if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"]) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
$alter[] = array($index["type"], $name, "(" . implode(", ", $set) . ")");
|
||||
$alter[] = array($index["type"], $name, $set);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -102,7 +102,7 @@ if (!$row) {
|
||||
if ($primary) {
|
||||
echo "<tr><td>PRIMARY<td>";
|
||||
foreach ($primary["columns"] as $key => $column) {
|
||||
echo "<select disabled>" . optionlist($fields, $column) . "</select>";
|
||||
echo select_input(" disabled", $fields, $column);
|
||||
echo "<label><input disabled type='checkbox'>" . lang('descending') . "</label> ";
|
||||
}
|
||||
echo "<td><td>\n";
|
||||
@@ -116,7 +116,11 @@ foreach ($row["indexes"] as $index) {
|
||||
ksort($index["columns"]);
|
||||
$i = 1;
|
||||
foreach ($index["columns"] as $key => $column) {
|
||||
echo "<span>" . html_select("indexes[$j][columns][$i]", array(-1 => "") + $fields, $column, ($i == count($index["columns"]) ? "indexesAddColumn" : "indexesChangeColumn") . "(this, '" . js_escape($jush == "sql" ? "" : $_GET["indexes"] . "_") . "');");
|
||||
echo "<span>" . select_input(
|
||||
" name='indexes[$j][columns][$i]' onchange=\"" . ($i == count($index["columns"]) ? "indexesAddColumn" : "indexesChangeColumn") . "(this, '" . js_escape($jush == "sql" ? "" : $_GET["indexes"] . "_") . "');\"",
|
||||
($fields ? array_combine($fields, $fields) : $fields),
|
||||
$column
|
||||
);
|
||||
echo ($jush == "sql" || $jush == "mssql" ? "<input type='number' name='indexes[$j][lengths][$i]' class='size' value='" . h($index["lengths"][$key]) . "'>" : "");
|
||||
echo ($jush != "sql" ? checkbox("indexes[$j][descs][$i]", 1, $index["descs"][$key], lang('descending')) : "");
|
||||
echo " </span>";
|
||||
|
@@ -177,6 +177,7 @@ $translations = array(
|
||||
'Data Free' => 'المساحة الحرة',
|
||||
'Rows' => 'الأسطر',
|
||||
',' => ',',
|
||||
'0123456789' => '٠١٢٣٤٥٦٧٨٩',
|
||||
'Analyze' => 'تحليل',
|
||||
'Optimize' => 'تحسين',
|
||||
'Check' => 'فحص',
|
||||
@@ -224,7 +225,6 @@ $translations = array(
|
||||
'Databases have been dropped.' => 'تم حذف قواعد البيانات.',
|
||||
'Database has been dropped.' => 'تم حذف قاعدة البيانات.',
|
||||
'Search data in tables' => 'بحث في الجداول',
|
||||
'schema' => 'المخطط',
|
||||
'Schema' => 'المخطط',
|
||||
'Alter schema' => 'تعديل المخطط',
|
||||
'Create schema' => 'إنشاء مخطط',
|
||||
|
@@ -179,6 +179,7 @@ $translations = array(
|
||||
'Tables have been truncated.' => 'টেবিল ছাঁটাই করা হয়েছে',
|
||||
'Rows' => 'সারি',
|
||||
',' => ',',
|
||||
'0123456789' => '০১২৩৪৫৬৭৮৯',
|
||||
'Tables have been moved.' => 'টেবিল স্থানান্তর করা হয়েছে।',
|
||||
'Move to other database' => 'অন্য ডাটাবেজে স্থানান্তর করো',
|
||||
'Move' => 'স্থানান্তর করো',
|
||||
@@ -225,7 +226,6 @@ $translations = array(
|
||||
'Permanent login' => 'স্থায়ী লগইন',
|
||||
'Databases have been dropped.' => 'ডাটাবেজসমূহ মুছে ফেলা হয়েছে।',
|
||||
'Search data in tables' => 'টেবিলে খোঁজ করো',
|
||||
'schema' => 'স্কিমা',
|
||||
'Schema' => 'স্কিমা',
|
||||
'Alter schema' => 'স্কিমা পরিবর্তন করো',
|
||||
'Create schema' => 'স্কিমা তৈরী করো',
|
||||
|
@@ -179,6 +179,7 @@ $translations = array(
|
||||
'Tables have been truncated.' => 'S\'han escapçat les taules.',
|
||||
'Rows' => 'Files',
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Tables have been moved.' => 'S\'han desplaçat les taules.',
|
||||
'Move to other database' => 'Desplaça a una altra base de dades',
|
||||
'Move' => 'Desplaça',
|
||||
@@ -239,7 +240,6 @@ $translations = array(
|
||||
'Schema has been dropped.' => 'S\'ha suprimit l\'esquema.',
|
||||
'Schema has been created.' => 'S\'ha creat l\'esquema.',
|
||||
'Schema has been altered.' => 'S\'ha modificat l\'esquema.',
|
||||
'schema' => 'esquema',
|
||||
'Schema' => 'Esquema',
|
||||
'Sequences' => 'Seqüències',
|
||||
'Create sequence' => 'Crea una seqüència',
|
||||
|
@@ -11,6 +11,7 @@ $translations = array(
|
||||
'Logged as: %s' => 'Přihlášen jako: %s',
|
||||
'Logout successful.' => 'Odhlášení proběhlo v pořádku.',
|
||||
'Invalid credentials.' => 'Neplatné přihlašovací údaje.',
|
||||
'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.'),
|
||||
'Master password expired. <a href="http://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.' => 'Platnost hlavního hesla vypršela. <a href="http://www.adminer.org/cs/extension/" target="_blank">Implementujte</a> metodu %s, aby platilo stále.',
|
||||
'Language' => 'Jazyk',
|
||||
'Invalid CSRF token. Send the form again.' => 'Neplatný token CSRF. Odešlete formulář znovu.',
|
||||
@@ -95,6 +96,7 @@ $translations = array(
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Úložiště',
|
||||
'Collation' => 'Porovnávání',
|
||||
'Data Length' => 'Velikost dat',
|
||||
@@ -165,6 +167,8 @@ $translations = array(
|
||||
'Default values' => 'Výchozí hodnoty',
|
||||
'Drop' => 'Odstranit',
|
||||
'Are you sure?' => 'Opravdu?',
|
||||
'Size' => 'Velikost',
|
||||
'Compute' => 'Spočítat',
|
||||
'Move up' => 'Přesunout nahoru',
|
||||
'Move down' => 'Přesunout dolů',
|
||||
'Remove' => 'Odebrat',
|
||||
@@ -308,7 +312,6 @@ $translations = array(
|
||||
'Schema has been dropped.' => 'Schéma bylo odstraněno.',
|
||||
'Schema has been created.' => 'Schéma bylo vytvořeno.',
|
||||
'Schema has been altered.' => 'Schéma bylo změněno.',
|
||||
'schema' => 'schéma',
|
||||
'Schema' => 'Schéma',
|
||||
'Invalid schema.' => 'Nesprávné schéma.',
|
||||
|
||||
|
@@ -179,6 +179,7 @@ $translations = array(
|
||||
'Tables have been truncated.' => 'Tabellen sind entleert worden (truncate).',
|
||||
'Rows' => 'Datensätze',
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Tables have been moved.' => 'Tabellen verschoben.',
|
||||
'Move to other database' => 'In andere Datenbank verschieben',
|
||||
'Move' => 'Verschieben',
|
||||
@@ -225,7 +226,6 @@ $translations = array(
|
||||
'Permanent login' => 'Passwort speichern',
|
||||
'Databases have been dropped.' => 'Datenbanken entfernt.',
|
||||
'Search data in tables' => 'Suche in Tabellen',
|
||||
'schema' => 'Schema',
|
||||
'Schema' => 'Schema',
|
||||
'Alter schema' => 'Schema ändern',
|
||||
'Create schema' => 'Neues Schema',
|
||||
|
@@ -1,5 +1,6 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Too many unsuccessful logins, try again in %d minute.', 'Too many unsuccessful logins, try again in %d minutes.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Query executed OK, %d row affected.', 'Query executed OK, %d rows affected.'),
|
||||
'%d byte(s)' => array('%d byte', '%d bytes'),
|
||||
'Routine has been called, %d row(s) affected.' => array('Routine has been called, %d row affected.', 'Routine has been called, %d rows affected.'),
|
||||
|
@@ -179,6 +179,7 @@ $translations = array(
|
||||
'Tables have been truncated.' => 'Tablas vaciadas (truncate).',
|
||||
'Rows' => 'Registros',
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Tables have been moved.' => 'Se movieron las tablas.',
|
||||
'Move to other database' => 'Mover a otra base de datos',
|
||||
'Move' => 'Mover',
|
||||
@@ -225,7 +226,6 @@ $translations = array(
|
||||
'Permanent login' => 'Guardar contraseña',
|
||||
'Databases have been dropped.' => 'Bases de datos eliminadas.',
|
||||
'Search data in tables' => 'Buscar datos en tablas',
|
||||
'schema' => 'esquema',
|
||||
'Schema' => 'Esquema',
|
||||
'Alter schema' => 'Modificar esquema',
|
||||
'Create schema' => 'Crear esquema',
|
||||
|
@@ -179,6 +179,7 @@ $translations = array(
|
||||
'Data Free' => 'Vaba ruumi',
|
||||
'Rows' => 'Ridu',
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Analyze' => 'Analüüsi',
|
||||
'Optimize' => 'Optimeeri',
|
||||
'Check' => 'Kontrolli',
|
||||
@@ -225,7 +226,6 @@ $translations = array(
|
||||
'Permanent login' => 'Jäta mind meelde',
|
||||
'Databases have been dropped.' => 'Andmebaasid on edukalt kustutatud.',
|
||||
'Search data in tables' => 'Otsi kogu andmebaasist',
|
||||
'schema' => 'struktuur',
|
||||
'Schema' => 'Struktuur',
|
||||
'Alter schema' => 'Muuda struktuuri',
|
||||
'Create schema' => 'Loo struktuur',
|
||||
|
@@ -93,6 +93,7 @@ $translations = array(
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ' ',
|
||||
'0123456789' => '۰۱۲۳۴۵۶۷۸۹',
|
||||
'Engine' => 'موتور',
|
||||
'Collation' => 'تطبیق',
|
||||
'Data Length' => 'طول داده',
|
||||
@@ -293,7 +294,6 @@ $translations = array(
|
||||
'Schema has been dropped.' => 'ساختار حذف شد',
|
||||
'Schema has been created.' => 'ساختار ایجاد شد',
|
||||
'Schema has been altered.' => 'ساختار ویرایش شد',
|
||||
'schema' => 'ساختار',
|
||||
'Schema' => 'ساختار',
|
||||
'Invalid schema.' => 'ساختار نامعتبر',
|
||||
|
||||
|
@@ -177,6 +177,7 @@ $translations = array(
|
||||
'Data Free' => 'Espace inutilisé',
|
||||
'Rows' => 'Lignes',
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Analyze' => 'Analyser',
|
||||
'Optimize' => 'Optimiser',
|
||||
'Check' => 'Vérifier',
|
||||
@@ -192,7 +193,7 @@ $translations = array(
|
||||
'Partitions' => 'Partitions',
|
||||
'Partition name' => 'Nom de la partition',
|
||||
'Values' => 'Valeurs',
|
||||
'%d row(s) have been imported.' => array('%d ligne a été importée.','%d lignes ont été importées.'),
|
||||
'%d row(s) have been imported.' => array('%d ligne a été importée.', '%d lignes ont été importées.'),
|
||||
'anywhere' => 'n\'importe où',
|
||||
'Import' => 'Importer',
|
||||
'Stop on error' => 'Arrêter en cas d\'erreur',
|
||||
@@ -224,7 +225,6 @@ $translations = array(
|
||||
'Databases have been dropped.' => 'Les bases de données ont été supprimées.',
|
||||
'Database has been dropped.' => 'La base de données a été supprimée.',
|
||||
'Search data in tables' => 'Rechercher dans les tables',
|
||||
'schema' => 'schéma',
|
||||
'Schema' => 'Schéma',
|
||||
'Alter schema' => 'Modifier le schéma',
|
||||
'Create schema' => 'Créer un schéma',
|
||||
@@ -267,4 +267,21 @@ $translations = array(
|
||||
'Permanent link' => 'Lien permanent',
|
||||
'Edit all' => 'Tout modifier',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'Selected' => 'Sélectionnée(s)',
|
||||
'Modify' => 'Modification',
|
||||
'Load more data' => 'Charger plus de données',
|
||||
'Loading' => 'Chargement',
|
||||
'Tables have been optimized.' => 'Les tables ont bien été optimisées.',
|
||||
'Vacuum' => 'Vide',
|
||||
'File must be in UTF-8 encoding.' => 'Les fichiers doivent être encodées en UTF-8.',
|
||||
'Full table scan' => 'Scan de toute la table',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Trop de connexions infructueuses, essayez de nouveau dans %d minute.', 'Trop de connexions infructueuses, essayez de nouveau dans %d minutes.'),
|
||||
'Master password expired. <a href="http://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.' => 'Le mot de passe a expiré. <a href="http://www.adminer.org/en/extension/" target="_blank">Mettre en oeuvre</a> de la méthode %s afin de la rendre permanente.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Vous pouvez uploader de gros fichiers SQL par FTP et ensuite l\'importer depuis le serveur.',
|
||||
'Size' => 'Taille',
|
||||
'Compute' => 'Calcul',
|
||||
'You have no privileges to update this table.' => 'Vous n\'avez pas les droits pour mettre à jour cette table.',
|
||||
'Saving' => 'Enregistrement',
|
||||
'yes' => 'oui',
|
||||
'no' => 'non',
|
||||
);
|
||||
|
@@ -179,6 +179,7 @@ $translations = array(
|
||||
'Tables have been truncated.' => 'A tábla felszabadítva.',
|
||||
'Rows' => 'Oszlop',
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Tables have been moved.' => 'Táblák áthelyezve.',
|
||||
'Move to other database' => 'Áthelyezés másik adatbázisba',
|
||||
'Move' => 'Áthelyez',
|
||||
@@ -238,7 +239,6 @@ $translations = array(
|
||||
'Schema has been dropped.' => 'Séma eldobva.',
|
||||
'Schema has been created.' => 'Séma létrejött.',
|
||||
'Schema has been altered.' => 'Séma módosult.',
|
||||
'schema' => 'séma',
|
||||
'Schema' => 'Séma',
|
||||
'Sequences' => 'Sorozatok',
|
||||
'Create sequence' => 'Sorozat létrehozása',
|
||||
|
@@ -93,6 +93,7 @@ $translations = array(
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => '.',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Mesin',
|
||||
'Collation' => 'Kolasi',
|
||||
'Data Length' => 'Panjang Data',
|
||||
@@ -297,7 +298,6 @@ $translations = array(
|
||||
'Schema has been dropped.' => 'Skema berhasil dihapus.',
|
||||
'Schema has been created.' => 'Skema berhasil dibuat.',
|
||||
'Schema has been altered.' => 'Skema berhasil diubah.',
|
||||
'schema' => 'skema',
|
||||
'Schema' => 'Skema',
|
||||
'Invalid schema.' => 'Skema invalid.',
|
||||
|
||||
|
@@ -179,6 +179,7 @@ $translations = array(
|
||||
'Data Free' => 'Dati liberi',
|
||||
'Rows' => 'Righe',
|
||||
',' => '.',
|
||||
'0123456789' => '0123456789',
|
||||
'Analyze' => 'Analizza',
|
||||
'Optimize' => 'Ottimizza',
|
||||
'Check' => 'Controlla',
|
||||
@@ -225,7 +226,6 @@ $translations = array(
|
||||
'Permanent login' => 'Login permanente',
|
||||
'Databases have been dropped.' => 'Database eliminati.',
|
||||
'Search data in tables' => 'Cerca nelle tabelle',
|
||||
'schema' => 'schema',
|
||||
'Schema' => 'Schema',
|
||||
'Alter schema' => 'Modifica schema',
|
||||
'Create schema' => 'Crea schema',
|
||||
|
@@ -175,6 +175,7 @@ $translations = array(
|
||||
'Data Free' => '空き',
|
||||
'Rows' => '行数',
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Analyze' => '分析',
|
||||
'Optimize' => '最適化',
|
||||
'Check' => 'チェック',
|
||||
@@ -226,7 +227,6 @@ $translations = array(
|
||||
'Permanent login' => '永続的にログイン',
|
||||
'Databases have been dropped.' => 'データベースを削除しました',
|
||||
'Search data in tables' => 'データを検索する',
|
||||
'schema' => 'スキーマ',
|
||||
'Schema' => 'スキーマ',
|
||||
'Alter schema' => 'スキーマ変更',
|
||||
'Create schema' => 'スキーマ追加',
|
||||
|
@@ -175,6 +175,7 @@ $translations = array(
|
||||
'Data Free' => '여유',
|
||||
'Rows' => '행',
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Analyze' => '분석',
|
||||
'Optimize' => '최적화',
|
||||
'Check' => '확인',
|
||||
@@ -226,7 +227,6 @@ $translations = array(
|
||||
'Permanent login' => '영구적으로 로그인',
|
||||
'Databases have been dropped.' => '데이터베이스를 삭제했습니다.',
|
||||
'Search data in tables' => '데이터 검색',
|
||||
'schema' => '스키마',
|
||||
'Schema' => '스키마',
|
||||
'Alter schema' => '스키마 변경',
|
||||
'Create schema' => '스키마 추가',
|
||||
|
@@ -93,6 +93,7 @@ $translations = array(
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Variklis',
|
||||
'Collation' => 'Lyginimas',
|
||||
'Data Length' => 'Duomenų ilgis',
|
||||
@@ -293,7 +294,6 @@ $translations = array(
|
||||
'Schema has been dropped.' => 'Schema pašalinta.',
|
||||
'Schema has been created.' => 'Schema sukurta.',
|
||||
'Schema has been altered.' => 'Schema pakeista.',
|
||||
'schema' => 'schema',
|
||||
'Schema' => 'Schema',
|
||||
'Invalid schema.' => 'Neteisinga schema.',
|
||||
|
||||
|
@@ -180,6 +180,7 @@ $translations = array(
|
||||
'Data Free' => 'Data Vrij',
|
||||
'Rows' => 'Rijen',
|
||||
',' => '.',
|
||||
'0123456789' => '0123456789',
|
||||
'Analyze' => 'Analyseer',
|
||||
'Optimize' => 'Optimaliseer',
|
||||
'Check' => 'Controleer',
|
||||
@@ -225,7 +226,6 @@ $translations = array(
|
||||
'%d in total' => '%d in totaal',
|
||||
'Permanent login' => 'Blijf aangemeld',
|
||||
'Search data in tables' => 'Zoeken in database',
|
||||
'schema' => 'schema',
|
||||
'Schema' => 'Schema',
|
||||
'Alter schema' => 'Schema wijzigen',
|
||||
'Create schema' => 'Schema maken',
|
||||
|
284
adminer/lang/no.inc.php
Normal file
284
adminer/lang/no.inc.php
Normal file
@@ -0,0 +1,284 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
'System' => 'System',
|
||||
'Server' => 'Server',
|
||||
'Username' => 'Brukernavn',
|
||||
'Password' => 'Passord',
|
||||
'Permanent login' => 'Permanent login',
|
||||
'Login' => 'Logg inn',
|
||||
'Logout' => 'Logg ut',
|
||||
'Logged as: %s' => 'Logget inn som: %s',
|
||||
'Logout successful.' => 'Utlogging vellykket.',
|
||||
'Invalid credentials.' => 'Ugylding innloggingsinformasjon.',
|
||||
'Master password expired. <a href="http://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.' => 'Master-passord er utløpt. <a href="http://www.adminer.org/en/extension/" target="_blank">Implementer</a> en metode for %s for å gjøre det permanent.',
|
||||
'Language' => 'Språk',
|
||||
'Invalid CSRF token. Send the form again.' => 'Ugylding CSRF-token - Send inn skjemaet igjen.',
|
||||
'No extension' => 'Ingen utvidelse',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Ingen av de støttede PHP-utvidelsene (%s) er tilgjengelige.',
|
||||
'Session support must be enabled.' => 'Økt-støtte må være skrudd på.',
|
||||
'Session expired, please login again.' => 'Økt utløpt - vennligst logg inn på nytt.',
|
||||
'%s version: %s through PHP extension %s' => '%s versjon: %s via PHP-utvidelse %s',
|
||||
'Refresh' => 'Gjenoppfrisk',
|
||||
'ltr' => 'venstre-til-høyre',
|
||||
'Privileges' => 'Privilegier',
|
||||
'Create user' => 'Lag bruker',
|
||||
'User has been dropped.' => 'Bruker slettet.',
|
||||
'User has been altered.' => 'Bruker endret.',
|
||||
'User has been created.' => 'Bruker opprettet.',
|
||||
'Hashed' => 'Hashet',
|
||||
'Column' => 'Kolonne',
|
||||
'Routine' => 'Rutine',
|
||||
'Grant' => 'Gi privilegier',
|
||||
'Revoke' => 'Trekk tilbake',
|
||||
'Process list' => 'Prosessliste',
|
||||
'%d process(es) have been killed.' => array('%d prosess avsluttet.', '%d prosesser avsluttet.'),
|
||||
'Kill' => 'Avslutt',
|
||||
'Variables' => 'Variabler',
|
||||
'Status' => 'Status',
|
||||
'SQL command' => 'SQL-kommando',
|
||||
'%d query(s) executed OK.' => array('%d kall utført OK.', '%d kall utført OK.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Kall utført OK, %d rad påvirket.', 'Kall utført OK, %d rader påvirket.'),
|
||||
'No commands to execute.' => 'Ingen kommandoer å utføre.',
|
||||
'Error in query' => 'Feil i forespørsel',
|
||||
'Execute' => 'Kjør',
|
||||
'Stop on error' => 'Stopp ved feil',
|
||||
'Show only errors' => 'Vis bare feil',
|
||||
'%.3f s' => '%.3f s',
|
||||
'History' => 'Historie',
|
||||
'Clear' => 'Tøm skjema',
|
||||
'Edit all' => 'Rediger alle',
|
||||
'File upload' => 'Filopplasting',
|
||||
'From server' => 'Fra server',
|
||||
'Webserver file %s' => 'Webserver-fil %s',
|
||||
'Run file' => 'Kjør fil',
|
||||
'File does not exist.' => 'Filen eksisterer ikke.',
|
||||
'File uploads are disabled.' => 'Filopplastinger ikke tillatt.',
|
||||
'Unable to upload a file.' => 'Kunne ikke laste opp fil.',
|
||||
'Maximum allowed file size is %sB.' => 'Maksimum tillatte filstørrelse er %sB.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'For stor datamengde i skjemaet. Reduser datamengden, eller øk størrelsen på %s-konfigurasjonsdirektivet.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Du kan laste opp en stor SQL-fil via FTP og importere den fra serveren.',
|
||||
'Export' => 'Eksport',
|
||||
'Dump' => 'Dump',
|
||||
'Output' => 'Resultat',
|
||||
'open' => 'åpne',
|
||||
'save' => 'lagre',
|
||||
'Format' => 'Format',
|
||||
'Data' => 'Data',
|
||||
'Database' => 'Database',
|
||||
'database' => 'database',
|
||||
'Use' => 'Bruk',
|
||||
'Select database' => 'Velg database',
|
||||
'Invalid database.' => 'Ugyldig database.',
|
||||
'Create new database' => 'Lag ny database',
|
||||
'Database has been dropped.' => 'Databasen har blitt slettet.',
|
||||
'Databases have been dropped.' => 'Databasene har blitt slettet.',
|
||||
'Database has been created.' => 'Databasen er opprettet.',
|
||||
'Database has been renamed.' => 'Databasen har fått nytt navn.',
|
||||
'Database has been altered.' => 'Databasen er endret.',
|
||||
'Alter database' => 'Endre database',
|
||||
'Create database' => 'Opprett database',
|
||||
'Database schema' => 'Databaseskjema',
|
||||
'Permanent link' => 'Permanent lenke',
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Motor',
|
||||
'Collation' => 'Tekstsortering',
|
||||
'Data Length' => 'Datalengde',
|
||||
'Index Length' => 'Indekslengde',
|
||||
'Data Free' => 'Frie data',
|
||||
'Rows' => 'Rader',
|
||||
'%d in total' => '%d totalt',
|
||||
'Analyze' => 'Analyser',
|
||||
'Optimize' => 'Optimaliser',
|
||||
'Vacuum' => 'Støvsug',
|
||||
'Check' => 'Sjekk',
|
||||
'Repair' => 'Reparer',
|
||||
'Truncate' => 'Avkort',
|
||||
'Tables have been truncated.' => 'Tabellene har blitt avkortet.',
|
||||
'Move to other database' => 'Flytt til annen database',
|
||||
'Move' => 'Flytt',
|
||||
'Tables have been moved.' => 'Tabellene har blitt flyttet.',
|
||||
'Copy' => 'Kopier',
|
||||
'Tables have been copied.' => 'Tabellene har blitt kopiert.',
|
||||
'Routines' => 'Rutiner',
|
||||
'Routine has been called, %d row(s) affected.' => array('Rutinen er utført, %d rad påvirket.', 'Rutinen er utført, %d rader påvirket.'),
|
||||
'Call' => 'Kall',
|
||||
'Parameter name' => 'Parameternavn',
|
||||
'Create procedure' => 'Opprett prosedyre',
|
||||
'Create function' => 'Opprett funksjon',
|
||||
'Routine has been dropped.' => 'Rutinen er slettet.',
|
||||
'Routine has been altered.' => 'Rutinen er endret.',
|
||||
'Routine has been created.' => 'Rutinen er opprettet.',
|
||||
'Alter function' => 'Endre funksjon',
|
||||
'Alter procedure' => 'Endre prosedyre',
|
||||
'Return type' => 'Returtype',
|
||||
'Events' => 'Eventer',
|
||||
'Event has been dropped.' => 'Eventen er slettet.',
|
||||
'Event has been altered.' => 'Eventen er endret.',
|
||||
'Event has been created.' => 'Eventen er opprettet.',
|
||||
'Alter event' => 'Endre event',
|
||||
'Create event' => 'Opprett event',
|
||||
'At given time' => 'På gitte tid',
|
||||
'Every' => 'Hver',
|
||||
'Schedule' => 'Tidsplan',
|
||||
'Start' => 'Start',
|
||||
'End' => 'Slutt',
|
||||
'On completion preserve' => 'Ved fullførelse bevar',
|
||||
'Tables' => 'Tabeller',
|
||||
'Tables and views' => 'Tabeller og views',
|
||||
'Table' => 'Tabell',
|
||||
'No tables.' => 'Ingen tabeller.',
|
||||
'Alter table' => 'Endre tabell',
|
||||
'Create table' => 'Opprett tabell',
|
||||
'Table has been dropped.' => 'Tabellen er slettet.',
|
||||
'Tables have been dropped.' => 'Tabellene er slettet.',
|
||||
'Tables have been optimized.' => 'Tabellene er blitt optimalisert.',
|
||||
'Table has been altered.' => 'Tabellen er endret.',
|
||||
'Table has been created.' => 'Tabellen er opprettet.',
|
||||
'Table name' => 'Tabellnavn',
|
||||
'Show structure' => 'Vis struktur',
|
||||
'engine' => 'mottor',
|
||||
'collation' => 'sortering',
|
||||
'Column name' => 'Kolonnenavn',
|
||||
'Type' => 'Type',
|
||||
'Length' => 'Lengde',
|
||||
'Auto Increment' => 'Autoinkrement',
|
||||
'Options' => 'Valg',
|
||||
'Comment' => 'Kommentarer',
|
||||
'Default values' => 'Standardverdier',
|
||||
'Drop' => 'Dropp',
|
||||
'Are you sure?' => 'Er du sikker?',
|
||||
'Move up' => 'Flytt opp',
|
||||
'Move down' => 'Flytt ned',
|
||||
'Remove' => 'Fjern',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Maksimum antall feltnavn overskredet - venligst øk %s.',
|
||||
'Partition by' => 'Partisjoner ved',
|
||||
'Partitions' => 'Partisjoner',
|
||||
'Partition name' => 'Partisjonsnavn',
|
||||
'Values' => 'Verdier',
|
||||
'View' => 'View',
|
||||
'View has been dropped.' => 'Viewet er slettet.',
|
||||
'View has been altered.' => 'Viewet er endret.',
|
||||
'View has been created.' => 'Viewet er opprettet.',
|
||||
'Alter view' => 'Endre view',
|
||||
'Create view' => 'Lag nytt view',
|
||||
'Indexes' => 'Indekser',
|
||||
'Indexes have been altered.' => 'Indeksene er endret.',
|
||||
'Alter indexes' => 'Endre indekser',
|
||||
'Add next' => 'Legg til neste',
|
||||
'Index Type' => 'Indekstype',
|
||||
'Column (length)' => 'Kolonne (lengde)',
|
||||
'Foreign keys' => 'Fremmednøkler',
|
||||
'Foreign key' => 'Fremmednøkkel',
|
||||
'Foreign key has been dropped.' => 'Fremmednøkkelen er slettet.',
|
||||
'Foreign key has been altered.' => 'Fremmednøkkelen er endret.',
|
||||
'Foreign key has been created.' => 'Fremmednøkkelen er opprettet.',
|
||||
'Target table' => 'Måltabell',
|
||||
'Change' => 'Endre',
|
||||
'Source' => 'Kilde',
|
||||
'Target' => 'Mål',
|
||||
'Add column' => 'Legg til kolonne',
|
||||
'Alter' => 'Endre',
|
||||
'Add foreign key' => 'Legg til fremmednøkkel',
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Kilde- og mål-kolonner må ha samme datatype, det må være en indeks på mål-kolonnen, og dataene som refereres til må eksistere.',
|
||||
'Triggers' => 'Triggere',
|
||||
'Add trigger' => 'Legg til trigger',
|
||||
'Trigger has been dropped.' => 'Triggeren er slettet.',
|
||||
'Trigger has been altered.' => 'Triggeren er endret.',
|
||||
'Trigger has been created.' => 'Triggeren er opprettet.',
|
||||
'Alter trigger' => 'Endre trigger',
|
||||
'Create trigger' => 'Opprett trigger',
|
||||
'Time' => 'Tid',
|
||||
'Event' => 'Hendelse',
|
||||
'Name' => 'Navn',
|
||||
'select' => 'Vis',
|
||||
'Select' => 'Velg',
|
||||
'Select data' => 'Velg data',
|
||||
'Functions' => 'Funksjoner',
|
||||
'Aggregation' => 'Sammenfatning',
|
||||
'Search' => 'Søk',
|
||||
'anywhere' => 'hvorsomhelst',
|
||||
'Search data in tables' => 'Søk data i tabeller',
|
||||
'Sort' => 'Sorter',
|
||||
'descending' => 'minkende',
|
||||
'Limit' => 'Skranke',
|
||||
'Text length' => 'Tekstlengde',
|
||||
'Action' => 'Handling',
|
||||
'Full table scan' => 'Full tabell-scan',
|
||||
'Unable to select the table' => 'Kan ikke velge tabellen',
|
||||
'No rows.' => 'Ingen rader.',
|
||||
'%d row(s)' => array('%d rad', '%d rader'),
|
||||
'Page' => 'Side',
|
||||
'last' => 'siste',
|
||||
'Load more data' => 'Last mer data',
|
||||
'Loading' => 'Laster',
|
||||
'whole result' => 'hele resultatet',
|
||||
'%d byte(s)' => array('%d byte', '%d bytes'),
|
||||
'Import' => 'Importer',
|
||||
'%d row(s) have been imported.' => array('%d rad er importert.', '%d rader er importert.'),
|
||||
'File must be in UTF-8 encoding.' => 'Filen må være i UTF8-tegnkoding.',
|
||||
'Modify' => 'Endre',
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+klikk på en verdi for å endre den.',
|
||||
'Use edit link to modify this value.' => 'Bruk rediger-lengde for å endre dennne verdien.',
|
||||
'Item%s has been inserted.' => 'Rad%s er satt inn.',
|
||||
'Item has been deleted.' => 'Raden er slettet.',
|
||||
'Item has been updated.' => 'Raden er oppdatert.',
|
||||
'%d item(s) have been affected.' => array('%d rad påvirket.', '%d rader påvirket.'),
|
||||
'New item' => 'Ny rad',
|
||||
'original' => 'original',
|
||||
'empty' => 'tom',
|
||||
'edit' => 'rediger',
|
||||
'Edit' => 'Rediger',
|
||||
'Insert' => 'Sett inn',
|
||||
'Save' => 'Lagre',
|
||||
'Save and continue edit' => 'Lagre og fortsett å redigere',
|
||||
'Save and insert next' => 'Lagre og sett inn neste',
|
||||
'Selected' => 'Valgt',
|
||||
'Clone' => 'Klon',
|
||||
'Delete' => 'Slett',
|
||||
'You have no privileges to update this table.' => 'Du mangler rettighetene som trengs for å endre denne tabellen.',
|
||||
'E-mail' => 'E-post',
|
||||
'From' => 'Fra',
|
||||
'Subject' => 'Tittel',
|
||||
'Attachments' => 'Vedlegg',
|
||||
'Send' => 'Send',
|
||||
'%d e-mail(s) have been sent.' => array('%d epost sendt.', '%d eposter sendt.'),
|
||||
'Numbers' => 'Nummer',
|
||||
'Date and time' => 'Dato og tid',
|
||||
'Strings' => 'Strenger',
|
||||
'Binary' => 'Binære',
|
||||
'Lists' => 'Lister',
|
||||
'Network' => 'Nettverk',
|
||||
'Geometry' => 'Geometri',
|
||||
'Relations' => 'Relasjoner',
|
||||
'Editor' => 'Redigering',
|
||||
'$1-$3-$5' => '$6/$4 $1',
|
||||
'[yyyy]-mm-dd' => 'd/m [åååå]',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'now' => 'nå',
|
||||
'yes' => 'ja',
|
||||
'no' => 'nei',
|
||||
'File exists.' => 'Filen finnes.',
|
||||
'Please use one of the extensions %s.' => 'Vennligst bruk en av filendelsene %s.',
|
||||
'Alter schema' => 'Endre skjema',
|
||||
'Create schema' => 'Opprett skjema',
|
||||
'Schema has been dropped.' => 'Skjemaet er slettet.',
|
||||
'Schema has been created.' => 'Skjemaet er opprettet.',
|
||||
'Schema has been altered.' => 'Skjemaet er endret.',
|
||||
'Schema' => 'Skjema',
|
||||
'Invalid schema.' => 'Ugylding skjema.',
|
||||
'Sequences' => 'Sekvenser',
|
||||
'Create sequence' => 'Opprett sekvens',
|
||||
'Sequence has been dropped.' => 'Sekvensen er slettet.',
|
||||
'Sequence has been created.' => 'Sekvensen er opprettet.',
|
||||
'Sequence has been altered.' => 'Sekvensen er endret.',
|
||||
'Alter sequence' => 'Endre sekvens',
|
||||
'User types' => 'Brukertyper',
|
||||
'Create type' => 'Opprett type',
|
||||
'Type has been dropped.' => 'Type er slettet.',
|
||||
'Type has been created.' => 'Type er opprettet.',
|
||||
'Alter type' => 'Endre type',
|
||||
'Saving' => 'Lagrer',
|
||||
);
|
@@ -11,6 +11,7 @@ $translations = array(
|
||||
'Logged as: %s' => 'Zalogowany jako: %s',
|
||||
'Logout successful.' => 'Wylogowano pomyślnie.',
|
||||
'Invalid credentials.' => 'Nieprawidłowe dane logowania.',
|
||||
'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.'),
|
||||
'Master password expired. <a href="http://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.' => 'Ważność hasła głównego wygasła. <a href="http://www.adminer.org/pl/extension/" target="_blank">Zaimplementuj</a> własną metodę %s, aby ustawić je na stałe.',
|
||||
'Language' => 'Język',
|
||||
'Invalid CSRF token. Send the form again.' => 'Nieprawidłowy token CSRF. Spróbuj wysłać formularz ponownie.',
|
||||
@@ -95,6 +96,7 @@ $translations = array(
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Składowanie',
|
||||
'Collation' => 'Porównywanie znaków',
|
||||
'Data Length' => 'Rozmiar danych',
|
||||
@@ -104,6 +106,7 @@ $translations = array(
|
||||
'%d in total' => '%d w sumie',
|
||||
'Analyze' => 'Analizuj',
|
||||
'Optimize' => 'Optymalizuj',
|
||||
'Vacuum' => 'Wyczyść',
|
||||
'Check' => 'Sprawdź',
|
||||
'Repair' => 'Napraw',
|
||||
'Truncate' => 'Opróżnij',
|
||||
@@ -164,6 +167,8 @@ $translations = array(
|
||||
'Default values' => 'Wartości domyślne',
|
||||
'Drop' => 'Usuń',
|
||||
'Are you sure?' => 'Czy jesteś pewien?',
|
||||
'Size' => 'Wielkość',
|
||||
'Compute' => 'Oblicz',
|
||||
'Move up' => 'Przesuń w górę',
|
||||
'Move down' => 'Przesuń w dół',
|
||||
'Remove' => 'Usuń',
|
||||
@@ -244,6 +249,7 @@ $translations = array(
|
||||
'File must be in UTF-8 encoding.' => 'Kodowanie pliku musi być ustawione na UTF-8.',
|
||||
|
||||
// in-place editing in select
|
||||
'Modify' => 'Zmień',
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+kliknij wartość, aby ją edytować.',
|
||||
'Use edit link to modify this value.' => 'Użyj linku edycji aby zmienić tę wartość.',
|
||||
|
||||
@@ -260,8 +266,10 @@ $translations = array(
|
||||
'Edit' => 'Edytuj',
|
||||
'Insert' => 'Dodaj',
|
||||
'Save' => 'Zapisz zmiany',
|
||||
'Saving' => 'Zapisywanie',
|
||||
'Save and continue edit' => 'Zapisz i kontynuuj edycję',
|
||||
'Save and insert next' => 'Zapisz i dodaj następny',
|
||||
'Selected' => 'Zaznaczone',
|
||||
'Clone' => 'Duplikuj',
|
||||
'Delete' => 'Usuń',
|
||||
'You have no privileges to update this table.' => 'Brak uprawnień do edycji tej tabeli',
|
||||
@@ -304,7 +312,6 @@ $translations = array(
|
||||
'Schema has been dropped.' => 'Schemat został usunięty.',
|
||||
'Schema has been created.' => 'Schemat został utworzony.',
|
||||
'Schema has been altered.' => 'Schemat został zmieniony.',
|
||||
'schema' => 'schemat',
|
||||
'Schema' => 'Schemat',
|
||||
'Invalid schema.' => 'Nieprawidłowy schemat.',
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
'Login' => 'Entrar',
|
||||
'Logout successful.' => 'Saida bem sucedida.',
|
||||
'Logout successful.' => 'Saída bem sucedida.',
|
||||
'Invalid credentials.' => 'Identificação inválida.',
|
||||
'Server' => 'Servidor',
|
||||
'Username' => 'Usuário',
|
||||
@@ -9,10 +9,10 @@ $translations = array(
|
||||
'Select database' => 'Selecionar Base de dados',
|
||||
'Invalid database.' => 'Base de dados inválida.',
|
||||
'Create new database' => 'Criar nova base de dados',
|
||||
'Table has been dropped.' => 'Tabela eliminada.',
|
||||
'Table has been altered.' => 'Tabela modificada.',
|
||||
'Table has been created.' => 'Tabela criada.',
|
||||
'Alter table' => 'Modificar estrutura',
|
||||
'Table has been dropped.' => 'A Tabela foi eliminada.',
|
||||
'Table has been altered.' => 'A Tabela foi alterada.',
|
||||
'Table has been created.' => 'A Tabela foi criada.',
|
||||
'Alter table' => 'Alterar estrutura',
|
||||
'Create table' => 'Criar tabela',
|
||||
'Table name' => 'Nome da tabela',
|
||||
'engine' => 'motor',
|
||||
@@ -23,12 +23,12 @@ $translations = array(
|
||||
'Auto Increment' => 'Incremento Automático',
|
||||
'Options' => 'Opções',
|
||||
'Save' => 'Salvar',
|
||||
'Drop' => 'Remover',
|
||||
'Database has been dropped.' => 'Base de dados eliminada.',
|
||||
'Database has been created.' => 'Base de dados criada.',
|
||||
'Database has been renamed.' => 'Base de dados renomeada.',
|
||||
'Database has been altered.' => 'Base de dados modificada.',
|
||||
'Alter database' => 'Modificar Base de dados',
|
||||
'Drop' => 'Apagar',
|
||||
'Database has been dropped.' => 'A Base de dados foi apagada.',
|
||||
'Database has been created.' => 'A Base de dados foi criada.',
|
||||
'Database has been renamed.' => 'A Base de dados foi renomeada.',
|
||||
'Database has been altered.' => 'A Base de dados foi alterada.',
|
||||
'Alter database' => 'Alterar Base de dados',
|
||||
'Create database' => 'Criar Base de dados',
|
||||
'SQL command' => 'Comando SQL',
|
||||
'Dump' => 'Exportar',
|
||||
@@ -36,19 +36,19 @@ $translations = array(
|
||||
'database' => 'base de dados',
|
||||
'Use' => 'Usar',
|
||||
'No tables.' => 'Não existem tabelas.',
|
||||
'select' => 'registros',
|
||||
'Item has been deleted.' => 'Registro eliminado.',
|
||||
'Item has been updated.' => 'Registro modificado.',
|
||||
'Item%s has been inserted.' => 'Registro%s inserido.',
|
||||
'Edit' => 'Modificar',
|
||||
'select' => 'selecionar',
|
||||
'Item has been deleted.' => 'O Registro foi deletado.',
|
||||
'Item has been updated.' => 'O Registro foi atualizado.',
|
||||
'Item%s has been inserted.' => 'O Registro%s foi inserido.',
|
||||
'Edit' => 'Editar',
|
||||
'Insert' => 'Inserir',
|
||||
'Save and insert next' => 'Salvar e inserir outro',
|
||||
'Delete' => 'Apagar',
|
||||
'Delete' => 'Deletar',
|
||||
'Database' => 'Base de dados',
|
||||
'Routines' => 'Procedimentos',
|
||||
'Indexes have been altered.' => 'Índices modificados.',
|
||||
'Routines' => 'Rotinas',
|
||||
'Indexes have been altered.' => 'Os Índices foram alterados.',
|
||||
'Indexes' => 'Índices',
|
||||
'Alter indexes' => 'Modificar índices',
|
||||
'Alter indexes' => 'Alterar índices',
|
||||
'Add next' => 'Adicionar proximo',
|
||||
'Language' => 'Idioma',
|
||||
'Select' => 'Selecionar',
|
||||
@@ -59,82 +59,82 @@ $translations = array(
|
||||
'Limit' => 'Limite',
|
||||
'No rows.' => 'Não existem registros.',
|
||||
'Action' => 'Ação',
|
||||
'edit' => 'modificar',
|
||||
'edit' => 'editar',
|
||||
'Page' => 'Página',
|
||||
'Query executed OK, %d row(s) affected.' => array('Consulta executada, %d registro afetado.', 'Consulta executada, %d registros afetados.'),
|
||||
'Error in query' => 'Erro na consulta',
|
||||
'Execute' => 'Executar',
|
||||
'Table' => 'Tabela',
|
||||
'Foreign keys' => 'Chaves foráneas',
|
||||
'Foreign keys' => 'Chaves estrangeiras',
|
||||
'Triggers' => 'Triggers',
|
||||
'View' => 'Visualizar',
|
||||
'View' => 'Visão',
|
||||
'Unable to select the table' => 'Não é possivel selecionar a Tabela',
|
||||
'Invalid CSRF token. Send the form again.' => 'Token CSRF inválido. Enviar o formulario novamente.',
|
||||
'Comment' => 'Comentário',
|
||||
'Default values' => 'Valores predeterminados',
|
||||
'Default values' => 'Valores padrões',
|
||||
'%d byte(s)' => array('%d byte', '%d bytes'),
|
||||
'No commands to execute.' => 'Nenhum comando para executar.',
|
||||
'Unable to upload a file.' => 'Não é possível enviar o arquivo.',
|
||||
'File upload' => 'Importar arquivo',
|
||||
'File uploads are disabled.' => 'Importação de arquivos desablilitada.',
|
||||
'Routine has been called, %d row(s) affected.' => array('Consulta executada, %d registro afetado.', 'Consulta executada, %d registros afetados.'),
|
||||
'Routine has been called, %d row(s) affected.' => array('Rotina executada, %d registro afetado.', 'Rotina executada, %d registros afetados.'),
|
||||
'Call' => 'Chamar',
|
||||
'No extension' => 'Não há extension',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Nenhuma das extensões PHP suportadas (%s) está disponivel.',
|
||||
'Session support must be enabled.' => 'Devem estar habilitadas as sessões.',
|
||||
'Session expired, please login again.' => 'Sessão expirada, por favor entre sua Chave de novo.',
|
||||
'Session support must be enabled.' => 'Suporte a sessões deve estar habilitado.',
|
||||
'Session expired, please login again.' => 'Sessão expirada, por favor logue-se novamente.',
|
||||
'Text length' => 'Tamanho de texto',
|
||||
'Foreign key has been dropped.' => 'Chave externa eliminada.',
|
||||
'Foreign key has been altered.' => 'Chave externa modificada.',
|
||||
'Foreign key has been created.' => 'Chave externa criada.',
|
||||
'Foreign key' => 'Chave externa',
|
||||
'Foreign key has been dropped.' => 'A Chave Estrangeira foi apagada.',
|
||||
'Foreign key has been altered.' => 'A Chave Estrangeira foi alterada.',
|
||||
'Foreign key has been created.' => 'A Chave Estrangeira foi criada.',
|
||||
'Foreign key' => 'Chave Estrangeira',
|
||||
'Target table' => 'Tabela de destino',
|
||||
'Change' => 'Modificar',
|
||||
'Source' => 'Origem',
|
||||
'Target' => 'Destino',
|
||||
'Add column' => 'Adicionar coluna',
|
||||
'Alter' => 'Modificar',
|
||||
'Add foreign key' => 'Adicionar Chave foránea',
|
||||
'Alter' => 'Alterar',
|
||||
'Add foreign key' => 'Adicionar Chave Estrangeira',
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Index Type' => 'Tipo de índice',
|
||||
'Column (length)' => 'coluna (tamanho)',
|
||||
'View has been dropped.' => 'Vista eliminada.',
|
||||
'View has been altered.' => 'Vista modificada.',
|
||||
'View has been created.' => 'Vista criada.',
|
||||
'Alter view' => 'Modificar vista',
|
||||
'Create view' => 'Criar vista',
|
||||
'Column (length)' => 'Coluna (tamanho)',
|
||||
'View has been dropped.' => 'A Visão foi apagada.',
|
||||
'View has been altered.' => 'A Visão foi alterada.',
|
||||
'View has been created.' => 'A Visão foi criada.',
|
||||
'Alter view' => 'Alterar visão',
|
||||
'Create view' => 'Criar visão',
|
||||
'Name' => 'Nome',
|
||||
'Process list' => 'Lista de processos',
|
||||
'%d process(es) have been killed.' => array('%d processo terminado.', '%d processos terminados.'),
|
||||
'%d process(es) have been killed.' => array('%d processo foi terminado.', '%d processos foram terminados.'),
|
||||
'Kill' => 'Parar',
|
||||
'Parameter name' => 'Nome de Parâmetro',
|
||||
'Database schema' => 'Esquema de Base de dados',
|
||||
'Create procedure' => 'Criar procedimento',
|
||||
'Create function' => 'Criar função',
|
||||
'Routine has been dropped.' => 'Procedimento eliminado.',
|
||||
'Routine has been altered.' => 'Procedimento modificado.',
|
||||
'Routine has been created.' => 'Procedimento criado.',
|
||||
'Alter function' => 'Modificar Função',
|
||||
'Alter procedure' => 'Modificar procedimento',
|
||||
'Return type' => 'Tipo de valor de regreso',
|
||||
'Routine has been dropped.' => 'A Rotina foi apagada.',
|
||||
'Routine has been altered.' => 'A Rotina foi alterada.',
|
||||
'Routine has been created.' => 'A Rotina foi criada.',
|
||||
'Alter function' => 'Alterar função',
|
||||
'Alter procedure' => 'Alterar procedimento',
|
||||
'Return type' => 'Tipo de valor de retorno',
|
||||
'Add trigger' => 'Adicionar trigger',
|
||||
'Trigger has been dropped.' => 'Trigger eliminado.',
|
||||
'Trigger has been altered.' => 'Trigger modificado.',
|
||||
'Trigger has been created.' => 'Trigger criado.',
|
||||
'Alter trigger' => 'Modificar Trigger',
|
||||
'Trigger has been dropped.' => 'O Trigger foi apagado.',
|
||||
'Trigger has been altered.' => 'O Trigger foi alterado.',
|
||||
'Trigger has been created.' => 'O Trigger foi criado.',
|
||||
'Alter trigger' => 'Alterar Trigger',
|
||||
'Create trigger' => 'Adicionar Trigger',
|
||||
'Time' => 'Tempo',
|
||||
'Event' => 'Evento',
|
||||
'%s version: %s through PHP extension %s' => 'Versão %s: %s através da extensão PHP %s',
|
||||
'%d row(s)' => array('%d registro', '%d registros'),
|
||||
'Remove' => 'Remover',
|
||||
'Are you sure?' => 'Está seguro?',
|
||||
'Are you sure?' => 'Você tem certeza?',
|
||||
'Privileges' => 'Privilégios',
|
||||
'Create user' => 'Criar Usuário',
|
||||
'User has been dropped.' => 'Usuário eliminado.',
|
||||
'User has been altered.' => 'Usuário modificado.',
|
||||
'User has been created.' => 'Usuário criado.',
|
||||
'User has been dropped.' => 'O Usuário foi apagado.',
|
||||
'User has been altered.' => 'O Usuário foi alterado.',
|
||||
'User has been created.' => 'O Usuário foi criado.',
|
||||
'Hashed' => 'Hash',
|
||||
'Column' => 'Coluna',
|
||||
'Routine' => 'Rotina',
|
||||
@@ -148,14 +148,14 @@ $translations = array(
|
||||
'Aggregation' => 'Adições',
|
||||
'Export' => 'Exportar',
|
||||
'Output' => 'Saída',
|
||||
'open' => 'mostrar',
|
||||
'save' => 'salvas',
|
||||
'open' => 'abrir',
|
||||
'save' => 'salvar',
|
||||
'Format' => 'Formato',
|
||||
'Tables' => 'Tabelas',
|
||||
'Data' => 'Dados',
|
||||
'Event has been dropped.' => 'Evento eliminado.',
|
||||
'Event has been altered.' => 'Evento modificado.',
|
||||
'Event has been created.' => 'Evento criado.',
|
||||
'Event has been dropped.' => 'O Evento foi apagado.',
|
||||
'Event has been altered.' => 'O Evento foi alterado.',
|
||||
'Event has been created.' => 'O Evento foi criado.',
|
||||
'Alter event' => 'Modificar Evento',
|
||||
'Create event' => 'Criar Evento',
|
||||
'At given time' => 'A hora determinada',
|
||||
@@ -166,7 +166,7 @@ $translations = array(
|
||||
'End' => 'Fim',
|
||||
'Status' => 'Estado',
|
||||
'On completion preserve' => 'Ao completar preservar',
|
||||
'Tables and views' => 'Tabelas e vistas',
|
||||
'Tables and views' => 'Tabelas e Visões',
|
||||
'Data Length' => 'Tamanho de dados',
|
||||
'Index Length' => 'Tamanho de índice',
|
||||
'Data Free' => 'Espaço Livre',
|
||||
@@ -176,17 +176,18 @@ $translations = array(
|
||||
'Check' => 'Verificar',
|
||||
'Repair' => 'Reparar',
|
||||
'Truncate' => 'Truncar',
|
||||
'Tables have been truncated.' => 'Tabelas truncadas (truncate).',
|
||||
'Tables have been truncated.' => 'As Tabelas foram truncadas.',
|
||||
'Rows' => 'Registros',
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Tables have been moved.' => 'As Tabelas foram movidas.',
|
||||
'Move to other database' => 'Mover outra Base de dados',
|
||||
'Move to other database' => 'Mover para outra Base de dados',
|
||||
'Move' => 'Mover',
|
||||
'Engine' => 'Motor',
|
||||
'Save and continue edit' => 'Salvar e continuar editando',
|
||||
'original' => 'original',
|
||||
'Tables have been dropped.' => 'Tabelas eliminadas.',
|
||||
'%d item(s) have been affected.' => array('%d item afetado.', '%d itens afetados.'),
|
||||
'Tables have been dropped.' => 'As Tabelas foram eliminadas.',
|
||||
'%d item(s) have been affected.' => array('%d item foi afetado.', '%d itens foram afetados.'),
|
||||
'whole result' => 'resultado completo',
|
||||
'Clone' => 'Clonar',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Quantidade máxima de campos permitidos excedidos. Por favor aumente %s.',
|
||||
@@ -194,7 +195,7 @@ $translations = array(
|
||||
'Partitions' => 'Partições',
|
||||
'Partition name' => 'Nome da Partição',
|
||||
'Values' => 'Valores',
|
||||
'%d row(s) have been imported.' => array('%d registro importado.', '%d registros importados.'),
|
||||
'%d row(s) have been imported.' => array('%d registro foi importado.', '%d registros foram importados.'),
|
||||
'anywhere' => 'qualquer local',
|
||||
'Import' => 'Importar',
|
||||
'Stop on error' => 'Parar em caso de erro',
|
||||
@@ -207,7 +208,7 @@ $translations = array(
|
||||
'Relations' => 'Relações',
|
||||
'Run file' => 'Executar Arquivo',
|
||||
'Clear' => 'Limpar',
|
||||
'Maximum allowed file size is %sB.' => 'Tamanho máximo do arquivo é %sB.',
|
||||
'Maximum allowed file size is %sB.' => 'Tamanho máximo do arquivo permitido é %sB.',
|
||||
'Numbers' => 'Números',
|
||||
'Date and time' => 'Data e hora',
|
||||
'Strings' => 'Cadena',
|
||||
@@ -218,36 +219,35 @@ $translations = array(
|
||||
'From' => 'De',
|
||||
'Subject' => 'Assunto',
|
||||
'Send' => 'Enviar',
|
||||
'%d e-mail(s) have been sent.' => array('%d email enviado.', '%d emails enviados.'),
|
||||
'%d e-mail(s) have been sent.' => array('%d email foi enviado.', '%d emails foram enviados.'),
|
||||
'Webserver file %s' => 'Arquivo do servidor web %s',
|
||||
'File does not exist.' => 'Arquivo não existe.',
|
||||
'%d in total' => '%d no total',
|
||||
'Permanent login' => 'Salvar Senha',
|
||||
'Databases have been dropped.' => 'Bases de dados eliminadas.',
|
||||
'Permanent login' => 'Login permanente',
|
||||
'Databases have been dropped.' => 'A Base de dados foi apagada.',
|
||||
'Search data in tables' => 'Buscar dados nas Tabelas',
|
||||
'schema' => 'esquema',
|
||||
'Schema' => 'Esquema',
|
||||
'Alter schema' => 'Modificar esquema',
|
||||
'Alter schema' => 'Alterar esquema',
|
||||
'Create schema' => 'Criar esquema',
|
||||
'Schema has been dropped.' => 'Esquema eliminado.',
|
||||
'Schema has been created.' => 'Esquema criado.',
|
||||
'Schema has been altered.' => 'Esquema modificado.',
|
||||
'Schema has been dropped.' => 'O Esquema foi apagado.',
|
||||
'Schema has been created.' => 'O Esquema foi criado.',
|
||||
'Schema has been altered.' => 'O Esquema foi alterado.',
|
||||
'Sequences' => 'Sequências',
|
||||
'Create sequence' => 'Criar sequências',
|
||||
'Alter sequence' => 'Modificar sequência',
|
||||
'Sequence has been dropped.' => 'Sequência eliminada.',
|
||||
'Sequence has been created.' => 'Sequência criada.',
|
||||
'Sequence has been altered.' => 'Sequência modificada.',
|
||||
'User types' => 'Tipos definido pelo usuário',
|
||||
'Create sequence' => 'Criar sequência',
|
||||
'Alter sequence' => 'Alterar sequência',
|
||||
'Sequence has been dropped.' => 'A Sequência foi apagada.',
|
||||
'Sequence has been created.' => 'A Sequência foi criada.',
|
||||
'Sequence has been altered.' => 'A Sequência foi alterada.',
|
||||
'User types' => 'Tipos definidos pelo usuário',
|
||||
'Create type' => 'Criar tipo',
|
||||
'Alter type' => 'Modificar tipo',
|
||||
'Type has been dropped.' => 'Tipo eliminado.',
|
||||
'Type has been created.' => 'Tipo criado.',
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+clique vezes sobre o valor para edita-lo.',
|
||||
'Use edit link to modify this value.' => 'Utilize o link modificar para alterar.',
|
||||
'Alter type' => 'Alterar tipo',
|
||||
'Type has been dropped.' => 'O Tipo foi apagado.',
|
||||
'Type has been created.' => 'O Tipo foi criado.',
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+clique sobre o valor para edita-lo.',
|
||||
'Use edit link to modify this value.' => 'Utilize o link editar para modificar este valor.',
|
||||
'last' => 'último',
|
||||
'From server' => 'Desde servidor',
|
||||
'System' => 'Motor de Base de dados',
|
||||
'From server' => 'A partir do servidor',
|
||||
'System' => 'Sistema',
|
||||
'Select data' => 'Selecionar dados',
|
||||
'Show structure' => 'Mostrar estrutura',
|
||||
'empty' => 'vazio',
|
||||
|
@@ -179,6 +179,7 @@ $translations = array(
|
||||
'Tables have been truncated.' => 'Tabelas truncadas (truncate).',
|
||||
'Rows' => 'Registos',
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Tables have been moved.' => 'As Tabelas foram movidas.',
|
||||
'Move to other database' => 'Mover outra Base de dados',
|
||||
'Move' => 'Mover',
|
||||
@@ -225,7 +226,6 @@ $translations = array(
|
||||
'Permanent login' => 'Memorizar a senha',
|
||||
'Databases have been dropped.' => 'Bases de dados eliminadas.',
|
||||
'Search data in tables' => 'Pesquisar dados nas Tabelas',
|
||||
'schema' => 'esquema',
|
||||
'Schema' => 'Esquema',
|
||||
'Alter schema' => 'Modificar esquema',
|
||||
'Create schema' => 'Criar esquema',
|
||||
|
@@ -179,6 +179,7 @@ $translations = array(
|
||||
'Tables have been truncated.' => 'Tabelele au fost curățate.',
|
||||
'Rows' => 'Înscrieri',
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Tables have been moved.' => 'Tabelele au fost mutate.',
|
||||
'Move to other database' => 'Mută în altă bază de date',
|
||||
'Move' => 'Mută',
|
||||
@@ -225,7 +226,6 @@ $translations = array(
|
||||
'Permanent login' => 'Logare permanentă',
|
||||
'Databases have been dropped.' => 'Baze de date au fost șterse.',
|
||||
'Search data in tables' => 'Caută în tabele',
|
||||
'schema' => 'schema',
|
||||
'Schema' => 'Schema',
|
||||
'Alter schema' => 'Modifică schema',
|
||||
'Create schema' => 'Crează o schemă',
|
||||
|
@@ -179,6 +179,7 @@ $translations = array(
|
||||
'Tables have been truncated.' => 'Таблицы были очищены.',
|
||||
'Rows' => 'Строк',
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Tables have been moved.' => 'Таблицы были перемещены.',
|
||||
'Move to other database' => 'Переместить в другую базу данных',
|
||||
'Move' => 'Переместить',
|
||||
@@ -225,7 +226,6 @@ $translations = array(
|
||||
'Permanent login' => 'Оставаться в системе',
|
||||
'Databases have been dropped.' => 'Базы данных удалены.',
|
||||
'Search data in tables' => 'Поиск в таблицах',
|
||||
'schema' => 'схема',
|
||||
'Schema' => 'Схема',
|
||||
'Alter schema' => 'Изменить схему',
|
||||
'Create schema' => 'Новая схема',
|
||||
|
@@ -180,6 +180,7 @@ $translations = array(
|
||||
'Data Free' => 'Voľné miesto',
|
||||
'Rows' => 'Riadky',
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Analyze' => 'Analyzovať',
|
||||
'Optimize' => 'Optimalizovať',
|
||||
'Check' => 'Skontrolovať',
|
||||
@@ -230,7 +231,6 @@ $translations = array(
|
||||
'Schema has been dropped.' => 'Schéma bola odstránená.',
|
||||
'Schema has been created.' => 'Schéma bola vytvorená.',
|
||||
'Schema has been altered.' => 'Schéma bola zmenená.',
|
||||
'schema' => 'schéma',
|
||||
'Schema' => 'Schéma',
|
||||
'Sequences' => 'Sekvencia',
|
||||
'Create sequence' => 'Vytvoriť sekvenciu',
|
||||
|
@@ -89,6 +89,7 @@ $translations = array(
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Pogon',
|
||||
'Collation' => 'Zbiranje',
|
||||
'Data Length' => 'Velikost podatkov',
|
||||
@@ -288,7 +289,6 @@ $translations = array(
|
||||
'Schema has been dropped.' => 'Shema je zavržena.',
|
||||
'Schema has been created.' => 'Shema je ustvarjena.',
|
||||
'Schema has been altered.' => 'Shema je spremenjena.',
|
||||
'schema' => 'shema',
|
||||
'Schema' => 'Shema',
|
||||
'Invalid schema.' => 'Neveljavna shema.',
|
||||
|
||||
|
@@ -93,6 +93,7 @@ $translations = array(
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Механизам',
|
||||
'Collation' => 'Сравњивање',
|
||||
'Data Length' => 'Дужина података',
|
||||
@@ -300,7 +301,6 @@ $translations = array(
|
||||
'Schema has been dropped.' => 'Шема је избрисана.',
|
||||
'Schema has been created.' => 'Шема је креирана.',
|
||||
'Schema has been altered.' => 'Шема је измењена.',
|
||||
'schema' => 'шема',
|
||||
'Schema' => 'Шема',
|
||||
'Invalid schema.' => 'Шема није исправна.',
|
||||
|
||||
|
@@ -176,6 +176,7 @@ $translations = array(
|
||||
'Tables have been truncated.' => 'அட்டவணை குறைக்கப்பட்டது (truncated).',
|
||||
'Rows' => 'வரிசைகள்',
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Tables have been moved.' => 'அட்டவணை நகர்த்தப்பட்டது.',
|
||||
'Move to other database' => 'மற்ற தகவல் தளத்திற்க்கு நகர்த்து',
|
||||
'Move' => 'நகர்த்து',
|
||||
@@ -246,7 +247,6 @@ $translations = array(
|
||||
'System' => 'சிஸ்டம் (System)',
|
||||
'anywhere' => 'எங்காயினும்',
|
||||
'empty' => 'வெறுமை (empty)',
|
||||
'schema' => 'அமைப்புமுறை',
|
||||
'No extension' => 'விரிவு (extensஇஒன்) இல்லை ',
|
||||
'Databases have been dropped.' => 'தகவல் தளங்கள் நீக்கப்பட்டன.',
|
||||
'%s version: %s through PHP extension %s' => '%s பதிப்பு: %s through PHP extension %s',
|
||||
|
@@ -179,6 +179,7 @@ $translations = array(
|
||||
'Tables have been truncated.' => 'เคลียร์ตารางแล้ว (truncate).',
|
||||
'Rows' => 'แถว',
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Tables have been moved.' => 'ตารางถูกย้ายแล้ว.',
|
||||
'Move to other database' => 'ย้ายไปยังฐานข้อมูลอื่น',
|
||||
'Move' => 'ย้าย',
|
||||
@@ -225,7 +226,6 @@ $translations = array(
|
||||
'Permanent login' => 'จดจำการเข้าสู่ระบบตลอดไป',
|
||||
'Databases have been dropped.' => 'ฐานข้อมูลถูกลบแล้ว.',
|
||||
'Search data in tables' => 'ค้นหาในตาราง',
|
||||
'schema' => 'schema',
|
||||
'Schema' => 'Schema',
|
||||
'Alter schema' => 'เปลี่ยนแปลง schema',
|
||||
'Create schema' => 'สร้าง schema',
|
||||
|
@@ -93,6 +93,7 @@ $translations = array(
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Motor',
|
||||
'Collation' => 'Karşılaştırma',
|
||||
'Data Length' => 'Veri Uzunluğu',
|
||||
@@ -300,7 +301,6 @@ $translations = array(
|
||||
'Schema has been dropped.' => 'Şema silindi.',
|
||||
'Schema has been created.' => 'Şema oluşturuldu.',
|
||||
'Schema has been altered.' => 'Şema değiştirildi.',
|
||||
'schema' => 'şema',
|
||||
'Schema' => 'Şema',
|
||||
'Invalid schema.' => 'Geçersiz şema.',
|
||||
|
||||
|
@@ -93,6 +93,7 @@ $translations = array(
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Рушій',
|
||||
'Collation' => 'Співставлення',
|
||||
'Data Length' => 'Об\'єм даних',
|
||||
@@ -297,7 +298,6 @@ $translations = array(
|
||||
'Schema has been dropped.' => 'Схему було видалено.',
|
||||
'Schema has been created.' => 'Схему було створено.',
|
||||
'Schema has been altered.' => 'Схему було змінено.',
|
||||
'schema' => 'схема',
|
||||
'Schema' => 'Схема',
|
||||
'Invalid schema.' => 'Невірна схема.',
|
||||
|
||||
|
330
adminer/lang/vi.inc.php
Normal file
330
adminer/lang/vi.inc.php
Normal file
@@ -0,0 +1,330 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
// label for database system selection (MySQL, SQLite, ...)
|
||||
'System' => 'Hệ thống',
|
||||
'Server' => 'Máy chủ',
|
||||
'Username' => 'Tên người dùng',
|
||||
'Password' => 'Mật khẩu',
|
||||
'Permanent login' => 'Giữ đăng nhập một thời gian',
|
||||
'Login' => 'Đăng nhập',
|
||||
'Logout' => 'Thoát',
|
||||
'Logged as: %s' => 'Vào dưới tên: %s',
|
||||
'Logout successful.' => 'Đã thoát xong.',
|
||||
'Invalid credentials.' => 'Tài khoản sai.',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => 'Bạn gõ sai tài khoản quá nhiều lần, hãy thử lại sau %d phút nữa.',
|
||||
'Master password expired. <a href="http://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.' => 'Mật khẩu đã hết hạn. <a href="http://www.adminer.org/en/extension/" target="_blank">Thử cách làm</a> để giữ cố định.',
|
||||
'Language' => 'Ngôn ngữ',
|
||||
'Invalid CSRF token. Send the form again.' => 'Mã kiểm tra CSRF sai, hãy nhập lại biểu mẫu.',
|
||||
'No extension' => 'Không có phần mở rộng',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Bản cài đặt PHP thiếu hỗ trợ cho %s.',
|
||||
'Session support must be enabled.' => 'Cần phải bật session.',
|
||||
'Session expired, please login again.' => 'Phiên làm việc đã hết, hãy đăng nhập lại.',
|
||||
'%s version: %s through PHP extension %s' => 'Phiên bản %s: %s (PHP extension: %s)',
|
||||
'Refresh' => 'Làm mới',
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'ltr',
|
||||
|
||||
'Privileges' => 'Quyền truy cập',
|
||||
'Create user' => 'Tạo người dùng',
|
||||
'User has been dropped.' => 'Đã xoá người dùng.',
|
||||
'User has been altered.' => 'Đã sửa người dùng.',
|
||||
'User has been created.' => 'Đã tạo người dùng.',
|
||||
'Hashed' => 'Mã hoá',
|
||||
'Column' => 'Cột',
|
||||
'Routine' => 'Hàm tích hợp',
|
||||
'Grant' => 'Cấp quyền',
|
||||
'Revoke' => 'Tước quyền',
|
||||
|
||||
'Process list' => 'Danh sách tiến trình',
|
||||
'%d process(es) have been killed.' => '%d tiến trình đã dừng.',
|
||||
'Kill' => 'Dừng',
|
||||
|
||||
'Variables' => 'Biến',
|
||||
'Status' => 'Trạng thái',
|
||||
|
||||
'SQL command' => 'Câu lệnh SQL',
|
||||
'%d query(s) executed OK.' => '%d câu lệnh đã chạy thành công.',
|
||||
'Query executed OK, %d row(s) affected.' => 'Đã thực hiện xong, ảnh hưởng đến %d dòng.',
|
||||
'No commands to execute.' => 'Chẳng có gì để thực hiện!.',
|
||||
'Error in query' => 'Có lỗi trong câu lệnh',
|
||||
'Execute' => 'Thực hiện',
|
||||
'Stop on error' => 'Dừng khi có lỗi',
|
||||
'Show only errors' => 'Chỉ hiện lỗi',
|
||||
// sprintf() format for time of the command
|
||||
'%.3f s' => '%.3f s',
|
||||
'History' => 'Lịch sử',
|
||||
'Clear' => 'Xoá',
|
||||
'Edit all' => 'Sửa tất cả',
|
||||
|
||||
'File upload' => 'Tải tệp lên',
|
||||
'From server' => 'Dùng tệp trên máy chủ',
|
||||
'Webserver file %s' => 'Tệp trên máy chủ',
|
||||
'Run file' => 'Chạy tệp',
|
||||
'File does not exist.' => 'Tệp không tồn tại.',
|
||||
'File uploads are disabled.' => 'Chức năng tải tệp lên đã bị cấm.',
|
||||
'Unable to upload a file.' => 'Không thể tải tệp lên.',
|
||||
'Maximum allowed file size is %sB.' => 'Kích thước tệp tối đa là %sB.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Dữ liệu tải lên/POST quá lớn. Hãy giảm kích thước tệp hoặc tăng cấu hình (hiện tại %s).',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Bạn có thể tải tệp lên dùng FTP và nhập vào cơ sở dữ liệu.',
|
||||
|
||||
'Export' => 'Xuất',
|
||||
'Dump' => 'Sao lưu',
|
||||
'Output' => 'Kết quả',
|
||||
'open' => 'xem',
|
||||
'save' => 'lưu',
|
||||
'Format' => 'Định dạng',
|
||||
'Data' => 'Dữ liệu',
|
||||
|
||||
'Database' => 'Cơ sở dữ liệu',
|
||||
'database' => 'cơ sở dữ liệu',
|
||||
'Use' => 'Sử dụng',
|
||||
'Select database' => 'Chọn CSDL',
|
||||
'Invalid database.' => 'CSDL sai.',
|
||||
'Create new database' => 'Tạo CSDL',
|
||||
'Database has been dropped.' => 'CSDL đã bị xoá.',
|
||||
'Databases have been dropped.' => 'Các CSDL đã bị xoá.',
|
||||
'Database has been created.' => 'Đã tạo CSDL.',
|
||||
'Database has been renamed.' => 'Đã đổi tên CSDL.',
|
||||
'Database has been altered.' => 'Đã thay đổi CSDL.',
|
||||
'Alter database' => 'Thay đổi CSDL',
|
||||
'Create database' => 'Tạo CSDL',
|
||||
'Database schema' => 'Cấu trúc CSDL',
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'Liên kết cố định',
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Cơ chế lưu trữ',
|
||||
'Collation' => 'Bộ mã',
|
||||
'Data Length' => 'Kích thước dữ liệu',
|
||||
'Index Length' => 'Kích thước chỉ mục',
|
||||
'Data Free' => 'Dữ liệu trống',
|
||||
'Rows' => 'Số dòng',
|
||||
'%d in total' => '%s',
|
||||
'Analyze' => 'Phân tích',
|
||||
'Optimize' => 'Tối ưu',
|
||||
'Vacuum' => 'Dọn dẹp',
|
||||
'Check' => 'Kiểm tra',
|
||||
'Repair' => 'Sửa chữa',
|
||||
'Truncate' => 'Làm rỗng',
|
||||
'Tables have been truncated.' => 'Bảng đã bị làm rỗng.',
|
||||
'Move to other database' => 'Chuyển tới cơ sở dữ liệu khác',
|
||||
'Move' => 'Chuyển đi',
|
||||
'Tables have been moved.' => 'Bảng.',
|
||||
'Copy' => 'Sao chép',
|
||||
'Tables have been copied.' => 'Bảng đã được sao chép.',
|
||||
|
||||
'Routines' => 'Routines',
|
||||
'Routine has been called, %d row(s) affected.' => 'Đã chạy routine, thay đổi %d dòng.',
|
||||
'Call' => 'Gọi',
|
||||
'Parameter name' => 'Tham số',
|
||||
'Create procedure' => 'Tạo lệnh',
|
||||
'Create function' => 'Tạo hàm',
|
||||
'Routine has been dropped.' => 'Đã xoá routine.',
|
||||
'Routine has been altered.' => 'Đã thay đổi routine.',
|
||||
'Routine has been created.' => 'Đã tạo routine.',
|
||||
'Alter function' => 'Thay đổi hàm',
|
||||
'Alter procedure' => 'Thay đổi thủ tục',
|
||||
'Return type' => 'Giá trị trả về',
|
||||
'Events' => 'Sự kiện',
|
||||
'Event has been dropped.' => 'Đã xoá sự kiện.',
|
||||
'Event has been altered.' => 'Đã thay đổi sự kiện.',
|
||||
'Event has been created.' => 'Đã tạo sự kiện.',
|
||||
'Alter event' => 'Sửa sự kiện',
|
||||
'Create event' => 'Tạo sự kiện',
|
||||
'At given time' => 'Vào thời gian xác định',
|
||||
'Every' => 'Mỗi',
|
||||
'Schedule' => 'Đặt lịch',
|
||||
'Start' => 'Bắt đầu',
|
||||
'End' => 'Kết thúc',
|
||||
'On completion preserve' => 'Khi kết thúc, duy trì',
|
||||
|
||||
'Tables' => 'Các bảng',
|
||||
'Tables and views' => 'Bảng và khung nhìn',
|
||||
'Table' => 'Bảng',
|
||||
'No tables.' => 'Không có bảng nào.',
|
||||
'Alter table' => 'Sửa bảng',
|
||||
'Create table' => 'Tạo bảng',
|
||||
'Table has been dropped.' => 'Bảng đã bị xoá.',
|
||||
'Tables have been dropped.' => 'Các bảng đã bị xoá.',
|
||||
'Tables have been optimized.' => 'Bảng đã được tối ưu.',
|
||||
'Table has been altered.' => 'Bảng đã thay đổi.',
|
||||
'Table has been created.' => 'Bảng đã được tạo.',
|
||||
'Table name' => 'Tên bảng',
|
||||
'Show structure' => 'Hiện cấu trúc',
|
||||
'engine' => 'cơ chế lưu trữ',
|
||||
'collation' => 'bảng mã',
|
||||
'Column name' => 'Tên cột',
|
||||
'Type' => 'Loại',
|
||||
'Length' => 'Độ dài',
|
||||
'Auto Increment' => 'Tăng tự động',
|
||||
'Options' => 'Tuỳ chọn',
|
||||
'Comment' => 'Chú thích',
|
||||
'Default values' => 'Giá trị mặc định',
|
||||
'Drop' => 'Xoá',
|
||||
'Are you sure?' => 'Bạn có chắc',
|
||||
'Size' => 'Kích thước',
|
||||
'Compute' => 'Tính',
|
||||
'Move up' => 'Chuyển lên trên',
|
||||
'Move down' => 'Chuyển xuống dưới',
|
||||
'Remove' => 'Xoá',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Thiết lập %s cần tăng thêm. (Đã vượt giới hạnố trường tối đa cho phép trong một biểu mẫu).',
|
||||
|
||||
'Partition by' => 'Phân chia bằng',
|
||||
'Partitions' => 'Phân hoạch',
|
||||
'Partition name' => 'Tên phân hoạch',
|
||||
'Values' => 'Giá trị',
|
||||
|
||||
'View' => 'Khung nhìn',
|
||||
'View has been dropped.' => 'Khung nhìn đã bị xoá.',
|
||||
'View has been altered.' => 'Khung nhìn đã được sửa.',
|
||||
'View has been created.' => 'Khung nhìn đã được tạo.',
|
||||
'Alter view' => 'Sửa khung nhìn',
|
||||
'Create view' => 'Tạo khung nhìn',
|
||||
|
||||
'Indexes' => 'Chỉ mục',
|
||||
'Indexes have been altered.' => 'Chỉ mục đã được sửa.',
|
||||
'Alter indexes' => 'Sửa chỉ mục',
|
||||
'Add next' => 'Thêm tiếp',
|
||||
'Index Type' => 'Loại chỉ mục',
|
||||
'Column (length)' => 'Cột (độ dài)',
|
||||
|
||||
'Foreign keys' => 'Các khoá ngoại',
|
||||
'Foreign key' => 'Khoá ngoại',
|
||||
'Foreign key has been dropped.' => 'Khoá ngoại đã bị xoá.',
|
||||
'Foreign key has been altered.' => 'Khoá ngoại đã được sửa.',
|
||||
'Foreign key has been created.' => 'Khoá ngoại đã được tạo.',
|
||||
'Target table' => 'Bảng đích',
|
||||
'Change' => 'Thay đổi',
|
||||
'Source' => 'Nguồn',
|
||||
'Target' => 'Đích',
|
||||
'Add column' => 'Thêm cột',
|
||||
'Alter' => 'Sửa',
|
||||
'Add foreign key' => 'Thêm khoá ngoại',
|
||||
'ON DELETE' => 'Khi xoá',
|
||||
'ON UPDATE' => 'Khi cập nhật',
|
||||
'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.',
|
||||
|
||||
'Triggers' => 'xx',
|
||||
'Add trigger' => 'xx',
|
||||
'Trigger has been dropped.' => 'Đã xoá phản xạ.',
|
||||
'Trigger has been altered.' => 'Đã sửa phản xạ.',
|
||||
'Trigger has been created.' => 'Đã tạo phản xạ.',
|
||||
'Alter trigger' => 'Sửa phản xạ',
|
||||
'Create trigger' => 'Tạo phản xạ',
|
||||
'Time' => 'Thời gian',
|
||||
'Event' => 'Sự kiện',
|
||||
'Name' => 'Tên',
|
||||
|
||||
'select' => 'xem',
|
||||
'Select' => 'Xem',
|
||||
'Select data' => 'Xem dữ liệu',
|
||||
'Functions' => 'Các chức năng',
|
||||
'Aggregation' => 'Tổng hợp',
|
||||
'Search' => 'Tìm kiếm',
|
||||
'anywhere' => 'bất cứ đâu',
|
||||
'Search data in tables' => 'Tìm kiếm dữ liệu trong các bảng',
|
||||
'Sort' => 'Sắp xếp',
|
||||
'descending' => 'giảm dần',
|
||||
'Limit' => 'Giới hạn',
|
||||
'Text length' => 'Chiều dài văn bản',
|
||||
'Action' => 'Hành động',
|
||||
'Full table scan' => 'Quét toàn bộ bảng',
|
||||
'Unable to select the table' => 'Không thể xem dữ liệu',
|
||||
'No rows.' => 'Không có dòng dữ liệu nào.',
|
||||
'%d row(s)' => '%s dòng',
|
||||
'Page' => 'trang',
|
||||
'last' => 'cuối',
|
||||
'Load more data' => 'Xem thêm dữ liệu',
|
||||
'Loading' => 'Đang nạp',
|
||||
'whole result' => 'toàn bộ kết quả',
|
||||
'%d byte(s)' => '%d byte(s)',
|
||||
|
||||
'Import' => 'Nhập khẩu',
|
||||
'%d row(s) have been imported.' => 'Đã nhập % dòng dữ liệu.',
|
||||
'File must be in UTF-8 encoding.' => 'Tệp phải mã hoá bằng chuẩn UTF-8.',
|
||||
|
||||
// in-place editing in select
|
||||
'Modify' => 'Sửa',
|
||||
'Ctrl+click on a value to modify it.' => 'Nhấn Ctrl và bấm vào giá trị để sửa.',
|
||||
'Use edit link to modify this value.' => 'Dùng nút sửa để thay đổi giá trị này.',
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => 'Đã thêm%s.',
|
||||
'Item has been deleted.' => 'Đã xoá.',
|
||||
'Item has been updated.' => 'Đã cập nhật.',
|
||||
'%d item(s) have been affected.' => '%d phần đã thay đổi.',
|
||||
'New item' => 'Thêm',
|
||||
'original' => 'bản gốc',
|
||||
// label for value '' in enum data type
|
||||
'empty' => 'trống',
|
||||
'edit' => 'sửa',
|
||||
'Edit' => 'Sửa',
|
||||
'Insert' => 'Thêm',
|
||||
'Save' => 'Lưu',
|
||||
'Save and continue edit' => 'Lưu và tiếp tục sửa',
|
||||
'Save and insert next' => 'Lưu và thêm tiếp',
|
||||
'Selected' => 'Chọn',
|
||||
'Clone' => 'Sao chép',
|
||||
'Delete' => 'Xoá',
|
||||
'You have no privileges to update this table.' => 'Bạn không có quyền sửa bảng này.',
|
||||
|
||||
'E-mail' => 'Địa chỉ email',
|
||||
'From' => 'Người gửi',
|
||||
'Subject' => 'Chủ đề',
|
||||
'Attachments' => 'Đính kèm',
|
||||
'Send' => 'Gửi',
|
||||
'%d e-mail(s) have been sent.' => '%d thư đã gửi.',
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'Số',
|
||||
'Date and time' => 'Ngày giờ',
|
||||
'Strings' => 'Chuỗi',
|
||||
'Binary' => 'Mã máy',
|
||||
'Lists' => 'Danh sách',
|
||||
'Network' => 'Mạng',
|
||||
'Geometry' => 'Toạ độ',
|
||||
'Relations' => 'Quan hệ',
|
||||
|
||||
'Editor' => 'Biên tập',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$1-$3-$5',
|
||||
// hint for date format - use language equivalents for day, month and year shortcuts
|
||||
'[yyyy]-mm-dd' => '[yyyy]-mm-dd',
|
||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'now' => 'hiện tại',
|
||||
'yes' => 'có',
|
||||
'no' => 'không',
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'Tệp đã có rồi.',
|
||||
'Please use one of the extensions %s.' => 'Cần phải dùng một trong các phần mở rộng sau: %s.',
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => 'Thay đổi schema',
|
||||
'Create schema' => 'Tạo schema',
|
||||
'Schema has been dropped.' => 'Đã xoá schema.',
|
||||
'Schema has been created.' => 'Đã tạo schema.',
|
||||
'Schema has been altered.' => 'Đã thay đổi schema.',
|
||||
'Schema' => 'schema',
|
||||
'Invalid schema.' => 'Schema khong hợp lệ.',
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'Dãy số',
|
||||
'Create sequence' => 'Tạo đãy số',
|
||||
'Sequence has been dropped.' => 'Dãy số đã bị xoá.',
|
||||
'Sequence has been created.' => 'Đã tạo dãy số.',
|
||||
'Sequence has been altered.' => 'Đã sửa dãy số.',
|
||||
'Alter sequence' => 'Thay đổi dãy số',
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => 'Kiểu tự định nghĩa',
|
||||
'Create type' => 'Tạo kiểu',
|
||||
'Type has been dropped.' => 'Đã xoá kiểu.',
|
||||
'Type has been created.' => 'Đã tạo kiểu.',
|
||||
'Alter type' => 'Sửa kiểu dữ liệu',
|
||||
);
|
@@ -11,6 +11,7 @@ $translations = array(
|
||||
'Logged as: %s' => 'xx',
|
||||
'Logout successful.' => 'xx',
|
||||
'Invalid credentials.' => 'xx',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('xx', 'xx'),
|
||||
'Master password expired. <a href="http://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.' => 'xx',
|
||||
'Language' => 'xx',
|
||||
'Invalid CSRF token. Send the form again.' => 'xx',
|
||||
@@ -94,7 +95,8 @@ $translations = array(
|
||||
'Permanent link' => 'xx',
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => 'xx',
|
||||
',' => 'x',
|
||||
'0123456789' => 'xxxxxxxxxx',
|
||||
'Engine' => 'xx',
|
||||
'Collation' => 'xx',
|
||||
'Data Length' => 'xx',
|
||||
@@ -165,6 +167,8 @@ $translations = array(
|
||||
'Default values' => 'xx',
|
||||
'Drop' => 'xx',
|
||||
'Are you sure?' => 'xx',
|
||||
'Size' => 'xx',
|
||||
'Compute' => 'xx',
|
||||
'Move up' => 'xx',
|
||||
'Move down' => 'xx',
|
||||
'Remove' => 'xx',
|
||||
@@ -307,7 +311,6 @@ $translations = array(
|
||||
'Schema has been dropped.' => 'xx',
|
||||
'Schema has been created.' => 'xx',
|
||||
'Schema has been altered.' => 'xx',
|
||||
'schema' => 'xx',
|
||||
'Schema' => 'xx',
|
||||
'Invalid schema.' => 'xx',
|
||||
|
||||
|
@@ -12,7 +12,7 @@ $translations = array(
|
||||
'Table has been altered.' => '資料表已修改。',
|
||||
'Table has been created.' => '資料表已修改。',
|
||||
'Alter table' => '修改資料表',
|
||||
'Create table' => '建立資料表表',
|
||||
'Create table' => '建立資料表',
|
||||
'Table name' => '資料表名稱',
|
||||
'engine' => '引擎',
|
||||
'collation' => '校對',
|
||||
@@ -30,7 +30,7 @@ $translations = array(
|
||||
'Alter database' => '修改資料庫',
|
||||
'Create database' => '建立資料庫',
|
||||
'SQL command' => 'SQL命令',
|
||||
'Dump' => '匯入/匯出',
|
||||
'Dump' => '匯出',
|
||||
'Logout' => '登出',
|
||||
'database' => '資料庫',
|
||||
'Use' => '使用',
|
||||
@@ -174,6 +174,7 @@ $translations = array(
|
||||
'Data Free' => '資料空閒',
|
||||
'Rows' => '行數',
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Analyze' => '分析',
|
||||
'Optimize' => '最佳化',
|
||||
'Check' => '檢查',
|
||||
@@ -225,7 +226,6 @@ $translations = array(
|
||||
'Table has been dropped.' => '已經刪除資料表。',
|
||||
'Databases have been dropped.' => '資料庫已刪除。',
|
||||
'Search data in tables' => '在資料庫搜尋',
|
||||
'schema' => '資料表結構',
|
||||
'Schema' => '資料表結構',
|
||||
'Alter schema' => '修改資料表結構',
|
||||
'Create schema' => '建立資料表結構',
|
||||
|
@@ -176,6 +176,7 @@ $translations = array(
|
||||
'Data Free' => '数据空闲',
|
||||
'Rows' => '行数',
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Analyze' => '分析',
|
||||
'Optimize' => '优化',
|
||||
'Check' => '检查',
|
||||
@@ -225,7 +226,6 @@ $translations = array(
|
||||
'Permanent login' => '保持登录',
|
||||
'Databases have been dropped.' => '已删除数据库。',
|
||||
'Search data in tables' => '在表中搜索数据',
|
||||
'schema' => '模式',
|
||||
'Schema' => '模式',
|
||||
'Alter schema' => '修改模式',
|
||||
'Create schema' => '创建模式',
|
||||
|
@@ -12,7 +12,7 @@ if ($_GET["script"] == "db") {
|
||||
}
|
||||
foreach ($sums + array("Auto_increment" => 0, "Rows" => 0) as $key => $val) {
|
||||
if ($table_status[$key] != "") {
|
||||
$val = number_format($table_status[$key], 0, '.', lang(','));
|
||||
$val = format_number($table_status[$key]);
|
||||
json_row("$key-$id", ($key == "Rows" && $val && $table_status["Engine"] == ($sql == "pgsql" ? "table" : "InnoDB")
|
||||
? "~ $val"
|
||||
: $val
|
||||
@@ -28,7 +28,7 @@ if ($_GET["script"] == "db") {
|
||||
}
|
||||
}
|
||||
foreach ($sums as $key => $val) {
|
||||
json_row("sum-$key", number_format($val, 0, '.', lang(',')));
|
||||
json_row("sum-$key", format_number($val));
|
||||
}
|
||||
json_row("");
|
||||
|
||||
@@ -37,7 +37,8 @@ if ($_GET["script"] == "db") {
|
||||
|
||||
} else { // connect
|
||||
foreach (count_tables($adminer->databases()) as $db => $val) {
|
||||
json_row("tables-" . js_escape($db), $val);
|
||||
json_row("tables-$db", $val);
|
||||
json_row("size-$db", db_size($db));
|
||||
}
|
||||
json_row("");
|
||||
}
|
||||
|
@@ -41,7 +41,7 @@ if ($_GET["val"] && is_ajax()) {
|
||||
$as = convert_field($fields[key($row)]);
|
||||
$select = array($as ? $as : idf_escape(key($row)));
|
||||
$where[] = where_check($unique_idf, $fields);
|
||||
$return = $driver->select($TABLE, $select, $where, $select, array(), 1, 0);
|
||||
$return = $driver->select($TABLE, $select, $where, $select);
|
||||
if ($return) {
|
||||
echo reset($return->fetch_row());
|
||||
}
|
||||
@@ -52,7 +52,11 @@ if ($_GET["val"] && is_ajax()) {
|
||||
if ($_POST && !$error) {
|
||||
$where_check = $where;
|
||||
if (!$_POST["all"] && is_array($_POST["check"])) {
|
||||
$where_check[] = "((" . implode(") OR (", array_map('where_check', $_POST["check"])) . "))";
|
||||
$checks = array();
|
||||
foreach ($_POST["check"] as $check) {
|
||||
$checks[] = where_check($check, $fields);
|
||||
}
|
||||
$where_check[] = "((" . implode(") OR (", $checks) . "))";
|
||||
}
|
||||
$where_check = ($where_check ? "\nWHERE " . implode(" AND ", $where_check) : "");
|
||||
$primary = $unselected = null;
|
||||
@@ -139,7 +143,11 @@ if ($_POST && !$error) {
|
||||
}
|
||||
}
|
||||
queries_redirect(remove_from_uri($_POST["all"] && $_POST["delete"] ? "page" : ""), $message, $result);
|
||||
//! display edit page in case of an error
|
||||
if (!$_POST["delete"]) {
|
||||
edit_form($TABLE, $fields, (array) $_POST["fields"], !$_POST["clone"]);
|
||||
page_footer();
|
||||
exit;
|
||||
}
|
||||
|
||||
} elseif (!$_POST["import"]) { // modify
|
||||
if (!$_POST["val"]) {
|
||||
@@ -462,7 +470,7 @@ if (!$columns && support("table")) {
|
||||
);
|
||||
}
|
||||
echo (($found_rows === false ? count($rows) + 1 : $found_rows - $page * $limit) > $limit
|
||||
? ' <a href="' . h(remove_from_uri("page") . "&page=" . ($page + 1)) . '" onclick="return !selectLoadMore(this, ' . (+$limit) . ', \'' . lang('Loading') . '...\');">' . lang('Load more data') . '</a>'
|
||||
? ' <a href="' . h(remove_from_uri("page") . "&page=" . ($page + 1)) . '" onclick="return !selectLoadMore(this, ' . (+$limit) . ', \'' . lang('Loading') . '...\');" class="loadmore">' . lang('Load more data') . '</a>'
|
||||
: ''
|
||||
);
|
||||
} else {
|
||||
|
@@ -39,13 +39,13 @@ if (!$error && $_POST) {
|
||||
$q = $query . (preg_match("~;[ \t\r\n]*\$~", $query) ? "" : ";"); //! doesn't work with DELIMITER |
|
||||
if (!$history || reset(end($history)) != $q) { // no repeated queries
|
||||
restart_session();
|
||||
$history[] = array($q, time());
|
||||
$history[] = array($q, time()); //! add elapsed time
|
||||
set_session("queries", $history_all); // required because reference is unlinked by stop_session()
|
||||
stop_session();
|
||||
}
|
||||
}
|
||||
|
||||
$space = "(?:\\s|/\\*.*\\*/|(?:#|-- )[^\n]*\n|--\n)";
|
||||
$space = "(?:\\s|/\\*.*\\*/|(?:#|-- )[^\n]*\n|--\r?\n)";
|
||||
$delimiter = ";";
|
||||
$offset = 0;
|
||||
$empty = true;
|
||||
@@ -108,8 +108,7 @@ if (!$error && $_POST) {
|
||||
|
||||
do {
|
||||
$result = $connection->store_result();
|
||||
$end = microtime(true);
|
||||
$time = " <span class='time'>(" . format_time($start, $end) . ")</span>"
|
||||
$time = " <span class='time'>(" . format_time($start) . ")</span>"
|
||||
. (strlen($q) < 1000 ? " <a href='" . h(ME) . "sql=" . urlencode(trim($q)) . "'>" . lang('Edit') . "</a>" : "") // 1000 - maximum length of encoded URL in IE is 2083 characters
|
||||
;
|
||||
|
||||
@@ -156,7 +155,7 @@ if (!$error && $_POST) {
|
||||
}
|
||||
}
|
||||
|
||||
$start = $end;
|
||||
$start = microtime(true);
|
||||
} while ($connection->next_result());
|
||||
|
||||
$line += substr_count($q.$found, "\n");
|
||||
@@ -172,7 +171,7 @@ if (!$error && $_POST) {
|
||||
echo "<p class='message'>" . lang('No commands to execute.') . "\n";
|
||||
} elseif ($_POST["only_errors"]) {
|
||||
echo "<p class='message'>" . lang('%d query(s) executed OK.', $commands - count($errors));
|
||||
echo " <span class='time'>(" . format_time($total_start, microtime(true)) . ")</span>\n";
|
||||
echo " <span class='time'>(" . format_time($total_start) . ")</span>\n";
|
||||
} elseif ($errors && $commands > 1) {
|
||||
echo "<p class='error'>" . lang('Error in query') . ": " . implode("", $errors) . "\n";
|
||||
}
|
||||
@@ -217,15 +216,20 @@ if (!isset($_GET["import"])) {
|
||||
}
|
||||
|
||||
echo checkbox("error_stops", 1, ($_POST ? $_POST["error_stops"] : isset($_GET["import"])), lang('Stop on error')) . "\n";
|
||||
echo checkbox("only_errors", 1, $_POST["only_errors"], lang('Show only errors')) . "\n";
|
||||
echo checkbox("only_errors", 1, ($_POST ? $_POST["only_errors"] : isset($_GET["import"])), lang('Show only errors')) . "\n";
|
||||
echo "<input type='hidden' name='token' value='$token'>\n";
|
||||
|
||||
if (!isset($_GET["import"]) && $history) {
|
||||
print_fieldset("history", lang('History'), $_GET["history"] != "");
|
||||
for ($val = end($history); $val; $val = prev($history)) { // not array_reverse() to save memory
|
||||
$key = key($history);
|
||||
list($q, $time) = $val;
|
||||
echo '<a href="' . h(ME . "sql=&history=$key") . '">' . lang('Edit') . "</a> <span class='time' title='" . @date('Y-m-d', $time) . "'>" . @date("H:i:s", $time) . "</span> <code class='jush-$jush'>" . shorten_utf8(ltrim(str_replace("\n", " ", str_replace("\r", "", preg_replace('~^(#|-- ).*~m', '', $q)))), 80, "</code>") . "<br>\n"; // @ - time zone may be not set
|
||||
list($q, $time, $elapsed) = $val;
|
||||
echo '<a href="' . h(ME . "sql=&history=$key") . '">' . lang('Edit') . "</a>"
|
||||
. " <span class='time' title='" . @date('Y-m-d', $time) . "'>" . @date("H:i:s", $time) . "</span>" // @ - time zone may be not set
|
||||
. " <code class='jush-$jush'>" . shorten_utf8(ltrim(str_replace("\n", " ", str_replace("\r", "", preg_replace('~^(#|-- ).*~m', '', $q)))), 80, "</code>")
|
||||
. ($elapsed ? " <span class='time'>($elapsed)</span>" : "")
|
||||
. "<br>\n"
|
||||
;
|
||||
}
|
||||
echo "<input type='submit' name='clear' value='" . lang('Clear') . "'>\n";
|
||||
echo "<a href='" . h(ME . "sql=&history=all") . "'>" . lang('Edit all') . "</a>\n";
|
||||
|
@@ -58,6 +58,7 @@ input.required { box-shadow: 1px 1px 1px red; }
|
||||
.pages { position: fixed; bottom: 0; left: 21em; padding: 5px; background: #ddf; border: 1px solid #999; }
|
||||
.links a { white-space: nowrap; margin-right: 20px; }
|
||||
.logout { margin-top: .5em; position: absolute; top: 0; right: 0; }
|
||||
.loadmore { margin-left: 1ex; }
|
||||
#menu { position: absolute; margin: 10px 0 0; padding: 0 0 30px 0; top: 2em; left: 0; width: 19em; }
|
||||
#menu p { padding: .8em 1em; margin: 0; border-bottom: 1px solid #ccc; }
|
||||
#dbs { overflow: hidden; }
|
||||
|
@@ -6,16 +6,18 @@
|
||||
function bodyLoad(version) {
|
||||
if (window.jush) {
|
||||
jush.create_links = ' target="_blank" rel="noreferrer"';
|
||||
for (var key in jush.urls) {
|
||||
var obj = jush.urls;
|
||||
if (typeof obj[key] != 'string') {
|
||||
obj = obj[key];
|
||||
key = 0;
|
||||
if (version) {
|
||||
for (var key in jush.urls) {
|
||||
var obj = jush.urls;
|
||||
if (typeof obj[key] != 'string') {
|
||||
obj = obj[key];
|
||||
key = 0;
|
||||
}
|
||||
obj[key] = obj[key]
|
||||
.replace(/\/doc\/mysql/, '/doc/refman/' + version) // MySQL
|
||||
.replace(/\/docs\/current/, '/docs/' + version) // PostgreSQL
|
||||
;
|
||||
}
|
||||
obj[key] = obj[key]
|
||||
.replace(/\/doc\/mysql/, '/doc/refman/' + version) // MySQL
|
||||
.replace(/\/docs\/current/, '/docs/' + version) // PostgreSQL
|
||||
;
|
||||
}
|
||||
if (window.jushLinks) {
|
||||
jush.custom_links = jushLinks;
|
||||
@@ -64,7 +66,9 @@ function typePassword(el, disable) {
|
||||
function loginDriver(driver) {
|
||||
var trs = parentTag(driver, 'table').rows;
|
||||
for (var i=1; i < trs.length - 1; i++) {
|
||||
alterClass(trs[i], 'hidden', /sqlite/.test(driver.value));
|
||||
var disabled = /sqlite/.test(driver.value);
|
||||
alterClass(trs[i], 'hidden', disabled);
|
||||
trs[i].getElementsByTagName('input')[0].disabled = disabled;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -308,7 +312,7 @@ function editingTypeChange(type) {
|
||||
alterClass(el, 'hidden', !/((^|[^o])int|float|double|decimal)$/.test(text));
|
||||
}
|
||||
if (el.name == name + '[on_update]') {
|
||||
alterClass(el, 'hidden', text != 'timestamp');
|
||||
alterClass(el, 'hidden', !/timestamp|datetime/.test(text)); // MySQL supports datetime since 5.6.5
|
||||
}
|
||||
if (el.name == name + '[on_delete]') {
|
||||
alterClass(el, 'hidden', !/`/.test(text));
|
||||
@@ -433,12 +437,16 @@ function indexesAddRow(field) {
|
||||
* @param string name prefix
|
||||
*/
|
||||
function indexesChangeColumn(field, prefix) {
|
||||
var columns = parentTag(field, 'td').getElementsByTagName('select');
|
||||
var names = [];
|
||||
for (var i=0; i < columns.length; i++) {
|
||||
var value = selectValue(columns[i]);
|
||||
if (value) {
|
||||
names.push(value);
|
||||
for (var tag in { 'select': 1, 'input': 1 }) {
|
||||
var columns = parentTag(field, 'td').getElementsByTagName(tag);
|
||||
for (var i=0; i < columns.length; i++) {
|
||||
if (/\[columns\]/.test(columns[i].name)) {
|
||||
var value = selectValue(columns[i]);
|
||||
if (value) {
|
||||
names.push(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
field.form[field.name.replace(/\].*/, '][name]')].value = prefix + names.join('_');
|
||||
@@ -460,18 +468,41 @@ function indexesAddColumn(field, prefix) {
|
||||
select.onchange();
|
||||
}
|
||||
var column = cloneNode(field.parentNode);
|
||||
select = column.getElementsByTagName('select')[0];
|
||||
select.name = select.name.replace(/\]\[\d+/, '$&1');
|
||||
select.selectedIndex = 0;
|
||||
var input = column.getElementsByTagName('input')[0];
|
||||
input.name = input.name.replace(/\]\[\d+/, '$&1');
|
||||
input.value = '';
|
||||
var selects = column.getElementsByTagName('select');
|
||||
for (var i = 0; i < selects.length; i++) {
|
||||
select = selects[i];
|
||||
select.name = select.name.replace(/\]\[\d+/, '$&1');
|
||||
select.selectedIndex = 0;
|
||||
}
|
||||
var inputs = column.getElementsByTagName('input');
|
||||
for (var i = 0; i < inputs.length; i++) {
|
||||
var input = inputs[i];
|
||||
input.name = input.name.replace(/\]\[\d+/, '$&1');
|
||||
if (input.type != 'checkbox') {
|
||||
input.value = '';
|
||||
}
|
||||
}
|
||||
parentTag(field, 'td').appendChild(column);
|
||||
field.onchange();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** Handle changing trigger time or event
|
||||
* @param RegExp
|
||||
* @param string
|
||||
* @param HTMLFormElement
|
||||
*/
|
||||
function triggerChange(tableRe, table, form) {
|
||||
var formEvent = selectValue(form['Event']);
|
||||
if (tableRe.test(form['Trigger'].value)) {
|
||||
form['Trigger'].value = table + '_' + (selectValue(form['Timing']).charAt(0) + formEvent.charAt(0)).toLowerCase();
|
||||
}
|
||||
alterClass(form['Of'], 'hidden', formEvent != 'UPDATE OF');
|
||||
}
|
||||
|
||||
|
||||
|
||||
var that, x, y; // em and tablePos defined in schema.inc.php
|
||||
|
||||
/** Get mouse position
|
||||
@@ -549,6 +580,8 @@ function schemaMouseup(ev, db) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
var helpOpen, helpIgnore; // when mouse outs <option> then it mouse overs border of <select> - ignore it
|
||||
|
||||
/** Display help
|
||||
@@ -568,8 +601,9 @@ function helpMouseover(el, event, text, side) {
|
||||
jush.highlight_tag([ help ]);
|
||||
alterClass(help, 'hidden');
|
||||
var rect = target.getBoundingClientRect();
|
||||
help.style.top = (rect.top - (side ? (help.offsetHeight - target.offsetHeight) / 2 : help.offsetHeight)) + 'px';
|
||||
help.style.left = (rect.left - (side ? help.offsetWidth : (help.offsetWidth - target.offsetWidth) / 2)) + 'px';
|
||||
var body = document.documentElement;
|
||||
help.style.top = (body.scrollTop + rect.top - (side ? (help.offsetHeight - target.offsetHeight) / 2 : help.offsetHeight)) + 'px';
|
||||
help.style.left = (body.scrollLeft + rect.left - (side ? help.offsetWidth : (help.offsetWidth - target.offsetWidth) / 2)) + 'px';
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -5,7 +5,9 @@
|
||||
* @param [bool]
|
||||
*/
|
||||
function alterClass(el, className, enable) {
|
||||
el.className = el.className.replace(RegExp('(^|\\s)' + className + '(\\s|$)'), '$2') + (enable ? ' ' + className : '');
|
||||
if (el) {
|
||||
el.className = el.className.replace(RegExp('(^|\\s)' + className + '(\\s|$)'), '$2') + (enable ? ' ' + className : '');
|
||||
}
|
||||
}
|
||||
|
||||
/** Toggle visibility
|
||||
@@ -95,7 +97,7 @@ function parentTag(el, tag) {
|
||||
function trCheck(el) {
|
||||
var tr = parentTag(el, 'tr');
|
||||
alterClass(tr, 'checked', el.checked);
|
||||
if (el.form && el.form['all']) {
|
||||
if (el.form && el.form['all'] && el.form['all'].onclick) { // Opera treats form.all as document.all
|
||||
el.form['all'].onclick();
|
||||
}
|
||||
}
|
||||
@@ -478,6 +480,20 @@ function keyupChange() {
|
||||
}
|
||||
}
|
||||
|
||||
/** Add new field in schema-less edit
|
||||
* @param HTMLInputElement
|
||||
*/
|
||||
function fieldChange(field) {
|
||||
var row = cloneNode(parentTag(field, 'tr'));
|
||||
var inputs = row.getElementsByTagName('input');
|
||||
for (var i = 0; i < inputs.length; i++) {
|
||||
inputs[i].value = '';
|
||||
}
|
||||
// keep value in <select> (function)
|
||||
parentTag(field, 'table').appendChild(row);
|
||||
field.onchange = function () { };
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** Create AJAX request
|
||||
|
@@ -79,7 +79,7 @@ if (support(is_view($table_status) ? "view_trigger" : "trigger")) {
|
||||
if ($triggers) {
|
||||
echo "<table cellspacing='0'>\n";
|
||||
foreach ($triggers as $key => $val) {
|
||||
echo "<tr valign='top'><td>$val[0]<td>$val[1]<th>" . h($key) . "<td><a href='" . h(ME . 'trigger=' . urlencode($TABLE) . '&name=' . urlencode($key)) . "'>" . lang('Alter') . "</a>\n";
|
||||
echo "<tr valign='top'><td>" . h($val[0]) . "<td>" . h($val[1]) . "<th>" . h($key) . "<td><a href='" . h(ME . 'trigger=' . urlencode($TABLE) . '&name=' . urlencode($key)) . "'>" . lang('Alter') . "</a>\n";
|
||||
}
|
||||
echo "</table>\n";
|
||||
}
|
||||
|
@@ -2,11 +2,10 @@
|
||||
$TABLE = $_GET["trigger"];
|
||||
$name = $_GET["name"];
|
||||
$trigger_options = trigger_options();
|
||||
$trigger_event = array("INSERT", "UPDATE", "DELETE");
|
||||
$row = (array) trigger($name) + array("Trigger" => $TABLE . "_bi");
|
||||
|
||||
if ($_POST) {
|
||||
if (!$error && in_array($_POST["Timing"], $trigger_options["Timing"]) && in_array($_POST["Event"], $trigger_event) && in_array($_POST["Type"], $trigger_options["Type"])) {
|
||||
if (!$error && in_array($_POST["Timing"], $trigger_options["Timing"]) && in_array($_POST["Event"], $trigger_options["Event"]) && in_array($_POST["Type"], $trigger_options["Type"])) {
|
||||
// don't use drop_create() because there may not be more triggers for the same action
|
||||
$on = " ON " . table($TABLE);
|
||||
$drop = "DROP TRIGGER " . idf_escape($name) . ($jush == "pgsql" ? $on : "");
|
||||
@@ -35,11 +34,13 @@ page_header(($name != "" ? lang('Alter trigger') . ": " . h($name) : lang('Creat
|
||||
|
||||
<form action="" method="post" id="form">
|
||||
<table cellspacing="0">
|
||||
<tr><th><?php echo lang('Time'); ?><td><?php echo html_select("Timing", $trigger_options["Timing"], $row["Timing"], "if (/^" . preg_quote($TABLE, "/") . "_[ba][iud]$/.test(this.form['Trigger'].value)) this.form['Trigger'].value = '" . js_escape($TABLE) . "_' + selectValue(this).charAt(0).toLowerCase() + selectValue(this.form['Event']).charAt(0).toLowerCase();"); ?>
|
||||
<tr><th><?php echo lang('Event'); ?><td><?php echo html_select("Event", $trigger_event, $row["Event"], "this.form['Timing'].onchange();"); ?>
|
||||
<tr><th><?php echo lang('Time'); ?><td><?php echo html_select("Timing", $trigger_options["Timing"], $row["Timing"], "triggerChange(/^" . preg_quote($TABLE, "/") . "_[ba][iud]$/, '" . js_escape($TABLE) . "', this.form);"); ?>
|
||||
<tr><th><?php echo lang('Event'); ?><td><?php echo html_select("Event", $trigger_options["Event"], $row["Event"], "this.form['Timing'].onchange();"); ?>
|
||||
<?php echo (in_array("UPDATE OF", $trigger_options["Event"]) ? " <input name='Of' value='" . h($row["Of"]) . "' class='hidden'>": ""); ?>
|
||||
<tr><th><?php echo lang('Type'); ?><td><?php echo html_select("Type", $trigger_options["Type"], $row["Type"]); ?>
|
||||
</table>
|
||||
<p><?php echo lang('Name'); ?>: <input name="Trigger" value="<?php echo h($row["Trigger"]); ?>" maxlength="64" autocapitalize="off">
|
||||
<script type="text/javascript">document.getElementById('form')['Timing'].onchange();</script>
|
||||
<p><?php textarea("Statement", $row["Statement"]); ?>
|
||||
<p>
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||
|
27
changes.txt
27
changes.txt
@@ -1,3 +1,30 @@
|
||||
Adminer 4.1.0 (released 2014-04-18)
|
||||
Provide size of all databases in the overview
|
||||
Prevent against brute force login attempts from the same IP address
|
||||
Compute number of tables in the overview explicitly
|
||||
Display edit form after error in clone or multi-edit
|
||||
Trim trailing non-breaking spaces in SQL textarea
|
||||
Display time of the select command
|
||||
Print elapsed time in HTML instead of SQL command comment
|
||||
Improve gzip export ratio (bug #387)
|
||||
Use rel="noreferrer" for external links, skip adminer.org redirect in WebKit
|
||||
MySQL: Fix enum types in routines (bug #391)
|
||||
MySQL: Fix editing rows by binary values, bug since Adminer 3.7.1
|
||||
MySQL: Respect daylight saving time in dump, bug since Adminer 3.6.4
|
||||
MySQL 5.6.5+: Support ON UPDATE on datatime column
|
||||
SQLite: Support UPDATE OF triggers
|
||||
SQLite: Display auto-created unique indexes, bug since Adminer 3.5.0
|
||||
Editor: Fix login() method, bug since Adminer 4.0.0
|
||||
Translate numbers in ar, bn, fa
|
||||
Vietnamese translation
|
||||
|
||||
Adminer 4.0.3 (released 2014-02-01)
|
||||
MongoDB: insert, truncate, indexes
|
||||
SimpleDB, MongoDB: insert more fields at once
|
||||
SQLite: Fix creating table and altering primary key, bug since Adminer 4.0.0
|
||||
Don't store invalid credentials to session, bug since Adminer 4.0.0
|
||||
Norweigan translation
|
||||
|
||||
Adminer 4.0.2 (released 2014-01-11):
|
||||
Fix handling of long text in SQL textarea
|
||||
Support paste to SQL textarea in Opera
|
||||
|
17
compile.php
17
compile.php
@@ -70,7 +70,7 @@ function lang(\$translation, \$number = null) {
|
||||
$translation = $translation[$pos];
|
||||
}
|
||||
$translation = str_replace("%d", "%s", $translation);
|
||||
$number = number_format($number, 0, ".", lang(\',\'));
|
||||
$number = format_number($number);
|
||||
return sprintf($translation, $number);
|
||||
}
|
||||
';
|
||||
@@ -287,11 +287,14 @@ function minify_js($file) {
|
||||
function compile_file($match) {
|
||||
global $project;
|
||||
$file = "";
|
||||
foreach (explode(";", $match[1]) as $filename) {
|
||||
$file .= file_get_contents(dirname(__FILE__) . "/$project/$filename");
|
||||
list(, $filenames, $callback) = $match;
|
||||
if ($filenames != "") {
|
||||
foreach (explode(";", $filenames) as $filename) {
|
||||
$file .= file_get_contents(dirname(__FILE__) . "/$project/$filename");
|
||||
}
|
||||
}
|
||||
if ($match[2]) {
|
||||
$file = call_user_func($match[2], $file);
|
||||
if ($callback) {
|
||||
$file = call_user_func($callback, $file);
|
||||
}
|
||||
return '"' . add_quo_slashes($file) . '"';
|
||||
}
|
||||
@@ -378,7 +381,7 @@ if ($driver) {
|
||||
}
|
||||
if ($project == "editor") {
|
||||
$file = preg_replace('~;../externals/jush/jush.css~', '', $file);
|
||||
$file = preg_replace('~;../externals/jush/modules/jush[^.]*.js~', '', $file);
|
||||
$file = preg_replace('~;?../externals/jush/modules/jush[^.]*.js~', '', $file);
|
||||
}
|
||||
$file = preg_replace_callback("~lang\\('((?:[^\\\\']+|\\\\.)*)'([,)])~s", 'lang_ids', $file);
|
||||
$file = preg_replace_callback('~\\b(include|require) "([^"]*\\$LANG.inc.php)";~', 'put_file_lang', $file);
|
||||
@@ -390,7 +393,6 @@ if ($_SESSION["lang"]) {
|
||||
$file = str_replace('<?php echo $LANG; ?>', $_SESSION["lang"], $file);
|
||||
}
|
||||
$file = str_replace('<script type="text/javascript" src="static/editing.js"></script>' . "\n", "", $file);
|
||||
$file = str_replace('<script type="text/javascript" src="../externals/jush/modules/jush.js"></script>' . "\n", "", $file);
|
||||
$file = str_replace('<script type="text/javascript" src="../externals/jush/modules/jush-textarea.js"></script>' . "\n", "", $file);
|
||||
$file = str_replace('<script type="text/javascript" src="../externals/jush/modules/jush-txt.js"></script>' . "\n", "", $file);
|
||||
$file = str_replace('<script type="text/javascript" src="../externals/jush/modules/jush-<?php echo $jush; ?>.js"></script>' . "\n", "", $file);
|
||||
@@ -399,6 +401,7 @@ $file = preg_replace_callback("~compile_file\\('([^']+)'(?:, '([^']*)')?\\)~", '
|
||||
$replace = 'h(preg_replace("~\\\\\\\\?.*~", "", ME)) . "?file=\\1&version=' . $VERSION . ($driver ? '&driver=' . $driver : '');
|
||||
$file = preg_replace('~\\.\\./adminer/static/(default\\.css|functions\\.js|favicon\\.ico)~', '<?php echo ' . $replace . '"; ?>', $file);
|
||||
$file = preg_replace('~\\.\\./adminer/static/([^\'"]*)~', '" . ' . $replace, $file);
|
||||
$file = preg_replace('~\\.\\./externals/jush/modules/(jush\\.js)~', '<?php echo ' . $replace . '"; ?>', $file);
|
||||
$file = preg_replace("~<\\?php\\s*\\?>\n?|\\?>\n?<\\?php~", '', $file);
|
||||
$file = php_shrink($file);
|
||||
|
||||
|
@@ -1,13 +1,16 @@
|
||||
/**
|
||||
* Alternative style for Adminer by Frank Bueltge
|
||||
* @link http://bueltge.de/
|
||||
/**
|
||||
* Alternative style for Adminer by Frank Bültge
|
||||
*
|
||||
* @link http://bueltge.de/
|
||||
* @version 02/18/2014
|
||||
*/
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
line-height: 1.25em;
|
||||
margin: 0;
|
||||
font-size: 12px;
|
||||
line-height: 1.4em;
|
||||
background: #F9F9F9;
|
||||
color: #333;
|
||||
}
|
||||
body, select, option, optgroup, button {
|
||||
font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;
|
||||
@@ -20,27 +23,67 @@ font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
pre {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 0.8em 20px 0 5px
|
||||
}
|
||||
|
||||
a {
|
||||
color: #21759B;
|
||||
background: none !important;
|
||||
}
|
||||
a:visited {
|
||||
color: #21759B;
|
||||
}
|
||||
a:hover {
|
||||
a:hover, a:hover {
|
||||
text-decoration: none;
|
||||
color: #D54E21;
|
||||
color: #d54e21;
|
||||
}
|
||||
a:focus {
|
||||
background: #c7e7fd;
|
||||
color: #124964;
|
||||
}
|
||||
a:active {
|
||||
background: none;
|
||||
outline: thin dotted;
|
||||
}
|
||||
|
||||
a.active, a.active + a {
|
||||
text-decoration: none;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
form {
|
||||
margin: 0;
|
||||
padding: 0 0 0 5px;
|
||||
}
|
||||
table {
|
||||
margin: 0 12px 12px 0;
|
||||
table {
|
||||
width: 100%;
|
||||
clear: both;
|
||||
margin: 0;
|
||||
border-spacing: 0;
|
||||
border-collapse: separate;
|
||||
border-color: gray;
|
||||
}
|
||||
table, thead, tbody {
|
||||
margin: 10px 12px 0 0;
|
||||
border: 1px #BBB solid;
|
||||
font-size: 90%;
|
||||
}
|
||||
thead th, thead td {
|
||||
text-align: center;
|
||||
}
|
||||
td {
|
||||
white-space: normal;
|
||||
overflow: hidden;
|
||||
padding: 0 4px;
|
||||
}
|
||||
th {
|
||||
text-align: left;
|
||||
font-weight: 400;
|
||||
}
|
||||
td, th {
|
||||
background-color: #fff;
|
||||
@@ -54,9 +97,14 @@ border-top-width: 0;
|
||||
td:first-child, th:first-child {
|
||||
border-left-width: 0;
|
||||
}
|
||||
thead {
|
||||
display: table-header-group;
|
||||
vertical-align: middle;
|
||||
border-color: inherit;
|
||||
}
|
||||
thead td, thead th {
|
||||
background-color: #DFDFDF;
|
||||
border: none;
|
||||
border: none;
|
||||
border-bottom: 1px #BBB solid;
|
||||
}
|
||||
thead tr:hover td, thead tr:hover th {
|
||||
@@ -85,19 +133,21 @@ fieldset, x:-moz-any-link {
|
||||
padding-top: 4px;
|
||||
}
|
||||
fieldset {
|
||||
%padding-top: 14px;
|
||||
padding-top: 14px;
|
||||
}
|
||||
legend {
|
||||
font-weight: 900;
|
||||
color: #000;
|
||||
position: absolute;
|
||||
top: -1.666em;
|
||||
left: -1em;
|
||||
padding: 0 4px;
|
||||
}
|
||||
input[name='limit'], input[name*='length'] {
|
||||
input {
|
||||
padding: 2px 5px 1px 5px;
|
||||
}
|
||||
input[name='limit'], input[name='length'] {
|
||||
width: 3em;
|
||||
xtext-align: right;
|
||||
text-align: right;
|
||||
}
|
||||
input[name='text_length'] {
|
||||
width: 5em;
|
||||
@@ -108,39 +158,83 @@ margin-left: 2px;
|
||||
textarea, input, select {
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
-moz-border-radius: 4px;
|
||||
-khtml-border-radius: 4px;
|
||||
-webkit-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
-moz-border-radius: 3px;
|
||||
-khtml-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
border-color: #DFDFDF;
|
||||
}
|
||||
select {
|
||||
margin: 0 0 1px 0;
|
||||
}
|
||||
input[type="checkbox"], input[type="radio"], input[type="image"] {
|
||||
border: 0 none;
|
||||
}
|
||||
input[type=button], input[type=submit] {
|
||||
border-color: #bbb;
|
||||
color: #464646;
|
||||
display: inline-block;
|
||||
text-decoration: none;
|
||||
font-size: 12px;
|
||||
line-height: 15px;
|
||||
padding: 1px 0 0 0;
|
||||
cursor: pointer;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
-webkit-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
-webkit-box-sizing: content-box;
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
white-space: nowrap;
|
||||
border-color: #dfdfdf;
|
||||
background-color: #fff;
|
||||
color: #333;
|
||||
}
|
||||
input[type=button]:hover, input[type=submit]:hover {
|
||||
color: #000;
|
||||
border-color: #666;
|
||||
input[type="button"]:focus, input[type=submit] {
|
||||
border-color: #a1a1a1;
|
||||
-webkit-box-shadow: 1px 1px 2px rgba(0,0,0,0.1);
|
||||
box-shadow: 1px 1px 2px rgba(0,0,0,0.1);
|
||||
}
|
||||
input[type=button], input[type=submit] {
|
||||
text-decoration: none;
|
||||
font-size: 11px !important;
|
||||
line-height: 14px;
|
||||
padding: 2px 8px;
|
||||
cursor: pointer;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
-moz-border-radius: 11px;
|
||||
-khtml-border-radius: 11px;
|
||||
-webkit-border-radius: 11px;
|
||||
border-radius: 11px;
|
||||
-moz-box-sizing: content-box;
|
||||
-webkit-box-sizing: content-box;
|
||||
-khtml-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
padding: 2px 5px 1px 5px;
|
||||
background: #ececec;
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#eee));
|
||||
background-image: -webkit-linear-gradient(top, #fff, #eee);
|
||||
background-image: -moz-linear-gradient(top, #fff, #eee);
|
||||
background-image: -o-linear-gradient(top, #fff, #eee);
|
||||
background-image: linear-gradient(to bottom, #fff, #eee);
|
||||
border-color: #ccc;
|
||||
-webkit-box-shadow: inset 0 0 1px 1px rgba(255,255,255, 0.9);
|
||||
box-shadow: inset 0 0 1px 1px rgba(255,255,255, 0.9);
|
||||
color: #464646;
|
||||
text-shadow: 1px 1px 0 #fff;
|
||||
}
|
||||
input[type=button]:hover, input[type=submit]:hover,
|
||||
input[type=button]:focus, input[type=submit]:focus {
|
||||
background: #ececec;
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#eee));
|
||||
background-image: -webkit-linear-gradient(top, #fff, #eee);
|
||||
background-image: -moz-linear-gradient(top, #fff, #eee);
|
||||
background-image: -o-linear-gradient(top, #fff, #eee);
|
||||
background-image: linear-gradient(to bottom, #fff, #eee);
|
||||
border-color: #bbb;
|
||||
-webkit-box-shadow: 0px 1px 1px rgba(0,0,0,.1);
|
||||
box-shadow: 0px 1px 1px rgba(0,0,0,.1);
|
||||
color: #000;
|
||||
}
|
||||
input[type=button]:active, input[type=submit]:active {
|
||||
background: #eee;
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#f9f9f9));
|
||||
background-image: -webkit-linear-gradient(top, #eee, #f9f9f9);
|
||||
background-image: -moz-linear-gradient(top, #eee, #f9f9f9);
|
||||
background-image: -o-linear-gradient(top, #eee, #f9f9f9);
|
||||
background-image: linear-gradient(to bottom, #eee, #f9f9f9);
|
||||
border-color: #999 #ddd #ddd #999;
|
||||
color: #555;
|
||||
-webkit-box-shadow: inset 1px 1px 0 rgba(50,50,50,0.1);
|
||||
box-shadow: inset 1px 1px 0 rgba(50,50,50,0.1);
|
||||
}
|
||||
input[type=button]:focus, input[type=submit]:focus {
|
||||
border-color: #aaa;
|
||||
}
|
||||
input + label input, select + label input {
|
||||
margin-left: 4px;
|
||||
@@ -166,6 +260,11 @@ vertical-align: middle;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.js .column {
|
||||
position: relative;
|
||||
background: none;
|
||||
padding: 0;
|
||||
}
|
||||
.error {
|
||||
padding: 8px;
|
||||
color: red;
|
||||
@@ -190,17 +289,20 @@ color: red;
|
||||
.jush-sql {
|
||||
padding: 2px 4px;
|
||||
margin-right: 4px;
|
||||
outline: 1px #BBB dashed;
|
||||
font-size: 9pt;
|
||||
font-size: 11px;
|
||||
}
|
||||
.time {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
#content {
|
||||
margin: 2px 0 0 260px;
|
||||
margin: 2px 0 0 270px;
|
||||
padding: 10px 20px 20px 0;
|
||||
}
|
||||
#lang {
|
||||
#lang {
|
||||
font-size:10px;
|
||||
height: 23px;
|
||||
width: 250px;
|
||||
width: 255px;
|
||||
display: block;
|
||||
padding: 1px 0;
|
||||
position: absolute;
|
||||
@@ -212,7 +314,7 @@ border: 1px solid #E3E3E3;
|
||||
line-height: 1.25em;
|
||||
}
|
||||
#lang select {
|
||||
font-size: 8pt;
|
||||
font-size: 10px;
|
||||
}
|
||||
#breadcrumb {
|
||||
margin: 0;
|
||||
@@ -220,7 +322,7 @@ height: 21px;
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 260px;
|
||||
left: 270px;
|
||||
background-color: #f1f1f1;
|
||||
border: 1px solid #E3E3E3;
|
||||
padding: 2px 12px;
|
||||
@@ -230,7 +332,7 @@ position: absolute;
|
||||
margin: 0;
|
||||
top: 28px;
|
||||
left: 0;
|
||||
width: 250px;
|
||||
width: 255px;
|
||||
background-color: #f1f1f1;
|
||||
border: 1px solid #E3E3E3;
|
||||
}
|
||||
@@ -239,9 +341,11 @@ margin: 0;
|
||||
}
|
||||
#menu p {
|
||||
padding-left: 8px;
|
||||
font-size: 10pt;
|
||||
border-bottom: none;
|
||||
}
|
||||
#dbs {
|
||||
padding: 0 !important;
|
||||
}
|
||||
#menu form p {
|
||||
padding-left: 0;
|
||||
text-align: left;
|
||||
@@ -257,19 +361,15 @@ line-height: 35px;
|
||||
text-shadow: rgba(255,255,255,1) 0 1px 0px;
|
||||
background: none;
|
||||
}
|
||||
h1 {
|
||||
font-size: 12px;
|
||||
}
|
||||
h1 .h1 {
|
||||
font-size: 12px;
|
||||
}
|
||||
h2 {
|
||||
padding: 22px 0 0 10px;
|
||||
}
|
||||
h3 {
|
||||
margin: 40px 0 0;
|
||||
font-weight: 400;
|
||||
font-size: 130%;
|
||||
h3 {
|
||||
font: normal normal normal 18px/22px Georgia, "Times New Roman", "Bitstream Charter", Times, serif;
|
||||
margin: 20px 0 0 5px;
|
||||
}
|
||||
#schema {
|
||||
margin: 1.5em 0 0 220px;
|
||||
@@ -285,8 +385,11 @@ position: absolute;
|
||||
#schema .references {
|
||||
position: absolute;
|
||||
}
|
||||
.js div.hidden {
|
||||
display: inline;
|
||||
.js .hidden {
|
||||
display: hidden;
|
||||
}
|
||||
.js td.hidden, .js input.hidden {
|
||||
display: none;
|
||||
}
|
||||
legend a {
|
||||
color: #333;
|
||||
@@ -299,40 +402,27 @@ color: #333;
|
||||
code {
|
||||
background: transparent;
|
||||
}
|
||||
fieldset, legend, h2, table, .error, .message {
|
||||
-moz-border-radius: 5px;
|
||||
-khtml-border-radius: 5px;
|
||||
-webkit-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
fieldset, legend, table, thead, tbody, .error, .message {
|
||||
-moz-border-radius: 3px;
|
||||
-khtml-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
#breadcrumb, #lang, #menu {
|
||||
-moz-border-radius-bottomright: 5px;
|
||||
-khtml-border-bottom-right-radius: 5px;
|
||||
-webkit-border-bottom-right-radius: 5px;
|
||||
border-bottom-right-radius: 5px;
|
||||
-moz-border-radius-bottomright: 3px;
|
||||
-khtml-border-bottom-right-radius: 3px;
|
||||
-webkit-border-bottom-right-radius: 3px;
|
||||
border-bottom-right-radius: 3px;
|
||||
}
|
||||
#breadcrumb {
|
||||
-moz-border-radius-bottomleft: 5px;
|
||||
-khtml-border-bottom-left-radius: 5px;
|
||||
-webkit-border-bottom-left-radius: 5px;
|
||||
border-bottom-left-radius: 5px;
|
||||
-moz-border-radius-bottomleft: 3px;
|
||||
-khtml-border-bottom-left-radius: 3px;
|
||||
-webkit-border-bottom-left-radius: 3px;
|
||||
border-bottom-left-radius: 3px;
|
||||
}
|
||||
#menu {
|
||||
-moz-border-radius-topright: 5px;
|
||||
-khtml-border-top-right-radius: 5px;
|
||||
-webkit-border-top-right-radius: 5px;
|
||||
border-bottom-top-radius: 5px;
|
||||
}
|
||||
.js .column {
|
||||
background: #DFDFDF;
|
||||
}
|
||||
#logout {
|
||||
color: #21759B;
|
||||
}
|
||||
#logout:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
#logins a, #tables a {
|
||||
background: #F1F1F1;
|
||||
line-height: 1.5em;
|
||||
}
|
||||
-khtml-border-top-right-radius: 3px;
|
||||
-webkit-border-top-right-radius: 3px;
|
||||
border-top-right-radius: 3px;
|
||||
}
|
664
designs/pepa-linha/adminer.css
Normal file
664
designs/pepa-linha/adminer.css
Normal file
@@ -0,0 +1,664 @@
|
||||
/*
|
||||
* Theme by Pepa Linha [http://webdream.cz]
|
||||
* JUSH color syntax inspired by NetBeans
|
||||
* @version 0.2 (February 2014)
|
||||
*/
|
||||
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: "Segoe UI", Arial, sans-serif;
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: none;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
h2 {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: none;
|
||||
border: 0;
|
||||
font-family: "Segoe UI Light", "Segoe UI", Arial, sans-serif;
|
||||
font-size: 32px;
|
||||
font-weight: normal;
|
||||
color: #34567c;
|
||||
border-bottom: 1px solid #ebebeb;
|
||||
padding-bottom: 6px;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.rtl h2 {
|
||||
margin: 0;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 22px;
|
||||
margin: 0 0 10px;
|
||||
border-bottom: 1px solid #ebebeb;
|
||||
padding: 0;
|
||||
padding-bottom: 6px;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 0;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
a {
|
||||
color:#2e84e4;
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: #34567c;
|
||||
}
|
||||
|
||||
a:link:hover,
|
||||
a:visited:hover {
|
||||
color: #2e84e4;
|
||||
text-decoration:underline;
|
||||
}
|
||||
|
||||
/* otravuje pri prochazeni formulare klavesama */
|
||||
a[href*=charsets] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
table {
|
||||
border: 0;
|
||||
margin: 0;
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
th, td {
|
||||
border: 0;
|
||||
padding: 6px;
|
||||
}
|
||||
|
||||
th {
|
||||
background: none;
|
||||
color: #34567c;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
tbody tr:hover td,
|
||||
tbody tr:hover th {
|
||||
background: none;
|
||||
}
|
||||
|
||||
table:not(.checkable) th {
|
||||
min-width: 120px;
|
||||
}
|
||||
|
||||
thead td,
|
||||
thead th {
|
||||
background: #34567c;
|
||||
}
|
||||
|
||||
thead td,
|
||||
thead td a,
|
||||
thead td a:link:hover,
|
||||
thead td a:visited,
|
||||
thead td a:visited:hover,
|
||||
thead th,
|
||||
thead th a,
|
||||
thead th a:link:hover,
|
||||
thead th a:visited,
|
||||
thead th a:visited:hover {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
table.checkable,
|
||||
p.links + table,
|
||||
pre + table,
|
||||
#edit-fields,
|
||||
p + table,
|
||||
h3 + table {
|
||||
border: 1px solid #bbb;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
table.checkable tbody tr:hover td,
|
||||
table.checkable tbody tr:hover th {
|
||||
background: #ffffd9;
|
||||
}
|
||||
|
||||
.js .checkable .checked td,
|
||||
.js .checkable .checked th {
|
||||
background: #fbfabc;
|
||||
}
|
||||
|
||||
.js .checkable thead .checked td,
|
||||
.js .checkable thead .checked th {
|
||||
background: #bfb008;
|
||||
}
|
||||
|
||||
.odd th,
|
||||
.odd td {
|
||||
background: #f5f5f5;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
display: inline-block;
|
||||
padding: 15px;
|
||||
padding-top: 5px;
|
||||
margin: 0 0 15px;
|
||||
border: 0;
|
||||
background: #f5f5f5;
|
||||
}
|
||||
|
||||
fieldset select {
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
fieldset input[type=button],
|
||||
fieldset input[type=submit],
|
||||
fieldset p {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
fieldset div p {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
legend {
|
||||
display: inline-block;
|
||||
padding: 6px 15px;
|
||||
margin: 0 0 0 -15px;
|
||||
background: #f5f5f5;
|
||||
font-family: "Segoe UI Semibold", "Segoe UI", Arial, sans-serif;
|
||||
}
|
||||
|
||||
legend a,
|
||||
legend a:link:hover {
|
||||
color: #000;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
code {
|
||||
background: none;
|
||||
}
|
||||
|
||||
p code,
|
||||
pre code,
|
||||
pre[contenteditable=true] {
|
||||
padding: 10px 15px;
|
||||
display: block;
|
||||
font-size: 17px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
p code + a,
|
||||
p code + a:link:hover,
|
||||
p code + a:visited:hover {
|
||||
margin-left: 15px;
|
||||
position: relative;
|
||||
top: -20px;
|
||||
color: #000;
|
||||
font-size: 12px;
|
||||
text-decoration: underline;
|
||||
text-transform: lowercase;
|
||||
}
|
||||
|
||||
#content {
|
||||
margin: 0;
|
||||
margin-left: 400px;
|
||||
margin-right: 54px;
|
||||
padding: 0;
|
||||
padding-top: 50px;
|
||||
}
|
||||
|
||||
#content > p {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.rtl #content {
|
||||
margin: 0;
|
||||
margin-left: 54px;
|
||||
margin-right: 400px;
|
||||
padding: 0;
|
||||
padding-top: 50px;
|
||||
}
|
||||
|
||||
#menu {
|
||||
width: 347px;
|
||||
border-right: 1px solid #dae8fa;
|
||||
box-shadow: inset -1px 0 0 #fff;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
top: 0;
|
||||
background: #f4f8fd;
|
||||
bottom: 0;
|
||||
position: fixed;
|
||||
padding: 0 15px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
#menu h1 {
|
||||
background: none left top no-repeat;
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD0AAAAyCAIAAABgVkRrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTA0RDI5NkM5QkRGMTFFMzg4ODNEQjEzNjY5NzJEMEEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTA0RDI5NkQ5QkRGMTFFMzg4ODNEQjEzNjY5NzJEMEEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MDREMjk2QTlCREYxMUUzODg4M0RCMTM2Njk3MkQwQSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1MDREMjk2QjlCREYxMUUzODg4M0RCMTM2Njk3MkQwQSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PnG4emkAAASXSURBVHja7Fk9aNtAFL6EDKKUoqGDySRKB1FC8dDBdCgeOmQoIUMG0yGE0EFT8dDBUwidPJQQQgcNpYROGjKI0sFDB9GhaMhgSgcPpWgqHjqYYsINJfQ7PfV0tmX9JI4Sgx+HI8f26bt3733fe6elIf/LbqwdHbJWS1wYBrMstrXJVg36ZJnNhQWBWMB9k+215gq3tDeHBH3pRseJtC8ee2ezEzd62+ncDH/DhS+ttC88qbMPDntaj952uyvXD3q7ETvyyE77pq5HFz9614r7V8C2GnBezBgp9tGNl3ffzIjvwZ9B//dA7Mz3YPLTyl29UhE+MI0KW9YKh2yjwQZichEAjsNu6WlUqNqkvwHUO+0BJeD2gn4hJFXTwAIw6jUzYxlwHkCTvWqy1+0Ct7FtsPh/3Ofc9brOJ5+8ezHr9gKMcGpWf2SK8bhKk48sA1kIOiODmzc2c8U0DLrzwhI5ypjA3fsZtNrOgPP4y5pmGJXamqHd1kQMTIkENYpwEfQHEW7GsGkYZse393ewb+Y9IwE0PJcOejQ2pFgK3Li3BI14hZM269XKaiXPVPodHUOs6l48o/+t5wO038OcQGztHzd31uPfUEgQdCQi3JkfumLLHa9LoK2tunPQtJ6v5wQ9zWoPzebupms34QKxmZNJAugIDzJE+V4rbTrDSMYtr3AD+H5WFIfZ0lIFPu50otiF7zfW2dlgquKccTFWRxYQ8wlFJOVTdc2gAChq/V99vxdgD7O5CIBO/Yi/P3vsUY2dOOxBdSrzIBm2dxJwq+hlaiId9dua5OlEv/IhH0vKvAYXfvUjvUTFB2STeinJu91Oxo3Eh58onwRXcB7zWkGj/Maa9203+9soPIyWEKBEkQdc8veo+sS4wQkYzV1Bi+A1Ee5DnhO33BxsSw1/wszGPHkXmqI7yIQzPvnvhPqEFjAWtSq7j7n2YplwSctVV8F/FXazbN76nQXu68btfe3Odmqwahl5Ca6tel0UVdnVc6pRBX/JkrgYn0RCY0cdAMhYvGYxHbEklbJ++FoqD8LTUiwTlZLEha55WKOmSybWTCXD1eJG8dnc4XAYqmdgmoRFyp/ZqqHbgMiD8qGXZeAOs1RD9YyhBgBVTgL3cMTHwKd2xyUL50qmTI5p/oK/F7jnEjeycLZTFz02SrKlaSPGbe0fOx+9mbTGcMHhe/fwuFMGn4Dy7BMPA3oBGkZrbIDgcp9JgK37YYtZjmSuqApH9yPRcTp+TM939THOpkaYroMguRuSE14tbuegif11vS58poYm7i1vn6fdxF6hMoNk4leIvTJ0B1FhPQ/PxM45eZ2HGjkY8jHXqptghGJJqqmKVHn1oCr4k93xgr8XuOcZ9zmf7dQym68Et6QFcFaBk7EsQ5fdfuteHW7xPM3asyVh05EkxFJITMHuGDUCukxwvOz3YI31mtWoX7TRXkrDjQhBLeFOHBtQQ6n/f8TDlAd/6mNBP7xO7Ecbz2qNjfrl6qoU3Mr5Qa4j9yyLHqZd7jwjL241QQFdPiJTdT7RsBuapslzi5mqVSHcKXYetcZlSelU3P8EGADW25uhkIE0mQAAAABJRU5ErkJggg==);
|
||||
line-height: 50px;
|
||||
padding-left: 50px;
|
||||
padding-top: 9px;
|
||||
text-transform: lowercase;
|
||||
margin: 25px 0 10px 16px;
|
||||
}
|
||||
|
||||
#menu h1 a {
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
#menu h1 .version {
|
||||
color: #2e84e4;
|
||||
}
|
||||
|
||||
#menu a {
|
||||
color: #34567c;
|
||||
}
|
||||
|
||||
#menu p {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#menu #dbs {
|
||||
background: #fff;
|
||||
padding: 0 15px 15px;
|
||||
border: 1px solid #dae8fa;
|
||||
border-bottom: 0;
|
||||
box-sizing: border-box;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
#menu #dbs select {
|
||||
outline: 0;
|
||||
border-color: rgba(0, 0, 0, 0.1);
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#menu p.links {
|
||||
margin: 0 0 15px;
|
||||
border: 1px solid #dae8fa;
|
||||
border-top: 0;
|
||||
text-align: center;
|
||||
display: table;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
#menu p.links a {
|
||||
padding: 8px;
|
||||
margin: 0;
|
||||
display: table-cell;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
#menu p.links a:hover {
|
||||
color: #2e84e4;
|
||||
}
|
||||
|
||||
#menu p.links a.active {
|
||||
font-weight: normal;
|
||||
background: #fff;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
#content p.links {
|
||||
margin: -10px 0 15px;
|
||||
}
|
||||
|
||||
#content p.links a {
|
||||
padding: 8px;
|
||||
margin: 0;
|
||||
display: table-cell;
|
||||
border: 1px solid #fff;
|
||||
}
|
||||
|
||||
#content p.links a,
|
||||
#content p.links a:visited,
|
||||
#content p.links a:hover {
|
||||
color: #2e84e4;
|
||||
}
|
||||
|
||||
#content p.links a.active {
|
||||
font-weight: normal;
|
||||
border: 1px solid #2e84e4;
|
||||
background: #f4f8fd;
|
||||
}
|
||||
|
||||
#tables {
|
||||
max-height: 100%;
|
||||
margin: 0 -15px !important;
|
||||
position: absolute;
|
||||
left: 15px;
|
||||
right: 15px;
|
||||
bottom: 0;
|
||||
top: 220px;o
|
||||
overflow: hidden !important;
|
||||
overflow-y: auto !important;
|
||||
}
|
||||
|
||||
.rtl #tables {
|
||||
overflow: hidden !important;
|
||||
overflow-y: auto !important;
|
||||
}
|
||||
|
||||
#tables a {
|
||||
float: right;
|
||||
padding: 6px 15px;
|
||||
}
|
||||
|
||||
.rtl #tables a {
|
||||
float: none;
|
||||
}
|
||||
|
||||
#tables a[title] {
|
||||
float: none;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.rtl #tables a:first-child,
|
||||
.rtl #tables br + a {
|
||||
float: left;
|
||||
display: block;
|
||||
margin-left: 15px;
|
||||
}
|
||||
|
||||
#tables a:hover,
|
||||
#tables a:hover + a,
|
||||
#tables a.active,
|
||||
#tables a.active + a {
|
||||
background: #fff;
|
||||
color: #2e84e4;
|
||||
}
|
||||
|
||||
#tables br {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.js .column {
|
||||
background: #2e84e4;
|
||||
}
|
||||
|
||||
.js .checked .column {
|
||||
background: #7b7105;
|
||||
}
|
||||
|
||||
.pages {
|
||||
left: 400px;
|
||||
background: #34567c;
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
border: 0;
|
||||
display: inline-block;
|
||||
position: static;
|
||||
}
|
||||
|
||||
.pages a,
|
||||
.pages a:link,
|
||||
.pages a:link:hover,
|
||||
.pages a:visited,
|
||||
.pages a:visited:hover {
|
||||
color: #fff;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
#breadcrumb {
|
||||
margin: 0;
|
||||
left: 400px;
|
||||
background: none;
|
||||
padding: 0;
|
||||
padding-top: 25px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
#breadcrumb a {
|
||||
color: #aeaeae;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
#breadcrumb,
|
||||
#breadcrumb a:hover {
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.rtl #breadcrumb {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
padding-top: 25px;
|
||||
right: 400px;
|
||||
}
|
||||
|
||||
.logout,
|
||||
.rtl .logout {
|
||||
top: 30px;
|
||||
right: 54px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.rtl .logout {
|
||||
right: auto;
|
||||
left: 54px;
|
||||
}
|
||||
|
||||
input:not([type]),
|
||||
input[type="color"],
|
||||
input[type="email"],
|
||||
input[type="number"],
|
||||
input[type="password"],
|
||||
input[type="tel"],
|
||||
input[type="url"],
|
||||
input[type="text"],
|
||||
input[type="search"] {
|
||||
border: 1px solid #bbbbbb;
|
||||
padding: 6px;
|
||||
margin: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
table:not(#table) input:not([type]),
|
||||
table:not(#table) input[type="color"],
|
||||
table:not(#table) input[type="email"],
|
||||
table:not(#table) input[type="number"],
|
||||
table:not(#table) input[type="password"],
|
||||
table:not(#table) input[type="tel"],
|
||||
table:not(#table) input[type="url"],
|
||||
table:not(#table) input[type="text"],
|
||||
table:not(#table) input[type="search"] {
|
||||
min-width: 280px;
|
||||
}
|
||||
|
||||
input[type=submit],
|
||||
input[type=button] {
|
||||
border: 0;
|
||||
padding: 7px 12px;
|
||||
cursor: pointer;
|
||||
outline: 0;
|
||||
box-shadow: none;
|
||||
background: #2e84e4;
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
margin-bottom: 5px;
|
||||
transition: background .4s ease;
|
||||
}
|
||||
|
||||
input[type=submit][disabled],
|
||||
input[type=button][disabled] {
|
||||
background: #aeaeae !important;
|
||||
color: #e9e9e9;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
input[type=submit]:hover,
|
||||
input[type=button]:hover,
|
||||
input[type=submit]:focus,
|
||||
input[type=button]:focus {
|
||||
background: #34567c;
|
||||
}
|
||||
|
||||
.logout input[type=submit] {
|
||||
background: #f40204;
|
||||
}
|
||||
|
||||
.logout input[type=submit]:hover {
|
||||
background: #d50204;
|
||||
}
|
||||
|
||||
input.default,
|
||||
input.default {
|
||||
box-shadow: none;
|
||||
background: #2e84e4;
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
select {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 6px 0;
|
||||
border: 1px solid #bbbbbb;
|
||||
}
|
||||
|
||||
label {
|
||||
cursor: pointer;
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
.error,
|
||||
.message {
|
||||
margin: 0;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
#logins a,
|
||||
#tables a,
|
||||
#tables span {
|
||||
background: none;
|
||||
}
|
||||
|
||||
#form > p {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
#schema .table {
|
||||
padding: 6px;
|
||||
}
|
||||
|
||||
#schema .table a {
|
||||
display: block;
|
||||
margin: -6px;
|
||||
margin-bottom: 6px;
|
||||
padding: 6px;
|
||||
color: #fff;
|
||||
background: #34567c;
|
||||
}
|
||||
|
||||
#schema .table br {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#schema .table span {
|
||||
display: block;
|
||||
margin-bottom: 1px solid #f5f5f5;
|
||||
}
|
||||
|
||||
#lang {
|
||||
position: fixed;
|
||||
top: 55px;
|
||||
right: 100%;
|
||||
z-index: 10;
|
||||
margin-right: -331px;
|
||||
line-height: normal;
|
||||
padding: 0;
|
||||
left: auto;
|
||||
font-size: 0;
|
||||
}
|
||||
|
||||
#lang select {
|
||||
font-size: 12px;
|
||||
padding: 0;
|
||||
text-align: right;
|
||||
border: 0;
|
||||
background: none;
|
||||
-webkit-appearance: none;
|
||||
-moz-appearance: none;
|
||||
appearance: none;
|
||||
cursor: pointer;
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
#lang select option {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.rtl #lang {
|
||||
margin-right: 0;
|
||||
left: 100%;
|
||||
margin-left: -261px;
|
||||
right: auto;
|
||||
}
|
||||
|
||||
.jush {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.jush a {
|
||||
color: #3939f2;
|
||||
}
|
||||
|
||||
.jush-sql a,
|
||||
.jush-sql_code a,
|
||||
.jush-sqlite a,
|
||||
.jush-pgsql a,
|
||||
.jush-mssql a,
|
||||
.jush-oracle a,
|
||||
.jush-simpledb a {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.jush-bac,
|
||||
.jush-php_bac,
|
||||
.jush-bra,
|
||||
.jush-mssql_bra,
|
||||
.jush-sqlite_quo {
|
||||
color: #009900;
|
||||
}
|
||||
|
||||
.jush-php_quo,
|
||||
.jush-quo,
|
||||
.jush-quo_one,
|
||||
.jush-php_eot,
|
||||
.jush-apo,
|
||||
.jush-sql_apo,
|
||||
.jush-sqlite_apo,
|
||||
.jush-sql_quo,
|
||||
.jush-sql_eot {
|
||||
color: #ce7b00;
|
||||
}
|
||||
|
||||
.jush-num,
|
||||
.jush-clr {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
@media print {
|
||||
.logout {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#breadcrumb {
|
||||
position: static;
|
||||
}
|
||||
|
||||
#content {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
@@ -15,7 +15,7 @@ if ($adminer->homepage()) {
|
||||
if (isset($row["Engine"]) && $name != "") {
|
||||
echo '<tr' . odd() . '><td>' . checkbox("tables[]", $table, in_array($table, (array) $_POST["tables"], true), "", "formUncheck('check-all');");
|
||||
echo "<th><a href='" . h(ME) . 'select=' . urlencode($table) . "'>$name</a>";
|
||||
$val = number_format($row["Rows"], 0, '.', lang(','));
|
||||
$val = format_number($row["Rows"]);
|
||||
echo "<td align='right'><a href='" . h(ME . "edit=") . urlencode($table) . "'>" . ($row["Engine"] == "InnoDB" && $val ? "~ $val" : $val) . "</a>";
|
||||
}
|
||||
}
|
||||
|
@@ -17,6 +17,10 @@ class Adminer {
|
||||
return password_file($create);
|
||||
}
|
||||
|
||||
function bruteForceKey() {
|
||||
return $_SERVER["REMOTE_ADDR"];
|
||||
}
|
||||
|
||||
function database() {
|
||||
global $connection;
|
||||
if ($connection) {
|
||||
@@ -128,8 +132,8 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
}
|
||||
}
|
||||
|
||||
function selectQuery($query) {
|
||||
return "<!--\n" . str_replace("--", "--><!-- ", $query) . "\n-->\n";
|
||||
function selectQuery($query, $time) {
|
||||
return "<!--\n" . str_replace("--", "--><!-- ", $query) . "\n($time)\n-->\n";
|
||||
}
|
||||
|
||||
function rowDescription($table) {
|
||||
@@ -183,7 +187,7 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
$return = ($val ? lang('yes') : lang('no'));
|
||||
}
|
||||
if ($link) {
|
||||
$return = "<a href='$link'>$return</a>";
|
||||
$return = "<a href='$link'" . (is_url($link) ? " rel='noreferrer'" : "") . ">$return</a>";
|
||||
}
|
||||
if (!$link && !like_bool($field) && preg_match('~int|float|double|decimal~', $field["type"])) {
|
||||
$return = "<div class='number'>$return</div>"; // Firefox doesn't support <colgroup>
|
||||
@@ -425,8 +429,8 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
return "";
|
||||
}
|
||||
|
||||
function messageQuery($query) {
|
||||
return " <span class='time'>" . @date("H:i:s") . "</span><!--\n" . str_replace("--", "--><!-- ", $query) . "\n-->";
|
||||
function messageQuery($query, $time) {
|
||||
return " <span class='time'>" . @date("H:i:s") . "</span><!--\n" . str_replace("--", "--><!-- ", $query) . "\n" . ($time ? "($time)\n" : "") . "-->";
|
||||
}
|
||||
|
||||
function editFunctions($field) {
|
||||
|
@@ -1,8 +1,5 @@
|
||||
// Editor specific functions
|
||||
|
||||
function bodyLoad(version) {
|
||||
}
|
||||
|
||||
function selectFieldChange(form) {
|
||||
}
|
||||
|
||||
|
1
externals/jquery-timepicker
vendored
1
externals/jquery-timepicker
vendored
Submodule externals/jquery-timepicker deleted from ec1a143b5c
1
externals/jquery-ui
vendored
1
externals/jquery-ui
vendored
Submodule externals/jquery-ui deleted from c44818fcca
2
externals/jush
vendored
2
externals/jush
vendored
Submodule externals/jush updated: 2ab6fef7b4...f1aba878f0
1
externals/tinymce
vendored
1
externals/tinymce
vendored
Submodule externals/tinymce deleted from 00968708de
@@ -30,7 +30,7 @@ class AdminerMasterSlave {
|
||||
}
|
||||
}
|
||||
|
||||
function messageQuery($query) {
|
||||
function messageQuery($query, $time) {
|
||||
//! doesn't work with sql.inc.php
|
||||
$connection = connection();
|
||||
$result = $connection->query('SHOW MASTER STATUS');
|
||||
|
@@ -1,39 +0,0 @@
|
||||
<?php
|
||||
|
||||
/** Store password's SHA1 to session
|
||||
* @link http://www.adminer.org/plugins/#use
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
*/
|
||||
class AdminerPasswordSha1 {
|
||||
/** @access protected */
|
||||
var $login, $passwordSha1, $credentials;
|
||||
|
||||
/**
|
||||
* @param string
|
||||
* @param string
|
||||
* @param array returned by credentials()
|
||||
*/
|
||||
function AdminerPasswordSha1($login, $passwordSha1, $credentials) {
|
||||
$this->login = $login;
|
||||
$this->passwordSha1 = $passwordSha1;
|
||||
$this->credentials = $credentials;
|
||||
if (isset($_POST["auth"])) {
|
||||
$_POST["auth"]["password"] = sha1($_POST["auth"]["password"]);
|
||||
}
|
||||
}
|
||||
|
||||
function login($login, $password) {
|
||||
return ($login == $this->login && $password == $this->passwordSha1);
|
||||
}
|
||||
|
||||
function credentials() {
|
||||
return $this->credentials;
|
||||
}
|
||||
|
||||
function permanentLogin() {
|
||||
//! should save original $_POST["auth"]["password"] and hash after load
|
||||
}
|
||||
|
||||
}
|
@@ -17,7 +17,7 @@ class AdminerSqlLog {
|
||||
$this->filename = $filename;
|
||||
}
|
||||
|
||||
function messageQuery($query) {
|
||||
function messageQuery($query, $time) {
|
||||
if ($this->filename == "") {
|
||||
$adminer = adminer();
|
||||
$this->filename = $adminer->database() . ".sql"; // no database goes to ".sql" to avoid collisions
|
||||
|
Reference in New Issue
Block a user