Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d812af573e |
11
.gitmodules
vendored
@@ -1,6 +1,15 @@
|
|||||||
[submodule "jush"]
|
[submodule "jush"]
|
||||||
path = externals/jush
|
path = externals/jush
|
||||||
url = git://git.code.sf.net/p/jush/git
|
url = git://jush.git.sourceforge.net/gitroot/jush/jush
|
||||||
|
[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"]
|
[submodule "wymeditor"]
|
||||||
path = externals/wymeditor
|
path = externals/wymeditor
|
||||||
url = git://github.com/wymeditor/wymeditor.git
|
url = git://github.com/wymeditor/wymeditor.git
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
$TABLE = $_GET["create"];
|
$TABLE = $_GET["create"];
|
||||||
$partition_by = array();
|
$partition_by = array('HASH', 'LINEAR HASH', 'KEY', 'LINEAR KEY', 'RANGE', 'LIST');
|
||||||
foreach (array('HASH', 'LINEAR HASH', 'KEY', 'LINEAR KEY', 'RANGE', 'LIST') as $key) {
|
|
||||||
$partition_by[$key] = $key;
|
|
||||||
}
|
|
||||||
|
|
||||||
$referencable_primary = referencable_primary($TABLE);
|
$referencable_primary = referencable_primary($TABLE);
|
||||||
$foreign_keys = array();
|
$foreign_keys = array();
|
||||||
@@ -12,13 +9,10 @@ foreach ($referencable_primary as $table_name => $field) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$orig_fields = array();
|
$orig_fields = array();
|
||||||
$table_status = array();
|
$orig_status = array();
|
||||||
if ($TABLE != "") {
|
if ($TABLE != "") {
|
||||||
$orig_fields = fields($TABLE);
|
$orig_fields = fields($TABLE);
|
||||||
$table_status = table_status($TABLE);
|
$orig_status = table_status($TABLE);
|
||||||
if (!$table_status) {
|
|
||||||
$error = lang('No tables.');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$row = $_POST;
|
$row = $_POST;
|
||||||
@@ -29,7 +23,7 @@ if ($row["auto_increment_col"]) {
|
|||||||
|
|
||||||
if ($_POST && !process_fields($row["fields"]) && !$error) {
|
if ($_POST && !process_fields($row["fields"]) && !$error) {
|
||||||
if ($_POST["drop"]) {
|
if ($_POST["drop"]) {
|
||||||
queries_redirect(substr(ME, 0, -1), lang('Table has been dropped.'), drop_tables(array($TABLE)));
|
query_redirect("DROP TABLE " . table($TABLE), substr(ME, 0, -1), lang('Table has been dropped.'));
|
||||||
} else {
|
} else {
|
||||||
$fields = array();
|
$fields = array();
|
||||||
$all_fields = array();
|
$all_fields = array();
|
||||||
@@ -58,12 +52,7 @@ if ($_POST && !process_fields($row["fields"]) && !$error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($foreign_key !== null) {
|
if ($foreign_key !== null) {
|
||||||
$foreign[idf_escape($field["field"])] = ($TABLE != "" && $jush != "sqlite" ? "ADD" : " ") . format_foreign_key(array(
|
$foreign[idf_escape($field["field"])] = ($TABLE != "" && $jush != "sqlite" ? "ADD" : " ") . " FOREIGN KEY (" . idf_escape($field["field"]) . ") REFERENCES " . table($foreign_keys[$field["type"]]) . " (" . idf_escape($type_field["field"]) . ")" . (ereg("^($on_actions)\$", $field["on_delete"]) ? " ON DELETE $field[on_delete]" : "");
|
||||||
'table' => $foreign_keys[$field["type"]],
|
|
||||||
'source' => array($field["field"]),
|
|
||||||
'target' => array($type_field["field"]),
|
|
||||||
'on_delete' => $field["on_delete"],
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
$after = " AFTER " . idf_escape($field["field"]);
|
$after = " AFTER " . idf_escape($field["field"]);
|
||||||
} elseif ($field["orig"] != "") {
|
} elseif ($field["orig"] != "") {
|
||||||
@@ -79,7 +68,7 @@ if ($_POST && !process_fields($row["fields"]) && !$error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$partitioning = "";
|
$partitioning = "";
|
||||||
if ($partition_by[$row["partition_by"]]) {
|
if (in_array($row["partition_by"], $partition_by)) {
|
||||||
$partitions = array();
|
$partitions = array();
|
||||||
if ($row["partition_by"] == 'RANGE' || $row["partition_by"] == 'LIST') {
|
if ($row["partition_by"] == 'RANGE' || $row["partition_by"] == 'LIST') {
|
||||||
foreach (array_filter($row["partition_names"]) as $key => $val) {
|
foreach (array_filter($row["partition_names"]) as $key => $val) {
|
||||||
@@ -91,7 +80,7 @@ if ($_POST && !process_fields($row["fields"]) && !$error) {
|
|||||||
? " (" . implode(",", $partitions) . "\n)"
|
? " (" . implode(",", $partitions) . "\n)"
|
||||||
: ($row["partitions"] ? " PARTITIONS " . (+$row["partitions"]) : "")
|
: ($row["partitions"] ? " PARTITIONS " . (+$row["partitions"]) : "")
|
||||||
);
|
);
|
||||||
} elseif (support("partitioning") && preg_match("~partitioned~", $table_status["Create_options"])) {
|
} elseif (support("partitioning") && ereg("partitioned", $orig_status["Create_options"])) {
|
||||||
$partitioning .= "\nREMOVE PARTITIONING";
|
$partitioning .= "\nREMOVE PARTITIONING";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,21 +91,21 @@ if ($_POST && !process_fields($row["fields"]) && !$error) {
|
|||||||
}
|
}
|
||||||
$name = trim($row["name"]);
|
$name = trim($row["name"]);
|
||||||
|
|
||||||
queries_redirect(ME . (support("table") ? "table=" : "select=") . urlencode($name), $message, alter_table(
|
queries_redirect(ME . "table=" . urlencode($name), $message, alter_table(
|
||||||
$TABLE,
|
$TABLE,
|
||||||
$name,
|
$name,
|
||||||
($jush == "sqlite" && ($use_all_fields || $foreign) ? $all_fields : $fields),
|
($jush == "sqlite" && ($use_all_fields || $foreign) ? $all_fields : $fields),
|
||||||
$foreign,
|
$foreign,
|
||||||
$row["Comment"],
|
$row["Comment"],
|
||||||
($row["Engine"] && $row["Engine"] != $table_status["Engine"] ? $row["Engine"] : ""),
|
($row["Engine"] && $row["Engine"] != $orig_status["Engine"] ? $row["Engine"] : ""),
|
||||||
($row["Collation"] && $row["Collation"] != $table_status["Collation"] ? $row["Collation"] : ""),
|
($row["Collation"] && $row["Collation"] != $orig_status["Collation"] ? $row["Collation"] : ""),
|
||||||
($row["Auto_increment"] != "" ? +$row["Auto_increment"] : ""),
|
($row["Auto_increment"] != "" ? +$row["Auto_increment"] : ""),
|
||||||
$partitioning
|
$partitioning
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
page_header(($TABLE != "" ? lang('Alter table') : lang('Create table')), $error, array("table" => $TABLE), h($TABLE));
|
page_header(($TABLE != "" ? lang('Alter table') : lang('Create table')), $error, array("table" => $TABLE), $TABLE);
|
||||||
|
|
||||||
if (!$_POST) {
|
if (!$_POST) {
|
||||||
$row = array(
|
$row = array(
|
||||||
@@ -126,7 +115,7 @@ if (!$_POST) {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if ($TABLE != "") {
|
if ($TABLE != "") {
|
||||||
$row = $table_status;
|
$row = $orig_status;
|
||||||
$row["name"] = $TABLE;
|
$row["name"] = $TABLE;
|
||||||
$row["fields"] = array();
|
$row["fields"] = array();
|
||||||
if (!$_GET["auto_increment"]) { // don't prefill by original Auto_increment for the sake of performance and not reusing deleted ids
|
if (!$_GET["auto_increment"]) { // don't prefill by original Auto_increment for the sake of performance and not reusing deleted ids
|
||||||
@@ -162,15 +151,11 @@ foreach ($engines as $engine) {
|
|||||||
|
|
||||||
<form action="" method="post" id="form">
|
<form action="" method="post" id="form">
|
||||||
<p>
|
<p>
|
||||||
<?php if (support("columns") || $TABLE == "") { ?>
|
|
||||||
<?php echo lang('Table name'); ?>: <input name="name" maxlength="64" value="<?php echo h($row["name"]); ?>" autocapitalize="off">
|
<?php echo lang('Table name'); ?>: <input name="name" maxlength="64" value="<?php echo h($row["name"]); ?>" autocapitalize="off">
|
||||||
<?php if ($TABLE == "" && !$_POST) { ?><script type='text/javascript'>focus(document.getElementById('form')['name']);</script><?php } ?>
|
<?php if ($TABLE == "" && !$_POST) { ?><script type='text/javascript'>focus(document.getElementById('form')['name']);</script><?php } ?>
|
||||||
<?php echo ($engines ? "<select name='Engine' onchange='helpClose();'" . on_help("getTarget(event).value", 1) . ">" . optionlist(array("" => "(" . lang('engine') . ")") + $engines, $row["Engine"]) . "</select>" : ""); ?>
|
<?php echo ($engines ? html_select("Engine", array("" => "(" . lang('engine') . ")") + $engines, $row["Engine"]) : ""); ?>
|
||||||
<?php echo ($collations && !preg_match("~sqlite|mssql~", $jush) ? html_select("Collation", array("" => "(" . lang('collation') . ")") + $collations, $row["Collation"]) : ""); ?>
|
<?php echo ($collations && !ereg("sqlite|mssql", $jush) ? html_select("Collation", array("" => "(" . lang('collation') . ")") + $collations, $row["Collation"]) : ""); ?>
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||||
<?php } ?>
|
|
||||||
|
|
||||||
<?php if (support("columns")) { ?>
|
|
||||||
<table cellspacing="0" id="edit-fields" class="nowrap">
|
<table cellspacing="0" id="edit-fields" class="nowrap">
|
||||||
<?php
|
<?php
|
||||||
$comments = ($_POST ? $_POST["comments"] : $row["Comment"] != "");
|
$comments = ($_POST ? $_POST["comments"] : $row["Comment"] != "");
|
||||||
@@ -196,18 +181,16 @@ edit_fields($row["fields"], $collations, "TABLE", $foreign_keys, $comments);
|
|||||||
; ?>
|
; ?>
|
||||||
<p>
|
<p>
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||||
<?php } ?>
|
<?php if ($_GET["create"] != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo confirm(); ?>><?php } ?>
|
||||||
|
|
||||||
<?php if ($TABLE != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo confirm(); ?>><?php } ?>
|
|
||||||
<?php
|
<?php
|
||||||
if (support("partitioning")) {
|
if (support("partitioning")) {
|
||||||
$partition_table = preg_match('~RANGE|LIST~', $row["partition_by"]);
|
$partition_table = ereg('RANGE|LIST', $row["partition_by"]);
|
||||||
print_fieldset("partition", lang('Partition by'), $row["partition_by"]);
|
print_fieldset("partition", lang('Partition by'), $row["partition_by"]);
|
||||||
?>
|
?>
|
||||||
<p>
|
<p>
|
||||||
<?php echo "<select name='partition_by' onchange='partitionByChange(this);'" . on_help("getTarget(event).value.replace(/./, 'PARTITION BY \$&')", 1) . ">" . optionlist(array("" => "") + $partition_by, $row["partition_by"]) . "</select>"; ?>
|
<?php echo html_select("partition_by", array(-1 => "") + $partition_by, $row["partition_by"], "partitionByChange(this);"); ?>
|
||||||
(<input name="partition" value="<?php echo h($row["partition"]); ?>">)
|
(<input name="partition" value="<?php echo h($row["partition"]); ?>">)
|
||||||
<?php echo lang('Partitions'); ?>: <input type="number" name="partitions" class="size<?php echo ($partition_table || !$row["partition_by"] ? " hidden" : ""); ?>" value="<?php echo h($row["partitions"]); ?>">
|
<?php echo lang('Partitions'); ?>: <input type="number" name="partitions" class="size" value="<?php echo h($row["partitions"]); ?>"<?php echo ($partition_table || !$row["partition_by"] ? " class='hidden'" : ""); ?>>
|
||||||
<table cellspacing="0" id="partition-table"<?php echo ($partition_table ? "" : " class='hidden'"); ?>>
|
<table cellspacing="0" id="partition-table"<?php echo ($partition_table ? "" : " class='hidden'"); ?>>
|
||||||
<thead><tr><th><?php echo lang('Partition name'); ?><th><?php echo lang('Values'); ?></thead>
|
<thead><tr><th><?php echo lang('Partition name'); ?><th><?php echo lang('Values'); ?></thead>
|
||||||
<?php
|
<?php
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ if ($_POST && !$error && !isset($_POST["add_x"])) { // add is an image and PHP c
|
|||||||
// create or rename database
|
// create or rename database
|
||||||
if (DB != "") {
|
if (DB != "") {
|
||||||
$_GET["db"] = $name;
|
$_GET["db"] = $name;
|
||||||
queries_redirect(preg_replace('~\bdb=[^&]*&~', '', ME) . "db=" . urlencode($name), lang('Database has been renamed.'), rename_database($name, $row["collation"]));
|
queries_redirect(preg_replace('~db=[^&]*&~', '', ME) . "db=" . urlencode($name), lang('Database has been renamed.'), rename_database($name, $row["collation"]));
|
||||||
} else {
|
} else {
|
||||||
$databases = explode("\n", str_replace("\r", "", $name));
|
$databases = explode("\n", str_replace("\r", "", $name));
|
||||||
$success = true;
|
$success = true;
|
||||||
@@ -31,11 +31,11 @@ if ($_POST && !$error && !isset($_POST["add_x"])) { // add is an image and PHP c
|
|||||||
if (!$row["collation"]) {
|
if (!$row["collation"]) {
|
||||||
redirect(substr(ME, 0, -1));
|
redirect(substr(ME, 0, -1));
|
||||||
}
|
}
|
||||||
query_redirect("ALTER DATABASE " . idf_escape($name) . (preg_match('~^[a-z0-9_]+$~i', $row["collation"]) ? " COLLATE $row[collation]" : ""), substr(ME, 0, -1), lang('Database has been altered.'));
|
query_redirect("ALTER DATABASE " . idf_escape($name) . (eregi('^[a-z0-9_]+$', $row["collation"]) ? " COLLATE $row[collation]" : ""), substr(ME, 0, -1), lang('Database has been altered.'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
page_header(DB != "" ? lang('Alter database') : lang('Create database'), $error, array(), h(DB));
|
page_header(DB != "" ? lang('Alter database') : lang('Create database'), $error, array(), DB);
|
||||||
|
|
||||||
$collations = collations();
|
$collations = collations();
|
||||||
$name = DB;
|
$name = DB;
|
||||||
@@ -60,10 +60,7 @@ if ($_POST) {
|
|||||||
echo ($_POST["add_x"] || strpos($name, "\n")
|
echo ($_POST["add_x"] || strpos($name, "\n")
|
||||||
? '<textarea id="name" name="name" rows="10" cols="40">' . h($name) . '</textarea><br>'
|
? '<textarea id="name" name="name" rows="10" cols="40">' . h($name) . '</textarea><br>'
|
||||||
: '<input name="name" id="name" value="' . h($name) . '" maxlength="64" autocapitalize="off">'
|
: '<input name="name" id="name" value="' . h($name) . '" maxlength="64" autocapitalize="off">'
|
||||||
) . "\n" . ($collations ? html_select("collation", array("" => "(" . lang('collation') . ")") + $collations, $row["collation"]) . doc_link(array(
|
) . "\n" . ($collations ? html_select("collation", array("" => "(" . lang('collation') . ")") + $collations, $row["collation"]) : "");
|
||||||
'sql' => "charset-charsets.html",
|
|
||||||
'mssql' => "ms187963.aspx",
|
|
||||||
)) : "");
|
|
||||||
?>
|
?>
|
||||||
<script type='text/javascript'>focus(document.getElementById('name'));</script>
|
<script type='text/javascript'>focus(document.getElementById('name'));</script>
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||||
@@ -71,7 +68,7 @@ echo ($_POST["add_x"] || strpos($name, "\n")
|
|||||||
if (DB != "") {
|
if (DB != "") {
|
||||||
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm() . ">\n";
|
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm() . ">\n";
|
||||||
} elseif (!$_POST["add_x"] && $_GET["db"] == "") {
|
} elseif (!$_POST["add_x"] && $_GET["db"] == "") {
|
||||||
echo "<input type='image' class='icon' name='add' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>\n";
|
echo "<input type='image' name='add' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>\n";
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
|
|||||||
@@ -54,13 +54,9 @@ if ($adminer->homepage()) {
|
|||||||
echo "<p class='message'>" . lang('No tables.') . "\n";
|
echo "<p class='message'>" . lang('No tables.') . "\n";
|
||||||
} else {
|
} else {
|
||||||
echo "<form action='' method='post'>\n";
|
echo "<form action='' method='post'>\n";
|
||||||
if (support("table")) {
|
echo "<p>" . lang('Search data in tables') . ": <input type='search' name='query' value='" . h($_POST["query"]) . "'> <input type='submit' name='search' value='" . lang('Search') . "'>\n";
|
||||||
echo "<fieldset><legend>" . lang('Search data in tables') . " <span id='selected2'></span></legend><div>";
|
if ($_POST["search"] && $_POST["query"] != "") {
|
||||||
echo "<input type='search' name='query' value='" . h($_POST["query"]) . "'> <input type='submit' name='search' value='" . lang('Search') . "'>\n";
|
search_tables();
|
||||||
echo "</div></fieldset>\n";
|
|
||||||
if ($_POST["search"] && $_POST["query"] != "") {
|
|
||||||
search_tables();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
echo "<table cellspacing='0' class='nowrap checkable' onclick='tableClick(event);' ondblclick='tableClick(event, true);'>\n";
|
echo "<table cellspacing='0' class='nowrap checkable' onclick='tableClick(event);' ondblclick='tableClick(event, true);'>\n";
|
||||||
|
|
||||||
@@ -76,11 +72,10 @@ if ($adminer->homepage()) {
|
|||||||
echo (support("comment") ? '<td>' . lang('Comment') : '');
|
echo (support("comment") ? '<td>' . lang('Comment') : '');
|
||||||
echo "</thead>\n";
|
echo "</thead>\n";
|
||||||
|
|
||||||
$tables = 0;
|
|
||||||
foreach ($tables_list as $name => $type) {
|
foreach ($tables_list as $name => $type) {
|
||||||
$view = ($type !== null && !preg_match('~table~i', $type));
|
$view = ($type !== null && !eregi("table", $type));
|
||||||
echo '<tr' . odd() . '><td>' . checkbox(($view ? "views[]" : "tables[]"), $name, in_array($name, $tables_views, true), "", "formUncheck('check-all');");
|
echo '<tr' . odd() . '><td>' . checkbox(($view ? "views[]" : "tables[]"), $name, in_array($name, $tables_views, true), "", "formUncheck('check-all');");
|
||||||
echo '<th>' . (support("table") || support("indexes") ? '<a href="' . h(ME) . 'table=' . urlencode($name) . '" title="' . lang('Show structure') . '">' . h($name) . '</a>' : h($name));
|
echo '<th><a href="' . h(ME) . 'table=' . urlencode($name) . '" title="' . lang('Show structure') . '">' . h($name) . '</a>';
|
||||||
if ($view) {
|
if ($view) {
|
||||||
echo '<td colspan="6"><a href="' . h(ME) . "view=" . urlencode($name) . '" title="' . lang('Alter view') . '">' . lang('View') . '</a>';
|
echo '<td colspan="6"><a href="' . h(ME) . "view=" . urlencode($name) . '" title="' . lang('Alter view') . '">' . lang('View') . '</a>';
|
||||||
echo '<td align="right"><a href="' . h(ME) . "select=" . urlencode($name) . '" title="' . lang('Select data') . '">?</a>';
|
echo '<td align="right"><a href="' . h(ME) . "select=" . urlencode($name) . '" title="' . lang('Select data') . '">?</a>';
|
||||||
@@ -94,13 +89,8 @@ if ($adminer->homepage()) {
|
|||||||
"Auto_increment" => array("auto_increment=1&create", lang('Alter table')),
|
"Auto_increment" => array("auto_increment=1&create", lang('Alter table')),
|
||||||
"Rows" => array("select", lang('Select data')),
|
"Rows" => array("select", lang('Select data')),
|
||||||
) as $key => $link) {
|
) as $key => $link) {
|
||||||
$id = " id='$key-" . h($name) . "'";
|
echo ($link ? "<td align='right'><a href='" . h(ME . "$link[0]=") . urlencode($name) . "' id='$key-" . h($name) . "' title='$link[1]'>?</a>" : "<td id='$key-" . h($name) . "'> ");
|
||||||
echo ($link ? "<td align='right'>" . (support("table") || $key == "Rows" || (support("indexes") && $key != "Data_length")
|
|
||||||
? "<a href='" . h(ME . "$link[0]=") . urlencode($name) . "'$id title='$link[1]'>?</a>"
|
|
||||||
: "<span$id>?</span>"
|
|
||||||
) : "<td id='$key-" . h($name) . "'> ");
|
|
||||||
}
|
}
|
||||||
$tables++;
|
|
||||||
}
|
}
|
||||||
echo (support("comment") ? "<td id='Comment-" . h($name) . "'> " : "");
|
echo (support("comment") ? "<td id='Comment-" . h($name) . "'> " : "");
|
||||||
}
|
}
|
||||||
@@ -113,19 +103,13 @@ if ($adminer->homepage()) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
|
echo "<script type='text/javascript'>tableCheck();</script>\n";
|
||||||
if (!information_schema(DB)) {
|
if (!information_schema(DB)) {
|
||||||
$vacuum = "<input type='submit' value='" . lang('Vacuum') . "'" . on_help("'VACUUM'") . "> ";
|
echo "<p>" . (ereg('^(sql|sqlite|pgsql)$', $jush)
|
||||||
$optimize = "<input type='submit' name='optimize' value='" . lang('Optimize') . "'" . on_help($jush == "sql" ? "'OPTIMIZE TABLE'" : "'VACUUM OPTIMIZE'") . "> ";
|
? ($jush != "sqlite" ? "<input type='submit' value='" . lang('Analyze') . "'> " : "")
|
||||||
echo "<fieldset><legend>" . lang('Selected') . " <span id='selected'></span></legend><div>"
|
. "<input type='submit' name='optimize' value='" . lang('Optimize') . "'> " : ""
|
||||||
. ($jush == "sqlite" ? $vacuum
|
) . ($jush == "sql" ? "<input type='submit' name='check' value='" . lang('Check') . "'> <input type='submit' name='repair' value='" . lang('Repair') . "'> " : "") . "<input type='submit' name='truncate' value='" . lang('Truncate') . "'" . confirm("formChecked(this, /tables/)") . "> <input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm("formChecked(this, /tables|views/)") . ">\n";
|
||||||
: ($jush == "pgsql" ? $vacuum . $optimize
|
$databases = (support("scheme") ? schemas() : $adminer->databases());
|
||||||
: ($jush == "sql" ? "<input type='submit' value='" . lang('Analyze') . "'" . on_help("'ANALYZE TABLE'") . "> " . $optimize
|
|
||||||
. "<input type='submit' name='check' value='" . lang('Check') . "'" . on_help("'CHECK TABLE'") . "> "
|
|
||||||
. "<input type='submit' name='repair' value='" . lang('Repair') . "'" . on_help("'REPAIR 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") {
|
if (count($databases) != 1 && $jush != "sqlite") {
|
||||||
$db = (isset($_POST["target"]) ? $_POST["target"] : (support("scheme") ? $_GET["ns"] : DB));
|
$db = (isset($_POST["target"]) ? $_POST["target"] : (support("scheme") ? $_GET["ns"] : DB));
|
||||||
echo "<p>" . lang('Move to other database') . ": ";
|
echo "<p>" . lang('Move to other database') . ": ";
|
||||||
@@ -134,16 +118,15 @@ if ($adminer->homepage()) {
|
|||||||
echo (support("copy") ? " <input type='submit' name='copy' value='" . lang('Copy') . "'>" : "");
|
echo (support("copy") ? " <input type='submit' name='copy' value='" . lang('Copy') . "'>" : "");
|
||||||
echo "\n";
|
echo "\n";
|
||||||
}
|
}
|
||||||
echo "<input type='hidden' name='all' value='' onclick=\"selectCount('selected', formChecked(this, /^(tables|views)\[/));" . (support("table") ? " selectCount('selected2', formChecked(this, /^tables\[/) || $tables);" : "") . "\">\n"; // used by trCheck()
|
|
||||||
echo "<input type='hidden' name='token' value='$token'>\n";
|
echo "<input type='hidden' name='token' value='$token'>\n";
|
||||||
echo "</div></fieldset>\n";
|
|
||||||
}
|
}
|
||||||
echo "</form>\n";
|
echo "</form>\n";
|
||||||
echo "<script type='text/javascript'>tableCheck();</script>\n";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
echo '<p class="links"><a href="' . h(ME) . 'create=">' . lang('Create table') . "</a>\n";
|
echo '<p><a href="' . h(ME) . 'create=">' . lang('Create table') . "</a>\n";
|
||||||
echo (support("view") ? '<a href="' . h(ME) . 'view=">' . lang('Create view') . "</a>\n" : "");
|
if (support("view")) {
|
||||||
|
echo '<a href="' . h(ME) . 'view=">' . lang('Create view') . "</a>\n";
|
||||||
|
}
|
||||||
|
|
||||||
if (support("routine")) {
|
if (support("routine")) {
|
||||||
echo "<h3 id='routines'>" . lang('Routines') . "</h3>\n";
|
echo "<h3 id='routines'>" . lang('Routines') . "</h3>\n";
|
||||||
@@ -161,10 +144,7 @@ if ($adminer->homepage()) {
|
|||||||
}
|
}
|
||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
}
|
}
|
||||||
echo '<p class="links">'
|
echo '<p>' . (support("procedure") ? '<a href="' . h(ME) . 'procedure=">' . lang('Create procedure') . '</a> ' : '') . '<a href="' . h(ME) . 'function=">' . lang('Create function') . "</a>\n";
|
||||||
. (support("procedure") ? '<a href="' . h(ME) . 'procedure=">' . lang('Create procedure') . '</a>' : '')
|
|
||||||
. '<a href="' . h(ME) . 'function=">' . lang('Create function') . "</a>\n"
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (support("sequence")) {
|
if (support("sequence")) {
|
||||||
@@ -179,7 +159,7 @@ if ($adminer->homepage()) {
|
|||||||
}
|
}
|
||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
}
|
}
|
||||||
echo "<p class='links'><a href='" . h(ME) . "sequence='>" . lang('Create sequence') . "</a>\n";
|
echo "<p><a href='" . h(ME) . "sequence='>" . lang('Create sequence') . "</a>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (support("type")) {
|
if (support("type")) {
|
||||||
@@ -194,7 +174,7 @@ if ($adminer->homepage()) {
|
|||||||
}
|
}
|
||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
}
|
}
|
||||||
echo "<p class='links'><a href='" . h(ME) . "type='>" . lang('Create type') . "</a>\n";
|
echo "<p><a href='" . h(ME) . "type='>" . lang('Create type') . "</a>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (support("event")) {
|
if (support("event")) {
|
||||||
@@ -216,7 +196,7 @@ if ($adminer->homepage()) {
|
|||||||
echo "<p class='error'><code class='jush-sqlset'>event_scheduler</code>: " . h($event_scheduler) . "\n";
|
echo "<p class='error'><code class='jush-sqlset'>event_scheduler</code>: " . h($event_scheduler) . "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
echo '<p class="links"><a href="' . h(ME) . 'event=">' . lang('Create event') . "</a>\n";
|
echo '<p><a href="' . h(ME) . 'event=">' . lang('Create event') . "</a>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($tables_list) {
|
if ($tables_list) {
|
||||||
|
|||||||
@@ -3,8 +3,5 @@ $TABLE = $_GET["download"];
|
|||||||
$fields = fields($TABLE);
|
$fields = fields($TABLE);
|
||||||
header("Content-Type: application/octet-stream");
|
header("Content-Type: application/octet-stream");
|
||||||
header("Content-Disposition: attachment; filename=" . friendly_url("$TABLE-" . implode("_", $_GET["where"])) . "." . friendly_url($_GET["field"]));
|
header("Content-Disposition: attachment; filename=" . friendly_url("$TABLE-" . implode("_", $_GET["where"])) . "." . friendly_url($_GET["field"]));
|
||||||
$select = array(idf_escape($_GET["field"]));
|
echo $connection->result("SELECT" . limit(idf_escape($_GET["field"]) . " FROM " . table($TABLE), " WHERE " . where($_GET, $fields), 1));
|
||||||
$result = $driver->select($TABLE, $select, array(where($_GET, $fields)), $select);
|
|
||||||
$row = ($result ? $result->fetch_row() : array());
|
|
||||||
echo $row[0];
|
|
||||||
exit; // don't output footer
|
exit; // don't output footer
|
||||||
|
|||||||
@@ -1,349 +0,0 @@
|
|||||||
<?php
|
|
||||||
$drivers["elastic"] = "Elasticsearch (beta)";
|
|
||||||
|
|
||||||
if (isset($_GET["elastic"])) {
|
|
||||||
$possible_drivers = array("json");
|
|
||||||
define("DRIVER", "elastic");
|
|
||||||
|
|
||||||
if (function_exists('json_decode')) {
|
|
||||||
class Min_DB {
|
|
||||||
var $extension = "JSON", $server_info, $errno, $error, $_url;
|
|
||||||
|
|
||||||
/** 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 . '/' . ltrim($path, '/'), false, stream_context_create(array('http' => array(
|
|
||||||
'method' => $method,
|
|
||||||
'content' => json_encode($content),
|
|
||||||
'ignore_errors' => 1, // available since PHP 5.2.10
|
|
||||||
))));
|
|
||||||
if (!$file) {
|
|
||||||
$this->error = $php_errormsg;
|
|
||||||
return $file;
|
|
||||||
}
|
|
||||||
if (!preg_match('~^HTTP/[0-9.]+ 2~i', $http_response_header[0])) {
|
|
||||||
$this->error = $file;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$return = json_decode($file, true);
|
|
||||||
if (!$return) {
|
|
||||||
$this->errno = json_last_error();
|
|
||||||
if (function_exists('json_last_error_msg')) {
|
|
||||||
$this->error = json_last_error_msg();
|
|
||||||
} else {
|
|
||||||
$constants = get_defined_constants(true);
|
|
||||||
foreach ($constants['json'] as $name => $value) {
|
|
||||||
if ($value == $this->errno && preg_match('~^JSON_ERROR_~', $name)) {
|
|
||||||
$this->error = $name;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
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('');
|
|
||||||
if ($return) {
|
|
||||||
$this->server_info = $return['version']['number'];
|
|
||||||
}
|
|
||||||
return (bool) $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function select_db($database) {
|
|
||||||
$this->_db = $database;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function quote($string) {
|
|
||||||
return $string;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
class Min_Result {
|
|
||||||
var $num_rows, $_rows;
|
|
||||||
|
|
||||||
function Min_Result($rows) {
|
|
||||||
$this->num_rows = count($this->_rows);
|
|
||||||
$this->_rows = $rows;
|
|
||||||
reset($this->_rows);
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetch_assoc() {
|
|
||||||
$return = current($this->_rows);
|
|
||||||
next($this->_rows);
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetch_row() {
|
|
||||||
return array_values($this->fetch_assoc());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Min_Driver extends Min_SQL {
|
|
||||||
|
|
||||||
function select($table, $select, $where, $group, $order = array(), $limit = 1, $page = 0, $print = false) {
|
|
||||||
global $adminer;
|
|
||||||
$data = array();
|
|
||||||
$query = "$table/_search";
|
|
||||||
if ($select != array("*")) {
|
|
||||||
$data["fields"] = $select;
|
|
||||||
}
|
|
||||||
if ($order) {
|
|
||||||
$sort = array();
|
|
||||||
foreach ($order as $col) {
|
|
||||||
$col = preg_replace('~ DESC$~', '', $col, 1, $count);
|
|
||||||
$sort[] = ($count ? array($col => "desc") : $col);
|
|
||||||
}
|
|
||||||
$data["sort"] = $sort;
|
|
||||||
}
|
|
||||||
if ($limit) {
|
|
||||||
$data["size"] = +$limit;
|
|
||||||
if ($page) {
|
|
||||||
$data["from"] = ($page * $limit);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
foreach ((array) $_GET["where"] as $val) {
|
|
||||||
if ("$val[col]$val[val]" != "") {
|
|
||||||
$term = array("match" => array(($val["col"] != "" ? $val["col"] : "_all") => $val["val"]));
|
|
||||||
if ($val["op"] == "=") {
|
|
||||||
$data["query"]["filtered"]["filter"]["and"][] = $term;
|
|
||||||
} else {
|
|
||||||
$data["query"]["filtered"]["query"]["bool"]["must"][] = $term;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($data["query"] && !$data["query"]["filtered"]["query"]) {
|
|
||||||
$data["query"]["filtered"]["query"] = array("match_all" => array());
|
|
||||||
}
|
|
||||||
$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;
|
|
||||||
}
|
|
||||||
$return = array();
|
|
||||||
foreach ($search['hits']['hits'] as $hit) {
|
|
||||||
$row = array();
|
|
||||||
$fields = $hit['_source'];
|
|
||||||
if ($select != array("*")) {
|
|
||||||
$fields = array();
|
|
||||||
foreach ($select as $key) {
|
|
||||||
$fields[$key] = $hit['fields'][$key];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
foreach ($fields as $key => $val) {
|
|
||||||
$row[$key] = (is_array($val) ? json_encode($val) : $val); //! display JSON and others differently
|
|
||||||
}
|
|
||||||
$return[] = $row;
|
|
||||||
}
|
|
||||||
return new Min_Result($return);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function connect() {
|
|
||||||
global $adminer;
|
|
||||||
$connection = new Min_DB;
|
|
||||||
$credentials = $adminer->credentials();
|
|
||||||
if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) {
|
|
||||||
return $connection;
|
|
||||||
}
|
|
||||||
return $connection->error;
|
|
||||||
}
|
|
||||||
|
|
||||||
function support($feature) {
|
|
||||||
return preg_match("~database|table|columns~", $feature);
|
|
||||||
}
|
|
||||||
|
|
||||||
function logged_user() {
|
|
||||||
global $adminer;
|
|
||||||
$credentials = $adminer->credentials();
|
|
||||||
return $credentials[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
function get_databases() {
|
|
||||||
global $connection;
|
|
||||||
$return = $connection->rootQuery('_aliases');
|
|
||||||
if ($return) {
|
|
||||||
$return = array_keys($return);
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function collations() {
|
|
||||||
return array();
|
|
||||||
}
|
|
||||||
|
|
||||||
function db_collation($db, $collations) {
|
|
||||||
}
|
|
||||||
|
|
||||||
function count_tables($databases) {
|
|
||||||
global $connection;
|
|
||||||
$return = $connection->query('_mapping');
|
|
||||||
if ($return) {
|
|
||||||
$return = array_map('count', $return);
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function tables_list() {
|
|
||||||
global $connection;
|
|
||||||
$return = $connection->query('_mapping');
|
|
||||||
if ($return) {
|
|
||||||
$return = array_fill_keys(array_keys(reset($return)), 'table');
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function table_status($name = "", $fast = false) {
|
|
||||||
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 != "" && $name == $table["term"]) {
|
|
||||||
return $return[$name];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function error() {
|
|
||||||
global $connection;
|
|
||||||
return h($connection->error);
|
|
||||||
}
|
|
||||||
|
|
||||||
function information_schema() {
|
|
||||||
}
|
|
||||||
|
|
||||||
function is_view($table_status) {
|
|
||||||
}
|
|
||||||
|
|
||||||
function indexes($table, $connection2 = null) {
|
|
||||||
return array(
|
|
||||||
array("type" => "PRIMARY", "columns" => array("_id")),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function fields($table) {
|
|
||||||
global $connection;
|
|
||||||
$mapping = $connection->query("$table/_mapping");
|
|
||||||
$return = array();
|
|
||||||
if ($mapping) {
|
|
||||||
foreach ($mapping[$table]['properties'] as $name => $field) {
|
|
||||||
$return[$name] = array(
|
|
||||||
"field" => $name,
|
|
||||||
"full_type" => $field["type"],
|
|
||||||
"type" => $field["type"],
|
|
||||||
"privileges" => array("insert" => 1, "select" => 1, "update" => 1),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function foreign_keys($table) {
|
|
||||||
return array();
|
|
||||||
}
|
|
||||||
|
|
||||||
function table($idf) {
|
|
||||||
return $idf;
|
|
||||||
}
|
|
||||||
|
|
||||||
function idf_escape($idf) {
|
|
||||||
return $idf;
|
|
||||||
}
|
|
||||||
|
|
||||||
function convert_field($field) {
|
|
||||||
}
|
|
||||||
|
|
||||||
function unconvert_field($field, $return) {
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function fk_support($table_status) {
|
|
||||||
}
|
|
||||||
|
|
||||||
function found_rows($table_status, $where) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Create database
|
|
||||||
* @param string
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
function create_database($db) {
|
|
||||||
global $connection;
|
|
||||||
return $connection->rootQuery(urlencode($db), array(), 'PUT');
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Drop databases
|
|
||||||
* @param array
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
function drop_databases($databases) {
|
|
||||||
global $connection;
|
|
||||||
return $connection->rootQuery(urlencode(implode(',', $databases)), array(), 'DELETE');
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Drop tables
|
|
||||||
* @param array
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
function drop_tables($tables) {
|
|
||||||
global $connection;
|
|
||||||
$return = true;
|
|
||||||
foreach ($tables as $table) { //! convert to bulk api
|
|
||||||
$return = $return && $connection->query(urlencode($table), array(), 'DELETE');
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$jush = "elastic";
|
|
||||||
$operators = array("=", "query");
|
|
||||||
$functions = array();
|
|
||||||
$grouping = array();
|
|
||||||
$edit_functions = array(array("json"));
|
|
||||||
}
|
|
||||||
@@ -1,361 +0,0 @@
|
|||||||
<?php
|
|
||||||
$drivers["mongo"] = "MongoDB (beta)";
|
|
||||||
|
|
||||||
if (isset($_GET["mongo"])) {
|
|
||||||
$possible_drivers = array("mongo");
|
|
||||||
define("DRIVER", "mongo");
|
|
||||||
|
|
||||||
if (class_exists('MongoDB')) {
|
|
||||||
class Min_DB {
|
|
||||||
var $extension = "Mongo", $error, $last_id, $_link, $_db;
|
|
||||||
|
|
||||||
function connect($server, $username, $password) {
|
|
||||||
global $adminer;
|
|
||||||
$db = $adminer->database();
|
|
||||||
$options = array();
|
|
||||||
if ($username != "") {
|
|
||||||
$options["username"] = $username;
|
|
||||||
$options["password"] = $password;
|
|
||||||
}
|
|
||||||
if ($db != "") {
|
|
||||||
$options["db"] = $db;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
$this->_link = @new MongoClient("mongodb://$server", $options);
|
|
||||||
return true;
|
|
||||||
} catch (Exception $ex) {
|
|
||||||
$this->error = $ex->getMessage();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function query($query) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function select_db($database) {
|
|
||||||
try {
|
|
||||||
$this->_db = $this->_link->selectDB($database);
|
|
||||||
return true;
|
|
||||||
} catch (Exception $ex) {
|
|
||||||
$this->error = $ex->getMessage();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function quote($string) {
|
|
||||||
return $string;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
class Min_Result {
|
|
||||||
var $num_rows, $_rows = array(), $_offset = 0, $_charset = array();
|
|
||||||
|
|
||||||
function Min_Result($result) {
|
|
||||||
foreach ($result as $item) {
|
|
||||||
$row = array();
|
|
||||||
foreach ($item as $key => $val) {
|
|
||||||
if (is_a($val, 'MongoBinData')) {
|
|
||||||
$this->_charset[$key] = 63;
|
|
||||||
}
|
|
||||||
$row[$key] =
|
|
||||||
(is_a($val, 'MongoId') ? 'ObjectId("' . strval($val) . '")' :
|
|
||||||
(is_a($val, 'MongoDate') ? gmdate("Y-m-d H:i:s", $val->sec) . " GMT" :
|
|
||||||
(is_a($val, 'MongoBinData') ? $val->bin : //! allow downloading
|
|
||||||
(is_a($val, 'MongoRegex') ? strval($val) :
|
|
||||||
(is_object($val) ? get_class($val) : // MongoMinKey, MongoMaxKey
|
|
||||||
$val
|
|
||||||
)))));
|
|
||||||
}
|
|
||||||
$this->_rows[] = $row;
|
|
||||||
foreach ($row as $key => $val) {
|
|
||||||
if (!isset($this->_rows[0][$key])) {
|
|
||||||
$this->_rows[0][$key] = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$this->num_rows = count($this->_rows);
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetch_assoc() {
|
|
||||||
$row = current($this->_rows);
|
|
||||||
if (!$row) {
|
|
||||||
return $row;
|
|
||||||
}
|
|
||||||
$return = array();
|
|
||||||
foreach ($this->_rows[0] as $key => $val) {
|
|
||||||
$return[$key] = $row[$key];
|
|
||||||
}
|
|
||||||
next($this->_rows);
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetch_row() {
|
|
||||||
$return = $this->fetch_assoc();
|
|
||||||
if (!$return) {
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
return array_values($return);
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetch_field() {
|
|
||||||
$keys = array_keys($this->_rows[0]);
|
|
||||||
$name = $keys[$this->_offset++];
|
|
||||||
return (object) array(
|
|
||||||
'name' => $name,
|
|
||||||
'charsetnr' => $this->_charset[$name],
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Min_Driver extends Min_SQL {
|
|
||||||
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)
|
|
||||||
);
|
|
||||||
$sort = array();
|
|
||||||
foreach ($order as $val) {
|
|
||||||
$val = preg_replace('~ DESC$~', '', $val, 1, $count);
|
|
||||||
$sort[$val] = ($count ? -1 : 1);
|
|
||||||
}
|
|
||||||
return new Min_Result($this->_conn->_db->selectCollection($table)
|
|
||||||
->find(array(), $select)
|
|
||||||
->sort($sort)
|
|
||||||
->limit(+$limit)
|
|
||||||
->skip($page * $limit)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function insert($table, $set) {
|
|
||||||
try {
|
|
||||||
$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();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function connect() {
|
|
||||||
global $adminer;
|
|
||||||
$connection = new Min_DB;
|
|
||||||
$credentials = $adminer->credentials();
|
|
||||||
if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) {
|
|
||||||
return $connection;
|
|
||||||
}
|
|
||||||
return $connection->error;
|
|
||||||
}
|
|
||||||
|
|
||||||
function error() {
|
|
||||||
global $connection;
|
|
||||||
return h($connection->error);
|
|
||||||
}
|
|
||||||
|
|
||||||
function logged_user() {
|
|
||||||
global $adminer;
|
|
||||||
$credentials = $adminer->credentials();
|
|
||||||
return $credentials[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
function get_databases($flush) {
|
|
||||||
global $connection;
|
|
||||||
$return = array();
|
|
||||||
$dbs = $connection->_link->listDBs();
|
|
||||||
foreach ($dbs['databases'] as $db) {
|
|
||||||
$return[] = $db['name'];
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function collations() {
|
|
||||||
return array();
|
|
||||||
}
|
|
||||||
|
|
||||||
function db_collation($db, $collations) {
|
|
||||||
}
|
|
||||||
|
|
||||||
function count_tables($databases) {
|
|
||||||
global $connection;
|
|
||||||
$return = array();
|
|
||||||
foreach ($databases as $db) {
|
|
||||||
$return[$db] = count($connection->_link->selectDB($db)->getCollectionNames(true));
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function tables_list() {
|
|
||||||
global $connection;
|
|
||||||
return array_fill_keys($connection->_db->getCollectionNames(true), 'table');
|
|
||||||
}
|
|
||||||
|
|
||||||
function table_status($name = "", $fast = false) {
|
|
||||||
$return = array();
|
|
||||||
foreach (tables_list() as $table => $type) {
|
|
||||||
$return[$table] = array("Name" => $table);
|
|
||||||
if ($name == $table) {
|
|
||||||
return $return[$table];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function information_schema() {
|
|
||||||
}
|
|
||||||
|
|
||||||
function is_view($table_status) {
|
|
||||||
}
|
|
||||||
|
|
||||||
function drop_databases($databases) {
|
|
||||||
global $connection;
|
|
||||||
foreach ($databases as $db) {
|
|
||||||
$response = $connection->_link->selectDB($db)->drop();
|
|
||||||
if (!$response['ok']) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function indexes($table, $connection2 = null) {
|
|
||||||
global $connection;
|
|
||||||
$return = array();
|
|
||||||
foreach ($connection->_db->selectCollection($table)->getIndexInfo() as $index) {
|
|
||||||
$descs = array();
|
|
||||||
foreach ($index["key"] as $column => $type) {
|
|
||||||
$descs[] = ($type == -1 ? '1' : null);
|
|
||||||
}
|
|
||||||
$return[$index["name"]] = array(
|
|
||||||
"type" => ($index["name"] == "_id_" ? "PRIMARY" : ($index["unique"] ? "UNIQUE" : "INDEX")),
|
|
||||||
"columns" => array_keys($index["key"]),
|
|
||||||
"lengths" => array(),
|
|
||||||
"descs" => $descs,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function fields($table) {
|
|
||||||
return fields_from_edit();
|
|
||||||
}
|
|
||||||
|
|
||||||
function convert_field($field) {
|
|
||||||
}
|
|
||||||
|
|
||||||
function unconvert_field($field, $return) {
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function foreign_keys($table) {
|
|
||||||
return array();
|
|
||||||
}
|
|
||||||
|
|
||||||
function fk_support($table_status) {
|
|
||||||
}
|
|
||||||
|
|
||||||
function engines() {
|
|
||||||
return array();
|
|
||||||
}
|
|
||||||
|
|
||||||
function found_rows($table_status, $where) {
|
|
||||||
global $connection;
|
|
||||||
//! don't call count_rows()
|
|
||||||
return $connection->_db->selectCollection($_GET["select"])->count($where);
|
|
||||||
}
|
|
||||||
|
|
||||||
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
|
|
||||||
global $connection;
|
|
||||||
if ($table == "") {
|
|
||||||
$connection->_db->createCollection($name);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function drop_tables($tables) {
|
|
||||||
global $connection;
|
|
||||||
foreach ($tables as $table) {
|
|
||||||
$response = $connection->_db->selectCollection($table)->drop();
|
|
||||||
if (!$response['ok']) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function truncate_tables($tables) {
|
|
||||||
global $connection;
|
|
||||||
foreach ($tables as $table) {
|
|
||||||
$response = $connection->_db->selectCollection($table)->remove();
|
|
||||||
if (!$response['ok']) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
function idf_escape($idf) {
|
|
||||||
return $idf;
|
|
||||||
}
|
|
||||||
|
|
||||||
function support($feature) {
|
|
||||||
return preg_match("~database|indexes~", $feature);
|
|
||||||
}
|
|
||||||
|
|
||||||
$jush = "mongo";
|
|
||||||
$operators = array("=");
|
|
||||||
$functions = array();
|
|
||||||
$grouping = array();
|
|
||||||
$edit_functions = array(array("json"));
|
|
||||||
}
|
|
||||||
@@ -233,39 +233,6 @@ if (isset($_GET["mssql"])) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Min_Driver extends Min_SQL {
|
|
||||||
|
|
||||||
function insertUpdate($table, $rows, $primary) {
|
|
||||||
foreach ($rows as $set) {
|
|
||||||
$update = array();
|
|
||||||
$where = array();
|
|
||||||
foreach ($set as $key => $val) {
|
|
||||||
$update[] = "$key = $val";
|
|
||||||
if (isset($primary[idf_unescape($key)])) {
|
|
||||||
$where[] = "$key = $val";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//! can use only one query for all rows
|
|
||||||
if (!queries("MERGE " . table($table) . " USING (VALUES(" . implode(", ", $set) . ")) AS source (c" . implode(", c", range(1, count($set))) . ") ON " . implode(" AND ", $where) //! source, c1 - possible conflict
|
|
||||||
. " WHEN MATCHED THEN UPDATE SET " . implode(", ", $update)
|
|
||||||
. " WHEN NOT MATCHED THEN INSERT (" . implode(", ", array_keys($set)) . ") VALUES (" . implode(", ", $set) . ");" // ; is mandatory
|
|
||||||
)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function begin() {
|
|
||||||
return queries("BEGIN TRANSACTION");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function idf_escape($idf) {
|
function idf_escape($idf) {
|
||||||
return "[" . str_replace("]", "]]", $idf) . "]";
|
return "[" . str_replace("]", "]]", $idf) . "]";
|
||||||
}
|
}
|
||||||
@@ -326,7 +293,7 @@ if (isset($_GET["mssql"])) {
|
|||||||
|
|
||||||
function table_status($name = "") {
|
function table_status($name = "") {
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows("SELECT name AS Name, type_desc AS Engine FROM sys.all_objects WHERE schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND type IN ('S', 'U', 'V') " . ($name != "" ? "AND name = " . q($name) : "ORDER BY name")) as $row) {
|
foreach (get_rows("SELECT name AS Name, type_desc AS Engine FROM sys.all_objects WHERE schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND type IN ('S', 'U', 'V')" . ($name != "" ? " AND name = " . q($name) : "")) as $row) {
|
||||||
if ($name != "") {
|
if ($name != "") {
|
||||||
return $row;
|
return $row;
|
||||||
}
|
}
|
||||||
@@ -353,7 +320,7 @@ LEFT JOIN sys.default_constraints d ON c.default_object_id = d.parent_column_id
|
|||||||
WHERE o.schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND o.type IN ('S', 'U', 'V') AND o.name = " . q($table)
|
WHERE o.schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND o.type IN ('S', 'U', 'V') AND o.name = " . q($table)
|
||||||
) as $row) {
|
) as $row) {
|
||||||
$type = $row["type"];
|
$type = $row["type"];
|
||||||
$length = (preg_match("~char|binary~", $type) ? $row["max_length"] : ($type == "decimal" ? "$row[precision],$row[scale]" : ""));
|
$length = (ereg("char|binary", $type) ? $row["max_length"] : ($type == "decimal" ? "$row[precision],$row[scale]" : ""));
|
||||||
$return[$row["name"]] = array(
|
$return[$row["name"]] = array(
|
||||||
"field" => $row["name"],
|
"field" => $row["name"],
|
||||||
"full_type" => $type . ($length ? "($length)" : ""),
|
"full_type" => $type . ($length ? "($length)" : ""),
|
||||||
@@ -373,17 +340,15 @@ WHERE o.schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND o.type IN ('S', 'U',
|
|||||||
function indexes($table, $connection2 = null) {
|
function indexes($table, $connection2 = null) {
|
||||||
$return = array();
|
$return = array();
|
||||||
// sp_statistics doesn't return information about primary key
|
// sp_statistics doesn't return information about primary key
|
||||||
foreach (get_rows("SELECT i.name, key_ordinal, is_unique, is_primary_key, c.name AS column_name, is_descending_key
|
foreach (get_rows("SELECT i.name, key_ordinal, is_unique, is_primary_key, c.name AS column_name
|
||||||
FROM sys.indexes i
|
FROM sys.indexes i
|
||||||
INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
|
INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
|
||||||
INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
|
INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
|
||||||
WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
||||||
, $connection2) as $row) {
|
, $connection2) as $row) {
|
||||||
$name = $row["name"];
|
$return[$row["name"]]["type"] = ($row["is_primary_key"] ? "PRIMARY" : ($row["is_unique"] ? "UNIQUE" : "INDEX"));
|
||||||
$return[$name]["type"] = ($row["is_primary_key"] ? "PRIMARY" : ($row["is_unique"] ? "UNIQUE" : "INDEX"));
|
$return[$row["name"]]["lengths"] = array();
|
||||||
$return[$name]["lengths"] = array();
|
$return[$row["name"]]["columns"][$row["key_ordinal"]] = $row["column_name"];
|
||||||
$return[$name]["columns"][$row["key_ordinal"]] = $row["column_name"];
|
|
||||||
$return[$name]["descs"][$row["key_ordinal"]] = ($row["is_descending_key"] ? '1' : null);
|
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -396,7 +361,7 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
|||||||
function collations() {
|
function collations() {
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_vals("SELECT name FROM fn_helpcollations()") as $collation) {
|
foreach (get_vals("SELECT name FROM fn_helpcollations()") as $collation) {
|
||||||
$return[preg_replace('~_.*~', '', $collation)][] = $collation;
|
$return[ereg_replace("_.*", "", $collation)][] = $collation;
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -410,8 +375,12 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
|||||||
return nl_br(h(preg_replace('~^(\\[[^]]*])+~m', '', $connection->error)));
|
return nl_br(h(preg_replace('~^(\\[[^]]*])+~m', '', $connection->error)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function exact_value($val) {
|
||||||
|
return q($val);
|
||||||
|
}
|
||||||
|
|
||||||
function create_database($db, $collation) {
|
function create_database($db, $collation) {
|
||||||
return queries("CREATE DATABASE " . idf_escape($db) . (preg_match('~^[a-z0-9_]+$~i', $collation) ? " COLLATE $collation" : ""));
|
return queries("CREATE DATABASE " . idf_escape($db) . (eregi('^[a-z0-9_]+$', $collation) ? " COLLATE $collation" : ""));
|
||||||
}
|
}
|
||||||
|
|
||||||
function drop_databases($databases) {
|
function drop_databases($databases) {
|
||||||
@@ -419,7 +388,7 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
|||||||
}
|
}
|
||||||
|
|
||||||
function rename_database($name, $collation) {
|
function rename_database($name, $collation) {
|
||||||
if (preg_match('~^[a-z0-9_]+$~i', $collation)) {
|
if (eregi('^[a-z0-9_]+$', $collation)) {
|
||||||
queries("ALTER DATABASE " . idf_escape(DB) . " COLLATE $collation");
|
queries("ALTER DATABASE " . idf_escape(DB) . " COLLATE $collation");
|
||||||
}
|
}
|
||||||
queries("ALTER DATABASE " . idf_escape(DB) . " MODIFY NAME = " . idf_escape($name));
|
queries("ALTER DATABASE " . idf_escape(DB) . " MODIFY NAME = " . idf_escape($name));
|
||||||
@@ -480,7 +449,7 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
|||||||
} elseif (!queries(($val[0] != "PRIMARY"
|
} elseif (!queries(($val[0] != "PRIMARY"
|
||||||
? "CREATE $val[0] " . ($val[0] != "INDEX" ? "INDEX " : "") . idf_escape($val[1] != "" ? $val[1] : uniqid($table . "_")) . " ON " . table($table)
|
? "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"
|
: "ALTER TABLE " . table($table) . " ADD PRIMARY KEY"
|
||||||
) . " (" . implode(", ", $val[2]) . ")")) {
|
) . " $val[2]")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -489,6 +458,30 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
|||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function begin() {
|
||||||
|
return queries("BEGIN TRANSACTION");
|
||||||
|
}
|
||||||
|
|
||||||
|
function insert_into($table, $set) {
|
||||||
|
return queries("INSERT INTO " . table($table) . ($set ? " (" . implode(", ", array_keys($set)) . ")\nVALUES (" . implode(", ", $set) . ")" : "DEFAULT VALUES"));
|
||||||
|
}
|
||||||
|
|
||||||
|
function insert_update($table, $set, $primary) {
|
||||||
|
$update = array();
|
||||||
|
$where = array();
|
||||||
|
foreach ($set as $key => $val) {
|
||||||
|
$update[] = "$key = $val";
|
||||||
|
if (isset($primary[idf_unescape($key)])) {
|
||||||
|
$where[] = "$key = $val";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// can use only one query for all rows with different API
|
||||||
|
return queries("MERGE " . table($table) . " USING (VALUES(" . implode(", ", $set) . ")) AS source (c" . implode(", c", range(1, count($set))) . ") ON " . implode(" AND ", $where) //! source, c1 - possible conflict
|
||||||
|
. " WHEN MATCHED THEN UPDATE SET " . implode(", ", $update)
|
||||||
|
. " WHEN NOT MATCHED THEN INSERT (" . implode(", ", array_keys($set)) . ") VALUES (" . implode(", ", $set) . ");" // ; is mandatory
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
function last_id() {
|
function last_id() {
|
||||||
global $connection;
|
global $connection;
|
||||||
return $connection->result("SELECT SCOPE_IDENTITY()"); // @@IDENTITY can return trigger INSERT
|
return $connection->result("SELECT SCOPE_IDENTITY()"); // @@IDENTITY can return trigger INSERT
|
||||||
@@ -567,7 +560,6 @@ WHERE sys1.xtype = 'TR' AND sys2.name = " . q($table)
|
|||||||
function trigger_options() {
|
function trigger_options() {
|
||||||
return array(
|
return array(
|
||||||
"Timing" => array("AFTER", "INSTEAD OF"),
|
"Timing" => array("AFTER", "INSTEAD OF"),
|
||||||
"Event" => array("INSERT", "UPDATE", "DELETE"),
|
|
||||||
"Type" => array("AS"),
|
"Type" => array("AS"),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -608,7 +600,7 @@ WHERE sys1.xtype = 'TR' AND sys2.name = " . q($table)
|
|||||||
}
|
}
|
||||||
|
|
||||||
function support($feature) {
|
function support($feature) {
|
||||||
return preg_match('~^(columns|database|drop_col|indexes|scheme|sql|table|trigger|view|view_trigger)$~', $feature); //! routine|
|
return ereg('^(scheme|trigger|view|drop_col)$', $feature); //! routine|
|
||||||
}
|
}
|
||||||
|
|
||||||
$jush = "mssql";
|
$jush = "mssql";
|
||||||
|
|||||||
@@ -202,7 +202,7 @@ if (!defined("DRIVER")) {
|
|||||||
/** Free result set
|
/** Free result set
|
||||||
*/
|
*/
|
||||||
function __destruct() {
|
function __destruct() {
|
||||||
mysql_free_result($this->_result);
|
mysql_free_result($this->_result); //! not called in PHP 4 which is a problem with mysql.trace_mode
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -211,8 +211,8 @@ if (!defined("DRIVER")) {
|
|||||||
var $extension = "PDO_MySQL";
|
var $extension = "PDO_MySQL";
|
||||||
|
|
||||||
function connect($server, $username, $password) {
|
function connect($server, $username, $password) {
|
||||||
$this->dsn("mysql:charset=utf8;host=" . str_replace(":", ";unix_socket=", preg_replace('~:(\\d)~', ';port=\\1', $server)), $username, $password);
|
$this->dsn("mysql:host=" . str_replace(":", ";unix_socket=", preg_replace('~:(\\d)~', ';port=\\1', $server)), $username, $password);
|
||||||
$this->query("SET NAMES utf8"); // charset in DSN is ignored before PHP 5.3.6
|
$this->query("SET NAMES utf8"); // charset in DSN is ignored
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -229,43 +229,6 @@ if (!defined("DRIVER")) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Min_Driver extends Min_SQL {
|
|
||||||
|
|
||||||
function insert($table, $set) {
|
|
||||||
return ($set ? parent::insert($table, $set) : queries("INSERT INTO " . table($table) . " ()\nVALUES ()"));
|
|
||||||
}
|
|
||||||
|
|
||||||
function insertUpdate($table, $rows, $primary) {
|
|
||||||
$columns = array_keys(reset($rows));
|
|
||||||
$prefix = "INSERT INTO " . table($table) . " (" . implode(", ", $columns) . ") VALUES\n";
|
|
||||||
$values = array();
|
|
||||||
foreach ($columns as $key) {
|
|
||||||
$values[$key] = "$key = VALUES($key)";
|
|
||||||
}
|
|
||||||
$suffix = "\nON DUPLICATE KEY UPDATE " . implode(", ", $values);
|
|
||||||
$values = array();
|
|
||||||
$length = 0;
|
|
||||||
foreach ($rows as $set) {
|
|
||||||
$value = "(" . implode(", ", $set) . ")";
|
|
||||||
if ($values && (strlen($prefix) + $length + strlen($value) + strlen($suffix) > 1e6)) { // 1e6 - default max_allowed_packet
|
|
||||||
if (!queries($prefix . implode(",\n", $values) . $suffix)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$values = array();
|
|
||||||
$length = 0;
|
|
||||||
}
|
|
||||||
$values[] = $value;
|
|
||||||
$length += strlen($value) + 2; // 2 - strlen(",\n")
|
|
||||||
}
|
|
||||||
return queries($prefix . implode(",\n", $values) . $suffix);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Escape database identifier
|
/** Escape database identifier
|
||||||
* @param string
|
* @param string
|
||||||
* @return string
|
* @return string
|
||||||
@@ -366,7 +329,7 @@ if (!defined("DRIVER")) {
|
|||||||
function engines() {
|
function engines() {
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows("SHOW ENGINES") as $row) {
|
foreach (get_rows("SHOW ENGINES") as $row) {
|
||||||
if (preg_match("~YES|DEFAULT~", $row["Support"])) {
|
if (ereg("YES|DEFAULT", $row["Support"])) {
|
||||||
$return[] = $row["Engine"];
|
$return[] = $row["Engine"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -386,10 +349,7 @@ if (!defined("DRIVER")) {
|
|||||||
*/
|
*/
|
||||||
function tables_list() {
|
function tables_list() {
|
||||||
global $connection;
|
global $connection;
|
||||||
return get_key_vals($connection->server_info >= 5
|
return get_key_vals("SHOW" . ($connection->server_info >= 5 ? " FULL" : "") . " TABLES");
|
||||||
? "SELECT TABLE_NAME, TABLE_TYPE FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ORDER BY TABLE_NAME"
|
|
||||||
: "SHOW TABLES"
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Count tables in all databases
|
/** Count tables in all databases
|
||||||
@@ -413,7 +373,7 @@ if (!defined("DRIVER")) {
|
|||||||
global $connection;
|
global $connection;
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows($fast && $connection->server_info >= 5
|
foreach (get_rows($fast && $connection->server_info >= 5
|
||||||
? "SELECT TABLE_NAME AS Name, Engine, TABLE_COMMENT AS Comment FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() " . ($name != "" ? "AND TABLE_NAME = " . q($name) : "ORDER BY Name")
|
? "SELECT TABLE_NAME AS Name, Engine, TABLE_COMMENT AS Comment FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE()" . ($name != "" ? " AND TABLE_NAME = " . q($name) : "")
|
||||||
: "SHOW TABLE STATUS" . ($name != "" ? " LIKE " . q(addcslashes($name, "%_\\")) : "")
|
: "SHOW TABLE STATUS" . ($name != "" ? " LIKE " . q(addcslashes($name, "%_\\")) : "")
|
||||||
) as $row) {
|
) as $row) {
|
||||||
if ($row["Engine"] == "InnoDB") {
|
if ($row["Engine"] == "InnoDB") {
|
||||||
@@ -436,7 +396,7 @@ if (!defined("DRIVER")) {
|
|||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function is_view($table_status) {
|
function is_view($table_status) {
|
||||||
return $table_status["Engine"] === null;
|
return !isset($table_status["Engine"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Check if table supports foreign keys
|
/** Check if table supports foreign keys
|
||||||
@@ -444,7 +404,7 @@ if (!defined("DRIVER")) {
|
|||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function fk_support($table_status) {
|
function fk_support($table_status) {
|
||||||
return preg_match('~InnoDB|IBMDB2I~i', $table_status["Engine"]);
|
return eregi("InnoDB|IBMDB2I", $table_status["Engine"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get information about fields
|
/** Get information about fields
|
||||||
@@ -461,12 +421,12 @@ if (!defined("DRIVER")) {
|
|||||||
"type" => $match[1],
|
"type" => $match[1],
|
||||||
"length" => $match[2],
|
"length" => $match[2],
|
||||||
"unsigned" => ltrim($match[3] . $match[4]),
|
"unsigned" => ltrim($match[3] . $match[4]),
|
||||||
"default" => ($row["Default"] != "" || preg_match("~char|set~", $match[1]) ? $row["Default"] : null),
|
"default" => ($row["Default"] != "" || ereg("char|set", $match[1]) ? $row["Default"] : null),
|
||||||
"null" => ($row["Null"] == "YES"),
|
"null" => ($row["Null"] == "YES"),
|
||||||
"auto_increment" => ($row["Extra"] == "auto_increment"),
|
"auto_increment" => ($row["Extra"] == "auto_increment"),
|
||||||
"on_update" => (preg_match('~^on update (.+)~i', $row["Extra"], $match) ? $match[1] : ""), //! available since MySQL 5.1.23
|
"on_update" => (eregi('^on update (.+)', $row["Extra"], $match) ? $match[1] : ""), //! available since MySQL 5.1.23
|
||||||
"collation" => $row["Collation"],
|
"collation" => $row["Collation"],
|
||||||
"privileges" => array_flip(preg_split('~, *~', $row["Privileges"])),
|
"privileges" => array_flip(explode(",", $row["Privileges"])),
|
||||||
"comment" => $row["Comment"],
|
"comment" => $row["Comment"],
|
||||||
"primary" => ($row["Key"] == "PRI"),
|
"primary" => ($row["Key"] == "PRI"),
|
||||||
);
|
);
|
||||||
@@ -477,7 +437,7 @@ if (!defined("DRIVER")) {
|
|||||||
/** Get table indexes
|
/** Get table indexes
|
||||||
* @param string
|
* @param string
|
||||||
* @param string Min_DB to use
|
* @param string Min_DB to use
|
||||||
* @return array array($key_name => array("type" => , "columns" => array(), "lengths" => array(), "descs" => array()))
|
* @return array array($key_name => array("type" => , "columns" => array(), "lengths" => array()))
|
||||||
*/
|
*/
|
||||||
function indexes($table, $connection2 = null) {
|
function indexes($table, $connection2 = null) {
|
||||||
$return = array();
|
$return = array();
|
||||||
@@ -485,7 +445,6 @@ if (!defined("DRIVER")) {
|
|||||||
$return[$row["Key_name"]]["type"] = ($row["Key_name"] == "PRIMARY" ? "PRIMARY" : ($row["Index_type"] == "FULLTEXT" ? "FULLTEXT" : ($row["Non_unique"] ? "INDEX" : "UNIQUE")));
|
$return[$row["Key_name"]]["type"] = ($row["Key_name"] == "PRIMARY" ? "PRIMARY" : ($row["Index_type"] == "FULLTEXT" ? "FULLTEXT" : ($row["Non_unique"] ? "INDEX" : "UNIQUE")));
|
||||||
$return[$row["Key_name"]]["columns"][] = $row["Column_name"];
|
$return[$row["Key_name"]]["columns"][] = $row["Column_name"];
|
||||||
$return[$row["Key_name"]]["lengths"][] = $row["Sub_part"];
|
$return[$row["Key_name"]]["lengths"][] = $row["Sub_part"];
|
||||||
$return[$row["Key_name"]]["descs"][] = null;
|
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -568,11 +527,19 @@ if (!defined("DRIVER")) {
|
|||||||
*/
|
*/
|
||||||
function error_line() {
|
function error_line() {
|
||||||
global $connection;
|
global $connection;
|
||||||
if (preg_match('~ at line ([0-9]+)$~', $connection->error, $regs)) {
|
if (ereg(' at line ([0-9]+)$', $connection->error, $regs)) {
|
||||||
return $regs[1] - 1;
|
return $regs[1] - 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Return expression for binary comparison
|
||||||
|
* @param string
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function exact_value($val) {
|
||||||
|
return q($val) . " COLLATE utf8_bin";
|
||||||
|
}
|
||||||
|
|
||||||
/** Create database
|
/** Create database
|
||||||
* @param string
|
* @param string
|
||||||
* @param string
|
* @param string
|
||||||
@@ -672,14 +639,14 @@ if (!defined("DRIVER")) {
|
|||||||
|
|
||||||
/** Run commands to alter indexes
|
/** Run commands to alter indexes
|
||||||
* @param string escaped table name
|
* @param string escaped table name
|
||||||
* @param array of array("index type", "name", array("column definition", ...)) or array("index type", "name", "DROP")
|
* @param array of array("index type", "name", "(columns definition)") or array("index type", "name", "DROP")
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function alter_indexes($table, $alter) {
|
function alter_indexes($table, $alter) {
|
||||||
foreach ($alter as $key => $val) {
|
foreach ($alter as $key => $val) {
|
||||||
$alter[$key] = ($val[2] == "DROP"
|
$alter[$key] = ($val[2] == "DROP"
|
||||||
? "\nDROP INDEX " . idf_escape($val[1])
|
? "\nDROP INDEX " . idf_escape($val[1])
|
||||||
: "\nADD $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "") . ($val[1] != "" ? idf_escape($val[1]) . " " : "") . "(" . implode(", ", $val[2]) . ")"
|
: "\nADD $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "") . ($val[1] != "" ? idf_escape($val[1]) . " " : "") . $val[2]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return queries("ALTER TABLE " . table($table) . implode(",", $alter));
|
return queries("ALTER TABLE " . table($table) . implode(",", $alter));
|
||||||
@@ -734,7 +701,7 @@ if (!defined("DRIVER")) {
|
|||||||
queries("SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'");
|
queries("SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'");
|
||||||
foreach ($tables as $table) {
|
foreach ($tables as $table) {
|
||||||
$name = ($target == DB ? table("copy_$table") : idf_escape($target) . "." . table($table));
|
$name = ($target == DB ? table("copy_$table") : idf_escape($target) . "." . table($table));
|
||||||
if (!queries("\nDROP TABLE IF EXISTS $name")
|
if (!queries("DROP TABLE IF EXISTS $name")
|
||||||
|| !queries("CREATE TABLE $name LIKE " . table($table))
|
|| !queries("CREATE TABLE $name LIKE " . table($table))
|
||||||
|| !queries("INSERT INTO $name SELECT * FROM " . table($table))
|
|| !queries("INSERT INTO $name SELECT * FROM " . table($table))
|
||||||
) {
|
) {
|
||||||
@@ -755,7 +722,7 @@ if (!defined("DRIVER")) {
|
|||||||
|
|
||||||
/** Get information about trigger
|
/** Get information about trigger
|
||||||
* @param string trigger name
|
* @param string trigger name
|
||||||
* @return array array("Trigger" => , "Timing" => , "Event" => , "Of" => , "Type" => , "Statement" => )
|
* @return array array("Trigger" => , "Timing" => , "Event" => , "Type" => , "Statement" => )
|
||||||
*/
|
*/
|
||||||
function trigger($name) {
|
function trigger($name) {
|
||||||
if ($name == "") {
|
if ($name == "") {
|
||||||
@@ -778,12 +745,12 @@ if (!defined("DRIVER")) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Get trigger options
|
/** Get trigger options
|
||||||
* @return array ("Timing" => array(), "Event" => array(), "Type" => array())
|
* @return array ("Timing" => array(), "Type" => array())
|
||||||
*/
|
*/
|
||||||
function trigger_options() {
|
function trigger_options() {
|
||||||
return array(
|
return array(
|
||||||
"Timing" => array("BEFORE", "AFTER"),
|
"Timing" => array("BEFORE", "AFTER"),
|
||||||
"Event" => array("INSERT", "UPDATE", "DELETE"),
|
// Event is always INSERT, UPDATE, DELETE
|
||||||
"Type" => array("FOR EACH ROW"),
|
"Type" => array("FOR EACH ROW"),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -796,7 +763,7 @@ if (!defined("DRIVER")) {
|
|||||||
function routine($name, $type) {
|
function routine($name, $type) {
|
||||||
global $connection, $enum_length, $inout, $types;
|
global $connection, $enum_length, $inout, $types;
|
||||||
$aliases = array("bool", "boolean", "integer", "double precision", "real", "dec", "numeric", "fixed", "national char", "national varchar");
|
$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";
|
$pattern = "\\s*(" . ($type == "FUNCTION" ? "" : $inout) . ")?\\s*(?:`((?:[^`]|``)*)`\\s*|\\b(\\S+)\\s+)$type_pattern";
|
||||||
$create = $connection->result("SHOW CREATE $type " . idf_escape($name), 2);
|
$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);
|
preg_match("~\\(((?:$pattern\\s*,?)*)\\)\\s*" . ($type == "FUNCTION" ? "RETURNS\\s+$type_pattern\\s+" : "") . "(.*)~is", $create, $match);
|
||||||
@@ -840,6 +807,36 @@ if (!defined("DRIVER")) {
|
|||||||
return array(); // "SQL" not required
|
return array(); // "SQL" not required
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Begin transaction
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
function begin() {
|
||||||
|
return queries("BEGIN");
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Insert data into table
|
||||||
|
* @param string
|
||||||
|
* @param array
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
function insert_into($table, $set) {
|
||||||
|
return queries("INSERT INTO " . table($table) . " (" . implode(", ", array_keys($set)) . ")\nVALUES (" . implode(", ", $set) . ")");
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Insert or update data in the table
|
||||||
|
* @param string
|
||||||
|
* @param array
|
||||||
|
* @param array columns in keys
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
function insert_update($table, $set, $primary) {
|
||||||
|
foreach ($set as $key => $val) {
|
||||||
|
$set[$key] = "$key = $val";
|
||||||
|
}
|
||||||
|
$update = implode(", ", $set);
|
||||||
|
return queries("INSERT INTO " . table($table) . " SET $update ON DUPLICATE KEY UPDATE $update");
|
||||||
|
}
|
||||||
|
|
||||||
/** Get last auto increment ID
|
/** Get last auto increment ID
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
@@ -965,13 +962,13 @@ if (!defined("DRIVER")) {
|
|||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function convert_field($field) {
|
function convert_field($field) {
|
||||||
if (preg_match("~binary~", $field["type"])) {
|
if (ereg("binary", $field["type"])) {
|
||||||
return "HEX(" . idf_escape($field["field"]) . ")";
|
return "HEX(" . idf_escape($field["field"]) . ")";
|
||||||
}
|
}
|
||||||
if ($field["type"] == "bit") {
|
if ($field["type"] == "bit") {
|
||||||
return "BIN(" . idf_escape($field["field"]) . " + 0)"; // + 0 is required outside MySQLnd
|
return "BIN(" . idf_escape($field["field"]) . " + 0)"; // + 0 is required outside MySQLnd
|
||||||
}
|
}
|
||||||
if (preg_match("~geometry|point|linestring|polygon~", $field["type"])) {
|
if (ereg("geometry|point|linestring|polygon", $field["type"])) {
|
||||||
return "AsWKT(" . idf_escape($field["field"]) . ")";
|
return "AsWKT(" . idf_escape($field["field"]) . ")";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -982,25 +979,25 @@ if (!defined("DRIVER")) {
|
|||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function unconvert_field($field, $return) {
|
function unconvert_field($field, $return) {
|
||||||
if (preg_match("~binary~", $field["type"])) {
|
if (ereg("binary", $field["type"])) {
|
||||||
$return = "UNHEX($return)";
|
$return = "UNHEX($return)";
|
||||||
}
|
}
|
||||||
if ($field["type"] == "bit") {
|
if ($field["type"] == "bit") {
|
||||||
$return = "CONV($return, 2, 10) + 0";
|
return "CONV($return, 2, 10) + 0";
|
||||||
}
|
}
|
||||||
if (preg_match("~geometry|point|linestring|polygon~", $field["type"])) {
|
if (ereg("geometry|point|linestring|polygon", $field["type"])) {
|
||||||
$return = "GeomFromText($return)";
|
$return = "GeomFromText($return)";
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Check whether a feature is supported
|
/** Check whether a feature is supported
|
||||||
* @param string "comment", "copy", "database", "drop_col", "dump", "event", "kill", "partitioning", "privileges", "procedure", "processlist", "routine", "scheme", "sequence", "status", "table", "trigger", "type", "variables", "view", "view_trigger"
|
* @param string "comment", "copy", "drop_col", "dump", "event", "kill", "partitioning", "privileges", "procedure", "processlist", "routine", "scheme", "sequence", "status", "trigger", "type", "variables", "view"
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function support($feature) {
|
function support($feature) {
|
||||||
global $connection;
|
global $connection;
|
||||||
return !preg_match("~scheme|sequence|type|view_trigger" . ($connection->server_info < 5.1 ? "|event|partitioning" . ($connection->server_info < 5 ? "|routine|trigger|view" : "") : "") . "~", $feature);
|
return !ereg("scheme|sequence|type" . ($connection->server_info < 5.1 ? "|event|partitioning" . ($connection->server_info < 5 ? "|view|routine|trigger" : "") : ""), $feature);
|
||||||
}
|
}
|
||||||
|
|
||||||
$jush = "sql"; ///< @var string JUSH identifier
|
$jush = "sql"; ///< @var string JUSH identifier
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ if (isset($_GET["oracle"])) {
|
|||||||
if (ini_bool("html_errors")) {
|
if (ini_bool("html_errors")) {
|
||||||
$error = html_entity_decode(strip_tags($error));
|
$error = html_entity_decode(strip_tags($error));
|
||||||
}
|
}
|
||||||
$error = preg_replace('~^[^:]*: ~', '', $error);
|
$error = ereg_replace('^[^:]*: ', '', $error);
|
||||||
$this->error = $error;
|
$this->error = $error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -107,7 +107,7 @@ if (isset($_GET["oracle"])) {
|
|||||||
$return->name = oci_field_name($this->_result, $column);
|
$return->name = oci_field_name($this->_result, $column);
|
||||||
$return->orgname = $return->name;
|
$return->orgname = $return->name;
|
||||||
$return->type = oci_field_type($this->_result, $column);
|
$return->type = oci_field_type($this->_result, $column);
|
||||||
$return->charsetnr = (preg_match("~raw|blob|bfile~", $return->type) ? 63 : 0); // 63 - binary
|
$return->charsetnr = (ereg("raw|blob|bfile", $return->type) ? 63 : 0); // 63 - binary
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -132,20 +132,6 @@ if (isset($_GET["oracle"])) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Min_Driver extends Min_SQL {
|
|
||||||
|
|
||||||
//! support empty $set in insert()
|
|
||||||
|
|
||||||
function begin() {
|
|
||||||
return true; // automatic start
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function idf_escape($idf) {
|
function idf_escape($idf) {
|
||||||
return '"' . str_replace('"', '""', $idf) . '"';
|
return '"' . str_replace('"', '""', $idf) . '"';
|
||||||
}
|
}
|
||||||
@@ -195,8 +181,7 @@ if (isset($_GET["oracle"])) {
|
|||||||
|
|
||||||
function tables_list() {
|
function tables_list() {
|
||||||
return get_key_vals("SELECT table_name, 'table' FROM all_tables WHERE tablespace_name = " . q(DB) . "
|
return get_key_vals("SELECT table_name, 'table' FROM all_tables WHERE tablespace_name = " . q(DB) . "
|
||||||
UNION SELECT view_name, 'view' FROM user_views
|
UNION SELECT view_name, 'view' FROM user_views"
|
||||||
ORDER BY 1"
|
|
||||||
); //! views don't have schema
|
); //! views don't have schema
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -208,8 +193,7 @@ ORDER BY 1"
|
|||||||
$return = array();
|
$return = array();
|
||||||
$search = q($name);
|
$search = q($name);
|
||||||
foreach (get_rows('SELECT table_name "Name", \'table\' "Engine", avg_row_len * num_rows "Data_length", num_rows "Rows" FROM all_tables WHERE tablespace_name = ' . q(DB) . ($name != "" ? " AND table_name = $search" : "") . "
|
foreach (get_rows('SELECT table_name "Name", \'table\' "Engine", avg_row_len * num_rows "Data_length", num_rows "Rows" FROM all_tables WHERE tablespace_name = ' . q(DB) . ($name != "" ? " AND table_name = $search" : "") . "
|
||||||
UNION SELECT view_name, 'view', 0, 0 FROM user_views" . ($name != "" ? " WHERE view_name = $search" : "") . "
|
UNION SELECT view_name, 'view', 0, 0 FROM user_views" . ($name != "" ? " WHERE view_name = $search" : "")
|
||||||
ORDER BY 1"
|
|
||||||
) as $row) {
|
) as $row) {
|
||||||
if ($name != "") {
|
if ($name != "") {
|
||||||
return $row;
|
return $row;
|
||||||
@@ -259,11 +243,9 @@ FROM user_ind_columns uic
|
|||||||
LEFT JOIN user_constraints uc ON uic.index_name = uc.constraint_name AND uic.table_name = uc.table_name
|
LEFT JOIN user_constraints uc ON uic.index_name = uc.constraint_name AND uic.table_name = uc.table_name
|
||||||
WHERE uic.table_name = " . q($table) . "
|
WHERE uic.table_name = " . q($table) . "
|
||||||
ORDER BY uc.constraint_type, uic.column_position", $connection2) as $row) {
|
ORDER BY uc.constraint_type, uic.column_position", $connection2) as $row) {
|
||||||
$index_name = $row["INDEX_NAME"];
|
$return[$row["INDEX_NAME"]]["type"] = ($row["CONSTRAINT_TYPE"] == "P" ? "PRIMARY" : ($row["CONSTRAINT_TYPE"] == "U" ? "UNIQUE" : "INDEX"));
|
||||||
$return[$index_name]["type"] = ($row["CONSTRAINT_TYPE"] == "P" ? "PRIMARY" : ($row["CONSTRAINT_TYPE"] == "U" ? "UNIQUE" : "INDEX"));
|
$return[$row["INDEX_NAME"]]["columns"][] = $row["COLUMN_NAME"];
|
||||||
$return[$index_name]["columns"][] = $row["COLUMN_NAME"];
|
$return[$row["INDEX_NAME"]]["lengths"][] = ($row["CHAR_LENGTH"] && $row["CHAR_LENGTH"] != $row["COLUMN_LENGTH"] ? $row["CHAR_LENGTH"] : null);
|
||||||
$return[$index_name]["lengths"][] = ($row["CHAR_LENGTH"] && $row["CHAR_LENGTH"] != $row["COLUMN_LENGTH"] ? $row["CHAR_LENGTH"] : null);
|
|
||||||
$return[$index_name]["descs"][] = ($row["DESCEND"] ? '1' : null);
|
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -286,6 +268,10 @@ ORDER BY uc.constraint_type, uic.column_position", $connection2) as $row) {
|
|||||||
return h($connection->error); //! highlight sqltext from offset
|
return h($connection->error); //! highlight sqltext from offset
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function exact_value($val) {
|
||||||
|
return q($val);
|
||||||
|
}
|
||||||
|
|
||||||
function explain($connection, $query) {
|
function explain($connection, $query) {
|
||||||
$connection->query("EXPLAIN PLAN FOR $query");
|
$connection->query("EXPLAIN PLAN FOR $query");
|
||||||
return $connection->query("SELECT * FROM plan_table");
|
return $connection->query("SELECT * FROM plan_table");
|
||||||
@@ -332,6 +318,14 @@ ORDER BY uc.constraint_type, uic.column_position", $connection2) as $row) {
|
|||||||
return apply_queries("DROP TABLE", $tables);
|
return apply_queries("DROP TABLE", $tables);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function begin() {
|
||||||
|
return true; // automatic start
|
||||||
|
}
|
||||||
|
|
||||||
|
function insert_into($table, $set) {
|
||||||
|
return queries("INSERT INTO " . table($table) . " (" . implode(", ", array_keys($set)) . ")\nVALUES (" . implode(", ", $set) . ")"); //! no columns
|
||||||
|
}
|
||||||
|
|
||||||
function last_id() {
|
function last_id() {
|
||||||
return 0; //!
|
return 0; //!
|
||||||
}
|
}
|
||||||
@@ -376,7 +370,7 @@ ORDER BY PROCESS
|
|||||||
}
|
}
|
||||||
|
|
||||||
function support($feature) {
|
function support($feature) {
|
||||||
return preg_match('~^(columns|database|drop_col|indexes|processlist|scheme|sql|status|table|variables|view|view_trigger)$~', $feature); //!
|
return ereg("view|scheme|processlist|drop_col|variables|status", $feature); //!
|
||||||
}
|
}
|
||||||
|
|
||||||
$jush = "oracle";
|
$jush = "oracle";
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ if (isset($_GET["pgsql"])) {
|
|||||||
if (ini_bool("html_errors")) {
|
if (ini_bool("html_errors")) {
|
||||||
$error = html_entity_decode(strip_tags($error));
|
$error = html_entity_decode(strip_tags($error));
|
||||||
}
|
}
|
||||||
$error = preg_replace('~^[^:]*: ~', '', $error);
|
$error = ereg_replace('^[^:]*: ', '', $error);
|
||||||
$this->error = $error;
|
$this->error = $error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -149,34 +149,6 @@ if (isset($_GET["pgsql"])) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Min_Driver extends Min_SQL {
|
|
||||||
|
|
||||||
function insertUpdate($table, $rows, $primary) {
|
|
||||||
global $connection;
|
|
||||||
foreach ($rows as $set) {
|
|
||||||
$update = array();
|
|
||||||
$where = array();
|
|
||||||
foreach ($set as $key => $val) {
|
|
||||||
$update[] = "$key = $val";
|
|
||||||
if (isset($primary[idf_unescape($key)])) {
|
|
||||||
$where[] = "$key = $val";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!(($where && queries("UPDATE " . table($table) . " SET " . implode(", ", $update) . " WHERE " . implode(" AND ", $where)) && $connection->affected_rows)
|
|
||||||
|| queries("INSERT INTO " . table($table) . " (" . implode(", ", array_keys($set)) . ") VALUES (" . implode(", ", $set) . ")")
|
|
||||||
)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function idf_escape($idf) {
|
function idf_escape($idf) {
|
||||||
return '"' . str_replace('"', '""', $idf) . '"';
|
return '"' . str_replace('"', '""', $idf) . '"';
|
||||||
}
|
}
|
||||||
@@ -234,11 +206,11 @@ if (isset($_GET["pgsql"])) {
|
|||||||
|
|
||||||
function table_status($name = "") {
|
function table_status($name = "") {
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows("SELECT relname AS \"Name\", CASE relkind WHEN 'r' THEN 'table' ELSE 'view' END AS \"Engine\", pg_relation_size(oid) AS \"Data_length\", pg_total_relation_size(oid) - pg_relation_size(oid) AS \"Index_length\", obj_description(oid, 'pg_class') AS \"Comment\", relhasoids::int AS \"Oid\", reltuples as \"Rows\"
|
foreach (get_rows("SELECT relname AS \"Name\", CASE relkind WHEN 'r' THEN 'table' ELSE 'view' END AS \"Engine\", pg_relation_size(oid) AS \"Data_length\", pg_total_relation_size(oid) - pg_relation_size(oid) AS \"Index_length\", obj_description(oid, 'pg_class') AS \"Comment\", relhasoids AS \"Oid\", reltuples as \"Rows\"
|
||||||
FROM pg_class
|
FROM pg_class
|
||||||
WHERE relkind IN ('r','v')
|
WHERE relkind IN ('r','v')
|
||||||
AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema())
|
AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema())"
|
||||||
" . ($name != "" ? "AND relname = " . q($name) : "ORDER BY relname")
|
. ($name != "" ? " AND relname = " . q($name) : "")
|
||||||
) as $row) { //! Index_length, Auto_increment
|
) as $row) { //! Index_length, Auto_increment
|
||||||
$return[$row["Name"]] = $row;
|
$return[$row["Name"]] = $row;
|
||||||
}
|
}
|
||||||
@@ -255,10 +227,6 @@ AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema(
|
|||||||
|
|
||||||
function fields($table) {
|
function fields($table) {
|
||||||
$return = array();
|
$return = array();
|
||||||
$aliases = array(
|
|
||||||
'timestamp without time zone' => 'timestamp',
|
|
||||||
'timestamp with time zone' => 'timestamptz',
|
|
||||||
);
|
|
||||||
foreach (get_rows("SELECT a.attname AS field, format_type(a.atttypid, a.atttypmod) AS full_type, d.adsrc AS default, a.attnotnull::int, col_description(c.oid, a.attnum) AS comment
|
foreach (get_rows("SELECT a.attname AS field, format_type(a.atttypid, a.atttypmod) AS full_type, d.adsrc AS default, a.attnotnull::int, col_description(c.oid, a.attnum) AS comment
|
||||||
FROM pg_class c
|
FROM pg_class c
|
||||||
JOIN pg_namespace n ON c.relnamespace = n.oid
|
JOIN pg_namespace n ON c.relnamespace = n.oid
|
||||||
@@ -271,16 +239,14 @@ AND a.attnum > 0
|
|||||||
ORDER BY a.attnum"
|
ORDER BY a.attnum"
|
||||||
) as $row) {
|
) as $row) {
|
||||||
//! collation, primary
|
//! collation, primary
|
||||||
preg_match('~([^([]+)(\((.*)\))?((\[[0-9]*])*)$~', $row["full_type"], $match);
|
ereg('(.*)(\\((.*)\\))?', $row["full_type"], $match);
|
||||||
list(, $type, $length, $row["length"], $array) = $match;
|
list(, $row["type"], , $row["length"]) = $match;
|
||||||
$row["length"] .= $array;
|
$row["full_type"] = $row["type"] . ($row["length"] ? "($row[length])" : "");
|
||||||
$row["type"] = ($aliases[$type] ? $aliases[$type] : $type);
|
|
||||||
$row["full_type"] = $row["type"] . $length . $array;
|
|
||||||
$row["null"] = !$row["attnotnull"];
|
$row["null"] = !$row["attnotnull"];
|
||||||
$row["auto_increment"] = preg_match('~^nextval\\(~i', $row["default"]);
|
$row["auto_increment"] = eregi("^nextval\\(", $row["default"]);
|
||||||
$row["privileges"] = array("insert" => 1, "select" => 1, "update" => 1);
|
$row["privileges"] = array("insert" => 1, "select" => 1, "update" => 1);
|
||||||
if (preg_match('~(.+)::[^)]+(.*)~', $row["default"], $match)) {
|
if (preg_match('~^(.*)::.+$~', $row["default"], $match)) {
|
||||||
$row["default"] = ($match[1][0] == "'" ? idf_unescape($match[1]) : $match[1]) . $match[2];
|
$row["default"] = ($match[1][0] == "'" ? idf_unescape($match[1]) : $match[1]);
|
||||||
}
|
}
|
||||||
$return[$row["field"]] = $row;
|
$return[$row["field"]] = $row;
|
||||||
}
|
}
|
||||||
@@ -295,18 +261,13 @@ ORDER BY a.attnum"
|
|||||||
$return = array();
|
$return = array();
|
||||||
$table_oid = $connection2->result("SELECT oid FROM pg_class WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema()) AND relname = " . q($table));
|
$table_oid = $connection2->result("SELECT oid FROM pg_class WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema()) AND relname = " . q($table));
|
||||||
$columns = get_key_vals("SELECT attnum, attname FROM pg_attribute WHERE attrelid = $table_oid AND attnum > 0", $connection2);
|
$columns = get_key_vals("SELECT attnum, attname FROM pg_attribute WHERE attrelid = $table_oid AND attnum > 0", $connection2);
|
||||||
foreach (get_rows("SELECT relname, indisunique::int, indisprimary::int, indkey, indoption FROM pg_index i, pg_class ci WHERE i.indrelid = $table_oid AND ci.oid = i.indexrelid", $connection2) as $row) {
|
foreach (get_rows("SELECT relname, indisunique::int, indisprimary::int, indkey FROM pg_index i, pg_class ci WHERE i.indrelid = $table_oid AND ci.oid = i.indexrelid", $connection2) as $row) {
|
||||||
$relname = $row["relname"];
|
$return[$row["relname"]]["type"] = ($row["indisprimary"] ? "PRIMARY" : ($row["indisunique"] ? "UNIQUE" : "INDEX"));
|
||||||
$return[$relname]["type"] = ($row["indisprimary"] ? "PRIMARY" : ($row["indisunique"] ? "UNIQUE" : "INDEX"));
|
$return[$row["relname"]]["columns"] = array();
|
||||||
$return[$relname]["columns"] = array();
|
|
||||||
foreach (explode(" ", $row["indkey"]) as $indkey) {
|
foreach (explode(" ", $row["indkey"]) as $indkey) {
|
||||||
$return[$relname]["columns"][] = $columns[$indkey];
|
$return[$row["relname"]]["columns"][] = $columns[$indkey];
|
||||||
}
|
}
|
||||||
$return[$relname]["descs"] = array();
|
$return[$row["relname"]]["lengths"] = array();
|
||||||
foreach (explode(" ", $row["indoption"]) as $indoption) {
|
|
||||||
$return[$relname]["descs"][] = ($indoption & 1 ? '1' : null); // 1 - INDOPTION_DESC
|
|
||||||
}
|
|
||||||
$return[$relname]["lengths"] = array();
|
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -321,9 +282,10 @@ AND contype = 'f'::char
|
|||||||
ORDER BY conkey, conname") as $row) {
|
ORDER BY conkey, conname") as $row) {
|
||||||
if (preg_match('~FOREIGN KEY\s*\((.+)\)\s*REFERENCES (.+)\((.+)\)(.*)$~iA', $row['definition'], $match)) {
|
if (preg_match('~FOREIGN KEY\s*\((.+)\)\s*REFERENCES (.+)\((.+)\)(.*)$~iA', $row['definition'], $match)) {
|
||||||
$row['source'] = array_map('trim', explode(',', $match[1]));
|
$row['source'] = array_map('trim', explode(',', $match[1]));
|
||||||
if (preg_match('~^(("([^"]|"")+"|[^"]+)\.)?"?("([^"]|"")+"|[^"]+)$~', $match[2], $match2)) {
|
$row['table'] = $match[2];
|
||||||
$row['ns'] = str_replace('""', '"', preg_replace('~^"(.+)"$~', '\1', $match2[2]));
|
if (preg_match('~(.+)\.(.+)~', $match[2], $match2)) {
|
||||||
$row['table'] = str_replace('""', '"', preg_replace('~^"(.+)"$~', '\1', $match2[4]));
|
$row['ns'] = $match2[1];
|
||||||
|
$row['table'] = $match2[2];
|
||||||
}
|
}
|
||||||
$row['target'] = array_map('trim', explode(',', $match[3]));
|
$row['target'] = array_map('trim', explode(',', $match[3]));
|
||||||
$row['on_delete'] = (preg_match("~ON DELETE ($on_actions)~", $match[4], $match2) ? $match2[1] : 'NO ACTION');
|
$row['on_delete'] = (preg_match("~ON DELETE ($on_actions)~", $match[4], $match2) ? $match2[1] : 'NO ACTION');
|
||||||
@@ -357,6 +319,10 @@ ORDER BY conkey, conname") as $row) {
|
|||||||
return nl_br($return);
|
return nl_br($return);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function exact_value($val) {
|
||||||
|
return q($val);
|
||||||
|
}
|
||||||
|
|
||||||
function create_database($db, $collation) {
|
function create_database($db, $collation) {
|
||||||
return queries("CREATE DATABASE " . idf_escape($db) . ($collation ? " ENCODING " . idf_escape($collation) : ""));
|
return queries("CREATE DATABASE " . idf_escape($db) . ($collation ? " ENCODING " . idf_escape($collation) : ""));
|
||||||
}
|
}
|
||||||
@@ -398,7 +364,7 @@ ORDER BY conkey, conname") as $row) {
|
|||||||
}
|
}
|
||||||
$alter[] = "ALTER $column TYPE$val[1]";
|
$alter[] = "ALTER $column TYPE$val[1]";
|
||||||
if (!$val[6]) {
|
if (!$val[6]) {
|
||||||
$alter[] = "ALTER $column " . ($val[3] ? "SET$val[3]" : "DROP DEFAULT");
|
$alter[] = "ALTER $column " . ($val[3] ? "SET$val[3]" : "DROP DEFAULT"); //! quoting
|
||||||
$alter[] = "ALTER $column " . ($val[2] == " NULL" ? "DROP NOT" : "SET") . $val[2];
|
$alter[] = "ALTER $column " . ($val[2] == " NULL" ? "DROP NOT" : "SET") . $val[2];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -433,32 +399,21 @@ ORDER BY conkey, conname") as $row) {
|
|||||||
function alter_indexes($table, $alter) {
|
function alter_indexes($table, $alter) {
|
||||||
$create = array();
|
$create = array();
|
||||||
$drop = array();
|
$drop = array();
|
||||||
$queries = array();
|
|
||||||
foreach ($alter as $val) {
|
foreach ($alter as $val) {
|
||||||
if ($val[0] != "INDEX") {
|
if ($val[0] != "INDEX") {
|
||||||
//! descending UNIQUE indexes results in syntax error
|
|
||||||
$create[] = ($val[2] == "DROP"
|
$create[] = ($val[2] == "DROP"
|
||||||
? "\nDROP CONSTRAINT " . idf_escape($val[1])
|
? "\nDROP CONSTRAINT " . idf_escape($val[1])
|
||||||
: "\nADD" . ($val[1] != "" ? " CONSTRAINT " . idf_escape($val[1]) : "") . " $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "") . "(" . implode(", ", $val[2]) . ")"
|
: "\nADD $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "") . $val[2]
|
||||||
);
|
);
|
||||||
} elseif ($val[2] == "DROP") {
|
} elseif ($val[2] == "DROP") {
|
||||||
$drop[] = idf_escape($val[1]);
|
$drop[] = idf_escape($val[1]);
|
||||||
} else {
|
} elseif (!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) {
|
|
||||||
array_unshift($queries, "ALTER TABLE " . table($table) . implode(",", $create));
|
|
||||||
}
|
|
||||||
if ($drop) {
|
|
||||||
array_unshift($queries, "DROP INDEX " . implode(", ", $drop));
|
|
||||||
}
|
|
||||||
foreach ($queries as $query) {
|
|
||||||
if (!queries($query)) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return ((!$create || queries("ALTER TABLE " . table($table) . implode(",", $create)))
|
||||||
|
&& (!$drop || queries("DROP INDEX " . implode(", ", $drop)))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function truncate_tables($tables) {
|
function truncate_tables($tables) {
|
||||||
@@ -507,7 +462,6 @@ ORDER BY conkey, conname") as $row) {
|
|||||||
function trigger_options() {
|
function trigger_options() {
|
||||||
return array(
|
return array(
|
||||||
"Timing" => array("BEFORE", "AFTER"),
|
"Timing" => array("BEFORE", "AFTER"),
|
||||||
"Event" => array("INSERT", "UPDATE", "DELETE"),
|
|
||||||
"Type" => array("FOR EACH ROW", "FOR EACH STATEMENT"),
|
"Type" => array("FOR EACH ROW", "FOR EACH STATEMENT"),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -538,6 +492,29 @@ ORDER BY p.proname');
|
|||||||
return get_vals("SELECT langname FROM pg_catalog.pg_language");
|
return get_vals("SELECT langname FROM pg_catalog.pg_language");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function begin() {
|
||||||
|
return queries("BEGIN");
|
||||||
|
}
|
||||||
|
|
||||||
|
function insert_into($table, $set) {
|
||||||
|
return queries("INSERT INTO " . table($table) . ($set ? " (" . implode(", ", array_keys($set)) . ")\nVALUES (" . implode(", ", $set) . ")" : "DEFAULT VALUES"));
|
||||||
|
}
|
||||||
|
|
||||||
|
function insert_update($table, $set, $primary) {
|
||||||
|
global $connection;
|
||||||
|
$update = array();
|
||||||
|
$where = array();
|
||||||
|
foreach ($set as $key => $val) {
|
||||||
|
$update[] = "$key = $val";
|
||||||
|
if (isset($primary[idf_unescape($key)])) {
|
||||||
|
$where[] = "$key = $val";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ($where && queries("UPDATE " . table($table) . " SET " . implode(", ", $update) . " WHERE " . implode(" AND ", $where)) && $connection->affected_rows)
|
||||||
|
|| queries("INSERT INTO " . table($table) . " (" . implode(", ", array_keys($set)) . ") VALUES (" . implode(", ", $set) . ")")
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
function last_id() {
|
function last_id() {
|
||||||
return 0; // there can be several sequences
|
return 0; // there can be several sequences
|
||||||
}
|
}
|
||||||
@@ -548,8 +525,8 @@ ORDER BY p.proname');
|
|||||||
|
|
||||||
function found_rows($table_status, $where) {
|
function found_rows($table_status, $where) {
|
||||||
global $connection;
|
global $connection;
|
||||||
if (preg_match(
|
if (ereg(
|
||||||
"~ rows=([0-9]+)~",
|
" rows=([0-9]+)",
|
||||||
$connection->result("EXPLAIN SELECT * FROM " . idf_escape($table_status["Name"]) . ($where ? " WHERE " . implode(" AND ", $where) : "")),
|
$connection->result("EXPLAIN SELECT * FROM " . idf_escape($table_status["Name"]) . ($where ? " WHERE " . implode(" AND ", $where) : "")),
|
||||||
$regs
|
$regs
|
||||||
)) {
|
)) {
|
||||||
@@ -612,7 +589,7 @@ AND typelem = 0"
|
|||||||
}
|
}
|
||||||
|
|
||||||
function support($feature) {
|
function support($feature) {
|
||||||
return preg_match('~^(database|table|columns|sql|indexes|comment|view|scheme|processlist|sequence|trigger|type|variables|drop_col)$~', $feature); //! routine|
|
return ereg('^(comment|view|scheme|processlist|sequence|trigger|type|variables|drop_col)$', $feature); //! routine|
|
||||||
}
|
}
|
||||||
|
|
||||||
$jush = "pgsql";
|
$jush = "pgsql";
|
||||||
|
|||||||
@@ -1,473 +0,0 @@
|
|||||||
<?php
|
|
||||||
$drivers["simpledb"] = "SimpleDB";
|
|
||||||
|
|
||||||
if (isset($_GET["simpledb"])) {
|
|
||||||
$possible_drivers = array("SimpleXML");
|
|
||||||
define("DRIVER", "simpledb");
|
|
||||||
|
|
||||||
if (class_exists('SimpleXMLElement')) {
|
|
||||||
class Min_DB {
|
|
||||||
var $extension = "SimpleXML", $server_info = '2009-04-15', $error, $timeout, $next, $affected_rows, $_result;
|
|
||||||
|
|
||||||
function select_db($database) {
|
|
||||||
return ($database == "domain");
|
|
||||||
}
|
|
||||||
|
|
||||||
function query($query, $unbuffered = false) {
|
|
||||||
$params = array('SelectExpression' => $query, 'ConsistentRead' => 'true');
|
|
||||||
if ($this->next) {
|
|
||||||
$params['NextToken'] = $this->next;
|
|
||||||
}
|
|
||||||
$result = sdb_request_all('Select', 'Item', $params, $this->timeout); //! respect $unbuffered
|
|
||||||
if ($result === false) {
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
if (preg_match('~^\s*SELECT\s+COUNT\(~i', $query)) {
|
|
||||||
$sum = 0;
|
|
||||||
foreach ($result as $item) {
|
|
||||||
$sum += $item->Attribute->Value;
|
|
||||||
}
|
|
||||||
$result = array((object) array('Attribute' => array((object) array(
|
|
||||||
'Name' => 'Count',
|
|
||||||
'Value' => $sum,
|
|
||||||
))));
|
|
||||||
}
|
|
||||||
return new Min_Result($result);
|
|
||||||
}
|
|
||||||
|
|
||||||
function multi_query($query) {
|
|
||||||
return $this->_result = $this->query($query);
|
|
||||||
}
|
|
||||||
|
|
||||||
function store_result() {
|
|
||||||
return $this->_result;
|
|
||||||
}
|
|
||||||
|
|
||||||
function next_result() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function quote($string) {
|
|
||||||
return "'" . str_replace("'", "''", $string) . "'";
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
class Min_Result {
|
|
||||||
var $num_rows, $_rows = array(), $_offset = 0;
|
|
||||||
|
|
||||||
function Min_Result($result) {
|
|
||||||
foreach ($result as $item) {
|
|
||||||
$row = array();
|
|
||||||
if ($item->Name != '') { // SELECT COUNT(*)
|
|
||||||
$row['itemName()'] = (string) $item->Name;
|
|
||||||
}
|
|
||||||
foreach ($item->Attribute as $attribute) {
|
|
||||||
$name = $this->_processValue($attribute->Name);
|
|
||||||
$value = $this->_processValue($attribute->Value);
|
|
||||||
if (isset($row[$name])) {
|
|
||||||
$row[$name] = (array) $row[$name];
|
|
||||||
$row[$name][] = $value;
|
|
||||||
} else {
|
|
||||||
$row[$name] = $value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$this->_rows[] = $row;
|
|
||||||
foreach ($row as $key => $val) {
|
|
||||||
if (!isset($this->_rows[0][$key])) {
|
|
||||||
$this->_rows[0][$key] = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$this->num_rows = count($this->_rows);
|
|
||||||
}
|
|
||||||
|
|
||||||
function _processValue($element) {
|
|
||||||
return (is_object($element) && $element['encoding'] == 'base64' ? base64_decode($element) : (string) $element);
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetch_assoc() {
|
|
||||||
$row = current($this->_rows);
|
|
||||||
if (!$row) {
|
|
||||||
return $row;
|
|
||||||
}
|
|
||||||
$return = array();
|
|
||||||
foreach ($this->_rows[0] as $key => $val) {
|
|
||||||
$return[$key] = $row[$key];
|
|
||||||
}
|
|
||||||
next($this->_rows);
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetch_row() {
|
|
||||||
$return = $this->fetch_assoc();
|
|
||||||
if (!$return) {
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
return array_values($return);
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetch_field() {
|
|
||||||
$keys = array_keys($this->_rows[0]);
|
|
||||||
return (object) array('name' => $keys[$this->_offset++]);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Min_Driver extends Min_SQL {
|
|
||||||
public $primary = "itemName()";
|
|
||||||
|
|
||||||
function _chunkRequest($ids, $action, $params, $expand = array()) {
|
|
||||||
global $connection;
|
|
||||||
foreach (array_chunk($ids, 25) as $chunk) {
|
|
||||||
$params2 = $params;
|
|
||||||
foreach ($chunk as $i => $id) {
|
|
||||||
$params2["Item.$i.ItemName"] = $id;
|
|
||||||
foreach ($expand as $key => $val) {
|
|
||||||
$params2["Item.$i.$key"] = $val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!sdb_request($action, $params2)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$connection->affected_rows = count($ids);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function _extractIds($table, $queryWhere, $limit) {
|
|
||||||
$return = array();
|
|
||||||
if (preg_match_all("~itemName\(\) = (('[^']*+')+)~", $queryWhere, $matches)) {
|
|
||||||
$return = array_map('idf_unescape', $matches[1]);
|
|
||||||
} else {
|
|
||||||
foreach (sdb_request_all('Select', 'Item', array('SelectExpression' => 'SELECT itemName() FROM ' . table($table) . $queryWhere . ($limit ? " LIMIT 1" : ""))) as $item) {
|
|
||||||
$return[] = $item->Name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
$connection->next = 0;
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function delete($table, $queryWhere, $limit = 0) {
|
|
||||||
return $this->_chunkRequest(
|
|
||||||
$this->_extractIds($table, $queryWhere, $limit),
|
|
||||||
'BatchDeleteAttributes',
|
|
||||||
array('DomainName' => $table)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function update($table, $set, $queryWhere, $limit = 0, $separator = "\n") {
|
|
||||||
$delete = array();
|
|
||||||
$insert = array();
|
|
||||||
$i = 0;
|
|
||||||
$ids = $this->_extractIds($table, $queryWhere, $limit);
|
|
||||||
$id = idf_unescape($set["`itemName()`"]);
|
|
||||||
unset($set["`itemName()`"]);
|
|
||||||
foreach ($set as $key => $val) {
|
|
||||||
$key = idf_unescape($key);
|
|
||||||
if ($val == "NULL" || ($id != "" && array($id) != $ids)) {
|
|
||||||
$delete["Attribute." . count($delete) . ".Name"] = $key;
|
|
||||||
}
|
|
||||||
if ($val != "NULL") {
|
|
||||||
foreach ((array) $val as $k => $v) {
|
|
||||||
$insert["Attribute.$i.Name"] = $key;
|
|
||||||
$insert["Attribute.$i.Value"] = (is_array($val) ? $v : idf_unescape($v));
|
|
||||||
if (!$k) {
|
|
||||||
$insert["Attribute.$i.Replace"] = "true";
|
|
||||||
}
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$params = array('DomainName' => $table);
|
|
||||||
return (!$insert || $this->_chunkRequest(($id != "" ? array($id) : $ids), 'BatchPutAttributes', $params, $insert))
|
|
||||||
&& (!$delete || $this->_chunkRequest($ids, 'BatchDeleteAttributes', $params, $delete))
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
function insert($table, $set) {
|
|
||||||
$params = array("DomainName" => $table);
|
|
||||||
$i = 0;
|
|
||||||
foreach ($set as $name => $value) {
|
|
||||||
if ($value != "NULL") {
|
|
||||||
$name = idf_unescape($name);
|
|
||||||
if ($name == "itemName()") {
|
|
||||||
$params["ItemName"] = idf_unescape($value);
|
|
||||||
} else {
|
|
||||||
foreach ((array) $value as $val) {
|
|
||||||
$params["Attribute.$i.Name"] = $name;
|
|
||||||
$params["Attribute.$i.Value"] = (is_array($value) ? $val : idf_unescape($value));
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return sdb_request('PutAttributes', $params);
|
|
||||||
}
|
|
||||||
|
|
||||||
function insertUpdate($table, $rows, $primary) {
|
|
||||||
//! use one batch request
|
|
||||||
foreach ($rows as $set) {
|
|
||||||
if (!$this->update($table, $set, "WHERE `itemName()` = " . q($set["`itemName()`"]))) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function begin() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function commit() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function rollback() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function connect() {
|
|
||||||
return new Min_DB;
|
|
||||||
}
|
|
||||||
|
|
||||||
function support($feature) {
|
|
||||||
return preg_match('~sql~', $feature);
|
|
||||||
}
|
|
||||||
|
|
||||||
function logged_user() {
|
|
||||||
global $adminer;
|
|
||||||
$credentials = $adminer->credentials();
|
|
||||||
return $credentials[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
function get_databases() {
|
|
||||||
return array("domain");
|
|
||||||
}
|
|
||||||
|
|
||||||
function collations() {
|
|
||||||
return array();
|
|
||||||
}
|
|
||||||
|
|
||||||
function db_collation($db, $collations) {
|
|
||||||
}
|
|
||||||
|
|
||||||
function tables_list() {
|
|
||||||
global $connection;
|
|
||||||
$return = array();
|
|
||||||
foreach (sdb_request_all('ListDomains', 'DomainName') as $table) {
|
|
||||||
$return[(string) $table] = 'table';
|
|
||||||
}
|
|
||||||
if ($connection->error && defined("PAGE_HEADER")) {
|
|
||||||
echo "<p class='error'>" . error() . "\n";
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function table_status($name = "", $fast = false) {
|
|
||||||
$return = array();
|
|
||||||
foreach (($name != "" ? array($name => true) : tables_list()) as $table => $type) {
|
|
||||||
$row = array("Name" => $table, "Auto_increment" => "");
|
|
||||||
if (!$fast) {
|
|
||||||
$meta = sdb_request('DomainMetadata', array('DomainName' => $table));
|
|
||||||
if ($meta) {
|
|
||||||
foreach (array(
|
|
||||||
"Rows" => "ItemCount",
|
|
||||||
"Data_length" => "ItemNamesSizeBytes",
|
|
||||||
"Index_length" => "AttributeValuesSizeBytes",
|
|
||||||
"Data_free" => "AttributeNamesSizeBytes",
|
|
||||||
) as $key => $val) {
|
|
||||||
$row[$key] = (string) $meta->$val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($name != "") {
|
|
||||||
return $row;
|
|
||||||
}
|
|
||||||
$return[$table] = $row;
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function explain($connection, $query) {
|
|
||||||
}
|
|
||||||
|
|
||||||
function error() {
|
|
||||||
global $connection;
|
|
||||||
return h($connection->error);
|
|
||||||
}
|
|
||||||
|
|
||||||
function information_schema() {
|
|
||||||
}
|
|
||||||
|
|
||||||
function is_view($table_status) {
|
|
||||||
}
|
|
||||||
|
|
||||||
function indexes($table, $connection2 = null) {
|
|
||||||
return array(
|
|
||||||
array("type" => "PRIMARY", "columns" => array("itemName()")),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function fields($table) {
|
|
||||||
return fields_from_edit();
|
|
||||||
}
|
|
||||||
|
|
||||||
function foreign_keys($table) {
|
|
||||||
return array();
|
|
||||||
}
|
|
||||||
|
|
||||||
function table($idf) {
|
|
||||||
return idf_escape($idf);
|
|
||||||
}
|
|
||||||
|
|
||||||
function idf_escape($idf) {
|
|
||||||
return "`" . str_replace("`", "``", $idf) . "`";
|
|
||||||
}
|
|
||||||
|
|
||||||
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
|
|
||||||
return " $query$where" . ($limit !== null ? $separator . "LIMIT $limit" : "");
|
|
||||||
}
|
|
||||||
|
|
||||||
function unconvert_field($field, $return) {
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function fk_support($table_status) {
|
|
||||||
}
|
|
||||||
|
|
||||||
function engines() {
|
|
||||||
return array();
|
|
||||||
}
|
|
||||||
|
|
||||||
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
|
|
||||||
return ($table == "" && sdb_request('CreateDomain', array('DomainName' => $name)));
|
|
||||||
}
|
|
||||||
|
|
||||||
function drop_tables($tables) {
|
|
||||||
foreach ($tables as $table) {
|
|
||||||
if (!sdb_request('DeleteDomain', array('DomainName' => $table))) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function count_tables($databases) {
|
|
||||||
foreach ($databases as $db) {
|
|
||||||
return array($db => count(tables_list()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function found_rows($table_status, $where) {
|
|
||||||
return ($where ? null : $table_status["Rows"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
function last_id() {
|
|
||||||
}
|
|
||||||
|
|
||||||
function hmac($algo, $data, $key, $raw_output = false) {
|
|
||||||
// can use hash_hmac() since PHP 5.1.2
|
|
||||||
$blocksize = 64;
|
|
||||||
if (strlen($key) > $blocksize) {
|
|
||||||
$key = pack("H*", $algo($key));
|
|
||||||
}
|
|
||||||
$key = str_pad($key, $blocksize, "\0");
|
|
||||||
$k_ipad = $key ^ str_repeat("\x36", $blocksize);
|
|
||||||
$k_opad = $key ^ str_repeat("\x5C", $blocksize);
|
|
||||||
$return = $algo($k_opad . pack("H*", $algo($k_ipad . $data)));
|
|
||||||
if ($raw_output) {
|
|
||||||
$return = pack("H*", $return);
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function sdb_request($action, $params = array()) {
|
|
||||||
global $adminer, $connection;
|
|
||||||
list($host, $params['AWSAccessKeyId'], $secret) = $adminer->credentials();
|
|
||||||
$params['Action'] = $action;
|
|
||||||
$params['Timestamp'] = gmdate('Y-m-d\TH:i:s+00:00');
|
|
||||||
$params['Version'] = '2009-04-15';
|
|
||||||
$params['SignatureVersion'] = 2;
|
|
||||||
$params['SignatureMethod'] = 'HmacSHA1';
|
|
||||||
ksort($params);
|
|
||||||
$query = '';
|
|
||||||
foreach ($params as $key => $val) {
|
|
||||||
$query .= '&' . rawurlencode($key) . '=' . rawurlencode($val);
|
|
||||||
}
|
|
||||||
$query = str_replace('%7E', '~', substr($query, 1));
|
|
||||||
$query .= "&Signature=" . urlencode(base64_encode(hmac('sha1', "POST\n" . preg_replace('~^https?://~', '', $host) . "\n/\n$query", $secret, true)));
|
|
||||||
@ini_set('track_errors', 1); // @ - may be disabled
|
|
||||||
$file = @file_get_contents((preg_match('~^https?://~', $host) ? $host : "http://$host"), false, stream_context_create(array('http' => array(
|
|
||||||
'method' => 'POST', // may not fit in URL with GET
|
|
||||||
'content' => $query,
|
|
||||||
'ignore_errors' => 1, // available since PHP 5.2.10
|
|
||||||
))));
|
|
||||||
if (!$file) {
|
|
||||||
$connection->error = $php_errormsg;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
libxml_use_internal_errors(true);
|
|
||||||
$xml = simplexml_load_string($file);
|
|
||||||
if (!$xml) {
|
|
||||||
$error = libxml_get_last_error();
|
|
||||||
$connection->error = $error->message;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if ($xml->Errors) {
|
|
||||||
$error = $xml->Errors->Error;
|
|
||||||
$connection->error = "$error->Message ($error->Code)";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$connection->error = '';
|
|
||||||
$tag = $action . "Result";
|
|
||||||
return ($xml->$tag ? $xml->$tag : true);
|
|
||||||
}
|
|
||||||
|
|
||||||
function sdb_request_all($action, $tag, $params = array(), $timeout = 0) {
|
|
||||||
$return = array();
|
|
||||||
$start = ($timeout ? microtime(true) : 0);
|
|
||||||
$limit = (preg_match('~LIMIT\s+(\d+)\s*$~i', $params['SelectExpression'], $match) ? $match[1] : 0);
|
|
||||||
do {
|
|
||||||
$xml = sdb_request($action, $params);
|
|
||||||
if (!$xml) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
foreach ($xml->$tag as $element) {
|
|
||||||
$return[] = $element;
|
|
||||||
}
|
|
||||||
if ($limit && count($return) >= $limit) {
|
|
||||||
$_GET["next"] = $xml->NextToken;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if ($timeout && microtime(true) - $start > $timeout) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$params['NextToken'] = $xml->NextToken;
|
|
||||||
if ($limit) {
|
|
||||||
$params['SelectExpression'] = preg_replace('~\d+\s*$~', $limit - count($return), $params['SelectExpression']);
|
|
||||||
}
|
|
||||||
} while ($xml->NextToken);
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$jush = "simpledb";
|
|
||||||
$operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "IS NOT NULL");
|
|
||||||
$functions = array();
|
|
||||||
$grouping = array("count");
|
|
||||||
$edit_functions = array(array("json"));
|
|
||||||
}
|
|
||||||
@@ -187,7 +187,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function select_db($filename) {
|
function select_db($filename) {
|
||||||
if (is_readable($filename) && $this->query("ATTACH " . $this->quote(preg_match("~(^[/\\\\]|:)~", $filename) ? $filename : dirname($_SERVER["SCRIPT_FILENAME"]) . "/$filename") . " AS a")) { // is_readable - SQLite 3
|
if (is_readable($filename) && $this->query("ATTACH " . $this->quote(ereg("(^[/\\\\]|:)", $filename) ? $filename : dirname($_SERVER["SCRIPT_FILENAME"]) . "/$filename") . " AS a")) { // is_readable - SQLite 3
|
||||||
$this->Min_SQLite($filename);
|
$this->Min_SQLite($filename);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -204,22 +204,6 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Min_Driver extends Min_SQL {
|
|
||||||
|
|
||||||
function insertUpdate($table, $rows, $primary) {
|
|
||||||
$values = array();
|
|
||||||
foreach ($rows as $set) {
|
|
||||||
$values[] = "(" . implode(", ", $set) . ")";
|
|
||||||
}
|
|
||||||
return queries("REPLACE INTO " . table($table) . " (" . implode(", ", array_keys(reset($rows))) . ") VALUES\n" . implode(",\n", $values));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function idf_escape($idf) {
|
function idf_escape($idf) {
|
||||||
return '"' . str_replace('"', '""', $idf) . '"';
|
return '"' . str_replace('"', '""', $idf) . '"';
|
||||||
}
|
}
|
||||||
@@ -269,8 +253,8 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
function table_status($name = "") {
|
function table_status($name = "") {
|
||||||
global $connection;
|
global $connection;
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows("SELECT name AS Name, type AS Engine FROM sqlite_master WHERE type IN ('table', 'view') " . ($name != "" ? "AND name = " . q($name) : "ORDER BY name")) as $row) {
|
foreach (get_rows("SELECT name AS Name, type AS Engine FROM sqlite_master WHERE type IN ('table', 'view')" . ($name != "" ? " AND name = " . q($name) : "")) as $row) {
|
||||||
$row["Oid"] = 1;
|
$row["Oid"] = "t";
|
||||||
$row["Auto_increment"] = "";
|
$row["Auto_increment"] = "";
|
||||||
$row["Rows"] = $connection->result("SELECT COUNT(*) FROM " . idf_escape($row["Name"]));
|
$row["Rows"] = $connection->result("SELECT COUNT(*) FROM " . idf_escape($row["Name"]));
|
||||||
$return[$row["Name"]] = $row;
|
$return[$row["Name"]] = $row;
|
||||||
@@ -291,85 +275,43 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function fields($table) {
|
function fields($table) {
|
||||||
global $connection;
|
|
||||||
$return = array();
|
$return = array();
|
||||||
$primary = "";
|
|
||||||
foreach (get_rows("PRAGMA table_info(" . table($table) . ")") as $row) {
|
foreach (get_rows("PRAGMA table_info(" . table($table) . ")") as $row) {
|
||||||
$name = $row["name"];
|
|
||||||
$type = strtolower($row["type"]);
|
$type = strtolower($row["type"]);
|
||||||
$default = $row["dflt_value"];
|
$default = $row["dflt_value"];
|
||||||
$return[$name] = array(
|
$return[$row["name"]] = array(
|
||||||
"field" => $name,
|
"field" => $row["name"],
|
||||||
"type" => (preg_match('~int~i', $type) ? "integer" : (preg_match('~char|clob|text~i', $type) ? "text" : (preg_match('~blob~i', $type) ? "blob" : (preg_match('~real|floa|doub~i', $type) ? "real" : "numeric")))),
|
"type" => (eregi("int", $type) ? "integer" : (eregi("char|clob|text", $type) ? "text" : (eregi("blob", $type) ? "blob" : (eregi("real|floa|doub", $type) ? "real" : "numeric")))),
|
||||||
"full_type" => $type,
|
"full_type" => $type,
|
||||||
"default" => (preg_match("~'(.*)'~", $default, $match) ? str_replace("''", "'", $match[1]) : ($default == "NULL" ? null : $default)),
|
"default" => (ereg("'(.*)'", $default, $match) ? str_replace("''", "'", $match[1]) : ($default == "NULL" ? null : $default)),
|
||||||
"null" => !$row["notnull"],
|
"null" => !$row["notnull"],
|
||||||
|
"auto_increment" => eregi('^integer$', $type) && $row["pk"], //! possible false positive
|
||||||
"privileges" => array("select" => 1, "insert" => 1, "update" => 1),
|
"privileges" => array("select" => 1, "insert" => 1, "update" => 1),
|
||||||
"primary" => $row["pk"],
|
"primary" => $row["pk"],
|
||||||
);
|
);
|
||||||
if ($row["pk"]) {
|
|
||||||
if ($primary != "") {
|
|
||||||
$return[$primary]["auto_increment"] = false;
|
|
||||||
} elseif (preg_match('~^integer$~i', $type)) {
|
|
||||||
$return[$name]["auto_increment"] = true;
|
|
||||||
}
|
|
||||||
$primary = $name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$sql = $connection->result("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = " . q($table));
|
|
||||||
preg_match_all('~(("[^"]*+")+|[a-z0-9_]+)\s+text\s+COLLATE\s+(\'[^\']+\'|\S+)~i', $sql, $matches, PREG_SET_ORDER);
|
|
||||||
foreach ($matches as $match) {
|
|
||||||
$name = str_replace('""', '"', preg_replace('~^"|"$~', '', $match[1]));
|
|
||||||
if ($return[$name]) {
|
|
||||||
$return[$name]["collation"] = trim($match[3], "'");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function indexes($table, $connection2 = null) {
|
function indexes($table, $connection2 = null) {
|
||||||
global $connection;
|
|
||||||
if (!is_object($connection2)) {
|
|
||||||
$connection2 = $connection;
|
|
||||||
}
|
|
||||||
$return = array();
|
$return = array();
|
||||||
$sql = $connection2->result("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = " . q($table));
|
$primary = array();
|
||||||
if (preg_match('~\bPRIMARY\s+KEY\s*\((([^)"]+|"[^"]*")++)~i', $sql, $match)) {
|
foreach (fields($table) as $field) {
|
||||||
$return[""] = array("type" => "PRIMARY", "columns" => array(), "lengths" => array(), "descs" => array());
|
if ($field["primary"]) {
|
||||||
preg_match_all('~((("[^"]*+")+)|(\S+))(\s+(ASC|DESC))?(,\s*|$)~i', $match[1], $matches, PREG_SET_ORDER);
|
$primary[] = $field["field"];
|
||||||
foreach ($matches as $match) {
|
|
||||||
$return[""]["columns"][] = idf_unescape($match[2]) . $match[4];
|
|
||||||
$return[""]["descs"][] = (preg_match('~DESC~i', $match[5]) ? '1' : null);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!$return) {
|
if ($primary) {
|
||||||
foreach (fields($table) as $name => $field) {
|
$return[""] = array("type" => "PRIMARY", "columns" => $primary, "lengths" => array());
|
||||||
if ($field["primary"]) {
|
|
||||||
$return[""] = array("type" => "PRIMARY", "columns" => array($name), "lengths" => array(), "descs" => array(null));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
$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) . ")") as $row) {
|
||||||
foreach (get_rows("PRAGMA index_list(" . table($table) . ")", $connection2) as $row) {
|
if (!ereg("^sqlite_", $row["name"])) {
|
||||||
$name = $row["name"];
|
$return[$row["name"]]["type"] = ($row["unique"] ? "UNIQUE" : "INDEX");
|
||||||
$index = array("type" => ($row["unique"] ? "UNIQUE" : "INDEX"));
|
$return[$row["name"]]["lengths"] = array();
|
||||||
$index["lengths"] = array();
|
foreach (get_rows("PRAGMA index_info(" . idf_escape($row["name"]) . ")") as $row1) {
|
||||||
$index["descs"] = array();
|
$return[$row["name"]]["columns"][] = $row1["name"];
|
||||||
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;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -406,6 +348,10 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
return h($connection->error);
|
return h($connection->error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function exact_value($val) {
|
||||||
|
return q($val);
|
||||||
|
}
|
||||||
|
|
||||||
function check_sqlite_name($name) {
|
function check_sqlite_name($name) {
|
||||||
// avoid creating PHP files on unsecured servers
|
// avoid creating PHP files on unsecured servers
|
||||||
global $connection;
|
global $connection;
|
||||||
@@ -426,12 +372,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
if (!check_sqlite_name($db)) {
|
if (!check_sqlite_name($db)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
try {
|
$link = new Min_SQLite($db); //! exception handler
|
||||||
$link = new Min_SQLite($db);
|
|
||||||
} catch (Exception $ex) {
|
|
||||||
$connection->error = $ex->getMessage();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$link->query('PRAGMA encoding = "UTF-8"');
|
$link->query('PRAGMA encoding = "UTF-8"');
|
||||||
$link->query('CREATE TABLE adminer (i)'); // otherwise creates empty file
|
$link->query('CREATE TABLE adminer (i)'); // otherwise creates empty file
|
||||||
$link->query('DROP TABLE adminer');
|
$link->query('DROP TABLE adminer');
|
||||||
@@ -474,15 +415,81 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
}
|
}
|
||||||
$alter = array();
|
$alter = array();
|
||||||
$originals = array();
|
$originals = array();
|
||||||
|
$primary_key = false;
|
||||||
foreach ($fields as $field) {
|
foreach ($fields as $field) {
|
||||||
if ($field[1]) {
|
if ($field[1]) {
|
||||||
$alter[] = ($use_all_fields ? $field[1] : "ADD " . implode($field[1]));
|
if ($field[1][6]) {
|
||||||
|
$primary_key = true;
|
||||||
|
}
|
||||||
|
$alter[] = ($use_all_fields ? " " : "ADD ") . implode($field[1]);
|
||||||
if ($field[0] != "") {
|
if ($field[0] != "") {
|
||||||
$originals[$field[0]] = $field[1][0];
|
$originals[$field[0]] = $field[1][0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!$use_all_fields) {
|
if ($use_all_fields) {
|
||||||
|
if ($table != "") {
|
||||||
|
queries("BEGIN");
|
||||||
|
foreach (foreign_keys($table) as $foreign_key) {
|
||||||
|
$columns = array();
|
||||||
|
foreach ($foreign_key["source"] as $column) {
|
||||||
|
if (!$originals[$column]) {
|
||||||
|
continue 2;
|
||||||
|
}
|
||||||
|
$columns[] = $originals[$column];
|
||||||
|
}
|
||||||
|
$foreign[] = " FOREIGN KEY (" . implode(", ", $columns) . ") REFERENCES "
|
||||||
|
. table($foreign_key["table"])
|
||||||
|
. " (" . implode(", ", array_map('idf_escape', $foreign_key["target"]))
|
||||||
|
. ") ON DELETE $foreign_key[on_delete] ON UPDATE $foreign_key[on_update]"
|
||||||
|
;
|
||||||
|
}
|
||||||
|
$indexes = array();
|
||||||
|
foreach (indexes($table) as $key_name => $index) {
|
||||||
|
$columns = array();
|
||||||
|
foreach ($index["columns"] as $column) {
|
||||||
|
if (!$originals[$column]) {
|
||||||
|
continue 2;
|
||||||
|
}
|
||||||
|
$columns[] = $originals[$column];
|
||||||
|
}
|
||||||
|
$columns = "(" . implode(", ", $columns) . ")";
|
||||||
|
if ($index["type"] != "PRIMARY") {
|
||||||
|
$indexes[] = array($index["type"], $key_name, $columns);
|
||||||
|
} elseif (!$primary_key) {
|
||||||
|
$foreign[] = " PRIMARY KEY $columns";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$alter = array_merge($alter, $foreign);
|
||||||
|
if (!queries("CREATE TABLE " . table($table != "" ? "adminer_$name" : $name) . " (\n" . implode(",\n", $alter) . "\n)")) {
|
||||||
|
// implicit ROLLBACK to not overwrite $connection->error
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ($table != "") {
|
||||||
|
if ($originals && !queries("INSERT INTO " . table("adminer_$name") . " (" . implode(", ", $originals) . ") SELECT " . implode(", ", array_map('idf_escape', array_keys($originals))) . " FROM " . table($table))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$triggers = array();
|
||||||
|
foreach (triggers($table) as $trigger_name => $timing_event) {
|
||||||
|
$trigger = trigger($trigger_name);
|
||||||
|
$triggers[] = "CREATE TRIGGER " . idf_escape($trigger_name) . " " . implode(" ", $timing_event) . " ON " . table($name) . "\n$trigger[Statement]";
|
||||||
|
}
|
||||||
|
if (!queries("DROP TABLE " . table($table))) { // drop before creating indexes and triggers to allow using old names
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
queries("ALTER TABLE " . table("adminer_$name") . " RENAME TO " . table($name));
|
||||||
|
if (!alter_indexes($name, $indexes)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
foreach ($triggers as $trigger) {
|
||||||
|
if (!queries($trigger)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
queries("COMMIT");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
foreach ($alter as $val) {
|
foreach ($alter as $val) {
|
||||||
if (!queries("ALTER TABLE " . table($table) . " $val")) {
|
if (!queries("ALTER TABLE " . table($table) . " $val")) {
|
||||||
return false;
|
return false;
|
||||||
@@ -491,8 +498,6 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
if ($table != $name && !queries("ALTER TABLE " . table($table) . " RENAME TO " . table($name))) {
|
if ($table != $name && !queries("ALTER TABLE " . table($table) . " RENAME TO " . table($name))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} elseif (!recreate_table($table, $name, $alter, $originals, $foreign)) {
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
if ($auto_increment) {
|
if ($auto_increment) {
|
||||||
queries("UPDATE sqlite_sequence SET seq = $auto_increment WHERE name = " . q($name)); // ignores error
|
queries("UPDATE sqlite_sequence SET seq = $auto_increment WHERE name = " . q($name)); // ignores error
|
||||||
@@ -500,94 +505,6 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function recreate_table($table, $name, $fields, $originals, $foreign, $indexes = array()) {
|
|
||||||
if ($table != "") {
|
|
||||||
if (!$fields) {
|
|
||||||
foreach (fields($table) as $key => $field) {
|
|
||||||
$fields[] = process_field($field, $field);
|
|
||||||
$originals[$key] = idf_escape($key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$primary_key = false;
|
|
||||||
foreach ($fields as $field) {
|
|
||||||
if ($field[6]) {
|
|
||||||
$primary_key = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$drop_indexes = array();
|
|
||||||
foreach ($indexes as $key => $val) {
|
|
||||||
if ($val[2] == "DROP") {
|
|
||||||
$drop_indexes[$val[1]] = true;
|
|
||||||
unset($indexes[$key]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
foreach (indexes($table) as $key_name => $index) {
|
|
||||||
$columns = array();
|
|
||||||
foreach ($index["columns"] as $key => $column) {
|
|
||||||
if (!$originals[$column]) {
|
|
||||||
continue 2;
|
|
||||||
}
|
|
||||||
$columns[] = $originals[$column] . ($index["descs"][$key] ? " DESC" : "");
|
|
||||||
}
|
|
||||||
if (!$drop_indexes[$key_name]) {
|
|
||||||
if ($index["type"] != "PRIMARY" || !$primary_key) {
|
|
||||||
$indexes[] = array($index["type"], $key_name, $columns);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
foreach ($indexes as $key => $val) {
|
|
||||||
if ($val[0] == "PRIMARY") {
|
|
||||||
unset($indexes[$key]);
|
|
||||||
$foreign[] = " PRIMARY KEY (" . implode(", ", $val[2]) . ")";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
foreach (foreign_keys($table) as $key_name => $foreign_key) {
|
|
||||||
foreach ($foreign_key["source"] as $key => $column) {
|
|
||||||
if (!$originals[$column]) {
|
|
||||||
continue 2;
|
|
||||||
}
|
|
||||||
$foreign_key["source"][$key] = idf_unescape($originals[$column]);
|
|
||||||
}
|
|
||||||
if (!isset($foreign[" $key_name"])) {
|
|
||||||
$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)")) {
|
|
||||||
// implicit ROLLBACK to not overwrite $connection->error
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if ($table != "") {
|
|
||||||
if ($originals && !queries("INSERT INTO " . table("adminer_$name") . " (" . implode(", ", $originals) . ") SELECT " . implode(", ", array_map('idf_escape', array_keys($originals))) . " FROM " . table($table))) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$triggers = array();
|
|
||||||
foreach (triggers($table) as $trigger_name => $timing_event) {
|
|
||||||
$trigger = trigger($trigger_name);
|
|
||||||
$triggers[] = "CREATE TRIGGER " . idf_escape($trigger_name) . " " . implode(" ", $timing_event) . " ON " . table($name) . "\n$trigger[Statement]";
|
|
||||||
}
|
|
||||||
if (!queries("DROP TABLE " . table($table))) { // drop before creating indexes and triggers to allow using old names
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
queries("ALTER TABLE " . table("adminer_$name") . " RENAME TO " . table($name));
|
|
||||||
if (!alter_indexes($name, $indexes)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
foreach ($triggers as $trigger) {
|
|
||||||
if (!queries($trigger)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
queries("COMMIT");
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function index_sql($table, $type, $name, $columns) {
|
function index_sql($table, $type, $name, $columns) {
|
||||||
return "CREATE $type " . ($type != "INDEX" ? "INDEX " : "")
|
return "CREATE $type " . ($type != "INDEX" ? "INDEX " : "")
|
||||||
. idf_escape($name != "" ? $name : uniqid($table . "_"))
|
. idf_escape($name != "" ? $name : uniqid($table . "_"))
|
||||||
@@ -597,15 +514,10 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function alter_indexes($table, $alter) {
|
function alter_indexes($table, $alter) {
|
||||||
foreach ($alter as $primary) {
|
foreach ($alter as $val) {
|
||||||
if ($primary[0] == "PRIMARY") {
|
|
||||||
return recreate_table($table, $table, array(), array(), array(), $alter);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
foreach (array_reverse($alter) as $val) {
|
|
||||||
if (!queries($val[2] == "DROP"
|
if (!queries($val[2] == "DROP"
|
||||||
? "DROP INDEX " . idf_escape($val[1])
|
? "DROP INDEX " . idf_escape($val[1])
|
||||||
: index_sql($table, $val[0], $val[1], "(" . implode(", ", $val[2]) . ")")
|
: index_sql($table, $val[0], $val[1], $val[2])
|
||||||
)) {
|
)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -634,28 +546,14 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
if ($name == "") {
|
if ($name == "") {
|
||||||
return array("Statement" => "BEGIN\n\t;\nEND");
|
return array("Statement" => "BEGIN\n\t;\nEND");
|
||||||
}
|
}
|
||||||
$idf = '(?:[^`"\\s]+|`[^`]*`|"[^"]*")+';
|
preg_match('~^CREATE\\s+TRIGGER\\s*(?:[^`"\\s]+|`[^`]*`|"[^"]*")+\\s*([a-z]+)\\s+([a-z]+)\\s+ON\\s*(?:[^`"\\s]+|`[^`]*`|"[^"]*")+\\s*(?:FOR\\s*EACH\\s*ROW\\s)?(.*)~is', $connection->result("SELECT sql FROM sqlite_master WHERE name = " . q($name)), $match);
|
||||||
$trigger_options = trigger_options();
|
return array("Timing" => strtoupper($match[1]), "Event" => strtoupper($match[2]), "Trigger" => $name, "Statement" => $match[3]);
|
||||||
preg_match(
|
|
||||||
"~^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
|
|
||||||
);
|
|
||||||
$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) {
|
function triggers($table) {
|
||||||
$return = array();
|
$return = array();
|
||||||
$trigger_options = trigger_options();
|
|
||||||
foreach (get_rows("SELECT * FROM sqlite_master WHERE type = 'trigger' AND tbl_name = " . q($table)) as $row) {
|
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*(' . implode("|", $trigger_options["Timing"]) . ')\\s*(.*)\\s+ON\\b~iU', $row["sql"], $match);
|
preg_match('~^CREATE\\s+TRIGGER\\s*(?:[^`"\\s]+|`[^`]*`|"[^"]*")+\\s*([a-z]+)\\s*([a-z]+)~i', $row["sql"], $match);
|
||||||
$return[$row["name"]] = array($match[1], $match[2]);
|
$return[$row["name"]] = array($match[1], $match[2]);
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
@@ -664,7 +562,6 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
function trigger_options() {
|
function trigger_options() {
|
||||||
return array(
|
return array(
|
||||||
"Timing" => array("BEFORE", "AFTER", "INSTEAD OF"),
|
"Timing" => array("BEFORE", "AFTER", "INSTEAD OF"),
|
||||||
"Event" => array("INSERT", "UPDATE", "UPDATE OF", "DELETE"),
|
|
||||||
"Type" => array("FOR EACH ROW"),
|
"Type" => array("FOR EACH ROW"),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -685,6 +582,14 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
return queries("BEGIN");
|
return queries("BEGIN");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function insert_into($table, $set) {
|
||||||
|
return queries("INSERT INTO " . table($table) . ($set ? " (" . implode(", ", array_keys($set)) . ")\nVALUES (" . implode(", ", $set) . ")" : "DEFAULT VALUES"));
|
||||||
|
}
|
||||||
|
|
||||||
|
function insert_update($table, $set, $primary) {
|
||||||
|
return queries("REPLACE INTO " . table($table) . " (" . implode(", ", array_keys($set)) . ") VALUES (" . implode(", ", $set) . ")");
|
||||||
|
}
|
||||||
|
|
||||||
function last_id() {
|
function last_id() {
|
||||||
global $connection;
|
global $connection;
|
||||||
return $connection->result("SELECT LAST_INSERT_ROWID()");
|
return $connection->result("SELECT LAST_INSERT_ROWID()");
|
||||||
@@ -762,7 +667,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function support($feature) {
|
function support($feature) {
|
||||||
return preg_match('~^(columns|database|drop_col|dump|indexes|move_col|sql|status|table|trigger|variables|view|view_trigger)$~', $feature);
|
return ereg('^(view|trigger|variables|status|dump|move_col|drop_col)$', $feature);
|
||||||
}
|
}
|
||||||
|
|
||||||
$jush = "sqlite";
|
$jush = "sqlite";
|
||||||
|
|||||||
@@ -11,19 +11,17 @@ if ($_POST && !$error) {
|
|||||||
$ext = dump_headers(
|
$ext = dump_headers(
|
||||||
(count($tables) == 1 ? key($tables) : DB),
|
(count($tables) == 1 ? key($tables) : DB),
|
||||||
(DB == "" || count($tables) > 1));
|
(DB == "" || count($tables) > 1));
|
||||||
$is_sql = preg_match('~sql~', $_POST["format"]);
|
$is_sql = ereg('sql', $_POST["format"]);
|
||||||
|
|
||||||
if ($is_sql) {
|
if ($is_sql) {
|
||||||
echo "-- Adminer $VERSION " . $drivers[DRIVER] . " dump\n\n";
|
echo "-- Adminer $VERSION " . $drivers[DRIVER] . " dump
|
||||||
if ($jush == "sql") {
|
|
||||||
echo "SET NAMES utf8;
|
" . ($jush != "sql" ? "" : "SET NAMES utf8;
|
||||||
SET time_zone = '+00:00';
|
|
||||||
" . ($_POST["data_style"] ? "SET foreign_key_checks = 0;
|
" . ($_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';
|
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
|
||||||
" : "") . "
|
" : "") . "
|
||||||
";
|
");
|
||||||
$connection->query("SET time_zone = '+00:00';");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$style = $_POST["db_style"];
|
$style = $_POST["db_style"];
|
||||||
@@ -38,7 +36,7 @@ SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
|
|||||||
foreach ((array) $databases as $db) {
|
foreach ((array) $databases as $db) {
|
||||||
$adminer->dumpDatabase($db);
|
$adminer->dumpDatabase($db);
|
||||||
if ($connection->select_db($db)) {
|
if ($connection->select_db($db)) {
|
||||||
if ($is_sql && preg_match('~CREATE~', $style) && ($create = $connection->result("SHOW CREATE DATABASE " . idf_escape($db), 1))) {
|
if ($is_sql && ereg('CREATE', $style) && ($create = $connection->result("SHOW CREATE DATABASE " . idf_escape($db), 1))) {
|
||||||
if ($style == "DROP+CREATE") {
|
if ($style == "DROP+CREATE") {
|
||||||
echo "DROP DATABASE IF EXISTS " . idf_escape($db) . ";\n";
|
echo "DROP DATABASE IF EXISTS " . idf_escape($db) . ";\n";
|
||||||
}
|
}
|
||||||
@@ -119,7 +117,7 @@ SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
|
|||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
page_header(lang('Export'), $error, ($_GET["export"] != "" ? array("table" => $_GET["export"]) : array()), h(DB));
|
page_header(lang('Export'), $error, ($_GET["export"] != "" ? array("table" => $_GET["export"]) : array()), DB);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
@@ -128,7 +126,7 @@ page_header(lang('Export'), $error, ($_GET["export"] != "" ? array("table" => $_
|
|||||||
$db_style = array('', 'USE', 'DROP+CREATE', 'CREATE');
|
$db_style = array('', 'USE', 'DROP+CREATE', 'CREATE');
|
||||||
$table_style = array('', 'DROP+CREATE', 'CREATE');
|
$table_style = array('', 'DROP+CREATE', 'CREATE');
|
||||||
$data_style = array('', 'TRUNCATE+INSERT', 'INSERT');
|
$data_style = array('', 'TRUNCATE+INSERT', 'INSERT');
|
||||||
if ($jush == "sql") { //! use insertUpdate() in all drivers
|
if ($jush == "sql") { //! use insert_update() in all drivers
|
||||||
$data_style[] = 'INSERT+UPDATE';
|
$data_style[] = 'INSERT+UPDATE';
|
||||||
}
|
}
|
||||||
parse_str($_COOKIE["adminer_export"], $row);
|
parse_str($_COOKIE["adminer_export"], $row);
|
||||||
@@ -173,10 +171,10 @@ if (DB != "") {
|
|||||||
$views = "";
|
$views = "";
|
||||||
$tables_list = tables_list();
|
$tables_list = tables_list();
|
||||||
foreach ($tables_list as $name => $type) {
|
foreach ($tables_list as $name => $type) {
|
||||||
$prefix = preg_replace('~_.*~', '', $name);
|
$prefix = ereg_replace("_.*", "", $name);
|
||||||
$checked = ($TABLE == "" || $TABLE == (substr($TABLE, -1) == "%" ? "$prefix%" : $name)); //! % may be part of table name
|
$checked = ($TABLE == "" || $TABLE == (substr($TABLE, -1) == "%" ? "$prefix%" : $name)); //! % may be part of table name
|
||||||
$print = "<tr><td>" . checkbox("tables[]", $name, $checked, $name, "checkboxClick(event, this); formUncheck('check-tables');", "block");
|
$print = "<tr><td>" . checkbox("tables[]", $name, $checked, $name, "checkboxClick(event, this); formUncheck('check-tables');", "block");
|
||||||
if ($type !== null && !preg_match('~table~i', $type)) {
|
if ($type !== null && !eregi("table", $type)) {
|
||||||
$views .= "$print\n";
|
$views .= "$print\n";
|
||||||
} else {
|
} else {
|
||||||
echo "$print<td align='right'><label class='block'><span id='Rows-" . h($name) . "'></span>" . checkbox("data[]", $name, $checked, "", "checkboxClick(event, this); formUncheck('check-data');") . "</label>\n";
|
echo "$print<td align='right'><label class='block'><span id='Rows-" . h($name) . "'></span>" . checkbox("data[]", $name, $checked, "", "checkboxClick(event, this); formUncheck('check-data');") . "</label>\n";
|
||||||
@@ -195,7 +193,7 @@ if (DB != "") {
|
|||||||
if ($databases) {
|
if ($databases) {
|
||||||
foreach ($databases as $db) {
|
foreach ($databases as $db) {
|
||||||
if (!information_schema($db)) {
|
if (!information_schema($db)) {
|
||||||
$prefix = preg_replace('~_.*~', '', $db);
|
$prefix = ereg_replace("_.*", "", $db);
|
||||||
echo "<tr><td>" . checkbox("databases[]", $db, $TABLE == "" || $TABLE == "$prefix%", $db, "formUncheck('check-databases');", "block") . "\n";
|
echo "<tr><td>" . checkbox("databases[]", $db, $TABLE == "" || $TABLE == "$prefix%", $db, "formUncheck('check-databases');", "block") . "\n";
|
||||||
$prefixes[$prefix]++;
|
$prefixes[$prefix]++;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ if ($_POST && !$error && !isset($_GET["select"])) {
|
|||||||
$location = $_POST["referer"];
|
$location = $_POST["referer"];
|
||||||
if ($_POST["insert"]) { // continue edit or insert
|
if ($_POST["insert"]) { // continue edit or insert
|
||||||
$location = ($update ? null : $_SERVER["REQUEST_URI"]);
|
$location = ($update ? null : $_SERVER["REQUEST_URI"]);
|
||||||
} elseif (!preg_match('~^.+&select=.+$~', $location)) {
|
} elseif (!ereg('^.+&select=.+$', $location)) {
|
||||||
$location = ME . "select=" . urlencode($TABLE);
|
$location = ME . "select=" . urlencode($TABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -22,18 +22,18 @@ if ($_POST && !$error && !isset($_GET["select"])) {
|
|||||||
$query_where = "\nWHERE $where";
|
$query_where = "\nWHERE $where";
|
||||||
|
|
||||||
if (isset($_POST["delete"])) {
|
if (isset($_POST["delete"])) {
|
||||||
queries_redirect(
|
$query = "FROM " . table($TABLE);
|
||||||
|
query_redirect(
|
||||||
|
"DELETE" . ($unique_array ? " $query$query_where" : limit1($query, $query_where)),
|
||||||
$location,
|
$location,
|
||||||
lang('Item has been deleted.'),
|
lang('Item has been deleted.')
|
||||||
$driver->delete($TABLE, $query_where, !$unique_array)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
$set = array();
|
$set = array();
|
||||||
foreach ($fields as $name => $field) {
|
foreach ($fields as $name => $field) {
|
||||||
$val = process_input($field);
|
$val = process_input($field);
|
||||||
if ($val !== false && $val !== null) {
|
if ($val !== false && $val !== null) {
|
||||||
$set[idf_escape($name)] = $val;
|
$set[idf_escape($name)] = ($update ? "\n" . idf_escape($name) . " = $val" : $val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -41,24 +41,28 @@ if ($_POST && !$error && !isset($_GET["select"])) {
|
|||||||
if (!$set) {
|
if (!$set) {
|
||||||
redirect($location);
|
redirect($location);
|
||||||
}
|
}
|
||||||
queries_redirect(
|
$query = table($TABLE) . " SET" . implode(",", $set);
|
||||||
|
query_redirect(
|
||||||
|
"UPDATE" . ($unique_array ? " $query$query_where" : limit1($query, $query_where)),
|
||||||
$location,
|
$location,
|
||||||
lang('Item has been updated.'),
|
lang('Item has been updated.')
|
||||||
$driver->update($TABLE, $set, $query_where, !$unique_array)
|
|
||||||
);
|
);
|
||||||
if (is_ajax()) {
|
|
||||||
page_headers();
|
|
||||||
page_messages($error);
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
$result = $driver->insert($TABLE, $set);
|
$result = insert_into($TABLE, $set);
|
||||||
$last_id = ($result ? last_id() : 0);
|
$last_id = ($result ? last_id() : 0);
|
||||||
queries_redirect($location, lang('Item%s has been inserted.', ($last_id ? " $last_id" : "")), $result); //! link
|
queries_redirect($location, lang('Item%s has been inserted.', ($last_id ? " $last_id" : "")), $result); //! link
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$table_name = $adminer->tableName(table_status($TABLE, true));
|
||||||
|
page_header(
|
||||||
|
($update ? lang('Edit') : lang('Insert')),
|
||||||
|
$error,
|
||||||
|
array("select" => array($TABLE, $table_name)),
|
||||||
|
$table_name //! two calls of h()
|
||||||
|
);
|
||||||
|
|
||||||
$row = null;
|
$row = null;
|
||||||
if ($_POST["save"]) {
|
if ($_POST["save"]) {
|
||||||
$row = (array) $_POST["fields"];
|
$row = (array) $_POST["fields"];
|
||||||
@@ -70,44 +74,75 @@ if ($_POST["save"]) {
|
|||||||
if ($_POST["clone"] && $field["auto_increment"]) {
|
if ($_POST["clone"] && $field["auto_increment"]) {
|
||||||
$as = "''";
|
$as = "''";
|
||||||
}
|
}
|
||||||
if ($jush == "sql" && preg_match("~enum|set~", $field["type"])) {
|
if ($jush == "sql" && ereg("enum|set", $field["type"])) {
|
||||||
$as = "1*" . idf_escape($name);
|
$as = "1*" . idf_escape($name);
|
||||||
}
|
}
|
||||||
$select[] = ($as ? "$as AS " : "") . idf_escape($name);
|
$select[] = ($as ? "$as AS " : "") . idf_escape($name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$row = array();
|
$row = array();
|
||||||
if (!support("table")) {
|
|
||||||
$select = array("*");
|
|
||||||
}
|
|
||||||
if ($select) {
|
if ($select) {
|
||||||
$result = $driver->select($TABLE, $select, array($where), $select, array(), (isset($_GET["select"]) ? 2 : 1));
|
$rows = get_rows("SELECT" . limit(implode(", ", $select) . " FROM " . table($TABLE), " WHERE $where", (isset($_GET["select"]) ? 2 : 1)));
|
||||||
$row = $result->fetch_assoc();
|
$row = (isset($_GET["select"]) && count($rows) != 1 ? null : reset($rows));
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!support("table") && !$fields) {
|
if ($row === false) {
|
||||||
if (!$where) { // insert
|
echo "<p class='error'>" . lang('No rows.') . "\n";
|
||||||
$result = $driver->select($TABLE, array("*"), $where, array("*"));
|
}
|
||||||
$row = ($result ? $result->fetch_assoc() : false);
|
?>
|
||||||
if (!$row) {
|
|
||||||
$row = array($driver->primary => "");
|
<form action="" method="post" enctype="multipart/form-data" id="form">
|
||||||
}
|
<?php
|
||||||
}
|
if (!$fields) {
|
||||||
if ($row) {
|
echo "<p class='error'>" . lang('You have no privileges to update this table.') . "\n";
|
||||||
foreach ($row as $key => $val) {
|
} else {
|
||||||
if (!$where) {
|
echo "<table cellspacing='0' onkeydown='return editingKeydown(event);'>\n";
|
||||||
$row[$key] = null;
|
|
||||||
|
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" && ereg("^b'([01]*)'\$", $default, $regs)) {
|
||||||
|
$default = $regs[1];
|
||||||
}
|
}
|
||||||
$fields[$key] = array("field" => $key, "null" => ($key != $driver->primary), "auto_increment" => ($key == $driver->primary));
|
|
||||||
}
|
}
|
||||||
|
$value = ($row !== null
|
||||||
|
? ($row[$name] != "" && $jush == "sql" && ereg("enum|set", $field["type"]) ? (is_array($row[$name]) ? array_sum($row[$name]) : +$row[$name]) : $row[$name])
|
||||||
|
: (!$update && $field["auto_increment"] ? "" : (isset($_GET["select"]) ? false : $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 (ereg("time", $field["type"]) && $value == "CURRENT_TIMESTAMP") {
|
||||||
|
$value = "";
|
||||||
|
$function = "now";
|
||||||
|
}
|
||||||
|
input($field, $value, $function);
|
||||||
|
echo "\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') : lang('Save and insert next')) . "' title='Ctrl+Shift+Enter'>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
echo ($update ? "<input type='submit' name='delete' value='" . lang('Delete') . "' onclick=\"return confirm('" . lang('Are you sure?') . "');\">\n"
|
||||||
edit_form($TABLE, $fields, $row, $update);
|
: ($_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>
|
||||||
|
|||||||
@@ -12,13 +12,10 @@ if ($_GET["file"] == "favicon.ico") {
|
|||||||
echo lzw_decompress(compile_file('../adminer/static/favicon.ico', 'lzw_compress'));
|
echo lzw_decompress(compile_file('../adminer/static/favicon.ico', 'lzw_compress'));
|
||||||
} elseif ($_GET["file"] == "default.css") {
|
} elseif ($_GET["file"] == "default.css") {
|
||||||
header("Content-Type: text/css; charset=utf-8");
|
header("Content-Type: text/css; charset=utf-8");
|
||||||
echo lzw_decompress(compile_file('../adminer/static/default.css;../externals/jush/jush.css', 'minify_css'));
|
echo lzw_decompress(compile_file('../adminer/static/default.css', 'minify_css'));
|
||||||
} elseif ($_GET["file"] == "functions.js") {
|
} elseif ($_GET["file"] == "functions.js") {
|
||||||
header("Content-Type: text/javascript; charset=utf-8");
|
header("Content-Type: text/javascript; charset=utf-8");
|
||||||
echo lzw_decompress(compile_file('../adminer/static/functions.js;static/editing.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 {
|
} else {
|
||||||
header("Content-Type: image/gif");
|
header("Content-Type: image/gif");
|
||||||
switch ($_GET["file"]) {
|
switch ($_GET["file"]) {
|
||||||
|
|||||||
@@ -4,32 +4,27 @@ $name = $_GET["name"];
|
|||||||
$row = $_POST;
|
$row = $_POST;
|
||||||
|
|
||||||
if ($_POST && !$error && !$_POST["add"] && !$_POST["change"] && !$_POST["change-js"]) {
|
if ($_POST && !$error && !$_POST["add"] && !$_POST["change"] && !$_POST["change-js"]) {
|
||||||
$message = ($_POST["drop"] ? lang('Foreign key has been dropped.') : ($name != "" ? lang('Foreign key has been altered.') : lang('Foreign key has been created.')));
|
if ($_POST["drop"]) {
|
||||||
$location = ME . "table=" . urlencode($TABLE);
|
query_redirect("ALTER TABLE " . table($TABLE) . "\nDROP " . ($jush == "sql" ? "FOREIGN KEY " : "CONSTRAINT ") . idf_escape($name), ME . "table=" . urlencode($TABLE), lang('Foreign key has been dropped.'));
|
||||||
|
|
||||||
$row["source"] = array_filter($row["source"], 'strlen');
|
|
||||||
ksort($row["source"]); // enforce input order
|
|
||||||
$target = array();
|
|
||||||
foreach ($row["source"] as $key => $val) {
|
|
||||||
$target[$key] = $row["target"][$key];
|
|
||||||
}
|
|
||||||
$row["target"] = $target;
|
|
||||||
|
|
||||||
if ($jush == "sqlite") {
|
|
||||||
queries_redirect($location, $message, recreate_table($TABLE, $TABLE, array(), array(), array(" $name" => ($_POST["drop"] ? "" : " " . format_foreign_key($row)))));
|
|
||||||
} else {
|
} else {
|
||||||
$alter = "ALTER TABLE " . table($TABLE);
|
$source = array_filter($row["source"], 'strlen');
|
||||||
$drop = "\nDROP " . ($jush == "sql" ? "FOREIGN KEY " : "CONSTRAINT ") . idf_escape($name);
|
ksort($source); // enforce input order
|
||||||
if ($_POST["drop"]) {
|
$target = array();
|
||||||
query_redirect($alter . $drop, $location, $message);
|
foreach ($source as $key => $val) {
|
||||||
} else {
|
$target[$key] = $row["target"][$key];
|
||||||
query_redirect($alter . ($name != "" ? "$drop," : "") . "\nADD" . format_foreign_key($row), $location, $message);
|
|
||||||
$error = lang('Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.') . "<br>$error"; //! no partitioning
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
query_redirect("ALTER TABLE " . table($TABLE)
|
||||||
|
. ($name != "" ? "\nDROP " . ($jush == "sql" ? "FOREIGN KEY " : "CONSTRAINT ") . idf_escape($name) . "," : "")
|
||||||
|
. "\nADD FOREIGN KEY (" . implode(", ", array_map('idf_escape', $source)) . ") REFERENCES " . table($row["table"]) . " (" . implode(", ", array_map('idf_escape', $target)) . ")" //! reuse $name - check in older MySQL versions
|
||||||
|
. (ereg("^($on_actions)\$", $row["on_delete"]) ? " ON DELETE $row[on_delete]" : "")
|
||||||
|
. (ereg("^($on_actions)\$", $row["on_update"]) ? " ON UPDATE $row[on_update]" : "")
|
||||||
|
, ME . "table=" . urlencode($TABLE), ($name != "" ? lang('Foreign key has been altered.') : lang('Foreign key has been created.')));
|
||||||
|
$error = lang('Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.') . "<br>$error"; //! no partitioning
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
page_header(lang('Foreign key'), $error, array("table" => $TABLE), h($TABLE));
|
page_header(lang('Foreign key'), $error, array("table" => $TABLE), $TABLE);
|
||||||
|
|
||||||
if ($_POST) {
|
if ($_POST) {
|
||||||
ksort($row["source"]);
|
ksort($row["source"]);
|
||||||
@@ -74,12 +69,6 @@ foreach ($row["source"] as $key => $val) {
|
|||||||
<p>
|
<p>
|
||||||
<?php echo lang('ON DELETE'); ?>: <?php echo html_select("on_delete", array(-1 => "") + explode("|", $on_actions), $row["on_delete"]); ?>
|
<?php echo lang('ON DELETE'); ?>: <?php echo html_select("on_delete", array(-1 => "") + explode("|", $on_actions), $row["on_delete"]); ?>
|
||||||
<?php echo lang('ON UPDATE'); ?>: <?php echo html_select("on_update", array(-1 => "") + explode("|", $on_actions), $row["on_update"]); ?>
|
<?php echo lang('ON UPDATE'); ?>: <?php echo html_select("on_update", array(-1 => "") + explode("|", $on_actions), $row["on_update"]); ?>
|
||||||
<?php echo doc_link(array(
|
|
||||||
'sql' => "innodb-foreign-key-constraints.html",
|
|
||||||
'pgsql' => "sql-createtable.html#SQL-CREATETABLE-REFERENCES",
|
|
||||||
'mssql' => "ms174979.aspx",
|
|
||||||
'oracle' => "clauses002.htm#sthref2903",
|
|
||||||
)); ?>
|
|
||||||
<p>
|
<p>
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||||
<noscript><p><input type="submit" name="add" value="<?php echo lang('Add column'); ?>"></noscript>
|
<noscript><p><input type="submit" name="add" value="<?php echo lang('Add column'); ?>"></noscript>
|
||||||
|
|||||||
@@ -9,29 +9,21 @@ class Adminer {
|
|||||||
* @return string HTML code
|
* @return string HTML code
|
||||||
*/
|
*/
|
||||||
function name() {
|
function name() {
|
||||||
return "<a href='http://www.adminer.org/' target='_blank' id='h1'>Adminer</a>";
|
return "<a href='http://www.adminer.org/' id='h1'>Adminer</a>";
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Connection parameters
|
/** Connection parameters
|
||||||
* @return array ($server, $username, $password)
|
* @return array ($server, $username, $password)
|
||||||
*/
|
*/
|
||||||
function credentials() {
|
function credentials() {
|
||||||
return array(SERVER, $_GET["username"], get_password());
|
return array(SERVER, $_GET["username"], get_session("pwds"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get key used for permanent login
|
/** Get key used for permanent login
|
||||||
* @param bool
|
* @return string cryptic string which gets combined with password
|
||||||
* @return string cryptic string which gets combined with password or false in case of an error
|
|
||||||
*/
|
*/
|
||||||
function permanentLogin($create = false) {
|
function permanentLogin() {
|
||||||
return password_file($create);
|
return password_file();
|
||||||
}
|
|
||||||
|
|
||||||
/** 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
|
/** Identifier of selected database
|
||||||
@@ -50,13 +42,6 @@ class Adminer {
|
|||||||
return get_databases($flush);
|
return get_databases($flush);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get list of schemas
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
function schemas() {
|
|
||||||
return schemas();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Specify limit for waiting on some slow queries like DB list
|
/** Specify limit for waiting on some slow queries like DB list
|
||||||
* @return float number of seconds
|
* @return float number of seconds
|
||||||
*/
|
*/
|
||||||
@@ -75,9 +60,6 @@ class Adminer {
|
|||||||
* @return bool true to link adminer.css if exists
|
* @return bool true to link adminer.css if exists
|
||||||
*/
|
*/
|
||||||
function head() {
|
function head() {
|
||||||
?>
|
|
||||||
<link rel="stylesheet" type="text/css" href="../externals/jush/jush.css">
|
|
||||||
<?php
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -136,17 +118,12 @@ username.form['auth[driver]'].onchange();
|
|||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function selectLinks($tableStatus, $set = "") {
|
function selectLinks($tableStatus, $set = "") {
|
||||||
echo '<p class="links">';
|
echo '<p class="tabs">';
|
||||||
$links = array("select" => lang('Select data'));
|
$links = array("select" => lang('Select data'), "table" => lang('Show structure'));
|
||||||
if (support("table") || support("indexes")) {
|
if (is_view($tableStatus)) {
|
||||||
$links["table"] = lang('Show structure');
|
$links["view"] = lang('Alter view');
|
||||||
}
|
} else {
|
||||||
if (support("table")) {
|
$links["create"] = lang('Alter table');
|
||||||
if (is_view($tableStatus)) {
|
|
||||||
$links["view"] = lang('Alter view');
|
|
||||||
} else {
|
|
||||||
$links["create"] = lang('Alter table');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if ($set !== null) {
|
if ($set !== null) {
|
||||||
$links["edit"] = lang('New item');
|
$links["edit"] = lang('New item');
|
||||||
@@ -184,15 +161,14 @@ username.form['auth[driver]'].onchange();
|
|||||||
|
|
||||||
/** Query printed in select before execution
|
/** Query printed in select before execution
|
||||||
* @param string query to be executed
|
* @param string query to be executed
|
||||||
* @param string elapsed time
|
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function selectQuery($query, $time) {
|
function selectQuery($query) {
|
||||||
global $jush;
|
global $jush, $token;
|
||||||
return "<p><code class='jush-$jush'>" . h(str_replace("\n", " ", $query)) . "</code> <span class='time'>($time)</span>"
|
return "<form action='" . h(ME) . "sql=' method='post'><p><span onclick=\"return !selectEditSql(event, this, '" . lang('Execute') . "');\">"
|
||||||
. (support("sql") ? " <a href='" . h(ME) . "sql=" . urlencode($query) . "'>" . lang('Edit') . "</a>" : "")
|
. "<code class='jush-$jush'>" . h(str_replace("\n", " ", $query)) . "</code>"
|
||||||
. "</p>" // </p> - required for IE9 inline edit
|
. " <a href='" . h(ME) . "sql=" . urlencode($query) . "'>" . lang('Edit') . "</a>"
|
||||||
;
|
. "</span><input type='hidden' name='token' value='$token'></p></form>\n"; // </p> - required for IE9 inline edit
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Description of a row in a table
|
/** Description of a row in a table
|
||||||
@@ -224,15 +200,14 @@ username.form['auth[driver]'].onchange();
|
|||||||
* @param string HTML-escaped value to print
|
* @param string HTML-escaped value to print
|
||||||
* @param string link to foreign key
|
* @param string link to foreign key
|
||||||
* @param array single field returned from fields()
|
* @param array single field returned from fields()
|
||||||
* @param array original value before applying editVal() and escaping
|
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function selectVal($val, $link, $field, $original) {
|
function selectVal($val, $link, $field) {
|
||||||
$return = ($val === null ? "<i>NULL</i>" : (preg_match("~char|binary~", $field["type"]) && !preg_match("~var~", $field["type"]) ? "<code>$val</code>" : $val));
|
$return = ($val === null ? "<i>NULL</i>" : (ereg("char|binary", $field["type"]) && !ereg("var", $field["type"]) ? "<code>$val</code>" : $val));
|
||||||
if (preg_match('~blob|bytea|raw|file~', $field["type"]) && !is_utf8($val)) {
|
if (ereg('blob|bytea|raw|file', $field["type"]) && !is_utf8($val)) {
|
||||||
$return = lang('%d byte(s)', strlen($original));
|
$return = lang('%d byte(s)', strlen(html_entity_decode($val, ENT_QUOTES)));
|
||||||
}
|
}
|
||||||
return ($link ? "<a href='" . h($link) . "'" . (is_url($link) ? " rel='noreferrer'" : "") . ">$return</a>" : $return);
|
return ($link ? "<a href='" . h($link) . "'>$return</a>" : $return);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Value conversion used in select and edit
|
/** Value conversion used in select and edit
|
||||||
@@ -253,15 +228,16 @@ username.form['auth[driver]'].onchange();
|
|||||||
global $functions, $grouping;
|
global $functions, $grouping;
|
||||||
print_fieldset("select", lang('Select'), $select);
|
print_fieldset("select", lang('Select'), $select);
|
||||||
$i = 0;
|
$i = 0;
|
||||||
$select[""] = array();
|
$fun_group = array(lang('Functions') => $functions, lang('Aggregation') => $grouping);
|
||||||
|
$move = "<img src='static/move.gif' width='18' height='18' alt='" . lang('Move') . "' class='jsonly move' onmousedown=''>";
|
||||||
foreach ($select as $key => $val) {
|
foreach ($select as $key => $val) {
|
||||||
$val = $_GET["columns"][$key];
|
$val = $_GET["columns"][$key];
|
||||||
$column = select_input(" name='columns[$i][col]' onchange='" . ($key !== "" ? "selectFieldChange(this.form)" : "selectAddRow(this)") . ";'", $columns, $val["col"]);
|
echo "<div>" . html_select("columns[$i][fun]", array(-1 => "") + $fun_group, $val["fun"]);
|
||||||
echo "<div>" . ($functions || $grouping ? "<select name='columns[$i][fun]' onchange='helpClose();" . ($key !== "" ? "" : " this.nextSibling.nextSibling.onchange();") . "'"
|
echo "(<select name='columns[$i][col]' onchange='selectFieldChange(this.form);'><option>" . optionlist($columns, $val["col"], true) . "</select>) $move</div>\n";
|
||||||
. on_help("getTarget(event).value && getTarget(event).value.replace(/ |\$/, '(') + ')'", 1) . ">" . optionlist(array(-1 => "") + array_filter(array(lang('Functions') => $functions, lang('Aggregation') => $grouping)), $val["fun"]) . "</select>"
|
|
||||||
. "($column)" : $column) . "</div>\n";
|
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
|
echo "<div>" . html_select("columns[$i][fun]", array(-1 => "") + $fun_group, "", "this.nextSibling.nextSibling.onchange();");
|
||||||
|
echo "(<select name='columns[$i][col]' onchange='selectAddRow(this);'><option>" . optionlist($columns, null, true) . "</select>) $move</div>\n";
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -287,9 +263,9 @@ username.form['auth[driver]'].onchange();
|
|||||||
for ($i = 0; $i <= count($_GET["where"]); $i++) {
|
for ($i = 0; $i <= count($_GET["where"]); $i++) {
|
||||||
list(, $val) = each($_GET["where"]);
|
list(, $val) = each($_GET["where"]);
|
||||||
if (!$val || ("$val[col]$val[val]" != "" && in_array($val["op"], $this->operators))) {
|
if (!$val || ("$val[col]$val[val]" != "" && in_array($val["op"], $this->operators))) {
|
||||||
echo "<div>" . select_input(" name='where[$i][col]' onchange='$change_next'", $columns, $val["col"], "(" . lang('anywhere') . ")");
|
echo "<div><select name='where[$i][col]' onchange='$change_next'><option value=''>(" . lang('anywhere') . ")" . optionlist($columns, $val["col"], true) . "</select>";
|
||||||
echo html_select("where[$i][op]", $this->operators, $val["op"], $change_next);
|
echo html_select("where[$i][op]", $this->operators, $val["op"], $change_next);
|
||||||
echo "<input type='search' name='where[$i][val]' value='" . h($val["val"]) . "' onchange='" . ($val ? "selectFieldChange(this.form)" : "selectAddRow(this)") . ";' onkeydown='selectSearchKeydown(this, event);' onsearch='selectSearchSearch(this);'></div>\n";
|
echo "<input type='search' name='where[$i][val]' value='" . h($val["val"]) . "' onchange='" . ($val ? "selectFieldChange(this.form)" : "selectAddRow(this)") . ";' onsearch='selectSearchSearch(this);'></div>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
@@ -305,14 +281,14 @@ username.form['auth[driver]'].onchange();
|
|||||||
print_fieldset("sort", lang('Sort'), $order);
|
print_fieldset("sort", lang('Sort'), $order);
|
||||||
$i = 0;
|
$i = 0;
|
||||||
foreach ((array) $_GET["order"] as $key => $val) {
|
foreach ((array) $_GET["order"] as $key => $val) {
|
||||||
if ($val != "") {
|
if (isset($columns[$val])) {
|
||||||
echo "<div>" . select_input(" name='order[$i]' onchange='selectFieldChange(this.form);'", $columns, $val);
|
echo "<div><select name='order[$i]' onchange='selectFieldChange(this.form);'><option>" . optionlist($columns, $val, true) . "</select>";
|
||||||
echo checkbox("desc[$i]", 1, isset($_GET["desc"][$key]), lang('descending')) . "</div>\n";
|
echo checkbox("desc[$i]", 1, isset($_GET["desc"][$key]), lang('descending')) . "</div>\n";
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
echo "<div>" . select_input(" name='order[$i]' onchange='selectAddRow(this);'", $columns);
|
echo "<div><select name='order[$i]' onchange='selectAddRow(this);'><option>" . optionlist($columns, null, true) . "</select>";
|
||||||
echo checkbox("desc[$i]", 1, false, lang('descending')) . "</div>\n";
|
echo "<label><input type='checkbox' name='desc[$i]' value='1'>" . lang('descending') . "</label></div>\n"; // not checkbox() to allow selectAddRow()
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -396,8 +372,8 @@ username.form['auth[driver]'].onchange();
|
|||||||
$select = array(); // select expressions, empty for *
|
$select = array(); // select expressions, empty for *
|
||||||
$group = array(); // expressions without aggregation - will be used for GROUP BY if an aggregation function is used
|
$group = array(); // expressions without aggregation - will be used for GROUP BY if an aggregation function is used
|
||||||
foreach ((array) $_GET["columns"] as $key => $val) {
|
foreach ((array) $_GET["columns"] as $key => $val) {
|
||||||
if ($val["fun"] == "count" || ($val["col"] != "" && (!$val["fun"] || in_array($val["fun"], $functions) || in_array($val["fun"], $grouping)))) {
|
if ($val["fun"] == "count" || (isset($columns[$val["col"]]) && (!$val["fun"] || in_array($val["fun"], $functions) || in_array($val["fun"], $grouping)))) {
|
||||||
$select[$key] = apply_sql_function($val["fun"], ($val["col"] != "" ? idf_escape($val["col"]) : "*"));
|
$select[$key] = apply_sql_function($val["fun"], (isset($columns[$val["col"]]) ? idf_escape($val["col"]) : "*"));
|
||||||
if (!in_array($val["fun"], $grouping)) {
|
if (!in_array($val["fun"], $grouping)) {
|
||||||
$group[] = $select[$key];
|
$group[] = $select[$key];
|
||||||
}
|
}
|
||||||
@@ -422,14 +398,14 @@ username.form['auth[driver]'].onchange();
|
|||||||
foreach ((array) $_GET["where"] as $val) {
|
foreach ((array) $_GET["where"] as $val) {
|
||||||
if ("$val[col]$val[val]" != "" && in_array($val["op"], $this->operators)) {
|
if ("$val[col]$val[val]" != "" && in_array($val["op"], $this->operators)) {
|
||||||
$cond = " $val[op]";
|
$cond = " $val[op]";
|
||||||
if (preg_match('~IN$~', $val["op"])) {
|
if (ereg('IN$', $val["op"])) {
|
||||||
$in = process_length($val["val"]);
|
$in = process_length($val["val"]);
|
||||||
$cond .= " " . ($in != "" ? $in : "(NULL)");
|
$cond .= " (" . ($in != "" ? $in : "NULL") . ")";
|
||||||
} elseif ($val["op"] == "SQL") {
|
} elseif ($val["op"] == "SQL") {
|
||||||
$cond = " $val[val]"; // SQL injection
|
$cond = " $val[val]"; // SQL injection
|
||||||
} elseif ($val["op"] == "LIKE %%") {
|
} elseif ($val["op"] == "LIKE %%") {
|
||||||
$cond = " LIKE " . $this->processInput($fields[$val["col"]], "%$val[val]%");
|
$cond = " LIKE " . $this->processInput($fields[$val["col"]], "%$val[val]%");
|
||||||
} elseif (!preg_match('~NULL$~', $val["op"])) {
|
} elseif (!ereg('NULL$', $val["op"])) {
|
||||||
$cond .= " " . $this->processInput($fields[$val["col"]], $val["val"]);
|
$cond .= " " . $this->processInput($fields[$val["col"]], $val["val"]);
|
||||||
}
|
}
|
||||||
if ($val["col"] != "") {
|
if ($val["col"] != "") {
|
||||||
@@ -438,12 +414,12 @@ username.form['auth[driver]'].onchange();
|
|||||||
// find anywhere
|
// find anywhere
|
||||||
$cols = array();
|
$cols = array();
|
||||||
foreach ($fields as $name => $field) {
|
foreach ($fields as $name => $field) {
|
||||||
$is_text = preg_match('~char|text|enum|set~', $field["type"]);
|
$is_text = ereg('char|text|enum|set', $field["type"]);
|
||||||
if ((is_numeric($val["val"]) || !preg_match('~(^|[^o])int|float|double|decimal|bit~', $field["type"]))
|
if ((is_numeric($val["val"]) || !ereg('(^|[^o])int|float|double|decimal|bit', $field["type"]))
|
||||||
&& (!preg_match("~[\x80-\xFF]~", $val["val"]) || $is_text)
|
&& (!ereg("[\x80-\xFF]", $val["val"]) || $is_text)
|
||||||
) {
|
) {
|
||||||
$name = idf_escape($name);
|
$name = idf_escape($name);
|
||||||
$cols[] = ($jush == "sql" && $is_text && !preg_match('~^utf8~', $field["collation"]) ? "CONVERT($name USING utf8)" : $name);
|
$cols[] = ($jush == "sql" && $is_text && !ereg('^utf8', $field["collation"]) ? "CONVERT($name USING utf8)" : $name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$return[] = ($cols ? "(" . implode("$cond OR ", $cols) . "$cond)" : "0");
|
$return[] = ($cols ? "(" . implode("$cond OR ", $cols) . "$cond)" : "0");
|
||||||
@@ -461,10 +437,8 @@ username.form['auth[driver]'].onchange();
|
|||||||
function selectOrderProcess($fields, $indexes) {
|
function selectOrderProcess($fields, $indexes) {
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach ((array) $_GET["order"] as $key => $val) {
|
foreach ((array) $_GET["order"] as $key => $val) {
|
||||||
if ($val != "") {
|
if (isset($fields[$val]) || preg_match('~^((COUNT\\(DISTINCT |[A-Z0-9_]+\\()(`(?:[^`]|``)+`|"(?:[^"]|"")+")\\)|COUNT\\(\\*\\))$~', $val)) { //! MS SQL uses []
|
||||||
$return[] = (preg_match('~^((COUNT\\(DISTINCT |[A-Z0-9_]+\\()(`(?:[^`]|``)+`|"(?:[^"]|"")+")\\)|COUNT\\(\\*\\))$~', $val) ? $val : idf_escape($val)) //! MS SQL uses []
|
$return[] = (isset($fields[$val]) ? idf_escape($val) : $val) . (isset($_GET["desc"][$key]) ? " DESC" : "");
|
||||||
. (isset($_GET["desc"][$key]) ? " DESC" : "")
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
@@ -508,24 +482,18 @@ username.form['auth[driver]'].onchange();
|
|||||||
|
|
||||||
/** Query printed after execution in the message
|
/** Query printed after execution in the message
|
||||||
* @param string executed query
|
* @param string executed query
|
||||||
* @param string elapsed time
|
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function messageQuery($query, $time) {
|
function messageQuery($query) {
|
||||||
global $jush;
|
global $jush;
|
||||||
restart_session();
|
restart_session();
|
||||||
$history = &get_session("queries");
|
$history = &get_session("queries");
|
||||||
$id = "sql-" . count($history[$_GET["db"]]);
|
$id = "sql-" . count($history[$_GET["db"]]);
|
||||||
if (strlen($query) > 1e6) {
|
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
|
$query = ereg_replace('[\x80-\xFF]+$', '', substr($query, 0, 1e6)) . "\n..."; // [\x80-\xFF] - valid UTF-8, \n - can end by one-line comment
|
||||||
}
|
}
|
||||||
$history[$_GET["db"]][] = array($query, time(), $time); // not DB - $_GET["db"] is changed in database.inc.php //! respect $_GET["ns"]
|
$history[$_GET["db"]][] = array($query, time()); // not DB - $_GET["db"] is changed in database.inc.php //! respect $_GET["ns"]
|
||||||
return " <span class='time'>" . @date("H:i:s") . "</span> <a href='#$id' onclick=\"return !toggle('$id');\">" . lang('SQL command') . "</a>" // @ - time zone may be not set
|
return " <span class='time'>" . @date("H:i:s") . "</span> <a href='#$id' onclick=\"return !toggle('$id');\">" . lang('SQL command') . "</a><div id='$id' class='hidden'><pre><code class='jush-$jush'>" . shorten_utf8($query, 1000) . '</code></pre><p><a href="' . h(str_replace("db=" . urlencode(DB), "db=" . urlencode($_GET["db"]), ME) . 'sql=&history=' . (count($history[$_GET["db"]]) - 1)) . '">' . lang('Edit') . '</a></div>'; // @ - time zone may be not set
|
||||||
. "<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>'
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Functions displayed in edit form
|
/** Functions displayed in edit form
|
||||||
@@ -538,18 +506,15 @@ username.form['auth[driver]'].onchange();
|
|||||||
foreach ($edit_functions as $key => $functions) {
|
foreach ($edit_functions as $key => $functions) {
|
||||||
if (!$key || (!isset($_GET["call"]) && (isset($_GET["select"]) || where($_GET)))) { // relative functions
|
if (!$key || (!isset($_GET["call"]) && (isset($_GET["select"]) || where($_GET)))) { // relative functions
|
||||||
foreach ($functions as $pattern => $val) {
|
foreach ($functions as $pattern => $val) {
|
||||||
if (!$pattern || preg_match("~$pattern~", $field["type"])) {
|
if (!$pattern || ereg($pattern, $field["type"])) {
|
||||||
$return .= "/$val";
|
$return .= "/$val";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($key && !preg_match('~set|blob|bytea|raw|file~', $field["type"])) {
|
if ($key && !ereg('set|blob|bytea|raw|file', $field["type"])) {
|
||||||
$return .= "/SQL";
|
$return .= "/SQL";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($field["auto_increment"] && !isset($_GET["select"]) && !where($_GET)) {
|
|
||||||
$return = lang('Auto Increment');
|
|
||||||
}
|
|
||||||
return explode("/", $return);
|
return explode("/", $return);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -582,17 +547,17 @@ username.form['auth[driver]'].onchange();
|
|||||||
}
|
}
|
||||||
$name = $field["field"];
|
$name = $field["field"];
|
||||||
$return = q($value);
|
$return = q($value);
|
||||||
if (preg_match('~^(now|getdate|uuid)$~', $function)) {
|
if (ereg('^(now|getdate|uuid)$', $function)) {
|
||||||
$return = "$function()";
|
$return = "$function()";
|
||||||
} elseif (preg_match('~^current_(date|timestamp)$~', $function)) {
|
} elseif (ereg('^current_(date|timestamp)$', $function)) {
|
||||||
$return = $function;
|
$return = $function;
|
||||||
} elseif (preg_match('~^([+-]|\\|\\|)$~', $function)) {
|
} elseif (ereg('^([+-]|\\|\\|)$', $function)) {
|
||||||
$return = idf_escape($name) . " $function $return";
|
$return = idf_escape($name) . " $function $return";
|
||||||
} elseif (preg_match('~^[+-] interval$~', $function)) {
|
} elseif (ereg('^[+-] interval$', $function)) {
|
||||||
$return = idf_escape($name) . " $function " . (preg_match("~^(\\d+|'[0-9.: -]') [A-Z_]+$~i", $value) ? $value : $return);
|
$return = idf_escape($name) . " $function " . (preg_match("~^(\\d+|'[0-9.: -]') [A-Z_]+$~i", $value) ? $value : $return);
|
||||||
} elseif (preg_match('~^(addtime|subtime|concat)$~', $function)) {
|
} elseif (ereg('^(addtime|subtime|concat)$', $function)) {
|
||||||
$return = "$function(" . idf_escape($name) . ", $return)";
|
$return = "$function(" . idf_escape($name) . ", $return)";
|
||||||
} elseif (preg_match('~^(md5|sha1|password|encrypt)$~', $function)) {
|
} elseif (ereg('^(md5|sha1|password|encrypt)$', $function)) {
|
||||||
$return = "$function($return)";
|
$return = "$function($return)";
|
||||||
}
|
}
|
||||||
return unconvert_field($field, $return);
|
return unconvert_field($field, $return);
|
||||||
@@ -704,7 +669,7 @@ username.form['auth[driver]'].onchange();
|
|||||||
foreach ($row as $key => $val) {
|
foreach ($row as $key => $val) {
|
||||||
$field = $fields[$key];
|
$field = $fields[$key];
|
||||||
$row[$key] = ($val !== null
|
$row[$key] = ($val !== null
|
||||||
? unconvert_field($field, preg_match('~(^|[^o])int|float|double|decimal~', $field["type"]) && $val != '' ? $val : q($val))
|
? unconvert_field($field, ereg('(^|[^o])int|float|double|decimal', $field["type"]) && $val != '' ? $val : q($val))
|
||||||
: "NULL"
|
: "NULL"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -743,14 +708,14 @@ username.form['auth[driver]'].onchange();
|
|||||||
*/
|
*/
|
||||||
function dumpHeaders($identifier, $multi_table = false) {
|
function dumpHeaders($identifier, $multi_table = false) {
|
||||||
$output = $_POST["output"];
|
$output = $_POST["output"];
|
||||||
$ext = (preg_match('~sql~', $_POST["format"]) ? "sql" : ($multi_table ? "tar" : "csv")); // multiple CSV packed to TAR
|
$ext = (ereg('sql', $_POST["format"]) ? "sql" : ($multi_table ? "tar" : "csv")); // multiple CSV packed to TAR
|
||||||
header("Content-Type: " .
|
header("Content-Type: " .
|
||||||
($output == "gz" ? "application/x-gzip" :
|
($output == "gz" ? "application/x-gzip" :
|
||||||
($ext == "tar" ? "application/x-tar" :
|
($ext == "tar" ? "application/x-tar" :
|
||||||
($ext == "sql" || $output != "file" ? "text/plain" : "text/csv") . "; charset=utf-8"
|
($ext == "sql" || $output != "file" ? "text/plain" : "text/csv") . "; charset=utf-8"
|
||||||
)));
|
)));
|
||||||
if ($output == "gz") {
|
if ($output == "gz") {
|
||||||
ob_start('ob_gzencode', 1e6);
|
ob_start('gzencode', 1e6);
|
||||||
}
|
}
|
||||||
return $ext;
|
return $ext;
|
||||||
}
|
}
|
||||||
@@ -759,7 +724,7 @@ username.form['auth[driver]'].onchange();
|
|||||||
* @return bool whether to print default homepage
|
* @return bool whether to print default homepage
|
||||||
*/
|
*/
|
||||||
function homepage() {
|
function homepage() {
|
||||||
echo '<p class="links">' . ($_GET["ns"] == "" && support("database") ? '<a href="' . h(ME) . 'database=">' . lang('Alter database') . "</a>\n" : "");
|
echo '<p>' . ($_GET["ns"] == "" ? '<a href="' . h(ME) . 'database=">' . lang('Alter database') . "</a>\n" : "");
|
||||||
echo (support("scheme") ? "<a href='" . h(ME) . "scheme='>" . ($_GET["ns"] != "" ? lang('Alter schema') : lang('Create schema')) . "</a>\n" : "");
|
echo (support("scheme") ? "<a href='" . h(ME) . "scheme='>" . ($_GET["ns"] != "" ? lang('Alter schema') : lang('Create schema')) . "</a>\n" : "");
|
||||||
echo ($_GET["ns"] !== "" ? '<a href="' . h(ME) . 'schema=">' . lang('Database schema') . "</a>\n" : "");
|
echo ($_GET["ns"] !== "" ? '<a href="' . h(ME) . 'schema=">' . lang('Database schema') . "</a>\n" : "");
|
||||||
echo (support("privileges") ? "<a href='" . h(ME) . "privileges='>" . lang('Privileges') . "</a>\n" : "");
|
echo (support("privileges") ? "<a href='" . h(ME) . "privileges='>" . lang('Privileges') . "</a>\n" : "");
|
||||||
@@ -771,16 +736,16 @@ username.form['auth[driver]'].onchange();
|
|||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function navigation($missing) {
|
function navigation($missing) {
|
||||||
global $VERSION, $jush, $drivers, $connection;
|
global $VERSION, $token, $jush, $drivers;
|
||||||
?>
|
?>
|
||||||
<h1>
|
<h1>
|
||||||
<?php echo $this->name(); ?> <span class="version"><?php echo $VERSION; ?></span>
|
<?php echo $this->name(); ?> <span class="version"><?php echo $VERSION; ?></span>
|
||||||
<a href="http://www.adminer.org/#download" target="_blank" id="version"><?php echo (version_compare($VERSION, $_COOKIE["adminer_version"]) < 0 ? h($_COOKIE["adminer_version"]) : ""); ?></a>
|
<a href="http://www.adminer.org/#download" id="version"><?php echo (version_compare($VERSION, $_COOKIE["adminer_version"]) < 0 ? h($_COOKIE["adminer_version"]) : ""); ?></a>
|
||||||
</h1>
|
</h1>
|
||||||
<?php
|
<?php
|
||||||
if ($missing == "auth") {
|
if ($missing == "auth") {
|
||||||
$first = true;
|
$first = true;
|
||||||
foreach ((array) $_SESSION["pwds"] as $vendor => $servers) {
|
foreach ((array) $_SESSION["pwds"] as $driver => $servers) {
|
||||||
foreach ($servers as $server => $usernames) {
|
foreach ($servers as $server => $usernames) {
|
||||||
foreach ($usernames as $username => $password) {
|
foreach ($usernames as $username => $password) {
|
||||||
if ($password !== null) {
|
if ($password !== null) {
|
||||||
@@ -788,55 +753,49 @@ username.form['auth[driver]'].onchange();
|
|||||||
echo "<p id='logins' onmouseover='menuOver(this, event);' onmouseout='menuOut(this);'>\n";
|
echo "<p id='logins' onmouseover='menuOver(this, event);' onmouseout='menuOut(this);'>\n";
|
||||||
$first = false;
|
$first = false;
|
||||||
}
|
}
|
||||||
$dbs = $_SESSION["db"][$vendor][$server][$username];
|
$dbs = $_SESSION["db"][$driver][$server][$username];
|
||||||
foreach (($dbs ? array_keys($dbs) : array("")) as $db) {
|
foreach (($dbs ? array_keys($dbs) : array("")) as $db) {
|
||||||
echo "<a href='" . h(auth_url($vendor, $server, $username, $db)) . "'>($drivers[$vendor]) " . h($username . ($server != "" ? "@$server" : "") . ($db != "" ? " - $db" : "")) . "</a><br>\n";
|
echo "<a href='" . h(auth_url($driver, $server, $username, $db)) . "'>($drivers[$driver]) " . h($username . ($server != "" ? "@$server" : "") . ($db != "" ? " - $db" : "")) . "</a><br>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ($_GET["ns"] !== "" && !$missing && DB != "") {
|
?>
|
||||||
$connection->select_db(DB);
|
<form action="" method="post">
|
||||||
$tables = table_status('', true);
|
<p class="logout">
|
||||||
}
|
|
||||||
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
|
<?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) {
|
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" : "") . "";
|
echo "<a href='" . h(ME) . "sql='" . bold(isset($_GET["sql"])) . ">" . lang('SQL command') . "</a>\n";
|
||||||
if (support("dump")) {
|
if (support("dump")) {
|
||||||
echo "<a href='" . h(ME) . "dump=" . urlencode(isset($_GET["table"]) ? $_GET["table"] : $_GET["select"]) . "' id='dump'" . bold(isset($_GET["dump"])) . ">" . lang('Dump') . "</a>\n";
|
echo "<a href='" . h(ME) . "dump=" . urlencode(isset($_GET["table"]) ? $_GET["table"] : $_GET["select"]) . "' id='dump'" . bold(isset($_GET["dump"])) . ">" . lang('Dump') . "</a>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
?>
|
||||||
|
<input type="submit" name="logout" value="<?php echo lang('Logout'); ?>" id="logout">
|
||||||
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
|
</p>
|
||||||
|
</form>
|
||||||
|
<?php
|
||||||
|
$this->databasesPrint($missing);
|
||||||
if ($_GET["ns"] !== "" && !$missing && DB != "") {
|
if ($_GET["ns"] !== "" && !$missing && DB != "") {
|
||||||
echo '<a href="' . h(ME) . 'create="' . bold($_GET["create"] === "") . ">" . lang('Create table') . "</a>\n";
|
echo '<p><a href="' . h(ME) . 'create="' . bold($_GET["create"] === "") . ">" . lang('Create new table') . "</a>\n";
|
||||||
|
$tables = table_status('', true);
|
||||||
if (!$tables) {
|
if (!$tables) {
|
||||||
echo "<p class='message'>" . lang('No tables.') . "\n";
|
echo "<p class='message'>" . lang('No tables.') . "\n";
|
||||||
} else {
|
} else {
|
||||||
$this->tablesPrint($tables);
|
$this->tablesPrint($tables);
|
||||||
|
$links = array();
|
||||||
|
foreach ($tables as $table => $type) {
|
||||||
|
$links[] = preg_quote($table, '/');
|
||||||
|
}
|
||||||
|
echo "<script type='text/javascript'>\n";
|
||||||
|
echo "var jushLinks = { $jush: [ '" . js_escape(ME) . "table=\$&', /\\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";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -847,22 +806,23 @@ bodyLoad('<?php echo (is_object($connection) ? substr($connection->server_info,
|
|||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function databasesPrint($missing) {
|
function databasesPrint($missing) {
|
||||||
global $adminer, $connection;
|
global $connection;
|
||||||
$databases = $this->databases();
|
$databases = $this->databases();
|
||||||
?>
|
?>
|
||||||
<form action="">
|
<form action="">
|
||||||
<p id="dbs">
|
<p id="dbs">
|
||||||
<?php
|
<?php
|
||||||
hidden_fields_get();
|
hidden_fields_get();
|
||||||
$db_events = " onmousedown='dbMouseDown(event, this);' onchange='dbChange(this);'";
|
echo ($databases
|
||||||
echo "<span title='" . lang('database') . "'>DB</span>: " . ($databases
|
? '<select name="db" onmousedown="dbMouseDown(event, this);" onchange="dbChange(this);">' . optionlist(array("" => "(" . lang('database') . ")") + $databases, DB) . '</select>'
|
||||||
? "<select name='db'$db_events>" . optionlist(array("" => "") + $databases, DB) . "</select>"
|
: '<input name="db" value="' . h(DB) . '" autocapitalize="off">'
|
||||||
: '<input name="db" value="' . h(DB) . '" autocapitalize="off">'
|
);
|
||||||
);
|
?>
|
||||||
echo "<input type='submit' value='" . lang('Use') . "'" . ($databases ? " class='hidden'" : "") . ">\n";
|
<input type="submit" value="<?php echo lang('Use'); ?>"<?php echo ($databases ? " class='hidden'" : ""); ?>>
|
||||||
|
<?php
|
||||||
if ($missing != "db" && DB != "" && $connection->select_db(DB)) {
|
if ($missing != "db" && DB != "" && $connection->select_db(DB)) {
|
||||||
if (support("scheme")) {
|
if (support("scheme")) {
|
||||||
echo "<br>" . lang('Schema') . ": <select name='ns'$db_events>" . optionlist(array("" => "") + $adminer->schemas(), $_GET["ns"]) . "</select>";
|
echo "<br>" . html_select("ns", array("" => "(" . lang('schema') . ")") + schemas(), $_GET["ns"], "this.form.submit();");
|
||||||
if ($_GET["ns"] != "") {
|
if ($_GET["ns"] != "") {
|
||||||
set_schema($_GET["ns"]);
|
set_schema($_GET["ns"]);
|
||||||
}
|
}
|
||||||
@@ -871,8 +831,7 @@ bodyLoad('<?php echo (is_object($connection) ? substr($connection->server_info,
|
|||||||
echo (isset($_GET["sql"]) ? '<input type="hidden" name="sql" value="">'
|
echo (isset($_GET["sql"]) ? '<input type="hidden" name="sql" value="">'
|
||||||
: (isset($_GET["schema"]) ? '<input type="hidden" name="schema" value="">'
|
: (isset($_GET["schema"]) ? '<input type="hidden" name="schema" value="">'
|
||||||
: (isset($_GET["dump"]) ? '<input type="hidden" name="dump" value="">'
|
: (isset($_GET["dump"]) ? '<input type="hidden" name="dump" value="">'
|
||||||
: (isset($_GET["privileges"]) ? '<input type="hidden" name="privileges" value="">'
|
: "")));
|
||||||
: ""))));
|
|
||||||
echo "</p></form>\n";
|
echo "</p></form>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -883,12 +842,8 @@ bodyLoad('<?php echo (is_object($connection) ? substr($connection->server_info,
|
|||||||
function tablesPrint($tables) {
|
function tablesPrint($tables) {
|
||||||
echo "<p id='tables' onmouseover='menuOver(this, event);' onmouseout='menuOut(this);'>\n";
|
echo "<p id='tables' onmouseover='menuOver(this, event);' onmouseout='menuOut(this);'>\n";
|
||||||
foreach ($tables as $table => $status) {
|
foreach ($tables as $table => $status) {
|
||||||
echo '<a href="' . h(ME) . 'select=' . urlencode($table) . '"' . bold($_GET["select"] == $table || $_GET["edit"] == $table) . ">" . lang('select') . "</a> ";
|
echo '<a href="' . h(ME) . 'select=' . urlencode($table) . '"' . bold($_GET["select"] == $table) . ">" . lang('select') . "</a> ";
|
||||||
$name = $this->tableName($status);
|
echo '<a href="' . h(ME) . 'table=' . urlencode($table) . '"' . bold($_GET["table"] == $table) . " title='" . lang('Show structure') . "'>" . $this->tableName($status) . "</a><br>\n";
|
||||||
echo (support("table") || support("indexes")
|
|
||||||
? '<a href="' . h(ME) . 'table=' . urlencode($table) . '"' . bold(in_array($table, array($_GET["table"], $_GET["create"], $_GET["indexes"], $_GET["foreign"], $_GET["trigger"])), (is_view($status) ? "view" : "")) . " title='" . lang('Show structure') . "'>$name</a>"
|
|
||||||
: "<span>$name</span>"
|
|
||||||
) . "<br>\n";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
<?php
|
<?php
|
||||||
$connection = '';
|
$connection = '';
|
||||||
|
|
||||||
$has_token = $_SESSION["token"];
|
$token = $_SESSION["token"];
|
||||||
if (!$has_token) {
|
if (!$_SESSION["token"]) {
|
||||||
$_SESSION["token"] = rand(1, 1e6); // defense against cross-site request forgery
|
$_SESSION["token"] = rand(1, 1e6); // defense against cross-site request forgery
|
||||||
}
|
}
|
||||||
$token = get_token(); ///< @var string CSRF protection
|
|
||||||
|
|
||||||
$permanent = array();
|
$permanent = array();
|
||||||
if ($_COOKIE["adminer_permanent"]) {
|
if ($_COOKIE["adminer_permanent"]) {
|
||||||
@@ -15,72 +14,28 @@ 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"];
|
$auth = $_POST["auth"];
|
||||||
if ($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
|
session_regenerate_id(); // defense against session fixation
|
||||||
$driver = $auth["driver"];
|
$_SESSION["pwds"][$auth["driver"]][$auth["server"]][$auth["username"]] = $auth["password"];
|
||||||
$server = $auth["server"];
|
$_SESSION["db"][$auth["driver"]][$auth["server"]][$auth["username"]][$auth["db"]] = true;
|
||||||
$username = $auth["username"];
|
|
||||||
$password = (string) $auth["password"];
|
|
||||||
$db = $auth["db"];
|
|
||||||
set_password($driver, $server, $username, $password);
|
|
||||||
$_SESSION["db"][$driver][$server][$username][$db] = true;
|
|
||||||
if ($auth["permanent"]) {
|
if ($auth["permanent"]) {
|
||||||
$key = base64_encode($driver) . "-" . base64_encode($server) . "-" . base64_encode($username) . "-" . base64_encode($db);
|
$key = base64_encode($auth["driver"]) . "-" . base64_encode($auth["server"]) . "-" . base64_encode($auth["username"]) . "-" . base64_encode($auth["db"]);
|
||||||
$private = $adminer->permanentLogin(true);
|
$private = $adminer->permanentLogin();
|
||||||
$permanent[$key] = "$key:" . base64_encode($private ? encrypt_string($password, $private) : "");
|
$permanent[$key] = "$key:" . base64_encode($private ? encrypt_string($auth["password"], $private) : "");
|
||||||
cookie("adminer_permanent", implode(" ", $permanent));
|
cookie("adminer_permanent", implode(" ", $permanent));
|
||||||
}
|
}
|
||||||
if (count($_POST) == 1 // 1 - auth
|
if (count($_POST) == 1 // 1 - auth
|
||||||
|| DRIVER != $driver
|
|| DRIVER != $auth["driver"]
|
||||||
|| SERVER != $server
|
|| SERVER != $auth["server"]
|
||||||
|| $_GET["username"] !== $username // "0" == "00"
|
|| $_GET["username"] !== $auth["username"] // "0" == "00"
|
||||||
|| DB != $db
|
|| DB != $auth["db"]
|
||||||
) {
|
) {
|
||||||
redirect(auth_url($driver, $server, $username, $db));
|
redirect(auth_url($auth["driver"], $auth["server"], $auth["username"], $auth["db"]));
|
||||||
}
|
}
|
||||||
|
|
||||||
} elseif ($_POST["logout"]) {
|
} elseif ($_POST["logout"]) {
|
||||||
if ($has_token && !verify_token()) {
|
if ($token && $_POST["token"] != $token) {
|
||||||
page_header(lang('Logout'), lang('Invalid CSRF token. Send the form again.'));
|
page_header(lang('Logout'), lang('Invalid CSRF token. Send the form again.'));
|
||||||
page_footer("db");
|
page_footer("db");
|
||||||
exit;
|
exit;
|
||||||
@@ -89,53 +44,49 @@ if ($auth) {
|
|||||||
set_session($key, null);
|
set_session($key, null);
|
||||||
}
|
}
|
||||||
unset_permanent();
|
unset_permanent();
|
||||||
redirect(substr(preg_replace('~\b(username|db|ns)=[^&]*&~', '', ME), 0, -1), lang('Logout successful.'));
|
redirect(substr(preg_replace('~(username|db|ns)=[^&]*&~', '', ME), 0, -1), lang('Logout successful.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
} elseif ($permanent && !$_SESSION["pwds"]) {
|
} elseif ($permanent && !$_SESSION["pwds"]) {
|
||||||
session_regenerate_id();
|
session_regenerate_id();
|
||||||
$private = $adminer->permanentLogin();
|
$private = $adminer->permanentLogin(); // try to decode even if not set
|
||||||
foreach ($permanent as $key => $val) {
|
foreach ($permanent as $key => $val) {
|
||||||
list(, $cipher) = explode(":", $val);
|
list(, $cipher) = explode(":", $val);
|
||||||
list($vendor, $server, $username, $db) = array_map('base64_decode', explode("-", $key));
|
list($driver, $server, $username, $db) = array_map('base64_decode', explode("-", $key));
|
||||||
set_password($vendor, $server, $username, decrypt_string(base64_decode($cipher), $private));
|
$_SESSION["pwds"][$driver][$server][$username] = decrypt_string(base64_decode($cipher), $private);
|
||||||
$_SESSION["db"][$vendor][$server][$username][$db] = true;
|
$_SESSION["db"][$driver][$server][$username][$db] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function unset_permanent() {
|
function unset_permanent() {
|
||||||
global $permanent;
|
global $permanent;
|
||||||
foreach ($permanent as $key => $val) {
|
foreach ($permanent as $key => $val) {
|
||||||
list($vendor, $server, $username, $db) = array_map('base64_decode', explode("-", $key));
|
list($driver, $server, $username, $db) = array_map('base64_decode', explode("-", $key));
|
||||||
if ($vendor == DRIVER && $server == SERVER && $username == $_GET["username"] && $db == DB) {
|
if ($driver == DRIVER && $server == SERVER && $username == $_GET["username"] && $db == DB) {
|
||||||
unset($permanent[$key]);
|
unset($permanent[$key]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cookie("adminer_permanent", implode(" ", $permanent));
|
cookie("adminer_permanent", implode(" ", $permanent));
|
||||||
}
|
}
|
||||||
|
|
||||||
function auth_error($error) {
|
function auth_error($exception = null) {
|
||||||
global $adminer, $has_token;
|
global $connection, $adminer, $token;
|
||||||
$session_name = session_name();
|
$session_name = session_name();
|
||||||
|
$error = "";
|
||||||
if (!$_COOKIE[$session_name] && $_GET[$session_name] && ini_bool("session.use_only_cookies")) {
|
if (!$_COOKIE[$session_name] && $_GET[$session_name] && ini_bool("session.use_only_cookies")) {
|
||||||
$error = lang('Session support must be enabled.');
|
$error = lang('Session support must be enabled.');
|
||||||
} elseif (isset($_GET["username"])) {
|
} elseif (isset($_GET["username"])) {
|
||||||
if (($_COOKIE[$session_name] || $_GET[$session_name]) && !$has_token) {
|
if (($_COOKIE[$session_name] || $_GET[$session_name]) && !$token) {
|
||||||
$error = lang('Session expired, please login again.');
|
$error = lang('Session expired, please login again.');
|
||||||
} else {
|
} else {
|
||||||
add_invalid_login();
|
$password = &get_session("pwds");
|
||||||
$password = get_password();
|
|
||||||
if ($password !== null) {
|
if ($password !== null) {
|
||||||
if ($password === false) {
|
$error = h($exception ? $exception->getMessage() : (is_string($connection) ? $connection : lang('Invalid credentials.')));
|
||||||
$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>');
|
$password = null;
|
||||||
}
|
|
||||||
set_password(DRIVER, SERVER, $_GET["username"], null);
|
|
||||||
}
|
}
|
||||||
unset_permanent();
|
unset_permanent();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$params = session_get_cookie_params();
|
|
||||||
cookie("adminer_key", ($_COOKIE["adminer_key"] ? $_COOKIE["adminer_key"] : rand_string()), $params["lifetime"]);
|
|
||||||
page_header(lang('Login'), $error, null);
|
page_header(lang('Login'), $error, null);
|
||||||
echo "<form action='' method='post'>\n";
|
echo "<form action='' method='post'>\n";
|
||||||
$adminer->loginForm();
|
$adminer->loginForm();
|
||||||
@@ -144,7 +95,6 @@ function auth_error($error) {
|
|||||||
echo "</div>\n";
|
echo "</div>\n";
|
||||||
echo "</form>\n";
|
echo "</form>\n";
|
||||||
page_footer("auth");
|
page_footer("auth");
|
||||||
exit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($_GET["username"])) {
|
if (isset($_GET["username"])) {
|
||||||
@@ -158,19 +108,19 @@ if (isset($_GET["username"])) {
|
|||||||
$connection = connect();
|
$connection = connect();
|
||||||
}
|
}
|
||||||
|
|
||||||
$driver = new Min_Driver($connection);
|
if (is_string($connection) || !$adminer->login($_GET["username"], get_session("pwds"))) {
|
||||||
|
auth_error();
|
||||||
if (!is_object($connection) || !$adminer->login($_GET["username"], get_password())) {
|
exit;
|
||||||
auth_error((is_string($connection) ? $connection : lang('Invalid credentials.')));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$token = $_SESSION["token"]; ///< @var string CSRF protection
|
||||||
if ($auth && $_POST["token"]) {
|
if ($auth && $_POST["token"]) {
|
||||||
$_POST["token"] = $token; // reset token after explicit login
|
$_POST["token"] = $token; // reset token after explicit login
|
||||||
}
|
}
|
||||||
|
|
||||||
$error = ''; ///< @var string
|
$error = ''; ///< @var string
|
||||||
if ($_POST) {
|
if ($_POST) {
|
||||||
if (!verify_token()) {
|
if ($_POST["token"] != $token) {
|
||||||
$ini = "max_input_vars";
|
$ini = "max_input_vars";
|
||||||
$max_vars = ini_get($ini);
|
$max_vars = ini_get($ini);
|
||||||
if (extension_loaded("suhosin")) {
|
if (extension_loaded("suhosin")) {
|
||||||
@@ -191,7 +141,4 @@ if ($_POST) {
|
|||||||
} elseif ($_SERVER["REQUEST_METHOD"] == "POST") {
|
} elseif ($_SERVER["REQUEST_METHOD"] == "POST") {
|
||||||
// posted form with no data means that post_max_size exceeded because Adminer always sends token at least
|
// posted form with no data means that post_max_size exceeded because Adminer always sends token at least
|
||||||
$error = lang('Too big POST data. Reduce the data or increase the %s configuration directive.', "'post_max_size'");
|
$error = lang('Too big POST data. Reduce the data or increase the %s configuration directive.', "'post_max_size'");
|
||||||
if (isset($_GET["sql"])) {
|
|
||||||
$error .= ' ' . lang('You can upload a big SQL file via FTP and import it from server.');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ error_reporting(6135); // errors and warnings
|
|||||||
include "../adminer/include/coverage.inc.php";
|
include "../adminer/include/coverage.inc.php";
|
||||||
|
|
||||||
// disable filter.default
|
// disable filter.default
|
||||||
$filter = !preg_match('~^(unsafe_raw)?$~', ini_get("filter.default"));
|
$filter = !ereg('^(unsafe_raw)?$', ini_get("filter.default"));
|
||||||
if ($filter || ini_get("filter.default_flags")) {
|
if ($filter || ini_get("filter.default_flags")) {
|
||||||
foreach (array('_GET', '_POST', '_COOKIE', '_SERVER') as $val) {
|
foreach (array('_GET', '_POST', '_COOKIE', '_SERVER') as $val) {
|
||||||
$unsafe = filter_input_array(constant("INPUT$val"), FILTER_UNSAFE_RAW);
|
$unsafe = filter_input_array(constant("INPUT$val"), FILTER_UNSAFE_RAW);
|
||||||
@@ -25,7 +25,7 @@ if (isset($_GET["file"])) {
|
|||||||
|
|
||||||
include "../adminer/include/functions.inc.php";
|
include "../adminer/include/functions.inc.php";
|
||||||
|
|
||||||
global $adminer, $connection, $drivers, $edit_functions, $enum_length, $error, $functions, $grouping, $HTTPS, $inout, $jush, $LANG, $langs, $on_actions, $permanent, $structured_types, $has_token, $token, $translations, $types, $unsigned, $VERSION; // allows including Adminer inside a function
|
global $adminer, $connection, $drivers, $edit_functions, $enum_length, $error, $functions, $grouping, $HTTPS, $inout, $jush, $LANG, $langs, $on_actions, $permanent, $structured_types, $token, $translations, $types, $unsigned, $VERSION; // allows including Adminer inside a function
|
||||||
|
|
||||||
if (!$_SERVER["REQUEST_URI"]) { // IIS 5 compatibility
|
if (!$_SERVER["REQUEST_URI"]) { // IIS 5 compatibility
|
||||||
$_SERVER["REQUEST_URI"] = $_SERVER["ORIG_PATH_INFO"];
|
$_SERVER["REQUEST_URI"] = $_SERVER["ORIG_PATH_INFO"];
|
||||||
@@ -36,7 +36,6 @@ if (!strpos($_SERVER["REQUEST_URI"], '?') && $_SERVER["QUERY_STRING"] != "") { /
|
|||||||
$HTTPS = $_SERVER["HTTPS"] && strcasecmp($_SERVER["HTTPS"], "off");
|
$HTTPS = $_SERVER["HTTPS"] && strcasecmp($_SERVER["HTTPS"], "off");
|
||||||
|
|
||||||
@ini_set("session.use_trans_sid", false); // protect links in export, @ - may be disabled
|
@ini_set("session.use_trans_sid", false); // protect links in export, @ - may be disabled
|
||||||
session_cache_limiter(""); // to allow restarting session and to not send Cache-Control: no-store
|
|
||||||
if (!defined("SID")) {
|
if (!defined("SID")) {
|
||||||
session_name("adminer_sid"); // use specific session name to get own namespace
|
session_name("adminer_sid"); // use specific session name to get own namespace
|
||||||
$params = array(0, preg_replace('~\\?.*~', '', $_SERVER["REQUEST_URI"]), "", $HTTPS);
|
$params = array(0, preg_replace('~\\?.*~', '', $_SERVER["REQUEST_URI"]), "", $HTTPS);
|
||||||
@@ -49,7 +48,7 @@ if (!defined("SID")) {
|
|||||||
|
|
||||||
// disable magic quotes to be able to use database escaping function
|
// disable magic quotes to be able to use database escaping function
|
||||||
remove_slashes(array(&$_GET, &$_POST, &$_COOKIE), $filter);
|
remove_slashes(array(&$_GET, &$_POST, &$_COOKIE), $filter);
|
||||||
if (get_magic_quotes_runtime()) {
|
if (function_exists("set_magic_quotes_runtime")) { // removed in PHP 6
|
||||||
set_magic_quotes_runtime(false);
|
set_magic_quotes_runtime(false);
|
||||||
}
|
}
|
||||||
@set_time_limit(0); // @ - can be disabled
|
@set_time_limit(0); // @ - can be disabled
|
||||||
@@ -59,14 +58,10 @@ if (get_magic_quotes_runtime()) {
|
|||||||
include "../adminer/include/lang.inc.php";
|
include "../adminer/include/lang.inc.php";
|
||||||
include "../adminer/lang/$LANG.inc.php";
|
include "../adminer/lang/$LANG.inc.php";
|
||||||
include "../adminer/include/pdo.inc.php";
|
include "../adminer/include/pdo.inc.php";
|
||||||
include "../adminer/include/driver.inc.php";
|
|
||||||
include "../adminer/drivers/sqlite.inc.php";
|
include "../adminer/drivers/sqlite.inc.php";
|
||||||
include "../adminer/drivers/pgsql.inc.php";
|
include "../adminer/drivers/pgsql.inc.php";
|
||||||
include "../adminer/drivers/oracle.inc.php";
|
include "../adminer/drivers/oracle.inc.php";
|
||||||
include "../adminer/drivers/mssql.inc.php";
|
include "../adminer/drivers/mssql.inc.php";
|
||||||
include "../adminer/drivers/simpledb.inc.php";
|
|
||||||
include "../adminer/drivers/mongo.inc.php";
|
|
||||||
include "../adminer/drivers/elastic.inc.php";
|
|
||||||
include "../adminer/drivers/mysql.inc.php"; // must be included as last driver
|
include "../adminer/drivers/mysql.inc.php"; // must be included as last driver
|
||||||
|
|
||||||
define("SERVER", $_GET[DRIVER]); // read from pgsql=localhost
|
define("SERVER", $_GET[DRIVER]); // read from pgsql=localhost
|
||||||
@@ -85,10 +80,11 @@ include "../adminer/include/xxtea.inc.php";
|
|||||||
include "../adminer/include/auth.inc.php";
|
include "../adminer/include/auth.inc.php";
|
||||||
|
|
||||||
if (!ini_bool("session.use_cookies") || @ini_set("session.use_cookies", false) !== false) { // @ - may be disabled
|
if (!ini_bool("session.use_cookies") || @ini_set("session.use_cookies", false) !== false) { // @ - may be disabled
|
||||||
|
session_cache_limiter(""); // to allow restarting session
|
||||||
session_write_close(); // improves concurrency if a user opens several pages at once, may be restarted later
|
session_write_close(); // improves concurrency if a user opens several pages at once, may be restarted later
|
||||||
}
|
}
|
||||||
|
|
||||||
include "./include/editing.inc.php";
|
|
||||||
include "./include/connect.inc.php";
|
include "./include/connect.inc.php";
|
||||||
|
include "./include/editing.inc.php";
|
||||||
|
|
||||||
$on_actions = "RESTRICT|NO ACTION|CASCADE|SET NULL|SET DEFAULT"; ///< @var string used in foreign_keys()
|
$on_actions = "RESTRICT|NO ACTION|CASCADE|SET NULL|SET DEFAULT"; ///< @var string used in foreign_keys()
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
function connect_error() {
|
function connect_error() {
|
||||||
global $adminer, $connection, $token, $error, $drivers;
|
global $adminer, $connection, $token, $error, $drivers;
|
||||||
|
$databases = array();
|
||||||
if (DB != "") {
|
if (DB != "") {
|
||||||
header("HTTP/1.1 404 Not Found");
|
|
||||||
page_header(lang('Database') . ": " . h(DB), lang('Invalid database.'), true);
|
page_header(lang('Database') . ": " . h(DB), lang('Invalid database.'), true);
|
||||||
} else {
|
} else {
|
||||||
if ($_POST["db"] && !$error) {
|
if ($_POST["db"] && !$error) {
|
||||||
@@ -10,9 +10,8 @@ function connect_error() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
page_header(lang('Select database'), $error, false);
|
page_header(lang('Select database'), $error, false);
|
||||||
echo "<p class='links'>\n";
|
echo "<p><a href='" . h(ME) . "database='>" . lang('Create new database') . "</a>\n";
|
||||||
foreach (array(
|
foreach (array(
|
||||||
'database' => lang('Create new database'),
|
|
||||||
'privileges' => lang('Privileges'),
|
'privileges' => lang('Privileges'),
|
||||||
'processlist' => lang('Process list'),
|
'processlist' => lang('Process list'),
|
||||||
'variables' => lang('Variables'),
|
'variables' => lang('Variables'),
|
||||||
@@ -22,60 +21,46 @@ function connect_error() {
|
|||||||
echo "<a href='" . h(ME) . "$key='>$val</a>\n";
|
echo "<a href='" . h(ME) . "$key='>$val</a>\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('%s version: %s through PHP extension %s', $drivers[DRIVER], "<b>$connection->server_info</b>", "<b>$connection->extension</b>") . "\n";
|
||||||
echo "<p>" . lang('Logged as: %s', "<b>" . h(logged_user()) . "</b>") . "\n";
|
echo "<p>" . lang('Logged as: %s', "<b>" . h(logged_user()) . "</b>") . "\n";
|
||||||
|
$refresh = "<a href='" . h(ME) . "refresh=1'>" . lang('Refresh') . "</a>\n";
|
||||||
$databases = $adminer->databases();
|
$databases = $adminer->databases();
|
||||||
if ($databases) {
|
if ($databases) {
|
||||||
$scheme = support("scheme");
|
$scheme = support("scheme");
|
||||||
$collations = collations();
|
$collations = collations();
|
||||||
echo "<form action='' method='post'>\n";
|
echo "<form action='' method='post'>\n";
|
||||||
echo "<table cellspacing='0' class='checkable' onclick='tableClick(event);' ondblclick='tableClick(event, true);'>\n";
|
echo "<table cellspacing='0' class='checkable' onclick='tableClick(event);' ondblclick='tableClick(event, true);'>\n";
|
||||||
echo "<thead><tr>"
|
echo "<thead><tr><td> <th>" . lang('Database') . "<td>" . lang('Collation') . "<td>" . lang('Tables') . "</thead>\n";
|
||||||
. (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"
|
|
||||||
;
|
|
||||||
|
|
||||||
$databases = ($_GET["dbsize"] ? count_tables($databases) : array_flip($databases));
|
foreach ($databases as $db) {
|
||||||
|
|
||||||
foreach ($databases as $db => $tables) {
|
|
||||||
$root = h(ME) . "db=" . urlencode($db);
|
$root = h(ME) . "db=" . urlencode($db);
|
||||||
echo "<tr" . odd() . ">" . (support("database") ? "<td>" . checkbox("db[]", $db, in_array($db, (array) $_POST["db"])) : "");
|
echo "<tr" . odd() . "><td>" . checkbox("db[]", $db, in_array($db, (array) $_POST["db"]));
|
||||||
echo "<th><a href='$root'>" . h($db) . "</a>";
|
echo "<th><a href='$root'>" . h($db) . "</a>";
|
||||||
$collation = nbsp(db_collation($db, $collations));
|
echo "<td><a href='$root" . ($scheme ? "&ns=" : "") . "&database=' title='" . lang('Alter database') . "'>" . nbsp(db_collation($db, $collations)) . "</a>";
|
||||||
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";
|
echo "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
echo (support("database")
|
|
||||||
? "<fieldset><legend>" . lang('Selected') . " <span id='selected'></span></legend><div>\n"
|
|
||||||
. "<input type='hidden' name='all' value='' onclick=\"selectCount('selected', formChecked(this, /^db/));\">\n" // used by trCheck()
|
|
||||||
. "<input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm() . ">\n"
|
|
||||||
. "</div></fieldset>\n"
|
|
||||||
: ""
|
|
||||||
);
|
|
||||||
echo "<script type='text/javascript'>tableCheck();</script>\n";
|
echo "<script type='text/javascript'>tableCheck();</script>\n";
|
||||||
|
echo "<p><input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm("formChecked(this, /db/)") . ">\n";
|
||||||
echo "<input type='hidden' name='token' value='$token'>\n";
|
echo "<input type='hidden' name='token' value='$token'>\n";
|
||||||
|
echo $refresh;
|
||||||
echo "</form>\n";
|
echo "</form>\n";
|
||||||
|
} else {
|
||||||
|
echo "<p>$refresh";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
page_footer("db");
|
page_footer("db");
|
||||||
|
if ($databases) {
|
||||||
|
echo "<script type='text/javascript'>ajaxSetHtml('" . js_escape(ME) . "script=connect');</script>\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($_GET["status"])) {
|
if (isset($_GET["status"])) {
|
||||||
$_GET["variables"] = $_GET["status"];
|
$_GET["variables"] = $_GET["status"];
|
||||||
}
|
}
|
||||||
if (isset($_GET["import"])) {
|
|
||||||
$_GET["sql"] = $_GET["import"];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(DB != "" ? $connection->select_db(DB) : isset($_GET["sql"]) || isset($_GET["dump"]) || isset($_GET["database"]) || isset($_GET["processlist"]) || isset($_GET["privileges"]) || isset($_GET["user"]) || isset($_GET["variables"]) || $_GET["script"] == "connect" || $_GET["script"] == "kill")) {
|
if (!(DB != "" ? $connection->select_db(DB) : isset($_GET["sql"]) || isset($_GET["dump"]) || isset($_GET["database"]) || isset($_GET["processlist"]) || isset($_GET["privileges"]) || isset($_GET["user"]) || isset($_GET["variables"]) || $_GET["script"] == "connect" || $_GET["script"] == "kill")) {
|
||||||
if (DB != "" || $_GET["refresh"]) {
|
if (DB != "" || $_GET["refresh"]) {
|
||||||
restart_session();
|
restart_session();
|
||||||
@@ -90,7 +75,6 @@ if (support("scheme") && DB != "" && $_GET["ns"] !== "") {
|
|||||||
redirect(preg_replace('~ns=[^&]*&~', '', ME) . "ns=" . get_schema());
|
redirect(preg_replace('~ns=[^&]*&~', '', ME) . "ns=" . get_schema());
|
||||||
}
|
}
|
||||||
if (!set_schema($_GET["ns"])) {
|
if (!set_schema($_GET["ns"])) {
|
||||||
header("HTTP/1.1 404 Not Found");
|
|
||||||
page_header(lang('Schema') . ": " . h($_GET["ns"]), lang('Invalid schema.'), true);
|
page_header(lang('Schema') . ": " . h($_GET["ns"]), lang('Invalid schema.'), true);
|
||||||
page_footer("ns");
|
page_footer("ns");
|
||||||
exit;
|
exit;
|
||||||
|
|||||||
@@ -2,14 +2,18 @@
|
|||||||
/** Print HTML header
|
/** Print HTML header
|
||||||
* @param string used in title, breadcrumb and heading, should be HTML escaped
|
* @param string used in title, breadcrumb and heading, should be HTML escaped
|
||||||
* @param string
|
* @param string
|
||||||
* @param mixed array("key" => "link", "key2" => array("link", "desc")), null for nothing, false for driver only, true for driver and server
|
* @param mixed array("key" => "link=desc", "key2" => array("link", "desc")), null for nothing, false for driver only, true for driver and server
|
||||||
* @param string used after colon in title and heading, should be HTML escaped
|
* @param string used after colon in title and heading, will be HTML escaped
|
||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") {
|
function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") {
|
||||||
global $LANG, $VERSION, $adminer, $drivers, $jush;
|
global $LANG, $adminer, $connection, $drivers;
|
||||||
page_headers();
|
header("Content-Type: text/html; charset=utf-8");
|
||||||
$title_all = $title . ($title2 != "" ? ": $title2" : "");
|
if ($adminer->headers()) {
|
||||||
|
header("X-Frame-Options: deny"); // ClickJacking protection in IE8, Safari 4, Chrome 2, Firefox 3.6.9
|
||||||
|
header("X-XSS-Protection: 0"); // prevents introducing XSS in IE8 by removing safe parts of the page
|
||||||
|
}
|
||||||
|
$title_all = $title . ($title2 != "" ? ": " . h($title2) : "");
|
||||||
$title_page = strip_tags($title_all . (SERVER != "" && SERVER != "localhost" ? h(" - " . SERVER) : "") . " - " . $adminer->name());
|
$title_page = strip_tags($title_all . (SERVER != "" && SERVER != "localhost" ? h(" - " . SERVER) : "") . " - " . $adminer->name());
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
@@ -29,19 +33,17 @@ function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") {
|
|||||||
<?php } ?>
|
<?php } ?>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
|
|
||||||
<body class="<?php echo lang('ltr'); ?> nojs" onkeydown="bodyKeydown(event);" onclick="bodyClick(event);"<?php echo (isset($_COOKIE["adminer_version"]) ? "" : " onload=\"verifyVersion('$VERSION');\""); ?>>
|
<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();"); ?>">
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
document.body.className = document.body.className.replace(/ nojs/, ' js');
|
document.body.className = document.body.className.replace(/ nojs/, ' js');
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div id="help" class="jush-<?php echo $jush; ?> jsonly hidden" onmouseover="helpOpen = 1;" onmouseout="helpMouseout(this, event);"></div>
|
|
||||||
|
|
||||||
<div id="content">
|
<div id="content">
|
||||||
<?php
|
<?php
|
||||||
if ($breadcrumb !== null) {
|
if ($breadcrumb !== null) {
|
||||||
$link = substr(preg_replace('~\b(username|db|ns)=[^&]*&~', '', ME), 0, -1);
|
$link = substr(preg_replace('~(username|db|ns)=[^&]*&~', '', ME), 0, -1);
|
||||||
echo '<p id="breadcrumb"><a href="' . h($link ? $link : ".") . '">' . $drivers[DRIVER] . '</a> » ';
|
echo '<p id="breadcrumb"><a href="' . h($link ? $link : ".") . '">' . $drivers[DRIVER] . '</a> » ';
|
||||||
$link = substr(preg_replace('~\b(db|ns)=[^&]*&~', '', ME), 0, -1);
|
$link = substr(preg_replace('~(db|ns)=[^&]*&~', '', ME), 0, -1);
|
||||||
$server = (SERVER != "" ? h(SERVER) : lang('Server'));
|
$server = (SERVER != "" ? h(SERVER) : lang('Server'));
|
||||||
if ($breadcrumb === false) {
|
if ($breadcrumb === false) {
|
||||||
echo "$server\n";
|
echo "$server\n";
|
||||||
@@ -55,9 +57,9 @@ document.body.className = document.body.className.replace(/ nojs/, ' js');
|
|||||||
echo '<a href="' . h(substr(ME, 0, -1)) . '">' . h($_GET["ns"]) . '</a> » ';
|
echo '<a href="' . h(substr(ME, 0, -1)) . '">' . h($_GET["ns"]) . '</a> » ';
|
||||||
}
|
}
|
||||||
foreach ($breadcrumb as $key => $val) {
|
foreach ($breadcrumb as $key => $val) {
|
||||||
$desc = (is_array($val) ? $val[1] : h($val));
|
$desc = (is_array($val) ? $val[1] : $val);
|
||||||
if ($desc != "") {
|
if ($desc != "") {
|
||||||
echo "<a href='" . h(ME . "$key=") . urlencode(is_array($val) ? $val[0] : $val) . "'>$desc</a> » ";
|
echo '<a href="' . h(ME . "$key=") . urlencode(is_array($val) ? $val[0] : $val) . '">' . h($desc) . '</a> » ';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -66,42 +68,21 @@ document.body.className = document.body.className.replace(/ nojs/, ' js');
|
|||||||
}
|
}
|
||||||
echo "<h2>$title_all</h2>\n";
|
echo "<h2>$title_all</h2>\n";
|
||||||
restart_session();
|
restart_session();
|
||||||
page_messages($error);
|
|
||||||
$databases = &get_session("dbs");
|
|
||||||
if (DB != "" && $databases && !in_array(DB, $databases, true)) {
|
|
||||||
$databases = null;
|
|
||||||
}
|
|
||||||
stop_session();
|
|
||||||
define("PAGE_HEADER", 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Send HTTP headers
|
|
||||||
* @return null
|
|
||||||
*/
|
|
||||||
function page_headers() {
|
|
||||||
global $adminer;
|
|
||||||
header("Content-Type: text/html; charset=utf-8");
|
|
||||||
header("Cache-Control: no-cache");
|
|
||||||
if ($adminer->headers()) {
|
|
||||||
header("X-Frame-Options: deny"); // ClickJacking protection in IE8, Safari 4, Chrome 2, Firefox 3.6.9
|
|
||||||
header("X-XSS-Protection: 0"); // prevents introducing XSS in IE8 by removing safe parts of the page
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Print flash and error messages
|
|
||||||
* @param string
|
|
||||||
* @return null
|
|
||||||
*/
|
|
||||||
function page_messages($error) {
|
|
||||||
$uri = preg_replace('~^[^?]*~', '', $_SERVER["REQUEST_URI"]);
|
$uri = preg_replace('~^[^?]*~', '', $_SERVER["REQUEST_URI"]);
|
||||||
$messages = $_SESSION["messages"][$uri];
|
$messages = $_SESSION["messages"][$uri];
|
||||||
if ($messages) {
|
if ($messages) {
|
||||||
echo "<div class='message'>" . implode("</div>\n<div class='message'>", $messages) . "</div>\n";
|
echo "<div class='message'>" . implode("</div>\n<div class='message'>", $messages) . "</div>\n";
|
||||||
unset($_SESSION["messages"][$uri]);
|
unset($_SESSION["messages"][$uri]);
|
||||||
}
|
}
|
||||||
|
$databases = &get_session("dbs");
|
||||||
|
if (DB != "" && $databases && !in_array(DB, $databases, true)) {
|
||||||
|
$databases = null;
|
||||||
|
}
|
||||||
|
stop_session();
|
||||||
if ($error) {
|
if ($error) {
|
||||||
echo "<div class='error'>$error</div>\n";
|
echo "<div class='error'>$error</div>\n";
|
||||||
}
|
}
|
||||||
|
define("PAGE_HEADER", 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Print HTML footer
|
/** Print HTML footer
|
||||||
@@ -109,19 +90,11 @@ function page_messages($error) {
|
|||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function page_footer($missing = "") {
|
function page_footer($missing = "") {
|
||||||
global $adminer, $token;
|
global $adminer;
|
||||||
?>
|
?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<?php switch_lang(); ?>
|
<?php switch_lang(); ?>
|
||||||
<?php if ($missing != "auth") { ?>
|
|
||||||
<form action="" method="post">
|
|
||||||
<p class="logout">
|
|
||||||
<input type="submit" name="logout" value="<?php echo lang('Logout'); ?>" id="logout">
|
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
|
||||||
</p>
|
|
||||||
</form>
|
|
||||||
<?php } ?>
|
|
||||||
<div id="menu">
|
<div id="menu">
|
||||||
<?php $adminer->navigation($missing); ?>
|
<?php $adminer->navigation($missing); ?>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,118 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*abstract*/ class Min_SQL {
|
|
||||||
var $_conn;
|
|
||||||
|
|
||||||
/** Create object for performing database operations
|
|
||||||
* @param Min_DB
|
|
||||||
*/
|
|
||||||
function Min_SQL($connection) {
|
|
||||||
$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]
|
|
||||||
* @param array result of $adminer->selectSearchProcess()
|
|
||||||
* @param array result of $adminer->selectColumnsProcess()[1]
|
|
||||||
* @param array result of $adminer->selectOrderProcess()
|
|
||||||
* @param int result of $adminer->selectLimitProcess()
|
|
||||||
* @param int index of page starting at zero
|
|
||||||
* @param bool whether to print the query
|
|
||||||
* @return Min_Result
|
|
||||||
*/
|
|
||||||
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);
|
|
||||||
if (!$query) {
|
|
||||||
$query = "SELECT" . limit(
|
|
||||||
($_GET["page"] != "last" && +$limit && $group && $is_group && $jush == "sql" ? "SQL_CALC_FOUND_ROWS " : "") . implode(", ", $select) . "\nFROM " . table($table),
|
|
||||||
($where ? "\nWHERE " . implode(" AND ", $where) : "") . ($group && $is_group ? "\nGROUP BY " . implode(", ", $group) : "") . ($order ? "\nORDER BY " . implode(", ", $order) : ""),
|
|
||||||
($limit != "" ? +$limit : null),
|
|
||||||
($page ? $limit * $page : 0),
|
|
||||||
"\n"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
$start = microtime(true);
|
|
||||||
$return = $this->_conn->query($query);
|
|
||||||
if ($print) {
|
|
||||||
echo $adminer->selectQuery($query, format_time($start));
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Delete data from table
|
|
||||||
* @param string
|
|
||||||
* @param string " WHERE ..."
|
|
||||||
* @param int 0 or 1
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
function delete($table, $queryWhere, $limit = 0) {
|
|
||||||
$query = "FROM " . table($table);
|
|
||||||
return queries("DELETE" . ($limit ? limit1($query, $queryWhere) : " $query$queryWhere"));
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Update data in table
|
|
||||||
* @param string
|
|
||||||
* @param array escaped columns in keys, quoted data in values
|
|
||||||
* @param string " WHERE ..."
|
|
||||||
* @param int 0 or 1
|
|
||||||
* @param string
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
function update($table, $set, $queryWhere, $limit = 0, $separator = "\n") {
|
|
||||||
$values = array();
|
|
||||||
foreach ($set as $key => $val) {
|
|
||||||
$values[] = "$key = $val";
|
|
||||||
}
|
|
||||||
$query = table($table) . " SET$separator" . implode(",$separator", $values);
|
|
||||||
return queries("UPDATE" . ($limit ? limit1($query, $queryWhere) : " $query$queryWhere"));
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Insert data into table
|
|
||||||
* @param string
|
|
||||||
* @param array escaped columns in keys, quoted data in values
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
function insert($table, $set) {
|
|
||||||
return queries("INSERT INTO " . table($table) . ($set
|
|
||||||
? " (" . implode(", ", array_keys($set)) . ")\nVALUES (" . implode(", ", $set) . ")"
|
|
||||||
: " DEFAULT VALUES"
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Insert or update data in table
|
|
||||||
* @param string
|
|
||||||
* @param array
|
|
||||||
* @param array of arrays with escaped columns in keys and quoted data in values
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
/*abstract*/ function insertUpdate($table, $rows, $primary) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Begin transaction
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
function begin() {
|
|
||||||
return queries("BEGIN");
|
|
||||||
}
|
|
||||||
|
|
||||||
function commit() {
|
|
||||||
return queries("COMMIT");
|
|
||||||
}
|
|
||||||
|
|
||||||
function rollback() {
|
|
||||||
return queries("ROLLBACK");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -2,11 +2,11 @@
|
|||||||
/** Print select result
|
/** Print select result
|
||||||
* @param Min_Result
|
* @param Min_Result
|
||||||
* @param Min_DB connection to examine indexes
|
* @param Min_DB connection to examine indexes
|
||||||
|
* @param string base link for <th> fields
|
||||||
* @param array
|
* @param array
|
||||||
* @return array $orgtables
|
* @return null
|
||||||
*/
|
*/
|
||||||
function select($result, $connection2 = null, $orgtables = array()) {
|
function select($result, $connection2 = null, $href = "", $orgtables = array()) {
|
||||||
global $jush;
|
|
||||||
$links = array(); // colno => orgtable - create links from these columns
|
$links = array(); // colno => orgtable - create links from these columns
|
||||||
$indexes = array(); // orgtable => array(column => colno) - primary keys
|
$indexes = array(); // orgtable => array(column => colno) - primary keys
|
||||||
$columns = array(); // orgtable => array(column => ) - not selected columns in primary key
|
$columns = array(); // orgtable => array(column => ) - not selected columns in primary key
|
||||||
@@ -24,7 +24,7 @@ function select($result, $connection2 = null, $orgtables = array()) {
|
|||||||
$orgtable = $field->orgtable;
|
$orgtable = $field->orgtable;
|
||||||
$orgname = $field->orgname;
|
$orgname = $field->orgname;
|
||||||
$return[$field->table] = $orgtable;
|
$return[$field->table] = $orgtable;
|
||||||
if ($orgtables && $jush == "sql") { // MySQL EXPLAIN
|
if ($href) { // MySQL EXPLAIN
|
||||||
$links[$j] = ($name == "table" ? "table=" : ($name == "possible_keys" ? "indexes=" : null));
|
$links[$j] = ($name == "table" ? "table=" : ($name == "possible_keys" ? "indexes=" : null));
|
||||||
} elseif ($orgtable != "") {
|
} elseif ($orgtable != "") {
|
||||||
if (!isset($indexes[$orgtable])) {
|
if (!isset($indexes[$orgtable])) {
|
||||||
@@ -48,8 +48,9 @@ function select($result, $connection2 = null, $orgtables = array()) {
|
|||||||
$blobs[$j] = true;
|
$blobs[$j] = true;
|
||||||
}
|
}
|
||||||
$types[$j] = $field->type;
|
$types[$j] = $field->type;
|
||||||
echo "<th" . ($orgtable != "" || $field->name != $orgname ? " title='" . h(($orgtable != "" ? "$orgtable." : "") . $orgname) . "'" : "") . ">" . h($name)
|
$name = h($name);
|
||||||
. ($orgtables ? doc_link(array('sql' => "explain-output.html#explain_" . strtolower($name))) : "")
|
echo "<th" . ($orgtable != "" || $field->name != $orgname ? " title='" . h(($orgtable != "" ? "$orgtable." : "") . $orgname) . "'" : "") . ">"
|
||||||
|
. ($href ? "<a href='$href" . strtolower($name) . "' target='_blank' rel='noreferrer' class='help'>$name</a>" : $name)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
echo "</thead>\n";
|
echo "</thead>\n";
|
||||||
@@ -69,7 +70,7 @@ function select($result, $connection2 = null, $orgtables = array()) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (isset($links[$key]) && !$columns[$links[$key]]) {
|
if (isset($links[$key]) && !$columns[$links[$key]]) {
|
||||||
if ($orgtables && $jush == "sql") { // MySQL EXPLAIN
|
if ($href) { // MySQL EXPLAIN
|
||||||
$table = $row[array_search("table=", $links)];
|
$table = $row[array_search("table=", $links)];
|
||||||
$link = $links[$key] . urlencode($orgtables[$table] != "" ? $orgtables[$table] : $table);
|
$link = $links[$key] . urlencode($orgtables[$table] != "" ? $orgtables[$table] : $table);
|
||||||
} else {
|
} else {
|
||||||
@@ -111,17 +112,16 @@ function referencable_primary($self) {
|
|||||||
|
|
||||||
/** Print SQL <textarea> tag
|
/** Print SQL <textarea> tag
|
||||||
* @param string
|
* @param string
|
||||||
* @param string or array in which case [0] of every element is used
|
|
||||||
* @param int
|
* @param int
|
||||||
* @param int
|
* @param int
|
||||||
|
* @param string
|
||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function textarea($name, $value, $rows = 10, $cols = 80) {
|
function textarea($name, $value, $rows = 10, $cols = 80) {
|
||||||
global $jush;
|
echo "<textarea name='$name' rows='$rows' cols='$cols' class='sqlarea' spellcheck='false' wrap='off' onkeydown='return textareaKeydown(this, event);'>"; // spellcheck, wrap - not valid before HTML5
|
||||||
echo "<textarea name='$name' rows='$rows' cols='$cols' class='sqlarea jush-$jush' spellcheck='false' wrap='off'>";
|
|
||||||
if (is_array($value)) {
|
if (is_array($value)) {
|
||||||
foreach ($value as $val) { // not implode() to save memory
|
foreach ($value as $val) { // not implode() to save memory
|
||||||
echo h($val[0]) . "\n\n\n"; // $val == array($query, $time, $elapsed)
|
echo h($val[0]) . "\n\n\n"; // $val == array($query, $time)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
echo h($value);
|
echo h($value);
|
||||||
@@ -138,22 +138,13 @@ function textarea($name, $value, $rows = 10, $cols = 80) {
|
|||||||
*/
|
*/
|
||||||
function edit_type($key, $field, $collations, $foreign_keys = array()) {
|
function edit_type($key, $field, $collations, $foreign_keys = array()) {
|
||||||
global $structured_types, $types, $unsigned, $on_actions;
|
global $structured_types, $types, $unsigned, $on_actions;
|
||||||
$type = $field["type"];
|
|
||||||
?>
|
?>
|
||||||
<td><select name="<?php echo $key; ?>[type]" class="type" onfocus="lastType = selectValue(this);" onchange="editingTypeChange(this);"<?php echo on_help("getTarget(event).value", 1); ?>><?php
|
<td><select name="<?php echo $key; ?>[type]" class="type" onfocus="lastType = selectValue(this);" onchange="editingTypeChange(this);"><?php echo optionlist((!$field["type"] || isset($types[$field["type"]]) ? array() : array($field["type"])) + $structured_types + ($foreign_keys ? array(lang('Foreign keys') => $foreign_keys) : array()), $field["type"]); ?></select>
|
||||||
if ($type && !isset($types[$type]) && !isset($foreign_keys[$type])) {
|
<td><input name="<?php echo $key; ?>[length]" value="<?php echo h($field["length"]); ?>" size="3" onfocus="editingLengthFocus(this);"><td class="options"><?php //! type="number" with enabled JavaScript
|
||||||
array_unshift($structured_types, $type);
|
echo "<select name='$key" . "[collation]'" . (ereg('(char|text|enum|set)$', $field["type"]) ? "" : " class='hidden'") . '><option value="">(' . lang('collation') . ')' . optionlist($collations, $field["collation"]) . '</select>';
|
||||||
}
|
echo ($unsigned ? "<select name='$key" . "[unsigned]'" . (!$field["type"] || ereg('((^|[^o])int|float|double|decimal)$', $field["type"]) ? "" : " class='hidden'") . '><option>' . optionlist($unsigned, $field["unsigned"]) . '</select>' : '');
|
||||||
if ($foreign_keys) {
|
echo (isset($field['on_update']) ? "<select name='$key" . "[on_update]'" . ($field["type"] == "timestamp" ? "" : " class='hidden'") . '>' . optionlist(array("" => "(" . lang('ON UPDATE') . ")", "CURRENT_TIMESTAMP"), $field["on_update"]) . '</select>' : '');
|
||||||
$structured_types[lang('Foreign keys')] = $foreign_keys;
|
echo ($foreign_keys ? "<select name='$key" . "[on_delete]'" . (ereg("`", $field["type"]) ? "" : " class='hidden'") . "><option value=''>(" . lang('ON DELETE') . ")" . optionlist(explode("|", $on_actions), $field["on_delete"]) . "</select> " : " "); // space for IE
|
||||||
}
|
|
||||||
echo optionlist($structured_types, $type);
|
|
||||||
?></select>
|
|
||||||
<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]'" . (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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Filter length value including enums
|
/** Filter length value including enums
|
||||||
@@ -162,10 +153,7 @@ echo optionlist($structured_types, $type);
|
|||||||
*/
|
*/
|
||||||
function process_length($length) {
|
function process_length($length) {
|
||||||
global $enum_length;
|
global $enum_length;
|
||||||
return (preg_match("~^\\s*\\(?\\s*$enum_length(?:\\s*,\\s*$enum_length)*+\\s*\\)?\\s*\$~", $length) && preg_match_all("~$enum_length~", $length, $matches)
|
return (preg_match("~^\\s*(?:$enum_length)(?:\\s*,\\s*(?:$enum_length))*\\s*\$~", $length) && preg_match_all("~$enum_length~", $length, $matches) ? implode(",", $matches[0]) : preg_replace('~[^0-9,+-]~', '', $length));
|
||||||
? "(" . implode(",", $matches[0]) . ")"
|
|
||||||
: preg_replace('~^[0-9].*~', '(\0)', preg_replace('~[^-0-9,+()[\]]~', '', $length))
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Create SQL string from field type
|
/** Create SQL string from field type
|
||||||
@@ -176,9 +164,9 @@ function process_length($length) {
|
|||||||
function process_type($field, $collate = "COLLATE") {
|
function process_type($field, $collate = "COLLATE") {
|
||||||
global $unsigned;
|
global $unsigned;
|
||||||
return " $field[type]"
|
return " $field[type]"
|
||||||
. process_length($field["length"])
|
. ($field["length"] != "" ? "(" . process_length($field["length"]) . ")" : "")
|
||||||
. (preg_match('~(^|[^o])int|float|double|decimal~', $field["type"]) && in_array($field["unsigned"], $unsigned) ? " $field[unsigned]" : "")
|
. (ereg('(^|[^o])int|float|double|decimal', $field["type"]) && in_array($field["unsigned"], $unsigned) ? " $field[unsigned]" : "")
|
||||||
. (preg_match('~char|text|enum|set~', $field["type"]) && $field["collation"] ? " $collate " . q($field["collation"]) : "")
|
. (ereg('char|text|enum|set', $field["type"]) && $field["collation"] ? " $collate " . q($field["collation"]) : "")
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,18 +176,12 @@ function process_type($field, $collate = "COLLATE") {
|
|||||||
* @return array array("field", "type", "NULL", "DEFAULT", "ON UPDATE", "COMMENT", "AUTO_INCREMENT")
|
* @return array array("field", "type", "NULL", "DEFAULT", "ON UPDATE", "COMMENT", "AUTO_INCREMENT")
|
||||||
*/
|
*/
|
||||||
function process_field($field, $type_field) {
|
function process_field($field, $type_field) {
|
||||||
global $jush;
|
|
||||||
$default = $field["default"];
|
|
||||||
return array(
|
return array(
|
||||||
idf_escape(trim($field["field"])),
|
idf_escape(trim($field["field"])),
|
||||||
process_type($type_field),
|
process_type($type_field),
|
||||||
($field["null"] ? " NULL" : " NOT NULL"), // NULL for timestamp
|
($field["null"] ? " NULL" : " NOT NULL"), // NULL for timestamp
|
||||||
(isset($default) ? " DEFAULT " . (
|
(isset($field["default"]) ? " DEFAULT " . ((ereg("time", $field["type"]) && eregi('^CURRENT_TIMESTAMP$', $field["default"])) || ($field["type"] == "bit" && ereg("^([0-9]+|b'[0-1]+')\$", $field["default"])) ? $field["default"] : q($field["default"])) : ""),
|
||||||
(preg_match('~time~', $field["type"]) && preg_match('~^CURRENT_TIMESTAMP$~i', $default))
|
($field["type"] == "timestamp" && $field["on_update"] ? " ON UPDATE $field[on_update]" : ""),
|
||||||
|| ($field["type"] == "bit" && preg_match("~^([0-9]+|b'[0-1]+')\$~", $default))
|
|
||||||
|| ($jush == "pgsql" && preg_match("~^[a-z]+\\(('[^']*')+\\)\$~", $default))
|
|
||||||
? $default : q($default)) : ""),
|
|
||||||
(preg_match('~timestamp|datetime~', $field["type"]) && $field["on_update"] ? " ON UPDATE $field[on_update]" : ""),
|
|
||||||
(support("comment") && $field["comment"] != "" ? " COMMENT " . q($field["comment"]) : ""),
|
(support("comment") && $field["comment"] != "" ? " COMMENT " . q($field["comment"]) : ""),
|
||||||
($field["auto_increment"] ? auto_increment() : null),
|
($field["auto_increment"] ? auto_increment() : null),
|
||||||
);
|
);
|
||||||
@@ -216,7 +198,7 @@ function type_class($type) {
|
|||||||
'binary' => 'blob',
|
'binary' => 'blob',
|
||||||
'enum' => 'set',
|
'enum' => 'set',
|
||||||
) as $key => $val) {
|
) as $key => $val) {
|
||||||
if (preg_match("~$key|$val~", $type)) {
|
if (ereg("$key|$val", $type)) {
|
||||||
return " class='$key'";
|
return " class='$key'";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -241,12 +223,7 @@ function edit_fields($fields, $collations, $type = "TABLE", $foreign_keys = arra
|
|||||||
<td><?php echo lang('Options'); ?>
|
<td><?php echo lang('Options'); ?>
|
||||||
<?php if ($type == "TABLE") { ?>
|
<?php if ($type == "TABLE") { ?>
|
||||||
<td>NULL
|
<td>NULL
|
||||||
<td><input type="radio" name="auto_increment_col" value=""><acronym title="<?php echo lang('Auto Increment'); ?>">AI</acronym><?php echo doc_link(array(
|
<td><input type="radio" name="auto_increment_col" value=""><acronym title="<?php echo lang('Auto Increment'); ?>">AI</acronym>
|
||||||
'sql' => "example-auto-increment.html",
|
|
||||||
'sqlite' => "autoinc.html",
|
|
||||||
'pgsql' => "datatype.html#DATATYPE-SERIAL",
|
|
||||||
'mssql' => "ms186775.aspx",
|
|
||||||
)); ?>
|
|
||||||
<td><?php echo lang('Default values'); ?>
|
<td><?php echo lang('Default values'); ?>
|
||||||
<?php echo (support("comment") ? "<td" . ($comments ? "" : " class='hidden'") . ">" . lang('Comment') : ""); ?>
|
<?php echo (support("comment") ? "<td" . ($comments ? "" : " class='hidden'") . ">" . lang('Comment') : ""); ?>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
@@ -261,13 +238,12 @@ function edit_fields($fields, $collations, $type = "TABLE", $foreign_keys = arra
|
|||||||
?>
|
?>
|
||||||
<tr<?php echo ($display ? "" : " style='display: none;'"); ?>>
|
<tr<?php echo ($display ? "" : " style='display: none;'"); ?>>
|
||||||
<?php echo ($type == "PROCEDURE" ? "<td>" . html_select("fields[$i][inout]", explode("|", $inout), $field["inout"]) : ""); ?>
|
<?php echo ($type == "PROCEDURE" ? "<td>" . html_select("fields[$i][inout]", explode("|", $inout), $field["inout"]) : ""); ?>
|
||||||
<th><?php if ($display) { ?><input name="fields[<?php echo $i; ?>][field]" value="<?php echo h($field["field"]); ?>" onchange="editingNameChange(this);<?php echo ($field["field"] != "" || count($fields) > 1 ? '' : ' editingAddRow(this);" onkeyup="if (this.value) editingAddRow(this);'); ?>" maxlength="64" autocapitalize="off"><?php } ?>
|
<th><?php if ($display) { ?><input name="fields[<?php echo $i; ?>][field]" value="<?php echo h($field["field"]); ?>" onchange="<?php echo ($field["field"] != "" || count($fields) > 1 ? "" : "editingAddRow(this); "); ?>editingNameChange(this);" maxlength="64" autocapitalize="off"><?php } ?><input type="hidden" name="fields[<?php echo $i; ?>][orig]" value="<?php echo h($orig); ?>">
|
||||||
<input type="hidden" name="fields[<?php echo $i; ?>][orig]" value="<?php echo h($orig); ?>">
|
|
||||||
<?php edit_type("fields[$i]", $field, $collations, $foreign_keys); ?>
|
<?php edit_type("fields[$i]", $field, $collations, $foreign_keys); ?>
|
||||||
<?php if ($type == "TABLE") { ?>
|
<?php if ($type == "TABLE") { ?>
|
||||||
<td><?php echo checkbox("fields[$i][null]", 1, $field["null"], "", "", "block"); ?>
|
<td><?php echo checkbox("fields[$i][null]", 1, $field["null"], "", "", "block"); ?>
|
||||||
<td><label class="block"><input type="radio" name="auto_increment_col" value="<?php echo $i; ?>"<?php if ($field["auto_increment"]) { ?> checked<?php } ?> onclick="var field = this.form['fields[' + this.value + '][field]']; if (!field.value) { field.value = 'id'; field.onchange(); }"></label><td><?php
|
<td><label class="block"><input type="radio" name="auto_increment_col" value="<?php echo $i; ?>"<?php if ($field["auto_increment"]) { ?> checked<?php } ?> onclick="var field = this.form['fields[' + this.value + '][field]']; if (!field.value) { field.value = 'id'; field.onchange(); }"></label><td><?php
|
||||||
echo checkbox("fields[$i][has_default]", 1, $field["has_default"]); ?><input name="fields[<?php echo $i; ?>][default]" value="<?php echo h($field["default"]); ?>" onkeyup="keyupChange.call(this);" onchange="this.previousSibling.checked = true;">
|
echo checkbox("fields[$i][has_default]", 1, $field["has_default"]); ?><input name="fields[<?php echo $i; ?>][default]" value="<?php echo h($field["default"]); ?>" onchange="this.previousSibling.checked = true;">
|
||||||
<?php echo (support("comment") ? "<td" . ($comments ? "" : " class='hidden'") . "><input name='fields[$i][comment]' value='" . h($field["comment"]) . "' maxlength='" . ($connection->server_info >= 5.5 ? 1024 : 255) . "'>" : ""); ?>
|
<?php echo (support("comment") ? "<td" . ($comments ? "" : " class='hidden'") . "><input name='fields[$i][comment]' value='" . h($field["comment"]) . "' maxlength='" . ($connection->server_info >= 5.5 ? 1024 : 255) . "'>" : ""); ?>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
<?php
|
<?php
|
||||||
@@ -277,7 +253,7 @@ echo checkbox("fields[$i][has_default]", 1, $field["has_default"]); ?><input nam
|
|||||||
. "<input type='image' class='icon' name='up[$i]' src='../adminer/static/up.gif' alt='^' title='" . lang('Move up') . "'> "
|
. "<input type='image' class='icon' name='up[$i]' src='../adminer/static/up.gif' alt='^' title='" . lang('Move up') . "'> "
|
||||||
. "<input type='image' class='icon' name='down[$i]' src='../adminer/static/down.gif' alt='v' title='" . lang('Move down') . "'> "
|
. "<input type='image' class='icon' name='down[$i]' src='../adminer/static/down.gif' alt='v' title='" . lang('Move down') . "'> "
|
||||||
: "");
|
: "");
|
||||||
echo ($orig == "" || support("drop_col") ? "<input type='image' class='icon' name='drop_col[$i]' src='../adminer/static/cross.gif' alt='x' title='" . lang('Remove') . "' onclick=\"return !editingRemoveRow(this, 'fields\$1[field]');\">" : "");
|
echo ($orig == "" || support("drop_col") ? "<input type='image' class='icon' name='drop_col[$i]' src='../adminer/static/cross.gif' alt='x' title='" . lang('Remove') . "' onclick='return !editingRemoveRow(this);'>" : "");
|
||||||
echo "\n";
|
echo "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -394,7 +370,7 @@ function drop_create($drop, $create, $drop_created, $test, $drop_test, $location
|
|||||||
*/
|
*/
|
||||||
function create_trigger($on, $row) {
|
function create_trigger($on, $row) {
|
||||||
global $jush;
|
global $jush;
|
||||||
$timing_event = " $row[Timing] $row[Event]" . ($row["Event"] == "UPDATE OF" ? " " . idf_escape($row["Of"]) : "");
|
$timing_event = " $row[Timing] $row[Event]";
|
||||||
return "CREATE TRIGGER "
|
return "CREATE TRIGGER "
|
||||||
. idf_escape($row["Trigger"])
|
. idf_escape($row["Trigger"])
|
||||||
. ($jush == "mssql" ? $on . $timing_event : $timing_event . $on)
|
. ($jush == "mssql" ? $on . $timing_event : $timing_event . $on)
|
||||||
@@ -415,7 +391,7 @@ function create_routine($routine, $row) {
|
|||||||
ksort($fields); // enforce fields order
|
ksort($fields); // enforce fields order
|
||||||
foreach ($fields as $field) {
|
foreach ($fields as $field) {
|
||||||
if ($field["field"] != "") {
|
if ($field["field"] != "") {
|
||||||
$set[] = (preg_match("~^($inout)\$~", $field["inout"]) ? "$field[inout] " : "") . idf_escape($field["field"]) . process_type($field, "CHARACTER SET");
|
$set[] = (ereg("^($inout)\$", $field["inout"]) ? "$field[inout] " : "") . idf_escape($field["field"]) . process_type($field, "CHARACTER SET");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return "CREATE $routine "
|
return "CREATE $routine "
|
||||||
@@ -436,19 +412,6 @@ function remove_definer($query) {
|
|||||||
return preg_replace('~^([A-Z =]+) DEFINER=`' . preg_replace('~@(.*)~', '`@`(%|\\1)', logged_user()) . '`~', '\\1', $query); //! proper escaping of user
|
return preg_replace('~^([A-Z =]+) DEFINER=`' . preg_replace('~@(.*)~', '`@`(%|\\1)', logged_user()) . '`~', '\\1', $query); //! proper escaping of user
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Format foreign key to use in SQL query
|
|
||||||
* @param array ("table" => string, "source" => array, "target" => array, "on_delete" => one of $on_actions, "on_update" => one of $on_actions)
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function format_foreign_key($foreign_key) {
|
|
||||||
global $on_actions;
|
|
||||||
return " FOREIGN KEY (" . implode(", ", array_map('idf_escape', $foreign_key["source"])) . ") REFERENCES " . table($foreign_key["table"])
|
|
||||||
. " (" . implode(", ", array_map('idf_escape', $foreign_key["target"])) . ")" //! reuse $name - check in older MySQL versions
|
|
||||||
. (preg_match("~^($on_actions)\$~", $foreign_key["on_delete"]) ? " ON DELETE $foreign_key[on_delete]" : "")
|
|
||||||
. (preg_match("~^($on_actions)\$~", $foreign_key["on_update"]) ? " ON UPDATE $foreign_key[on_update]" : "")
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Add a file to TAR
|
/** Add a file to TAR
|
||||||
* @param string
|
* @param string
|
||||||
* @param TmpFile
|
* @param TmpFile
|
||||||
@@ -480,44 +443,3 @@ function ini_bytes($ini) {
|
|||||||
}
|
}
|
||||||
return $val;
|
return $val;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Create link to database documentation
|
|
||||||
* @param array $jush => $path
|
|
||||||
* @return string HTML code
|
|
||||||
*/
|
|
||||||
function doc_link($paths) {
|
|
||||||
global $jush, $connection;
|
|
||||||
$urls = array(
|
|
||||||
'sql' => "http://dev.mysql.com/doc/refman/" . substr($connection->server_info, 0, 3) . "/en/",
|
|
||||||
'sqlite' => "http://www.sqlite.org/",
|
|
||||||
'pgsql' => "http://www.postgresql.org/docs/" . substr($connection->server_info, 0, 3) . "/static/",
|
|
||||||
'mssql' => "http://msdn.microsoft.com/library/",
|
|
||||||
'oracle' => "http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/",
|
|
||||||
);
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -99,12 +99,14 @@ function nl_br($string) {
|
|||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function checkbox($name, $value, $checked, $label = "", $onclick = "", $class = "") {
|
function checkbox($name, $value, $checked, $label = "", $onclick = "", $class = "") {
|
||||||
|
static $id = 0;
|
||||||
|
$id++;
|
||||||
$return = "<input type='checkbox' name='$name' value='" . h($value) . "'"
|
$return = "<input type='checkbox' name='$name' value='" . h($value) . "'"
|
||||||
. ($checked ? " checked" : "")
|
. ($checked ? " checked" : "")
|
||||||
. ($onclick ? ' onclick="' . h($onclick) . '"' : '')
|
. ($onclick ? ' onclick="' . h($onclick) . '"' : '')
|
||||||
. ">"
|
. " id='checkbox-$id'>"
|
||||||
;
|
;
|
||||||
return ($label != "" || $class ? "<label" . ($class ? " class='$class'" : "") . ">$return" . h($label) . "</label>" : $return);
|
return ($label != "" || $class ? "<label for='checkbox-$id'" . ($class ? " class='$class'" : "") . ">$return" . h($label) . "</label>" : $return);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Generate list of HTML options
|
/** Generate list of HTML options
|
||||||
@@ -149,25 +151,12 @@ function html_select($name, $options, $value = "", $onchange = true) {
|
|||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Generate HTML <select> or <input> if $options are empty
|
|
||||||
* @param string
|
|
||||||
* @param array
|
|
||||||
* @param string
|
|
||||||
* @param string
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function select_input($attrs, $options, $value = "", $placeholder = "") {
|
|
||||||
return ($options
|
|
||||||
? "<select$attrs><option value=''>$placeholder" . optionlist($options, $value, true) . "</select>"
|
|
||||||
: "<input$attrs size='10' value='" . h($value) . "' placeholder='$placeholder'>"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Get onclick confirmation
|
/** Get onclick confirmation
|
||||||
|
* @param string JavaScript expression
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function confirm() {
|
function confirm($count = "") {
|
||||||
return " onclick=\"return confirm('" . lang('Are you sure?') . "');\"";
|
return " onclick=\"return confirm('" . lang('Are you sure?') . ($count ? " (' + $count + ')" : "") . "');\"";
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Print header for hidden fieldset (close by </div></fieldset>)
|
/** Print header for hidden fieldset (close by </div></fieldset>)
|
||||||
@@ -183,11 +172,10 @@ function print_fieldset($id, $legend, $visible = false, $onclick = "") {
|
|||||||
|
|
||||||
/** Return class='active' if $bold is true
|
/** Return class='active' if $bold is true
|
||||||
* @param bool
|
* @param bool
|
||||||
* @param string
|
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function bold($bold, $class = "") {
|
function bold($bold) {
|
||||||
return ($bold ? " class='active $class'" : ($class ? " class='$class'" : ""));
|
return ($bold ? " class='active'" : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Generate class for odd rows
|
/** Generate class for odd rows
|
||||||
@@ -221,7 +209,7 @@ function json_row($key, $val = null) {
|
|||||||
echo "{";
|
echo "{";
|
||||||
}
|
}
|
||||||
if ($key != "") {
|
if ($key != "") {
|
||||||
echo ($first ? "" : ",") . "\n\t\"" . addcslashes($key, "\r\n\"\\/") . '": ' . ($val !== null ? '"' . addcslashes($val, "\r\n\"\\/") . '"' : 'undefined');
|
echo ($first ? "" : ",") . "\n\t\"" . addcslashes($key, "\r\n\"\\") . '": ' . ($val !== null ? '"' . addcslashes($val, "\r\n\"\\") . '"' : 'undefined');
|
||||||
$first = false;
|
$first = false;
|
||||||
} else {
|
} else {
|
||||||
echo "\n}\n";
|
echo "\n}\n";
|
||||||
@@ -235,7 +223,7 @@ function json_row($key, $val = null) {
|
|||||||
*/
|
*/
|
||||||
function ini_bool($ini) {
|
function ini_bool($ini) {
|
||||||
$val = ini_get($ini);
|
$val = ini_get($ini);
|
||||||
return (preg_match('~^(on|true|yes)$~i', $val) || (int) $val); // boolean values set by php_value are strings
|
return (eregi('^(on|true|yes)$', $val) || (int) $val); // boolean values set by php_value are strings
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Check if SID is neccessary
|
/** Check if SID is neccessary
|
||||||
@@ -249,41 +237,13 @@ function sid() {
|
|||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Set password to session
|
/** Shortcut for $connection->quote($string)
|
||||||
* @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
|
* @param string
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function q($string) {
|
function q($string) {
|
||||||
global $driver;
|
global $connection;
|
||||||
return $driver->quote($string);
|
return $connection->quote($string);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get list of values from database
|
/** Get list of values from database
|
||||||
@@ -306,18 +266,15 @@ function get_vals($query, $column = 0) {
|
|||||||
/** Get keys from first column and values from second
|
/** Get keys from first column and values from second
|
||||||
* @param string
|
* @param string
|
||||||
* @param Min_DB
|
* @param Min_DB
|
||||||
* @param float
|
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
function get_key_vals($query, $connection2 = null, $timeout = 0) {
|
function get_key_vals($query, $connection2 = null) {
|
||||||
global $connection;
|
global $connection;
|
||||||
if (!is_object($connection2)) {
|
if (!is_object($connection2)) {
|
||||||
$connection2 = $connection;
|
$connection2 = $connection;
|
||||||
}
|
}
|
||||||
$return = array();
|
$return = array();
|
||||||
$connection2->timeout = $timeout;
|
|
||||||
$result = $connection2->query($query);
|
$result = $connection2->query($query);
|
||||||
$connection2->timeout = 0;
|
|
||||||
if (is_object($result)) {
|
if (is_object($result)) {
|
||||||
while ($row = $result->fetch_row()) {
|
while ($row = $result->fetch_row()) {
|
||||||
$return[$row[0]] = $row[1];
|
$return[$row[0]] = $row[1];
|
||||||
@@ -354,7 +311,7 @@ function get_rows($query, $connection2 = null, $error = "<p class='error'>") {
|
|||||||
*/
|
*/
|
||||||
function unique_array($row, $indexes) {
|
function unique_array($row, $indexes) {
|
||||||
foreach ($indexes as $index) {
|
foreach ($indexes as $index) {
|
||||||
if (preg_match("~PRIMARY|UNIQUE~", $index["type"])) {
|
if (ereg("PRIMARY|UNIQUE", $index["type"])) {
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach ($index["columns"] as $key) {
|
foreach ($index["columns"] as $key) {
|
||||||
if (!isset($row[$key])) { // NULL is ambiguous
|
if (!isset($row[$key])) { // NULL is ambiguous
|
||||||
@@ -375,22 +332,15 @@ function unique_array($row, $indexes) {
|
|||||||
function where($where, $fields = array()) {
|
function where($where, $fields = array()) {
|
||||||
global $jush;
|
global $jush;
|
||||||
$return = array();
|
$return = array();
|
||||||
$function_pattern = '(^[\w\(]+(' . str_replace("_", ".*", preg_quote(idf_escape("_"))) . ')?\)+$)'; //! columns looking like functions
|
$function_pattern = '(^[\w\(]+' . str_replace("_", ".*", preg_quote(idf_escape("_"))) . '\)+$)'; //! columns looking like functions
|
||||||
foreach ((array) $where["where"] as $key => $val) {
|
foreach ((array) $where["where"] as $key => $val) {
|
||||||
$key = bracket_escape($key, 1); // 1 - back
|
$key = bracket_escape($key, 1); // 1 - back
|
||||||
$column = (preg_match($function_pattern, $key) ? $key : idf_escape($key)); //! SQL injection
|
$return[] = (preg_match($function_pattern, $key) ? $key : idf_escape($key)) //! SQL injection
|
||||||
$return[] = $column
|
. (($jush == "sql" && ereg('\\.', $val)) || $jush == "mssql" ? " LIKE " . exact_value(addcslashes($val, "%_\\")) : " = " . unconvert_field($fields[$key], exact_value($val))) // LIKE because of floats, but slow with ints, in MS SQL because of text
|
||||||
. (($jush == "sql" && preg_match('~^[0-9]*\\.[0-9]*$~', $val)) || $jush == "mssql"
|
|
||||||
? " LIKE " . q(addcslashes($val, "%_\\"))
|
|
||||||
: " = " . unconvert_field($fields[$key], q($val))
|
|
||||||
) // LIKE because of floats but slow with ints, in MS SQL because of text
|
|
||||||
; //! enum and set
|
; //! enum and set
|
||||||
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";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
foreach ((array) $where["null"] as $key) {
|
foreach ((array) $where["null"] as $key) {
|
||||||
$return[] = (preg_match($function_pattern, $key) ? $key : idf_escape($key)) . " IS NULL";
|
$return[] = idf_escape($key) . " IS NULL";
|
||||||
}
|
}
|
||||||
return implode(" AND ", $return);
|
return implode(" AND ", $return);
|
||||||
}
|
}
|
||||||
@@ -437,18 +387,17 @@ function convert_fields($columns, $fields, $select = array()) {
|
|||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Set cookie valid on current path
|
/** Set cookie valid for 1 month
|
||||||
* @param string
|
* @param string
|
||||||
* @param string
|
* @param string
|
||||||
* @param int number of seconds, 0 for session cookie
|
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function cookie($name, $value, $lifetime = 2592000) { // 2592000 - 30 days
|
function cookie($name, $value) {
|
||||||
global $HTTPS;
|
global $HTTPS;
|
||||||
$params = array(
|
$params = array(
|
||||||
$name,
|
$name,
|
||||||
(preg_match("~\n~", $value) ? "" : $value), // HTTP Response Splitting protection in PHP < 5.1.2
|
(ereg("\n", $value) ? "" : $value), // HTTP Response Splitting protection in PHP < 5.1.2
|
||||||
($lifetime ? time() + $lifetime : 0),
|
time() + 2592000, // 2592000 - 30 days
|
||||||
preg_replace('~\\?.*~', '', $_SERVER["REQUEST_URI"]),
|
preg_replace('~\\?.*~', '', $_SERVER["REQUEST_URI"]),
|
||||||
"",
|
"",
|
||||||
$HTTPS
|
$HTTPS
|
||||||
@@ -501,12 +450,12 @@ function set_session($key, $val) {
|
|||||||
* @param string
|
* @param string
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function auth_url($vendor, $server, $username, $db = null) {
|
function auth_url($driver, $server, $username, $db = null) {
|
||||||
global $drivers;
|
global $drivers;
|
||||||
preg_match('~([^?]*)\\??(.*)~', remove_from_uri(implode("|", array_keys($drivers)) . "|username|" . ($db !== null ? "db|" : "") . session_name()), $match);
|
preg_match('~([^?]*)\\??(.*)~', remove_from_uri(implode("|", array_keys($drivers)) . "|username|" . ($db !== null ? "db|" : "") . session_name()), $match);
|
||||||
return "$match[1]?"
|
return "$match[1]?"
|
||||||
. (sid() ? SID . "&" : "")
|
. (sid() ? SID . "&" : "")
|
||||||
. ($vendor != "server" || $server != "" ? urlencode($vendor) . "=" . urlencode($server) . "&" : "")
|
. ($driver != "server" || $server != "" ? urlencode($driver) . "=" . urlencode($server) . "&" : "")
|
||||||
. "username=" . urlencode($username)
|
. "username=" . urlencode($username)
|
||||||
. ($db != "" ? "&db=" . urlencode($db) : "")
|
. ($db != "" ? "&db=" . urlencode($db) : "")
|
||||||
. ($match[2] ? "&$match[2]" : "")
|
. ($match[2] ? "&$match[2]" : "")
|
||||||
@@ -548,16 +497,17 @@ function redirect($location, $message = null) {
|
|||||||
* @param bool
|
* @param bool
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function query_redirect($query, $location, $message, $redirect = true, $execute = true, $failed = false, $time = "") {
|
function query_redirect($query, $location, $message, $redirect = true, $execute = true, $failed = false) {
|
||||||
global $connection, $error, $adminer;
|
global $connection, $error, $adminer;
|
||||||
|
$time = "";
|
||||||
if ($execute) {
|
if ($execute) {
|
||||||
$start = microtime(true);
|
$start = microtime();
|
||||||
$failed = !$connection->query($query);
|
$failed = !$connection->query($query);
|
||||||
$time = format_time($start);
|
$time = "; -- " . format_time($start, microtime());
|
||||||
}
|
}
|
||||||
$sql = "";
|
$sql = "";
|
||||||
if ($query) {
|
if ($query) {
|
||||||
$sql = $adminer->messageQuery($query, $time);
|
$sql = $adminer->messageQuery($query . $time);
|
||||||
}
|
}
|
||||||
if ($failed) {
|
if ($failed) {
|
||||||
$error = error() . $sql;
|
$error = error() . $sql;
|
||||||
@@ -570,22 +520,21 @@ function query_redirect($query, $location, $message, $redirect = true, $execute
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Execute and remember query
|
/** Execute and remember query
|
||||||
* @param string or null to return remembered queries, end with ';' to use DELIMITER
|
* @param string null to return remembered queries, end with ';' to use DELIMITER
|
||||||
* @return Min_Result or array($queries, $time) if $query = null
|
* @return Min_Result
|
||||||
*/
|
*/
|
||||||
function queries($query) {
|
function queries($query = null) {
|
||||||
global $connection;
|
global $connection;
|
||||||
static $queries = array();
|
static $queries = array();
|
||||||
static $start;
|
|
||||||
if (!$start) {
|
|
||||||
$start = microtime(true);
|
|
||||||
}
|
|
||||||
if ($query === null) {
|
if ($query === null) {
|
||||||
// return executed queries
|
// return executed queries without parameter
|
||||||
return array(implode("\n", $queries), format_time($start));
|
return implode("\n", $queries);
|
||||||
}
|
}
|
||||||
$queries[] = (preg_match('~;$~', $query) ? "DELIMITER ;;\n$query;\nDELIMITER " : $query) . ";";
|
$start = microtime();
|
||||||
return $connection->query($query);
|
$return = $connection->query($query);
|
||||||
|
$queries[] = (ereg(';$', $query) ? "DELIMITER ;;\n$query;\nDELIMITER " : $query)
|
||||||
|
. "; -- " . format_time($start, microtime());
|
||||||
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Apply command to all array items
|
/** Apply command to all array items
|
||||||
@@ -610,16 +559,16 @@ function apply_queries($query, $tables, $escape = 'table') {
|
|||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function queries_redirect($location, $message, $redirect) {
|
function queries_redirect($location, $message, $redirect) {
|
||||||
list($queries, $time) = queries(null);
|
return query_redirect(queries(), $location, $message, $redirect, false, !$redirect);
|
||||||
return query_redirect($queries, $location, $message, $redirect, false, !$redirect, $time);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Format elapsed time
|
/** Format time difference
|
||||||
* @param float output of microtime(true)
|
* @param string output of microtime()
|
||||||
|
* @param string output of microtime()
|
||||||
* @return string HTML code
|
* @return string HTML code
|
||||||
*/
|
*/
|
||||||
function format_time($start) {
|
function format_time($start, $end) {
|
||||||
return lang('%.3f s', max(0, microtime(true) - $start));
|
return lang('%.3f s', max(0, array_sum(explode(" ", $end)) - array_sum(explode(" ", $start))));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Remove parameter from query string
|
/** Remove parameter from query string
|
||||||
@@ -636,10 +585,7 @@ function remove_from_uri($param = "") {
|
|||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function pagination($page, $current) {
|
function pagination($page, $current) {
|
||||||
return " " . ($page == $current
|
return " " . ($page == $current ? $page + 1 : '<a href="' . h(remove_from_uri("page") . ($page ? "&page=$page" : "")) . '">' . ($page + 1) . "</a>");
|
||||||
? $page + 1
|
|
||||||
: '<a href="' . h(remove_from_uri("page") . ($page ? "&page=$page" . ($_GET["next"] ? "&next=" . urlencode($_GET["next"]) : "") : "")) . '">' . ($page + 1) . "</a>"
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get file contents from $_FILES
|
/** Get file contents from $_FILES
|
||||||
@@ -662,21 +608,19 @@ function get_file($key, $decompress = false) {
|
|||||||
}
|
}
|
||||||
$name = $file["name"][$key];
|
$name = $file["name"][$key];
|
||||||
$tmp_name = $file["tmp_name"][$key];
|
$tmp_name = $file["tmp_name"][$key];
|
||||||
$content = file_get_contents($decompress && preg_match('~\\.gz$~', $name)
|
$content = file_get_contents($decompress && ereg('\\.gz$', $name)
|
||||||
? "compress.zlib://$tmp_name"
|
? "compress.zlib://$tmp_name"
|
||||||
: $tmp_name
|
: $tmp_name
|
||||||
); //! may not be reachable because of open_basedir
|
); //! may not be reachable because of open_basedir
|
||||||
if ($decompress) {
|
if ($decompress) {
|
||||||
$start = substr($content, 0, 3);
|
$start = substr($content, 0, 3);
|
||||||
if (function_exists("iconv") && preg_match("~^\xFE\xFF|^\xFF\xFE~", $start, $regs)) { // not ternary operator to save memory
|
if (function_exists("iconv") && ereg("^\xFE\xFF|^\xFF\xFE", $start, $regs)) { // not ternary operator to save memory
|
||||||
$content = iconv("utf-16", "utf-8", $content);
|
$content = iconv("utf-16", "utf-8", $content);
|
||||||
} elseif ($start == "\xEF\xBB\xBF") { // UTF-8 BOM
|
} elseif ($start == "\xEF\xBB\xBF") { // UTF-8 BOM
|
||||||
$content = substr($content, 3);
|
$content = substr($content, 3);
|
||||||
}
|
}
|
||||||
$return .= $content . "\n\n";
|
|
||||||
} else {
|
|
||||||
$return .= $content;
|
|
||||||
}
|
}
|
||||||
|
$return .= $content . "\n\n";
|
||||||
}
|
}
|
||||||
//! support SQL files not ending with semicolon
|
//! support SQL files not ending with semicolon
|
||||||
return $return;
|
return $return;
|
||||||
@@ -723,14 +667,6 @@ function shorten_utf8($string, $length = 80, $suffix = "") {
|
|||||||
return h($match[1]) . $suffix . (isset($match[2]) ? "" : "<i>...</i>");
|
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
|
/** Generate friendly URL
|
||||||
* @param string
|
* @param string
|
||||||
* @return string
|
* @return string
|
||||||
@@ -747,14 +683,12 @@ function friendly_url($val) {
|
|||||||
*/
|
*/
|
||||||
function hidden_fields($process, $ignore = array()) {
|
function hidden_fields($process, $ignore = array()) {
|
||||||
while (list($key, $val) = each($process)) {
|
while (list($key, $val) = each($process)) {
|
||||||
if (!in_array($key, $ignore)) {
|
if (is_array($val)) {
|
||||||
if (is_array($val)) {
|
foreach ($val as $k => $v) {
|
||||||
foreach ($val as $k => $v) {
|
$process[$key . "[$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) . '">';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -768,16 +702,6 @@ function hidden_fields_get() {
|
|||||||
echo '<input type="hidden" name="username" value="' . h($_GET["username"]) . '">';
|
echo '<input type="hidden" name="username" value="' . h($_GET["username"]) . '">';
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get status of a single table and fall back to name on error
|
|
||||||
* @param string
|
|
||||||
* @param bool
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
function table_status1($table, $fast = false) {
|
|
||||||
$return = table_status($table, $fast);
|
|
||||||
return ($return ? $return : array("Name" => $table));
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Find out foreign keys for each column
|
/** Find out foreign keys for each column
|
||||||
* @param string
|
* @param string
|
||||||
* @return array array($col => array())
|
* @return array array($col => array())
|
||||||
@@ -823,14 +747,6 @@ function input($field, $value, $function) {
|
|||||||
global $connection, $types, $adminer, $jush;
|
global $connection, $types, $adminer, $jush;
|
||||||
$name = h(bracket_escape($field["field"]));
|
$name = h(bracket_escape($field["field"]));
|
||||||
echo "<td class='function'>";
|
echo "<td class='function'>";
|
||||||
if (is_array($value) && !$function) {
|
|
||||||
$args = array($value);
|
|
||||||
if (version_compare(PHP_VERSION, 5.4) >= 0) {
|
|
||||||
$args[] = JSON_PRETTY_PRINT;
|
|
||||||
}
|
|
||||||
$value = call_user_func_array('json_encode', $args); //! requires PHP 5.2
|
|
||||||
$function = "json";
|
|
||||||
}
|
|
||||||
$reset = ($jush == "mssql" && $field["auto_increment"]);
|
$reset = ($jush == "mssql" && $field["auto_increment"]);
|
||||||
if ($reset && !$_POST["save"]) {
|
if ($reset && !$_POST["save"]) {
|
||||||
$function = null;
|
$function = null;
|
||||||
@@ -847,13 +763,9 @@ function input($field, $value, $function) {
|
|||||||
}
|
}
|
||||||
$first++;
|
$first++;
|
||||||
}
|
}
|
||||||
$onchange = ($first ? " onchange=\"var f = this.form['function[" . h(js_escape(bracket_escape($field["field"]))) . "]']; if ($first > f.selectedIndex) f.selectedIndex = $first;\" onkeyup='keyupChange.call(this);'" : "");
|
$onchange = ($first ? " onchange=\"var f = this.form['function[" . h(js_escape(bracket_escape($field["field"]))) . "]']; if ($first > f.selectedIndex) f.selectedIndex = $first;\"" : "");
|
||||||
$attrs .= $onchange;
|
$attrs .= $onchange;
|
||||||
$has_function = (in_array($function, $functions) || isset($functions[$function]));
|
echo (count($functions) > 1 ? html_select("function[$name]", $functions, $function === null || in_array($function, $functions) || isset($functions[$function]) ? $function : "", "functionChange(this);") : nbsp(reset($functions))) . '<td>';
|
||||||
echo (count($functions) > 1
|
|
||||||
? "<select name='function[$name]' onchange='functionChange(this);'" . on_help("getTarget(event).value.replace(/^SQL\$/, '')", 1) . ">" . optionlist($functions, $function === null || $has_function ? $function : "") . "</select>"
|
|
||||||
: nbsp(reset($functions))
|
|
||||||
) . '<td>';
|
|
||||||
$input = $adminer->editInput($_GET["edit"], $field, $attrs, $value); // usage in call is without a table
|
$input = $adminer->editInput($_GET["edit"], $field, $attrs, $value); // usage in call is without a table
|
||||||
if ($input != "") {
|
if ($input != "") {
|
||||||
echo $input;
|
echo $input;
|
||||||
@@ -864,9 +776,9 @@ function input($field, $value, $function) {
|
|||||||
$checked = (is_int($value) ? ($value >> $i) & 1 : in_array($val, explode(",", $value), true));
|
$checked = (is_int($value) ? ($value >> $i) & 1 : in_array($val, explode(",", $value), true));
|
||||||
echo " <label><input type='checkbox' name='fields[$name][$i]' value='" . (1 << $i) . "'" . ($checked ? ' checked' : '') . "$onchange>" . h($adminer->editVal($val, $field)) . '</label>';
|
echo " <label><input type='checkbox' name='fields[$name][$i]' value='" . (1 << $i) . "'" . ($checked ? ' checked' : '') . "$onchange>" . h($adminer->editVal($val, $field)) . '</label>';
|
||||||
}
|
}
|
||||||
} elseif (preg_match('~blob|bytea|raw|file~', $field["type"]) && ini_bool("file_uploads")) {
|
} elseif (ereg('blob|bytea|raw|file', $field["type"]) && ini_bool("file_uploads")) {
|
||||||
echo "<input type='file' name='fields-$name'$onchange>";
|
echo "<input type='file' name='fields-$name'$onchange>";
|
||||||
} elseif (($text = preg_match('~text|lob~', $field["type"])) || preg_match("~\n~", $value)) {
|
} elseif (($text = ereg('text|lob', $field["type"])) || ereg("\n", $value)) {
|
||||||
if ($text && $jush != "sqlite") {
|
if ($text && $jush != "sqlite") {
|
||||||
$attrs .= " cols='50' rows='12'";
|
$attrs .= " cols='50' rows='12'";
|
||||||
} else {
|
} else {
|
||||||
@@ -874,28 +786,21 @@ function input($field, $value, $function) {
|
|||||||
$attrs .= " cols='30' rows='$rows'" . ($rows == 1 ? " style='height: 1.2em;'" : ""); // 1.2em - line-height
|
$attrs .= " cols='30' rows='$rows'" . ($rows == 1 ? " style='height: 1.2em;'" : ""); // 1.2em - line-height
|
||||||
}
|
}
|
||||||
echo "<textarea$attrs>" . h($value) . '</textarea>';
|
echo "<textarea$attrs>" . h($value) . '</textarea>';
|
||||||
} elseif ($function == "json") {
|
|
||||||
echo "<textarea$attrs cols='50' rows='12' class='jush-js'>" . h($value) . '</textarea>';
|
|
||||||
} else {
|
} else {
|
||||||
// int(3) is only a display hint
|
// int(3) is only a display hint
|
||||||
$maxlength = (!preg_match('~int~', $field["type"]) && preg_match('~^(\\d+)(,(\\d+))?$~', $field["length"], $match) ? ((preg_match("~binary~", $field["type"]) ? 2 : 1) * $match[1] + ($match[3] ? 1 : 0) + ($match[2] && !$field["unsigned"] ? 1 : 0)) : ($types[$field["type"]] ? $types[$field["type"]] + ($field["unsigned"] ? 0 : 1) : 0));
|
$maxlength = (!ereg('int', $field["type"]) && preg_match('~^(\\d+)(,(\\d+))?$~', $field["length"], $match) ? ((ereg("binary", $field["type"]) ? 2 : 1) * $match[1] + ($match[3] ? 1 : 0) + ($match[2] && !$field["unsigned"] ? 1 : 0)) : ($types[$field["type"]] ? $types[$field["type"]] + ($field["unsigned"] ? 0 : 1) : 0));
|
||||||
if ($jush == 'sql' && $connection->server_info >= 5.6 && preg_match('~time~', $field["type"])) {
|
if ($connection->server_info >= 5.6 && ereg('time', $field["type"])) {
|
||||||
$maxlength += 7; // microtime
|
$maxlength += 7; // microtime
|
||||||
}
|
}
|
||||||
// type='date' and type='time' display localized value which may be confusing, type='datetime' uses 'T' as date and time separator
|
// type='date' and type='time' display localized value which may be confusing, type='datetime' uses 'T' as date and time separator
|
||||||
echo "<input"
|
echo "<input" . (ereg('int', $field["type"]) ? " type='number'" : "") . " value='" . h($value) . "'" . ($maxlength ? " maxlength='$maxlength'" : "") . (ereg('char|binary', $field["type"]) && $maxlength > 20 ? " size='40'" : "") . "$attrs>";
|
||||||
. ((!$has_function || $function === "") && preg_match('~(?<!o)int~', $field["type"]) ? " type='number'" : "")
|
|
||||||
. " value='" . h($value) . "'" . ($maxlength ? " maxlength='$maxlength'" : "")
|
|
||||||
. (preg_match('~char|binary~', $field["type"]) && $maxlength > 20 ? " size='40'" : "")
|
|
||||||
. "$attrs>"
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Process edit input field
|
/** Process edit input field
|
||||||
* @param one field from fields()
|
* @param one field from fields()
|
||||||
* @return string or false to leave the original value
|
* @return string
|
||||||
*/
|
*/
|
||||||
function process_input($field) {
|
function process_input($field) {
|
||||||
global $adminer;
|
global $adminer;
|
||||||
@@ -918,20 +823,12 @@ function process_input($field) {
|
|||||||
return ($field["on_update"] == "CURRENT_TIMESTAMP" ? idf_escape($field["field"]) : false);
|
return ($field["on_update"] == "CURRENT_TIMESTAMP" ? idf_escape($field["field"]) : false);
|
||||||
}
|
}
|
||||||
if ($function == "NULL") {
|
if ($function == "NULL") {
|
||||||
$value = null;
|
return "NULL";
|
||||||
}
|
}
|
||||||
if ($field["type"] == "set") {
|
if ($field["type"] == "set") {
|
||||||
return array_sum((array) $value);
|
return array_sum((array) $value);
|
||||||
}
|
}
|
||||||
if ($function == "json") {
|
if (ereg('blob|bytea|raw|file', $field["type"]) && ini_bool("file_uploads")) {
|
||||||
$function = "";
|
|
||||||
$value = json_decode($value, true);
|
|
||||||
if (!is_array($value)) {
|
|
||||||
return false; //! report errors
|
|
||||||
}
|
|
||||||
return $value;
|
|
||||||
}
|
|
||||||
if (preg_match('~blob|bytea|raw|file~', $field["type"]) && ini_bool("file_uploads")) {
|
|
||||||
$file = get_file("fields-$idf");
|
$file = get_file("fields-$idf");
|
||||||
if (!is_string($file)) {
|
if (!is_string($file)) {
|
||||||
return false; //! report errors
|
return false; //! report errors
|
||||||
@@ -941,31 +838,6 @@ function process_input($field) {
|
|||||||
return $adminer->processInput($field, $value, $function);
|
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
|
/** Print results of search in all tables
|
||||||
* @uses $_GET["where"][0]
|
* @uses $_GET["where"][0]
|
||||||
* @uses $_POST["tables"]
|
* @uses $_POST["tables"]
|
||||||
@@ -1004,7 +876,7 @@ function dump_headers($identifier, $multi_table = false) {
|
|||||||
$return = $adminer->dumpHeaders($identifier, $multi_table);
|
$return = $adminer->dumpHeaders($identifier, $multi_table);
|
||||||
$output = $_POST["output"];
|
$output = $_POST["output"];
|
||||||
if ($output != "text") {
|
if ($output != "text") {
|
||||||
header("Content-Disposition: attachment; filename=" . $adminer->dumpFilename($identifier) . ".$return" . ($output != "file" && !preg_match('~[^0-9a-z]~', $output) ? ".$output" : ""));
|
header("Content-Disposition: attachment; filename=" . $adminer->dumpFilename($identifier) . ".$return" . ($output != "file" && !ereg('[^0-9a-z]', $output) ? ".$output" : ""));
|
||||||
}
|
}
|
||||||
session_write_close();
|
session_write_close();
|
||||||
ob_flush();
|
ob_flush();
|
||||||
@@ -1034,98 +906,37 @@ function apply_sql_function($function, $column) {
|
|||||||
return ($function ? ($function == "unixepoch" ? "DATETIME($column, '$function')" : ($function == "count distinct" ? "COUNT(DISTINCT " : strtoupper("$function(")) . "$column)") : $column);
|
return ($function ? ($function == "unixepoch" ? "DATETIME($column, '$function')" : ($function == "count distinct" ? "COUNT(DISTINCT " : strtoupper("$function(")) . "$column)") : $column);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get path of the temporary directory
|
/** Read password from file adminer.key in temporary directory or create one
|
||||||
* @return string
|
* @return string or false if the file can not be created
|
||||||
*/
|
*/
|
||||||
function get_temp_dir() {
|
function password_file() {
|
||||||
$return = ini_get("upload_tmp_dir"); // session_save_path() may contain other storage path
|
$dir = ini_get("upload_tmp_dir"); // session_save_path() may contain other storage path
|
||||||
if (!$return) {
|
if (!$dir) {
|
||||||
if (function_exists('sys_get_temp_dir')) {
|
if (function_exists('sys_get_temp_dir')) {
|
||||||
$return = sys_get_temp_dir();
|
$dir = sys_get_temp_dir();
|
||||||
} else {
|
} else {
|
||||||
$filename = @tempnam("", ""); // @ - temp directory can be disabled by open_basedir
|
$filename = @tempnam("", ""); // @ - temp directory can be disabled by open_basedir
|
||||||
if (!$filename) {
|
if (!$filename) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$return = dirname($filename);
|
$dir = dirname($filename);
|
||||||
unlink($filename);
|
unlink($filename);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $return;
|
$filename = "$dir/adminer.key";
|
||||||
}
|
$return = @file_get_contents($filename); // @ - can not exist
|
||||||
|
if ($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;
|
return $return;
|
||||||
}
|
}
|
||||||
$fp = @fopen($filename, "w"); // @ - can have insufficient rights //! is not atomic
|
$fp = @fopen($filename, "w"); // @ - can have insufficient rights //! is not atomic
|
||||||
if ($fp) {
|
if ($fp) {
|
||||||
$return = rand_string();
|
$return = md5(uniqid(mt_rand(), true));
|
||||||
fwrite($fp, $return);
|
fwrite($fp, $return);
|
||||||
fclose($fp);
|
fclose($fp);
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get a random string
|
|
||||||
* @return string 32 hexadecimal characters
|
|
||||||
*/
|
|
||||||
function rand_string() {
|
|
||||||
return md5(uniqid(mt_rand(), true));
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Format value to use in select
|
|
||||||
* @param string
|
|
||||||
* @param string
|
|
||||||
* @param array
|
|
||||||
* @param int
|
|
||||||
* @return string HTML
|
|
||||||
*/
|
|
||||||
function select_value($val, $link, $field, $text_length) {
|
|
||||||
global $adminer, $HTTPS;
|
|
||||||
if (is_array($val)) {
|
|
||||||
$return = "";
|
|
||||||
foreach ($val as $k => $v) {
|
|
||||||
$return .= "<tr>"
|
|
||||||
. ($val != array_values($val) ? "<th>" . h($k) : "")
|
|
||||||
. "<td>" . select_value($v, $link, $field, $text_length)
|
|
||||||
;
|
|
||||||
}
|
|
||||||
return "<table cellspacing='0'>$return</table>";
|
|
||||||
}
|
|
||||||
if (!$link) {
|
|
||||||
$link = $adminer->selectLink($val, $field);
|
|
||||||
}
|
|
||||||
if ($link === null) {
|
|
||||||
if (is_mail($val)) {
|
|
||||||
$link = "mailto:$val";
|
|
||||||
}
|
|
||||||
if ($protocol = is_url($val)) {
|
|
||||||
$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
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$return = $adminer->editVal($val, $field);
|
|
||||||
if ($return !== null) {
|
|
||||||
if ($return === "") { // === - may be int
|
|
||||||
$return = " ";
|
|
||||||
} elseif ($text_length != "" && is_shortable($field) && is_utf8($return)) {
|
|
||||||
$return = shorten_utf8($return, max(0, +$text_length)); // usage of LEFT() would reduce traffic but complicate query - expected average speedup: .001 s VS .01 s on local network
|
|
||||||
} else {
|
|
||||||
$return = h($return);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $adminer->selectVal($return, $link, $field, $val);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Check whether the string is e-mail address
|
/** Check whether the string is e-mail address
|
||||||
* @param string
|
* @param string
|
||||||
* @return bool
|
* @return bool
|
||||||
@@ -1134,7 +945,7 @@ function is_mail($email) {
|
|||||||
$atom = '[-a-z0-9!#$%&\'*+/=?^_`{|}~]'; // characters of local-name
|
$atom = '[-a-z0-9!#$%&\'*+/=?^_`{|}~]'; // characters of local-name
|
||||||
$domain = '[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])'; // one domain component
|
$domain = '[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])'; // one domain component
|
||||||
$pattern = "$atom+(\\.$atom+)*@($domain?\\.)+$domain";
|
$pattern = "$atom+(\\.$atom+)*@($domain?\\.)+$domain";
|
||||||
return is_string($email) && preg_match("(^$pattern(,\\s*$pattern)*\$)i", $email);
|
return preg_match("(^$pattern(,\\s*$pattern)*\$)i", $email);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Check whether the string is URL address
|
/** Check whether the string is URL address
|
||||||
@@ -1151,33 +962,16 @@ function is_url($string) {
|
|||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function is_shortable($field) {
|
function is_shortable($field) {
|
||||||
return preg_match('~char|text|lob|geometry|point|linestring|polygon|string~', $field["type"]);
|
return ereg('char|text|lob|geometry|point|linestring|polygon', $field["type"]);
|
||||||
}
|
|
||||||
|
|
||||||
/** Get query to compute number of found rows
|
|
||||||
* @param string
|
|
||||||
* @param array
|
|
||||||
* @param bool
|
|
||||||
* @param array
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function count_rows($table, $where, $is_group, $group) {
|
|
||||||
global $jush;
|
|
||||||
$query = " FROM " . table($table) . ($where ? " WHERE " . implode(" AND ", $where) : "");
|
|
||||||
return ($is_group && ($jush == "sql" || count($group) == 1)
|
|
||||||
? "SELECT COUNT(DISTINCT " . implode(", ", $group) . ")$query"
|
|
||||||
: "SELECT COUNT(*)" . ($is_group ? " FROM (SELECT 1$query$group_by) x" : $query)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Run query which can be killed by AJAX call after timing out
|
/** Run query which can be killed by AJAX call after timing out
|
||||||
* @param string
|
* @param string
|
||||||
* @return array of strings
|
* @return Min_Result
|
||||||
*/
|
*/
|
||||||
function slow_query($query) {
|
function slow_query($query) {
|
||||||
global $adminer, $token;
|
global $adminer, $token;
|
||||||
$db = $adminer->database();
|
$db = $adminer->database();
|
||||||
$timeout = $adminer->queryTimeout();
|
|
||||||
if (support("kill") && is_object($connection2 = connect()) && ($db == "" || $connection2->select_db($db))) {
|
if (support("kill") && is_object($connection2 = connect()) && ($db == "" || $connection2->select_db($db))) {
|
||||||
$kill = $connection2->result("SELECT CONNECTION_ID()"); // MySQL and MySQLi can use thread_id but it's not in PDO_MySQL
|
$kill = $connection2->result("SELECT CONNECTION_ID()"); // MySQL and MySQLi can use thread_id but it's not in PDO_MySQL
|
||||||
?>
|
?>
|
||||||
@@ -1185,7 +979,7 @@ function slow_query($query) {
|
|||||||
var timeout = setTimeout(function () {
|
var timeout = setTimeout(function () {
|
||||||
ajax('<?php echo js_escape(ME); ?>script=kill', function () {
|
ajax('<?php echo js_escape(ME); ?>script=kill', function () {
|
||||||
}, 'token=<?php echo $token; ?>&kill=<?php echo $kill; ?>');
|
}, 'token=<?php echo $token; ?>&kill=<?php echo $kill; ?>');
|
||||||
}, <?php echo 1000 * $timeout; ?>);
|
}, <?php echo 1000 * $adminer->queryTimeout(); ?>);
|
||||||
</script>
|
</script>
|
||||||
<?php
|
<?php
|
||||||
} else {
|
} else {
|
||||||
@@ -1193,7 +987,7 @@ var timeout = setTimeout(function () {
|
|||||||
}
|
}
|
||||||
ob_flush();
|
ob_flush();
|
||||||
flush();
|
flush();
|
||||||
$return = @get_key_vals($query, $connection2, $timeout); // @ - may be killed
|
$return = @get_key_vals($query, $connection2); // @ - may be killed
|
||||||
if ($connection2) {
|
if ($connection2) {
|
||||||
echo "<script type='text/javascript'>clearTimeout(timeout);</script>\n";
|
echo "<script type='text/javascript'>clearTimeout(timeout);</script>\n";
|
||||||
ob_flush();
|
ob_flush();
|
||||||
@@ -1202,22 +996,6 @@ var timeout = setTimeout(function () {
|
|||||||
return array_keys($return);
|
return array_keys($return);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Generate BREACH resistant CSRF token
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function get_token() {
|
|
||||||
$rand = rand(1, 1e6);
|
|
||||||
return ($rand ^ $_SESSION["token"]) . ":$rand";
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Verify if supplied CSRF token is valid
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
function verify_token() {
|
|
||||||
list($token, $rand) = explode(":", $_POST["token"]);
|
|
||||||
return ($rand ^ $_SESSION["token"]) == $token;
|
|
||||||
}
|
|
||||||
|
|
||||||
// used in compiled version
|
// used in compiled version
|
||||||
function lzw_decompress($binary) {
|
function lzw_decompress($binary) {
|
||||||
// convert binary string to codes
|
// convert binary string to codes
|
||||||
@@ -1255,110 +1033,3 @@ function lzw_decompress($binary) {
|
|||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Return events to display help on mouse over
|
|
||||||
* @param string JS expression
|
|
||||||
* @param bool JS expression
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -3,38 +3,33 @@
|
|||||||
|
|
||||||
$langs = array(
|
$langs = array(
|
||||||
'en' => 'English', // Jakub Vrána - http://www.vrana.cz
|
'en' => 'English', // Jakub Vrána - http://www.vrana.cz
|
||||||
'ar' => 'العربية', // Y.M Amine - Algeria - nbr7@live.fr
|
|
||||||
'bn' => 'বাংলা', // Dipak Kumar - dipak.ndc@gmail.com
|
|
||||||
'ca' => 'Català', // Joan Llosas
|
|
||||||
'cs' => 'Čeština', // Jakub Vrána - http://www.vrana.cz
|
'cs' => 'Čeština', // Jakub Vrána - http://www.vrana.cz
|
||||||
'de' => 'Deutsch', // Klemens Häckel - http://clickdimension.wordpress.com
|
|
||||||
'es' => 'Español', // Klemens Häckel - http://clickdimension.wordpress.com
|
|
||||||
'et' => 'Eesti', // Priit Kallas
|
|
||||||
'fa' => 'فارسی', // mojtaba barghbani - Iran - mbarghbani@gmail.com
|
|
||||||
'fr' => 'Français', // Francis Gagné, Aurélien Royer
|
|
||||||
'hu' => 'Magyar', // Borsos Szilárd (Borsosfi) - http://www.borsosfi.hu, info@borsosfi.hu
|
|
||||||
'id' => 'Bahasa Indonesia', // Ivan Lanin - http://ivan.lanin.org
|
|
||||||
'it' => 'Italiano', // Alessandro Fiorotto, Paolo Asperti
|
|
||||||
'ja' => '日本語', // Hitoshi Ozawa - http://sourceforge.jp/projects/oss-ja-jpn/releases/
|
|
||||||
'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, 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
|
'sk' => 'Slovenčina', // Ivan Suchy - http://www.ivansuchy.com, Juraj Krivda - http://www.jstudio.cz
|
||||||
|
'nl' => 'Nederlands', // Maarten Balliauw - http://blog.maartenballiauw.be
|
||||||
|
'es' => 'Español', // Klemens Häckel - http://clickdimension.wordpress.com
|
||||||
|
'de' => 'Deutsch', // Klemens Häckel - http://clickdimension.wordpress.com
|
||||||
|
'fr' => 'Français', // Francis Gagné, Aurélien Royer
|
||||||
|
'it' => 'Italiano', // Alessandro Fiorotto, Paolo Asperti
|
||||||
|
'et' => 'Eesti', // Priit Kallas
|
||||||
|
'hu' => 'Magyar', // Borsos Szilárd (Borsosfi) - http://www.borsosfi.hu, info@borsosfi.hu
|
||||||
|
'pl' => 'Polski', // Radosław Kowalewski - http://srsbiz.pl/
|
||||||
|
'ca' => 'Català', // Joan Llosas
|
||||||
|
'pt' => 'Português', // Gian Live - gian@live.com, Davi Alexandre davi@davialexandre.com.br
|
||||||
'sl' => 'Slovenski', // Matej Ferlan - www.itdinamik.com, matej.ferlan@itdinamik.com
|
'sl' => 'Slovenski', // Matej Ferlan - www.itdinamik.com, matej.ferlan@itdinamik.com
|
||||||
'sr' => 'Српски', // Nikola Radovanović - cobisimo@gmail.com
|
'lt' => 'Lietuvių', // Paulius Leščinskas - http://www.lescinskas.lt
|
||||||
'ta' => 'தமிழ்', // G. Sampath Kumar, Chennai, India, sampathkumar11@gmail.com
|
|
||||||
'th' => 'ภาษาไทย', // Panya Saraphi, elect.tu@gmail.com - http://www.opencart2u.com/
|
|
||||||
'tr' => 'Türkçe', // Bilgehan Korkmaz - turktron.com
|
'tr' => 'Türkçe', // Bilgehan Korkmaz - turktron.com
|
||||||
|
'ro' => 'Limba Română', // .nick .messing - dot.nick.dot.messing@gmail.com
|
||||||
|
'id' => 'Bahasa Indonesia', // Ivan Lanin - http://ivan.lanin.org
|
||||||
|
'ru' => 'Русский язык', // Maksim Izmaylov
|
||||||
'uk' => 'Українська', // Valerii Kryzhov
|
'uk' => 'Українська', // Valerii Kryzhov
|
||||||
'vi' => 'Tiếng Việt', // Giang Manh @ manhgd google mail
|
'sr' => 'Српски', // Nikola Radovanović - cobisimo@gmail.com
|
||||||
'zh' => '简体中文', // Mr. Lodar, vea - urn2.net - vea.urn2@gmail.com
|
'zh' => '简体中文', // Mr. Lodar
|
||||||
'zh-tw' => '繁體中文', // http://tzangms.com
|
'zh-tw' => '繁體中文', // http://tzangms.com
|
||||||
|
'ja' => '日本語', // Hitoshi Ozawa - http://sourceforge.jp/projects/oss-ja-jpn/releases/
|
||||||
|
'ta' => 'தமிழ்', // G. Sampath Kumar, Chennai, India, sampathkumar11@gmail.com
|
||||||
|
'bn' => 'বাংলা', // Dipak Kumar - dipak.ndc@gmail.com
|
||||||
|
'ar' => 'العربية', // Y.M Amine - Algeria - nbr7@live.fr
|
||||||
|
'fa' => 'فارسی', // mojtaba barghbani - Iran - mbarghbani@gmail.com
|
||||||
);
|
);
|
||||||
|
|
||||||
/** Get current language
|
/** Get current language
|
||||||
@@ -69,7 +64,7 @@ function lang($idf, $number = null) {
|
|||||||
array_shift($args);
|
array_shift($args);
|
||||||
$format = str_replace("%d", "%s", $translation);
|
$format = str_replace("%d", "%s", $translation);
|
||||||
if ($format != $translation) {
|
if ($format != $translation) {
|
||||||
$args[0] = format_number($number);
|
$args[0] = number_format($number, 0, ".", lang(','));
|
||||||
}
|
}
|
||||||
return vsprintf($format, $args);
|
return vsprintf($format, $args);
|
||||||
}
|
}
|
||||||
@@ -79,11 +74,11 @@ function switch_lang() {
|
|||||||
echo "<form action='' method='post'>\n<div id='lang'>";
|
echo "<form action='' method='post'>\n<div id='lang'>";
|
||||||
echo lang('Language') . ": " . html_select("lang", $langs, $LANG, "this.form.submit();");
|
echo lang('Language') . ": " . html_select("lang", $langs, $LANG, "this.form.submit();");
|
||||||
echo " <input type='submit' value='" . lang('Use') . "' class='hidden'>\n";
|
echo " <input type='submit' value='" . lang('Use') . "' class='hidden'>\n";
|
||||||
echo "<input type='hidden' name='token' value='" . get_token() . "'>\n"; // $token may be empty in auth.inc.php
|
echo "<input type='hidden' name='token' value='$_SESSION[token]'>\n"; // $token may be empty in auth.inc.php
|
||||||
echo "</div>\n</form>\n";
|
echo "</div>\n</form>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($_POST["lang"]) && verify_token()) { // $error not yet available
|
if (isset($_POST["lang"]) && $_SESSION["token"] == $_POST["token"]) { // $token and $error not yet available
|
||||||
cookie("adminer_lang", $_POST["lang"]);
|
cookie("adminer_lang", $_POST["lang"]);
|
||||||
$_SESSION["lang"] = $_POST["lang"]; // cookies may be disabled
|
$_SESSION["lang"] = $_POST["lang"]; // cookies may be disabled
|
||||||
$_SESSION["translations"] = array(); // used in compiled version
|
$_SESSION["translations"] = array(); // used in compiled version
|
||||||
|
|||||||
@@ -12,12 +12,10 @@ if (extension_loaded('pdo')) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function dsn($dsn, $username, $password) {
|
function dsn($dsn, $username, $password, $exception_handler = 'auth_error') {
|
||||||
try {
|
set_exception_handler($exception_handler); // try/catch is not compatible with PHP 4
|
||||||
parent::__construct($dsn, $username, $password);
|
parent::__construct($dsn, $username, $password);
|
||||||
} catch (Exception $ex) {
|
restore_exception_handler();
|
||||||
auth_error($ex->getMessage());
|
|
||||||
}
|
|
||||||
$this->setAttribute(13, array('Min_PDOStatement')); // 13 - PDO::ATTR_STATEMENT_CLASS
|
$this->setAttribute(13, array('Min_PDOStatement')); // 13 - PDO::ATTR_STATEMENT_CLASS
|
||||||
$this->server_info = $this->getAttribute(4); // 4 - PDO::ATTR_SERVER_VERSION
|
$this->server_info = $this->getAttribute(4); // 4 - PDO::ATTR_SERVER_VERSION
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
<?php
|
<?php
|
||||||
$VERSION = "4.1.0";
|
$VERSION = "3.7.1-dev";
|
||||||
|
|||||||
@@ -79,9 +79,6 @@ function decrypt_string($str, $key) {
|
|||||||
if ($str == "") {
|
if ($str == "") {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
if (!$key) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$key = array_values(unpack("V*", pack("H*", md5($key))));
|
$key = array_values(unpack("V*", pack("H*", md5($key))));
|
||||||
$v = str2long($str, false);
|
$v = str2long($str, false);
|
||||||
$n = count($v) - 1;
|
$n = count($v) - 1;
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
include "./include/bootstrap.inc.php";
|
include "./include/bootstrap.inc.php";
|
||||||
include "./include/tmpfile.inc.php";
|
include "./include/tmpfile.inc.php";
|
||||||
|
|
||||||
$enum_length = "'(?:''|[^'\\\\]|\\\\.)*'";
|
$enum_length = "'(?:''|[^'\\\\]|\\\\.)*+'";
|
||||||
$inout = "IN|OUT|INOUT";
|
$inout = "IN|OUT|INOUT";
|
||||||
|
|
||||||
if (isset($_GET["select"]) && ($_POST["edit"] || $_POST["clone"]) && !$_POST["save"]) {
|
if (isset($_GET["select"]) && ($_POST["edit"] || $_POST["clone"]) && !$_POST["save"]) {
|
||||||
|
|||||||
@@ -2,36 +2,31 @@
|
|||||||
$TABLE = $_GET["indexes"];
|
$TABLE = $_GET["indexes"];
|
||||||
$index_types = array("PRIMARY", "UNIQUE", "INDEX");
|
$index_types = array("PRIMARY", "UNIQUE", "INDEX");
|
||||||
$table_status = table_status($TABLE, true);
|
$table_status = table_status($TABLE, true);
|
||||||
if (preg_match('~MyISAM|M?aria' . ($connection->server_info >= 5.6 ? '|InnoDB' : '') . '~i', $table_status["Engine"])) {
|
if (eregi("MyISAM|M?aria" . ($connection->server_info >= 5.6 ? "|InnoDB" : ""), $table_status["Engine"])) {
|
||||||
$index_types[] = "FULLTEXT";
|
$index_types[] = "FULLTEXT";
|
||||||
}
|
}
|
||||||
$indexes = indexes($TABLE);
|
$indexes = indexes($TABLE);
|
||||||
$primary = array();
|
if ($jush == "sqlite") { // doesn't support primary key
|
||||||
if ($jush == "mongo") { // doesn't support primary key
|
|
||||||
$primary = $indexes["_id_"];
|
|
||||||
unset($index_types[0]);
|
unset($index_types[0]);
|
||||||
unset($indexes["_id_"]);
|
unset($indexes[""]);
|
||||||
}
|
}
|
||||||
$row = $_POST;
|
$row = $_POST;
|
||||||
|
|
||||||
if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"]) {
|
if ($_POST && !$error && !$_POST["add"]) {
|
||||||
$alter = array();
|
$alter = array();
|
||||||
foreach ($row["indexes"] as $index) {
|
foreach ($row["indexes"] as $index) {
|
||||||
$name = $index["name"];
|
$name = $index["name"];
|
||||||
if (in_array($index["type"], $index_types)) {
|
if (in_array($index["type"], $index_types)) {
|
||||||
$columns = array();
|
$columns = array();
|
||||||
$lengths = array();
|
$lengths = array();
|
||||||
$descs = array();
|
|
||||||
$set = array();
|
$set = array();
|
||||||
ksort($index["columns"]);
|
ksort($index["columns"]);
|
||||||
foreach ($index["columns"] as $key => $column) {
|
foreach ($index["columns"] as $key => $column) {
|
||||||
if ($column != "") {
|
if ($column != "") {
|
||||||
$length = $index["lengths"][$key];
|
$length = $index["lengths"][$key];
|
||||||
$desc = $index["descs"][$key];
|
$set[] = idf_escape($column) . ($length ? "(" . (+$length) . ")" : "");
|
||||||
$set[] = idf_escape($column) . ($length ? "(" . (+$length) . ")" : "") . ($desc ? " DESC" : "");
|
|
||||||
$columns[] = $column;
|
$columns[] = $column;
|
||||||
$lengths[] = ($length ? $length : null);
|
$lengths[] = ($length ? $length : null);
|
||||||
$descs[] = $desc;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -40,18 +35,13 @@ if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"]) {
|
|||||||
if ($existing) {
|
if ($existing) {
|
||||||
ksort($existing["columns"]);
|
ksort($existing["columns"]);
|
||||||
ksort($existing["lengths"]);
|
ksort($existing["lengths"]);
|
||||||
ksort($existing["descs"]);
|
if ($index["type"] == $existing["type"] && array_values($existing["columns"]) === $columns && (!$existing["lengths"] || array_values($existing["lengths"]) === $lengths)) {
|
||||||
if ($index["type"] == $existing["type"]
|
|
||||||
&& array_values($existing["columns"]) === $columns
|
|
||||||
&& (!$existing["lengths"] || array_values($existing["lengths"]) === $lengths)
|
|
||||||
&& array_values($existing["descs"]) === $descs
|
|
||||||
) {
|
|
||||||
// skip existing index
|
// skip existing index
|
||||||
unset($indexes[$name]);
|
unset($indexes[$name]);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$alter[] = array($index["type"], $name, $set);
|
$alter[] = array($index["type"], $name, "(" . implode(", ", $set) . ")");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -66,7 +56,7 @@ if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"]) {
|
|||||||
queries_redirect(ME . "table=" . urlencode($TABLE), lang('Indexes have been altered.'), alter_indexes($TABLE, $alter));
|
queries_redirect(ME . "table=" . urlencode($TABLE), lang('Indexes have been altered.'), alter_indexes($TABLE, $alter));
|
||||||
}
|
}
|
||||||
|
|
||||||
page_header(lang('Indexes'), $error, array("table" => $TABLE), h($TABLE));
|
page_header(lang('Indexes'), $error, array("table" => $TABLE), $TABLE);
|
||||||
|
|
||||||
$fields = array_keys(fields($TABLE));
|
$fields = array_keys(fields($TABLE));
|
||||||
if ($_POST["add"]) {
|
if ($_POST["add"]) {
|
||||||
@@ -76,7 +66,7 @@ if ($_POST["add"]) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
$index = end($row["indexes"]);
|
$index = end($row["indexes"]);
|
||||||
if ($index["type"] || array_filter($index["columns"], 'strlen')) {
|
if ($index["type"] || array_filter($index["columns"], 'strlen') || array_filter($index["lengths"], 'strlen')) {
|
||||||
$row["indexes"][] = array("columns" => array(1 => ""));
|
$row["indexes"][] = array("columns" => array(1 => ""));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -92,49 +82,27 @@ if (!$row) {
|
|||||||
|
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
<table cellspacing="0" class="nowrap">
|
<table cellspacing="0" class="nowrap">
|
||||||
<thead><tr>
|
<thead><tr><th><?php echo lang('Index Type'); ?><th><?php echo lang('Column (length)'); ?><th><?php echo lang('Name'); ?></thead>
|
||||||
<th><?php echo lang('Index Type'); ?>
|
|
||||||
<th><input type="submit" style="left: -1000px; position: absolute;"><?php echo lang('Column (length)'); ?>
|
|
||||||
<th><?php echo lang('Name'); ?>
|
|
||||||
<th><noscript><input type='image' class='icon' name='add[0]' src='../adminer/static/plus.gif' alt='+' title='<?php echo lang('Add next'); ?>'></noscript>
|
|
||||||
</thead>
|
|
||||||
<?php
|
<?php
|
||||||
if ($primary) {
|
|
||||||
echo "<tr><td>PRIMARY<td>";
|
|
||||||
foreach ($primary["columns"] as $key => $column) {
|
|
||||||
echo select_input(" disabled", $fields, $column);
|
|
||||||
echo "<label><input disabled type='checkbox'>" . lang('descending') . "</label> ";
|
|
||||||
}
|
|
||||||
echo "<td><td>\n";
|
|
||||||
}
|
|
||||||
$j = 1;
|
$j = 1;
|
||||||
foreach ($row["indexes"] as $index) {
|
foreach ($row["indexes"] as $index) {
|
||||||
if (!$_POST["drop_col"] || $j != key($_POST["drop_col"])) {
|
echo "<tr><td>" . html_select("indexes[$j][type]", array(-1 => "") + $index_types, $index["type"], ($j == count($row["indexes"]) ? "indexesAddRow(this);" : 1)) . "<td>";
|
||||||
echo "<tr><td>" . html_select("indexes[$j][type]", array(-1 => "") + $index_types, $index["type"], ($j == count($row["indexes"]) ? "indexesAddRow(this);" : 1));
|
ksort($index["columns"]);
|
||||||
|
|
||||||
echo "<td>";
|
$i = 1;
|
||||||
ksort($index["columns"]);
|
foreach ($index["columns"] as $key => $column) {
|
||||||
$i = 1;
|
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"] . "_") . "');");
|
||||||
foreach ($index["columns"] as $key => $column) {
|
echo "<input type='number' name='indexes[$j][lengths][$i]' class='size' value='" . h($index["lengths"][$key]) . "'> </span>"; //! hide for non-MySQL drivers, add ASC|DESC
|
||||||
echo "<span>" . select_input(
|
$i++;
|
||||||
" 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>";
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
echo "<td><input name='indexes[$j][name]' value='" . h($index["name"]) . "' autocapitalize='off'>\n";
|
|
||||||
echo "<td><input type='image' class='icon' name='drop_col[$j]' src='../adminer/static/cross.gif' alt='x' title='" . lang('Remove') . "' onclick=\"return !editingRemoveRow(this, 'indexes\$1[type]');\">\n";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
echo "<td><input name='indexes[$j][name]' value='" . h($index["name"]) . "' autocapitalize='off'>\n";
|
||||||
$j++;
|
$j++;
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
</table>
|
</table>
|
||||||
<p>
|
<p>
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||||
|
<noscript><p><input type="submit" name="add" value="<?php echo lang('Add next'); ?>"></noscript>
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ $translations = array(
|
|||||||
'Use' => 'المستعمل',
|
'Use' => 'المستعمل',
|
||||||
'No tables.' => 'لا توجد جداول.',
|
'No tables.' => 'لا توجد جداول.',
|
||||||
'select' => 'تحديد',
|
'select' => 'تحديد',
|
||||||
|
'Create new table' => 'أنشئ جدول جديد',
|
||||||
'Item has been deleted.' => 'تم حذف العنصر.',
|
'Item has been deleted.' => 'تم حذف العنصر.',
|
||||||
'Item has been updated.' => 'تم تعديل العنصر.',
|
'Item has been updated.' => 'تم تعديل العنصر.',
|
||||||
'Edit' => 'تعديل',
|
'Edit' => 'تعديل',
|
||||||
@@ -177,7 +178,6 @@ $translations = array(
|
|||||||
'Data Free' => 'المساحة الحرة',
|
'Data Free' => 'المساحة الحرة',
|
||||||
'Rows' => 'الأسطر',
|
'Rows' => 'الأسطر',
|
||||||
',' => ',',
|
',' => ',',
|
||||||
'0123456789' => '٠١٢٣٤٥٦٧٨٩',
|
|
||||||
'Analyze' => 'تحليل',
|
'Analyze' => 'تحليل',
|
||||||
'Optimize' => 'تحسين',
|
'Optimize' => 'تحسين',
|
||||||
'Check' => 'فحص',
|
'Check' => 'فحص',
|
||||||
@@ -225,6 +225,7 @@ $translations = array(
|
|||||||
'Databases have been dropped.' => 'تم حذف قواعد البيانات.',
|
'Databases have been dropped.' => 'تم حذف قواعد البيانات.',
|
||||||
'Database has been dropped.' => 'تم حذف قاعدة البيانات.',
|
'Database has been dropped.' => 'تم حذف قاعدة البيانات.',
|
||||||
'Search data in tables' => 'بحث في الجداول',
|
'Search data in tables' => 'بحث في الجداول',
|
||||||
|
'schema' => 'المخطط',
|
||||||
'Schema' => 'المخطط',
|
'Schema' => 'المخطط',
|
||||||
'Alter schema' => 'تعديل المخطط',
|
'Alter schema' => 'تعديل المخطط',
|
||||||
'Create schema' => 'إنشاء مخطط',
|
'Create schema' => 'إنشاء مخطط',
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ $translations = array(
|
|||||||
'Use' => 'ব্যবহার',
|
'Use' => 'ব্যবহার',
|
||||||
'No tables.' => 'কোন টেবিল নাই।',
|
'No tables.' => 'কোন টেবিল নাই।',
|
||||||
'select' => 'নির্বাচন',
|
'select' => 'নির্বাচন',
|
||||||
|
'Create new table' => 'নতুন টেবিল তৈরী করো',
|
||||||
'Item has been deleted.' => 'বিষয়বস্তু মুছে ফেলা হয়েছে।',
|
'Item has been deleted.' => 'বিষয়বস্তু মুছে ফেলা হয়েছে।',
|
||||||
'Item has been updated.' => 'বিষয়বস্তু আপডেট করা হয়েছে।',
|
'Item has been updated.' => 'বিষয়বস্তু আপডেট করা হয়েছে।',
|
||||||
'Item%s has been inserted.' => 'বিষয়বস্তুসমূহ সংযোজন করা হয়েছে।',
|
'Item%s has been inserted.' => 'বিষয়বস্তুসমূহ সংযোজন করা হয়েছে।',
|
||||||
@@ -179,7 +180,6 @@ $translations = array(
|
|||||||
'Tables have been truncated.' => 'টেবিল ছাঁটাই করা হয়েছে',
|
'Tables have been truncated.' => 'টেবিল ছাঁটাই করা হয়েছে',
|
||||||
'Rows' => 'সারি',
|
'Rows' => 'সারি',
|
||||||
',' => ',',
|
',' => ',',
|
||||||
'0123456789' => '০১২৩৪৫৬৭৮৯',
|
|
||||||
'Tables have been moved.' => 'টেবিল স্থানান্তর করা হয়েছে।',
|
'Tables have been moved.' => 'টেবিল স্থানান্তর করা হয়েছে।',
|
||||||
'Move to other database' => 'অন্য ডাটাবেজে স্থানান্তর করো',
|
'Move to other database' => 'অন্য ডাটাবেজে স্থানান্তর করো',
|
||||||
'Move' => 'স্থানান্তর করো',
|
'Move' => 'স্থানান্তর করো',
|
||||||
@@ -226,6 +226,7 @@ $translations = array(
|
|||||||
'Permanent login' => 'স্থায়ী লগইন',
|
'Permanent login' => 'স্থায়ী লগইন',
|
||||||
'Databases have been dropped.' => 'ডাটাবেজসমূহ মুছে ফেলা হয়েছে।',
|
'Databases have been dropped.' => 'ডাটাবেজসমূহ মুছে ফেলা হয়েছে।',
|
||||||
'Search data in tables' => 'টেবিলে খোঁজ করো',
|
'Search data in tables' => 'টেবিলে খোঁজ করো',
|
||||||
|
'schema' => 'স্কিমা',
|
||||||
'Schema' => 'স্কিমা',
|
'Schema' => 'স্কিমা',
|
||||||
'Alter schema' => 'স্কিমা পরিবর্তন করো',
|
'Alter schema' => 'স্কিমা পরিবর্তন করো',
|
||||||
'Create schema' => 'স্কিমা তৈরী করো',
|
'Create schema' => 'স্কিমা তৈরী করো',
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ $translations = array(
|
|||||||
'Use' => 'Utilitza',
|
'Use' => 'Utilitza',
|
||||||
'No tables.' => 'No hi ha cap taula.',
|
'No tables.' => 'No hi ha cap taula.',
|
||||||
'select' => 'registres',
|
'select' => 'registres',
|
||||||
|
'Create new table' => 'Crea una nova taula',
|
||||||
'Item has been deleted.' => 'S\'ha suprmit l\'element.',
|
'Item has been deleted.' => 'S\'ha suprmit l\'element.',
|
||||||
'Item has been updated.' => 'S\'ha actualitzat l\'element.',
|
'Item has been updated.' => 'S\'ha actualitzat l\'element.',
|
||||||
'Item%s has been inserted.' => 'S\'ha insertat l\'element%s.',
|
'Item%s has been inserted.' => 'S\'ha insertat l\'element%s.',
|
||||||
@@ -179,7 +180,6 @@ $translations = array(
|
|||||||
'Tables have been truncated.' => 'S\'han escapçat les taules.',
|
'Tables have been truncated.' => 'S\'han escapçat les taules.',
|
||||||
'Rows' => 'Files',
|
'Rows' => 'Files',
|
||||||
',' => ',',
|
',' => ',',
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Tables have been moved.' => 'S\'han desplaçat les taules.',
|
'Tables have been moved.' => 'S\'han desplaçat les taules.',
|
||||||
'Move to other database' => 'Desplaça a una altra base de dades',
|
'Move to other database' => 'Desplaça a una altra base de dades',
|
||||||
'Move' => 'Desplaça',
|
'Move' => 'Desplaça',
|
||||||
@@ -240,6 +240,7 @@ $translations = array(
|
|||||||
'Schema has been dropped.' => 'S\'ha suprimit l\'esquema.',
|
'Schema has been dropped.' => 'S\'ha suprimit l\'esquema.',
|
||||||
'Schema has been created.' => 'S\'ha creat l\'esquema.',
|
'Schema has been created.' => 'S\'ha creat l\'esquema.',
|
||||||
'Schema has been altered.' => 'S\'ha modificat l\'esquema.',
|
'Schema has been altered.' => 'S\'ha modificat l\'esquema.',
|
||||||
|
'schema' => 'esquema',
|
||||||
'Schema' => 'Esquema',
|
'Schema' => 'Esquema',
|
||||||
'Sequences' => 'Seqüències',
|
'Sequences' => 'Seqüències',
|
||||||
'Create sequence' => 'Crea una seqüència',
|
'Create sequence' => 'Crea una seqüència',
|
||||||
|
|||||||
@@ -11,8 +11,6 @@ $translations = array(
|
|||||||
'Logged as: %s' => 'Přihlášen jako: %s',
|
'Logged as: %s' => 'Přihlášen jako: %s',
|
||||||
'Logout successful.' => 'Odhlášení proběhlo v pořádku.',
|
'Logout successful.' => 'Odhlášení proběhlo v pořádku.',
|
||||||
'Invalid credentials.' => 'Neplatné přihlašovací údaje.',
|
'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',
|
'Language' => 'Jazyk',
|
||||||
'Invalid CSRF token. Send the form again.' => 'Neplatný token CSRF. Odešlete formulář znovu.',
|
'Invalid CSRF token. Send the form again.' => 'Neplatný token CSRF. Odešlete formulář znovu.',
|
||||||
'No extension' => 'Žádné rozšíření',
|
'No extension' => 'Žádné rozšíření',
|
||||||
@@ -66,7 +64,6 @@ $translations = array(
|
|||||||
'Unable to upload a file.' => 'Nepodařilo se nahrát soubor.',
|
'Unable to upload a file.' => 'Nepodařilo se nahrát soubor.',
|
||||||
'Maximum allowed file size is %sB.' => 'Maximální povolená velikost souboru je %sB.',
|
'Maximum allowed file size is %sB.' => 'Maximální povolená velikost souboru je %sB.',
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Příliš velká POST data. Zmenšete data nebo zvyšte hodnotu konfigurační direktivy %s.',
|
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Příliš velká POST data. Zmenšete data nebo zvyšte hodnotu konfigurační direktivy %s.',
|
||||||
'You can upload a big SQL file via FTP and import it from server.' => 'Velký SQL soubor můžete nahrát pomocí FTP a importovat ho ze serveru.',
|
|
||||||
|
|
||||||
'Export' => 'Export',
|
'Export' => 'Export',
|
||||||
'Dump' => 'Export',
|
'Dump' => 'Export',
|
||||||
@@ -96,7 +93,6 @@ $translations = array(
|
|||||||
|
|
||||||
// thousands separator - must contain single byte
|
// thousands separator - must contain single byte
|
||||||
',' => ' ',
|
',' => ' ',
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Engine' => 'Úložiště',
|
'Engine' => 'Úložiště',
|
||||||
'Collation' => 'Porovnávání',
|
'Collation' => 'Porovnávání',
|
||||||
'Data Length' => 'Velikost dat',
|
'Data Length' => 'Velikost dat',
|
||||||
@@ -106,7 +102,6 @@ $translations = array(
|
|||||||
'%d in total' => '%d celkem',
|
'%d in total' => '%d celkem',
|
||||||
'Analyze' => 'Analyzovat',
|
'Analyze' => 'Analyzovat',
|
||||||
'Optimize' => 'Optimalizovat',
|
'Optimize' => 'Optimalizovat',
|
||||||
'Vacuum' => 'Vyčistit',
|
|
||||||
'Check' => 'Zkontrolovat',
|
'Check' => 'Zkontrolovat',
|
||||||
'Repair' => 'Opravit',
|
'Repair' => 'Opravit',
|
||||||
'Truncate' => 'Vyprázdnit',
|
'Truncate' => 'Vyprázdnit',
|
||||||
@@ -149,6 +144,7 @@ $translations = array(
|
|||||||
'No tables.' => 'Žádné tabulky.',
|
'No tables.' => 'Žádné tabulky.',
|
||||||
'Alter table' => 'Pozměnit tabulku',
|
'Alter table' => 'Pozměnit tabulku',
|
||||||
'Create table' => 'Vytvořit tabulku',
|
'Create table' => 'Vytvořit tabulku',
|
||||||
|
'Create new table' => 'Vytvořit novou tabulku',
|
||||||
'Table has been dropped.' => 'Tabulka byla odstraněna.',
|
'Table has been dropped.' => 'Tabulka byla odstraněna.',
|
||||||
'Tables have been dropped.' => 'Tabulky byly odstraněny.',
|
'Tables have been dropped.' => 'Tabulky byly odstraněny.',
|
||||||
'Tables have been optimized.' => 'Tabulky byly optimalizovány.',
|
'Tables have been optimized.' => 'Tabulky byly optimalizovány.',
|
||||||
@@ -167,8 +163,6 @@ $translations = array(
|
|||||||
'Default values' => 'Výchozí hodnoty',
|
'Default values' => 'Výchozí hodnoty',
|
||||||
'Drop' => 'Odstranit',
|
'Drop' => 'Odstranit',
|
||||||
'Are you sure?' => 'Opravdu?',
|
'Are you sure?' => 'Opravdu?',
|
||||||
'Size' => 'Velikost',
|
|
||||||
'Compute' => 'Spočítat',
|
|
||||||
'Move up' => 'Přesunout nahoru',
|
'Move up' => 'Přesunout nahoru',
|
||||||
'Move down' => 'Přesunout dolů',
|
'Move down' => 'Přesunout dolů',
|
||||||
'Remove' => 'Odebrat',
|
'Remove' => 'Odebrat',
|
||||||
@@ -246,10 +240,8 @@ $translations = array(
|
|||||||
|
|
||||||
'Import' => 'Import',
|
'Import' => 'Import',
|
||||||
'%d row(s) have been imported.' => array('Byl importován %d záznam.', 'Byly importovány %d záznamy.', 'Bylo importováno %d záznamů.'),
|
'%d row(s) have been imported.' => array('Byl importován %d záznam.', 'Byly importovány %d záznamy.', 'Bylo importováno %d záznamů.'),
|
||||||
'File must be in UTF-8 encoding.' => 'Soubor musí být v kódování UTF-8.',
|
|
||||||
|
|
||||||
// in-place editing in select
|
// in-place editing in select
|
||||||
'Modify' => 'Změnit',
|
|
||||||
'Ctrl+click on a value to modify it.' => 'Ctrl+klikněte na políčko, které chcete změnit.',
|
'Ctrl+click on a value to modify it.' => 'Ctrl+klikněte na políčko, které chcete změnit.',
|
||||||
'Use edit link to modify this value.' => 'Ke změně této hodnoty použijte odkaz upravit.',
|
'Use edit link to modify this value.' => 'Ke změně této hodnoty použijte odkaz upravit.',
|
||||||
|
|
||||||
@@ -266,10 +258,8 @@ $translations = array(
|
|||||||
'Edit' => 'Upravit',
|
'Edit' => 'Upravit',
|
||||||
'Insert' => 'Vložit',
|
'Insert' => 'Vložit',
|
||||||
'Save' => 'Uložit',
|
'Save' => 'Uložit',
|
||||||
'Saving' => 'Ukládá se',
|
|
||||||
'Save and continue edit' => 'Uložit a pokračovat v editaci',
|
'Save and continue edit' => 'Uložit a pokračovat v editaci',
|
||||||
'Save and insert next' => 'Uložit a vložit další',
|
'Save and insert next' => 'Uložit a vložit další',
|
||||||
'Selected' => 'Označené',
|
|
||||||
'Clone' => 'Klonovat',
|
'Clone' => 'Klonovat',
|
||||||
'Delete' => 'Smazat',
|
'Delete' => 'Smazat',
|
||||||
'You have no privileges to update this table.' => 'Nemáte oprávnění editovat tuto tabulku.',
|
'You have no privileges to update this table.' => 'Nemáte oprávnění editovat tuto tabulku.',
|
||||||
@@ -312,6 +302,7 @@ $translations = array(
|
|||||||
'Schema has been dropped.' => 'Schéma bylo odstraněno.',
|
'Schema has been dropped.' => 'Schéma bylo odstraněno.',
|
||||||
'Schema has been created.' => 'Schéma bylo vytvořeno.',
|
'Schema has been created.' => 'Schéma bylo vytvořeno.',
|
||||||
'Schema has been altered.' => 'Schéma bylo změněno.',
|
'Schema has been altered.' => 'Schéma bylo změněno.',
|
||||||
|
'schema' => 'schéma',
|
||||||
'Schema' => 'Schéma',
|
'Schema' => 'Schéma',
|
||||||
'Invalid schema.' => 'Nesprávné schéma.',
|
'Invalid schema.' => 'Nesprávné schéma.',
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ $translations = array(
|
|||||||
'Alter table' => 'Tabelle ändern',
|
'Alter table' => 'Tabelle ändern',
|
||||||
'Create table' => 'Neue Tabelle erstellen',
|
'Create table' => 'Neue Tabelle erstellen',
|
||||||
'Table name' => 'Name der Tabelle',
|
'Table name' => 'Name der Tabelle',
|
||||||
'engine' => 'Speicher-Engine',
|
'engine' => 'Motor',
|
||||||
'collation' => 'Kollation',
|
'collation' => 'Kollation',
|
||||||
'Column name' => 'Spaltenname',
|
'Column name' => 'Spaltenname',
|
||||||
'Type' => 'Typ',
|
'Type' => 'Typ',
|
||||||
@@ -37,6 +37,7 @@ $translations = array(
|
|||||||
'Use' => 'Benutzung',
|
'Use' => 'Benutzung',
|
||||||
'No tables.' => 'Keine Tabellen.',
|
'No tables.' => 'Keine Tabellen.',
|
||||||
'select' => 'zeigen',
|
'select' => 'zeigen',
|
||||||
|
'Create new table' => 'Neue Tabelle',
|
||||||
'Item has been deleted.' => 'Datensatz gelöscht.',
|
'Item has been deleted.' => 'Datensatz gelöscht.',
|
||||||
'Item has been updated.' => 'Datensatz geändert.',
|
'Item has been updated.' => 'Datensatz geändert.',
|
||||||
'Item%s has been inserted.' => 'Datensatz%s hinzugefügt.',
|
'Item%s has been inserted.' => 'Datensatz%s hinzugefügt.',
|
||||||
@@ -179,7 +180,6 @@ $translations = array(
|
|||||||
'Tables have been truncated.' => 'Tabellen sind entleert worden (truncate).',
|
'Tables have been truncated.' => 'Tabellen sind entleert worden (truncate).',
|
||||||
'Rows' => 'Datensätze',
|
'Rows' => 'Datensätze',
|
||||||
',' => ' ',
|
',' => ' ',
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Tables have been moved.' => 'Tabellen verschoben.',
|
'Tables have been moved.' => 'Tabellen verschoben.',
|
||||||
'Move to other database' => 'In andere Datenbank verschieben',
|
'Move to other database' => 'In andere Datenbank verschieben',
|
||||||
'Move' => 'Verschieben',
|
'Move' => 'Verschieben',
|
||||||
@@ -226,6 +226,7 @@ $translations = array(
|
|||||||
'Permanent login' => 'Passwort speichern',
|
'Permanent login' => 'Passwort speichern',
|
||||||
'Databases have been dropped.' => 'Datenbanken entfernt.',
|
'Databases have been dropped.' => 'Datenbanken entfernt.',
|
||||||
'Search data in tables' => 'Suche in Tabellen',
|
'Search data in tables' => 'Suche in Tabellen',
|
||||||
|
'schema' => 'Schema',
|
||||||
'Schema' => 'Schema',
|
'Schema' => 'Schema',
|
||||||
'Alter schema' => 'Schema ändern',
|
'Alter schema' => 'Schema ändern',
|
||||||
'Create schema' => 'Neues Schema',
|
'Create schema' => 'Neues Schema',
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
$translations = array(
|
$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.'),
|
'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'),
|
'%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.'),
|
'Routine has been called, %d row(s) affected.' => array('Routine has been called, %d row affected.', 'Routine has been called, %d rows affected.'),
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ $translations = array(
|
|||||||
'Use' => 'Usar',
|
'Use' => 'Usar',
|
||||||
'No tables.' => 'No existen tablas.',
|
'No tables.' => 'No existen tablas.',
|
||||||
'select' => 'registros',
|
'select' => 'registros',
|
||||||
|
'Create new table' => 'Nueva tabla',
|
||||||
'Item has been deleted.' => 'Registro eliminado.',
|
'Item has been deleted.' => 'Registro eliminado.',
|
||||||
'Item has been updated.' => 'Registro modificado.',
|
'Item has been updated.' => 'Registro modificado.',
|
||||||
'Item%s has been inserted.' => 'Registro%s insertado.',
|
'Item%s has been inserted.' => 'Registro%s insertado.',
|
||||||
@@ -179,7 +180,6 @@ $translations = array(
|
|||||||
'Tables have been truncated.' => 'Tablas vaciadas (truncate).',
|
'Tables have been truncated.' => 'Tablas vaciadas (truncate).',
|
||||||
'Rows' => 'Registros',
|
'Rows' => 'Registros',
|
||||||
',' => ' ',
|
',' => ' ',
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Tables have been moved.' => 'Se movieron las tablas.',
|
'Tables have been moved.' => 'Se movieron las tablas.',
|
||||||
'Move to other database' => 'Mover a otra base de datos',
|
'Move to other database' => 'Mover a otra base de datos',
|
||||||
'Move' => 'Mover',
|
'Move' => 'Mover',
|
||||||
@@ -226,6 +226,7 @@ $translations = array(
|
|||||||
'Permanent login' => 'Guardar contraseña',
|
'Permanent login' => 'Guardar contraseña',
|
||||||
'Databases have been dropped.' => 'Bases de datos eliminadas.',
|
'Databases have been dropped.' => 'Bases de datos eliminadas.',
|
||||||
'Search data in tables' => 'Buscar datos en tablas',
|
'Search data in tables' => 'Buscar datos en tablas',
|
||||||
|
'schema' => 'esquema',
|
||||||
'Schema' => 'Esquema',
|
'Schema' => 'Esquema',
|
||||||
'Alter schema' => 'Modificar esquema',
|
'Alter schema' => 'Modificar esquema',
|
||||||
'Create schema' => 'Crear esquema',
|
'Create schema' => 'Crear esquema',
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ $translations = array(
|
|||||||
'Use' => 'Kasuta',
|
'Use' => 'Kasuta',
|
||||||
'No tables.' => 'Tabeleid ei leitud.',
|
'No tables.' => 'Tabeleid ei leitud.',
|
||||||
'select' => 'kuva',
|
'select' => 'kuva',
|
||||||
|
'Create new table' => 'Loo uus tabel',
|
||||||
'Item has been deleted.' => 'Kustutamine õnnestus.',
|
'Item has been deleted.' => 'Kustutamine õnnestus.',
|
||||||
'Item has been updated.' => 'Uuendamine õnnestus.',
|
'Item has been updated.' => 'Uuendamine õnnestus.',
|
||||||
'Item%s has been inserted.' => 'Kirje%s on edukalt lisatud.',
|
'Item%s has been inserted.' => 'Kirje%s on edukalt lisatud.',
|
||||||
@@ -179,7 +180,6 @@ $translations = array(
|
|||||||
'Data Free' => 'Vaba ruumi',
|
'Data Free' => 'Vaba ruumi',
|
||||||
'Rows' => 'Ridu',
|
'Rows' => 'Ridu',
|
||||||
',' => ',',
|
',' => ',',
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Analyze' => 'Analüüsi',
|
'Analyze' => 'Analüüsi',
|
||||||
'Optimize' => 'Optimeeri',
|
'Optimize' => 'Optimeeri',
|
||||||
'Check' => 'Kontrolli',
|
'Check' => 'Kontrolli',
|
||||||
@@ -226,6 +226,7 @@ $translations = array(
|
|||||||
'Permanent login' => 'Jäta mind meelde',
|
'Permanent login' => 'Jäta mind meelde',
|
||||||
'Databases have been dropped.' => 'Andmebaasid on edukalt kustutatud.',
|
'Databases have been dropped.' => 'Andmebaasid on edukalt kustutatud.',
|
||||||
'Search data in tables' => 'Otsi kogu andmebaasist',
|
'Search data in tables' => 'Otsi kogu andmebaasist',
|
||||||
|
'schema' => 'struktuur',
|
||||||
'Schema' => 'Struktuur',
|
'Schema' => 'Struktuur',
|
||||||
'Alter schema' => 'Muuda struktuuri',
|
'Alter schema' => 'Muuda struktuuri',
|
||||||
'Create schema' => 'Loo struktuur',
|
'Create schema' => 'Loo struktuur',
|
||||||
|
|||||||
@@ -93,7 +93,6 @@ $translations = array(
|
|||||||
|
|
||||||
// thousands separator - must contain single byte
|
// thousands separator - must contain single byte
|
||||||
',' => ' ',
|
',' => ' ',
|
||||||
'0123456789' => '۰۱۲۳۴۵۶۷۸۹',
|
|
||||||
'Engine' => 'موتور',
|
'Engine' => 'موتور',
|
||||||
'Collation' => 'تطبیق',
|
'Collation' => 'تطبیق',
|
||||||
'Data Length' => 'طول داده',
|
'Data Length' => 'طول داده',
|
||||||
@@ -145,6 +144,7 @@ $translations = array(
|
|||||||
'No tables.' => 'جدولی وجود ندارد',
|
'No tables.' => 'جدولی وجود ندارد',
|
||||||
'Alter table' => 'ویرایش جدول',
|
'Alter table' => 'ویرایش جدول',
|
||||||
'Create table' => 'ایجاد جدول',
|
'Create table' => 'ایجاد جدول',
|
||||||
|
'Create new table' => 'ایجاد جدول جدید',
|
||||||
'Table has been dropped.' => 'جدول حذف شد',
|
'Table has been dropped.' => 'جدول حذف شد',
|
||||||
'Tables have been dropped.' => 'جدولها حذف شدند',
|
'Tables have been dropped.' => 'جدولها حذف شدند',
|
||||||
'Table has been altered.' => 'جدول ویرایش شد',
|
'Table has been altered.' => 'جدول ویرایش شد',
|
||||||
@@ -294,6 +294,7 @@ $translations = array(
|
|||||||
'Schema has been dropped.' => 'ساختار حذف شد',
|
'Schema has been dropped.' => 'ساختار حذف شد',
|
||||||
'Schema has been created.' => 'ساختار ایجاد شد',
|
'Schema has been created.' => 'ساختار ایجاد شد',
|
||||||
'Schema has been altered.' => 'ساختار ویرایش شد',
|
'Schema has been altered.' => 'ساختار ویرایش شد',
|
||||||
|
'schema' => 'ساختار',
|
||||||
'Schema' => 'ساختار',
|
'Schema' => 'ساختار',
|
||||||
'Invalid schema.' => 'ساختار نامعتبر',
|
'Invalid schema.' => 'ساختار نامعتبر',
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ $translations = array(
|
|||||||
'Use' => 'Utiliser',
|
'Use' => 'Utiliser',
|
||||||
'No tables.' => 'Aucune table.',
|
'No tables.' => 'Aucune table.',
|
||||||
'select' => 'select',
|
'select' => 'select',
|
||||||
|
'Create new table' => 'Créer une nouvelle table',
|
||||||
'Item has been deleted.' => 'L\'élément a été supprimé.',
|
'Item has been deleted.' => 'L\'élément a été supprimé.',
|
||||||
'Item has been updated.' => 'L\'élément a été modifié.',
|
'Item has been updated.' => 'L\'élément a été modifié.',
|
||||||
'Edit' => 'Modifier',
|
'Edit' => 'Modifier',
|
||||||
@@ -177,7 +178,6 @@ $translations = array(
|
|||||||
'Data Free' => 'Espace inutilisé',
|
'Data Free' => 'Espace inutilisé',
|
||||||
'Rows' => 'Lignes',
|
'Rows' => 'Lignes',
|
||||||
',' => ',',
|
',' => ',',
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Analyze' => 'Analyser',
|
'Analyze' => 'Analyser',
|
||||||
'Optimize' => 'Optimiser',
|
'Optimize' => 'Optimiser',
|
||||||
'Check' => 'Vérifier',
|
'Check' => 'Vérifier',
|
||||||
@@ -193,7 +193,7 @@ $translations = array(
|
|||||||
'Partitions' => 'Partitions',
|
'Partitions' => 'Partitions',
|
||||||
'Partition name' => 'Nom de la partition',
|
'Partition name' => 'Nom de la partition',
|
||||||
'Values' => 'Valeurs',
|
'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ù',
|
'anywhere' => 'n\'importe où',
|
||||||
'Import' => 'Importer',
|
'Import' => 'Importer',
|
||||||
'Stop on error' => 'Arrêter en cas d\'erreur',
|
'Stop on error' => 'Arrêter en cas d\'erreur',
|
||||||
@@ -225,6 +225,7 @@ $translations = array(
|
|||||||
'Databases have been dropped.' => 'Les bases de données ont été supprimées.',
|
'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.',
|
'Database has been dropped.' => 'La base de données a été supprimée.',
|
||||||
'Search data in tables' => 'Rechercher dans les tables',
|
'Search data in tables' => 'Rechercher dans les tables',
|
||||||
|
'schema' => 'schéma',
|
||||||
'Schema' => 'Schéma',
|
'Schema' => 'Schéma',
|
||||||
'Alter schema' => 'Modifier le schéma',
|
'Alter schema' => 'Modifier le schéma',
|
||||||
'Create schema' => 'Créer un schéma',
|
'Create schema' => 'Créer un schéma',
|
||||||
@@ -267,21 +268,4 @@ $translations = array(
|
|||||||
'Permanent link' => 'Lien permanent',
|
'Permanent link' => 'Lien permanent',
|
||||||
'Edit all' => 'Tout modifier',
|
'Edit all' => 'Tout modifier',
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
'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',
|
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ $translations = array(
|
|||||||
'Use' => 'Használ',
|
'Use' => 'Használ',
|
||||||
'No tables.' => 'Nincs tábla.',
|
'No tables.' => 'Nincs tábla.',
|
||||||
'select' => 'kiválasztás',
|
'select' => 'kiválasztás',
|
||||||
|
'Create new table' => 'Új tábla',
|
||||||
'Item has been deleted.' => 'A tétel törölve.',
|
'Item has been deleted.' => 'A tétel törölve.',
|
||||||
'Item has been updated.' => 'A tétel frissítve.',
|
'Item has been updated.' => 'A tétel frissítve.',
|
||||||
'Item%s has been inserted.' => '%s tétel beszúrva.',
|
'Item%s has been inserted.' => '%s tétel beszúrva.',
|
||||||
@@ -179,7 +180,6 @@ $translations = array(
|
|||||||
'Tables have been truncated.' => 'A tábla felszabadítva.',
|
'Tables have been truncated.' => 'A tábla felszabadítva.',
|
||||||
'Rows' => 'Oszlop',
|
'Rows' => 'Oszlop',
|
||||||
',' => ' ',
|
',' => ' ',
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Tables have been moved.' => 'Táblák áthelyezve.',
|
'Tables have been moved.' => 'Táblák áthelyezve.',
|
||||||
'Move to other database' => 'Áthelyezés másik adatbázisba',
|
'Move to other database' => 'Áthelyezés másik adatbázisba',
|
||||||
'Move' => 'Áthelyez',
|
'Move' => 'Áthelyez',
|
||||||
@@ -239,6 +239,7 @@ $translations = array(
|
|||||||
'Schema has been dropped.' => 'Séma eldobva.',
|
'Schema has been dropped.' => 'Séma eldobva.',
|
||||||
'Schema has been created.' => 'Séma létrejött.',
|
'Schema has been created.' => 'Séma létrejött.',
|
||||||
'Schema has been altered.' => 'Séma módosult.',
|
'Schema has been altered.' => 'Séma módosult.',
|
||||||
|
'schema' => 'séma',
|
||||||
'Schema' => 'Séma',
|
'Schema' => 'Séma',
|
||||||
'Sequences' => 'Sorozatok',
|
'Sequences' => 'Sorozatok',
|
||||||
'Create sequence' => 'Sorozat létrehozása',
|
'Create sequence' => 'Sorozat létrehozása',
|
||||||
|
|||||||
@@ -93,7 +93,6 @@ $translations = array(
|
|||||||
|
|
||||||
// thousands separator - must contain single byte
|
// thousands separator - must contain single byte
|
||||||
',' => '.',
|
',' => '.',
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Engine' => 'Mesin',
|
'Engine' => 'Mesin',
|
||||||
'Collation' => 'Kolasi',
|
'Collation' => 'Kolasi',
|
||||||
'Data Length' => 'Panjang Data',
|
'Data Length' => 'Panjang Data',
|
||||||
@@ -145,6 +144,7 @@ $translations = array(
|
|||||||
'No tables.' => 'Tiada tabel.',
|
'No tables.' => 'Tiada tabel.',
|
||||||
'Alter table' => 'Ubah tabel',
|
'Alter table' => 'Ubah tabel',
|
||||||
'Create table' => 'Buat tabel',
|
'Create table' => 'Buat tabel',
|
||||||
|
'Create new table' => 'Buat tabel baru',
|
||||||
'Table has been dropped.' => 'Tabel berhasil dihapus.',
|
'Table has been dropped.' => 'Tabel berhasil dihapus.',
|
||||||
'Tables have been dropped.' => 'Tabel berhasil dihapus.',
|
'Tables have been dropped.' => 'Tabel berhasil dihapus.',
|
||||||
'Tables have been optimized.' => 'Tabel berhasil dioptimalkan.',
|
'Tables have been optimized.' => 'Tabel berhasil dioptimalkan.',
|
||||||
@@ -298,6 +298,7 @@ $translations = array(
|
|||||||
'Schema has been dropped.' => 'Skema berhasil dihapus.',
|
'Schema has been dropped.' => 'Skema berhasil dihapus.',
|
||||||
'Schema has been created.' => 'Skema berhasil dibuat.',
|
'Schema has been created.' => 'Skema berhasil dibuat.',
|
||||||
'Schema has been altered.' => 'Skema berhasil diubah.',
|
'Schema has been altered.' => 'Skema berhasil diubah.',
|
||||||
|
'schema' => 'skema',
|
||||||
'Schema' => 'Skema',
|
'Schema' => 'Skema',
|
||||||
'Invalid schema.' => 'Skema invalid.',
|
'Invalid schema.' => 'Skema invalid.',
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ $translations = array(
|
|||||||
'Use' => 'Usa',
|
'Use' => 'Usa',
|
||||||
'No tables.' => 'No tabelle.',
|
'No tables.' => 'No tabelle.',
|
||||||
'select' => 'seleziona',
|
'select' => 'seleziona',
|
||||||
|
'Create new table' => 'Crea nuova tabella',
|
||||||
'Item has been deleted.' => 'Elemento eliminato.',
|
'Item has been deleted.' => 'Elemento eliminato.',
|
||||||
'Item has been updated.' => 'Elemento aggiornato.',
|
'Item has been updated.' => 'Elemento aggiornato.',
|
||||||
'Item%s has been inserted.' => 'Elemento%s inserito.',
|
'Item%s has been inserted.' => 'Elemento%s inserito.',
|
||||||
@@ -179,7 +180,6 @@ $translations = array(
|
|||||||
'Data Free' => 'Dati liberi',
|
'Data Free' => 'Dati liberi',
|
||||||
'Rows' => 'Righe',
|
'Rows' => 'Righe',
|
||||||
',' => '.',
|
',' => '.',
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Analyze' => 'Analizza',
|
'Analyze' => 'Analizza',
|
||||||
'Optimize' => 'Ottimizza',
|
'Optimize' => 'Ottimizza',
|
||||||
'Check' => 'Controlla',
|
'Check' => 'Controlla',
|
||||||
@@ -226,6 +226,7 @@ $translations = array(
|
|||||||
'Permanent login' => 'Login permanente',
|
'Permanent login' => 'Login permanente',
|
||||||
'Databases have been dropped.' => 'Database eliminati.',
|
'Databases have been dropped.' => 'Database eliminati.',
|
||||||
'Search data in tables' => 'Cerca nelle tabelle',
|
'Search data in tables' => 'Cerca nelle tabelle',
|
||||||
|
'schema' => 'schema',
|
||||||
'Schema' => 'Schema',
|
'Schema' => 'Schema',
|
||||||
'Alter schema' => 'Modifica schema',
|
'Alter schema' => 'Modifica schema',
|
||||||
'Create schema' => 'Crea schema',
|
'Create schema' => 'Crea schema',
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ $translations = array(
|
|||||||
'Use' => '使用',
|
'Use' => '使用',
|
||||||
'No tables.' => 'テーブルがありません。',
|
'No tables.' => 'テーブルがありません。',
|
||||||
'select' => '選択',
|
'select' => '選択',
|
||||||
|
'Create new table' => 'テーブルを作成',
|
||||||
'Item has been deleted.' => '項目を削除しました',
|
'Item has been deleted.' => '項目を削除しました',
|
||||||
'Item has been updated.' => '項目を更新しました',
|
'Item has been updated.' => '項目を更新しました',
|
||||||
'Edit' => '編集',
|
'Edit' => '編集',
|
||||||
@@ -175,7 +176,6 @@ $translations = array(
|
|||||||
'Data Free' => '空き',
|
'Data Free' => '空き',
|
||||||
'Rows' => '行数',
|
'Rows' => '行数',
|
||||||
',' => ',',
|
',' => ',',
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Analyze' => '分析',
|
'Analyze' => '分析',
|
||||||
'Optimize' => '最適化',
|
'Optimize' => '最適化',
|
||||||
'Check' => 'チェック',
|
'Check' => 'チェック',
|
||||||
@@ -227,6 +227,7 @@ $translations = array(
|
|||||||
'Permanent login' => '永続的にログイン',
|
'Permanent login' => '永続的にログイン',
|
||||||
'Databases have been dropped.' => 'データベースを削除しました',
|
'Databases have been dropped.' => 'データベースを削除しました',
|
||||||
'Search data in tables' => 'データを検索する',
|
'Search data in tables' => 'データを検索する',
|
||||||
|
'schema' => 'スキーマ',
|
||||||
'Schema' => 'スキーマ',
|
'Schema' => 'スキーマ',
|
||||||
'Alter schema' => 'スキーマ変更',
|
'Alter schema' => 'スキーマ変更',
|
||||||
'Create schema' => 'スキーマ追加',
|
'Create schema' => 'スキーマ追加',
|
||||||
|
|||||||
@@ -1,269 +0,0 @@
|
|||||||
<?php
|
|
||||||
$translations = array(
|
|
||||||
'Login' => '로그인',
|
|
||||||
'Logout successful.' => '로그아웃',
|
|
||||||
'Invalid credentials.' => '잘못된 로그인',
|
|
||||||
'Server' => '서버',
|
|
||||||
'Username' => '사용자이름',
|
|
||||||
'Password' => '비밀번호',
|
|
||||||
'Select database' => '데이터베이스를 선택하십시오.',
|
|
||||||
'Invalid database.' => '잘못된 데이터베이스입니다.',
|
|
||||||
'Create new database' => '새 데이터베이스 만들기',
|
|
||||||
'Table has been dropped.' => '테이블을 삭제했습니다.',
|
|
||||||
'Table has been altered.' => '테이블을 변경했습니다.',
|
|
||||||
'Table has been created.' => '테이블을 만들었습니다.',
|
|
||||||
'Alter table' => '테이블 변경',
|
|
||||||
'Create table' => '테이블 만들기',
|
|
||||||
'Table name' => '테이블 이름',
|
|
||||||
'engine' => '엔진',
|
|
||||||
'collation' => '정렬',
|
|
||||||
'Column name' => '열 이름',
|
|
||||||
'Type' => '형',
|
|
||||||
'Length' => '길이',
|
|
||||||
'Auto Increment' => '자동증가',
|
|
||||||
'Options' => '설정',
|
|
||||||
'Save' => '저장',
|
|
||||||
'Drop' => '삭제',
|
|
||||||
'Database has been dropped.' => '데이터베이스를 삭제했습니다.',
|
|
||||||
'Database has been created.' => '데이터베이스를 만들었습니다.',
|
|
||||||
'Database has been renamed.' => '데이터베이스의 이름을 바꾸었습니다.',
|
|
||||||
'Database has been altered.' => '데이터베이스를 변경했습니다.',
|
|
||||||
'Alter database' => '데이터베이스 변경',
|
|
||||||
'Create database' => '데이터베이스 만들기',
|
|
||||||
'SQL command' => 'SQL 명령',
|
|
||||||
'Dump' => '덤프',
|
|
||||||
'Logout' => '로그아웃',
|
|
||||||
'database' => '데이터베이스',
|
|
||||||
'Use' => '사용',
|
|
||||||
'No tables.' => '테이블이 없습니다.',
|
|
||||||
'select' => '선택',
|
|
||||||
'Item has been deleted.' => '항목을 삭제했습니다.',
|
|
||||||
'Item has been updated.' => '항목을 갱신했습니다.',
|
|
||||||
'Edit' => '편집',
|
|
||||||
'Insert' => '삽입',
|
|
||||||
'Save and insert next' => '저장하고 다음에 추가',
|
|
||||||
'Delete' => '삭제',
|
|
||||||
'Database' => '데이터베이스',
|
|
||||||
'Routines' => '루틴',
|
|
||||||
'Indexes have been altered.' => '인덱스를 변경했습니다.',
|
|
||||||
'Indexes' => '색인',
|
|
||||||
'Alter indexes' => '인덱스 변경',
|
|
||||||
'Add next' => '추가',
|
|
||||||
'Language' => '언어',
|
|
||||||
'Select' => '선택',
|
|
||||||
'New item' => '항목 만들기',
|
|
||||||
'Search' => '검색',
|
|
||||||
'Sort' => '정렬',
|
|
||||||
'descending' => '역순',
|
|
||||||
'Limit' => '제약',
|
|
||||||
'No rows.' => '행이 없습니다.',
|
|
||||||
'Action' => '실행',
|
|
||||||
'edit' => '편집',
|
|
||||||
'Page' => '페이지',
|
|
||||||
'Query executed OK, %d row(s) affected.' => '쿼리를 실행했습니다. %d 행을 변경했습니다.',
|
|
||||||
'Error in query' => '쿼리의 오류',
|
|
||||||
'Execute' => '실행',
|
|
||||||
'Table' => '테이블',
|
|
||||||
'Foreign keys' => '외부 키',
|
|
||||||
'Triggers' => '트리거',
|
|
||||||
'View' => '보기',
|
|
||||||
'Unable to select the table' => '테이블을 선택할 수 없습니다.',
|
|
||||||
'Invalid CSRF token. Send the form again.' => '잘못된 CSRF 토큰. 다시 보내주십시오.',
|
|
||||||
'Comment' => '코멘트',
|
|
||||||
'Default values' => '기본값',
|
|
||||||
'%d byte(s)' => '%d 바이트',
|
|
||||||
'No commands to execute.' => '실행할 수 있는 명령이 없습니다.',
|
|
||||||
'Unable to upload a file.' => '파일을 업로드 할 수 없습니다.',
|
|
||||||
'File upload' => '파일 올리기',
|
|
||||||
'File uploads are disabled.' => '파일 업로드가 잘못되었습니다.',
|
|
||||||
'Routine has been called, %d row(s) affected.' => '루틴을 호출했습니다. %d 행을 변경했습니다.',
|
|
||||||
'Call' => '외침',
|
|
||||||
'No extension' => '확장 기능이 없습니다.',
|
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'PHP 확장 (%s)가 설치되어 있지 않습니다.',
|
|
||||||
'Session support must be enabled.' => '세션을 사용하십시오.',
|
|
||||||
'Session expired, please login again.' => '세션 만료. 다시 로그인하십시오.',
|
|
||||||
'Text length' => '문자열의 길이',
|
|
||||||
'Foreign key has been dropped.' => '외부 키를 제거했습니다.',
|
|
||||||
'Foreign key has been altered.' => '외부 키를 변경했습니다.',
|
|
||||||
'Foreign key has been created.' => '외부 키를 만들었습니다.',
|
|
||||||
'Foreign key' => '외부 키',
|
|
||||||
'Target table' => '테이블',
|
|
||||||
'Change' => '변경',
|
|
||||||
'Source' => '소스',
|
|
||||||
'Target' => '타겟',
|
|
||||||
'Add column' => '열 추가',
|
|
||||||
'Alter' => '변경',
|
|
||||||
'Add foreign key' => '외부 키를 추가',
|
|
||||||
'ON DELETE' => 'ON DELETE',
|
|
||||||
'ON UPDATE' => 'ON UPDATE',
|
|
||||||
'Index Type' => '인덱스 형',
|
|
||||||
'Column (length)' => '열 (길이)',
|
|
||||||
'View has been dropped.' => '보기를 삭제했습니다.',
|
|
||||||
'View has been altered.' => '보기를 변경했습니다.',
|
|
||||||
'View has been created.' => '보기를 만들었습니다.',
|
|
||||||
'Alter view' => '보기 변경',
|
|
||||||
'Create view' => '뷰 만들기',
|
|
||||||
'Name' => '이름',
|
|
||||||
'Process list' => '프로세스 목록',
|
|
||||||
'%d process(es) have been killed.' => '%d 프로세스를 강제 종료되었습니다.',
|
|
||||||
'Kill' => '강제 종료',
|
|
||||||
'Parameter name' => '참조 여명',
|
|
||||||
'Database schema' => '구조',
|
|
||||||
'Create procedure' => '시저 만들기',
|
|
||||||
'Create function' => '함수 만들기',
|
|
||||||
'Routine has been dropped.' => '루틴 만들기',
|
|
||||||
'Routine has been altered.' => '루틴 변경',
|
|
||||||
'Routine has been created.' => '루틴 만들기',
|
|
||||||
'Alter function' => '함수의 변경',
|
|
||||||
'Alter procedure' => '시저 변경',
|
|
||||||
'Return type' => '반환 형식',
|
|
||||||
'Add trigger' => '트리거 추가',
|
|
||||||
'Trigger has been dropped.' => '트리거를 제거했습니다.',
|
|
||||||
'Trigger has been altered.' => '트리거를 변경했습니다.',
|
|
||||||
'Trigger has been created.' => '트리거를 추가했습니다.',
|
|
||||||
'Alter trigger' => '트리거 변경',
|
|
||||||
'Create trigger' => '트리거 만들기',
|
|
||||||
'Time' => '시간',
|
|
||||||
'Event' => '이벤트',
|
|
||||||
'%s version: %s through PHP extension %s' => '%s 버전 %s, PHP 확장 %s',
|
|
||||||
'%d row(s)' => '%d 행',
|
|
||||||
'Remove' => '제외',
|
|
||||||
'Are you sure?' => '실행 하시겠습니까?',
|
|
||||||
'Privileges' => '권한',
|
|
||||||
'Create user' => '사용자 만들기',
|
|
||||||
'User has been dropped.' => '사용자 삭제',
|
|
||||||
'User has been altered.' => '사용자 변경',
|
|
||||||
'User has been created.' => '사용자 만들기',
|
|
||||||
'Hashed' => 'Hashed',
|
|
||||||
'Column' => '열',
|
|
||||||
'Routine' => '루틴',
|
|
||||||
'Grant' => '권한 부여',
|
|
||||||
'Revoke' => '권한 취소',
|
|
||||||
'Logged as: %s' => '로그 : %s',
|
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST 데이터가 너무 큽니다. 데이터 크기를 줄이거나 %s 설정을 늘리십시오.',
|
|
||||||
'Move up' => '상',
|
|
||||||
'Move down' => '아래',
|
|
||||||
'Export' => '내보내기',
|
|
||||||
'Tables' => '테이블',
|
|
||||||
'Data' => '데이터',
|
|
||||||
'Output' => '출력',
|
|
||||||
'open' => '열',
|
|
||||||
'save' => '저장',
|
|
||||||
'Format' => '형식',
|
|
||||||
'Functions' => '함수',
|
|
||||||
'Aggregation' => '집합',
|
|
||||||
'Event has been dropped.' => '삭제했습니다.',
|
|
||||||
'Event has been altered.' => '변경했습니다.',
|
|
||||||
'Event has been created.' => '만들었습니다.',
|
|
||||||
'Alter event' => '변경',
|
|
||||||
'Create event' => '만들기',
|
|
||||||
'Start' => '시작',
|
|
||||||
'End' => '종료',
|
|
||||||
'Every' => '매번',
|
|
||||||
'Status' => '상태',
|
|
||||||
'On completion preserve' => '완성 후 저장',
|
|
||||||
'Events' => '이벤트',
|
|
||||||
'Schedule' => '일정',
|
|
||||||
'At given time' => '지정 시간',
|
|
||||||
'Tables have been truncated.' => '테이블을 truncate했습니다.',
|
|
||||||
'Tables have been moved.' => '테이블을 옮겼습니다.',
|
|
||||||
'Tables and views' => '테이블과 뷰',
|
|
||||||
'Engine' => '엔진',
|
|
||||||
'Collation' => '정렬',
|
|
||||||
'Data Length' => '데이터 길이',
|
|
||||||
'Index Length' => '인덱스 길이',
|
|
||||||
'Data Free' => '여유',
|
|
||||||
'Rows' => '행',
|
|
||||||
',' => ',',
|
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Analyze' => '분석',
|
|
||||||
'Optimize' => '최적화',
|
|
||||||
'Check' => '확인',
|
|
||||||
'Repair' => '복구',
|
|
||||||
'Truncate' => 'Truncate',
|
|
||||||
'Move to other database' => '다른 데이터베이스로 이동',
|
|
||||||
'Move' => '이동',
|
|
||||||
'Save and continue edit' => '저장하고 계속',
|
|
||||||
'original' => '원래',
|
|
||||||
'%d item(s) have been affected.' => '%d를 갱신했습니다.',
|
|
||||||
'whole result' => '모든 결과',
|
|
||||||
'Tables have been dropped.' => '테이블을 삭제했습니다.',
|
|
||||||
'Clone' => '복제',
|
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => '정의 가능한 최대 필드 수를 초과했습니다. %s를 늘리십시오.',
|
|
||||||
'Partition by' => '파티션',
|
|
||||||
'Partitions' => '파티션',
|
|
||||||
'Partition name' => '파티션 이름',
|
|
||||||
'Values' => '값',
|
|
||||||
'%d row(s) have been imported.' => '%d 행을 가져 왔습니다.',
|
|
||||||
'Show structure' => '구조',
|
|
||||||
'anywhere' => '모든',
|
|
||||||
'Import' => '가져 오기',
|
|
||||||
'Stop on error' => '오류의 경우 중지',
|
|
||||||
'Select data' => '데이터',
|
|
||||||
'%.3f s' => '%.3f 초',
|
|
||||||
'$1-$3-$5' => '$1-$3-$5',
|
|
||||||
'[yyyy]-mm-dd' => '[yyyy]-mm-dd',
|
|
||||||
'History' => '역사',
|
|
||||||
'Variables' => '변수',
|
|
||||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => '원본 및 대상 열은 동일한 데이터 형식이어야합니다. 목표 컬럼에 인덱스와 데이터가 존재해야합니다.',
|
|
||||||
'Relations' => '관계',
|
|
||||||
'Run file' => '파일을 실행',
|
|
||||||
'Clear' => '삭제',
|
|
||||||
'Maximum allowed file size is %sB.' => '파일의 최대 크기 %sB',
|
|
||||||
'Numbers' => '숫자',
|
|
||||||
'Date and time' => '시간',
|
|
||||||
'Strings' => '문자열',
|
|
||||||
'Binary' => '이진',
|
|
||||||
'Lists' => '목록',
|
|
||||||
'Editor' => '에디터',
|
|
||||||
'E-mail' => '메일',
|
|
||||||
'From' => '보낸 사람',
|
|
||||||
'Subject' => '제목',
|
|
||||||
'Send' => '보내기',
|
|
||||||
'%d e-mail(s) have been sent.' => '%d 메일을 보냈습니다.',
|
|
||||||
'Webserver file %s' => 'Web 서버 파일 %s',
|
|
||||||
'File does not exist.' => '파일이 존재하지 않습니다.',
|
|
||||||
'%d in total' => '총 %d',
|
|
||||||
'Permanent login' => '영구적으로 로그인',
|
|
||||||
'Databases have been dropped.' => '데이터베이스를 삭제했습니다.',
|
|
||||||
'Search data in tables' => '데이터 검색',
|
|
||||||
'Schema' => '스키마',
|
|
||||||
'Alter schema' => '스키마 변경',
|
|
||||||
'Create schema' => '스키마 추가',
|
|
||||||
'Schema has been dropped.' => '스키마를 삭제했습니다.',
|
|
||||||
'Schema has been created.' => '스키마를 추가했습니다.',
|
|
||||||
'Schema has been altered.' => '스키마를 변경했습니다.',
|
|
||||||
'Sequences' => '시퀀스',
|
|
||||||
'Create sequence' => '시퀀스 만들기',
|
|
||||||
'Alter sequence' => '순서 변경',
|
|
||||||
'Sequence has been dropped.' => '시퀀스를 제거했습니다.',
|
|
||||||
'Sequence has been created.' => '시퀀스를 추가했습니다.',
|
|
||||||
'Sequence has been altered.' => '순서를 변경했습니다.',
|
|
||||||
'User types' => '사용자 정의 형',
|
|
||||||
'Create type' => '사용자 정의 형식 만들기',
|
|
||||||
'Alter type' => '사용자 정의 형식 변경',
|
|
||||||
'Type has been dropped.' => '사용자 정의 형식을 삭제했습니다.',
|
|
||||||
'Type has been created.' => '사용자 정의 형식을 추가했습니다.',
|
|
||||||
'Use edit link to modify this value.' => '링크 편집',
|
|
||||||
'last' => '마지막',
|
|
||||||
'From server' => '서버에서 실행',
|
|
||||||
'System' => '데이터베이스 형식',
|
|
||||||
'empty' => '하늘',
|
|
||||||
'Network' => '네트워크 형',
|
|
||||||
'Geometry' => '기하 형',
|
|
||||||
'File exists.' => '파일이 이미 있습니다.',
|
|
||||||
'Attachments' => '첨부 파일',
|
|
||||||
'Item%s has been inserted.' => '%s 항목을 삽입했습니다.',
|
|
||||||
'now' => '현재 시간',
|
|
||||||
'%d query(s) executed OK.' => '%d 쿼리를 실행했습니다.',
|
|
||||||
'Show only errors' => '오류 만 표시',
|
|
||||||
'Refresh' => '새로 고침',
|
|
||||||
'Invalid schema.' => '잘못된 스키마',
|
|
||||||
'Please use one of the extensions %s.' => '하나의 확장 기능을 사용하십시오 %s',
|
|
||||||
'ltr' => 'ltr',
|
|
||||||
'Tables have been copied.' => '테이블을 복사했습니다',
|
|
||||||
'Copy' => '복사',
|
|
||||||
'Permanent link' => '영구 링크',
|
|
||||||
'Edit all' => '모든 편집',
|
|
||||||
'HH:MM:SS' => '시:분:초',
|
|
||||||
);
|
|
||||||
@@ -93,7 +93,6 @@ $translations = array(
|
|||||||
|
|
||||||
// thousands separator - must contain single byte
|
// thousands separator - must contain single byte
|
||||||
',' => ' ',
|
',' => ' ',
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Engine' => 'Variklis',
|
'Engine' => 'Variklis',
|
||||||
'Collation' => 'Lyginimas',
|
'Collation' => 'Lyginimas',
|
||||||
'Data Length' => 'Duomenų ilgis',
|
'Data Length' => 'Duomenų ilgis',
|
||||||
@@ -145,6 +144,7 @@ $translations = array(
|
|||||||
'No tables.' => 'Nėra lentelių.',
|
'No tables.' => 'Nėra lentelių.',
|
||||||
'Alter table' => 'Redaguoti lentelę',
|
'Alter table' => 'Redaguoti lentelę',
|
||||||
'Create table' => 'Sukurti lentelę',
|
'Create table' => 'Sukurti lentelę',
|
||||||
|
'Create new table' => 'Sukurti naują lentelę',
|
||||||
'Table has been dropped.' => 'Lentelė pašalinta.',
|
'Table has been dropped.' => 'Lentelė pašalinta.',
|
||||||
'Tables have been dropped.' => 'Lentelės pašalintos.',
|
'Tables have been dropped.' => 'Lentelės pašalintos.',
|
||||||
'Table has been altered.' => 'Lentelė pakeista.',
|
'Table has been altered.' => 'Lentelė pakeista.',
|
||||||
@@ -294,6 +294,7 @@ $translations = array(
|
|||||||
'Schema has been dropped.' => 'Schema pašalinta.',
|
'Schema has been dropped.' => 'Schema pašalinta.',
|
||||||
'Schema has been created.' => 'Schema sukurta.',
|
'Schema has been created.' => 'Schema sukurta.',
|
||||||
'Schema has been altered.' => 'Schema pakeista.',
|
'Schema has been altered.' => 'Schema pakeista.',
|
||||||
|
'schema' => 'schema',
|
||||||
'Schema' => 'Schema',
|
'Schema' => 'Schema',
|
||||||
'Invalid schema.' => 'Neteisinga schema.',
|
'Invalid schema.' => 'Neteisinga schema.',
|
||||||
|
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ $translations = array(
|
|||||||
'Use' => 'Gebruik',
|
'Use' => 'Gebruik',
|
||||||
'No tables.' => 'Geen tabellen.',
|
'No tables.' => 'Geen tabellen.',
|
||||||
'select' => 'kies',
|
'select' => 'kies',
|
||||||
|
'Create new table' => 'Nieuwe tabel',
|
||||||
'Item has been deleted.' => 'Item verwijderd.',
|
'Item has been deleted.' => 'Item verwijderd.',
|
||||||
'Item has been updated.' => 'Item aangepast.',
|
'Item has been updated.' => 'Item aangepast.',
|
||||||
'Item%s has been inserted.' => 'Item%s toegevoegd.',
|
'Item%s has been inserted.' => 'Item%s toegevoegd.',
|
||||||
@@ -180,7 +181,6 @@ $translations = array(
|
|||||||
'Data Free' => 'Data Vrij',
|
'Data Free' => 'Data Vrij',
|
||||||
'Rows' => 'Rijen',
|
'Rows' => 'Rijen',
|
||||||
',' => '.',
|
',' => '.',
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Analyze' => 'Analyseer',
|
'Analyze' => 'Analyseer',
|
||||||
'Optimize' => 'Optimaliseer',
|
'Optimize' => 'Optimaliseer',
|
||||||
'Check' => 'Controleer',
|
'Check' => 'Controleer',
|
||||||
@@ -226,6 +226,7 @@ $translations = array(
|
|||||||
'%d in total' => '%d in totaal',
|
'%d in total' => '%d in totaal',
|
||||||
'Permanent login' => 'Blijf aangemeld',
|
'Permanent login' => 'Blijf aangemeld',
|
||||||
'Search data in tables' => 'Zoeken in database',
|
'Search data in tables' => 'Zoeken in database',
|
||||||
|
'schema' => 'schema',
|
||||||
'Schema' => 'Schema',
|
'Schema' => 'Schema',
|
||||||
'Alter schema' => 'Schema wijzigen',
|
'Alter schema' => 'Schema wijzigen',
|
||||||
'Create schema' => 'Schema maken',
|
'Create schema' => 'Schema maken',
|
||||||
|
|||||||
@@ -1,284 +0,0 @@
|
|||||||
<?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,8 +11,6 @@ $translations = array(
|
|||||||
'Logged as: %s' => 'Zalogowany jako: %s',
|
'Logged as: %s' => 'Zalogowany jako: %s',
|
||||||
'Logout successful.' => 'Wylogowano pomyślnie.',
|
'Logout successful.' => 'Wylogowano pomyślnie.',
|
||||||
'Invalid credentials.' => 'Nieprawidłowe dane logowania.',
|
'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',
|
'Language' => 'Język',
|
||||||
'Invalid CSRF token. Send the form again.' => 'Nieprawidłowy token CSRF. Spróbuj wysłać formularz ponownie.',
|
'Invalid CSRF token. Send the form again.' => 'Nieprawidłowy token CSRF. Spróbuj wysłać formularz ponownie.',
|
||||||
'No extension' => 'Brak rozszerzenia',
|
'No extension' => 'Brak rozszerzenia',
|
||||||
@@ -66,7 +64,6 @@ $translations = array(
|
|||||||
'Unable to upload a file.' => 'Wgranie pliku było niemożliwe.',
|
'Unable to upload a file.' => 'Wgranie pliku było niemożliwe.',
|
||||||
'Maximum allowed file size is %sB.' => 'Maksymalna wielkość pliku to %sB.',
|
'Maximum allowed file size is %sB.' => 'Maksymalna wielkość pliku to %sB.',
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Przesłano zbyt dużo danych. Zmniejsz objętość danych lub zwiększ zmienną konfiguracyjną %s.',
|
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Przesłano zbyt dużo danych. Zmniejsz objętość danych lub zwiększ zmienną konfiguracyjną %s.',
|
||||||
'You can upload a big SQL file via FTP and import it from server.' => 'Większe pliki SQL możesz wgrać na serwer poprzez FTP przed zaimportowaniem.',
|
|
||||||
|
|
||||||
'Export' => 'Eksport',
|
'Export' => 'Eksport',
|
||||||
'Dump' => 'Eksport',
|
'Dump' => 'Eksport',
|
||||||
@@ -96,7 +93,6 @@ $translations = array(
|
|||||||
|
|
||||||
// thousands separator - must contain single byte
|
// thousands separator - must contain single byte
|
||||||
',' => ' ',
|
',' => ' ',
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Engine' => 'Składowanie',
|
'Engine' => 'Składowanie',
|
||||||
'Collation' => 'Porównywanie znaków',
|
'Collation' => 'Porównywanie znaków',
|
||||||
'Data Length' => 'Rozmiar danych',
|
'Data Length' => 'Rozmiar danych',
|
||||||
@@ -106,7 +102,6 @@ $translations = array(
|
|||||||
'%d in total' => '%d w sumie',
|
'%d in total' => '%d w sumie',
|
||||||
'Analyze' => 'Analizuj',
|
'Analyze' => 'Analizuj',
|
||||||
'Optimize' => 'Optymalizuj',
|
'Optimize' => 'Optymalizuj',
|
||||||
'Vacuum' => 'Wyczyść',
|
|
||||||
'Check' => 'Sprawdź',
|
'Check' => 'Sprawdź',
|
||||||
'Repair' => 'Napraw',
|
'Repair' => 'Napraw',
|
||||||
'Truncate' => 'Opróżnij',
|
'Truncate' => 'Opróżnij',
|
||||||
@@ -149,6 +144,7 @@ $translations = array(
|
|||||||
'No tables.' => 'Brak tabel.',
|
'No tables.' => 'Brak tabel.',
|
||||||
'Alter table' => 'Zmień tabelę',
|
'Alter table' => 'Zmień tabelę',
|
||||||
'Create table' => 'Utwórz tabelę',
|
'Create table' => 'Utwórz tabelę',
|
||||||
|
'Create new table' => 'Utwórz nową tabelę',
|
||||||
'Table has been dropped.' => 'Tabela została usunięta.',
|
'Table has been dropped.' => 'Tabela została usunięta.',
|
||||||
'Tables have been dropped.' => 'Tabele zostały usunięte.',
|
'Tables have been dropped.' => 'Tabele zostały usunięte.',
|
||||||
'Tables have been optimized.' => 'Tabele zostały zoptymalizowane.',
|
'Tables have been optimized.' => 'Tabele zostały zoptymalizowane.',
|
||||||
@@ -167,8 +163,6 @@ $translations = array(
|
|||||||
'Default values' => 'Wartości domyślne',
|
'Default values' => 'Wartości domyślne',
|
||||||
'Drop' => 'Usuń',
|
'Drop' => 'Usuń',
|
||||||
'Are you sure?' => 'Czy jesteś pewien?',
|
'Are you sure?' => 'Czy jesteś pewien?',
|
||||||
'Size' => 'Wielkość',
|
|
||||||
'Compute' => 'Oblicz',
|
|
||||||
'Move up' => 'Przesuń w górę',
|
'Move up' => 'Przesuń w górę',
|
||||||
'Move down' => 'Przesuń w dół',
|
'Move down' => 'Przesuń w dół',
|
||||||
'Remove' => 'Usuń',
|
'Remove' => 'Usuń',
|
||||||
@@ -246,10 +240,8 @@ $translations = array(
|
|||||||
|
|
||||||
'Import' => 'Import',
|
'Import' => 'Import',
|
||||||
'%d row(s) have been imported.' => array('%d rekord został zaimportowany.', '%d rekordy zostały zaimportowane.', '%d rekordów zostało zaimportowanych.'),
|
'%d row(s) have been imported.' => array('%d rekord został zaimportowany.', '%d rekordy zostały zaimportowane.', '%d rekordów zostało zaimportowanych.'),
|
||||||
'File must be in UTF-8 encoding.' => 'Kodowanie pliku musi być ustawione na UTF-8.',
|
|
||||||
|
|
||||||
// in-place editing in select
|
// in-place editing in select
|
||||||
'Modify' => 'Zmień',
|
|
||||||
'Ctrl+click on a value to modify it.' => 'Ctrl+kliknij wartość, aby ją edytować.',
|
'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ść.',
|
'Use edit link to modify this value.' => 'Użyj linku edycji aby zmienić tę wartość.',
|
||||||
|
|
||||||
@@ -266,10 +258,8 @@ $translations = array(
|
|||||||
'Edit' => 'Edytuj',
|
'Edit' => 'Edytuj',
|
||||||
'Insert' => 'Dodaj',
|
'Insert' => 'Dodaj',
|
||||||
'Save' => 'Zapisz zmiany',
|
'Save' => 'Zapisz zmiany',
|
||||||
'Saving' => 'Zapisywanie',
|
|
||||||
'Save and continue edit' => 'Zapisz i kontynuuj edycję',
|
'Save and continue edit' => 'Zapisz i kontynuuj edycję',
|
||||||
'Save and insert next' => 'Zapisz i dodaj następny',
|
'Save and insert next' => 'Zapisz i dodaj następny',
|
||||||
'Selected' => 'Zaznaczone',
|
|
||||||
'Clone' => 'Duplikuj',
|
'Clone' => 'Duplikuj',
|
||||||
'Delete' => 'Usuń',
|
'Delete' => 'Usuń',
|
||||||
'You have no privileges to update this table.' => 'Brak uprawnień do edycji tej tabeli',
|
'You have no privileges to update this table.' => 'Brak uprawnień do edycji tej tabeli',
|
||||||
@@ -312,6 +302,7 @@ $translations = array(
|
|||||||
'Schema has been dropped.' => 'Schemat został usunięty.',
|
'Schema has been dropped.' => 'Schemat został usunięty.',
|
||||||
'Schema has been created.' => 'Schemat został utworzony.',
|
'Schema has been created.' => 'Schemat został utworzony.',
|
||||||
'Schema has been altered.' => 'Schemat został zmieniony.',
|
'Schema has been altered.' => 'Schemat został zmieniony.',
|
||||||
|
'schema' => 'schemat',
|
||||||
'Schema' => 'Schemat',
|
'Schema' => 'Schemat',
|
||||||
'Invalid schema.' => 'Nieprawidłowy schemat.',
|
'Invalid schema.' => 'Nieprawidłowy schemat.',
|
||||||
|
|
||||||
|
|||||||
@@ -1,265 +0,0 @@
|
|||||||
<?php
|
|
||||||
$translations = array(
|
|
||||||
'Login' => 'Entrar',
|
|
||||||
'Logout successful.' => 'Saída bem sucedida.',
|
|
||||||
'Invalid credentials.' => 'Identificação inválida.',
|
|
||||||
'Server' => 'Servidor',
|
|
||||||
'Username' => 'Usuário',
|
|
||||||
'Password' => 'Senha',
|
|
||||||
'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.' => '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',
|
|
||||||
'collation' => 'collation',
|
|
||||||
'Column name' => 'Nome da coluna',
|
|
||||||
'Type' => 'Tipo',
|
|
||||||
'Length' => 'Tamanho',
|
|
||||||
'Auto Increment' => 'Incremento Automático',
|
|
||||||
'Options' => 'Opções',
|
|
||||||
'Save' => 'Salvar',
|
|
||||||
'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',
|
|
||||||
'Logout' => 'Sair',
|
|
||||||
'database' => 'base de dados',
|
|
||||||
'Use' => 'Usar',
|
|
||||||
'No tables.' => 'Não existem tabelas.',
|
|
||||||
'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' => 'Deletar',
|
|
||||||
'Database' => 'Base de dados',
|
|
||||||
'Routines' => 'Rotinas',
|
|
||||||
'Indexes have been altered.' => 'Os Índices foram alterados.',
|
|
||||||
'Indexes' => 'Índices',
|
|
||||||
'Alter indexes' => 'Alterar índices',
|
|
||||||
'Add next' => 'Adicionar proximo',
|
|
||||||
'Language' => 'Idioma',
|
|
||||||
'Select' => 'Selecionar',
|
|
||||||
'New item' => 'Novo Registro',
|
|
||||||
'Search' => 'Procurar',
|
|
||||||
'Sort' => 'Ordenar',
|
|
||||||
'descending' => 'decrescente',
|
|
||||||
'Limit' => 'Limite',
|
|
||||||
'No rows.' => 'Não existem registros.',
|
|
||||||
'Action' => 'Ação',
|
|
||||||
'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 estrangeiras',
|
|
||||||
'Triggers' => 'Triggers',
|
|
||||||
'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 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('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.' => '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.' => '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' => '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.' => '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 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.' => '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.' => '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?' => 'Você tem certeza?',
|
|
||||||
'Privileges' => 'Privilégios',
|
|
||||||
'Create user' => 'Criar Usuário',
|
|
||||||
'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',
|
|
||||||
'Grant' => 'Conceder',
|
|
||||||
'Revoke' => 'Impedir',
|
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST data demasiado grande. Reduza o tamanho ou aumente a diretiva de configuração %s.',
|
|
||||||
'Logged as: %s' => 'Logado como: %s',
|
|
||||||
'Move up' => 'Mover acima',
|
|
||||||
'Move down' => 'Mover abaixo',
|
|
||||||
'Functions' => 'Funções',
|
|
||||||
'Aggregation' => 'Adições',
|
|
||||||
'Export' => 'Exportar',
|
|
||||||
'Output' => 'Saída',
|
|
||||||
'open' => 'abrir',
|
|
||||||
'save' => 'salvar',
|
|
||||||
'Format' => 'Formato',
|
|
||||||
'Tables' => 'Tabelas',
|
|
||||||
'Data' => 'Dados',
|
|
||||||
'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',
|
|
||||||
'Every' => 'Cada',
|
|
||||||
'Events' => 'Eventos',
|
|
||||||
'Schedule' => 'Agenda',
|
|
||||||
'Start' => 'Início',
|
|
||||||
'End' => 'Fim',
|
|
||||||
'Status' => 'Estado',
|
|
||||||
'On completion preserve' => 'Ao completar preservar',
|
|
||||||
'Tables and views' => 'Tabelas e Visões',
|
|
||||||
'Data Length' => 'Tamanho de dados',
|
|
||||||
'Index Length' => 'Tamanho de índice',
|
|
||||||
'Data Free' => 'Espaço Livre',
|
|
||||||
'Collation' => 'Colação',
|
|
||||||
'Analyze' => 'Analizar',
|
|
||||||
'Optimize' => 'Otimizar',
|
|
||||||
'Check' => 'Verificar',
|
|
||||||
'Repair' => 'Reparar',
|
|
||||||
'Truncate' => 'Truncar',
|
|
||||||
'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 para outra Base de dados',
|
|
||||||
'Move' => 'Mover',
|
|
||||||
'Engine' => 'Motor',
|
|
||||||
'Save and continue edit' => 'Salvar e continuar editando',
|
|
||||||
'original' => 'original',
|
|
||||||
'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.',
|
|
||||||
'Partition by' => 'Particionar por',
|
|
||||||
'Partitions' => 'Partições',
|
|
||||||
'Partition name' => 'Nome da Partição',
|
|
||||||
'Values' => 'Valores',
|
|
||||||
'%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',
|
|
||||||
'%.3f s' => '%.3f s',
|
|
||||||
'$1-$3-$5' => '$5/$3/$1',
|
|
||||||
'[yyyy]-mm-dd' => 'dd/mm/[aaaa]',
|
|
||||||
'History' => 'Histórico',
|
|
||||||
'Variables' => 'Variáveis',
|
|
||||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'As colunas de origen e destino devem ser do mesmo tipo, deve existir um índice entre as colunas de destino e o registro referenciado deve existir.',
|
|
||||||
'Relations' => 'Relações',
|
|
||||||
'Run file' => 'Executar Arquivo',
|
|
||||||
'Clear' => 'Limpar',
|
|
||||||
'Maximum allowed file size is %sB.' => 'Tamanho máximo do arquivo permitido é %sB.',
|
|
||||||
'Numbers' => 'Números',
|
|
||||||
'Date and time' => 'Data e hora',
|
|
||||||
'Strings' => 'Cadena',
|
|
||||||
'Binary' => 'Binário',
|
|
||||||
'Lists' => 'Listas',
|
|
||||||
'Editor' => 'Editor',
|
|
||||||
'E-mail' => 'E-mail',
|
|
||||||
'From' => 'De',
|
|
||||||
'Subject' => 'Assunto',
|
|
||||||
'Send' => 'Enviar',
|
|
||||||
'%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' => 'Login permanente',
|
|
||||||
'Databases have been dropped.' => 'A Base de dados foi apagada.',
|
|
||||||
'Search data in tables' => 'Buscar dados nas Tabelas',
|
|
||||||
'Schema' => 'Esquema',
|
|
||||||
'Alter schema' => 'Alterar esquema',
|
|
||||||
'Create schema' => 'Criar esquema',
|
|
||||||
'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ê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' => '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' => 'A partir do servidor',
|
|
||||||
'System' => 'Sistema',
|
|
||||||
'Select data' => 'Selecionar dados',
|
|
||||||
'Show structure' => 'Mostrar estrutura',
|
|
||||||
'empty' => 'vazio',
|
|
||||||
'Network' => 'Rede',
|
|
||||||
'Geometry' => 'Geometria',
|
|
||||||
'File exists.' => 'Arquivo já existe.',
|
|
||||||
'Attachments' => 'Anexos',
|
|
||||||
'%d query(s) executed OK.' => array('%d consulta sql executada corretamente.', '%d consultas sql executadas corretamente.'),
|
|
||||||
'Show only errors' => 'Mostrar somente erros',
|
|
||||||
'Refresh' => 'Atualizar',
|
|
||||||
'Invalid schema.' => 'Esquema inválido.',
|
|
||||||
'Please use one of the extensions %s.' => 'Por favor use uma das extensões %s.',
|
|
||||||
'now' => 'agora',
|
|
||||||
'ltr' => 'ltr',
|
|
||||||
);
|
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
<?php
|
<?php
|
||||||
$translations = array(
|
$translations = array(
|
||||||
'Login' => 'Entrar',
|
'Login' => 'Entrar',
|
||||||
'Logout successful.' => 'Sessão terminada com sucesso.',
|
'Logout successful.' => 'Saida bem sucedida.',
|
||||||
'Invalid credentials.' => 'Identificação inválida.',
|
'Invalid credentials.' => 'Identificação inválida.',
|
||||||
'Server' => 'Servidor',
|
'Server' => 'Servidor',
|
||||||
'Username' => 'Nome de utilizador',
|
'Username' => 'Usuário',
|
||||||
'Password' => 'Senha',
|
'Password' => 'Senha',
|
||||||
'Select database' => 'Selecionar Base de dados',
|
'Select database' => 'Selecionar Base de dados',
|
||||||
'Invalid database.' => 'Base de dados inválida.',
|
'Invalid database.' => 'Base de dados inválida.',
|
||||||
@@ -22,7 +22,7 @@ $translations = array(
|
|||||||
'Length' => 'Tamanho',
|
'Length' => 'Tamanho',
|
||||||
'Auto Increment' => 'Incremento Automático',
|
'Auto Increment' => 'Incremento Automático',
|
||||||
'Options' => 'Opções',
|
'Options' => 'Opções',
|
||||||
'Save' => 'Guardar',
|
'Save' => 'Salvar',
|
||||||
'Drop' => 'Remover',
|
'Drop' => 'Remover',
|
||||||
'Database has been dropped.' => 'Base de dados eliminada.',
|
'Database has been dropped.' => 'Base de dados eliminada.',
|
||||||
'Database has been created.' => 'Base de dados criada.',
|
'Database has been created.' => 'Base de dados criada.',
|
||||||
@@ -32,40 +32,41 @@ $translations = array(
|
|||||||
'Create database' => 'Criar Base de dados',
|
'Create database' => 'Criar Base de dados',
|
||||||
'SQL command' => 'Comando SQL',
|
'SQL command' => 'Comando SQL',
|
||||||
'Dump' => 'Exportar',
|
'Dump' => 'Exportar',
|
||||||
'Logout' => 'Terminar sessão',
|
'Logout' => 'Sair',
|
||||||
'database' => 'base de dados',
|
'database' => 'base de dados',
|
||||||
'Use' => 'Usar',
|
'Use' => 'Usar',
|
||||||
'No tables.' => 'Não existem tabelas.',
|
'No tables.' => 'Não existem tabelas.',
|
||||||
'select' => 'registos',
|
'select' => 'registros',
|
||||||
'Item has been deleted.' => 'Registo eliminado.',
|
'Create new table' => 'Nova tabela',
|
||||||
'Item has been updated.' => 'Registo modificado.',
|
'Item has been deleted.' => 'Registro eliminado.',
|
||||||
'Item%s has been inserted.' => 'Registo%s inserido.',
|
'Item has been updated.' => 'Registro modificado.',
|
||||||
|
'Item%s has been inserted.' => 'Registro%s inserido.',
|
||||||
'Edit' => 'Modificar',
|
'Edit' => 'Modificar',
|
||||||
'Insert' => 'Inserir',
|
'Insert' => 'Inserir',
|
||||||
'Save and insert next' => 'Guardar e inserir outro',
|
'Save and insert next' => 'Salvar e inserir outro',
|
||||||
'Delete' => 'Eliminar',
|
'Delete' => 'Apagar',
|
||||||
'Database' => 'Base de dados',
|
'Database' => 'Base de dados',
|
||||||
'Routines' => 'Procedimentos',
|
'Routines' => 'Procedimentos',
|
||||||
'Indexes have been altered.' => 'Índices modificados.',
|
'Indexes have been altered.' => 'Índices modificados.',
|
||||||
'Indexes' => 'Índices',
|
'Indexes' => 'Índices',
|
||||||
'Alter indexes' => 'Modificar índices',
|
'Alter indexes' => 'Modificar índices',
|
||||||
'Add next' => 'Adicionar próximo',
|
'Add next' => 'Adicionar proximo',
|
||||||
'Language' => 'Idioma',
|
'Language' => 'Idioma',
|
||||||
'Select' => 'Selecionar',
|
'Select' => 'Selecionar',
|
||||||
'New item' => 'Novo Registo',
|
'New item' => 'Novo Registro',
|
||||||
'Search' => 'Procurar',
|
'Search' => 'Procurar',
|
||||||
'Sort' => 'Ordenar',
|
'Sort' => 'Ordenar',
|
||||||
'descending' => 'decrescente',
|
'descending' => 'decrescente',
|
||||||
'Limit' => 'Limite',
|
'Limit' => 'Limite',
|
||||||
'No rows.' => 'Não existem registos.',
|
'No rows.' => 'Não existem registros.',
|
||||||
'Action' => 'Ação',
|
'Action' => 'Ação',
|
||||||
'edit' => 'modificar',
|
'edit' => 'modificar',
|
||||||
'Page' => 'Página',
|
'Page' => 'Página',
|
||||||
'Query executed OK, %d row(s) affected.' => array('Consulta executada, %d registo afetado.', 'Consulta executada, %d registos afetados.'),
|
'Query executed OK, %d row(s) affected.' => array('Consulta executada, %d registro afetado.', 'Consulta executada, %d registros afetados.'),
|
||||||
'Error in query' => 'Erro na consulta',
|
'Error in query' => 'Erro na consulta',
|
||||||
'Execute' => 'Executar',
|
'Execute' => 'Executar',
|
||||||
'Table' => 'Tabela',
|
'Table' => 'Tabela',
|
||||||
'Foreign keys' => 'Chaves estrangeiras',
|
'Foreign keys' => 'Chaves foráneas',
|
||||||
'Triggers' => 'Triggers',
|
'Triggers' => 'Triggers',
|
||||||
'View' => 'Visualizar',
|
'View' => 'Visualizar',
|
||||||
'Unable to select the table' => 'Não é possivel selecionar a Tabela',
|
'Unable to select the table' => 'Não é possivel selecionar a Tabela',
|
||||||
@@ -74,27 +75,27 @@ $translations = array(
|
|||||||
'Default values' => 'Valores predeterminados',
|
'Default values' => 'Valores predeterminados',
|
||||||
'%d byte(s)' => array('%d byte', '%d bytes'),
|
'%d byte(s)' => array('%d byte', '%d bytes'),
|
||||||
'No commands to execute.' => 'Nenhum comando para executar.',
|
'No commands to execute.' => 'Nenhum comando para executar.',
|
||||||
'Unable to upload a file.' => 'Não é possível enviar o ficheiro.',
|
'Unable to upload a file.' => 'Não é possível enviar o arquivo.',
|
||||||
'File upload' => 'Importar ficheiro',
|
'File upload' => 'Importar arquivo',
|
||||||
'File uploads are disabled.' => 'Importação de ficheiros desativada.',
|
'File uploads are disabled.' => 'Importação de arquivos desablilitada.',
|
||||||
'Routine has been called, %d row(s) affected.' => array('Consulta executada, %d registo afetado.', 'Consulta executada, %d registos afetados.'),
|
'Routine has been called, %d row(s) affected.' => array('Consulta executada, %d registro afetado.', 'Consulta executada, %d registros afetados.'),
|
||||||
'Call' => 'Chamar',
|
'Call' => 'Chamar',
|
||||||
'No extension' => 'Não há extensão',
|
'No extension' => 'Não há extension',
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'Nenhuma das extensões PHP suportadas (%s) está disponivel.',
|
'None of the supported PHP extensions (%s) are available.' => 'Nenhuma das extensões PHP suportadas (%s) está disponivel.',
|
||||||
'Session support must be enabled.' => 'As sessões devem estar ativas.',
|
'Session support must be enabled.' => 'Devem estar habilitadas as sessões.',
|
||||||
'Session expired, please login again.' => 'Sessão expirada, por favor entre de novo.',
|
'Session expired, please login again.' => 'Sessão expirada, por favor entre sua Chave de novo.',
|
||||||
'Text length' => 'Tamanho do texto',
|
'Text length' => 'Tamanho de texto',
|
||||||
'Foreign key has been dropped.' => 'Chave estrangeira eliminada.',
|
'Foreign key has been dropped.' => 'Chave externa eliminada.',
|
||||||
'Foreign key has been altered.' => 'Chave estrangeira modificada.',
|
'Foreign key has been altered.' => 'Chave externa modificada.',
|
||||||
'Foreign key has been created.' => 'Chave estrangeira criada.',
|
'Foreign key has been created.' => 'Chave externa criada.',
|
||||||
'Foreign key' => 'Chave estrangeira',
|
'Foreign key' => 'Chave externa',
|
||||||
'Target table' => 'Tabela de destino',
|
'Target table' => 'Tabela de destino',
|
||||||
'Change' => 'Modificar',
|
'Change' => 'Modificar',
|
||||||
'Source' => 'Origem',
|
'Source' => 'Origem',
|
||||||
'Target' => 'Destino',
|
'Target' => 'Destino',
|
||||||
'Add column' => 'Adicionar coluna',
|
'Add column' => 'Adicionar coluna',
|
||||||
'Alter' => 'Modificar',
|
'Alter' => 'Modificar',
|
||||||
'Add foreign key' => 'Adicionar Chave estrangeira',
|
'Add foreign key' => 'Adicionar Chave foránea',
|
||||||
'ON DELETE' => 'ON DELETE',
|
'ON DELETE' => 'ON DELETE',
|
||||||
'ON UPDATE' => 'ON UPDATE',
|
'ON UPDATE' => 'ON UPDATE',
|
||||||
'Index Type' => 'Tipo de índice',
|
'Index Type' => 'Tipo de índice',
|
||||||
@@ -117,7 +118,7 @@ $translations = array(
|
|||||||
'Routine has been created.' => 'Procedimento criado.',
|
'Routine has been created.' => 'Procedimento criado.',
|
||||||
'Alter function' => 'Modificar Função',
|
'Alter function' => 'Modificar Função',
|
||||||
'Alter procedure' => 'Modificar procedimento',
|
'Alter procedure' => 'Modificar procedimento',
|
||||||
'Return type' => 'Tipo de valor de regresso',
|
'Return type' => 'Tipo de valor de regreso',
|
||||||
'Add trigger' => 'Adicionar trigger',
|
'Add trigger' => 'Adicionar trigger',
|
||||||
'Trigger has been dropped.' => 'Trigger eliminado.',
|
'Trigger has been dropped.' => 'Trigger eliminado.',
|
||||||
'Trigger has been altered.' => 'Trigger modificado.',
|
'Trigger has been altered.' => 'Trigger modificado.',
|
||||||
@@ -127,29 +128,29 @@ $translations = array(
|
|||||||
'Time' => 'Tempo',
|
'Time' => 'Tempo',
|
||||||
'Event' => 'Evento',
|
'Event' => 'Evento',
|
||||||
'%s version: %s through PHP extension %s' => 'Versão %s: %s através da extensão PHP %s',
|
'%s version: %s through PHP extension %s' => 'Versão %s: %s através da extensão PHP %s',
|
||||||
'%d row(s)' => array('%d registo', '%d registos'),
|
'%d row(s)' => array('%d registro', '%d registros'),
|
||||||
'Remove' => 'Remover',
|
'Remove' => 'Remover',
|
||||||
'Are you sure?' => 'Tem a certeza?',
|
'Are you sure?' => 'Está seguro?',
|
||||||
'Privileges' => 'Privilégios',
|
'Privileges' => 'Privilégios',
|
||||||
'Create user' => 'Criar utilizador',
|
'Create user' => 'Criar Usuário',
|
||||||
'User has been dropped.' => 'Utilizador eliminado.',
|
'User has been dropped.' => 'Usuário eliminado.',
|
||||||
'User has been altered.' => 'Utilizador modificado.',
|
'User has been altered.' => 'Usuário modificado.',
|
||||||
'User has been created.' => 'Utilizador criado.',
|
'User has been created.' => 'Usuário criado.',
|
||||||
'Hashed' => 'Hash',
|
'Hashed' => 'Hash',
|
||||||
'Column' => 'Coluna',
|
'Column' => 'Coluna',
|
||||||
'Routine' => 'Rotina',
|
'Routine' => 'Rotina',
|
||||||
'Grant' => 'Conceder',
|
'Grant' => 'Conceder',
|
||||||
'Revoke' => 'Impedir',
|
'Revoke' => 'Impedir',
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST data demasiado grande. Reduza o tamanho ou aumente a diretiva de configuração %s.',
|
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST data demasiado grande. Reduza o tamanho ou aumente a diretiva de configuração %s.',
|
||||||
'Logged as: %s' => 'Ligado como: %s',
|
'Logged as: %s' => 'Logado como: %s',
|
||||||
'Move up' => 'Mover para cima',
|
'Move up' => 'Mover acima',
|
||||||
'Move down' => 'Mover para baixo',
|
'Move down' => 'Mover abaixo',
|
||||||
'Functions' => 'Funções',
|
'Functions' => 'Funções',
|
||||||
'Aggregation' => 'Adições',
|
'Aggregation' => 'Adições',
|
||||||
'Export' => 'Exportar',
|
'Export' => 'Exportar',
|
||||||
'Output' => 'Saída',
|
'Output' => 'Saída',
|
||||||
'open' => 'abrir',
|
'open' => 'mostrar',
|
||||||
'save' => 'guardar',
|
'save' => 'salvas',
|
||||||
'Format' => 'Formato',
|
'Format' => 'Formato',
|
||||||
'Tables' => 'Tabelas',
|
'Tables' => 'Tabelas',
|
||||||
'Data' => 'Dados',
|
'Data' => 'Dados',
|
||||||
@@ -158,14 +159,14 @@ $translations = array(
|
|||||||
'Event has been created.' => 'Evento criado.',
|
'Event has been created.' => 'Evento criado.',
|
||||||
'Alter event' => 'Modificar Evento',
|
'Alter event' => 'Modificar Evento',
|
||||||
'Create event' => 'Criar Evento',
|
'Create event' => 'Criar Evento',
|
||||||
'At given time' => 'À hora determinada',
|
'At given time' => 'A hora determinada',
|
||||||
'Every' => 'Cada',
|
'Every' => 'Cada',
|
||||||
'Events' => 'Eventos',
|
'Events' => 'Eventos',
|
||||||
'Schedule' => 'Agenda',
|
'Schedule' => 'Agenda',
|
||||||
'Start' => 'Início',
|
'Start' => 'Início',
|
||||||
'End' => 'Fim',
|
'End' => 'Fim',
|
||||||
'Status' => 'Estado',
|
'Status' => 'Estado',
|
||||||
'On completion preserve' => 'Preservar ao completar',
|
'On completion preserve' => 'Ao completar preservar',
|
||||||
'Tables and views' => 'Tabelas e vistas',
|
'Tables and views' => 'Tabelas e vistas',
|
||||||
'Data Length' => 'Tamanho de dados',
|
'Data Length' => 'Tamanho de dados',
|
||||||
'Index Length' => 'Tamanho de índice',
|
'Index Length' => 'Tamanho de índice',
|
||||||
@@ -177,16 +178,15 @@ $translations = array(
|
|||||||
'Repair' => 'Reparar',
|
'Repair' => 'Reparar',
|
||||||
'Truncate' => 'Truncar',
|
'Truncate' => 'Truncar',
|
||||||
'Tables have been truncated.' => 'Tabelas truncadas (truncate).',
|
'Tables have been truncated.' => 'Tabelas truncadas (truncate).',
|
||||||
'Rows' => 'Registos',
|
'Rows' => 'Registros',
|
||||||
',' => ' ',
|
',' => ' ',
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Tables have been moved.' => 'As Tabelas foram movidas.',
|
'Tables have been moved.' => 'As Tabelas foram movidas.',
|
||||||
'Move to other database' => 'Mover outra Base de dados',
|
'Move to other database' => 'Mover outra Base de dados',
|
||||||
'Move' => 'Mover',
|
'Move' => 'Mover',
|
||||||
'Engine' => 'Motor',
|
'Engine' => 'Motor',
|
||||||
'Save and continue edit' => 'Guardar e continuar a edição',
|
'Save and continue edit' => 'Salvar e continuar editando',
|
||||||
'original' => 'original',
|
'original' => 'original',
|
||||||
'Tables have been dropped.' => 'As tabelas foram eliminadas.',
|
'Tables have been dropped.' => 'Tabelas eliminadas.',
|
||||||
'%d item(s) have been affected.' => array('%d item afetado.', '%d itens afetados.'),
|
'%d item(s) have been affected.' => array('%d item afetado.', '%d itens afetados.'),
|
||||||
'whole result' => 'resultado completo',
|
'whole result' => 'resultado completo',
|
||||||
'Clone' => 'Clonar',
|
'Clone' => 'Clonar',
|
||||||
@@ -195,7 +195,7 @@ $translations = array(
|
|||||||
'Partitions' => 'Partições',
|
'Partitions' => 'Partições',
|
||||||
'Partition name' => 'Nome da Partição',
|
'Partition name' => 'Nome da Partição',
|
||||||
'Values' => 'Valores',
|
'Values' => 'Valores',
|
||||||
'%d row(s) have been imported.' => array('%d registo importado.', '%d registos importados.'),
|
'%d row(s) have been imported.' => array('%d registro importado.', '%d registros importados.'),
|
||||||
'anywhere' => 'qualquer local',
|
'anywhere' => 'qualquer local',
|
||||||
'Import' => 'Importar',
|
'Import' => 'Importar',
|
||||||
'Stop on error' => 'Parar em caso de erro',
|
'Stop on error' => 'Parar em caso de erro',
|
||||||
@@ -204,14 +204,14 @@ $translations = array(
|
|||||||
'[yyyy]-mm-dd' => 'dd/mm/[aaaa]',
|
'[yyyy]-mm-dd' => 'dd/mm/[aaaa]',
|
||||||
'History' => 'Histórico',
|
'History' => 'Histórico',
|
||||||
'Variables' => 'Variáveis',
|
'Variables' => 'Variáveis',
|
||||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'As colunas de origen e destino devem ser do mesmo tipo, deve existir um índice entre as colunas de destino e o registo referenciado deve existir.',
|
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'As colunas de origen e destino devem ser do mesmo tipo, deve existir um índice entre as colunas de destino e o registro referenciado deve existir.',
|
||||||
'Relations' => 'Relações',
|
'Relations' => 'Relações',
|
||||||
'Run file' => 'Executar ficheiro',
|
'Run file' => 'Executar Arquivo',
|
||||||
'Clear' => 'Limpar',
|
'Clear' => 'Limpar',
|
||||||
'Maximum allowed file size is %sB.' => 'Tamanho máximo do ficheiro é %sB.',
|
'Maximum allowed file size is %sB.' => 'Tamanho máximo do arquivo é %sB.',
|
||||||
'Numbers' => 'Números',
|
'Numbers' => 'Números',
|
||||||
'Date and time' => 'Data e hora',
|
'Date and time' => 'Data e hora',
|
||||||
'Strings' => 'Cadeia',
|
'Strings' => 'Cadena',
|
||||||
'Binary' => 'Binário',
|
'Binary' => 'Binário',
|
||||||
'Lists' => 'Listas',
|
'Lists' => 'Listas',
|
||||||
'Editor' => 'Editor',
|
'Editor' => 'Editor',
|
||||||
@@ -220,12 +220,13 @@ $translations = array(
|
|||||||
'Subject' => 'Assunto',
|
'Subject' => 'Assunto',
|
||||||
'Send' => 'Enviar',
|
'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 enviado.', '%d emails enviados.'),
|
||||||
'Webserver file %s' => 'Ficheiro do servidor web %s',
|
'Webserver file %s' => 'Arquivo do servidor web %s',
|
||||||
'File does not exist.' => 'Ficheiro não existe.',
|
'File does not exist.' => 'Arquivo não existe.',
|
||||||
'%d in total' => '%d no total',
|
'%d in total' => '%d no total',
|
||||||
'Permanent login' => 'Memorizar a senha',
|
'Permanent login' => 'Salvar Senha',
|
||||||
'Databases have been dropped.' => 'Bases de dados eliminadas.',
|
'Databases have been dropped.' => 'Bases de dados eliminadas.',
|
||||||
'Search data in tables' => 'Pesquisar dados nas Tabelas',
|
'Search data in tables' => 'Buscar dados nas Tabelas',
|
||||||
|
'schema' => 'esquema',
|
||||||
'Schema' => 'Esquema',
|
'Schema' => 'Esquema',
|
||||||
'Alter schema' => 'Modificar esquema',
|
'Alter schema' => 'Modificar esquema',
|
||||||
'Create schema' => 'Criar esquema',
|
'Create schema' => 'Criar esquema',
|
||||||
@@ -238,7 +239,7 @@ $translations = array(
|
|||||||
'Sequence has been dropped.' => 'Sequência eliminada.',
|
'Sequence has been dropped.' => 'Sequência eliminada.',
|
||||||
'Sequence has been created.' => 'Sequência criada.',
|
'Sequence has been created.' => 'Sequência criada.',
|
||||||
'Sequence has been altered.' => 'Sequência modificada.',
|
'Sequence has been altered.' => 'Sequência modificada.',
|
||||||
'User types' => 'Tipos definidos pelo utilizador',
|
'User types' => 'Tipos definido pelo usuário',
|
||||||
'Create type' => 'Criar tipo',
|
'Create type' => 'Criar tipo',
|
||||||
'Alter type' => 'Modificar tipo',
|
'Alter type' => 'Modificar tipo',
|
||||||
'Type has been dropped.' => 'Tipo eliminado.',
|
'Type has been dropped.' => 'Tipo eliminado.',
|
||||||
@@ -246,14 +247,14 @@ $translations = array(
|
|||||||
'Ctrl+click on a value to modify it.' => 'Ctrl+clique vezes sobre o valor para edita-lo.',
|
'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.',
|
'Use edit link to modify this value.' => 'Utilize o link modificar para alterar.',
|
||||||
'last' => 'último',
|
'last' => 'último',
|
||||||
'From server' => 'Do servidor',
|
'From server' => 'Desde servidor',
|
||||||
'System' => 'Motor de Base de dados',
|
'System' => 'Motor de Base de dados',
|
||||||
'Select data' => 'Selecionar dados',
|
'Select data' => 'Selecionar dados',
|
||||||
'Show structure' => 'Mostrar estrutura',
|
'Show structure' => 'Mostrar estrutura',
|
||||||
'empty' => 'vazio',
|
'empty' => 'vazio',
|
||||||
'Network' => 'Rede',
|
'Network' => 'Rede',
|
||||||
'Geometry' => 'Geometria',
|
'Geometry' => 'Geometria',
|
||||||
'File exists.' => 'Ficheiro já existe.',
|
'File exists.' => 'Arquivo já existe.',
|
||||||
'Attachments' => 'Anexos',
|
'Attachments' => 'Anexos',
|
||||||
'%d query(s) executed OK.' => array('%d consulta sql executada corretamente.', '%d consultas sql executadas corretamente.'),
|
'%d query(s) executed OK.' => array('%d consulta sql executada corretamente.', '%d consultas sql executadas corretamente.'),
|
||||||
'Show only errors' => 'Mostrar somente erros',
|
'Show only errors' => 'Mostrar somente erros',
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ $translations = array(
|
|||||||
'Use' => 'Alege',
|
'Use' => 'Alege',
|
||||||
'No tables.' => 'În baza de date nu sunt tabele.',
|
'No tables.' => 'În baza de date nu sunt tabele.',
|
||||||
'select' => 'selectează',
|
'select' => 'selectează',
|
||||||
|
'Create new table' => 'Crează tabel nou',
|
||||||
'Item has been deleted.' => 'Înregistrare a fost ștearsă.',
|
'Item has been deleted.' => 'Înregistrare a fost ștearsă.',
|
||||||
'Item has been updated.' => 'Înregistrare a fost înnoită.',
|
'Item has been updated.' => 'Înregistrare a fost înnoită.',
|
||||||
'Item%s has been inserted.' => 'Înregistrarea%s a fost inserată.',
|
'Item%s has been inserted.' => 'Înregistrarea%s a fost inserată.',
|
||||||
@@ -179,7 +180,6 @@ $translations = array(
|
|||||||
'Tables have been truncated.' => 'Tabelele au fost curățate.',
|
'Tables have been truncated.' => 'Tabelele au fost curățate.',
|
||||||
'Rows' => 'Înscrieri',
|
'Rows' => 'Înscrieri',
|
||||||
',' => ',',
|
',' => ',',
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Tables have been moved.' => 'Tabelele au fost mutate.',
|
'Tables have been moved.' => 'Tabelele au fost mutate.',
|
||||||
'Move to other database' => 'Mută în altă bază de date',
|
'Move to other database' => 'Mută în altă bază de date',
|
||||||
'Move' => 'Mută',
|
'Move' => 'Mută',
|
||||||
@@ -226,6 +226,7 @@ $translations = array(
|
|||||||
'Permanent login' => 'Logare permanentă',
|
'Permanent login' => 'Logare permanentă',
|
||||||
'Databases have been dropped.' => 'Baze de date au fost șterse.',
|
'Databases have been dropped.' => 'Baze de date au fost șterse.',
|
||||||
'Search data in tables' => 'Caută în tabele',
|
'Search data in tables' => 'Caută în tabele',
|
||||||
|
'schema' => 'schema',
|
||||||
'Schema' => 'Schema',
|
'Schema' => 'Schema',
|
||||||
'Alter schema' => 'Modifică schema',
|
'Alter schema' => 'Modifică schema',
|
||||||
'Create schema' => 'Crează o schemă',
|
'Create schema' => 'Crează o schemă',
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ $translations = array(
|
|||||||
'Use' => 'Выбрать',
|
'Use' => 'Выбрать',
|
||||||
'No tables.' => 'В базе данных нет таблиц.',
|
'No tables.' => 'В базе данных нет таблиц.',
|
||||||
'select' => 'выбрать',
|
'select' => 'выбрать',
|
||||||
|
'Create new table' => 'Создать новую таблицу',
|
||||||
'Item has been deleted.' => 'Запись удалена.',
|
'Item has been deleted.' => 'Запись удалена.',
|
||||||
'Item has been updated.' => 'Запись обновлена.',
|
'Item has been updated.' => 'Запись обновлена.',
|
||||||
'Item%s has been inserted.' => 'Запись%s была вставлена.',
|
'Item%s has been inserted.' => 'Запись%s была вставлена.',
|
||||||
@@ -179,9 +180,8 @@ $translations = array(
|
|||||||
'Tables have been truncated.' => 'Таблицы были очищены.',
|
'Tables have been truncated.' => 'Таблицы были очищены.',
|
||||||
'Rows' => 'Строк',
|
'Rows' => 'Строк',
|
||||||
',' => ' ',
|
',' => ' ',
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Tables have been moved.' => 'Таблицы были перемещены.',
|
'Tables have been moved.' => 'Таблицы были перемещены.',
|
||||||
'Move to other database' => 'Переместить в другую базу данных',
|
'Move to other database' => 'Переместить в другою базу данных',
|
||||||
'Move' => 'Переместить',
|
'Move' => 'Переместить',
|
||||||
'Engine' => 'Тип',
|
'Engine' => 'Тип',
|
||||||
'Save and continue edit' => 'Сохранить и продолжить редактирование',
|
'Save and continue edit' => 'Сохранить и продолжить редактирование',
|
||||||
@@ -226,6 +226,7 @@ $translations = array(
|
|||||||
'Permanent login' => 'Оставаться в системе',
|
'Permanent login' => 'Оставаться в системе',
|
||||||
'Databases have been dropped.' => 'Базы данных удалены.',
|
'Databases have been dropped.' => 'Базы данных удалены.',
|
||||||
'Search data in tables' => 'Поиск в таблицах',
|
'Search data in tables' => 'Поиск в таблицах',
|
||||||
|
'schema' => 'схема',
|
||||||
'Schema' => 'Схема',
|
'Schema' => 'Схема',
|
||||||
'Alter schema' => 'Изменить схему',
|
'Alter schema' => 'Изменить схему',
|
||||||
'Create schema' => 'Новая схема',
|
'Create schema' => 'Новая схема',
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ $translations = array(
|
|||||||
'Use' => 'Vybrať',
|
'Use' => 'Vybrať',
|
||||||
'No tables.' => 'Žiadne tabuľky.',
|
'No tables.' => 'Žiadne tabuľky.',
|
||||||
'select' => 'vypísať',
|
'select' => 'vypísať',
|
||||||
|
'Create new table' => 'Vytvoriť novú tabuľku',
|
||||||
'Item has been deleted.' => 'Položka bola vymazaná.',
|
'Item has been deleted.' => 'Položka bola vymazaná.',
|
||||||
'Item has been updated.' => 'Položka bola aktualizovaná.',
|
'Item has been updated.' => 'Položka bola aktualizovaná.',
|
||||||
'Item%s has been inserted.' => 'Položka%s bola vložená.',
|
'Item%s has been inserted.' => 'Položka%s bola vložená.',
|
||||||
@@ -180,7 +181,6 @@ $translations = array(
|
|||||||
'Data Free' => 'Voľné miesto',
|
'Data Free' => 'Voľné miesto',
|
||||||
'Rows' => 'Riadky',
|
'Rows' => 'Riadky',
|
||||||
',' => ' ',
|
',' => ' ',
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Analyze' => 'Analyzovať',
|
'Analyze' => 'Analyzovať',
|
||||||
'Optimize' => 'Optimalizovať',
|
'Optimize' => 'Optimalizovať',
|
||||||
'Check' => 'Skontrolovať',
|
'Check' => 'Skontrolovať',
|
||||||
@@ -231,6 +231,7 @@ $translations = array(
|
|||||||
'Schema has been dropped.' => 'Schéma bola odstránená.',
|
'Schema has been dropped.' => 'Schéma bola odstránená.',
|
||||||
'Schema has been created.' => 'Schéma bola vytvorená.',
|
'Schema has been created.' => 'Schéma bola vytvorená.',
|
||||||
'Schema has been altered.' => 'Schéma bola zmenená.',
|
'Schema has been altered.' => 'Schéma bola zmenená.',
|
||||||
|
'schema' => 'schéma',
|
||||||
'Schema' => 'Schéma',
|
'Schema' => 'Schéma',
|
||||||
'Sequences' => 'Sekvencia',
|
'Sequences' => 'Sekvencia',
|
||||||
'Create sequence' => 'Vytvoriť sekvenciu',
|
'Create sequence' => 'Vytvoriť sekvenciu',
|
||||||
|
|||||||
@@ -89,7 +89,6 @@ $translations = array(
|
|||||||
|
|
||||||
// thousands separator - must contain single byte
|
// thousands separator - must contain single byte
|
||||||
',' => ' ',
|
',' => ' ',
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Engine' => 'Pogon',
|
'Engine' => 'Pogon',
|
||||||
'Collation' => 'Zbiranje',
|
'Collation' => 'Zbiranje',
|
||||||
'Data Length' => 'Velikost podatkov',
|
'Data Length' => 'Velikost podatkov',
|
||||||
@@ -141,6 +140,7 @@ $translations = array(
|
|||||||
'No tables.' => 'Ni tabel.',
|
'No tables.' => 'Ni tabel.',
|
||||||
'Alter table' => 'Spremeni tabelo',
|
'Alter table' => 'Spremeni tabelo',
|
||||||
'Create table' => 'Ustvari tabelo',
|
'Create table' => 'Ustvari tabelo',
|
||||||
|
'Create new table' => 'Ustvari novo tabelo',
|
||||||
'Table has been dropped.' => 'Tabela je zavržena.',
|
'Table has been dropped.' => 'Tabela je zavržena.',
|
||||||
'Tables have been dropped.' => 'Tabele so zavržene.',
|
'Tables have been dropped.' => 'Tabele so zavržene.',
|
||||||
'Table has been altered.' => 'Tabela je spremenjena.',
|
'Table has been altered.' => 'Tabela je spremenjena.',
|
||||||
@@ -289,6 +289,7 @@ $translations = array(
|
|||||||
'Schema has been dropped.' => 'Shema je zavržena.',
|
'Schema has been dropped.' => 'Shema je zavržena.',
|
||||||
'Schema has been created.' => 'Shema je ustvarjena.',
|
'Schema has been created.' => 'Shema je ustvarjena.',
|
||||||
'Schema has been altered.' => 'Shema je spremenjena.',
|
'Schema has been altered.' => 'Shema je spremenjena.',
|
||||||
|
'schema' => 'shema',
|
||||||
'Schema' => 'Shema',
|
'Schema' => 'Shema',
|
||||||
'Invalid schema.' => 'Neveljavna shema.',
|
'Invalid schema.' => 'Neveljavna shema.',
|
||||||
|
|
||||||
|
|||||||
@@ -93,7 +93,6 @@ $translations = array(
|
|||||||
|
|
||||||
// thousands separator - must contain single byte
|
// thousands separator - must contain single byte
|
||||||
',' => ',',
|
',' => ',',
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Engine' => 'Механизам',
|
'Engine' => 'Механизам',
|
||||||
'Collation' => 'Сравњивање',
|
'Collation' => 'Сравњивање',
|
||||||
'Data Length' => 'Дужина података',
|
'Data Length' => 'Дужина података',
|
||||||
@@ -145,6 +144,7 @@ $translations = array(
|
|||||||
'No tables.' => 'Без табела.',
|
'No tables.' => 'Без табела.',
|
||||||
'Alter table' => 'Уреди табелу',
|
'Alter table' => 'Уреди табелу',
|
||||||
'Create table' => 'Направи табелу',
|
'Create table' => 'Направи табелу',
|
||||||
|
'Create new table' => 'направи нову табелу',
|
||||||
'Table has been dropped.' => 'Табела је избрисана.',
|
'Table has been dropped.' => 'Табела је избрисана.',
|
||||||
'Tables have been dropped.' => 'Табеле су избрисане.',
|
'Tables have been dropped.' => 'Табеле су избрисане.',
|
||||||
'Tables have been optimized.' => 'Табеле су оптимизоване.',
|
'Tables have been optimized.' => 'Табеле су оптимизоване.',
|
||||||
@@ -301,6 +301,7 @@ $translations = array(
|
|||||||
'Schema has been dropped.' => 'Шема је избрисана.',
|
'Schema has been dropped.' => 'Шема је избрисана.',
|
||||||
'Schema has been created.' => 'Шема је креирана.',
|
'Schema has been created.' => 'Шема је креирана.',
|
||||||
'Schema has been altered.' => 'Шема је измењена.',
|
'Schema has been altered.' => 'Шема је измењена.',
|
||||||
|
'schema' => 'шема',
|
||||||
'Schema' => 'Шема',
|
'Schema' => 'Шема',
|
||||||
'Invalid schema.' => 'Шема није исправна.',
|
'Invalid schema.' => 'Шема није исправна.',
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ $translations = array(
|
|||||||
'Use' => 'உபயோகி',
|
'Use' => 'உபயோகி',
|
||||||
'No tables.' => 'அட்டவணை இல்லை.',
|
'No tables.' => 'அட்டவணை இல்லை.',
|
||||||
'select' => 'தேர்வு செய்',
|
'select' => 'தேர்வு செய்',
|
||||||
|
'Create new table' => 'புதிய அட்டவணையை உருவாக்கு',
|
||||||
'Item has been deleted.' => 'உருப்படி நீக்கப்பட்டது.',
|
'Item has been deleted.' => 'உருப்படி நீக்கப்பட்டது.',
|
||||||
'Item has been updated.' => 'உருப்படி புதுப்பிக்கப்பட்டது.',
|
'Item has been updated.' => 'உருப்படி புதுப்பிக்கப்பட்டது.',
|
||||||
'Edit' => 'தொகு',
|
'Edit' => 'தொகு',
|
||||||
@@ -176,7 +177,6 @@ $translations = array(
|
|||||||
'Tables have been truncated.' => 'அட்டவணை குறைக்கப்பட்டது (truncated).',
|
'Tables have been truncated.' => 'அட்டவணை குறைக்கப்பட்டது (truncated).',
|
||||||
'Rows' => 'வரிசைகள்',
|
'Rows' => 'வரிசைகள்',
|
||||||
',' => ',',
|
',' => ',',
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Tables have been moved.' => 'அட்டவணை நகர்த்தப்பட்டது.',
|
'Tables have been moved.' => 'அட்டவணை நகர்த்தப்பட்டது.',
|
||||||
'Move to other database' => 'மற்ற தகவல் தளத்திற்க்கு நகர்த்து',
|
'Move to other database' => 'மற்ற தகவல் தளத்திற்க்கு நகர்த்து',
|
||||||
'Move' => 'நகர்த்து',
|
'Move' => 'நகர்த்து',
|
||||||
@@ -247,6 +247,7 @@ $translations = array(
|
|||||||
'System' => 'சிஸ்டம் (System)',
|
'System' => 'சிஸ்டம் (System)',
|
||||||
'anywhere' => 'எங்காயினும்',
|
'anywhere' => 'எங்காயினும்',
|
||||||
'empty' => 'வெறுமை (empty)',
|
'empty' => 'வெறுமை (empty)',
|
||||||
|
'schema' => 'அமைப்புமுறை',
|
||||||
'No extension' => 'விரிவு (extensஇஒன்) இல்லை ',
|
'No extension' => 'விரிவு (extensஇஒன்) இல்லை ',
|
||||||
'Databases have been dropped.' => 'தகவல் தளங்கள் நீக்கப்பட்டன.',
|
'Databases have been dropped.' => 'தகவல் தளங்கள் நீக்கப்பட்டன.',
|
||||||
'%s version: %s through PHP extension %s' => '%s பதிப்பு: %s through PHP extension %s',
|
'%s version: %s through PHP extension %s' => '%s பதிப்பு: %s through PHP extension %s',
|
||||||
|
|||||||
@@ -1,270 +0,0 @@
|
|||||||
<?php
|
|
||||||
$translations = array(
|
|
||||||
'Login' => 'เข้าสู่ระบบ',
|
|
||||||
'Logout successful.' => 'ออกจากระบบเรียบร้อยแล้ว.',
|
|
||||||
'Invalid credentials.' => 'ข้อมูลไม่ถูกต้อง.',
|
|
||||||
'Server' => 'เซอเวอร์',
|
|
||||||
'Username' => 'ชื่อผู้ใช้งาน',
|
|
||||||
'Password' => 'รหัสผ่าน',
|
|
||||||
'Select database' => 'เลือกฐานข้อมูล',
|
|
||||||
'Invalid database.' => 'ฐานข้อมูลไม่ถูกต้อง.',
|
|
||||||
'Create new database' => 'สร้างฐานข้อมูลใหม่',
|
|
||||||
'Table has been dropped.' => 'ลบตารางแล้ว.',
|
|
||||||
'Table has been altered.' => 'แก้ไขตารางแล้ว.',
|
|
||||||
'Table has been created.' => 'สร้างตารางใหม่แล้ว.',
|
|
||||||
'Alter table' => 'เปลี่ยนแปลงตารางแล้ว',
|
|
||||||
'Create table' => 'สร้างตารางใหม่',
|
|
||||||
'Table name' => 'ชื่อตาราง',
|
|
||||||
'engine' => 'ชนิดของฐานข้อมูล',
|
|
||||||
'collation' => 'การตรวจทาน',
|
|
||||||
'Column name' => 'ชื่อคอลัมน์',
|
|
||||||
'Type' => 'ชนิด',
|
|
||||||
'Length' => 'ความยาว',
|
|
||||||
'Auto Increment' => 'เพิ่มลำดับโดยอัตโนมัติ',
|
|
||||||
'Options' => 'ตัวเลือก',
|
|
||||||
'Save' => 'บันทึก',
|
|
||||||
'Drop' => 'ลบ',
|
|
||||||
'Database has been dropped.' => 'ฐานข้อมูลถูกลบแล้ว.',
|
|
||||||
'Database has been created.' => 'สร้างฐานข้อมูลใหม่แล้ว.',
|
|
||||||
'Database has been renamed.' => 'เปลี่ยนชื่อฐานข้อมูลแล้ว.',
|
|
||||||
'Database has been altered.' => 'เปลี่ยนแปลงฐานข้อมูลแล้ว.',
|
|
||||||
'Alter database' => 'เปลี่ยนแปลงฐานข้อมูล',
|
|
||||||
'Create database' => 'สร้างฐานข้อมูล',
|
|
||||||
'SQL command' => 'คำสั่ง SQL',
|
|
||||||
'Dump' => 'ส่งออก',
|
|
||||||
'Logout' => 'ออกจากระบบ',
|
|
||||||
'database' => 'ฐานข้อมูล',
|
|
||||||
'Use' => 'ใช้งาน',
|
|
||||||
'No tables.' => 'ไม่พบตาราง.',
|
|
||||||
'select' => 'เลือก',
|
|
||||||
'Item has been deleted.' => 'รายการถูกลบแล้ว.',
|
|
||||||
'Item has been updated.' => 'ปรับปรุงรายการแล้ว.',
|
|
||||||
'Item%s has been inserted.' => 'มี%s รายการ ถูกเพิ่มแล้ว.',
|
|
||||||
'Edit' => 'แก้ไข',
|
|
||||||
'Insert' => 'เพิ่ม',
|
|
||||||
'Save and insert next' => 'บันทึกแล้วเพิ่มรายการถัดไป',
|
|
||||||
'Delete' => 'ลบ',
|
|
||||||
'Database' => 'ฐานข้อมูล',
|
|
||||||
'Routines' => 'รูทีน',
|
|
||||||
'Indexes have been altered.' => 'เปลี่ยนแปลงดัชนีแล้ว.',
|
|
||||||
'Indexes' => 'ดัชนี',
|
|
||||||
'Alter indexes' => 'เปลี่ยนแปลงดัชนี',
|
|
||||||
'Add next' => 'เพิ่มรายการถัดไป',
|
|
||||||
'Language' => 'ภาษา',
|
|
||||||
'Select' => 'เลือก',
|
|
||||||
'New item' => 'รายการใหม่',
|
|
||||||
'Search' => 'ค้นหา',
|
|
||||||
'Sort' => 'เรียงลำดับ',
|
|
||||||
'descending' => 'มากไปน้อย',
|
|
||||||
'Limit' => 'จำกัด',
|
|
||||||
'No rows.' => 'ไม่มีแถวของตาราง.',
|
|
||||||
'Action' => 'ดำเนินการ',
|
|
||||||
'edit' => 'แก้ไข',
|
|
||||||
'Page' => 'หน้า',
|
|
||||||
'Query executed OK, %d row(s) affected.' => 'ประมวลผลคำสั่งแล้ว มี %d ถูกดำเนินการ.',
|
|
||||||
'Error in query' => 'คำสั่งไม่ถูกต้อง',
|
|
||||||
'Execute' => 'ประมวลผล',
|
|
||||||
'Table' => 'ตาราง',
|
|
||||||
'Foreign keys' => 'คีย์คู่แข่ง',
|
|
||||||
'Triggers' => 'ทริกเกอร์',
|
|
||||||
'View' => 'วิว',
|
|
||||||
'Unable to select the table' => 'ไม่สามารถเลือกตารางได้',
|
|
||||||
'Invalid CSRF token. Send the form again.' => 'เครื่องหมาย CSRF ไม่ถูกต้อง ส่งข้อมูลใหม่อีกครั้ง.',
|
|
||||||
'Comment' => 'หมายเหตุ',
|
|
||||||
'Default values' => 'ค่าเริ่มต้น',
|
|
||||||
'%d byte(s)' => '%d ไบท์',
|
|
||||||
'No commands to execute.' => 'ไม่มีคำสั่งที่จะประมวลผล.',
|
|
||||||
'Unable to upload a file.' => 'ไม่สามารถอัปโหลดไฟล์ได้.',
|
|
||||||
'File upload' => 'อัปโหลดไฟล์',
|
|
||||||
'File uploads are disabled.' => 'การอัปโหลดไฟล์ถูกปิดการใช้งาน.',
|
|
||||||
'Routine has been called, %d row(s) affected.' => 'รูทีนถูกเรียกใช้งาน มี %d แถวถูกดำเนินการ.',
|
|
||||||
'Call' => 'เรียกใช้งาน',
|
|
||||||
'No extension' => 'ไม่พบส่วนเสริม',
|
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'ไม่มีส่วนเสริมของ PHP (%s) ที่สามารถใช้งานได้.',
|
|
||||||
'Session support must be enabled.' => 'ต้องเปิดใช้งาน Session.',
|
|
||||||
'Session expired, please login again.' => 'Session หมดอายุแล้ว กรุณาเข้าสู่ระบบใหม่อีกครั้ง.',
|
|
||||||
'Text length' => 'ความยาวของอักษร',
|
|
||||||
'Foreign key has been dropped.' => 'คีย์คู่แข่งถูกลบแล้ว.',
|
|
||||||
'Foreign key has been altered.' => 'คีย์คู่แข่งถูกเปลี่ยนแปลงแล้ว.',
|
|
||||||
'Foreign key has been created.' => 'คีย์คู่แข่งถูกสร้างแล้ว.',
|
|
||||||
'Foreign key' => 'คีย์คู่แข่ง',
|
|
||||||
'Target table' => 'คารางเป้าหมาย',
|
|
||||||
'Change' => 'แก้ไข',
|
|
||||||
'Source' => 'แหล่งข้อมูล',
|
|
||||||
'Target' => 'เป้าหมาย',
|
|
||||||
'Add column' => 'เพิ่มคอลัมน์',
|
|
||||||
'Alter' => 'เปลี่ยนแปลง',
|
|
||||||
'Add foreign key' => 'เพิ่มคีย์คู่แข่ง',
|
|
||||||
'ON DELETE' => 'ON DELETE',
|
|
||||||
'ON UPDATE' => 'ON UPDATE',
|
|
||||||
'Index Type' => 'ชนิดของดัชนี',
|
|
||||||
'Column (length)' => 'คอลัมน์ (ความยาว)',
|
|
||||||
'View has been dropped.' => 'วิวถูกลบแล้ว.',
|
|
||||||
'View has been altered.' => 'วิวถูกเปลี่ยนแปลงแล้ว.',
|
|
||||||
'View has been created.' => 'วิวถูกสร้างแล้ว.',
|
|
||||||
'Alter view' => 'เปลี่ยนแปลงวิว',
|
|
||||||
'Create view' => 'เพิ่มวิว',
|
|
||||||
'Name' => 'ชื่อ',
|
|
||||||
'Process list' => 'รายการของกระบวนการ',
|
|
||||||
'%d process(es) have been killed.' => 'มี %d กระบวนการถูกทำลายแล้ว.',
|
|
||||||
'Kill' => 'ทำลาย',
|
|
||||||
'Parameter name' => 'ชื่อพารามิเตอร์',
|
|
||||||
'Database schema' => 'Schema ของฐานข้อมูล',
|
|
||||||
'Create procedure' => 'สร้าง procedure',
|
|
||||||
'Create function' => 'สร้าง Function',
|
|
||||||
'Routine has been dropped.' => 'Routine ถูกลบแล้ว.',
|
|
||||||
'Routine has been altered.' => 'Routine ถูกเปลี่ยนแปลงแล้ว.',
|
|
||||||
'Routine has been created.' => 'Routine ถูกสร้างแล้ว.',
|
|
||||||
'Alter function' => 'เปลี่ยนแปลง Function',
|
|
||||||
'Alter procedure' => 'เปลี่ยนแปลง procedure',
|
|
||||||
'Return type' => 'ประเภทของค่าที่คืนกลับ',
|
|
||||||
'Add trigger' => 'เพิ่ม trigger',
|
|
||||||
'Trigger has been dropped.' => 'Trigger ถูกลบแล้ว.',
|
|
||||||
'Trigger has been altered.' => 'Trigger ถูกเปลี่ยนแปลงแล้ว.',
|
|
||||||
'Trigger has been created.' => 'Trigger ถูกสร้างแล้ว.',
|
|
||||||
'Alter trigger' => 'เปลี่ยนแปลง Trigger',
|
|
||||||
'Create trigger' => 'สร้าง Trigger',
|
|
||||||
'Time' => 'เวลา',
|
|
||||||
'Event' => 'เหตุการณ์',
|
|
||||||
'%s version: %s through PHP extension %s' => '%s รุ่น: %s ผ่านส่วนขยาย PHP %s',
|
|
||||||
'%d row(s)' => '%d แถว',
|
|
||||||
'Remove' => 'ลบ',
|
|
||||||
'Are you sure?' => 'คุณแน่ใจแล้วหรือ',
|
|
||||||
'Privileges' => 'สิทธิ์',
|
|
||||||
'Create user' => 'สร้างผู้ใช้งาน',
|
|
||||||
'User has been dropped.' => 'ลบผู้ใช้งานแล้ว.',
|
|
||||||
'User has been altered.' => 'เปลี่ยนแปลงผู้ใช้งานแล้ว.',
|
|
||||||
'User has been created.' => 'สร้างผู้ใช้งานแล้ว.',
|
|
||||||
'Hashed' => 'Hash',
|
|
||||||
'Column' => 'คอลัมน์',
|
|
||||||
'Routine' => 'รูทีน',
|
|
||||||
'Grant' => 'การอนุญาต',
|
|
||||||
'Revoke' => 'ยกเลิก',
|
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'ข้อมูลที่ส่งเข้ามีขนาดใหญ่เกิน คุณสามารถ เพิ่ม-ลดขนาดได้ที่ %s คำสั่งการตั้งค่า.',
|
|
||||||
'Logged as: %s' => 'สวัสดีคุณ: %s',
|
|
||||||
'Move up' => 'ย้ายไปข้างบน',
|
|
||||||
'Move down' => 'ย้ายลงล่าง',
|
|
||||||
'Functions' => 'ฟังก์ชั่น',
|
|
||||||
'Aggregation' => 'รวบรวม',
|
|
||||||
'Export' => 'ส่งออก',
|
|
||||||
'Output' => 'ข้อมูลที่ส่งออก',
|
|
||||||
'open' => 'เปิด',
|
|
||||||
'save' => 'บันทึก',
|
|
||||||
'Format' => 'รูปแบบ',
|
|
||||||
'Tables' => 'ตาราง',
|
|
||||||
'Data' => 'ข้อมูล',
|
|
||||||
'Event has been dropped.' => 'เหตุการณ์ถูกลบแล้ว.',
|
|
||||||
'Event has been altered.' => 'เหตุการณ์ถูกเปลี่ยนแปลงแล้ว.',
|
|
||||||
'Event has been created.' => 'เหตุการณ์ถูกสร้างแล้ว.',
|
|
||||||
'Alter event' => 'เปลี่ยนแปลงเหตุการณ์',
|
|
||||||
'Create event' => 'สร้างเหตุการณ์',
|
|
||||||
'At given time' => 'ในเวลาที่กำหนด',
|
|
||||||
'Every' => 'ทุกๆ',
|
|
||||||
'Events' => 'เหตุการณ์',
|
|
||||||
'Schedule' => 'กำหนดการณ์',
|
|
||||||
'Start' => 'เริ่มต้น',
|
|
||||||
'End' => 'สิ้นสุด',
|
|
||||||
'Status' => 'สถานะ',
|
|
||||||
'On completion preserve' => 'เมื่อเสร็จสิ้นการสงวน',
|
|
||||||
'Tables and views' => 'ตารางและวิว',
|
|
||||||
'Data Length' => 'ความยาวของข้อมูล',
|
|
||||||
'Index Length' => 'ความยาวของดัชนี',
|
|
||||||
'Data Free' => 'พื้นที่ว่าง',
|
|
||||||
'Collation' => 'การตรวจทาน',
|
|
||||||
'Analyze' => 'วิเคราะห์',
|
|
||||||
'Optimize' => 'เพิ่มประสิทธิภาพ',
|
|
||||||
'Check' => 'ตรวจสอบ',
|
|
||||||
'Repair' => 'ซ่อมแซม',
|
|
||||||
'Truncate' => 'ตัดทิ้ง',
|
|
||||||
'Tables have been truncated.' => 'เคลียร์ตารางแล้ว (truncate).',
|
|
||||||
'Rows' => 'แถว',
|
|
||||||
',' => ' ',
|
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Tables have been moved.' => 'ตารางถูกย้ายแล้ว.',
|
|
||||||
'Move to other database' => 'ย้ายไปยังฐานข้อมูลอื่น',
|
|
||||||
'Move' => 'ย้าย',
|
|
||||||
'Engine' => 'ชนิดของฐานข้อมูล',
|
|
||||||
'Save and continue edit' => 'บันทึกและแก้ไขข้อมูลอื่นๆต่อ',
|
|
||||||
'original' => 'ต้นฉบับ',
|
|
||||||
'Tables have been dropped.' => 'ตารางถูกลบแล้ว.',
|
|
||||||
'%d item(s) have been affected.' => 'มี %d รายการถูกดำเนินการแล้ว.',
|
|
||||||
'whole result' => 'รวมผล',
|
|
||||||
'Clone' => 'ทำซ้ำ',
|
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'จำนวนสูงสุดของฟิลด์อนุญาตให้เกิน กรุณาเพิ่มอีก %s.',
|
|
||||||
'Partition by' => 'พาร์ทิชันโดย',
|
|
||||||
'Partitions' => 'พาร์ทิชัน',
|
|
||||||
'Partition name' => 'ชื่อของพาร์ทิชัน',
|
|
||||||
'Values' => 'ค่า',
|
|
||||||
'%d row(s) have been imported.' => '%d แถวถูกนำเข้าแล้ว.',
|
|
||||||
'anywhere' => 'ทุกแห่ง',
|
|
||||||
'Import' => 'นำเข้า',
|
|
||||||
'Stop on error' => 'หยุดการทำงานเมื่อเออเรอ',
|
|
||||||
'%.3f s' => '%.3f วินาที',
|
|
||||||
'$1-$3-$5' => '$5/$3/$1',
|
|
||||||
'[yyyy]-mm-dd' => 'วันที่/เดือน/[ปี]',
|
|
||||||
'History' => 'ประวัติ',
|
|
||||||
'Variables' => 'ตัวแปร',
|
|
||||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'แหล่งที่มาและเป้าหมายของคอลมัน์ต้องมีชนิดข้อมูลเดียวกัน คือต้องมีดัชนีและข้อมูลอ้างอิงของคอลัมน์เป้าหมาย.',
|
|
||||||
'Relations' => 'ความสำพันธ์',
|
|
||||||
'Run file' => 'ทำงานจากไฟล์',
|
|
||||||
'Clear' => 'เคลียร์',
|
|
||||||
'Maximum allowed file size is %sB.' => 'ขนาดไฟล์สูงสุดที่อนุญาตให้ใช้งานคือ %sB.',
|
|
||||||
'Numbers' => 'ตัวเลข',
|
|
||||||
'Date and time' => 'วันและเวลา',
|
|
||||||
'Strings' => 'ตัวอักษร',
|
|
||||||
'Binary' => 'เลขฐานสอง',
|
|
||||||
'Lists' => 'รายการ',
|
|
||||||
'Editor' => 'ผู้แก้ไข',
|
|
||||||
'E-mail' => 'อีเมล์',
|
|
||||||
'From' => 'จาก',
|
|
||||||
'Subject' => 'หัวข้อ',
|
|
||||||
'Send' => 'ส่ง',
|
|
||||||
'%d e-mail(s) have been sent.' => 'มี %d อีเมล์ ถูกส่งออกแล้ว.',
|
|
||||||
'Webserver file %s' => 'Webserver file %s',
|
|
||||||
'File does not exist.' => 'ไม่มีไฟล์.',
|
|
||||||
'%d in total' => '%d ของทั้งหมด',
|
|
||||||
'Permanent login' => 'จดจำการเข้าสู่ระบบตลอดไป',
|
|
||||||
'Databases have been dropped.' => 'ฐานข้อมูลถูกลบแล้ว.',
|
|
||||||
'Search data in tables' => 'ค้นหาในตาราง',
|
|
||||||
'Schema' => 'Schema',
|
|
||||||
'Alter schema' => 'เปลี่ยนแปลง schema',
|
|
||||||
'Create schema' => 'สร้าง schema',
|
|
||||||
'Schema has been dropped.' => 'Schema ถูกลบแล้ว.',
|
|
||||||
'Schema has been created.' => 'Schema ถูกสร้างแล้ว.',
|
|
||||||
'Schema has been altered.' => 'Schema ถูกเปลี่ยนแปลงแล้ว.',
|
|
||||||
'Sequences' => 'Sequences',
|
|
||||||
'Create sequence' => 'Sequence ถูกสร้างแล้ว',
|
|
||||||
'Alter sequence' => 'Sequence ถูกเปลี่ยนแปลงแล้ว',
|
|
||||||
'Sequence has been dropped.' => 'Sequence ถูกลบแล้ว.',
|
|
||||||
'Sequence has been created.' => 'Sequence ถูกสร้างแล้ว.',
|
|
||||||
'Sequence has been altered.' => 'Sequence ถูกเปลี่ยนแปลงแล้ว.',
|
|
||||||
'User types' => 'ประเภทผู้ใช้งาน',
|
|
||||||
'Create type' => 'สร้างประเภทผู้ใช้งาน',
|
|
||||||
'Alter type' => 'แก้ไขประเภท',
|
|
||||||
'Type has been dropped.' => 'ประเภทถูกลบแล้ว.',
|
|
||||||
'Type has been created.' => 'ประเภทถูกสร้างแล้ว.',
|
|
||||||
'Ctrl+click on a value to modify it.' => 'กด Ctrl+click เพื่อแก้ไขค่า.',
|
|
||||||
'Use edit link to modify this value.' => 'ใช้ลิงค์ แก้ไข เพื่อปรับเปลี่ยนค่านี้.',
|
|
||||||
'last' => 'ล่าสุด',
|
|
||||||
'From server' => 'จากเซเวอร์',
|
|
||||||
'System' => 'ระบบ',
|
|
||||||
'Select data' => 'เลือกข้อมูล',
|
|
||||||
'Show structure' => 'แสดงโครงสร้าง',
|
|
||||||
'empty' => 'ว่างเปล่า',
|
|
||||||
'Network' => 'เครื่องข่าย',
|
|
||||||
'Geometry' => 'เรขาคณิต',
|
|
||||||
'File exists.' => 'มีไฟล์นี้อยู่แล้ว.',
|
|
||||||
'Attachments' => 'ไฟล์แนบ',
|
|
||||||
'%d query(s) executed OK.' => '%d คำสั่งถูกดำเนินการแล้ว.',
|
|
||||||
'Show only errors' => 'แสดงเฉพาะเออเรอ',
|
|
||||||
'Refresh' => 'โหลดใหม่',
|
|
||||||
'Invalid schema.' => 'schema ไม่ถูกต้อง.',
|
|
||||||
'Please use one of the extensions %s.' => 'กรุณาใช้ส่วนเสริมอย่างน้อย 1 ส่วนเสริมจากทั้งหมด %s.',
|
|
||||||
'now' => 'ตอนนี้',
|
|
||||||
'ltr' => 'ltr',
|
|
||||||
'Tables have been copied.' => 'ทำซ้ำตารางฐานข้อมูลแล้ว.',
|
|
||||||
'Copy' => 'ทำซ้ำ',
|
|
||||||
'Permanent link' => 'ลิงค์ถาวร',
|
|
||||||
'Edit all' => 'แก้ไขทั้งหมด',
|
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
|
||||||
);
|
|
||||||
@@ -93,7 +93,6 @@ $translations = array(
|
|||||||
|
|
||||||
// thousands separator - must contain single byte
|
// thousands separator - must contain single byte
|
||||||
',' => ' ',
|
',' => ' ',
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Engine' => 'Motor',
|
'Engine' => 'Motor',
|
||||||
'Collation' => 'Karşılaştırma',
|
'Collation' => 'Karşılaştırma',
|
||||||
'Data Length' => 'Veri Uzunluğu',
|
'Data Length' => 'Veri Uzunluğu',
|
||||||
@@ -145,6 +144,7 @@ $translations = array(
|
|||||||
'No tables.' => 'Tablo yok.',
|
'No tables.' => 'Tablo yok.',
|
||||||
'Alter table' => 'Tabloyu değiştir',
|
'Alter table' => 'Tabloyu değiştir',
|
||||||
'Create table' => 'Tablo oluştur',
|
'Create table' => 'Tablo oluştur',
|
||||||
|
'Create new table' => 'Yeni tablo oluştur',
|
||||||
'Table has been dropped.' => 'Tablo silindi.',
|
'Table has been dropped.' => 'Tablo silindi.',
|
||||||
'Tables have been dropped.' => 'Tablolar silindi.',
|
'Tables have been dropped.' => 'Tablolar silindi.',
|
||||||
'Tables have been optimized.' => 'Tablolar en uygun hale getirildi.',
|
'Tables have been optimized.' => 'Tablolar en uygun hale getirildi.',
|
||||||
@@ -301,6 +301,7 @@ $translations = array(
|
|||||||
'Schema has been dropped.' => 'Şema silindi.',
|
'Schema has been dropped.' => 'Şema silindi.',
|
||||||
'Schema has been created.' => 'Şema oluşturuldu.',
|
'Schema has been created.' => 'Şema oluşturuldu.',
|
||||||
'Schema has been altered.' => 'Şema değiştirildi.',
|
'Schema has been altered.' => 'Şema değiştirildi.',
|
||||||
|
'schema' => 'şema',
|
||||||
'Schema' => 'Şema',
|
'Schema' => 'Şema',
|
||||||
'Invalid schema.' => 'Geçersiz şema.',
|
'Invalid schema.' => 'Geçersiz şema.',
|
||||||
|
|
||||||
|
|||||||
@@ -93,7 +93,6 @@ $translations = array(
|
|||||||
|
|
||||||
// thousands separator - must contain single byte
|
// thousands separator - must contain single byte
|
||||||
',' => ' ',
|
',' => ' ',
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Engine' => 'Рушій',
|
'Engine' => 'Рушій',
|
||||||
'Collation' => 'Співставлення',
|
'Collation' => 'Співставлення',
|
||||||
'Data Length' => 'Об\'єм даних',
|
'Data Length' => 'Об\'єм даних',
|
||||||
@@ -145,6 +144,7 @@ $translations = array(
|
|||||||
'No tables.' => 'Нема таблиць.',
|
'No tables.' => 'Нема таблиць.',
|
||||||
'Alter table' => 'Змінити таблицю',
|
'Alter table' => 'Змінити таблицю',
|
||||||
'Create table' => 'Створити таблицю',
|
'Create table' => 'Створити таблицю',
|
||||||
|
'Create new table' => 'Створити нову таблицю',
|
||||||
'Table has been dropped.' => 'Таблицю було видалено.',
|
'Table has been dropped.' => 'Таблицю було видалено.',
|
||||||
'Tables have been dropped.' => 'Таблиці були видалені.',
|
'Tables have been dropped.' => 'Таблиці були видалені.',
|
||||||
'Tables have been optimized.' => 'Таблиці були оптимізовані.',
|
'Tables have been optimized.' => 'Таблиці були оптимізовані.',
|
||||||
@@ -298,6 +298,7 @@ $translations = array(
|
|||||||
'Schema has been dropped.' => 'Схему було видалено.',
|
'Schema has been dropped.' => 'Схему було видалено.',
|
||||||
'Schema has been created.' => 'Схему було створено.',
|
'Schema has been created.' => 'Схему було створено.',
|
||||||
'Schema has been altered.' => 'Схему було змінено.',
|
'Schema has been altered.' => 'Схему було змінено.',
|
||||||
|
'schema' => 'схема',
|
||||||
'Schema' => 'Схема',
|
'Schema' => 'Схема',
|
||||||
'Invalid schema.' => 'Невірна схема.',
|
'Invalid schema.' => 'Невірна схема.',
|
||||||
|
|
||||||
|
|||||||
@@ -1,330 +0,0 @@
|
|||||||
<?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,8 +11,6 @@ $translations = array(
|
|||||||
'Logged as: %s' => 'xx',
|
'Logged as: %s' => 'xx',
|
||||||
'Logout successful.' => 'xx',
|
'Logout successful.' => 'xx',
|
||||||
'Invalid credentials.' => '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',
|
'Language' => 'xx',
|
||||||
'Invalid CSRF token. Send the form again.' => 'xx',
|
'Invalid CSRF token. Send the form again.' => 'xx',
|
||||||
'No extension' => 'xx',
|
'No extension' => 'xx',
|
||||||
@@ -66,7 +64,6 @@ $translations = array(
|
|||||||
'Unable to upload a file.' => 'xx',
|
'Unable to upload a file.' => 'xx',
|
||||||
'Maximum allowed file size is %sB.' => 'xx',
|
'Maximum allowed file size is %sB.' => 'xx',
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'xx',
|
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'xx',
|
||||||
'You can upload a big SQL file via FTP and import it from server.' => 'xx',
|
|
||||||
|
|
||||||
'Export' => 'xx',
|
'Export' => 'xx',
|
||||||
'Dump' => 'xx',
|
'Dump' => 'xx',
|
||||||
@@ -95,8 +92,7 @@ $translations = array(
|
|||||||
'Permanent link' => 'xx',
|
'Permanent link' => 'xx',
|
||||||
|
|
||||||
// thousands separator - must contain single byte
|
// thousands separator - must contain single byte
|
||||||
',' => 'x',
|
',' => 'xx',
|
||||||
'0123456789' => 'xxxxxxxxxx',
|
|
||||||
'Engine' => 'xx',
|
'Engine' => 'xx',
|
||||||
'Collation' => 'xx',
|
'Collation' => 'xx',
|
||||||
'Data Length' => 'xx',
|
'Data Length' => 'xx',
|
||||||
@@ -106,7 +102,6 @@ $translations = array(
|
|||||||
'%d in total' => 'xx',
|
'%d in total' => 'xx',
|
||||||
'Analyze' => 'xx',
|
'Analyze' => 'xx',
|
||||||
'Optimize' => 'xx',
|
'Optimize' => 'xx',
|
||||||
'Vacuum' => 'xx',
|
|
||||||
'Check' => 'xx',
|
'Check' => 'xx',
|
||||||
'Repair' => 'xx',
|
'Repair' => 'xx',
|
||||||
'Truncate' => 'xx',
|
'Truncate' => 'xx',
|
||||||
@@ -149,6 +144,7 @@ $translations = array(
|
|||||||
'No tables.' => 'xx',
|
'No tables.' => 'xx',
|
||||||
'Alter table' => 'xx',
|
'Alter table' => 'xx',
|
||||||
'Create table' => 'xx',
|
'Create table' => 'xx',
|
||||||
|
'Create new table' => 'xx',
|
||||||
'Table has been dropped.' => 'xx',
|
'Table has been dropped.' => 'xx',
|
||||||
'Tables have been dropped.' => 'xx',
|
'Tables have been dropped.' => 'xx',
|
||||||
'Tables have been optimized.' => 'xx',
|
'Tables have been optimized.' => 'xx',
|
||||||
@@ -167,8 +163,6 @@ $translations = array(
|
|||||||
'Default values' => 'xx',
|
'Default values' => 'xx',
|
||||||
'Drop' => 'xx',
|
'Drop' => 'xx',
|
||||||
'Are you sure?' => 'xx',
|
'Are you sure?' => 'xx',
|
||||||
'Size' => 'xx',
|
|
||||||
'Compute' => 'xx',
|
|
||||||
'Move up' => 'xx',
|
'Move up' => 'xx',
|
||||||
'Move down' => 'xx',
|
'Move down' => 'xx',
|
||||||
'Remove' => 'xx',
|
'Remove' => 'xx',
|
||||||
@@ -246,10 +240,8 @@ $translations = array(
|
|||||||
|
|
||||||
'Import' => 'xx',
|
'Import' => 'xx',
|
||||||
'%d row(s) have been imported.' => array('xx', 'xx'),
|
'%d row(s) have been imported.' => array('xx', 'xx'),
|
||||||
'File must be in UTF-8 encoding.' => 'xx',
|
|
||||||
|
|
||||||
// in-place editing in select
|
// in-place editing in select
|
||||||
'Modify' => 'xx',
|
|
||||||
'Ctrl+click on a value to modify it.' => 'xx',
|
'Ctrl+click on a value to modify it.' => 'xx',
|
||||||
'Use edit link to modify this value.' => 'xx',
|
'Use edit link to modify this value.' => 'xx',
|
||||||
|
|
||||||
@@ -268,7 +260,6 @@ $translations = array(
|
|||||||
'Save' => 'xx',
|
'Save' => 'xx',
|
||||||
'Save and continue edit' => 'xx',
|
'Save and continue edit' => 'xx',
|
||||||
'Save and insert next' => 'xx',
|
'Save and insert next' => 'xx',
|
||||||
'Selected' => 'xx',
|
|
||||||
'Clone' => 'xx',
|
'Clone' => 'xx',
|
||||||
'Delete' => 'xx',
|
'Delete' => 'xx',
|
||||||
'You have no privileges to update this table.' => 'xx',
|
'You have no privileges to update this table.' => 'xx',
|
||||||
@@ -311,6 +302,7 @@ $translations = array(
|
|||||||
'Schema has been dropped.' => 'xx',
|
'Schema has been dropped.' => 'xx',
|
||||||
'Schema has been created.' => 'xx',
|
'Schema has been created.' => 'xx',
|
||||||
'Schema has been altered.' => 'xx',
|
'Schema has been altered.' => 'xx',
|
||||||
|
'schema' => 'xx',
|
||||||
'Schema' => 'xx',
|
'Schema' => 'xx',
|
||||||
'Invalid schema.' => 'xx',
|
'Invalid schema.' => 'xx',
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
$translations = array(
|
$translations = array(
|
||||||
'Login' => '登入',
|
'Login' => '登入',
|
||||||
'Logout successful.' => '成功登出。',
|
'Logout successful.' => '登出成功。',
|
||||||
'Invalid credentials.' => '無效的憑證。',
|
'Invalid credentials.' => '無效的憑證。',
|
||||||
'Server' => '伺服器',
|
'Server' => '伺服器',
|
||||||
'Username' => '帳號',
|
'Username' => '帳號',
|
||||||
@@ -9,61 +9,62 @@ $translations = array(
|
|||||||
'Select database' => '選擇資料庫',
|
'Select database' => '選擇資料庫',
|
||||||
'Invalid database.' => '無效的資料庫。',
|
'Invalid database.' => '無效的資料庫。',
|
||||||
'Create new database' => '建立新資料庫',
|
'Create new database' => '建立新資料庫',
|
||||||
'Table has been altered.' => '資料表已修改。',
|
'Table has been altered.' => '資料表已更改。',
|
||||||
'Table has been created.' => '資料表已修改。',
|
'Table has been created.' => '資料表已更改。',
|
||||||
'Alter table' => '修改資料表',
|
'Alter table' => '更改資料表',
|
||||||
'Create table' => '建立資料表',
|
'Create table' => '建立資料表表',
|
||||||
'Table name' => '資料表名稱',
|
'Table name' => '資料表名稱',
|
||||||
'engine' => '引擎',
|
'engine' => '引擎',
|
||||||
'collation' => '校對',
|
'collation' => '校對',
|
||||||
'Column name' => '列名',
|
'Column name' => '列名',
|
||||||
'Type' => '類型',
|
'Type' => '類型',
|
||||||
'Length' => '長度',
|
'Length' => '長度',
|
||||||
'Auto Increment' => '自動遞增',
|
'Auto Increment' => '自動增加',
|
||||||
'Options' => '選項',
|
'Options' => '選項',
|
||||||
'Save' => '儲存',
|
'Save' => '儲存',
|
||||||
'Drop' => '刪除',
|
'Drop' => '丟棄',
|
||||||
'Database has been dropped.' => '資料庫已刪除。',
|
'Database has been dropped.' => '資料庫已刪除。',
|
||||||
'Database has been created.' => '已建立資料庫。',
|
'Database has been created.' => '已建立資料庫。',
|
||||||
'Database has been renamed.' => '已重新命名資料庫。',
|
'Database has been renamed.' => '已重新命名資料庫。',
|
||||||
'Database has been altered.' => '已修改資料庫。',
|
'Database has been altered.' => '已更改資料庫。',
|
||||||
'Alter database' => '修改資料庫',
|
'Alter database' => '更改資料庫',
|
||||||
'Create database' => '建立資料庫',
|
'Create database' => '建立資料庫',
|
||||||
'SQL command' => 'SQL命令',
|
'SQL command' => 'SQL命令',
|
||||||
'Dump' => '匯出',
|
'Dump' => '導入/導出',
|
||||||
'Logout' => '登出',
|
'Logout' => '登出',
|
||||||
'database' => '資料庫',
|
'database' => '資料庫',
|
||||||
'Use' => '使用',
|
'Use' => '使用',
|
||||||
'No tables.' => '沒有資料表。',
|
'No tables.' => '沒有資料表。',
|
||||||
'select' => '選擇',
|
'select' => '選擇',
|
||||||
|
'Create new table' => '建立新資料表',
|
||||||
'Item has been updated.' => '已更新項目。',
|
'Item has been updated.' => '已更新項目。',
|
||||||
'Item%s has been inserted.' => '已新增項目%s。',
|
'Item%s has been inserted.' => '已插入項目%s。',
|
||||||
'Edit' => '編輯',
|
'Edit' => '編輯',
|
||||||
'Insert' => '新增',
|
'Insert' => '插入',
|
||||||
'Save and insert next' => '儲存並新增下一筆',
|
'Save and insert next' => '儲存並插入下一個',
|
||||||
'Delete' => '刪除',
|
'Delete' => '刪除',
|
||||||
'Database' => '資料庫',
|
'Database' => '資料庫',
|
||||||
'Routines' => '程序',
|
'Routines' => '程序',
|
||||||
'Indexes have been altered.' => '已修改索引。',
|
'Indexes have been altered.' => '已更改索引。',
|
||||||
'Indexes' => '索引',
|
'Indexes' => '索引',
|
||||||
'Alter indexes' => '修改索引',
|
'Alter indexes' => '更改索引',
|
||||||
'Add next' => '新增下一筆',
|
'Add next' => '新增下一個',
|
||||||
'Language' => '語言',
|
'Language' => '語言',
|
||||||
'Select' => '選擇',
|
'Select' => '選擇',
|
||||||
'New item' => '新增項目',
|
'New item' => '新建項',
|
||||||
'Search' => '搜尋',
|
'Search' => '搜尋',
|
||||||
'Sort' => '排序',
|
'Sort' => '排序',
|
||||||
'descending' => '降冪(遞減)',
|
'descending' => '降冪',
|
||||||
'Limit' => '限定',
|
'Limit' => '限定',
|
||||||
'No rows.' => '沒有行。',
|
'No rows.' => '沒有行。',
|
||||||
'Action' => '動作',
|
'Action' => '動作',
|
||||||
'edit' => '編輯',
|
'edit' => '編輯',
|
||||||
'Page' => '頁',
|
'Page' => '頁',
|
||||||
'Query executed OK, %d row(s) affected.' => '執行查詢OK,%d行受影響',
|
'Query executed OK, %d row(s) affected.' => '執行查詢OK,%d行受影響',
|
||||||
'Error in query' => '查詢發生錯誤',
|
'Error in query' => '查詢出錯',
|
||||||
'Execute' => '執行',
|
'Execute' => '執行',
|
||||||
'Table' => '資料表',
|
'Table' => '資料表',
|
||||||
'Foreign keys' => '外來鍵',
|
'Foreign keys' => '外鍵',
|
||||||
'Triggers' => '觸發器',
|
'Triggers' => '觸發器',
|
||||||
'View' => '檢視表',
|
'View' => '檢視表',
|
||||||
'Unable to select the table' => '無法選擇該資料表',
|
'Unable to select the table' => '無法選擇該資料表',
|
||||||
@@ -74,53 +75,53 @@ $translations = array(
|
|||||||
'No commands to execute.' => '沒有命令可執行。',
|
'No commands to execute.' => '沒有命令可執行。',
|
||||||
'Unable to upload a file.' => '無法上傳檔案。',
|
'Unable to upload a file.' => '無法上傳檔案。',
|
||||||
'File upload' => '檔案上傳',
|
'File upload' => '檔案上傳',
|
||||||
'File uploads are disabled.' => '檔案上傳已經被停用。',
|
'File uploads are disabled.' => '檔案上傳被禁用。',
|
||||||
'Routine has been called, %d row(s) affected.' => '程序已被執行,%d行被影響',
|
'Routine has been called, %d row(s) affected.' => '程序已被執行,%d行被影響',
|
||||||
'Call' => '呼叫',
|
'Call' => '呼叫',
|
||||||
'No extension' => '無擴充模組',
|
'No extension' => '沒有 擴充模組',
|
||||||
'None of the supported PHP extensions (%s) are available.' => '沒有任何支援的PHP擴充模組(%s)。',
|
'None of the supported PHP extensions (%s) are available.' => '沒有任何支援的PHP擴充模組(%s)。',
|
||||||
'Session support must be enabled.' => 'Session 必須被啟用。',
|
'Session support must be enabled.' => 'Session 必須被啟用。',
|
||||||
'Session expired, please login again.' => 'Session 已過期,請重新登入。',
|
'Session expired, please login again.' => 'Session 已過期,請重新登入。',
|
||||||
'Text length' => 'Text 長度',
|
'Text length' => 'Text 長度',
|
||||||
'Foreign key has been dropped.' => '已刪除外來鍵。',
|
'Foreign key has been dropped.' => '已刪除外鍵。',
|
||||||
'Foreign key has been altered.' => '已修改外來鍵。',
|
'Foreign key has been altered.' => '已更改外鍵。',
|
||||||
'Foreign key has been created.' => '已建立外來鍵。',
|
'Foreign key has been created.' => '已建立外鍵。',
|
||||||
'Foreign key' => '外來鍵',
|
'Foreign key' => '外鍵',
|
||||||
'Target table' => '目標資料表',
|
'Target table' => '目標資料表',
|
||||||
'Change' => '修改',
|
'Change' => '更改',
|
||||||
'Source' => '來源',
|
'Source' => '來源',
|
||||||
'Target' => '目標',
|
'Target' => '目標',
|
||||||
'Add column' => '新增資料列',
|
'Add column' => '新增資料列',
|
||||||
'Alter' => '修改',
|
'Alter' => '更改',
|
||||||
'Add foreign key' => '新增外來鍵',
|
'Add foreign key' => '新增外鍵',
|
||||||
'ON DELETE' => 'ON DELETE',
|
'ON DELETE' => 'ON DELETE',
|
||||||
'ON UPDATE' => 'ON UPDATE',
|
'ON UPDATE' => 'ON UPDATE',
|
||||||
'Index Type' => '索引類型',
|
'Index Type' => '索引類型',
|
||||||
'Column (length)' => '列(長度)',
|
'Column (length)' => '列(長度)',
|
||||||
'View has been dropped.' => '已刪除檢視表。',
|
'View has been dropped.' => '已丟棄檢視表。',
|
||||||
'View has been altered.' => '已修改檢視表。',
|
'View has been altered.' => '已更改檢視表。',
|
||||||
'View has been created.' => '已建立檢視表。',
|
'View has been created.' => '已建立檢視表。',
|
||||||
'Alter view' => '修改檢視表',
|
'Alter view' => '更改檢視表',
|
||||||
'Create view' => '建立檢視表',
|
'Create view' => '建立檢視表',
|
||||||
'Name' => '名稱',
|
'Name' => '名稱',
|
||||||
'Process list' => '處理程序列表',
|
'Process list' => '進程列表',
|
||||||
'%d process(es) have been killed.' => '%d 個 Process(es) 被終止',
|
'%d process(es) have been killed.' => '%d 個 Process(es) 被終止',
|
||||||
'Kill' => '終止',
|
'Kill' => '終止',
|
||||||
'Parameter name' => '參數名稱',
|
'Parameter name' => '參數名稱',
|
||||||
'Database schema' => '資料庫架構',
|
'Database schema' => '資料庫架構',
|
||||||
'Create procedure' => '建立預存程序',
|
'Create procedure' => '建立預存程序',
|
||||||
'Create function' => '建立函數',
|
'Create function' => '建立函數',
|
||||||
'Routine has been dropped.' => '已刪除程序。',
|
'Routine has been dropped.' => '已丟棄程序。',
|
||||||
'Routine has been altered.' => '已修改子程序。',
|
'Routine has been altered.' => '已更改子程序。',
|
||||||
'Routine has been created.' => '已建立子程序。',
|
'Routine has been created.' => '已建立子程序。',
|
||||||
'Alter function' => '修改函數',
|
'Alter function' => '更改函數',
|
||||||
'Alter procedure' => '修改過程',
|
'Alter procedure' => '更改過程',
|
||||||
'Return type' => '回傳類型',
|
'Return type' => '返回類型',
|
||||||
'Add trigger' => '建立觸發器',
|
'Add trigger' => '建立觸發器',
|
||||||
'Trigger has been dropped.' => '已刪除觸發器。',
|
'Trigger has been dropped.' => '已丟棄觸發器。',
|
||||||
'Trigger has been altered.' => '已修改觸發器。',
|
'Trigger has been altered.' => '已更改觸發器。',
|
||||||
'Trigger has been created.' => '已建立觸發器。',
|
'Trigger has been created.' => '已建立觸發器。',
|
||||||
'Alter trigger' => '修改觸發器',
|
'Alter trigger' => '更改觸發器',
|
||||||
'Create trigger' => '建立觸發器',
|
'Create trigger' => '建立觸發器',
|
||||||
'Time' => '時間',
|
'Time' => '時間',
|
||||||
'Event' => '事件',
|
'Event' => '事件',
|
||||||
@@ -130,8 +131,8 @@ $translations = array(
|
|||||||
'Are you sure?' => '你確定嗎?',
|
'Are you sure?' => '你確定嗎?',
|
||||||
'Privileges' => '權限',
|
'Privileges' => '權限',
|
||||||
'Create user' => '建立使用者',
|
'Create user' => '建立使用者',
|
||||||
'User has been dropped.' => '已刪除使用者。',
|
'User has been dropped.' => '已丟棄使用者。',
|
||||||
'User has been altered.' => '已修改使用者。',
|
'User has been altered.' => '已更改使用者。',
|
||||||
'User has been created.' => '已建立使用者。',
|
'User has been created.' => '已建立使用者。',
|
||||||
'Hashed' => 'Hashed',
|
'Hashed' => 'Hashed',
|
||||||
'Column' => '列',
|
'Column' => '列',
|
||||||
@@ -151,18 +152,18 @@ $translations = array(
|
|||||||
'Format' => '格式',
|
'Format' => '格式',
|
||||||
'Functions' => '函數',
|
'Functions' => '函數',
|
||||||
'Aggregation' => '集合',
|
'Aggregation' => '集合',
|
||||||
'Event has been dropped.' => '已刪除事件。',
|
'Event has been dropped.' => '已丟棄事件。',
|
||||||
'Event has been altered.' => '已修改事件。',
|
'Event has been altered.' => '已更改事件。',
|
||||||
'Event has been created.' => '已建立事件。',
|
'Event has been created.' => '已建立事件。',
|
||||||
'Alter event' => '修改事件',
|
'Alter event' => '更改事件',
|
||||||
'Create event' => '建立事件',
|
'Create event' => '建立事件',
|
||||||
'Start' => '開始',
|
'Start' => '開始',
|
||||||
'End' => '結束',
|
'End' => '結束',
|
||||||
'Every' => '每',
|
'Every' => '每',
|
||||||
'Status' => '狀態',
|
'Status' => '狀態',
|
||||||
'On completion preserve' => '在完成後儲存',
|
'On completion preserve' => '在完成後保存',
|
||||||
'Events' => '事件',
|
'Events' => '事件',
|
||||||
'Schedule' => '排程',
|
'Schedule' => '調度',
|
||||||
'At given time' => '在指定時間',
|
'At given time' => '在指定時間',
|
||||||
'Tables have been truncated.' => '已清空資料表。',
|
'Tables have been truncated.' => '已清空資料表。',
|
||||||
'Tables have been moved.' => '已轉移資料表。',
|
'Tables have been moved.' => '已轉移資料表。',
|
||||||
@@ -174,50 +175,49 @@ $translations = array(
|
|||||||
'Data Free' => '資料空閒',
|
'Data Free' => '資料空閒',
|
||||||
'Rows' => '行數',
|
'Rows' => '行數',
|
||||||
',' => ',',
|
',' => ',',
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Analyze' => '分析',
|
'Analyze' => '分析',
|
||||||
'Optimize' => '最佳化',
|
'Optimize' => '優化',
|
||||||
'Check' => '檢查',
|
'Check' => '檢查',
|
||||||
'Repair' => '修復',
|
'Repair' => '修復',
|
||||||
'Truncate' => '清空',
|
'Truncate' => '清空',
|
||||||
'Move to other database' => '轉移到其它資料庫',
|
'Move to other database' => '轉移到其它資料庫',
|
||||||
'Move' => '轉移',
|
'Move' => '轉移',
|
||||||
'Save and continue edit' => '儲存並繼續編輯',
|
'Save and continue edit' => '保存並繼續編輯',
|
||||||
'original' => '原始',
|
'original' => '原始',
|
||||||
'%d item(s) have been affected.' => '%d個項目受到影響。',
|
'%d item(s) have been affected.' => '%d個項目受到影響。',
|
||||||
'whole result' => '所有結果',
|
'whole result' => '所有結果',
|
||||||
'Tables have been dropped.' => '已經將資料表刪除。',
|
'Tables have been dropped.' => '已丟棄表。',
|
||||||
'Clone' => '複製',
|
'Clone' => '複製',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => '超過允許的字段數量的最大值。請增加%s。',
|
'Maximum number of allowed fields exceeded. Please increase %s.' => '超過最多允許的字段數量。請增加%s。',
|
||||||
'Partition by' => '分區類型',
|
'Partition by' => '分區類型',
|
||||||
'Partitions' => '分區',
|
'Partitions' => '分區',
|
||||||
'Partition name' => '分區名稱',
|
'Partition name' => '分區名',
|
||||||
'Values' => '值',
|
'Values' => '值',
|
||||||
'%d row(s) have been imported.' => '已匯入%d行。',
|
'%d row(s) have been imported.' => '%d行已導入。',
|
||||||
'anywhere' => '任意位置',
|
'anywhere' => '任意位置',
|
||||||
'Import' => '匯入',
|
'Import' => '匯入',
|
||||||
'Stop on error' => '出錯時停止',
|
'Stop on error' => '出錯時停止',
|
||||||
'%.3f s' => '%.3f秒',
|
'%.3f s' => '%.3f秒',
|
||||||
'$1-$3-$5' => '$1.$3.$5',
|
'$1-$3-$5' => '$1.$3.$5',
|
||||||
'[yyyy]-mm-dd' => '[yyyy].mm.dd',
|
'[yyyy]-mm-dd' => '[yyyy].mm.dd',
|
||||||
'History' => '紀錄',
|
'History' => '歷史',
|
||||||
'Variables' => '變數',
|
'Variables' => '變數',
|
||||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => '來源列和目標列必須具有相同的資料類型,在目標列上必須有一個索引並且引用的資料必須存在。',
|
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => '源列和目標列必須具有相同的數據類型,在目標列上必須有一個索引並且引用的數據必須存在。',
|
||||||
'Relations' => '關聯',
|
'Relations' => '關聯',
|
||||||
'Run file' => '執行檔案',
|
'Run file' => '執行檔案',
|
||||||
'Clear' => '清除',
|
'Clear' => '清除',
|
||||||
'Maximum allowed file size is %sB.' => '允許的檔案上限大小為%sB',
|
'Maximum allowed file size is %sB.' => '允許的檔案上限大小為%sB',
|
||||||
'Numbers' => '數字',
|
'Numbers' => '數字',
|
||||||
'Date and time' => '日期時間',
|
'Date and time' => '日期時間',
|
||||||
'Strings' => '字串',
|
'Strings' => '字符串',
|
||||||
'Binary' => '二進位',
|
'Binary' => '二進制',
|
||||||
'Lists' => '列表',
|
'Lists' => '列表',
|
||||||
'Editor' => '編輯器',
|
'Editor' => '編輯器',
|
||||||
'E-mail' => '電子郵件',
|
'E-mail' => '電子郵件',
|
||||||
'From' => '來自',
|
'From' => '來自',
|
||||||
'Subject' => '主旨',
|
'Subject' => '主題',
|
||||||
'Send' => '寄出',
|
'Send' => '發送',
|
||||||
'%d e-mail(s) have been sent.' => '已寄出 %d 封郵件。',
|
'%d e-mail(s) have been sent.' => '已發送 %d 封郵件。',
|
||||||
'Webserver file %s' => '網頁伺服器檔案 %s',
|
'Webserver file %s' => '網頁伺服器檔案 %s',
|
||||||
'File does not exist.' => '檔案不存在',
|
'File does not exist.' => '檔案不存在',
|
||||||
'Item has been deleted.' => '該項目已被刪除',
|
'Item has been deleted.' => '該項目已被刪除',
|
||||||
@@ -226,21 +226,22 @@ $translations = array(
|
|||||||
'Table has been dropped.' => '已經刪除資料表。',
|
'Table has been dropped.' => '已經刪除資料表。',
|
||||||
'Databases have been dropped.' => '資料庫已刪除。',
|
'Databases have been dropped.' => '資料庫已刪除。',
|
||||||
'Search data in tables' => '在資料庫搜尋',
|
'Search data in tables' => '在資料庫搜尋',
|
||||||
|
'schema' => '資料表結構',
|
||||||
'Schema' => '資料表結構',
|
'Schema' => '資料表結構',
|
||||||
'Alter schema' => '修改資料表結構',
|
'Alter schema' => '更改資料表結構',
|
||||||
'Create schema' => '建立資料表結構',
|
'Create schema' => '建立資料表結構',
|
||||||
'Schema has been dropped.' => '已刪除資料表結構。',
|
'Schema has been dropped.' => '已刪除資料表結構。',
|
||||||
'Schema has been created.' => '已建立資料表結構。',
|
'Schema has been created.' => '已建立資料表結構。',
|
||||||
'Schema has been altered.' => '已修改資料表結構。',
|
'Schema has been altered.' => '已更改資料表結構。',
|
||||||
'Sequences' => '序列',
|
'Sequences' => 'Sequences',
|
||||||
'Create sequence' => '建立序列',
|
'Create sequence' => '建立 sequence',
|
||||||
'Alter sequence' => '修改序列',
|
'Alter sequence' => '更改 sequence',
|
||||||
'Sequence has been dropped.' => '已刪除序列。',
|
'Sequence has been dropped.' => '已刪除 sequence。',
|
||||||
'Sequence has been created.' => '已建立序列。',
|
'Sequence has been created.' => '已建立 sequence。',
|
||||||
'Sequence has been altered.' => '已修改序列。',
|
'Sequence has been altered.' => '已更改 sequence。',
|
||||||
'User types' => '使用者類型',
|
'User types' => '使用者類型',
|
||||||
'Create type' => '建立類型',
|
'Create type' => '建立類型',
|
||||||
'Alter type' => '修改類型',
|
'Alter type' => '更改類型',
|
||||||
'Type has been dropped.' => '已刪除類型。',
|
'Type has been dropped.' => '已刪除類型。',
|
||||||
'Type has been created.' => '已建立類型。',
|
'Type has been created.' => '已建立類型。',
|
||||||
'Use edit link to modify this value.' => '使用編輯連結來修改。',
|
'Use edit link to modify this value.' => '使用編輯連結來修改。',
|
||||||
@@ -248,7 +249,7 @@ $translations = array(
|
|||||||
'From server' => '從伺服器',
|
'From server' => '從伺服器',
|
||||||
'System' => '資料庫系統',
|
'System' => '資料庫系統',
|
||||||
'Select data' => '選擇資料',
|
'Select data' => '選擇資料',
|
||||||
'Show structure' => '顯示結構',
|
'Show structure' => '秀出結構',
|
||||||
'empty' => '空值',
|
'empty' => '空值',
|
||||||
'Network' => '網路',
|
'Network' => '網路',
|
||||||
'Geometry' => '幾何',
|
'Geometry' => '幾何',
|
||||||
@@ -258,12 +259,12 @@ $translations = array(
|
|||||||
'Show only errors' => '僅顯示錯誤訊息',
|
'Show only errors' => '僅顯示錯誤訊息',
|
||||||
'Refresh' => '重新載入',
|
'Refresh' => '重新載入',
|
||||||
'Invalid schema.' => '無效的資料表結構。',
|
'Invalid schema.' => '無效的資料表結構。',
|
||||||
'Please use one of the extensions %s.' => '請使用下列其中一個擴充模組 %s。',
|
'Please use one of the extensions %s.' => '請使用下列其中一個 extension %s。',
|
||||||
'now' => '現在',
|
'now' => '現在',
|
||||||
'ltr' => 'ltr',
|
'ltr' => 'ltr',
|
||||||
'Tables have been copied.' => '資料表已經複製',
|
'Tables have been copied.' => '表格已經複製',
|
||||||
'Copy' => '複製',
|
'Copy' => '複製',
|
||||||
'Permanent link' => '永久連結',
|
'Permanent link' => '永久鏈接',
|
||||||
'Edit all' => '編輯全部',
|
'Edit all' => '編輯全部',
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
'HH:MM:SS' => 'HH:MM:SS',
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -9,26 +9,26 @@ $translations = array(
|
|||||||
'Select database' => '选择数据库',
|
'Select database' => '选择数据库',
|
||||||
'Invalid database.' => '无效数据库。',
|
'Invalid database.' => '无效数据库。',
|
||||||
'Create new database' => '创建新数据库',
|
'Create new database' => '创建新数据库',
|
||||||
'Table has been dropped.' => '已删除表。',
|
'Table has been dropped.' => '已丢弃表。',
|
||||||
'Table has been altered.' => '已修改表。',
|
'Table has been altered.' => '已更改表。',
|
||||||
'Table has been created.' => '已创建表。',
|
'Table has been created.' => '已创建表。',
|
||||||
'Alter table' => '修改表',
|
'Alter table' => '更改表',
|
||||||
'Create table' => '创建表',
|
'Create table' => '创建表',
|
||||||
'Table name' => '表名',
|
'Table name' => '表名',
|
||||||
'engine' => '引擎',
|
'engine' => '引擎',
|
||||||
'collation' => '校对',
|
'collation' => '校对',
|
||||||
'Column name' => '字段名',
|
'Column name' => '列名',
|
||||||
'Type' => '类型',
|
'Type' => '类型',
|
||||||
'Length' => '长度',
|
'Length' => '长度',
|
||||||
'Auto Increment' => '自动增量',
|
'Auto Increment' => '自动增量',
|
||||||
'Options' => '选项',
|
'Options' => '选项',
|
||||||
'Save' => '保存',
|
'Save' => '保存',
|
||||||
'Drop' => '删除',
|
'Drop' => '丢弃',
|
||||||
'Database has been dropped.' => '已删除数据库。',
|
'Database has been dropped.' => '已丢弃数据库。',
|
||||||
'Database has been created.' => '已创建数据库。',
|
'Database has been created.' => '已创建数据库。',
|
||||||
'Database has been renamed.' => '已重命名数据库。',
|
'Database has been renamed.' => '已重命名数据库。',
|
||||||
'Database has been altered.' => '已修改数据库。',
|
'Database has been altered.' => '已更改数据库。',
|
||||||
'Alter database' => '修改数据库',
|
'Alter database' => '更改数据库',
|
||||||
'Create database' => '创建数据库',
|
'Create database' => '创建数据库',
|
||||||
'SQL command' => 'SQL命令',
|
'SQL command' => 'SQL命令',
|
||||||
'Dump' => '导出',
|
'Dump' => '导出',
|
||||||
@@ -37,6 +37,7 @@ $translations = array(
|
|||||||
'Use' => '使用',
|
'Use' => '使用',
|
||||||
'No tables.' => '没有表。',
|
'No tables.' => '没有表。',
|
||||||
'select' => '选择',
|
'select' => '选择',
|
||||||
|
'Create new table' => '创建新表',
|
||||||
'Item has been deleted.' => '已删除项目。',
|
'Item has been deleted.' => '已删除项目。',
|
||||||
'Item has been updated.' => '已更新项目。',
|
'Item has been updated.' => '已更新项目。',
|
||||||
'Item%s has been inserted.' => '已插入项目%s。',
|
'Item%s has been inserted.' => '已插入项目%s。',
|
||||||
@@ -46,22 +47,22 @@ $translations = array(
|
|||||||
'Delete' => '删除',
|
'Delete' => '删除',
|
||||||
'Database' => '数据库',
|
'Database' => '数据库',
|
||||||
'Routines' => '子程序',
|
'Routines' => '子程序',
|
||||||
'Indexes have been altered.' => '已修改索引。',
|
'Indexes have been altered.' => '已更改索引。',
|
||||||
'Indexes' => '索引',
|
'Indexes' => '索引',
|
||||||
'Alter indexes' => '修改索引',
|
'Alter indexes' => '更改索引',
|
||||||
'Add next' => '下一行插入',
|
'Add next' => '添加下一个',
|
||||||
'Language' => '语言',
|
'Language' => '语言',
|
||||||
'Select' => '选择',
|
'Select' => '选择',
|
||||||
'New item' => '新建数据',
|
'New item' => '新建项',
|
||||||
'Search' => '搜索',
|
'Search' => '搜索',
|
||||||
'Sort' => '排序',
|
'Sort' => '排序',
|
||||||
'descending' => '降序',
|
'descending' => '降序',
|
||||||
'Limit' => '范围',
|
'Limit' => '限定',
|
||||||
'No rows.' => '无数据。',
|
'No rows.' => '没有行。',
|
||||||
'Action' => '动作',
|
'Action' => '动作',
|
||||||
'edit' => '编辑',
|
'edit' => '编辑',
|
||||||
'Page' => '页面',
|
'Page' => '页面',
|
||||||
'Query executed OK, %d row(s) affected.' => '查询执行完毕,%d 行受影响。',
|
'Query executed OK, %d row(s) affected.' => '执行查询OK,%d 行受影响。',
|
||||||
'Error in query' => '查询出错',
|
'Error in query' => '查询出错',
|
||||||
'Execute' => '执行',
|
'Execute' => '执行',
|
||||||
'Table' => '表',
|
'Table' => '表',
|
||||||
@@ -73,7 +74,7 @@ $translations = array(
|
|||||||
'Comment' => '注释',
|
'Comment' => '注释',
|
||||||
'Default values' => '默认值',
|
'Default values' => '默认值',
|
||||||
'%d byte(s)' => '%d 字节',
|
'%d byte(s)' => '%d 字节',
|
||||||
'No commands to execute.' => '没有命令被执行。',
|
'No commands to execute.' => '没有命令执行。',
|
||||||
'Unable to upload a file.' => '不能上传文件。',
|
'Unable to upload a file.' => '不能上传文件。',
|
||||||
'File upload' => '文件上传',
|
'File upload' => '文件上传',
|
||||||
'File uploads are disabled.' => '文件上传被禁用。',
|
'File uploads are disabled.' => '文件上传被禁用。',
|
||||||
@@ -81,28 +82,28 @@ $translations = array(
|
|||||||
'Call' => '调用',
|
'Call' => '调用',
|
||||||
'No extension' => '没有扩展',
|
'No extension' => '没有扩展',
|
||||||
'None of the supported PHP extensions (%s) are available.' => '没有支持的 PHP 扩展可用(%s)。',
|
'None of the supported PHP extensions (%s) are available.' => '没有支持的 PHP 扩展可用(%s)。',
|
||||||
'Session support must be enabled.' => 'Session 必须被启用。',
|
'Session support must be enabled.' => '会话必须被启用。',
|
||||||
'Session expired, please login again.' => 'Session 已过期,请重新登录。',
|
'Session expired, please login again.' => '会话已过期,请重新登录。',
|
||||||
'Text length' => '文本显示限制',
|
'Text length' => '文本长度',
|
||||||
'Foreign key has been dropped.' => '已删除外键。',
|
'Foreign key has been dropped.' => '已删除外键。',
|
||||||
'Foreign key has been altered.' => '已修改外键。',
|
'Foreign key has been altered.' => '已更改外键。',
|
||||||
'Foreign key has been created.' => '已创建外键。',
|
'Foreign key has been created.' => '已创建外键。',
|
||||||
'Foreign key' => '外键',
|
'Foreign key' => '外键',
|
||||||
'Target table' => '目标表',
|
'Target table' => '目标表',
|
||||||
'Change' => '修改',
|
'Change' => '更改',
|
||||||
'Source' => '源',
|
'Source' => '源',
|
||||||
'Target' => '目标',
|
'Target' => '目标',
|
||||||
'Add column' => '增加列',
|
'Add column' => '增加列',
|
||||||
'Alter' => '修改',
|
'Alter' => '更改',
|
||||||
'Add foreign key' => '添加外键',
|
'Add foreign key' => '添加外键',
|
||||||
'ON DELETE' => 'ON DELETE',
|
'ON DELETE' => 'ON DELETE',
|
||||||
'ON UPDATE' => 'ON UPDATE',
|
'ON UPDATE' => 'ON UPDATE',
|
||||||
'Index Type' => '索引类型',
|
'Index Type' => '索引类型',
|
||||||
'Column (length)' => '列(长度)',
|
'Column (length)' => '列(长度)',
|
||||||
'View has been dropped.' => '已删除视图。',
|
'View has been dropped.' => '已丢弃视图。',
|
||||||
'View has been altered.' => '已修改视图。',
|
'View has been altered.' => '已更改视图。',
|
||||||
'View has been created.' => '已创建视图。',
|
'View has been created.' => '已创建视图。',
|
||||||
'Alter view' => '修改视图',
|
'Alter view' => '更改视图',
|
||||||
'Create view' => '创建视图',
|
'Create view' => '创建视图',
|
||||||
'Name' => '名称',
|
'Name' => '名称',
|
||||||
'Process list' => '进程列表',
|
'Process list' => '进程列表',
|
||||||
@@ -112,35 +113,35 @@ $translations = array(
|
|||||||
'Database schema' => '数据库概要',
|
'Database schema' => '数据库概要',
|
||||||
'Create procedure' => '创建过程',
|
'Create procedure' => '创建过程',
|
||||||
'Create function' => '创建函数',
|
'Create function' => '创建函数',
|
||||||
'Routine has been dropped.' => '已删除子程序。',
|
'Routine has been dropped.' => '已丢弃子程序。',
|
||||||
'Routine has been altered.' => '已修改子程序。',
|
'Routine has been altered.' => '已更改子程序。',
|
||||||
'Routine has been created.' => '已创建子程序。',
|
'Routine has been created.' => '已创建子程序。',
|
||||||
'Alter function' => '修改函数',
|
'Alter function' => '更改函数',
|
||||||
'Alter procedure' => '修改过程',
|
'Alter procedure' => '更改过程',
|
||||||
'Return type' => '返回类型',
|
'Return type' => '返回类型',
|
||||||
'Add trigger' => '创建触发器',
|
'Add trigger' => '创建触发器',
|
||||||
'Trigger has been dropped.' => '已删除触发器。',
|
'Trigger has been dropped.' => '已丢弃触发器。',
|
||||||
'Trigger has been altered.' => '已修改触发器。',
|
'Trigger has been altered.' => '已更改触发器。',
|
||||||
'Trigger has been created.' => '已创建触发器。',
|
'Trigger has been created.' => '已创建触发器。',
|
||||||
'Alter trigger' => '修改触发器',
|
'Alter trigger' => '更改触发器',
|
||||||
'Create trigger' => '创建触发器',
|
'Create trigger' => '创建触发器',
|
||||||
'Time' => '时间',
|
'Time' => '时间',
|
||||||
'Event' => '事件',
|
'Event' => '事件',
|
||||||
'%s version: %s through PHP extension %s' => '%s 版本:%s, 使用PHP扩展 %s',
|
'%s version: %s through PHP extension %s' => '%s 版本:%s 通过 PHP 扩展 %s',
|
||||||
'%d row(s)' => '%d 行',
|
'%d row(s)' => '%d 行',
|
||||||
'Remove' => '移除',
|
'Remove' => '移除',
|
||||||
'Are you sure?' => '你确定吗?',
|
'Are you sure?' => '你确定吗?',
|
||||||
'Privileges' => '权限',
|
'Privileges' => '权限',
|
||||||
'Create user' => '创建用户',
|
'Create user' => '创建用户',
|
||||||
'User has been dropped.' => '已删除用户。',
|
'User has been dropped.' => '已丢弃用户。',
|
||||||
'User has been altered.' => '已修改用户。',
|
'User has been altered.' => '已更改用户。',
|
||||||
'User has been created.' => '已创建用户。',
|
'User has been created.' => '已创建用户。',
|
||||||
'Hashed' => 'Hashed',
|
'Hashed' => 'Hashed',
|
||||||
'Column' => '列',
|
'Column' => '列',
|
||||||
'Routine' => '子程序',
|
'Routine' => '子程序',
|
||||||
'Grant' => '授权',
|
'Grant' => '授权',
|
||||||
'Revoke' => '废除',
|
'Revoke' => '废除',
|
||||||
'Logged as: %s' => '登录用户:%s',
|
'Logged as: %s' => '登录为:%s',
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => '太大的 POST 数据。减少数据或者增加 %s 配置命令。',
|
'Too big POST data. Reduce the data or increase the %s configuration directive.' => '太大的 POST 数据。减少数据或者增加 %s 配置命令。',
|
||||||
'Move up' => '上移',
|
'Move up' => '上移',
|
||||||
'Move down' => '下移',
|
'Move down' => '下移',
|
||||||
@@ -153,10 +154,10 @@ $translations = array(
|
|||||||
'Format' => '格式',
|
'Format' => '格式',
|
||||||
'Functions' => '函数',
|
'Functions' => '函数',
|
||||||
'Aggregation' => '集合',
|
'Aggregation' => '集合',
|
||||||
'Event has been dropped.' => '已删除事件。',
|
'Event has been dropped.' => '已丢弃事件。',
|
||||||
'Event has been altered.' => '已修改事件。',
|
'Event has been altered.' => '已更改事件。',
|
||||||
'Event has been created.' => '已创建事件。',
|
'Event has been created.' => '已创建事件。',
|
||||||
'Alter event' => '修改事件',
|
'Alter event' => '更改事件',
|
||||||
'Create event' => '创建事件',
|
'Create event' => '创建事件',
|
||||||
'Start' => '开始',
|
'Start' => '开始',
|
||||||
'End' => '结束',
|
'End' => '结束',
|
||||||
@@ -176,7 +177,6 @@ $translations = array(
|
|||||||
'Data Free' => '数据空闲',
|
'Data Free' => '数据空闲',
|
||||||
'Rows' => '行数',
|
'Rows' => '行数',
|
||||||
',' => ',',
|
',' => ',',
|
||||||
'0123456789' => '0123456789',
|
|
||||||
'Analyze' => '分析',
|
'Analyze' => '分析',
|
||||||
'Optimize' => '优化',
|
'Optimize' => '优化',
|
||||||
'Check' => '检查',
|
'Check' => '检查',
|
||||||
@@ -188,8 +188,8 @@ $translations = array(
|
|||||||
'original' => '原始',
|
'original' => '原始',
|
||||||
'%d item(s) have been affected.' => '%d 个项目受到影响。',
|
'%d item(s) have been affected.' => '%d 个项目受到影响。',
|
||||||
'whole result' => '所有结果',
|
'whole result' => '所有结果',
|
||||||
'Tables have been dropped.' => '已删除表。',
|
'Tables have been dropped.' => '已丢弃表。',
|
||||||
'Clone' => '复制',
|
'Clone' => '克隆',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => '超过最多允许的字段数量。请增加 %s。',
|
'Maximum number of allowed fields exceeded. Please increase %s.' => '超过最多允许的字段数量。请增加 %s。',
|
||||||
'Partition by' => '分区类型',
|
'Partition by' => '分区类型',
|
||||||
'Partitions' => '分区',
|
'Partitions' => '分区',
|
||||||
@@ -224,24 +224,25 @@ $translations = array(
|
|||||||
'File does not exist.' => '文件不存在。',
|
'File does not exist.' => '文件不存在。',
|
||||||
'%d in total' => '共计 %d',
|
'%d in total' => '共计 %d',
|
||||||
'Permanent login' => '保持登录',
|
'Permanent login' => '保持登录',
|
||||||
'Databases have been dropped.' => '已删除数据库。',
|
'Databases have been dropped.' => '已丢弃数据库。',
|
||||||
'Search data in tables' => '在表中搜索数据',
|
'Search data in tables' => '在表中搜索数据',
|
||||||
|
'schema' => '模式',
|
||||||
'Schema' => '模式',
|
'Schema' => '模式',
|
||||||
'Alter schema' => '修改模式',
|
'Alter schema' => '更改模式',
|
||||||
'Create schema' => '创建模式',
|
'Create schema' => '创建模式',
|
||||||
'Schema has been dropped.' => '已删除模式。',
|
'Schema has been dropped.' => '已丢弃模式。',
|
||||||
'Schema has been created.' => '已创建模式。',
|
'Schema has been created.' => '已创建模式。',
|
||||||
'Schema has been altered.' => '已修改模式。',
|
'Schema has been altered.' => '已更改模式。',
|
||||||
'Sequences' => '序列',
|
'Sequences' => '序列',
|
||||||
'Create sequence' => '创建序列',
|
'Create sequence' => '创建序列',
|
||||||
'Alter sequence' => '修改序列',
|
'Alter sequence' => '更改序列',
|
||||||
'Sequence has been dropped.' => '已删除序列。',
|
'Sequence has been dropped.' => '已丢弃序列。',
|
||||||
'Sequence has been created.' => '已创建序列。',
|
'Sequence has been created.' => '已创建序列。',
|
||||||
'Sequence has been altered.' => '已修改序列。',
|
'Sequence has been altered.' => '已更改序列。',
|
||||||
'User types' => '用户类型',
|
'User types' => '用户类型',
|
||||||
'Create type' => '创建类型',
|
'Create type' => '创建类型',
|
||||||
'Alter type' => '修改类型',
|
'Alter type' => '更改类型',
|
||||||
'Type has been dropped.' => '已删除类型。',
|
'Type has been dropped.' => '已丢弃类型。',
|
||||||
'Type has been created.' => '已创建类型。',
|
'Type has been created.' => '已创建类型。',
|
||||||
'Use edit link to modify this value.' => '使用编辑链接来修改该值。',
|
'Use edit link to modify this value.' => '使用编辑链接来修改该值。',
|
||||||
'last' => '最后',
|
'last' => '最后',
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ function adminer_object() {
|
|||||||
// specify enabled plugins here
|
// specify enabled plugins here
|
||||||
new AdminerDatabaseHide(array('information_schema')),
|
new AdminerDatabaseHide(array('information_schema')),
|
||||||
new AdminerDumpJson,
|
new AdminerDumpJson,
|
||||||
new AdminerDumpBz2,
|
|
||||||
new AdminerDumpZip,
|
new AdminerDumpZip,
|
||||||
new AdminerDumpXml,
|
new AdminerDumpXml,
|
||||||
new AdminerDumpAlter,
|
new AdminerDumpAlter,
|
||||||
|
|||||||
@@ -26,4 +26,4 @@ if (!$grant || DB != "") {
|
|||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
echo "</form>\n";
|
echo "</form>\n";
|
||||||
|
|
||||||
echo '<p class="links"><a href="' . h(ME) . 'user=">' . lang('Create user') . "</a>";
|
echo '<p><a href="' . h(ME) . 'user=">' . lang('Create user') . "</a>";
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ $routine_languages = routine_languages();
|
|||||||
<form action="" method="post" id="form">
|
<form action="" method="post" id="form">
|
||||||
<p><?php echo lang('Name'); ?>: <input name="name" value="<?php echo h($row["name"]); ?>" maxlength="64" autocapitalize="off">
|
<p><?php echo lang('Name'); ?>: <input name="name" value="<?php echo h($row["name"]); ?>" maxlength="64" autocapitalize="off">
|
||||||
<?php echo ($routine_languages ? lang('Language') . ": " . html_select("language", $routine_languages, $row["language"]) : ""); ?>
|
<?php echo ($routine_languages ? lang('Language') . ": " . html_select("language", $routine_languages, $row["language"]) : ""); ?>
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
|
||||||
<table cellspacing="0" class="nowrap">
|
<table cellspacing="0" class="nowrap">
|
||||||
<?php
|
<?php
|
||||||
edit_fields($row["fields"], $collations, $routine);
|
edit_fields($row["fields"], $collations, $routine);
|
||||||
|
|||||||
@@ -22,11 +22,10 @@ foreach (process_list() as $i => $row) {
|
|||||||
if (!$i) {
|
if (!$i) {
|
||||||
echo "<thead><tr lang='en'>" . (support("kill") ? "<th> " : "");
|
echo "<thead><tr lang='en'>" . (support("kill") ? "<th> " : "");
|
||||||
foreach ($row as $key => $val) {
|
foreach ($row as $key => $val) {
|
||||||
echo "<th>$key" . doc_link(array(
|
echo "<th>" . ($jush == "sql"
|
||||||
'sql' => "show-processlist.html#processlist_" . strtolower($key),
|
? "<a href='http://dev.mysql.com/doc/refman/" . substr($connection->server_info, 0, 3) . "/en/show-processlist.html#processlist_" . strtolower($key) . "' target='_blank' rel='noreferrer' class='help'>$key</a>"
|
||||||
'pgsql' => "monitoring-stats.html#PG-STAT-ACTIVITY-VIEW",
|
: $key
|
||||||
'oracle' => "../b14237/dynviews_2088.htm",
|
);
|
||||||
));
|
|
||||||
}
|
}
|
||||||
echo "</thead>\n";
|
echo "</thead>\n";
|
||||||
}
|
}
|
||||||
@@ -34,7 +33,7 @@ foreach (process_list() as $i => $row) {
|
|||||||
echo "<tr" . odd() . ">" . (support("kill") ? "<td>" . checkbox("kill[]", $row["Id"], 0) : "");
|
echo "<tr" . odd() . ">" . (support("kill") ? "<td>" . checkbox("kill[]", $row["Id"], 0) : "");
|
||||||
foreach ($row as $key => $val) {
|
foreach ($row as $key => $val) {
|
||||||
echo "<td>" . (
|
echo "<td>" . (
|
||||||
($jush == "sql" && $key == "Info" && preg_match("~Query|Killed~", $row["Command"]) && $val != "") ||
|
($jush == "sql" && $key == "Info" && ereg("Query|Killed", $row["Command"]) && $val != "") ||
|
||||||
($jush == "pgsql" && $key == "current_query" && $val != "<IDLE>") ||
|
($jush == "pgsql" && $key == "current_query" && $val != "<IDLE>") ||
|
||||||
($jush == "oracle" && $key == "sql_text" && $val != "")
|
($jush == "oracle" && $key == "sql_text" && $val != "")
|
||||||
? "<code class='jush-$jush'>" . shorten_utf8($val, 100, "</code>") . ' <a href="' . h(ME . ($row["db"] != "" ? "db=" . urlencode($row["db"]) . "&" : "") . "sql=" . urlencode($val)) . '">' . lang('Clone') . '</a>'
|
? "<code class='jush-$jush'>" . shorten_utf8($val, 100, "</code>") . ' <a href="' . h(ME . ($row["db"] != "" ? "db=" . urlencode($row["db"]) . "&" : "") . "sql=" . urlencode($val)) . '">' . lang('Clone') . '</a>'
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
page_header(lang('Database schema'), "", array(), h(DB . ($_GET["ns"] ? ".$_GET[ns]" : "")));
|
page_header(lang('Database schema'), "", array(), DB . ($_GET["ns"] ? ".$_GET[ns]" : ""));
|
||||||
|
|
||||||
$table_pos = array();
|
$table_pos = array();
|
||||||
$table_pos_js = array();
|
$table_pos_js = array();
|
||||||
@@ -108,4 +108,4 @@ foreach ($schema as $name => $table) {
|
|||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
</div>
|
</div>
|
||||||
<p class="links"><a href="<?php echo h(ME . "schema=" . urlencode($SCHEMA)); ?>" id="schema-link"><?php echo lang('Permanent link'); ?></a>
|
<p><a href="<?php echo h(ME . "schema=" . urlencode($SCHEMA)); ?>" id="schema-link"><?php echo lang('Permanent link'); ?></a>
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ if ($_GET["script"] == "db") {
|
|||||||
}
|
}
|
||||||
foreach ($sums + array("Auto_increment" => 0, "Rows" => 0) as $key => $val) {
|
foreach ($sums + array("Auto_increment" => 0, "Rows" => 0) as $key => $val) {
|
||||||
if ($table_status[$key] != "") {
|
if ($table_status[$key] != "") {
|
||||||
$val = format_number($table_status[$key]);
|
$val = number_format($table_status[$key], 0, '.', lang(','));
|
||||||
json_row("$key-$id", ($key == "Rows" && $val && $table_status["Engine"] == ($sql == "pgsql" ? "table" : "InnoDB")
|
json_row("$key-$id", ($key == "Rows" && $val && $table_status["Engine"] == ($sql == "pgsql" ? "table" : "InnoDB")
|
||||||
? "~ $val"
|
? "~ $val"
|
||||||
: $val
|
: $val
|
||||||
@@ -28,7 +28,7 @@ if ($_GET["script"] == "db") {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach ($sums as $key => $val) {
|
foreach ($sums as $key => $val) {
|
||||||
json_row("sum-$key", format_number($val));
|
json_row("sum-$key", number_format($val, 0, '.', lang(',')));
|
||||||
}
|
}
|
||||||
json_row("");
|
json_row("");
|
||||||
|
|
||||||
@@ -37,8 +37,7 @@ if ($_GET["script"] == "db") {
|
|||||||
|
|
||||||
} else { // connect
|
} else { // connect
|
||||||
foreach (count_tables($adminer->databases()) as $db => $val) {
|
foreach (count_tables($adminer->databases()) as $db => $val) {
|
||||||
json_row("tables-$db", $val);
|
json_row("tables-" . js_escape($db), $val);
|
||||||
json_row("size-$db", db_size($db));
|
|
||||||
}
|
}
|
||||||
json_row("");
|
json_row("");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
$TABLE = $_GET["select"];
|
$TABLE = $_GET["select"];
|
||||||
$table_status = table_status1($TABLE);
|
$table_status = table_status($TABLE);
|
||||||
$indexes = indexes($TABLE);
|
$indexes = indexes($TABLE);
|
||||||
$fields = fields($TABLE);
|
$fields = fields($TABLE);
|
||||||
$foreign_keys = column_foreign_keys($TABLE);
|
$foreign_keys = column_foreign_keys($TABLE);
|
||||||
$oid = "";
|
$oid = "";
|
||||||
if ($table_status["Oid"]) {
|
if ($table_status["Oid"] == "t") {
|
||||||
$oid = ($jush == "sqlite" ? "rowid" : "oid");
|
$oid = ($jush == "sqlite" ? "rowid" : "oid");
|
||||||
$indexes[] = array("type" => "PRIMARY", "columns" => array($oid));
|
$indexes[] = array("type" => "PRIMARY", "columns" => array($oid));
|
||||||
}
|
}
|
||||||
@@ -39,24 +39,15 @@ if ($_GET["val"] && is_ajax()) {
|
|||||||
header("Content-Type: text/plain; charset=utf-8");
|
header("Content-Type: text/plain; charset=utf-8");
|
||||||
foreach ($_GET["val"] as $unique_idf => $row) {
|
foreach ($_GET["val"] as $unique_idf => $row) {
|
||||||
$as = convert_field($fields[key($row)]);
|
$as = convert_field($fields[key($row)]);
|
||||||
$select = array($as ? $as : idf_escape(key($row)));
|
echo $connection->result("SELECT" . limit($as ? $as : idf_escape(key($row)) . " FROM " . table($TABLE), " WHERE " . where_check($unique_idf, $fields) . ($where ? " AND " . implode(" AND ", $where) : "") . ($order ? " ORDER BY " . implode(", ", $order) : ""), 1));
|
||||||
$where[] = where_check($unique_idf, $fields);
|
|
||||||
$return = $driver->select($TABLE, $select, $where, $select);
|
|
||||||
if ($return) {
|
|
||||||
echo reset($return->fetch_row());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($_POST && !$error) {
|
if ($_POST && !$error) {
|
||||||
$where_check = $where;
|
$where_check = $where;
|
||||||
if (!$_POST["all"] && is_array($_POST["check"])) {
|
if (is_array($_POST["check"])) {
|
||||||
$checks = array();
|
$where_check[] = "((" . implode(") OR (", array_map('where_check', $_POST["check"])) . "))";
|
||||||
foreach ($_POST["check"] as $check) {
|
|
||||||
$checks[] = where_check($check, $fields);
|
|
||||||
}
|
|
||||||
$where_check[] = "((" . implode(") OR (", $checks) . "))";
|
|
||||||
}
|
}
|
||||||
$where_check = ($where_check ? "\nWHERE " . implode(" AND ", $where_check) : "");
|
$where_check = ($where_check ? "\nWHERE " . implode(" AND ", $where_check) : "");
|
||||||
$primary = $unselected = null;
|
$primary = $unselected = null;
|
||||||
@@ -95,39 +86,38 @@ if ($_POST && !$error) {
|
|||||||
if ($_POST["save"] || $_POST["delete"]) { // edit
|
if ($_POST["save"] || $_POST["delete"]) { // edit
|
||||||
$result = true;
|
$result = true;
|
||||||
$affected = 0;
|
$affected = 0;
|
||||||
|
$query = table($TABLE);
|
||||||
$set = array();
|
$set = array();
|
||||||
if (!$_POST["delete"]) {
|
if (!$_POST["delete"]) {
|
||||||
foreach ($columns as $name => $val) { //! should check also for edit or insert privileges
|
foreach ($columns as $name => $val) { //! should check also for edit or insert privileges
|
||||||
$val = process_input($fields[$name]);
|
$val = process_input($fields[$name]);
|
||||||
if ($val !== null && ($_POST["clone"] || $val !== false)) {
|
if ($val !== null) {
|
||||||
$set[idf_escape($name)] = ($val !== false ? $val : idf_escape($name));
|
if ($_POST["clone"]) {
|
||||||
|
$set[idf_escape($name)] = ($val !== false ? $val : idf_escape($name));
|
||||||
|
} elseif ($val !== false) {
|
||||||
|
$set[] = idf_escape($name) . " = $val";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$query .= ($_POST["clone"] ? " (" . implode(", ", array_keys($set)) . ")\nSELECT " . implode(", ", $set) . "\nFROM " . table($TABLE) : " SET\n" . implode(",\n", $set));
|
||||||
}
|
}
|
||||||
if ($_POST["delete"] || $set) {
|
if ($_POST["delete"] || $set) {
|
||||||
if ($_POST["clone"]) {
|
$command = "UPDATE";
|
||||||
$query = "INTO " . table($TABLE) . " (" . implode(", ", array_keys($set)) . ")\nSELECT " . implode(", ", $set) . "\nFROM " . table($TABLE);
|
if ($_POST["delete"]) {
|
||||||
|
$command = "DELETE";
|
||||||
|
$query = "FROM $query";
|
||||||
}
|
}
|
||||||
if ($_POST["all"] || ($unselected === array() && is_array($_POST["check"])) || $is_group) {
|
if ($_POST["clone"]) {
|
||||||
$result = ($_POST["delete"]
|
$command = "INSERT";
|
||||||
? $driver->delete($TABLE, $where_check)
|
$query = "INTO $query";
|
||||||
: ($_POST["clone"]
|
}
|
||||||
? queries("INSERT $query$where_check")
|
if ($_POST["all"] || ($unselected === array() && $_POST["check"]) || $is_group) {
|
||||||
: $driver->update($TABLE, $set, $where_check)
|
$result = queries("$command $query$where_check");
|
||||||
)
|
|
||||||
);
|
|
||||||
$affected = $connection->affected_rows;
|
$affected = $connection->affected_rows;
|
||||||
} else {
|
} else {
|
||||||
foreach ((array) $_POST["check"] as $val) {
|
foreach ((array) $_POST["check"] as $val) {
|
||||||
// where is not unique so OR can't be used
|
// where is not unique so OR can't be used
|
||||||
$where2 = "\nWHERE " . ($where ? implode(" AND ", $where) . " AND " : "") . where_check($val, $fields);
|
$result = queries($command . limit1($query, "\nWHERE " . ($where ? implode(" AND ", $where) . " AND " : "") . where_check($val, $fields)));
|
||||||
$result = ($_POST["delete"]
|
|
||||||
? $driver->delete($TABLE, $where2, 1)
|
|
||||||
: ($_POST["clone"]
|
|
||||||
? queries("INSERT" . limit1($query, $where2))
|
|
||||||
: $driver->update($TABLE, $set, $where2)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -143,11 +133,7 @@ if ($_POST && !$error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
queries_redirect(remove_from_uri($_POST["all"] && $_POST["delete"] ? "page" : ""), $message, $result);
|
queries_redirect(remove_from_uri($_POST["all"] && $_POST["delete"] ? "page" : ""), $message, $result);
|
||||||
if (!$_POST["delete"]) {
|
//! display edit page in case of an error
|
||||||
edit_form($TABLE, $fields, (array) $_POST["fields"], !$_POST["clone"]);
|
|
||||||
page_footer();
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
} elseif (!$_POST["import"]) { // modify
|
} elseif (!$_POST["import"]) { // modify
|
||||||
if (!$_POST["val"]) {
|
if (!$_POST["val"]) {
|
||||||
@@ -159,15 +145,11 @@ if ($_POST && !$error) {
|
|||||||
$set = array();
|
$set = array();
|
||||||
foreach ($row as $key => $val) {
|
foreach ($row as $key => $val) {
|
||||||
$key = bracket_escape($key, 1); // 1 - back
|
$key = bracket_escape($key, 1); // 1 - back
|
||||||
$set[idf_escape($key)] = (preg_match('~char|text~', $fields[$key]["type"]) || $val != "" ? $adminer->processInput($fields[$key], $val) : "NULL");
|
$set[] = idf_escape($key) . " = " . (ereg('char|text', $fields[$key]["type"]) || $val != "" ? $adminer->processInput($fields[$key], $val) : "NULL");
|
||||||
}
|
}
|
||||||
$result = $driver->update(
|
$query = table($TABLE) . " SET " . implode(", ", $set);
|
||||||
$TABLE,
|
$where2 = " WHERE " . where_check($unique_idf, $fields) . ($where ? " AND " . implode(" AND ", $where) : "");
|
||||||
$set,
|
$result = queries("UPDATE" . ($is_group ? " $query$where2" : limit1($query, $where2))); // can change row on a different page without unique key
|
||||||
" WHERE " . ($where ? implode(" AND ", $where) . " AND " : "") . where_check($unique_idf, $fields),
|
|
||||||
!($is_group || $unselected === array()),
|
|
||||||
" "
|
|
||||||
);
|
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -176,19 +158,15 @@ if ($_POST && !$error) {
|
|||||||
queries_redirect(remove_from_uri(), lang('%d item(s) have been affected.', $affected), $result);
|
queries_redirect(remove_from_uri(), lang('%d item(s) have been affected.', $affected), $result);
|
||||||
}
|
}
|
||||||
|
|
||||||
} elseif (!is_string($file = get_file("csv_file", true))) {
|
} elseif (is_string($file = get_file("csv_file", true))) {
|
||||||
$error = upload_error($file);
|
//! character set
|
||||||
} elseif (!preg_match('~~u', $file)) {
|
|
||||||
$error = lang('File must be in UTF-8 encoding.');
|
|
||||||
} else {
|
|
||||||
cookie("adminer_import", "output=" . urlencode($adminer_import["output"]) . "&format=" . urlencode($_POST["separator"]));
|
cookie("adminer_import", "output=" . urlencode($adminer_import["output"]) . "&format=" . urlencode($_POST["separator"]));
|
||||||
$result = true;
|
$result = true;
|
||||||
$cols = array_keys($fields);
|
$cols = array_keys($fields);
|
||||||
preg_match_all('~(?>"[^"]*"|[^"\\r\\n]+)+~', $file, $matches);
|
preg_match_all('~(?>"[^"]*"|[^"\\r\\n]+)+~', $file, $matches);
|
||||||
$affected = count($matches[0]);
|
$affected = count($matches[0]);
|
||||||
$driver->begin();
|
begin();
|
||||||
$separator = ($_POST["separator"] == "csv" ? "," : ($_POST["separator"] == "tsv" ? "\t" : ";"));
|
$separator = ($_POST["separator"] == "csv" ? "," : ($_POST["separator"] == "tsv" ? "\t" : ";"));
|
||||||
$rows = array();
|
|
||||||
foreach ($matches[0] as $key => $val) {
|
foreach ($matches[0] as $key => $val) {
|
||||||
preg_match_all("~((?>\"[^\"]*\")+|[^$separator]*)$separator~", $val . $separator, $matches2);
|
preg_match_all("~((?>\"[^\"]*\")+|[^$separator]*)$separator~", $val . $separator, $matches2);
|
||||||
if (!$key && !array_diff($matches2[1], $cols)) { //! doesn't work with column names containing ",\n
|
if (!$key && !array_diff($matches2[1], $cols)) { //! doesn't work with column names containing ",\n
|
||||||
@@ -200,34 +178,37 @@ if ($_POST && !$error) {
|
|||||||
foreach ($matches2[1] as $i => $col) {
|
foreach ($matches2[1] as $i => $col) {
|
||||||
$set[idf_escape($cols[$i])] = ($col == "" && $fields[$cols[$i]]["null"] ? "NULL" : q(str_replace('""', '"', preg_replace('~^"|"$~', '', $col))));
|
$set[idf_escape($cols[$i])] = ($col == "" && $fields[$cols[$i]]["null"] ? "NULL" : q(str_replace('""', '"', preg_replace('~^"|"$~', '', $col))));
|
||||||
}
|
}
|
||||||
$rows[] = $set;
|
$result = insert_update($TABLE, $set, $primary);
|
||||||
|
if (!$result) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$result = (!$rows || $driver->insertUpdate($TABLE, $rows, $primary));
|
|
||||||
if ($result) {
|
if ($result) {
|
||||||
$driver->commit();
|
queries("COMMIT");
|
||||||
}
|
}
|
||||||
queries_redirect(remove_from_uri("page"), lang('%d row(s) have been imported.', $affected), $result);
|
queries_redirect(remove_from_uri("page"), lang('%d row(s) have been imported.', $affected), $result);
|
||||||
$driver->rollback(); // after queries_redirect() to not overwrite error
|
queries("ROLLBACK"); // after queries_redirect() to not overwrite error
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$error = upload_error($file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$table_name = $adminer->tableName($table_status);
|
$table_name = $adminer->tableName($table_status);
|
||||||
if (is_ajax()) {
|
if (is_ajax()) {
|
||||||
page_headers();
|
// needs to send headers
|
||||||
ob_start();
|
ob_start();
|
||||||
} else {
|
|
||||||
page_header(lang('Select') . ": $table_name", $error);
|
|
||||||
}
|
}
|
||||||
|
page_header(lang('Select') . ": $table_name", $error);
|
||||||
|
|
||||||
$set = null;
|
$set = null;
|
||||||
if (isset($rights["insert"]) || !support("table")) {
|
if (isset($rights["insert"])) {
|
||||||
$set = "";
|
$set = "";
|
||||||
foreach ((array) $_GET["where"] as $val) {
|
foreach ((array) $_GET["where"] as $val) {
|
||||||
if (count($foreign_keys[$val["col"]]) == 1 && ($val["op"] == "="
|
if (count($foreign_keys[$val["col"]]) == 1 && ($val["op"] == "="
|
||||||
|| (!$val["op"] && !preg_match('~[_%]~', $val["val"])) // LIKE in Editor
|
|| (!$val["op"] && !ereg('[_%]', $val["val"])) // LIKE in Editor
|
||||||
)) {
|
)) {
|
||||||
$set .= "&set" . urlencode("[" . bracket_escape($val["col"]) . "]") . "=" . urlencode($val["val"]);
|
$set .= "&set" . urlencode("[" . bracket_escape($val["col"]) . "]") . "=" . urlencode($val["val"]);
|
||||||
}
|
}
|
||||||
@@ -235,7 +216,7 @@ if (isset($rights["insert"]) || !support("table")) {
|
|||||||
}
|
}
|
||||||
$adminer->selectLinks($table_status, $set);
|
$adminer->selectLinks($table_status, $set);
|
||||||
|
|
||||||
if (!$columns && support("table")) {
|
if (!$columns) {
|
||||||
echo "<p class='error'>" . lang('Unable to select the table') . ($fields ? "." : ": " . error()) . "\n";
|
echo "<p class='error'>" . lang('Unable to select the table') . ($fields ? "." : ": " . error()) . "\n";
|
||||||
} else {
|
} else {
|
||||||
echo "<form action='' id='form'>\n";
|
echo "<form action='' id='form'>\n";
|
||||||
@@ -254,23 +235,23 @@ if (!$columns && support("table")) {
|
|||||||
|
|
||||||
$page = $_GET["page"];
|
$page = $_GET["page"];
|
||||||
if ($page == "last") {
|
if ($page == "last") {
|
||||||
$found_rows = $connection->result(count_rows($TABLE, $where, $is_group, $group));
|
$found_rows = $connection->result("SELECT COUNT(*) FROM " . table($TABLE) . ($where ? " WHERE " . implode(" AND ", $where) : ""));
|
||||||
$page = floor(max(0, $found_rows - 1) / $limit);
|
$page = floor(max(0, $found_rows - 1) / $limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
$select2 = $select;
|
$query = $adminer->selectQueryBuild($select, $where, $group, $order, $limit, $page);
|
||||||
if (!$select2) {
|
if (!$query) {
|
||||||
$select2[] = "*";
|
$query = "SELECT" . limit(
|
||||||
if ($oid) {
|
(+$limit && $group && $is_group && $jush == "sql" ? "SQL_CALC_FOUND_ROWS " : "") . $from,
|
||||||
$select2[] = $oid;
|
($where ? "\nWHERE " . implode(" AND ", $where) : "") . $group_by,
|
||||||
}
|
($limit != "" ? +$limit : null),
|
||||||
|
($page ? $limit * $page : 0),
|
||||||
|
"\n"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
$convert_fields = convert_fields($columns, $fields, $select);
|
echo $adminer->selectQuery($query);
|
||||||
if ($convert_fields) {
|
|
||||||
$select2[] = substr($convert_fields, 2);
|
|
||||||
}
|
|
||||||
$result = $driver->select($TABLE, $select2, $where, $group, $order, $limit, $page, true);
|
|
||||||
|
|
||||||
|
$result = $connection->query($query);
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
echo "<p class='error'>" . error() . "\n";
|
echo "<p class='error'>" . error() . "\n";
|
||||||
} else {
|
} else {
|
||||||
@@ -286,10 +267,12 @@ if (!$columns && support("table")) {
|
|||||||
}
|
}
|
||||||
$rows[] = $row;
|
$rows[] = $row;
|
||||||
}
|
}
|
||||||
|
|
||||||
// use count($rows) without LIMIT, COUNT(*) without grouping, FOUND_ROWS otherwise (slowest)
|
// use count($rows) without LIMIT, COUNT(*) without grouping, FOUND_ROWS otherwise (slowest)
|
||||||
if ($_GET["page"] != "last" && +$limit && $group && $is_group && $jush == "sql") {
|
if ($_GET["page"] != "last") {
|
||||||
$found_rows = $connection->result(" SELECT FOUND_ROWS()"); // space to allow mysql.trace_mode
|
$found_rows = (+$limit && $group && $is_group
|
||||||
|
? ($jush == "sql" ? $connection->result(" SELECT FOUND_ROWS()") : $connection->result("SELECT COUNT(*) FROM ($query) x")) // space to allow mysql.trace_mode
|
||||||
|
: count($rows)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$rows) {
|
if (!$rows) {
|
||||||
@@ -298,7 +281,7 @@ if (!$columns && support("table")) {
|
|||||||
$backward_keys = $adminer->backwardKeys($TABLE, $table_name);
|
$backward_keys = $adminer->backwardKeys($TABLE, $table_name);
|
||||||
|
|
||||||
echo "<table id='table' cellspacing='0' class='nowrap checkable' onclick='tableClick(event);' ondblclick='tableClick(event, true);' onkeydown='return editingKeydown(event);'>\n";
|
echo "<table id='table' cellspacing='0' class='nowrap checkable' onclick='tableClick(event);' ondblclick='tableClick(event, true);' onkeydown='return editingKeydown(event);'>\n";
|
||||||
echo "<thead><tr>" . (!$group && $select ? "" : "<td><input type='checkbox' id='all-page' onclick='formCheck(this, /check/);'> <a href='" . h($_GET["modify"] ? remove_from_uri("modify") : $_SERVER["REQUEST_URI"] . "&modify=1") . "'>" . lang('Modify') . "</a>");
|
echo "<thead><tr>" . (!$group && $select ? "" : "<td><input type='checkbox' id='all-page' onclick='formCheck(this, /check/);'> <a href='" . h($_GET["modify"] ? remove_from_uri("modify") : $_SERVER["REQUEST_URI"] . "&modify=1") . "'>" . lang('edit') . "</a>");
|
||||||
$names = array();
|
$names = array();
|
||||||
$functions = array();
|
$functions = array();
|
||||||
reset($select);
|
reset($select);
|
||||||
@@ -307,7 +290,7 @@ if (!$columns && support("table")) {
|
|||||||
if ($key != $oid) {
|
if ($key != $oid) {
|
||||||
$val = $_GET["columns"][key($select)];
|
$val = $_GET["columns"][key($select)];
|
||||||
$field = $fields[$select ? ($val ? $val["col"] : current($select)) : $key];
|
$field = $fields[$select ? ($val ? $val["col"] : current($select)) : $key];
|
||||||
$name = ($field ? $adminer->fieldName($field, $rank) : ($val["fun"] ? "*" : $key));
|
$name = ($field ? $adminer->fieldName($field, $rank) : "*");
|
||||||
if ($name != "") {
|
if ($name != "") {
|
||||||
$rank++;
|
$rank++;
|
||||||
$names[$key] = $name;
|
$names[$key] = $name;
|
||||||
@@ -316,7 +299,7 @@ if (!$columns && support("table")) {
|
|||||||
$desc = "&desc%5B0%5D=1";
|
$desc = "&desc%5B0%5D=1";
|
||||||
echo '<th onmouseover="columnMouse(this);" onmouseout="columnMouse(this, \' hidden\');">';
|
echo '<th onmouseover="columnMouse(this);" onmouseout="columnMouse(this, \' hidden\');">';
|
||||||
echo '<a href="' . h($href . ($order[0] == $column || $order[0] == $key || (!$order && $is_group && $group[0] == $column) ? $desc : '')) . '">'; // $order[0] == $key - COUNT(*)
|
echo '<a href="' . h($href . ($order[0] == $column || $order[0] == $key || (!$order && $is_group && $group[0] == $column) ? $desc : '')) . '">'; // $order[0] == $key - COUNT(*)
|
||||||
echo apply_sql_function($val["fun"], $name) . "</a>"; //! columns looking like functions
|
echo (!$select || $val ? apply_sql_function($val["fun"], $name) : h(current($select))) . "</a>"; //! columns looking like functions
|
||||||
echo "<span class='column hidden'>";
|
echo "<span class='column hidden'>";
|
||||||
echo "<a href='" . h($href . $desc) . "' title='" . lang('descending') . "' class='text'> ↓</a>";
|
echo "<a href='" . h($href . $desc) . "' title='" . lang('descending') . "' class='text'> ↓</a>";
|
||||||
if (!$val["fun"]) {
|
if (!$val["fun"]) {
|
||||||
@@ -359,7 +342,7 @@ if (!$columns && support("table")) {
|
|||||||
}
|
}
|
||||||
$unique_idf = "";
|
$unique_idf = "";
|
||||||
foreach ($unique_array as $key => $val) {
|
foreach ($unique_array as $key => $val) {
|
||||||
if (($jush == "sql" || $jush == "pgsql") && strlen($val) > 64) {
|
if (strlen($val) > 64) {
|
||||||
$key = "MD5(" . (strpos($key, '(') ? $key : idf_escape($key)) . ")"; //! columns looking like functions
|
$key = "MD5(" . (strpos($key, '(') ? $key : idf_escape($key)) . ")"; //! columns looking like functions
|
||||||
$val = md5($val);
|
$val = md5($val);
|
||||||
}
|
}
|
||||||
@@ -375,48 +358,71 @@ if (!$columns && support("table")) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$link = "";
|
$link = "";
|
||||||
if (preg_match('~blob|bytea|raw|file~', $field["type"]) && $val != "") {
|
$val = $adminer->editVal($val, $field);
|
||||||
$link = ME . 'download=' . urlencode($TABLE) . '&field=' . urlencode($key) . $unique_idf;
|
if ($val !== null) {
|
||||||
}
|
if (ereg('blob|bytea|raw|file', $field["type"]) && $val != "") {
|
||||||
if (!$link && $val !== null) { // link related items
|
$link = ME . 'download=' . urlencode($TABLE) . '&field=' . urlencode($key) . $unique_idf;
|
||||||
foreach ((array) $foreign_keys[$key] as $foreign_key) {
|
}
|
||||||
if (count($foreign_keys[$key]) == 1 || end($foreign_key["source"]) == $key) {
|
if ($val === "") { // === - may be int
|
||||||
$link = "";
|
$val = " ";
|
||||||
foreach ($foreign_key["source"] as $i => $source) {
|
} elseif ($text_length != "" && is_shortable($field)) {
|
||||||
$link .= where_link($i, $foreign_key["target"][$i], $rows[$n][$source]);
|
$val = shorten_utf8($val, max(0, +$text_length)); // usage of LEFT() would reduce traffic but complicate query - expected average speedup: .001 s VS .01 s on local network
|
||||||
}
|
} else {
|
||||||
$link = ($foreign_key["db"] != "" ? preg_replace('~([?&]db=)[^&]+~', '\\1' . urlencode($foreign_key["db"]), ME) : ME) . 'select=' . urlencode($foreign_key["table"]) . $link; // InnoDB supports non-UNIQUE keys
|
$val = h($val);
|
||||||
if (count($foreign_key["source"]) == 1) {
|
}
|
||||||
break;
|
|
||||||
|
if (!$link) { // link related items
|
||||||
|
foreach ((array) $foreign_keys[$key] as $foreign_key) {
|
||||||
|
if (count($foreign_keys[$key]) == 1 || end($foreign_key["source"]) == $key) {
|
||||||
|
$link = "";
|
||||||
|
foreach ($foreign_key["source"] as $i => $source) {
|
||||||
|
$link .= where_link($i, $foreign_key["target"][$i], $rows[$n][$source]);
|
||||||
|
}
|
||||||
|
$link = ($foreign_key["db"] != "" ? preg_replace('~([?&]db=)[^&]+~', '\\1' . urlencode($foreign_key["db"]), ME) : ME) . 'select=' . urlencode($foreign_key["table"]) . $link; // InnoDB supports non-UNIQUE keys
|
||||||
|
if (count($foreign_key["source"]) == 1) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if ($key == "COUNT(*)") { //! columns looking like functions
|
if ($key == "COUNT(*)") { //! columns looking like functions
|
||||||
$link = ME . "select=" . urlencode($TABLE);
|
$link = ME . "select=" . urlencode($TABLE);
|
||||||
$i = 0;
|
$i = 0;
|
||||||
foreach ((array) $_GET["where"] as $v) {
|
foreach ((array) $_GET["where"] as $v) {
|
||||||
if (!array_key_exists($v["col"], $unique_array)) {
|
if (!array_key_exists($v["col"], $unique_array)) {
|
||||||
$link .= where_link($i++, $v["col"], $v["val"], $v["op"]);
|
$link .= where_link($i++, $v["col"], $v["val"], $v["op"]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach ($unique_array as $k => $v) {
|
||||||
|
$link .= where_link($i++, $k, $v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach ($unique_array as $k => $v) {
|
|
||||||
$link .= where_link($i++, $k, $v);
|
}
|
||||||
|
|
||||||
|
if (!$link && ($link = $adminer->selectLink($row[$key], $field)) === null) {
|
||||||
|
if (is_mail($row[$key])) {
|
||||||
|
$link = "mailto:$row[$key]";
|
||||||
|
}
|
||||||
|
if ($protocol = is_url($row[$key])) {
|
||||||
|
$link = ($protocol == "http" && $HTTPS
|
||||||
|
? $row[$key] // HTTP links from HTTPS pages don't receive Referer automatically
|
||||||
|
: "$protocol://www.adminer.org/redirect/?url=" . urlencode($row[$key]) // intermediate page to hide Referer, may be changed to rel="noreferrer" in HTML5
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$val = select_value($val, $link, $field, $text_length);
|
|
||||||
$id = h("val[$unique_idf][" . bracket_escape($key) . "]");
|
$id = h("val[$unique_idf][" . bracket_escape($key) . "]");
|
||||||
$value = $_POST["val"][$unique_idf][bracket_escape($key)];
|
$value = $_POST["val"][$unique_idf][bracket_escape($key)];
|
||||||
$editable = !is_array($row[$key]) && is_utf8($val) && $rows[$n][$key] == $row[$key] && !$functions[$key];
|
$h_value = h($value !== null ? $value : $row[$key]);
|
||||||
$text = preg_match('~text|lob~', $field["type"]);
|
$long = strpos($val, "<i>...</i>");
|
||||||
if (($_GET["modify"] && $editable) || $value !== null) {
|
$editable = is_utf8($val) && $rows[$n][$key] == $row[$key] && !$functions[$key];
|
||||||
$h_value = h($value !== null ? $value : $row[$key]);
|
$text = ereg('text|lob', $field["type"]);
|
||||||
echo "<td>" . ($text ? "<textarea name='$id' cols='30' rows='" . (substr_count($row[$key], "\n") + 1) . "'>$h_value</textarea>" : "<input name='$id' value='$h_value' size='$lengths[$key]'>");
|
echo (($_GET["modify"] && $editable) || $value !== null
|
||||||
} else {
|
? "<td>" . ($text ? "<textarea name='$id' cols='30' rows='" . (substr_count($row[$key], "\n") + 1) . "'>$h_value</textarea>" : "<input name='$id' value='$h_value' size='$lengths[$key]'>")
|
||||||
$long = strpos($val, "<i>...</i>");
|
: "<td id='$id' onclick=\"selectClick(this, event, " . ($long ? 2 : ($text ? 1 : 0)) . ($editable ? "" : ", '" . h(lang('Use edit link to modify this value.')) . "'") . ");\">" . $adminer->selectVal($val, $link, $field)
|
||||||
echo "<td id='$id' onclick=\"selectClick(this, event, " . ($long ? 2 : ($text ? 1 : 0)) . ($editable ? "" : ", '" . h(lang('Use edit link to modify this value.')) . "'") . ");\">$val";
|
);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -431,21 +437,18 @@ if (!$columns && support("table")) {
|
|||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
|
echo (!$group && $select ? "" : "<script type='text/javascript'>tableCheck();</script>\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (($rows || $page) && !is_ajax()) {
|
if (($rows || $page) && !is_ajax()) {
|
||||||
$exact_count = true;
|
$exact_count = true;
|
||||||
if ($_GET["page"] != "last") {
|
if ($_GET["page"] != "last" && +$limit && !$is_group && ($found_rows >= $limit || $page)) {
|
||||||
if (!+$limit) {
|
$found_rows = found_rows($table_status, $where);
|
||||||
$found_rows = count($rows);
|
if ($found_rows < max(1e4, 2 * ($page + 1) * $limit)) {
|
||||||
} elseif ($jush != "sql" || !$is_group) {
|
// slow with big tables
|
||||||
$found_rows = ($is_group ? false : found_rows($table_status, $where));
|
$found_rows = reset(slow_query("SELECT COUNT(*) FROM " . table($TABLE) . ($where ? " WHERE " . implode(" AND ", $where) : "")));
|
||||||
if ($found_rows < max(1e4, 2 * ($page + 1) * $limit)) {
|
} else {
|
||||||
// slow with big tables
|
$exact_count = false;
|
||||||
$found_rows = reset(slow_query(count_rows($TABLE, $where, $is_group, $group)));
|
|
||||||
} else {
|
|
||||||
$exact_count = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -456,45 +459,32 @@ if (!$columns && support("table")) {
|
|||||||
? $page + (count($rows) >= $limit ? 2 : 1)
|
? $page + (count($rows) >= $limit ? 2 : 1)
|
||||||
: floor(($found_rows - 1) / $limit)
|
: floor(($found_rows - 1) / $limit)
|
||||||
);
|
);
|
||||||
if ($jush != "simpledb") {
|
echo '<a href="' . h(remove_from_uri("page")) . "\" onclick=\"pageClick(this.href, +prompt('" . lang('Page') . "', '" . ($page + 1) . "'), event); return false;\">" . lang('Page') . "</a>:";
|
||||||
echo '<a href="' . h(remove_from_uri("page")) . "\" onclick=\"pageClick(this.href, +prompt('" . lang('Page') . "', '" . ($page + 1) . "'), event); return false;\">" . lang('Page') . "</a>:";
|
echo pagination(0, $page) . ($page > 5 ? " ..." : "");
|
||||||
echo pagination(0, $page) . ($page > 5 ? " ..." : "");
|
for ($i = max(1, $page - 4); $i < min($max_page, $page + 5); $i++) {
|
||||||
for ($i = max(1, $page - 4); $i < min($max_page, $page + 5); $i++) {
|
echo pagination($i, $page);
|
||||||
echo pagination($i, $page);
|
|
||||||
}
|
|
||||||
if ($max_page > 0) {
|
|
||||||
echo ($page + 5 < $max_page ? " ..." : "");
|
|
||||||
echo ($exact_count && $found_rows !== false
|
|
||||||
? pagination($max_page, $page)
|
|
||||||
: " <a href='" . h(remove_from_uri("page") . "&page=last") . "' title='~$max_page'>" . lang('last') . "</a>"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
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') . '...\');" class="loadmore">' . lang('Load more data') . '</a>'
|
|
||||||
: ''
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
echo lang('Page') . ":";
|
|
||||||
echo pagination(0, $page) . ($page > 1 ? " ..." : "");
|
|
||||||
echo ($page ? pagination($page, $page) : "");
|
|
||||||
echo ($max_page > $page ? pagination($page + 1, $page) . ($max_page > $page + 1 ? " ..." : "") : "");
|
|
||||||
}
|
}
|
||||||
|
if ($max_page > 0) {
|
||||||
|
echo ($page + 5 < $max_page ? " ..." : "");
|
||||||
|
echo ($exact_count && $found_rows !== false
|
||||||
|
? pagination($max_page, $page)
|
||||||
|
: " <a href='" . h(remove_from_uri("page") . "&page=last") . "' title='~$max_page'>" . lang('last') . "</a>"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
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>' : '');
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "<p class='count'>\n";
|
echo "<p>\n";
|
||||||
echo ($found_rows !== false ? "(" . ($exact_count ? "" : "~ ") . lang('%d row(s)', $found_rows) . ") " : "");
|
echo ($found_rows !== false ? "(" . ($exact_count ? "" : "~ ") . lang('%d row(s)', $found_rows) . ") " : "");
|
||||||
$display_rows = ($exact_count ? "" : "~ ") . $found_rows;
|
echo checkbox("all", 1, 0, lang('whole result')) . "\n";
|
||||||
echo checkbox("all", 1, 0, lang('whole result'), "var checked = formChecked(this, /check/); selectCount('selected', this.checked ? '$display_rows' : checked); selectCount('selected2', this.checked || !checked ? '$display_rows' : checked);") . "\n";
|
|
||||||
|
|
||||||
if ($adminer->selectCommandPrint()) {
|
if ($adminer->selectCommandPrint()) {
|
||||||
?>
|
?>
|
||||||
<fieldset<?php echo ($_GET["modify"] ? '' : ' class="jsonly"'); ?>><legend><?php echo lang('Modify'); ?></legend><div>
|
<fieldset><legend><?php echo lang('Edit'); ?></legend><div>
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>"<?php echo ($_GET["modify"] ? '' : ' title="' . lang('Ctrl+click on a value to modify it.') . '"'); ?>>
|
<input type="submit" value="<?php echo lang('Save'); ?>"<?php echo ($_GET["modify"] ? '' : ' title="' . lang('Ctrl+click on a value to modify it.') . '" class="jsonly"'); ?>>
|
||||||
</div></fieldset>
|
|
||||||
<fieldset><legend><?php echo lang('Selected'); ?> <span id="selected"></span></legend><div>
|
|
||||||
<input type="submit" name="edit" value="<?php echo lang('Edit'); ?>">
|
<input type="submit" name="edit" value="<?php echo lang('Edit'); ?>">
|
||||||
<input type="submit" name="clone" value="<?php echo lang('Clone'); ?>">
|
<input type="submit" name="clone" value="<?php echo lang('Clone'); ?>">
|
||||||
<input type="submit" name="delete" value="<?php echo lang('Delete'); ?>"<?php echo confirm(); ?>>
|
<input type="submit" name="delete" value="<?php echo lang('Delete'); ?>" onclick="return confirm('<?php echo lang('Are you sure?'); ?> (' + (this.form['all'].checked ? <?php echo $found_rows; ?> : formChecked(this, /check/)) + ')');">
|
||||||
</div></fieldset>
|
</div></fieldset>
|
||||||
<?php
|
<?php
|
||||||
}
|
}
|
||||||
@@ -507,15 +497,13 @@ if (!$columns && support("table")) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($format) {
|
if ($format) {
|
||||||
print_fieldset("export", lang('Export') . " <span id='selected2'></span>");
|
print_fieldset("export", lang('Export'));
|
||||||
$output = $adminer->dumpOutput();
|
$output = $adminer->dumpOutput();
|
||||||
echo ($output ? html_select("output", $output, $adminer_import["output"]) . " " : "");
|
echo ($output ? html_select("output", $output, $adminer_import["output"]) . " " : "");
|
||||||
echo html_select("format", $format, $adminer_import["format"]);
|
echo html_select("format", $format, $adminer_import["format"]);
|
||||||
echo " <input type='submit' name='export' value='" . lang('Export') . "'>\n";
|
echo " <input type='submit' name='export' value='" . lang('Export') . "'>\n";
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
echo (!$group && $select ? "" : "<script type='text/javascript'>tableCheck();</script>\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($adminer->selectImportPrint()) {
|
if ($adminer->selectImportPrint()) {
|
||||||
|
|||||||
@@ -14,19 +14,18 @@ if (!$error && $_POST["clear"]) {
|
|||||||
redirect(remove_from_uri("history"));
|
redirect(remove_from_uri("history"));
|
||||||
}
|
}
|
||||||
|
|
||||||
page_header((isset($_GET["import"]) ? lang('Import') : lang('SQL command')), $error);
|
page_header(lang('SQL command'), $error);
|
||||||
|
|
||||||
if (!$error && $_POST) {
|
if (!$error && $_POST) {
|
||||||
$fp = false;
|
$fp = false;
|
||||||
if (!isset($_GET["import"])) {
|
$query = $_POST["query"];
|
||||||
$query = $_POST["query"];
|
if ($_POST["webfile"]) {
|
||||||
} elseif ($_POST["webfile"]) {
|
|
||||||
$fp = @fopen((file_exists("adminer.sql")
|
$fp = @fopen((file_exists("adminer.sql")
|
||||||
? "adminer.sql"
|
? "adminer.sql"
|
||||||
: "compress.zlib://adminer.sql.gz"
|
: "compress.zlib://adminer.sql.gz"
|
||||||
), "rb");
|
), "rb");
|
||||||
$query = ($fp ? fread($fp, 1e6) : false);
|
$query = ($fp ? fread($fp, 1e6) : false);
|
||||||
} else {
|
} elseif ($_FILES && $_FILES["sql_file"]["error"][0] != 4) { // 4 - UPLOAD_ERR_NO_FILE
|
||||||
$query = get_file("sql_file", true);
|
$query = get_file("sql_file", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36,16 +35,16 @@ if (!$error && $_POST) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($query != "" && strlen($query) < 1e6) { // don't add big queries
|
if ($query != "" && strlen($query) < 1e6) { // don't add big queries
|
||||||
$q = $query . (preg_match("~;[ \t\r\n]*\$~", $query) ? "" : ";"); //! doesn't work with DELIMITER |
|
$q = $query . (ereg(";[ \t\r\n]*\$", $query) ? "" : ";"); //! doesn't work with DELIMITER |
|
||||||
if (!$history || reset(end($history)) != $q) { // no repeated queries
|
if (!$history || reset(end($history)) != $q) { // no repeated queries
|
||||||
restart_session();
|
restart_session();
|
||||||
$history[] = array($q, time()); //! add elapsed time
|
$history[] = array($q, time());
|
||||||
set_session("queries", $history_all); // required because reference is unlinked by stop_session()
|
set_session("queries", $history_all); // required because reference is unlinked by stop_session()
|
||||||
stop_session();
|
stop_session();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$space = "(?:\\s|/\\*.*\\*/|(?:#|-- )[^\n]*\n|--\r?\n)";
|
$space = "(?:\\s|/\\*.*\\*/|(?:#|-- )[^\n]*\n|--\n)";
|
||||||
$delimiter = ";";
|
$delimiter = ";";
|
||||||
$offset = 0;
|
$offset = 0;
|
||||||
$empty = true;
|
$empty = true;
|
||||||
@@ -57,7 +56,7 @@ if (!$error && $_POST) {
|
|||||||
$errors = array();
|
$errors = array();
|
||||||
$line = 0;
|
$line = 0;
|
||||||
$parse = '[\'"' . ($jush == "sql" ? '`#' : ($jush == "sqlite" ? '`[' : ($jush == "mssql" ? '[' : ''))) . ']|/\\*|-- |$' . ($jush == "pgsql" ? '|\\$[^$]*\\$' : '');
|
$parse = '[\'"' . ($jush == "sql" ? '`#' : ($jush == "sqlite" ? '`[' : ($jush == "mssql" ? '[' : ''))) . ']|/\\*|-- |$' . ($jush == "pgsql" ? '|\\$[^$]*\\$' : '');
|
||||||
$total_start = microtime(true);
|
$total_start = microtime();
|
||||||
parse_str($_COOKIE["adminer_export"], $adminer_export);
|
parse_str($_COOKIE["adminer_export"], $adminer_export);
|
||||||
$dump_format = $adminer->dumpFormat();
|
$dump_format = $adminer->dumpFormat();
|
||||||
unset($dump_format["sql"]);
|
unset($dump_format["sql"]);
|
||||||
@@ -78,7 +77,7 @@ if (!$error && $_POST) {
|
|||||||
$offset = $pos + strlen($found);
|
$offset = $pos + strlen($found);
|
||||||
|
|
||||||
if ($found && rtrim($found) != $delimiter) { // find matching quote or comment end
|
if ($found && rtrim($found) != $delimiter) { // find matching quote or comment end
|
||||||
while (preg_match('(' . ($found == '/*' ? '\\*/' : ($found == '[' ? ']' : (preg_match('~^-- |^#~', $found) ? "\n" : preg_quote($found) . "|\\\\."))) . '|$)s', $query, $match, PREG_OFFSET_CAPTURE, $offset)) { //! respect sql_mode NO_BACKSLASH_ESCAPES
|
while (preg_match('(' . ($found == '/*' ? '\\*/' : ($found == '[' ? ']' : (ereg('^-- |^#', $found) ? "\n" : preg_quote($found) . "|\\\\."))) . '|$)s', $query, $match, PREG_OFFSET_CAPTURE, $offset)) { //! respect sql_mode NO_BACKSLASH_ESCAPES
|
||||||
$s = $match[0][0];
|
$s = $match[0][0];
|
||||||
if (!$s && $fp && !feof($fp)) {
|
if (!$s && $fp && !feof($fp)) {
|
||||||
$query .= fread($fp, 1e5);
|
$query .= fread($fp, 1e5);
|
||||||
@@ -100,7 +99,7 @@ if (!$error && $_POST) {
|
|||||||
ob_flush();
|
ob_flush();
|
||||||
flush(); // can take a long time - show the running query
|
flush(); // can take a long time - show the running query
|
||||||
}
|
}
|
||||||
$start = microtime(true);
|
$start = microtime(); // microtime(true) is available since PHP 5
|
||||||
//! don't allow changing of character_set_results, convert encoding of displayed query
|
//! don't allow changing of character_set_results, convert encoding of displayed query
|
||||||
if ($connection->multi_query($q) && is_object($connection2) && preg_match("~^$space*USE\\b~isU", $q)) {
|
if ($connection->multi_query($q) && is_object($connection2) && preg_match("~^$space*USE\\b~isU", $q)) {
|
||||||
$connection2->query($q);
|
$connection2->query($q);
|
||||||
@@ -108,7 +107,8 @@ if (!$error && $_POST) {
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
$result = $connection->store_result();
|
$result = $connection->store_result();
|
||||||
$time = " <span class='time'>(" . format_time($start) . ")</span>"
|
$end = microtime();
|
||||||
|
$time = " <span class='time'>(" . format_time($start, $end) . ")</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
|
. (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
|
||||||
;
|
;
|
||||||
|
|
||||||
@@ -136,7 +136,7 @@ if (!$error && $_POST) {
|
|||||||
$id = "explain-$commands";
|
$id = "explain-$commands";
|
||||||
echo ", <a href='#$id' onclick=\"return !toggle('$id');\">EXPLAIN</a>$export";
|
echo ", <a href='#$id' onclick=\"return !toggle('$id');\">EXPLAIN</a>$export";
|
||||||
echo "<div id='$id' class='hidden'>\n";
|
echo "<div id='$id' class='hidden'>\n";
|
||||||
select($explain, $connection2, $orgtables);
|
select($explain, $connection2, ($jush == "sql" ? "http://dev.mysql.com/doc/refman/" . substr($connection->server_info, 0, 3) . "/en/explain-output.html#explain_" : ""), $orgtables);
|
||||||
echo "</div>\n";
|
echo "</div>\n";
|
||||||
} else {
|
} else {
|
||||||
echo $export;
|
echo $export;
|
||||||
@@ -155,7 +155,7 @@ if (!$error && $_POST) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$start = microtime(true);
|
$start = $end;
|
||||||
} while ($connection->next_result());
|
} while ($connection->next_result());
|
||||||
|
|
||||||
$line += substr_count($q.$found, "\n");
|
$line += substr_count($q.$found, "\n");
|
||||||
@@ -171,7 +171,7 @@ if (!$error && $_POST) {
|
|||||||
echo "<p class='message'>" . lang('No commands to execute.') . "\n";
|
echo "<p class='message'>" . lang('No commands to execute.') . "\n";
|
||||||
} elseif ($_POST["only_errors"]) {
|
} elseif ($_POST["only_errors"]) {
|
||||||
echo "<p class='message'>" . lang('%d query(s) executed OK.', $commands - count($errors));
|
echo "<p class='message'>" . lang('%d query(s) executed OK.', $commands - count($errors));
|
||||||
echo " <span class='time'>(" . format_time($total_start) . ")</span>\n";
|
echo " <span class='time'>(" . format_time($total_start, microtime()) . ")</span>\n";
|
||||||
} elseif ($errors && $commands > 1) {
|
} elseif ($errors && $commands > 1) {
|
||||||
echo "<p class='error'>" . lang('Error in query') . ": " . implode("", $errors) . "\n";
|
echo "<p class='error'>" . lang('Error in query') . ": " . implode("", $errors) . "\n";
|
||||||
}
|
}
|
||||||
@@ -184,56 +184,48 @@ if (!$error && $_POST) {
|
|||||||
?>
|
?>
|
||||||
|
|
||||||
<form action="" method="post" enctype="multipart/form-data" id="form">
|
<form action="" method="post" enctype="multipart/form-data" id="form">
|
||||||
<?php
|
<p><?php
|
||||||
$execute = "<input type='submit' value='" . lang('Execute') . "' title='Ctrl+Enter'>";
|
$q = $_GET["sql"]; // overwrite $q from if ($_POST) to save memory
|
||||||
if (!isset($_GET["import"])) {
|
if ($_POST) {
|
||||||
$q = $_GET["sql"]; // overwrite $q from if ($_POST) to save memory
|
$q = $_POST["query"];
|
||||||
if ($_POST) {
|
} elseif ($_GET["history"] == "all") {
|
||||||
$q = $_POST["query"];
|
$q = $history;
|
||||||
} elseif ($_GET["history"] == "all") {
|
} elseif ($_GET["history"] != "") {
|
||||||
$q = $history;
|
$q = $history[$_GET["history"]][0];
|
||||||
} elseif ($_GET["history"] != "") {
|
|
||||||
$q = $history[$_GET["history"]][0];
|
|
||||||
}
|
|
||||||
echo "<p>";
|
|
||||||
textarea("query", $q, 20);
|
|
||||||
echo ($_POST ? "" : "<script type='text/javascript'>focus(document.getElementsByTagName('textarea')[0]);</script>\n");
|
|
||||||
echo "<p>$execute\n";
|
|
||||||
|
|
||||||
} else {
|
|
||||||
echo "<fieldset><legend>" . lang('File upload') . "</legend><div>";
|
|
||||||
echo (ini_bool("file_uploads")
|
|
||||||
? '<input type="file" name="sql_file[]" multiple> (< ' . ini_get("upload_max_filesize") . 'B)' // ignore post_max_size because it is for all form fields together and bytes computing would be necessary
|
|
||||||
: lang('File uploads are disabled.')
|
|
||||||
);
|
|
||||||
echo "\n$execute";
|
|
||||||
echo "</div></fieldset>\n";
|
|
||||||
echo "<fieldset><legend>" . lang('From server') . "</legend><div>";
|
|
||||||
echo lang('Webserver file %s', "<code>adminer.sql" . (extension_loaded("zlib") ? "[.gz]" : "") . "</code>");
|
|
||||||
echo ' <input type="submit" name="webfile" value="' . lang('Run file') . '">';
|
|
||||||
echo "</div></fieldset>\n";
|
|
||||||
echo "<p>";
|
|
||||||
}
|
}
|
||||||
|
textarea("query", $q, 20);
|
||||||
|
|
||||||
echo checkbox("error_stops", 1, ($_POST ? $_POST["error_stops"] : isset($_GET["import"])), lang('Stop on error')) . "\n";
|
echo ($_POST ? "" : "<script type='text/javascript'>focus(document.getElementsByTagName('textarea')[0]);</script>\n");
|
||||||
echo checkbox("only_errors", 1, ($_POST ? $_POST["only_errors"] : isset($_GET["import"])), lang('Show only errors')) . "\n";
|
echo "<p>" . (ini_bool("file_uploads")
|
||||||
echo "<input type='hidden' name='token' value='$token'>\n";
|
? lang('File upload') . ': <input type="file" name="sql_file[]" multiple'
|
||||||
|
. ($_FILES && $_FILES["sql_file"]["error"][0] != 4 ? '' : ' onchange="this.form[\'only_errors\'].checked = true;"') // 4 - UPLOAD_ERR_NO_FILE
|
||||||
|
. '> (< ' . ini_get("upload_max_filesize") . 'B)' // ignore post_max_size because it is for all form fields together and bytes computing would be necessary
|
||||||
|
: lang('File uploads are disabled.')
|
||||||
|
);
|
||||||
|
|
||||||
if (!isset($_GET["import"]) && $history) {
|
?>
|
||||||
|
<p>
|
||||||
|
<input type="submit" value="<?php echo lang('Execute'); ?>" title="Ctrl+Enter">
|
||||||
|
<?php
|
||||||
|
echo checkbox("error_stops", 1, $_POST["error_stops"], lang('Stop on error')) . "\n";
|
||||||
|
echo checkbox("only_errors", 1, $_POST["only_errors"], lang('Show only errors')) . "\n";
|
||||||
|
|
||||||
|
print_fieldset("webfile", lang('From server'), $_POST["webfile"], "document.getElementById('form')['only_errors'].checked = true; ");
|
||||||
|
echo lang('Webserver file %s', "<code>adminer.sql" . (extension_loaded("zlib") ? "[.gz]" : "") . "</code>");
|
||||||
|
echo ' <input type="submit" name="webfile" value="' . lang('Run file') . '">';
|
||||||
|
echo "</div></fieldset>\n";
|
||||||
|
|
||||||
|
if ($history) {
|
||||||
print_fieldset("history", lang('History'), $_GET["history"] != "");
|
print_fieldset("history", lang('History'), $_GET["history"] != "");
|
||||||
for ($val = end($history); $val; $val = prev($history)) { // not array_reverse() to save memory
|
for ($val = end($history); $val; $val = prev($history)) { // not array_reverse() to save memory
|
||||||
$key = key($history);
|
$key = key($history);
|
||||||
list($q, $time, $elapsed) = $val;
|
list($q, $time) = $val;
|
||||||
echo '<a href="' . h(ME . "sql=&history=$key") . '">' . lang('Edit') . "</a>"
|
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
|
||||||
. " <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 "<input type='submit' name='clear' value='" . lang('Clear') . "'>\n";
|
||||||
echo "<a href='" . h(ME . "sql=&history=all") . "'>" . lang('Edit all') . "</a>\n";
|
echo "<a href='" . h(ME . "sql=&history=all") . "'>" . lang('Edit all') . "</a>\n";
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 82 B After Width: | Height: | Size: 74 B |
@@ -1,15 +1,13 @@
|
|||||||
/** @author Ondrej Valka, http://valka.info */
|
/** @author Ondrej Valka, http://valka.info */
|
||||||
body { color: #000; background: #fff; font: 90%/1.25 Verdana, Arial, Helvetica, sans-serif; margin: 0; }
|
body { color: #000; background: #fff; font: 90%/1.25 Verdana, Arial, Helvetica, sans-serif; margin: 0; }
|
||||||
a { color: blue; text-decoration: none; }
|
a { color: blue; }
|
||||||
a:visited { color: navy; }
|
a:visited { color: navy; }
|
||||||
a:link:hover, a:visited:hover { color: red; text-decoration: underline; }
|
a:hover { color: red; }
|
||||||
a.text:hover { text-decoration: none; }
|
a.text { text-decoration: none; }
|
||||||
a.jush-help:hover { color: inherit; }
|
|
||||||
h1 { font-size: 150%; margin: 0; padding: .8em 1em; border-bottom: 1px solid #999; font-weight: normal; color: #777; background: #eee; }
|
h1 { font-size: 150%; margin: 0; padding: .8em 1em; border-bottom: 1px solid #999; font-weight: normal; color: #777; background: #eee; }
|
||||||
h2 { font-size: 150%; margin: 0 0 20px -18px; padding: .8em 1em; border-bottom: 1px solid #000; color: #000; font-weight: normal; background: #ddf; }
|
h2 { font-size: 150%; margin: 0 0 20px -18px; padding: .8em 1em; border-bottom: 1px solid #000; color: #000; font-weight: normal; background: #ddf; }
|
||||||
h3 { font-weight: normal; font-size: 130%; margin: 1em 0 0; }
|
h3 { font-weight: normal; font-size: 130%; margin: 1em 0 0; }
|
||||||
form { margin: 0; }
|
form { margin: 0; }
|
||||||
td table { width: 100%; margin: 0; }
|
|
||||||
table { margin: 1em 20px 0 0; border: 0; border-top: 1px solid #999; border-left: 1px solid #999; font-size: 90%; }
|
table { margin: 1em 20px 0 0; border: 0; border-top: 1px solid #999; border-left: 1px solid #999; font-size: 90%; }
|
||||||
td, th { border: 0; border-right: 1px solid #999; border-bottom: 1px solid #999; padding: .2em .3em; }
|
td, th { border: 0; border-right: 1px solid #999; border-bottom: 1px solid #999; padding: .2em .3em; }
|
||||||
th { background: #eee; text-align: left; }
|
th { background: #eee; text-align: left; }
|
||||||
@@ -22,14 +20,12 @@ td img { max-width: 200px; max-height: 200px; }
|
|||||||
code { background: #eee; }
|
code { background: #eee; }
|
||||||
tbody tr:hover td, tbody tr:hover th { background: #eee; }
|
tbody tr:hover td, tbody tr:hover th { background: #eee; }
|
||||||
pre { margin: 1em 0 0; }
|
pre { margin: 1em 0 0; }
|
||||||
pre, textarea { font: 100%/1.25 monospace; }
|
|
||||||
input[type=image] { vertical-align: middle; }
|
input[type=image] { vertical-align: middle; }
|
||||||
input.default { box-shadow: 1px 1px 1px #777; }
|
input.default { box-shadow: 1px 1px 1px #777; }
|
||||||
input.required { box-shadow: 1px 1px 1px red; }
|
|
||||||
.block { display: block; }
|
.block { display: block; }
|
||||||
.version { color: #777; font-size: 67%; }
|
.version { color: #777; font-size: 67%; }
|
||||||
.js .hidden, .nojs .jsonly { display: none; }
|
.js .hidden, .nojs .jsonly { display: none; }
|
||||||
.js .column { position: absolute; background: #ddf; padding: .27em 1ex .3em 0; margin-top: -.27em; }
|
.js .column { position: absolute; background: #ddf; padding: .3em 1ex .3em 0; margin-top: -.3em; }
|
||||||
.nowrap td, .nowrap th, td.nowrap { white-space: pre; }
|
.nowrap td, .nowrap th, td.nowrap { white-space: pre; }
|
||||||
.wrap td { white-space: normal; }
|
.wrap td { white-space: normal; }
|
||||||
.error { color: red; background: #fee; }
|
.error { color: red; background: #fee; }
|
||||||
@@ -48,22 +44,20 @@ input.required { box-shadow: 1px 1px 1px red; }
|
|||||||
.datetime { text-align: right; }
|
.datetime { text-align: right; }
|
||||||
.type { width: 15ex; width: auto\9; }
|
.type { width: 15ex; width: auto\9; }
|
||||||
.options select { width: 20ex; width: auto\9; }
|
.options select { width: 20ex; width: auto\9; }
|
||||||
.view { font-style: italic; }
|
|
||||||
.active { font-weight: bold; }
|
.active { font-weight: bold; }
|
||||||
.sqlarea { width: 98%; }
|
.sqlarea { width: 98%; }
|
||||||
.icon { width: 18px; height: 18px; background-color: navy; }
|
.icon { width: 18px; height: 18px; }
|
||||||
.icon:hover { background-color: red; }
|
|
||||||
.size { width: 6ex; }
|
.size { width: 6ex; }
|
||||||
.help { cursor: help; }
|
.help { cursor: help; }
|
||||||
|
.move { cursor: move; }
|
||||||
.pages { position: fixed; bottom: 0; left: 21em; padding: 5px; background: #ddf; border: 1px solid #999; }
|
.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 { 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; }
|
#menu p { padding: .8em 1em; margin: 0; border-bottom: 1px solid #ccc; }
|
||||||
#dbs { overflow: hidden; }
|
#dbs { overflow: hidden; }
|
||||||
#logins, #tables { white-space: nowrap; overflow: auto; }
|
#logins, #tables { white-space: nowrap; overflow: auto; text-overflow: ellipsis; }
|
||||||
#logins a, #tables a, #tables span { background: #fff; }
|
#logins a, #tables a { background: #fff; }
|
||||||
|
#logout { background: none; border: none; color: blue; font: inherit; padding: 0; text-decoration: underline; cursor: pointer; }
|
||||||
|
#logout:hover { color: red; }
|
||||||
#content { margin: 2em 0 0 21em; padding: 10px 20px 20px 0; }
|
#content { margin: 2em 0 0 21em; padding: 10px 20px 20px 0; }
|
||||||
#lang { position: absolute; top: 0; left: 0; line-height: 1.8em; padding: .3em 1em; }
|
#lang { position: absolute; top: 0; left: 0; line-height: 1.8em; padding: .3em 1em; }
|
||||||
#breadcrumb { white-space: nowrap; position: absolute; top: 0; left: 21em; background: #eee; height: 2em; line-height: 1.8em; padding: 0 1em; margin: 0 0 0 -18px; }
|
#breadcrumb { white-space: nowrap; position: absolute; top: 0; left: 21em; background: #eee; height: 2em; line-height: 1.8em; padding: 0 1em; margin: 0 0 0 -18px; }
|
||||||
@@ -72,11 +66,9 @@ input.required { box-shadow: 1px 1px 1px red; }
|
|||||||
#schema { margin-left: 60px; position: relative; -moz-user-select: none; -webkit-user-select: none; }
|
#schema { margin-left: 60px; position: relative; -moz-user-select: none; -webkit-user-select: none; }
|
||||||
#schema .table { border: 1px solid silver; padding: 0 2px; cursor: move; position: absolute; }
|
#schema .table { border: 1px solid silver; padding: 0 2px; cursor: move; position: absolute; }
|
||||||
#schema .references { position: absolute; }
|
#schema .references { position: absolute; }
|
||||||
#help { position: absolute; border: 1px solid #999; background: #eee; padding: 5px; font-family: monospace; z-index: 1; }
|
|
||||||
|
|
||||||
.rtl h2 { margin: 0 -18px 20px 0; }
|
.rtl h2 { margin: 0 -18px 20px 0; }
|
||||||
.rtl p, .rtl table, .rtl .error, .rtl .message { margin: 1em 0 0 20px; }
|
.rtl p, .rtl table, .rtl .error, .rtl .message { margin: 1em 0 0 20px; }
|
||||||
.rtl .logout { left: 0; right: auto; }
|
|
||||||
.rtl #content { margin: 2em 21em 0 0; padding: 10px 0 20px 20px; }
|
.rtl #content { margin: 2em 21em 0 0; padding: 10px 0 20px 20px; }
|
||||||
.rtl #breadcrumb { left: auto; right: 21em; margin: 0 -18px 0 0; }
|
.rtl #breadcrumb { left: auto; right: 21em; margin: 0 -18px 0 0; }
|
||||||
.rtl #lang, .rtl #menu { left: auto; right: 0; }
|
.rtl #lang, .rtl #menu { left: auto; right: 0; }
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 79 B After Width: | Height: | Size: 71 B |
@@ -1,37 +1,40 @@
|
|||||||
// Adminer specific functions
|
// Adminer specific functions
|
||||||
|
|
||||||
|
var jushRoot = '../externals/jush/'; // global variable to allow simple customization
|
||||||
|
|
||||||
/** Load syntax highlighting
|
/** Load syntax highlighting
|
||||||
* @param string first three characters of database system version
|
* @param string first three characters of database system version
|
||||||
*/
|
*/
|
||||||
function bodyLoad(version) {
|
function bodyLoad(version) {
|
||||||
if (window.jush) {
|
if (jushRoot) {
|
||||||
jush.create_links = ' target="_blank" rel="noreferrer"';
|
// copy of jush.style to load JS and CSS at once
|
||||||
if (version) {
|
var link = document.createElement('link');
|
||||||
for (var key in jush.urls) {
|
link.rel = 'stylesheet';
|
||||||
var obj = jush.urls;
|
link.type = 'text/css';
|
||||||
if (typeof obj[key] != 'string') {
|
link.href = jushRoot + 'jush.css';
|
||||||
obj = obj[key];
|
document.getElementsByTagName('head')[0].appendChild(link);
|
||||||
key = 0;
|
|
||||||
|
var script = document.createElement('script');
|
||||||
|
script.src = jushRoot + 'jush.js';
|
||||||
|
script.onload = function () {
|
||||||
|
if (window.jush) { // IE runs in case of an error too
|
||||||
|
jush.create_links = ' target="_blank" rel="noreferrer"';
|
||||||
|
jush.urls.sql_sqlset = jush.urls.sql[0] = jush.urls.sqlset[0] = jush.urls.sqlstatus[0] = 'http://dev.mysql.com/doc/refman/' + version + '/en/$key';
|
||||||
|
var pgsql = 'http://www.postgresql.org/docs/' + version + '/static/';
|
||||||
|
jush.urls.pgsql_pgsqlset = jush.urls.pgsql[0] = pgsql + '$key';
|
||||||
|
jush.urls.pgsqlset[0] = pgsql + 'runtime-config-$key.html#GUC-$1';
|
||||||
|
if (window.jushLinks) {
|
||||||
|
jush.custom_links = jushLinks;
|
||||||
}
|
}
|
||||||
obj[key] = obj[key]
|
jush.highlight_tag('code', 0);
|
||||||
.replace(/\/doc\/mysql/, '/doc/refman/' + version) // MySQL
|
|
||||||
.replace(/\/docs\/current/, '/docs/' + version) // PostgreSQL
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
if (window.jushLinks) {
|
script.onreadystatechange = function () {
|
||||||
jush.custom_links = jushLinks;
|
if (/^(loaded|complete)$/.test(script.readyState)) {
|
||||||
}
|
script.onload();
|
||||||
jush.highlight_tag('code', 0);
|
|
||||||
var tags = document.getElementsByTagName('textarea');
|
|
||||||
for (var i = 0; i < tags.length; i++) {
|
|
||||||
if (/(^|\s)jush-/.test(tags[i].className)) {
|
|
||||||
var pre = jush.textarea(tags[i]);
|
|
||||||
if (pre) {
|
|
||||||
setupSubmitHighlightInput(pre);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
document.body.appendChild(script);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,16 +69,14 @@ function typePassword(el, disable) {
|
|||||||
function loginDriver(driver) {
|
function loginDriver(driver) {
|
||||||
var trs = parentTag(driver, 'table').rows;
|
var trs = parentTag(driver, 'table').rows;
|
||||||
for (var i=1; i < trs.length - 1; i++) {
|
for (var i=1; i < trs.length - 1; i++) {
|
||||||
var disabled = /sqlite/.test(driver.value);
|
trs[i].className = (/sqlite/.test(driver.value) ? 'hidden' : '');
|
||||||
alterClass(trs[i], 'hidden', disabled);
|
|
||||||
trs[i].getElementsByTagName('input')[0].disabled = disabled;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var dbCtrl;
|
var dbCtrl;
|
||||||
var dbPrevious = {};
|
var dbPrevious;
|
||||||
|
|
||||||
/** Check if database should be opened to a new window
|
/** Check if database should be opened to a new window
|
||||||
* @param MouseEvent
|
* @param MouseEvent
|
||||||
@@ -83,8 +84,8 @@ var dbPrevious = {};
|
|||||||
*/
|
*/
|
||||||
function dbMouseDown(event, el) {
|
function dbMouseDown(event, el) {
|
||||||
dbCtrl = isCtrl(event);
|
dbCtrl = isCtrl(event);
|
||||||
if (dbPrevious[el.name] == undefined) {
|
if (dbPrevious == undefined) {
|
||||||
dbPrevious[el.name] = el.value;
|
dbPrevious = el.value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,14 +98,51 @@ function dbChange(el) {
|
|||||||
}
|
}
|
||||||
el.form.submit();
|
el.form.submit();
|
||||||
el.form.target = '';
|
el.form.target = '';
|
||||||
if (dbCtrl && dbPrevious[el.name] != undefined) {
|
if (dbCtrl && dbPrevious != undefined) {
|
||||||
el.value = dbPrevious[el.name];
|
el.value = dbPrevious;
|
||||||
dbPrevious[el.name] = undefined;
|
dbPrevious = undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** Handle Tab and Esc in textarea
|
||||||
|
* @param HTMLTextAreaElement
|
||||||
|
* @param KeyboardEvent
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
function textareaKeydown(target, event) {
|
||||||
|
if (!event.shiftKey && !event.altKey && !isCtrl(event)) {
|
||||||
|
if (event.keyCode == 9) { // 9 - Tab
|
||||||
|
// inspired by http://pallieter.org/Projects/insertTab/
|
||||||
|
if (target.setSelectionRange) {
|
||||||
|
var start = target.selectionStart;
|
||||||
|
var scrolled = target.scrollTop;
|
||||||
|
target.value = target.value.substr(0, start) + '\t' + target.value.substr(target.selectionEnd);
|
||||||
|
target.setSelectionRange(start + 1, start + 1);
|
||||||
|
target.scrollTop = scrolled;
|
||||||
|
return false; //! still loses focus in Opera, can be solved by handling onblur
|
||||||
|
} else if (target.createTextRange) {
|
||||||
|
document.selection.createRange().text = '\t';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (event.keyCode == 27) { // 27 - Esc
|
||||||
|
var els = target.form.elements;
|
||||||
|
for (var i=1; i < els.length; i++) {
|
||||||
|
if (els[i-1] == target) {
|
||||||
|
els[i].focus();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Check whether the query will be executed with index
|
/** Check whether the query will be executed with index
|
||||||
* @param HTMLFormElement
|
* @param HTMLFormElement
|
||||||
*/
|
*/
|
||||||
@@ -144,7 +182,7 @@ function selectFieldChange(form) {
|
|||||||
}
|
}
|
||||||
if (col && /^order/.test(select.name)) {
|
if (col && /^order/.test(select.name)) {
|
||||||
if (!(col in indexColumns)) {
|
if (!(col in indexColumns)) {
|
||||||
ok = false;
|
ok = false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -161,6 +199,30 @@ function selectFieldChange(form) {
|
|||||||
setHtml('noindex', (ok ? '' : '!'));
|
setHtml('noindex', (ok ? '' : '!'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Create edit query form
|
||||||
|
* @param MouseEvent
|
||||||
|
* @param HTMLSpanElement
|
||||||
|
* @param string
|
||||||
|
*/
|
||||||
|
function selectEditSql(event, el, label) {
|
||||||
|
var a = parentTag(event.target || event.srcElement, 'a');
|
||||||
|
if (!isCtrl(event) || (a && a.href)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var sql = el.firstChild;
|
||||||
|
var input = document.createElement('input');
|
||||||
|
input.name = 'query';
|
||||||
|
input.value = sql.textContent || sql.innerText;
|
||||||
|
input.style.width = sql.offsetWidth + 'px';
|
||||||
|
el.innerHTML = '';
|
||||||
|
el.appendChild(input);
|
||||||
|
var submit = document.createElement('input');
|
||||||
|
submit.type = 'submit';
|
||||||
|
submit.value = label;
|
||||||
|
el.appendChild(submit);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var added = '.', rowCount;
|
var added = '.', rowCount;
|
||||||
@@ -233,7 +295,7 @@ function editingAddRow(button, focus) {
|
|||||||
var tags = row.getElementsByTagName('select');
|
var tags = row.getElementsByTagName('select');
|
||||||
var tags2 = row2.getElementsByTagName('select');
|
var tags2 = row2.getElementsByTagName('select');
|
||||||
for (var i=0; i < tags.length; i++) {
|
for (var i=0; i < tags.length; i++) {
|
||||||
tags2[i].name = tags[i].name.replace(/[0-9.]+/, x);
|
tags2[i].name = tags[i].name.replace(/([0-9.]+)/, x);
|
||||||
tags2[i].selectedIndex = tags[i].selectedIndex;
|
tags2[i].selectedIndex = tags[i].selectedIndex;
|
||||||
}
|
}
|
||||||
tags = row.getElementsByTagName('input');
|
tags = row.getElementsByTagName('input');
|
||||||
@@ -255,15 +317,11 @@ function editingAddRow(button, focus) {
|
|||||||
tags[0].onchange = function () {
|
tags[0].onchange = function () {
|
||||||
editingNameChange(tags[0]);
|
editingNameChange(tags[0]);
|
||||||
};
|
};
|
||||||
tags[0].onkeyup = function () {
|
|
||||||
};
|
|
||||||
row.parentNode.insertBefore(row2, row.nextSibling);
|
row.parentNode.insertBefore(row2, row.nextSibling);
|
||||||
if (focus) {
|
if (focus) {
|
||||||
input.onchange = function () {
|
input.onchange = function () {
|
||||||
editingNameChange(input);
|
editingNameChange(input);
|
||||||
};
|
};
|
||||||
input.onkeyup = function () {
|
|
||||||
};
|
|
||||||
input.focus();
|
input.focus();
|
||||||
}
|
}
|
||||||
added += '0';
|
added += '0';
|
||||||
@@ -273,11 +331,10 @@ function editingAddRow(button, focus) {
|
|||||||
|
|
||||||
/** Remove table row for field
|
/** Remove table row for field
|
||||||
* @param HTMLInputElement
|
* @param HTMLInputElement
|
||||||
* @param string
|
|
||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
function editingRemoveRow(button, name) {
|
function editingRemoveRow(button) {
|
||||||
var field = formField(button.form, button.name.replace(/[^\[]+(.+)/, name));
|
var field = formField(button.form, button.name.replace(/drop_col(.+)/, 'fields$1[field]'));
|
||||||
field.parentNode.removeChild(field);
|
field.parentNode.removeChild(field);
|
||||||
parentTag(button, 'tr').style.display = 'none';
|
parentTag(button, 'tr').style.display = 'none';
|
||||||
return true;
|
return true;
|
||||||
@@ -293,39 +350,28 @@ function editingTypeChange(type) {
|
|||||||
var text = selectValue(type);
|
var text = selectValue(type);
|
||||||
for (var i=0; i < type.form.elements.length; i++) {
|
for (var i=0; i < type.form.elements.length; i++) {
|
||||||
var el = type.form.elements[i];
|
var el = type.form.elements[i];
|
||||||
if (el.name == name + '[length]') {
|
if (el.name == name + '[length]' && !(
|
||||||
if (!(
|
(/(char|binary)$/.test(lastType) && /(char|binary)$/.test(text))
|
||||||
(/(char|binary)$/.test(lastType) && /(char|binary)$/.test(text))
|
|| (/(enum|set)$/.test(lastType) && /(enum|set)$/.test(text))
|
||||||
|| (/(enum|set)$/.test(lastType) && /(enum|set)$/.test(text))
|
)) {
|
||||||
)) {
|
el.value = '';
|
||||||
el.value = '';
|
|
||||||
}
|
|
||||||
el.onchange.apply(el);
|
|
||||||
}
|
}
|
||||||
if (lastType == 'timestamp' && el.name == name + '[has_default]' && /timestamp/i.test(formField(type.form, name + '[default]').value)) {
|
if (lastType == 'timestamp' && el.name == name + '[has_default]' && /timestamp/i.test(formField(type.form, name + '[default]').value)) {
|
||||||
el.checked = false;
|
el.checked = false;
|
||||||
}
|
}
|
||||||
if (el.name == name + '[collation]') {
|
if (el.name == name + '[collation]') {
|
||||||
alterClass(el, 'hidden', !/(char|text|enum|set)$/.test(text));
|
el.className = (/(char|text|enum|set)$/.test(text) ? '' : 'hidden');
|
||||||
}
|
}
|
||||||
if (el.name == name + '[unsigned]') {
|
if (el.name == name + '[unsigned]') {
|
||||||
alterClass(el, 'hidden', !/((^|[^o])int|float|double|decimal)$/.test(text));
|
el.className = (/((^|[^o])int|float|double|decimal)$/.test(text) ? '' : 'hidden');
|
||||||
}
|
}
|
||||||
if (el.name == name + '[on_update]') {
|
if (el.name == name + '[on_update]') {
|
||||||
alterClass(el, 'hidden', !/timestamp|datetime/.test(text)); // MySQL supports datetime since 5.6.5
|
el.className = (text == 'timestamp' ? '' : 'hidden');
|
||||||
}
|
}
|
||||||
if (el.name == name + '[on_delete]') {
|
if (el.name == name + '[on_delete]') {
|
||||||
alterClass(el, 'hidden', !/`/.test(text));
|
el.className = (/`/.test(text) ? '' : 'hidden');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
helpClose();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Mark length as required
|
|
||||||
* @param HTMLInputElement
|
|
||||||
*/
|
|
||||||
function editingLengthChange(el) {
|
|
||||||
alterClass(el, 'required', !el.value.length && /var(char|binary)$/.test(selectValue(el.parentNode.previousSibling.firstChild)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Edit enum or set
|
/** Edit enum or set
|
||||||
@@ -336,7 +382,7 @@ function editingLengthFocus(field) {
|
|||||||
if (/(enum|set)$/.test(selectValue(td.previousSibling.firstChild))) {
|
if (/(enum|set)$/.test(selectValue(td.previousSibling.firstChild))) {
|
||||||
var edit = document.getElementById('enum-edit');
|
var edit = document.getElementById('enum-edit');
|
||||||
var val = field.value;
|
var val = field.value;
|
||||||
edit.value = (/^'.+'$/.test(val) ? val.substr(1, val.length - 2).replace(/','/g, "\n").replace(/''/g, "'") : val); //! doesn't handle 'a'',''b' correctly
|
edit.value = (/^'.+','.+'$/.test(val) ? val.substr(1, val.length - 2).replace(/','/g, "\n").replace(/''/g, "'") : val);
|
||||||
td.appendChild(edit);
|
td.appendChild(edit);
|
||||||
field.style.display = 'none';
|
field.style.display = 'none';
|
||||||
edit.style.display = 'inline';
|
edit.style.display = 'inline';
|
||||||
@@ -350,7 +396,7 @@ function editingLengthFocus(field) {
|
|||||||
function editingLengthBlur(edit) {
|
function editingLengthBlur(edit) {
|
||||||
var field = edit.parentNode.firstChild;
|
var field = edit.parentNode.firstChild;
|
||||||
var val = edit.value;
|
var val = edit.value;
|
||||||
field.value = (/^'[^\n]+'$/.test(val) ? val : "'" + val.replace(/\n+$/, '').replace(/'/g, "''").replace(/\n/g, "','") + "'");
|
field.value = (/\n/.test(val) ? "'" + val.replace(/\n+$/, '').replace(/'/g, "''").replace(/\n/g, "','") + "'" : val);
|
||||||
field.style.display = 'inline';
|
field.style.display = 'inline';
|
||||||
edit.style.display = 'none';
|
edit.style.display = 'none';
|
||||||
}
|
}
|
||||||
@@ -362,7 +408,7 @@ function editingLengthBlur(edit) {
|
|||||||
function columnShow(checked, column) {
|
function columnShow(checked, column) {
|
||||||
var trs = document.getElementById('edit-fields').getElementsByTagName('tr');
|
var trs = document.getElementById('edit-fields').getElementsByTagName('tr');
|
||||||
for (var i=0; i < trs.length; i++) {
|
for (var i=0; i < trs.length; i++) {
|
||||||
alterClass(trs[i].getElementsByTagName('td')[column], 'hidden', !checked);
|
trs[i].getElementsByTagName('td')[column].className = (checked ? '' : 'hidden');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -380,9 +426,8 @@ function editingHideDefaults() {
|
|||||||
*/
|
*/
|
||||||
function partitionByChange(el) {
|
function partitionByChange(el) {
|
||||||
var partitionTable = /RANGE|LIST/.test(selectValue(el));
|
var partitionTable = /RANGE|LIST/.test(selectValue(el));
|
||||||
alterClass(el.form['partitions'], 'hidden', partitionTable || !el.selectedIndex);
|
el.form['partitions'].className = (partitionTable || !el.selectedIndex ? 'hidden' : '');
|
||||||
alterClass(document.getElementById('partition-table'), 'hidden', !partitionTable);
|
document.getElementById('partition-table').className = (partitionTable ? '' : 'hidden');
|
||||||
helpClose();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Add next partition row
|
/** Add next partition row
|
||||||
@@ -437,16 +482,12 @@ function indexesAddRow(field) {
|
|||||||
* @param string name prefix
|
* @param string name prefix
|
||||||
*/
|
*/
|
||||||
function indexesChangeColumn(field, prefix) {
|
function indexesChangeColumn(field, prefix) {
|
||||||
|
var columns = parentTag(field, 'td').getElementsByTagName('select');
|
||||||
var names = [];
|
var names = [];
|
||||||
for (var tag in { 'select': 1, 'input': 1 }) {
|
for (var i=0; i < columns.length; i++) {
|
||||||
var columns = parentTag(field, 'td').getElementsByTagName(tag);
|
var value = selectValue(columns[i]);
|
||||||
for (var i=0; i < columns.length; i++) {
|
if (value) {
|
||||||
if (/\[columns\]/.test(columns[i].name)) {
|
names.push(value);
|
||||||
var value = selectValue(columns[i]);
|
|
||||||
if (value) {
|
|
||||||
names.push(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
field.form[field.name.replace(/\].*/, '][name]')].value = prefix + names.join('_');
|
field.form[field.name.replace(/\].*/, '][name]')].value = prefix + names.join('_');
|
||||||
@@ -462,47 +503,22 @@ function indexesAddColumn(field, prefix) {
|
|||||||
};
|
};
|
||||||
var select = field.form[field.name.replace(/\].*/, '][type]')];
|
var select = field.form[field.name.replace(/\].*/, '][type]')];
|
||||||
if (!select.selectedIndex) {
|
if (!select.selectedIndex) {
|
||||||
while (selectValue(select) != "INDEX" && select.selectedIndex < select.options.length) {
|
select.selectedIndex = 3;
|
||||||
select.selectedIndex++;
|
|
||||||
}
|
|
||||||
select.onchange();
|
select.onchange();
|
||||||
}
|
}
|
||||||
var column = cloneNode(field.parentNode);
|
var column = cloneNode(field.parentNode);
|
||||||
var selects = column.getElementsByTagName('select');
|
select = column.getElementsByTagName('select')[0];
|
||||||
for (var i = 0; i < selects.length; i++) {
|
select.name = select.name.replace(/\]\[\d+/, '$&1');
|
||||||
select = selects[i];
|
select.selectedIndex = 0;
|
||||||
select.name = select.name.replace(/\]\[\d+/, '$&1');
|
var input = column.getElementsByTagName('input')[0];
|
||||||
select.selectedIndex = 0;
|
input.name = input.name.replace(/\]\[\d+/, '$&1');
|
||||||
}
|
input.value = '';
|
||||||
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);
|
parentTag(field, 'td').appendChild(column);
|
||||||
field.onchange();
|
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
|
var that, x, y; // em and tablePos defined in schema.inc.php
|
||||||
|
|
||||||
/** Get mouse position
|
/** Get mouse position
|
||||||
@@ -579,50 +595,3 @@ function schemaMouseup(ev, db) {
|
|||||||
cookie('adminer_schema-' + db + '=' + s, 30); //! special chars in db
|
cookie('adminer_schema-' + db + '=' + s, 30); //! special chars in db
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var helpOpen, helpIgnore; // when mouse outs <option> then it mouse overs border of <select> - ignore it
|
|
||||||
|
|
||||||
/** Display help
|
|
||||||
* @param HTMLElement
|
|
||||||
* @param MouseEvent
|
|
||||||
* @param string
|
|
||||||
* @param bool display on left side (otherwise on top)
|
|
||||||
*/
|
|
||||||
function helpMouseover(el, event, text, side) {
|
|
||||||
var target = getTarget(event);
|
|
||||||
if (!text) {
|
|
||||||
helpClose();
|
|
||||||
} else if (window.jush && (!helpIgnore || el != target)) {
|
|
||||||
helpOpen = 1;
|
|
||||||
var help = document.getElementById('help');
|
|
||||||
help.innerHTML = text;
|
|
||||||
jush.highlight_tag([ help ]);
|
|
||||||
alterClass(help, 'hidden');
|
|
||||||
var rect = target.getBoundingClientRect();
|
|
||||||
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';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Close help after timeout
|
|
||||||
* @param HTMLElement
|
|
||||||
* @param MouseEvent
|
|
||||||
*/
|
|
||||||
function helpMouseout(el, event) {
|
|
||||||
helpOpen = 0;
|
|
||||||
helpIgnore = (el != getTarget(event));
|
|
||||||
setTimeout(function () {
|
|
||||||
if (!helpOpen) {
|
|
||||||
helpClose();
|
|
||||||
}
|
|
||||||
}, 200);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Close help
|
|
||||||
*/
|
|
||||||
function helpClose() {
|
|
||||||
alterClass(document.getElementById('help'), 'hidden', true);
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,15 +1,4 @@
|
|||||||
|
|
||||||
/** Add or remove CSS class
|
|
||||||
* @param HTMLElement
|
|
||||||
* @param string
|
|
||||||
* @param [bool]
|
|
||||||
*/
|
|
||||||
function alterClass(el, className, enable) {
|
|
||||||
if (el) {
|
|
||||||
el.className = el.className.replace(RegExp('(^|\\s)' + className + '(\\s|$)'), '$2') + (enable ? ' ' + className : '');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Toggle visibility
|
/** Toggle visibility
|
||||||
* @param string
|
* @param string
|
||||||
* @return boolean
|
* @return boolean
|
||||||
@@ -32,60 +21,31 @@ function cookie(assign, days) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Verify current Adminer version
|
/** Verify current Adminer version
|
||||||
* @param string
|
|
||||||
*/
|
*/
|
||||||
function verifyVersion(current) {
|
function verifyVersion() {
|
||||||
cookie('adminer_version=0', 1);
|
cookie('adminer_version=0', 1);
|
||||||
var iframe = document.createElement('iframe');
|
var script = document.createElement('script');
|
||||||
iframe.src = location.protocol + '//www.adminer.org/version/?current=' + current;
|
script.src = location.protocol + '//www.adminer.org/version.php';
|
||||||
iframe.frameBorder = 0;
|
document.body.appendChild(script);
|
||||||
iframe.marginHeight = 0;
|
|
||||||
iframe.scrolling = 'no';
|
|
||||||
iframe.style.width = '7ex';
|
|
||||||
iframe.style.height = '1.25em';
|
|
||||||
if (window.postMessage && window.addEventListener) {
|
|
||||||
iframe.style.display = 'none';
|
|
||||||
addEventListener('message', function (event) {
|
|
||||||
if (event.origin == location.protocol + '//www.adminer.org') {
|
|
||||||
var match = /version=(.+)/.exec(event.data);
|
|
||||||
if (match) {
|
|
||||||
cookie('adminer_version=' + match[1], 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, false);
|
|
||||||
}
|
|
||||||
document.getElementById('version').appendChild(iframe);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get value of select
|
/** Get value of select
|
||||||
* @param HTMLElement <select> or <input>
|
* @param HTMLSelectElement
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function selectValue(select) {
|
function selectValue(select) {
|
||||||
if (!select.selectedIndex) {
|
|
||||||
return select.value;
|
|
||||||
}
|
|
||||||
var selected = select.options[select.selectedIndex];
|
var selected = select.options[select.selectedIndex];
|
||||||
return ((selected.attributes.value || {}).specified ? selected.value : selected.text);
|
return ((selected.attributes.value || {}).specified ? selected.value : selected.text);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Verify if element has a specified tag name
|
/** Get parent node with specified tag name.
|
||||||
* @param HTMLElement
|
|
||||||
* @param string regular expression
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
function isTag(el, tag) {
|
|
||||||
var re = new RegExp('^(' + tag + ')$', 'i');
|
|
||||||
return re.test(el.tagName);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Get parent node with specified tag name
|
|
||||||
* @param HTMLElement
|
* @param HTMLElement
|
||||||
* @param string regular expression
|
* @param string regular expression
|
||||||
* @return HTMLElement
|
* @return HTMLElement
|
||||||
*/
|
*/
|
||||||
function parentTag(el, tag) {
|
function parentTag(el, tag) {
|
||||||
while (el && !isTag(el, tag)) {
|
var re = new RegExp('^' + tag + '$', 'i');
|
||||||
|
while (el && !re.test(el.tagName)) {
|
||||||
el = el.parentNode;
|
el = el.parentNode;
|
||||||
}
|
}
|
||||||
return el;
|
return el;
|
||||||
@@ -96,25 +56,7 @@ function parentTag(el, tag) {
|
|||||||
*/
|
*/
|
||||||
function trCheck(el) {
|
function trCheck(el) {
|
||||||
var tr = parentTag(el, 'tr');
|
var tr = parentTag(el, 'tr');
|
||||||
alterClass(tr, 'checked', el.checked);
|
tr.className = tr.className.replace(/(^|\s)checked(\s|$)/, '$2') + (el.checked ? ' checked' : '');
|
||||||
if (el.form && el.form['all'] && el.form['all'].onclick) { // Opera treats form.all as document.all
|
|
||||||
el.form['all'].onclick();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Fill number of selected items
|
|
||||||
* @param string
|
|
||||||
* @param string
|
|
||||||
*/
|
|
||||||
function selectCount(id, count) {
|
|
||||||
setHtml(id, (count === '' ? '' : '(' + (count + '').replace(/\B(?=(\d{3})+$)/g, ' ') + ')'));
|
|
||||||
var inputs = document.getElementById(id).parentNode.parentNode.getElementsByTagName('input');
|
|
||||||
for (var i = 0; i < inputs.length; i++) {
|
|
||||||
var input = inputs[i];
|
|
||||||
if (input.type == 'submit') {
|
|
||||||
input.disabled = (count == '0');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Check all elements matching given name
|
/** Check all elements matching given name
|
||||||
@@ -176,9 +118,9 @@ function formChecked(el, name) {
|
|||||||
*/
|
*/
|
||||||
function tableClick(event, click) {
|
function tableClick(event, click) {
|
||||||
click = (click || !window.getSelection || getSelection().isCollapsed);
|
click = (click || !window.getSelection || getSelection().isCollapsed);
|
||||||
var el = getTarget(event);
|
var el = event.target || event.srcElement;
|
||||||
while (!isTag(el, 'tr')) {
|
while (!/^tr$/i.test(el.tagName)) {
|
||||||
if (isTag(el, 'table|a|input|textarea')) {
|
if (/^(table|a|input|textarea)$/i.test(el.tagName)) {
|
||||||
if (el.type != 'checkbox') {
|
if (el.type != 'checkbox') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -275,8 +217,8 @@ function pageClick(href, page, event) {
|
|||||||
* @param MouseEvent
|
* @param MouseEvent
|
||||||
*/
|
*/
|
||||||
function menuOver(el, event) {
|
function menuOver(el, event) {
|
||||||
var a = getTarget(event);
|
var a = event.target;
|
||||||
if (isTag(a, 'a|span') && a.offsetLeft + a.offsetWidth > a.parentNode.offsetWidth - 15) { // 15 - ellipsis
|
if (/^a$/i.test(a.tagName) && a.offsetLeft + a.offsetWidth > a.parentNode.offsetWidth - 15) { // 15 - ellipsis
|
||||||
el.style.overflow = 'visible';
|
el.style.overflow = 'visible';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -305,25 +247,14 @@ function selectAddRow(field) {
|
|||||||
selects[i].selectedIndex = 0;
|
selects[i].selectedIndex = 0;
|
||||||
}
|
}
|
||||||
var inputs = row.getElementsByTagName('input');
|
var inputs = row.getElementsByTagName('input');
|
||||||
for (var i=0; i < inputs.length; i++) {
|
if (inputs.length) {
|
||||||
inputs[i].name = inputs[i].name.replace(/[a-z]\[\d+/, '$&1');
|
inputs[0].name = inputs[0].name.replace(/[a-z]\[\d+/, '$&1');
|
||||||
inputs[i].value = '';
|
inputs[0].value = '';
|
||||||
inputs[i].className = '';
|
inputs[0].className = '';
|
||||||
}
|
}
|
||||||
field.parentNode.parentNode.appendChild(row);
|
field.parentNode.parentNode.appendChild(row);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Prevent onsearch handler on Enter
|
|
||||||
* @param HTMLInputElement
|
|
||||||
* @param KeyboardEvent
|
|
||||||
*/
|
|
||||||
function selectSearchKeydown(el, event) {
|
|
||||||
if (event.keyCode == 13 || event.keyCode == 10) {
|
|
||||||
el.onsearch = function () {
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Clear column name after resetting search
|
/** Clear column name after resetting search
|
||||||
* @param HTMLInputElement
|
* @param HTMLInputElement
|
||||||
*/
|
*/
|
||||||
@@ -359,7 +290,7 @@ function selectSearch(name) {
|
|||||||
var divs = el.getElementsByTagName('div');
|
var divs = el.getElementsByTagName('div');
|
||||||
for (var i=0; i < divs.length; i++) {
|
for (var i=0; i < divs.length; i++) {
|
||||||
var div = divs[i];
|
var div = divs[i];
|
||||||
if (isTag(div.firstChild, 'select') && selectValue(div.firstChild) == name) {
|
if (/select/i.test(div.firstChild.tagName) && selectValue(div.firstChild) == name) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -379,14 +310,6 @@ function isCtrl(event) {
|
|||||||
return (event.ctrlKey || event.metaKey) && !event.altKey; // shiftKey allowed
|
return (event.ctrlKey || event.metaKey) && !event.altKey; // shiftKey allowed
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Return event target
|
|
||||||
* @param Event
|
|
||||||
* @return HTMLElement
|
|
||||||
*/
|
|
||||||
function getTarget(event) {
|
|
||||||
return event.target || event.srcElement;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Send form by Ctrl+Enter on <select> and <textarea>
|
/** Send form by Ctrl+Enter on <select> and <textarea>
|
||||||
@@ -395,18 +318,14 @@ function getTarget(event) {
|
|||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
function bodyKeydown(event, button) {
|
function bodyKeydown(event, button) {
|
||||||
var target = getTarget(event);
|
var target = event.target || event.srcElement;
|
||||||
if (target.jushTextarea) {
|
if (isCtrl(event) && (event.keyCode == 13 || event.keyCode == 10) && /select|textarea|input/i.test(target.tagName)) { // 13|10 - Enter
|
||||||
target = target.jushTextarea;
|
|
||||||
}
|
|
||||||
if (isCtrl(event) && (event.keyCode == 13 || event.keyCode == 10) && isTag(target, 'select|textarea|input')) { // 13|10 - Enter
|
|
||||||
target.blur();
|
target.blur();
|
||||||
if (button) {
|
if (button) {
|
||||||
target.form[button].click();
|
target.form[button].click();
|
||||||
} else {
|
} else {
|
||||||
target.form.submit();
|
target.form.submit();
|
||||||
}
|
}
|
||||||
target.focus();
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -416,8 +335,8 @@ function bodyKeydown(event, button) {
|
|||||||
* @param MouseEvent
|
* @param MouseEvent
|
||||||
*/
|
*/
|
||||||
function bodyClick(event) {
|
function bodyClick(event) {
|
||||||
var target = getTarget(event);
|
var target = event.target || event.srcElement;
|
||||||
if ((isCtrl(event) || event.shiftKey) && target.type == 'submit' && isTag(target, 'input')) {
|
if ((isCtrl(event) || event.shiftKey) && target.type == 'submit' && /input/i.test(target.tagName)) {
|
||||||
target.form.target = '_blank';
|
target.form.target = '_blank';
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
// if (isCtrl(event)) { focus(); } doesn't work
|
// if (isCtrl(event)) { focus(); } doesn't work
|
||||||
@@ -434,10 +353,10 @@ function bodyClick(event) {
|
|||||||
*/
|
*/
|
||||||
function editingKeydown(event) {
|
function editingKeydown(event) {
|
||||||
if ((event.keyCode == 40 || event.keyCode == 38) && isCtrl(event)) { // 40 - Down, 38 - Up
|
if ((event.keyCode == 40 || event.keyCode == 38) && isCtrl(event)) { // 40 - Down, 38 - Up
|
||||||
var target = getTarget(event);
|
var target = event.target || event.srcElement;
|
||||||
var sibling = (event.keyCode == 40 ? 'nextSibling' : 'previousSibling');
|
var sibling = (event.keyCode == 40 ? 'nextSibling' : 'previousSibling');
|
||||||
var el = target.parentNode.parentNode[sibling];
|
var el = target.parentNode.parentNode[sibling];
|
||||||
if (el && (isTag(el, 'tr') || (el = el[sibling])) && isTag(el, 'tr') && (el = el.childNodes[nodePosition(target.parentNode)]) && (el = el.childNodes[nodePosition(target)])) {
|
if (el && (/^tr$/i.test(el.tagName) || (el = el[sibling])) && /^tr$/i.test(el.tagName) && (el = el.childNodes[nodePosition(target.parentNode)]) && (el = el.childNodes[nodePosition(target)])) {
|
||||||
el.focus();
|
el.focus();
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -455,43 +374,13 @@ function editingKeydown(event) {
|
|||||||
function functionChange(select) {
|
function functionChange(select) {
|
||||||
var input = select.form[select.name.replace(/^function/, 'fields')];
|
var input = select.form[select.name.replace(/^function/, 'fields')];
|
||||||
if (selectValue(select)) {
|
if (selectValue(select)) {
|
||||||
if (input.origType === undefined) {
|
if (input.origMaxLength === undefined) {
|
||||||
input.origType = input.type;
|
|
||||||
input.origMaxLength = input.maxLength;
|
input.origMaxLength = input.maxLength;
|
||||||
}
|
}
|
||||||
input.removeAttribute('maxlength');
|
input.removeAttribute('maxlength');
|
||||||
input.type = 'text';
|
} else if (input.origMaxLength >= 0) {
|
||||||
} else if (input.origType) {
|
input.maxLength = input.origMaxLength;
|
||||||
input.type = input.origType;
|
|
||||||
if (input.origMaxLength >= 0) {
|
|
||||||
input.maxLength = input.origMaxLength;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
helpClose();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Call this.onchange() if value changes
|
|
||||||
* @this HTMLInputElement
|
|
||||||
*/
|
|
||||||
function keyupChange() {
|
|
||||||
if (this.value != this.getAttribute('value')) {
|
|
||||||
this.onchange();
|
|
||||||
this.setAttribute('value', this.value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 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 () { };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -535,42 +424,6 @@ function ajaxSetHtml(url) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Save form contents through AJAX
|
|
||||||
* @param HTMLFormElement
|
|
||||||
* @param string
|
|
||||||
* @param [HTMLInputElement]
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
function ajaxForm(form, message, button) {
|
|
||||||
var data = [];
|
|
||||||
var els = form.elements;
|
|
||||||
for (var i = 0; i < els.length; i++) {
|
|
||||||
var el = els[i];
|
|
||||||
if (el.name && !el.disabled) {
|
|
||||||
if (/^file$/i.test(el.type) && el.value) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!/^(checkbox|radio|submit|file)$/i.test(el.type) || el.checked || el == button) {
|
|
||||||
data.push(encodeURIComponent(el.name) + '=' + encodeURIComponent(isTag(el, 'select') ? selectValue(el) : el.value));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
data = data.join('&');
|
|
||||||
|
|
||||||
setHtml('message', '<div class="message">' + message + '</div>');
|
|
||||||
var url = form.action;
|
|
||||||
if (!/post/i.test(form.method)) {
|
|
||||||
url = url.replace(/\?.*/, '') + '?' + data;
|
|
||||||
data = '';
|
|
||||||
}
|
|
||||||
return ajax(url, function (request) {
|
|
||||||
setHtml('message', request.responseText);
|
|
||||||
if (window.jush) {
|
|
||||||
jush.highlight_tag(document.getElementById('message').getElementsByTagName('code'), 0);
|
|
||||||
}
|
|
||||||
}, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Display edit field
|
/** Display edit field
|
||||||
@@ -580,8 +433,8 @@ function ajaxForm(form, message, button) {
|
|||||||
* @param string warning to display
|
* @param string warning to display
|
||||||
*/
|
*/
|
||||||
function selectClick(td, event, text, warning) {
|
function selectClick(td, event, text, warning) {
|
||||||
var target = getTarget(event);
|
var target = event.target || event.srcElement;
|
||||||
if (!isCtrl(event) || isTag(td.firstChild, 'input|textarea') || isTag(target, 'a')) {
|
if (!isCtrl(event) || /input|textarea/i.test(td.firstChild.tagName) || /^a$/i.test(target.tagName)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (warning) {
|
if (warning) {
|
||||||
@@ -595,7 +448,6 @@ function selectClick(td, event, text, warning) {
|
|||||||
event = window.event;
|
event = window.event;
|
||||||
}
|
}
|
||||||
if (event.keyCode == 27 && !event.shiftKey && !event.altKey && !isCtrl(event)) { // 27 - Esc
|
if (event.keyCode == 27 && !event.shiftKey && !event.altKey && !isCtrl(event)) { // 27 - Esc
|
||||||
inputBlur.apply(input);
|
|
||||||
td.innerHTML = original;
|
td.innerHTML = original;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -626,7 +478,7 @@ function selectClick(td, event, text, warning) {
|
|||||||
input.focus();
|
input.focus();
|
||||||
if (text == 2) { // long text
|
if (text == 2) { // long text
|
||||||
return ajax(location.href + '&' + encodeURIComponent(td.id) + '=', function (request) {
|
return ajax(location.href + '&' + encodeURIComponent(td.id) + '=', function (request) {
|
||||||
if (request.status && request.responseText) {
|
if (request.status) {
|
||||||
input.value = request.responseText;
|
input.value = request.responseText;
|
||||||
input.name = td.id;
|
input.name = td.id;
|
||||||
}
|
}
|
||||||
@@ -647,8 +499,8 @@ function selectClick(td, event, text, warning) {
|
|||||||
|
|
||||||
/** Load and display next page in select
|
/** Load and display next page in select
|
||||||
* @param HTMLLinkElement
|
* @param HTMLLinkElement
|
||||||
* @param number
|
|
||||||
* @param string
|
* @param string
|
||||||
|
* @param number
|
||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
function selectLoadMore(a, limit, loading) {
|
function selectLoadMore(a, limit, loading) {
|
||||||
@@ -695,28 +547,21 @@ function setupSubmitHighlight(parent) {
|
|||||||
for (var key in { input: 1, select: 1, textarea: 1 }) {
|
for (var key in { input: 1, select: 1, textarea: 1 }) {
|
||||||
var inputs = parent.getElementsByTagName(key);
|
var inputs = parent.getElementsByTagName(key);
|
||||||
for (var i = 0; i < inputs.length; i++) {
|
for (var i = 0; i < inputs.length; i++) {
|
||||||
setupSubmitHighlightInput(inputs[i])
|
if (!/submit|image|file/.test(inputs[i].type)) {
|
||||||
|
addEvent(inputs[i], 'focus', inputFocus);
|
||||||
|
addEvent(inputs[i], 'blur', inputBlur);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Setup submit highlighting for single element
|
|
||||||
* @param HTMLElement
|
|
||||||
*/
|
|
||||||
function setupSubmitHighlightInput(input) {
|
|
||||||
if (!/submit|image|file/.test(input.type)) {
|
|
||||||
addEvent(input, 'focus', inputFocus);
|
|
||||||
addEvent(input, 'blur', inputBlur);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Highlight default submit button
|
/** Highlight default submit button
|
||||||
* @this HTMLInputElement
|
* @this HTMLInputElement
|
||||||
*/
|
*/
|
||||||
function inputFocus() {
|
function inputFocus() {
|
||||||
var submit = findDefaultSubmit(this);
|
var submit = findDefaultSubmit(this.form);
|
||||||
if (submit) {
|
if (submit) {
|
||||||
alterClass(submit, 'default', true);
|
submit.className += ' default';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -724,24 +569,21 @@ function inputFocus() {
|
|||||||
* @this HTMLInputElement
|
* @this HTMLInputElement
|
||||||
*/
|
*/
|
||||||
function inputBlur() {
|
function inputBlur() {
|
||||||
var submit = findDefaultSubmit(this);
|
var submit = findDefaultSubmit(this.form);
|
||||||
if (submit) {
|
if (submit) {
|
||||||
alterClass(submit, 'default');
|
submit.className = submit.className.replace(/ default( |$)/, '$1');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Find submit button used by Enter
|
/** Find submit button used by Enter
|
||||||
* @param HTMLElement
|
* @param HTMLFormElement
|
||||||
* @return HTMLInputElement
|
* @return HTMLInputElement
|
||||||
*/
|
*/
|
||||||
function findDefaultSubmit(el) {
|
function findDefaultSubmit(form) {
|
||||||
if (el.jushTextarea) {
|
var inputs = form.getElementsByTagName('input');
|
||||||
el = el.jushTextarea;
|
|
||||||
}
|
|
||||||
var inputs = el.form.getElementsByTagName('input');
|
|
||||||
for (var i = 0; i < inputs.length; i++) {
|
for (var i = 0; i < inputs.length; i++) {
|
||||||
var input = inputs[i];
|
var input = inputs[i];
|
||||||
if (input.type == 'submit' && !input.style.zIndex) {
|
if (input.type == 'submit') {
|
||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
adminer/static/move.gif
Normal file
|
After Width: | Height: | Size: 70 B |
|
Before Width: | Height: | Size: 80 B After Width: | Height: | Size: 72 B |
|
Before Width: | Height: | Size: 79 B After Width: | Height: | Size: 71 B |
@@ -4,7 +4,7 @@ $fields = fields($TABLE);
|
|||||||
if (!$fields) {
|
if (!$fields) {
|
||||||
$error = error();
|
$error = error();
|
||||||
}
|
}
|
||||||
$table_status = table_status1($TABLE, true);
|
$table_status = table_status($TABLE, true);
|
||||||
|
|
||||||
page_header(($fields && is_view($table_status) ? lang('View') : lang('Table')) . ": " . h($TABLE), $error);
|
page_header(($fields && is_view($table_status) ? lang('View') : lang('Table')) . ": " . h($TABLE), $error);
|
||||||
|
|
||||||
@@ -25,10 +25,8 @@ if ($fields) {
|
|||||||
echo "\n";
|
echo "\n";
|
||||||
}
|
}
|
||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
}
|
|
||||||
|
|
||||||
if (!is_view($table_status)) {
|
if (!is_view($table_status)) {
|
||||||
if (support("indexes")) {
|
|
||||||
echo "<h3 id='indexes'>" . lang('Indexes') . "</h3>\n";
|
echo "<h3 id='indexes'>" . lang('Indexes') . "</h3>\n";
|
||||||
$indexes = indexes($TABLE);
|
$indexes = indexes($TABLE);
|
||||||
if ($indexes) {
|
if ($indexes) {
|
||||||
@@ -37,51 +35,51 @@ if (!is_view($table_status)) {
|
|||||||
ksort($index["columns"]); // enforce correct columns order
|
ksort($index["columns"]); // enforce correct columns order
|
||||||
$print = array();
|
$print = array();
|
||||||
foreach ($index["columns"] as $key => $val) {
|
foreach ($index["columns"] as $key => $val) {
|
||||||
$print[] = "<i>" . h($val) . "</i>"
|
$print[] = "<i>" . h($val) . "</i>" . ($index["lengths"][$key] ? "(" . $index["lengths"][$key] . ")" : "");
|
||||||
. ($index["lengths"][$key] ? "(" . $index["lengths"][$key] . ")" : "")
|
|
||||||
. ($index["descs"][$key] ? " DESC" : "")
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
echo "<tr title='" . h($name) . "'><th>$index[type]<td>" . implode(", ", $print) . "\n";
|
echo "<tr title='" . h($name) . "'><th>$index[type]<td>" . implode(", ", $print) . "\n";
|
||||||
}
|
}
|
||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
}
|
}
|
||||||
echo '<p class="links"><a href="' . h(ME) . 'indexes=' . urlencode($TABLE) . '">' . lang('Alter indexes') . "</a>\n";
|
echo '<p><a href="' . h(ME) . 'indexes=' . urlencode($TABLE) . '">' . lang('Alter indexes') . "</a>\n";
|
||||||
}
|
|
||||||
|
|
||||||
if (fk_support($table_status)) {
|
if (fk_support($table_status)) {
|
||||||
echo "<h3 id='foreign-keys'>" . lang('Foreign keys') . "</h3>\n";
|
echo "<h3 id='foreign-keys'>" . lang('Foreign keys') . "</h3>\n";
|
||||||
$foreign_keys = foreign_keys($TABLE);
|
$foreign_keys = foreign_keys($TABLE);
|
||||||
if ($foreign_keys) {
|
if ($foreign_keys) {
|
||||||
echo "<table cellspacing='0'>\n";
|
echo "<table cellspacing='0'>\n";
|
||||||
echo "<thead><tr><th>" . lang('Source') . "<td>" . lang('Target') . "<td>" . lang('ON DELETE') . "<td>" . lang('ON UPDATE') . "<td> </thead>\n";
|
echo "<thead><tr><th>" . lang('Source') . "<td>" . lang('Target') . "<td>" . lang('ON DELETE') . "<td>" . lang('ON UPDATE') . ($jush != "sqlite" ? "<td> " : "") . "</thead>\n";
|
||||||
foreach ($foreign_keys as $name => $foreign_key) {
|
foreach ($foreign_keys as $name => $foreign_key) {
|
||||||
echo "<tr title='" . h($name) . "'>";
|
echo "<tr title='" . h($name) . "'>";
|
||||||
echo "<th><i>" . implode("</i>, <i>", array_map('h', $foreign_key["source"])) . "</i>";
|
echo "<th><i>" . implode("</i>, <i>", array_map('h', $foreign_key["source"])) . "</i>";
|
||||||
echo "<td><a href='" . h($foreign_key["db"] != "" ? preg_replace('~db=[^&]*~', "db=" . urlencode($foreign_key["db"]), ME) : ($foreign_key["ns"] != "" ? preg_replace('~ns=[^&]*~', "ns=" . urlencode($foreign_key["ns"]), ME) : ME)) . "table=" . urlencode($foreign_key["table"]) . "'>"
|
echo "<td><a href='" . h($foreign_key["db"] != "" ? preg_replace('~db=[^&]*~', "db=" . urlencode($foreign_key["db"]), ME) : ($foreign_key["ns"] != "" ? preg_replace('~ns=[^&]*~', "ns=" . urlencode($foreign_key["ns"]), ME) : ME)) . "table=" . urlencode($foreign_key["table"]) . "'>"
|
||||||
. ($foreign_key["db"] != "" ? "<b>" . h($foreign_key["db"]) . "</b>." : "") . ($foreign_key["ns"] != "" ? "<b>" . h($foreign_key["ns"]) . "</b>." : "") . h($foreign_key["table"])
|
. ($foreign_key["db"] != "" ? "<b>" . h($foreign_key["db"]) . "</b>." : "") . ($foreign_key["ns"] != "" ? "<b>" . h($foreign_key["ns"]) . "</b>." : "") . h($foreign_key["table"])
|
||||||
. "</a>"
|
. "</a>"
|
||||||
;
|
;
|
||||||
echo "(<i>" . implode("</i>, <i>", array_map('h', $foreign_key["target"])) . "</i>)";
|
echo "(<i>" . implode("</i>, <i>", array_map('h', $foreign_key["target"])) . "</i>)";
|
||||||
echo "<td>" . nbsp($foreign_key["on_delete"]) . "\n";
|
echo "<td>" . nbsp($foreign_key["on_delete"]) . "\n";
|
||||||
echo "<td>" . nbsp($foreign_key["on_update"]) . "\n";
|
echo "<td>" . nbsp($foreign_key["on_update"]) . "\n";
|
||||||
echo '<td><a href="' . h(ME . 'foreign=' . urlencode($TABLE) . '&name=' . urlencode($name)) . '">' . lang('Alter') . '</a>';
|
echo ($jush == "sqlite" ? "" : '<td><a href="' . h(ME . 'foreign=' . urlencode($TABLE) . '&name=' . urlencode($name)) . '">' . lang('Alter') . '</a>');
|
||||||
|
}
|
||||||
|
echo "</table>\n";
|
||||||
|
}
|
||||||
|
if ($jush != "sqlite") {
|
||||||
|
echo '<p><a href="' . h(ME) . 'foreign=' . urlencode($TABLE) . '">' . lang('Add foreign key') . "</a>\n";
|
||||||
}
|
}
|
||||||
echo "</table>\n";
|
|
||||||
}
|
}
|
||||||
echo '<p class="links"><a href="' . h(ME) . 'foreign=' . urlencode($TABLE) . '">' . lang('Add foreign key') . "</a>\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (support(is_view($table_status) ? "view_trigger" : "trigger")) {
|
if (support("trigger")) {
|
||||||
echo "<h3 id='triggers'>" . lang('Triggers') . "</h3>\n";
|
echo "<h3 id='triggers'>" . lang('Triggers') . "</h3>\n";
|
||||||
$triggers = triggers($TABLE);
|
$triggers = triggers($TABLE);
|
||||||
if ($triggers) {
|
if ($triggers) {
|
||||||
echo "<table cellspacing='0'>\n";
|
echo "<table cellspacing='0'>\n";
|
||||||
foreach ($triggers as $key => $val) {
|
foreach ($triggers as $key => $val) {
|
||||||
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 "<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 "</table>\n";
|
||||||
|
}
|
||||||
|
echo '<p><a href="' . h(ME) . 'trigger=' . urlencode($TABLE) . '">' . lang('Add trigger') . "</a>\n";
|
||||||
}
|
}
|
||||||
echo "</table>\n";
|
|
||||||
}
|
}
|
||||||
echo '<p class="links"><a href="' . h(ME) . 'trigger=' . urlencode($TABLE) . '">' . lang('Add trigger') . "</a>\n";
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,10 +2,11 @@
|
|||||||
$TABLE = $_GET["trigger"];
|
$TABLE = $_GET["trigger"];
|
||||||
$name = $_GET["name"];
|
$name = $_GET["name"];
|
||||||
$trigger_options = trigger_options();
|
$trigger_options = trigger_options();
|
||||||
|
$trigger_event = array("INSERT", "UPDATE", "DELETE");
|
||||||
$row = (array) trigger($name) + array("Trigger" => $TABLE . "_bi");
|
$row = (array) trigger($name) + array("Trigger" => $TABLE . "_bi");
|
||||||
|
|
||||||
if ($_POST) {
|
if ($_POST) {
|
||||||
if (!$error && in_array($_POST["Timing"], $trigger_options["Timing"]) && in_array($_POST["Event"], $trigger_options["Event"]) && in_array($_POST["Type"], $trigger_options["Type"])) {
|
if (!$error && in_array($_POST["Timing"], $trigger_options["Timing"]) && in_array($_POST["Event"], $trigger_event) && in_array($_POST["Type"], $trigger_options["Type"])) {
|
||||||
// don't use drop_create() because there may not be more triggers for the same action
|
// don't use drop_create() because there may not be more triggers for the same action
|
||||||
$on = " ON " . table($TABLE);
|
$on = " ON " . table($TABLE);
|
||||||
$drop = "DROP TRIGGER " . idf_escape($name) . ($jush == "pgsql" ? $on : "");
|
$drop = "DROP TRIGGER " . idf_escape($name) . ($jush == "pgsql" ? $on : "");
|
||||||
@@ -34,13 +35,11 @@ page_header(($name != "" ? lang('Alter trigger') . ": " . h($name) : lang('Creat
|
|||||||
|
|
||||||
<form action="" method="post" id="form">
|
<form action="" method="post" id="form">
|
||||||
<table cellspacing="0">
|
<table cellspacing="0">
|
||||||
<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('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_options["Event"], $row["Event"], "this.form['Timing'].onchange();"); ?>
|
<tr><th><?php echo lang('Event'); ?><td><?php echo html_select("Event", $trigger_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"]); ?>
|
<tr><th><?php echo lang('Type'); ?><td><?php echo html_select("Type", $trigger_options["Type"], $row["Type"]); ?>
|
||||||
</table>
|
</table>
|
||||||
<p><?php echo lang('Name'); ?>: <input name="Trigger" value="<?php echo h($row["Trigger"]); ?>" maxlength="64" autocapitalize="off">
|
<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><?php textarea("Statement", $row["Statement"]); ?>
|
||||||
<p>
|
<p>
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ if (isset($_GET["host"]) && ($result = $connection->query("SHOW GRANTS FOR " . q
|
|||||||
if ($val[1] != "USAGE") {
|
if ($val[1] != "USAGE") {
|
||||||
$grants["$match[2]$val[2]"][$val[1]] = true;
|
$grants["$match[2]$val[2]"][$val[1]] = true;
|
||||||
}
|
}
|
||||||
if (preg_match('~ WITH GRANT OPTION~', $row[0])) { //! don't check inside strings and identifiers
|
if (ereg(' WITH GRANT OPTION', $row[0])) { //! don't check inside strings and identifiers
|
||||||
$grants["$match[2]$val[2]"]["GRANT OPTION"] = true;
|
$grants["$match[2]$val[2]"]["GRANT OPTION"] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -142,7 +142,7 @@ if ($_POST) {
|
|||||||
<?php
|
<?php
|
||||||
//! MAX_* limits, REQUIRE
|
//! MAX_* limits, REQUIRE
|
||||||
echo "<table cellspacing='0'>\n";
|
echo "<table cellspacing='0'>\n";
|
||||||
echo "<thead><tr><th colspan='2'>" . lang('Privileges') . doc_link(array('sql' => "grant.html#priv_level"));
|
echo "<thead><tr><th colspan='2'><a href='http://dev.mysql.com/doc/refman/" . substr($connection->server_info, 0, 3) . "/en/grant.html#priv_level' target='_blank' rel='noreferrer' class='help'>" . lang('Privileges') . "</a>";
|
||||||
$i = 0;
|
$i = 0;
|
||||||
foreach ($grants as $object => $grant) {
|
foreach ($grants as $object => $grant) {
|
||||||
echo '<th>' . ($object != "*.*" ? "<input name='objects[$i]' value='" . h($object) . "' size='10' autocapitalize='off'>" : "<input type='hidden' name='objects[$i]' value='*.*' size='10'>*.*"); //! separate db, table, columns, PROCEDURE|FUNCTION, routine
|
echo '<th>' . ($object != "*.*" ? "<input name='objects[$i]' value='" . h($object) . "' size='10' autocapitalize='off'>" : "<input type='hidden' name='objects[$i]' value='*.*' size='10'>*.*"); //! separate db, table, columns, PROCEDURE|FUNCTION, routine
|
||||||
|
|||||||
@@ -28,15 +28,12 @@ if ($_POST && !$error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
page_header(($TABLE != "" ? lang('Alter view') : lang('Create view')), $error, array("table" => $TABLE), $TABLE);
|
||||||
|
|
||||||
if (!$_POST && $TABLE != "") {
|
if (!$_POST && $TABLE != "") {
|
||||||
$row = view($TABLE);
|
$row = view($TABLE);
|
||||||
$row["name"] = $TABLE;
|
$row["name"] = $TABLE;
|
||||||
if (!$error) {
|
|
||||||
$error = $connection->error;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
page_header(($TABLE != "" ? lang('Alter view') : lang('Create view')), $error, array("table" => $TABLE), h($TABLE));
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
|
|||||||
93
changes.txt
@@ -1,94 +1,6 @@
|
|||||||
Adminer 4.1.0 (released 2014-04-18)
|
Adminer 3.7.1-dev:
|
||||||
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
|
|
||||||
|
|
||||||
Adminer 4.0.1 (released 2014-01-11):
|
|
||||||
Don't use type=number if a SQL function is used
|
|
||||||
Disable highlighting in textareas with long texts
|
|
||||||
Don't autofocus SQL textarea in Firefox
|
|
||||||
Don't link NULL foreign key values
|
|
||||||
Fix displaying images in Editor, bug since Adminer 3.6.0
|
|
||||||
Fix uploading files, bug since Adminer 4.0.0
|
|
||||||
MongoDB: Count tables, display ObjectIds, sort, limit, offset, count rows
|
|
||||||
Elasticsearch: Fix compiled version, create and drop DB, drop table
|
|
||||||
|
|
||||||
Adminer 4.0.0 (released 2014-01-08):
|
|
||||||
Driver for SimpleDB, MongoDB and Elasticsearch
|
|
||||||
Highlight SQL in textareas
|
|
||||||
Save and continue edit by AJAX
|
|
||||||
Split SQL command and import
|
|
||||||
Add a new column in alter table on key press
|
|
||||||
Mark length as required for strings
|
|
||||||
Add label to database selection, move logout button
|
|
||||||
Add button for dropping an index
|
|
||||||
Display number of selected rows
|
|
||||||
Add links to documentation
|
|
||||||
Disable underlining links
|
|
||||||
Differentiate views in navigation
|
|
||||||
Improve speed of CSV import
|
|
||||||
Keep form values after refresh in Firefox
|
|
||||||
Mark auto_increment fields in edit
|
|
||||||
Don't append newlines to uploaded files, bug since Adminer 3.7.0
|
|
||||||
Don't display SQL edit form on Ctrl+click on the select query, introduced in Adminer 3.6.4
|
|
||||||
Use MD5 for editing long keys only in supported drivers, bug since Adminer 3.6.4
|
|
||||||
Don't reset column when searching for an empty value with Enter, bug since Adminer 3.6.4
|
|
||||||
Encrypt passwords stored in session by a key stored in cookie
|
|
||||||
Don't execute external JavaScript when verifying version
|
|
||||||
Include JUSH in the compiled version
|
|
||||||
Protect CSRF token against BREACH
|
|
||||||
Non-MySQL: View triggers
|
|
||||||
SQLite: Allow editing primary key
|
|
||||||
SQLite: Allow editing foreign keys
|
|
||||||
PostgreSQL: Fix handling of nextval() default values
|
|
||||||
PostgreSQL: Support creating array columns
|
|
||||||
Customization: Provide schemas()
|
|
||||||
Portugal Portuguese translation
|
|
||||||
Thai translation
|
|
||||||
|
|
||||||
Adminer 3.7.1 (released 2013-06-29):
|
|
||||||
Increase click target for checkboxes
|
Increase click target for checkboxes
|
||||||
Use shadow for highlighting default button
|
Use shadow for highlighting default button
|
||||||
Don't use LIMIT 1 if inline updating unique row
|
|
||||||
Don't check previous checkbox on added column in create table (bug #3614245)
|
|
||||||
Order table list by name
|
|
||||||
Verify UTF-8 encoding of CSV import
|
|
||||||
Notify user about expired master password for permanent login
|
|
||||||
Highlight table being altered in navigation
|
|
||||||
Send 404 for invalid database and schema
|
|
||||||
Fix title and links on invalid table pages
|
|
||||||
Display error on invalid alter table and view pages
|
|
||||||
MySQL: Speed up updating rows without numeric or UTF-8 primary key
|
|
||||||
Non-MySQL: Descending indexes
|
|
||||||
PostgreSQL: Fix detecting oid column in PDO
|
|
||||||
PostgreSQL: Handle timestamp types (bug #3614086)
|
|
||||||
Add Korean translation
|
|
||||||
|
|
||||||
Adminer 3.7.0 (released 2013-05-19):
|
Adminer 3.7.0 (released 2013-05-19):
|
||||||
Allow more SQL files to be uploaded at the same time
|
Allow more SQL files to be uploaded at the same time
|
||||||
@@ -106,7 +18,6 @@ Don't use LIMIT 1 if updating unique row (bug #3613109)
|
|||||||
Restrict editing rows without unique identifier to search results
|
Restrict editing rows without unique identifier to search results
|
||||||
Display navigation bellow main content on mobile browsers
|
Display navigation bellow main content on mobile browsers
|
||||||
Get number of rows on export page asynchronously
|
Get number of rows on export page asynchronously
|
||||||
Respect 'whole result' even if some rows are checked (bug #339 since Adminer 3.7.0)
|
|
||||||
MySQL: Optimize create table page and Editor navigation
|
MySQL: Optimize create table page and Editor navigation
|
||||||
MySQL: Display bit type as binary number
|
MySQL: Display bit type as binary number
|
||||||
MySQL: Improve export of binary data types
|
MySQL: Improve export of binary data types
|
||||||
@@ -114,7 +25,7 @@ MySQL: Fix handling of POINT data type (bug #3582578)
|
|||||||
MySQL: Don't export binary and geometry columns twice in select
|
MySQL: Don't export binary and geometry columns twice in select
|
||||||
MySQL: Fix EXPLAIN in MySQL < 5.1, bug since Adminer 3.6.4
|
MySQL: Fix EXPLAIN in MySQL < 5.1, bug since Adminer 3.6.4
|
||||||
SQLite: Export views
|
SQLite: Export views
|
||||||
PostgreSQL: Fix swapped NULL and NOT NULL columns in PDO
|
PostgreSQL: Fix swapped NULL and NOT NULL columns in weird setups
|
||||||
|
|
||||||
Adminer 3.6.4 (released 2013-04-26):
|
Adminer 3.6.4 (released 2013-04-26):
|
||||||
Display pagination on a fixed position
|
Display pagination on a fixed position
|
||||||
|
|||||||
35
compile.php
@@ -70,7 +70,7 @@ function lang(\$translation, \$number = null) {
|
|||||||
$translation = $translation[$pos];
|
$translation = $translation[$pos];
|
||||||
}
|
}
|
||||||
$translation = str_replace("%d", "%s", $translation);
|
$translation = str_replace("%d", "%s", $translation);
|
||||||
$number = format_number($number);
|
$number = number_format($number, 0, ".", lang(\',\'));
|
||||||
return sprintf($translation, $number);
|
return sprintf($translation, $number);
|
||||||
}
|
}
|
||||||
';
|
';
|
||||||
@@ -168,7 +168,7 @@ function short_identifier($number, $chars) {
|
|||||||
// based on http://latrine.dgx.cz/jak-zredukovat-php-skripty
|
// based on http://latrine.dgx.cz/jak-zredukovat-php-skripty
|
||||||
function php_shrink($input) {
|
function php_shrink($input) {
|
||||||
global $VERSION;
|
global $VERSION;
|
||||||
$special_variables = array_flip(array('$this', '$GLOBALS', '$_GET', '$_POST', '$_FILES', '$_COOKIE', '$_SESSION', '$_SERVER', '$http_response_header', '$php_errormsg'));
|
$special_variables = array_flip(array('$this', '$GLOBALS', '$_GET', '$_POST', '$_FILES', '$_COOKIE', '$_SESSION', '$_SERVER'));
|
||||||
$short_variables = array();
|
$short_variables = array();
|
||||||
$shortening = true;
|
$shortening = true;
|
||||||
$tokens = token_get_all($input);
|
$tokens = token_get_all($input);
|
||||||
@@ -278,6 +278,7 @@ function minify_css($file) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function minify_js($file) {
|
function minify_js($file) {
|
||||||
|
$file = str_replace("'../externals/jush/'", "location.protocol + '//www.adminer.org/static/'", $file);
|
||||||
if (function_exists('jsShrink')) {
|
if (function_exists('jsShrink')) {
|
||||||
$file = jsShrink($file);
|
$file = jsShrink($file);
|
||||||
}
|
}
|
||||||
@@ -287,14 +288,11 @@ function minify_js($file) {
|
|||||||
function compile_file($match) {
|
function compile_file($match) {
|
||||||
global $project;
|
global $project;
|
||||||
$file = "";
|
$file = "";
|
||||||
list(, $filenames, $callback) = $match;
|
foreach (explode(";", $match[1]) as $filename) {
|
||||||
if ($filenames != "") {
|
$file .= file_get_contents(dirname(__FILE__) . "/$project/$filename");
|
||||||
foreach (explode(";", $filenames) as $filename) {
|
|
||||||
$file .= file_get_contents(dirname(__FILE__) . "/$project/$filename");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if ($callback) {
|
if ($match[2]) {
|
||||||
$file = call_user_func($callback, $file);
|
$file = call_user_func($match[2], $file);
|
||||||
}
|
}
|
||||||
return '"' . add_quo_slashes($file) . '"';
|
return '"' . add_quo_slashes($file) . '"';
|
||||||
}
|
}
|
||||||
@@ -329,7 +327,7 @@ if ($_SERVER["argv"][1]) {
|
|||||||
$filename = dirname(__FILE__) . "/adminer/drivers/mysql.inc.php";
|
$filename = dirname(__FILE__) . "/adminer/drivers/mysql.inc.php";
|
||||||
preg_match_all('~\\bfunction ([^(]+)~', file_get_contents($filename), $matches); //! respect context (extension, class)
|
preg_match_all('~\\bfunction ([^(]+)~', file_get_contents($filename), $matches); //! respect context (extension, class)
|
||||||
$functions = array_combine($matches[1], $matches[0]);
|
$functions = array_combine($matches[1], $matches[0]);
|
||||||
unset($functions["__destruct"], $functions["Min_DB"], $functions["Min_Result"], $functions["Min_Driver"]);
|
unset($functions["__destruct"], $functions["Min_DB"], $functions["Min_Result"]);
|
||||||
foreach (glob(dirname(__FILE__) . "/adminer/drivers/" . ($driver ? $driver : "*") . ".inc.php") as $filename) {
|
foreach (glob(dirname(__FILE__) . "/adminer/drivers/" . ($driver ? $driver : "*") . ".inc.php") as $filename) {
|
||||||
if ($filename != "mysql.inc.php") {
|
if ($filename != "mysql.inc.php") {
|
||||||
$file = file_get_contents($filename);
|
$file = file_get_contents($filename);
|
||||||
@@ -342,7 +340,6 @@ foreach (glob(dirname(__FILE__) . "/adminer/drivers/" . ($driver ? $driver : "*"
|
|||||||
}
|
}
|
||||||
|
|
||||||
include dirname(__FILE__) . "/adminer/include/pdo.inc.php";
|
include dirname(__FILE__) . "/adminer/include/pdo.inc.php";
|
||||||
include dirname(__FILE__) . "/adminer/include/driver.inc.php";
|
|
||||||
$features = array("call" => "routine", "dump", "event", "privileges", "procedure" => "routine", "processlist", "routine", "scheme", "sequence", "status", "trigger", "type", "user" => "privileges", "variables", "view");
|
$features = array("call" => "routine", "dump", "event", "privileges", "procedure" => "routine", "processlist", "routine", "scheme", "sequence", "status", "trigger", "type", "user" => "privileges", "variables", "view");
|
||||||
$lang_ids = array(); // global variable simplifies usage in a callback function
|
$lang_ids = array(); // global variable simplifies usage in a callback function
|
||||||
$file = file_get_contents(dirname(__FILE__) . "/$project/index.php");
|
$file = file_get_contents(dirname(__FILE__) . "/$project/index.php");
|
||||||
@@ -365,7 +362,7 @@ if ($driver) {
|
|||||||
$file = preg_replace_callback('~\\b(include|require) "([^"]*)";~', 'put_file', $file);
|
$file = preg_replace_callback('~\\b(include|require) "([^"]*)";~', 'put_file', $file);
|
||||||
$file = str_replace('include "../adminer/include/coverage.inc.php";', '', $file);
|
$file = str_replace('include "../adminer/include/coverage.inc.php";', '', $file);
|
||||||
if ($driver) {
|
if ($driver) {
|
||||||
$file = preg_replace('(include "../adminer/drivers/(?!' . preg_quote($driver) . '\.).*\\s*)', '', $file);
|
$file = preg_replace('(include "../adminer/drivers/(?!' . preg_quote($driver) . ').*\\s*)', '', $file);
|
||||||
}
|
}
|
||||||
$file = preg_replace_callback('~\\b(include|require) "([^"]*)";~', 'put_file', $file); // bootstrap.inc.php
|
$file = preg_replace_callback('~\\b(include|require) "([^"]*)";~', 'put_file', $file); // bootstrap.inc.php
|
||||||
if ($driver) {
|
if ($driver) {
|
||||||
@@ -377,11 +374,6 @@ if ($driver) {
|
|||||||
if (count($drivers) == 1) {
|
if (count($drivers) == 1) {
|
||||||
$file = str_replace('<?php echo html_select("driver", $drivers, DRIVER); ?>', "<input type='hidden' name='driver' value='" . ($driver == "mysql" ? "server" : $driver) . "'>" . reset($drivers), $file);
|
$file = str_replace('<?php echo html_select("driver", $drivers, DRIVER); ?>', "<input type='hidden' name='driver' value='" . ($driver == "mysql" ? "server" : $driver) . "'>" . reset($drivers), $file);
|
||||||
}
|
}
|
||||||
$file = preg_replace('(;../externals/jush/modules/jush-(?!textarea\.|txt\.|' . preg_quote($driver == "mysql" ? "sql" : $driver) . '\.)[^.]+.js)', '', $file);
|
|
||||||
}
|
|
||||||
if ($project == "editor") {
|
|
||||||
$file = preg_replace('~;../externals/jush/jush.css~', '', $file);
|
|
||||||
$file = preg_replace('~;?../externals/jush/modules/jush[^.]*.js~', '', $file);
|
|
||||||
}
|
}
|
||||||
$file = preg_replace_callback("~lang\\('((?:[^\\\\']+|\\\\.)*)'([,)])~s", 'lang_ids', $file);
|
$file = preg_replace_callback("~lang\\('((?:[^\\\\']+|\\\\.)*)'([,)])~s", 'lang_ids', $file);
|
||||||
$file = preg_replace_callback('~\\b(include|require) "([^"]*\\$LANG.inc.php)";~', 'put_file_lang', $file);
|
$file = preg_replace_callback('~\\b(include|require) "([^"]*\\$LANG.inc.php)";~', 'put_file_lang', $file);
|
||||||
@@ -393,18 +385,13 @@ if ($_SESSION["lang"]) {
|
|||||||
$file = str_replace('<?php echo $LANG; ?>', $_SESSION["lang"], $file);
|
$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="static/editing.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);
|
|
||||||
$file = str_replace('<link rel="stylesheet" type="text/css" href="../externals/jush/jush.css">' . "\n", "", $file);
|
|
||||||
$file = preg_replace_callback("~compile_file\\('([^']+)'(?:, '([^']*)')?\\)~", 'compile_file', $file); // integrate static files
|
$file = preg_replace_callback("~compile_file\\('([^']+)'(?:, '([^']*)')?\\)~", 'compile_file', $file); // integrate static files
|
||||||
$replace = 'h(preg_replace("~\\\\\\\\?.*~", "", ME)) . "?file=\\1&version=' . $VERSION . ($driver ? '&driver=' . $driver : '');
|
$replace = 'h(preg_replace("~\\\\\\\\?.*~", "", ME)) . "?file=\\1&version=' . $VERSION;
|
||||||
$file = preg_replace('~\\.\\./adminer/static/(default\\.css|functions\\.js|favicon\\.ico)~', '<?php echo ' . $replace . '"; ?>', $file);
|
$file = preg_replace('~\\.\\./adminer/static/(default\\.css|functions\\.js|favicon\\.ico)~', '<?php echo ' . $replace . '"; ?>', $file);
|
||||||
$file = preg_replace('~\\.\\./adminer/static/([^\'"]*)~', '" . ' . $replace, $file);
|
$file = 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 = preg_replace("~<\\?php\\s*\\?>\n?|\\?>\n?<\\?php~", '', $file);
|
||||||
$file = php_shrink($file);
|
$file = php_shrink($file);
|
||||||
|
|
||||||
$filename = $project . (preg_match('~-dev$~', $VERSION) ? "" : "-$VERSION") . ($driver ? "-$driver" : "") . ($_SESSION["lang"] ? "-$_SESSION[lang]" : "") . ".php";
|
$filename = $project . (preg_match('~-dev$~', $VERSION) ? "" : "-$VERSION") . ($driver ? "-$driver" : "") . ($_SESSION["lang"] ? "-$_SESSION[lang]" : "") . ".php";
|
||||||
file_put_contents($filename, $file);
|
fwrite(fopen($filename, "w"), $file); // file_put_contents() since PHP 5
|
||||||
echo "$filename created (" . strlen($file) . " B).\n";
|
echo "$filename created (" . strlen($file) . " B).\n";
|
||||||
|
|||||||
@@ -1,16 +1,13 @@
|
|||||||
/**
|
/**
|
||||||
* Alternative style for Adminer by Frank Bültge
|
* Alternative style for Adminer by Frank Bueltge
|
||||||
*
|
* @link http://bueltge.de/
|
||||||
* @link http://bueltge.de/
|
|
||||||
* @version 02/18/2014
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
body {
|
body {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
line-height: 1.25em;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
line-height: 1.4em;
|
|
||||||
background: #F9F9F9;
|
background: #F9F9F9;
|
||||||
color: #333;
|
|
||||||
}
|
}
|
||||||
body, select, option, optgroup, button {
|
body, select, option, optgroup, button {
|
||||||
font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;
|
font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;
|
||||||
@@ -23,67 +20,27 @@ font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;
|
|||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
pre {
|
|
||||||
white-space: pre-wrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
p {
|
|
||||||
margin: 0.8em 20px 0 5px
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
a {
|
||||||
color: #21759B;
|
color: #21759B;
|
||||||
background: none !important;
|
|
||||||
}
|
}
|
||||||
a:visited {
|
a:visited {
|
||||||
color: #21759B;
|
color: #21759B;
|
||||||
}
|
}
|
||||||
a:hover, a:hover {
|
a:hover {
|
||||||
text-decoration: none;
|
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 {
|
form {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0 0 0 5px;
|
|
||||||
}
|
}
|
||||||
table {
|
table {
|
||||||
width: 100%;
|
margin: 0 12px 12px 0;
|
||||||
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;
|
border: 1px #BBB solid;
|
||||||
font-size: 90%;
|
font-size: 90%;
|
||||||
}
|
}
|
||||||
thead th, thead td {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
td {
|
|
||||||
white-space: normal;
|
|
||||||
overflow: hidden;
|
|
||||||
padding: 0 4px;
|
|
||||||
}
|
|
||||||
th {
|
th {
|
||||||
text-align: left;
|
text-align: left;
|
||||||
font-weight: 400;
|
|
||||||
}
|
}
|
||||||
td, th {
|
td, th {
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
@@ -97,11 +54,6 @@ border-top-width: 0;
|
|||||||
td:first-child, th:first-child {
|
td:first-child, th:first-child {
|
||||||
border-left-width: 0;
|
border-left-width: 0;
|
||||||
}
|
}
|
||||||
thead {
|
|
||||||
display: table-header-group;
|
|
||||||
vertical-align: middle;
|
|
||||||
border-color: inherit;
|
|
||||||
}
|
|
||||||
thead td, thead th {
|
thead td, thead th {
|
||||||
background-color: #DFDFDF;
|
background-color: #DFDFDF;
|
||||||
border: none;
|
border: none;
|
||||||
@@ -133,21 +85,19 @@ fieldset, x:-moz-any-link {
|
|||||||
padding-top: 4px;
|
padding-top: 4px;
|
||||||
}
|
}
|
||||||
fieldset {
|
fieldset {
|
||||||
padding-top: 14px;
|
%padding-top: 14px;
|
||||||
}
|
}
|
||||||
legend {
|
legend {
|
||||||
font-weight: 900;
|
font-weight: 900;
|
||||||
color: #000;
|
color: #000;
|
||||||
|
position: absolute;
|
||||||
top: -1.666em;
|
top: -1.666em;
|
||||||
left: -1em;
|
left: -1em;
|
||||||
padding: 0 4px;
|
padding: 0 4px;
|
||||||
}
|
}
|
||||||
input {
|
input[name='limit'], input[name*='length'] {
|
||||||
padding: 2px 5px 1px 5px;
|
|
||||||
}
|
|
||||||
input[name='limit'], input[name='length'] {
|
|
||||||
width: 3em;
|
width: 3em;
|
||||||
text-align: right;
|
xtext-align: right;
|
||||||
}
|
}
|
||||||
input[name='text_length'] {
|
input[name='text_length'] {
|
||||||
width: 5em;
|
width: 5em;
|
||||||
@@ -158,83 +108,39 @@ margin-left: 2px;
|
|||||||
textarea, input, select {
|
textarea, input, select {
|
||||||
border-width: 1px;
|
border-width: 1px;
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
-moz-border-radius: 3px;
|
-moz-border-radius: 4px;
|
||||||
-khtml-border-radius: 3px;
|
-khtml-border-radius: 4px;
|
||||||
-webkit-border-radius: 3px;
|
-webkit-border-radius: 4px;
|
||||||
border-radius: 3px;
|
border-radius: 4px;
|
||||||
border-color: #DFDFDF;
|
border-color: #DFDFDF;
|
||||||
}
|
}
|
||||||
select {
|
|
||||||
margin: 0 0 1px 0;
|
|
||||||
}
|
|
||||||
input[type="checkbox"], input[type="radio"], input[type="image"] {
|
input[type="checkbox"], input[type="radio"], input[type="image"] {
|
||||||
border: 0 none;
|
border: 0 none;
|
||||||
}
|
}
|
||||||
input[type=button], input[type=submit] {
|
input[type=button], input[type=submit] {
|
||||||
display: inline-block;
|
border-color: #bbb;
|
||||||
text-decoration: none;
|
color: #464646;
|
||||||
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"]:focus, input[type=submit] {
|
input[type=button]:hover, input[type=submit]:hover {
|
||||||
border-color: #a1a1a1;
|
color: #000;
|
||||||
-webkit-box-shadow: 1px 1px 2px rgba(0,0,0,0.1);
|
border-color: #666;
|
||||||
box-shadow: 1px 1px 2px rgba(0,0,0,0.1);
|
|
||||||
}
|
}
|
||||||
input[type=button], input[type=submit] {
|
input[type=button], input[type=submit] {
|
||||||
padding: 2px 5px 1px 5px;
|
text-decoration: none;
|
||||||
background: #ececec;
|
font-size: 11px !important;
|
||||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#eee));
|
line-height: 14px;
|
||||||
background-image: -webkit-linear-gradient(top, #fff, #eee);
|
padding: 2px 8px;
|
||||||
background-image: -moz-linear-gradient(top, #fff, #eee);
|
cursor: pointer;
|
||||||
background-image: -o-linear-gradient(top, #fff, #eee);
|
border-width: 1px;
|
||||||
background-image: linear-gradient(to bottom, #fff, #eee);
|
border-style: solid;
|
||||||
border-color: #ccc;
|
-moz-border-radius: 11px;
|
||||||
-webkit-box-shadow: inset 0 0 1px 1px rgba(255,255,255, 0.9);
|
-khtml-border-radius: 11px;
|
||||||
box-shadow: inset 0 0 1px 1px rgba(255,255,255, 0.9);
|
-webkit-border-radius: 11px;
|
||||||
color: #464646;
|
border-radius: 11px;
|
||||||
text-shadow: 1px 1px 0 #fff;
|
-moz-box-sizing: content-box;
|
||||||
}
|
-webkit-box-sizing: content-box;
|
||||||
input[type=button]:hover, input[type=submit]:hover,
|
-khtml-box-sizing: content-box;
|
||||||
input[type=button]:focus, input[type=submit]:focus {
|
box-sizing: content-box;
|
||||||
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 {
|
input + label input, select + label input {
|
||||||
margin-left: 4px;
|
margin-left: 4px;
|
||||||
@@ -260,11 +166,6 @@ vertical-align: middle;
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
.js .column {
|
|
||||||
position: relative;
|
|
||||||
background: none;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
.error {
|
.error {
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
color: red;
|
color: red;
|
||||||
@@ -289,20 +190,17 @@ color: red;
|
|||||||
.jush-sql {
|
.jush-sql {
|
||||||
padding: 2px 4px;
|
padding: 2px 4px;
|
||||||
margin-right: 4px;
|
margin-right: 4px;
|
||||||
font-size: 11px;
|
outline: 1px #BBB dashed;
|
||||||
}
|
font-size: 9pt;
|
||||||
.time {
|
|
||||||
color: #333;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#content {
|
#content {
|
||||||
margin: 2px 0 0 270px;
|
margin: 2px 0 0 260px;
|
||||||
padding: 10px 20px 20px 0;
|
padding: 10px 20px 20px 0;
|
||||||
}
|
}
|
||||||
#lang {
|
#lang {
|
||||||
font-size:10px;
|
|
||||||
height: 23px;
|
height: 23px;
|
||||||
width: 255px;
|
width: 250px;
|
||||||
display: block;
|
display: block;
|
||||||
padding: 1px 0;
|
padding: 1px 0;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
@@ -314,7 +212,7 @@ border: 1px solid #E3E3E3;
|
|||||||
line-height: 1.25em;
|
line-height: 1.25em;
|
||||||
}
|
}
|
||||||
#lang select {
|
#lang select {
|
||||||
font-size: 10px;
|
font-size: 8pt;
|
||||||
}
|
}
|
||||||
#breadcrumb {
|
#breadcrumb {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
@@ -322,7 +220,7 @@ height: 21px;
|
|||||||
display: block;
|
display: block;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 270px;
|
left: 260px;
|
||||||
background-color: #f1f1f1;
|
background-color: #f1f1f1;
|
||||||
border: 1px solid #E3E3E3;
|
border: 1px solid #E3E3E3;
|
||||||
padding: 2px 12px;
|
padding: 2px 12px;
|
||||||
@@ -332,7 +230,7 @@ position: absolute;
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
top: 28px;
|
top: 28px;
|
||||||
left: 0;
|
left: 0;
|
||||||
width: 255px;
|
width: 250px;
|
||||||
background-color: #f1f1f1;
|
background-color: #f1f1f1;
|
||||||
border: 1px solid #E3E3E3;
|
border: 1px solid #E3E3E3;
|
||||||
}
|
}
|
||||||
@@ -341,11 +239,9 @@ margin: 0;
|
|||||||
}
|
}
|
||||||
#menu p {
|
#menu p {
|
||||||
padding-left: 8px;
|
padding-left: 8px;
|
||||||
|
font-size: 10pt;
|
||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
}
|
}
|
||||||
#dbs {
|
|
||||||
padding: 0 !important;
|
|
||||||
}
|
|
||||||
#menu form p {
|
#menu form p {
|
||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
@@ -361,6 +257,9 @@ line-height: 35px;
|
|||||||
text-shadow: rgba(255,255,255,1) 0 1px 0px;
|
text-shadow: rgba(255,255,255,1) 0 1px 0px;
|
||||||
background: none;
|
background: none;
|
||||||
}
|
}
|
||||||
|
h1 {
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
h1 .h1 {
|
h1 .h1 {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
@@ -368,8 +267,9 @@ h2 {
|
|||||||
padding: 22px 0 0 10px;
|
padding: 22px 0 0 10px;
|
||||||
}
|
}
|
||||||
h3 {
|
h3 {
|
||||||
font: normal normal normal 18px/22px Georgia, "Times New Roman", "Bitstream Charter", Times, serif;
|
margin: 40px 0 0;
|
||||||
margin: 20px 0 0 5px;
|
font-weight: 400;
|
||||||
|
font-size: 130%;
|
||||||
}
|
}
|
||||||
#schema {
|
#schema {
|
||||||
margin: 1.5em 0 0 220px;
|
margin: 1.5em 0 0 220px;
|
||||||
@@ -385,11 +285,8 @@ position: absolute;
|
|||||||
#schema .references {
|
#schema .references {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
}
|
}
|
||||||
.js .hidden {
|
.js div.hidden {
|
||||||
display: hidden;
|
display: inline;
|
||||||
}
|
|
||||||
.js td.hidden, .js input.hidden {
|
|
||||||
display: none;
|
|
||||||
}
|
}
|
||||||
legend a {
|
legend a {
|
||||||
color: #333;
|
color: #333;
|
||||||
@@ -402,27 +299,40 @@ color: #333;
|
|||||||
code {
|
code {
|
||||||
background: transparent;
|
background: transparent;
|
||||||
}
|
}
|
||||||
fieldset, legend, table, thead, tbody, .error, .message {
|
fieldset, legend, h2, table, .error, .message {
|
||||||
-moz-border-radius: 3px;
|
-moz-border-radius: 5px;
|
||||||
-khtml-border-radius: 3px;
|
-khtml-border-radius: 5px;
|
||||||
-webkit-border-radius: 3px;
|
-webkit-border-radius: 5px;
|
||||||
border-radius: 3px;
|
border-radius: 5px;
|
||||||
}
|
}
|
||||||
#breadcrumb, #lang, #menu {
|
#breadcrumb, #lang, #menu {
|
||||||
-moz-border-radius-bottomright: 3px;
|
-moz-border-radius-bottomright: 5px;
|
||||||
-khtml-border-bottom-right-radius: 3px;
|
-khtml-border-bottom-right-radius: 5px;
|
||||||
-webkit-border-bottom-right-radius: 3px;
|
-webkit-border-bottom-right-radius: 5px;
|
||||||
border-bottom-right-radius: 3px;
|
border-bottom-right-radius: 5px;
|
||||||
}
|
}
|
||||||
#breadcrumb {
|
#breadcrumb {
|
||||||
-moz-border-radius-bottomleft: 3px;
|
-moz-border-radius-bottomleft: 5px;
|
||||||
-khtml-border-bottom-left-radius: 3px;
|
-khtml-border-bottom-left-radius: 5px;
|
||||||
-webkit-border-bottom-left-radius: 3px;
|
-webkit-border-bottom-left-radius: 5px;
|
||||||
border-bottom-left-radius: 3px;
|
border-bottom-left-radius: 5px;
|
||||||
}
|
}
|
||||||
#menu {
|
#menu {
|
||||||
-moz-border-radius-topright: 5px;
|
-moz-border-radius-topright: 5px;
|
||||||
-khtml-border-top-right-radius: 3px;
|
-khtml-border-top-right-radius: 5px;
|
||||||
-webkit-border-top-right-radius: 3px;
|
-webkit-border-top-right-radius: 5px;
|
||||||
border-top-right-radius: 3px;
|
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;
|
||||||
}
|
}
|
||||||
@@ -1,337 +1,145 @@
|
|||||||
|
/* Merged and fixed version of Hever's and Frank Bueltge's skins by Oguz KONYA. I liked Bueltge's skin but I wanted the icons, too.
|
||||||
|
/* So I merged them into one file, fixed a couple of problems, added some paddings here and there, voila!
|
||||||
|
|
||||||
|
/* Redesigned (iconized) by Hever [hev.cz] - June 2009, ver 0.1.3 */
|
||||||
/**
|
/**
|
||||||
* Alternative style for Adminer.
|
* Alternative style for Adminer by Frank Bueltge
|
||||||
*
|
* @link http://bueltge.de/
|
||||||
* Klemens Häckel [http://clickdimension.wordpress.com/]
|
|
||||||
*
|
|
||||||
* update 2014-01
|
|
||||||
*
|
|
||||||
* new remaster based on style for WT-NMP 13.12
|
|
||||||
*
|
|
||||||
* Created by Miroslav Pokorný [http://fuch.cz].
|
|
||||||
* Icons by Yusuke Kamiyamane [http://p.yusukekamiyamane.com/] (some of them were modified).
|
|
||||||
* Slightly inspired by themes created by Martin Hořínek and Klemens Häckel.
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*** Fonts ***/
|
/* Added icons */
|
||||||
/*
|
/* IE doesn't support inline images - using some hack that eliminate IE*/
|
||||||
* @import url(http://fonts.googleapis.com/css?family=Ubuntu:300&subset=latin,latin-ext);
|
html/*\*/>/*/*/body .error {background:#FFEEEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIsSURBVDjLpVNLSJQBEP7+h6uu62vLVAJDW1KQTMrINQ1vPQzq1GOpa9EppGOHLh0kCEKL7JBEhVCHihAsESyJiE4FWShGRmauu7KYiv6Pma+DGoFrBQ7MzGFmPr5vmDFIYj1mr1WYfrHPovA9VVOqbC7e/1rS9ZlrAVDYHig5WB0oPtBI0TNrUiC5yhP9jeF4X8NPcWfopoY48XT39PjjXeF0vWkZqOjd7LJYrmGasHPCCJbHwhS9/F8M4s8baid764Xi0Ilfp5voorpJfn2wwx/r3l77TwZUvR+qajXVn8PnvocYfXYH6k2ioOaCpaIdf11ivDcayyiMVudsOYqFb60gARJYHG9DbqQFmSVNjaO3K2NpAeK90ZCqtgcrjkP9aUCXp0moetDFEeRXnYCKXhm+uTW0CkBFu4JlxzZkFlbASz4CQGQVBFeEwZm8geyiMuRVntzsL3oXV+YMkvjRsydC1U+lhwZsWXgHb+oWVAEzIwvzyVlk5igsi7DymmHlHsFQR50rjl+981Jy1Fw6Gu0ObTtnU+cgs28AKgDiy+Awpj5OACBAhZ/qh2HOo6i+NeA73jUAML4/qWux8mt6NjW1w599CS9xb0mSEqQBEDAtwqALUmBaG5FV3oYPnTHMjAwetlWksyByaukxQg2wQ9FlccaK/OXA3/uAEUDp3rNIDQ1ctSk6kHh1/jRFoaL4M4snEMeD73gQx4M4PsT1IZ5AfYH68tZY7zv/ApRMY9mnuVMvAAAAAElFTkSuQmCC") no-repeat scroll 0.8em center; padding-left:38px;}
|
||||||
@import url(http://fonts.googleapis.com/css?family=Ubuntu+Mono&subset=latin,latin-ext);
|
html/*\*/>/*/*/body .message, #menu p.message {background:#EEFFEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKfSURBVDjLpZPrS1NhHMf9O3bOdmwDCWREIYKEUHsVJBI7mg3FvCxL09290jZj2EyLMnJexkgpLbPUanNOberU5taUMnHZUULMvelCtWF0sW/n7MVMEiN64AsPD8/n83uucQDi/id/DBT4Dolypw/qsz0pTMbj/WHpiDgsdSUyUmeiPt2+V7SrIM+bSss8ySGdR4abQQv6lrui6VxsRonrGCS9VEjSQ9E7CtiqdOZ4UuTqnBHO1X7YXl6Daa4yGq7vWO1D40wVDtj4kWQbn94myPGkCDPdSesczE2sCZShwl8CzcwZ6NiUs6n2nYX99T1cnKqA2EKui6+TwphA5k4yqMayopU5mANV3lNQTBdCMVUA9VQh3GuDMHiVcLCS3J4jSLhCGmKCjBEx0xlshjXYhApfMZRP5CyYD+UkG08+xt+4wLVQZA1tzxthm2tEfD3JxARH7QkbD1ZuozaggdZbxK5kAIsf5qGaKMTY2lAU/rH5HW3PLsEwUYy+YCcERmIjJpDcpzb6l7th9KtQ69fi09ePUej9l7cx2DJbD7UrG3r3afQHOyCo+V3QQzE35pvQvnAZukk5zL5qRL59jsKbPzdheXoBZc4saFhBS6AO7V4zqCpiawuptwQG+UAa7Ct3UT0hh9p9EnXT5Vh6t4C22QaUDh6HwnECOmcO7K+6kW49DKqS2DrEZCtfuI+9GrNHg4fMHVSO5kE7nAPVkAxKBxcOzsajpS4Yh4ohUPPWKTUh3PaQEptIOr6BiJjcZXCwktaAGfrRIpwblqOV3YKdhfXOIvBLeREWpnd8ynsaSJoyESFphwTtfjN6X1jRO2+FxWtCWksqBApeiFIR9K6fiTpPiigDoadqCEag5YUFKl6Yrciw0VOlhOivv/Ff8wtn0KzlebrUYwAAAABJRU5ErkJggg==") no-repeat scroll 0.8em center; padding-left:38px;}
|
||||||
*
|
|
||||||
* */
|
|
||||||
|
|
||||||
* {
|
html/*\*/>/*/*/body a[href$="sql="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHGSURBVHjaxFPNLkNREP5aB6WhaKLSVtKFiIUqK1sLT2DhTXgDL2FlxSOw8FOLRiyQWhDRiKSEhKQJou49P9fMnFsLsevCJCcz594z3/m+mTmJKIrQjSXRpXUNoGqbm39qcMbAkbyIvbVwYQhD3tIeWsOQ1+QVH86Xyz+JXJPIOb9iAI4ZpOMd/yN/vb/vAdiC93cP0El2dNA6z4RjYyW2MaPU0BB0u+0BOGGsVML49LSA3J+cYDCblb0l6jeHBwg/26isrOB0a8uzYBlBgKShgD8M53J4aTTQqFaRSCYl+WxnG83zcxTmKpKg+vtFu9W8NDQDMCXW+VivYyAzjKmlJahUSpiYUKPVbCKTz0sCGzOyOpBLzdcXlCMdDDIxO4vboyoyhQIKlYocLi0uIjczIyBcA98dYqx9NywxUEyDi/P29IyF1VU5dFeroS+dRnF+Xvajk5N0ayjx8tq6+FuSyiwUF4LRHi/reLg4o9ijs6xG9RjWGowUi/h4fcXexoa0L4oc0mNZuVgFzID09VKBnFXoUb7Pnb5zQrvVovpkZC4QzwfiN6QM1eBqdxcmnq6IAA395Mlz8eTxTZwg/pcl/v01fgswAESqYZbsIsnLAAAAAElFTkSuQmCC") no-repeat scroll left bottom; padding-left:22px;}
|
||||||
/* font-family: 'Ubuntu', sans-serif */
|
html/*\*/>/*/*/body a[href*="dump="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJrSURBVHjajFPPaxNREP72V8ymTbGQbRB/IT0otdV6CcWTgqCoUFQQEXoSEQ/+AypK755E1KsULIpGgw1F9KC22lgstFgQLdoWhSab2PRHTNrs7nvObGhSsRa/ZXjv7c6b+eabWUVKiX9AJQuRRci2k+260N91VwgJIQSEV1mVnjf5axTjvCfFFn7hCcBlBzJNVRA0gAZTQ1ODgXC4gDtjV9AW2QNFUTA0/Q66kPLSqVg4shYF8vEdKQ7mln+i+/VVRM0oFpbmETLq/SS6J4R/OfHtHmV24XouHFo94REDAyE9hMZgBMkvT2GZFqxQE6by0/g4P74SoKLB2ZZzWA8ffqRQLBcxNTuFjRTwxpmbfad7Oo/rHhdN6B20/6JvaKyBCnODhqNbL+PRxHXUGXWINV5kl9TDrkQct/pnZKHkyPsDGcl4MJiWq5Ecsf84LxTL8nbyK2+Pke3XHWJAQkLXgMdDNjRNRTxlQ6UmakRD0vN8NEd7EBsFO6Impu1fzGCCrOSXwCro5HEiZiExnEVnrKlaypNhG4fba02aTC8ik1/ibZrM9RlIkkGnjH0jWWJQWRn8TpLI8fcZ6MSA1WrZFERx2eHPTEPqjksBqASDLh7ZZ+HlWA6H9tYyvhjNomNnI8Km7p8/f5+HGdB46/lJeOoYPHV8mbGy8gA59HngU74asNkKYKVzlQCuW9GA6B5si+DVeA4HWmsM4qksTnZY1TMz0NRauysaUAmt2+oxM1tCM6k8mS74WXjIdm8O+JdWg36oKgXqgnzb3TvRXvZEneN6YPNIFw7MY70W5haXnlUHbp3f+b/wW4ABAAtWTLcKdqLcAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
|
||||||
/* font-family: Verdana; font name */
|
html/*\*/>/*/*/body a[href$="dump="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHzSURBVHjajJPPS+NQEMcnaaxpdWsp6Q8vtWtdkIo9+B948SjIgruCUg8F/wGP/glePe5JcBehwl4qePGm0J6KQj30UBHEzaFLUromTfPizJMnrxhhB4bJvDfzme97SZQgCOB/be98J2AsAMYYMP81KjKg0WhMYljHtS30RSz4gjkGdot559F7OLt8vvi1bJRBURS4vr8CTTQ3m80SFv1MpVJlwzBA13XuNGUwGKyY1p+Vk9aPzWw8C7ZjQXximu+9ATA5KhQK5Uwmw+nCIpEIJBIJOLjah3Q8w7379x5urFsOUEUhTl/C6R+ef35mARzPhW6vC+q/iHvyvaYwXwIQje6j1+tBv98H13VhNBpxxyPA5tw2TI50MPQsrMbXbOo53fmtaJIC7iSZAMPhkOe+73MA5Ruz3yCfz9NlvykLBUSjUR41TQPP8zhE7JNSyj8E0CbJpkiXKRoIRFABeQcQd0DFwlVV5evUTFBZRSiATEwnp4lCAa0LI2AoQC4WimRl4qgyYOw12rYNyWSSX6L4mKiBnukDK5VKYJrmmBpZwW6r1TotFotTuVyOQwQgnU7zV9npdKDdbj+hgnXRN/Yz1ev1zwg6QP+KU2disRiXblkWOI7zhJOPce+wWq2aoQDZarXaJ2xYQGfod5VKxQ2rexFgAI4OiAKxKkWeAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
|
||||||
font-family: Verdana,Arial,Helvetica,sans-serif;
|
|
||||||
}
|
|
||||||
textarea, pre, code, samp, kbd, var {
|
|
||||||
font-family: 'Ubuntu Mono', Consolas, 'Courier New', monospace
|
|
||||||
}
|
|
||||||
/*** Icons ***/
|
|
||||||
/* Error message */
|
|
||||||
html>/**/body .error {
|
|
||||||
background: #FFEEEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlpJREFUeNqkU8tu2lAQHT8wtlEQcUKUIjVVgaiCVkhIlSq1isSKTdRNuu5P8AX5Alb9g+6zqZR8QNWmC3ZRa1UJIm0hAWpeNthg/OiMechl00UtHXvuvXPOnbn3mPF9H/7n4en1nmGAwy+BAUghTjB8iThY5v1EfMatzhB3Lg4Ib3FzfkPwdUSSKulCIZs6PFSkeFykCi1dL95dXx81rq7e2JZVxbwPf1WwIkuJxOmL4+Ocz/PSzHHgvtEIFhRFkfdzOTmZTu/ULi5OJ6MRrERYemFZKU4UK8VyOTcyTWk4HEKr1YLC+XkAimluPJ1Kz0qlHBuNVoizFsB+Tg7y+ezAMKQRqhuGAaZprkujmOZ0XQcDRfYymay7OKdFCw7Aq61kUtH6/TVpPB5Dp9MJSLfYiue6i555Hna3txXi4PDdSuChx7Kig3278zkYgwGYkwk0m02IRCLA4jy3Usb1qWmKxAlXAA4u2FQ6VuHjbhGcI3IsFgNh47Q5zHXCtzAH+GV0u0Vf02QpZCy1VAq+8Y27ntv2lDjrQ0S1T912u7eF/ck4lheGgpKqQrleD2I5BN2y+sQJC5zd9np1YFlLRldSUhQhCEKwYzRE9jzPas9mN8RZC3hoz4nrVi81TcUFS0KRJM5/yWQCUCwhbCTXxmPV9LwqcYjLkFUZJDzCwXN042OWreQEIftEEJQEx4mUNHTd6Xfb7qu2fdNAcg1d+IMMSNylAB3mDmIX7bWfBzjaA3iKV/dgabT7LsDXbwAfcVsM4TdCQ66zEmBDbfL/+IPJURMyKHK9PwIMAA7iHkoee771AAAAAElFTkSuQmCC") no-repeat 0.8em center;
|
|
||||||
padding-left: 38px;
|
|
||||||
}
|
|
||||||
/* Ok message */
|
|
||||||
html>/**/body .message, html>/**/body #menu p.message {
|
|
||||||
background: #EEFFEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnZJREFUeNqkk01PE0EYx/+zu/TNanTbGCjWhrCmlp6MGl94kUQ9eOCC8chHMDG9mHjiE/QjePGOJsR4QQ8Q0UOJHqgVA6kiKQXa0th97+4OM1tq25MHJ/lvdmae3z/PzDMPoZTif4bEP+RVHBAJE5+QBAjm2d9dpsuncbtM66BYAqUVuGzmUtCFWsegb8yFpEAuPZpWUvGkHA1GQzw/zVSv/aztTm9Vfjy22laeLS0PZNCFzwXPLs5mZzISpLBjO1BttbsXGZfHIkn5Umy1uLbYMvx130TwtykSQSGQm746mbE0K6yqKkzTHFC1WoXe1MK3lVuZABnKcaZn4NL5K8PjiqmaYV3XYRjGgOr1OtZn3mJh5Akcox1OxZIKZ3oGDp2MR+Nyq9VCs9mEZVloqS0cHB6gXC7jdfol9vb28GhoFpvFTXiGJ3OmdwcOTQoQQpqmYePhCpQ3N6HbOii76Y17K36IKIqYeDfpV8q0zRBn+jOA67p4rjzFzs4Ovtz/ACp2YEmSfGXfTwFRFhtm4ZLjMz2DNv1d047MZ6UX/vT4+Bgbd/rgVQZf4LXoyCaWyZn+DD5Wj/Yboixi6vvcX9CHPzH4Yg/mMv/oDc70Gyw1d+vbAohBRgmubz7owAUGjw7CnucaVlXf5kzPwKMVV3Py9c/7Jep4BkkRZL8yONU5c1ee7RhqoVHydC/PGb8NeDMRwvogxa73hjAnjIm5QOaMEkhHZPG8FPKfSdMx7S29YZe0ba/s5lHwlvHLhc+eGvByxpjiSJBhTJBpdu4sK9lI56FhH4co4htdQ4UespUjphpjna6B0HdS6R8dzHtRY9IZ650IMACI9kBqNfbjbgAAAABJRU5ErkJggg==") no-repeat scroll 0.8em center; padding-left:38px;
|
|
||||||
}
|
|
||||||
/* Sql */
|
|
||||||
html>/**/body a[href$="sql="] {
|
|
||||||
background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAARpJREFUeNrE0z9LQlEYx/Fr/gXdJILegSQJEk13yrUxxDFwUhqagyAEF8E34BsIFKlozpqao8K9WVrCJSWu30d+F44SOjj4wId77nPOeTjn3HMjQRB4m8SOt2Fsv0CE8HleYoRdnGEPF8jhB4+4xw0ONLc7R4E7VJBX23JNtJBFSflD9YXjrT3fQhxpfKqqRQEf+MaLxuTVF3e3bo02yjjBrTMojD+9R52+sO3F8KxC13YmeELCHbT0vtBnE6ua1EfDGZRQO7qiQNEK1LiNRzynSKpjCJ+8fY1T5d/VZ+2Y5nQs8YVXPW01+zjGg3JvuFK+q1yoZ3tOaVnJpcOzqOtwzzF28rbaX0zWXbQMBvqc/r83cet/40yAAQCHjz1eQkhXqAAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
/* DB Dump */
|
|
||||||
html>/**/body #dump {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjpJREFUeNqMU8+LElEc/8w4qeM4urvsCgqpEO7VYu/9YAmkNqiDRNdOQtC5k3QIL127BF78G+rQqegQlBRRhz24S0jWuumOrs74c2be9H2jkuJi+4XPvMe87/f73ufzPk/IZrOYxh1CFOeLOuEVn0izP6PRKFosFl/2ej0MBgNYlo1m06A5g98vQ1VVhEIhhMMh5HL3H3k8Hiw04GFZFjqdDjRNcxs0GjqGIwZFUWHZFkSPiIAiLxxFXHlQAXBocAQ2ASY4fwNKnxQ602LbxXzMU/hSKBRep9PpPcYY+v3+lIpFGvgRDAaJfxiVSuUN5X4+q8FOPp/fmxexcdJFbziG1+dFUFUQJhFv3r6XeZx7yG+g/F8R/5x00BuPIZNwJltD9WAffUNHq9VyeM5Sg2UR/3Fngo3uaRuZBxm6xhzX7grh60oRGbPAzCH6py38qlRgmia0Yw2H2uELWr7OaQszJ5KRduLx+NN5EU3bxPrWOhKXEohejCKgBhY2SG2mnkg8ebIbWxLx5+9jNNtNHOz/wLdP3zEaDLF7dxeRWATbW9t5QRDei7VaDbquwzAMZyZivV4nHKHV0WBYA1zYUJC4nMKYBJ0WP6M93xI+iuVyGdVqlSsvrTQTQVkLovi8iGQy2ZZl+YNt2+4tyGQONRaLBSRJcs3i9XpdCh6fjMCwC9EnQAnKuHrrmuuFUqkk0IkjVKuT27FBiFHHG47jbPKuNE5fAoimwD8QRZGPDp/TepN0ekfrR38FGAASfDL3E+dZ1QAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
/* DB Import */
|
|
||||||
html>/**/body a[href$="import="] {
|
|
||||||
background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ%0AbWFnZVJlYWR5ccllPAAAAnRJREFUeNqMU72PElEQ/%2B1HWHZhgYPjkiMWxoLkaChMzgoJ0JhwlsTK%0AhsKQmFxjT4ImxL/AxOSKS/wPXAs7Q%2BEHqO0VXElAkc89BA7c3ee8PY5w5xVOMjvvzXszb%2BY3vxUK%0AhQJW8pB0F/8nP0gNvpAvPYvFYvfo6Oj1dDrFfD6HZdno9X7T2oHXq0LXdQQCAQSDAZRKj55KkuTG%0AyScnJ0gkEu7GsizU63VMJhOEwxHMZgznCwc%2Bnw7LtiBKIjSfeqUUkSeo1Wprx2AwQCaTgWmOKeES%0AjHxMcC4UF7opvIVCr9e7ZRgGstms6%2Bz3%2B9jfv4ePn%2BoU6KUgtgq2Xb2SQBCEO6enpy83nY7jYDQa%0AIbylo91u42e7Cb/fT/0H0Ww239OVb5d3BQLjMdnbfFOpVJ5zm8vlEIls4/OXr1D9W9AJOL/uQ5BA%0A5EAeloocxFcuBqRvotHoi3w%2B3y0Wi1gul6A9DOMtzmk9MIfoDroYkZ1Mz/DHWlwFcW9vD6lUau2I%0ARCI4Pj6mJDtQNW3duyPYN2PAE2xKOp12J8F50B2ONyZASVZ6fQqX8r1arb5LJpMHHMTZbLZKZBGR%0AvBgSiH0C0bgGoswvr5C/Wy6XDzaZ%2BIsqMOdTyIoIn18lAHXcz%2BcePHtyaND0Gm6CVquFUCjEwWP8%0ANdM01y93aZTmcgpF8yDEAhBlBk1TQI/YoihiPB5DbjQaiMfjUBRFvvm/Yf8wkR6QeJXEHxcDlcih%0Ax2IxTZZllywej8dtQVJUaOdnEBXBbUHTVEiyyJmqdjqdHYqdCPQJk8ZUVc0wxrZtm0bFmEsyriT8%0AA14yWcbXdN6jCj7QeeevAAMALZ84sPgoxOsAAAAASUVORK5CYII%3D%0A") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Adminer logo */
|
html/*\*/>/*/*/body select[name="db"] {background:white url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEYSURBVBgZBcHPio5hGAfg6/2+R980k6wmJgsJ5U/ZOAqbSc2GnXOwUg7BESgLUeIQ1GSjLFnMwsKGGg1qxJRmPM97/1zXFAAAAEADdlfZzr26miup2svnelq7d2aYgt3rebl585wN6+K3I1/9fJe7O/uIePP2SypJkiRJ0vMhr55FLCA3zgIAOK9uQ4MS361ZOSX+OrTvkgINSjS/HIvhjxNNFGgQsbSmabohKDNoUGLohsls6BaiQIMSs2FYmnXdUsygQYmumy3Nhi6igwalDEOJEjPKP7CA2aFNK8Bkyy3fdNCg7r9/fW3jgpVJbDmy5+PB2IYp4MXFelQ7izPrhkPHB+P5/PjhD5gCgCenx+VR/dODEwD+A3T7nqbxwf1HAAAAAElFTkSuQmCC") no-repeat scroll left bottom; padding-left:16px;}
|
||||||
html>/**/body h1 {
|
html/*\*/>/*/*/body select[name="db"] option {padding-left:18px;}
|
||||||
background: #eee url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAMFBMVEXAwMD/////AAAATmEAAAAA%0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5w%2BL8AAAAAXRSTlMAQObYZgAAAAlwSFlz%0AAAALEgAACxIB0t1%2B/AAAAEVJREFUCJljYEAGjIKCAmCGoKKSIFhASFBQEcgFkoJCggyMwsaGQiA1%0AjIaCwoKKQkCGsbGxIEwErJcoBtAcqEWCgiguAADa1AZzThzIfQAAAABJRU5ErkJggg%3D%3D%0A") no-repeat 14px center;
|
|
||||||
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;
|
html/*\*/>/*/*/body #menu p a[href*="&select="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=") no-repeat scroll left bottom; clear:left; display:block; float:left; height:16px; margin-right:8px; padding-top:1px; overflow:hidden; padding-left:16px; width:0; text-decoration:none;}
|
||||||
font-size: 1em;
|
|
||||||
padding: 6px 6px 5px 35px;
|
html/*\*/>/*/*/body #menu p a[href*="&table="], html/*\*/>/*/*/body #menu p a[href*="&view="] {margin:0; line-height:18px; padding-bottom:1px; text-decoration:none;}
|
||||||
position:fixed;
|
|
||||||
width: 100%;
|
html/*\*/>/*/*/body a[href*="&create="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ6SURBVDjLpZNZSNRRGMV//2XGsjFrMg2z0so2K21xIFpepYUiAsGIICLffI8eWiBBeg3qQV+KwBYKLB8qpHUmrahcKLc0QsxldNSxdPz/79LD1ChBUXTh8sG93POdc75zDa01/7NsgGvPR09rzQmpVZZSCqlAKIWUCqk0QqoZWyKFRir1uvxIbsAGUFqXHQqkpP1L57M3Pm5MMJBKpQHUdF9BKIGQAlcJXOlOVykSdye3leO6MmkGQNyHw+uO/1X3bzGBK+S0B1IqAKqDg3986HeCZPffwvJtoNT7lOZLvUdtAPEDAKBkRzo3QwMUb89InN1uGGD3spdE214xe8MRUnM2MfppNW0Pqy7YAK5UKK2xLbhdP4hlmdxpGMQwwQT8ziNiI534c7cT6WrFazikzF2Eb8HS1IQEDdiWwcHAQmpehTkQSAcgNvSMiYFW5uUUMdV3HW+ywefGNqITJsbUUL75k4FWYJtQ+yaMZcXrk1ANk/33mbdiD7EvlRieETy+FJLkMFcjRRSW3emIAwiF1hqPBfu2LGSWbbA1uZ41SfWkrtxPrPcypsfFiWYzFGzGKTjFV28WEJeIUHETLdOgrmkI1VdHpCdEet5enP4qLK9mKrqMgedv6cyrAP+qxOTiUxAi7oEJi8frELoFoTLpa7nI/HQvscgSRt+0kV1SSW7qYtp7xrBMphm4Mi5h/VIfTcEq1u0oJaknSEdNiMYHET7UvcMpPEN31Ed7zxgASmk1I0g6dK66s8CRak5mVxjnfS05+TsZCw/T9baTx1nnGb47DrQksjE6HrsHYPz6nYt3+Sc3L8+wA2tz0J6pF5OD4WP7Kpq7f5fO79DfSxjdtCtDAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
|
||||||
height: 22px;
|
html/*\*/>/*/*/body a[href$="&create="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIpSURBVDjLpZNPSFRRFMZ/749/Kt3IqFTSRoSMmrGIYTTbpEJtjBCCok1Em9JVG1dRC8FFEES5aGFEgRRZWq1iLKKxBiNqLDcltQgmHR9hY6LOu+feFm+YGVsZXbh8nHO53/nud8+xjDH8z3IB7r5avGgMZ8XoBq01okFpjYhGtEGJLtmCKINo/XbgVFPUBdDG9PVEq0P/UvnSvdlwQYFoHQIY/3obpRVKFL5W+OIXUVThrL91AN+XihKCwIeTu85sqPryqsJXUvRARAMwkshsiKB7fw25UgKVJwA40V7H/cl5jh+oL+RGk/P0xIqxl11dr8AXjTYG14HRNxkcx+ZhMoNlg52/ND6VAWMoc6F5+2Zy/l9PMIDrWByL1jI+tcDRaN06BaXxbDqLUnq9AqPBteHpuwUcJ0AIcgBXH93h+/wEyyuLrPk5cmv7gNY8gdIYYyhz4PDeWuIpj85IsS2ujQ2zJAk6DkZpqGnixcwYyU+PifUOX7Eh6DoAx7aIpzwA4imPeMrj+bTH+88PaNkZQWwhsrULsXxie9oAzgcESgUe2NAZCeE6AXZGQhwKh/Cyc5RZVXQ39wFwoeMmjXVhgMqiB8awe0cVP36u0Fi/iW9zvwuzkF3+xUz6Nal0gv6uWww+O02lUwGwmv8FM3l55EtLTvQWXwm+EkRpfNEoUZRXHCE5PUFbuJ0nH4cot1wSH14C3LA2Os6x3m2DwDmgGlgChpLX0/1/AIu8MA7WsWBMAAAAAElFTkSuQmCC") no-repeat scroll left bottom; padding-left:22px;}
|
||||||
}
|
|
||||||
/* Logout */
|
/* html/*\*/>/*/*/body #content p a {padding-left:2px;} */
|
||||||
html>/**/body input[name="logout"], #logout {
|
html/*\*/>/*/*/body #content p a[href*="&create="] {padding-left:22px;}
|
||||||
background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAkVJREFUeNqMU01rE1EUPZkMaGI+JEMkXyaNiKINzSJLBSEEaRbRVf6Ai1Jw68K9O3dCN3ZR/AUxC0UCwW4k4KKoGKVioGATg4kNY2aSTDqZifdOmmmKFr1weG/e3HPeue++59i4BTgceAogg3/H6+kUm+YUDdMEaIRICyBkvPeeZVwul5XlIEVBEGyMXz7C8vJ1HHz/ttT49C4/UPqvKG2T0BANcybNZEmSTpCdTqeFPcqp1Wr8X1q5eVtSep3w14/v8yoJCSwwF/kbmedsN5lMotlsol6vo6eMpBurd1OmgawwMQDGnCzLMkajkU3mkTeYUp2hUAjRaBStVgu6rmNC6yKTOex6x2MLPA8EAhBF0RIwyQaL8Oj1emEYBoF4X4SLIOwwiS3yj2KxiG63i06nYzngTRYFZmWZMwcfxgE2sLNRKNi9GgwGKNB3uVxGIpGwHbC4oihQVdWas7AY1/aZkymVSrZALpdDtVpFPB7/w8H+Txnp+1uYvHkyK+EqeiBkgsEgUqmUpVypVBCLxRCJRGaHuCDAF+fFwzvHDvSjQ+REPjCPx2PdBxbgNe7O5KgEjnjkAiT/udkZsMBYPxZgsIv5nMkM6pjVWo65EDvgzYXnbUBWcKLvi2SO/hDw+/3QNM3CXECldfHHIc7vKdh9vJo97QEJ7rP4PD1wp69cuxT2+XxSu922nPQHJEAJ2lsdDzjx1Dd4iNG6PJS2t+trZ1zu/Ep6KUxuJZWqcuA/Yz0O/KIdlSEuazrWqIIsNWT3twADAMZTN2W0KIqPAAAAAElFTkSuQmCC") no-repeat 2px bottom;
|
html/*\*/>/*/*/body #content p a[href*="&select="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=") no-repeat scroll 2px bottom; padding-left:22px;}
|
||||||
border: none;
|
html/*\*/>/*/*/body #content p a[href*="&page="] {background-image:none; padding-left:0;}
|
||||||
cursor: pointer;
|
html/*\*/>/*/*/body #content p a[href$="?database="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIkSURBVDjLpVNNiFJRFP7eU1E0KSLTMpAwYSxyaidDtChm0WYQ3NSutv2s2kwwm2igNgMtooUQEQhhA9GqhSDTQsZZFDbNDBgVg5bSw9J8rzFF33udc+HGg0ladOHj3nPe+b7zc99VbNvG/yy30yiVSl4SnCNcsixrivYEgY7WJu0faX9EKGUyGVNyFFkBkY/T+WkoFEpFIhEEAgH4/X7w916vB8Mw0Gg00G63y+S7mM1mm4LIAYxisbhSr9c5nT1pjUYju1qt2oVC4YnkqbIUMk6Ew+F/9hyNRkFJLuyaATmFoqZp8Pl88Hq98Hg8wtfv99HpdNBsNhGPx0XsRAG3241ut4vBYCDs8XgMXdcxHA7FN/b9VUD25HK5RAUczKC+hYgcNpNN05xcAQdLkqIoIlj6VFWdXIEUkAQGV8M2k2vaG3z6sYGfVR39XzsHlm/dX3h5d31xlwAHM5goBd5+LuO75z3OnU3jyP4EVrZeKGub2p309cP7VKcAQ2Znoiz3deMVTk1Nw1RNTB+ahamMkD45w7RrfwSYwFdFf6K4Quf6pmvwKHswl7wh7Jvnc4gfTPHR52zhcqVSeZZMJgOxWEyI8BC5CmOnh63WKtZbZczPPsa94hX4XCLJQHG+xnw+f5SEFghZmvhefgvcTqn2HN3gBmZSZ5CInMaHr1Wsvivjy3ZvSZn0nHO5XJDIxwgWDbW2vL10m9xXCUGCQXi49qA1/xvyq6BCh7yZeQAAAABJRU5ErkJggg==") no-repeat scroll 2px bottom; padding-left:22px;}
|
||||||
height: 18px;
|
html/*\*/>/*/*/body #content p a[href*="&edit="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJvSURBVDjLpZPrS5NhGIf9W7YvBYOkhlkoqCklWChv2WyKik7blnNris72bi6dus0DLZ0TDxW1odtopDs4D8MDZuLU0kXq61CijSIIasOvv94VTUfLiB74fXngup7nvrnvJABJ/5PfLnTTdcwOj4RsdYmo5glBWP6iOtzwvIKSWstI0Wgx80SBblpKtE9KQs/We7EaWoT/8wbWP61gMmCH0lMDvokT4j25TiQU/ITFkek9Ow6+7WH2gwsmahCPdwyw75uw9HEO2gUZSkfyI9zBPCJOoJ2SMmg46N61YO/rNoa39Xi41oFuXysMfh36/Fp0b7bAfWAH6RGi0HglWNCbzYgJaFjRv6zGuy+b9It96N3SQvNKiV9HvSaDfFEIxXItnPs23BzJQd6DDEVM0OKsoVwBG/1VMzpXVWhbkUM2K4oJBDYuGmbKIJ0qxsAbHfRLzbjcnUbFBIpx/qH3vQv9b3U03IQ/HfFkERTzfFj8w8jSpR7GBE123uFEYAzaDRIqX/2JAtJbDat/COkd7CNBva2cMvq0MGxp0PRSCPF8BXjWG3FgNHc9XPT71Ojy3sMFdfJRCeKxEsVtKwFHwALZfCUk3tIfNR8XiJwc1LmL4dg141JPKtj3WUdNFJqLGFVPC4OkR4BxajTWsChY64wmCnMxsWPCHcutKBxMVp5mxA1S+aMComToaqTRUQknLTH62kHOVEE+VQnjahscNCy0cMBWsSI0TCQcZc5ALkEYckL5A5noWSBhfm2AecMAjbcRWV0pUTh0HE64TNf0mczcnnQyu/MilaFJCae1nw2fbz1DnVOxyGTlKeZft/Ff8x1BRssfACjTwQAAAABJRU5ErkJggg==") no-repeat scroll 2px bottom; padding-left:22px;}
|
||||||
line-height: 18px;
|
html/*\*/>/*/*/body #content p a[href*="&table="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJcSURBVDjLpZPtT5JhFMafrW997I9rscA+FFu2QRurtlw5cQ4InLpwBogIPNFSiNJ4C+JVkj0QTBHQKFPQlJfwlanY1tXz3ARkn2jd27Wz++yc33XOvd0UAOp/RNGR/X5zeH9rOlTDVKAK3fsqJrxlqN27GHPuYHh+G4rXRQzZNjEws47Hli/oo/PxNsAU3qvWT3/gX3TPuHrWBhiC30nSktXDtKLB1NI4NKkxqBMqjDByPFkcxNBCPwbCfXgUeEBq705m0AZM+qsk2e3hau88W+4ANOy+XPLFQrkrcbW31KkOYJx9rBaAOzPR0gVHW6x593q9cDgcqB6e4sZoogMYdXzD0ck5ZhfLsHGKVfAqVoadKcMdzcLr82PuwwZCoRACgQCWVzdhoK2gaVpDAMNzWzhkAXamQpze/I4t13w+j2AwiFwuh7W1NXg8HmQyGSgUCshkssuU3F7AQf0c84kK3n68KFc4hXQ6DavVCqlUCqVSSdaIx+NQq9UGMsHg7Ab2jxtwp5rOvqUqia3CUqnEObWn0mp1KBaLcLlckMvloPpfrhOAl230/SGLxQK3241CoQC9Xg9nskKk1emQzWZZkBZCoRBU3/NP2GMBgXTTObjSjI1GA8lkEgzDwO/3E4iObXY6nYhEIhCJRHoWcIW6b1pF7egMlYNT7NROUKzU8XX3GJ+3D2E0GgmAm4Zbh2s0mUyIRqMcAGKx+BIlMeSiYu1K/fbEMm4+TaFnJIHrSgZX5TFIZNPo7e1Fj9QOs9kMlUqFaw9pCASCnzwe7x15xG6/rUQiAZ/Px9/5XyhZOMVGKlOdAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
|
||||||
overflow: hidden;
|
|
||||||
padding: 0;
|
html/*\*/>/*/*/body #content a[href*="&database="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKRSURBVDjLhVNLTBNRFD3TTju1FCcBaxuaQEr94ydiZIHGpcFISBOi0YREZWHCVoyRxKUxxq0LXcACQyLsjO6KjSEiDfHDz0S0CLSxlFKd2g7MTDudGd+bMAQCxJucuXfuu+fcO/PeYwzDALVoNMqRuI3guq7rR4g/SEBC/Svxc8T3EUTD4bCGTcZQAUI+RvxLr9d70u/3o6KiAm63G3Qtn89DFEUkk0lks9lRkrvW3t6e2lCgRZFI5F0ikaDtjN1MVVVjYmLCGBoa6qccC7Z1kQafz4f/WSAQAGlyaXOOpQ+SNNUymQxcLhc4joPD4TBzkiRBEASkUimEQiGzdlcBlmWRy+WgKIr5Xi6XUSgUUCwWzTVN+IAzeOOde71orP0eAaOkbrDWf6Cw2+3mBLSYgny3KULXPOUY2BUB/hMd4IOn8XfhMGYjvU+2TECLLRLDMNA0zYw5JYa6Ghke/hyEn9/gZEqo3OuHp7qW3yJgESjoNPSdlb8gWCOCr29BMT0Ip5tBYnIWqlL6o8irzVsEaHcKSqQCen4cweok+FAblNRz2JxlODx1cEkzGWmVbTl7Z/jHhgCF1Z3GYjIKf+U8+ANhQn4Gm6OMUiGI9MhHg5Gl1sbu8UnKNc8B7Ui3ipxEcwvlpVFw6hz2N1xGabkXdqeBYqEOmfefEZWac4e6xz9Z22hbn+BmLBZbi8fjEBdG4NF/QdUDSM88hQ4FawKJR6cxLDZl86qzZdtdoDYwMBAkQg/2LL/ovNLVh++Dd7G0OAau9hTkrKgnnE39GW3f/Z6enpUdBSx7ePu4eq+zi4VNw+TbV0gsxFd5b9X5i4+mpnY63tsErl6okhvrfWzT0SAMR3FMXsnean08Pb/b/fgHqpjCspi90kkAAAAASUVORK5CYII=") no-repeat scroll 2px bottom; padding-left:22px;}
|
||||||
position: absolute;
|
html/*\*/>/*/*/body #content p a[href*="&schema="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFOSURBVDjLtVK7SgNRED0b9iuM2lr4QK1DQIyk0FZsJAj+gH+ilRZb2NjaRHTLmA9QFKz9huzm7t37Hu+u7IJgQjR6YLjDzOXMmcMERIR5EE5qXA4z4sqACYWEC5wfLQXf/WtMIuDSoL0A7DZDjBj/uYI0l8jzEEJYJMkvCEZM4PqZIxlzpGk+kSCY18TGtGYcx9Tv96dOqBUMBgNyzsFaC621312Ac+59yJFlGRhj5VvVoigKvniglEK32w1mkd3r9ejPPAjOhqdknYX18p1/rzo3pYqTh0OSRkJI5UMgPn4s61sX66SkhtEGcISGsQad5gH2FvehfV5BaIF2cwet5RZyKeu68pe5ubKG7dUNP5AQGltMN57Mosgr5EIiVQmYGvtc1PVicqHY+dXpk8Dg7v22XKFo1ARe9v1bDOlXKKKCs4Sn1xdU1v3vIc2CD3bN4xJjfJWvAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
|
||||||
right: 8px;
|
html/*\*/>/*/*/body #content p a[href*="&tbsdesc="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFOSURBVDjLtVK7SgNRED0b9iuM2lr4QK1DQIyk0FZsJAj+gH+ilRZb2NjaRHTLmA9QFKz9huzm7t37Hu+u7IJgQjR6YLjDzOXMmcMERIR5EE5qXA4z4sqACYWEC5wfLQXf/WtMIuDSoL0A7DZDjBj/uYI0l8jzEEJYJMkvCEZM4PqZIxlzpGk+kSCY18TGtGYcx9Tv96dOqBUMBgNyzsFaC621312Ac+59yJFlGRhj5VvVoigKvniglEK32w1mkd3r9ejPPAjOhqdknYX18p1/rzo3pYqTh0OSRkJI5UMgPn4s61sX66SkhtEGcISGsQad5gH2FvehfV5BaIF2cwet5RZyKeu68pe5ubKG7dUNP5AQGltMN57Mosgr5EIiVQmYGvtc1PVicqHY+dXpk8Dg7v22XKFo1ARe9v1bDOlXKKKCs4Sn1xdU1v3vIc2CD3bN4xJjfJWvAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
|
||||||
text-indent: 8px;
|
|
||||||
top: 6px;
|
html/*\*/>/*/*/body #content p a[href*="&sql="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ5SURBVHjapFNLaxNRFP4mnZmQZtKYpJ2I8ZE0NSbSWKpgBYNUhIJQUDddCaILwb34C0RcCi60vpa14sZFoSjxUWxTFEubFkxf9kFS+7Jp0yQmM5mH905SF9pSwQt3vnPnnvPNd86cA13Xsds+23XKsdMdQx//s0z/6hi54he3e8/0d3ZuK0FTFGhUJkVVhSbLUAiq5IxSCQrBEkGWOu8Lh38HGrlpWnlXCKhNSbZQo3cEE9FomYAuKZstE2wFa8RR1cpKqK2o4JhxmLVJVAlh5Df6IFj5MgENcHq9EAMBg2RucBDVLpdxVon0iXdvIf8sQHRIsNReht3XjI3ZI8iuPAOrkDyorBq3G6vT08ikUuAsFiN46HkXXL56eI41QV1/BMF+GulvCfCMDFvNXtSIHrC0KDTPhXgc7lAQdQ2thk2XIpewnkzCJvTA4T8PabEbfDWD+ZFxyEUdX94sw6QVCkZlxWAQU+8/YGZgALV+v0HgbWmBNzQMR0M7it8fg+HWwQk2cLkkcvJh5NNFsCVJMgq1ubiE5o4OI5CS8FYrya8b9saLKC48gIlTIG/6sBaLw3PpHrTEMrSXr4kPIaAKFkbjSA0PEVuFlB+DO8Ah2HoB8tITVPE6iplDWOn7jLn0CSQevoDV6TI+zEpUASkkZzaTYrLIrH3C/qMCFEbE4th9OEQexfQBrPYP44d+DuY91eBp+1dGgFVIDb729kKpdJfQtIy2yFNMdN/E5McYzAebUEhOYjZuQXaj5+9W/nOYbl9vLN26doOFScVI9BXmZ6dy9jpnpO1O5dfsRtBxxlk4Xu9mT4Z80DkpVlhZvdp+d3RmpyH7JcAAnHiAVYWMsdkAAAAASUVORK5CYII=") no-repeat scroll 2px bottom; padding-left:24px;}
|
||||||
width: 80px;
|
|
||||||
position:fixed;
|
html/*\*/>/*/*/body table tbody input[name*="check"] {display:block; float:left;}
|
||||||
z-index: 10;
|
|
||||||
}
|
html/*\*/>/*/*/body table a[href*="&edit="][href*="&where"] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFUSURBVDjLrZM/SAJxGIZdWwuDlnCplkAEm1zkaIiGFFpyMIwGK5KGoK2lphDKkMDg3LLUSIJsSKhIi+684CokOtTiMizCGuzEU5K3vOEgKvtBDe/2Pc8H3x8NAM1fQlx4H9M3pcOWp6TXWmM8A7j0629v1nraiAVC0IrrwATKIgs5xyG5QiE+Z4iQdoeU2oAsnqCSO1NSTu+D9VhqRLD8nIB8F0Q2MgmJDyipCzjvYJkIfpN2UBLG8MpP4dxvQ3ZzGuyyBQ2H+AnOOCBd9aL6soh81A5hyYSGWyCFvxUcerqI4S+CvYVOFPMHxLAq8I3qdHVY5LbBhJzEsCrwutpRFBlUHy6wO2tEYtWAzLELPN2P03kjfj3luqDycV2F8AgefWbEnVqEHa2IznSD6BdsVDNStB0lfh0FPoQjdx8RrAqGzC0YprSgxzsUMOY2bf37N/6Ud1Vc9yYcH50CAAAAAElFTkSuQmCC") no-repeat scroll right bottom; padding-right:18px;}
|
||||||
/* Alter table */
|
|
||||||
html>/**/body a[href*="&create="] {
|
html/*\*/>/*/*/body table input + a[href*="&edit="][href*="&where"] {width:0; float:left; display:block; height:16px; overflow:hidden; text-decoration:none; padding:0 0 0 18px; background-position:2px bottom; margin-left:5px;}
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAl1JREFUeNqck19IU1Ecx7/3drfrXVpJf6BEx53bjK02UaLIJdQsiOrJJvVaL/UePgS52LvPKdRe68GCQOohg4gYmGTZnEzndNPWXpqbNPfH3T+dc3BrDp888OP8zv2d7+/3+f24h/P5/bcAnMT+VlrQNO3URCAwth/17ZGRB4KmqpxODte+Abqu14wkZqbTvf68E//qPQKq5VVV5ekFuq52cmwfsPz3vcT3ynrte9WnGqoVVEXhVJaAw4e4DotQIp0VWOUBiVRMa+BInPpazSdi/RCoVlAUZReB9quIR45Wdp5ZWsI5u535oUgEF51O5n+emyMEHaDaOgIwAq8IfF9ZYf0ebGrCdDTKem6WJHwJh5lPF9VQLU+zqORy/QzOmM1wyTK2SiX02GzoJRT5YhHnHQ5cIBQiocn5fDi7uGhnLTQSzCeTjEASRczGYqyqidIsLCC3sYHc6io83d3oGR29ziuVSq2FKsHp9nY4CEWxXIarsxNuqxUFQmM/+gfq5ibuDg/j2fY2ptzuqV1DrBJE19cZgWg04mc8zgiMlXn8CI3hZr8HjwMzGBwaQjCRWKYEfCOBra0NXYSiTKo4ySzMLWlk4+PwEvHkuxA8fTIsZC5UK5RLpQONBLFUihHQFQ5PIJ98gSuX+vDq9Ue0Wu+h+UQv+5GoVshmMqLBYECwK7/zh4u1t1XIxPB7+SUTvyWV3Zf9OGbuZzGqoVpOkuWHvMnUsddjueNMeZ4Hpz1Pn7jW3oePhyLpw4n6uFYorNGmJWItxIQ9cqTu3+Ams1sYf/NJn22IKcT+/hNgALjZYbRNSSf5AAAAAElFTkSuQmCC") no-repeat 2px bottom;
|
html/*\*/>/*/*/body table tbody td:first-child {white-space:normal;}
|
||||||
padding-left: 22px;
|
html/*\*/>/*/*/body table thead input {margin-right: 5px;}
|
||||||
}
|
|
||||||
/* Create table */
|
html/*\*/>/*/*/body input[name="delete"], html/*\*/>/*/*/body input[name="drop"] {background:transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHSSURBVHjapFM5bsJQEB2zSIDFJrHYpEtyAyoKJAp6CrqIkBPkNDlBAKXjBEgUpKOBCyQNijFiEZvZl8z7wsjESYpkpNFfPO/Nmz9j6Xg80n/M9fWi3W7fMOnd4XAo8qogAbvO5xKvL6lU6s0aL1kVMDjP5ye/36+Gw2FyOp3EQFqtVtTr9WixWHT5/JhOp6s2ghP4ORaLyaFQiGazGa3Xa0HgdrvJ6/WSpmk0Go0MjnvIZDLVM0Gr1brm/WskEkkA3O/3abvdQjq5XC6xgoiVka7rNB6PNT6ns9nsu+OkpODxeBLBYJAGgwHt9/uzQ8Vms6Hdbie+KYqC+ASTFrARBMx2HwgEaDKZiHqn0yktl0uxtzrMMAyKx+MCc+4Cs13hwQCC1GQy+W3Lms2mUIUygbEqEBLNun8z8zswVgUfLO0WD4Z6kekn8/l8okNM8GFVUMYDoVWQ6HA4bEAzoyzL1O12kbRsJajwhYZhiUajJEnShWSAQaqqKnU6HahEGysXg9RoNPJ8+cwZZLSKp47m8/k5Kxzg4XBocNxDLper2ka5Xq+LUeatilahJLN1mEJ+ZDHKJthGAKvVauJnYi9ysHIqQee1xOsLg3/+mf5inwIMAJMhb74NwG5wAAAAAElFTkSuQmCC") no-repeat scroll left center; padding:1px 5px 1px 18px; border:0; cursor:pointer; font-size:.9em;}
|
||||||
html>/**/body a[href$="&create="] {
|
html/*\*/>/*/*/body input[name="delete"]:hover, html/*\*/>/*/*/body input[name="drop"]:hover {color:red; background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJdSURBVDjLpZP7S1NhGMf9W7YfogSJboSEUVCY8zJ31trcps6zTI9bLGJpjp1hmkGNxVz4Q6ildtXKXzJNbJRaRmrXoeWx8tJOTWptnrNryre5YCYuI3rh+8vL+/m8PA/PkwIg5X+y5mJWrxfOUBXm91QZM6UluUmthntHqplxUml2lciF6wrmdHriI0Wx3xw2hAediLwZRWRkCPzdDswaSvGqkGCfq8VEUsEyPF1O8Qu3O7A09RbRvjuIttsRbT6HHzebsDjcB4/JgFFlNv9MnkmsEszodIIY7Oaut2OJcSF68Qx8dgv8tmqEL1gQaaARtp5A+N4NzB0lMXxon/uxbI8gIYjB9HytGYuusfiPIQcN71kjgnW6VeFOkgh3XcHLvAwMSDPohOADdYQJdF1FtLMZPmslvhZJk2ahkgRvq4HHUoWHRDqTEDDl2mDkfheiDgt8pw340/EocuClCuFvboQzb0cwIZgki4KhzlaE6w0InipbVzBfqoK/qRH94i0rgokSFeO11iBkp8EdV8cfJo0yD75aE2ZNRvSJ0lZKcBXLaUYmQrCzDT6tDN5SyRqYlWeDLZAg0H4JQ+Jt6M3atNLE10VSwQsN4Z6r0CBwqzXesHmV+BeoyAUri8EyMfi2FowXS5dhd7doo2DVII0V5BAjigP89GEVAtda8b2ehodU4rNaAW+dGfzlFkyo89GTlcrHYCLpKD+V7yeeHNzLjkp24Uu1Ed6G8/F8qjqGRzlbl2H2dzjpMg1KdwsHxOlmJ7GTeZC/nesXbeZ6c9OYnuxUc3fmBuFft/Ff8xMd0s65SXIb/gAAAABJRU5ErkJggg==")}
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi9JREFUeNqck8trE1EUxr+ZTjKZ+kB31UwtSUiVRFykRsGFKGkEF7qqe5e6FARdtVBc+B+0brTg1pU7dSGIWm2sMebRkDQNTVMSoUWC2qZmHp57kkzTuFB64HK/MzPfub9z517pxtTUNQDHsL+oKZZlHX82PT27H/fE5OQtxTJNyabkyiJg27YzqDAPW8y9eef9QuwIhFc2TVMWH4iIBySex/27OkY65rOd510tPMKrmIYhmVxAwquSDb/SpM62eOVxjVasWZDovdCWo8lsH4bwKoZh7CGwqtu4GzrKeaJQQHR0lPX7bBYXwmHWb1IpIjgB4e0hABPEVCC5ssL9HvB48DGf554PahreptOsRQiPQ2DSx7sEwOmREc6/lEqIBINtGip0PhRiPZ/JQHiYgAv0EWRWV5lAU1V8LhZ51UFBk8vtIWgXaLWcFroEp4aHOc+UyzgTCLBO0n483ZlDspGGbul4EnoE4ZV7N1EQiMivrSFHFKrbja/URmp5GR6ieVddwNnoGAq/ivwbuwRyP0HQ6+V8iYqEfT7cSdzDfP0TBqlIw2wALQvxF1dRCX+bUHaazQGrbw+K6+u8ByKy1MaHSgLeeLvohrEB76XOAuUlXfm+uam6XC48Pvmzc8LVv+7WuWoUqZfJ9gm8LEN+TQdKorniriuNWq3uj0Qe/s/l2b5evTl0UR+q56t17bk+J2+5KuLAazQO0VD+WeG2+wH9vzEMSIuY+X2fnvz4I8AAYtpfN5Cu7WwAAAAASUVORK5CYII=") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
html/*\*/>/*/*/body input[name="logout"], #logout{ height:16px; width:20px; border: none; position: fixed; top: 0; left: 160px; margin-top: 10px; background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJHSURBVDjLlZPNi81hFMc/z7137p1mTCFvNZfGSzLIWNjZKRvFRoqNhRCSYm8xS3+AxRRZ2JAFJWJHSQqTQkbEzYwIM+6Yid/znJfH4prLXShOnb6r8/nWOd8Tcs78bz0/f+KMu50y05nK/wy+uHDylbutqS5extvGcxaWqtoGDA8PZ3dnrs2srQc2Zko41UXLmLdyDW5OfvsUkUgbYGbU63UAQggdmvMzFmzZCgTi7CQmkZwdEaX0JwDgTnGbTCaE0G4zw80omhPI92lcEtkNkdgJCCHwJX7mZvNaB0A14SaYJlwTrpHsTkoFlV1nt2c3x5YYo1/vM9A/gKpxdfwyu/v3teCayKq4JEwT5EB2R6WgYmrs2bYbcUNNUVfEhIfFYy69uci+1fuRX84mkawFSxd/4nVWUopUVIykwlQxRTJBTIDA4Pp1jBZPuNW4wUAPmCqWIn29X1k4f5Ku8g9mpKCkakRLVEs1auVuauVuyqHMo8ejNCe+sWPVTkQKXCMmkeZUmUZjETF1tc6ooly+fgUVw9So1/tRN6YnZji46QghBFKKuAouERNhMlbAHZFE6e7pB+He8MMw+GGI4xtOMf1+lsl3TQ4NHf19BSlaO1DB9BfMHdX0O0iqSgiBbJkjm491hClJbA1LxCURgpPzXwAHhg63necAIi3XngXLcRU0fof8ETMljIyM5LGxMcbHxzvy/6fuXdWgt6+PWncv1e4euqo1ZmabvHs5+jn8yzufO7hiiZmuNpNBM13rbvVSpbrXJE7/BMkHtU9jFIC/AAAAAElFTkSuQmCC") no-repeat center left; text-indent: 22px; overflow: hidden; color: #21759B; margin-left:14px; }
|
||||||
}
|
|
||||||
/* Create new database */
|
|
||||||
html>/**/body #content a[href*="&database="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjpJREFUeNqUkr+LE1EQx7/7g93sJptERPFSbCGSJkUKK20CinB4d8UVQWytAqIiWEoKi4CVlYJwWNwfoMVZCIJWFhcuTQiCORFDJN5tNtns5TY/Nm93fW8TNcHTOwdmZ1hm5s18Zrh8Po+ZrFFdwsnkO9Ut5og//4zH46WNjY3njuNgOByCEA/t9iH1fUQiCjRNQzweRyIRR6Fw47YgCFgowIQQAtu20el0wgKG0cdo7CMa1UA8Al7goUaVhVb4fzbKAQE1AedPFVM9eQEaPk0MZsleqPMyP0KlVCq9zmazq77vYzAYzEYhlEEEsViMzp9AvV5/Q2N3jipwsVgsrs5DNMwDOCMXkiwhpkWRoBCvrawv3y3cYhsoHwtx37ThuC4UCm7iJylEQFHl/4H4e3af845lcPQWfm3Aw2PjCb7sNWDl2jdPm/FnxCcQMplMGOt5HqrVaoraNBuh1WrhW+MreoYBx+rB6fawxb1F7moOH5rbg70znafmqR5ERpwJtX9CpEn20MGL4SZ2x7tQeQW2Z0MccCqRgx3aVkVsNptIJpNwXTdYhEiwb1mwXQe1UQ3n1y6ED5nExKX1yzp19fcv30Esl8tIp9OQZVn82zHpQQqNV58hiiKk5Sg+bdaak4hnUEYVlqTQ49BSqZTKAtixSJIUjiDICtTRAe7LdxCNKbi3/QBdrwv/kHB42L9Oc/thAapnLctydV1/xGAGQTDbATgq7AOe5zG54q/4ZZzj2sFHlsNO54cAAwDujTg3Gh40tQAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
/* Privileges */
|
|
||||||
html>/**/body #content a[href*="&privileges="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlNJREFUeNp8U11Ik1EYfr795kynaBBLglbtqiyRSMiMunCCF0FgBP14U5d1JdHFJAKD8rKrEAIjqMlGF/0hTHKLSpi15ZoMjdZgbi23ydzn3PZ93/b1nuFkK7cXHs457/s8z/ee853DybKMckxbVNAowSkUOELLXoJhqxQlfCwW4RcKkAfGpG2NCtXBSUUMtuw1DR3qGeqVtXqjkOUh55LBlW/TPalY0EactwR5R4O8KHe27Tt86fjgyOWvTmvg15LbUShKMHTs7zh5+sI173ubcu13KEzUhbJGUWmQE3Cus/+G2ee2BoMRhx369WFla2Y4lg7Y/QuvgkdPDZgZp1JT1cGmgANNzXvao8n5sEoHM6XM5dqfjdB6d4PKyDi1DfIynxdyOXP/eFdBkpBKxZHhk9BpJOzWyhAEMcc4lZrqLYj47PnkWCySOJ9OYy0WRTwSBJ8IoyDl4fniW2Scmh3QIc7MvrEbE6ur+WMn+kxaXWN7g6SHCCnhdLqXAz6/leMwU7MD5lEo4rF37oNl8tGYq7GlFSq1Bi+fT7m+e/0WVmOcegYsRMIsQc0WSnVpUG/lxH/JVVsQpf9rticT72gYLSfpNqJmB+xWV4BjuSs3b5+l+QOWY+KfsToG9+zAcgTIZkso/a6Jh+OvaX4nswk8dQGTrjoGLF7MAUsrQJpHjq1v3R29yPMY+UHGofgOJ8ZeYxnsMRE0hKar3bBGPfdlGqf6DuI85fSEXeyjlRqu8jlzHMc60hGauww4Y2rD9UAcz3wxzFOObSlN2CDN9nH/FWAAi5Yew8BvpusAAAAASUVORK5CYII=") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
/* Process list */
|
|
||||||
html>/**/body #content a[href*="&processlist="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAj5JREFUeNp0k8FrE0EUxr/ZrNvEWlqITdKqTS/ai6AWTyIWFHsTETx4KF49KR68+Q8IHqwgQr2pBasVBEUFL6KtejBLQRDEoiKShBpzWGya3ZnsjG92Z9co6cCPN/Ptm5n33r5huD8MM3acP3LOqbfWWC6Xw93lewFpVf2BnfmFzYaFUMFQ7nQ6E5zzCW1pPa51triR+B4mFo0dM/NRG0IlDnuFECPtdls5jgPS66S9gUy/XyROEw+NZVr85wAuxG7f91U2m2Wkr0ZqmEbLelkbXCYOewTn+4IgAEUC0q34gPSC68Qj4hpRjtIHijaC1GF7KGUpDENQDUB6VEB1zAF76uvpa0MyTsVF1BEYlIyjkfKvxp75yYZDxGMznzLzKRu/KUknTosLDs/z4hQCk1ohvfF7V/6XiBPEExs+OQrSMwyNnw00m83YxY9/rxphYLso3R+SmbzRbS0ozJFjBQ3ekRk6rI/2ZSgqWke6/r4zunjcbNT2KvFcW8Yu9LnTZ09OSqVQ9Wqoe3WUBooobBumFpBYWnjhkuNBdkP07MQMDlgbX9xP5dzk4Gg9oN7JAuushdCRWLm97EJilr2XH1BTR8l/LmlvGg+IlzqFeQg5+/HmOzdfzAODwFBhCKu3XFfrqKp5VKKCXiamjf0WXZ4WtUT2uDWDGatS/rxfaRutS6w72qUedkyfsgXr9Di+qhb60fJW1vJ0/gJeqbek90fdGlMj7hBXCMc0kstMKAPE1v/qo18BN3Q2e85/BBgADNADzS2n40UAAAAASUVORK5CYII=") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
/* Variables */
|
|
||||||
html>/**/body #content a[href*="&variables="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi5JREFUeNqMU0FoE0EUfTvZlArmFpR4L0jT3HvoKR6EQG6eC5bQeuwhIAhpYREUDz2IYKG0SEvoxbOtBIVC793oRTCQQyOlFGNNUrK72Z3x/8nOpkUQP/z9uzv/vX3vz6z1aG0NHJZllank8O/4LKVsySiCUgrfjo9h8w0H1Xu76+ubAS2OOKVERGtm3XVd7DYaT/hblN/53f2FBQhmi9OSDBqNdAaeh+HVFQaDAfr9vq7vHWeT+h4QdsZIsiMCx2ExtaBrOpWaiA5DhETc7Xbxpl5HcXb27et6vUYrzzWBnBAIBgtNg79IisWitpPJZPDRdX8loJAI4qQ5jgnarRb2trbQabfhk/QP+/vwyI4Vk3OvwYmI2ONMLDQODvB4ZQWfDg+RzWbh+z7SQsCmZBLuNTibLzcsUBMD+P56nSJLU7aN1JhATCzwkMYpjIJSuYwXjoOHpRJ+XlzAox0Z9HqYTqf1bLjX4OxwokDPgLNQKCA/NwfeVkmDe1qr6cqZIoWEsRIFZt8pEwVfm01UV1e1nebJCZ5Vq/hCB4nXtAXqNbibFlgBn+dcLvH/bnsbrzY2sLezo58tvasTC+L32ZkhSHaBIwgCbYcrK9E13mbuZQxjRevoCN1Oh4+tHQ8CndNTjEjeD3pfWV7G0uIiliqVRAH3MoaxHLco79ydn3fUtaCBqUhKRcdY0c+l6CdTXhgqn565lzGMtQ1B7/z88nY+/xL/EXI4vIwJwj8CDAAVoIrz1xox8QAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
/* Status */
|
|
||||||
html>/**/body #content a[href*="&status="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAftJREFUeNqkU7+LE0EU/mZ2d3bD7pqckhQqB4YDuQRsTj2t1ULESkgnWKloYRMQizQ2dhZXxkq8fyCFjdrYCAqCCIIgLCgWIkQ0m+Q2+9P3ZnMrNsJ5Ax/zivd973vvzYiiKLCfY/Z6vTbdmwR/j9yQ8NrMsuxsv9+/12q1ulmWIk0zQoIk4ThFnucoTRoQwtQwTYXxePxhOHz4wKSEA7PZrBsEgU5mkKjGv2JCdzQauaZlWflgMECz2dS+eCZl1aKKGUmSIIpiSMkOTO1Sz4BsCiZ3Op2qCltfnFpD9vK9Jk4mIWGOet3X9hnz+aQSkFyJSbtgUnH0EFWMiDil5BiW5RBKMrmmnOiPgBACcRxr4i6c1RbCcIbFIoNt15ZEtXRgUTzVApKSJdvmaumZ4/pm8CEdeJ02jmzdROPSaS1k2w6UsrWIdkCVjdqFk0g3T2Dx6Su8+9eqRXvrx9C4dRE/7j6Bf/083HNXcLi2go2VNh5fvVMJSPHiLSbvPush/nz6Su/dXV/DwduXEQ6fwXUbyLbfIC1yBAIIiMhtVw4cx9F98wC5HaU8qG8LTB89h/M9gUG9S2n89Qx3dsoZmPSILKVUtffyWDTAMYyPvxARUUqxrCgqgSgKaa11T/i+f8MwjNX/+Ujk9gtL1pYfydwjP+UPJfb7nX8LMAC+uy+OK4sAWgAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
/* Alter database */
|
|
||||||
html>/**/body #content a[href*="&database="][href*="&db="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAltJREFUeNqMks1rE1EUxc98kMlkMkkqbaXRhaEStCAhaDeuKii2JBWFtiqCYFcBof+BKW6yU3FpyUJxU1Eo2IKtXdRFV7EiFMG0pVAsxnRmYpPWSTLT+fDNpGpCwfbC4T1m7rvvnt991PDwMPZjkKgLR4sfRNPOhv3zRdO0rmw2+0xVVdRqNRiGCVn+RfYWvF4eoigiEAggGAwglbp5n2EYtBRwwjAMVCoVlEolt4Ak7aKuWRAEEYZpgGZo+AS+pRX6v41SgE0Wm7IaQkNHL0DSGwft/cOmq+ZotvApk8nMxGKxpGVZqFar+1YMwsALv99P/Aexuro6S3KXTisKhhYXWwqcT6fTyWaIkrIDta7Dw3ngFwUECcQriRv9Y6nR6f58PncoxC2lAlXXwRNwe1aIQAR4H4ceWY5EFGWqCDw9BOI/7xbV8C/JRewwzJnI+Ph1GXjIHjqFvxMwsacuYX2Dw6P5+eTV7u4nt2179sgQ620S9rhF3LmWQDwen5Dq9ecjwDLrJDtB1oMQf5ZRqang6RWYpfe43JfA1NsPuHBOqC6vnFzOt7eD3dzcRCgUgq7rditEA1vb29C1zzCNOQwODGDyzRy6e8fw/dWLfEcHjYVyGWwul0M0GgXHcQd4UHoRgvYOg8kEXk7OoLPnHtpO9JILHjNOl2tra+4YefI4xHA47GNZ1n0sHo/HtVBan8Stu6+RnRjB8bOj6Dx1EQxLQ1EUvlAodJKzu4QzjhGFeZ6/ZNt2u2mScdm22wCx8WCoj/76ZYP5uFFkvlEUZRM5/2XSwQLJKfwWYAAtt0zt3hIutwAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
/* Database schema */
|
|
||||||
html>/**/body #content a[href*="&schema="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAcZJREFUeNqkU7tOAkEUvfuABIgsyksTAkgBtISS0kIbYk/sTKgt7PgF/QEK/QMaSDREjQmFNhu0oLEglISHbniEAAE8l8AG2O2Y5OTOnT1z7rk7M8JisaB9hkh7DjmXyx2KoniGuRvozufz19ls9lev13VSJBIhSZJMeVI8Hr/MZDLXwI3T6VQqlUq/2+3W8FEXGA6HNJ1ODbzRaFSTG43GMUTOmcQR+ZOiKNlNm+PxmFqtlm2Xx9/gTIp5PB4lEAiclkqlt2Kx+Gmz2R5kWVYnk0kSnHy/31exwcDTNO1bgB0P7KZB9AEtCBbRayeRSHABdpKvVquEnk15MhY76O9x07LX66XBYKDnbrebms2mgQcBks2OxmKxEGzrOaxTNBpdblgPOCL+0QYBq9VKvV5vay0YDBIu3BE2XbAe0EH+jPhLDoeD/+RWdZzCGlm73U4+n49SqdRVuVx+QdUFR84BEkyvJ/cmL82lUemEJ+Fw+EBV1bs1J5lM3iLcS2YC/D64P1j+wVxdIeb3+12hUChcKBTecYwf7Xb7a9MBz1mQS1u5m1VcAq5cAN8LF6BBXAXquwLC6oFJJhA3wLwp33Jh3+f8L8AAZ3ntkRsbeCkAAAAASUVORK5CYII=") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
/* Refresh */
|
|
||||||
html>/**/body #content a[href*="&refresh="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAt9JREFUeNqkU0tPE1EUPtOZQh9QSVsKtAgB5A3RWDRaU+PCR4RUDSZGSTeuiDvjD3DRhJ1xYeI/MJi4wMRHosTEuJCNEqJBQQtFaAuhb0amnee9nlsLNW5cOMk3c+fc8333nO/McJRS+J9LYLfjD1ZBMJtBEAQw8byX47hxDAcQPZW874g5PGyGELLJ83wY34Nvb3omhb8EQwJPI4cO2tytjRanwybYWFAs6v2JtByMrktXCaVzhq5f2COY9qmUhqy1MHXltOdIm9PSyulgK5UMUBSCZXK2dpeldeyk+4yO5PCY14/PaguUEC/PkchYoGk4tVmCkqrLK1tSMpEuFth+h8/ecKzf1ZVNy3D9vM+/k1dBU9VqBbqqjnf5rO6tuAjZ/K785kPiy3qycBeFRzRZHonGcq+mX0bnPS1WWI/mQNd00BWlKqAqyim3w+zcyRfhayybRPX7aNi0JIpsL4w4cSs86BfzJWhwWcBiFVi82gKe0s1znE2SNUhuFwo4iWlD0wAdZ94E2ajvPZyb/9NtnNT8vgBTkxQdJIOU18QwwDB0qLVY2XgnmRDrGUn+kcPt9c1NdfT568X1aguyHN0uyEXJJIDjgLUBPZlQSzLkUinIZzKwg8Aqj9bV1ZzDnKF4erdRUxTzvgC+vF+LZ3KiUAstvW0+PO0Olj1R2cMu6CjGrnn72lswh9tIZFWM71YFVHVmbflHhtitkODtlqHRwKCnrTGCU/iIeIfr20MXAwNJcz1lORvRuIScbNkLZpAj/Jj1HeLttinX5dHhkk7BbubAUVPWF0WVJCWNxqwCt5J9+mLBKMmzaPSW+OjGbwE0B0yePjD1XgqZfMMRc0+3m+vscBKni33KoimXjdHV2JIWjX4mycUn5NuzGEktQ5lbEWDTcCHcnGegmes8GwRn9yDw5k6MSaDLC5BZ+kRXZpdpfu0nxtKIDHL1PQFWq60C4R9/sFEWBSgil/wSYABg+JOXZhLaRAAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
/* Show structure */
|
|
||||||
html>/**/body .links a[href*="&table="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAoJJREFUeNqkU01oE1EQnk02iTFQE7QihUKRkKTF1iU9+FdQCoWYgAcPegkIeiiIWiHgwUvpQXs1Ggo99OYlFwUhWAhYhZJWUmhMxJbYYk1LFDcmJraSv911vjQbevPgg9kZ5vu+eW9n3hM0TaP/WSI+gUCADAYDmUwmEgSBUNRoNJ5jaKjNSyuKsqRjjUaDVFWlWCy2X0BfDJ5nd5r9KxZI0Wh0BuRgMHibcznGrrD/wD6hawwHxBdcLte12dnZGYfDcYOFhkJBpnL5F3Y0IAcMHHB1nYAj+Xw+xHeZ8FSWf1BPTw+trqY2JElyAkilUhsej8dZKhWpu/s4jY+P3+P0s/n5+f0TVCoVqlarL0Oh0KTZbCZZlmlgoN+pqgrBEO/u/iZg4IALTecX+BQX6/X69Xw+v8e7bYqiSMvLy+t+f2AGhhg5YOCAC43+7+T1eh+srCS1hYU32tJSQkun09rg4NA0TwLTIMTIAQMHXGigbU2hVqsZq9UaNZsKKYrKoxRZKDYwKizEyAEDB1xoOk3kzo6xP4PExMT9WyMjl/q2t7+npqYevkBucvLx1d7eE9Li4tutcPjJXEsoCO+z2WxcP0GcC3zmDt8ZHj7bVyyWyO32SLHYOwl4ufyTdna+ELCuriN2nlSEC2x1mshdRZGbkchcSJaLfCOtFI+//prLbRIMMXLAwAEXmk4T+ZLALo+Ojj1PJtc1t7s/bLfbHyUSGQ2GGDlg4IALTesd6Y8JY7JarX6bzTZtsVhOwq+tfdMymZx2MAcOuPrmrSYKaDHRUbZjbIcA8sM6xQ9sADFP4xNf54/t21tnk9kKrG3qBdCLw20T//GCFbY9tj+sVf8KMAACOoVxz9PPRwAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Edit row */
|
|
||||||
html>/**/body table a[href*="&edit="][href*="&where"] {
|
#logout:hover { color: #D54E21; text-decoration: none; }
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2lpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wUmlnaHRzPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvcmlnaHRzLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcFJpZ2h0czpNYXJrZWQ9IkZhbHNlIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjcwNEVCNDY0MDM4NzExRTFBREUyQ0JDMzAwQUI1NjI2IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjcwNEVCNDYzMDM4NzExRTFBREUyQ0JDMzAwQUI1NjI2IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzMgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ1dWlkOkFDMUYyRTgzMzI0QURGMTFBQUI4QzUzOTBEODVCNUIzIiBzdFJlZjpkb2N1bWVudElEPSJ1dWlkOkM5RDM0OTY2NEEzQ0REMTFCMDhBQkJCQ0ZGMTcyMTU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+MT7FiQAAAiZJREFUeNqMk1FIU1EYx/9nO3e+NranKIw2ErM9SQQXxCKMRdFDCWEaNIuIetseQiIKG/jQQ4H0kkQxdLRaYiijtdWwljjKjQlNRQPHEhWUjca9eb3bPd2tFTdrrgMf53x8/98533e+cwhqDFsDQccpILHYXvbv+f1NBcD5DfB8BcZpLfDAvp9+YrE81c+azc6jLlf3RE/PLgWgtBaoGVZZltv4dLpbcjph6+w8Fhgc3CD/AQIMhzOr5osOV7orlUrBaDTC29gY2L25eZPurwfOtAIHW6rUosKyjOtXr7ns4bEW7G1+Bp7n3Tv1eq+V42bojfMAIdvDpzv67MWiDIvFguFHTS8FgfrnCJmZ4zhUvUQtLEkiVlYWEJ98MW7dg35F0SV/yWgtWBByyGaXEH379L16oFtPyRutlG4H53KrEIQsXo0ORQ0c7qg9C2+V02rw2loakvQdwz7PhMGAXkYR0krVlpaN/gteXp6HohQw9MQzqcK3GSO/Yd8YgyiKf2bAGBrEPC6fdfTZM5nPqq/g8YA3pqZ9S42V4ZEww0iI/VUxFSUYCkW0nbsSOT415YbJZMbDB76PtARTvA5GgWBUqdosmhdJs413tBOdbofR1CXev+uI19Ux94ckCb77xGr9NdD1PE4eOnKhdfR5/3Qk5I99WUIgkkBcLcykxhWNFbf4pd2V0htkl06QgdkMYskFTOdFtlERF0qXXZm1a7kSL9sPAQYA2Q4Ie25SbgYAAAAASUVORK5CYII=") no-repeat 5px bottom;
|
|
||||||
display: block;
|
body {margin: 0; line-height: 1.25em; font-size: 13px; background: #F9F9F9;}
|
||||||
float: left;
|
body, select, option, optgroup, button {font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;} /* IE6 */
|
||||||
height: 16px;
|
input[type='submit'], input[type='reset'], input[type='button'], input[type='file'] {font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;}
|
||||||
overflow: hidden;
|
input, textarea, pre, code, samp, kbd, var {font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif; font-size: 12px;}
|
||||||
padding-left: 24px;
|
a {color: #21759B;}
|
||||||
width: 0;
|
a:visited {color: #21759B;}
|
||||||
}
|
a:hover {text-decoration: none; color: #D54E21;}
|
||||||
/* Select data */
|
form {margin: 0;}
|
||||||
html>/**/body #menu p a[href*="&select="], html>/**/body .links a[href*="&select="] {
|
table {margin: 10px 12px 12px 0; border: 1px #BBB solid; font-size: 90%;}
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdVJREFUeNqck8tO21AQhn8bB8ehRe0SUEBOlIsSVFGqqlK3oey6K+9A96wTKU/RFU/AG7CrKhAg7gmKiJKIplFWqItWIQEfuzOT2LmsSo408j+2/5lvjo+1rULhM4AFTLfahuu6i3vF4rdp3F/y+W3DVUrzKNk8BTzPC4IKS3h8Hc0Hz49zr8BeXSml8wu8PsU1uW7EhjpHOmd7wX1fs4e9hnIcTUkBDfs1DzGjS5N1pPOGRR3bLjR6ztoNNJm9ebDXcBxnjMD99YCdzGvJT25v8T6ZFH1QLuNjNiv6++UlESyDvSMEEIKcCZzX6zLvXDiMo0pFZn5hWfhxfS2aF3sCAkUvDwmA1ZUVyS9qNawnEn0aKvQhkxF9WCqBPUIgBSYISnd3QmCZJs6qVekaYZqbmzGCfoGnp2AEnyAdjUpeajTwJh4XfU778S6d7tNQISlA3rFN9AkqzaYQmLOzuKIxuGuYaE4H++F/RvbqVEVXE+cgsbSEFFH0Hh+RtW2sxmLo9npYoy/yNpUajkBeo9ftzkwSVFstIeBVpjH8rhc0xigBe43f9/dmKBTCburv4ISb//VvsYe9mmXbX/VIZHman8ntdH7y0BbFSwrjmX6H4s8/AQYAQChL+KIinhAAAAAASUVORK5CYII=") no-repeat left bottom
|
th {text-align: left;}
|
||||||
}
|
td, th {background-color: #fff; padding: 4px 6px; border: 1px #DfDfDf solid; border-width: 1px 0 0 1px;}
|
||||||
html>/**/body #menu p a[href*="&select="] {
|
tr:first-child td, tr:first-child th {border-top-width: 0;}
|
||||||
clear: left;
|
td:first-child, th:first-child {border-left-width: 0;}
|
||||||
display: block;
|
thead td, thead th {background-color: #DFDFDF; border: none; border-bottom: 1px #BBB solid;}
|
||||||
float: left;
|
thead tr:hover td, thead tr:hover th {background-color: #DDD !important;}
|
||||||
height: 18px;
|
tr:nth-child(2n) td, tr:nth-child(2n) th, .odd td, .odd th, tr.odd {background-color: #F1F1F1;}
|
||||||
margin-right: 5px;
|
tr:hover td, tr:hover th {background-color: #BCD;}
|
||||||
overflow: hidden;
|
fieldset {display: inline; vertical-align: top; padding: 2px 12px; margin: 25px 12px 12px 0; border: none; background-color: #F1F1F1; border: 1px solid #E3E3E3; position: relative; padding-top: 14px;}
|
||||||
padding-left: 16px;
|
fieldset, x:-moz-any-link {padding-top: 4px;}
|
||||||
text-decoration: none;
|
fieldset {%padding-top: 14px;}
|
||||||
width: 0;
|
legend {font-weight: 900; color: #000; position: absolute; top: -1.666em; left: -1em; padding: 0 4px;}
|
||||||
}
|
input[name='limit'], input[name*='length'] {width: 3em; xtext-align: right;}
|
||||||
html>/**/body .links a[href*="&select="] {
|
input[name='text_length'] {width: 5em;}
|
||||||
background-position: 2px bottom;
|
select + input, select + select {margin-left: 2px;}
|
||||||
padding-left: 22px;
|
textarea, input, select {border-width: 1px; border-style: solid; -moz-border-radius: 4px; -khtml-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; border-color: #DFDFDF;}
|
||||||
}
|
input[type="checkbox"], input[type="radio"], input[type="image"] {border: 0 none;}
|
||||||
/* Edit Sql */
|
input[type=button], input[type=submit] {border-color: #bbb; color: #464646;}
|
||||||
html>/**/body #content a[href*="&sql="] {
|
input[type=button]:hover, input[type=submit]:hover {color: #000; border-color: #666;}
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY1Mjg3MUE5NEQwOTExRTFBMTlFQjAzMEMzRTgwNzJGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY1Mjg3MUFBNEQwOTExRTFBMTlFQjAzMEMzRTgwNzJGIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RjUyODcxQTc0RDA5MTFFMUExOUVCMDMwQzNFODA3MkYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RjUyODcxQTg0RDA5MTFFMUExOUVCMDMwQzNFODA3MkYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz67SGPfAAABvElEQVR42sTTSyhEURgH8O94jRqTJg1lo6YsptGIpEzKa2FhRGhY2chCWZDSbHATmkgkC81CInklpCxGmlGy8QqTopnFJEXyiGsadDv+p87UbKwsfPXr3PP67nncyzjn9JdIoD/G/ydgiFKUXfAIJmiCLOgEC7zBNmyCAlabwZAx9f6uTybqFRk2oAXy5LNoG4ZRyIAq2W7bXWBkNBq9DRbLClcUvsXYvtgCEpEeArAqV5YPl8v9/AmlX47Jw4WVmUym7MXTU2e1xzPxzPmwSDAOTqiEJZkgObZH7zxpot7iIGvkg3rP/Y1Ws9m8fhyNzqHDm4ROnzzMPnEmsAcpkBhLUlJAmeXF5Kiuc9mUAfdrmi4xFInoL2K30CYnrcOgnJMi0ecXVTgqKKe1zWWbnXH7dvx0FwxrN5qmUTtjhSJBB77GIpTfoJMJrqD0IED2+wca6+5xGacn3SeqykcCQYqiL0lVVTHHIwaH4VCWYjXZUAxbtXb2ytVrrnSyUH0VNctDDsdZE3tOlcvVxR8eIhPOakrY0+0jDV0E+RHqX2JX8AGq9GukQS4cwAvUQLq88lT5sgT273/jjwADAGLJkFFBwODaAAAAAElFTkSuQmCC") no-repeat 2px bottom;
|
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;}
|
||||||
margin-left: 10px;
|
input + label input, select + label input {margin-left: 4px;}
|
||||||
padding-left: 22px;
|
td input[type='checkbox']:first-child, td input[type='radio']:first-child {margin-left: 2px;}
|
||||||
}
|
label:hover {text-decoration: underline;}
|
||||||
/* Inline plus */
|
fieldset div {margin-bottom: 2px;}
|
||||||
html>/**/body #content input[src*="file=plus.gif"] {
|
input[name='Comment'] { /* !!! */ width: 24em;}
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAelJREFUeNqkU81qFEEQ/tr50UncrI4iwq6oRJCIIV6zxFxE9iCIbxHwXXwA32CPXgRFEZFgPGgiIcfNn0hgYU1mnV070zPTbXXP7Mwke4hgNzVT3f3VV9VV1Uwphf8ZDJ2r9GUXSVuhdZvEP8PmkOQtFF5CqaFttpRauXN99vmDmwtNz7ngVtGnI+QxF9/3Nme3ezt6+cJGavbbCzfmm+JP5ApEBXgwGJh/vV6vcrj3G/ea2wc77ZzAePAtWG54HBaoMAzxefm10VufnqBWqxVnnue5ZGeuaiPJQoyiCJzzAiSEOKFXzxhjGNsVBBpUJdF6v9836/0f+5BSZga2Dd/3JwniOMZoNMK3x+/R6/UwHA4NgeM4+PronTHUMvemhTAKJwnSNAVPOLrdrsm8BmvjseFYQDVKnKRCEGfKkThC4AR4uPU0uyhhNpY+GKP5j8samY0ZcsaodPGpCAIrgJoifWpccJReL+vUl3WUNCciENQBOIcqqiQ4j5JYNxfNMoLIZPcwllQGD2UXkse59VamN072suSSSiZ1S8PCLt3nFq5Jnt61G+40m2aWua+dvwo/13MhnDj+MviZHkQddMQaM5AZdhtL7BmuYJHWl854TAF+YQ2r6hV+q12Wp6eGMs//OhLd8X8FGACYiuElnjs9iAAAAABJRU5ErkJggg==") no-repeat left center;
|
input[name='Auto_increment'] { /* !!! */width: 6em;}
|
||||||
height: 16px;
|
img {vertical-align: middle; margin: 0; padding: 0;}
|
||||||
overflow: hidden;
|
.error {padding: 8px; color: red; background-color: #FEE;}
|
||||||
padding-left: 16px;
|
.message {padding: 8px; background-color: #DDD;}
|
||||||
width: 0;
|
.char {color: #070;}
|
||||||
}
|
.date {color: #707;}
|
||||||
/* Inline up */
|
.enum {color: #077;}
|
||||||
html>/**/body #content input[src*="file=up.gif"] {
|
.binary {color: red;}
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi1JREFUeNqkUz2IE0EYfZOZ3WySi9FAPLU4fwjEw8IUhyjXxUYrK8FOG8FWQQst7OxEUE7wOq200qv0GguR4+BEMIpwGDxNBE8vcMZcsv87fjPJrkl1iB885s238958M/Mtk1Lif0KI6iINLAfGzhOpEXZto9kkvISUDwHZE4OcvFA9svfS7LH9ZSttWOPrJeIi1Wg7vrO08rVS//idUWpOIArVt9qJmaly51ff6oxIO53BrFAojDpaM0f3lesfvtUGBlIbFFNMWo7jjO399HZFj+eufxnLm2bGIl1R8ZSugOB5LmzbTvD41oFEoPjoN9t2EOuEDAO1hjmOB9d1teDF/arm3W5XC6Iowr3LOZy8+AZccJRKRSogYMMKyCAKmO/7CMMQC3em0Ww28Wyxjna7TZV5eLfaBeccrx/N0pUK9Pu+1ihtbIAgCGG7ARqNBpberuPm/AYMw6B3Frh2t4n3n3qaCzMLyUzEOoHhEbb6EXoex9kb6+D0kkZmx0BAUPzq3AZCvwUzUwDjVP3wCEI7kYEdmjDSeQ0VvttLDISRpXxuvD2i2CD0tQFSalH6b/tQ1yQGZjYxTiL0hwaBp9vT86UrrInEgThOX/mseb50aEzr9Xsu6VRLg8Ndpf0PTwaOU9m5ZypnWBMixQ0oZPK7NeK5gu/Y7trKq9bWz9YT/H6wrMooghUPgp86AzZ5nNy2+ZnkJuSPZYTPF4iuKYOMqlIf599C3X73jwADAG6CADM79TwjAAAAAElFTkSuQmCC") no-repeat left center;
|
.jush-sql {padding: 2px 4px; margin-right: 4px; outline: 1px #BBB dashed; font-size: 9pt;}
|
||||||
height: 16px;
|
#content {margin: 2px 0 0 260px; padding: 10px 20px 20px 0;}
|
||||||
overflow: hidden;
|
#breadcrumb, #lang {margin-top: 4px; height: 22px; display: block; position: fixed; top: 0; left: 260px; padding: 2px 12px; line-height: 1.25em }
|
||||||
padding-left: 16px;
|
#breadcrumb {z-index: 100; background-color: #DFDFDF; }
|
||||||
width: 0;
|
|
||||||
}
|
#lang {right: 20px; left: auto; z-index: 10; }
|
||||||
/* Inline down */
|
#lang select {font-size: 8pt;}
|
||||||
html>/**/body #content input[src*="file=down.gif"] {
|
#menu {position: absolute; padding: 10px; margin: 0; top: 0; left: 0; width: 220px; background-color: #f1f1f1; border: 1px solid #E3E3E3;}
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjVJREFUeNqkU01oE1EQ/l72vWTTZps22B+ltCiBRItYsYhSBIkXxUMv9qzgQaH04kEFe/WsIh486s1jDyJePIhIoRepogjRYipoNRBjmuz/Pue9dJf0VKQDHzP7Zr5vZ97sMikl9mKcT78kx/rB2GUKKoShXTgNwitI+QSQbd49k1emp/Zfnz05WTQzwtxZLxE3qbzt+M7b1W+ltY8/GB094ohClaucnpkoNv90zGYPtdnsPuXz+V5Fc+bYgeLah++VroDUAoUUk6bjOElVq9XC84dHdXxx8T0sy0py6XTWJF5B38F2B/A8F7ZtJ0We5+2Ie3NCUPfbPC7DQHnmOB5c102KFKFer2tfq9UQRd2LMLiB4eECNRCoO0AKEQlEAfN9H2EYYvneYSxeMvG73tAC6u0SBh7cnsKbp7MUc3Q6vuYoLtcCZEEQwnYDVKtVTI5I3F0Yp1YF7Znj/s0SThwZ1DFP90EygZiXghqB2tnqRGh7Bubv/NSFx8sDXQIhJp+5+g7CtMBEVnMUNxnBDtMQGQu5oXHML9UTcoyz1z7pXJoEDJFLRqAOaJ7QZ0j1aQGFgX2HMHdrMyGfW/iiz+K8guYQlyPQ62p4vnS5mcvEW8iPlXHhxtck7jWv03aJ19BbgfuZllgeDRynNDg20S/MHE8ZAgpZa0QjflbwHdtdX329sfVr4xn+Pl5RuyyAFQ7COD8HNnqK1Hb5mWQDcnMF4YtlCteVAF0pLP1V/p+pPbb+CTAAmwfytdL1/44AAAAASUVORK5CYII=") no-repeat left center;
|
#menu form {margin: 0;}
|
||||||
height: 16px;
|
#menu p {padding-left: 8px; font-size: 10pt; border-bottom: none;}
|
||||||
overflow: hidden;
|
#menu form p {padding-left: 0; margin-top: 5px; text-align: left;}
|
||||||
padding-left: 16px;
|
#menu form p.logout {margin-top: 25px; }
|
||||||
width: 0;
|
h1 .h1:hover {text-decoration: underline;}
|
||||||
}
|
h1, h2 {font: italic normal normal 24px/29px Georgia, "Times New Roman", "Bitstream Charter", Times, serif; margin: 0; padding: 14px 15px 3px 10px; line-height: 35px; text-shadow: rgba(255,255,255,1) 0 1px 0px; background: none;}
|
||||||
/* Inline cross */
|
h1 {font-size: 12px;}
|
||||||
html>/**/body #content input[src*="file=cross.gif"] {
|
h1 .h1 {font-size: 12px;}
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAe5JREFUeNqkk89KG1EUxr+ZubnUjJaipgtNtTZKxE1AVIi4yM5tF30Hoe/iA3TnQkTBRbZFKApCAl1142CJqLR0ZUNJJpPJZP70nJvcEK0SpAPfzD3n5vedM2dujCRJ8D+XODIMGMA4aYfibdLkCKZO+kxlP5FcwRla7MytrHxcLhazMp2WT5HcbeB5gVOp5H44Dqd2RdTb217a2Mi6vi/h+6O6lu9WV7M3jsPd7ppsQJqMTVO6rgtWdn8fev1YrpskkhlmzZBuLJ8qN5tNLJfLqgw/OX4sxyaaE2G/L8/z0Gq1cLy4iA+1mjKcOzhQ+RrFpmniy9oaUqkUMpkMNDcwCIIAYRhiwraxNz2NwskJLMtSgJQSZwSr6Xa7aDca/xowHFB7Xr0OO47vwazx4W9PJpozu2xK6hCY3N1hLIqQPz29BwshULq8RJp+x5JUTHODIRpkkKbv/GYI/ra+jq+FgjJgbV5dKYMX1KHmBh1ImgFv3pZKCr4geJZiVjWfV+2e53K9LqiQ5kSnfzwjmuIY+cxT8J3g+aF35nWVYJ1rx3HQ6R1pWNd0ewu8bkdRfkYI2zYMi/8M4oF0juGq7//8FUWHh0DF4L2XwMIW8H4KKFL8asRR/vObwHOg3ACu2YA6x0S/wHMunmHzrwADAPb07huzEp/RAAAAAElFTkSuQmCC") no-repeat left center;
|
h2 {padding: 22px 0 0 10px; font-size: 0; height: 2px; border-bottom: none;}
|
||||||
height: 16px;
|
h3 {margin: 40px 0 0; font-weight: 400; font-size: 130%;}
|
||||||
overflow: hidden;
|
#menu h1 {position:fixed; height: 22px; width: 100%; padding: 8px 10px 4px 20px; top: 0; left: 0; margin: 0; line-height: 20px; display: block; background-color: #DFDFDF; border-bottom: 1px solid #004000;}
|
||||||
padding-left: 16px;
|
/* border-bottom: none; */
|
||||||
width: 0;
|
#menu h1 a { font-size: 13px; }
|
||||||
}
|
/*#dbs {position: absolute; top: 70px; }
|
||||||
/* Delete */
|
* #dbs {margin: 0; }
|
||||||
html>/**/body input[name="delete"], html>/**/body input[name="drop"] {
|
p.logout {margin-top: 30px;}
|
||||||
background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjE0RDRCQjlFNENFRDExRTFCRkZGOUEzNzI5RTFCODEwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjE0RDRCQjlGNENFRDExRTFCRkZGOUEzNzI5RTFCODEwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTRENEJCOUM0Q0VEMTFFMUJGRkY5QTM3MjlFMUI4MTAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MTRENEJCOUQ0Q0VEMTFFMUJGRkY5QTM3MjlFMUI4MTAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5zX5oGAAAB3klEQVR42qRSvU7CUBS+LQXaBgIpgSiJEpIuxMlVwgMwuOAb8Ah9AgZnJmfeABYegMHoGxiW6qAJJg3UEJAWaIvfKW1TjamDJ/l6b+893/n57uEOhwP7jwn0GQwGjOM4H7Aq0AGugPPA7xV4BEbAjJISut3uMUDMrgVB0CqViqrAstmsSI673e7SNM2WYRg3juP04Tf+VkFIBqGnqmoDlUie5zHLssI7GfHkYrFY0nW9t91uWRiEDxyqqVRKq9frDWSTiEhOcdAZ3dVqtQbP81rQ6rEClNkpl8uqbdsSSkwUDYkkVKLO53PS6S4M0JQkSdlsNpGj67qU0QftCUEAJsuyQpx4gDMsIjm12222XC4ZqvFfJZPJMGjjE8mGwyHb7/diwIla8DPggkFpf0+En2RfNP4oWzg/fgAo/obyLxFAnkwmf2lA/jZx4hU8rNfrJjLKwTAlGpKZxImeET8j9P0MsoVBYkmA4UUtnTjxADOaMPQ/xd6iPn8DtLEWi8UUa584UQuYLiaK4rhQKNCzafl8XgWUdDot0j20sVerlQnoKL+Pasf0SvFRFnBQAl6g+m0ul2tBjwucnwb37wj8BJ3uMZUG/k+AOeCEATzgk7qBwwcwTdDQDXyJw74EGAC1PioqQ6UN2AAAAABJRU5ErkJggg==") no-repeat left center;
|
#dbs {position: relative; top: -20px; height: 0;}
|
||||||
border: 0;
|
* */
|
||||||
cursor: pointer;
|
|
||||||
font-size: .9em;
|
|
||||||
padding: 1px 5px 1px 18px;
|
|
||||||
}
|
|
||||||
html>/**/body input[name="delete"]:hover, html>/**/body input[name="drop"]:hover {
|
|
||||||
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjFJREFUeNqkU0tPE1EUPvPoOHdaSSkUsYkY2xLTmpCQmJBAumBNZIFLoz+CX8Av6MpfoHHLhgXsTTWE7ohtDRhEkrGpQy0M7e3ceXnO2Db1BQtv8s3cx/m+87pXCsMQ/meo9HktSaDgnyABZBAbOF1GzA3sviDeoatthOnjgvAcnau/CT6JMbaZXVjIZ+bnU2xiQqcI+eXlonl0VDo5PHwqOC+j3c4vEQzJLJncWlpbK4SqyhzPA+fiYnhmzBYKRjqbnaru7m51f+5HIhJ5eCVJmVu6/mZ5fX2Juy4LguCv+UqYqhqG/GBvb184zrMXYWhGEWA+G3PFYv67bTPHca4tWiwWYzO5XP60VqM6vYwEPICV2+l0ymq3R4au60Kv240ghAAPU4pyVlWYnpxMEWdc4F4gyzoZlSoVME0TOp0OKIoC8XgcEokEaJoWCezkctDv9XTijIpI2h56FLYNjUYj8oah/kGmwajdaOuNd8EFOLNbrcXQsozG6uq1NUiQvRB94oxHUGk1myt3VNUwUP2mccZ5mzg0lwcC25/Pzz+BLHMDW2VQ4/8BbDFvOs4xcUYC2HWz6/vl95ZVxwPOUIQN8h2HQHL16qreC4IycUYXiS7IfVw8xtv4QJY3C5qWf6hpqaSi6GTU8f3+RyHadSGOT5BcxWac4n7EHQhQLaYQ0xmA2SJAaQbgET6uu4OL9rUF8KEG8Bbd4hS+ISzkekMBeSxN9YYa0kPsInrIDX4IMADJaAE/Me2jPAAAAABJRU5ErkJggg==");
|
|
||||||
color: red;
|
|
||||||
}
|
|
||||||
/* New item */
|
|
||||||
html>/**/body #content p a[href*="&edit="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAetJREFUeNqUU01LG1EUPW/yQsigUmOISZSkYxdVwW2lm4KkFrpwV6F/QGj3Lrpy4a9oN/0FBcFNQYWIuFHoIsRSWxzFkjZCsKaZNElN5r3eOzMOtEg1F87MvTPvnHfu+xDPVlYghFgAkEH/UZVaaxCy71ZXX/fLpslfSOW6nAtNjycfgEAQSqkQ19X7hTsgrpCuL2AozRIC8/cENo6091aKQL83bKBgsYiPrWOAxxPXkG6v5zlwA4FNW2NCdqC//4Lm2QiP40Q8UxDKB9euHgJxhez5AoED+DNX2lieToS97h0eYnZyMqx3SiVykANxDfnz4QkGd3Pf2MFisgs0NKxhidNaLVwPK5PBcbUa1plkEjzec3A53NQXD+w5l6y9+fz01jtQTL/3HbQc5xSmU2RFyjH1aOZG8qedsufAE2icn+cHOqk5+lCkHHtr27dy4Al0u0IatbgY+mg9V0sarwoHoC4xEWnDku2w53/BoQIHRrI0zUmeFdfrcbQTJsoOkE0kMDYygnFasEaziVwqhfzoKO6m0/hRr185MOTvTocFI1fbyOegEAO+VCrhyeMo2/ZfNY8nbkReUN8UsWg0irf3m0GHpIDsf9eAxxM3JmJkyzDNl4Rcv5dJtVpfRZCbhEFupQ8+XyLnjwADAJgWSEmnMNKYAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;
|
|
||||||
}
|
|
||||||
/* Create view */
|
|
||||||
html>/**/body #content a[href*="&view="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAkVJREFUeNqkU89rE1EQns1udhOCrk2KlxIhaaGHFPfQBFJYxFbc+gtvkQq5+uPoQfAPEHJQemnFIAFFzCFYycGLGEgVElgMRhG7OTRiKiaVKCkYSTTbbF5nYuJBDxYy8LFv3sw384b5lmOMwShmgxFt5AIcWv8wGOUg4jhCQ/gR7kHeDuIjIoN4iWgOecMCHBY4L0nSJU3TpqLR6GHDMFz5fF6koKqqZiAQaCWTya+ZTOZDp9NJIO8p9aURHIhroVDoRi6XU9Pp9LRlWWNer1dstdpAQJJIdxSjHMolTp/L8/wp7Lper9c77XabEbLZLCNLJO4zVZ1nmnaO4avYME65xCGugFWWwuGwG58vmqbZnysWi2FnC1ZX431/cnIGqtUSDOOUSxxstEQFHhYKhbFmszntQKMEn88H2awOc3Mn+wSHQwK73fenwC805HwiLm+z2b5UKpWerutWMBgcl2X5AM4LhvEe/H4FZNmN3Q1YWDgG8e4juLm5vLvyPP7ZePD2Dm2Fx1EtPGzUarXtVCr1vVwuNxRF4Z1Ou1gqvRIbjS1QlMAPj8ezdbt6Vzhz+qwrV9W/Iedq77qrSzvkEYcQHlyNG180gd8j6MuDDYF12bnIpvhxEDgzcjHiX3uyZgDPdVGGBW6gRkp0Imjv3D9yW5GfzUdOHP37+kV6/Q33X60uSqhL6R4wmCV35oIyu/H4XfG3DKEo7EvwDK5AF6W+y17vWKjqnz0AOxfEkUDY919TxxV2WXH71iYgsUhkmJBgT4ABAOtC+bduhTyuAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;
|
|
||||||
}
|
|
||||||
/*** Messages ***/
|
|
||||||
.error {
|
|
||||||
border: red 1px solid
|
|
||||||
}
|
|
||||||
.message {
|
|
||||||
border: green 1px solid
|
|
||||||
}
|
|
||||||
.error, .message {
|
|
||||||
margin: 1em 0 0 0
|
|
||||||
}
|
|
||||||
/*** Content ***/
|
|
||||||
#breadcrumb {
|
|
||||||
/* background: #fbfbfb;
|
|
||||||
border-radius: 2px !important;
|
|
||||||
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important; */
|
|
||||||
background: transparent;
|
|
||||||
font-size: 1em;
|
|
||||||
margin-left: 0em;
|
|
||||||
padding-top: 2px;
|
|
||||||
position:fixed;
|
|
||||||
z-index: 10;
|
|
||||||
}
|
|
||||||
h2 {
|
|
||||||
display: none
|
|
||||||
}
|
|
||||||
#content {
|
|
||||||
margin: 2em 0 0 21em
|
|
||||||
}
|
|
||||||
.tabs {
|
|
||||||
margin: 12px auto 10px auto
|
|
||||||
}
|
|
||||||
#form + p {
|
|
||||||
margin: 20px 0
|
|
||||||
}
|
|
||||||
/*** Tables ***/
|
|
||||||
html>/**/body table tbody input[name*="check"] {
|
|
||||||
display: block;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
table {
|
|
||||||
border-radius: 2px !important;
|
|
||||||
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;
|
|
||||||
}
|
|
||||||
thead td, thead th {
|
|
||||||
background: #eee;
|
|
||||||
}
|
|
||||||
table tbody td:first-child {
|
|
||||||
white-space: normal;
|
|
||||||
}
|
|
||||||
td, th {
|
|
||||||
border-color: #bbb;
|
|
||||||
border-width: 0 1px 1px 0;
|
|
||||||
font-size: 0.8em; /* x-small; font size */
|
|
||||||
}
|
|
||||||
#tables a {
|
|
||||||
height: 18px;
|
|
||||||
line-height: 18px;
|
|
||||||
}
|
|
||||||
/*** Links ***/
|
|
||||||
a:hover {
|
|
||||||
color: #3b82ca
|
|
||||||
}
|
|
||||||
a, a:visited {
|
|
||||||
color: #385a75
|
|
||||||
}
|
|
||||||
/*** Sidebar ***/
|
|
||||||
#h1 {
|
|
||||||
color: #222;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
#menu {
|
|
||||||
background-color: #fafafa;
|
|
||||||
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;
|
|
||||||
margin: 0;
|
|
||||||
padding-bottom: 0;
|
|
||||||
top: 0;
|
|
||||||
}
|
|
||||||
/*** Forms ***/
|
|
||||||
fieldset {
|
|
||||||
border-radius: 1px !important
|
|
||||||
}
|
|
||||||
/*** Others ***/
|
|
||||||
#lang {
|
|
||||||
background: transparent;
|
|
||||||
font-size: .9em;
|
|
||||||
left: auto;
|
|
||||||
right: 90px;
|
|
||||||
position:fixed;
|
|
||||||
z-index: 10;
|
|
||||||
padding-top: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.sqlarea {
|
#schema {margin: 1.5em 0 0 220px; position: relative;}
|
||||||
width: 99%
|
#schema .table {border: 1px solid #E3E3E3; background-color: #F1F1F1; padding: 0 2px; cursor: move; position: absolute;}
|
||||||
}
|
#schema .references {position: absolute;}
|
||||||
.jush-sql {
|
.js .hidden {display: inline;}
|
||||||
padding: 1px 2px
|
.js .column {background: none; margin: 0; padding: 0; position: relative; }
|
||||||
}
|
.js td.hidden, .js input.hidden {display: none;}
|
||||||
p {
|
legend a {color: #333; text-decoration: none; cursor: default;}
|
||||||
margin: 0.8em 0 0 0
|
legend a:hover {color: #333;}
|
||||||
}
|
code {background: transparent;}
|
||||||
|
fieldset, legend, table, .error, .message {-moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px;border-radius: 5px;}
|
||||||
#menu form {
|
/* #breadcrumb, #lang,
|
||||||
padding-top: 30px;
|
#breadcrumb, #lang {-moz-border-radius-bottomleft: 5px; -khtml-border-bottom-left-radius: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px;}
|
||||||
}
|
* */
|
||||||
|
#menu {-moz-border-radius-bottomright: 5px; -khtml-border-bottom-right-radius: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px;}
|
||||||
.view {
|
#menu {-moz-border-radius-topright: 5px; -khtml-border-top-right-radius: 5px; -webkit-border-top-right-radius: 5px; border-bottom-top-radius: 5px;}
|
||||||
background-color: #FFFFAA !important;
|
#logins a, #tables a {background: #F1F1F1;}
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,72 +1,54 @@
|
|||||||
/*
|
/* Redesigned (iconized) by Hever [hev.cz] - June 2009, ver 0.1.3 */
|
||||||
Theme by Hever [http://hev.cz] - January 2014, ver 0.2.1
|
|
||||||
Used Silk icon set 1.3 by Mark James - http://www.famfamfam.com/lab/icons/silk
|
|
||||||
*/
|
|
||||||
|
|
||||||
.error {background:#FFEEEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIsSURBVDjLpVNLSJQBEP7+h6uu62vLVAJDW1KQTMrINQ1vPQzq1GOpa9EppGOHLh0kCEKL7JBEhVCHihAsESyJiE4FWShGRmauu7KYiv6Pma+DGoFrBQ7MzGFmPr5vmDFIYj1mr1WYfrHPovA9VVOqbC7e/1rS9ZlrAVDYHig5WB0oPtBI0TNrUiC5yhP9jeF4X8NPcWfopoY48XT39PjjXeF0vWkZqOjd7LJYrmGasHPCCJbHwhS9/F8M4s8baid764Xi0Ilfp5voorpJfn2wwx/r3l77TwZUvR+qajXVn8PnvocYfXYH6k2ioOaCpaIdf11ivDcayyiMVudsOYqFb60gARJYHG9DbqQFmSVNjaO3K2NpAeK90ZCqtgcrjkP9aUCXp0moetDFEeRXnYCKXhm+uTW0CkBFu4JlxzZkFlbASz4CQGQVBFeEwZm8geyiMuRVntzsL3oXV+YMkvjRsydC1U+lhwZsWXgHb+oWVAEzIwvzyVlk5igsi7DymmHlHsFQR50rjl+981Jy1Fw6Gu0ObTtnU+cgs28AKgDiy+Awpj5OACBAhZ/qh2HOo6i+NeA73jUAML4/qWux8mt6NjW1w599CS9xb0mSEqQBEDAtwqALUmBaG5FV3oYPnTHMjAwetlWksyByaukxQg2wQ9FlccaK/OXA3/uAEUDp3rNIDQ1ctSk6kHh1/jRFoaL4M4snEMeD73gQx4M4PsT1IZ5AfYH68tZY7zv/ApRMY9mnuVMvAAAAAElFTkSuQmCC") no-repeat scroll 0.8em center; padding-left:38px;}
|
/* Added icons */
|
||||||
.message, #menu p.message {background:#EEFFEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKfSURBVDjLpZPrS1NhHMf9O3bOdmwDCWREIYKEUHsVJBI7mg3FvCxL09290jZj2EyLMnJexkgpLbPUanNOberU5taUMnHZUULMvelCtWF0sW/n7MVMEiN64AsPD8/n83uucQDi/id/DBT4Dolypw/qsz0pTMbj/WHpiDgsdSUyUmeiPt2+V7SrIM+bSss8ySGdR4abQQv6lrui6VxsRonrGCS9VEjSQ9E7CtiqdOZ4UuTqnBHO1X7YXl6Daa4yGq7vWO1D40wVDtj4kWQbn94myPGkCDPdSesczE2sCZShwl8CzcwZ6NiUs6n2nYX99T1cnKqA2EKui6+TwphA5k4yqMayopU5mANV3lNQTBdCMVUA9VQh3GuDMHiVcLCS3J4jSLhCGmKCjBEx0xlshjXYhApfMZRP5CyYD+UkG08+xt+4wLVQZA1tzxthm2tEfD3JxARH7QkbD1ZuozaggdZbxK5kAIsf5qGaKMTY2lAU/rH5HW3PLsEwUYy+YCcERmIjJpDcpzb6l7th9KtQ69fi09ePUej9l7cx2DJbD7UrG3r3afQHOyCo+V3QQzE35pvQvnAZukk5zL5qRL59jsKbPzdheXoBZc4saFhBS6AO7V4zqCpiawuptwQG+UAa7Ct3UT0hh9p9EnXT5Vh6t4C22QaUDh6HwnECOmcO7K+6kW49DKqS2DrEZCtfuI+9GrNHg4fMHVSO5kE7nAPVkAxKBxcOzsajpS4Yh4ohUPPWKTUh3PaQEptIOr6BiJjcZXCwktaAGfrRIpwblqOV3YKdhfXOIvBLeREWpnd8ynsaSJoyESFphwTtfjN6X1jRO2+FxWtCWksqBApeiFIR9K6fiTpPiigDoadqCEag5YUFKl6Yrciw0VOlhOivv/Ff8wtn0KzlebrUYwAAAABJRU5ErkJggg==") no-repeat scroll 0.8em center; padding-left:38px;}
|
/* IE doesn't support inline images - using some hack that eliminate IE*/
|
||||||
|
html/*\*/>/*/*/body .error {background:#FFEEEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIsSURBVDjLpVNLSJQBEP7+h6uu62vLVAJDW1KQTMrINQ1vPQzq1GOpa9EppGOHLh0kCEKL7JBEhVCHihAsESyJiE4FWShGRmauu7KYiv6Pma+DGoFrBQ7MzGFmPr5vmDFIYj1mr1WYfrHPovA9VVOqbC7e/1rS9ZlrAVDYHig5WB0oPtBI0TNrUiC5yhP9jeF4X8NPcWfopoY48XT39PjjXeF0vWkZqOjd7LJYrmGasHPCCJbHwhS9/F8M4s8baid764Xi0Ilfp5voorpJfn2wwx/r3l77TwZUvR+qajXVn8PnvocYfXYH6k2ioOaCpaIdf11ivDcayyiMVudsOYqFb60gARJYHG9DbqQFmSVNjaO3K2NpAeK90ZCqtgcrjkP9aUCXp0moetDFEeRXnYCKXhm+uTW0CkBFu4JlxzZkFlbASz4CQGQVBFeEwZm8geyiMuRVntzsL3oXV+YMkvjRsydC1U+lhwZsWXgHb+oWVAEzIwvzyVlk5igsi7DymmHlHsFQR50rjl+981Jy1Fw6Gu0ObTtnU+cgs28AKgDiy+Awpj5OACBAhZ/qh2HOo6i+NeA73jUAML4/qWux8mt6NjW1w599CS9xb0mSEqQBEDAtwqALUmBaG5FV3oYPnTHMjAwetlWksyByaukxQg2wQ9FlccaK/OXA3/uAEUDp3rNIDQ1ctSk6kHh1/jRFoaL4M4snEMeD73gQx4M4PsT1IZ5AfYH68tZY7zv/ApRMY9mnuVMvAAAAAElFTkSuQmCC") no-repeat scroll 0.8em center; padding-left:38px;}
|
||||||
|
html/*\*/>/*/*/body .message, #menu p.message {background:#EEFFEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKfSURBVDjLpZPrS1NhHMf9O3bOdmwDCWREIYKEUHsVJBI7mg3FvCxL09290jZj2EyLMnJexkgpLbPUanNOberU5taUMnHZUULMvelCtWF0sW/n7MVMEiN64AsPD8/n83uucQDi/id/DBT4Dolypw/qsz0pTMbj/WHpiDgsdSUyUmeiPt2+V7SrIM+bSss8ySGdR4abQQv6lrui6VxsRonrGCS9VEjSQ9E7CtiqdOZ4UuTqnBHO1X7YXl6Daa4yGq7vWO1D40wVDtj4kWQbn94myPGkCDPdSesczE2sCZShwl8CzcwZ6NiUs6n2nYX99T1cnKqA2EKui6+TwphA5k4yqMayopU5mANV3lNQTBdCMVUA9VQh3GuDMHiVcLCS3J4jSLhCGmKCjBEx0xlshjXYhApfMZRP5CyYD+UkG08+xt+4wLVQZA1tzxthm2tEfD3JxARH7QkbD1ZuozaggdZbxK5kAIsf5qGaKMTY2lAU/rH5HW3PLsEwUYy+YCcERmIjJpDcpzb6l7th9KtQ69fi09ePUej9l7cx2DJbD7UrG3r3afQHOyCo+V3QQzE35pvQvnAZukk5zL5qRL59jsKbPzdheXoBZc4saFhBS6AO7V4zqCpiawuptwQG+UAa7Ct3UT0hh9p9EnXT5Vh6t4C22QaUDh6HwnECOmcO7K+6kW49DKqS2DrEZCtfuI+9GrNHg4fMHVSO5kE7nAPVkAxKBxcOzsajpS4Yh4ohUPPWKTUh3PaQEptIOr6BiJjcZXCwktaAGfrRIpwblqOV3YKdhfXOIvBLeREWpnd8ynsaSJoyESFphwTtfjN6X1jRO2+FxWtCWksqBApeiFIR9K6fiTpPiigDoadqCEag5YUFKl6Yrciw0VOlhOivv/Ff8wtn0KzlebrUYwAAAABJRU5ErkJggg==") no-repeat scroll 0.8em center; padding-left:38px;}
|
||||||
|
|
||||||
#dbs span, th a[href*="&db="]:not([href*="&select="]):not([href*="&table="]) {background:transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEYSURBVBgZBcHPio5hGAfg6/2+R980k6wmJgsJ5U/ZOAqbSc2GnXOwUg7BESgLUeIQ1GSjLFnMwsKGGg1qxJRmPM97/1zXFAAAAEADdlfZzr26miup2svnelq7d2aYgt3rebl585wN6+K3I1/9fJe7O/uIePP2SypJkiRJ0vMhr55FLCA3zgIAOK9uQ4MS361ZOSX+OrTvkgINSjS/HIvhjxNNFGgQsbSmabohKDNoUGLohsls6BaiQIMSs2FYmnXdUsygQYmumy3Nhi6igwalDEOJEjPKP7CA2aFNK8Bkyy3fdNCg7r9/fW3jgpVJbDmy5+PB2IYp4MXFelQ7izPrhkPHB+P5/PjhD5gCgCenx+VR/dODEwD+A3T7nqbxwf1HAAAAAElFTkSuQmCC") no-repeat scroll left bottom; padding-left:22px;}
|
html/*\*/>/*/*/body a[href$="sql="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHGSURBVHjaxFPNLkNREP5aB6WhaKLSVtKFiIUqK1sLT2DhTXgDL2FlxSOw8FOLRiyQWhDRiKSEhKQJou49P9fMnFsLsevCJCcz594z3/m+mTmJKIrQjSXRpXUNoGqbm39qcMbAkbyIvbVwYQhD3tIeWsOQ1+QVH86Xyz+JXJPIOb9iAI4ZpOMd/yN/vb/vAdiC93cP0El2dNA6z4RjYyW2MaPU0BB0u+0BOGGsVML49LSA3J+cYDCblb0l6jeHBwg/26isrOB0a8uzYBlBgKShgD8M53J4aTTQqFaRSCYl+WxnG83zcxTmKpKg+vtFu9W8NDQDMCXW+VivYyAzjKmlJahUSpiYUKPVbCKTz0sCGzOyOpBLzdcXlCMdDDIxO4vboyoyhQIKlYocLi0uIjczIyBcA98dYqx9NywxUEyDi/P29IyF1VU5dFeroS+dRnF+Xvajk5N0ayjx8tq6+FuSyiwUF4LRHi/reLg4o9ijs6xG9RjWGowUi/h4fcXexoa0L4oc0mNZuVgFzID09VKBnFXoUb7Pnb5zQrvVovpkZC4QzwfiN6QM1eBqdxcmnq6IAA395Mlz8eTxTZwg/pcl/v01fgswAESqYZbsIsnLAAAAAElFTkSuQmCC") no-repeat scroll left bottom; padding-left:22px;}
|
||||||
|
html/*\*/>/*/*/body a[href*="dump="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJrSURBVHjajFPPaxNREP72V8ymTbGQbRB/IT0otdV6CcWTgqCoUFQQEXoSEQ/+AypK755E1KsULIpGgw1F9KC22lgstFgQLdoWhSab2PRHTNrs7nvObGhSsRa/ZXjv7c6b+eabWUVKiX9AJQuRRci2k+260N91VwgJIQSEV1mVnjf5axTjvCfFFn7hCcBlBzJNVRA0gAZTQ1ODgXC4gDtjV9AW2QNFUTA0/Q66kPLSqVg4shYF8vEdKQ7mln+i+/VVRM0oFpbmETLq/SS6J4R/OfHtHmV24XouHFo94REDAyE9hMZgBMkvT2GZFqxQE6by0/g4P74SoKLB2ZZzWA8ffqRQLBcxNTuFjRTwxpmbfad7Oo/rHhdN6B20/6JvaKyBCnODhqNbL+PRxHXUGXWINV5kl9TDrkQct/pnZKHkyPsDGcl4MJiWq5Ecsf84LxTL8nbyK2+Pke3XHWJAQkLXgMdDNjRNRTxlQ6UmakRD0vN8NEd7EBsFO6Impu1fzGCCrOSXwCro5HEiZiExnEVnrKlaypNhG4fba02aTC8ik1/ibZrM9RlIkkGnjH0jWWJQWRn8TpLI8fcZ6MSA1WrZFERx2eHPTEPqjksBqASDLh7ZZ+HlWA6H9tYyvhjNomNnI8Km7p8/f5+HGdB46/lJeOoYPHV8mbGy8gA59HngU74asNkKYKVzlQCuW9GA6B5si+DVeA4HWmsM4qksTnZY1TMz0NRauysaUAmt2+oxM1tCM6k8mS74WXjIdm8O+JdWg36oKgXqgnzb3TvRXvZEneN6YPNIFw7MY70W5haXnlUHbp3f+b/wW4ABAAtWTLcKdqLcAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
|
||||||
|
html/*\*/>/*/*/body a[href$="dump="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHzSURBVHjajJPPS+NQEMcnaaxpdWsp6Q8vtWtdkIo9+B948SjIgruCUg8F/wGP/glePe5JcBehwl4qePGm0J6KQj30UBHEzaFLUromTfPizJMnrxhhB4bJvDfzme97SZQgCOB/be98J2AsAMYYMP81KjKg0WhMYljHtS30RSz4gjkGdot559F7OLt8vvi1bJRBURS4vr8CTTQ3m80SFv1MpVJlwzBA13XuNGUwGKyY1p+Vk9aPzWw8C7ZjQXximu+9ATA5KhQK5Uwmw+nCIpEIJBIJOLjah3Q8w7379x5urFsOUEUhTl/C6R+ef35mARzPhW6vC+q/iHvyvaYwXwIQje6j1+tBv98H13VhNBpxxyPA5tw2TI50MPQsrMbXbOo53fmtaJIC7iSZAMPhkOe+73MA5Ruz3yCfz9NlvykLBUSjUR41TQPP8zhE7JNSyj8E0CbJpkiXKRoIRFABeQcQd0DFwlVV5evUTFBZRSiATEwnp4lCAa0LI2AoQC4WimRl4qgyYOw12rYNyWSSX6L4mKiBnukDK5VKYJrmmBpZwW6r1TotFotTuVyOQwQgnU7zV9npdKDdbj+hgnXRN/Yz1ev1zwg6QP+KU2disRiXblkWOI7zhJOPce+wWq2aoQDZarXaJ2xYQGfod5VKxQ2rexFgAI4OiAKxKkWeAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
|
||||||
|
|
||||||
.links a {margin-right:8px;}
|
html/*\*/>/*/*/body select[name="db"] {background:white url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEYSURBVBgZBcHPio5hGAfg6/2+R980k6wmJgsJ5U/ZOAqbSc2GnXOwUg7BESgLUeIQ1GSjLFnMwsKGGg1qxJRmPM97/1zXFAAAAEADdlfZzr26miup2svnelq7d2aYgt3rebl585wN6+K3I1/9fJe7O/uIePP2SypJkiRJ0vMhr55FLCA3zgIAOK9uQ4MS361ZOSX+OrTvkgINSjS/HIvhjxNNFGgQsbSmabohKDNoUGLohsls6BaiQIMSs2FYmnXdUsygQYmumy3Nhi6igwalDEOJEjPKP7CA2aFNK8Bkyy3fdNCg7r9/fW3jgpVJbDmy5+PB2IYp4MXFelQ7izPrhkPHB+P5/PjhD5gCgCenx+VR/dODEwD+A3T7nqbxwf1HAAAAAElFTkSuQmCC") no-repeat scroll left bottom; padding-left:16px;}
|
||||||
|
html/*\*/>/*/*/body select[name="db"] option {padding-left:18px;}
|
||||||
|
|
||||||
a[href$="&sql="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHGSURBVHjaxFPNLkNREP5aB6WhaKLSVtKFiIUqK1sLT2DhTXgDL2FlxSOw8FOLRiyQWhDRiKSEhKQJou49P9fMnFsLsevCJCcz594z3/m+mTmJKIrQjSXRpXUNoGqbm39qcMbAkbyIvbVwYQhD3tIeWsOQ1+QVH86Xyz+JXJPIOb9iAI4ZpOMd/yN/vb/vAdiC93cP0El2dNA6z4RjYyW2MaPU0BB0u+0BOGGsVML49LSA3J+cYDCblb0l6jeHBwg/26isrOB0a8uzYBlBgKShgD8M53J4aTTQqFaRSCYl+WxnG83zcxTmKpKg+vtFu9W8NDQDMCXW+VivYyAzjKmlJahUSpiYUKPVbCKTz0sCGzOyOpBLzdcXlCMdDDIxO4vboyoyhQIKlYocLi0uIjczIyBcA98dYqx9NywxUEyDi/P29IyF1VU5dFeroS+dRnF+Xvajk5N0ayjx8tq6+FuSyiwUF4LRHi/reLg4o9ijs6xG9RjWGowUi/h4fcXexoa0L4oc0mNZuVgFzID09VKBnFXoUb7Pnb5zQrvVovpkZC4QzwfiN6QM1eBqdxcmnq6IAA395Mlz8eTxTZwg/pcl/v01fgswAESqYZbsIsnLAAAAAElFTkSuQmCC") no-repeat scroll left bottom; padding-left:22px;}
|
|
||||||
a[href*="&dump="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJrSURBVHjajFPPaxNREP72V8ymTbGQbRB/IT0otdV6CcWTgqCoUFQQEXoSEQ/+AypK755E1KsULIpGgw1F9KC22lgstFgQLdoWhSab2PRHTNrs7nvObGhSsRa/ZXjv7c6b+eabWUVKiX9AJQuRRci2k+260N91VwgJIQSEV1mVnjf5axTjvCfFFn7hCcBlBzJNVRA0gAZTQ1ODgXC4gDtjV9AW2QNFUTA0/Q66kPLSqVg4shYF8vEdKQ7mln+i+/VVRM0oFpbmETLq/SS6J4R/OfHtHmV24XouHFo94REDAyE9hMZgBMkvT2GZFqxQE6by0/g4P74SoKLB2ZZzWA8ffqRQLBcxNTuFjRTwxpmbfad7Oo/rHhdN6B20/6JvaKyBCnODhqNbL+PRxHXUGXWINV5kl9TDrkQct/pnZKHkyPsDGcl4MJiWq5Ecsf84LxTL8nbyK2+Pke3XHWJAQkLXgMdDNjRNRTxlQ6UmakRD0vN8NEd7EBsFO6Impu1fzGCCrOSXwCro5HEiZiExnEVnrKlaypNhG4fba02aTC8ik1/ibZrM9RlIkkGnjH0jWWJQWRn8TpLI8fcZ6MSA1WrZFERx2eHPTEPqjksBqASDLh7ZZ+HlWA6H9tYyvhjNomNnI8Km7p8/f5+HGdB46/lJeOoYPHV8mbGy8gA59HngU74asNkKYKVzlQCuW9GA6B5si+DVeA4HWmsM4qksTnZY1TMz0NRauysaUAmt2+oxM1tCM6k8mS74WXjIdm8O+JdWg36oKgXqgnzb3TvRXvZEneN6YPNIFw7MY70W5haXnlUHbp3f+b/wW4ABAAtWTLcKdqLcAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
|
|
||||||
a[href$="&dump="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHzSURBVHjajJPPS+NQEMcnaaxpdWsp6Q8vtWtdkIo9+B948SjIgruCUg8F/wGP/glePe5JcBehwl4qePGm0J6KQj30UBHEzaFLUromTfPizJMnrxhhB4bJvDfzme97SZQgCOB/be98J2AsAMYYMP81KjKg0WhMYljHtS30RSz4gjkGdot559F7OLt8vvi1bJRBURS4vr8CTTQ3m80SFv1MpVJlwzBA13XuNGUwGKyY1p+Vk9aPzWw8C7ZjQXximu+9ATA5KhQK5Uwmw+nCIpEIJBIJOLjah3Q8w7379x5urFsOUEUhTl/C6R+ef35mARzPhW6vC+q/iHvyvaYwXwIQje6j1+tBv98H13VhNBpxxyPA5tw2TI50MPQsrMbXbOo53fmtaJIC7iSZAMPhkOe+73MA5Ruz3yCfz9NlvykLBUSjUR41TQPP8zhE7JNSyj8E0CbJpkiXKRoIRFABeQcQd0DFwlVV5evUTFBZRSiATEwnp4lCAa0LI2AoQC4WimRl4qgyYOw12rYNyWSSX6L4mKiBnukDK5VKYJrmmBpZwW6r1TotFotTuVyOQwQgnU7zV9npdKDdbj+hgnXRN/Yz1ev1zwg6QP+KU2disRiXblkWOI7zhJOPce+wWq2aoQDZarXaJ2xYQGfod5VKxQ2rexFgAI4OiAKxKkWeAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
|
|
||||||
a[href*="&import="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gEJFDQPlDJUDwAAAiNJREFUOMutk0tI1FEUh7//Y9TJghyc1KQ20lMthRAlgoKgVkWte6wid0EICUHUQjdBErRqHYmQghgU5KLQGB8FKVEMCi0G1JmRbPLJ/O89p8XYOAMZBB24HM5dfL/fOfdcB6Aj1j6kqm2qWv/o5NMk/xBOR6z9dVVpzbmQEyKxPMcBc5svbheHs91YK1hRjJWCY7FGsSKT3VcPtviquqaqVJVVY6xlZu0hYpRrpyJ/Vb7fN3sMwAG4965Hw+ElKrzdlPphPqTHaYw0EdiAQEwuW4MRg7GGzrYu7j6L8/hGg+MD7DNXmF7tpDpSg6MOYpWbzbe2VV/dMATGAuADTLt3UFEmU+OICCpK72hqW8CFExGymwAAnrya15X1QJ+PJFVVtW90QQvjRay4TmfW9XrPpOYdBFYQVXwP+mMpPM9lYCyF44K7KTI4kQJVQj4cqd1BNihowVpBAd9zuNQSZXAizcWWPXmH/WPJonp27ifGCEUOVMB34eXHNJ6Xy5C7+w3xHRDg6N4ylEKAEVSVkAfnm6MMTy1y9nhlXvHNpzSthyrYFfYBiCcylJf6WwAjOZrnOgxPLQLks+tAIDDydSkPrIuWYG2BA2NMbgYunGms5O3nRU43bDkYGEtzuTWar+OJDN5ma1szUKVh/07mv69TVxXm28JK/i/U15YQT2SKdkFEpeAV9P2D3pmmrJXywFgCY7FGCKxgrPnjMv1Y3hjif8QvwdlGGi2XXTgAAAAASUVORK5CYII=") no-repeat scroll 2px bottom; padding-left:22px;}
|
|
||||||
a[href$="&import="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gEJFDMETKEbQAAAAjZJREFUOMuVkjFoU2EUhc//3gsvptFCIdRHh2CrQ1AcmsUYHTKJDkJrFUdx6uJkpuLspCI4xaJLNik4SMGlOKgEdekQ0EEwFhJqCw+a16RJ//+/x0Heo6XN4B0v537nHLgKAKqNxXckSyTPPyu//IP/GFVtLL6f9INrKZXC791f3UvDysPP3tryjcHt7yTPkRQRaZL8KSKvRGRtbm7OxgCPZJ8kJtOnYaw99ZUfl8UQ5XK5kMlkQBI7OzuzURTNbmxs3Nne3v60srJyd2FhoQ0AztPLtflOv/22tdtCVo3hwvhFUATZbBaO48B1XUxMTCCfz6NUKmF6evqKtfZxnMABgOdXl+c7vTZ87wQUFcRyZOepqSmIyPWkAgA8+HCfFMG3rS8QEVCIvb09pFIpkES/30cYhmi325iZmYGI4BDgReW1Wl1d3apUKrler4coitBqtUASxhh0u10Mh0N4ngeSRwEAQBIk4bou0uk0PM+D53nQWsMYA/JfLRGBtfYoQEQSx/hIKQVrbbJzHGd0ghgQHxhj4LourLXQWkNrDdd1E81IQCy21iaAOEFcU2t9PEBEEvcYeDBZrNvf38ehPwAAay3CMEQul4Pv+4f/XSkEQYBisYhOpzMywb1Go/GmUCiM5fN5+L4PpRRIIggCRFGEZrOJ9fX1TWPMzQR+0Kler58RkUcicstxnPFMJgNjDMIwxGAw2DTG1K21T5aWlraOBRycWq120hhz1hgjWusf1Wp1eJzuL3uxkTGLHB98AAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
|
|
||||||
|
|
||||||
@media all and (min-device-width: 880px) {
|
html/*\*/>/*/*/body #menu p a[href*="&select="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=") no-repeat scroll left bottom; clear:left; display:block; float:left; height:16px; margin-right:8px; padding-top:1px; overflow:hidden; padding-left:16px; width:0; text-decoration:none;}
|
||||||
#menu .links {height:22px; transition:.2s;}
|
|
||||||
#menu .links:hover {height:5em;}
|
|
||||||
#menu .links a {color:transparent; transition:.2s; display:block; margin-bottom:-1.25em;}
|
|
||||||
#menu .links > a + a {margin-left:22px;}
|
|
||||||
#menu .links > a + a + a {margin-left:44px;}
|
|
||||||
#menu .links > a + a + a + a {margin-left:66px;}
|
|
||||||
#menu .links:hover a {color:blue; margin:0;}
|
|
||||||
#menu .links a:hover {color:red;}
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu p a[href*="&select="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=") no-repeat scroll left bottom; clear:left; display:block; float:left; height:16px; margin-right:8px; padding-top:1px; overflow:hidden; padding-left:16px; width:0; text-decoration:none;}
|
html/*\*/>/*/*/body #menu p a[href*="&table="], html/*\*/>/*/*/body #menu p a[href*="&view="] {clear:right; margin-left:24px; display:block; height:17px; padding-bottom:1px; text-decoration:none;}
|
||||||
|
|
||||||
#menu p a[href*="&table="], #menu p a[href*="&view="] {clear:right; margin-left:24px; display:block; height:17px; padding-bottom:1px; text-decoration:none;}
|
html/*\*/>/*/*/body #tables br {display:none;}
|
||||||
|
|
||||||
#menu p#tables br {display:none;}
|
|
||||||
|
|
||||||
.links a[href*="&create="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ6SURBVDjLpZNZSNRRGMV//2XGsjFrMg2z0so2K21xIFpepYUiAsGIICLffI8eWiBBeg3qQV+KwBYKLB8qpHUmrahcKLc0QsxldNSxdPz/79LD1ChBUXTh8sG93POdc75zDa01/7NsgGvPR09rzQmpVZZSCqlAKIWUCqk0QqoZWyKFRir1uvxIbsAGUFqXHQqkpP1L57M3Pm5MMJBKpQHUdF9BKIGQAlcJXOlOVykSdye3leO6MmkGQNyHw+uO/1X3bzGBK+S0B1IqAKqDg3986HeCZPffwvJtoNT7lOZLvUdtAPEDAKBkRzo3QwMUb89InN1uGGD3spdE214xe8MRUnM2MfppNW0Pqy7YAK5UKK2xLbhdP4hlmdxpGMQwwQT8ziNiI534c7cT6WrFazikzF2Eb8HS1IQEDdiWwcHAQmpehTkQSAcgNvSMiYFW5uUUMdV3HW+ywefGNqITJsbUUL75k4FWYJtQ+yaMZcXrk1ANk/33mbdiD7EvlRieETy+FJLkMFcjRRSW3emIAwiF1hqPBfu2LGSWbbA1uZ41SfWkrtxPrPcypsfFiWYzFGzGKTjFV28WEJeIUHETLdOgrmkI1VdHpCdEet5enP4qLK9mKrqMgedv6cyrAP+qxOTiUxAi7oEJi8frELoFoTLpa7nI/HQvscgSRt+0kV1SSW7qYtp7xrBMphm4Mi5h/VIfTcEq1u0oJaknSEdNiMYHET7UvcMpPEN31Ed7zxgASmk1I0g6dK66s8CRak5mVxjnfS05+TsZCw/T9baTx1nnGb47DrQksjE6HrsHYPz6nYt3+Sc3L8+wA2tz0J6pF5OD4WP7Kpq7f5fO79DfSxjdtCtDAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
|
html/*\*/>/*/*/body a[href*="&create="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ6SURBVDjLpZNZSNRRGMV//2XGsjFrMg2z0so2K21xIFpepYUiAsGIICLffI8eWiBBeg3qQV+KwBYKLB8qpHUmrahcKLc0QsxldNSxdPz/79LD1ChBUXTh8sG93POdc75zDa01/7NsgGvPR09rzQmpVZZSCqlAKIWUCqk0QqoZWyKFRir1uvxIbsAGUFqXHQqkpP1L57M3Pm5MMJBKpQHUdF9BKIGQAlcJXOlOVykSdye3leO6MmkGQNyHw+uO/1X3bzGBK+S0B1IqAKqDg3986HeCZPffwvJtoNT7lOZLvUdtAPEDAKBkRzo3QwMUb89InN1uGGD3spdE214xe8MRUnM2MfppNW0Pqy7YAK5UKK2xLbhdP4hlmdxpGMQwwQT8ziNiI534c7cT6WrFazikzF2Eb8HS1IQEDdiWwcHAQmpehTkQSAcgNvSMiYFW5uUUMdV3HW+ywefGNqITJsbUUL75k4FWYJtQ+yaMZcXrk1ANk/33mbdiD7EvlRieETy+FJLkMFcjRRSW3emIAwiF1hqPBfu2LGSWbbA1uZ41SfWkrtxPrPcypsfFiWYzFGzGKTjFV28WEJeIUHETLdOgrmkI1VdHpCdEet5enP4qLK9mKrqMgedv6cyrAP+qxOTiUxAi7oEJi8frELoFoTLpa7nI/HQvscgSRt+0kV1SSW7qYtp7xrBMphm4Mi5h/VIfTcEq1u0oJaknSEdNiMYHET7UvcMpPEN31Ed7zxgASmk1I0g6dK66s8CRak5mVxjnfS05+TsZCw/T9baTx1nnGb47DrQksjE6HrsHYPz6nYt3+Sc3L8+wA2tz0J6pF5OD4WP7Kpq7f5fO79DfSxjdtCtDAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
|
||||||
.links a[href$="&create="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIpSURBVDjLpZNPSFRRFMZ/749/Kt3IqFTSRoSMmrGIYTTbpEJtjBCCok1Em9JVG1dRC8FFEES5aGFEgRRZWq1iLKKxBiNqLDcltQgmHR9hY6LOu+feFm+YGVsZXbh8nHO53/nud8+xjDH8z3IB7r5avGgMZ8XoBq01okFpjYhGtEGJLtmCKINo/XbgVFPUBdDG9PVEq0P/UvnSvdlwQYFoHQIY/3obpRVKFL5W+OIXUVThrL91AN+XihKCwIeTu85sqPryqsJXUvRARAMwkshsiKB7fw25UgKVJwA40V7H/cl5jh+oL+RGk/P0xIqxl11dr8AXjTYG14HRNxkcx+ZhMoNlg52/ND6VAWMoc6F5+2Zy/l9PMIDrWByL1jI+tcDRaN06BaXxbDqLUnq9AqPBteHpuwUcJ0AIcgBXH93h+/wEyyuLrPk5cmv7gNY8gdIYYyhz4PDeWuIpj85IsS2ujQ2zJAk6DkZpqGnixcwYyU+PifUOX7Eh6DoAx7aIpzwA4imPeMrj+bTH+88PaNkZQWwhsrULsXxie9oAzgcESgUe2NAZCeE6AXZGQhwKh/Cyc5RZVXQ39wFwoeMmjXVhgMqiB8awe0cVP36u0Fi/iW9zvwuzkF3+xUz6Nal0gv6uWww+O02lUwGwmv8FM3l55EtLTvQWXwm+EkRpfNEoUZRXHCE5PUFbuJ0nH4cot1wSH14C3LA2Os6x3m2DwDmgGlgChpLX0/1/AIu8MA7WsWBMAAAAAElFTkSuQmCC") no-repeat scroll left bottom; padding-left:22px;}
|
html/*\*/>/*/*/body a[href$="&create="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIpSURBVDjLpZNPSFRRFMZ/749/Kt3IqFTSRoSMmrGIYTTbpEJtjBCCok1Em9JVG1dRC8FFEES5aGFEgRRZWq1iLKKxBiNqLDcltQgmHR9hY6LOu+feFm+YGVsZXbh8nHO53/nud8+xjDH8z3IB7r5avGgMZ8XoBq01okFpjYhGtEGJLtmCKINo/XbgVFPUBdDG9PVEq0P/UvnSvdlwQYFoHQIY/3obpRVKFL5W+OIXUVThrL91AN+XihKCwIeTu85sqPryqsJXUvRARAMwkshsiKB7fw25UgKVJwA40V7H/cl5jh+oL+RGk/P0xIqxl11dr8AXjTYG14HRNxkcx+ZhMoNlg52/ND6VAWMoc6F5+2Zy/l9PMIDrWByL1jI+tcDRaN06BaXxbDqLUnq9AqPBteHpuwUcJ0AIcgBXH93h+/wEyyuLrPk5cmv7gNY8gdIYYyhz4PDeWuIpj85IsS2ujQ2zJAk6DkZpqGnixcwYyU+PifUOX7Eh6DoAx7aIpzwA4imPeMrj+bTH+88PaNkZQWwhsrULsXxie9oAzgcESgUe2NAZCeE6AXZGQhwKh/Cyc5RZVXQ39wFwoeMmjXVhgMqiB8awe0cVP36u0Fi/iW9zvwuzkF3+xUz6Nal0gv6uWww+O02lUwGwmv8FM3l55EtLTvQWXwm+EkRpfNEoUZRXHCE5PUFbuJ0nH4cot1wSH14C3LA2Os6x3m2DwDmgGlgChpLX0/1/AIu8MA7WsWBMAAAAAElFTkSuQmCC") no-repeat scroll left bottom; padding-left:22px;}
|
||||||
|
|
||||||
#content p a[href*="&create="] {padding-left:22px;}
|
html/*\*/>/*/*/body #content p a {padding-left:2px;}
|
||||||
#content p a[href*="&select="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=") no-repeat scroll 2px bottom; padding-left:22px;}
|
html/*\*/>/*/*/body #content p a[href*="&create="] {padding-left:22px;}
|
||||||
#content p a[href*="&page="] {background-image:none; padding-left:0;}
|
html/*\*/>/*/*/body #content p a[href*="&select="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=") no-repeat scroll 2px bottom; padding-left:22px;}
|
||||||
#content p a[href$="&database="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIkSURBVDjLpVNNiFJRFP7eU1E0KSLTMpAwYSxyaidDtChm0WYQ3NSutv2s2kwwm2igNgMtooUQEQhhA9GqhSDTQsZZFDbNDBgVg5bSw9J8rzFF33udc+HGg0ladOHj3nPe+b7zc99VbNvG/yy30yiVSl4SnCNcsixrivYEgY7WJu0faX9EKGUyGVNyFFkBkY/T+WkoFEpFIhEEAgH4/X7w916vB8Mw0Gg00G63y+S7mM1mm4LIAYxisbhSr9c5nT1pjUYju1qt2oVC4YnkqbIUMk6Ew+F/9hyNRkFJLuyaATmFoqZp8Pl88Hq98Hg8wtfv99HpdNBsNhGPx0XsRAG3241ut4vBYCDs8XgMXdcxHA7FN/b9VUD25HK5RAUczKC+hYgcNpNN05xcAQdLkqIoIlj6VFWdXIEUkAQGV8M2k2vaG3z6sYGfVR39XzsHlm/dX3h5d31xlwAHM5goBd5+LuO75z3OnU3jyP4EVrZeKGub2p309cP7VKcAQ2Znoiz3deMVTk1Nw1RNTB+ahamMkD45w7RrfwSYwFdFf6K4Quf6pmvwKHswl7wh7Jvnc4gfTPHR52zhcqVSeZZMJgOxWEyI8BC5CmOnh63WKtZbZczPPsa94hX4XCLJQHG+xnw+f5SEFghZmvhefgvcTqn2HN3gBmZSZ5CInMaHr1Wsvivjy3ZvSZn0nHO5XJDIxwgWDbW2vL10m9xXCUGCQXi49qA1/xvyq6BCh7yZeQAAAABJRU5ErkJggg==") no-repeat scroll 2px bottom; padding-left:22px;}
|
html/*\*/>/*/*/body #content p a[href*="&page="] {background-image:none; padding-left:0;}
|
||||||
#content p a[href*="&edit="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJvSURBVDjLpZPrS5NhGIf9W7YvBYOkhlkoqCklWChv2WyKik7blnNris72bi6dus0DLZ0TDxW1odtopDs4D8MDZuLU0kXq61CijSIIasOvv94VTUfLiB74fXngup7nvrnvJABJ/5PfLnTTdcwOj4RsdYmo5glBWP6iOtzwvIKSWstI0Wgx80SBblpKtE9KQs/We7EaWoT/8wbWP61gMmCH0lMDvokT4j25TiQU/ITFkek9Ow6+7WH2gwsmahCPdwyw75uw9HEO2gUZSkfyI9zBPCJOoJ2SMmg46N61YO/rNoa39Xi41oFuXysMfh36/Fp0b7bAfWAH6RGi0HglWNCbzYgJaFjRv6zGuy+b9It96N3SQvNKiV9HvSaDfFEIxXItnPs23BzJQd6DDEVM0OKsoVwBG/1VMzpXVWhbkUM2K4oJBDYuGmbKIJ0qxsAbHfRLzbjcnUbFBIpx/qH3vQv9b3U03IQ/HfFkERTzfFj8w8jSpR7GBE123uFEYAzaDRIqX/2JAtJbDat/COkd7CNBva2cMvq0MGxp0PRSCPF8BXjWG3FgNHc9XPT71Ojy3sMFdfJRCeKxEsVtKwFHwALZfCUk3tIfNR8XiJwc1LmL4dg141JPKtj3WUdNFJqLGFVPC4OkR4BxajTWsChY64wmCnMxsWPCHcutKBxMVp5mxA1S+aMComToaqTRUQknLTH62kHOVEE+VQnjahscNCy0cMBWsSI0TCQcZc5ALkEYckL5A5noWSBhfm2AecMAjbcRWV0pUTh0HE64TNf0mczcnnQyu/MilaFJCae1nw2fbz1DnVOxyGTlKeZft/Ff8x1BRssfACjTwQAAAABJRU5ErkJggg==") no-repeat scroll 2px bottom; padding-left:22px;}
|
html/*\*/>/*/*/body #content p a[href$="?database="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIkSURBVDjLpVNNiFJRFP7eU1E0KSLTMpAwYSxyaidDtChm0WYQ3NSutv2s2kwwm2igNgMtooUQEQhhA9GqhSDTQsZZFDbNDBgVg5bSw9J8rzFF33udc+HGg0ladOHj3nPe+b7zc99VbNvG/yy30yiVSl4SnCNcsixrivYEgY7WJu0faX9EKGUyGVNyFFkBkY/T+WkoFEpFIhEEAgH4/X7w916vB8Mw0Gg00G63y+S7mM1mm4LIAYxisbhSr9c5nT1pjUYju1qt2oVC4YnkqbIUMk6Ew+F/9hyNRkFJLuyaATmFoqZp8Pl88Hq98Hg8wtfv99HpdNBsNhGPx0XsRAG3241ut4vBYCDs8XgMXdcxHA7FN/b9VUD25HK5RAUczKC+hYgcNpNN05xcAQdLkqIoIlj6VFWdXIEUkAQGV8M2k2vaG3z6sYGfVR39XzsHlm/dX3h5d31xlwAHM5goBd5+LuO75z3OnU3jyP4EVrZeKGub2p309cP7VKcAQ2Znoiz3deMVTk1Nw1RNTB+ahamMkD45w7RrfwSYwFdFf6K4Quf6pmvwKHswl7wh7Jvnc4gfTPHR52zhcqVSeZZMJgOxWEyI8BC5CmOnh63WKtZbZczPPsa94hX4XCLJQHG+xnw+f5SEFghZmvhefgvcTqn2HN3gBmZSZ5CInMaHr1Wsvivjy3ZvSZn0nHO5XJDIxwgWDbW2vL10m9xXCUGCQXi49qA1/xvyq6BCh7yZeQAAAABJRU5ErkJggg==") no-repeat scroll 2px bottom; padding-left:22px;}
|
||||||
#content p a[href*="&table="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJcSURBVDjLpZPtT5JhFMafrW997I9rscA+FFu2QRurtlw5cQ4InLpwBogIPNFSiNJ4C+JVkj0QTBHQKFPQlJfwlanY1tXz3ARkn2jd27Wz++yc33XOvd0UAOp/RNGR/X5zeH9rOlTDVKAK3fsqJrxlqN27GHPuYHh+G4rXRQzZNjEws47Hli/oo/PxNsAU3qvWT3/gX3TPuHrWBhiC30nSktXDtKLB1NI4NKkxqBMqjDByPFkcxNBCPwbCfXgUeEBq705m0AZM+qsk2e3hau88W+4ANOy+XPLFQrkrcbW31KkOYJx9rBaAOzPR0gVHW6x593q9cDgcqB6e4sZoogMYdXzD0ck5ZhfLsHGKVfAqVoadKcMdzcLr82PuwwZCoRACgQCWVzdhoK2gaVpDAMNzWzhkAXamQpze/I4t13w+j2AwiFwuh7W1NXg8HmQyGSgUCshkssuU3F7AQf0c84kK3n68KFc4hXQ6DavVCqlUCqVSSdaIx+NQq9UGMsHg7Ab2jxtwp5rOvqUqia3CUqnEObWn0mp1KBaLcLlckMvloPpfrhOAl230/SGLxQK3241CoQC9Xg9nskKk1emQzWZZkBZCoRBU3/NP2GMBgXTTObjSjI1GA8lkEgzDwO/3E4iObXY6nYhEIhCJRHoWcIW6b1pF7egMlYNT7NROUKzU8XX3GJ+3D2E0GgmAm4Zbh2s0mUyIRqMcAGKx+BIlMeSiYu1K/fbEMm4+TaFnJIHrSgZX5TFIZNPo7e1Fj9QOs9kMlUqFaw9pCASCnzwe7x15xG6/rUQiAZ/Px9/5XyhZOMVGKlOdAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
|
html/*\*/>/*/*/body #content p a[href*="&edit="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJvSURBVDjLpZPrS5NhGIf9W7YvBYOkhlkoqCklWChv2WyKik7blnNris72bi6dus0DLZ0TDxW1odtopDs4D8MDZuLU0kXq61CijSIIasOvv94VTUfLiB74fXngup7nvrnvJABJ/5PfLnTTdcwOj4RsdYmo5glBWP6iOtzwvIKSWstI0Wgx80SBblpKtE9KQs/We7EaWoT/8wbWP61gMmCH0lMDvokT4j25TiQU/ITFkek9Ow6+7WH2gwsmahCPdwyw75uw9HEO2gUZSkfyI9zBPCJOoJ2SMmg46N61YO/rNoa39Xi41oFuXysMfh36/Fp0b7bAfWAH6RGi0HglWNCbzYgJaFjRv6zGuy+b9It96N3SQvNKiV9HvSaDfFEIxXItnPs23BzJQd6DDEVM0OKsoVwBG/1VMzpXVWhbkUM2K4oJBDYuGmbKIJ0qxsAbHfRLzbjcnUbFBIpx/qH3vQv9b3U03IQ/HfFkERTzfFj8w8jSpR7GBE123uFEYAzaDRIqX/2JAtJbDat/COkd7CNBva2cMvq0MGxp0PRSCPF8BXjWG3FgNHc9XPT71Ojy3sMFdfJRCeKxEsVtKwFHwALZfCUk3tIfNR8XiJwc1LmL4dg141JPKtj3WUdNFJqLGFVPC4OkR4BxajTWsChY64wmCnMxsWPCHcutKBxMVp5mxA1S+aMComToaqTRUQknLTH62kHOVEE+VQnjahscNCy0cMBWsSI0TCQcZc5ALkEYckL5A5noWSBhfm2AecMAjbcRWV0pUTh0HE64TNf0mczcnnQyu/MilaFJCae1nw2fbz1DnVOxyGTlKeZft/Ff8x1BRssfACjTwQAAAABJRU5ErkJggg==") no-repeat scroll 2px bottom; padding-left:22px;}
|
||||||
th a[href*="&table="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=") no-repeat scroll 2px bottom; padding-left:22px;}
|
html/*\*/>/*/*/body #content p a[href*="&table="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJcSURBVDjLpZPtT5JhFMafrW997I9rscA+FFu2QRurtlw5cQ4InLpwBogIPNFSiNJ4C+JVkj0QTBHQKFPQlJfwlanY1tXz3ARkn2jd27Wz++yc33XOvd0UAOp/RNGR/X5zeH9rOlTDVKAK3fsqJrxlqN27GHPuYHh+G4rXRQzZNjEws47Hli/oo/PxNsAU3qvWT3/gX3TPuHrWBhiC30nSktXDtKLB1NI4NKkxqBMqjDByPFkcxNBCPwbCfXgUeEBq705m0AZM+qsk2e3hau88W+4ANOy+XPLFQrkrcbW31KkOYJx9rBaAOzPR0gVHW6x593q9cDgcqB6e4sZoogMYdXzD0ck5ZhfLsHGKVfAqVoadKcMdzcLr82PuwwZCoRACgQCWVzdhoK2gaVpDAMNzWzhkAXamQpze/I4t13w+j2AwiFwuh7W1NXg8HmQyGSgUCshkssuU3F7AQf0c84kK3n68KFc4hXQ6DavVCqlUCqVSSdaIx+NQq9UGMsHg7Ab2jxtwp5rOvqUqia3CUqnEObWn0mp1KBaLcLlckMvloPpfrhOAl230/SGLxQK3241CoQC9Xg9nskKk1emQzWZZkBZCoRBU3/NP2GMBgXTTObjSjI1GA8lkEgzDwO/3E4iObXY6nYhEIhCJRHoWcIW6b1pF7egMlYNT7NROUKzU8XX3GJ+3D2E0GgmAm4Zbh2s0mUyIRqMcAGKx+BIlMeSiYu1K/fbEMm4+TaFnJIHrSgZX5TFIZNPo7e1Fj9QOs9kMlUqFaw9pCASCnzwe7x15xG6/rUQiAZ/Px9/5XyhZOMVGKlOdAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
|
||||||
|
|
||||||
.links #content a[href*="&database="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKRSURBVDjLhVNLTBNRFD3TTju1FCcBaxuaQEr94ydiZIHGpcFISBOi0YREZWHCVoyRxKUxxq0LXcACQyLsjO6KjSEiDfHDz0S0CLSxlFKd2g7MTDudGd+bMAQCxJucuXfuu+fcO/PeYwzDALVoNMqRuI3guq7rR4g/SEBC/Svxc8T3EUTD4bCGTcZQAUI+RvxLr9d70u/3o6KiAm63G3Qtn89DFEUkk0lks9lRkrvW3t6e2lCgRZFI5F0ikaDtjN1MVVVjYmLCGBoa6qccC7Z1kQafz4f/WSAQAGlyaXOOpQ+SNNUymQxcLhc4joPD4TBzkiRBEASkUimEQiGzdlcBlmWRy+WgKIr5Xi6XUSgUUCwWzTVN+IAzeOOde71orP0eAaOkbrDWf6Cw2+3mBLSYgny3KULXPOUY2BUB/hMd4IOn8XfhMGYjvU+2TECLLRLDMNA0zYw5JYa6Ghke/hyEn9/gZEqo3OuHp7qW3yJgESjoNPSdlb8gWCOCr29BMT0Ip5tBYnIWqlL6o8irzVsEaHcKSqQCen4cweok+FAblNRz2JxlODx1cEkzGWmVbTl7Z/jHhgCF1Z3GYjIKf+U8+ANhQn4Gm6OMUiGI9MhHg5Gl1sbu8UnKNc8B7Ui3ipxEcwvlpVFw6hz2N1xGabkXdqeBYqEOmfefEZWac4e6xz9Z22hbn+BmLBZbi8fjEBdG4NF/QdUDSM88hQ4FawKJR6cxLDZl86qzZdtdoDYwMBAkQg/2LL/ovNLVh++Dd7G0OAau9hTkrKgnnE39GW3f/Z6enpUdBSx7ePu4eq+zi4VNw+TbV0gsxFd5b9X5i4+mpnY63tsErl6okhvrfWzT0SAMR3FMXsnean08Pb/b/fgHqpjCspi90kkAAAAASUVORK5CYII=") no-repeat scroll 2px bottom; padding-left:22px;}
|
html/*\*/>/*/*/body #content a[href*="&database="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKRSURBVDjLhVNLTBNRFD3TTju1FCcBaxuaQEr94ydiZIHGpcFISBOi0YREZWHCVoyRxKUxxq0LXcACQyLsjO6KjSEiDfHDz0S0CLSxlFKd2g7MTDudGd+bMAQCxJucuXfuu+fcO/PeYwzDALVoNMqRuI3guq7rR4g/SEBC/Svxc8T3EUTD4bCGTcZQAUI+RvxLr9d70u/3o6KiAm63G3Qtn89DFEUkk0lks9lRkrvW3t6e2lCgRZFI5F0ikaDtjN1MVVVjYmLCGBoa6qccC7Z1kQafz4f/WSAQAGlyaXOOpQ+SNNUymQxcLhc4joPD4TBzkiRBEASkUimEQiGzdlcBlmWRy+WgKIr5Xi6XUSgUUCwWzTVN+IAzeOOde71orP0eAaOkbrDWf6Cw2+3mBLSYgny3KULXPOUY2BUB/hMd4IOn8XfhMGYjvU+2TECLLRLDMNA0zYw5JYa6Ghke/hyEn9/gZEqo3OuHp7qW3yJgESjoNPSdlb8gWCOCr29BMT0Ip5tBYnIWqlL6o8irzVsEaHcKSqQCen4cweok+FAblNRz2JxlODx1cEkzGWmVbTl7Z/jHhgCF1Z3GYjIKf+U8+ANhQn4Gm6OMUiGI9MhHg5Gl1sbu8UnKNc8B7Ui3ipxEcwvlpVFw6hz2N1xGabkXdqeBYqEOmfefEZWac4e6xz9Z22hbn+BmLBZbi8fjEBdG4NF/QdUDSM88hQ4FawKJR6cxLDZl86qzZdtdoDYwMBAkQg/2LL/ovNLVh++Dd7G0OAau9hTkrKgnnE39GW3f/Z6enpUdBSx7ePu4eq+zi4VNw+TbV0gsxFd5b9X5i4+mpnY63tsErl6okhvrfWzT0SAMR3FMXsnean08Pb/b/fgHqpjCspi90kkAAAAASUVORK5CYII=") no-repeat scroll 2px bottom; padding-left:22px;}
|
||||||
#content p a[href*="&schema="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFOSURBVDjLtVK7SgNRED0b9iuM2lr4QK1DQIyk0FZsJAj+gH+ilRZb2NjaRHTLmA9QFKz9huzm7t37Hu+u7IJgQjR6YLjDzOXMmcMERIR5EE5qXA4z4sqACYWEC5wfLQXf/WtMIuDSoL0A7DZDjBj/uYI0l8jzEEJYJMkvCEZM4PqZIxlzpGk+kSCY18TGtGYcx9Tv96dOqBUMBgNyzsFaC621312Ac+59yJFlGRhj5VvVoigKvniglEK32w1mkd3r9ejPPAjOhqdknYX18p1/rzo3pYqTh0OSRkJI5UMgPn4s61sX66SkhtEGcISGsQad5gH2FvehfV5BaIF2cwet5RZyKeu68pe5ubKG7dUNP5AQGltMN57Mosgr5EIiVQmYGvtc1PVicqHY+dXpk8Dg7v22XKFo1ARe9v1bDOlXKKKCs4Sn1xdU1v3vIc2CD3bN4xJjfJWvAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
|
html/*\*/>/*/*/body #content p a[href*="&schema="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFOSURBVDjLtVK7SgNRED0b9iuM2lr4QK1DQIyk0FZsJAj+gH+ilRZb2NjaRHTLmA9QFKz9huzm7t37Hu+u7IJgQjR6YLjDzOXMmcMERIR5EE5qXA4z4sqACYWEC5wfLQXf/WtMIuDSoL0A7DZDjBj/uYI0l8jzEEJYJMkvCEZM4PqZIxlzpGk+kSCY18TGtGYcx9Tv96dOqBUMBgNyzsFaC621312Ac+59yJFlGRhj5VvVoigKvniglEK32w1mkd3r9ejPPAjOhqdknYX18p1/rzo3pYqTh0OSRkJI5UMgPn4s61sX66SkhtEGcISGsQad5gH2FvehfV5BaIF2cwet5RZyKeu68pe5ubKG7dUNP5AQGltMN57Mosgr5EIiVQmYGvtc1PVicqHY+dXpk8Dg7v22XKFo1ARe9v1bDOlXKKKCs4Sn1xdU1v3vIc2CD3bN4xJjfJWvAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
|
||||||
#content p a[href*="&privileges="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGnSURBVDjLxVM9T8JQFD2lBRQRFPAjEhIwXRgwEUjERRMnZPYXuPoHSJz8BQ7+BCcHJzZHiST4MWC0fsQBJUKCEQnGWihtfa/QBgK6MHiT2/tu3+1559x3y2iahlHMghFtZACuUqmkSdyiiaqqoJJo7HVFUQZi1w+Zcrnc9vl8LAXo7YexHhaNdaFQUDiSsFarFftXClriJz4eTqHJX7DMhDEbiiDlfALP80if1CFKLYjfxCUZR9s8ZcByvadG7w/QLl/guVRC8U2Etnutv5dlGXvr44S+3ZRFjcrgjEQvnFvG2pIfGzYOZ5c3KLCsWZjNZvual0wmOwD0oX/cVnFeXQDHfcDpcuGqtYJaTQKcHYBEImGebrDuY1AvPWImtIhjLoraSwtjHhvmv17Nwnw+/zcD/0QDt+9TUD1TmJ6zQWpImFTfyM64XhiLxdAr17h2E2Bnc9XcEEURzWaTFARM2na7HW63+3eAEul8tVqF1+tFMBiEw+EYmDpBEFAsFhEIBBCJRHQAhgyDQEDCFCgejzO5XE4bNn2Gp1IpJpPJaF05d8y//40/Nlww9OOVWvkAAAAASUVORK5CYII=") no-repeat scroll 2px bottom; padding-left:22px;}
|
|
||||||
|
|
||||||
#content p a[href*="&event="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJlSURBVDjLpZNbaM9hGMc/v8NsTqF2yMhZKIexmpFyRZIiblwouZDauLYoTVEryg2uXIoIOUU5zJkh4e9QDmtJbWxrbUzz/72/9/m6+P3HLslbT9/3ufm+n/f7Pm8gif9ZMcDxe717JLZ62UQzwxukZnhveBOptyHl8anwZk/3b5pZEwOYtGNDzejSfzm58dTH+b8JvFkpwMizdSCBT8E8OJftkzy4BPIOnONHQzPO+eIhBoM5CCrLwNKslBZM8uDykCbwtgMAl/o/GXhvBYMA2rtAlpGYZSR+UIGKCgCSggGSOHy1Q/0DTifufZUknbr/RZJ0+mHWn3mU9edbMu3qG9DmQ08lKSNw3jCJOIKzjzqJopBzLZ3EEVx40smDr/u4e96QGUXPGpkzYQSJywjCwSsIiKOADUvKiUNYX1tOUQhra8oJg4hZ02cQhhGrqyuyp03tTwbOGzKIQ7j8rIsn3Qd4fEVIIn6+kzAMaH35Fn37wbZD68gnCUl+EbAkI3CpIYmiCNZUlwEwbfIUgiBg1cIyJqbzGFPiWbl8GXUb66mqnkrJ2IvUbq88GEI2dQBRGHDjZTcAbZ8+ERDQnOvm+fszVM1egA89C8avwAeO2nlLAeqRxK7j79TzPa/mXJck6darTG8XdM3uhbry+piGrou5I1pcP17h7wwk5k4aRUfPANMrhtP2pZ8J44bx7nMfff29vGl/SNP1LQA0XdtCa2cO4GdhkPRg78kPVYm3kS71uNTjU8N5I/UpxSWracndZOn8ZVx6dZRhQcz9F3cAjgR/+51rt1c2AXXAaOA7cLTlcHvDL6y6kIpO9lqsAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
|
html/*\*/>/*/*/body #content p a[href*="&sql="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ5SURBVHjapFNLaxNRFP4mnZmQZtKYpJ2I8ZE0NSbSWKpgBYNUhIJQUDddCaILwb34C0RcCi60vpa14sZFoSjxUWxTFEubFkxf9kFS+7Jp0yQmM5mH905SF9pSwQt3vnPnnvPNd86cA13Xsds+23XKsdMdQx//s0z/6hi54he3e8/0d3ZuK0FTFGhUJkVVhSbLUAiq5IxSCQrBEkGWOu8Lh38HGrlpWnlXCKhNSbZQo3cEE9FomYAuKZstE2wFa8RR1cpKqK2o4JhxmLVJVAlh5Df6IFj5MgENcHq9EAMBg2RucBDVLpdxVon0iXdvIf8sQHRIsNReht3XjI3ZI8iuPAOrkDyorBq3G6vT08ikUuAsFiN46HkXXL56eI41QV1/BMF+GulvCfCMDFvNXtSIHrC0KDTPhXgc7lAQdQ2thk2XIpewnkzCJvTA4T8PabEbfDWD+ZFxyEUdX94sw6QVCkZlxWAQU+8/YGZgALV+v0HgbWmBNzQMR0M7it8fg+HWwQk2cLkkcvJh5NNFsCVJMgq1ubiE5o4OI5CS8FYrya8b9saLKC48gIlTIG/6sBaLw3PpHrTEMrSXr4kPIaAKFkbjSA0PEVuFlB+DO8Ah2HoB8tITVPE6iplDWOn7jLn0CSQevoDV6TI+zEpUASkkZzaTYrLIrH3C/qMCFEbE4th9OEQexfQBrPYP44d+DuY91eBp+1dGgFVIDb729kKpdJfQtIy2yFNMdN/E5McYzAebUEhOYjZuQXaj5+9W/nOYbl9vLN26doOFScVI9BXmZ6dy9jpnpO1O5dfsRtBxxlk4Xu9mT4Z80DkpVlhZvdp+d3RmpyH7JcAAnHiAVYWMsdkAAAAASUVORK5CYII=") no-repeat scroll 2px bottom; padding-left:24px;}
|
||||||
#content p a[href$="&view="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gEJFwohC2f85AAAAsxJREFUOMulk8tr3HUAxD+/1z5+u5smMYlmm6R1rTlEmrY0RKqtWMVWW6qtePBv8NaKUFGUgmBB9CJ48aIH8SKGBhGKKEIaPdgam0gTQ7Bm3U2zTbKPZrP7+32fHkqDx0LnNocZmGHGsdbyIHB5QPj/J8Vi8bDV8m0RtY5qGaeNMVijsdbiOF6cDDNXw47u8/l8/so9jXMvQqlU+lK0m6+LdjMRBAFCCBq1DYRU+L5P944OtIiRxtru/qHvhh7d8/K2QalUutysrx/zHEu5XGZl9TbWDUilsygDSimMbJGyEYVdAwB09g3MPTayb9RfXl7+RLTuHHOtYn5hkYHCCH5nAW0sUmmEVCiliIRisL8HWf8b0apj4qW9CvcL5+bSX6uNjcrD2gkYPTDG7zf+YWsrRinF9I8TWGt5Yvw4QioSgc+rx8e5uThPeWGGRrOt/Np6pa83v4ue3j4AlFBEsUDru+UBxEIihdwue7DwOKl0yPTlS77f0z9kMtmcp7XGdV2ymQRr1Qax1AwfeA6pNHEUEwvNYL4XYwxaa7Kd3QzsLlhnfm6mms11dOU6H8L3fep3WswuFFmrNu7ml4pYaKJwllv2Gk1RRciY8f7nGW7tEd7Zc28WNjcqB0W0heMFpNNJUgkPqRSbm1toY2lnZmj2/cYzB5/khf2naGf+ZerWNyyVVyqOtZbZ63/8EtVWDyV9j0xXby0Z5qJkmBGu5xuAcxOndr924kXHeA6nH3mPj+bO4OPy1beTkQ8wum//U9NXpi7drpRPhBtrXWEYkkikcIMEAGvNFQLTwUs7zwLw1t4JJosXgcnU9pSfPnzkla8//zRZbtRPR7E447ru0cB1soBTjdbTf1Z/4lrtB94d/Z4Pr58k5aYAIud+3jh2Ifhg53D4zpGRZxnuOsRi7VembvxMebH1sXO/dx67EFwE3gBywCbw2dX35fn/ANYEZmpcDQc/AAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
|
|
||||||
|
|
||||||
#content p a[href*="&refresh="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAI/SURBVDjLjZPbS9NhHMYH+zNidtCSQrqwQtY5y2QtT2QGrTZf13TkoYFlzsWa/tzcoR3cSc2xYUlGJfzAaIRltY0N12H5I+jaOxG8De+evhtdOP1hu3hv3sPzPO/z4SsBIPnfuvG8cbBlWiEVO5OUItA0VS8oxi9EdhXo+6yV3V3UGHRvVXHNfNv6zRfNuBZVoiFcB/3LdnQ8U+Gk+bhPVKB3qUOuf6/muaQR/qwDkZ9BRFdCmMr5EPz6BN7lMYylLGgNNaKqt3K0SKDnQ7us690t3rNsxeyvaUz+8OJpzo/QNzd8WTtcaQ7WlBmPvxhx1V2Pg7oDziIBimwwf3qAGWESkVwQ7owNujk1ztvk+cg4NnAUTT4FrrjqUKHdF9jxBfXr1rgjaSk4OlMcLrnOrJ7latxbL1V2lgvlbG9MtMTrMw1r1PImtfyn1n5q47TlBLf90n5NmalMtUdKZoyQMkLKlIGLjMyYhFpmlz3nGEVmFJlRZNaf7pIaEndM24XIjCOzjX9mm2S2JsqdkMYIqbB1j5C6yWzVk7YRFTsGFu7l+4nveExIA9aMCcOJh6DIoMigyOh+o4UryRWQOtIjaJtoziM1FD0mpE4uZcTc72gBaUyYKEI6khgqINXO3saR7kM8IZUVCRDS0Ucf+xFbCReQhr97MZ51wpWxYnhpCD3zOrT4lTisr+AJqVx0Fiiyr4/vhP4VyyMFIUWNqRrV96vWKXKckBoIqWzXYcoPDrUslDJoopuEVEpIB0sR+AuErIiZ6OqMKAAAAABJRU5ErkJggg==") no-repeat scroll 2px bottom; padding-left:22px;}
|
html/*\*/>/*/*/body table tbody input[name*="check"] {display:block; float:left;}
|
||||||
|
|
||||||
#content p a[href*="&sql="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ5SURBVHjapFNLaxNRFP4mnZmQZtKYpJ2I8ZE0NSbSWKpgBYNUhIJQUDddCaILwb34C0RcCi60vpa14sZFoSjxUWxTFEubFkxf9kFS+7Jp0yQmM5mH905SF9pSwQt3vnPnnvPNd86cA13Xsds+23XKsdMdQx//s0z/6hi54he3e8/0d3ZuK0FTFGhUJkVVhSbLUAiq5IxSCQrBEkGWOu8Lh38HGrlpWnlXCKhNSbZQo3cEE9FomYAuKZstE2wFa8RR1cpKqK2o4JhxmLVJVAlh5Df6IFj5MgENcHq9EAMBg2RucBDVLpdxVon0iXdvIf8sQHRIsNReht3XjI3ZI8iuPAOrkDyorBq3G6vT08ikUuAsFiN46HkXXL56eI41QV1/BMF+GulvCfCMDFvNXtSIHrC0KDTPhXgc7lAQdQ2thk2XIpewnkzCJvTA4T8PabEbfDWD+ZFxyEUdX94sw6QVCkZlxWAQU+8/YGZgALV+v0HgbWmBNzQMR0M7it8fg+HWwQk2cLkkcvJh5NNFsCVJMgq1ubiE5o4OI5CS8FYrya8b9saLKC48gIlTIG/6sBaLw3PpHrTEMrSXr4kPIaAKFkbjSA0PEVuFlB+DO8Ah2HoB8tITVPE6iplDWOn7jLn0CSQevoDV6TI+zEpUASkkZzaTYrLIrH3C/qMCFEbE4th9OEQexfQBrPYP44d+DuY91eBp+1dGgFVIDb729kKpdJfQtIy2yFNMdN/E5McYzAebUEhOYjZuQXaj5+9W/nOYbl9vLN26doOFScVI9BXmZ6dy9jpnpO1O5dfsRtBxxlk4Xu9mT4Z80DkpVlhZvdp+d3RmpyH7JcAAnHiAVYWMsdkAAAAASUVORK5CYII=") no-repeat scroll 2px bottom; padding-left:24px;}
|
html/*\*/>/*/*/body table a[href*="&edit="][href*="&where"] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFUSURBVDjLrZM/SAJxGIZdWwuDlnCplkAEm1zkaIiGFFpyMIwGK5KGoK2lphDKkMDg3LLUSIJsSKhIi+684CokOtTiMizCGuzEU5K3vOEgKvtBDe/2Pc8H3x8NAM1fQlx4H9M3pcOWp6TXWmM8A7j0629v1nraiAVC0IrrwATKIgs5xyG5QiE+Z4iQdoeU2oAsnqCSO1NSTu+D9VhqRLD8nIB8F0Q2MgmJDyipCzjvYJkIfpN2UBLG8MpP4dxvQ3ZzGuyyBQ2H+AnOOCBd9aL6soh81A5hyYSGWyCFvxUcerqI4S+CvYVOFPMHxLAq8I3qdHVY5LbBhJzEsCrwutpRFBlUHy6wO2tEYtWAzLELPN2P03kjfj3luqDycV2F8AgefWbEnVqEHa2IznSD6BdsVDNStB0lfh0FPoQjdx8RrAqGzC0YprSgxzsUMOY2bf37N/6Ud1Vc9yYcH50CAAAAAElFTkSuQmCC") no-repeat scroll right bottom; padding-right:18px;}
|
||||||
|
|
||||||
table tbody input[name*="check"] {display:block; float:left;}
|
html/*\*/>/*/*/body table input + a[href*="&edit="][href*="&where"] {width:0; float:left; display:block; height:16px; overflow:hidden; text-decoration:none; padding:0 0 0 18px; background-position:2px bottom;}
|
||||||
|
|
||||||
table a[href*="&edit="][href*="&where"] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFUSURBVDjLrZM/SAJxGIZdWwuDlnCplkAEm1zkaIiGFFpyMIwGK5KGoK2lphDKkMDg3LLUSIJsSKhIi+684CokOtTiMizCGuzEU5K3vOEgKvtBDe/2Pc8H3x8NAM1fQlx4H9M3pcOWp6TXWmM8A7j0629v1nraiAVC0IrrwATKIgs5xyG5QiE+Z4iQdoeU2oAsnqCSO1NSTu+D9VhqRLD8nIB8F0Q2MgmJDyipCzjvYJkIfpN2UBLG8MpP4dxvQ3ZzGuyyBQ2H+AnOOCBd9aL6soh81A5hyYSGWyCFvxUcerqI4S+CvYVOFPMHxLAq8I3qdHVY5LbBhJzEsCrwutpRFBlUHy6wO2tEYtWAzLELPN2P03kjfj3luqDycV2F8AgefWbEnVqEHa2IznSD6BdsVDNStB0lfh0FPoQjdx8RrAqGzC0YprSgxzsUMOY2bf37N/6Ud1Vc9yYcH50CAAAAAElFTkSuQmCC") no-repeat scroll right bottom; padding-right:18px;}
|
html/*\*/>/*/*/body table thead #all-page + a {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFUSURBVDjLrZM/SAJxGIZdWwuDlnCplkAEm1zkaIiGFFpyMIwGK5KGoK2lphDKkMDg3LLUSIJsSKhIi+684CokOtTiMizCGuzEU5K3vOEgKvtBDe/2Pc8H3x8NAM1fQlx4H9M3pcOWp6TXWmM8A7j0629v1nraiAVC0IrrwATKIgs5xyG5QiE+Z4iQdoeU2oAsnqCSO1NSTu+D9VhqRLD8nIB8F0Q2MgmJDyipCzjvYJkIfpN2UBLG8MpP4dxvQ3ZzGuyyBQ2H+AnOOCBd9aL6soh81A5hyYSGWyCFvxUcerqI4S+CvYVOFPMHxLAq8I3qdHVY5LbBhJzEsCrwutpRFBlUHy6wO2tEYtWAzLELPN2P03kjfj3luqDycV2F8AgefWbEnVqEHa2IznSD6BdsVDNStB0lfh0FPoQjdx8RrAqGzC0YprSgxzsUMOY2bf37N/6Ud1Vc9yYcH50CAAAAAElFTkSuQmCC") no-repeat scroll right bottom; padding-right:18px;}
|
||||||
|
html/*\*/>/*/*/body table thead #all-page + a {width:0; display:inline-block; height:16px; overflow:hidden; text-decoration:none; padding:0 0 0 16px;}
|
||||||
|
html/*\*/>/*/*/body table td:first-child {white-space:nowrap;}
|
||||||
|
|
||||||
table input + a[href*="&edit="][href*="&where"] {width:0; float:left; display:block; height:16px; overflow:hidden; text-decoration:none; padding:0 0 0 18px; background-position:2px bottom;}
|
html/*\*/>/*/*/body input[name="delete"], html/*\*/>/*/*/body input[name="drop"] {background:transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHSSURBVHjapFM5bsJQEB2zSIDFJrHYpEtyAyoKJAp6CrqIkBPkNDlBAKXjBEgUpKOBCyQNijFiEZvZl8z7wsjESYpkpNFfPO/Nmz9j6Xg80n/M9fWi3W7fMOnd4XAo8qogAbvO5xKvL6lU6s0aL1kVMDjP5ye/36+Gw2FyOp3EQFqtVtTr9WixWHT5/JhOp6s2ghP4ORaLyaFQiGazGa3Xa0HgdrvJ6/WSpmk0Go0MjnvIZDLVM0Gr1brm/WskEkkA3O/3abvdQjq5XC6xgoiVka7rNB6PNT6ns9nsu+OkpODxeBLBYJAGgwHt9/uzQ8Vms6Hdbie+KYqC+ASTFrARBMx2HwgEaDKZiHqn0yktl0uxtzrMMAyKx+MCc+4Cs13hwQCC1GQy+W3Lms2mUIUygbEqEBLNun8z8zswVgUfLO0WD4Z6kekn8/l8okNM8GFVUMYDoVWQ6HA4bEAzoyzL1O12kbRsJajwhYZhiUajJEnShWSAQaqqKnU6HahEGysXg9RoNPJ8+cwZZLSKp47m8/k5Kxzg4XBocNxDLper2ka5Xq+LUeatilahJLN1mEJ+ZDHKJthGAKvVauJnYi9ysHIqQee1xOsLg3/+mf5inwIMAJMhb74NwG5wAAAAAElFTkSuQmCC") no-repeat scroll left center; padding:1px 5px 1px 18px; border:0; cursor:pointer; font-size:.9em;}
|
||||||
|
html/*\*/>/*/*/body input[name="delete"]:hover, html/*\*/>/*/*/body input[name="drop"]:hover {color:red; background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJdSURBVDjLpZP7S1NhGMf9W7YfogSJboSEUVCY8zJ31trcps6zTI9bLGJpjp1hmkGNxVz4Q6ildtXKXzJNbJRaRmrXoeWx8tJOTWptnrNryre5YCYuI3rh+8vL+/m8PA/PkwIg5X+y5mJWrxfOUBXm91QZM6UluUmthntHqplxUml2lciF6wrmdHriI0Wx3xw2hAediLwZRWRkCPzdDswaSvGqkGCfq8VEUsEyPF1O8Qu3O7A09RbRvjuIttsRbT6HHzebsDjcB4/JgFFlNv9MnkmsEszodIIY7Oaut2OJcSF68Qx8dgv8tmqEL1gQaaARtp5A+N4NzB0lMXxon/uxbI8gIYjB9HytGYuusfiPIQcN71kjgnW6VeFOkgh3XcHLvAwMSDPohOADdYQJdF1FtLMZPmslvhZJk2ahkgRvq4HHUoWHRDqTEDDl2mDkfheiDgt8pw340/EocuClCuFvboQzb0cwIZgki4KhzlaE6w0InipbVzBfqoK/qRH94i0rgokSFeO11iBkp8EdV8cfJo0yD75aE2ZNRvSJ0lZKcBXLaUYmQrCzDT6tDN5SyRqYlWeDLZAg0H4JQ+Jt6M3atNLE10VSwQsN4Z6r0CBwqzXesHmV+BeoyAUri8EyMfi2FowXS5dhd7doo2DVII0V5BAjigP89GEVAtda8b2ehodU4rNaAW+dGfzlFkyo89GTlcrHYCLpKD+V7yeeHNzLjkp24Uu1Ed6G8/F8qjqGRzlbl2H2dzjpMg1KdwsHxOlmJ7GTeZC/nesXbeZ6c9OYnuxUc3fmBuFft/Ff8xMd0s65SXIb/gAAAABJRU5ErkJggg==")}
|
||||||
|
|
||||||
table thead #all-page + a {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFUSURBVDjLrZM/SAJxGIZdWwuDlnCplkAEm1zkaIiGFFpyMIwGK5KGoK2lphDKkMDg3LLUSIJsSKhIi+684CokOtTiMizCGuzEU5K3vOEgKvtBDe/2Pc8H3x8NAM1fQlx4H9M3pcOWp6TXWmM8A7j0629v1nraiAVC0IrrwATKIgs5xyG5QiE+Z4iQdoeU2oAsnqCSO1NSTu+D9VhqRLD8nIB8F0Q2MgmJDyipCzjvYJkIfpN2UBLG8MpP4dxvQ3ZzGuyyBQ2H+AnOOCBd9aL6soh81A5hyYSGWyCFvxUcerqI4S+CvYVOFPMHxLAq8I3qdHVY5LbBhJzEsCrwutpRFBlUHy6wO2tEYtWAzLELPN2P03kjfj3luqDycV2F8AgefWbEnVqEHa2IznSD6BdsVDNStB0lfh0FPoQjdx8RrAqGzC0YprSgxzsUMOY2bf37N/6Ud1Vc9yYcH50CAAAAAElFTkSuQmCC") no-repeat scroll right bottom; padding-right:18px;}
|
html/*\*/>/*/*/body input[name="logout"], #logout{ width:16px; height:16px; border: none; background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJHSURBVDjLlZPNi81hFMc/z7137p1mTCFvNZfGSzLIWNjZKRvFRoqNhRCSYm8xS3+AxRRZ2JAFJWJHSQqTQkbEzYwIM+6Yid/znJfH4prLXShOnb6r8/nWOd8Tcs78bz0/f+KMu50y05nK/wy+uHDylbutqS5extvGcxaWqtoGDA8PZ3dnrs2srQc2Zko41UXLmLdyDW5OfvsUkUgbYGbU63UAQggdmvMzFmzZCgTi7CQmkZwdEaX0JwDgTnGbTCaE0G4zw80omhPI92lcEtkNkdgJCCHwJX7mZvNaB0A14SaYJlwTrpHsTkoFlV1nt2c3x5YYo1/vM9A/gKpxdfwyu/v3teCayKq4JEwT5EB2R6WgYmrs2bYbcUNNUVfEhIfFYy69uci+1fuRX84mkawFSxd/4nVWUopUVIykwlQxRTJBTIDA4Pp1jBZPuNW4wUAPmCqWIn29X1k4f5Ku8g9mpKCkakRLVEs1auVuauVuyqHMo8ejNCe+sWPVTkQKXCMmkeZUmUZjETF1tc6ooly+fgUVw9So1/tRN6YnZji46QghBFKKuAouERNhMlbAHZFE6e7pB+He8MMw+GGI4xtOMf1+lsl3TQ4NHf19BSlaO1DB9BfMHdX0O0iqSgiBbJkjm491hClJbA1LxCURgpPzXwAHhg63necAIi3XngXLcRU0fof8ETMljIyM5LGxMcbHxzvy/6fuXdWgt6+PWncv1e4euqo1ZmabvHs5+jn8yzufO7hiiZmuNpNBM13rbvVSpbrXJE7/BMkHtU9jFIC/AAAAAElFTkSuQmCC") no-repeat center left; overflow: hidden; text-indent: 18px; line-height: 0px; cursor:pointer; margin-left:6px;}
|
||||||
table thead #all-page + a {width:0; display:inline-block; height:16px; overflow:hidden; text-decoration:none; padding:0 0 0 16px;}
|
|
||||||
table td:first-child {white-space:nowrap;}
|
|
||||||
|
|
||||||
input[name="delete"], input[name="drop"] {background:transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHSSURBVHjapFM5bsJQEB2zSIDFJrHYpEtyAyoKJAp6CrqIkBPkNDlBAKXjBEgUpKOBCyQNijFiEZvZl8z7wsjESYpkpNFfPO/Nmz9j6Xg80n/M9fWi3W7fMOnd4XAo8qogAbvO5xKvL6lU6s0aL1kVMDjP5ye/36+Gw2FyOp3EQFqtVtTr9WixWHT5/JhOp6s2ghP4ORaLyaFQiGazGa3Xa0HgdrvJ6/WSpmk0Go0MjnvIZDLVM0Gr1brm/WskEkkA3O/3abvdQjq5XC6xgoiVka7rNB6PNT6ns9nsu+OkpODxeBLBYJAGgwHt9/uzQ8Vms6Hdbie+KYqC+ASTFrARBMx2HwgEaDKZiHqn0yktl0uxtzrMMAyKx+MCc+4Cs13hwQCC1GQy+W3Lms2mUIUygbEqEBLNun8z8zswVgUfLO0WD4Z6kekn8/l8okNM8GFVUMYDoVWQ6HA4bEAzoyzL1O12kbRsJajwhYZhiUajJEnShWSAQaqqKnU6HahEGysXg9RoNPJ8+cwZZLSKp47m8/k5Kxzg4XBocNxDLper2ka5Xq+LUeatilahJLN1mEJ+ZDHKJthGAKvVauJnYi9ysHIqQee1xOsLg3/+mf5inwIMAJMhb74NwG5wAAAAAElFTkSuQmCC") no-repeat scroll left center; padding:1px 5px 1px 18px; border:0; cursor:pointer; font-size:.9em;}
|
/*Used icons: Silk icon set 1.3 by Mark James --- http://www.famfamfam.com/lab/icons/silk/ */
|
||||||
input[name="delete"]:hover, input[name="drop"]:hover {color:red; background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJdSURBVDjLpZP7S1NhGMf9W7YfogSJboSEUVCY8zJ31trcps6zTI9bLGJpjp1hmkGNxVz4Q6ildtXKXzJNbJRaRmrXoeWx8tJOTWptnrNryre5YCYuI3rh+8vL+/m8PA/PkwIg5X+y5mJWrxfOUBXm91QZM6UluUmthntHqplxUml2lciF6wrmdHriI0Wx3xw2hAediLwZRWRkCPzdDswaSvGqkGCfq8VEUsEyPF1O8Qu3O7A09RbRvjuIttsRbT6HHzebsDjcB4/JgFFlNv9MnkmsEszodIIY7Oaut2OJcSF68Qx8dgv8tmqEL1gQaaARtp5A+N4NzB0lMXxon/uxbI8gIYjB9HytGYuusfiPIQcN71kjgnW6VeFOkgh3XcHLvAwMSDPohOADdYQJdF1FtLMZPmslvhZJk2ahkgRvq4HHUoWHRDqTEDDl2mDkfheiDgt8pw340/EocuClCuFvboQzb0cwIZgki4KhzlaE6w0InipbVzBfqoK/qRH94i0rgokSFeO11iBkp8EdV8cfJo0yD75aE2ZNRvSJ0lZKcBXLaUYmQrCzDT6tDN5SyRqYlWeDLZAg0H4JQ+Jt6M3atNLE10VSwQsN4Z6r0CBwqzXesHmV+BeoyAUri8EyMfi2FowXS5dhd7doo2DVII0V5BAjigP89GEVAtda8b2ehodU4rNaAW+dGfzlFkyo89GTlcrHYCLpKD+V7yeeHNzLjkp24Uu1Ed6G8/F8qjqGRzlbl2H2dzjpMg1KdwsHxOlmJ7GTeZC/nesXbeZ6c9OYnuxUc3fmBuFft/Ff8xMd0s65SXIb/gAAAABJRU5ErkJggg==")}
|
|
||||||
|
|
||||||
input[name="logout"] {background:transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJHSURBVDjLlZPNi81hFMc/z7137p1mTCFvNZfGSzLIWNjZKRvFRoqNhRCSYm8xS3+AxRRZ2JAFJWJHSQqTQkbEzYwIM+6Yid/znJfH4prLXShOnb6r8/nWOd8Tcs78bz0/f+KMu50y05nK/wy+uHDylbutqS5extvGcxaWqtoGDA8PZ3dnrs2srQc2Zko41UXLmLdyDW5OfvsUkUgbYGbU63UAQggdmvMzFmzZCgTi7CQmkZwdEaX0JwDgTnGbTCaE0G4zw80omhPI92lcEtkNkdgJCCHwJX7mZvNaB0A14SaYJlwTrpHsTkoFlV1nt2c3x5YYo1/vM9A/gKpxdfwyu/v3teCayKq4JEwT5EB2R6WgYmrs2bYbcUNNUVfEhIfFYy69uci+1fuRX84mkawFSxd/4nVWUopUVIykwlQxRTJBTIDA4Pp1jBZPuNW4wUAPmCqWIn29X1k4f5Ku8g9mpKCkakRLVEs1auVuauVuyqHMo8ejNCe+sWPVTkQKXCMmkeZUmUZjETF1tc6ooly+fgUVw9So1/tRN6YnZji46QghBFKKuAouERNhMlbAHZFE6e7pB+He8MMw+GGI4xtOMf1+lsl3TQ4NHf19BSlaO1DB9BfMHdX0O0iqSgiBbJkjm491hClJbA1LxCURgpPzXwAHhg63necAIi3XngXLcRU0fof8ETMljIyM5LGxMcbHxzvy/6fuXdWgt6+PWncv1e4euqo1ZmabvHs5+jn8yzufO7hiiZmuNpNBM13rbvVSpbrXJE7/BMkHtU9jFIC/AAAAAElFTkSuQmCC") no-repeat scroll right center; padding:1px 22px 1px 5px; border:0; cursor:pointer; font-size:.9em;}
|
|
||||||
input[name="logout"]:hover {color:red;}
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
html/*\*/>/*/*/body .error {background:#FFEEEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIsSURBVDjLpVNLSJQBEP7+h6uu62vLVAJDW1KQTMrINQ1vPQzq1GOpa9EppGOHLh0kCEKL7JBEhVCHihAsESyJiE4FWShGRmauu7KYiv6Pma+DGoFrBQ7MzGFmPr5vmDFIYj1mr1WYfrHPovA9VVOqbC7e/1rS9ZlrAVDYHig5WB0oPtBI0TNrUiC5yhP9jeF4X8NPcWfopoY48XT39PjjXeF0vWkZqOjd7LJYrmGasHPCCJbHwhS9/F8M4s8baid764Xi0Ilfp5voorpJfn2wwx/r3l77TwZUvR+qajXVn8PnvocYfXYH6k2ioOaCpaIdf11ivDcayyiMVudsOYqFb60gARJYHG9DbqQFmSVNjaO3K2NpAeK90ZCqtgcrjkP9aUCXp0moetDFEeRXnYCKXhm+uTW0CkBFu4JlxzZkFlbASz4CQGQVBFeEwZm8geyiMuRVntzsL3oXV+YMkvjRsydC1U+lhwZsWXgHb+oWVAEzIwvzyVlk5igsi7DymmHlHsFQR50rjl+981Jy1Fw6Gu0ObTtnU+cgs28AKgDiy+Awpj5OACBAhZ/qh2HOo6i+NeA73jUAML4/qWux8mt6NjW1w599CS9xb0mSEqQBEDAtwqALUmBaG5FV3oYPnTHMjAwetlWksyByaukxQg2wQ9FlccaK/OXA3/uAEUDp3rNIDQ1ctSk6kHh1/jRFoaL4M4snEMeD73gQx4M4PsT1IZ5AfYH68tZY7zv/ApRMY9mnuVMvAAAAAElFTkSuQmCC") no-repeat scroll 0.8em center; padding-left:38px;}
|
html/*\*/>/*/*/body .error {background:#FFEEEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIsSURBVDjLpVNLSJQBEP7+h6uu62vLVAJDW1KQTMrINQ1vPQzq1GOpa9EppGOHLh0kCEKL7JBEhVCHihAsESyJiE4FWShGRmauu7KYiv6Pma+DGoFrBQ7MzGFmPr5vmDFIYj1mr1WYfrHPovA9VVOqbC7e/1rS9ZlrAVDYHig5WB0oPtBI0TNrUiC5yhP9jeF4X8NPcWfopoY48XT39PjjXeF0vWkZqOjd7LJYrmGasHPCCJbHwhS9/F8M4s8baid764Xi0Ilfp5voorpJfn2wwx/r3l77TwZUvR+qajXVn8PnvocYfXYH6k2ioOaCpaIdf11ivDcayyiMVudsOYqFb60gARJYHG9DbqQFmSVNjaO3K2NpAeK90ZCqtgcrjkP9aUCXp0moetDFEeRXnYCKXhm+uTW0CkBFu4JlxzZkFlbASz4CQGQVBFeEwZm8geyiMuRVntzsL3oXV+YMkvjRsydC1U+lhwZsWXgHb+oWVAEzIwvzyVlk5igsi7DymmHlHsFQR50rjl+981Jy1Fw6Gu0ObTtnU+cgs28AKgDiy+Awpj5OACBAhZ/qh2HOo6i+NeA73jUAML4/qWux8mt6NjW1w599CS9xb0mSEqQBEDAtwqALUmBaG5FV3oYPnTHMjAwetlWksyByaukxQg2wQ9FlccaK/OXA3/uAEUDp3rNIDQ1ctSk6kHh1/jRFoaL4M4snEMeD73gQx4M4PsT1IZ5AfYH68tZY7zv/ApRMY9mnuVMvAAAAAElFTkSuQmCC") no-repeat scroll 0.8em center; padding-left:38px;}
|
||||||
html/*\*/>/*/*/body .message, #menu p.message {background:#EEFFEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKfSURBVDjLpZPrS1NhHMf9O3bOdmwDCWREIYKEUHsVJBI7mg3FvCxL09290jZj2EyLMnJexkgpLbPUanNOberU5taUMnHZUULMvelCtWF0sW/n7MVMEiN64AsPD8/n83uucQDi/id/DBT4Dolypw/qsz0pTMbj/WHpiDgsdSUyUmeiPt2+V7SrIM+bSss8ySGdR4abQQv6lrui6VxsRonrGCS9VEjSQ9E7CtiqdOZ4UuTqnBHO1X7YXl6Daa4yGq7vWO1D40wVDtj4kWQbn94myPGkCDPdSesczE2sCZShwl8CzcwZ6NiUs6n2nYX99T1cnKqA2EKui6+TwphA5k4yqMayopU5mANV3lNQTBdCMVUA9VQh3GuDMHiVcLCS3J4jSLhCGmKCjBEx0xlshjXYhApfMZRP5CyYD+UkG08+xt+4wLVQZA1tzxthm2tEfD3JxARH7QkbD1ZuozaggdZbxK5kAIsf5qGaKMTY2lAU/rH5HW3PLsEwUYy+YCcERmIjJpDcpzb6l7th9KtQ69fi09ePUej9l7cx2DJbD7UrG3r3afQHOyCo+V3QQzE35pvQvnAZukk5zL5qRL59jsKbPzdheXoBZc4saFhBS6AO7V4zqCpiawuptwQG+UAa7Ct3UT0hh9p9EnXT5Vh6t4C22QaUDh6HwnECOmcO7K+6kW49DKqS2DrEZCtfuI+9GrNHg4fMHVSO5kE7nAPVkAxKBxcOzsajpS4Yh4ohUPPWKTUh3PaQEptIOr6BiJjcZXCwktaAGfrRIpwblqOV3YKdhfXOIvBLeREWpnd8ynsaSJoyESFphwTtfjN6X1jRO2+FxWtCWksqBApeiFIR9K6fiTpPiigDoadqCEag5YUFKl6Yrciw0VOlhOivv/Ff8wtn0KzlebrUYwAAAABJRU5ErkJggg==") no-repeat scroll 0.8em center; padding-left:38px;}
|
html/*\*/>/*/*/body .message, #menu p.message {background:#EEFFEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKfSURBVDjLpZPrS1NhHMf9O3bOdmwDCWREIYKEUHsVJBI7mg3FvCxL09290jZj2EyLMnJexkgpLbPUanNOberU5taUMnHZUULMvelCtWF0sW/n7MVMEiN64AsPD8/n83uucQDi/id/DBT4Dolypw/qsz0pTMbj/WHpiDgsdSUyUmeiPt2+V7SrIM+bSss8ySGdR4abQQv6lrui6VxsRonrGCS9VEjSQ9E7CtiqdOZ4UuTqnBHO1X7YXl6Daa4yGq7vWO1D40wVDtj4kWQbn94myPGkCDPdSesczE2sCZShwl8CzcwZ6NiUs6n2nYX99T1cnKqA2EKui6+TwphA5k4yqMayopU5mANV3lNQTBdCMVUA9VQh3GuDMHiVcLCS3J4jSLhCGmKCjBEx0xlshjXYhApfMZRP5CyYD+UkG08+xt+4wLVQZA1tzxthm2tEfD3JxARH7QkbD1ZuozaggdZbxK5kAIsf5qGaKMTY2lAU/rH5HW3PLsEwUYy+YCcERmIjJpDcpzb6l7th9KtQ69fi09ePUej9l7cx2DJbD7UrG3r3afQHOyCo+V3QQzE35pvQvnAZukk5zL5qRL59jsKbPzdheXoBZc4saFhBS6AO7V4zqCpiawuptwQG+UAa7Ct3UT0hh9p9EnXT5Vh6t4C22QaUDh6HwnECOmcO7K+6kW49DKqS2DrEZCtfuI+9GrNHg4fMHVSO5kE7nAPVkAxKBxcOzsajpS4Yh4ohUPPWKTUh3PaQEptIOr6BiJjcZXCwktaAGfrRIpwblqOV3YKdhfXOIvBLeREWpnd8ynsaSJoyESFphwTtfjN6X1jRO2+FxWtCWksqBApeiFIR9K6fiTpPiigDoadqCEag5YUFKl6Yrciw0VOlhOivv/Ff8wtn0KzlebrUYwAAAABJRU5ErkJggg==") no-repeat scroll 0.8em center; padding-left:38px;}
|
||||||
|
|
||||||
html/*\*/>/*/*/body a[href$="&sql="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHGSURBVHjaxFPNLkNREP5aB6WhaKLSVtKFiIUqK1sLT2DhTXgDL2FlxSOw8FOLRiyQWhDRiKSEhKQJou49P9fMnFsLsevCJCcz594z3/m+mTmJKIrQjSXRpXUNoGqbm39qcMbAkbyIvbVwYQhD3tIeWsOQ1+QVH86Xyz+JXJPIOb9iAI4ZpOMd/yN/vb/vAdiC93cP0El2dNA6z4RjYyW2MaPU0BB0u+0BOGGsVML49LSA3J+cYDCblb0l6jeHBwg/26isrOB0a8uzYBlBgKShgD8M53J4aTTQqFaRSCYl+WxnG83zcxTmKpKg+vtFu9W8NDQDMCXW+VivYyAzjKmlJahUSpiYUKPVbCKTz0sCGzOyOpBLzdcXlCMdDDIxO4vboyoyhQIKlYocLi0uIjczIyBcA98dYqx9NywxUEyDi/P29IyF1VU5dFeroS+dRnF+Xvajk5N0ayjx8tq6+FuSyiwUF4LRHi/reLg4o9ijs6xG9RjWGowUi/h4fcXexoa0L4oc0mNZuVgFzID09VKBnFXoUb7Pnb5zQrvVovpkZC4QzwfiN6QM1eBqdxcmnq6IAA395Mlz8eTxTZwg/pcl/v01fgswAESqYZbsIsnLAAAAAElFTkSuQmCC") no-repeat scroll left bottom; padding-left:22px;}
|
html/*\*/>/*/*/body a[href$="sql="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHGSURBVHjaxFPNLkNREP5aB6WhaKLSVtKFiIUqK1sLT2DhTXgDL2FlxSOw8FOLRiyQWhDRiKSEhKQJou49P9fMnFsLsevCJCcz594z3/m+mTmJKIrQjSXRpXUNoGqbm39qcMbAkbyIvbVwYQhD3tIeWsOQ1+QVH86Xyz+JXJPIOb9iAI4ZpOMd/yN/vb/vAdiC93cP0El2dNA6z4RjYyW2MaPU0BB0u+0BOGGsVML49LSA3J+cYDCblb0l6jeHBwg/26isrOB0a8uzYBlBgKShgD8M53J4aTTQqFaRSCYl+WxnG83zcxTmKpKg+vtFu9W8NDQDMCXW+VivYyAzjKmlJahUSpiYUKPVbCKTz0sCGzOyOpBLzdcXlCMdDDIxO4vboyoyhQIKlYocLi0uIjczIyBcA98dYqx9NywxUEyDi/P29IyF1VU5dFeroS+dRnF+Xvajk5N0ayjx8tq6+FuSyiwUF4LRHi/reLg4o9ijs6xG9RjWGowUi/h4fcXexoa0L4oc0mNZuVgFzID09VKBnFXoUb7Pnb5zQrvVovpkZC4QzwfiN6QM1eBqdxcmnq6IAA395Mlz8eTxTZwg/pcl/v01fgswAESqYZbsIsnLAAAAAElFTkSuQmCC") no-repeat scroll left bottom; padding-left:22px;}
|
||||||
html/*\*/>/*/*/body a[href*="dump="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJrSURBVHjajFPPaxNREP72V8ymTbGQbRB/IT0otdV6CcWTgqCoUFQQEXoSEQ/+AypK755E1KsULIpGgw1F9KC22lgstFgQLdoWhSab2PRHTNrs7nvObGhSsRa/ZXjv7c6b+eabWUVKiX9AJQuRRci2k+260N91VwgJIQSEV1mVnjf5axTjvCfFFn7hCcBlBzJNVRA0gAZTQ1ODgXC4gDtjV9AW2QNFUTA0/Q66kPLSqVg4shYF8vEdKQ7mln+i+/VVRM0oFpbmETLq/SS6J4R/OfHtHmV24XouHFo94REDAyE9hMZgBMkvT2GZFqxQE6by0/g4P74SoKLB2ZZzWA8ffqRQLBcxNTuFjRTwxpmbfad7Oo/rHhdN6B20/6JvaKyBCnODhqNbL+PRxHXUGXWINV5kl9TDrkQct/pnZKHkyPsDGcl4MJiWq5Ecsf84LxTL8nbyK2+Pke3XHWJAQkLXgMdDNjRNRTxlQ6UmakRD0vN8NEd7EBsFO6Impu1fzGCCrOSXwCro5HEiZiExnEVnrKlaypNhG4fba02aTC8ik1/ibZrM9RlIkkGnjH0jWWJQWRn8TpLI8fcZ6MSA1WrZFERx2eHPTEPqjksBqASDLh7ZZ+HlWA6H9tYyvhjNomNnI8Km7p8/f5+HGdB46/lJeOoYPHV8mbGy8gA59HngU74asNkKYKVzlQCuW9GA6B5si+DVeA4HWmsM4qksTnZY1TMz0NRauysaUAmt2+oxM1tCM6k8mS74WXjIdm8O+JdWg36oKgXqgnzb3TvRXvZEneN6YPNIFw7MY70W5haXnlUHbp3f+b/wW4ABAAtWTLcKdqLcAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
|
html/*\*/>/*/*/body a[href*="dump="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJrSURBVHjajFPPaxNREP72V8ymTbGQbRB/IT0otdV6CcWTgqCoUFQQEXoSEQ/+AypK755E1KsULIpGgw1F9KC22lgstFgQLdoWhSab2PRHTNrs7nvObGhSsRa/ZXjv7c6b+eabWUVKiX9AJQuRRci2k+260N91VwgJIQSEV1mVnjf5axTjvCfFFn7hCcBlBzJNVRA0gAZTQ1ODgXC4gDtjV9AW2QNFUTA0/Q66kPLSqVg4shYF8vEdKQ7mln+i+/VVRM0oFpbmETLq/SS6J4R/OfHtHmV24XouHFo94REDAyE9hMZgBMkvT2GZFqxQE6by0/g4P74SoKLB2ZZzWA8ffqRQLBcxNTuFjRTwxpmbfad7Oo/rHhdN6B20/6JvaKyBCnODhqNbL+PRxHXUGXWINV5kl9TDrkQct/pnZKHkyPsDGcl4MJiWq5Ecsf84LxTL8nbyK2+Pke3XHWJAQkLXgMdDNjRNRTxlQ6UmakRD0vN8NEd7EBsFO6Impu1fzGCCrOSXwCro5HEiZiExnEVnrKlaypNhG4fba02aTC8ik1/ibZrM9RlIkkGnjH0jWWJQWRn8TpLI8fcZ6MSA1WrZFERx2eHPTEPqjksBqASDLh7ZZ+HlWA6H9tYyvhjNomNnI8Km7p8/f5+HGdB46/lJeOoYPHV8mbGy8gA59HngU74asNkKYKVzlQCuW9GA6B5si+DVeA4HWmsM4qksTnZY1TMz0NRauysaUAmt2+oxM1tCM6k8mS74WXjIdm8O+JdWg36oKgXqgnzb3TvRXvZEneN6YPNIFw7MY70W5haXnlUHbp3f+b/wW4ABAAtWTLcKdqLcAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
|
||||||
html/*\*/>/*/*/body a[href$="dump="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHzSURBVHjajJPPS+NQEMcnaaxpdWsp6Q8vtWtdkIo9+B948SjIgruCUg8F/wGP/glePe5JcBehwl4qePGm0J6KQj30UBHEzaFLUromTfPizJMnrxhhB4bJvDfzme97SZQgCOB/be98J2AsAMYYMP81KjKg0WhMYljHtS30RSz4gjkGdot559F7OLt8vvi1bJRBURS4vr8CTTQ3m80SFv1MpVJlwzBA13XuNGUwGKyY1p+Vk9aPzWw8C7ZjQXximu+9ATA5KhQK5Uwmw+nCIpEIJBIJOLjah3Q8w7379x5urFsOUEUhTl/C6R+ef35mARzPhW6vC+q/iHvyvaYwXwIQje6j1+tBv98H13VhNBpxxyPA5tw2TI50MPQsrMbXbOo53fmtaJIC7iSZAMPhkOe+73MA5Ruz3yCfz9NlvykLBUSjUR41TQPP8zhE7JNSyj8E0CbJpkiXKRoIRFABeQcQd0DFwlVV5evUTFBZRSiATEwnp4lCAa0LI2AoQC4WimRl4qgyYOw12rYNyWSSX6L4mKiBnukDK5VKYJrmmBpZwW6r1TotFotTuVyOQwQgnU7zV9npdKDdbj+hgnXRN/Yz1ev1zwg6QP+KU2disRiXblkWOI7zhJOPce+wWq2aoQDZarXaJ2xYQGfod5VKxQ2rexFgAI4OiAKxKkWeAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
|
html/*\*/>/*/*/body a[href$="dump="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHzSURBVHjajJPPS+NQEMcnaaxpdWsp6Q8vtWtdkIo9+B948SjIgruCUg8F/wGP/glePe5JcBehwl4qePGm0J6KQj30UBHEzaFLUromTfPizJMnrxhhB4bJvDfzme97SZQgCOB/be98J2AsAMYYMP81KjKg0WhMYljHtS30RSz4gjkGdot559F7OLt8vvi1bJRBURS4vr8CTTQ3m80SFv1MpVJlwzBA13XuNGUwGKyY1p+Vk9aPzWw8C7ZjQXximu+9ATA5KhQK5Uwmw+nCIpEIJBIJOLjah3Q8w7379x5urFsOUEUhTl/C6R+ef35mARzPhW6vC+q/iHvyvaYwXwIQje6j1+tBv98H13VhNBpxxyPA5tw2TI50MPQsrMbXbOo53fmtaJIC7iSZAMPhkOe+73MA5Ruz3yCfz9NlvykLBUSjUR41TQPP8zhE7JNSyj8E0CbJpkiXKRoIRFABeQcQd0DFwlVV5evUTFBZRSiATEwnp4lCAa0LI2AoQC4WimRl4qgyYOw12rYNyWSSX6L4mKiBnukDK5VKYJrmmBpZwW6r1TotFotTuVyOQwQgnU7zV9npdKDdbj+hgnXRN/Yz1ev1zwg6QP+KU2disRiXblkWOI7zhJOPce+wWq2aoQDZarXaJ2xYQGfod5VKxQ2rexFgAI4OiAKxKkWeAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
|
||||||
|
|
||||||
|
|||||||
@@ -1,319 +0,0 @@
|
|||||||
/*
|
|
||||||
FLAT UI Flavored Adminer Theme by M. Mahbubur Rahman (mahbub@mahbubblog.com)
|
|
||||||
Screenshot : http://d.pr/i/cznH
|
|
||||||
Based on work by : Lukáš Brandejs
|
|
||||||
https://raw.github.com/vrana/adminer/master/designs/ng9/adminer.css
|
|
||||||
*/
|
|
||||||
|
|
||||||
@import url(http://fonts.googleapis.com/css?family=Source+Sans+Pro:400,600);
|
|
||||||
|
|
||||||
* {
|
|
||||||
font: 14px/1.7 "Source Sans Pro","Droid Sans",Arial,Helvetica, sans-serif;
|
|
||||||
color:#333333;
|
|
||||||
margin:0px;
|
|
||||||
padding:0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
a,a:visited {
|
|
||||||
color:#2980b9;
|
|
||||||
text-decoration:none;
|
|
||||||
padding:3px 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content table thead span, #content table thead a {
|
|
||||||
font-weight:bold;
|
|
||||||
color:black;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content table thead a:hover {
|
|
||||||
background:none;
|
|
||||||
text-decoration:underline;
|
|
||||||
color:black;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover {
|
|
||||||
text-decoration:underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
font-size:1.9em;
|
|
||||||
font-weight:normal;
|
|
||||||
background:white;
|
|
||||||
color:#1e5eb6;
|
|
||||||
border-bottom:1px solid rgb(85, 112, 139);
|
|
||||||
padding:20px;
|
|
||||||
margin:0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu h1 {
|
|
||||||
padding:0px 0px 5px 20px;
|
|
||||||
background:none;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2,h3 {
|
|
||||||
font-size:1.7em;
|
|
||||||
font-weight:bold;
|
|
||||||
background:white;
|
|
||||||
color:#34495e;
|
|
||||||
border-bottom:1px solid #f4f4f4;
|
|
||||||
padding:10px 0px;
|
|
||||||
margin:0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset {
|
|
||||||
padding:5px;
|
|
||||||
border:1px solid #DEDEDE;
|
|
||||||
}
|
|
||||||
|
|
||||||
input,select,textarea {
|
|
||||||
border:1px solid #e5e5e5;
|
|
||||||
margin:1px;
|
|
||||||
padding:3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type=submit] {
|
|
||||||
color:white;
|
|
||||||
background:#27ae60;
|
|
||||||
padding:4px 10px;
|
|
||||||
cursor:pointer;
|
|
||||||
border:0px solid;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type=submit]:hover{
|
|
||||||
background:#2c3e50;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type=checkbox]{
|
|
||||||
margin-right:5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type=image] {
|
|
||||||
border:1px solid #d0cdc4;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type=checkbox],input[type=radio]{
|
|
||||||
border:1px solid #e5e5e5;
|
|
||||||
padding:2px 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
code{
|
|
||||||
background:#f0ffe1;
|
|
||||||
border:1px dashed #d5f1b9;
|
|
||||||
padding:2px 4px;
|
|
||||||
font-family:"Monaco","Courier New";
|
|
||||||
}
|
|
||||||
code a:hover{background:transparent}
|
|
||||||
|
|
||||||
table{
|
|
||||||
margin:10px 0px;
|
|
||||||
border:1px solid #d0cdc4;
|
|
||||||
border-collapse:collapse;
|
|
||||||
}
|
|
||||||
|
|
||||||
tbody tr:hover td,tbody tr:hover th{
|
|
||||||
background:#edf4ff
|
|
||||||
}
|
|
||||||
|
|
||||||
thead th, thead td {
|
|
||||||
text-align:center;
|
|
||||||
vertical-align:middle;
|
|
||||||
font-weight:bold;
|
|
||||||
white-space:nowrap;
|
|
||||||
background:#ecf0f1;
|
|
||||||
color:#808080;
|
|
||||||
}
|
|
||||||
|
|
||||||
th,td{
|
|
||||||
border:1px solid #d0cdc4;
|
|
||||||
padding:3px 6px;
|
|
||||||
vertical-align:top;
|
|
||||||
}
|
|
||||||
|
|
||||||
th a {
|
|
||||||
font-weight:bold;
|
|
||||||
padding-bottom:0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
th {
|
|
||||||
background:white;
|
|
||||||
}
|
|
||||||
|
|
||||||
tr.odd td {
|
|
||||||
background:#fcfaf5;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content tbody tr.checked td, tr.checked.odd td {
|
|
||||||
background:#fbe2e2;
|
|
||||||
color:red;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hidden{
|
|
||||||
display:none
|
|
||||||
}
|
|
||||||
|
|
||||||
.error,.message{
|
|
||||||
padding:0px;
|
|
||||||
background:transparent;
|
|
||||||
font-weight:bold
|
|
||||||
}
|
|
||||||
|
|
||||||
.error{
|
|
||||||
color:#c00
|
|
||||||
}
|
|
||||||
|
|
||||||
.message{
|
|
||||||
color:#090
|
|
||||||
}
|
|
||||||
|
|
||||||
#content{
|
|
||||||
margin:0px 0px 0px 320px;
|
|
||||||
padding:50px 20px 40px 0px;
|
|
||||||
height:100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#lang {
|
|
||||||
background:#ecf0f1;
|
|
||||||
color:#808080;
|
|
||||||
position:fixed;
|
|
||||||
top:0px;
|
|
||||||
left:0px;
|
|
||||||
width:100%;
|
|
||||||
padding:10px 20px;
|
|
||||||
z-index:1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#breadcrumb {
|
|
||||||
position:fixed;
|
|
||||||
top:0px;
|
|
||||||
left:300px;
|
|
||||||
background:#34495e;
|
|
||||||
z-index:2;
|
|
||||||
width:100%;
|
|
||||||
color:#ecf0f1;
|
|
||||||
padding:10px;
|
|
||||||
font-size:15px;
|
|
||||||
font-weight:bold;
|
|
||||||
}
|
|
||||||
#breadcrumb a{
|
|
||||||
color:#ecf0f1;
|
|
||||||
font-size:15px;
|
|
||||||
font-weight:bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu {
|
|
||||||
background:#34495e;
|
|
||||||
position:fixed;
|
|
||||||
top:-10px;
|
|
||||||
color:#FFF;
|
|
||||||
padding:20px;
|
|
||||||
padding-top:40px;
|
|
||||||
bottom:0px;
|
|
||||||
overflow:auto;
|
|
||||||
left:0px;
|
|
||||||
width:240px;
|
|
||||||
border-right:5px solid #34495e;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu p{
|
|
||||||
border-bottom:1px solid rgb(85, 112, 139);
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu a{
|
|
||||||
color:#FFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
#schema .table {
|
|
||||||
padding:5px;
|
|
||||||
background:#fcfaf5;
|
|
||||||
border:1px solid #d0cdc4;
|
|
||||||
}
|
|
||||||
|
|
||||||
#schema .table b {
|
|
||||||
color:#006aeb;
|
|
||||||
font-weight:bold;
|
|
||||||
text-decoration:underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
#schema .table b:hover {
|
|
||||||
color:white;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[name=logout] {
|
|
||||||
color:#fce2e2;
|
|
||||||
background:#d73e3e;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[name=drop] {
|
|
||||||
background-color:#c0392b;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[name=logout]:hover {
|
|
||||||
background:#ea0202;
|
|
||||||
}
|
|
||||||
|
|
||||||
#logins a, #tables a {
|
|
||||||
background:none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#logins a:hover, #tables a:hover {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#logout {
|
|
||||||
color:#FFF;
|
|
||||||
text-decoration:none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#logout:hover {
|
|
||||||
color:red;
|
|
||||||
}
|
|
||||||
|
|
||||||
.js .column {
|
|
||||||
background:#ecf0f1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content table thead a.text:hover {
|
|
||||||
text-decoration:none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#version, .version {
|
|
||||||
font-size:50%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#h1:hover {
|
|
||||||
color:white;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
input[type=submit] {
|
|
||||||
font-size:13px;
|
|
||||||
font-weight:normal;
|
|
||||||
-moz-border-radius:2px;
|
|
||||||
-webkit-border-radius:2px;
|
|
||||||
border-radius:2px;
|
|
||||||
border:0px solid #469df5;
|
|
||||||
padding:3px 10px;
|
|
||||||
text-decoration:none;
|
|
||||||
background:-webkit-gradient( linear, left top, left bottom, color-stop(5%, #63b8ee), color-stop(100%, #468ccf) );
|
|
||||||
background:-moz-linear-gradient( center top, #63b8ee 5%, #468ccf 100% );
|
|
||||||
background:-ms-linear-gradient( top, #63b8ee 5%, #468ccf 100% );
|
|
||||||
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#63b8ee', endColorstr='#468ccf');
|
|
||||||
background-color:#63b8ee;
|
|
||||||
color:#ffffff;
|
|
||||||
display:inline-block;
|
|
||||||
text-shadow:1px 1px 0px #287ace;
|
|
||||||
-webkit-box-shadow:inset 0px 0px 0px 0px #cae3fc;
|
|
||||||
-moz-box-shadow:inset 0px 0px 0px 0px #cae3fc;
|
|
||||||
box-shadow:inset 0px 0px 0px 0px #cae3fc;
|
|
||||||
}
|
|
||||||
input[type=submit]:hover {
|
|
||||||
background:-webkit-gradient( linear, left top, left bottom, color-stop(5%, #4197ee), color-stop(100%, #79bbff) );
|
|
||||||
background:-moz-linear-gradient( center top, #4197ee 5%, #79bbff 100% );
|
|
||||||
background:-ms-linear-gradient( top, #4197ee 5%, #79bbff 100% );
|
|
||||||
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#4197ee', endColorstr='#79bbff');
|
|
||||||
background-color:#4197ee;
|
|
||||||
}
|
|
||||||
input[type=submit]:active {
|
|
||||||
position:relative;
|
|
||||||
top:1px;
|
|
||||||
}
|
|
||||||
@@ -1,664 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -119,6 +119,7 @@ html>/**/body table a[href*="&edit="][href*="&where"] {
|
|||||||
height: 16px;
|
height: 16px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
padding-left: 24px;
|
padding-left: 24px;
|
||||||
|
width: 0;
|
||||||
}
|
}
|
||||||
/* Select data */
|
/* Select data */
|
||||||
html>/**/body #menu p a[href*="&select="], html>/**/body .tabs a[href*="&select="] {
|
html>/**/body #menu p a[href*="&select="], html>/**/body .tabs a[href*="&select="] {
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ if ($adminer->homepage()) {
|
|||||||
if (isset($row["Engine"]) && $name != "") {
|
if (isset($row["Engine"]) && $name != "") {
|
||||||
echo '<tr' . odd() . '><td>' . checkbox("tables[]", $table, in_array($table, (array) $_POST["tables"], true), "", "formUncheck('check-all');");
|
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>";
|
echo "<th><a href='" . h(ME) . 'select=' . urlencode($table) . "'>$name</a>";
|
||||||
$val = format_number($row["Rows"]);
|
$val = number_format($row["Rows"], 0, '.', lang(','));
|
||||||
echo "<td align='right'><a href='" . h(ME . "edit=") . urlencode($table) . "'>" . ($row["Engine"] == "InnoDB" && $val ? "~ $val" : $val) . "</a>";
|
echo "<td align='right'><a href='" . h(ME . "edit=") . urlencode($table) . "'>" . ($row["Engine"] == "InnoDB" && $val ? "~ $val" : $val) . "</a>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ function adminer_object() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function fieldName($field, $order = 0) {
|
function fieldName($field, $order = 0) {
|
||||||
if ($order && preg_match('~_(md5|sha1)$~', $field["field"])) {
|
if ($order && ereg('_(md5|sha1)$', $field["field"])) {
|
||||||
return ""; // hide hashes in select
|
return ""; // hide hashes in select
|
||||||
}
|
}
|
||||||
// display only column with comments, first five of them plus searched columns
|
// display only column with comments, first five of them plus searched columns
|
||||||
|
|||||||
@@ -4,36 +4,26 @@ class Adminer {
|
|||||||
var $_values = array();
|
var $_values = array();
|
||||||
|
|
||||||
function name() {
|
function name() {
|
||||||
return "<a href='http://www.adminer.org/editor/' target='_blank' id='h1'>" . lang('Editor') . "</a>";
|
return "<a href='http://www.adminer.org/editor/' id='h1'>" . lang('Editor') . "</a>";
|
||||||
}
|
}
|
||||||
|
|
||||||
//! driver, ns
|
//! driver, ns
|
||||||
|
|
||||||
function credentials() {
|
function credentials() {
|
||||||
return array(SERVER, $_GET["username"], get_password());
|
return array(SERVER, $_GET["username"], get_session("pwds"));
|
||||||
}
|
}
|
||||||
|
|
||||||
function permanentLogin($create = false) {
|
function permanentLogin() {
|
||||||
return password_file($create);
|
return password_file();
|
||||||
}
|
|
||||||
|
|
||||||
function bruteForceKey() {
|
|
||||||
return $_SERVER["REMOTE_ADDR"];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function database() {
|
function database() {
|
||||||
global $connection;
|
global $connection;
|
||||||
if ($connection) {
|
$databases = $this->databases(false);
|
||||||
$databases = $this->databases(false);
|
return (!$databases
|
||||||
return (!$databases
|
? $connection->result("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', 1)") // username without the database list
|
||||||
? $connection->result("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', 1)") // username without the database list
|
: $databases[(information_schema($databases[0]) ? 1 : 0)] // first available database
|
||||||
: $databases[(information_schema($databases[0]) ? 1 : 0)] // first available database
|
);
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function schemas() {
|
|
||||||
return schemas();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function databases($flush = true) {
|
function databases($flush = true) {
|
||||||
@@ -132,14 +122,14 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function selectQuery($query, $time) {
|
function selectQuery($query) {
|
||||||
return "<!--\n" . str_replace("--", "--><!-- ", $query) . "\n($time)\n-->\n";
|
return "<!--\n" . str_replace("--", "--><!-- ", $query) . "\n-->\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
function rowDescription($table) {
|
function rowDescription($table) {
|
||||||
// first varchar column
|
// first varchar column
|
||||||
foreach (fields($table) as $field) {
|
foreach (fields($table) as $field) {
|
||||||
if (preg_match("~varchar|character varying~", $field["type"])) {
|
if (ereg("varchar|character varying", $field["type"])) {
|
||||||
return idf_escape($field["field"]);
|
return idf_escape($field["field"]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -153,7 +143,7 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
// find all used ids
|
// find all used ids
|
||||||
$ids = array();
|
$ids = array();
|
||||||
foreach ($rows as $row) {
|
foreach ($rows as $row) {
|
||||||
$ids[$row[$key]] = q($row[$key]);
|
$ids[$row[$key]] = exact_value($row[$key]);
|
||||||
}
|
}
|
||||||
// uses constant number of queries to get the descriptions, join would be complex, multiple queries would be slow
|
// uses constant number of queries to get the descriptions, join would be complex, multiple queries would be slow
|
||||||
$descriptions = $this->_values[$table];
|
$descriptions = $this->_values[$table];
|
||||||
@@ -174,12 +164,12 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
function selectLink($val, $field) {
|
function selectLink($val, $field) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function selectVal($val, $link, $field, $original) {
|
function selectVal($val, $link, $field) {
|
||||||
$return = ($val === null ? " " : $val);
|
$return = ($val === null ? " " : $val);
|
||||||
$link = h($link);
|
$link = h($link);
|
||||||
if (preg_match('~blob|bytea~', $field["type"]) && !is_utf8($val)) {
|
if (ereg('blob|bytea', $field["type"]) && !is_utf8($val)) {
|
||||||
$return = lang('%d byte(s)', strlen($original));
|
$return = lang('%d byte(s)', strlen($val));
|
||||||
if (preg_match("~^(GIF|\xFF\xD8\xFF|\x89PNG\x0D\x0A\x1A\x0A)~", $original)) { // GIF|JPG|PNG, getimagetype() works with filename
|
if (ereg("^(GIF|\xFF\xD8\xFF|\x89PNG\x0D\x0A\x1A\x0A)", $val)) { // GIF|JPG|PNG, getimagetype() works with filename
|
||||||
$return = "<img src='$link' alt='$return'>";
|
$return = "<img src='$link' alt='$return'>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -187,18 +177,18 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
$return = ($val ? lang('yes') : lang('no'));
|
$return = ($val ? lang('yes') : lang('no'));
|
||||||
}
|
}
|
||||||
if ($link) {
|
if ($link) {
|
||||||
$return = "<a href='$link'" . (is_url($link) ? " rel='noreferrer'" : "") . ">$return</a>";
|
$return = "<a href='$link'>$return</a>";
|
||||||
}
|
}
|
||||||
if (!$link && !like_bool($field) && preg_match('~int|float|double|decimal~', $field["type"])) {
|
if (!$link && !like_bool($field) && ereg('int|float|double|decimal', $field["type"])) {
|
||||||
$return = "<div class='number'>$return</div>"; // Firefox doesn't support <colgroup>
|
$return = "<div class='number'>$return</div>"; // Firefox doesn't support <colgroup>
|
||||||
} elseif (preg_match('~date~', $field["type"])) {
|
} elseif (ereg('date', $field["type"])) {
|
||||||
$return = "<div class='datetime'>$return</div>";
|
$return = "<div class='datetime'>$return</div>";
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function editVal($val, $field) {
|
function editVal($val, $field) {
|
||||||
if (preg_match('~date|timestamp~', $field["type"]) && $val !== null) {
|
if (ereg('date|timestamp', $field["type"]) && $val !== null) {
|
||||||
return preg_replace('~^(\\d{2}(\\d+))-(0?(\\d+))-(0?(\\d+))~', lang('$1-$3-$5'), $val);
|
return preg_replace('~^(\\d{2}(\\d+))-(0?(\\d+))-(0?(\\d+))~', lang('$1-$3-$5'), $val);
|
||||||
}
|
}
|
||||||
return $val;
|
return $val;
|
||||||
@@ -219,7 +209,7 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
$fields = fields($_GET["select"]);
|
$fields = fields($_GET["select"]);
|
||||||
foreach ($columns as $name => $desc) {
|
foreach ($columns as $name => $desc) {
|
||||||
$field = $fields[$name];
|
$field = $fields[$name];
|
||||||
if (preg_match("~enum~", $field["type"]) || like_bool($field)) { //! set - uses 1 << $i and FIND_IN_SET()
|
if (ereg("enum", $field["type"]) || like_bool($field)) { //! set - uses 1 << $i and FIND_IN_SET()
|
||||||
$key = $keys[$name];
|
$key = $keys[$name];
|
||||||
$i--;
|
$i--;
|
||||||
echo "<div>" . h($desc) . "<input type='hidden' name='where[$i][col]' value='" . h($name) . "'>:";
|
echo "<div>" . h($desc) . "<input type='hidden' name='where[$i][col]' value='" . h($name) . "'>:";
|
||||||
@@ -244,7 +234,7 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
if (($val["col"] == "" || $columns[$val["col"]]) && "$val[col]$val[val]" != "") {
|
if (($val["col"] == "" || $columns[$val["col"]]) && "$val[col]$val[val]" != "") {
|
||||||
echo "<div><select name='where[$i][col]'><option value=''>(" . lang('anywhere') . ")" . optionlist($columns, $val["col"], true) . "</select>";
|
echo "<div><select name='where[$i][col]'><option value=''>(" . lang('anywhere') . ")" . optionlist($columns, $val["col"], true) . "</select>";
|
||||||
echo html_select("where[$i][op]", array(-1 => "") + $this->operators, $val["op"]);
|
echo html_select("where[$i][op]", array(-1 => "") + $this->operators, $val["op"]);
|
||||||
echo "<input type='search' name='where[$i][val]' value='" . h($val["val"]) . "' onkeydown='selectSearchKeydown(this, event);' onsearch='selectSearchSearch(this);'></div>\n";
|
echo "<input type='search' name='where[$i][val]' value='" . h($val["val"]) . "' onsearch='selectSearchSearch(this);'></div>\n";
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -331,13 +321,13 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
if (($key < 0 ? "" : $col) . $val != "") {
|
if (($key < 0 ? "" : $col) . $val != "") {
|
||||||
$conds = array();
|
$conds = array();
|
||||||
foreach (($col != "" ? array($col => $fields[$col]) : $fields) as $name => $field) {
|
foreach (($col != "" ? array($col => $fields[$col]) : $fields) as $name => $field) {
|
||||||
if ($col != "" || is_numeric($val) || !preg_match('~int|float|double|decimal~', $field["type"])) {
|
if ($col != "" || is_numeric($val) || !ereg('int|float|double|decimal', $field["type"])) {
|
||||||
$name = idf_escape($name);
|
$name = idf_escape($name);
|
||||||
if ($col != "" && $field["type"] == "enum") {
|
if ($col != "" && $field["type"] == "enum") {
|
||||||
$conds[] = (in_array(0, $val) ? "$name IS NULL OR " : "") . "$name IN (" . implode(", ", array_map('intval', $val)) . ")";
|
$conds[] = (in_array(0, $val) ? "$name IS NULL OR " : "") . "$name IN (" . implode(", ", array_map('intval', $val)) . ")";
|
||||||
} else {
|
} else {
|
||||||
$text_type = preg_match('~char|text|enum|set~', $field["type"]);
|
$text_type = ereg('char|text|enum|set', $field["type"]);
|
||||||
$value = $this->processInput($field, (!$op && $text_type && preg_match('~^[^%]+$~', $val) ? "%$val%" : $val));
|
$value = $this->processInput($field, (!$op && $text_type && ereg('^[^%]+$', $val) ? "%$val%" : $val));
|
||||||
$conds[] = $name . ($value == "NULL" ? " IS" . ($op == ">=" ? " NOT" : "") . " $value"
|
$conds[] = $name . ($value == "NULL" ? " IS" . ($op == ">=" ? " NOT" : "") . " $value"
|
||||||
: (in_array($op, $this->operators) || $op == "=" ? " $op $value"
|
: (in_array($op, $this->operators) || $op == "=" ? " $op $value"
|
||||||
: ($text_type ? " LIKE $value"
|
: ($text_type ? " LIKE $value"
|
||||||
@@ -365,17 +355,16 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
}
|
}
|
||||||
foreach (($index_order != "" ? array($indexes[$index_order]) : $indexes) as $index) {
|
foreach (($index_order != "" ? array($indexes[$index_order]) : $indexes) as $index) {
|
||||||
if ($index_order != "" || $index["type"] == "INDEX") {
|
if ($index_order != "" || $index["type"] == "INDEX") {
|
||||||
$has_desc = array_filter($index["descs"]);
|
|
||||||
$desc = false;
|
$desc = false;
|
||||||
foreach ($index["columns"] as $val) {
|
foreach ($index["columns"] as $val) {
|
||||||
if (preg_match('~date|timestamp~', $fields[$val]["type"])) {
|
if (ereg('date|timestamp', $fields[$val]["type"])) {
|
||||||
$desc = true;
|
$desc = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach ($index["columns"] as $key => $val) {
|
foreach ($index["columns"] as $val) {
|
||||||
$return[] = idf_escape($val) . (($has_desc ? $index["descs"][$key] : $desc) ? " DESC" : "");
|
$return[] = idf_escape($val) . ($desc ? " DESC" : "");
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -429,21 +418,21 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
function messageQuery($query, $time) {
|
function messageQuery($query) {
|
||||||
return " <span class='time'>" . @date("H:i:s") . "</span><!--\n" . str_replace("--", "--><!-- ", $query) . "\n" . ($time ? "($time)\n" : "") . "-->";
|
return " <span class='time'>" . @date("H:i:s") . "</span><!--\n" . str_replace("--", "--><!-- ", $query) . "\n-->";
|
||||||
}
|
}
|
||||||
|
|
||||||
function editFunctions($field) {
|
function editFunctions($field) {
|
||||||
$return = array();
|
$return = array();
|
||||||
if ($field["null"] && preg_match('~blob~', $field["type"])) {
|
if ($field["null"] && ereg('blob', $field["type"])) {
|
||||||
$return["NULL"] = lang('empty');
|
$return["NULL"] = lang('empty');
|
||||||
}
|
}
|
||||||
$return[""] = ($field["null"] || $field["auto_increment"] || like_bool($field) ? "" : "*");
|
$return[""] = ($field["null"] || $field["auto_increment"] || like_bool($field) ? "" : "*");
|
||||||
//! respect driver
|
//! respect driver
|
||||||
if (preg_match('~date|time~', $field["type"])) {
|
if (ereg('date|time', $field["type"])) {
|
||||||
$return["now"] = lang('now');
|
$return["now"] = lang('now');
|
||||||
}
|
}
|
||||||
if (preg_match('~_(md5|sha1)$~i', $field["field"], $match)) {
|
if (eregi('_(md5|sha1)$', $field["field"], $match)) {
|
||||||
$return[] = strtolower($match[1]);
|
$return[] = strtolower($match[1]);
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
@@ -466,16 +455,16 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
return '<input type="checkbox" value="' . h($value ? $value : 1) . '"' . ($value ? ' checked' : '') . "$attrs>";
|
return '<input type="checkbox" value="' . h($value ? $value : 1) . '"' . ($value ? ' checked' : '') . "$attrs>";
|
||||||
}
|
}
|
||||||
$hint = "";
|
$hint = "";
|
||||||
if (preg_match('~time~', $field["type"])) {
|
if (ereg('time', $field["type"])) {
|
||||||
$hint = lang('HH:MM:SS');
|
$hint = lang('HH:MM:SS');
|
||||||
}
|
}
|
||||||
if (preg_match('~date|timestamp~', $field["type"])) {
|
if (ereg('date|timestamp', $field["type"])) {
|
||||||
$hint = lang('[yyyy]-mm-dd') . ($hint ? " [$hint]" : "");
|
$hint = lang('[yyyy]-mm-dd') . ($hint ? " [$hint]" : "");
|
||||||
}
|
}
|
||||||
if ($hint) {
|
if ($hint) {
|
||||||
return "<input value='" . h($value) . "'$attrs> ($hint)"; //! maxlength
|
return "<input value='" . h($value) . "'$attrs> ($hint)"; //! maxlength
|
||||||
}
|
}
|
||||||
if (preg_match('~_(md5|sha1)$~i', $field["field"])) {
|
if (eregi('_(md5|sha1)$', $field["field"])) {
|
||||||
return "<input type='password' value='" . h($value) . "'$attrs>";
|
return "<input type='password' value='" . h($value) . "'$attrs>";
|
||||||
}
|
}
|
||||||
return '';
|
return '';
|
||||||
@@ -486,15 +475,15 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
return "$function()";
|
return "$function()";
|
||||||
}
|
}
|
||||||
$return = $value;
|
$return = $value;
|
||||||
if (preg_match('~date|timestamp~', $field["type"]) && preg_match('(^' . str_replace('\\$1', '(?P<p1>\\d*)', preg_replace('~(\\\\\\$([2-6]))~', '(?P<p\\2>\\d{1,2})', preg_quote(lang('$1-$3-$5')))) . '(.*))', $value, $match)) {
|
if (ereg('date|timestamp', $field["type"]) && preg_match('(^' . str_replace('\\$1', '(?P<p1>\\d*)', preg_replace('~(\\\\\\$([2-6]))~', '(?P<p\\2>\\d{1,2})', preg_quote(lang('$1-$3-$5')))) . '(.*))', $value, $match)) {
|
||||||
$return = ($match["p1"] != "" ? $match["p1"] : ($match["p2"] != "" ? ($match["p2"] < 70 ? 20 : 19) . $match["p2"] : gmdate("Y"))) . "-$match[p3]$match[p4]-$match[p5]$match[p6]" . end($match);
|
$return = ($match["p1"] != "" ? $match["p1"] : ($match["p2"] != "" ? ($match["p2"] < 70 ? 20 : 19) . $match["p2"] : gmdate("Y"))) . "-$match[p3]$match[p4]-$match[p5]$match[p6]" . end($match);
|
||||||
}
|
}
|
||||||
$return = ($field["type"] == "bit" && preg_match('~^[0-9]+$~', $value) ? $return : q($return));
|
$return = ($field["type"] == "bit" && ereg('^[0-9]+$', $value) ? $return : q($return));
|
||||||
if ($value == "" && like_bool($field)) {
|
if ($value == "" && like_bool($field)) {
|
||||||
$return = "0";
|
$return = "0";
|
||||||
} elseif ($value == "" && ($field["null"] || !preg_match('~char|text~', $field["type"]))) {
|
} elseif ($value == "" && ($field["null"] || !ereg('char|text', $field["type"]))) {
|
||||||
$return = "NULL";
|
$return = "NULL";
|
||||||
} elseif (preg_match('~^(md5|sha1)$~', $function)) {
|
} elseif (ereg('^(md5|sha1)$', $function)) {
|
||||||
$return = "$function($return)";
|
$return = "$function($return)";
|
||||||
}
|
}
|
||||||
return unconvert_field($field, $return);
|
return unconvert_field($field, $return);
|
||||||
@@ -544,27 +533,33 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
}
|
}
|
||||||
|
|
||||||
function navigation($missing) {
|
function navigation($missing) {
|
||||||
global $VERSION;
|
global $VERSION, $token;
|
||||||
?>
|
?>
|
||||||
<h1>
|
<h1>
|
||||||
<?php echo $this->name(); ?> <span class="version"><?php echo $VERSION; ?></span>
|
<?php echo $this->name(); ?> <span class="version"><?php echo $VERSION; ?></span>
|
||||||
<a href="http://www.adminer.org/editor/#download" target="_blank" id="version"><?php echo (version_compare($VERSION, $_COOKIE["adminer_version"]) < 0 ? h($_COOKIE["adminer_version"]) : ""); ?></a>
|
<a href="http://www.adminer.org/editor/#download" id="version"><?php echo (version_compare($VERSION, $_COOKIE["adminer_version"]) < 0 ? h($_COOKIE["adminer_version"]) : ""); ?></a>
|
||||||
</h1>
|
</h1>
|
||||||
<?php
|
<?php
|
||||||
if ($missing == "auth") {
|
if ($missing == "auth") {
|
||||||
$first = true;
|
$first = true;
|
||||||
foreach ((array) $_SESSION["pwds"] as $vendor => $servers) {
|
foreach ((array) $_SESSION["pwds"]["server"][""] as $username => $password) {
|
||||||
foreach ($servers[""] as $username => $password) {
|
if ($password !== null) {
|
||||||
if ($password !== null) {
|
if ($first) {
|
||||||
if ($first) {
|
echo "<p id='logins' onmouseover='menuOver(this, event);' onmouseout='menuOut(this);'>\n";
|
||||||
echo "<p id='logins' onmouseover='menuOver(this, event);' onmouseout='menuOut(this);'>\n";
|
$first = false;
|
||||||
$first = false;
|
|
||||||
}
|
|
||||||
echo "<a href='" . h(auth_url($vendor, "", $username)) . "'>" . ($username != "" ? h($username) : "<i>" . lang('empty') . "</i>") . "</a><br>\n";
|
|
||||||
}
|
}
|
||||||
|
echo "<a href='" . h(auth_url("server", "", $username)) . "'>" . ($username != "" ? h($username) : "<i>" . lang('empty') . "</i>") . "</a><br>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
?>
|
||||||
|
<form action="" method="post">
|
||||||
|
<p class="logout">
|
||||||
|
<input type="submit" name="logout" value="<?php echo lang('Logout'); ?>" id="logout">
|
||||||
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
|
</p>
|
||||||
|
</form>
|
||||||
|
<?php
|
||||||
$this->databasesPrint($missing);
|
$this->databasesPrint($missing);
|
||||||
if ($missing != "db" && $missing != "ns") {
|
if ($missing != "db" && $missing != "ns") {
|
||||||
$table_status = table_status('', true);
|
$table_status = table_status('', true);
|
||||||
@@ -585,7 +580,7 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
foreach ($tables as $row) {
|
foreach ($tables as $row) {
|
||||||
$name = $this->tableName($row);
|
$name = $this->tableName($row);
|
||||||
if (isset($row["Engine"]) && $name != "") { // ignore views and tables without name
|
if (isset($row["Engine"]) && $name != "") { // ignore views and tables without name
|
||||||
echo "<a href='" . h(ME) . 'select=' . urlencode($row["Name"]) . "'" . bold($_GET["select"] == $row["Name"] || $_GET["edit"] == $row["Name"]) . " title='" . lang('Select data') . "'>$name</a><br>\n";
|
echo "<a href='" . h(ME) . 'select=' . urlencode($row["Name"]) . "'" . bold($_GET["select"] == $row["Name"]) . " title='" . lang('Select data') . "'>$name</a><br>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function email_header($header) {
|
function email_header($header) {
|
||||||
// iconv_mime_encode requires iconv, imap_8bit requires IMAP extension
|
// iconv_mime_encode requires PHP 5, imap_8bit requires IMAP extension
|
||||||
return "=?UTF-8?B?" . base64_encode($header) . "?="; //! split long lines
|
return "=?UTF-8?B?" . base64_encode($header) . "?="; //! split long lines
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -17,7 +17,7 @@ function email_header($header) {
|
|||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function send_mail($email, $subject, $message, $from = "", $files = array()) {
|
function send_mail($email, $subject, $message, $from = "", $files = array()) {
|
||||||
$eol = (DIRECTORY_SEPARATOR == "/" ? "\n" : "\r\n"); // PHP_EOL available since PHP 5.0.2
|
$eol = (strncasecmp(PHP_OS, "win", 3) ? "\n" : "\r\n"); // PHP_EOL available since PHP 4.3.10 and 5.0.2
|
||||||
$message = str_replace("\n", $eol, wordwrap(str_replace("\r", "", "$message\n")));
|
$message = str_replace("\n", $eol, wordwrap(str_replace("\r", "", "$message\n")));
|
||||||
$boundary = uniqid("boundary");
|
$boundary = uniqid("boundary");
|
||||||
$attachments = "";
|
$attachments = "";
|
||||||
@@ -49,5 +49,5 @@ function send_mail($email, $subject, $message, $from = "", $files = array()) {
|
|||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function like_bool($field) {
|
function like_bool($field) {
|
||||||
return preg_match("~bool|(tinyint|bit)\\(1\\)~", $field["full_type"]);
|
return ereg("bool|(tinyint|bit)\\(1\\)", $field["full_type"]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,12 +3,11 @@ if ($_GET["script"] == "kill") {
|
|||||||
$connection->query("KILL " . (+$_POST["kill"]));
|
$connection->query("KILL " . (+$_POST["kill"]));
|
||||||
|
|
||||||
} elseif (list($table, $id, $name) = $adminer->_foreignColumn(column_foreign_keys($_GET["source"]), $_GET["field"])) {
|
} elseif (list($table, $id, $name) = $adminer->_foreignColumn(column_foreign_keys($_GET["source"]), $_GET["field"])) {
|
||||||
$limit = 11;
|
$result = $connection->query("SELECT $id, $name FROM " . table($table) . " WHERE " . (ereg('^[0-9]+$', $_GET["value"]) ? "$id = $_GET[value] OR " : "") . "$name LIKE " . q("$_GET[value]%") . " ORDER BY 2 LIMIT 11");
|
||||||
$result = $connection->query("SELECT $id, $name FROM " . table($table) . " WHERE " . (preg_match('~^[0-9]+$~', $_GET["value"]) ? "$id = $_GET[value] OR " : "") . "$name LIKE " . q("$_GET[value]%") . " ORDER BY 2 LIMIT $limit");
|
for ($i=0; $i < 10 && ($row = $result->fetch_row()); $i++) {
|
||||||
for ($i=1; ($row = $result->fetch_row()) && $i < $limit; $i++) {
|
|
||||||
echo "<a href='" . h(ME . "edit=" . urlencode($table) . "&where" . urlencode("[" . bracket_escape(idf_unescape($id)) . "]") . "=" . urlencode($row[0])) . "'>" . h($row[1]) . "</a><br>\n";
|
echo "<a href='" . h(ME . "edit=" . urlencode($table) . "&where" . urlencode("[" . bracket_escape(idf_unescape($id)) . "]") . "=" . urlencode($row[0])) . "'>" . h($row[1]) . "</a><br>\n";
|
||||||
}
|
}
|
||||||
if ($row) {
|
if ($i == 10) {
|
||||||
echo "...\n";
|
echo "...\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
// Editor specific functions
|
// Editor specific functions
|
||||||
|
|
||||||
|
function bodyLoad(version) {
|
||||||
|
}
|
||||||
|
|
||||||
function selectFieldChange(form) {
|
function selectFieldChange(form) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function whisperClick(event, field) {
|
function whisperClick(event, field) {
|
||||||
var el = getTarget(event);
|
var el = event.target || event.srcElement;
|
||||||
if (isTag(el, 'a') && !(event.button || event.shiftKey || event.altKey || isCtrl(event))) {
|
if (/^a$/i.test(el.tagName) && !(event.button || event.shiftKey || event.altKey || isCtrl(event))) {
|
||||||
field.value = el.firstChild.data;
|
field.value = el.firstChild.data;
|
||||||
field.previousSibling.value = decodeURIComponent(el.href.replace(/.*=/, ''));
|
field.previousSibling.value = decodeURIComponent(el.href.replace(/.*=/, ''));
|
||||||
field.nextSibling.style.display = 'none';
|
field.nextSibling.style.display = 'none';
|
||||||
|
|||||||