mirror of
https://github.com/vrana/adminer.git
synced 2026-03-25 05:50:04 +01:00
Compare commits
2 Commits
v3.6.4
...
navigation
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7341756579 | ||
|
|
946eb154f6 |
5
.gitignore
vendored
5
.gitignore
vendored
@@ -1,3 +1,2 @@
|
|||||||
/adminer/adminer.css
|
adminer*.php
|
||||||
/adminer*.php
|
editor*.php
|
||||||
/editor*.php
|
|
||||||
|
|||||||
18
.gitmodules
vendored
18
.gitmodules
vendored
@@ -1,18 +1,6 @@
|
|||||||
[submodule "jush"]
|
[submodule "jush"]
|
||||||
path = externals/jush
|
path = externals/jush
|
||||||
url = git://jush.git.sourceforge.net/gitroot/jush/jush
|
url = git://jush.git.sourceforge.net/gitroot/jush/jush
|
||||||
[submodule "tinymce"]
|
[submodule "jsmin-php"]
|
||||||
path = externals/tinymce
|
path = externals/jsmin-php
|
||||||
url = git://github.com/tinymce/tinymce.git
|
url = git://github.com/rgrove/jsmin-php.git
|
||||||
[submodule "jquery-ui"]
|
|
||||||
path = externals/jquery-ui
|
|
||||||
url = git://github.com/jquery/jquery-ui.git
|
|
||||||
[submodule "jquery-timepicker"]
|
|
||||||
path = externals/jquery-timepicker
|
|
||||||
url = git://github.com/trentrichardson/jQuery-Timepicker-Addon.git
|
|
||||||
[submodule "wymeditor"]
|
|
||||||
path = externals/wymeditor
|
|
||||||
url = git://github.com/wymeditor/wymeditor.git
|
|
||||||
[submodule "JsShrink"]
|
|
||||||
path = externals/JsShrink
|
|
||||||
url = git://github.com/vrana/JsShrink.git
|
|
||||||
|
|||||||
@@ -33,14 +33,10 @@ if (!$error && $_POST) {
|
|||||||
if (!$connection->multi_query($query)) {
|
if (!$connection->multi_query($query)) {
|
||||||
echo "<p class='error'>" . error() . "\n";
|
echo "<p class='error'>" . error() . "\n";
|
||||||
} else {
|
} else {
|
||||||
$connection2 = connect();
|
|
||||||
if (is_object($connection2)) {
|
|
||||||
$connection2->select_db(DB);
|
|
||||||
}
|
|
||||||
do {
|
do {
|
||||||
$result = $connection->store_result();
|
$result = $connection->store_result();
|
||||||
if (is_object($result)) {
|
if (is_object($result)) {
|
||||||
select($result, $connection2);
|
select($result);
|
||||||
} else {
|
} else {
|
||||||
echo "<p class='message'>" . lang('Routine has been called, %d row(s) affected.', $connection->affected_rows) . "\n";
|
echo "<p class='message'>" . lang('Routine has been called, %d row(s) affected.', $connection->affected_rows) . "\n";
|
||||||
}
|
}
|
||||||
@@ -61,13 +57,8 @@ if ($in) {
|
|||||||
$name = $field["field"];
|
$name = $field["field"];
|
||||||
echo "<tr><th>" . $adminer->fieldName($field);
|
echo "<tr><th>" . $adminer->fieldName($field);
|
||||||
$value = $_POST["fields"][$name];
|
$value = $_POST["fields"][$name];
|
||||||
if ($value != "") {
|
if ($value != "" && ereg("enum|set", $field["type"])) {
|
||||||
if ($field["type"] == "enum") {
|
$value = intval($value);
|
||||||
$value = +$value;
|
|
||||||
}
|
|
||||||
if ($field["type"] == "set") {
|
|
||||||
$value = array_sum($value);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
input($field, $value, (string) $_POST["function"][$name]); // param name can be empty
|
input($field, $value, (string) $_POST["function"][$name]); // param name can be empty
|
||||||
echo "\n";
|
echo "\n";
|
||||||
@@ -76,6 +67,6 @@ if ($in) {
|
|||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
<p>
|
<p>
|
||||||
<input type="submit" value="<?php echo lang('Call'); ?>">
|
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
|
<input type="submit" value="<?php echo lang('Call'); ?>">
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -14,52 +14,45 @@ if ($TABLE != "") {
|
|||||||
$orig_fields = fields($TABLE);
|
$orig_fields = fields($TABLE);
|
||||||
$orig_status = table_status($TABLE);
|
$orig_status = table_status($TABLE);
|
||||||
}
|
}
|
||||||
if ($_POST && !$_POST["fields"]) {
|
|
||||||
$_POST["fields"] = array();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"] && !$_POST["up"] && !$_POST["down"]) {
|
if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"] && !$_POST["up"] && !$_POST["down"]) {
|
||||||
if ($_POST["drop"]) {
|
if ($_POST["drop"]) {
|
||||||
query_redirect("DROP TABLE " . table($TABLE), substr(ME, 0, -1), lang('Table has been dropped.'));
|
query_redirect("DROP TABLE " . table($TABLE), substr(ME, 0, -1), lang('Table has been dropped.'));
|
||||||
} else {
|
} else {
|
||||||
$fields = array();
|
$fields = array();
|
||||||
$all_fields = array();
|
|
||||||
$use_all_fields = false;
|
|
||||||
$foreign = array();
|
$foreign = array();
|
||||||
ksort($_POST["fields"]);
|
ksort($_POST["fields"]);
|
||||||
$orig_field = reset($orig_fields);
|
$orig_field = reset($orig_fields);
|
||||||
$after = " FIRST";
|
$after = "FIRST";
|
||||||
foreach ($_POST["fields"] as $key => $field) {
|
foreach ($_POST["fields"] as $key => $field) {
|
||||||
$foreign_key = $foreign_keys[$field["type"]];
|
$type_field = (isset($types[$field["type"]]) ? $field : $referencable_primary[$foreign_keys[$field["type"]]]);
|
||||||
$type_field = ($foreign_key !== null ? $referencable_primary[$foreign_key] : $field); //! can collide with user defined type
|
|
||||||
if ($field["field"] != "") {
|
if ($field["field"] != "") {
|
||||||
if (!$field["has_default"]) {
|
if ($type_field) {
|
||||||
$field["default"] = null;
|
if (!$field["has_default"]) {
|
||||||
}
|
$field["default"] = null;
|
||||||
if ($key == $_POST["auto_increment_col"]) {
|
}
|
||||||
$field["auto_increment"] = true;
|
$default = eregi_replace(" *on update CURRENT_TIMESTAMP", "", $field["default"]);
|
||||||
}
|
if ($default != $field["default"]) { // preg_replace $count is available since PHP 5.1.0
|
||||||
$process_field = process_field($field, $type_field);
|
$field["on_update"] = "CURRENT_TIMESTAMP";
|
||||||
$all_fields[] = array($field["orig"], $process_field, $after);
|
$field["default"] = $default;
|
||||||
if ($process_field != process_field($orig_field, $orig_field)) {
|
}
|
||||||
$fields[] = array($field["orig"], $process_field, $after);
|
if ($key == $_POST["auto_increment_col"]) {
|
||||||
if ($field["orig"] != "" || $after) {
|
$field["auto_increment"] = true;
|
||||||
$use_all_fields = true;
|
}
|
||||||
|
$process_field = process_field($field, $type_field);
|
||||||
|
if ($process_field != process_field($orig_field, $orig_field)) {
|
||||||
|
$fields[] = array($field["orig"], $process_field, $after);
|
||||||
|
}
|
||||||
|
if (!isset($types[$field["type"]])) {
|
||||||
|
$foreign[] = ($TABLE != "" ? "ADD " : " ") . "FOREIGN KEY (" . idf_escape($field["field"]) . ") REFERENCES " . idf_escape($foreign_keys[$field["type"]]) . " (" . idf_escape($type_field["field"]) . ")" . (in_array($field["on_delete"], $on_actions) ? " ON DELETE $field[on_delete]" : "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($foreign_key !== null) {
|
$after = "AFTER " . idf_escape($field["field"]);
|
||||||
$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]" : "");
|
|
||||||
}
|
|
||||||
$after = " AFTER " . idf_escape($field["field"]);
|
|
||||||
} elseif ($field["orig"] != "") {
|
} elseif ($field["orig"] != "") {
|
||||||
$use_all_fields = true;
|
|
||||||
$fields[] = array($field["orig"]);
|
$fields[] = array($field["orig"]);
|
||||||
}
|
}
|
||||||
if ($field["orig"] != "") {
|
if ($field["orig"] != "") {
|
||||||
$orig_field = next($orig_fields);
|
$orig_field = next($orig_fields);
|
||||||
if (!$orig_field) {
|
|
||||||
$after = "";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$partitioning = "";
|
$partitioning = "";
|
||||||
@@ -73,9 +66,9 @@ if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"] && !$_POST["up"]
|
|||||||
}
|
}
|
||||||
$partitioning .= "\nPARTITION BY $_POST[partition_by]($_POST[partition])" . ($partitions // $_POST["partition"] can be expression, not only column
|
$partitioning .= "\nPARTITION BY $_POST[partition_by]($_POST[partition])" . ($partitions // $_POST["partition"] can be expression, not only column
|
||||||
? " (" . implode(",", $partitions) . "\n)"
|
? " (" . implode(",", $partitions) . "\n)"
|
||||||
: ($_POST["partitions"] ? " PARTITIONS " . (+$_POST["partitions"]) : "")
|
: ($_POST["partitions"] ? " PARTITIONS " . intval($_POST["partitions"]) : "")
|
||||||
);
|
);
|
||||||
} elseif (support("partitioning") && ereg("partitioned", $orig_status["Create_options"])) {
|
} elseif ($TABLE != "" && support("partitioning")) {
|
||||||
$partitioning .= "\nREMOVE PARTITIONING";
|
$partitioning .= "\nREMOVE PARTITIONING";
|
||||||
}
|
}
|
||||||
$message = lang('Table has been altered.');
|
$message = lang('Table has been altered.');
|
||||||
@@ -83,16 +76,15 @@ if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"] && !$_POST["up"]
|
|||||||
cookie("adminer_engine", $_POST["Engine"]);
|
cookie("adminer_engine", $_POST["Engine"]);
|
||||||
$message = lang('Table has been created.');
|
$message = lang('Table has been created.');
|
||||||
}
|
}
|
||||||
$name = trim($_POST["name"]);
|
queries_redirect(ME . "table=" . urlencode($_POST["name"]), $message, alter_table(
|
||||||
queries_redirect(ME . "table=" . urlencode($name), $message, alter_table(
|
|
||||||
$TABLE,
|
$TABLE,
|
||||||
$name,
|
$_POST["name"],
|
||||||
($jush == "sqlite" && ($use_all_fields || $foreign) ? $all_fields : $fields),
|
$fields,
|
||||||
$foreign,
|
$foreign,
|
||||||
$_POST["Comment"],
|
$_POST["Comment"],
|
||||||
($_POST["Engine"] && $_POST["Engine"] != $orig_status["Engine"] ? $_POST["Engine"] : ""),
|
($_POST["Engine"] && $_POST["Engine"] != $orig_status["Engine"] ? $_POST["Engine"] : ""),
|
||||||
($_POST["Collation"] && $_POST["Collation"] != $orig_status["Collation"] ? $_POST["Collation"] : ""),
|
($_POST["Collation"] && $_POST["Collation"] != $orig_status["Collation"] ? $_POST["Collation"] : ""),
|
||||||
($_POST["Auto_increment"] != "" ? +$_POST["Auto_increment"] : ""),
|
($_POST["Auto_increment"] != "" ? preg_replace('~[^0-9]+~', '', $_POST["Auto_increment"]) : ""),
|
||||||
$partitioning
|
$partitioning
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@@ -102,7 +94,7 @@ page_header(($TABLE != "" ? lang('Alter table') : lang('Create table')), $error,
|
|||||||
|
|
||||||
$row = array(
|
$row = array(
|
||||||
"Engine" => $_COOKIE["adminer_engine"],
|
"Engine" => $_COOKIE["adminer_engine"],
|
||||||
"fields" => array(array("field" => "", "type" => (isset($types["int"]) ? "int" : (isset($types["integer"]) ? "integer" : "")))),
|
"fields" => array(array("field" => "")),
|
||||||
"partition_names" => array(""),
|
"partition_names" => array(""),
|
||||||
);
|
);
|
||||||
if ($_POST) {
|
if ($_POST) {
|
||||||
@@ -120,15 +112,19 @@ if ($_POST) {
|
|||||||
}
|
}
|
||||||
foreach ($orig_fields as $field) {
|
foreach ($orig_fields as $field) {
|
||||||
$field["has_default"] = isset($field["default"]);
|
$field["has_default"] = isset($field["default"]);
|
||||||
|
if ($field["on_update"]) {
|
||||||
|
$field["default"] .= " ON UPDATE $field[on_update]"; // CURRENT_TIMESTAMP
|
||||||
|
}
|
||||||
$row["fields"][] = $field;
|
$row["fields"][] = $field;
|
||||||
}
|
}
|
||||||
if (support("partitioning")) {
|
if (support("partitioning")) {
|
||||||
$from = "FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = " . q(DB) . " AND TABLE_NAME = " . q($TABLE);
|
$from = "FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = " . $connection->quote(DB) . " AND TABLE_NAME = " . $connection->quote($TABLE);
|
||||||
$result = $connection->query("SELECT PARTITION_METHOD, PARTITION_ORDINAL_POSITION, PARTITION_EXPRESSION $from ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1");
|
$result = $connection->query("SELECT PARTITION_METHOD, PARTITION_ORDINAL_POSITION, PARTITION_EXPRESSION $from ORDER BY PARTITION_ORDINAL_POSITION LIMIT 1");
|
||||||
list($row["partition_by"], $row["partitions"], $row["partition"]) = $result->fetch_row();
|
list($row["partition_by"], $row["partitions"], $row["partition"]) = $result->fetch_row();
|
||||||
$row["partition_names"] = array();
|
$row["partition_names"] = array();
|
||||||
$row["partition_values"] = array();
|
$row["partition_values"] = array();
|
||||||
foreach (get_rows("SELECT PARTITION_NAME, PARTITION_DESCRIPTION $from AND PARTITION_NAME != '' ORDER BY PARTITION_ORDINAL_POSITION") as $row1) {
|
$result = $connection->query("SELECT PARTITION_NAME, PARTITION_DESCRIPTION $from AND PARTITION_NAME != '' ORDER BY PARTITION_ORDINAL_POSITION");
|
||||||
|
while ($row1 = $result->fetch_assoc()) {
|
||||||
$row["partition_names"][] = $row1["PARTITION_NAME"];
|
$row["partition_names"][] = $row1["PARTITION_NAME"];
|
||||||
$row["partition_values"][] = $row1["PARTITION_DESCRIPTION"];
|
$row["partition_values"][] = $row1["PARTITION_DESCRIPTION"];
|
||||||
}
|
}
|
||||||
@@ -137,6 +133,11 @@ if ($_POST) {
|
|||||||
}
|
}
|
||||||
$collations = collations();
|
$collations = collations();
|
||||||
|
|
||||||
|
$suhosin = floor(extension_loaded("suhosin") ? (min(ini_get("suhosin.request.max_vars"), ini_get("suhosin.post.max_vars")) - 13) / 10 : 0); // 10 - number of fields per row, 13 - number of other fields
|
||||||
|
if ($suhosin && count($row["fields"]) > $suhosin) {
|
||||||
|
echo "<p class='error'>" . h(lang('Maximum number of allowed fields exceeded. Please increase %s and %s.', 'suhosin.post.max_vars', 'suhosin.request.max_vars')) . "\n";
|
||||||
|
}
|
||||||
|
|
||||||
$engines = engines();
|
$engines = engines();
|
||||||
// case of engine may differ
|
// case of engine may differ
|
||||||
foreach ($engines as $engine) {
|
foreach ($engines as $engine) {
|
||||||
@@ -149,33 +150,23 @@ foreach ($engines as $engine) {
|
|||||||
|
|
||||||
<form action="" method="post" id="form">
|
<form action="" method="post" id="form">
|
||||||
<p>
|
<p>
|
||||||
<?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"]); ?>">
|
||||||
<?php if ($TABLE == "" && !$_POST) { ?><script type='text/javascript'>document.getElementById('form')['name'].focus();</script><?php } ?>
|
|
||||||
<?php echo ($engines ? html_select("Engine", array("" => "(" . lang('engine') . ")") + $engines, $row["Engine"]) : ""); ?>
|
<?php echo ($engines ? html_select("Engine", array("" => "(" . lang('engine') . ")") + $engines, $row["Engine"]) : ""); ?>
|
||||||
<?php echo ($collations && !ereg("sqlite|mssql", $jush) ? html_select("Collation", array("" => "(" . lang('collation') . ")") + $collations, $row["Collation"]) : ""); ?>
|
<?php echo ($collations ? 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'); ?>">
|
||||||
<table cellspacing="0" id="edit-fields" class="nowrap">
|
<table cellspacing="0" id="edit-fields" class="nowrap">
|
||||||
<?php
|
<?php $comments = edit_fields($row["fields"], $collations, "TABLE", $suhosin, $foreign_keys, $row["Comment"] != ""); ?>
|
||||||
$comments = ($_POST ? $_POST["comments"] : $row["Comment"] != "");
|
|
||||||
if (!$_POST && !$comments) {
|
|
||||||
foreach ($row["fields"] as $field) {
|
|
||||||
if ($field["comment"] != "") {
|
|
||||||
$comments = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
edit_fields($row["fields"], $collations, "TABLE", $foreign_keys, $comments);
|
|
||||||
?>
|
|
||||||
</table>
|
</table>
|
||||||
<p>
|
<p>
|
||||||
<?php echo lang('Auto Increment'); ?>: <input type="number" name="Auto_increment" size="6" value="<?php echo h($row["Auto_increment"]); ?>">
|
<?php echo lang('Auto Increment'); ?>: <input name="Auto_increment" size="6" value="<?php echo h($row["Auto_increment"]); ?>">
|
||||||
<label class="jsonly"><input type="checkbox" id="defaults" name="defaults" value="1" checked onclick="columnShow(this.checked, 5);"><?php echo lang('Default values'); ?></label>
|
<script type="text/javascript">
|
||||||
<?php if (!$_POST["defaults"]) { ?><script type="text/javascript">editingHideDefaults()</script><?php } ?>
|
document.write('<label><input type="checkbox" onclick="columnShow(this.checked, 5);"><?php echo lang('Default values'); ?><\/label>');
|
||||||
<?php echo (support("comment") ? checkbox("comments", 1, $comments, lang('Comment'), "columnShow(this.checked, 6); toggle('Comment'); if (this.checked) this.form['Comment'].focus();", true) . ' <input name="Comment" id="Comment" value="' . h($row["Comment"]) . '" maxlength="' . ($connection->server_info >= 5.5 ? 2048 : 60) . '"' . ($comments ? '' : ' class="hidden"') . '>' : ''); ?>
|
</script>
|
||||||
|
<?php echo (support("comment") ? checkbox("", "", $comments, lang('Comment'), "columnShow(this.checked, 6); toggle('Comment');") . ' <input id="Comment" name="Comment" value="' . h($row["Comment"]) . '" maxlength="60"' . ($comments ? '' : ' class="hidden"') . '>' : ''); ?>
|
||||||
<p>
|
<p>
|
||||||
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||||
<?php if ($_GET["create"] != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo confirm(); ?>><?php } ?>
|
<?php if (strlen($_GET["create"])) { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo $confirm; ?>><?php } ?>
|
||||||
<?php
|
<?php
|
||||||
if (support("partitioning")) {
|
if (support("partitioning")) {
|
||||||
$partition_table = ereg('RANGE|LIST', $row["partition_by"]);
|
$partition_table = ereg('RANGE|LIST', $row["partition_by"]);
|
||||||
@@ -184,20 +175,17 @@ if (support("partitioning")) {
|
|||||||
<p>
|
<p>
|
||||||
<?php echo html_select("partition_by", array(-1 => "") + $partition_by, $row["partition_by"], "partitionByChange(this);"); ?>
|
<?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" value="<?php echo h($row["partitions"]); ?>"<?php echo ($partition_table || !$row["partition_by"] ? " class='hidden'" : ""); ?>>
|
<?php echo lang('Partitions'); ?>: <input name="partitions" size="2" 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
|
||||||
foreach ($row["partition_names"] as $key => $val) {
|
foreach ($row["partition_names"] as $key => $val) {
|
||||||
echo '<tr>';
|
echo '<tr>';
|
||||||
echo '<td><input name="partition_names[]" value="' . h($val) . '"' . ($key == count($row["partition_names"]) - 1 ? ' onchange="partitionNameChange(this);"' : '') . ' autocapitalize="off">';
|
echo '<td><input name="partition_names[]" value="' . h($val) . '"' . ($key == count($row["partition_names"]) - 1 ? ' onchange="partitionNameChange(this);"' : '') . '>';
|
||||||
echo '<td><input name="partition_values[]" value="' . h($row["partition_values"][$key]) . '">';
|
echo '<td><input name="partition_values[]" value="' . h($row["partition_values"][$key]) . '">';
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
</table>
|
</table>
|
||||||
</div></fieldset>
|
</div></fieldset>
|
||||||
<?php
|
<?php } ?>
|
||||||
}
|
|
||||||
?>
|
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -1,21 +1,20 @@
|
|||||||
<?php
|
<?php
|
||||||
if ($_POST && !$error && !isset($_POST["add_x"])) { // add is an image and PHP changes add.x to add_x
|
if ($_POST && !$error && !isset($_POST["add_x"])) { // add is an image and PHP changes add.x to add_x
|
||||||
restart_session();
|
restart_session();
|
||||||
$name = trim($_POST["name"]);
|
|
||||||
if ($_POST["drop"]) {
|
if ($_POST["drop"]) {
|
||||||
$_GET["db"] = ""; // to save in global history
|
$_GET["db"] = ""; // to save in global history
|
||||||
queries_redirect(remove_from_uri("db|database"), lang('Database has been dropped.'), drop_databases(array(DB)));
|
queries_redirect(remove_from_uri("db|database"), lang('Database has been dropped.'), drop_databases(array(DB)));
|
||||||
} elseif (DB !== $name) {
|
} elseif (DB !== $_POST["name"]) {
|
||||||
// create or rename database
|
// create or rename database
|
||||||
if (DB != "") {
|
if (DB != "") {
|
||||||
$_GET["db"] = $name;
|
$_GET["db"] = $_POST["name"];
|
||||||
queries_redirect(preg_replace('~db=[^&]*&~', '', ME) . "db=" . urlencode($name), lang('Database has been renamed.'), rename_database($name, $_POST["collation"]));
|
queries_redirect(preg_replace('~db=[^&]*&~', '', ME) . "db=" . urlencode($_POST["name"]), lang('Database has been renamed.'), rename_database($_POST["name"], $_POST["collation"]));
|
||||||
} else {
|
} else {
|
||||||
$databases = explode("\n", str_replace("\r", "", $name));
|
$dbs = explode("\n", str_replace("\r", "", $_POST["name"]));
|
||||||
$success = true;
|
$success = true;
|
||||||
$last = "";
|
$last = "";
|
||||||
foreach ($databases as $db) {
|
foreach ($dbs as $db) {
|
||||||
if (count($databases) == 1 || $db != "") { // ignore empty lines but always try to create single database
|
if (count($dbs) == 1 || $db != "") { // ignore empty lines but always try to create single database
|
||||||
if (!create_database($db, $_POST["collation"])) {
|
if (!create_database($db, $_POST["collation"])) {
|
||||||
$success = false;
|
$success = false;
|
||||||
}
|
}
|
||||||
@@ -29,7 +28,7 @@ if ($_POST && !$error && !isset($_POST["add_x"])) { // add is an image and PHP c
|
|||||||
if (!$_POST["collation"]) {
|
if (!$_POST["collation"]) {
|
||||||
redirect(substr(ME, 0, -1));
|
redirect(substr(ME, 0, -1));
|
||||||
}
|
}
|
||||||
query_redirect("ALTER DATABASE " . idf_escape($name) . (eregi('^[a-z0-9_]+$', $_POST["collation"]) ? " COLLATE $_POST[collation]" : ""), substr(ME, 0, -1), lang('Database has been altered.'));
|
query_redirect("ALTER DATABASE " . idf_escape($_POST["name"]) . " COLLATE " . $connection->quote($_POST["collation"]), substr(ME, 0, -1), lang('Database has been altered.'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,18 +57,17 @@ if ($_POST) {
|
|||||||
<p>
|
<p>
|
||||||
<?php
|
<?php
|
||||||
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 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" value="' . h($name) . '" maxlength="64">'
|
||||||
) . "\n" . ($collations ? html_select("collation", array("" => "(" . lang('collation') . ")") + $collations, $collate) : "");
|
) . "\n" . ($collations ? html_select("collation", array("" => "(" . lang('collation') . ")") + $collations, $collate) : "");
|
||||||
?>
|
?>
|
||||||
<script type='text/javascript'>document.getElementById('name').focus();</script>
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||||
<?php
|
<?php
|
||||||
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' 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; ?>">
|
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ $tables_views = array_merge((array) $_POST["tables"], (array) $_POST["views"]);
|
|||||||
if ($tables_views && !$error && !$_POST["search"]) {
|
if ($tables_views && !$error && !$_POST["search"]) {
|
||||||
$result = true;
|
$result = true;
|
||||||
$message = "";
|
$message = "";
|
||||||
if ($jush == "sql" && count($_POST["tables"]) > 1 && ($_POST["drop"] || $_POST["truncate"] || $_POST["copy"])) {
|
if ($jush == "sql" && count($_POST["tables"]) > 1 && ($_POST["drop"] || $_POST["truncate"])) {
|
||||||
queries("SET foreign_key_checks = 0"); // allows to truncate or drop several tables at once
|
queries("SET foreign_key_checks = 0"); // allows to truncate or drop several tables at once
|
||||||
}
|
}
|
||||||
if ($_POST["truncate"]) {
|
if ($_POST["truncate"]) {
|
||||||
@@ -15,9 +15,6 @@ if ($tables_views && !$error && !$_POST["search"]) {
|
|||||||
} elseif ($_POST["move"]) {
|
} elseif ($_POST["move"]) {
|
||||||
$result = move_tables((array) $_POST["tables"], (array) $_POST["views"], $_POST["target"]);
|
$result = move_tables((array) $_POST["tables"], (array) $_POST["views"], $_POST["target"]);
|
||||||
$message = lang('Tables have been moved.');
|
$message = lang('Tables have been moved.');
|
||||||
} elseif ($_POST["copy"]) {
|
|
||||||
$result = copy_tables((array) $_POST["tables"], (array) $_POST["views"], $_POST["target"]);
|
|
||||||
$message = lang('Tables have been copied.');
|
|
||||||
} elseif ($_POST["drop"]) {
|
} elseif ($_POST["drop"]) {
|
||||||
if ($_POST["views"]) {
|
if ($_POST["views"]) {
|
||||||
$result = drop_views($_POST["views"]);
|
$result = drop_views($_POST["views"]);
|
||||||
@@ -26,15 +23,7 @@ if ($tables_views && !$error && !$_POST["search"]) {
|
|||||||
$result = drop_tables($_POST["tables"]);
|
$result = drop_tables($_POST["tables"]);
|
||||||
}
|
}
|
||||||
$message = lang('Tables have been dropped.');
|
$message = lang('Tables have been dropped.');
|
||||||
} elseif ($jush != "sql") {
|
} elseif ($_POST["tables"] && ($result = queries(($_POST["optimize"] ? "OPTIMIZE" : ($_POST["check"] ? "CHECK" : ($_POST["repair"] ? "REPAIR" : "ANALYZE"))) . " TABLE " . implode(", ", array_map('idf_escape', $_POST["tables"]))))) {
|
||||||
$result = ($jush == "sqlite"
|
|
||||||
? queries("VACUUM")
|
|
||||||
: apply_queries("VACUUM" . ($_POST["optimize"] ? "" : " ANALYZE"), $_POST["tables"])
|
|
||||||
);
|
|
||||||
$message = lang('Tables have been optimized.');
|
|
||||||
} elseif (!$_POST["tables"]) {
|
|
||||||
$message = lang('No tables.');
|
|
||||||
} elseif ($result = queries(($_POST["optimize"] ? "OPTIMIZE" : ($_POST["check"] ? "CHECK" : ($_POST["repair"] ? "REPAIR" : "ANALYZE"))) . " TABLE " . implode(", ", array_map('idf_escape', $_POST["tables"])))) {
|
|
||||||
while ($row = $result->fetch_assoc()) {
|
while ($row = $result->fetch_assoc()) {
|
||||||
$message .= "<b>" . h($row["Table"]) . "</b>: " . h($row["Msg_text"]) . "<br>";
|
$message .= "<b>" . h($row["Table"]) . "</b>: " . h($row["Msg_text"]) . "<br>";
|
||||||
}
|
}
|
||||||
@@ -43,158 +32,143 @@ if ($tables_views && !$error && !$_POST["search"]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
page_header(($_GET["ns"] == "" ? lang('Database') . ": " . h(DB) : lang('Schema') . ": " . h($_GET["ns"])), $error, true);
|
page_header(($_GET["ns"] == "" ? lang('Database') . ": " . h(DB) : lang('Schema') . ": " . h($_GET["ns"])), $error, true);
|
||||||
|
echo '<p>' . ($_GET["ns"] == "" ? '<a href="' . h(ME) . 'database=">' . lang('Alter database') . "</a>\n" : "");
|
||||||
if ($adminer->homepage()) {
|
echo (support("scheme") ? "<a href='" . h(ME) . "scheme='>" . ($_GET["ns"] != "" ? lang('Alter schema') : lang('Create schema')) . "</a>\n" : "");
|
||||||
if ($_GET["ns"] !== "") {
|
if ($_GET["ns"] !== "") {
|
||||||
echo "<h3>" . lang('Tables and views') . "</h3>\n";
|
echo '<a href="' . h(ME) . 'schema=">' . lang('Database schema') . "</a>\n";
|
||||||
$tables_list = tables_list();
|
$sums = array("Data_length" => 0, "Index_length" => 0, "Data_free" => 0);
|
||||||
if (!$tables_list) {
|
|
||||||
echo "<p class='message'>" . lang('No tables.') . "\n";
|
echo "<h3>" . lang('Tables and views') . "</h3>\n";
|
||||||
} else {
|
$tables_list = tables_list();
|
||||||
echo "<form action='' method='post'>\n";
|
if (!$tables_list) {
|
||||||
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 "<p class='message'>" . lang('No tables.') . "\n";
|
||||||
if ($_POST["search"] && $_POST["query"] != "") {
|
} else {
|
||||||
search_tables();
|
echo "<form action='' method='post'>\n";
|
||||||
}
|
echo "<p>" . lang('Search data in tables') . ": <input name='query' value='" . h($_POST["query"]) . "'> <input type='submit' name='search' value='" . lang('Search') . "'>\n";
|
||||||
echo "<table cellspacing='0' class='nowrap checkable' onclick='tableClick(event);' ondblclick='tableClick(event, true);'>\n";
|
if ($_POST["search"] && $_POST["query"] != "") {
|
||||||
echo '<thead><tr class="wrap"><td><input id="check-all" type="checkbox" onclick="formCheck(this, /^(tables|views)\[/);">';
|
$_GET["where"][0]["op"] = "LIKE %%";
|
||||||
echo '<th>' . lang('Table');
|
$_GET["where"][0]["val"] = $_POST["query"];
|
||||||
echo '<td>' . lang('Engine');
|
search_tables();
|
||||||
echo '<td>' . lang('Collation');
|
}
|
||||||
echo '<td>' . lang('Data Length');
|
echo "<table cellspacing='0' class='nowrap' onclick='tableClick(event);'>\n";
|
||||||
echo '<td>' . lang('Index Length');
|
echo '<thead><tr class="wrap"><td><input id="check-all" type="checkbox" onclick="formCheck(this, /^(tables|views)\[/);"><th>' . lang('Table') . '<td>' . lang('Engine') . '<td>' . lang('Collation') . '<td>' . lang('Data Length') . '<td>' . lang('Index Length') . '<td>' . lang('Data Free') . '<td>' . lang('Auto Increment') . '<td>' . lang('Rows') . (support("comment") ? '<td>' . lang('Comment') : '') . "</thead>\n";
|
||||||
echo '<td>' . lang('Data Free');
|
foreach ($tables_list as $name => $type) {
|
||||||
echo '<td>' . lang('Auto Increment');
|
$view = (isset($type) && !eregi("table", $type));
|
||||||
echo '<td>' . lang('Rows');
|
echo '<tr' . odd() . '><td>' . checkbox(($view ? "views[]" : "tables[]"), $name, in_array($name, $tables_views, true), "", "formUncheck('check-all');");
|
||||||
echo (support("comment") ? '<td>' . lang('Comment') : '');
|
echo '<th><a href="' . h(ME) . 'table=' . urlencode($name) . '">' . h($name) . '</a>';
|
||||||
echo "</thead>\n";
|
if ($view) {
|
||||||
foreach ($tables_list as $name => $type) {
|
echo '<td colspan="6"><a href="' . h(ME) . "view=" . urlencode($name) . '">' . lang('View') . '</a>';
|
||||||
$view = ($type !== null && !eregi("table", $type));
|
echo '<td align="right"><a href="' . h(ME) . "select=" . urlencode($name) . '">?</a>';
|
||||||
echo '<tr' . odd() . '><td>' . checkbox(($view ? "views[]" : "tables[]"), $name, in_array($name, $tables_views, true), "", "formUncheck('check-all');");
|
} else {
|
||||||
echo '<th><a href="' . h(ME) . 'table=' . urlencode($name) . '" title="' . lang('Show structure') . '">' . h($name) . '</a>';
|
echo "<td id='Engine-" . h($name) . "'> <td id='Collation-" . h($name) . "'> ";
|
||||||
if ($view) {
|
foreach (array("Data_length" => "create", "Index_length" => "indexes", "Data_free" => "edit", "Auto_increment" => "auto_increment=1&create", "Rows" => "select") as $key => $link) {
|
||||||
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 . "$link=") . urlencode($name) . "' id='$key-" . h($name) . "'>?</a>";
|
||||||
echo '<td align="right"><a href="' . h(ME) . "select=" . urlencode($name) . '" title="' . lang('Select data') . '">?</a>';
|
|
||||||
} else {
|
|
||||||
foreach (array(
|
|
||||||
"Engine" => array(),
|
|
||||||
"Collation" => array(),
|
|
||||||
"Data_length" => array("create", lang('Alter table')),
|
|
||||||
"Index_length" => array("indexes", lang('Alter indexes')),
|
|
||||||
"Data_free" => array("edit", lang('New item')),
|
|
||||||
"Auto_increment" => array("auto_increment=1&create", lang('Alter table')),
|
|
||||||
"Rows" => array("select", lang('Select data')),
|
|
||||||
) as $key => $link) {
|
|
||||||
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 (support("comment") ? "<td id='Comment-" . h($name) . "'> " : "");
|
|
||||||
}
|
}
|
||||||
echo "<tr><td> <th>" . lang('%d in total', count($tables_list));
|
echo (support("comment") ? "<td id='Comment-" . h($name) . "'> " : "");
|
||||||
echo "<td>" . nbsp($jush == "sql" ? $connection->result("SELECT @@storage_engine") : "");
|
}
|
||||||
echo "<td>" . nbsp(db_collation(DB, collations()));
|
echo "<tr><td> <th>" . lang('%d in total', count($tables_list));
|
||||||
foreach (array("Data_length", "Index_length", "Data_free") as $key) {
|
echo "<td>" . $connection->result("SELECT @@storage_engine");
|
||||||
echo "<td align='right' id='sum-$key'> ";
|
echo "<td>" . db_collation(DB, collations());
|
||||||
|
foreach ($sums as $key => $val) {
|
||||||
|
echo "<td align='right' id='sum-$key'> ";
|
||||||
|
}
|
||||||
|
echo "</table>\n";
|
||||||
|
if (!information_schema(DB)) {
|
||||||
|
echo "<p><input type='hidden' name='token' value='$token'>" . ($jush == "sql" ? "<input type='submit' value='" . lang('Analyze') . "'> <input type='submit' name='optimize' value='" . lang('Optimize') . "'> <input type='submit' name='check' value='" . lang('Check') . "'> <input type='submit' name='repair' value='" . lang('Repair') . "'> " : "") . "<input type='submit' name='truncate' value='" . lang('Truncate') . "' onclick=\"return confirm('" . lang('Are you sure?') . " (' + formChecked(this, /tables/) + ')');\"> <input type='submit' name='drop' value='" . lang('Drop') . "' onclick=\"return confirm('" . lang('Are you sure?') . " (' + formChecked(this, /tables|views/) + ')');\">\n";
|
||||||
|
$dbs = (support("scheme") ? schemas() : get_databases());
|
||||||
|
if (count($dbs) != 1 && $jush != "sqlite") {
|
||||||
|
$db = (isset($_POST["target"]) ? $_POST["target"] : (support("scheme") ? $_GET["ns"] : DB));
|
||||||
|
echo "<p>" . lang('Move to other database') . ($dbs ? ": " . html_select("target", $dbs, $db) : ': <input name="target" value="' . h($db) . '">') . " <input type='submit' name='move' value='" . lang('Move') . "'>\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
echo "</form>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
echo '<p><a href="' . h(ME) . 'create=">' . lang('Create table') . "</a>\n";
|
||||||
|
if (support("view")) {
|
||||||
|
echo '<a href="' . h(ME) . 'view=">' . lang('Create view') . "</a>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (support("routine")) {
|
||||||
|
echo "<h3>" . lang('Routines') . "</h3>\n";
|
||||||
|
$routines = routines();
|
||||||
|
if ($routines) {
|
||||||
|
echo "<table cellspacing='0'>\n";
|
||||||
|
echo '<thead><tr><th>' . lang('Name') . '<td>' . lang('Type') . '<td>' . lang('Return type') . "<td> </thead>\n";
|
||||||
|
odd('');
|
||||||
|
foreach ($routines as $row) {
|
||||||
|
echo '<tr' . odd() . '>';
|
||||||
|
echo '<th><a href="' . h(ME) . ($row["ROUTINE_TYPE"] == "FUNCTION" ? 'callf=' : 'call=') . urlencode($row["ROUTINE_NAME"]) . '">' . h($row["ROUTINE_NAME"]) . '</a>';
|
||||||
|
echo '<td>' . h($row["ROUTINE_TYPE"]);
|
||||||
|
echo '<td>' . h($row["DTD_IDENTIFIER"]);
|
||||||
|
echo '<td><a href="' . h(ME) . ($row["ROUTINE_TYPE"] == "FUNCTION" ? 'function=' : 'procedure=') . urlencode($row["ROUTINE_NAME"]) . '">' . lang('Alter') . "</a>";
|
||||||
}
|
}
|
||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
echo "<script type='text/javascript'>tableCheck();</script>\n";
|
|
||||||
if (!information_schema(DB)) {
|
|
||||||
echo "<p>" . (ereg('^(sql|sqlite|pgsql)$', $jush)
|
|
||||||
? ($jush != "sqlite" ? "<input type='submit' value='" . lang('Analyze') . "'> " : "")
|
|
||||||
. "<input type='submit' name='optimize' value='" . lang('Optimize') . "'> " : ""
|
|
||||||
) . ($jush == "sql" ? "<input type='submit' name='check' value='" . lang('Check') . "'> <input type='submit' name='repair' value='" . lang('Repair') . "'> " : "") . "<input type='submit' name='truncate' value='" . lang('Truncate') . "'" . confirm("formChecked(this, /tables/)") . "> <input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm("formChecked(this, /tables|views/)") . ">\n";
|
|
||||||
$databases = (support("scheme") ? schemas() : $adminer->databases());
|
|
||||||
if (count($databases) != 1 && $jush != "sqlite") {
|
|
||||||
$db = (isset($_POST["target"]) ? $_POST["target"] : (support("scheme") ? $_GET["ns"] : DB));
|
|
||||||
echo "<p>" . lang('Move to other database') . ": ";
|
|
||||||
echo ($databases ? html_select("target", $databases, $db) : '<input name="target" value="' . h($db) . '" autocapitalize="off">');
|
|
||||||
echo " <input type='submit' name='move' value='" . lang('Move') . "'>";
|
|
||||||
echo (support("copy") ? " <input type='submit' name='copy' value='" . lang('Copy') . "'>" : "");
|
|
||||||
echo "\n";
|
|
||||||
}
|
|
||||||
echo "<input type='hidden' name='token' value='$token'>\n";
|
|
||||||
}
|
|
||||||
echo "</form>\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
echo '<p><a href="' . h(ME) . 'create=">' . lang('Create table') . "</a>\n";
|
|
||||||
if (support("view")) {
|
|
||||||
echo '<a href="' . h(ME) . 'view=">' . lang('Create view') . "</a>\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (support("routine")) {
|
|
||||||
echo "<h3>" . lang('Routines') . "</h3>\n";
|
|
||||||
$routines = routines();
|
|
||||||
if ($routines) {
|
|
||||||
echo "<table cellspacing='0'>\n";
|
|
||||||
echo '<thead><tr><th>' . lang('Name') . '<td>' . lang('Type') . '<td>' . lang('Return type') . "<td> </thead>\n";
|
|
||||||
odd('');
|
|
||||||
foreach ($routines as $row) {
|
|
||||||
echo '<tr' . odd() . '>';
|
|
||||||
echo '<th><a href="' . h(ME) . ($row["ROUTINE_TYPE"] != "PROCEDURE" ? 'callf=' : 'call=') . urlencode($row["ROUTINE_NAME"]) . '">' . h($row["ROUTINE_NAME"]) . '</a>';
|
|
||||||
echo '<td>' . h($row["ROUTINE_TYPE"]);
|
|
||||||
echo '<td>' . h($row["DTD_IDENTIFIER"]);
|
|
||||||
echo '<td><a href="' . h(ME) . ($row["ROUTINE_TYPE"] != "PROCEDURE" ? 'function=' : 'procedure=') . urlencode($row["ROUTINE_NAME"]) . '">' . lang('Alter') . "</a>";
|
|
||||||
}
|
|
||||||
echo "</table>\n";
|
|
||||||
}
|
|
||||||
echo '<p>' . (support("procedure") ? '<a href="' . h(ME) . 'procedure=">' . lang('Create procedure') . '</a> ' : '') . '<a href="' . h(ME) . 'function=">' . lang('Create function') . "</a>\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (support("sequence")) {
|
|
||||||
echo "<h3>" . lang('Sequences') . "</h3>\n";
|
|
||||||
$sequences = get_vals("SELECT sequence_name FROM information_schema.sequences WHERE sequence_schema = current_schema()");
|
|
||||||
if ($sequences) {
|
|
||||||
echo "<table cellspacing='0'>\n";
|
|
||||||
echo "<thead><tr><th>" . lang('Name') . "</thead>\n";
|
|
||||||
odd('');
|
|
||||||
foreach ($sequences as $val) {
|
|
||||||
echo "<tr" . odd() . "><th><a href='" . h(ME) . "sequence=" . urlencode($val) . "'>" . h($val) . "</a>\n";
|
|
||||||
}
|
|
||||||
echo "</table>\n";
|
|
||||||
}
|
|
||||||
echo "<p><a href='" . h(ME) . "sequence='>" . lang('Create sequence') . "</a>\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (support("type")) {
|
|
||||||
echo "<h3>" . lang('User types') . "</h3>\n";
|
|
||||||
$user_types = types();
|
|
||||||
if ($user_types) {
|
|
||||||
echo "<table cellspacing='0'>\n";
|
|
||||||
echo "<thead><tr><th>" . lang('Name') . "</thead>\n";
|
|
||||||
odd('');
|
|
||||||
foreach ($user_types as $val) {
|
|
||||||
echo "<tr" . odd() . "><th><a href='" . h(ME) . "type=" . urlencode($val) . "'>" . h($val) . "</a>\n";
|
|
||||||
}
|
|
||||||
echo "</table>\n";
|
|
||||||
}
|
|
||||||
echo "<p><a href='" . h(ME) . "type='>" . lang('Create type') . "</a>\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (support("event")) {
|
|
||||||
echo "<h3>" . lang('Events') . "</h3>\n";
|
|
||||||
$rows = get_rows("SHOW EVENTS");
|
|
||||||
if ($rows) {
|
|
||||||
echo "<table cellspacing='0'>\n";
|
|
||||||
echo "<thead><tr><th>" . lang('Name') . "<td>" . lang('Schedule') . "<td>" . lang('Start') . "<td>" . lang('End') . "<td></thead>\n";
|
|
||||||
foreach ($rows as $row) {
|
|
||||||
echo "<tr>";
|
|
||||||
echo "<th>" . h($row["Name"]);
|
|
||||||
echo "<td>" . ($row["Execute at"] ? lang('At given time') . "<td>" . $row["Execute at"] : lang('Every') . " " . $row["Interval value"] . " " . $row["Interval field"] . "<td>$row[Starts]");
|
|
||||||
echo "<td>$row[Ends]";
|
|
||||||
echo '<td><a href="' . h(ME) . 'event=' . urlencode($row["Name"]) . '">' . lang('Alter') . '</a>';
|
|
||||||
}
|
|
||||||
echo "</table>\n";
|
|
||||||
$event_scheduler = $connection->result("SELECT @@event_scheduler");
|
|
||||||
if ($event_scheduler && $event_scheduler != "ON") {
|
|
||||||
echo "<p class='error'><code class='jush-sqlset'>event_scheduler</code>: " . h($event_scheduler) . "\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
echo '<p><a href="' . h(ME) . 'event=">' . lang('Create event') . "</a>\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($tables_list) {
|
|
||||||
echo "<script type='text/javascript'>ajaxSetHtml('" . js_escape(ME) . "script=db');</script>\n";
|
|
||||||
}
|
}
|
||||||
|
echo '<p><a href="' . h(ME) . 'procedure=">' . lang('Create procedure') . '</a> <a href="' . h(ME) . 'function=">' . lang('Create function') . "</a>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (support("sequence")) {
|
||||||
|
echo "<h3>" . lang('Sequences') . "</h3>\n";
|
||||||
|
$sequences = get_vals("SELECT sequence_name FROM information_schema.sequences WHERE sequence_schema = current_schema()");
|
||||||
|
if ($sequences) {
|
||||||
|
echo "<table cellspacing='0'>\n";
|
||||||
|
echo "<thead><tr><th>" . lang('Name') . "</thead>\n";
|
||||||
|
odd('');
|
||||||
|
foreach ($sequences as $val) {
|
||||||
|
echo "<tr" . odd() . "><th><a href='" . h(ME) . "sequence=" . urlencode($val) . "'>" . h($val) . "</a>\n";
|
||||||
|
}
|
||||||
|
echo "</table>\n";
|
||||||
|
}
|
||||||
|
echo "<p><a href='" . h(ME) . "sequence='>" . lang('Create sequence') . "</a>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (support("event")) {
|
||||||
|
echo "<h3>" . lang('Events') . "</h3>\n";
|
||||||
|
$result = $connection->query("SHOW EVENTS");
|
||||||
|
if ($result && $result->num_rows) {
|
||||||
|
echo "<table cellspacing='0'>\n";
|
||||||
|
echo "<thead><tr><th>" . lang('Name') . "<td>" . lang('Schedule') . "<td>" . lang('Start') . "<td>" . lang('End') . "</thead>\n";
|
||||||
|
while ($row = $result->fetch_assoc()) {
|
||||||
|
echo "<tr>";
|
||||||
|
echo '<th><a href="' . h(ME) . 'event=' . urlencode($row["Name"]) . '">' . h($row["Name"]) . "</a>";
|
||||||
|
echo "<td>" . ($row["Execute at"] ? lang('At given time') . "<td>" . $row["Execute at"] : lang('Every') . " " . $row["Interval value"] . " " . $row["Interval field"] . "<td>$row[Starts]");
|
||||||
|
echo "<td>$row[Ends]";
|
||||||
|
}
|
||||||
|
echo "</table>\n";
|
||||||
|
}
|
||||||
|
echo '<p><a href="' . h(ME) . 'event=">' . lang('Create event') . "</a>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
page_footer();
|
||||||
|
$table_status = table_status();
|
||||||
|
if ($table_status) {
|
||||||
|
echo "<script type='text/javascript'>\n";
|
||||||
|
foreach ($table_status as $row) {
|
||||||
|
$id = addcslashes($row["Name"], "\\'/");
|
||||||
|
echo "setHtml('Comment-$id', '" . nbsp($row["Comment"]) . "');\n";
|
||||||
|
if (!eregi("view", $row["Engine"])) {
|
||||||
|
foreach (array("Engine", "Collation") as $key) {
|
||||||
|
echo "setHtml('$key-$id', '" . nbsp($row[$key]) . "');\n";
|
||||||
|
}
|
||||||
|
foreach ($sums + array("Auto_increment" => 0, "Rows" => 0) as $key => $val) {
|
||||||
|
if ($row[$key] != "") {
|
||||||
|
$val = number_format($row[$key], 0, '.', lang(','));
|
||||||
|
echo "setHtml('$key-$id', '" . ($key == "Rows" && $row["Engine"] == "InnoDB" && $val ? "~ $val" : $val) . "');\n";
|
||||||
|
if (isset($sums[$key])) {
|
||||||
|
$sums[$key] += ($row["Engine"] != "InnoDB" || $key != "Data_free" ? $row[$key] : 0);
|
||||||
|
}
|
||||||
|
} elseif (array_key_exists($key, $row)) {
|
||||||
|
echo "setHtml('$key-$id');\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach ($sums as $key => $val) {
|
||||||
|
echo "setHtml('sum-$key', '" . number_format($val, 0, '.', lang(',')) . "');\n";
|
||||||
|
}
|
||||||
|
echo "</script>\n";
|
||||||
|
}
|
||||||
|
exit; // page_footer() already called
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
$TABLE = $_GET["download"];
|
$TABLE = $_GET["download"];
|
||||||
$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"]));
|
||||||
echo $connection->result("SELECT" . limit(idf_escape($_GET["field"]) . " FROM " . table($TABLE), " WHERE " . where($_GET, $fields), 1));
|
echo $connection->result("SELECT" . limit(idf_escape($_GET["field"]) . " FROM " . table($TABLE), " WHERE " . where($_GET), 1));
|
||||||
exit; // don't output footer
|
exit; // don't output footer
|
||||||
|
|||||||
@@ -5,26 +5,28 @@
|
|||||||
* @author Jakub Vrana
|
* @author Jakub Vrana
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$drivers["mssql"] = "MS SQL";
|
$possible_drivers[] = "SQLSRV";
|
||||||
|
$possible_drivers[] = "MSSQL";
|
||||||
|
if (extension_loaded("sqlsrv") || extension_loaded("mssql")) {
|
||||||
|
$drivers["mssql"] = "MS SQL";
|
||||||
|
}
|
||||||
|
|
||||||
if (isset($_GET["mssql"])) {
|
if (isset($_GET["mssql"])) {
|
||||||
$possible_drivers = array("SQLSRV", "MSSQL");
|
|
||||||
define("DRIVER", "mssql");
|
define("DRIVER", "mssql");
|
||||||
if (extension_loaded("sqlsrv")) {
|
if (extension_loaded("sqlsrv")) {
|
||||||
class Min_DB {
|
class Min_DB {
|
||||||
var $extension = "sqlsrv", $_link, $_result, $server_info, $affected_rows, $errno, $error;
|
var $extension = "sqlsrv", $_link, $_result, $server_info, $affected_rows, $error;
|
||||||
|
|
||||||
function _get_error() {
|
function _get_error() {
|
||||||
$this->error = "";
|
$this->error = "";
|
||||||
foreach (sqlsrv_errors() as $error) {
|
foreach (sqlsrv_errors() as $error) {
|
||||||
$this->errno = $error["code"];
|
|
||||||
$this->error .= "$error[message]\n";
|
$this->error .= "$error[message]\n";
|
||||||
}
|
}
|
||||||
$this->error = rtrim($this->error);
|
$this->error = rtrim($this->error);
|
||||||
}
|
}
|
||||||
|
|
||||||
function connect($server, $username, $password) {
|
function connect($server, $username, $password) {
|
||||||
$this->_link = @sqlsrv_connect($server, array("UID" => $username, "PWD" => $password, "CharacterSet" => "UTF-8"));
|
$this->_link = @sqlsrv_connect($server, array("UID" => $username, "PWD" => $password));
|
||||||
if ($this->_link) {
|
if ($this->_link) {
|
||||||
$info = sqlsrv_server_info($this->_link);
|
$info = sqlsrv_server_info($this->_link);
|
||||||
$this->server_info = $info['SQLServerVersion'];
|
$this->server_info = $info['SQLServerVersion'];
|
||||||
@@ -39,12 +41,11 @@ if (isset($_GET["mssql"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function select_db($database) {
|
function select_db($database) {
|
||||||
return $this->query("USE " . idf_escape($database));
|
return $this->query("USE $database");
|
||||||
}
|
}
|
||||||
|
|
||||||
function query($query, $unbuffered = false) {
|
function query($query, $unbuffered = false) {
|
||||||
$result = sqlsrv_query($this->_link, $query); //! , array(), ($unbuffered ? array() : array("Scrollable" => "keyset"))
|
$result = sqlsrv_query($this->_link, $query); //! , array(), ($unbuffered ? array() : array("Scrollable" => "keyset"))
|
||||||
$this->error = "";
|
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
$this->_get_error();
|
$this->_get_error();
|
||||||
return false;
|
return false;
|
||||||
@@ -54,7 +55,6 @@ if (isset($_GET["mssql"])) {
|
|||||||
|
|
||||||
function multi_query($query) {
|
function multi_query($query) {
|
||||||
$this->_result = sqlsrv_query($this->_link, $query);
|
$this->_result = sqlsrv_query($this->_link, $query);
|
||||||
$this->error = "";
|
|
||||||
if (!$this->_result) {
|
if (!$this->_result) {
|
||||||
$this->_get_error();
|
$this->_get_error();
|
||||||
return false;
|
return false;
|
||||||
@@ -92,7 +92,7 @@ if (isset($_GET["mssql"])) {
|
|||||||
|
|
||||||
function Min_Result($result) {
|
function Min_Result($result) {
|
||||||
$this->_result = $result;
|
$this->_result = $result;
|
||||||
// $this->num_rows = sqlsrv_num_rows($result); // available only in scrollable results
|
$this->num_rows = sqlsrv_has_rows($result); //! sqlsrv_num_rows($result)
|
||||||
}
|
}
|
||||||
|
|
||||||
function _convert($row) {
|
function _convert($row) {
|
||||||
@@ -145,7 +145,7 @@ if (isset($_GET["mssql"])) {
|
|||||||
if ($this->_link) {
|
if ($this->_link) {
|
||||||
$result = $this->query("SELECT SERVERPROPERTY('ProductLevel'), SERVERPROPERTY('Edition')");
|
$result = $this->query("SELECT SERVERPROPERTY('ProductLevel'), SERVERPROPERTY('Edition')");
|
||||||
$row = $result->fetch_row();
|
$row = $result->fetch_row();
|
||||||
$this->server_info = $this->result("sp_server_info 2", 2) . " [$row[0]] $row[1]";
|
$this->server_info = $this->result("sp_server_info 2", 2)." [$row[0]] $row[1]";
|
||||||
} else {
|
} else {
|
||||||
$this->error = mssql_get_last_message();
|
$this->error = mssql_get_last_message();
|
||||||
}
|
}
|
||||||
@@ -162,7 +162,6 @@ if (isset($_GET["mssql"])) {
|
|||||||
|
|
||||||
function query($query, $unbuffered = false) {
|
function query($query, $unbuffered = false) {
|
||||||
$result = mssql_query($query, $this->_link); //! $unbuffered
|
$result = mssql_query($query, $this->_link); //! $unbuffered
|
||||||
$this->error = "";
|
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
$this->error = mssql_get_last_message();
|
$this->error = mssql_get_last_message();
|
||||||
return false;
|
return false;
|
||||||
@@ -256,7 +255,7 @@ if (isset($_GET["mssql"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
|
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
|
||||||
return ($limit !== null ? " TOP (" . ($limit + $offset) . ")" : "") . " $query$where"; // seek later
|
return (isset($limit) ? " TOP (" . ($limit + $offset) . ")" : "") . " $query$where"; // seek later
|
||||||
}
|
}
|
||||||
|
|
||||||
function limit1($query, $where) {
|
function limit1($query, $where) {
|
||||||
@@ -265,7 +264,7 @@ if (isset($_GET["mssql"])) {
|
|||||||
|
|
||||||
function db_collation($db, $collations) {
|
function db_collation($db, $collations) {
|
||||||
global $connection;
|
global $connection;
|
||||||
return $connection->result("SELECT collation_name FROM sys.databases WHERE name = " . q($db));
|
return $connection->result("SELECT collation_name FROM sys.databases WHERE name = " . $connection->quote($db));
|
||||||
}
|
}
|
||||||
|
|
||||||
function engines() {
|
function engines() {
|
||||||
@@ -278,7 +277,8 @@ if (isset($_GET["mssql"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function tables_list() {
|
function tables_list() {
|
||||||
return get_key_vals("SELECT name, type_desc FROM sys.all_objects WHERE schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND type IN ('S', 'U', 'V') ORDER BY name");
|
global $connection;
|
||||||
|
return get_key_vals("SELECT name, type_desc FROM sys.all_objects WHERE schema_id = SCHEMA_ID(" . $connection->quote(get_schema()) . ") AND type IN ('S', 'U', 'V') ORDER BY name");
|
||||||
}
|
}
|
||||||
|
|
||||||
function count_tables($databases) {
|
function count_tables($databases) {
|
||||||
@@ -286,14 +286,16 @@ if (isset($_GET["mssql"])) {
|
|||||||
$return = array();
|
$return = array();
|
||||||
foreach ($databases as $db) {
|
foreach ($databases as $db) {
|
||||||
$connection->select_db($db);
|
$connection->select_db($db);
|
||||||
$return[$db] = $connection->result("SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES");
|
$return[$db] = $connection->result("SELECT COUNT(*) FROM information_schema.TABLES");
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function table_status($name = "") {
|
function table_status($name = "") {
|
||||||
|
global $connection;
|
||||||
$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) : "")) as $row) {
|
$result = $connection->query("SELECT name AS Name, type_desc AS Engine FROM sys.all_objects WHERE schema_id = SCHEMA_ID(" . $connection->quote(get_schema()) . ") AND type IN ('S', 'U', 'V')" . ($name != "" ? " AND name = " . $connection->quote($name) : ""));
|
||||||
|
while ($row = $result->fetch_assoc()) {
|
||||||
if ($name != "") {
|
if ($name != "") {
|
||||||
return $row;
|
return $row;
|
||||||
}
|
}
|
||||||
@@ -302,29 +304,26 @@ if (isset($_GET["mssql"])) {
|
|||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function is_view($table_status) {
|
|
||||||
return $table_status["Engine"] == "VIEW";
|
|
||||||
}
|
|
||||||
|
|
||||||
function fk_support($table_status) {
|
function fk_support($table_status) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function fields($table) {
|
function fields($table) {
|
||||||
|
global $connection;
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows("SELECT c.*, t.name type, d.definition [default]
|
$result = $connection->query("SELECT c.*, t.name type, d.definition [default]
|
||||||
FROM sys.all_columns c
|
FROM sys.all_columns c
|
||||||
JOIN sys.all_objects o ON c.object_id = o.object_id
|
JOIN sys.all_objects o ON c.object_id = o.object_id
|
||||||
JOIN sys.types t ON c.user_type_id = t.user_type_id
|
JOIN sys.types t ON c.user_type_id = t.user_type_id
|
||||||
LEFT JOIN sys.default_constraints d ON c.default_object_id = d.parent_column_id
|
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(" . $connection->quote(get_schema()) . ") AND o.type IN ('S', 'U', 'V') AND o.name = " . $connection->quote($table)
|
||||||
) as $row) {
|
);
|
||||||
$type = $row["type"];
|
while ($row = $result->fetch_assoc()) {
|
||||||
$length = (ereg("char|binary", $type) ? $row["max_length"] : ($type == "decimal" ? "$row[precision],$row[scale]" : ""));
|
$length = $row["max_length"]; //! precision, scale
|
||||||
$return[$row["name"]] = array(
|
$return[$row["name"]] = array(
|
||||||
"field" => $row["name"],
|
"field" => $row["name"],
|
||||||
"full_type" => $type . ($length ? "($length)" : ""),
|
"full_type" => $row["type"] . ($length ? "($length)" : ""),
|
||||||
"type" => $type,
|
"type" => $row["type"],
|
||||||
"length" => $length,
|
"length" => $length,
|
||||||
"default" => $row["default"],
|
"default" => $row["default"],
|
||||||
"null" => $row["is_nullable"],
|
"null" => $row["is_nullable"],
|
||||||
@@ -338,26 +337,28 @@ 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) {
|
||||||
|
global $connection;
|
||||||
|
if (!is_object($connection2)) {
|
||||||
|
$connection2 = $connection;
|
||||||
|
}
|
||||||
$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
|
$result = $connection2->query("SELECT indexes.name, key_ordinal, is_unique, is_primary_key, columns.name AS column_name
|
||||||
FROM sys.indexes i
|
FROM sys.indexes
|
||||||
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 ON indexes.object_id = index_columns.object_id AND indexes.index_id = index_columns.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 ON index_columns.object_id = columns.object_id AND index_columns.column_id = columns.column_id
|
||||||
WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
WHERE OBJECT_NAME(indexes.object_id) = " . $connection2->quote($table)
|
||||||
, $connection2) as $row) {
|
);
|
||||||
$return[$row["name"]]["type"] = ($row["is_primary_key"] ? "PRIMARY" : ($row["is_unique"] ? "UNIQUE" : "INDEX"));
|
if ($result) {
|
||||||
$return[$row["name"]]["lengths"] = array();
|
while ($row = $result->fetch_assoc()) {
|
||||||
$return[$row["name"]]["columns"][$row["key_ordinal"]] = $row["column_name"];
|
$return[$row["name"]]["type"] = ($row["is_primary_key"] ? "PRIMARY" : ($row["is_unique"] ? "UNIQUE" : "INDEX"));
|
||||||
|
$return[$row["name"]]["lengths"] = array();
|
||||||
|
$return[$row["name"]]["columns"][$row["key_ordinal"]] = $row["column_name"];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function view($name) {
|
|
||||||
global $connection;
|
|
||||||
return array("select" => preg_replace('~^(?:[^[]|\\[[^]]*])*\\s+AS\\s+~isU', '', $connection->result("SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = SCHEMA_NAME() AND TABLE_NAME = " . q($name))));
|
|
||||||
}
|
|
||||||
|
|
||||||
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) {
|
||||||
@@ -376,11 +377,12 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
|||||||
}
|
}
|
||||||
|
|
||||||
function exact_value($val) {
|
function exact_value($val) {
|
||||||
return q($val);
|
global $connection;
|
||||||
|
return $connection->quote($val);
|
||||||
}
|
}
|
||||||
|
|
||||||
function create_database($db, $collation) {
|
function create_database($db, $collation) {
|
||||||
return queries("CREATE DATABASE " . idf_escape($db) . (eregi('^[a-z0-9_]+$', $collation) ? " COLLATE $collation" : ""));
|
return queries("CREATE DATABASE " . idf_escape($db) . ($collation ? " COLLATE " . idf_escape($collation) : ""));
|
||||||
}
|
}
|
||||||
|
|
||||||
function drop_databases($databases) {
|
function drop_databases($databases) {
|
||||||
@@ -388,74 +390,15 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
|||||||
}
|
}
|
||||||
|
|
||||||
function rename_database($name, $collation) {
|
function rename_database($name, $collation) {
|
||||||
if (eregi('^[a-z0-9_]+$', $collation)) {
|
if ($collation) {
|
||||||
queries("ALTER DATABASE " . idf_escape(DB) . " COLLATE $collation");
|
queries("ALTER DATABASE " . idf_escape(DB) . " COLLATE " . idf_escape($collation));
|
||||||
}
|
}
|
||||||
queries("ALTER DATABASE " . idf_escape(DB) . " MODIFY NAME = " . idf_escape($name));
|
queries("ALTER DATABASE " . idf_escape(DB) . " MODIFY NAME = " . idf_escape($name));
|
||||||
return true; //! false negative "The database name 'test2' has been set."
|
return true; //! false negative "The database name 'test2' has been set."
|
||||||
}
|
}
|
||||||
|
|
||||||
function auto_increment() {
|
function auto_increment() {
|
||||||
return " IDENTITY" . ($_POST["Auto_increment"] != "" ? "(" . (+$_POST["Auto_increment"]) . ",1)" : "") . " PRIMARY KEY";
|
return " IDENTITY";
|
||||||
}
|
|
||||||
|
|
||||||
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
|
|
||||||
$alter = array();
|
|
||||||
foreach ($fields as $field) {
|
|
||||||
$column = idf_escape($field[0]);
|
|
||||||
$val = $field[1];
|
|
||||||
if (!$val) {
|
|
||||||
$alter["DROP"][] = " COLUMN $column";
|
|
||||||
} else {
|
|
||||||
$val[1] = preg_replace("~( COLLATE )'(\\w+)'~", "\\1\\2", $val[1]);
|
|
||||||
if ($field[0] == "") {
|
|
||||||
$alter["ADD"][] = "\n " . implode("", $val) . ($table == "" ? substr($foreign[$val[0]], 16 + strlen($val[0])) : ""); // 16 - strlen(" FOREIGN KEY ()")
|
|
||||||
} else {
|
|
||||||
unset($val[6]); //! identity can't be removed
|
|
||||||
if ($column != $val[0]) {
|
|
||||||
queries("EXEC sp_rename " . q(table($table) . ".$column") . ", " . q(idf_unescape($val[0])) . ", 'COLUMN'");
|
|
||||||
}
|
|
||||||
$alter["ALTER COLUMN " . implode("", $val)][] = "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($table == "") {
|
|
||||||
return queries("CREATE TABLE " . table($name) . " (" . implode(",", (array) $alter["ADD"]) . "\n)");
|
|
||||||
}
|
|
||||||
if ($table != $name) {
|
|
||||||
queries("EXEC sp_rename " . q(table($table)) . ", " . q($name));
|
|
||||||
}
|
|
||||||
if ($foreign) {
|
|
||||||
$alter[""] = $foreign;
|
|
||||||
}
|
|
||||||
foreach ($alter as $key => $val) {
|
|
||||||
if (!queries("ALTER TABLE " . idf_escape($name) . " $key" . implode(",", $val))) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function alter_indexes($table, $alter) {
|
|
||||||
$index = array();
|
|
||||||
$drop = array();
|
|
||||||
foreach ($alter as $val) {
|
|
||||||
if ($val[2] == "DROP") {
|
|
||||||
if ($val[0] == "PRIMARY") { //! sometimes used also for UNIQUE
|
|
||||||
$drop[] = idf_escape($val[1]);
|
|
||||||
} else {
|
|
||||||
$index[] = idf_escape($val[1]) . " ON " . table($table);
|
|
||||||
}
|
|
||||||
} elseif (!queries(($val[0] != "PRIMARY"
|
|
||||||
? "CREATE $val[0] " . ($val[0] != "INDEX" ? "INDEX " : "") . idf_escape($val[1] != "" ? $val[1] : uniqid($table . "_")) . " ON " . table($table)
|
|
||||||
: "ALTER TABLE " . table($table) . " ADD PRIMARY KEY"
|
|
||||||
) . " $val[2]")) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return (!$index || queries("DROP INDEX " . implode(", ", $index)))
|
|
||||||
&& (!$drop || queries("ALTER TABLE " . table($table) . " DROP " . implode(", ", $drop)))
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function begin() {
|
function begin() {
|
||||||
@@ -466,22 +409,6 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
|||||||
return queries("INSERT INTO " . table($table) . ($set ? " (" . implode(", ", array_keys($set)) . ")\nVALUES (" . implode(", ", $set) . ")" : "DEFAULT VALUES"));
|
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
|
||||||
@@ -494,12 +421,11 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
|||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function found_rows($table_status, $where) {
|
|
||||||
}
|
|
||||||
|
|
||||||
function foreign_keys($table) {
|
function foreign_keys($table) {
|
||||||
|
global $connection;
|
||||||
|
$result = $connection->query("EXEC sp_fkeys @fktable_name = " . $connection->quote($table));
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows("EXEC sp_fkeys @fktable_name = " . q($table)) as $row) {
|
while ($row = $result->fetch_assoc()) {
|
||||||
$foreign_key = &$return[$row["FK_NAME"]];
|
$foreign_key = &$return[$row["FK_NAME"]];
|
||||||
$foreign_key["table"] = $row["PKTABLE_NAME"];
|
$foreign_key["table"] = $row["PKTABLE_NAME"];
|
||||||
$foreign_key["source"][] = $row["FKCOLUMN_NAME"];
|
$foreign_key["source"][] = $row["FKCOLUMN_NAME"];
|
||||||
@@ -525,33 +451,31 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
|||||||
}
|
}
|
||||||
|
|
||||||
function trigger($name) {
|
function trigger($name) {
|
||||||
if ($name == "") {
|
global $connection;
|
||||||
return array();
|
$result = $connection->query("SELECT s.name [Trigger],
|
||||||
}
|
|
||||||
$rows = get_rows("SELECT s.name [Trigger],
|
|
||||||
CASE WHEN OBJECTPROPERTY(s.id, 'ExecIsInsertTrigger') = 1 THEN 'INSERT' WHEN OBJECTPROPERTY(s.id, 'ExecIsUpdateTrigger') = 1 THEN 'UPDATE' WHEN OBJECTPROPERTY(s.id, 'ExecIsDeleteTrigger') = 1 THEN 'DELETE' END [Event],
|
CASE WHEN OBJECTPROPERTY(s.id, 'ExecIsInsertTrigger') = 1 THEN 'INSERT' WHEN OBJECTPROPERTY(s.id, 'ExecIsUpdateTrigger') = 1 THEN 'UPDATE' WHEN OBJECTPROPERTY(s.id, 'ExecIsDeleteTrigger') = 1 THEN 'DELETE' END [Event],
|
||||||
CASE WHEN OBJECTPROPERTY(s.id, 'ExecIsInsteadOfTrigger') = 1 THEN 'INSTEAD OF' ELSE 'AFTER' END [Timing],
|
CASE WHEN OBJECTPROPERTY(s.id, 'ExecIsInsteadOfTrigger') = 1 THEN 'INSTEAD OF' ELSE 'AFTER' END [Timing],
|
||||||
c.text
|
c.text
|
||||||
FROM sysobjects s
|
FROM sysobjects s
|
||||||
JOIN syscomments c ON s.id = c.id
|
JOIN syscomments c ON s.id = c.id
|
||||||
WHERE s.xtype = 'TR' AND s.name = " . q($name)
|
WHERE s.xtype = 'TR' AND s.name = " . $connection->quote($name)
|
||||||
); // triggers are not schema-scoped
|
); // triggers are not schema-scoped
|
||||||
$return = reset($rows);
|
$row = $result->fetch_assoc();
|
||||||
if ($return) {
|
$row["Statement"] = preg_replace('~^.+\\s+AS\\s+~isU', '', $row["text"]); //! identifiers, comments
|
||||||
$return["Statement"] = preg_replace('~^.+\\s+AS\\s+~isU', '', $return["text"]); //! identifiers, comments
|
return $row;
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function triggers($table) {
|
function triggers($table) {
|
||||||
|
global $connection;
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows("SELECT sys1.name,
|
$result = $connection->query("SELECT sys1.name,
|
||||||
CASE WHEN OBJECTPROPERTY(sys1.id, 'ExecIsInsertTrigger') = 1 THEN 'INSERT' WHEN OBJECTPROPERTY(sys1.id, 'ExecIsUpdateTrigger') = 1 THEN 'UPDATE' WHEN OBJECTPROPERTY(sys1.id, 'ExecIsDeleteTrigger') = 1 THEN 'DELETE' END [Event],
|
CASE WHEN OBJECTPROPERTY(sys1.id, 'ExecIsInsertTrigger') = 1 THEN 'INSERT' WHEN OBJECTPROPERTY(sys1.id, 'ExecIsUpdateTrigger') = 1 THEN 'UPDATE' WHEN OBJECTPROPERTY(sys1.id, 'ExecIsDeleteTrigger') = 1 THEN 'DELETE' END [Event],
|
||||||
CASE WHEN OBJECTPROPERTY(sys1.id, 'ExecIsInsteadOfTrigger') = 1 THEN 'INSTEAD OF' ELSE 'AFTER' END [Timing]
|
CASE WHEN OBJECTPROPERTY(sys1.id, 'ExecIsInsteadOfTrigger') = 1 THEN 'INSTEAD OF' ELSE 'AFTER' END [Timing]
|
||||||
FROM sysobjects sys1
|
FROM sysobjects sys1
|
||||||
JOIN sysobjects sys2 ON sys1.parent_obj = sys2.id
|
JOIN sysobjects sys2 ON sys1.parent_obj = sys2.id
|
||||||
WHERE sys1.xtype = 'TR' AND sys2.name = " . q($table)
|
WHERE sys1.xtype = 'TR' AND sys2.name = " . $connection->quote($table)
|
||||||
) as $row) { // triggers are not schema-scoped
|
); // triggers are not schema-scoped
|
||||||
|
while ($row = $result->fetch_assoc()) {
|
||||||
$return[$row["name"]] = array($row["Timing"], $row["Event"]);
|
$return[$row["name"]] = array($row["Timing"], $row["Event"]);
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
@@ -592,15 +516,8 @@ WHERE sys1.xtype = 'TR' AND sys2.name = " . q($table)
|
|||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
|
||||||
function convert_field($field) {
|
|
||||||
}
|
|
||||||
|
|
||||||
function unconvert_field($field, $return) {
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function support($feature) {
|
function support($feature) {
|
||||||
return ereg('^(scheme|trigger|view|drop_col)$', $feature); //! routine|
|
return ereg('^(scheme|trigger|drop_col)$', $feature); //! view|routine|
|
||||||
}
|
}
|
||||||
|
|
||||||
$jush = "mssql";
|
$jush = "mssql";
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
<?php
|
<?php
|
||||||
$drivers = array("server" => "MySQL") + $drivers;
|
$possible_drivers[] = "MySQLi";
|
||||||
|
$possible_drivers[] = "MySQL";
|
||||||
|
$possible_drivers[] = "PDO_MySQL";
|
||||||
|
if (extension_loaded("mysqli") || extension_loaded("mysql") || extension_loaded("pdo_mysql")) {
|
||||||
|
$drivers = array("server" => "MySQL") + $drivers;
|
||||||
|
}
|
||||||
|
|
||||||
if (!defined("DRIVER")) {
|
if (!defined("DRIVER")) {
|
||||||
$possible_drivers = array("MySQLi", "MySQL", "PDO_MySQL");
|
|
||||||
define("DRIVER", "server"); // server - backwards compatibility
|
define("DRIVER", "server"); // server - backwards compatibility
|
||||||
// MySQLi supports everything, MySQL doesn't support multiple result sets, PDO_MySQL doesn't support orgtable
|
// MySQLi supports everything, MySQL doesn't support multiple result sets, PDO_MySQL doesn't support orgtable
|
||||||
if (extension_loaded("mysqli")) {
|
if (extension_loaded("mysqli")) {
|
||||||
@@ -14,24 +18,15 @@ if (!defined("DRIVER")) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function connect($server, $username, $password) {
|
function connect($server, $username, $password) {
|
||||||
mysqli_report(MYSQLI_REPORT_OFF); // stays between requests, not required since PHP 5.3.4
|
|
||||||
list($host, $port) = explode(":", $server, 2); // part after : is used for port or socket
|
list($host, $port) = explode(":", $server, 2); // part after : is used for port or socket
|
||||||
$return = @$this->real_connect(
|
return @$this->real_connect(
|
||||||
($server != "" ? $host : ini_get("mysqli.default_host")),
|
($server != "" ? $host : ini_get("mysqli.default_host")),
|
||||||
($server . $username != "" ? $username : ini_get("mysqli.default_user")),
|
("$server$username" != "" ? $username : ini_get("mysqli.default_user")),
|
||||||
($server . $username . $password != "" ? $password : ini_get("mysqli.default_pw")),
|
("$server$username$password" != "" ? $password : ini_get("mysqli.default_pw")),
|
||||||
null,
|
null,
|
||||||
(is_numeric($port) ? $port : ini_get("mysqli.default_port")),
|
(is_numeric($port) ? $port : ini_get("mysqli.default_port")),
|
||||||
(!is_numeric($port) ? $port : null)
|
(!is_numeric($port) ? $port : null)
|
||||||
);
|
);
|
||||||
if ($return) {
|
|
||||||
if (method_exists($this, 'set_charset')) {
|
|
||||||
$this->set_charset("utf8");
|
|
||||||
} else {
|
|
||||||
$this->query("SET NAMES utf8");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function result($query, $field = 0) {
|
function result($query, $field = 0) {
|
||||||
@@ -48,13 +43,12 @@ if (!defined("DRIVER")) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} elseif (extension_loaded("mysql") && !(ini_get("sql.safe_mode") && extension_loaded("pdo_mysql"))) {
|
} elseif (extension_loaded("mysql")) {
|
||||||
class Min_DB {
|
class Min_DB {
|
||||||
var
|
var
|
||||||
$extension = "MySQL", ///< @var string extension name
|
$extension = "MySQL", ///< @var string extension name
|
||||||
$server_info, ///< @var string server version
|
$server_info, ///< @var string server version
|
||||||
$affected_rows, ///< @var int number of affected rows
|
$affected_rows, ///< @var int number of affected rows
|
||||||
$errno, ///< @var int last error code
|
|
||||||
$error, ///< @var string last error message
|
$error, ///< @var string last error message
|
||||||
$_link, $_result ///< @access private
|
$_link, $_result ///< @access private
|
||||||
;
|
;
|
||||||
@@ -75,11 +69,6 @@ if (!defined("DRIVER")) {
|
|||||||
);
|
);
|
||||||
if ($this->_link) {
|
if ($this->_link) {
|
||||||
$this->server_info = mysql_get_server_info($this->_link);
|
$this->server_info = mysql_get_server_info($this->_link);
|
||||||
if (function_exists('mysql_set_charset')) {
|
|
||||||
mysql_set_charset("utf8", $this->_link);
|
|
||||||
} else {
|
|
||||||
$this->query("SET NAMES utf8");
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
$this->error = mysql_error();
|
$this->error = mysql_error();
|
||||||
}
|
}
|
||||||
@@ -109,9 +98,7 @@ if (!defined("DRIVER")) {
|
|||||||
*/
|
*/
|
||||||
function query($query, $unbuffered = false) {
|
function query($query, $unbuffered = false) {
|
||||||
$result = @($unbuffered ? mysql_unbuffered_query($query, $this->_link) : mysql_query($query, $this->_link)); // @ - mute mysql.trace_mode
|
$result = @($unbuffered ? mysql_unbuffered_query($query, $this->_link) : mysql_query($query, $this->_link)); // @ - mute mysql.trace_mode
|
||||||
$this->error = "";
|
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
$this->errno = mysql_errno($this->_link);
|
|
||||||
$this->error = mysql_error($this->_link);
|
$this->error = mysql_error($this->_link);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -153,7 +140,7 @@ if (!defined("DRIVER")) {
|
|||||||
*/
|
*/
|
||||||
function result($query, $field = 0) {
|
function result($query, $field = 0) {
|
||||||
$result = $this->query($query);
|
$result = $this->query($query);
|
||||||
if (!$result || !$result->num_rows) {
|
if (!$result) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return mysql_result($result->_result, 0, $field);
|
return mysql_result($result->_result, 0, $field);
|
||||||
@@ -163,7 +150,7 @@ if (!defined("DRIVER")) {
|
|||||||
class Min_Result {
|
class Min_Result {
|
||||||
var
|
var
|
||||||
$num_rows, ///< @var int number of rows in the result
|
$num_rows, ///< @var int number of rows in the result
|
||||||
$_result, $_offset = 0 ///< @access private
|
$_result ///< @access private
|
||||||
;
|
;
|
||||||
|
|
||||||
/** Constructor
|
/** Constructor
|
||||||
@@ -192,7 +179,7 @@ if (!defined("DRIVER")) {
|
|||||||
* @return object properties: name, type, orgtable, orgname, charsetnr
|
* @return object properties: name, type, orgtable, orgname, charsetnr
|
||||||
*/
|
*/
|
||||||
function fetch_field() {
|
function fetch_field() {
|
||||||
$return = mysql_fetch_field($this->_result, $this->_offset++); // offset required under certain conditions
|
$return = mysql_fetch_field($this->_result);
|
||||||
$return->orgtable = $return->table;
|
$return->orgtable = $return->table;
|
||||||
$return->orgname = $return->name;
|
$return->orgname = $return->name;
|
||||||
$return->charsetnr = ($return->blob ? 63 : 0);
|
$return->charsetnr = ($return->blob ? 63 : 0);
|
||||||
@@ -211,8 +198,7 @@ if (!defined("DRIVER")) {
|
|||||||
var $extension = "PDO_MySQL";
|
var $extension = "PDO_MySQL";
|
||||||
|
|
||||||
function connect($server, $username, $password) {
|
function connect($server, $username, $password) {
|
||||||
$this->dsn("mysql:host=" . str_replace(":", ";unix_socket=", preg_replace('~:(\\d)~', ';port=\\1', $server)), $username, $password);
|
$this->dsn("mysql:host=" . str_replace(":", ";unix_socket=", preg_replace('~:([0-9])~', ';port=\\1', $server)), $username, $password);
|
||||||
$this->query("SET NAMES utf8"); // charset in DSN is ignored
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -253,33 +239,27 @@ if (!defined("DRIVER")) {
|
|||||||
$connection = new Min_DB;
|
$connection = new Min_DB;
|
||||||
$credentials = $adminer->credentials();
|
$credentials = $adminer->credentials();
|
||||||
if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) {
|
if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) {
|
||||||
$connection->query("SET sql_quote_show_create = 1, autocommit = 1");
|
$connection->query("SET SQL_QUOTE_SHOW_CREATE=1");
|
||||||
|
$connection->query("SET NAMES utf8");
|
||||||
return $connection;
|
return $connection;
|
||||||
}
|
}
|
||||||
$return = $connection->error;
|
return $connection->error;
|
||||||
if (function_exists('iconv') && !is_utf8($return) && strlen($s = iconv("windows-1250", "utf-8", $return)) > strlen($return)) { // windows-1250 - most common Windows encoding
|
|
||||||
$return = $s;
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get cached list of databases
|
/** Get cached list of databases
|
||||||
* @param bool
|
* @param bool
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
function get_databases($flush) {
|
function get_databases($flush = true) {
|
||||||
global $connection;
|
|
||||||
// SHOW DATABASES can take a very long time so it is cached
|
// SHOW DATABASES can take a very long time so it is cached
|
||||||
$return = get_session("dbs");
|
$return = &get_session("databases");
|
||||||
if ($return === null) {
|
if (!isset($return)) {
|
||||||
$query = ($connection->server_info >= 5
|
if ($flush) {
|
||||||
? "SELECT SCHEMA_NAME FROM information_schema.SCHEMATA"
|
restart_session();
|
||||||
: "SHOW DATABASES"
|
ob_flush();
|
||||||
); // SHOW DATABASES can be disabled by skip_show_database
|
flush();
|
||||||
$return = ($flush ? slow_query($query) : get_vals($query));
|
}
|
||||||
restart_session();
|
$return = get_vals("SHOW DATABASES");
|
||||||
set_session("dbs", $return);
|
|
||||||
stop_session();
|
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -293,12 +273,11 @@ if (!defined("DRIVER")) {
|
|||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
|
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
|
||||||
return " $query$where" . ($limit !== null ? $separator . "LIMIT $limit" . ($offset ? " OFFSET $offset" : "") : "");
|
return " $query$where" . (isset($limit) ? $separator . "LIMIT $limit" . ($offset ? " OFFSET $offset" : "") : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Formulate SQL modification query with limit 1
|
/** Formulate SQL modification query with limit 1
|
||||||
* @param string everything after UPDATE or DELETE
|
* @param string everything after UPDATE or DELETE
|
||||||
* @param string
|
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function limit1($query, $where) {
|
function limit1($query, $where) {
|
||||||
@@ -318,7 +297,7 @@ if (!defined("DRIVER")) {
|
|||||||
$return = $match[1];
|
$return = $match[1];
|
||||||
} elseif (preg_match('~ CHARACTER SET ([^ ]+)~', $create, $match)) {
|
} elseif (preg_match('~ CHARACTER SET ([^ ]+)~', $create, $match)) {
|
||||||
// default collation
|
// default collation
|
||||||
$return = $collations[$match[1]][-1];
|
$return = $collations[$match[1]][0];
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -327,8 +306,10 @@ if (!defined("DRIVER")) {
|
|||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
function engines() {
|
function engines() {
|
||||||
|
global $connection;
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows("SHOW ENGINES") as $row) {
|
$result = $connection->query("SHOW ENGINES");
|
||||||
|
while ($row = $result->fetch_assoc()) {
|
||||||
if (ereg("YES|DEFAULT", $row["Support"])) {
|
if (ereg("YES|DEFAULT", $row["Support"])) {
|
||||||
$return[] = $row["Engine"];
|
$return[] = $row["Engine"];
|
||||||
}
|
}
|
||||||
@@ -345,7 +326,7 @@ if (!defined("DRIVER")) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Get tables list
|
/** Get tables list
|
||||||
* @return array array($name => $type)
|
* @return array
|
||||||
*/
|
*/
|
||||||
function tables_list() {
|
function tables_list() {
|
||||||
global $connection;
|
global $connection;
|
||||||
@@ -366,16 +347,19 @@ if (!defined("DRIVER")) {
|
|||||||
|
|
||||||
/** Get table status
|
/** Get table status
|
||||||
* @param string
|
* @param string
|
||||||
* @return array array($name => array("Name" => , "Engine" => , "Comment" => , "Oid" => , "Rows" => , "Collation" => , "Auto_increment" => , "Data_length" => , "Index_length" => , "Data_free" => )) or only inner array with $name
|
* @return array
|
||||||
*/
|
*/
|
||||||
function table_status($name = "") {
|
function table_status($name = "") {
|
||||||
|
global $connection;
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows("SHOW TABLE STATUS" . ($name != "" ? " LIKE " . q(addcslashes($name, "%_")) : "")) as $row) {
|
$result = $connection->query("SHOW TABLE STATUS" . ($name != "" ? " LIKE " . $connection->quote(addcslashes($name, "%_")) : ""));
|
||||||
|
while ($row = $result->fetch_assoc()) {
|
||||||
if ($row["Engine"] == "InnoDB") {
|
if ($row["Engine"] == "InnoDB") {
|
||||||
// ignore internal comment, unnecessary since MySQL 5.1.21
|
// ignore internal comment, unnecessary since MySQL 5.1.21
|
||||||
$row["Comment"] = preg_replace('~(?:(.+); )?InnoDB free: .*~', '\\1', $row["Comment"]);
|
$row["Comment"] = preg_replace('~(?:(.+); )?InnoDB free: .*~', '\\1', $row["Comment"]);
|
||||||
}
|
}
|
||||||
if (!isset($row["Rows"])) {
|
if (!isset($row["Rows"])) {
|
||||||
|
$row["Engine"] = "VIEW";
|
||||||
$row["Comment"] = "";
|
$row["Comment"] = "";
|
||||||
}
|
}
|
||||||
if ($name != "") {
|
if ($name != "") {
|
||||||
@@ -386,20 +370,12 @@ if (!defined("DRIVER")) {
|
|||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Find out whether the identifier is view
|
|
||||||
* @param array
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
function is_view($table_status) {
|
|
||||||
return !isset($table_status["Rows"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Check if table supports foreign keys
|
/** Check if table supports foreign keys
|
||||||
* @param array result of table_status
|
* @param array result of table_status
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function fk_support($table_status) {
|
function fk_support($table_status) {
|
||||||
return eregi("InnoDB|IBMDB2I", $table_status["Engine"]);
|
return ($table_status["Engine"] == "InnoDB");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get information about fields
|
/** Get information about fields
|
||||||
@@ -407,24 +383,28 @@ if (!defined("DRIVER")) {
|
|||||||
* @return array array($name => array("field" => , "full_type" => , "type" => , "length" => , "unsigned" => , "default" => , "null" => , "auto_increment" => , "on_update" => , "collation" => , "privileges" => , "comment" => , "primary" => ))
|
* @return array array($name => array("field" => , "full_type" => , "type" => , "length" => , "unsigned" => , "default" => , "null" => , "auto_increment" => , "on_update" => , "collation" => , "privileges" => , "comment" => , "primary" => ))
|
||||||
*/
|
*/
|
||||||
function fields($table) {
|
function fields($table) {
|
||||||
|
global $connection;
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows("SHOW FULL COLUMNS FROM " . table($table)) as $row) {
|
$result = $connection->query("SHOW FULL COLUMNS FROM " . table($table));
|
||||||
preg_match('~^([^( ]+)(?:\\((.+)\\))?( unsigned)?( zerofill)?$~', $row["Type"], $match);
|
if ($result) {
|
||||||
$return[$row["Field"]] = array(
|
while ($row = $result->fetch_assoc()) {
|
||||||
"field" => $row["Field"],
|
preg_match('~^([^( ]+)(?:\\((.+)\\))?( unsigned)?( zerofill)?$~', $row["Type"], $match);
|
||||||
"full_type" => $row["Type"],
|
$return[$row["Field"]] = array(
|
||||||
"type" => $match[1],
|
"field" => $row["Field"],
|
||||||
"length" => $match[2],
|
"full_type" => $row["Type"],
|
||||||
"unsigned" => ltrim($match[3] . $match[4]),
|
"type" => $match[1],
|
||||||
"default" => ($row["Default"] != "" || ereg("char|set", $match[1]) ? $row["Default"] : null),
|
"length" => $match[2],
|
||||||
"null" => ($row["Null"] == "YES"),
|
"unsigned" => ltrim($match[3] . $match[4]),
|
||||||
"auto_increment" => ($row["Extra"] == "auto_increment"),
|
"default" => ($row["Default"] != "" || ereg("char", $match[1]) ? $row["Default"] : null),
|
||||||
"on_update" => (eregi('^on update (.+)', $row["Extra"], $match) ? $match[1] : ""), //! available since MySQL 5.1.23
|
"null" => ($row["Null"] == "YES"),
|
||||||
"collation" => $row["Collation"],
|
"auto_increment" => ($row["Extra"] == "auto_increment"),
|
||||||
"privileges" => array_flip(explode(",", $row["Privileges"])),
|
"on_update" => (eregi('^on update (.+)', $row["Extra"], $match) ? $match[1] : ""), //! available since MySQL 5.1.23
|
||||||
"comment" => $row["Comment"],
|
"collation" => $row["Collation"],
|
||||||
"primary" => ($row["Key"] == "PRI"),
|
"privileges" => array_flip(explode(",", $row["Privileges"])),
|
||||||
);
|
"comment" => $row["Comment"],
|
||||||
|
"primary" => ($row["Key"] == "PRI"),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -435,18 +415,25 @@ if (!defined("DRIVER")) {
|
|||||||
* @return array array($key_name => array("type" => , "columns" => array(), "lengths" => array()))
|
* @return array array($key_name => array("type" => , "columns" => array(), "lengths" => array()))
|
||||||
*/
|
*/
|
||||||
function indexes($table, $connection2 = null) {
|
function indexes($table, $connection2 = null) {
|
||||||
|
global $connection;
|
||||||
|
if (!is_object($connection2)) { // use the main connection if the separate connection is unavailable
|
||||||
|
$connection2 = $connection;
|
||||||
|
}
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows("SHOW INDEX FROM " . table($table), $connection2) as $row) {
|
$result = $connection2->query("SHOW INDEX FROM " . table($table));
|
||||||
$return[$row["Key_name"]]["type"] = ($row["Key_name"] == "PRIMARY" ? "PRIMARY" : ($row["Index_type"] == "FULLTEXT" ? "FULLTEXT" : ($row["Non_unique"] ? "INDEX" : "UNIQUE")));
|
if ($result) {
|
||||||
$return[$row["Key_name"]]["columns"][] = $row["Column_name"];
|
while ($row = $result->fetch_assoc()) {
|
||||||
$return[$row["Key_name"]]["lengths"][] = $row["Sub_part"];
|
$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"]]["lengths"][] = $row["Sub_part"];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get foreign keys in table
|
/** Get foreign keys in table
|
||||||
* @param string
|
* @param string
|
||||||
* @return array array($name => array("db" => , "ns" => , "table" => , "source" => array(), "target" => array(), "on_delete" => , "on_update" => ))
|
* @return array array($name => array("db" => , "table" => , "source" => array(), "target" => array(), "on_delete" => , "on_update" => ))
|
||||||
*/
|
*/
|
||||||
function foreign_keys($table) {
|
function foreign_keys($table) {
|
||||||
global $connection, $on_actions;
|
global $connection, $on_actions;
|
||||||
@@ -454,7 +441,7 @@ if (!defined("DRIVER")) {
|
|||||||
$return = array();
|
$return = array();
|
||||||
$create_table = $connection->result("SHOW CREATE TABLE " . table($table), 1);
|
$create_table = $connection->result("SHOW CREATE TABLE " . table($table), 1);
|
||||||
if ($create_table) {
|
if ($create_table) {
|
||||||
preg_match_all("~CONSTRAINT ($pattern) FOREIGN KEY \\(((?:$pattern,? ?)+)\\) REFERENCES ($pattern)(?:\\.($pattern))? \\(((?:$pattern,? ?)+)\\)(?: ON DELETE ($on_actions))?(?: ON UPDATE ($on_actions))?~", $create_table, $matches, PREG_SET_ORDER);
|
preg_match_all("~CONSTRAINT ($pattern) FOREIGN KEY \\(((?:$pattern,? ?)+)\\) REFERENCES ($pattern)(?:\\.($pattern))? \\(((?:$pattern,? ?)+)\\)(?: ON DELETE (" . implode("|", $on_actions) . "))?(?: ON UPDATE (" . implode("|", $on_actions) . "))?~", $create_table, $matches, PREG_SET_ORDER);
|
||||||
foreach ($matches as $match) {
|
foreach ($matches as $match) {
|
||||||
preg_match_all("~$pattern~", $match[2], $source);
|
preg_match_all("~$pattern~", $match[2], $source);
|
||||||
preg_match_all("~$pattern~", $match[5], $target);
|
preg_match_all("~$pattern~", $match[5], $target);
|
||||||
@@ -463,8 +450,8 @@ if (!defined("DRIVER")) {
|
|||||||
"table" => idf_unescape($match[4] != "" ? $match[4] : $match[3]),
|
"table" => idf_unescape($match[4] != "" ? $match[4] : $match[3]),
|
||||||
"source" => array_map('idf_unescape', $source[0]),
|
"source" => array_map('idf_unescape', $source[0]),
|
||||||
"target" => array_map('idf_unescape', $target[0]),
|
"target" => array_map('idf_unescape', $target[0]),
|
||||||
"on_delete" => ($match[6] ? $match[6] : "RESTRICT"),
|
"on_delete" => $match[6],
|
||||||
"on_update" => ($match[7] ? $match[7] : "RESTRICT"),
|
"on_update" => $match[7],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -484,17 +471,15 @@ if (!defined("DRIVER")) {
|
|||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
function collations() {
|
function collations() {
|
||||||
|
global $connection;
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows("SHOW COLLATION") as $row) {
|
$result = $connection->query("SHOW COLLATION");
|
||||||
if ($row["Default"]) {
|
while ($row = $result->fetch_assoc()) {
|
||||||
$return[$row["Charset"]][-1] = $row["Collation"];
|
$return[$row["Charset"]][] = $row["Collation"];
|
||||||
} else {
|
|
||||||
$return[$row["Charset"]][] = $row["Collation"];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
ksort($return);
|
ksort($return);
|
||||||
foreach ($return as $key => $val) {
|
foreach ($return as $key => $val) {
|
||||||
asort($return[$key]);
|
sort($return[$key]);
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -505,8 +490,7 @@ if (!defined("DRIVER")) {
|
|||||||
*/
|
*/
|
||||||
function information_schema($db) {
|
function information_schema($db) {
|
||||||
global $connection;
|
global $connection;
|
||||||
return ($connection->server_info >= 5 && $db == "information_schema")
|
return ($connection->server_info >= 5 && $db == "information_schema");
|
||||||
|| ($connection->server_info >= 5.5 && $db == "performance_schema");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get escaped error message
|
/** Get escaped error message
|
||||||
@@ -517,32 +501,23 @@ if (!defined("DRIVER")) {
|
|||||||
return h(preg_replace('~^You have an error.*syntax to use~U', "Syntax error", $connection->error));
|
return h(preg_replace('~^You have an error.*syntax to use~U', "Syntax error", $connection->error));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get line of error
|
|
||||||
* @return int 0 for first line
|
|
||||||
*/
|
|
||||||
function error_line() {
|
|
||||||
global $connection;
|
|
||||||
if (ereg(' at line ([0-9]+)$', $connection->error, $regs)) {
|
|
||||||
return $regs[1] - 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Return expression for binary comparison
|
/** Return expression for binary comparison
|
||||||
* @param string
|
* @param string
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function exact_value($val) {
|
function exact_value($val) {
|
||||||
return q($val) . " COLLATE utf8_bin";
|
global $connection;
|
||||||
|
return $connection->quote($val) . " COLLATE utf8_bin";
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Create database
|
/** Create database
|
||||||
* @param string
|
* @param string
|
||||||
* @param string
|
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function create_database($db, $collation) {
|
function create_database($db, $collation) {
|
||||||
set_session("dbs", null);
|
global $connection;
|
||||||
return queries("CREATE DATABASE " . idf_escape($db) . ($collation ? " COLLATE " . q($collation) : ""));
|
set_session("databases", null);
|
||||||
|
return queries("CREATE DATABASE " . idf_escape($db) . ($collation ? " COLLATE " . $connection->quote($collation) : ""));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Drop databases
|
/** Drop databases
|
||||||
@@ -550,29 +525,33 @@ if (!defined("DRIVER")) {
|
|||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function drop_databases($databases) {
|
function drop_databases($databases) {
|
||||||
restart_session();
|
set_session("databases", null);
|
||||||
set_session("dbs", null);
|
return apply_queries("DROP DATABASE", $db, 'idf_escape');
|
||||||
return apply_queries("DROP DATABASE", $databases, 'idf_escape');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Rename database from DB
|
/** Rename database from DB
|
||||||
* @param string new name
|
* @param string new name
|
||||||
* @param string
|
* @return string
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function rename_database($name, $collation) {
|
function rename_database($name, $collation) {
|
||||||
|
global $connection;
|
||||||
|
$return = false;
|
||||||
if (create_database($name, $collation)) {
|
if (create_database($name, $collation)) {
|
||||||
//! move triggers
|
//! move triggers
|
||||||
$rename = array();
|
$return = true; // table list may by empty
|
||||||
foreach (tables_list() as $table => $type) {
|
foreach (tables_list() as $table) {
|
||||||
$rename[] = table($table) . " TO " . idf_escape($name) . "." . table($table);
|
if (!queries("RENAME TABLE " . table($table) . " TO " . idf_escape($name) . "." . table($table))) {
|
||||||
|
$return = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!$rename || queries("RENAME TABLE " . implode(", ", $rename))) {
|
if ($return) {
|
||||||
queries("DROP DATABASE " . idf_escape(DB));
|
queries("DROP DATABASE " . idf_escape(DB));
|
||||||
return true;
|
//! saved to history of removed database
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Generate modifier for auto increment column
|
/** Generate modifier for auto increment column
|
||||||
@@ -608,17 +587,18 @@ if (!defined("DRIVER")) {
|
|||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
|
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
|
||||||
|
global $connection;
|
||||||
$alter = array();
|
$alter = array();
|
||||||
foreach ($fields as $field) {
|
foreach ($fields as $field) {
|
||||||
$alter[] = ($field[1]
|
$alter[] = ($field[1]
|
||||||
? ($table != "" ? ($field[0] != "" ? "CHANGE " . idf_escape($field[0]) : "ADD") : " ") . " " . implode($field[1]) . ($table != "" ? $field[2] : "")
|
? ($table != "" ? ($field[0] != "" ? "CHANGE " . idf_escape($field[0]) : "ADD") : " ") . " " . implode($field[1]) . ($table != "" ? " $field[2]" : "")
|
||||||
: "DROP " . idf_escape($field[0])
|
: "DROP " . idf_escape($field[0])
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
$alter = array_merge($alter, $foreign);
|
$alter = array_merge($alter, $foreign);
|
||||||
$status = "COMMENT=" . q($comment)
|
$status = "COMMENT=" . $connection->quote($comment)
|
||||||
. ($engine ? " ENGINE=" . q($engine) : "")
|
. ($engine ? " ENGINE=" . $connection->quote($engine) : "")
|
||||||
. ($collation ? " COLLATE " . q($collation) : "")
|
. ($collation ? " COLLATE " . $connection->quote($collation) : "")
|
||||||
. ($auto_increment != "" ? " AUTO_INCREMENT=$auto_increment" : "")
|
. ($auto_increment != "" ? " AUTO_INCREMENT=$auto_increment" : "")
|
||||||
. $partitioning
|
. $partitioning
|
||||||
;
|
;
|
||||||
@@ -634,15 +614,12 @@ 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", "(columns definition)") or array("index type", "name", "DROP")
|
* @param array of array("index type", "(columns definition)") or array("index type", "escaped 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] ? "\nDROP INDEX " : "\nADD $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "")) . $val[1];
|
||||||
? "\nDROP INDEX " . idf_escape($val[1])
|
|
||||||
: "\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));
|
||||||
}
|
}
|
||||||
@@ -673,7 +650,6 @@ if (!defined("DRIVER")) {
|
|||||||
|
|
||||||
/** Move tables to other schema
|
/** Move tables to other schema
|
||||||
* @param array
|
* @param array
|
||||||
* @param array
|
|
||||||
* @param string
|
* @param string
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
@@ -686,45 +662,14 @@ if (!defined("DRIVER")) {
|
|||||||
//! move triggers
|
//! move triggers
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Copy tables to other schema
|
|
||||||
* @param array
|
|
||||||
* @param array
|
|
||||||
* @param string
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
function copy_tables($tables, $views, $target) {
|
|
||||||
queries("SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'");
|
|
||||||
foreach ($tables as $table) {
|
|
||||||
$name = ($target == DB ? table("copy_$table") : idf_escape($target) . "." . table($table));
|
|
||||||
if (!queries("DROP TABLE IF EXISTS $name")
|
|
||||||
|| !queries("CREATE TABLE $name LIKE " . table($table))
|
|
||||||
|| !queries("INSERT INTO $name SELECT * FROM " . table($table))
|
|
||||||
) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
foreach ($views as $table) {
|
|
||||||
$name = ($target == DB ? table("copy_$table") : idf_escape($target) . "." . table($table));
|
|
||||||
$view = view($table);
|
|
||||||
if (!queries("DROP VIEW IF EXISTS $name")
|
|
||||||
|| !queries("CREATE VIEW $name AS $view[select]") //! USE to avoid db.table
|
|
||||||
) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Get information about trigger
|
/** Get information about trigger
|
||||||
* @param string trigger name
|
* @param string trigger name
|
||||||
* @return array array("Trigger" => , "Timing" => , "Event" => , "Type" => , "Statement" => )
|
* @return array array("Trigger" => , "Timing" => , "Event" => , "Statement" => )
|
||||||
*/
|
*/
|
||||||
function trigger($name) {
|
function trigger($name) {
|
||||||
if ($name == "") {
|
global $connection;
|
||||||
return array();
|
$result = $connection->query("SHOW TRIGGERS WHERE `Trigger` = " . $connection->quote($name));
|
||||||
}
|
return $result->fetch_assoc();
|
||||||
$rows = get_rows("SHOW TRIGGERS WHERE `Trigger` = " . q($name));
|
|
||||||
return reset($rows);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get defined triggers
|
/** Get defined triggers
|
||||||
@@ -732,8 +677,10 @@ if (!defined("DRIVER")) {
|
|||||||
* @return array array($name => array($timing, $event))
|
* @return array array($name => array($timing, $event))
|
||||||
*/
|
*/
|
||||||
function triggers($table) {
|
function triggers($table) {
|
||||||
|
global $connection;
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows("SHOW TRIGGERS LIKE " . q(addcslashes($table, "%_"))) as $row) {
|
$result = $connection->query("SHOW TRIGGERS LIKE " . $connection->quote(addcslashes($table, "%_")));
|
||||||
|
while ($row = $result->fetch_assoc()) {
|
||||||
$return[$row["Trigger"]] = array($row["Timing"], $row["Event"]);
|
$return[$row["Trigger"]] = array($row["Timing"], $row["Event"]);
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
@@ -752,26 +699,26 @@ if (!defined("DRIVER")) {
|
|||||||
|
|
||||||
/** Get information about stored routine
|
/** Get information about stored routine
|
||||||
* @param string
|
* @param string
|
||||||
* @param string "FUNCTION" or "PROCEDURE"
|
* @param string FUNCTION or PROCEDURE
|
||||||
* @return array ("fields" => array("field" => , "type" => , "length" => , "unsigned" => , "inout" => , "collation" => ), "returns" => , "definition" => , "language" => )
|
* @return array ("fields" => array("field" => , "type" => , "length" => , "unsigned" => , "inout" => , "collation" => ), "returns" => , "definition" => )
|
||||||
*/
|
*/
|
||||||
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("bit" => "tinyint", "bool" => "tinyint", "boolean" => "tinyint", "integer" => "int", "double precision" => "float", "real" => "float", "dec" => "decimal", "numeric" => "decimal", "fixed" => "decimal", "national char" => "char", "national varchar" => "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_keys($types + $aliases)) . ")(?:\\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" ? "" : implode("|", $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*,?)*)\\)" . ($type == "FUNCTION" ? "\\s*RETURNS\\s+$type_pattern" : "") . "\\s*(.*)~is", $create, $match);
|
||||||
$fields = array();
|
$fields = array();
|
||||||
preg_match_all("~$pattern\\s*,?~is", $match[1], $matches, PREG_SET_ORDER);
|
preg_match_all("~$pattern\\s*,?~is", $match[1], $matches, PREG_SET_ORDER);
|
||||||
foreach ($matches as $param) {
|
foreach ($matches as $param) {
|
||||||
$name = str_replace("``", "`", $param[2]) . $param[3];
|
$name = str_replace("``", "`", $param[2]) . $param[3];
|
||||||
|
$data_type = strtolower($param[5]);
|
||||||
$fields[] = array(
|
$fields[] = array(
|
||||||
"field" => $name,
|
"field" => $name,
|
||||||
"type" => strtolower($param[5]),
|
"type" => (isset($aliases[$data_type]) ? $aliases[$data_type] : $data_type),
|
||||||
"length" => preg_replace_callback("~$enum_length~s", 'normalize_enum', $param[6]),
|
"length" => preg_replace_callback("~$enum_length~s", 'normalize_enum', $param[6]),
|
||||||
"unsigned" => strtolower(preg_replace('~\\s+~', ' ', trim("$param[8] $param[7]"))),
|
"unsigned" => strtolower(preg_replace('~\\s+~', ' ', trim("$param[8] $param[7]"))),
|
||||||
"null" => 1,
|
|
||||||
"full_type" => $param[4],
|
"full_type" => $param[4],
|
||||||
"inout" => strtoupper($param[1]),
|
"inout" => strtoupper($param[1]),
|
||||||
"collation" => strtolower($param[9]),
|
"collation" => strtolower($param[9]),
|
||||||
@@ -784,22 +731,17 @@ if (!defined("DRIVER")) {
|
|||||||
"fields" => $fields,
|
"fields" => $fields,
|
||||||
"returns" => array("type" => $match[12], "length" => $match[13], "unsigned" => $match[15], "collation" => $match[16]),
|
"returns" => array("type" => $match[12], "length" => $match[13], "unsigned" => $match[15], "collation" => $match[16]),
|
||||||
"definition" => $match[17],
|
"definition" => $match[17],
|
||||||
"language" => "SQL", // available in information_schema.ROUTINES.PARAMETER_STYLE
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get list of routines
|
|
||||||
* @return array ("ROUTINE_TYPE" => , "ROUTINE_NAME" => , "DTD_IDENTIFIER" => )
|
|
||||||
*/
|
|
||||||
function routines() {
|
function routines() {
|
||||||
return get_rows("SELECT * FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = " . q(DB));
|
global $connection;
|
||||||
}
|
$return = array();
|
||||||
|
$result = $connection->query("SELECT * FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = " . $connection->quote(DB));
|
||||||
/** Get list of available routine languages
|
while ($row = $result->fetch_assoc()) {
|
||||||
* @return array
|
$return[] = $row;
|
||||||
*/
|
}
|
||||||
function routine_languages() {
|
return $return;
|
||||||
return array(); // "SQL" not required
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Begin transaction
|
/** Begin transaction
|
||||||
@@ -818,20 +760,6 @@ if (!defined("DRIVER")) {
|
|||||||
return queries("INSERT INTO " . table($table) . " (" . implode(", ", array_keys($set)) . ")\nVALUES (" . implode(", ", $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
|
||||||
*/
|
*/
|
||||||
@@ -846,23 +774,7 @@ if (!defined("DRIVER")) {
|
|||||||
* @return Min_Result
|
* @return Min_Result
|
||||||
*/
|
*/
|
||||||
function explain($connection, $query) {
|
function explain($connection, $query) {
|
||||||
return $connection->query("EXPLAIN " . ($connection->server_info ? "PARTITIONS " : "") . $query);
|
return $connection->query("EXPLAIN $query");
|
||||||
}
|
|
||||||
|
|
||||||
/** Get approximate number of rows
|
|
||||||
* @param array
|
|
||||||
* @param array
|
|
||||||
* @return int or null if approximate number can't be retrieved
|
|
||||||
*/
|
|
||||||
function found_rows($table_status, $where) {
|
|
||||||
return ($where || $table_status["Engine"] != "InnoDB" ? null : $table_status["Rows"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Get user defined types
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
function types() {
|
|
||||||
return array();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get existing schemas
|
/** Get existing schemas
|
||||||
@@ -889,24 +801,11 @@ if (!defined("DRIVER")) {
|
|||||||
|
|
||||||
/** Get SQL command to create table
|
/** Get SQL command to create table
|
||||||
* @param string
|
* @param string
|
||||||
* @param bool
|
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function create_sql($table, $auto_increment) {
|
function create_sql($table) {
|
||||||
global $connection;
|
global $connection;
|
||||||
$return = $connection->result("SHOW CREATE TABLE " . table($table), 1);
|
return $connection->result("SHOW CREATE TABLE " . table($table), 1);
|
||||||
if (!$auto_increment) {
|
|
||||||
$return = preg_replace('~ AUTO_INCREMENT=\\d+~', '', $return); //! skip comments
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Get SQL command to truncate table
|
|
||||||
* @param string
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function truncate_sql($table) {
|
|
||||||
return "TRUNCATE " . table($table);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get SQL command to change database
|
/** Get SQL command to change database
|
||||||
@@ -923,10 +822,14 @@ if (!defined("DRIVER")) {
|
|||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function trigger_sql($table, $style) {
|
function trigger_sql($table, $style) {
|
||||||
|
global $connection;
|
||||||
|
$result = $connection->query("SHOW TRIGGERS LIKE " . $connection->quote(addcslashes($table, "%_")));
|
||||||
$return = "";
|
$return = "";
|
||||||
foreach (get_rows("SHOW TRIGGERS LIKE " . q(addcslashes($table, "%_")), null, "-- ") as $row) {
|
if ($result->num_rows) {
|
||||||
$return .= "\n" . ($style == 'CREATE+ALTER' ? "DROP TRIGGER IF EXISTS " . idf_escape($row["Trigger"]) . ";;\n" : "")
|
while ($row = $result->fetch_assoc()) {
|
||||||
. "CREATE TRIGGER " . idf_escape($row["Trigger"]) . " $row[Timing] $row[Event] ON " . table($row["Table"]) . " FOR EACH ROW\n$row[Statement];;\n";
|
$return .= "\n" . ($style == 'CREATE+ALTER' ? "DROP TRIGGER IF EXISTS " . idf_escape($row["Trigger"]) . ";;\n" : "")
|
||||||
|
. "CREATE TRIGGER " . idf_escape($row["Trigger"]) . " $row[Timing] $row[Event] ON " . table($row["Table"]) . " FOR EACH ROW\n$row[Statement];;\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -938,13 +841,6 @@ if (!defined("DRIVER")) {
|
|||||||
return get_key_vals("SHOW VARIABLES");
|
return get_key_vals("SHOW VARIABLES");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get process list
|
|
||||||
* @return array ($row)
|
|
||||||
*/
|
|
||||||
function process_list() {
|
|
||||||
return get_rows("SHOW FULL PROCESSLIST");
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Get status variables
|
/** Get status variables
|
||||||
* @return array ($name => $value)
|
* @return array ($name => $value)
|
||||||
*/
|
*/
|
||||||
@@ -952,41 +848,13 @@ if (!defined("DRIVER")) {
|
|||||||
return get_key_vals("SHOW STATUS");
|
return get_key_vals("SHOW STATUS");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Convert field in select and edit
|
|
||||||
* @param array one element from fields()
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function convert_field($field) {
|
|
||||||
if (ereg("binary", $field["type"])) {
|
|
||||||
return "HEX(" . idf_escape($field["field"]) . ")";
|
|
||||||
}
|
|
||||||
if (ereg("geometry|point|linestring|polygon", $field["type"])) {
|
|
||||||
return "AsWKT(" . idf_escape($field["field"]) . ")";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Convert value in edit after applying functions back
|
|
||||||
* @param array one element from fields()
|
|
||||||
* @param string
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function unconvert_field($field, $return) {
|
|
||||||
if (ereg("binary", $field["type"])) {
|
|
||||||
$return = "UNHEX($return)";
|
|
||||||
}
|
|
||||||
if (ereg("geometry|point|linestring|polygon", $field["type"])) {
|
|
||||||
$return = "GeomFromText($return)";
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Check whether a feature is supported
|
/** Check whether a feature is supported
|
||||||
* @param string "comment", "copy", "drop_col", "dump", "event", "kill", "partitioning", "privileges", "procedure", "processlist", "routine", "scheme", "sequence", "status", "trigger", "type", "variables", "view"
|
* @param string
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function support($feature) {
|
function support($feature) {
|
||||||
global $connection;
|
global $connection;
|
||||||
return !ereg("scheme|sequence|type" . ($connection->server_info < 5.1 ? "|event|partitioning" . ($connection->server_info < 5 ? "|view|routine|trigger" : "") : ""), $feature);
|
return !ereg("scheme|sequence" . ($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
|
||||||
@@ -996,24 +864,22 @@ if (!defined("DRIVER")) {
|
|||||||
lang('Numbers') => array("tinyint" => 3, "smallint" => 5, "mediumint" => 8, "int" => 10, "bigint" => 20, "decimal" => 66, "float" => 12, "double" => 21),
|
lang('Numbers') => array("tinyint" => 3, "smallint" => 5, "mediumint" => 8, "int" => 10, "bigint" => 20, "decimal" => 66, "float" => 12, "double" => 21),
|
||||||
lang('Date and time') => array("date" => 10, "datetime" => 19, "timestamp" => 19, "time" => 10, "year" => 4),
|
lang('Date and time') => array("date" => 10, "datetime" => 19, "timestamp" => 19, "time" => 10, "year" => 4),
|
||||||
lang('Strings') => array("char" => 255, "varchar" => 65535, "tinytext" => 255, "text" => 65535, "mediumtext" => 16777215, "longtext" => 4294967295),
|
lang('Strings') => array("char" => 255, "varchar" => 65535, "tinytext" => 255, "text" => 65535, "mediumtext" => 16777215, "longtext" => 4294967295),
|
||||||
lang('Lists') => array("enum" => 65535, "set" => 64),
|
|
||||||
lang('Binary') => array("bit" => 20, "binary" => 255, "varbinary" => 65535, "tinyblob" => 255, "blob" => 65535, "mediumblob" => 16777215, "longblob" => 4294967295),
|
lang('Binary') => array("bit" => 20, "binary" => 255, "varbinary" => 65535, "tinyblob" => 255, "blob" => 65535, "mediumblob" => 16777215, "longblob" => 4294967295),
|
||||||
lang('Geometry') => array("geometry" => 0, "point" => 0, "linestring" => 0, "polygon" => 0, "multipoint" => 0, "multilinestring" => 0, "multipolygon" => 0, "geometrycollection" => 0),
|
lang('Lists') => array("enum" => 65535, "set" => 64),
|
||||||
) as $key => $val) {
|
) as $key => $val) {
|
||||||
$types += $val;
|
$types += $val;
|
||||||
$structured_types[$key] = array_keys($val);
|
$structured_types[$key] = array_keys($val);
|
||||||
}
|
}
|
||||||
$unsigned = array("unsigned", "zerofill", "unsigned zerofill"); ///< @var array number variants
|
$unsigned = array("unsigned", "zerofill", "unsigned zerofill"); ///< @var array number variants
|
||||||
$operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "REGEXP", "IN", "IS NULL", "NOT LIKE", "NOT REGEXP", "NOT IN", "IS NOT NULL", ""); ///< @var array operators used in select
|
$operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "REGEXP", "IN", "IS NULL", "NOT LIKE", "NOT REGEXP", "NOT IN", "IS NOT NULL"); ///< @var array operators used in select
|
||||||
$functions = array("char_length", "date", "from_unixtime", "lower", "round", "sec_to_time", "time_to_sec", "upper"); ///< @var array functions used in select
|
$functions = array("char_length", "date", "from_unixtime", "hex", "lower", "round", "sec_to_time", "time_to_sec", "upper"); ///< @var array functions used in select
|
||||||
$grouping = array("avg", "count", "count distinct", "group_concat", "max", "min", "sum"); ///< @var array grouping functions used in select
|
$grouping = array("avg", "count", "count distinct", "group_concat", "max", "min", "sum"); ///< @var array grouping functions used in select
|
||||||
$edit_functions = array( ///< @var array of array("$type|$type2" => "$function/$function2") functions used in editing, [0] - edit and insert, [1] - edit only
|
$edit_functions = array( ///< @var array of array("$type|$type2" => "$function/$function2") functions used in editing, [0] - edit and insert, [1] - edit only
|
||||||
array(
|
array(
|
||||||
"char" => "md5/sha1/password/encrypt/uuid", //! JavaScript for disabling maxlength
|
"char" => "md5/sha1/password/encrypt/uuid", //! JavaScript for disabling maxlength
|
||||||
"binary" => "md5/sha1",
|
|
||||||
"date|time" => "now",
|
"date|time" => "now",
|
||||||
), array(
|
), array(
|
||||||
"(^|[^o])int|float|double|decimal" => "+/-", // not point
|
"int|float|double|decimal" => "+/-",
|
||||||
"date" => "+ interval/- interval",
|
"date" => "+ interval/- interval",
|
||||||
"time" => "addtime/subtime",
|
"time" => "addtime/subtime",
|
||||||
"char|text" => "concat",
|
"char|text" => "concat",
|
||||||
|
|||||||
@@ -1,12 +1,15 @@
|
|||||||
<?php
|
<?php
|
||||||
$drivers["oracle"] = "Oracle";
|
$possible_drivers[] = "OCI8";
|
||||||
|
$possible_drivers[] = "PDO_OCI";
|
||||||
|
if (extension_loaded("oci8") || extension_loaded("pdo_oci")) {
|
||||||
|
$drivers["oracle"] = "Oracle";
|
||||||
|
}
|
||||||
|
|
||||||
if (isset($_GET["oracle"])) {
|
if (isset($_GET["oracle"])) {
|
||||||
$possible_drivers = array("OCI8", "PDO_OCI");
|
|
||||||
define("DRIVER", "oracle");
|
define("DRIVER", "oracle");
|
||||||
if (extension_loaded("oci8")) {
|
if (extension_loaded("oci8")) {
|
||||||
class Min_DB {
|
class Min_DB {
|
||||||
var $extension = "oci8", $_link, $_result, $server_info, $affected_rows, $errno, $error;
|
var $extension = "oci8", $_link, $_result, $server_info, $affected_rows, $error;
|
||||||
|
|
||||||
function _error($errno, $error) {
|
function _error($errno, $error) {
|
||||||
if (ini_bool("html_errors")) {
|
if (ini_bool("html_errors")) {
|
||||||
@@ -17,7 +20,7 @@ if (isset($_GET["oracle"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function connect($server, $username, $password) {
|
function connect($server, $username, $password) {
|
||||||
$this->_link = @oci_new_connect($username, $password, $server, "AL32UTF8");
|
$this->_link = @oci_new_connect($username, $password, $server); //! AL32UTF8
|
||||||
if ($this->_link) {
|
if ($this->_link) {
|
||||||
$this->server_info = oci_server_version($this->_link);
|
$this->server_info = oci_server_version($this->_link);
|
||||||
return true;
|
return true;
|
||||||
@@ -37,10 +40,8 @@ if (isset($_GET["oracle"])) {
|
|||||||
|
|
||||||
function query($query, $unbuffered = false) {
|
function query($query, $unbuffered = false) {
|
||||||
$result = oci_parse($this->_link, $query);
|
$result = oci_parse($this->_link, $query);
|
||||||
$this->error = "";
|
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
$error = oci_error($this->_link);
|
$error = oci_error($this->_link);
|
||||||
$this->errno = $error["code"];
|
|
||||||
$this->error = $error["message"];
|
$this->error = $error["message"];
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -82,6 +83,7 @@ if (isset($_GET["oracle"])) {
|
|||||||
|
|
||||||
function Min_Result($result) {
|
function Min_Result($result) {
|
||||||
$this->_result = $result;
|
$this->_result = $result;
|
||||||
|
$this->num_rows = -1; // all results unbuffered
|
||||||
}
|
}
|
||||||
|
|
||||||
function _convert($row) {
|
function _convert($row) {
|
||||||
@@ -121,12 +123,9 @@ if (isset($_GET["oracle"])) {
|
|||||||
var $extension = "PDO_OCI";
|
var $extension = "PDO_OCI";
|
||||||
|
|
||||||
function connect($server, $username, $password) {
|
function connect($server, $username, $password) {
|
||||||
$this->dsn("oci:dbname=//$server;charset=AL32UTF8", $username, $password);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function select_db($database) {
|
function select_db($database) {
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -155,10 +154,7 @@ if (isset($_GET["oracle"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
|
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
|
||||||
return ($offset ? " * FROM (SELECT t.*, rownum AS rnum FROM (SELECT $query$where) t WHERE rownum <= " . ($limit + $offset) . ") WHERE rnum > $offset"
|
return " $query$where" . (isset($limit) ? ($where ? " AND" : $separator . "WHERE") . ($offset ? " rownum > $offset AND" : "") . " rownum <= " . ($limit + $offset) : "");
|
||||||
: ($limit !== null ? " * FROM (SELECT $query$where) WHERE rownum <= " . ($limit + $offset)
|
|
||||||
: " $query$where"
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function limit1($query, $where) {
|
function limit1($query, $where) {
|
||||||
@@ -180,9 +176,8 @@ 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) . "
|
global $connection;
|
||||||
UNION SELECT view_name, 'view' FROM user_views"
|
return get_key_vals("SELECT table_name FROM all_tables WHERE tablespace_name = " . $connection->quote(DB)); //! views
|
||||||
); //! views don't have schema
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function count_tables($databases) {
|
function count_tables($databases) {
|
||||||
@@ -190,11 +185,10 @@ UNION SELECT view_name, 'view' FROM user_views"
|
|||||||
}
|
}
|
||||||
|
|
||||||
function table_status($name = "") {
|
function table_status($name = "") {
|
||||||
|
global $connection;
|
||||||
$return = array();
|
$return = array();
|
||||||
$search = q($name);
|
$result = $connection->query('SELECT table_name "Name" FROM all_tables' . ($name != "" ? ' WHERE table_name = ' . $connection->quote($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" : "") . "
|
while ($row = $result->fetch_assoc()) {
|
||||||
UNION SELECT view_name, 'view', 0, 0 FROM user_views" . ($name != "" ? " WHERE view_name = $search" : "")
|
|
||||||
) as $row) {
|
|
||||||
if ($name != "") {
|
if ($name != "") {
|
||||||
return $row;
|
return $row;
|
||||||
}
|
}
|
||||||
@@ -203,58 +197,43 @@ UNION SELECT view_name, 'view', 0, 0 FROM user_views" . ($name != "" ? " WHERE v
|
|||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function is_view($table_status) {
|
|
||||||
return $table_status["Engine"] == "view";
|
|
||||||
}
|
|
||||||
|
|
||||||
function fk_support($table_status) {
|
function fk_support($table_status) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function fields($table) {
|
function fields($table) {
|
||||||
|
global $connection;
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows("SELECT * FROM all_tab_columns WHERE table_name = " . q($table) . " ORDER BY column_id") as $row) {
|
$result = $connection->query("SELECT * FROM all_tab_columns WHERE table_name = " . $connection->quote($table) . " ORDER BY column_id");
|
||||||
$type = $row["DATA_TYPE"];
|
if ($result) {
|
||||||
$length = "$row[DATA_PRECISION],$row[DATA_SCALE]";
|
while ($row = $result->fetch_assoc()) {
|
||||||
if ($length == ",") {
|
$type = $row["DATA_TYPE"];
|
||||||
$length = $row["DATA_LENGTH"];
|
$length = "$row[DATA_PRECISION],$row[DATA_SCALE]";
|
||||||
} //! int
|
if ($length == ",") {
|
||||||
$return[$row["COLUMN_NAME"]] = array(
|
$length = $row["DATA_LENGTH"];
|
||||||
"field" => $row["COLUMN_NAME"],
|
} //! int
|
||||||
"full_type" => $type . ($length ? "($length)" : ""),
|
$return[$row["COLUMN_NAME"]] = array(
|
||||||
"type" => strtolower($type),
|
"field" => $row["COLUMN_NAME"],
|
||||||
"length" => $length,
|
"full_type" => $type . ($length ? "($length)" : ""),
|
||||||
"default" => $row["DATA_DEFAULT"],
|
"type" => strtolower($type),
|
||||||
"null" => ($row["NULLABLE"] == "Y"),
|
"length" => $length,
|
||||||
//! "auto_increment" => false,
|
"default" => $row["DATA_DEFAULT"],
|
||||||
//! "collation" => $row["CHARACTER_SET_NAME"],
|
"null" => ($row["NULLABLE"] == "Y"),
|
||||||
"privileges" => array("insert" => 1, "select" => 1, "update" => 1),
|
//! "auto_increment" => false,
|
||||||
//! "comment" => $row["Comment"],
|
//! "collation" => $row["CHARACTER_SET_NAME"],
|
||||||
//! "primary" => ($row["Key"] == "PRI"),
|
"privileges" => array("insert" => 1, "select" => 1, "update" => 1),
|
||||||
);
|
//! "comment" => $row["Comment"],
|
||||||
|
//! "primary" => ($row["Key"] == "PRI"),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function indexes($table, $connection2 = null) {
|
function indexes($table, $connection2 = null) {
|
||||||
$return = array();
|
return array(); //!
|
||||||
foreach (get_rows("SELECT uic.*, uc.constraint_type
|
|
||||||
FROM user_ind_columns uic
|
|
||||||
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) . "
|
|
||||||
ORDER BY uc.constraint_type, uic.column_position", $connection2) as $row) {
|
|
||||||
$return[$row["INDEX_NAME"]]["type"] = ($row["CONSTRAINT_TYPE"] == "P" ? "PRIMARY" : ($row["CONSTRAINT_TYPE"] == "U" ? "UNIQUE" : "INDEX"));
|
|
||||||
$return[$row["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 $return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function view($name) {
|
|
||||||
$rows = get_rows('SELECT text "select" FROM user_views WHERE view_name = ' . q($name));
|
|
||||||
return reset($rows);
|
|
||||||
}
|
|
||||||
|
|
||||||
function collations() {
|
function collations() {
|
||||||
return array(); //!
|
return array(); //!
|
||||||
}
|
}
|
||||||
@@ -269,15 +248,12 @@ ORDER BY uc.constraint_type, uic.column_position", $connection2) as $row) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function exact_value($val) {
|
function exact_value($val) {
|
||||||
return q($val);
|
global $connection;
|
||||||
|
return $connection->quote($val);
|
||||||
}
|
}
|
||||||
|
|
||||||
function explain($connection, $query) {
|
function explain($connection, $query) {
|
||||||
$connection->query("EXPLAIN PLAN FOR $query");
|
//!
|
||||||
return $connection->query("SELECT * FROM plan_table");
|
|
||||||
}
|
|
||||||
|
|
||||||
function found_rows($table_status, $where) {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
|
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
|
||||||
@@ -331,46 +307,19 @@ ORDER BY uc.constraint_type, uic.column_position", $connection2) as $row) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function schemas() {
|
function schemas() {
|
||||||
return get_vals("SELECT DISTINCT owner FROM dba_segments WHERE owner IN (SELECT username FROM dba_users WHERE default_tablespace NOT IN ('SYSTEM','SYSAUX'))");
|
return array();
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_schema() {
|
function get_schema() {
|
||||||
global $connection;
|
return "";
|
||||||
return $connection->result("SELECT sys_context('USERENV', 'SESSION_USER') FROM dual");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function set_schema($scheme) {
|
function set_schema($scheme) {
|
||||||
global $connection;
|
return true;
|
||||||
return $connection->query("ALTER SESSION SET CURRENT_SCHEMA = " . idf_escape($scheme));
|
|
||||||
}
|
|
||||||
|
|
||||||
function show_variables() {
|
|
||||||
return get_key_vals('SELECT name, display_value FROM v$parameter');
|
|
||||||
}
|
|
||||||
|
|
||||||
function process_list() {
|
|
||||||
return get_rows('SELECT sess.process AS "process", sess.username AS "user", sess.schemaname AS "schema", sess.status AS "status", sess.wait_class AS "wait_class", sess.seconds_in_wait AS "seconds_in_wait", sql.sql_text AS "sql_text", sess.machine AS "machine", sess.port AS "port"
|
|
||||||
FROM v$session sess LEFT OUTER JOIN v$sql sql
|
|
||||||
ON sql.sql_id = sess.sql_id
|
|
||||||
WHERE sess.type = \'USER\'
|
|
||||||
ORDER BY PROCESS
|
|
||||||
');
|
|
||||||
}
|
|
||||||
|
|
||||||
function show_status() {
|
|
||||||
$rows = get_rows('SELECT * FROM v$instance');
|
|
||||||
return reset($rows);
|
|
||||||
}
|
|
||||||
|
|
||||||
function convert_field($field) {
|
|
||||||
}
|
|
||||||
|
|
||||||
function unconvert_field($field, $return) {
|
|
||||||
return $return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function support($feature) {
|
function support($feature) {
|
||||||
return ereg("view|scheme|processlist|drop_col|variables|status", $feature); //!
|
return ereg("drop_col", $feature); //!
|
||||||
}
|
}
|
||||||
|
|
||||||
$jush = "oracle";
|
$jush = "oracle";
|
||||||
@@ -386,7 +335,7 @@ ORDER BY PROCESS
|
|||||||
$structured_types[$key] = array_keys($val);
|
$structured_types[$key] = array_keys($val);
|
||||||
}
|
}
|
||||||
$unsigned = array();
|
$unsigned = array();
|
||||||
$operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT REGEXP", "NOT IN", "IS NOT NULL", "");
|
$operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT REGEXP", "NOT IN", "IS NOT NULL");
|
||||||
$functions = array("length", "lower", "round", "upper");
|
$functions = array("length", "lower", "round", "upper");
|
||||||
$grouping = array("avg", "count", "count distinct", "max", "min", "sum");
|
$grouping = array("avg", "count", "count distinct", "max", "min", "sum");
|
||||||
$edit_functions = array(
|
$edit_functions = array(
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
$drivers["pgsql"] = "PostgreSQL";
|
$possible_drivers[] = "PgSQL";
|
||||||
|
$possible_drivers[] = "PDO_PgSQL";
|
||||||
|
if (extension_loaded("pgsql") || extension_loaded("pdo_pgsql")) {
|
||||||
|
$drivers["pgsql"] = "PostgreSQL";
|
||||||
|
}
|
||||||
|
|
||||||
if (isset($_GET["pgsql"])) {
|
if (isset($_GET["pgsql"])) {
|
||||||
$possible_drivers = array("PgSQL", "PDO_PgSQL");
|
|
||||||
define("DRIVER", "pgsql");
|
define("DRIVER", "pgsql");
|
||||||
if (extension_loaded("pgsql")) {
|
if (extension_loaded("pgsql")) {
|
||||||
class Min_DB {
|
class Min_DB {
|
||||||
@@ -17,15 +20,13 @@ if (isset($_GET["pgsql"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function connect($server, $username, $password) {
|
function connect($server, $username, $password) {
|
||||||
global $adminer;
|
|
||||||
$db = $adminer->database();
|
|
||||||
set_error_handler(array($this, '_error'));
|
set_error_handler(array($this, '_error'));
|
||||||
$this->_string = "host='" . str_replace(":", "' port='", addcslashes($server, "'\\")) . "' user='" . addcslashes($username, "'\\") . "' password='" . addcslashes($password, "'\\") . "'";
|
$this->_string = "host='" . str_replace(":", "' port='", addcslashes($server, "'\\")) . "' user='" . addcslashes($username, "'\\") . "' password='" . addcslashes($password, "'\\") . "'";
|
||||||
$this->_link = @pg_connect("$this->_string dbname='" . ($db != "" ? addcslashes($db, "'\\") : "postgres") . "'", PGSQL_CONNECT_FORCE_NEW);
|
$this->_link = @pg_connect($this->_string . (DB != "" ? " dbname='" . addcslashes(DB, "'\\") . "'" : ""), PGSQL_CONNECT_FORCE_NEW);
|
||||||
if (!$this->_link && $db != "") {
|
if (!$this->_link && DB != "") {
|
||||||
// try to connect directly with database for performance
|
// try to connect directly with database for performance
|
||||||
$this->_database = false;
|
$this->_database = false;
|
||||||
$this->_link = @pg_connect("$this->_string dbname='postgres'", PGSQL_CONNECT_FORCE_NEW);
|
$this->_link = @pg_connect($this->_string, PGSQL_CONNECT_FORCE_NEW);
|
||||||
}
|
}
|
||||||
restore_error_handler();
|
restore_error_handler();
|
||||||
if ($this->_link) {
|
if ($this->_link) {
|
||||||
@@ -41,11 +42,10 @@ if (isset($_GET["pgsql"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function select_db($database) {
|
function select_db($database) {
|
||||||
global $adminer;
|
if ($database == DB) {
|
||||||
if ($database == $adminer->database()) {
|
|
||||||
return $this->_database;
|
return $this->_database;
|
||||||
}
|
}
|
||||||
$return = @pg_connect("$this->_string dbname='" . addcslashes($database, "'\\") . "'", PGSQL_CONNECT_FORCE_NEW);
|
$return = @pg_connect($this->_connection . " dbname='" . addcslashes($database, "'\\") . "'", PGSQL_CONNECT_FORCE_NEW);
|
||||||
if ($return) {
|
if ($return) {
|
||||||
$this->_link = $return;
|
$this->_link = $return;
|
||||||
}
|
}
|
||||||
@@ -53,12 +53,11 @@ if (isset($_GET["pgsql"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function close() {
|
function close() {
|
||||||
$this->_link = @pg_connect("$this->_string dbname='postgres'");
|
$this->_link = @pg_connect($this->_string);
|
||||||
}
|
}
|
||||||
|
|
||||||
function query($query, $unbuffered = false) {
|
function query($query, $unbuffered = false) {
|
||||||
$result = @pg_query($this->_link, $query);
|
$result = @pg_query($this->_link, $query);
|
||||||
$this->error = "";
|
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
$this->error = pg_last_error($this->_link);
|
$this->error = pg_last_error($this->_link);
|
||||||
return false;
|
return false;
|
||||||
@@ -84,7 +83,7 @@ if (isset($_GET["pgsql"])) {
|
|||||||
|
|
||||||
function result($query, $field = 0) {
|
function result($query, $field = 0) {
|
||||||
$result = $this->query($query);
|
$result = $this->query($query);
|
||||||
if (!$result || !$result->num_rows) {
|
if (!$result) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return pg_fetch_result($result->_result, 0, $field);
|
return pg_fetch_result($result->_result, 0, $field);
|
||||||
@@ -130,17 +129,14 @@ if (isset($_GET["pgsql"])) {
|
|||||||
var $extension = "PDO_PgSQL";
|
var $extension = "PDO_PgSQL";
|
||||||
|
|
||||||
function connect($server, $username, $password) {
|
function connect($server, $username, $password) {
|
||||||
global $adminer;
|
|
||||||
$db = $adminer->database();
|
|
||||||
$string = "pgsql:host='" . str_replace(":", "' port='", addcslashes($server, "'\\")) . "' options='-c client_encoding=utf8'";
|
$string = "pgsql:host='" . str_replace(":", "' port='", addcslashes($server, "'\\")) . "' options='-c client_encoding=utf8'";
|
||||||
$this->dsn("$string dbname='" . ($db != "" ? addcslashes($db, "'\\") : "postgres") . "'", $username, $password);
|
$this->dsn($string . (DB != "" ? " dbname='" . addcslashes(DB, "'\\") . "'" : ""), $username, $password);
|
||||||
//! connect without DB in case of an error
|
//! connect without DB in case of an error
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function select_db($database) {
|
function select_db($database) {
|
||||||
global $adminer;
|
return (DB == $database);
|
||||||
return ($adminer->database() == $database);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function close() {
|
function close() {
|
||||||
@@ -162,20 +158,17 @@ if (isset($_GET["pgsql"])) {
|
|||||||
$connection = new Min_DB;
|
$connection = new Min_DB;
|
||||||
$credentials = $adminer->credentials();
|
$credentials = $adminer->credentials();
|
||||||
if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) {
|
if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) {
|
||||||
if ($connection->server_info >= 9) {
|
|
||||||
$connection->query("SET application_name = 'Adminer'");
|
|
||||||
}
|
|
||||||
return $connection;
|
return $connection;
|
||||||
}
|
}
|
||||||
return $connection->error;
|
return $connection->error;
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_databases() {
|
function get_databases() {
|
||||||
return get_vals("SELECT datname FROM pg_database ORDER BY datname");
|
return get_vals("SELECT datname FROM pg_database");
|
||||||
}
|
}
|
||||||
|
|
||||||
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
|
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
|
||||||
return " $query$where" . ($limit !== null ? $separator . "LIMIT $limit" . ($offset ? " OFFSET $offset" : "") : "");
|
return " $query$where" . (isset($limit) ? $separator . "LIMIT $limit" . ($offset ? " OFFSET $offset" : "") : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
function limit1($query, $where) {
|
function limit1($query, $where) {
|
||||||
@@ -197,6 +190,7 @@ if (isset($_GET["pgsql"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function tables_list() {
|
function tables_list() {
|
||||||
|
global $connection;
|
||||||
return get_key_vals("SELECT table_name, table_type FROM information_schema.tables WHERE table_schema = current_schema() ORDER BY table_name");
|
return get_key_vals("SELECT table_name, table_type FROM information_schema.tables WHERE table_schema = current_schema() ORDER BY table_name");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -205,50 +199,46 @@ if (isset($_GET["pgsql"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function table_status($name = "") {
|
function table_status($name = "") {
|
||||||
|
global $connection;
|
||||||
$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 AS \"Oid\", reltuples as \"Rows\"
|
$result = $connection->query("SELECT relname AS \"Name\", CASE relkind WHEN 'r' THEN '' ELSE 'view' END AS \"Engine\", pg_relation_size(oid) AS \"Data_length\", pg_total_relation_size(oid) - pg_relation_size(oid) AS \"Index_length\", pg_catalog.obj_description(oid, 'pg_class') AS \"Comment\"
|
||||||
FROM pg_class
|
FROM pg_catalog.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) : "")
|
. ($name != "" ? " AND relname = " . $connection->quote($name) : "")
|
||||||
) as $row) { //! Index_length, Auto_increment
|
); //! Index_length, Auto_increment
|
||||||
|
while ($row = $result->fetch_assoc()) {
|
||||||
$return[$row["Name"]] = $row;
|
$return[$row["Name"]] = $row;
|
||||||
}
|
}
|
||||||
return ($name != "" ? $return[$name] : $return);
|
return ($name != "" ? $return[$name] : $return);
|
||||||
}
|
}
|
||||||
|
|
||||||
function is_view($table_status) {
|
|
||||||
return $table_status["Engine"] == "view";
|
|
||||||
}
|
|
||||||
|
|
||||||
function fk_support($table_status) {
|
function fk_support($table_status) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function fields($table) {
|
function fields($table) {
|
||||||
|
global $connection;
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows("SELECT a.attname AS field, format_type(a.atttypid, a.atttypmod) AS full_type, d.adsrc AS default, a.attnotnull, col_description(c.oid, a.attnum) AS comment
|
$table_oid = $connection->result("SELECT oid FROM pg_class WHERE relname = " . $connection->quote($table));
|
||||||
FROM pg_class c
|
$result = $connection->query("SELECT *, col_description($table_oid, ordinal_position) AS comment FROM information_schema.columns WHERE table_name = " . $connection->quote($table) . " ORDER BY ordinal_position");
|
||||||
JOIN pg_namespace n ON c.relnamespace = n.oid
|
if ($result) {
|
||||||
JOIN pg_attribute a ON c.oid = a.attrelid
|
while ($row = $result->fetch_assoc()) {
|
||||||
LEFT JOIN pg_attrdef d ON c.oid = d.adrelid AND a.attnum = d.adnum
|
$length = $row["character_maximum_length"];
|
||||||
WHERE c.relname = " . q($table) . "
|
$return[$row["column_name"]] = array(
|
||||||
AND n.nspname = current_schema()
|
"field" => $row["column_name"],
|
||||||
AND NOT a.attisdropped
|
"full_type" => $row["data_type"] . ($length ? "($length)" : ""),
|
||||||
AND a.attnum > 0
|
"type" => $row["data_type"],
|
||||||
ORDER BY a.attnum"
|
"length" => $length,
|
||||||
) as $row) {
|
"default" => $row["column_default"],
|
||||||
//! collation, primary
|
"null" => ($row["is_nullable"] == "YES"),
|
||||||
ereg('(.*)(\\((.*)\\))?', $row["full_type"], $match);
|
"auto_increment" => eregi("^nextval\\(", $row["column_default"]),
|
||||||
list(, $row["type"], , $row["length"]) = $match;
|
"collation" => $row["collation_name"],
|
||||||
$row["full_type"] = $row["type"] . ($row["length"] ? "($row[length])" : "");
|
"privileges" => array("insert" => 1, "select" => 1, "update" => 1), //! is_updatable
|
||||||
$row["null"] = ($row["attnotnull"] == "f");
|
"primary" => false, //!
|
||||||
$row["auto_increment"] = eregi("^nextval\\(", $row["default"]);
|
"comment" => $row["comment"],
|
||||||
$row["privileges"] = array("insert" => 1, "select" => 1, "update" => 1);
|
);
|
||||||
if (preg_match('~^(.*)::.+$~', $row["default"], $match)) {
|
|
||||||
$row["default"] = ($match[1][0] == "'" ? idf_unescape($match[1]) : $match[1]);
|
|
||||||
}
|
}
|
||||||
$return[$row["field"]] = $row;
|
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -259,9 +249,10 @@ ORDER BY a.attnum"
|
|||||||
$connection2 = $connection;
|
$connection2 = $connection;
|
||||||
}
|
}
|
||||||
$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 relname = " . $connection2->quote($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, indisprimary, indkey FROM pg_index i, pg_class ci WHERE i.indrelid = $table_oid AND ci.oid = i.indexrelid", $connection2) as $row) {
|
$result = $connection2->query("SELECT relname, indisunique, indisprimary, indkey FROM pg_index i, pg_class ci WHERE i.indrelid = $table_oid AND ci.oid = i.indexrelid");
|
||||||
|
while ($row = $result->fetch_assoc()) {
|
||||||
$return[$row["relname"]]["type"] = ($row["indisprimary"] == "t" ? "PRIMARY" : ($row["indisunique"] == "t" ? "UNIQUE" : "INDEX"));
|
$return[$row["relname"]]["type"] = ($row["indisprimary"] == "t" ? "PRIMARY" : ($row["indisunique"] == "t" ? "UNIQUE" : "INDEX"));
|
||||||
$return[$row["relname"]]["columns"] = array();
|
$return[$row["relname"]]["columns"] = array();
|
||||||
foreach (explode(" ", $row["indkey"]) as $indkey) {
|
foreach (explode(" ", $row["indkey"]) as $indkey) {
|
||||||
@@ -273,32 +264,28 @@ ORDER BY a.attnum"
|
|||||||
}
|
}
|
||||||
|
|
||||||
function foreign_keys($table) {
|
function foreign_keys($table) {
|
||||||
global $on_actions;
|
global $connection;
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows("SELECT conname, pg_get_constraintdef(oid) AS definition
|
$result = $connection->query("SELECT tc.constraint_name, kcu.column_name, rc.update_rule AS on_update, rc.delete_rule AS on_delete, ccu.table_name AS table, ccu.column_name AS ref
|
||||||
FROM pg_constraint
|
FROM information_schema.table_constraints tc
|
||||||
WHERE conrelid = (SELECT pc.oid FROM pg_class AS pc INNER JOIN pg_namespace AS pn ON (pn.oid = pc.relnamespace) WHERE pc.relname = " . q($table) . " AND pn.nspname = current_schema())
|
LEFT JOIN information_schema.key_column_usage kcu USING (constraint_catalog, constraint_schema, constraint_name)
|
||||||
AND contype = 'f'::char
|
LEFT JOIN information_schema.referential_constraints rc USING (constraint_catalog, constraint_schema, constraint_name)
|
||||||
ORDER BY conkey, conname") as $row) {
|
LEFT JOIN information_schema.constraint_column_usage ccu ON rc.unique_constraint_catalog = ccu.constraint_catalog AND rc.unique_constraint_schema = ccu.constraint_schema AND rc.unique_constraint_name = ccu.constraint_name
|
||||||
if (preg_match('~FOREIGN KEY\s*\((.+)\)\s*REFERENCES (.+)\((.+)\)(.*)$~iA', $row['definition'], $match)) {
|
WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = " . $connection->quote($table)); //! there can be more unique_constraint_name
|
||||||
$row['source'] = array_map('trim', explode(',', $match[1]));
|
while ($row = $result->fetch_assoc()) {
|
||||||
$row['table'] = $match[2];
|
$foreign_key = &$return[$row["constraint_name"]];
|
||||||
if (preg_match('~(.+)\.(.+)~', $match[2], $match2)) {
|
if (!$foreign_key) {
|
||||||
$row['ns'] = $match2[1];
|
$foreign_key = $row;
|
||||||
$row['table'] = $match2[2];
|
|
||||||
}
|
|
||||||
$row['target'] = array_map('trim', explode(',', $match[3]));
|
|
||||||
$row['on_delete'] = (preg_match("~ON DELETE ($on_actions)~", $match[4], $match2) ? $match2[1] : 'NO ACTION');
|
|
||||||
$row['on_update'] = (preg_match("~ON UPDATE ($on_actions)~", $match[4], $match2) ? $match2[1] : 'NO ACTION');
|
|
||||||
$return[$row['conname']] = $row;
|
|
||||||
}
|
}
|
||||||
|
$foreign_key["source"][] = $row["column_name"];
|
||||||
|
$foreign_key["target"][] = $row["ref"];
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function view($name) {
|
function view($name) {
|
||||||
global $connection;
|
global $connection;
|
||||||
return array("select" => $connection->result("SELECT pg_get_viewdef(" . q($name) . ")"));
|
return array("select" => $connection->result("SELECT pg_get_viewdef(" . $connection->quote($name) . ")"));
|
||||||
}
|
}
|
||||||
|
|
||||||
function collations() {
|
function collations() {
|
||||||
@@ -320,7 +307,8 @@ ORDER BY conkey, conname") as $row) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function exact_value($val) {
|
function exact_value($val) {
|
||||||
return q($val);
|
global $connection;
|
||||||
|
return $connection->quote($val);
|
||||||
}
|
}
|
||||||
|
|
||||||
function create_database($db, $collation) {
|
function create_database($db, $collation) {
|
||||||
@@ -343,6 +331,7 @@ ORDER BY conkey, conname") as $row) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
|
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
|
||||||
|
global $connection;
|
||||||
$alter = array();
|
$alter = array();
|
||||||
$queries = array();
|
$queries = array();
|
||||||
foreach ($fields as $field) {
|
foreach ($fields as $field) {
|
||||||
@@ -383,10 +372,10 @@ ORDER BY conkey, conname") as $row) {
|
|||||||
$queries[] = "ALTER TABLE " . table($table) . " RENAME TO " . table($name);
|
$queries[] = "ALTER TABLE " . table($table) . " RENAME TO " . table($name);
|
||||||
}
|
}
|
||||||
if ($table != "" || $comment != "") {
|
if ($table != "" || $comment != "") {
|
||||||
$queries[] = "COMMENT ON TABLE " . table($name) . " IS " . q($comment);
|
$queries[] = "COMMENT ON TABLE " . table($name) . " IS " . $connection->quote($comment);
|
||||||
}
|
}
|
||||||
if ($auto_increment != "") {
|
if ($auto_increment != "") {
|
||||||
//! $queries[] = "SELECT setval(pg_get_serial_sequence(" . q($name) . ", ), $auto_increment)";
|
//! $queries[] = "SELECT setval(pg_get_serial_sequence(" . $connection->quote($name) . ", ), $auto_increment)";
|
||||||
}
|
}
|
||||||
foreach ($queries as $query) {
|
foreach ($queries as $query) {
|
||||||
if (!queries($query)) {
|
if (!queries($query)) {
|
||||||
@@ -401,13 +390,10 @@ ORDER BY conkey, conname") as $row) {
|
|||||||
$drop = array();
|
$drop = array();
|
||||||
foreach ($alter as $val) {
|
foreach ($alter as $val) {
|
||||||
if ($val[0] != "INDEX") {
|
if ($val[0] != "INDEX") {
|
||||||
$create[] = ($val[2] == "DROP"
|
$create[] = ($val[2] ? "\nDROP CONSTRAINT " : "\nADD $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "")) . $val[1];
|
||||||
? "\nDROP CONSTRAINT " . idf_escape($val[1])
|
} elseif ($val[2]) {
|
||||||
: "\nADD $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "") . $val[2]
|
$drop[] = $val[1];
|
||||||
);
|
} elseif (!queries("CREATE INDEX " . idf_escape(uniqid($table . "_")) . " ON " . table($table) . " $val[1]")) {
|
||||||
} elseif ($val[2] == "DROP") {
|
|
||||||
$drop[] = idf_escape($val[1]);
|
|
||||||
} elseif (!queries("CREATE INDEX " . idf_escape($val[1] != "" ? $val[1] : uniqid($table . "_")) . " ON " . table($table) . " $val[2]")) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -444,16 +430,16 @@ ORDER BY conkey, conname") as $row) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function trigger($name) {
|
function trigger($name) {
|
||||||
if ($name == "") {
|
global $connection;
|
||||||
return array("Statement" => "EXECUTE PROCEDURE ()");
|
$result = $connection->query('SELECT trigger_name AS "Trigger", condition_timing AS "Timing", event_manipulation AS "Event", \'FOR EACH \' || action_orientation AS "Type", action_statement AS "Statement" FROM information_schema.triggers WHERE event_object_table = ' . $connection->quote($_GET["trigger"]) . ' AND trigger_name = ' . $connection->quote($name));
|
||||||
}
|
return $result->fetch_assoc();
|
||||||
$rows = get_rows('SELECT trigger_name AS "Trigger", condition_timing AS "Timing", event_manipulation AS "Event", \'FOR EACH \' || action_orientation AS "Type", action_statement AS "Statement" FROM information_schema.triggers WHERE event_object_table = ' . q($_GET["trigger"]) . ' AND trigger_name = ' . q($name));
|
|
||||||
return reset($rows);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function triggers($table) {
|
function triggers($table) {
|
||||||
|
global $connection;
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows("SELECT * FROM information_schema.triggers WHERE event_object_table = " . q($table)) as $row) {
|
$result = $connection->query("SELECT * FROM information_schema.triggers WHERE event_object_table = " . $connection->quote($table));
|
||||||
|
while ($row = $result->fetch_assoc()) {
|
||||||
$return[$row["trigger_name"]] = array($row["condition_timing"], $row["event_manipulation"]);
|
$return[$row["trigger_name"]] = array($row["condition_timing"], $row["event_manipulation"]);
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
@@ -466,32 +452,6 @@ ORDER BY conkey, conname") as $row) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
function routine($name, $type) {
|
|
||||||
//! there can be more functions with the same name differing only in parameters, it must be also passed to DROP FUNCTION
|
|
||||||
//! no procedures, only functions
|
|
||||||
//! different syntax of CREATE FUNCTION
|
|
||||||
$rows = get_rows('SELECT pg_catalog.format_type(p.prorettype, NULL) AS "returns", p.prosrc AS "definition"
|
|
||||||
FROM pg_catalog.pg_namespace n
|
|
||||||
JOIN pg_catalog.pg_proc p ON p.pronamespace = n.oid
|
|
||||||
WHERE n.nspname = current_schema() AND p.proname = ' . q($name));
|
|
||||||
$rows[0]["fields"] = array(); //!
|
|
||||||
return $rows[0];
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
function routines() {
|
|
||||||
return get_rows('SELECT p.proname AS "ROUTINE_NAME", p.proargtypes AS "ROUTINE_TYPE", pg_catalog.format_type(p.prorettype, NULL) AS "DTD_IDENTIFIER"
|
|
||||||
FROM pg_catalog.pg_namespace n
|
|
||||||
JOIN pg_catalog.pg_proc p ON p.pronamespace = n.oid
|
|
||||||
WHERE n.nspname = current_schema()
|
|
||||||
ORDER BY p.proname');
|
|
||||||
}
|
|
||||||
|
|
||||||
function routine_languages() {
|
|
||||||
return get_vals("SELECT langname FROM pg_catalog.pg_language");
|
|
||||||
}
|
|
||||||
|
|
||||||
function begin() {
|
function begin() {
|
||||||
return queries("BEGIN");
|
return queries("BEGIN");
|
||||||
}
|
}
|
||||||
@@ -500,21 +460,6 @@ ORDER BY p.proname');
|
|||||||
return queries("INSERT INTO " . table($table) . ($set ? " (" . implode(", ", array_keys($set)) . ")\nVALUES (" . implode(", ", $set) . ")" : "DEFAULT VALUES"));
|
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
|
||||||
}
|
}
|
||||||
@@ -523,29 +468,8 @@ ORDER BY p.proname');
|
|||||||
return $connection->query("EXPLAIN $query");
|
return $connection->query("EXPLAIN $query");
|
||||||
}
|
}
|
||||||
|
|
||||||
function found_rows($table_status, $where) {
|
|
||||||
global $connection;
|
|
||||||
if (ereg(
|
|
||||||
" rows=([0-9]+)",
|
|
||||||
$connection->result("EXPLAIN SELECT * FROM " . idf_escape($table_status["Name"]) . ($where ? " WHERE " . implode(" AND ", $where) : "")),
|
|
||||||
$regs
|
|
||||||
)) {
|
|
||||||
return $regs[1];
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function types() {
|
|
||||||
return get_vals("SELECT typname
|
|
||||||
FROM pg_type
|
|
||||||
WHERE typnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema())
|
|
||||||
AND typtype IN ('b','d','e')
|
|
||||||
AND typelem = 0"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function schemas() {
|
function schemas() {
|
||||||
return get_vals("SELECT nspname FROM pg_namespace ORDER BY nspname");
|
return get_vals("SELECT nspname FROM pg_namespace");
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_schema() {
|
function get_schema() {
|
||||||
@@ -554,15 +478,8 @@ AND typelem = 0"
|
|||||||
}
|
}
|
||||||
|
|
||||||
function set_schema($schema) {
|
function set_schema($schema) {
|
||||||
global $connection, $types, $structured_types;
|
global $connection;
|
||||||
$return = $connection->query("SET search_path TO " . idf_escape($schema));
|
return $connection->query("SET search_path TO " . idf_escape($schema));
|
||||||
foreach (types() as $type) { //! get types from current_schemas('t')
|
|
||||||
if (!isset($types[$type])) {
|
|
||||||
$types[$type] = 0;
|
|
||||||
$structured_types[lang('User types')][] = $type;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function use_sql($database) {
|
function use_sql($database) {
|
||||||
@@ -572,24 +489,9 @@ AND typelem = 0"
|
|||||||
function show_variables() {
|
function show_variables() {
|
||||||
return get_key_vals("SHOW ALL");
|
return get_key_vals("SHOW ALL");
|
||||||
}
|
}
|
||||||
|
|
||||||
function process_list() {
|
|
||||||
global $connection;
|
|
||||||
return get_rows("SELECT * FROM pg_stat_activity ORDER BY " . ($connection->server_info < 9.2 ? "procpid" : "pid"));
|
|
||||||
}
|
|
||||||
|
|
||||||
function show_status() {
|
|
||||||
}
|
|
||||||
|
|
||||||
function convert_field($field) {
|
|
||||||
}
|
|
||||||
|
|
||||||
function unconvert_field($field, $return) {
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function support($feature) {
|
function support($feature) {
|
||||||
return ereg('^(comment|view|scheme|processlist|sequence|trigger|type|variables|drop_col)$', $feature); //! routine|
|
return ereg('^(comment|view|scheme|sequence|trigger|variables|drop_col)$', $feature); //! routine|
|
||||||
}
|
}
|
||||||
|
|
||||||
$jush = "pgsql";
|
$jush = "pgsql";
|
||||||
@@ -597,17 +499,17 @@ AND typelem = 0"
|
|||||||
$structured_types = array();
|
$structured_types = array();
|
||||||
foreach (array( //! arrays
|
foreach (array( //! arrays
|
||||||
lang('Numbers') => array("smallint" => 5, "integer" => 10, "bigint" => 19, "boolean" => 1, "numeric" => 0, "real" => 7, "double precision" => 16, "money" => 20),
|
lang('Numbers') => array("smallint" => 5, "integer" => 10, "bigint" => 19, "boolean" => 1, "numeric" => 0, "real" => 7, "double precision" => 16, "money" => 20),
|
||||||
lang('Date and time') => array("date" => 13, "time" => 17, "timestamp" => 20, "timestamptz" => 21, "interval" => 0),
|
lang('Date and time') => array("date" => 13, "time" => 17, "timestamp" => 20, "interval" => 0),
|
||||||
lang('Strings') => array("character" => 0, "character varying" => 0, "text" => 0, "tsquery" => 0, "tsvector" => 0, "uuid" => 0, "xml" => 0),
|
lang('Strings') => array("character" => 0, "character varying" => 0, "text" => 0, "tsquery" => 0, "tsvector" => 0, "uuid" => 0, "xml" => 0),
|
||||||
lang('Binary') => array("bit" => 0, "bit varying" => 0, "bytea" => 0),
|
lang('Binary') => array("bit" => 0, "bit varying" => 0, "bytea" => 0),
|
||||||
lang('Network') => array("cidr" => 43, "inet" => 43, "macaddr" => 17, "txid_snapshot" => 0),
|
lang('Network') => array("cidr" => 43, "inet" => 43, "macaddr" => 17, "txid_snapshot" => 0),
|
||||||
lang('Geometry') => array("box" => 0, "circle" => 0, "line" => 0, "lseg" => 0, "path" => 0, "point" => 0, "polygon" => 0),
|
lang('Geometry') => array("box" => 0, "circle" => 0, "line" => 0, "lseg" => 0, "path" => 0, "point" => 0, "polygon" => 0),
|
||||||
) as $key => $val) { //! can be retrieved from pg_type
|
) as $key => $val) {
|
||||||
$types += $val;
|
$types += $val;
|
||||||
$structured_types[$key] = array_keys($val);
|
$structured_types[$key] = array_keys($val);
|
||||||
}
|
}
|
||||||
$unsigned = array();
|
$unsigned = array();
|
||||||
$operators = array("=", "<", ">", "<=", ">=", "!=", "~", "!~", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL"); // no "" to avoid SQL injection
|
$operators = array("=", "<", ">", "<=", ">=", "!=", "~", "!~", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL");
|
||||||
$functions = array("char_length", "lower", "round", "to_hex", "to_timestamp", "upper");
|
$functions = array("char_length", "lower", "round", "to_hex", "to_timestamp", "upper");
|
||||||
$grouping = array("avg", "count", "count distinct", "max", "min", "sum");
|
$grouping = array("avg", "count", "count distinct", "max", "min", "sum");
|
||||||
$edit_functions = array(
|
$edit_functions = array(
|
||||||
|
|||||||
@@ -1,88 +1,18 @@
|
|||||||
<?php
|
<?php
|
||||||
$drivers["sqlite"] = "SQLite 3";
|
$possible_drivers[] = "SQLite";
|
||||||
$drivers["sqlite2"] = "SQLite 2";
|
$possible_drivers[] = "SQLite3";
|
||||||
|
$possible_drivers[] = "PDO_SQLite";
|
||||||
|
if (extension_loaded("sqlite3") || extension_loaded("pdo_sqlite")) {
|
||||||
|
$drivers["sqlite"] = "SQLite 3";
|
||||||
|
}
|
||||||
|
if (extension_loaded("sqlite") || extension_loaded("pdo_sqlite")) {
|
||||||
|
$drivers["sqlite2"] = "SQLite 2";
|
||||||
|
}
|
||||||
|
|
||||||
if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||||
$possible_drivers = array((isset($_GET["sqlite"]) ? "SQLite3" : "SQLite"), "PDO_SQLite");
|
|
||||||
define("DRIVER", (isset($_GET["sqlite"]) ? "sqlite" : "sqlite2"));
|
define("DRIVER", (isset($_GET["sqlite"]) ? "sqlite" : "sqlite2"));
|
||||||
if (class_exists(isset($_GET["sqlite"]) ? "SQLite3" : "SQLiteDatabase")) {
|
if (extension_loaded(isset($_GET["sqlite2"]) ? "sqlite" : "sqlite3")) {
|
||||||
if (isset($_GET["sqlite"])) {
|
if (isset($_GET["sqlite2"])) {
|
||||||
|
|
||||||
class Min_SQLite {
|
|
||||||
var $extension = "SQLite3", $server_info, $affected_rows, $errno, $error, $_link;
|
|
||||||
|
|
||||||
function Min_SQLite($filename) {
|
|
||||||
$this->_link = new SQLite3($filename);
|
|
||||||
$version = $this->_link->version();
|
|
||||||
$this->server_info = $version["versionString"];
|
|
||||||
}
|
|
||||||
|
|
||||||
function query($query) {
|
|
||||||
$result = @$this->_link->query($query);
|
|
||||||
$this->error = "";
|
|
||||||
if (!$result) {
|
|
||||||
$this->errno = $this->_link->lastErrorCode();
|
|
||||||
$this->error = $this->_link->lastErrorMsg();
|
|
||||||
return false;
|
|
||||||
} elseif ($result->numColumns()) {
|
|
||||||
return new Min_Result($result);
|
|
||||||
}
|
|
||||||
$this->affected_rows = $this->_link->changes();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function quote($string) {
|
|
||||||
return (is_utf8($string)
|
|
||||||
? "'" . $this->_link->escapeString($string) . "'"
|
|
||||||
: "x'" . reset(unpack('H*', $string)) . "'"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function store_result() {
|
|
||||||
return $this->_result;
|
|
||||||
}
|
|
||||||
|
|
||||||
function result($query, $field = 0) {
|
|
||||||
$result = $this->query($query);
|
|
||||||
if (!is_object($result)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$row = $result->_result->fetchArray();
|
|
||||||
return $row[$field];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class Min_Result {
|
|
||||||
var $_result, $_offset = 0, $num_rows;
|
|
||||||
|
|
||||||
function Min_Result($result) {
|
|
||||||
$this->_result = $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetch_assoc() {
|
|
||||||
return $this->_result->fetchArray(SQLITE3_ASSOC);
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetch_row() {
|
|
||||||
return $this->_result->fetchArray(SQLITE3_NUM);
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetch_field() {
|
|
||||||
$column = $this->_offset++;
|
|
||||||
$type = $this->_result->columnType($column);
|
|
||||||
return (object) array(
|
|
||||||
"name" => $this->_result->columnName($column),
|
|
||||||
"type" => $type,
|
|
||||||
"charsetnr" => ($type == SQLITE3_BLOB ? 63 : 0), // 63 - binary
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function __desctruct() {
|
|
||||||
return $this->_result->finalize();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
class Min_SQLite {
|
class Min_SQLite {
|
||||||
var $extension = "SQLite", $server_info, $affected_rows, $error, $_link;
|
var $extension = "SQLite", $server_info, $affected_rows, $error, $_link;
|
||||||
@@ -95,7 +25,6 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
function query($query, $unbuffered = false) {
|
function query($query, $unbuffered = false) {
|
||||||
$method = ($unbuffered ? "unbufferedQuery" : "query");
|
$method = ($unbuffered ? "unbufferedQuery" : "query");
|
||||||
$result = @$this->_link->$method($query, SQLITE_BOTH, $error);
|
$result = @$this->_link->$method($query, SQLITE_BOTH, $error);
|
||||||
$this->error = "";
|
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
$this->error = $error;
|
$this->error = $error;
|
||||||
return false;
|
return false;
|
||||||
@@ -110,10 +39,6 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
return "'" . sqlite_escape_string($string) . "'";
|
return "'" . sqlite_escape_string($string) . "'";
|
||||||
}
|
}
|
||||||
|
|
||||||
function store_result() {
|
|
||||||
return $this->_result;
|
|
||||||
}
|
|
||||||
|
|
||||||
function result($query, $field = 0) {
|
function result($query, $field = 0) {
|
||||||
$result = $this->query($query);
|
$result = $this->query($query);
|
||||||
if (!is_object($result)) {
|
if (!is_object($result)) {
|
||||||
@@ -166,6 +91,74 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
class Min_SQLite {
|
||||||
|
var $extension = "SQLite3", $server_info, $affected_rows, $error, $_link;
|
||||||
|
|
||||||
|
function Min_SQLite($filename) {
|
||||||
|
$this->_link = new SQLite3($filename);
|
||||||
|
$version = $this->_link->version();
|
||||||
|
$this->server_info = $version["versionString"];
|
||||||
|
}
|
||||||
|
|
||||||
|
function query($query) {
|
||||||
|
$result = @$this->_link->query($query);
|
||||||
|
if (!$result) {
|
||||||
|
$this->error = $this->_link->lastErrorMsg();
|
||||||
|
return false;
|
||||||
|
} elseif ($result->numColumns()) {
|
||||||
|
return new Min_Result($result);
|
||||||
|
}
|
||||||
|
$this->affected_rows = $this->_link->changes();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function quote($string) {
|
||||||
|
return "'" . $this->_link->escapeString($string) . "'";
|
||||||
|
}
|
||||||
|
|
||||||
|
function result($query, $field = 0) {
|
||||||
|
$result = $this->query($query);
|
||||||
|
if (!is_object($result)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$row = $result->_result->fetchArray();
|
||||||
|
return $row[$field];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Min_Result {
|
||||||
|
var $_result, $_offset = 0, $num_rows;
|
||||||
|
|
||||||
|
function Min_Result($result) {
|
||||||
|
$this->_result = $result;
|
||||||
|
$this->num_rows = 1; //!
|
||||||
|
}
|
||||||
|
|
||||||
|
function fetch_assoc() {
|
||||||
|
return $this->_result->fetchArray(SQLITE3_ASSOC);
|
||||||
|
}
|
||||||
|
|
||||||
|
function fetch_row() {
|
||||||
|
return $this->_result->fetchArray(SQLITE3_NUM);
|
||||||
|
}
|
||||||
|
|
||||||
|
function fetch_field() {
|
||||||
|
$column = $this->_offset++;
|
||||||
|
$type = $this->_result->columnType($column);
|
||||||
|
return (object) array(
|
||||||
|
"name" => $this->_result->columnName($column),
|
||||||
|
"type" => $type,
|
||||||
|
"charsetnr" => ($type == SQLITE3_BLOB ? 63 : 0), // 63 - binary
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function __desctruct() {
|
||||||
|
return $this->_result->finalize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} elseif (extension_loaded("pdo_sqlite")) {
|
} elseif (extension_loaded("pdo_sqlite")) {
|
||||||
@@ -179,28 +172,30 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (class_exists("Min_SQLite")) {
|
class Min_DB extends Min_SQLite {
|
||||||
class Min_DB extends Min_SQLite {
|
|
||||||
|
function Min_DB() {
|
||||||
function Min_DB() {
|
$this->Min_SQLite(":memory:");
|
||||||
$this->Min_SQLite(":memory:");
|
}
|
||||||
}
|
|
||||||
|
function select_db($filename) {
|
||||||
function select_db($filename) {
|
if (is_readable($filename) && $this->query("ATTACH " . $this->quote(ereg("(^[/\\]|:)", $filename) ? $filename : dirname($_SERVER["SCRIPT_FILENAME"]) . "/$filename") . " AS a")) { // is_readable - SQLite 3
|
||||||
if (is_readable($filename) && $this->query("ATTACH " . $this->quote(ereg("(^[/\\\\]|:)", $filename) ? $filename : dirname($_SERVER["SCRIPT_FILENAME"]) . "/$filename") . " AS a")) { // is_readable - SQLite 3
|
$this->Min_SQLite($filename);
|
||||||
$this->Min_SQLite($filename);
|
return true;
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function multi_query($query) {
|
|
||||||
return $this->_result = $this->query($query);
|
|
||||||
}
|
|
||||||
|
|
||||||
function next_result() {
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function multi_query($query) {
|
||||||
|
return $this->_result = $this->query($query);
|
||||||
|
}
|
||||||
|
|
||||||
|
function store_result() {
|
||||||
|
return $this->_result;
|
||||||
|
}
|
||||||
|
|
||||||
|
function next_result() {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -221,7 +216,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
|
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
|
||||||
return " $query$where" . ($limit !== null ? $separator . "LIMIT $limit" . ($offset ? " OFFSET $offset" : "") : "");
|
return " $query$where" . (isset($limit) ? $separator . "LIMIT $limit" . ($offset ? " OFFSET $offset" : "") : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
function limit1($query, $where) {
|
function limit1($query, $where) {
|
||||||
@@ -243,7 +238,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function tables_list() {
|
function tables_list() {
|
||||||
return get_key_vals("SELECT name, type FROM sqlite_master WHERE type IN ('table', 'view') ORDER BY (name = 'sqlite_sequence'), name", 1);
|
return get_key_vals("SELECT name, type FROM sqlite_master WHERE type IN ('table', 'view')", 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
function count_tables($databases) {
|
function count_tables($databases) {
|
||||||
@@ -253,47 +248,50 @@ 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) : "")) as $row) {
|
$result = $connection->query("SELECT name AS Name, type AS Engine FROM sqlite_master WHERE type IN ('table', 'view')" . ($name != "" ? " AND name = " . $connection->quote($name) : ""));
|
||||||
$row["Oid"] = "t";
|
while ($row = $result->fetch_assoc()) {
|
||||||
$row["Auto_increment"] = "";
|
$row["Auto_increment"] = "";
|
||||||
$row["Rows"] = $connection->result("SELECT COUNT(*) FROM " . idf_escape($row["Name"]));
|
|
||||||
$return[$row["Name"]] = $row;
|
$return[$row["Name"]] = $row;
|
||||||
}
|
}
|
||||||
foreach (get_rows("SELECT * FROM sqlite_sequence", null, "") as $row) {
|
$result = $connection->query("SELECT * FROM sqlite_sequence");
|
||||||
$return[$row["name"]]["Auto_increment"] = $row["seq"];
|
if ($result) {
|
||||||
|
while ($row = $result->fetch_assoc()) {
|
||||||
|
$return[$row["name"]]["Auto_increment"] = $row["seq"];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return ($name != "" ? $return[$name] : $return);
|
return ($name != "" ? $return[$name] : $return);
|
||||||
}
|
}
|
||||||
|
|
||||||
function is_view($table_status) {
|
|
||||||
return $table_status["Engine"] == "view";
|
|
||||||
}
|
|
||||||
|
|
||||||
function fk_support($table_status) {
|
function fk_support($table_status) {
|
||||||
global $connection;
|
global $connection;
|
||||||
return !$connection->result("SELECT sqlite_compileoption_used('OMIT_FOREIGN_KEY')");
|
return !$connection->result("SELECT sqlite_compileoption_used('OMIT_FOREIGN_KEY')");
|
||||||
}
|
}
|
||||||
|
|
||||||
function fields($table) {
|
function fields($table) {
|
||||||
|
global $connection;
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows("PRAGMA table_info(" . table($table) . ")") as $row) {
|
$result = $connection->query("PRAGMA table_info(" . table($table) . ")");
|
||||||
$type = strtolower($row["type"]);
|
if (is_object($result)) {
|
||||||
$default = $row["dflt_value"];
|
while ($row = $result->fetch_assoc()) {
|
||||||
$return[$row["name"]] = array(
|
$type = strtolower($row["type"]);
|
||||||
"field" => $row["name"],
|
$return[$row["name"]] = array(
|
||||||
"type" => (eregi("int", $type) ? "integer" : (eregi("char|clob|text", $type) ? "text" : (eregi("blob", $type) ? "blob" : (eregi("real|floa|doub", $type) ? "real" : "numeric")))),
|
"field" => $row["name"],
|
||||||
"full_type" => $type,
|
"type" => (eregi("int", $type) ? "integer" : (eregi("char|clob|text", $type) ? "text" : (eregi("blob", $type) ? "blob" : (eregi("real|floa|doub", $type) ? "real" : "numeric")))),
|
||||||
"default" => (ereg("'(.*)'", $default, $match) ? str_replace("''", "'", $match[1]) : ($default == "NULL" ? null : $default)),
|
"full_type" => $type,
|
||||||
"null" => !$row["notnull"],
|
"default" => $row["dflt_value"],
|
||||||
"auto_increment" => eregi('^integer$', $type) && $row["pk"], //! possible false positive
|
"null" => !$row["notnull"],
|
||||||
"privileges" => array("select" => 1, "insert" => 1, "update" => 1),
|
"auto_increment" => eregi('^integer$', $type) && $row["pk"], //! possible false positive
|
||||||
"primary" => $row["pk"],
|
"collation" => null, //!
|
||||||
);
|
"privileges" => array("select" => 1, "insert" => 1, "update" => 1),
|
||||||
|
"primary" => $row["pk"],
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function indexes($table, $connection2 = null) {
|
function indexes($table, $connection2 = null) {
|
||||||
|
global $connection;
|
||||||
$return = array();
|
$return = array();
|
||||||
$primary = array();
|
$primary = array();
|
||||||
foreach (fields($table) as $field) {
|
foreach (fields($table) as $field) {
|
||||||
@@ -304,11 +302,13 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
if ($primary) {
|
if ($primary) {
|
||||||
$return[""] = array("type" => "PRIMARY", "columns" => $primary, "lengths" => array());
|
$return[""] = array("type" => "PRIMARY", "columns" => $primary, "lengths" => array());
|
||||||
}
|
}
|
||||||
foreach (get_rows("PRAGMA index_list(" . table($table) . ")") as $row) {
|
$result = $connection->query("PRAGMA index_list(" . table($table) . ")");
|
||||||
if (!ereg("^sqlite_", $row["name"])) {
|
if (is_object($result)) {
|
||||||
|
while ($row = $result->fetch_assoc()) {
|
||||||
$return[$row["name"]]["type"] = ($row["unique"] ? "UNIQUE" : "INDEX");
|
$return[$row["name"]]["type"] = ($row["unique"] ? "UNIQUE" : "INDEX");
|
||||||
$return[$row["name"]]["lengths"] = array();
|
$return[$row["name"]]["lengths"] = array();
|
||||||
foreach (get_rows("PRAGMA index_info(" . idf_escape($row["name"]) . ")") as $row1) {
|
$result1 = $connection->query("PRAGMA index_info(" . idf_escape($row["name"]) . ")");
|
||||||
|
while ($row1 = $result1->fetch_assoc()) {
|
||||||
$return[$row["name"]]["columns"][] = $row1["name"];
|
$return[$row["name"]]["columns"][] = $row1["name"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -317,22 +317,26 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function foreign_keys($table) {
|
function foreign_keys($table) {
|
||||||
|
global $connection;
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows("PRAGMA foreign_key_list(" . table($table) . ")") as $row) {
|
$result = $connection->query("PRAGMA foreign_key_list(" . table($table) . ")");
|
||||||
$foreign_key = &$return[$row["id"]];
|
if (is_object($result)) {
|
||||||
//! idf_unescape in SQLite2
|
while ($row = $result->fetch_assoc()) {
|
||||||
if (!$foreign_key) {
|
$foreign_key = &$return[$row["id"]];
|
||||||
$foreign_key = $row;
|
//! idf_unescape in SQLite2
|
||||||
|
if (!$foreign_key) {
|
||||||
|
$foreign_key = $row;
|
||||||
|
}
|
||||||
|
$foreign_key["source"][] = $row["from"];
|
||||||
|
$foreign_key["target"][] = $row["to"];
|
||||||
}
|
}
|
||||||
$foreign_key["source"][] = $row["from"];
|
|
||||||
$foreign_key["target"][] = $row["to"];
|
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function view($name) {
|
function view($name) {
|
||||||
global $connection;
|
global $connection;
|
||||||
return array("select" => preg_replace('~^(?:[^`"[]+|`[^`]*`|"[^"]*")* AS\\s+~iU', '', $connection->result("SELECT sql FROM sqlite_master WHERE name = " . q($name)))); //! identifiers may be inside []
|
return array("select" => preg_replace('~^(?:[^`"[]+|`[^`]*`|"[^"]*")* AS\\s+~iU', '', $connection->result("SELECT sql FROM sqlite_master WHERE name = " . $connection->quote($name)))); //! identifiers may be inside []
|
||||||
}
|
}
|
||||||
|
|
||||||
function collations() {
|
function collations() {
|
||||||
@@ -349,29 +353,16 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function exact_value($val) {
|
function exact_value($val) {
|
||||||
return q($val);
|
|
||||||
}
|
|
||||||
|
|
||||||
function check_sqlite_name($name) {
|
|
||||||
// avoid creating PHP files on unsecured servers
|
|
||||||
global $connection;
|
global $connection;
|
||||||
$extensions = "db|sdb|sqlite";
|
return $connection->quote($val);
|
||||||
if (!preg_match("~^[^\\0]*\\.($extensions)\$~", $name)) {
|
|
||||||
$connection->error = lang('Please use one of the extensions %s.', str_replace("|", ", ", $extensions));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function create_database($db, $collation) {
|
function create_database($db, $collation) {
|
||||||
global $connection;
|
global $connection;
|
||||||
if (file_exists($db)) {
|
if (file_exists($db)) {
|
||||||
$connection->error = lang('File exists.');
|
$connection->error = lang('File exists.');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!check_sqlite_name($db)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$link = new Min_SQLite($db); //! exception handler
|
$link = new Min_SQLite($db); //! exception handler
|
||||||
$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
|
||||||
@@ -393,9 +384,6 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
|
|
||||||
function rename_database($name, $collation) {
|
function rename_database($name, $collation) {
|
||||||
global $connection;
|
global $connection;
|
||||||
if (!check_sqlite_name($name)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$connection->Min_SQLite(":memory:");
|
$connection->Min_SQLite(":memory:");
|
||||||
$connection->error = lang('File exists.');
|
$connection->error = lang('File exists.');
|
||||||
return @rename(DB, $name);
|
return @rename(DB, $name);
|
||||||
@@ -406,90 +394,15 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
|
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
|
||||||
$use_all_fields = ($table == "" || $foreign);
|
global $connection;
|
||||||
foreach ($fields as $field) {
|
|
||||||
if ($field[0] != "" || !$field[1] || $field[2]) {
|
|
||||||
$use_all_fields = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$alter = array();
|
$alter = array();
|
||||||
$originals = array();
|
|
||||||
$primary_key = false;
|
|
||||||
foreach ($fields as $field) {
|
foreach ($fields as $field) {
|
||||||
if ($field[1]) {
|
if ($field[1]) {
|
||||||
if ($field[1][6]) {
|
$alter[] = ($table != "" && $field[0] == "" ? "ADD " : " ") . implode($field[1]);
|
||||||
$primary_key = true;
|
|
||||||
}
|
|
||||||
$alter[] = ($use_all_fields ? " " : "ADD ") . implode($field[1]);
|
|
||||||
if ($field[0] != "") {
|
|
||||||
$originals[$field[0]] = $field[1][0];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($use_all_fields) {
|
$alter = array_merge($alter, $foreign);
|
||||||
if ($table != "") {
|
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;
|
||||||
@@ -498,27 +411,18 @@ 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 (!queries("CREATE TABLE " . table($name) . " (\n" . implode(",\n", $alter) . "\n)")) {
|
||||||
|
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 = " . $connection->quote($name)); // ignores error
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function index_sql($table, $type, $name, $columns) {
|
|
||||||
return "CREATE $type " . ($type != "INDEX" ? "INDEX " : "")
|
|
||||||
. idf_escape($name != "" ? $name : uniqid($table . "_"))
|
|
||||||
. " ON " . table($table)
|
|
||||||
. " $columns"
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
function alter_indexes($table, $alter) {
|
function alter_indexes($table, $alter) {
|
||||||
foreach ($alter as $val) {
|
foreach ($alter as $val) {
|
||||||
if (!queries($val[2] == "DROP"
|
if (!queries(($val[2] ? "DROP INDEX" : "CREATE" . ($val[0] != "INDEX" ? " UNIQUE" : "") . " INDEX " . idf_escape(uniqid($table . "_")) . " ON " . table($table)) . " $val[1]")) { //! primary key must be created in CREATE TABLE
|
||||||
? "DROP INDEX " . idf_escape($val[1])
|
|
||||||
: index_sql($table, $val[0], $val[1], $val[2])
|
|
||||||
)) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -543,16 +447,15 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
|
|
||||||
function trigger($name) {
|
function trigger($name) {
|
||||||
global $connection;
|
global $connection;
|
||||||
if ($name == "") {
|
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 = " . $connection->quote($name)), $match);
|
||||||
return array("Statement" => "BEGIN\n\t;\nEND");
|
|
||||||
}
|
|
||||||
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);
|
|
||||||
return array("Timing" => strtoupper($match[1]), "Event" => strtoupper($match[2]), "Trigger" => $name, "Statement" => $match[3]);
|
return array("Timing" => strtoupper($match[1]), "Event" => strtoupper($match[2]), "Trigger" => $name, "Statement" => $match[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
function triggers($table) {
|
function triggers($table) {
|
||||||
|
global $connection;
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows("SELECT * FROM sqlite_master WHERE type = 'trigger' AND tbl_name = " . q($table)) as $row) {
|
$result = $connection->query("SELECT * FROM sqlite_master WHERE type = 'trigger' AND tbl_name = " . $connection->quote($table));
|
||||||
|
while ($row = $result->fetch_assoc()) {
|
||||||
preg_match('~^CREATE\\s+TRIGGER\\s*(?:[^`"\\s]+|`[^`]*`|"[^"]*")+\\s*([a-z]+)\\s*([a-z]+)~i', $row["sql"], $match);
|
preg_match('~^CREATE\\s+TRIGGER\\s*(?:[^`"\\s]+|`[^`]*`|"[^"]*")+\\s*([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]);
|
||||||
}
|
}
|
||||||
@@ -574,10 +477,6 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
// not supported by SQLite
|
// not supported by SQLite
|
||||||
}
|
}
|
||||||
|
|
||||||
function routine_languages() {
|
|
||||||
// not supported by SQLite
|
|
||||||
}
|
|
||||||
|
|
||||||
function begin() {
|
function begin() {
|
||||||
return queries("BEGIN");
|
return queries("BEGIN");
|
||||||
}
|
}
|
||||||
@@ -586,10 +485,6 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
return queries("INSERT INTO " . table($table) . ($set ? " (" . implode(", ", array_keys($set)) . ")\nVALUES (" . implode(", ", $set) . ")" : "DEFAULT VALUES"));
|
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()");
|
||||||
@@ -599,13 +494,6 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
return $connection->query("EXPLAIN $query");
|
return $connection->query("EXPLAIN $query");
|
||||||
}
|
}
|
||||||
|
|
||||||
function found_rows($table_status, $where) {
|
|
||||||
}
|
|
||||||
|
|
||||||
function types() {
|
|
||||||
return array();
|
|
||||||
}
|
|
||||||
|
|
||||||
function schemas() {
|
function schemas() {
|
||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
@@ -618,27 +506,19 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function create_sql($table, $auto_increment) {
|
function create_sql($table) {
|
||||||
global $connection;
|
global $connection;
|
||||||
$return = $connection->result("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = " . q($table));
|
return $connection->result("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = " . $connection->quote($table));
|
||||||
foreach (indexes($table) as $name => $index) {
|
|
||||||
if ($name == '') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$return .= ";\n\n" . index_sql($table, $index['type'], $name, "(" . implode(", ", array_map('idf_escape', $index['columns'])) . ")");
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function truncate_sql($table) {
|
|
||||||
return "DELETE FROM " . table($table);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function use_sql($database) {
|
function use_sql($database) {
|
||||||
|
global $connection;
|
||||||
|
return "ATTACH " . $connection->quote($database) . " AS " . idf_escape($database);
|
||||||
}
|
}
|
||||||
|
|
||||||
function trigger_sql($table, $style) {
|
function trigger_sql($table, $style) {
|
||||||
return implode(get_vals("SELECT sql || ';;\n' FROM sqlite_master WHERE type = 'trigger' AND tbl_name = " . q($table)));
|
global $connection;
|
||||||
|
return implode(get_vals("SELECT sql || ';;\n' FROM sqlite_master WHERE type = 'trigger' AND name = " . $connection->quote($table)));
|
||||||
}
|
}
|
||||||
|
|
||||||
function show_variables() {
|
function show_variables() {
|
||||||
@@ -659,22 +539,15 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function convert_field($field) {
|
|
||||||
}
|
|
||||||
|
|
||||||
function unconvert_field($field, $return) {
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function support($feature) {
|
function support($feature) {
|
||||||
return ereg('^(view|trigger|variables|status|dump|move_col|drop_col)$', $feature);
|
return ereg('^(view|trigger|variables|status)$', $feature);
|
||||||
}
|
}
|
||||||
|
|
||||||
$jush = "sqlite";
|
$jush = "sqlite";
|
||||||
$types = array("integer" => 0, "real" => 0, "numeric" => 0, "text" => 0, "blob" => 0);
|
$types = array("integer" => 0, "real" => 0, "numeric" => 0, "text" => 0, "blob" => 0);
|
||||||
$structured_types = array_keys($types);
|
$structured_types = array_keys($types);
|
||||||
$unsigned = array();
|
$unsigned = array();
|
||||||
$operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL", ""); // REGEXP can be user defined function
|
$operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL"); // REGEXP can be user defined function
|
||||||
$functions = array("hex", "length", "lower", "round", "unixepoch", "upper");
|
$functions = array("hex", "length", "lower", "round", "unixepoch", "upper");
|
||||||
$grouping = array("avg", "count", "count distinct", "group_concat", "max", "min", "sum");
|
$grouping = array("avg", "count", "count distinct", "group_concat", "max", "min", "sum");
|
||||||
$edit_functions = array(
|
$edit_functions = array(
|
||||||
|
|||||||
@@ -1,25 +1,21 @@
|
|||||||
<?php
|
<?php
|
||||||
$TABLE = $_GET["dump"];
|
$TABLE = $_GET["dump"];
|
||||||
|
|
||||||
if ($_POST && !$error) {
|
if ($_POST) {
|
||||||
$cookie = "";
|
$cookie = "";
|
||||||
foreach (array("output", "format", "db_style", "routines", "events", "table_style", "auto_increment", "triggers", "data_style") as $key) {
|
foreach (array("output", "format", "db_style", "table_style", "data_style") as $key) {
|
||||||
$cookie .= "&$key=" . urlencode($_POST[$key]);
|
$cookie .= "&$key=" . urlencode($_POST[$key]);
|
||||||
}
|
}
|
||||||
cookie("adminer_export", substr($cookie, 1));
|
cookie("adminer_export", substr($cookie, 1));
|
||||||
$tables = array_flip((array) $_POST["tables"]) + array_flip((array) $_POST["data"]);
|
$ext = dump_headers(($TABLE != "" ? $TABLE : DB), (DB == "" || count((array) $_POST["tables"] + (array) $_POST["data"]) > 1));
|
||||||
$ext = dump_headers(
|
if ($_POST["format"] == "sql") {
|
||||||
(count($tables) == 1 ? key($tables) : DB),
|
|
||||||
(DB == "" || count($tables) > 1));
|
|
||||||
$is_sql = ereg('sql', $_POST["format"]);
|
|
||||||
if ($is_sql) {
|
|
||||||
echo "-- Adminer $VERSION " . $drivers[DRIVER] . " dump
|
echo "-- Adminer $VERSION " . $drivers[DRIVER] . " dump
|
||||||
|
|
||||||
" . ($jush != "sql" ? "" : "SET NAMES utf8;
|
" . ($jush != "sql" ? "" : "SET NAMES utf8;
|
||||||
" . ($_POST["data_style"] ? "SET foreign_key_checks = 0;
|
SET foreign_key_checks = 0;
|
||||||
SET time_zone = " . q(substr(preg_replace('~^[^-]~', '+\0', $connection->result("SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP)")), 0, 6)) . ";
|
SET time_zone = " . $connection->quote($connection->result("SELECT @@time_zone")) . ";
|
||||||
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
|
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
|
||||||
" : "") . "
|
|
||||||
");
|
");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -32,31 +28,37 @@ SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach ((array) $databases as $db) {
|
foreach ((array) $databases as $db) {
|
||||||
$adminer->dumpDatabase($db);
|
|
||||||
if ($connection->select_db($db)) {
|
if ($connection->select_db($db)) {
|
||||||
if ($is_sql && ereg('CREATE', $style) && ($create = $connection->result("SHOW CREATE DATABASE " . idf_escape($db), 1))) {
|
if ($_POST["format"] == "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";
|
||||||
}
|
}
|
||||||
echo "$create;\n";
|
echo ($style == "CREATE+ALTER" ? preg_replace('~^CREATE DATABASE ~', '\\0IF NOT EXISTS ', $create) : $create) . ";\n";
|
||||||
}
|
}
|
||||||
if ($is_sql) {
|
if ($_POST["format"] == "sql") {
|
||||||
if ($style) {
|
if ($style) {
|
||||||
echo use_sql($db) . ";\n\n";
|
echo use_sql($db) . ";\n\n";
|
||||||
}
|
}
|
||||||
|
if (in_array("CREATE+ALTER", array($style, $_POST["table_style"]))) {
|
||||||
|
echo "SET @adminer_alter = '';\n\n";
|
||||||
|
}
|
||||||
$out = "";
|
$out = "";
|
||||||
if ($_POST["routines"]) {
|
if ($_POST["routines"]) {
|
||||||
foreach (array("FUNCTION", "PROCEDURE") as $routine) {
|
foreach (array("FUNCTION", "PROCEDURE") as $routine) {
|
||||||
foreach (get_rows("SHOW $routine STATUS WHERE Db = " . q($db), null, "-- ") as $row) {
|
$result = $connection->query("SHOW $routine STATUS WHERE Db = " . $connection->quote($db));
|
||||||
|
while ($row = $result->fetch_assoc()) {
|
||||||
$out .= ($style != 'DROP+CREATE' ? "DROP $routine IF EXISTS " . idf_escape($row["Name"]) . ";;\n" : "")
|
$out .= ($style != 'DROP+CREATE' ? "DROP $routine IF EXISTS " . idf_escape($row["Name"]) . ";;\n" : "")
|
||||||
. remove_definer($connection->result("SHOW CREATE $routine " . idf_escape($row["Name"]), 2)) . ";;\n\n";
|
. $connection->result("SHOW CREATE $routine " . idf_escape($row["Name"]), 2) . ";;\n\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($_POST["events"]) {
|
if ($_POST["events"]) {
|
||||||
foreach (get_rows("SHOW EVENTS", null, "-- ") as $row) {
|
$result = $connection->query("SHOW EVENTS");
|
||||||
$out .= ($style != 'DROP+CREATE' ? "DROP EVENT IF EXISTS " . idf_escape($row["Name"]) . ";;\n" : "")
|
if ($result) {
|
||||||
. remove_definer($connection->result("SHOW CREATE EVENT " . idf_escape($row["Name"]), 3)) . ";;\n\n";
|
while ($row = $result->fetch_assoc()) {
|
||||||
|
$out .= ($style != 'DROP+CREATE' ? "DROP EVENT IF EXISTS " . idf_escape($row["Name"]) . ";;\n" : "")
|
||||||
|
. $connection->result("SHOW CREATE EVENT " . idf_escape($row["Name"]), 3) . ";;\n\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($out) {
|
if ($out) {
|
||||||
@@ -66,47 +68,88 @@ SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
|
|||||||
|
|
||||||
if ($_POST["table_style"] || $_POST["data_style"]) {
|
if ($_POST["table_style"] || $_POST["data_style"]) {
|
||||||
$views = array();
|
$views = array();
|
||||||
foreach (table_status() as $table_status) {
|
foreach (table_status() as $row) {
|
||||||
$table = (DB == "" || in_array($table_status["Name"], (array) $_POST["tables"]));
|
$table = (DB == "" || in_array($row["Name"], (array) $_POST["tables"]));
|
||||||
$data = (DB == "" || in_array($table_status["Name"], (array) $_POST["data"]));
|
$data = (DB == "" || in_array($row["Name"], (array) $_POST["data"]));
|
||||||
if ($table || $data) {
|
if ($table || $data) {
|
||||||
if (!is_view($table_status)) {
|
if (isset($row["Engine"])) {
|
||||||
if ($ext == "tar") {
|
if ($ext == "tar") {
|
||||||
ob_start();
|
ob_start();
|
||||||
}
|
}
|
||||||
$adminer->dumpTable($table_status["Name"], ($table ? $_POST["table_style"] : ""));
|
dump_table($row["Name"], ($table ? $_POST["table_style"] : ""));
|
||||||
if ($data) {
|
if ($data) {
|
||||||
$adminer->dumpData($table_status["Name"], $_POST["data_style"], "SELECT * FROM " . table($table_status["Name"]));
|
dump_data($row["Name"], $_POST["data_style"]);
|
||||||
}
|
}
|
||||||
if ($is_sql && $_POST["triggers"] && $table && ($triggers = trigger_sql($table_status["Name"], $_POST["table_style"]))) {
|
if ($_POST["format"] == "sql" && $_POST["triggers"]) {
|
||||||
echo "\nDELIMITER ;;\n$triggers\nDELIMITER ;\n";
|
$triggers = trigger_sql($row["Name"], $_POST["table_style"]);
|
||||||
|
if ($triggers) {
|
||||||
|
echo "\nDELIMITER ;;\n$triggers\nDELIMITER ;\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ($ext == "tar") {
|
if ($ext == "tar") {
|
||||||
echo tar_file((DB != "" ? "" : "$db/") . "$table_status[Name].csv", ob_get_clean());
|
echo tar_file((DB != "" ? "" : "$db/") . "$row[Name].csv", ob_get_clean());
|
||||||
} elseif ($is_sql) {
|
} elseif ($_POST["format"] == "sql") {
|
||||||
echo "\n";
|
echo "\n";
|
||||||
}
|
}
|
||||||
} elseif ($is_sql) {
|
} elseif ($_POST["format"] == "sql") {
|
||||||
$views[] = $table_status["Name"];
|
$views[] = $row["Name"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach ($views as $view) {
|
foreach ($views as $view) {
|
||||||
$adminer->dumpTable($view, $_POST["table_style"], true);
|
dump_table($view, $_POST["table_style"], true);
|
||||||
}
|
}
|
||||||
if ($ext == "tar") {
|
if ($ext == "tar") {
|
||||||
echo pack("x512");
|
echo pack("x512");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($style == "CREATE+ALTER" && $_POST["format"] == "sql") {
|
||||||
|
// drop old tables
|
||||||
|
$query = "SELECT TABLE_NAME, ENGINE, TABLE_COLLATION, TABLE_COMMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE()";
|
||||||
|
echo "DELIMITER ;;
|
||||||
|
CREATE PROCEDURE adminer_alter (INOUT alter_command text) BEGIN
|
||||||
|
DECLARE _table_name, _engine, _table_collation varchar(64);
|
||||||
|
DECLARE _table_comment varchar(64);
|
||||||
|
DECLARE done bool DEFAULT 0;
|
||||||
|
DECLARE tables CURSOR FOR $query;
|
||||||
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
|
||||||
|
OPEN tables;
|
||||||
|
REPEAT
|
||||||
|
FETCH tables INTO _table_name, _engine, _table_collation, _table_comment;
|
||||||
|
IF NOT done THEN
|
||||||
|
CASE _table_name";
|
||||||
|
$result = $connection->query($query);
|
||||||
|
while ($row = $result->fetch_assoc()) {
|
||||||
|
$comment = $connection->quote($row["ENGINE"] == "InnoDB" ? preg_replace('~(?:(.+); )?InnoDB free: .*~', '\\1', $row["TABLE_COMMENT"]) : $row["TABLE_COMMENT"]);
|
||||||
|
echo "
|
||||||
|
WHEN " . $connection->quote($row["TABLE_NAME"]) . " THEN
|
||||||
|
" . (isset($row["ENGINE"]) ? "IF _engine != '$row[ENGINE]' OR _table_collation != '$row[TABLE_COLLATION]' OR _table_comment != $comment THEN
|
||||||
|
ALTER TABLE " . idf_escape($row["TABLE_NAME"]) . " ENGINE=$row[ENGINE] COLLATE=$row[TABLE_COLLATION] COMMENT=$comment;
|
||||||
|
END IF" : "BEGIN END") . ";";
|
||||||
|
}
|
||||||
|
echo "
|
||||||
|
ELSE
|
||||||
|
SET alter_command = CONCAT(alter_command, 'DROP TABLE `', REPLACE(_table_name, '`', '``'), '`;\\n');
|
||||||
|
END CASE;
|
||||||
|
END IF;
|
||||||
|
UNTIL done END REPEAT;
|
||||||
|
CLOSE tables;
|
||||||
|
END;;
|
||||||
|
DELIMITER ;
|
||||||
|
CALL adminer_alter(@adminer_alter);
|
||||||
|
DROP PROCEDURE adminer_alter;
|
||||||
|
";
|
||||||
|
}
|
||||||
|
if (in_array("CREATE+ALTER", array($style, $_POST["table_style"])) && $_POST["format"] == "sql") {
|
||||||
|
echo "SELECT @adminer_alter;\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($is_sql) {
|
|
||||||
echo "-- " . $connection->result("SELECT NOW()") . "\n";
|
|
||||||
}
|
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
page_header(lang('Export'), $error, ($_GET["export"] != "" ? array("table" => $_GET["export"]) : array()), DB);
|
page_header(lang('Export'), "", ($_GET["export"] != "" ? array("table" => $_GET["export"]) : array()), DB);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
@@ -114,33 +157,29 @@ page_header(lang('Export'), $error, ($_GET["export"] != "" ? array("table" => $_
|
|||||||
<?php
|
<?php
|
||||||
$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', 'INSERT+UPDATE');
|
||||||
if ($jush == "sql") { //! use insert_update() in all drivers
|
if ($jush == "sql") {
|
||||||
$data_style[] = 'INSERT+UPDATE';
|
$db_style[] = 'CREATE+ALTER';
|
||||||
|
$table_style[] = 'CREATE+ALTER';
|
||||||
}
|
}
|
||||||
parse_str($_COOKIE["adminer_export"], $row);
|
parse_str($_COOKIE["adminer_export"], $row);
|
||||||
if (!$row) {
|
if (!$row) {
|
||||||
$row = array("output" => "text", "format" => "sql", "db_style" => (DB != "" ? "" : "CREATE"), "table_style" => "DROP+CREATE", "data_style" => "INSERT");
|
$row = array("output" => "text", "format" => "sql", "db_style" => (DB != "" ? "" : "CREATE"), "table_style" => "DROP+CREATE", "data_style" => "INSERT");
|
||||||
}
|
}
|
||||||
if (!isset($row["events"])) { // backwards compatibility
|
$checked = ($_GET["dump"] == "");
|
||||||
$row["routines"] = $row["events"] = ($_GET["dump"] == "");
|
echo "<tr><th>" . lang('Output') . "<td>" . $adminer->dumpOutput(0, $row["output"]) . "\n";
|
||||||
$row["triggers"] = $row["table_style"];
|
echo "<tr><th>" . lang('Format') . "<td>" . $adminer->dumpFormat(0, $row["format"]) . "\n";
|
||||||
}
|
echo "<tr><th>" . lang('Database') . "<td>" . html_select('db_style', $db_style, $row["db_style"])
|
||||||
echo "<tr><th>" . lang('Output') . "<td>" . html_select("output", $adminer->dumpOutput(), $row["output"], 0) . "\n"; // 0 - radio
|
. (support("routine") ? checkbox("routines", 1, $checked, lang('Routines')) : "")
|
||||||
echo "<tr><th>" . lang('Format') . "<td>" . html_select("format", $adminer->dumpFormat(), $row["format"], 0) . "\n"; // 0 - radio
|
. (support("event") ? checkbox("events", 1, $checked, lang('Events')) : "")
|
||||||
echo ($jush == "sqlite" ? "" : "<tr><th>" . lang('Database') . "<td>" . html_select('db_style', $db_style, $row["db_style"])
|
;
|
||||||
. (support("routine") ? checkbox("routines", 1, $row["routines"], lang('Routines')) : "")
|
|
||||||
. (support("event") ? checkbox("events", 1, $row["events"], lang('Events')) : "")
|
|
||||||
);
|
|
||||||
echo "<tr><th>" . lang('Tables') . "<td>" . html_select('table_style', $table_style, $row["table_style"])
|
echo "<tr><th>" . lang('Tables') . "<td>" . html_select('table_style', $table_style, $row["table_style"])
|
||||||
. checkbox("auto_increment", 1, $row["auto_increment"], lang('Auto Increment'))
|
. (support("trigger") ? checkbox("triggers", 1, $row["table_style"], lang('Triggers')) : "")
|
||||||
. (support("trigger") ? checkbox("triggers", 1, $row["triggers"], lang('Triggers')) : "")
|
|
||||||
;
|
;
|
||||||
echo "<tr><th>" . lang('Data') . "<td>" . html_select('data_style', $data_style, $row["data_style"]);
|
echo "<tr><th>" . lang('Data') . "<td>" . html_select('data_style', $data_style, $row["data_style"]);
|
||||||
?>
|
?>
|
||||||
</table>
|
</table>
|
||||||
<p><input type="submit" value="<?php echo lang('Export'); ?>">
|
<p><input type="submit" value="<?php echo lang('Export'); ?>">
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
|
||||||
|
|
||||||
<table cellspacing="0">
|
<table cellspacing="0">
|
||||||
<?php
|
<?php
|
||||||
@@ -153,22 +192,22 @@ if (DB != "") {
|
|||||||
echo "</thead>\n";
|
echo "</thead>\n";
|
||||||
$views = "";
|
$views = "";
|
||||||
//! defer number of rows to JavaScript
|
//! defer number of rows to JavaScript
|
||||||
foreach (table_status() as $table_status) {
|
foreach (table_status() as $row) {
|
||||||
$name = $table_status["Name"];
|
$name = $row["Name"];
|
||||||
$prefix = ereg_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');");
|
$print = "<tr><td>" . checkbox("tables[]", $name, $checked, $name, "formUncheck('check-tables');");
|
||||||
if (is_view($table_status)) {
|
if (eregi("view", $row["Engine"])) {
|
||||||
$views .= "$print\n";
|
$views .= "$print\n";
|
||||||
} else {
|
} else {
|
||||||
echo "$print<td align='right'><label>" . ($table_status["Engine"] == "InnoDB" && $table_status["Rows"] ? "~ " : "") . $table_status["Rows"] . checkbox("data[]", $name, $checked, "", "checkboxClick(event, this); formUncheck('check-data');") . "</label>\n";
|
echo "$print<td align='right'><label>" . ($row["Engine"] == "InnoDB" && $row["Rows"] ? "~ " : "") . $row["Rows"] . checkbox("data[]", $name, $checked, "", "formUncheck('check-data');") . "</label>\n";
|
||||||
}
|
}
|
||||||
$prefixes[$prefix]++;
|
$prefixes[$prefix]++;
|
||||||
}
|
}
|
||||||
echo $views;
|
echo $views;
|
||||||
} else {
|
} else {
|
||||||
echo "<thead><tr><th style='text-align: left;'><label><input type='checkbox' id='check-databases'" . ($TABLE == "" ? " checked" : "") . " onclick='formCheck(this, /^databases\\[/);'>" . lang('Database') . "</label></thead>\n";
|
echo "<thead><tr><th style='text-align: left;'><label><input type='checkbox' id='check-databases'" . ($TABLE == "" ? " checked" : "") . " onclick='formCheck(this, /^databases\\[/);'>" . lang('Database') . "</label></thead>\n";
|
||||||
$databases = $adminer->databases();
|
$databases = get_databases();
|
||||||
if ($databases) {
|
if ($databases) {
|
||||||
foreach ($databases as $db) {
|
foreach ($databases as $db) {
|
||||||
if (!information_schema($db)) {
|
if (!information_schema($db)) {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
$TABLE = $_GET["edit"];
|
$TABLE = $_GET["edit"];
|
||||||
$fields = fields($TABLE);
|
$where = (isset($_GET["select"]) ? (count($_POST["check"]) == 1 ? where_check($_POST["check"][0]) : "") : where($_GET));
|
||||||
$where = (isset($_GET["select"]) ? (count($_POST["check"]) == 1 ? where_check($_POST["check"][0], $fields) : "") : where($_GET, $fields));
|
|
||||||
$update = (isset($_GET["select"]) ? $_POST["edit"] : $where);
|
$update = (isset($_GET["select"]) ? $_POST["edit"] : $where);
|
||||||
|
$fields = fields($TABLE);
|
||||||
foreach ($fields as $name => $field) {
|
foreach ($fields as $name => $field) {
|
||||||
if (!isset($field["privileges"][$update ? "update" : "insert"]) || $adminer->fieldName($field) == "") {
|
if (!isset($field["privileges"][$update ? "update" : "insert"]) || $adminer->fieldName($field) == "") {
|
||||||
unset($fields[$name]);
|
unset($fields[$name]);
|
||||||
@@ -16,7 +16,7 @@ if ($_POST && !$error && !isset($_GET["select"])) {
|
|||||||
$location = ME . "select=" . urlencode($TABLE);
|
$location = ME . "select=" . urlencode($TABLE);
|
||||||
}
|
}
|
||||||
if (isset($_POST["delete"])) {
|
if (isset($_POST["delete"])) {
|
||||||
query_redirect("DELETE" . limit1("FROM " . table($TABLE), " WHERE $where"), $location, lang('Item has been deleted.'));
|
query_redirect("DELETE" . limit1("FROM " . table($TABLE), $where), $location, lang('Item has been deleted.'));
|
||||||
} else {
|
} else {
|
||||||
$set = array();
|
$set = array();
|
||||||
foreach ($fields as $name => $field) {
|
foreach ($fields as $name => $field) {
|
||||||
@@ -43,7 +43,7 @@ page_header(
|
|||||||
($update ? lang('Edit') : lang('Insert')),
|
($update ? lang('Edit') : lang('Insert')),
|
||||||
$error,
|
$error,
|
||||||
array("select" => array($TABLE, $table_name)),
|
array("select" => array($TABLE, $table_name)),
|
||||||
$table_name //! two calls of h()
|
$table_name
|
||||||
);
|
);
|
||||||
|
|
||||||
$row = null;
|
$row = null;
|
||||||
@@ -53,46 +53,36 @@ if ($_POST["save"]) {
|
|||||||
$select = array();
|
$select = array();
|
||||||
foreach ($fields as $name => $field) {
|
foreach ($fields as $name => $field) {
|
||||||
if (isset($field["privileges"]["select"])) {
|
if (isset($field["privileges"]["select"])) {
|
||||||
$as = convert_field($field);
|
$select[] = ($_POST["clone"] && $field["auto_increment"] ? "'' AS " : (ereg("enum|set", $field["type"]) ? "1*" . idf_escape($name) . " AS " : "")) . idf_escape($name);
|
||||||
if ($_POST["clone"] && $field["auto_increment"]) {
|
|
||||||
$as = "''";
|
|
||||||
}
|
|
||||||
if ($jush == "sql" && ereg("enum|set", $field["type"])) {
|
|
||||||
$as = "1*" . idf_escape($name);
|
|
||||||
}
|
|
||||||
$select[] = ($as ? "$as AS " : "") . idf_escape($name);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$row = array();
|
$row = array();
|
||||||
if ($select) {
|
if ($select) {
|
||||||
$rows = get_rows("SELECT" . limit(implode(", ", $select) . " FROM " . table($TABLE), " WHERE $where", (isset($_GET["select"]) ? 2 : 1)));
|
$result = $connection->query("SELECT" . limit(implode(", ", $select) . " FROM " . table($TABLE), " WHERE $where", (isset($_GET["select"]) ? 2 : 1)));
|
||||||
$row = (isset($_GET["select"]) && count($rows) != 1 ? null : reset($rows));
|
$row = $result->fetch_assoc();
|
||||||
|
if (isset($_GET["select"]) && $result->fetch_assoc()) {
|
||||||
|
$row = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($row === false) {
|
|
||||||
echo "<p class='error'>" . lang('No rows.') . "\n";
|
|
||||||
}
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<form action="" method="post" enctype="multipart/form-data" id="form">
|
<form action="" method="post" enctype="multipart/form-data">
|
||||||
<?php
|
<?php
|
||||||
if (!$fields) {
|
if ($fields) {
|
||||||
echo "<p class='error'>" . lang('You have no privileges to update this table.') . "\n";
|
echo "<table cellspacing='0'>\n";
|
||||||
} else {
|
|
||||||
echo "<table cellspacing='0' onkeydown='return editingKeydown(event);'>\n";
|
|
||||||
foreach ($fields as $name => $field) {
|
foreach ($fields as $name => $field) {
|
||||||
echo "<tr><th>" . $adminer->fieldName($field);
|
echo "<tr><th>" . $adminer->fieldName($field);
|
||||||
$default = $_GET["set"][bracket_escape($name)];
|
$default = $_GET["set"][bracket_escape($name)];
|
||||||
$value = ($row !== null
|
$value = (isset($row)
|
||||||
? ($row[$name] != "" && $jush == "sql" && ereg("enum|set", $field["type"]) ? (is_array($row[$name]) ? array_sum($row[$name]) : +$row[$name]) : $row[$name])
|
? ($row[$name] != "" && ereg("enum|set", $field["type"]) ? intval($row[$name]) : $row[$name])
|
||||||
: (!$update && $field["auto_increment"] ? "" : (isset($_GET["select"]) ? false : ($default !== null ? $default : $field["default"])))
|
: (!$update && $field["auto_increment"] ? "" : (isset($_GET["select"]) ? false : (isset($default) ? $default : $field["default"])))
|
||||||
);
|
);
|
||||||
if (!$_POST["save"] && is_string($value)) {
|
if (!$_POST["save"] && is_string($value)) {
|
||||||
$value = $adminer->editVal($value, $field);
|
$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'))));
|
$function = ($_POST["save"] ? (string) $_POST["function"][$name] : ($where && $field["on_update"] == "CURRENT_TIMESTAMP" ? "now" : ($value === false ? null : (isset($value) ? '' : 'NULL'))));
|
||||||
if (ereg("time", $field["type"]) && $value == "CURRENT_TIMESTAMP") {
|
if ($field["type"] == "timestamp" && $value == "CURRENT_TIMESTAMP") {
|
||||||
$value = "";
|
$value = "";
|
||||||
$function = "now";
|
$function = "now";
|
||||||
}
|
}
|
||||||
@@ -103,21 +93,21 @@ if (!$fields) {
|
|||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
<p>
|
<p>
|
||||||
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
|
<input type="hidden" name="referer" value="<?php echo h(isset($_POST["referer"]) ? $_POST["referer"] : $_SERVER["HTTP_REFERER"]); ?>">
|
||||||
|
<input type="hidden" name="save" value="1">
|
||||||
<?php
|
<?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"
|
|
||||||
: ($_POST || !$fields ? "" : "<script type='text/javascript'>document.getElementById('form').getElementsByTagName('td')[1].firstChild.focus();</script>\n")
|
|
||||||
);
|
|
||||||
if (isset($_GET["select"])) {
|
if (isset($_GET["select"])) {
|
||||||
hidden_fields(array("check" => (array) $_POST["check"], "clone" => $_POST["clone"], "all" => $_POST["all"]));
|
hidden_fields(array("check" => (array) $_POST["check"], "clone" => $_POST["clone"], "all" => $_POST["all"]));
|
||||||
}
|
}
|
||||||
|
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')) . "'>\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($update) {
|
||||||
|
echo "<input type='submit' name='delete' value='" . lang('Delete') . "'$confirm>\n";
|
||||||
|
}
|
||||||
?>
|
?>
|
||||||
<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>
|
</form>
|
||||||
|
|||||||
@@ -8,44 +8,46 @@ if ($_POST && !$error) {
|
|||||||
query_redirect("DROP EVENT " . idf_escape($EVENT), substr(ME, 0, -1), lang('Event has been dropped.'));
|
query_redirect("DROP EVENT " . idf_escape($EVENT), substr(ME, 0, -1), lang('Event has been dropped.'));
|
||||||
} elseif (in_array($_POST["INTERVAL_FIELD"], $intervals) && isset($statuses[$_POST["STATUS"]])) {
|
} elseif (in_array($_POST["INTERVAL_FIELD"], $intervals) && isset($statuses[$_POST["STATUS"]])) {
|
||||||
$schedule = "\nON SCHEDULE " . ($_POST["INTERVAL_VALUE"]
|
$schedule = "\nON SCHEDULE " . ($_POST["INTERVAL_VALUE"]
|
||||||
? "EVERY " . q($_POST["INTERVAL_VALUE"]) . " $_POST[INTERVAL_FIELD]"
|
? "EVERY " . $connection->quote($_POST["INTERVAL_VALUE"]) . " $_POST[INTERVAL_FIELD]"
|
||||||
. ($_POST["STARTS"] ? " STARTS " . q($_POST["STARTS"]) : "")
|
. ($_POST["STARTS"] ? " STARTS " . $connection->quote($_POST["STARTS"]) : "")
|
||||||
. ($_POST["ENDS"] ? " ENDS " . q($_POST["ENDS"]) : "") //! ALTER EVENT doesn't drop ENDS - MySQL bug #39173
|
. ($_POST["ENDS"] ? " ENDS " . $connection->quote($_POST["ENDS"]) : "") //! ALTER EVENT doesn't drop ENDS - MySQL bug #39173
|
||||||
: "AT " . q($_POST["STARTS"])
|
: "AT " . $connection->quote($_POST["STARTS"])
|
||||||
) . " ON COMPLETION" . ($_POST["ON_COMPLETION"] ? "" : " NOT") . " PRESERVE"
|
) . " ON COMPLETION" . ($_POST["ON_COMPLETION"] ? "" : " NOT") . " PRESERVE"
|
||||||
;
|
;
|
||||||
queries_redirect(substr(ME, 0, -1), ($EVENT != "" ? lang('Event has been altered.') : lang('Event has been created.')), queries(($EVENT != ""
|
query_redirect(($EVENT != ""
|
||||||
? "ALTER EVENT " . idf_escape($EVENT) . $schedule
|
? "ALTER EVENT " . idf_escape($EVENT) . $schedule
|
||||||
. ($EVENT != $_POST["EVENT_NAME"] ? "\nRENAME TO " . idf_escape($_POST["EVENT_NAME"]) : "")
|
. ($EVENT != $_POST["EVENT_NAME"] ? "\nRENAME TO " . idf_escape($_POST["EVENT_NAME"]) : "")
|
||||||
: "CREATE EVENT " . idf_escape($_POST["EVENT_NAME"]) . $schedule
|
: "CREATE EVENT " . idf_escape($_POST["EVENT_NAME"]) . $schedule
|
||||||
) . "\n" . $statuses[$_POST["STATUS"]] . " COMMENT " . q($_POST["EVENT_COMMENT"])
|
) . "\n" . $statuses[$_POST["STATUS"]] . " COMMENT " . $connection->quote($_POST["EVENT_COMMENT"])
|
||||||
. rtrim(" DO\n$_POST[EVENT_DEFINITION]", ";") . ";"
|
. " DO\n$_POST[EVENT_DEFINITION]"
|
||||||
));
|
, substr(ME, 0, -1), ($EVENT != "" ? lang('Event has been altered.') : lang('Event has been created.')));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
page_header(($EVENT != "" ? lang('Alter event') . ": " . h($EVENT) : lang('Create event')), $error);
|
page_header(($EVENT != "" ? lang('Alter event') . ": " . h($EVENT) : lang('Create event')), $error);
|
||||||
|
|
||||||
$row = $_POST;
|
$row = array();
|
||||||
if (!$row && $EVENT != "") {
|
if ($_POST) {
|
||||||
$rows = get_rows("SELECT * FROM information_schema.EVENTS WHERE EVENT_SCHEMA = " . q(DB) . " AND EVENT_NAME = " . q($EVENT));
|
$row = $_POST;
|
||||||
$row = reset($rows);
|
} elseif ($EVENT != "") {
|
||||||
|
$result = $connection->query("SELECT * FROM information_schema.EVENTS WHERE EVENT_SCHEMA = " . $connection->quote(DB) . " AND EVENT_NAME = " . $connection->quote($EVENT));
|
||||||
|
$row = $result->fetch_assoc();
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
<table cellspacing="0">
|
<table cellspacing="0">
|
||||||
<tr><th><?php echo lang('Name'); ?><td><input name="EVENT_NAME" value="<?php echo h($row["EVENT_NAME"]); ?>" maxlength="64" autocapitalize="off">
|
<tr><th><?php echo lang('Name'); ?><td><input name="EVENT_NAME" value="<?php echo h($row["EVENT_NAME"]); ?>" maxlength="64">
|
||||||
<tr><th title="datetime"><?php echo lang('Start'); ?><td><input name="STARTS" value="<?php echo h("$row[EXECUTE_AT]$row[STARTS]"); ?>">
|
<tr><th><?php echo lang('Start'); ?><td><input name="STARTS" value="<?php echo h("$row[EXECUTE_AT]$row[STARTS]"); ?>">
|
||||||
<tr><th title="datetime"><?php echo lang('End'); ?><td><input name="ENDS" value="<?php echo h($row["ENDS"]); ?>">
|
<tr><th><?php echo lang('End'); ?><td><input name="ENDS" value="<?php echo h($row["ENDS"]); ?>">
|
||||||
<tr><th><?php echo lang('Every'); ?><td><input type="number" name="INTERVAL_VALUE" value="<?php echo h($row["INTERVAL_VALUE"]); ?>" class="size"> <?php echo html_select("INTERVAL_FIELD", $intervals, $row["INTERVAL_FIELD"]); ?>
|
<tr><th><?php echo lang('Every'); ?><td><input name="INTERVAL_VALUE" value="<?php echo h($row["INTERVAL_VALUE"]); ?>" size="6"> <?php echo html_select("INTERVAL_FIELD", $intervals, $row["INTERVAL_FIELD"]); ?>
|
||||||
<tr><th><?php echo lang('Status'); ?><td><?php echo html_select("STATUS", $statuses, $row["STATUS"]); ?>
|
<tr><th><?php echo lang('Status'); ?><td><?php echo html_select("STATUS", $statuses, $row["STATUS"]); ?>
|
||||||
<tr><th><?php echo lang('Comment'); ?><td><input name="EVENT_COMMENT" value="<?php echo h($row["EVENT_COMMENT"]); ?>" maxlength="64">
|
<tr><th><?php echo lang('Comment'); ?><td><input name="EVENT_COMMENT" value="<?php echo h($row["EVENT_COMMENT"]); ?>" maxlength="64">
|
||||||
<tr><th> <td><?php echo checkbox("ON_COMPLETION", "PRESERVE", $row["ON_COMPLETION"] == "PRESERVE", lang('On completion preserve')); ?>
|
<tr><th> <td><?php echo checkbox("ON_COMPLETION", "PRESERVE", $row["ON_COMPLETION"] == "PRESERVE", lang('On completion preserve')); ?>
|
||||||
</table>
|
</table>
|
||||||
<p><?php textarea("EVENT_DEFINITION", $row["EVENT_DEFINITION"]); ?>
|
<p><?php textarea("EVENT_DEFINITION", $row["EVENT_DEFINITION"]); ?>
|
||||||
<p>
|
<p>
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
|
||||||
<?php if ($EVENT != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo confirm(); ?>><?php } ?>
|
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
|
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||||
|
<?php if ($EVENT != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo $confirm; ?>><?php } ?>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -1,29 +1,22 @@
|
|||||||
<?php
|
<?php
|
||||||
if ($_SERVER["HTTP_IF_MODIFIED_SINCE"]) {
|
|
||||||
header("HTTP/1.1 304 Not Modified");
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
header("Expires: " . gmdate("D, d M Y H:i:s", time() + 365*24*60*60) . " GMT");
|
header("Expires: " . gmdate("D, d M Y H:i:s", time() + 365*24*60*60) . " GMT");
|
||||||
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
|
|
||||||
|
|
||||||
if ($_GET["file"] == "favicon.ico") {
|
if ($_GET["file"] == "favicon.ico") {
|
||||||
header("Content-Type: image/x-icon");
|
header("Content-Type: image/x-icon");
|
||||||
echo lzw_decompress(compile_file('../adminer/static/favicon.ico', 'lzw_compress'));
|
echo base64_decode("compile_file('../adminer/static/favicon.ico', 'base64_encode');");
|
||||||
} elseif ($_GET["file"] == "default.css") {
|
} elseif ($_GET["file"] == "default.css") {
|
||||||
header("Content-Type: text/css; charset=utf-8");
|
header("Content-Type: text/css");
|
||||||
echo lzw_decompress(compile_file('../adminer/static/default.css', 'minify_css'));
|
?>compile_file('../adminer/static/default.css', 'minify_css');<?php
|
||||||
} elseif ($_GET["file"] == "functions.js") {
|
} elseif ($_GET["file"] == "functions.js") {
|
||||||
header("Content-Type: text/javascript; charset=utf-8");
|
header("Content-Type: text/javascript");
|
||||||
echo lzw_decompress(compile_file('../adminer/static/functions.js;static/editing.js', 'minify_js'));
|
?>compile_file('../adminer/static/functions.js', 'JSMin::minify');compile_file('static/editing.js', 'JSMin::minify');<?php
|
||||||
} else {
|
} else {
|
||||||
header("Content-Type: image/gif");
|
header("Content-Type: image/gif");
|
||||||
switch ($_GET["file"]) {
|
switch ($_GET["file"]) {
|
||||||
case "plus.gif": echo compile_file('../adminer/static/plus.gif'); break;
|
case "plus.gif": echo base64_decode("compile_file('../adminer/static/plus.gif', 'base64_encode');"); break;
|
||||||
case "cross.gif": echo compile_file('../adminer/static/cross.gif'); break;
|
case "cross.gif": echo base64_decode("compile_file('../adminer/static/cross.gif', 'base64_encode');"); break;
|
||||||
case "up.gif": echo compile_file('../adminer/static/up.gif'); break;
|
case "up.gif": echo base64_decode("compile_file('../adminer/static/up.gif', 'base64_encode');"); break;
|
||||||
case "down.gif": echo compile_file('../adminer/static/down.gif'); break;
|
case "down.gif": echo base64_decode("compile_file('../adminer/static/down.gif', 'base64_encode');"); break;
|
||||||
case "arrow.gif": echo compile_file('../adminer/static/arrow.gif'); break;
|
case "arrow.gif": echo base64_decode("compile_file('../adminer/static/arrow.gif', 'base64_encode');"); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
exit;
|
exit;
|
||||||
|
|||||||
@@ -11,10 +11,10 @@ if ($_POST && !$error && !$_POST["add"] && !$_POST["change"] && !$_POST["change-
|
|||||||
$target[$key] = $_POST["target"][$key];
|
$target[$key] = $_POST["target"][$key];
|
||||||
}
|
}
|
||||||
query_redirect("ALTER TABLE " . table($TABLE)
|
query_redirect("ALTER TABLE " . table($TABLE)
|
||||||
. ($_GET["name"] != "" ? "\nDROP " . ($jush == "sql" ? "FOREIGN KEY " : "CONSTRAINT ") . idf_escape($_GET["name"]) . "," : "")
|
. ($_GET["name"] != "" ? "\nDROP FOREIGN KEY " . idf_escape($_GET["name"]) . "," : "")
|
||||||
. "\nADD FOREIGN KEY (" . implode(", ", array_map('idf_escape', $source)) . ") REFERENCES " . table($_POST["table"]) . " (" . implode(", ", array_map('idf_escape', $target)) . ")" //! reuse $_GET["name"] - check in older MySQL versions
|
. "\nADD FOREIGN KEY (" . implode(", ", array_map('idf_escape', $source)) . ") REFERENCES " . table($_POST["table"]) . " (" . implode(", ", array_map('idf_escape', $target)) . ")"
|
||||||
. (ereg("^($on_actions)\$", $_POST["on_delete"]) ? " ON DELETE $_POST[on_delete]" : "")
|
. (in_array($_POST["on_delete"], $on_actions) ? " ON DELETE $_POST[on_delete]" : "")
|
||||||
. (ereg("^($on_actions)\$", $_POST["on_update"]) ? " ON UPDATE $_POST[on_update]" : "")
|
. (in_array($_POST["on_update"], $on_actions) ? " ON UPDATE $_POST[on_update]" : "")
|
||||||
, ME . "table=" . urlencode($TABLE), ($_GET["name"] != "" ? lang('Foreign key has been altered.') : lang('Foreign key has been created.')));
|
, ME . "table=" . urlencode($TABLE), ($_GET["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
|
$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
|
||||||
}
|
}
|
||||||
@@ -49,7 +49,7 @@ foreach (table_status() as $name => $table_status) {
|
|||||||
|
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
<p>
|
<p>
|
||||||
<?php if ($row["db"] == "" && $row["ns"] == "") { ?>
|
<?php if ($row["db"] == "") { ?>
|
||||||
<?php echo lang('Target table'); ?>:
|
<?php echo lang('Target table'); ?>:
|
||||||
<?php echo html_select("table", $referencable, $row["table"], "this.form['change-js'].value = '1'; this.form.submit();"); ?>
|
<?php echo html_select("table", $referencable, $row["table"], "this.form['change-js'].value = '1'; this.form.submit();"); ?>
|
||||||
<input type="hidden" name="change-js" value="">
|
<input type="hidden" name="change-js" value="">
|
||||||
@@ -60,19 +60,19 @@ foreach (table_status() as $name => $table_status) {
|
|||||||
$j = 0;
|
$j = 0;
|
||||||
foreach ($row["source"] as $key => $val) {
|
foreach ($row["source"] as $key => $val) {
|
||||||
echo "<tr>";
|
echo "<tr>";
|
||||||
echo "<td>" . html_select("source[" . (+$key) . "]", array(-1 => "") + $source, $val, ($j == count($row["source"]) - 1 ? "foreignAddRow(this);" : 1));
|
echo "<td>" . html_select("source[" . intval($key) . "]", array(-1 => "") + $source, $val, ($j == count($row["source"]) - 1 ? "foreignAddRow(this);" : 1));
|
||||||
echo "<td>" . html_select("target[" . (+$key) . "]", $target, $row["target"][$key]);
|
echo "<td>" . html_select("target[" . intval($key) . "]", $target, $row["target"][$key]);
|
||||||
$j++;
|
$j++;
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
</table>
|
</table>
|
||||||
<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 => "") + $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 => "") + $on_actions, $row["on_update"]); ?>
|
||||||
<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>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
<?php if ($_GET["name"] != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo confirm(); ?>><?php } ?>
|
<?php if ($_GET["name"] != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo $confirm; ?>><?php } ?>
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -1,22 +1,20 @@
|
|||||||
<?php
|
<?php
|
||||||
// any method change in this file should be transferred to editor/include/adminer.inc.php and plugins/plugin.php
|
|
||||||
|
|
||||||
class Adminer {
|
class Adminer {
|
||||||
/** @var array operators used in select, null for all operators */
|
/** @var array operators used in select, null for all operators */
|
||||||
var $operators;
|
var $operators;
|
||||||
|
|
||||||
/** Name in title and navigation
|
/** Name in title and navigation
|
||||||
* @return string HTML code
|
* @return string
|
||||||
*/
|
*/
|
||||||
function name() {
|
function name() {
|
||||||
return "<a href='http://www.adminer.org/' id='h1'>Adminer</a>";
|
return "Adminer";
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Connection parameters
|
/** Connection parameters
|
||||||
* @return array ($server, $username, $password)
|
* @return array ($server, $username, $password)
|
||||||
*/
|
*/
|
||||||
function credentials() {
|
function credentials() {
|
||||||
return array(SERVER, $_GET["username"], get_session("pwds"));
|
return array(SERVER, $_GET["username"], get_session("passwords"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get key used for permanent login
|
/** Get key used for permanent login
|
||||||
@@ -34,56 +32,24 @@ class Adminer {
|
|||||||
return DB;
|
return DB;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get cached list of databases
|
|
||||||
* @param bool
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
function databases($flush = true) {
|
|
||||||
return get_databases($flush);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Specify limit for waiting on some slow queries like DB list
|
|
||||||
* @return float number of seconds
|
|
||||||
*/
|
|
||||||
function queryTimeout() {
|
|
||||||
return 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Headers to send before HTML output
|
|
||||||
* @return bool true to send security headers
|
|
||||||
*/
|
|
||||||
function headers() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Print HTML code inside <head>
|
|
||||||
* @return bool true to link adminer.css if exists
|
|
||||||
*/
|
|
||||||
function head() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Print login form
|
/** Print login form
|
||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function loginForm() {
|
function loginForm() {
|
||||||
global $drivers;
|
global $drivers, $possible_drivers;
|
||||||
?>
|
?>
|
||||||
<table cellspacing="0">
|
<table cellspacing="0">
|
||||||
<tr><th><?php echo lang('System'); ?><td><?php echo html_select("auth[driver]", $drivers, DRIVER, "loginDriver(this);"); ?>
|
<tr><th><?php echo lang('System'); ?><td><?php echo (count($possible_drivers) > 3 ? html_select("driver", $drivers, DRIVER) : "<input type='hidden' name='driver' value='" . key($drivers) . "'>" . reset($drivers)); ?></tr>
|
||||||
<tr><th><?php echo lang('Server'); ?><td><input name="auth[server]" value="<?php echo h(SERVER); ?>" title="hostname[:port]" autocapitalize="off">
|
<tr><th><?php echo lang('Server'); ?><td><input name="server" value="<?php echo h(SERVER); ?>">
|
||||||
<tr><th><?php echo lang('Username'); ?><td><input name="auth[username]" id="username" value="<?php echo h($_GET["username"]); ?>" autocapitalize="off">
|
<tr><th><?php echo lang('Username'); ?><td><input id="username" name="username" value="<?php echo h($_GET["username"]); ?>">
|
||||||
<tr><th><?php echo lang('Password'); ?><td><input type="password" name="auth[password]">
|
<tr><th><?php echo lang('Password'); ?><td><input type="password" name="password">
|
||||||
<tr><th><?php echo lang('Database'); ?><td><input name="auth[db]" value="<?php echo h($_GET["db"]); ?>" autocapitalize="off">
|
|
||||||
</table>
|
</table>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var username = document.getElementById('username');
|
document.getElementById('username').focus();
|
||||||
username.focus();
|
|
||||||
username.form['auth[driver]'].onchange();
|
|
||||||
</script>
|
</script>
|
||||||
<?php
|
<?php
|
||||||
echo "<p><input type='submit' value='" . lang('Login') . "'>\n";
|
echo "<p><input type='submit' value='" . lang('Login') . "'>\n";
|
||||||
echo checkbox("auth[permanent]", 1, $_COOKIE["adminer_permanent"], lang('Permanent login')) . "\n";
|
echo checkbox("permanent", 1, $_COOKIE["adminer_permanent"], lang('Permanent login')) . "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Authorize the user
|
/** Authorize the user
|
||||||
@@ -97,7 +63,7 @@ username.form['auth[driver]'].onchange();
|
|||||||
|
|
||||||
/** Table caption used in navigation and headings
|
/** Table caption used in navigation and headings
|
||||||
* @param array result of SHOW TABLE STATUS
|
* @param array result of SHOW TABLE STATUS
|
||||||
* @return string HTML code, "" to ignore table
|
* @return string
|
||||||
*/
|
*/
|
||||||
function tableName($tableStatus) {
|
function tableName($tableStatus) {
|
||||||
return h($tableStatus["Name"]);
|
return h($tableStatus["Name"]);
|
||||||
@@ -106,7 +72,7 @@ username.form['auth[driver]'].onchange();
|
|||||||
/** Field caption used in select and edit
|
/** Field caption used in select and edit
|
||||||
* @param array single field returned from fields()
|
* @param array single field returned from fields()
|
||||||
* @param int order of column in select
|
* @param int order of column in select
|
||||||
* @return string HTML code, "" to ignore field
|
* @return string
|
||||||
*/
|
*/
|
||||||
function fieldName($field, $order = 0) {
|
function fieldName($field, $order = 0) {
|
||||||
return '<span title="' . h($field["full_type"]) . '">' . h($field["field"]) . '</span>';
|
return '<span title="' . h($field["full_type"]) . '">' . h($field["field"]) . '</span>';
|
||||||
@@ -120,28 +86,20 @@ username.form['auth[driver]'].onchange();
|
|||||||
function selectLinks($tableStatus, $set = "") {
|
function selectLinks($tableStatus, $set = "") {
|
||||||
echo '<p class="tabs">';
|
echo '<p class="tabs">';
|
||||||
$links = array("select" => lang('Select data'), "table" => lang('Show structure'));
|
$links = array("select" => lang('Select data'), "table" => lang('Show structure'));
|
||||||
if (is_view($tableStatus)) {
|
if (eregi("view", $tableStatus["Engine"])) {
|
||||||
$links["view"] = lang('Alter view');
|
$links["view"] = lang('Alter view');
|
||||||
} else {
|
} else {
|
||||||
$links["create"] = lang('Alter table');
|
$links["create"] = lang('Alter table');
|
||||||
}
|
}
|
||||||
if ($set !== null) {
|
if (isset($set)) {
|
||||||
$links["edit"] = lang('New item');
|
$links["edit"] = lang('New item');
|
||||||
}
|
}
|
||||||
foreach ($links as $key => $val) {
|
foreach ($links as $key => $val) {
|
||||||
echo " <a href='" . h(ME) . "$key=" . urlencode($tableStatus["Name"]) . ($key == "edit" ? $set : "") . "'" . bold(isset($_GET[$key])) . ">$val</a>";
|
echo " <a href='" . h(ME) . "$key=" . urlencode($tableStatus["Name"]) . ($key == "edit" ? $set : "") . "'>" . bold($val, isset($_GET[$key])) . "</a>";
|
||||||
}
|
}
|
||||||
echo "\n";
|
echo "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get foreign keys for table
|
|
||||||
* @param string
|
|
||||||
* @return array same format as foreign_keys()
|
|
||||||
*/
|
|
||||||
function foreignKeys($table) {
|
|
||||||
return foreign_keys($table);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Find backward keys for table
|
/** Find backward keys for table
|
||||||
* @param string
|
* @param string
|
||||||
* @param string
|
* @param string
|
||||||
@@ -164,11 +122,8 @@ username.form['auth[driver]'].onchange();
|
|||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function selectQuery($query) {
|
function selectQuery($query) {
|
||||||
global $jush, $token;
|
global $jush;
|
||||||
return "<form action='" . h(ME) . "sql=' method='post'><p><span onclick=\"return !selectEditSql(event, this, '" . lang('Execute') . "');\">"
|
return "<p><code class='jush-$jush'>" . h(str_replace("\n", " ", $query)) . "</code> <a href='" . h(ME) . "sql=" . urlencode($query) . "'>" . lang('Edit') . "</a>\n";
|
||||||
. "<code class='jush-$jush'>" . h(str_replace("\n", " ", $query)) . "</code>"
|
|
||||||
. " <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
|
||||||
@@ -188,14 +143,6 @@ username.form['auth[driver]'].onchange();
|
|||||||
return $rows;
|
return $rows;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get a link to use in select table
|
|
||||||
* @param string raw value of the field
|
|
||||||
* @param array single field returned from fields()
|
|
||||||
* @return string or null to create the default link
|
|
||||||
*/
|
|
||||||
function selectLink($val, $field) {
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Value printed in select table
|
/** Value printed in select table
|
||||||
* @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
|
||||||
@@ -203,11 +150,11 @@ username.form['auth[driver]'].onchange();
|
|||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function selectVal($val, $link, $field) {
|
function selectVal($val, $link, $field) {
|
||||||
$return = ($val === null ? "<i>NULL</i>" : (ereg("char|binary", $field["type"]) && !ereg("var", $field["type"]) ? "<code>$val</code>" : $val));
|
$return = ($val != "<i>NULL</i>" && $field["type"] == "char" ? "<code>$val</code>" : $val);
|
||||||
if (ereg('blob|bytea|raw|file', $field["type"]) && !is_utf8($val)) {
|
if (ereg('binary|blob|bytea', $field["type"]) && !is_utf8($val)) {
|
||||||
$return = lang('%d byte(s)', strlen(html_entity_decode($val, ENT_QUOTES)));
|
$return = lang('%d byte(s)', strlen($val));
|
||||||
}
|
}
|
||||||
return ($link ? "<a href='" . h($link) . "'>$return</a>" : $return);
|
return ($link ? "<a href='$link'>$return</a>" : $return);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Value conversion used in select and edit
|
/** Value conversion used in select and edit
|
||||||
@@ -220,7 +167,7 @@ username.form['auth[driver]'].onchange();
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Print columns box in select
|
/** Print columns box in select
|
||||||
* @param array result of selectColumnsProcess()[0]
|
* @param array result of selectColumnsProcess()
|
||||||
* @param array selectable columns
|
* @param array selectable columns
|
||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
@@ -232,7 +179,7 @@ username.form['auth[driver]'].onchange();
|
|||||||
foreach ($select as $key => $val) {
|
foreach ($select as $key => $val) {
|
||||||
$val = $_GET["columns"][$key];
|
$val = $_GET["columns"][$key];
|
||||||
echo "<div>" . html_select("columns[$i][fun]", array(-1 => "") + $fun_group, $val["fun"]);
|
echo "<div>" . html_select("columns[$i][fun]", array(-1 => "") + $fun_group, $val["fun"]);
|
||||||
echo "(<select name='columns[$i][col]' onchange='selectFieldChange(this.form);'><option>" . optionlist($columns, $val["col"], true) . "</select>)</div>\n";
|
echo "(<select name='columns[$i][col]'><option>" . optionlist($columns, $val["col"], true) . "</select>)</div>\n";
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
echo "<div>" . html_select("columns[$i][fun]", array(-1 => "") + $fun_group, "", "this.nextSibling.nextSibling.onchange();");
|
echo "<div>" . html_select("columns[$i][fun]", array(-1 => "") + $fun_group, "", "this.nextSibling.nextSibling.onchange();");
|
||||||
@@ -251,22 +198,23 @@ username.form['auth[driver]'].onchange();
|
|||||||
foreach ($indexes as $i => $index) {
|
foreach ($indexes as $i => $index) {
|
||||||
if ($index["type"] == "FULLTEXT") {
|
if ($index["type"] == "FULLTEXT") {
|
||||||
echo "(<i>" . implode("</i>, <i>", array_map('h', $index["columns"])) . "</i>) AGAINST";
|
echo "(<i>" . implode("</i>, <i>", array_map('h', $index["columns"])) . "</i>) AGAINST";
|
||||||
echo " <input type='search' name='fulltext[$i]' value='" . h($_GET["fulltext"][$i]) . "' onchange='selectFieldChange(this.form);'>";
|
echo " <input name='fulltext[$i]' value='" . h($_GET["fulltext"][$i]) . "'>";
|
||||||
echo checkbox("boolean[$i]", 1, isset($_GET["boolean"][$i]), "BOOL");
|
echo checkbox("boolean[$i]", 1, isset($_GET["boolean"][$i]), "BOOL");
|
||||||
echo "<br>\n";
|
echo "<br>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$_GET["where"] = (array) $_GET["where"];
|
$i = 0;
|
||||||
reset($_GET["where"]);
|
foreach ((array) $_GET["where"] as $val) {
|
||||||
$change_next = "this.nextSibling.onchange();";
|
if ("$val[col]$val[val]" != "" && in_array($val["op"], $this->operators)) {
|
||||||
for ($i = 0; $i <= count($_GET["where"]); $i++) {
|
echo "<div><select name='where[$i][col]'><option value=''>(" . lang('anywhere') . ")" . optionlist($columns, $val["col"], true) . "</select>";
|
||||||
list(, $val) = each($_GET["where"]);
|
echo html_select("where[$i][op]", $this->operators, $val["op"]);
|
||||||
if (!$val || ("$val[col]$val[val]" != "" && in_array($val["op"], $this->operators))) {
|
echo "<input name='where[$i][val]' value='" . h($val["val"]) . "'></div>\n";
|
||||||
echo "<div><select name='where[$i][col]' onchange='$change_next'><option value=''>(" . lang('anywhere') . ")" . optionlist($columns, $val["col"], true) . "</select>";
|
$i++;
|
||||||
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)") . ";' onsearch='selectSearch(this);'></div>\n";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
echo "<div><select name='where[$i][col]' onchange='selectAddRow(this);'><option value=''>(" . lang('anywhere') . ")" . optionlist($columns, null, true) . "</select>";
|
||||||
|
echo html_select("where[$i][op]", $this->operators);
|
||||||
|
echo "<input name='where[$i][val]'></div>\n";
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -281,13 +229,13 @@ username.form['auth[driver]'].onchange();
|
|||||||
$i = 0;
|
$i = 0;
|
||||||
foreach ((array) $_GET["order"] as $key => $val) {
|
foreach ((array) $_GET["order"] as $key => $val) {
|
||||||
if (isset($columns[$val])) {
|
if (isset($columns[$val])) {
|
||||||
echo "<div><select name='order[$i]' onchange='selectFieldChange(this.form);'><option>" . optionlist($columns, $val, true) . "</select>";
|
echo "<div><select name='order[$i]'><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 name='order[$i]' onchange='selectAddRow(this);'><option>" . optionlist($columns, null, true) . "</select>";
|
echo "<div><select name='order[$i]' onchange='selectAddRow(this);'><option>" . optionlist($columns, null, true) . "</select>";
|
||||||
echo "<label><input type='checkbox' name='desc[$i]' value='1'>" . lang('descending') . "</label></div>\n"; // not checkbox() to allow selectAddRow()
|
echo checkbox("desc[$i]", 1, 0, lang('descending')) . "</div>\n";
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -297,7 +245,7 @@ username.form['auth[driver]'].onchange();
|
|||||||
*/
|
*/
|
||||||
function selectLimitPrint($limit) {
|
function selectLimitPrint($limit) {
|
||||||
echo "<fieldset><legend>" . lang('Limit') . "</legend><div>"; // <div> for easy styling
|
echo "<fieldset><legend>" . lang('Limit') . "</legend><div>"; // <div> for easy styling
|
||||||
echo "<input type='number' name='limit' class='size' value='" . h($limit) . "' onchange='selectFieldChange(this.form);'>";
|
echo "<input name='limit' size='3' value='" . h($limit) . "'>";
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -306,53 +254,22 @@ username.form['auth[driver]'].onchange();
|
|||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function selectLengthPrint($text_length) {
|
function selectLengthPrint($text_length) {
|
||||||
if ($text_length !== null) {
|
if (isset($text_length)) {
|
||||||
echo "<fieldset><legend>" . lang('Text length') . "</legend><div>";
|
echo "<fieldset><legend>" . lang('Text length') . "</legend><div>";
|
||||||
echo "<input type='number' name='text_length' class='size' value='" . h($text_length) . "'>";
|
echo '<input name="text_length" size="3" value="' . h($text_length) . '">';
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Print action box in select
|
/** Print action box in select
|
||||||
* @param array
|
|
||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function selectActionPrint($indexes) {
|
function selectActionPrint() {
|
||||||
echo "<fieldset><legend>" . lang('Action') . "</legend><div>";
|
echo "<fieldset><legend>" . lang('Action') . "</legend><div>";
|
||||||
echo "<input type='submit' value='" . lang('Select') . "'>";
|
echo "<input type='submit' value='" . lang('Select') . "'>";
|
||||||
echo " <span id='noindex' title='" . lang('Full table scan') . "'></span>";
|
|
||||||
echo "<script type='text/javascript'>\n";
|
|
||||||
echo "var indexColumns = ";
|
|
||||||
$columns = array();
|
|
||||||
foreach ($indexes as $index) {
|
|
||||||
if ($index["type"] != "FULLTEXT") {
|
|
||||||
$columns[reset($index["columns"])] = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$columns[""] = 1;
|
|
||||||
foreach ($columns as $key => $val) {
|
|
||||||
json_row($key);
|
|
||||||
}
|
|
||||||
echo ";\n";
|
|
||||||
echo "selectFieldChange(document.getElementById('form'));\n";
|
|
||||||
echo "</script>\n";
|
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Print command box in select
|
|
||||||
* @return bool whether to print default commands
|
|
||||||
*/
|
|
||||||
function selectCommandPrint() {
|
|
||||||
return !information_schema(DB);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Print import box in select
|
|
||||||
* @return bool whether to print default import
|
|
||||||
*/
|
|
||||||
function selectImportPrint() {
|
|
||||||
return !information_schema(DB);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Print extra text in the end of a select form
|
/** Print extra text in the end of a select form
|
||||||
* @param array fields holding e-mails
|
* @param array fields holding e-mails
|
||||||
* @param array selectable columns
|
* @param array selectable columns
|
||||||
@@ -387,11 +304,11 @@ username.form['auth[driver]'].onchange();
|
|||||||
* @return array expressions to join by AND
|
* @return array expressions to join by AND
|
||||||
*/
|
*/
|
||||||
function selectSearchProcess($fields, $indexes) {
|
function selectSearchProcess($fields, $indexes) {
|
||||||
global $jush;
|
global $connection;
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach ($indexes as $i => $index) {
|
foreach ($indexes as $i => $index) {
|
||||||
if ($index["type"] == "FULLTEXT" && $_GET["fulltext"][$i] != "") {
|
if ($index["type"] == "FULLTEXT" && $_GET["fulltext"][$i] != "") {
|
||||||
$return[] = "MATCH (" . implode(", ", array_map('idf_escape', $index["columns"])) . ") AGAINST (" . q($_GET["fulltext"][$i]) . (isset($_GET["boolean"][$i]) ? " IN BOOLEAN MODE" : "") . ")";
|
$return[] = "MATCH (" . implode(", ", array_map('idf_escape', $index["columns"])) . ") AGAINST (" . $connection->quote($_GET["fulltext"][$i]) . (isset($_GET["boolean"][$i]) ? " IN BOOLEAN MODE" : "") . ")";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach ((array) $_GET["where"] as $val) {
|
foreach ((array) $_GET["where"] as $val) {
|
||||||
@@ -400,8 +317,6 @@ username.form['auth[driver]'].onchange();
|
|||||||
if (ereg('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"]) {
|
|
||||||
$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 (!ereg('NULL$', $val["op"])) {
|
} elseif (!ereg('NULL$', $val["op"])) {
|
||||||
@@ -413,12 +328,9 @@ 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 = ereg('char|text|enum|set', $field["type"]);
|
if (is_numeric($val["val"]) || !ereg('int|float|double|decimal', $field["type"])) {
|
||||||
if ((is_numeric($val["val"]) || !ereg('int|float|double|decimal|bit', $field["type"]))
|
|
||||||
&& (!ereg("[\x80-\xFF]", $val["val"]) || $is_text)
|
|
||||||
) {
|
|
||||||
$name = idf_escape($name);
|
$name = idf_escape($name);
|
||||||
$cols[] = ($jush == "sql" && $is_text && !ereg('^utf8', $field["collation"]) ? "CONVERT($name USING utf8)" : $name);
|
$cols[] = (ereg('char|text|enum|set', $field["type"]) && !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");
|
||||||
@@ -447,7 +359,7 @@ username.form['auth[driver]'].onchange();
|
|||||||
* @return string expression to use in LIMIT, will be escaped
|
* @return string expression to use in LIMIT, will be escaped
|
||||||
*/
|
*/
|
||||||
function selectLimitProcess() {
|
function selectLimitProcess() {
|
||||||
return (isset($_GET["limit"]) ? $_GET["limit"] : "50");
|
return (isset($_GET["limit"]) ? $_GET["limit"] : "30");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Process length box in select
|
/** Process length box in select
|
||||||
@@ -466,19 +378,6 @@ username.form['auth[driver]'].onchange();
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Build SQL query used in select
|
|
||||||
* @param array result of selectColumnsProcess()[0]
|
|
||||||
* @param array result of selectSearchProcess()
|
|
||||||
* @param array result of selectColumnsProcess()[1]
|
|
||||||
* @param array result of selectOrderProcess()
|
|
||||||
* @param int result of selectLimitProcess()
|
|
||||||
* @param int index of page starting at zero
|
|
||||||
* @return string empty string to use default query
|
|
||||||
*/
|
|
||||||
function selectQueryBuild($select, $where, $group, $order, $limit, $page) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Query printed after execution in the message
|
/** Query printed after execution in the message
|
||||||
* @param string executed query
|
* @param string executed query
|
||||||
* @return string
|
* @return string
|
||||||
@@ -486,13 +385,13 @@ username.form['auth[driver]'].onchange();
|
|||||||
function messageQuery($query) {
|
function messageQuery($query) {
|
||||||
global $jush;
|
global $jush;
|
||||||
restart_session();
|
restart_session();
|
||||||
$history = &get_session("queries");
|
$id = "sql-" . count($_SESSION["messages"]);
|
||||||
$id = "sql-" . count($history[$_GET["db"]]);
|
$history = &get_session("history");
|
||||||
if (strlen($query) > 1e6) {
|
$history[$_GET["db"]][] = (strlen($query) > 1e6 // not DB - reset in drop database
|
||||||
$query = ereg_replace('[\x80-\xFF]+$', '', substr($query, 0, 1e6)) . "\n..."; // [\x80-\xFF] - valid UTF-8, \n - can end by one-line comment
|
? ereg_replace('[\x80-\xFF]+$', '', substr($query, 0, 1e6)) . "\n..." // [\x80-\xFF] - valid UTF-8, \n - can end by one-line comment
|
||||||
}
|
: $query
|
||||||
$history[$_GET["db"]][] = array($query, time()); // not DB - $_GET["db"] is changed in database.inc.php //! respect $_GET["ns"]
|
); //! respect $_GET["ns"]
|
||||||
return " <span class='time'>" . @date("H:i:s") . "</span> <a href='#$id' onclick=\"return !toggle('$id');\">" . lang('SQL command') . "</a><div id='$id' class='hidden'><pre><code class='jush-$jush'>" . shorten_utf8($query, 1000) . '</code></pre><p><a href="' . h(str_replace("db=" . urlencode(DB), "db=" . urlencode($_GET["db"]), ME) . 'sql=&history=' . (count($history[$_GET["db"]]) - 1)) . '">' . lang('Edit') . '</a></div>'; // @ - time zone may be not set
|
return " <a href='#$id' onclick=\"return !toggle('$id');\">" . lang('SQL command') . "</a><div id='$id' class='hidden'><pre class='jush-$jush'>" . shorten_utf8($query, 1000) . '</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>';
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Functions displayed in edit form
|
/** Functions displayed in edit form
|
||||||
@@ -509,9 +408,6 @@ username.form['auth[driver]'].onchange();
|
|||||||
$return .= "/$val";
|
$return .= "/$val";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($key && !ereg('set|blob|bytea|raw|file', $field["type"])) {
|
|
||||||
$return .= "/=";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return explode("/", $return);
|
return explode("/", $return);
|
||||||
@@ -526,9 +422,8 @@ username.form['auth[driver]'].onchange();
|
|||||||
*/
|
*/
|
||||||
function editInput($table, $field, $attrs, $value) {
|
function editInput($table, $field, $attrs, $value) {
|
||||||
if ($field["type"] == "enum") {
|
if ($field["type"] == "enum") {
|
||||||
return (isset($_GET["select"]) ? "<label><input type='radio'$attrs value='-1' checked><i>" . lang('original') . "</i></label> " : "")
|
return ($field["null"] ? "<label><input type='radio'$attrs value=''" . (isset($value) || isset($_GET["select"]) ? "" : " checked") . "><em>NULL</em></label> " : "")
|
||||||
. ($field["null"] ? "<label><input type='radio'$attrs value=''" . ($value !== null || isset($_GET["select"]) ? "" : " checked") . "><i>NULL</i></label> " : "")
|
. "<input type='radio'$attrs value='0'" . ($value === 0 ? " checked" : "") . ">"
|
||||||
. enum_input("radio", $attrs, $field, $value, 0) // 0 - empty
|
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
return "";
|
return "";
|
||||||
@@ -541,11 +436,9 @@ username.form['auth[driver]'].onchange();
|
|||||||
* @return string expression to use in a query
|
* @return string expression to use in a query
|
||||||
*/
|
*/
|
||||||
function processInput($field, $value, $function = "") {
|
function processInput($field, $value, $function = "") {
|
||||||
if ($function == "=") {
|
global $connection;
|
||||||
return $value; // SQL injection
|
|
||||||
}
|
|
||||||
$name = $field["field"];
|
$name = $field["field"];
|
||||||
$return = ($field["type"] == "bit" && ereg("^([0-9]+|b'[0-1]+')\$", $value) ? $value : q($value));
|
$return = $connection->quote($value);
|
||||||
if (ereg('^(now|getdate|uuid)$', $function)) {
|
if (ereg('^(now|getdate|uuid)$', $function)) {
|
||||||
$return = "$function()";
|
$return = "$function()";
|
||||||
} elseif (ereg('^current_(date|timestamp)$', $function)) {
|
} elseif (ereg('^current_(date|timestamp)$', $function)) {
|
||||||
@@ -553,19 +446,21 @@ username.form['auth[driver]'].onchange();
|
|||||||
} elseif (ereg('^([+-]|\\|\\|)$', $function)) {
|
} elseif (ereg('^([+-]|\\|\\|)$', $function)) {
|
||||||
$return = idf_escape($name) . " $function $return";
|
$return = idf_escape($name) . " $function $return";
|
||||||
} elseif (ereg('^[+-] 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("~^([0-9]+|'[0-9.: -]') [A-Z_]+$~i", $value) ? $value : $return);
|
||||||
} elseif (ereg('^(addtime|subtime|concat)$', $function)) {
|
} elseif (ereg('^(addtime|subtime|concat)$', $function)) {
|
||||||
$return = "$function(" . idf_escape($name) . ", $return)";
|
$return = "$function(" . idf_escape($name) . ", $return)";
|
||||||
} elseif (ereg('^(md5|sha1|password|encrypt)$', $function)) {
|
} elseif (ereg('^(md5|sha1|password|encrypt)$', $function)) {
|
||||||
$return = "$function($return)";
|
$return = "$function($return)";
|
||||||
}
|
}
|
||||||
return unconvert_field($field, $return);
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns export output options
|
/** Returns export output options
|
||||||
* @return array
|
* @param bool generate select (otherwise radio)
|
||||||
|
* @param string
|
||||||
|
* @return string
|
||||||
*/
|
*/
|
||||||
function dumpOutput() {
|
function dumpOutput($select, $value = "") {
|
||||||
$return = array('text' => lang('open'), 'file' => lang('save'));
|
$return = array('text' => lang('open'), 'file' => lang('save'));
|
||||||
if (function_exists('gzencode')) {
|
if (function_exists('gzencode')) {
|
||||||
$return['gz'] = 'gzip';
|
$return['gz'] = 'gzip';
|
||||||
@@ -573,262 +468,97 @@ username.form['auth[driver]'].onchange();
|
|||||||
if (function_exists('bzcompress')) {
|
if (function_exists('bzcompress')) {
|
||||||
$return['bz2'] = 'bzip2';
|
$return['bz2'] = 'bzip2';
|
||||||
}
|
}
|
||||||
return $return;
|
// ZipArchive requires temporary file, ZIP can be created by gzcompress - see PEAR File_Archive
|
||||||
|
return html_select("output", $return, $value, $select);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns export format options
|
/** Returns export format options
|
||||||
* @return array empty to disable export
|
* @param bool generate select (otherwise radio)
|
||||||
|
* @param string
|
||||||
|
* @return string
|
||||||
*/
|
*/
|
||||||
function dumpFormat() {
|
function dumpFormat($select, $value = "") {
|
||||||
return array('sql' => 'SQL', 'csv' => 'CSV,', 'csv;' => 'CSV;', 'tsv' => 'TSV');
|
return html_select("format", array('sql' => 'SQL', 'csv' => 'CSV,', 'csv;' => 'CSV;'), $value, $select);
|
||||||
}
|
|
||||||
|
|
||||||
/** Export database structure
|
|
||||||
* @param string
|
|
||||||
* @return null prints data
|
|
||||||
*/
|
|
||||||
function dumpDatabase($db) {
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Export table structure
|
|
||||||
* @param string
|
|
||||||
* @param string
|
|
||||||
* @param bool
|
|
||||||
* @return null prints data
|
|
||||||
*/
|
|
||||||
function dumpTable($table, $style, $is_view = false) {
|
|
||||||
if ($_POST["format"] != "sql") {
|
|
||||||
echo "\xef\xbb\xbf"; // UTF-8 byte order mark
|
|
||||||
if ($style) {
|
|
||||||
dump_csv(array_keys(fields($table)));
|
|
||||||
}
|
|
||||||
} elseif ($style) {
|
|
||||||
$create = create_sql($table, $_POST["auto_increment"]);
|
|
||||||
if ($create) {
|
|
||||||
if ($style == "DROP+CREATE") {
|
|
||||||
echo "DROP " . ($is_view ? "VIEW" : "TABLE") . " IF EXISTS " . table($table) . ";\n";
|
|
||||||
}
|
|
||||||
if ($is_view) {
|
|
||||||
$create = remove_definer($create);
|
|
||||||
}
|
|
||||||
echo "$create;\n\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Export table data
|
|
||||||
* @param string
|
|
||||||
* @param string
|
|
||||||
* @param string
|
|
||||||
* @return null prints data
|
|
||||||
*/
|
|
||||||
function dumpData($table, $style, $query) {
|
|
||||||
global $connection, $jush;
|
|
||||||
$max_packet = ($jush == "sqlite" ? 0 : 1048576); // default, minimum is 1024
|
|
||||||
if ($style) {
|
|
||||||
if ($_POST["format"] == "sql" && $style == "TRUNCATE+INSERT") {
|
|
||||||
echo truncate_sql($table) . ";\n";
|
|
||||||
}
|
|
||||||
if ($_POST["format"] == "sql") {
|
|
||||||
$fields = fields($table);
|
|
||||||
}
|
|
||||||
$result = $connection->query($query, 1); // 1 - MYSQLI_USE_RESULT //! enum and set as numbers
|
|
||||||
if ($result) {
|
|
||||||
$insert = "";
|
|
||||||
$buffer = "";
|
|
||||||
$keys = array();
|
|
||||||
$suffix = "";
|
|
||||||
while ($row = $result->fetch_row()) {
|
|
||||||
if (!$keys) {
|
|
||||||
$values = array();
|
|
||||||
foreach ($row as $val) {
|
|
||||||
$field = $result->fetch_field();
|
|
||||||
$keys[] = $field->name;
|
|
||||||
$key = idf_escape($field->name);
|
|
||||||
$values[] = "$key = VALUES($key)";
|
|
||||||
}
|
|
||||||
$suffix = ($style == "INSERT+UPDATE" ? "\nON DUPLICATE KEY UPDATE " . implode(", ", $values) : "") . ";\n";
|
|
||||||
}
|
|
||||||
if ($_POST["format"] != "sql") {
|
|
||||||
if ($style == "table") {
|
|
||||||
dump_csv($keys);
|
|
||||||
$style = "INSERT";
|
|
||||||
}
|
|
||||||
dump_csv($row);
|
|
||||||
} else {
|
|
||||||
if (!$insert) {
|
|
||||||
$insert = "INSERT INTO " . table($table) . " (" . implode(", ", array_map('idf_escape', $keys)) . ") VALUES";
|
|
||||||
}
|
|
||||||
foreach ($row as $key => $val) {
|
|
||||||
$row[$key] = ($val !== null
|
|
||||||
? (ereg('int|float|double|decimal|bit', $fields[$keys[$key]]["type"]) && $val != '' ? $val : q($val)) //! columns looking like functions
|
|
||||||
: "NULL"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
$s = ($max_packet ? "\n" : " ") . "(" . implode(",\t", $row) . ")";
|
|
||||||
if (!$buffer) {
|
|
||||||
$buffer = $insert . $s;
|
|
||||||
} elseif (strlen($buffer) + 4 + strlen($s) + strlen($suffix) < $max_packet) { // 4 - length specification
|
|
||||||
$buffer .= ",$s";
|
|
||||||
} else {
|
|
||||||
echo $buffer . $suffix;
|
|
||||||
$buffer = $insert . $s;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($buffer) {
|
|
||||||
echo $buffer . $suffix;
|
|
||||||
}
|
|
||||||
} elseif ($_POST["format"] == "sql") {
|
|
||||||
echo "-- " . str_replace("\n", " ", $connection->error) . "\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Set export filename
|
|
||||||
* @param string
|
|
||||||
* @return string filename without extension
|
|
||||||
*/
|
|
||||||
function dumpFilename($identifier) {
|
|
||||||
return friendly_url($identifier != "" ? $identifier : (SERVER != "" ? SERVER : "localhost"));
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Send headers for export
|
|
||||||
* @param string
|
|
||||||
* @param bool
|
|
||||||
* @return string extension
|
|
||||||
*/
|
|
||||||
function dumpHeaders($identifier, $multi_table = false) {
|
|
||||||
$output = $_POST["output"];
|
|
||||||
$ext = (ereg('sql', $_POST["format"]) ? "sql" : ($multi_table ? "tar" : "csv")); // multiple CSV packed to TAR
|
|
||||||
header("Content-Type: " .
|
|
||||||
($output == "bz2" ? "application/x-bzip" :
|
|
||||||
($output == "gz" ? "application/x-gzip" :
|
|
||||||
($ext == "tar" ? "application/x-tar" :
|
|
||||||
($ext == "sql" || $output != "file" ? "text/plain" : "text/csv") . "; charset=utf-8"
|
|
||||||
))));
|
|
||||||
if ($output == "bz2") {
|
|
||||||
ob_start('bzcompress', 1e6);
|
|
||||||
}
|
|
||||||
if ($output == "gz") {
|
|
||||||
ob_start('gzencode', 1e6);
|
|
||||||
}
|
|
||||||
return $ext;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Print homepage
|
|
||||||
* @return bool whether to print default homepage
|
|
||||||
*/
|
|
||||||
function homepage() {
|
|
||||||
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 ($_GET["ns"] !== "" ? '<a href="' . h(ME) . 'schema=">' . lang('Database schema') . "</a>\n" : "");
|
|
||||||
echo (support("privileges") ? "<a href='" . h(ME) . "privileges='>" . lang('Privileges') . "</a>\n" : "");
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Prints navigation after Adminer title
|
/** Prints navigation after Adminer title
|
||||||
* @param string can be "auth" if there is no database connection, "db" if there is no database selected, "ns" with invalid schema
|
* @param string can be "auth" if there is no database connection or "db" if there is no database selected
|
||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function navigation($missing) {
|
function navigation($missing) {
|
||||||
global $VERSION, $token, $jush, $drivers;
|
global $VERSION, $connection, $token, $jush, $drivers;
|
||||||
?>
|
?>
|
||||||
<h1>
|
<h1>
|
||||||
<?php echo $this->name(); ?> <span class="version"><?php echo $VERSION; ?></span>
|
<a href="http://www.adminer.org/" id="h1"><?php echo $this->name(); ?></a>
|
||||||
|
<span class="version"><?php echo $VERSION; ?></span>
|
||||||
<a href="http://www.adminer.org/#download" 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 $driver => $servers) {
|
foreach ((array) $_SESSION["passwords"] 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 (isset($password)) {
|
||||||
if ($first) {
|
if ($first) {
|
||||||
echo "<p id='logins' onmouseover='menuOver(this, event);' onmouseout='menuOut(this);'>\n";
|
echo "<p>\n";
|
||||||
$first = false;
|
$first = false;
|
||||||
}
|
}
|
||||||
$dbs = $_SESSION["db"][$driver][$server][$username];
|
echo "<a href='" . h(auth_url($driver, $server, $username)) . "'>($drivers[$driver]) " . h($username . ($server != "" ? "@$server" : "")) . "</a><br>\n";
|
||||||
foreach (($dbs ? array_keys($dbs) : array("")) as $db) {
|
|
||||||
echo "<a href='" . h(auth_url($driver, $server, $username, $db)) . "'>($drivers[$driver]) " . h($username . ($server != "" ? "@$server" : "") . ($db != "" ? " - $db" : "")) . "</a><br>\n";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
$databases = get_databases();
|
||||||
?>
|
?>
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
<p class="logout">
|
<p class="logout">
|
||||||
<?php
|
<a href="<?php echo h(ME); ?>sql="><?php echo bold(lang('SQL command'), isset($_GET["sql"])); ?></a>
|
||||||
if (DB == "" || !$missing) {
|
<a href="<?php echo h(ME); ?>dump=<?php echo urlencode(isset($_GET["table"]) ? $_GET["table"] : $_GET["select"]); ?>"><?php echo bold(lang('Dump'), isset($_GET["dump"])); ?></a>
|
||||||
echo "<a href='" . h(ME) . "sql='" . bold(isset($_GET["sql"])) . ">" . lang('SQL command') . "</a>\n";
|
|
||||||
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";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
<input type="submit" name="logout" value="<?php echo lang('Logout'); ?>" id="logout">
|
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
|
<input type="submit" name="logout" value="<?php echo lang('Logout'); ?>">
|
||||||
</p>
|
</p>
|
||||||
</form>
|
</form>
|
||||||
<?php
|
|
||||||
$this->databasesPrint($missing);
|
|
||||||
if ($_GET["ns"] !== "" && !$missing && DB != "") {
|
|
||||||
echo '<p><a href="' . h(ME) . 'create="' . bold($_GET["create"] === "") . ">" . lang('Create new table') . "</a>\n";
|
|
||||||
$tables = tables_list();
|
|
||||||
if (!$tables) {
|
|
||||||
echo "<p class='message'>" . lang('No tables.') . "\n";
|
|
||||||
} else {
|
|
||||||
$this->tablesPrint($tables);
|
|
||||||
$links = array();
|
|
||||||
foreach ($tables as $table => $type) {
|
|
||||||
$links[] = preg_quote($table, '/');
|
|
||||||
}
|
|
||||||
echo "<script type='text/javascript'>\n";
|
|
||||||
echo "var 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";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Prints databases list in menu
|
|
||||||
* @param string
|
|
||||||
* @return null
|
|
||||||
*/
|
|
||||||
function databasesPrint($missing) {
|
|
||||||
global $connection;
|
|
||||||
$databases = $this->databases();
|
|
||||||
?>
|
|
||||||
<form action="">
|
<form action="">
|
||||||
<p id="dbs">
|
<p>
|
||||||
<?php
|
<?php hidden_fields_get(); ?>
|
||||||
hidden_fields_get();
|
<?php echo ($databases ? html_select("db", array("" => "(" . lang('database') . ")") + $databases, DB, "this.form.submit();") : '<input name="db" value="' . h(DB) . '">'); ?>
|
||||||
echo ($databases
|
|
||||||
? '<select name="db" onmousedown="dbMouseDown(event, this);" onchange="dbChange(this);">' . optionlist(array("" => "(" . lang('database') . ")") + $databases, DB) . '</select>'
|
|
||||||
: '<input name="db" value="' . h(DB) . '" autocapitalize="off">'
|
|
||||||
);
|
|
||||||
?>
|
|
||||||
<input type="submit" value="<?php echo lang('Use'); ?>"<?php echo ($databases ? " class='hidden'" : ""); ?>>
|
<input type="submit" value="<?php echo lang('Use'); ?>"<?php echo ($databases ? " class='hidden'" : ""); ?>>
|
||||||
<?php
|
<?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>" . html_select("ns", array("" => "(" . lang('schema') . ")") + schemas(), $_GET["ns"], "this.form.submit();");
|
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"]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($_GET["ns"] !== "") {
|
||||||
|
$tables = tables_list();
|
||||||
|
if (!$tables) {
|
||||||
|
echo "<p class='message'>" . lang('No tables.') . "\n";
|
||||||
|
} else {
|
||||||
|
$this->tablesPrint($tables);
|
||||||
|
$links = array();
|
||||||
|
foreach ($tables as $table => $type) {
|
||||||
|
$links[] = preg_quote($table, '/');
|
||||||
|
}
|
||||||
|
echo "<script type='text/javascript'>\n";
|
||||||
|
echo "var jushLinks = { $jush: [ '" . addcslashes(h(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";
|
||||||
|
}
|
||||||
|
echo '<p><a href="' . h(ME) . 'create=">' . bold(lang('Create new table'), $_GET["create"] === "") . "</a>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
echo (isset($_GET["sql"]) ? '<input type="hidden" name="sql" value="">'
|
||||||
|
: (isset($_GET["schema"]) ? '<input type="hidden" name="schema" value="">'
|
||||||
|
: (isset($_GET["dump"]) ? '<input type="hidden" name="dump" value="">'
|
||||||
|
: "")));
|
||||||
|
echo "</p></form>\n";
|
||||||
}
|
}
|
||||||
echo (isset($_GET["sql"]) ? '<input type="hidden" name="sql" value="">'
|
|
||||||
: (isset($_GET["schema"]) ? '<input type="hidden" name="schema" value="">'
|
|
||||||
: (isset($_GET["dump"]) ? '<input type="hidden" name="dump" value="">'
|
|
||||||
: "")));
|
|
||||||
echo "</p></form>\n";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Prints table list in menu
|
/** Prints table list in menu
|
||||||
@@ -836,16 +566,23 @@ echo ($databases
|
|||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function tablesPrint($tables) {
|
function tablesPrint($tables) {
|
||||||
echo "<p id='tables' onmouseover='menuOver(this, event);' onmouseout='menuOut(this);'>\n";
|
echo "<ul id='tables'>\n";
|
||||||
|
$i = 1;
|
||||||
foreach ($tables as $table => $type) {
|
foreach ($tables as $table => $type) {
|
||||||
echo '<a href="' . h(ME) . 'select=' . urlencode($table) . '"' . bold($_GET["select"] == $table) . ">" . lang('select') . "</a> ";
|
echo "<li onmouseover=\"toggle('table-$i');\" onmouseout=\"toggle('table-$i');\"><a href='" . h(ME) . "table=" . urlencode($table) . "'>" . bold($this->tableName(array("Name" => $table)), $_GET["table"] == $table) . "</a>"; //! Adminer::tableName may work with full table status
|
||||||
echo '<a href="' . h(ME) . 'table=' . urlencode($table) . '"' . bold($_GET["table"] == $table) . " title='" . lang('Show structure') . "'>" . $this->tableName(array("Name" => $table)) . "</a><br>\n"; //! Adminer::tableName may work with full table status
|
echo "<span id='table-$i' class='hidden'>";
|
||||||
|
echo ' <a href="' . h(ME) . 'select=' . urlencode($table) . '">' . bold(lang('select'), $_GET["select"] == $table) . '</a>';
|
||||||
|
echo ' <a href="' . h(ME) . 'create=' . urlencode($table) . '">' . bold(lang('alter'), $_GET["create"] == $table) . '</a>';
|
||||||
|
echo ' <a href="' . h(ME) . 'edit=' . urlencode($table) . '">' . bold(lang('insert'), $_GET["edit"] == $table) . '</a>';
|
||||||
|
echo "</span>\n";
|
||||||
|
$i++;
|
||||||
}
|
}
|
||||||
|
echo "</ul>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$adminer = (function_exists('adminer_object') ? adminer_object() : new Adminer);
|
$adminer = (function_exists('adminer_object') ? adminer_object() : new Adminer);
|
||||||
if ($adminer->operators === null) {
|
if (!isset($adminer->operators)) {
|
||||||
$adminer->operators = $operators;
|
$adminer->operators = $operators;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,12 @@
|
|||||||
<?php
|
<?php
|
||||||
$connection = '';
|
$connection = '';
|
||||||
|
|
||||||
|
if (!$drivers) {
|
||||||
|
page_header(lang('No extension'), lang('None of the supported PHP extensions (%s) are available.', implode(", ", $possible_drivers)), null);
|
||||||
|
page_footer("auth");
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
$token = $_SESSION["token"];
|
$token = $_SESSION["token"];
|
||||||
if (!$_SESSION["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
|
||||||
@@ -14,24 +20,21 @@ if ($_COOKIE["adminer_permanent"]) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$auth = $_POST["auth"];
|
if (isset($_POST["server"])) {
|
||||||
if ($auth) {
|
|
||||||
session_regenerate_id(); // defense against session fixation
|
session_regenerate_id(); // defense against session fixation
|
||||||
$_SESSION["pwds"][$auth["driver"]][$auth["server"]][$auth["username"]] = $auth["password"];
|
$_SESSION["passwords"][$_POST["driver"]][$_POST["server"]][$_POST["username"]] = $_POST["password"];
|
||||||
$_SESSION["db"][$auth["driver"]][$auth["server"]][$auth["username"]][$auth["db"]] = true;
|
if ($_POST["permanent"]) {
|
||||||
if ($auth["permanent"]) {
|
$key = base64_encode($_POST["driver"]) . "-" . base64_encode($_POST["server"]) . "-" . base64_encode($_POST["username"]);
|
||||||
$key = base64_encode($auth["driver"]) . "-" . base64_encode($auth["server"]) . "-" . base64_encode($auth["username"]) . "-" . base64_encode($auth["db"]);
|
|
||||||
$private = $adminer->permanentLogin();
|
$private = $adminer->permanentLogin();
|
||||||
$permanent[$key] = "$key:" . base64_encode($private ? encrypt_string($auth["password"], $private) : "");
|
$permanent[$key] = "$key:" . base64_encode($private ? encrypt_string($_POST["password"], $private) : "");
|
||||||
cookie("adminer_permanent", implode(" ", $permanent));
|
cookie("adminer_permanent", implode(" ", $permanent));
|
||||||
}
|
}
|
||||||
if (count($_POST) == 1 // 1 - auth
|
if (count($_POST) == ($_POST["permanent"] ? 5 : 4) // 4 - driver, server, username, password
|
||||||
|| DRIVER != $auth["driver"]
|
|| DRIVER != $_POST["driver"]
|
||||||
|| SERVER != $auth["server"]
|
|| SERVER != $_POST["server"]
|
||||||
|| $_GET["username"] !== $auth["username"] // "0" == "00"
|
|| $_GET["username"] !== $_POST["username"] // "0" == "00"
|
||||||
|| DB != $auth["db"]
|
|
||||||
) {
|
) {
|
||||||
redirect(auth_url($auth["driver"], $auth["server"], $auth["username"], $auth["db"]));
|
redirect(auth_url($_POST["driver"], $_POST["server"], $_POST["username"]));
|
||||||
}
|
}
|
||||||
} elseif ($_POST["logout"]) {
|
} elseif ($_POST["logout"]) {
|
||||||
if ($token && $_POST["token"] != $token) {
|
if ($token && $_POST["token"] != $token) {
|
||||||
@@ -39,34 +42,26 @@ if ($auth) {
|
|||||||
page_footer("db");
|
page_footer("db");
|
||||||
exit;
|
exit;
|
||||||
} else {
|
} else {
|
||||||
foreach (array("pwds", "db", "dbs", "queries") as $key) {
|
foreach (array("passwords", "databases", "history") as $key) {
|
||||||
set_session($key, null);
|
set_session($key, null);
|
||||||
}
|
}
|
||||||
unset_permanent();
|
$key = base64_encode(DRIVER) . "-" . base64_encode(SERVER) . "-" . base64_encode($_GET["username"]);
|
||||||
|
if ($permanent[$key]) {
|
||||||
|
unset($permanent[$key]);
|
||||||
|
cookie("adminer_permanent", implode(" ", $permanent));
|
||||||
|
}
|
||||||
redirect(substr(preg_replace('~(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["passwords"]) {
|
||||||
session_regenerate_id();
|
session_regenerate_id();
|
||||||
$private = $adminer->permanentLogin(); // try to decode even if not set
|
$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($driver, $server, $username, $db) = array_map('base64_decode', explode("-", $key));
|
list($driver, $server, $username) = array_map('base64_decode', explode("-", $key));
|
||||||
$_SESSION["pwds"][$driver][$server][$username] = decrypt_string(base64_decode($cipher), $private);
|
$_SESSION["passwords"][$driver][$server][$username] = decrypt_string($cipher, $private);
|
||||||
$_SESSION["db"][$driver][$server][$username][$db] = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function unset_permanent() {
|
|
||||||
global $permanent;
|
|
||||||
foreach ($permanent as $key => $val) {
|
|
||||||
list($driver, $server, $username, $db) = array_map('base64_decode', explode("-", $key));
|
|
||||||
if ($driver == DRIVER && $server == SERVER && $username == $_GET["username"] && $db == DB) {
|
|
||||||
unset($permanent[$key]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cookie("adminer_permanent", implode(" ", $permanent));
|
|
||||||
}
|
|
||||||
|
|
||||||
function auth_error($exception = null) {
|
function auth_error($exception = null) {
|
||||||
global $connection, $adminer, $token;
|
global $connection, $adminer, $token;
|
||||||
$session_name = session_name();
|
$session_name = session_name();
|
||||||
@@ -77,64 +72,36 @@ function auth_error($exception = null) {
|
|||||||
if (($_COOKIE[$session_name] || $_GET[$session_name]) && !$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 {
|
||||||
$password = &get_session("pwds");
|
$password = &get_session("passwords");
|
||||||
if ($password !== null) {
|
if (isset($password)) {
|
||||||
$error = h($exception ? $exception->getMessage() : (is_string($connection) ? $connection : lang('Invalid credentials.')));
|
$error = h($exception ? $exception->getMessage() : (is_string($connection) ? $connection : lang('Invalid credentials.')));
|
||||||
$password = null;
|
$password = null;
|
||||||
}
|
}
|
||||||
unset_permanent();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
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();
|
||||||
echo "<div>";
|
echo "<div>";
|
||||||
hidden_fields($_POST, array("auth")); // expired session
|
hidden_fields($_POST, array("driver", "server", "username", "password", "permanent")); // expired session
|
||||||
echo "</div>\n";
|
echo "</div>\n";
|
||||||
echo "</form>\n";
|
echo "</form>\n";
|
||||||
page_footer("auth");
|
page_footer("auth");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($_GET["username"])) {
|
if (isset($_GET["username"]) && class_exists("Min_DB")) { // doesn't exists with passing wrong driver
|
||||||
if (!class_exists("Min_DB")) {
|
|
||||||
unset($_SESSION["pwds"][DRIVER]);
|
|
||||||
unset_permanent();
|
|
||||||
page_header(lang('No extension'), lang('None of the supported PHP extensions (%s) are available.', implode(", ", $possible_drivers)), false);
|
|
||||||
page_footer("auth");
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
$connection = connect();
|
$connection = connect();
|
||||||
}
|
}
|
||||||
if (is_string($connection) || !$adminer->login($_GET["username"], get_session("pwds"))) {
|
if (is_string($connection) || !$adminer->login($_GET["username"], get_session("passwords"))) {
|
||||||
auth_error();
|
auth_error();
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
$token = $_SESSION["token"]; ///< @var string CSRF protection
|
$token = $_SESSION["token"]; ///< @var string CSRF protection
|
||||||
if ($auth && $_POST["token"]) {
|
if (isset($_POST["server"]) && $_POST["token"]) {
|
||||||
$_POST["token"] = $token; // reset token after explicit login
|
$_POST["token"] = $token; // reset token after explicit login
|
||||||
}
|
}
|
||||||
|
$error = ($_POST ///< @var string
|
||||||
$error = ''; ///< @var string
|
? ($_POST["token"] == $token ? "" : lang('Invalid CSRF token. Send the form again.'))
|
||||||
if ($_POST) {
|
: ($_SERVER["REQUEST_METHOD"] != "POST" ? "" : lang('Too big POST data. Reduce the data or increase the %s configuration directive.', '"post_max_size"')) // posted form with no data means that post_max_size exceeded because Adminer always sends token at least
|
||||||
if ($_POST["token"] != $token) {
|
);
|
||||||
$ini = "max_input_vars";
|
|
||||||
$max_vars = ini_get($ini);
|
|
||||||
if (extension_loaded("suhosin")) {
|
|
||||||
foreach (array("suhosin.request.max_vars", "suhosin.post.max_vars") as $key) {
|
|
||||||
$val = ini_get($key);
|
|
||||||
if ($val && (!$max_vars || $val < $max_vars)) {
|
|
||||||
$ini = $key;
|
|
||||||
$max_vars = $val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$error = (!$_POST["token"] && $max_vars
|
|
||||||
? lang('Maximum number of allowed fields exceeded. Please increase %s.', "'$ini'")
|
|
||||||
: lang('Invalid CSRF token. Send the form again.')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
} elseif ($_SERVER["REQUEST_METHOD"] == "POST") {
|
|
||||||
// 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'");
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ 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 = !ereg('^(unsafe_raw)?$', ini_get("filter.default"));
|
$filter = (!ereg('^(unsafe_raw)?$', ini_get("filter.default")) || ini_get("filter.default_flags"));
|
||||||
if ($filter || ini_get("filter.default_flags")) {
|
if ($filter) {
|
||||||
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);
|
||||||
if ($unsafe) {
|
if ($unsafe) {
|
||||||
@@ -14,10 +14,6 @@ if ($filter || ini_get("filter.default_flags")) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (function_exists("mb_internal_encoding")) {
|
|
||||||
mb_internal_encoding("8bit");
|
|
||||||
}
|
|
||||||
|
|
||||||
// used only in compiled file
|
// used only in compiled file
|
||||||
if (isset($_GET["file"])) {
|
if (isset($_GET["file"])) {
|
||||||
include "../adminer/file.inc.php";
|
include "../adminer/file.inc.php";
|
||||||
@@ -25,20 +21,14 @@ 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, $token, $translations, $types, $unsigned, $VERSION; // allows including Adminer inside a function
|
if (!isset($_SERVER["REQUEST_URI"])) {
|
||||||
|
$_SERVER["REQUEST_URI"] = $_SERVER["ORIG_PATH_INFO"] . ($_SERVER["QUERY_STRING"] != "" ? "?$_SERVER[QUERY_STRING]" : ""); // IIS 5 compatibility
|
||||||
if (!$_SERVER["REQUEST_URI"]) { // IIS 5 compatibility
|
|
||||||
$_SERVER["REQUEST_URI"] = $_SERVER["ORIG_PATH_INFO"];
|
|
||||||
}
|
}
|
||||||
if (!strpos($_SERVER["REQUEST_URI"], '?') && $_SERVER["QUERY_STRING"] != "") { // IIS 7 compatibility
|
|
||||||
$_SERVER["REQUEST_URI"] .= "?$_SERVER[QUERY_STRING]";
|
|
||||||
}
|
|
||||||
$HTTPS = $_SERVER["HTTPS"] && strcasecmp($_SERVER["HTTPS"], "off");
|
|
||||||
|
|
||||||
@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
|
||||||
if (!defined("SID")) {
|
if (!ini_bool("session.auto_start")) {
|
||||||
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"]), "", $_SERVER["HTTPS"] && strcasecmp($_SERVER["HTTPS"], "off"));
|
||||||
if (version_compare(PHP_VERSION, '5.2.0') >= 0) {
|
if (version_compare(PHP_VERSION, '5.2.0') >= 0) {
|
||||||
$params[] = true; // HttpOnly
|
$params[] = true; // HttpOnly
|
||||||
}
|
}
|
||||||
@@ -47,13 +37,25 @@ 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);
|
if (get_magic_quotes_gpc()) {
|
||||||
if (function_exists("set_magic_quotes_runtime")) { // removed in PHP 6
|
$process = array(&$_GET, &$_POST, &$_COOKIE);
|
||||||
|
while (list($key, $val) = each($process)) {
|
||||||
|
foreach ($val as $k => $v) {
|
||||||
|
unset($process[$key][$k]);
|
||||||
|
if (is_array($v)) {
|
||||||
|
$process[$key][stripslashes($k)] = $v;
|
||||||
|
$process[] = &$process[$key][stripslashes($k)];
|
||||||
|
} else {
|
||||||
|
$process[$key][stripslashes($k)] = ($filter ? $v : stripslashes($v));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
unset($process);
|
||||||
|
}
|
||||||
|
if (function_exists("set_magic_quotes_runtime")) {
|
||||||
set_magic_quotes_runtime(false);
|
set_magic_quotes_runtime(false);
|
||||||
}
|
}
|
||||||
@set_time_limit(0); // @ - can be disabled
|
@set_time_limit(0); // @ - can be disabled
|
||||||
@ini_set("zend.ze1_compatibility_mode", false); // @ - deprecated
|
|
||||||
@ini_set("precision", 20); // @ - can be disabled
|
|
||||||
|
|
||||||
include "../adminer/include/lang.inc.php";
|
include "../adminer/include/lang.inc.php";
|
||||||
include "../adminer/lang/$LANG.inc.php";
|
include "../adminer/lang/$LANG.inc.php";
|
||||||
@@ -67,7 +69,7 @@ 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
|
||||||
define("DB", $_GET["db"]); // for the sake of speed and size
|
define("DB", $_GET["db"]); // for the sake of speed and size
|
||||||
define("ME", preg_replace('~^[^?]*/([^?]*).*~', '\\1', $_SERVER["REQUEST_URI"]) . '?'
|
define("ME", preg_replace('~^[^?]*/([^?]*).*~', '\\1', $_SERVER["REQUEST_URI"]) . '?'
|
||||||
. (sid() ? SID . '&' : '')
|
. (SID && !$_COOKIE ? SID . '&' : '') // !$_COOKIE - don't pass SID with permanent login
|
||||||
. (SERVER !== null ? DRIVER . "=" . urlencode(SERVER) . '&' : '')
|
. (SERVER !== null ? DRIVER . "=" . urlencode(SERVER) . '&' : '')
|
||||||
. (isset($_GET["username"]) ? "username=" . urlencode($_GET["username"]) . '&' : '')
|
. (isset($_GET["username"]) ? "username=" . urlencode($_GET["username"]) . '&' : '')
|
||||||
. (DB != "" ? 'db=' . urlencode(DB) . '&' . (isset($_GET["ns"]) ? "ns=" . urlencode($_GET["ns"]) . "&" : "") : '')
|
. (DB != "" ? 'db=' . urlencode(DB) . '&' . (isset($_GET["ns"]) ? "ns=" . urlencode($_GET["ns"]) . "&" : "") : '')
|
||||||
@@ -78,13 +80,14 @@ include "./include/adminer.inc.php";
|
|||||||
include "../adminer/include/design.inc.php";
|
include "../adminer/include/design.inc.php";
|
||||||
include "../adminer/include/xxtea.inc.php";
|
include "../adminer/include/xxtea.inc.php";
|
||||||
include "../adminer/include/auth.inc.php";
|
include "../adminer/include/auth.inc.php";
|
||||||
|
include "./include/connect.inc.php";
|
||||||
|
include "./include/editing.inc.php";
|
||||||
|
include "./include/export.inc.php";
|
||||||
|
|
||||||
|
session_cache_limiter(""); // to allow restarting session
|
||||||
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/connect.inc.php";
|
$on_actions = array("RESTRICT", "CASCADE", "SET NULL", "NO ACTION"); ///< @var array used in foreign_keys()
|
||||||
include "./include/editing.inc.php";
|
$confirm = " onclick=\"return confirm('" . lang('Are you sure?') . "');\""; ///< @var string
|
||||||
|
|
||||||
$on_actions = "RESTRICT|NO ACTION|CASCADE|SET NULL|SET DEFAULT"; ///< @var string used in foreign_keys()
|
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
<?php
|
<?php
|
||||||
function connect_error() {
|
function connect_error() {
|
||||||
global $adminer, $connection, $token, $error, $drivers;
|
global $connection, $VERSION, $token, $error, $drivers;
|
||||||
$databases = array();
|
$databases = array();
|
||||||
if (DB != "") {
|
if (DB != "") {
|
||||||
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) {
|
||||||
|
set_session("databases", null);
|
||||||
queries_redirect(substr(ME, 0, -1), lang('Databases have been dropped.'), drop_databases($_POST["db"]));
|
queries_redirect(substr(ME, 0, -1), lang('Databases have been dropped.'), drop_databases($_POST["db"]));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -23,57 +24,44 @@ function connect_error() {
|
|||||||
}
|
}
|
||||||
echo "<p>" . lang('%s version: %s through PHP extension %s', $drivers[DRIVER], "<b>$connection->server_info</b>", "<b>$connection->extension</b>") . "\n";
|
echo "<p>" . lang('%s version: %s through PHP extension %s', $drivers[DRIVER], "<b>$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 = get_databases();
|
||||||
$databases = $adminer->databases();
|
|
||||||
if ($databases) {
|
if ($databases) {
|
||||||
$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' onclick='tableClick(event);'>\n";
|
||||||
echo "<thead><tr><td> <th>" . lang('Database') . "<td>" . lang('Collation') . "<td>" . lang('Tables') . "</thead>\n";
|
echo "<thead><tr><td><input type='hidden' name='token' value='$token'> <th>" . lang('Database') . "<td>" . lang('Collation') . "<td>" . lang('Tables') . "</thead>\n";
|
||||||
foreach ($databases as $db) {
|
foreach ($databases as $db) {
|
||||||
$root = h(ME) . "db=" . urlencode($db);
|
$root = h(ME) . "db=" . urlencode($db);
|
||||||
echo "<tr" . odd() . "><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>";
|
||||||
echo "<td><a href='$root" . ($scheme ? "&ns=" : "") . "&database=' title='" . lang('Alter database') . "'>" . nbsp(db_collation($db, $collations)) . "</a>";
|
echo "<td><a href='$root&database='>" . nbsp(db_collation($db, $collations)) . "</a>";
|
||||||
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) . "'>?</a>";
|
||||||
echo "\n";
|
echo "\n";
|
||||||
}
|
}
|
||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
echo "<script type='text/javascript'>tableCheck();</script>\n";
|
echo "<p><input type='submit' name='drop' value='" . lang('Drop') . "' onclick=\"return confirm('" . lang('Are you sure?') . " (' + formChecked(this, /db/) + ')');\">\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 $refresh;
|
|
||||||
echo "</form>\n";
|
echo "</form>\n";
|
||||||
} else {
|
|
||||||
echo "<p>$refresh";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
page_footer("db");
|
page_footer("db");
|
||||||
if ($databases) {
|
echo "<script type='text/javascript'>\n";
|
||||||
echo "<script type='text/javascript'>ajaxSetHtml('" . js_escape(ME) . "script=connect');</script>\n";
|
foreach (count_tables($databases) as $db => $val) {
|
||||||
|
echo "setHtml('tables-" . addcslashes($db, "\\'/") . "', '$val');\n";
|
||||||
}
|
}
|
||||||
|
echo "</script>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($_GET["status"])) {
|
if (isset($_GET["status"])) {
|
||||||
$_GET["variables"] = $_GET["status"];
|
$_GET["variables"] = $_GET["status"];
|
||||||
}
|
}
|
||||||
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"]))) {
|
||||||
if (DB != "" || $_GET["refresh"]) {
|
if (DB != "") {
|
||||||
restart_session();
|
set_session("databases", null);
|
||||||
set_session("dbs", null);
|
|
||||||
}
|
}
|
||||||
connect_error(); // separate function to catch SQLite error
|
connect_error(); // separate function to catch SQLite error
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (support("scheme") && DB != "" && $_GET["ns"] !== "") {
|
if (support("scheme") && DB != "" && $_GET["ns"] !== "" && (!isset($_GET["ns"]) || !set_schema($_GET["ns"]))) {
|
||||||
if (!isset($_GET["ns"])) {
|
redirect(preg_replace('~ns=[^&]*&~', '', ME) . "ns=" . get_schema());
|
||||||
redirect(preg_replace('~ns=[^&]*&~', '', ME) . "ns=" . get_schema());
|
|
||||||
}
|
|
||||||
if (!set_schema($_GET["ns"])) {
|
|
||||||
page_header(lang('Schema') . ": " . h($_GET["ns"]), lang('Invalid schema.'), true);
|
|
||||||
page_footer("ns");
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,54 +1,45 @@
|
|||||||
<?php
|
<?php
|
||||||
/** 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
|
||||||
* @param string
|
* @param string
|
||||||
* @param mixed array("key" => "link=desc", "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, will be HTML escaped
|
* @param string used after colon in title and heading
|
||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") {
|
function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") {
|
||||||
global $LANG, $adminer, $connection, $drivers;
|
global $LANG, $VERSION, $adminer, $connection, $drivers;
|
||||||
header("Content-Type: text/html; charset=utf-8");
|
header("Content-Type: text/html; charset=utf-8");
|
||||||
if ($adminer->headers()) {
|
header("X-Frame-Options: deny"); // ClickJacking protection in IE8, Safari 4, Chrome 2, Firefox NoScript plugin
|
||||||
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_all = $title . ($title2 != "" ? ": " . h($title2) : "");
|
||||||
$title_page = strip_tags($title_all . (SERVER != "" && SERVER != "localhost" ? h(" - " . SERVER) : "") . " - " . $adminer->name());
|
$protocol = ($_SERVER["HTTPS"] && strcasecmp($_SERVER["HTTPS"], "off") ? "https" : "http");
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||||
<html lang="<?php echo $LANG; ?>" dir="<?php echo lang('ltr'); ?>">
|
<html lang="<?php echo $LANG; ?>">
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
<meta http-equiv="Content-Script-Type" content="text/javascript">
|
<meta http-equiv="Content-Script-Type" content="text/javascript">
|
||||||
<meta name="robots" content="noindex">
|
<meta name="robots" content="noindex">
|
||||||
<title><?php echo $title_page; ?></title>
|
<title><?php echo $title_all . (SERVER != "" && SERVER != "localhost" ? h(" - " . SERVER) : "") . " - " . $adminer->name(); ?></title>
|
||||||
<link rel="stylesheet" type="text/css" href="../adminer/static/default.css">
|
|
||||||
<script type="text/javascript" src="../adminer/static/functions.js"></script>
|
|
||||||
<script type="text/javascript" src="static/editing.js"></script>
|
|
||||||
<?php if ($adminer->head()) { ?>
|
|
||||||
<link rel="shortcut icon" type="image/x-icon" href="../adminer/static/favicon.ico">
|
<link rel="shortcut icon" type="image/x-icon" href="../adminer/static/favicon.ico">
|
||||||
<link rel="apple-touch-icon" href="../adminer/static/favicon.ico">
|
<link rel="stylesheet" type="text/css" href="../adminer/static/default.css<?php // Ondrej Valka, http://valka.info ?>">
|
||||||
<?php if (file_exists("adminer.css")) { ?>
|
<?php if (file_exists("adminer.css")) { ?>
|
||||||
<link rel="stylesheet" type="text/css" href="adminer.css">
|
<link rel="stylesheet" type="text/css" href="adminer.css">
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
<?php } ?>
|
|
||||||
|
|
||||||
<body class="<?php echo lang('ltr'); ?> nojs" onkeydown="bodyKeydown(event);" onclick="bodyClick(event);" onload="bodyLoad('<?php echo (is_object($connection) ? substr($connection->server_info, 0, 3) : ""); ?>');<?php echo (isset($_COOKIE["adminer_version"]) ? "" : " verifyVersion();"); ?>">
|
<body onload="bodyLoad('<?php echo (is_object($connection) ? substr($connection->server_info, 0, 3) : ""); ?>', '<?php echo $protocol; ?>');<?php echo (isset($_COOKIE["adminer_version"]) ? "" : " verifyVersion('$protocol');"); ?>">
|
||||||
<script type="text/javascript">
|
<script type="text/javascript" src="../adminer/static/functions.js"></script>
|
||||||
document.body.className = document.body.className.replace(/ nojs/, ' js');
|
<script type="text/javascript" src="static/editing.js"></script>
|
||||||
</script>
|
|
||||||
|
|
||||||
<div id="content">
|
<div id="content">
|
||||||
<?php
|
<?php
|
||||||
if ($breadcrumb !== null) {
|
if (isset($breadcrumb)) {
|
||||||
$link = substr(preg_replace('~(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="' . ($link ? h($link) : ".") . '">' . $drivers[DRIVER] . '</a> » ';
|
||||||
$link = substr(preg_replace('~(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";
|
||||||
} else {
|
} else {
|
||||||
echo "<a href='" . ($link ? h($link) : ".") . "' accesskey='1' title='Alt+Shift+1'>$server</a> » ";
|
echo "<a href='" . ($link ? h($link) : ".") . "'>$server</a> » ";
|
||||||
if ($_GET["ns"] != "" || (DB != "" && is_array($breadcrumb))) {
|
if ($_GET["ns"] != "" || (DB != "" && is_array($breadcrumb))) {
|
||||||
echo '<a href="' . h($link . "&db=" . urlencode(DB) . (support("scheme") ? "&ns=" : "")) . '">' . h(DB) . '</a> » ';
|
echo '<a href="' . h($link . "&db=" . urlencode(DB) . (support("scheme") ? "&ns=" : "")) . '">' . h(DB) . '</a> » ';
|
||||||
}
|
}
|
||||||
@@ -68,25 +59,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();
|
||||||
$uri = preg_replace('~^[^?]*~', '', $_SERVER["REQUEST_URI"]);
|
if ($_SESSION["messages"]) {
|
||||||
$messages = $_SESSION["messages"][$uri];
|
echo "<div class='message'>" . implode("</div>\n<div class='message'>", $_SESSION["messages"]) . "</div>\n";
|
||||||
if ($messages) {
|
$_SESSION["messages"] = array();
|
||||||
echo "<div class='message'>" . implode("</div>\n<div class='message'>", $messages) . "</div>\n";
|
|
||||||
unset($_SESSION["messages"][$uri]);
|
|
||||||
}
|
}
|
||||||
$databases = &get_session("dbs");
|
$databases = &get_session("databases");
|
||||||
if (DB != "" && $databases && !in_array(DB, $databases, true)) {
|
if (DB != "" && $databases && !in_array(DB, $databases, true)) {
|
||||||
$databases = null;
|
$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
|
||||||
* @param string "auth", "db", "ns"
|
* @param string auth|db
|
||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function page_footer($missing = "") {
|
function page_footer($missing = "") {
|
||||||
@@ -99,4 +86,8 @@ function page_footer($missing = "") {
|
|||||||
<?php $adminer->navigation($missing); ?>
|
<?php $adminer->navigation($missing); ?>
|
||||||
</div>
|
</div>
|
||||||
<?php
|
<?php
|
||||||
|
// don't wait for code after footer
|
||||||
|
session_write_close();
|
||||||
|
ob_flush();
|
||||||
|
flush();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,90 +2,80 @@
|
|||||||
/** 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
|
|
||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function select($result, $connection2 = null, $href = "", $orgtables = array()) {
|
function select($result, $connection2 = null) {
|
||||||
$links = array(); // colno => orgtable - create links from these columns
|
if (!$result->num_rows) {
|
||||||
$indexes = array(); // orgtable => array(column => colno) - primary keys
|
echo "<p class='message'>" . lang('No rows.') . "\n";
|
||||||
$columns = array(); // orgtable => array(column => ) - not selected columns in primary key
|
} else {
|
||||||
$blobs = array(); // colno => bool - display bytes for blobs
|
echo "<table cellspacing='0' class='nowrap'>\n";
|
||||||
$types = array(); // colno => type - display char in <code>
|
$links = array(); // colno => orgtable - create links from these columns
|
||||||
$return = array(); // table => orgtable - mapping to use in EXPLAIN
|
$indexes = array(); // orgtable => array(column => colno) - primary keys
|
||||||
odd(''); // reset odd for each result
|
$columns = array(); // orgtable => array(column => ) - not selected columns in primary key
|
||||||
for ($i=0; $row = $result->fetch_row(); $i++) {
|
$blobs = array(); // colno => bool - display bytes for blobs
|
||||||
if (!$i) {
|
$types = array(); // colno => type - display char in <code>
|
||||||
echo "<table cellspacing='0' class='nowrap'>\n";
|
odd(''); // reset odd for each result
|
||||||
echo "<thead><tr>";
|
for ($i=0; $row = $result->fetch_row(); $i++) {
|
||||||
for ($j=0; $j < count($row); $j++) {
|
if (!$i) {
|
||||||
$field = $result->fetch_field();
|
echo "<thead><tr>";
|
||||||
$name = $field->name;
|
for ($j=0; $j < count($row); $j++) {
|
||||||
$orgtable = $field->orgtable;
|
$field = $result->fetch_field();
|
||||||
$orgname = $field->orgname;
|
$orgtable = $field->orgtable;
|
||||||
$return[$field->table] = $orgtable;
|
$orgname = $field->orgname;
|
||||||
if ($href) { // MySQL EXPLAIN
|
if ($orgtable != "") {
|
||||||
$links[$j] = ($name == "table" ? "table=" : ($name == "possible_keys" ? "indexes=" : null));
|
if (!isset($indexes[$orgtable])) {
|
||||||
} elseif ($orgtable != "") {
|
// find primary key in each table
|
||||||
if (!isset($indexes[$orgtable])) {
|
$indexes[$orgtable] = array();
|
||||||
// find primary key in each table
|
foreach (indexes($orgtable, $connection2) as $index) {
|
||||||
$indexes[$orgtable] = array();
|
if ($index["type"] == "PRIMARY") {
|
||||||
foreach (indexes($orgtable, $connection2) as $index) {
|
$indexes[$orgtable] = array_flip($index["columns"]);
|
||||||
if ($index["type"] == "PRIMARY") {
|
break;
|
||||||
$indexes[$orgtable] = array_flip($index["columns"]);
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
$columns[$orgtable] = $indexes[$orgtable];
|
||||||
|
}
|
||||||
|
if (isset($columns[$orgtable][$orgname])) {
|
||||||
|
unset($columns[$orgtable][$orgname]);
|
||||||
|
$indexes[$orgtable][$orgname] = $j;
|
||||||
|
$links[$j] = $orgtable;
|
||||||
}
|
}
|
||||||
$columns[$orgtable] = $indexes[$orgtable];
|
|
||||||
}
|
}
|
||||||
if (isset($columns[$orgtable][$orgname])) {
|
if ($field->charsetnr == 63) { // 63 - binary
|
||||||
unset($columns[$orgtable][$orgname]);
|
$blobs[$j] = true;
|
||||||
$indexes[$orgtable][$orgname] = $j;
|
|
||||||
$links[$j] = $orgtable;
|
|
||||||
}
|
}
|
||||||
|
$types[$j] = $field->type;
|
||||||
|
echo "<th" . ($orgtable != "" || $field->name != $orgname ? " title='" . h(($orgtable != "" ? "$orgtable." : "") . $orgname) . "'" : "") . ">" . h($field->name);
|
||||||
}
|
}
|
||||||
if ($field->charsetnr == 63) { // 63 - binary
|
echo "</thead>\n";
|
||||||
$blobs[$j] = true;
|
|
||||||
}
|
|
||||||
$types[$j] = $field->type;
|
|
||||||
$name = h($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 "<tr" . odd() . ">";
|
||||||
}
|
foreach ($row as $key => $val) {
|
||||||
echo "<tr" . odd() . ">";
|
if (!isset($val)) {
|
||||||
foreach ($row as $key => $val) {
|
$val = "<i>NULL</i>";
|
||||||
if ($val === null) {
|
|
||||||
$val = "<i>NULL</i>";
|
|
||||||
} elseif ($blobs[$key] && !is_utf8($val)) {
|
|
||||||
$val = "<i>" . lang('%d byte(s)', strlen($val)) . "</i>"; //! link to download
|
|
||||||
} elseif (!strlen($val)) { // strlen - SQLite can return int
|
|
||||||
$val = " "; // some content to print a border
|
|
||||||
} else {
|
|
||||||
$val = h($val);
|
|
||||||
if ($types[$key] == 254) { // 254 - char
|
|
||||||
$val = "<code>$val</code>";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isset($links[$key]) && !$columns[$links[$key]]) {
|
|
||||||
if ($href) { // MySQL EXPLAIN
|
|
||||||
$table = $row[array_search("table=", $links)];
|
|
||||||
$link = $links[$key] . urlencode($orgtables[$table] != "" ? $orgtables[$table] : $table);
|
|
||||||
} else {
|
} else {
|
||||||
$link = "edit=" . urlencode($links[$key]);
|
if ($blobs[$key] && !is_utf8($val)) {
|
||||||
foreach ($indexes[$links[$key]] as $col => $j) {
|
$val = "<i>" . lang('%d byte(s)', strlen($val)) . "</i>"; //! link to download
|
||||||
$link .= "&where" . urlencode("[" . bracket_escape($col) . "]") . "=" . urlencode($row[$j]);
|
} elseif (!strlen($val)) { // strlen - SQLite can return int
|
||||||
|
$val = " "; // some content to print a border
|
||||||
|
} else {
|
||||||
|
$val = h($val);
|
||||||
|
if ($types[$key] == 254) { // 254 - char
|
||||||
|
$val = "<code>$val</code>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isset($links[$key]) && !$columns[$links[$key]]) {
|
||||||
|
$link = "edit=" . urlencode($links[$key]);
|
||||||
|
foreach ($indexes[$links[$key]] as $col => $j) {
|
||||||
|
$link .= "&where" . urlencode("[" . bracket_escape($col) . "]") . "=" . urlencode($row[$j]);
|
||||||
|
}
|
||||||
|
$val = "<a href='" . h(ME . $link) . "'>$val</a>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$val = "<a href='" . h(ME . $link) . "'>$val</a>";
|
echo "<td>$val";
|
||||||
}
|
}
|
||||||
echo "<td>$val";
|
|
||||||
}
|
}
|
||||||
|
echo "</table>\n";
|
||||||
}
|
}
|
||||||
echo ($i ? "</table>" : "<p class='message'>" . lang('No rows.')) . "\n";
|
|
||||||
return $return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get referencable tables with single column primary key except self
|
/** Get referencable tables with single column primary key except self
|
||||||
@@ -110,34 +100,6 @@ function referencable_primary($self) {
|
|||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Print SQL <textarea> tag
|
|
||||||
* @param string
|
|
||||||
* @param int
|
|
||||||
* @param int
|
|
||||||
* @param string
|
|
||||||
* @return null
|
|
||||||
*/
|
|
||||||
function textarea($name, $value, $rows = 10, $cols = 80) {
|
|
||||||
echo "<textarea name='$name' rows='$rows' cols='$cols' class='sqlarea' spellcheck='false' wrap='off' onkeydown='return textareaKeydown(this, event);'>"; // spellcheck, wrap - not valid before HTML5
|
|
||||||
if (is_array($value)) {
|
|
||||||
foreach ($value as $val) { // not implode() to save memory
|
|
||||||
echo h($val[0]) . "\n\n\n"; // $val == array($query, $time)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
echo h($value);
|
|
||||||
}
|
|
||||||
echo "</textarea>";
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Format time difference
|
|
||||||
* @param string output of microtime()
|
|
||||||
* @param string output of microtime()
|
|
||||||
* @return string HTML code
|
|
||||||
*/
|
|
||||||
function format_time($start, $end) {
|
|
||||||
return " <span class='time'>(" . lang('%.3f s', max(0, array_sum(explode(" ", $end)) - array_sum(explode(" ", $start)))) . ")</span>";
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Print table columns for type edit
|
/** Print table columns for type edit
|
||||||
* @param string
|
* @param string
|
||||||
* @param array
|
* @param array
|
||||||
@@ -146,14 +108,13 @@ function format_time($start, $end) {
|
|||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
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, $unsigned, $inout, $on_actions;
|
||||||
?>
|
?>
|
||||||
<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>
|
<td><select name="<?php echo $key; ?>[type]" class="type" onfocus="lastType = selectValue(this);" onchange="editingTypeChange(this);"><?php echo optionlist($structured_types + ($foreign_keys ? array(lang('Foreign keys') => $foreign_keys) : array()), $field["type"]); ?></select>
|
||||||
<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
|
<td><input name="<?php echo $key; ?>[length]" value="<?php echo h($field["length"]); ?>" size="3" onfocus="editingLengthFocus(this);"><td><?php
|
||||||
echo "<select name='$key" . "[collation]'" . (ereg('(char|text|enum|set)$', $field["type"]) ? "" : " class='hidden'") . '><option value="">(' . lang('collation') . ')' . optionlist($collations, $field["collation"]) . '</select>';
|
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('(int|float|double|decimal)$', $field["type"]) ? "" : " class='hidden'") . '><option>' . optionlist($unsigned, $field["unsigned"]) . '</select>' : '');
|
echo ($unsigned ? "<select name='$key" . "[unsigned]'" . (!$field["type"] || ereg('(int|float|double|decimal)$', $field["type"]) ? "" : " class='hidden'") . '><option>' . optionlist($unsigned, $field["unsigned"]) . '</select>' : '');
|
||||||
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>' : '');
|
echo ($foreign_keys ? "<select name='$key" . "[on_delete]'" . (ereg("`", $field["type"]) ? "" : " class='hidden'") . "><option value=''>(" . lang('ON DELETE') . ")" . optionlist($on_actions, $field["on_delete"]) . "</select> " : " "); // space for IE
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Filter length value including enums
|
/** Filter length value including enums
|
||||||
@@ -171,11 +132,11 @@ function process_length($length) {
|
|||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function process_type($field, $collate = "COLLATE") {
|
function process_type($field, $collate = "COLLATE") {
|
||||||
global $unsigned;
|
global $connection, $unsigned;
|
||||||
return " $field[type]"
|
return " $field[type]"
|
||||||
. ($field["length"] != "" ? "(" . process_length($field["length"]) . ")" : "")
|
. ($field["length"] != "" && !ereg('^date|time$', $field["type"]) ? "(" . process_length($field["length"]) . ")" : "")
|
||||||
. (ereg('int|float|double|decimal', $field["type"]) && in_array($field["unsigned"], $unsigned) ? " $field[unsigned]" : "")
|
. (ereg('int|float|double|decimal', $field["type"]) && in_array($field["unsigned"], $unsigned) ? " $field[unsigned]" : "")
|
||||||
. (ereg('char|text|enum|set', $field["type"]) && $field["collation"] ? " $collate " . q($field["collation"]) : "")
|
. (ereg('char|text|enum|set', $field["type"]) && $field["collation"] ? " $collate " . $connection->quote($field["collation"]) : "")
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -185,13 +146,14 @@ 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 $connection;
|
||||||
return array(
|
return array(
|
||||||
idf_escape(trim($field["field"])),
|
idf_escape($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($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"])) : ""),
|
(isset($field["default"]) ? " DEFAULT " . ($field["type"] == "timestamp" && eregi("^CURRENT_TIMESTAMP$", $field["default"]) ? $field["default"] : $connection->quote($field["default"])) : ""),
|
||||||
($field["type"] == "timestamp" && $field["on_update"] ? " ON UPDATE $field[on_update]" : ""),
|
($field["on_update"] ? " ON UPDATE $field[on_update]" : ""),
|
||||||
(support("comment") && $field["comment"] != "" ? " COMMENT " . q($field["comment"]) : ""),
|
(support("comment") && $field["comment"] != "" ? " COMMENT " . $connection->quote($field["comment"]) : ""),
|
||||||
($field["auto_increment"] ? auto_increment() : null),
|
($field["auto_increment"] ? auto_increment() : null),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -217,12 +179,18 @@ function type_class($type) {
|
|||||||
* @param array
|
* @param array
|
||||||
* @param array
|
* @param array
|
||||||
* @param string TABLE or PROCEDURE
|
* @param string TABLE or PROCEDURE
|
||||||
|
* @param int number of fields allowed by Suhosin
|
||||||
* @param array returned by referencable_primary()
|
* @param array returned by referencable_primary()
|
||||||
* @param bool display comments column
|
* @return bool column comments used
|
||||||
* @return null
|
|
||||||
*/
|
*/
|
||||||
function edit_fields($fields, $collations, $type = "TABLE", $foreign_keys = array(), $comments = false) {
|
function edit_fields($fields, $collations, $type = "TABLE", $allowed = 0, $foreign_keys = array(), $comments = false) {
|
||||||
global $connection, $inout;
|
global $inout;
|
||||||
|
foreach ($fields as $field) {
|
||||||
|
if ($field["comment"] != "") {
|
||||||
|
$comments = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
?>
|
?>
|
||||||
<thead><tr class="wrap">
|
<thead><tr class="wrap">
|
||||||
<?php if ($type == "PROCEDURE") { ?><td> <?php } ?>
|
<?php if ($type == "PROCEDURE") { ?><td> <?php } ?>
|
||||||
@@ -233,12 +201,11 @@ function edit_fields($fields, $collations, $type = "TABLE", $foreign_keys = arra
|
|||||||
<?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>
|
<td><input type="radio" name="auto_increment_col" value=""><acronym title="<?php echo lang('Auto Increment'); ?>">AI</acronym>
|
||||||
<td><?php echo lang('Default values'); ?>
|
<td class="hidden"><?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 } ?>
|
||||||
<td><?php echo "<input type='image' class='icon' name='add[" . (support("move_col") ? 0 : count($fields)) . "]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>"; ?><script type="text/javascript">row_count = <?php echo count($fields); ?>;</script>
|
<td><?php echo "<input type='image' name='add[" . (support("move_col") ? 0 : count($fields)) . "]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>"; ?><script type="text/javascript">row_count = <?php echo count($fields); ?>;</script>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody onkeydown="return editingKeydown(event);">
|
|
||||||
<?php
|
<?php
|
||||||
foreach ($fields as $i => $field) {
|
foreach ($fields as $i => $field) {
|
||||||
$i++;
|
$i++;
|
||||||
@@ -246,25 +213,26 @@ function edit_fields($fields, $collations, $type = "TABLE", $foreign_keys = arra
|
|||||||
$display = (isset($_POST["add"][$i-1]) || (isset($field["field"]) && !$_POST["drop_col"][$i])) && (support("drop_col") || $orig == "");
|
$display = (isset($_POST["add"][$i-1]) || (isset($field["field"]) && !$_POST["drop_col"][$i])) && (support("drop_col") || $orig == "");
|
||||||
?>
|
?>
|
||||||
<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]", $inout, $field["inout"]) : ""); ?>
|
||||||
<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); ?>">
|
<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, $allowed); "); ?>editingNameChange(this);" maxlength="64"><?php } ?><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"]); ?>
|
<td><?php echo checkbox("fields[$i][null]", 1, $field["null"]); ?>
|
||||||
<td><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(); }">
|
<td><input type="radio" name="auto_increment_col" value="<?php echo $i; ?>"<?php if ($field["auto_increment"]) { ?> checked<?php } ?>>
|
||||||
<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"]); ?>" onchange="this.previousSibling.checked = true;">
|
<td class="hidden"><?php 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='255'>" : ""); ?>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
<?php
|
<?php
|
||||||
echo "<td>";
|
echo "<td>";
|
||||||
echo (support("move_col") ?
|
echo (support("move_col") ?
|
||||||
"<input type='image' class='icon' name='add[$i]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "' onclick='return !editingAddRow(this, 1);'> "
|
"<input type='image' name='add[$i]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "' onclick='return !editingAddRow(this, $allowed, 1);'> "
|
||||||
. "<input type='image' class='icon' name='up[$i]' src='../adminer/static/up.gif' alt='^' title='" . lang('Move up') . "'> "
|
. "<input type='image' 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' 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);'>" : "");
|
echo ($orig == "" || support("drop_col") ? "<input type='image' name='drop_col[$i]' src='../adminer/static/cross.gif' alt='x' title='" . lang('Remove') . "' onclick='return !editingRemoveRow(this);'>" : "");
|
||||||
echo "\n";
|
echo "\n";
|
||||||
}
|
}
|
||||||
|
return $comments;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Move fields up and down or add field
|
/** Move fields up and down or add field
|
||||||
@@ -321,7 +289,7 @@ function normalize_enum($match) {
|
|||||||
* @param array
|
* @param array
|
||||||
* @param string
|
* @param string
|
||||||
* @param string
|
* @param string
|
||||||
* @return bool
|
* @return
|
||||||
*/
|
*/
|
||||||
function grant($grant, $privileges, $columns, $on) {
|
function grant($grant, $privileges, $columns, $on) {
|
||||||
if (!$privileges) {
|
if (!$privileges) {
|
||||||
@@ -340,99 +308,22 @@ function grant($grant, $privileges, $columns, $on) {
|
|||||||
/** Drop old object and create a new one
|
/** Drop old object and create a new one
|
||||||
* @param string drop query
|
* @param string drop query
|
||||||
* @param string create query
|
* @param string create query
|
||||||
* @param string rollback query
|
|
||||||
* @param string
|
* @param string
|
||||||
* @param string
|
* @param string
|
||||||
* @param string
|
* @param string
|
||||||
* @param string
|
* @param string
|
||||||
* @param string
|
* @param string
|
||||||
* @return null redirect in success
|
* @return bool dropped
|
||||||
*/
|
*/
|
||||||
function drop_create($drop, $create, $rollback, $location, $message_drop, $message_alter, $message_create, $name) {
|
function drop_create($drop, $create, $location, $message_drop, $message_alter, $message_create, $name) {
|
||||||
if ($_POST["drop"]) {
|
if ($_POST["drop"]) {
|
||||||
query_redirect($drop, $location, $message_drop);
|
return query_redirect($drop, $location, $message_drop, true, !$_POST["dropped"]);
|
||||||
} else {
|
|
||||||
if ($name != "") {
|
|
||||||
queries($drop);
|
|
||||||
}
|
|
||||||
queries_redirect($location, ($name != "" ? $message_alter : $message_create), queries($create));
|
|
||||||
if ($name != "") {
|
|
||||||
queries($rollback);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
$dropped = $name != "" && ($_POST["dropped"] || queries($drop));
|
||||||
|
$created = queries($create);
|
||||||
/** Generate SQL query for creating trigger
|
if (!queries_redirect($location, ($name != "" ? $message_alter : $message_create), $created) && $dropped) {
|
||||||
* @param string
|
restart_session();
|
||||||
* @return array result of trigger()
|
$_SESSION["messages"][] = $message_drop;
|
||||||
*/
|
|
||||||
function create_trigger($on, $row) {
|
|
||||||
global $jush;
|
|
||||||
$timing_event = " $row[Timing] $row[Event]";
|
|
||||||
return "CREATE TRIGGER "
|
|
||||||
. idf_escape($row["Trigger"])
|
|
||||||
. ($jush == "mssql" ? $on . $timing_event : $timing_event . $on)
|
|
||||||
. rtrim(" $row[Type]\n$row[Statement]", ";")
|
|
||||||
. ";";
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Generate SQL query for creating routine
|
|
||||||
* @param string "PROCEDURE" or "FUNCTION"
|
|
||||||
* @param array result of routine()
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function create_routine($routine, $row) {
|
|
||||||
global $inout;
|
|
||||||
$set = array();
|
|
||||||
$fields = (array) $row["fields"];
|
|
||||||
ksort($fields); // enforce fields order
|
|
||||||
foreach ($fields as $field) {
|
|
||||||
if ($field["field"] != "") {
|
|
||||||
$set[] = (ereg("^($inout)\$", $field["inout"]) ? "$field[inout] " : "") . idf_escape($field["field"]) . process_type($field, "CHARACTER SET");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return "CREATE $routine "
|
return $dropped;
|
||||||
. idf_escape(trim($row["name"]))
|
|
||||||
. " (" . implode(", ", $set) . ")"
|
|
||||||
. (isset($_GET["function"]) ? " RETURNS" . process_type($row["returns"], "CHARACTER SET") : "")
|
|
||||||
. ($row["language"] ? " LANGUAGE $row[language]" : "")
|
|
||||||
. rtrim("\n$row[definition]", ";")
|
|
||||||
. ";";
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Remove current user definer from SQL command
|
|
||||||
* @param string
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function remove_definer($query) {
|
|
||||||
return preg_replace('~^([A-Z =]+) DEFINER=`' . preg_replace('~@(.*)~', '`@`(%|\\1)', logged_user()) . '`~', '\\1', $query); //! proper escaping of user
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Get string to add a file in TAR
|
|
||||||
* @param string
|
|
||||||
* @param string
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function tar_file($filename, $contents) {
|
|
||||||
$return = pack("a100a8a8a8a12a12", $filename, 644, 0, 0, decoct(strlen($contents)), decoct(time()));
|
|
||||||
$checksum = 8*32; // space for checksum itself
|
|
||||||
for ($i=0; $i < strlen($return); $i++) {
|
|
||||||
$checksum += ord($return[$i]);
|
|
||||||
}
|
|
||||||
$return .= sprintf("%06o", $checksum) . "\0 ";
|
|
||||||
return $return . str_repeat("\0", 512 - strlen($return)) . $contents . str_repeat("\0", 511 - (strlen($contents) + 511) % 512);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Get INI bytes value
|
|
||||||
* @param string
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
function ini_bytes($ini) {
|
|
||||||
$val = ini_get($ini);
|
|
||||||
switch (strtolower(substr($val, -1))) {
|
|
||||||
case 'g': $val *= 1024; // no break
|
|
||||||
case 'm': $val *= 1024; // no break
|
|
||||||
case 'k': $val *= 1024;
|
|
||||||
}
|
|
||||||
return $val;
|
|
||||||
}
|
}
|
||||||
|
|||||||
174
adminer/include/export.inc.php
Normal file
174
adminer/include/export.inc.php
Normal file
@@ -0,0 +1,174 @@
|
|||||||
|
<?php
|
||||||
|
function tar_file($filename, $contents) {
|
||||||
|
$return = pack("a100a8a8a8a12a12", $filename, 644, 0, 0, decoct(strlen($contents)), decoct(time()));
|
||||||
|
$checksum = 8*32; // space for checksum itself
|
||||||
|
for ($i=0; $i < strlen($return); $i++) {
|
||||||
|
$checksum += ord($return{$i});
|
||||||
|
}
|
||||||
|
$return .= sprintf("%06o", $checksum) . "\0 ";
|
||||||
|
return $return . str_repeat("\0", 512 - strlen($return)) . $contents . str_repeat("\0", 511 - (strlen($contents) + 511) % 512);
|
||||||
|
}
|
||||||
|
|
||||||
|
function dump_table($table, $style, $is_view = false) {
|
||||||
|
global $connection;
|
||||||
|
if ($_POST["format"] != "sql") {
|
||||||
|
echo "\xef\xbb\xbf"; // UTF-8 byte order mark
|
||||||
|
if ($style) {
|
||||||
|
dump_csv(array_keys(fields($table)));
|
||||||
|
}
|
||||||
|
} elseif ($style) {
|
||||||
|
$create = create_sql($table);
|
||||||
|
if ($create) {
|
||||||
|
if ($style == "DROP+CREATE") {
|
||||||
|
echo "DROP " . ($is_view ? "VIEW" : "TABLE") . " IF EXISTS " . idf_escape($table) . ";\n";
|
||||||
|
}
|
||||||
|
echo ($style != "CREATE+ALTER" ? $create : ($is_view ? substr_replace($create, " OR REPLACE", 6, 0) : substr_replace($create, " IF NOT EXISTS", 12, 0))) . ";\n\n";
|
||||||
|
}
|
||||||
|
if ($style == "CREATE+ALTER" && !$is_view) {
|
||||||
|
// create procedure which iterates over original columns and adds new and removes old
|
||||||
|
$query = "SELECT COLUMN_NAME, COLUMN_DEFAULT, IS_NULLABLE, COLLATION_NAME, COLUMN_TYPE, EXTRA, COLUMN_COMMENT FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = " . $connection->quote($table) . " ORDER BY ORDINAL_POSITION";
|
||||||
|
echo "DELIMITER ;;
|
||||||
|
CREATE PROCEDURE adminer_alter (INOUT alter_command text) BEGIN
|
||||||
|
DECLARE _column_name, _collation_name, after varchar(64) DEFAULT '';
|
||||||
|
DECLARE _column_type, _column_default text;
|
||||||
|
DECLARE _is_nullable char(3);
|
||||||
|
DECLARE _extra varchar(30);
|
||||||
|
DECLARE _column_comment varchar(255);
|
||||||
|
DECLARE done, set_after bool DEFAULT 0;
|
||||||
|
DECLARE add_columns text DEFAULT '";
|
||||||
|
$fields = array();
|
||||||
|
$result = $connection->query($query);
|
||||||
|
$after = "";
|
||||||
|
while ($row = $result->fetch_assoc()) {
|
||||||
|
$default = $row["COLUMN_DEFAULT"];
|
||||||
|
$row["default"] = (isset($default) ? $connection->quote($default) : "NULL");
|
||||||
|
$row["after"] = $connection->quote($after); //! rgt AFTER lft, lft AFTER id doesn't work
|
||||||
|
$row["alter"] = escape_string(idf_escape($row["COLUMN_NAME"])
|
||||||
|
. " $row[COLUMN_TYPE]"
|
||||||
|
. ($row["COLLATION_NAME"] ? " COLLATE $row[COLLATION_NAME]" : "")
|
||||||
|
. (isset($default) ? " DEFAULT " . ($default == "CURRENT_TIMESTAMP" ? $default : $row["default"]) : "")
|
||||||
|
. ($row["IS_NULLABLE"] == "YES" ? "" : " NOT NULL")
|
||||||
|
. ($row["EXTRA"] ? " $row[EXTRA]" : "")
|
||||||
|
. ($row["COLUMN_COMMENT"] ? " COMMENT " . $connection->quote($row["COLUMN_COMMENT"]) : "")
|
||||||
|
. ($after ? " AFTER " . idf_escape($after) : " FIRST")
|
||||||
|
);
|
||||||
|
echo ", ADD $row[alter]";
|
||||||
|
$fields[] = $row;
|
||||||
|
$after = $row["COLUMN_NAME"];
|
||||||
|
}
|
||||||
|
echo "';
|
||||||
|
DECLARE columns CURSOR FOR $query;
|
||||||
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
|
||||||
|
SET @alter_table = '';
|
||||||
|
OPEN columns;
|
||||||
|
REPEAT
|
||||||
|
FETCH columns INTO _column_name, _column_default, _is_nullable, _collation_name, _column_type, _extra, _column_comment;
|
||||||
|
IF NOT done THEN
|
||||||
|
SET set_after = 1;
|
||||||
|
CASE _column_name";
|
||||||
|
foreach ($fields as $row) {
|
||||||
|
echo "
|
||||||
|
WHEN " . $connection->quote($row["COLUMN_NAME"]) . " THEN
|
||||||
|
SET add_columns = REPLACE(add_columns, ', ADD $row[alter]', '');
|
||||||
|
IF NOT (_column_default <=> $row[default]) OR _is_nullable != '$row[IS_NULLABLE]' OR _collation_name != '$row[COLLATION_NAME]' OR _column_type != " . $connection->quote($row["COLUMN_TYPE"]) . " OR _extra != '$row[EXTRA]' OR _column_comment != " . $connection->quote($row["COLUMN_COMMENT"]) . " OR after != $row[after] THEN
|
||||||
|
SET @alter_table = CONCAT(@alter_table, ', MODIFY $row[alter]');
|
||||||
|
END IF;"; //! don't replace in comment
|
||||||
|
}
|
||||||
|
echo "
|
||||||
|
ELSE
|
||||||
|
SET @alter_table = CONCAT(@alter_table, ', DROP ', _column_name);
|
||||||
|
SET set_after = 0;
|
||||||
|
END CASE;
|
||||||
|
IF set_after THEN
|
||||||
|
SET after = _column_name;
|
||||||
|
END IF;
|
||||||
|
END IF;
|
||||||
|
UNTIL done END REPEAT;
|
||||||
|
CLOSE columns;
|
||||||
|
IF @alter_table != '' OR add_columns != '' THEN
|
||||||
|
SET alter_command = CONCAT(alter_command, 'ALTER TABLE " . idf_escape($table) . "', SUBSTR(CONCAT(add_columns, @alter_table), 2), ';\\n');
|
||||||
|
END IF;
|
||||||
|
END;;
|
||||||
|
DELIMITER ;
|
||||||
|
CALL adminer_alter(@adminer_alter);
|
||||||
|
DROP PROCEDURE adminer_alter;
|
||||||
|
|
||||||
|
";
|
||||||
|
//! indexes
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function dump_data($table, $style, $select = "") {
|
||||||
|
global $connection, $jush;
|
||||||
|
$max_packet = ($jush == "sqlite" ? 0 : 1048576); // default, minimum is 1024
|
||||||
|
if ($style) {
|
||||||
|
if ($_POST["format"] == "sql" && $style == "TRUNCATE+INSERT") {
|
||||||
|
echo "TRUNCATE " . idf_escape($table) . ";\n";
|
||||||
|
}
|
||||||
|
$fields = fields($table);
|
||||||
|
$result = $connection->query(($select ? $select : "SELECT * FROM " . idf_escape($table)), 1); // 1 - MYSQLI_USE_RESULT //! enum and set as numbers, microtime
|
||||||
|
if ($result) {
|
||||||
|
$insert = "";
|
||||||
|
$buffer = "";
|
||||||
|
while ($row = $result->fetch_assoc()) {
|
||||||
|
if ($_POST["format"] != "sql") {
|
||||||
|
dump_csv($row);
|
||||||
|
} else {
|
||||||
|
if (!$insert) {
|
||||||
|
$insert = "INSERT INTO " . idf_escape($table) . " (" . implode(", ", array_map('idf_escape', array_keys($row))) . ") VALUES";
|
||||||
|
}
|
||||||
|
foreach ($row as $key => $val) {
|
||||||
|
$row[$key] = (isset($val) ? (ereg('int|float|double|decimal', $fields[$key]["type"]) ? $val : $connection->quote($val)) : "NULL"); //! columns looking like functions
|
||||||
|
}
|
||||||
|
$s = implode(",\t", $row);
|
||||||
|
if ($style == "INSERT+UPDATE") {
|
||||||
|
$set = array();
|
||||||
|
foreach ($row as $key => $val) {
|
||||||
|
$set[] = idf_escape($key) . " = $val";
|
||||||
|
}
|
||||||
|
echo "$insert ($s) ON DUPLICATE KEY UPDATE " . implode(", ", $set) . ";\n";
|
||||||
|
} else {
|
||||||
|
$s = ($max_packet ? "\n" : " ") . "($s)";
|
||||||
|
if (!$buffer) {
|
||||||
|
$buffer = $insert . $s;
|
||||||
|
} elseif (strlen($buffer) + 2 + strlen($s) < $max_packet) { // 2 - separator and terminator length
|
||||||
|
$buffer .= ",$s";
|
||||||
|
} else {
|
||||||
|
$buffer .= ";\n";
|
||||||
|
echo $buffer;
|
||||||
|
$buffer = $insert . $s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($_POST["format"] == "sql" && $style != "INSERT+UPDATE" && $buffer) {
|
||||||
|
$buffer .= ";\n";
|
||||||
|
echo $buffer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function dump_headers($identifier, $multi_table = false) {
|
||||||
|
$filename = ($identifier != "" ? friendly_url($identifier) : "adminer");
|
||||||
|
$output = $_POST["output"];
|
||||||
|
$ext = ($_POST["format"] == "sql" ? "sql" : ($multi_table ? "tar" : "csv")); // multiple CSV packed to TAR
|
||||||
|
header("Content-Type: " .
|
||||||
|
($output == "bz2" ? "application/x-bzip" :
|
||||||
|
($output == "gz" ? "application/x-gzip" :
|
||||||
|
($ext == "tar" ? "application/x-tar" :
|
||||||
|
($ext == "sql" || $output != "file" ? "text/plain" : "text/csv") . "; charset=utf-8"
|
||||||
|
))));
|
||||||
|
if ($output != "text") {
|
||||||
|
header("Content-Disposition: attachment; filename=$filename.$ext" . ($output != "file" && !ereg('[^0-9a-z]', $output) ? ".$output" : ""));
|
||||||
|
}
|
||||||
|
session_write_close();
|
||||||
|
if ($_POST["output"] == "bz2") {
|
||||||
|
ob_start('bzcompress', 1e6);
|
||||||
|
}
|
||||||
|
if ($_POST["output"] == "gz") {
|
||||||
|
ob_start('gzencode', 1e6);
|
||||||
|
}
|
||||||
|
return $ext;
|
||||||
|
}
|
||||||
@@ -8,14 +8,6 @@ function connection() {
|
|||||||
return $connection;
|
return $connection;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get Adminer object
|
|
||||||
* @return Adminer
|
|
||||||
*/
|
|
||||||
function adminer() {
|
|
||||||
global $adminer;
|
|
||||||
return $adminer;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Unescape database identifier
|
/** Unescape database identifier
|
||||||
* @param string text inside ``
|
* @param string text inside ``
|
||||||
* @return string
|
* @return string
|
||||||
@@ -30,28 +22,8 @@ function idf_unescape($idf) {
|
|||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function escape_string($val) {
|
function escape_string($val) {
|
||||||
return substr(q($val), 1, -1);
|
global $connection;
|
||||||
}
|
return substr($connection->quote($val), 1, -1);
|
||||||
|
|
||||||
/** Disable magic_quotes_gpc
|
|
||||||
* @param array e.g. (&$_GET, &$_POST, &$_COOKIE)
|
|
||||||
* @param bool whether to leave values as is
|
|
||||||
* @return null modified in place
|
|
||||||
*/
|
|
||||||
function remove_slashes($process, $filter = false) {
|
|
||||||
if (get_magic_quotes_gpc()) {
|
|
||||||
while (list($key, $val) = each($process)) {
|
|
||||||
foreach ($val as $k => $v) {
|
|
||||||
unset($process[$key][$k]);
|
|
||||||
if (is_array($v)) {
|
|
||||||
$process[$key][stripslashes($k)] = $v;
|
|
||||||
$process[] = &$process[$key][stripslashes($k)];
|
|
||||||
} else {
|
|
||||||
$process[$key][stripslashes($k)] = ($filter ? $v : stripslashes($v));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Escape or unescape string to use inside form []
|
/** Escape or unescape string to use inside form []
|
||||||
@@ -70,7 +42,7 @@ function bracket_escape($idf, $back = false) {
|
|||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function h($string) {
|
function h($string) {
|
||||||
return htmlspecialchars(str_replace("\0", "", $string), ENT_QUOTES);
|
return htmlspecialchars($string, ENT_QUOTES);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Escape for TD
|
/** Escape for TD
|
||||||
@@ -95,13 +67,12 @@ function nl_br($string) {
|
|||||||
* @param bool
|
* @param bool
|
||||||
* @param string
|
* @param string
|
||||||
* @param string
|
* @param string
|
||||||
* @param bool
|
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function checkbox($name, $value, $checked, $label = "", $onclick = "", $jsonly = false) {
|
function checkbox($name, $value, $checked, $label = "", $onclick = "") {
|
||||||
static $id = 0;
|
static $id = 0;
|
||||||
$id++;
|
$id++;
|
||||||
$return = "<input type='checkbox' name='$name' value='" . h($value) . "'" . ($checked ? " checked" : "") . ($onclick ? ' onclick="' . h($onclick) . '"' : '') . ($jsonly ? " class='jsonly'" : "") . " id='checkbox-$id'>";
|
$return = "<input type='checkbox'" . ($name ? " name='$name' value='" . h($value) . "'" : "") . ($checked ? " checked" : "") . ($onclick ? " onclick=\"$onclick\"" : "") . " id='checkbox-$id'>";
|
||||||
return ($label != "" ? "<label for='checkbox-$id'>$return" . h($label) . "</label>" : $return);
|
return ($label != "" ? "<label for='checkbox-$id'>$return" . h($label) . "</label>" : $return);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,12 +85,10 @@ function checkbox($name, $value, $checked, $label = "", $onclick = "", $jsonly =
|
|||||||
function optionlist($options, $selected = null, $use_keys = false) {
|
function optionlist($options, $selected = null, $use_keys = false) {
|
||||||
$return = "";
|
$return = "";
|
||||||
foreach ($options as $k => $v) {
|
foreach ($options as $k => $v) {
|
||||||
$opts = array($k => $v);
|
|
||||||
if (is_array($v)) {
|
if (is_array($v)) {
|
||||||
$return .= '<optgroup label="' . h($k) . '">';
|
$return .= '<optgroup label="' . h($k) . '">';
|
||||||
$opts = $v;
|
|
||||||
}
|
}
|
||||||
foreach ($opts as $key => $val) {
|
foreach ((is_array($v) ? $v : array($k => $v)) as $key => $val) {
|
||||||
$return .= '<option' . ($use_keys || is_string($key) ? ' value="' . h($key) . '"' : '') . (($use_keys || is_string($key) ? (string) $key : $val) === $selected ? ' selected' : '') . '>' . h($val);
|
$return .= '<option' . ($use_keys || is_string($key) ? ' value="' . h($key) . '"' : '') . (($use_keys || is_string($key) ? (string) $key : $val) === $selected ? ' selected' : '') . '>' . h($val);
|
||||||
}
|
}
|
||||||
if (is_array($v)) {
|
if (is_array($v)) {
|
||||||
@@ -138,7 +107,7 @@ function optionlist($options, $selected = null, $use_keys = false) {
|
|||||||
*/
|
*/
|
||||||
function html_select($name, $options, $value = "", $onchange = true) {
|
function html_select($name, $options, $value = "", $onchange = true) {
|
||||||
if ($onchange) {
|
if ($onchange) {
|
||||||
return "<select name='" . h($name) . "'" . (is_string($onchange) ? ' onchange="' . h($onchange) . '"' : "") . ">" . optionlist($options, $value) . "</select>";
|
return "<select name='" . h($name) . "'" . (is_string($onchange) ? " onchange=\"$onchange\"" : "") . ">" . optionlist($options, $value) . "</select>";
|
||||||
}
|
}
|
||||||
$return = "";
|
$return = "";
|
||||||
foreach ($options as $key => $val) {
|
foreach ($options as $key => $val) {
|
||||||
@@ -147,71 +116,20 @@ function html_select($name, $options, $value = "", $onchange = true) {
|
|||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get onclick confirmation
|
/** Print SQL <textarea> tag
|
||||||
* @param string JavaScript expression
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function confirm($count = "") {
|
|
||||||
return " onclick=\"return confirm('" . lang('Are you sure?') . ($count ? " (' + $count + ')" : "") . "');\"";
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Print header for hidden fieldset (close by </div></fieldset>)
|
|
||||||
* @param string
|
* @param string
|
||||||
* @param string
|
* @param int
|
||||||
* @param bool
|
* @param int
|
||||||
* @param string
|
* @param string
|
||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function print_fieldset($id, $legend, $visible = false, $onclick = "") {
|
function textarea($name, $value, $rows = 10, $cols = 80) {
|
||||||
echo "<fieldset><legend><a href='#fieldset-$id' onclick=\"" . h($onclick) . "return !toggle('fieldset-$id');\">$legend</a></legend><div id='fieldset-$id'" . ($visible ? "" : " class='hidden'") . ">\n";
|
echo "<textarea name='$name' rows='$rows' cols='$cols' style='width: 98%;' spellcheck='false'>" . h($value) . "</textarea>"; // spellcheck - not valid before HTML5
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Return class='active' if $bold is true
|
|
||||||
* @param bool
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function bold($bold) {
|
|
||||||
return ($bold ? " class='active'" : "");
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Generate class for odd rows
|
|
||||||
* @param string return this for odd rows, empty to reset counter
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function odd($return = ' class="odd"') {
|
|
||||||
static $i = 0;
|
|
||||||
if (!$return) { // reset counter
|
|
||||||
$i = -1;
|
|
||||||
}
|
|
||||||
return ($i++ % 2 ? $return : '');
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Escape string for JavaScript apostrophes
|
// other functions
|
||||||
* @param string
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function js_escape($string) {
|
|
||||||
return addcslashes($string, "\r\n'\\/"); // slash for <script>
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Print one row in JSON object
|
|
||||||
* @param string or "" to close the object
|
|
||||||
* @param string
|
|
||||||
* @return null
|
|
||||||
*/
|
|
||||||
function json_row($key, $val = null) {
|
|
||||||
static $first = true;
|
|
||||||
if ($first) {
|
|
||||||
echo "{";
|
|
||||||
}
|
|
||||||
if ($key != "") {
|
|
||||||
echo ($first ? "" : ",") . "\n\t\"" . addcslashes($key, "\r\n\"\\") . '": ' . ($val !== null ? '"' . addcslashes($val, "\r\n\"\\") . '"' : 'undefined');
|
|
||||||
$first = false;
|
|
||||||
} else {
|
|
||||||
echo "\n}\n";
|
|
||||||
$first = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Get INI boolean value
|
/** Get INI boolean value
|
||||||
* @param string
|
* @param string
|
||||||
@@ -222,26 +140,6 @@ function ini_bool($ini) {
|
|||||||
return (eregi('^(on|true|yes)$', $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
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
function sid() {
|
|
||||||
static $return;
|
|
||||||
if ($return === null) { // restart_session() defines SID
|
|
||||||
$return = (SID && !($_COOKIE && ini_bool("session.use_cookies"))); // $_COOKIE - don't pass SID with permanent login
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Shortcut for $connection->quote($string)
|
|
||||||
* @param string
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function q($string) {
|
|
||||||
global $connection;
|
|
||||||
return $connection->quote($string);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Get list of values from database
|
/** Get list of values from database
|
||||||
* @param string
|
* @param string
|
||||||
* @param mixed
|
* @param mixed
|
||||||
@@ -271,31 +169,8 @@ function get_key_vals($query, $connection2 = null) {
|
|||||||
}
|
}
|
||||||
$return = array();
|
$return = array();
|
||||||
$result = $connection2->query($query);
|
$result = $connection2->query($query);
|
||||||
if (is_object($result)) {
|
while ($row = $result->fetch_row()) {
|
||||||
while ($row = $result->fetch_row()) {
|
$return[$row[0]] = $row[1];
|
||||||
$return[$row[0]] = $row[1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Get all rows of result
|
|
||||||
* @param string
|
|
||||||
* @param Min_DB
|
|
||||||
* @param string
|
|
||||||
* @return array associative
|
|
||||||
*/
|
|
||||||
function get_rows($query, $connection2 = null, $error = "<p class='error'>") {
|
|
||||||
global $connection;
|
|
||||||
$conn = (is_object($connection2) ? $connection2 : $connection);
|
|
||||||
$return = array();
|
|
||||||
$result = $conn->query($query);
|
|
||||||
if (is_object($result)) { // can return true
|
|
||||||
while ($row = $result->fetch_assoc()) {
|
|
||||||
$return[] = $row;
|
|
||||||
}
|
|
||||||
} elseif (!$result && !is_object($connection2) && $error && defined("PAGE_HEADER")) {
|
|
||||||
echo $error . error() . "\n";
|
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -329,17 +204,13 @@ function unique_array($row, $indexes) {
|
|||||||
|
|
||||||
/** Create SQL condition from parsed query string
|
/** Create SQL condition from parsed query string
|
||||||
* @param array parsed query string
|
* @param array parsed query string
|
||||||
* @param array
|
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function where($where, $fields = array()) {
|
function where($where) {
|
||||||
global $jush;
|
|
||||||
$return = array();
|
$return = array();
|
||||||
$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
|
$return[] = idf_escape(bracket_escape($key, 1)) // 1 - back
|
||||||
$return[] = (preg_match($function_pattern, $key) ? $key : idf_escape($key)) //! SQL injection
|
. (ereg('\\.', $val) ? " LIKE " . exact_value(addcslashes($val, "%_")) : " = " . exact_value($val)) // LIKE because of floats, but slow with ints
|
||||||
. (($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
|
|
||||||
; //! enum and set
|
; //! enum and set
|
||||||
}
|
}
|
||||||
foreach ((array) $where["null"] as $key) {
|
foreach ((array) $where["null"] as $key) {
|
||||||
@@ -350,24 +221,22 @@ function where($where, $fields = array()) {
|
|||||||
|
|
||||||
/** Create SQL condition from query string
|
/** Create SQL condition from query string
|
||||||
* @param string
|
* @param string
|
||||||
* @param array
|
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function where_check($val, $fields = array()) {
|
function where_check($val) {
|
||||||
parse_str($val, $check);
|
parse_str($val, $check);
|
||||||
remove_slashes(array(&$check));
|
return where($check);
|
||||||
return where($check, $fields);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Create query string where condition from value
|
/** Create query string where condition from value
|
||||||
* @param int condition order
|
* @param int condition order
|
||||||
* @param string column identifier
|
* @param string column identifier
|
||||||
* @param string
|
* @param string
|
||||||
* @param string
|
* @return string
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function where_link($i, $column, $value, $operator = "=") {
|
function where_link($i, $column, $value, $operator = "=") {
|
||||||
return "&where%5B$i%5D%5Bcol%5D=" . urlencode($column) . "&where%5B$i%5D%5Bop%5D=" . urlencode(($value !== null ? $operator : "IS NULL")) . "&where%5B$i%5D%5Bval%5D=" . urlencode($value);
|
return "&where%5B$i%5D%5Bcol%5D=" . urlencode($column) . "&where%5B$i%5D%5Bop%5D=" . urlencode($operator) . "&where%5B$i%5D%5Bval%5D=" . urlencode($value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Set cookie valid for 1 month
|
/** Set cookie valid for 1 month
|
||||||
@@ -376,14 +245,13 @@ function where_link($i, $column, $value, $operator = "=") {
|
|||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function cookie($name, $value) {
|
function cookie($name, $value) {
|
||||||
global $HTTPS;
|
|
||||||
$params = array(
|
$params = array(
|
||||||
$name,
|
$name,
|
||||||
(ereg("\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
|
||||||
time() + 2592000, // 2592000 - 30 days
|
time() + 2592000, // 2592000 - 30 days
|
||||||
preg_replace('~\\?.*~', '', $_SERVER["REQUEST_URI"]),
|
preg_replace('~\\?.*~', '', $_SERVER["REQUEST_URI"]),
|
||||||
"",
|
"",
|
||||||
$HTTPS
|
$_SERVER["HTTPS"] && strcasecmp($_SERVER["HTTPS"], "off")
|
||||||
);
|
);
|
||||||
if (version_compare(PHP_VERSION, '5.2.0') >= 0) {
|
if (version_compare(PHP_VERSION, '5.2.0') >= 0) {
|
||||||
$params[] = true; // HttpOnly
|
$params[] = true; // HttpOnly
|
||||||
@@ -400,15 +268,6 @@ function restart_session() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Stop session if it would be possible to restart it later
|
|
||||||
* @return null
|
|
||||||
*/
|
|
||||||
function stop_session() {
|
|
||||||
if (!ini_bool("session.use_cookies")) {
|
|
||||||
session_write_close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Get session variable for current server
|
/** Get session variable for current server
|
||||||
* @param string
|
* @param string
|
||||||
* @return mixed
|
* @return mixed
|
||||||
@@ -430,43 +289,31 @@ function set_session($key, $val) {
|
|||||||
* @param string
|
* @param string
|
||||||
* @param string
|
* @param string
|
||||||
* @param string
|
* @param string
|
||||||
* @param string
|
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function auth_url($driver, $server, $username, $db = null) {
|
function auth_url($driver, $server, $username) {
|
||||||
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|" . session_name()), $match);
|
||||||
return "$match[1]?"
|
return "$match[1]?"
|
||||||
. (sid() ? SID . "&" : "")
|
. (SID && !$_COOKIE ? SID . "&" : "")
|
||||||
. ($driver != "server" || $server != "" ? urlencode($driver) . "=" . urlencode($server) . "&" : "")
|
. ($driver != "server" || $server != "" ? urlencode($driver) . "=" . urlencode($server) . "&" : "")
|
||||||
. "username=" . urlencode($username)
|
. "username=" . urlencode($username)
|
||||||
. ($db != "" ? "&db=" . urlencode($db) : "")
|
|
||||||
. ($match[2] ? "&$match[2]" : "")
|
. ($match[2] ? "&$match[2]" : "")
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Find whether it is an AJAX request
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
function is_ajax() {
|
|
||||||
return ($_SERVER["HTTP_X_REQUESTED_WITH"] == "XMLHttpRequest");
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Send Location header and exit
|
/** Send Location header and exit
|
||||||
* @param string null to only set a message
|
* @param string null to only set a message
|
||||||
* @param string
|
* @param string
|
||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function redirect($location, $message = null) {
|
function redirect($location, $message = null) {
|
||||||
if ($message !== null) {
|
if (isset($message)) {
|
||||||
restart_session();
|
restart_session();
|
||||||
$_SESSION["messages"][preg_replace('~^[^?]*~', '', ($location !== null ? $location : $_SERVER["REQUEST_URI"]))][] = $message;
|
$_SESSION["messages"][] = $message;
|
||||||
}
|
}
|
||||||
if ($location !== null) {
|
if (isset($location)) {
|
||||||
if ($location == "") {
|
header("Location: " . ($location != "" ? $location : "."));
|
||||||
$location = ".";
|
|
||||||
}
|
|
||||||
header("Location: $location");
|
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -487,7 +334,7 @@ function query_redirect($query, $location, $message, $redirect = true, $execute
|
|||||||
}
|
}
|
||||||
$sql = "";
|
$sql = "";
|
||||||
if ($query) {
|
if ($query) {
|
||||||
$sql = $adminer->messageQuery("$query;");
|
$sql = $adminer->messageQuery($query);
|
||||||
}
|
}
|
||||||
if ($failed) {
|
if ($failed) {
|
||||||
$error = error() . $sql;
|
$error = error() . $sql;
|
||||||
@@ -500,17 +347,17 @@ function query_redirect($query, $location, $message, $redirect = true, $execute
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Execute and remember query
|
/** Execute and remember query
|
||||||
* @param string null to return remembered queries, end with ';' to use DELIMITER
|
* @param string null to return remembered queries
|
||||||
* @return Min_Result
|
* @return Min_Result
|
||||||
*/
|
*/
|
||||||
function queries($query = null) {
|
function queries($query = null) {
|
||||||
global $connection;
|
global $connection;
|
||||||
static $queries = array();
|
static $queries = array();
|
||||||
if ($query === null) {
|
if (!isset($query)) {
|
||||||
// return executed queries without parameter
|
// return executed queries without parameter
|
||||||
return implode(";\n", $queries);
|
return implode(";\n", $queries);
|
||||||
}
|
}
|
||||||
$queries[] = (ereg(';$', $query) ? "DELIMITER ;;\n$query;\nDELIMITER " : $query);
|
$queries[] = $query;
|
||||||
return $connection->query($query);
|
return $connection->query($query);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -533,7 +380,6 @@ function apply_queries($query, $tables, $escape = 'table') {
|
|||||||
* @param string
|
* @param string
|
||||||
* @param string
|
* @param string
|
||||||
* @param bool
|
* @param bool
|
||||||
* @return bool
|
|
||||||
*/
|
*/
|
||||||
function queries_redirect($location, $message, $redirect) {
|
function queries_redirect($location, $message, $redirect) {
|
||||||
return query_redirect(queries(), $location, $message, $redirect, false, !$redirect);
|
return query_redirect(queries(), $location, $message, $redirect, false, !$redirect);
|
||||||
@@ -549,7 +395,6 @@ function remove_from_uri($param = "") {
|
|||||||
|
|
||||||
/** Generate page number for pagination
|
/** Generate page number for pagination
|
||||||
* @param int
|
* @param int
|
||||||
* @param int
|
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function pagination($page, $current) {
|
function pagination($page, $current) {
|
||||||
@@ -566,19 +411,10 @@ function get_file($key, $decompress = false) {
|
|||||||
if (!$file || $file["error"]) {
|
if (!$file || $file["error"]) {
|
||||||
return $file["error"];
|
return $file["error"];
|
||||||
}
|
}
|
||||||
$return = file_get_contents($decompress && ereg('\\.gz$', $file["name"]) ? "compress.zlib://$file[tmp_name]"
|
return file_get_contents($decompress && ereg('\\.gz$', $file["name"]) ? "compress.zlib://$file[tmp_name]"
|
||||||
: ($decompress && ereg('\\.bz2$', $file["name"]) ? "compress.bzip2://$file[tmp_name]"
|
: ($decompress && ereg('\\.bz2$', $file["name"]) ? "compress.bzip2://$file[tmp_name]"
|
||||||
: $file["tmp_name"]
|
: $file["tmp_name"]
|
||||||
)); //! may not be reachable because of open_basedir
|
)); //! may not be reachable because of open_basedir
|
||||||
if ($decompress) {
|
|
||||||
$start = substr($return, 0, 3);
|
|
||||||
if (function_exists("iconv") && ereg("^\xFE\xFF|^\xFF\xFE", $start, $regs)) { // not ternary operator to save memory
|
|
||||||
$return = iconv("utf-16", "utf-8", $return);
|
|
||||||
} elseif ($start == "\xEF\xBB\xBF") { // UTF-8 BOM
|
|
||||||
$return = substr($return, 3);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Determine upload error
|
/** Determine upload error
|
||||||
@@ -586,18 +422,20 @@ function get_file($key, $decompress = false) {
|
|||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function upload_error($error) {
|
function upload_error($error) {
|
||||||
$max_size = ($error == UPLOAD_ERR_INI_SIZE ? ini_get("upload_max_filesize") : 0); // post_max_size is checked in index.php
|
$max_size = ($error == UPLOAD_ERR_INI_SIZE ? ini_get("upload_max_filesize") : null); // post_max_size is checked in index.php
|
||||||
return ($error ? lang('Unable to upload a file.') . ($max_size ? " " . lang('Maximum allowed file size is %sB.', $max_size) : "") : lang('File does not exist.'));
|
return ($error ? lang('Unable to upload a file.') . ($max_size ? " " . lang('Maximum allowed file size is %sB.', $max_size) : "") : lang('File does not exist.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Create repeat pattern for preg
|
/** Generate class for odd rows
|
||||||
* @param string
|
* @param string return this for odd rows, empty to reset counter
|
||||||
* @param int
|
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function repeat_pattern($pattern, $length) {
|
function odd($return = ' class="odd"') {
|
||||||
// fix for Compilation failed: number too big in {} quantifier
|
static $i = 0;
|
||||||
return str_repeat("$pattern{0,65535}", $length / 65535) . "$pattern{0," . ($length % 65535) . "}"; // can create {0,0} which is OK
|
if (!$return) { // reset counter
|
||||||
|
$i = -1;
|
||||||
|
}
|
||||||
|
return ($i++ % 2 ? $return : '');
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Check whether the string is in UTF-8
|
/** Check whether the string is in UTF-8
|
||||||
@@ -616,10 +454,10 @@ function is_utf8($val) {
|
|||||||
* @return string escaped string with appended ...
|
* @return string escaped string with appended ...
|
||||||
*/
|
*/
|
||||||
function shorten_utf8($string, $length = 80, $suffix = "") {
|
function shorten_utf8($string, $length = 80, $suffix = "") {
|
||||||
if (!preg_match("(^(" . repeat_pattern("[\t\r\n -\x{FFFF}]", $length) . ")($)?)u", $string, $match)) { // ~s causes trash in $match[2] under some PHP versions, (.|\n) is slow
|
if (!preg_match("(^([\t\r\n -\x{FFFF}]{0,$length})($)?)u", $string, $match)) { // ~s causes trash in $match[2] under some PHP versions, (.|\n) is slow
|
||||||
preg_match("(^(" . repeat_pattern("[\t\r\n -~]", $length) . ")($)?)", $string, $match);
|
preg_match("(^([\t\r\n -~]{0,$length})($)?)", $string, $match);
|
||||||
}
|
}
|
||||||
return h($match[1]) . $suffix . (isset($match[2]) ? "" : "<i>...</i>");
|
return h($match[1]) . $suffix . (isset($match[2]) ? "" : "<em>...</em>");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Generate friendly URL
|
/** Generate friendly URL
|
||||||
@@ -652,7 +490,7 @@ function hidden_fields($process, $ignore = array()) {
|
|||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function hidden_fields_get() {
|
function hidden_fields_get() {
|
||||||
echo (sid() ? '<input type="hidden" name="' . session_name() . '" value="' . h(session_id()) . '">' : '');
|
echo (SID && !$_COOKIE ? '<input type="hidden" name="' . session_name() . '" value="' . h(session_id()) . '">' : '');
|
||||||
echo (SERVER !== null ? '<input type="hidden" name="' . DRIVER . '" value="' . h(SERVER) . '">' : "");
|
echo (SERVER !== null ? '<input type="hidden" name="' . DRIVER . '" value="' . h(SERVER) . '">' : "");
|
||||||
echo '<input type="hidden" name="username" value="' . h($_GET["username"]) . '">';
|
echo '<input type="hidden" name="username" value="' . h($_GET["username"]) . '">';
|
||||||
}
|
}
|
||||||
@@ -662,9 +500,8 @@ function hidden_fields_get() {
|
|||||||
* @return array array($col => array())
|
* @return array array($col => array())
|
||||||
*/
|
*/
|
||||||
function column_foreign_keys($table) {
|
function column_foreign_keys($table) {
|
||||||
global $adminer;
|
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach ($adminer->foreignKeys($table) as $foreign_key) {
|
foreach (foreign_keys($table) as $foreign_key) {
|
||||||
foreach ($foreign_key["source"] as $val) {
|
foreach ($foreign_key["source"] as $val) {
|
||||||
$return[$val][] = $foreign_key;
|
$return[$val][] = $foreign_key;
|
||||||
}
|
}
|
||||||
@@ -677,19 +514,15 @@ function column_foreign_keys($table) {
|
|||||||
* @param string
|
* @param string
|
||||||
* @param array
|
* @param array
|
||||||
* @param mixed int|string|array
|
* @param mixed int|string|array
|
||||||
* @param string
|
|
||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function enum_input($type, $attrs, $field, $value, $empty = null) {
|
function enum_input($type, $name, $field, $value) {
|
||||||
global $adminer;
|
|
||||||
preg_match_all("~'((?:[^']|'')*)'~", $field["length"], $matches);
|
preg_match_all("~'((?:[^']|'')*)'~", $field["length"], $matches);
|
||||||
$return = ($empty !== null ? "<label><input type='$type'$attrs value='$empty'" . ((is_array($value) ? in_array($empty, $value) : $value === 0) ? " checked" : "") . "><i>" . lang('empty') . "</i></label>" : "");
|
|
||||||
foreach ($matches[1] as $i => $val) {
|
foreach ($matches[1] as $i => $val) {
|
||||||
$val = stripcslashes(str_replace("''", "'", $val));
|
$val = stripcslashes(str_replace("''", "'", $val));
|
||||||
$checked = (is_int($value) ? $value == $i+1 : (is_array($value) ? in_array($i+1, $value) : $value === $val));
|
$checked = (is_int($value) ? $value == $i+1 : (is_array($value) ? in_array($i+1, $value) : $value === $val));
|
||||||
$return .= " <label><input type='$type'$attrs value='" . ($i+1) . "'" . ($checked ? ' checked' : '') . '>' . h($adminer->editVal($val, $field)) . '</label>';
|
echo " <label><input type='$type' name='$name' value='" . ($i+1) . "'" . ($checked ? ' checked' : '') . '>' . h($val) . '</label>';
|
||||||
}
|
}
|
||||||
return $return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Print edit input field
|
/** Print edit input field
|
||||||
@@ -699,17 +532,14 @@ function enum_input($type, $attrs, $field, $value, $empty = null) {
|
|||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function input($field, $value, $function) {
|
function input($field, $value, $function) {
|
||||||
global $connection, $types, $adminer, $jush;
|
global $types, $adminer, $jush;
|
||||||
$name = h(bracket_escape($field["field"]));
|
$name = h(bracket_escape($field["field"]));
|
||||||
echo "<td class='function'>";
|
echo "<td class='function'>";
|
||||||
$reset = ($jush == "mssql" && $field["auto_increment"]);
|
$functions = (isset($_GET["select"]) ? array("orig" => lang('original')) : array()) + $adminer->editFunctions($field);
|
||||||
if ($reset && !$_POST["save"]) {
|
|
||||||
$function = null;
|
|
||||||
}
|
|
||||||
$functions = (isset($_GET["select"]) || $reset ? array("orig" => lang('original')) : array()) + $adminer->editFunctions($field);
|
|
||||||
$attrs = " name='fields[$name]'";
|
|
||||||
if ($field["type"] == "enum") {
|
if ($field["type"] == "enum") {
|
||||||
echo nbsp($functions[""]) . "<td>" . $adminer->editInput($_GET["edit"], $field, $attrs, $value);
|
echo nbsp($functions[""]) . "<td>" . ($functions["orig"] ? "<label><input type='radio' name='fields[$name]' value='-1' checked><em>$functions[orig]</em></label> " : "");
|
||||||
|
echo $adminer->editInput($_GET["edit"], $field, " name='fields[$name]'", $value);
|
||||||
|
enum_input("radio", "fields[$name]", $field, $value);
|
||||||
} else {
|
} else {
|
||||||
$first = 0;
|
$first = 0;
|
||||||
foreach ($functions as $key => $val) {
|
foreach ($functions as $key => $val) {
|
||||||
@@ -718,9 +548,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;\"" : "");
|
$onchange = ($first ? " onchange=\"var f = this.form['function[" . addcslashes($name, "\r\n'\\") . "]']; if ($first > f.selectedIndex) f.selectedIndex = $first;\"" : "");
|
||||||
$attrs .= $onchange;
|
$attrs = " name='fields[$name]'$onchange";
|
||||||
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 ? html_select("function[$name]", $functions, !isset($function) || in_array($function, $functions) ? $function : "") : 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;
|
||||||
@@ -729,26 +559,16 @@ function input($field, $value, $function) {
|
|||||||
foreach ($matches[1] as $i => $val) {
|
foreach ($matches[1] as $i => $val) {
|
||||||
$val = stripcslashes(str_replace("''", "'", $val));
|
$val = stripcslashes(str_replace("''", "'", $val));
|
||||||
$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($val) . '</label>';
|
||||||
}
|
}
|
||||||
} elseif (ereg('blob|bytea|raw|file', $field["type"]) && ini_bool("file_uploads")) {
|
} elseif (ereg('binary|blob|bytea', $field["type"]) && ini_bool("file_uploads")) {
|
||||||
echo "<input type='file' name='fields-$name'$onchange>";
|
echo "<input type='file' name='fields-$name'$onchange>";
|
||||||
} elseif (($text = ereg('text|lob', $field["type"])) || ereg("\n", $value)) {
|
} elseif (ereg('text|blob', $field["type"])) {
|
||||||
if ($text && $jush != "sqlite") {
|
echo "<textarea " . ($jush != "sqlite" || ereg("\n", $value) ? "cols='50' rows='12'" : "cols='30' rows='1' style='height: 1.2em;'") . "$attrs>" . h($value) . '</textarea>'; // 1.2em - line-height
|
||||||
$attrs .= " cols='50' rows='12'";
|
|
||||||
} else {
|
|
||||||
$rows = min(12, substr_count($value, "\n") + 1);
|
|
||||||
$attrs .= " cols='30' rows='$rows'" . ($rows == 1 ? " style='height: 1.2em;'" : ""); // 1.2em - line-height
|
|
||||||
}
|
|
||||||
echo "<textarea$attrs>" . h($value) . '</textarea>';
|
|
||||||
} else {
|
} else {
|
||||||
// int(3) is only a display hint
|
// int(3) is only a display hint
|
||||||
$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));
|
$maxlength = (!ereg('int', $field["type"]) && preg_match('~^([0-9]+)(,([0-9]+))?$~', $field["length"], $match) ? ($match[1] + ($match[3] ? 1 : 0) + ($match[2] && !$field["unsigned"] ? 1 : 0)) : ($types[$field["type"]] ? $types[$field["type"]] + ($field["unsigned"] ? 0 : 1) : 0));
|
||||||
if ($connection->server_info >= 5.6 && ereg('time', $field["type"])) {
|
echo "<input value='" . h($value) . "'" . ($maxlength ? " maxlength='$maxlength'" : "") . (ereg('char', $field["type"]) && $field["length"] > 20 ? " size='40'" : "") . "$attrs>";
|
||||||
$maxlength += 7; // microtime
|
|
||||||
}
|
|
||||||
// type='date' and type='time' display localized value which may be confusing, type='datetime' uses 'T' as date and time separator
|
|
||||||
echo "<input" . (ereg('int', $field["type"]) ? " type='number'" : "") . " value='" . h($value) . "'" . ($maxlength ? " maxlength='$maxlength'" : "") . (ereg('char|binary', $field["type"]) && $maxlength > 20 ? " size='40'" : "") . "$attrs>";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -758,7 +578,7 @@ function input($field, $value, $function) {
|
|||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function process_input($field) {
|
function process_input($field) {
|
||||||
global $adminer;
|
global $connection, $adminer;
|
||||||
$idf = bracket_escape($field["field"]);
|
$idf = bracket_escape($field["field"]);
|
||||||
$function = $_POST["function"][$idf];
|
$function = $_POST["function"][$idf];
|
||||||
$value = $_POST["fields"][$idf];
|
$value = $_POST["fields"][$idf];
|
||||||
@@ -769,13 +589,13 @@ function process_input($field) {
|
|||||||
if ($value == "") {
|
if ($value == "") {
|
||||||
return "NULL";
|
return "NULL";
|
||||||
}
|
}
|
||||||
return +$value;
|
return intval($value);
|
||||||
}
|
}
|
||||||
if ($field["auto_increment"] && $value == "") {
|
if ($field["auto_increment"] && $value == "") {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if ($function == "orig") {
|
if ($function == "orig") {
|
||||||
return ($field["on_update"] == "CURRENT_TIMESTAMP" ? idf_escape($field["field"]) : false);
|
return false;
|
||||||
}
|
}
|
||||||
if ($function == "NULL") {
|
if ($function == "NULL") {
|
||||||
return "NULL";
|
return "NULL";
|
||||||
@@ -783,12 +603,12 @@ function process_input($field) {
|
|||||||
if ($field["type"] == "set") {
|
if ($field["type"] == "set") {
|
||||||
return array_sum((array) $value);
|
return array_sum((array) $value);
|
||||||
}
|
}
|
||||||
if (ereg('blob|bytea|raw|file', $field["type"]) && ini_bool("file_uploads")) {
|
if (ereg('binary|blob|bytea', $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
|
||||||
}
|
}
|
||||||
return q($file);
|
return $connection->quote($file);
|
||||||
}
|
}
|
||||||
return $adminer->processInput($field, $value, $function);
|
return $adminer->processInput($field, $value, $function);
|
||||||
}
|
}
|
||||||
@@ -800,54 +620,34 @@ function process_input($field) {
|
|||||||
*/
|
*/
|
||||||
function search_tables() {
|
function search_tables() {
|
||||||
global $adminer, $connection;
|
global $adminer, $connection;
|
||||||
$_GET["where"][0]["op"] = "LIKE %%";
|
|
||||||
$_GET["where"][0]["val"] = $_POST["query"];
|
|
||||||
$found = false;
|
$found = false;
|
||||||
foreach (table_status() as $table => $table_status) {
|
foreach (table_status() as $table => $table_status) {
|
||||||
$name = $adminer->tableName($table_status);
|
$name = $adminer->tableName($table_status);
|
||||||
if (isset($table_status["Engine"]) && $name != "" && (!$_POST["tables"] || in_array($table, $_POST["tables"]))) {
|
if (isset($table_status["Engine"]) && $name != "" && (!$_POST["tables"] || in_array($table, $_POST["tables"]))) {
|
||||||
$result = $connection->query("SELECT" . limit("1 FROM " . table($table), " WHERE " . implode(" AND ", $adminer->selectSearchProcess(fields($table), array())), 1));
|
$result = $connection->query("SELECT" . limit("1 FROM " . table($table), " WHERE " . implode(" AND ", $adminer->selectSearchProcess(fields($table), array())), 1));
|
||||||
if (!$result || $result->fetch_row()) {
|
if ($result->num_rows) {
|
||||||
if (!$found) {
|
if (!$found) {
|
||||||
echo "<ul>\n";
|
echo "<ul>\n";
|
||||||
$found = true;
|
$found = true;
|
||||||
}
|
}
|
||||||
echo "<li>" . ($result
|
echo "<li><a href='" . h(ME . "select=" . urlencode($table) . "&where[0][op]=" . urlencode($_GET["where"][0]["op"]) . "&where[0][val]=" . urlencode($_GET["where"][0]["val"])) . "'>" . h($name) . "</a>\n";
|
||||||
? "<a href='" . h(ME . "select=" . urlencode($table) . "&where[0][op]=" . urlencode($_GET["where"][0]["op"]) . "&where[0][val]=" . urlencode($_GET["where"][0]["val"])) . "'>$name</a>\n"
|
|
||||||
: "$name: <span class='error'>" . error() . "</span>\n");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
echo ($found ? "</ul>" : "<p class='message'>" . lang('No tables.')) . "\n";
|
echo ($found ? "</ul>" : "<p class='message'>" . lang('No tables.')) . "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Send headers for export
|
|
||||||
* @param string
|
|
||||||
* @param bool
|
|
||||||
* @return string extension
|
|
||||||
*/
|
|
||||||
function dump_headers($identifier, $multi_table = false) {
|
|
||||||
global $adminer;
|
|
||||||
$return = $adminer->dumpHeaders($identifier, $multi_table);
|
|
||||||
$output = $_POST["output"];
|
|
||||||
if ($output != "text") {
|
|
||||||
header("Content-Disposition: attachment; filename=" . $adminer->dumpFilename($identifier) . ".$return" . ($output != "file" && !ereg('[^0-9a-z]', $output) ? ".$output" : ""));
|
|
||||||
}
|
|
||||||
session_write_close();
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Print CSV row
|
/** Print CSV row
|
||||||
* @param array
|
* @param array
|
||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function dump_csv($row) {
|
function dump_csv($row) {
|
||||||
foreach ($row as $key => $val) {
|
foreach ($row as $key => $val) {
|
||||||
if (preg_match("~[\"\n,;\t]~", $val) || $val === "") {
|
if (preg_match("~[\"\n,;]~", $val) || $val === "") {
|
||||||
$row[$key] = '"' . str_replace('"', '""', $val) . '"';
|
$row[$key] = '"' . str_replace('"', '""', $val) . '"';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
echo implode(($_POST["format"] == "csv" ? "," : ($_POST["format"] == "tsv" ? "\t" : ";")), $row) . "\r\n";
|
echo implode(($_POST["format"] == "csv" ? "," : ";"), $row) . "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Apply SQL function
|
/** Apply SQL function
|
||||||
@@ -894,7 +694,7 @@ function password_file() {
|
|||||||
* @param string
|
* @param string
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function is_mail($email) {
|
function is_email($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";
|
||||||
@@ -903,86 +703,28 @@ function is_mail($email) {
|
|||||||
|
|
||||||
/** Check whether the string is URL address
|
/** Check whether the string is URL address
|
||||||
* @param string
|
* @param string
|
||||||
* @return string "http", "https" or ""
|
|
||||||
*/
|
|
||||||
function is_url($string) {
|
|
||||||
$domain = '[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])'; // one domain component //! IDN
|
|
||||||
return (preg_match("~^(https?)://($domain?\\.)+$domain(:\\d+)?(/.*)?(\\?.*)?(#.*)?\$~i", $string, $match) ? strtolower($match[1]) : ""); //! restrict path, query and fragment characters
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Check if field should be shortened
|
|
||||||
* @param array
|
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function is_shortable($field) {
|
function is_url($string) {
|
||||||
return ereg('char|text|lob|geometry|point|linestring|polygon', $field["type"]);
|
$domain = '[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])'; // one domain component
|
||||||
|
return preg_match("~^https?://($domain?\\.)+$domain(:[0-9]+)?(/.*)?(\\?.*)?(#.*)?\$~i", $string); //! restrict path, query and fragment characters
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Run query which can be killed by AJAX call after timing out
|
/** Print header for hidden fieldset (close by </div></fieldset>)
|
||||||
* @param string
|
* @param string
|
||||||
* @return Min_Result
|
* @param string
|
||||||
|
* @param bool
|
||||||
|
* @return null
|
||||||
*/
|
*/
|
||||||
function slow_query($query) {
|
function print_fieldset($id, $legend, $visible = false) {
|
||||||
global $adminer, $token;
|
echo "<fieldset><legend><a href='#fieldset-$id' onclick=\"return !toggle('fieldset-$id');\">$legend</a></legend><div id='fieldset-$id'" . ($visible ? "" : " class='hidden'") . ">\n";
|
||||||
$db = $adminer->database();
|
|
||||||
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
|
|
||||||
?>
|
|
||||||
<script type="text/javascript">
|
|
||||||
var timeout = setTimeout(function () {
|
|
||||||
ajax('<?php echo js_escape(ME); ?>script=kill', function () {
|
|
||||||
}, 'token=<?php echo $token; ?>&kill=<?php echo $kill; ?>');
|
|
||||||
}, <?php echo 1000 * $adminer->queryTimeout(); ?>);
|
|
||||||
</script>
|
|
||||||
<?php
|
|
||||||
} else {
|
|
||||||
$connection2 = null;
|
|
||||||
}
|
|
||||||
ob_flush();
|
|
||||||
flush();
|
|
||||||
$return = @get_key_vals($query, $connection2); // @ - may be killed
|
|
||||||
if ($connection2) {
|
|
||||||
echo "<script type='text/javascript'>clearTimeout(timeout);</script>\n";
|
|
||||||
ob_flush();
|
|
||||||
flush();
|
|
||||||
}
|
|
||||||
return array_keys($return);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// used in compiled version
|
/** Enclose $string to <b> if $bold is true
|
||||||
function lzw_decompress($binary) {
|
* @param string
|
||||||
// convert binary string to codes
|
* @param bool
|
||||||
$dictionary_count = 256;
|
* @return string
|
||||||
$bits = 8; // ceil(log($dictionary_count, 2))
|
*/
|
||||||
$codes = array();
|
function bold($string, $bold) {
|
||||||
$rest = 0;
|
return ($bold ? "<b>$string</b>" : $string);
|
||||||
$rest_length = 0;
|
|
||||||
for ($i=0; $i < strlen($binary); $i++) {
|
|
||||||
$rest = ($rest << 8) + ord($binary[$i]);
|
|
||||||
$rest_length += 8;
|
|
||||||
if ($rest_length >= $bits) {
|
|
||||||
$rest_length -= $bits;
|
|
||||||
$codes[] = $rest >> $rest_length;
|
|
||||||
$rest &= (1 << $rest_length) - 1;
|
|
||||||
$dictionary_count++;
|
|
||||||
if ($dictionary_count >> $bits) {
|
|
||||||
$bits++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// decompression
|
|
||||||
$dictionary = range("\0", "\xFF");
|
|
||||||
$return = "";
|
|
||||||
foreach ($codes as $i => $code) {
|
|
||||||
$element = $dictionary[$code];
|
|
||||||
if (!isset($element)) {
|
|
||||||
$element = $word . $word[0];
|
|
||||||
}
|
|
||||||
$return .= $element;
|
|
||||||
if ($i) {
|
|
||||||
$dictionary[] = $word . $element[0];
|
|
||||||
}
|
|
||||||
$word = $element;
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,87 +2,45 @@
|
|||||||
// not used in a single language version
|
// not used in a single language version
|
||||||
|
|
||||||
$langs = array(
|
$langs = array(
|
||||||
'en' => 'English', // Jakub Vrána - http://www.vrana.cz
|
'en' => 'English', // Jakub Vrána - http://php.vrana.cz
|
||||||
'cs' => 'Čeština', // Jakub Vrána - http://www.vrana.cz
|
'cs' => 'Čeština', // Jakub Vrána - http://php.vrana.cz
|
||||||
'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
|
'nl' => 'Nederlands', // Maarten Balliauw - http://blog.maartenballiauw.be
|
||||||
'es' => 'Español', // Klemens Häckel - http://clickdimension.wordpress.com
|
'es' => 'Español', // Klemens Häckel - http://clickdimension.wordpress.com
|
||||||
'de' => 'Deutsch', // Klemens Häckel - http://clickdimension.wordpress.com
|
'de' => 'Deutsch', // Klemens Häckel - http://clickdimension.wordpress.com
|
||||||
'fr' => 'Français', // Francis Gagné, Aurélien Royer
|
'fr' => 'Français', // Francis Gagné
|
||||||
'it' => 'Italiano', // Alessandro Fiorotto, Paolo Asperti
|
'it' => 'Italiano', // Alessandro Fiorotto, Paolo Asperti
|
||||||
'et' => 'Eesti', // Priit Kallas
|
'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
|
|
||||||
'lt' => 'Lietuvių', // Paulius Leščinskas - http://www.lescinskas.lt
|
|
||||||
'tr' => 'Türkçe', // Bilgehan Korkmaz - turktron.com
|
|
||||||
'ro' => 'Limba Română', // .nick .messing - dot.nick.dot.messing@gmail.com
|
|
||||||
'id' => 'Bahasa Indonesia', // Ivan Lanin - http://ivan.lanin.org
|
|
||||||
'ru' => 'Русский язык', // Maksim Izmaylov
|
'ru' => 'Русский язык', // Maksim Izmaylov
|
||||||
'uk' => 'Українська', // Valerii Kryzhov
|
|
||||||
'sr' => 'Српски', // Nikola Radovanović - cobisimo@gmail.com
|
|
||||||
'zh' => '简体中文', // Mr. Lodar
|
'zh' => '简体中文', // Mr. Lodar
|
||||||
'zh-tw' => '繁體中文', // http://tzangms.com
|
'zh-tw' => '繁體中文', // http://tzangms.com
|
||||||
'ja' => '日本語', // Hitoshi Ozawa - http://sourceforge.jp/projects/oss-ja-jpn/releases/
|
'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
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function get_lang() {
|
|
||||||
global $LANG;
|
|
||||||
return $LANG;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Translate string
|
|
||||||
* @param string
|
|
||||||
* @param int
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function lang($idf, $number = null) {
|
function lang($idf, $number = null) {
|
||||||
global $LANG, $translations;
|
global $LANG, $translations;
|
||||||
$translation = ($translations[$idf] ? $translations[$idf] : $idf);
|
$translation = $translations[$idf];
|
||||||
if (is_array($translation)) {
|
if (is_array($translation) && $translation) {
|
||||||
$pos = ($number == 1 ? 0
|
$pos = ($number == 1 ? 0 : ((!$number || $number >= 5) && ereg('cs|sk|ru', $LANG) ? 2 : 1)); // Slavic languages use different form for 2, 3, 4
|
||||||
: ($LANG == 'cs' || $LANG == 'sk' ? ($number && $number < 5 ? 1 : 2) // different forms for 1, 2-4, other
|
|
||||||
: ($LANG == 'fr' ? (!$number ? 0 : 1) // different forms for 0-1, other
|
|
||||||
: ($LANG == 'pl' ? ($number % 10 > 1 && $number % 10 < 5 && $number / 10 % 10 != 1 ? 1 : 2) // different forms for 1, 2-4, other
|
|
||||||
: ($LANG == 'sl' ? ($number % 100 == 1 ? 0 : ($number % 100 == 2 ? 1 : ($number % 100 == 3 || $number % 100 == 4 ? 2 : 3))) // different forms for 1, 2, 3-4, other
|
|
||||||
: ($LANG == 'lt' ? ($number % 10 == 1 && $number % 100 != 11 ? 0 : ($number % 10 > 1 && $number / 10 % 10 != 1 ? 1 : 2)) // different forms for 1, 12-19, other
|
|
||||||
: ($LANG == 'ru' || $LANG == 'sr' || $LANG == 'uk' ? ($number % 10 == 1 && $number % 100 != 11 ? 0 : ($number % 10 > 1 && $number % 10 < 5 && $number / 10 % 10 != 1 ? 1 : 2)) // different forms for 1, 2-4, other
|
|
||||||
: 1
|
|
||||||
))))))); // http://www.gnu.org/software/gettext/manual/html_node/Plural-forms.html
|
|
||||||
$translation = $translation[$pos];
|
$translation = $translation[$pos];
|
||||||
}
|
}
|
||||||
$args = func_get_args();
|
$args = func_get_args();
|
||||||
array_shift($args);
|
array_shift($args);
|
||||||
$format = str_replace("%d", "%s", $translation);
|
return vsprintf((isset($translation) ? $translation : $idf), $args);
|
||||||
if ($format != $translation) {
|
|
||||||
$args[0] = number_format($number, 0, ".", lang(','));
|
|
||||||
}
|
|
||||||
return vsprintf($format, $args);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function switch_lang() {
|
function switch_lang() {
|
||||||
global $LANG, $langs;
|
global $LANG, $langs;
|
||||||
echo "<form action='' method='post'>\n<div id='lang'>";
|
echo "<form action=''>\n<div id='lang'>";
|
||||||
|
hidden_fields($_GET, array('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='$_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"]) && $_SESSION["token"] == $_POST["token"]) { // $token and $error not yet available
|
if (isset($_GET["lang"])) {
|
||||||
cookie("adminer_lang", $_POST["lang"]);
|
$_COOKIE["adminer_lang"] = $_GET["lang"];
|
||||||
$_SESSION["lang"] = $_POST["lang"]; // cookies may be disabled
|
$_SESSION["lang"] = $_GET["lang"]; // cookies may be disabled
|
||||||
$_SESSION["translations"] = array(); // used in compiled version
|
|
||||||
redirect(remove_from_uri());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$LANG = "en";
|
$LANG = "en";
|
||||||
|
|||||||
@@ -1,15 +1,10 @@
|
|||||||
<?php
|
<?php
|
||||||
// PDO can be used in several database drivers
|
// PDO can be used in several database drivers
|
||||||
if (extension_loaded('pdo')) {
|
if (extension_loaded('pdo')) {
|
||||||
/*abstract*/ class Min_PDO extends PDO {
|
/*abstract */class Min_PDO extends PDO {
|
||||||
var $_result, $server_info, $affected_rows, $errno, $error;
|
var $_result, $server_info, $affected_rows, $error;
|
||||||
|
|
||||||
function __construct() {
|
function __construct() {
|
||||||
global $adminer;
|
|
||||||
$pos = array_search("", $adminer->operators);
|
|
||||||
if ($pos !== false) {
|
|
||||||
unset($adminer->operators[$pos]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function dsn($dsn, $username, $password, $exception_handler = 'auth_error') {
|
function dsn($dsn, $username, $password, $exception_handler = 'auth_error') {
|
||||||
@@ -24,9 +19,9 @@ if (extension_loaded('pdo')) {
|
|||||||
|
|
||||||
function query($query, $unbuffered = false) {
|
function query($query, $unbuffered = false) {
|
||||||
$result = parent::query($query);
|
$result = parent::query($query);
|
||||||
$this->error = "";
|
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
list(, $this->errno, $this->error) = $this->errorInfo();
|
$errorInfo = $this->errorInfo();
|
||||||
|
$this->error = $errorInfo[2];
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$this->store_result($result);
|
$this->store_result($result);
|
||||||
@@ -40,9 +35,6 @@ if (extension_loaded('pdo')) {
|
|||||||
function store_result($result = null) {
|
function store_result($result = null) {
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
$result = $this->_result;
|
$result = $this->_result;
|
||||||
if (!$result) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if ($result->columnCount()) {
|
if ($result->columnCount()) {
|
||||||
$result->num_rows = $result->rowCount(); // is not guaranteed to work with all drivers
|
$result->num_rows = $result->rowCount(); // is not guaranteed to work with all drivers
|
||||||
@@ -53,11 +45,7 @@ if (extension_loaded('pdo')) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function next_result() {
|
function next_result() {
|
||||||
if (!$this->_result) {
|
return $this->_result->nextRowset();
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$this->_result->_offset = 0;
|
|
||||||
return @$this->_result->nextRowset(); // @ - PDO_PgSQL doesn't support it
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function result($query, $field = 0) {
|
function result($query, $field = 0) {
|
||||||
@@ -85,10 +73,11 @@ if (extension_loaded('pdo')) {
|
|||||||
$row = (object) $this->getColumnMeta($this->_offset++);
|
$row = (object) $this->getColumnMeta($this->_offset++);
|
||||||
$row->orgtable = $row->table;
|
$row->orgtable = $row->table;
|
||||||
$row->orgname = $row->name;
|
$row->orgname = $row->name;
|
||||||
$row->charsetnr = (in_array("blob", (array) $row->flags) ? 63 : 0);
|
$row->charsetnr = (in_array("blob", $row->flags) ? 63 : 0);
|
||||||
return $row;
|
return $row;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$possible_drivers = array();
|
||||||
$drivers = array();
|
$drivers = array();
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
<?php
|
<?php
|
||||||
$VERSION = "3.6.4";
|
$VERSION = "3.0.0-dev";
|
||||||
|
|||||||
@@ -1,16 +1,15 @@
|
|||||||
<?php
|
<?php
|
||||||
/** Adminer - Compact database management
|
/** Adminer - Compact database management
|
||||||
* @link http://www.adminer.org/
|
* @link http://www.adminer.org/
|
||||||
* @author Jakub Vrana, http://www.vrana.cz/
|
* @author Jakub Vrana, http://php.vrana.cz/
|
||||||
* @copyright 2007 Jakub Vrana
|
* @copyright 2007 Jakub Vrana
|
||||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
include "./include/bootstrap.inc.php";
|
include "./include/bootstrap.inc.php";
|
||||||
|
|
||||||
$enum_length = "'(?:''|[^'\\\\]|\\\\.)*+'";
|
$enum_length = '\'(?:\'\'|[^\'\\\\]|\\\\.)*\'|"(?:""|[^"\\\\]|\\\\.)*"';
|
||||||
$inout = "IN|OUT|INOUT";
|
$inout = array("IN", "OUT", "INOUT");
|
||||||
|
|
||||||
if (isset($_GET["select"]) && ($_POST["edit"] || $_POST["clone"]) && !$_POST["save"]) {
|
if (isset($_GET["select"]) && ($_POST["edit"] || $_POST["clone"]) && !$_POST["save"]) {
|
||||||
$_GET["edit"] = $_GET["select"];
|
$_GET["edit"] = $_GET["select"];
|
||||||
@@ -55,8 +54,6 @@ if (isset($_GET["download"])) {
|
|||||||
include "./procedure.inc.php";
|
include "./procedure.inc.php";
|
||||||
} elseif (isset($_GET["sequence"])) {
|
} elseif (isset($_GET["sequence"])) {
|
||||||
include "./sequence.inc.php";
|
include "./sequence.inc.php";
|
||||||
} elseif (isset($_GET["type"])) {
|
|
||||||
include "./type.inc.php";
|
|
||||||
} elseif (isset($_GET["trigger"])) {
|
} elseif (isset($_GET["trigger"])) {
|
||||||
include "./trigger.inc.php";
|
include "./trigger.inc.php";
|
||||||
} elseif (isset($_GET["user"])) {
|
} elseif (isset($_GET["user"])) {
|
||||||
@@ -67,8 +64,6 @@ if (isset($_GET["download"])) {
|
|||||||
include "./select.inc.php";
|
include "./select.inc.php";
|
||||||
} elseif (isset($_GET["variables"])) {
|
} elseif (isset($_GET["variables"])) {
|
||||||
include "./variables.inc.php";
|
include "./variables.inc.php";
|
||||||
} elseif (isset($_GET["script"])) {
|
|
||||||
include "./script.inc.php";
|
|
||||||
} else {
|
} else {
|
||||||
include "./db.inc.php";
|
include "./db.inc.php";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,18 +2,13 @@
|
|||||||
$TABLE = $_GET["indexes"];
|
$TABLE = $_GET["indexes"];
|
||||||
$index_types = array("PRIMARY", "UNIQUE", "INDEX");
|
$index_types = array("PRIMARY", "UNIQUE", "INDEX");
|
||||||
$table_status = table_status($TABLE);
|
$table_status = table_status($TABLE);
|
||||||
if (eregi("MyISAM|M?aria" . ($connection->server_info >= 5.6 ? "|InnoDB" : ""), $table_status["Engine"])) {
|
if (ereg("MyISAM|Maria", $table_status["Engine"])) {
|
||||||
$index_types[] = "FULLTEXT";
|
$index_types[] = "FULLTEXT";
|
||||||
}
|
}
|
||||||
$indexes = indexes($TABLE);
|
$indexes = indexes($TABLE);
|
||||||
if ($jush == "sqlite") { // doesn't support primary key
|
|
||||||
unset($index_types[0]);
|
|
||||||
unset($indexes[""]);
|
|
||||||
}
|
|
||||||
if ($_POST && !$error && !$_POST["add"]) {
|
if ($_POST && !$error && !$_POST["add"]) {
|
||||||
$alter = array();
|
$alter = array();
|
||||||
foreach ($_POST["indexes"] as $index) {
|
foreach ($_POST["indexes"] as $index) {
|
||||||
$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();
|
||||||
@@ -22,29 +17,28 @@ if ($_POST && !$error && !$_POST["add"]) {
|
|||||||
foreach ($index["columns"] as $key => $column) {
|
foreach ($index["columns"] as $key => $column) {
|
||||||
if ($column != "") {
|
if ($column != "") {
|
||||||
$length = $index["lengths"][$key];
|
$length = $index["lengths"][$key];
|
||||||
$set[] = idf_escape($column) . ($length ? "(" . (+$length) . ")" : "");
|
$set[] = idf_escape($column) . ($length ? "(" . intval($length) . ")" : "");
|
||||||
$columns[] = $column;
|
$columns[] = $column;
|
||||||
$lengths[] = ($length ? $length : null);
|
$lengths[] = ($length ? $length : null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($columns) {
|
if ($columns) {
|
||||||
$existing = $indexes[$name];
|
foreach ($indexes as $name => $existing) {
|
||||||
if ($existing) {
|
|
||||||
ksort($existing["columns"]);
|
ksort($existing["columns"]);
|
||||||
ksort($existing["lengths"]);
|
ksort($existing["lengths"]);
|
||||||
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)) {
|
||||||
// skip existing index
|
// skip existing index
|
||||||
unset($indexes[$name]);
|
unset($indexes[$name]);
|
||||||
continue;
|
continue 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$alter[] = array($index["type"], $name, "(" . implode(", ", $set) . ")");
|
$alter[] = array($index["type"], "(" . implode(", ", $set) . ")");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// drop removed indexes
|
// drop removed indexes
|
||||||
foreach ($indexes as $name => $existing) {
|
foreach ($indexes as $name => $existing) {
|
||||||
$alter[] = array($existing["type"], $name, "DROP");
|
$alter[] = array($existing["type"], idf_escape($name), "DROP");
|
||||||
}
|
}
|
||||||
if (!$alter) {
|
if (!$alter) {
|
||||||
redirect(ME . "table=" . urlencode($TABLE));
|
redirect(ME . "table=" . urlencode($TABLE));
|
||||||
@@ -71,7 +65,6 @@ if ($_POST) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
foreach ($row["indexes"] as $key => $index) {
|
foreach ($row["indexes"] as $key => $index) {
|
||||||
$row["indexes"][$key]["name"] = $key;
|
|
||||||
$row["indexes"][$key]["columns"][] = "";
|
$row["indexes"][$key]["columns"][] = "";
|
||||||
}
|
}
|
||||||
$row["indexes"][] = array("columns" => array(1 => ""));
|
$row["indexes"][] = array("columns" => array(1 => ""));
|
||||||
@@ -79,26 +72,24 @@ if ($_POST) {
|
|||||||
?>
|
?>
|
||||||
|
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
<table cellspacing="0" class="nowrap">
|
<table cellspacing="0">
|
||||||
<thead><tr><th><?php echo lang('Index Type'); ?><th><?php echo lang('Column (length)'); ?><th><?php echo lang('Name'); ?></thead>
|
<thead><tr><th><?php echo lang('Index Type'); ?><th><?php echo lang('Column (length)'); ?></thead>
|
||||||
<?php
|
<?php
|
||||||
$j = 1;
|
$j = 0;
|
||||||
foreach ($row["indexes"] as $index) {
|
foreach ($row["indexes"] as $index) {
|
||||||
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"]) - 1 ? "indexesAddRow(this);" : 1)) . "<td>\n";
|
||||||
ksort($index["columns"]);
|
ksort($index["columns"]);
|
||||||
$i = 1;
|
foreach ($index["columns"] as $i => $column) {
|
||||||
foreach ($index["columns"] as $key => $column) {
|
echo "<span>" . html_select("indexes[$j][columns][$i]", array(-1 => "") + $fields, $column, ($i == count($index["columns"]) ? "indexesAddColumn(this);" : 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"] . "_") . "');");
|
echo "<input name='indexes[$j][lengths][$i]' size='2' value='" . h($index["lengths"][$i]) . "'> </span>\n"; //! hide for non-MySQL drivers, add ASC|DESC
|
||||||
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
|
|
||||||
$i++;
|
|
||||||
}
|
}
|
||||||
echo "<td><input name='indexes[$j][name]' value='" . h($index["name"]) . "' autocapitalize='off'>\n";
|
echo "\n";
|
||||||
$j++;
|
$j++;
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
</table>
|
</table>
|
||||||
<p>
|
<p>
|
||||||
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
<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>
|
<noscript><p><input type="submit" name="add" value="<?php echo lang('Add next'); ?>"></noscript>
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -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 created.' => 'تم إنشاء قاعدة البيانات.',
|
|
||||||
'Database has been renamed.' => 'تمت إعادة تسمية فاعدة البيانات.',
|
|
||||||
'Database has been altered.' => 'تم تعديل قاعدة البيانات.',
|
|
||||||
'Alter database' => 'تعديل قاعدة البيانات',
|
|
||||||
'Create database' => 'إنشاء قاعدة بيانات',
|
|
||||||
'SQL command' => 'إستعلام SQL',
|
|
||||||
'Dump' => 'تصدير',
|
|
||||||
'Logout' => 'تسجيل الخروج',
|
|
||||||
'database' => 'قاعدة بيانات',
|
|
||||||
'Use' => 'المستعمل',
|
|
||||||
'No tables.' => 'لا توجد جداول.',
|
|
||||||
'select' => 'تحديد',
|
|
||||||
'Create new table' => 'أنشئ جدول جديد',
|
|
||||||
'Item has been deleted.' => 'تم حذف العنصر.',
|
|
||||||
'Item has been updated.' => 'تم تعديل العنصر.',
|
|
||||||
'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 Token خاطئ. من فضلك أعد إرسال الإستمارة.',
|
|
||||||
'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 المدعومة غير موجودة.',
|
|
||||||
'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' => 'الحدث',
|
|
||||||
'%d row(s)' => '%d أسطر',
|
|
||||||
'Remove' => 'مسح',
|
|
||||||
'Are you sure?' => 'هل أنت متأكد؟',
|
|
||||||
'Privileges' => 'الإمتيازات',
|
|
||||||
'Create user' => 'إنشاء مستخدم',
|
|
||||||
'User has been dropped.' => 'تم حذف المستخدم.',
|
|
||||||
'User has been altered.' => 'تم تعديل المستخدم.',
|
|
||||||
'User has been created.' => 'تم إنشاء المستخدم.',
|
|
||||||
'Hashed' => 'تلبيد',
|
|
||||||
'Column' => 'عمود',
|
|
||||||
'Routine' => 'روتين',
|
|
||||||
'Grant' => 'موافق',
|
|
||||||
'Revoke' => 'إلغاء',
|
|
||||||
'%s version: %s through PHP extension %s' => 'النسخة %s : %s عن طريق إمتداد ال PHP %s',
|
|
||||||
'Logged as: %s' => 'تم تسجيل الدخول بإسم %s',
|
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'معلومات POST كبيرة جدا. قم بتقليص حجم المعلومات أو قم بزيادة قيمة %s في خيارات ال PHP.',
|
|
||||||
'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' => 'في وقت محدد',
|
|
||||||
'Save and continue edit' => 'إحفظ و واصل التعديل',
|
|
||||||
'original' => 'الأصلي',
|
|
||||||
'Tables have been truncated.' => 'تم قطع الجداول.',
|
|
||||||
'Tables have been moved.' => 'تم نقل الجداول.',
|
|
||||||
'Tables have been dropped.' => 'تم حذف الجداول.',
|
|
||||||
'Tables and views' => 'الجداول و العروض',
|
|
||||||
'Engine' => 'المحرك',
|
|
||||||
'Collation' => 'ترتيب',
|
|
||||||
'Data Length' => 'طول المعطيات.',
|
|
||||||
'Index Length' => 'طول المؤشر.',
|
|
||||||
'Data Free' => 'المساحة الحرة',
|
|
||||||
'Rows' => 'الأسطر',
|
|
||||||
',' => ',',
|
|
||||||
'Analyze' => 'تحليل',
|
|
||||||
'Optimize' => 'تحسين',
|
|
||||||
'Check' => 'فحص',
|
|
||||||
'Repair' => 'إصلاح',
|
|
||||||
'Truncate' => 'قطع',
|
|
||||||
'Move to other database' => 'نقل إلى قاعدة بيانات أخرى',
|
|
||||||
'Move' => 'نقل',
|
|
||||||
'%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 s',
|
|
||||||
'$1-$3-$5' => '$5/$3/$1',
|
|
||||||
'[yyyy]-mm-dd' => 'jj/mm/[aaaa]',
|
|
||||||
'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' => 'ملف %s من خادم الويب',
|
|
||||||
'File does not exist.' => 'الملف غير موجود.',
|
|
||||||
'%d in total' => '%d في المجموع',
|
|
||||||
'Permanent login' => 'تسجيل دخول دائم',
|
|
||||||
'Databases have been dropped.' => 'تم حذف قواعد البيانات.',
|
|
||||||
'Database has been dropped.' => 'تم حذف قاعدة البيانات.',
|
|
||||||
'Search data in tables' => 'بحث في الجداول',
|
|
||||||
'schema' => 'المخطط',
|
|
||||||
'Schema' => 'المخطط',
|
|
||||||
'Alter schema' => 'تعديل المخطط',
|
|
||||||
'Create schema' => 'إنشاء مخطط',
|
|
||||||
'Schema has been dropped.' => 'تم حذف المخطط.',
|
|
||||||
'Schema has been created.' => 'تم إنشاء المخطط.',
|
|
||||||
'Schema has been altered.' => 'تم تعديل المخطط.',
|
|
||||||
'Sequences' => 'السلاسل',
|
|
||||||
'Create sequence' => 'إنشاء سلسلة',
|
|
||||||
'Alter sequence' => 'تعديل سلسلة',
|
|
||||||
'Sequence has been dropped.' => 'تم حذف السلسلة.',
|
|
||||||
'Sequence has been created.' => 'تم إنشاء السلسلة.',
|
|
||||||
'Sequence has been altered.' => 'تم تعديل السلسلة.',
|
|
||||||
'User types' => 'نوع المستخدم',
|
|
||||||
'Create type' => 'إنشاء نوع',
|
|
||||||
'Alter type' => 'تعديل نوع',
|
|
||||||
'Type has been dropped.' => 'تم حذف النوع.',
|
|
||||||
'Type has been created.' => 'تم إنشاء النوع.',
|
|
||||||
'Use edit link to modify this value.' => 'إستعمل الرابط "تعديل" لتعديل هذه القيمة.',
|
|
||||||
'last' => 'الأخيرة',
|
|
||||||
'From server' => 'من الخادم',
|
|
||||||
'System' => 'النظام',
|
|
||||||
'Select data' => 'عرض البيانات',
|
|
||||||
'Show structure' => 'عرض التركيبة',
|
|
||||||
'empty' => 'فارغ',
|
|
||||||
'Network' => 'شبكة',
|
|
||||||
'Geometry' => 'هندسة',
|
|
||||||
'File exists.' => 'الملف موجود.',
|
|
||||||
'Attachments' => 'ملفات مرفقة.',
|
|
||||||
'Item%s has been inserted.' => 'تم إدراج العنصر.',
|
|
||||||
'now' => 'الآن',
|
|
||||||
'%d query(s) executed OK.' => array('تم تنفيذ الإستعلام %d بنجاح.', 'تم تنفيذ الإستعلامات %d بنجاح.'),
|
|
||||||
'Show only errors' => 'إعرض الأخطاء فقط',
|
|
||||||
'Refresh' => 'تحديث',
|
|
||||||
'Invalid schema.' => 'مخطط خاطئ.',
|
|
||||||
'Please use one of the extensions %s.' => 'من فضلك إستعمل إحدى الإمتدادات: %s.',
|
|
||||||
'ltr' => 'rtl',
|
|
||||||
'Tables have been copied.' => 'تم نسخ الجداول.',
|
|
||||||
'Copy' => 'نسخ',
|
|
||||||
'Permanent link' => 'وصلة دائمة',
|
|
||||||
'Edit all' => 'تعديل الكل',
|
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
|
||||||
);
|
|
||||||
@@ -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' => 'নির্বাচন',
|
|
||||||
'Create new table' => 'নতুন টেবিল তৈরী করো',
|
|
||||||
'Item has been deleted.' => 'বিষয়বস্তু মুছে ফেলা হয়েছে।',
|
|
||||||
'Item has been updated.' => 'বিষয়বস্তু আপডেট করা হয়েছে।',
|
|
||||||
'Item%s has been inserted.' => 'বিষয়বস্তুসমূহ সংযোজন করা হয়েছে।',
|
|
||||||
'Edit' => 'সম্পাদনা',
|
|
||||||
'Insert' => 'সংযোজন',
|
|
||||||
'Save and insert next' => 'সংরক্ষন ও পরবর্তী সংযোজন',
|
|
||||||
'Delete' => 'মুছে ফেলো',
|
|
||||||
'Database' => 'ডাটাবেজ',
|
|
||||||
'Routines' => 'রুটিনসমূহ',
|
|
||||||
'Indexes have been altered.' => 'সূচীসমূহ সম্পাদনা করা হয়েছে।',
|
|
||||||
'Indexes' => 'সূচীসমূহ',
|
|
||||||
'Alter indexes' => 'সূচীসমূহ সম্পাদনা',
|
|
||||||
'Add next' => 'সংযোজন',
|
|
||||||
'Language' => 'ভাষা',
|
|
||||||
'Select' => 'নির্বাচন',
|
|
||||||
'New item' => 'নতুন বিষয়বস্তু',
|
|
||||||
'Search' => 'খোঁজ',
|
|
||||||
'Sort' => 'সাজানো',
|
|
||||||
'descending' => 'ক্রমহ্রাস',
|
|
||||||
'Limit' => 'সীমা',
|
|
||||||
'No rows.' => 'কোন সারি নাই।',
|
|
||||||
'Action' => 'ক্রিয়া',
|
|
||||||
'edit' => 'সম্পাদনা',
|
|
||||||
'Page' => 'পৃষ্ঠা',
|
|
||||||
'Query executed OK, %d row(s) affected.' => array('কোয়্যারী সম্পাদন হয়েছে, %d সারি প্রভাবিত হয়েছে।', 'কোয়্যারী সম্পাদন হয়েছে, %d সারি প্রভাবিত হয়েছে।'),
|
|
||||||
'Error in query' => 'কোয়্যারীতে ভুল আছে।',
|
|
||||||
'Execute' => 'সম্পাদন করো',
|
|
||||||
'Table' => 'টেবিল',
|
|
||||||
'Foreign keys' => 'ফরেন কী',
|
|
||||||
'Triggers' => 'ট্রিগার',
|
|
||||||
'View' => 'ভিউ',
|
|
||||||
'Unable to select the table' => 'টেবিল নির্বাচন করতে অক্ষম',
|
|
||||||
'Invalid CSRF token. Send the form again.' => 'অবৈধ CSRF টোকেন। ফর্ম আবার পাঠাও।',
|
|
||||||
'Comment' => 'মন্তব্য',
|
|
||||||
'Default values' => 'ডিফল্ট মান',
|
|
||||||
'%d byte(s)' => array('%d বাইট', '%d বাইটসমূহ'),
|
|
||||||
'No commands to execute.' => 'সম্পাদন করার মত কোন নির্দেশ নাই।',
|
|
||||||
'Unable to upload a file.' => 'ফাইল আপলোড করা সম্ভব হচ্ছে না।',
|
|
||||||
'File upload' => 'ফাইল আপলোড',
|
|
||||||
'File uploads are disabled.' => 'ফাইল আপলোড নিষ্ক্রিয় করা আছে।',
|
|
||||||
'Routine has been called, %d row(s) affected.' => array('রুটিন কল করা হয়েছে, %d টি সারি (সমূহ) প্রভাবিত হয়েছে।', 'রুটিন কল করা হয়েছে, %d টি সারি (সমূহ) প্রভাবিত হয়েছে।'),
|
|
||||||
'Call' => 'কল',
|
|
||||||
'No extension' => 'কোন এক্সটেনশান নাই',
|
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'কোন PHP সমর্থিত এক্সটেনশন (%s) পাওয়া যায় নাই।',
|
|
||||||
'Session support must be enabled.' => 'সেশন সমর্থন সক্রিয় করা আবশ্যক।',
|
|
||||||
'Session expired, please login again.' => 'সেশানের মেয়াদ শেষ হয়েছে, আবার লগইন করুন।',
|
|
||||||
'Text length' => 'টেক্সট দৈর্ঘ্য',
|
|
||||||
'Foreign key has been dropped.' => 'ফরেন কী মুছে ফেলা হয়েছে।',
|
|
||||||
'Foreign key has been altered.' => 'ফরেন কী সম্পাদনা করা হয়েছে।',
|
|
||||||
'Foreign key has been created.' => 'ফরেন কী তৈরী করা হয়েছে।',
|
|
||||||
'Foreign key' => 'ফরেন কী ',
|
|
||||||
'Target table' => 'টার্গেট টেবিল',
|
|
||||||
'Change' => 'পরিবর্তন',
|
|
||||||
'Source' => 'উৎস',
|
|
||||||
'Target' => 'লক্ষ্য',
|
|
||||||
'Add column' => 'কলাম সংযোজন',
|
|
||||||
'Alter' => 'সম্পাদনা',
|
|
||||||
'Add foreign key' => 'ফরেন কী সংযোজন করো',
|
|
||||||
'ON DELETE' => 'অন ডিলিট',
|
|
||||||
'ON UPDATE' => 'অন আপডেট',
|
|
||||||
'Index Type' => 'সূচী-ধরণ',
|
|
||||||
'Column (length)' => 'কলাম (দৈর্ঘ্য)',
|
|
||||||
'View has been dropped.' => 'ভিউ মুছে ফেলা হয়েছে।',
|
|
||||||
'View has been altered.' => 'ভিউ সম্পাদনা করা হয়েছে।',
|
|
||||||
'View has been created.' => 'ভিউ তৈরী করা হয়েছে।',
|
|
||||||
'Alter view' => 'ভিউ সম্পাদনা করো',
|
|
||||||
'Create view' => 'ভিউ তৈরী করো',
|
|
||||||
'Name' => 'নাম',
|
|
||||||
'Process list' => 'প্রসেস তালিকা',
|
|
||||||
'%d process(es) have been killed.' => array('%d টি প্রসেস (সমূহ) বিনষ্ট করা হয়েছে।', '%d টি প্রসেস (সমূহ) বিনষ্ট করা হয়েছে।'),
|
|
||||||
'Kill' => 'বিনষ্ট করো',
|
|
||||||
'Parameter name' => 'প্যারামিটারের নাম',
|
|
||||||
'Database schema' => 'ডাটাবেজ স্কিমা',
|
|
||||||
'Create procedure' => 'প্রসিডিওর তৈরী করো',
|
|
||||||
'Create function' => 'ফাংশন তৈরী করো',
|
|
||||||
'Routine has been dropped.' => 'রুটিন মুছে ফেলা হয়েছে।',
|
|
||||||
'Routine has been altered.' => 'রুটিন সম্পাদনা করা হয়েছে।',
|
|
||||||
'Routine has been created.' => 'রুটিন তৈরী করা হয়েছে।',
|
|
||||||
'Alter function' => 'ফাংশন সম্পাদনা করো',
|
|
||||||
'Alter procedure' => 'প্রসিডিওর সম্পাদনা করো',
|
|
||||||
'Return type' => 'রিটার্ন টাইপ',
|
|
||||||
'Add trigger' => 'ট্রিগার সংযোজন করো',
|
|
||||||
'Trigger has been dropped.' => 'ট্রিগার মুছে ফেলা হয়েছে।',
|
|
||||||
'Trigger has been altered.' => 'ট্রিগার সম্পাদনা করা হয়েছে।',
|
|
||||||
'Trigger has been created.' => 'ট্রিগার তৈরী করা হয়েছে।',
|
|
||||||
'Alter trigger' => 'ট্রিগার সম্পাদনা করো',
|
|
||||||
'Create trigger' => 'ট্রিগার তৈরী করো',
|
|
||||||
'Time' => 'সময়',
|
|
||||||
'Event' => 'ইভেন্ট',
|
|
||||||
'%s version: %s through PHP extension %s' => 'ভার্সন %s: %s, %s PHP এক্সটেনশনের মধ্য দিয়ে',
|
|
||||||
'%d row(s)' => array('%d সারি', '%d সারি সমূহ'),
|
|
||||||
'Remove' => 'অপসারণ',
|
|
||||||
'Are you sure?' => 'তুমি কি নিশ্চিত?',
|
|
||||||
'Privileges' => 'প্রিভিলেজেস',
|
|
||||||
'Create user' => 'ইউজার তৈরী করো',
|
|
||||||
'User has been dropped.' => 'ইউজার মুছে ফেলা হয়েছে।',
|
|
||||||
'User has been altered.' => 'ইউজার সম্পাদনা করা হয়েছে।',
|
|
||||||
'User has been created.' => 'ইউজার তৈরী করা হয়েছে।',
|
|
||||||
'Hashed' => 'হ্যাসড',
|
|
||||||
'Column' => 'কলাম',
|
|
||||||
'Routine' => 'রুটিন',
|
|
||||||
'Grant' => 'গ্র্যান্ট',
|
|
||||||
'Revoke' => 'রিভোক',
|
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'খুব বড় POST ডাটা। ডাটা সংক্ষিপ্ত করো অথবা %s কনফিগারেশন নির্দেশ বৃদ্ধি করো',
|
|
||||||
'Logged as: %s' => '%s হিসাবে লগড',
|
|
||||||
'Move up' => 'উপরে স্থানান্তর',
|
|
||||||
'Move down' => 'নীচে স্থানান্তর',
|
|
||||||
'Functions' => 'ফাংশন সমূহ',
|
|
||||||
'Aggregation' => 'মোট পরিমাণ',
|
|
||||||
'Export' => 'এক্সপোর্ট',
|
|
||||||
'Output' => 'আউটপুট',
|
|
||||||
'open' => 'খোলা',
|
|
||||||
'save' => 'সংরক্ষণ',
|
|
||||||
'Format' => 'বিন্যাস',
|
|
||||||
'Tables' => 'টেবিলসমূহ',
|
|
||||||
'Data' => 'ডাটা',
|
|
||||||
'Event has been dropped.' => 'ইভেন্ট মুছে ফেলা হয়েছে।',
|
|
||||||
'Event has been altered.' => 'ইভেন্ট সম্পাদনা করা হয়েছে।',
|
|
||||||
'Event has been created.' => 'ইভেন্ট তৈরী করা হয়েছে।',
|
|
||||||
'Alter event' => 'ইভেন্ট সম্পাদনা করো',
|
|
||||||
'Create event' => 'ইভেন্ট তৈরী করো',
|
|
||||||
'At given time' => 'প্রদত্ত সময়ে',
|
|
||||||
'Every' => 'প্রত্যেক',
|
|
||||||
'Events' => 'ইভেন্টসমূহ',
|
|
||||||
'Schedule' => 'সময়সূচি',
|
|
||||||
'Start' => 'শুরু',
|
|
||||||
'End' => 'সমাপ্তি',
|
|
||||||
'Status' => 'স্ট্যাটাস',
|
|
||||||
'On completion preserve' => 'সমাপ্ত হওয়ার পর সংরক্ষন করো',
|
|
||||||
'Tables and views' => 'টেবিল এবং ভিউ সমূহ',
|
|
||||||
'Data Length' => 'ডাটার দৈর্ঘ্য',
|
|
||||||
'Index Length' => 'ইনডেক্স এর দৈর্ঘ্য',
|
|
||||||
'Data Free' => 'তথ্য মুক্ত',
|
|
||||||
'Collation' => 'কলোকেশন',
|
|
||||||
'Analyze' => 'বিশ্লেষণ',
|
|
||||||
'Optimize' => 'অপটিমাইজ',
|
|
||||||
'Check' => 'পরীক্ষা',
|
|
||||||
'Repair' => 'মেরামত',
|
|
||||||
'Truncate' => 'ছাঁটাই',
|
|
||||||
'Tables have been truncated.' => 'টেবিল ছাঁটাই করা হয়েছে',
|
|
||||||
'Rows' => 'সারি',
|
|
||||||
',' => ',',
|
|
||||||
'Tables have been moved.' => 'টেবিল স্থানান্তর করা হয়েছে।',
|
|
||||||
'Move to other database' => 'অন্য ডাটাবেজে স্থানান্তর করো',
|
|
||||||
'Move' => 'স্থানান্তর করো',
|
|
||||||
'Engine' => 'ইঞ্জিন',
|
|
||||||
'Save and continue edit' => 'সংরক্ষণ করো এবং সম্পাদনা চালিয়ে যাও',
|
|
||||||
'original' => 'প্রকৃত',
|
|
||||||
'Tables have been dropped.' => 'টেবিলসমূহ মুছে ফেলা হয়েছে।',
|
|
||||||
'%d item(s) have been affected.' => '%d টি বিষয়বস্তু প্রভাবিত হয়েছে',
|
|
||||||
'whole result' => 'সম্পূর্ণ ফলাফল',
|
|
||||||
'Clone' => 'ক্লোন',
|
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'অনুমোদিত ফিল্ড এর সর্বাধিক সংখ্যা অতিক্রম করে গেছে। অনুগ্রহপূর্বক %s বৃদ্ধি করুন।',
|
|
||||||
'Partition by' => 'পার্টিশন যার মাধ্যমে',
|
|
||||||
'Partitions' => 'পার্টিশন',
|
|
||||||
'Partition name' => 'পার্টিশনের নাম',
|
|
||||||
'Values' => 'মানসমূহ',
|
|
||||||
'%d row(s) have been imported.' => array('%d টি সারি (সমূহ) ইমপোর্ট করা হয়েছে।', '%d টি সারি (সমূহ) ইমপোর্ট করা হয়েছে।'),
|
|
||||||
'anywhere' => 'যে কোন স্থানে',
|
|
||||||
'Import' => 'ইমপোর্ট',
|
|
||||||
'Stop on error' => 'ত্রুটি পেলে থেমে যাও',
|
|
||||||
'%.3f s' => '%.3f s',
|
|
||||||
'$1-$3-$5' => '$6.$4.$1',
|
|
||||||
'[yyyy]-mm-dd' => 't.m.[jjjj]',
|
|
||||||
'History' => 'ইতিহাস',
|
|
||||||
'Variables' => 'চলকসমূহ',
|
|
||||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'সোর্স এবং টার্গেট কলামে একই ডাটা টাইপ থাকতে হবে, টার্গেট কলামসমূহে একটি সূচী এবং রেফারেন্সড ডেটার উপস্থিতি থাকা আবশ্যক।',
|
|
||||||
'Relations' => 'সম্পর্ক',
|
|
||||||
'Run file' => 'ফাইল চালাও',
|
|
||||||
'Clear' => 'সাফ করো',
|
|
||||||
'Maximum allowed file size is %sB.' => 'সর্বাধিক অনুমোদিত ফাইল সাইজ %sB.',
|
|
||||||
'Numbers' => 'সংখ্যা',
|
|
||||||
'Date and time' => 'তারিখ এবং সময়',
|
|
||||||
'Strings' => 'স্ট্রিং',
|
|
||||||
'Binary' => 'বাইনারি',
|
|
||||||
'Lists' => 'তালিকা',
|
|
||||||
'Editor' => 'সম্পাদক',
|
|
||||||
'E-mail' => 'ই-মেইল',
|
|
||||||
'From' => 'থেকে',
|
|
||||||
'Subject' => 'বিষয়',
|
|
||||||
'Send' => 'পাঠাও',
|
|
||||||
'%d e-mail(s) have been sent.' => array('%d ইমেইল (গুলি) পাঠানো হয়েছে।', '%d ইমেইল (গুলি) পাঠানো হয়েছে।'),
|
|
||||||
'Webserver file %s' => 'ওয়েবসার্ভার ফাইল %s',
|
|
||||||
'File does not exist.' => 'ফাইলের কোন অস্তিত্ব নেই।',
|
|
||||||
'%d in total' => 'সর্বমোটঃ %d টি',
|
|
||||||
'Permanent login' => 'স্থায়ী লগইন',
|
|
||||||
'Databases have been dropped.' => 'ডাটাবেজসমূহ মুছে ফেলা হয়েছে।',
|
|
||||||
'Search data in tables' => 'টেবিলে খোঁজ করো',
|
|
||||||
'schema' => 'স্কিমা',
|
|
||||||
'Schema' => 'স্কিমা',
|
|
||||||
'Alter schema' => 'স্কিমা পরিবর্তন করো',
|
|
||||||
'Create schema' => 'স্কিমা তৈরী করো',
|
|
||||||
'Schema has been dropped.' => 'স্কিমা মুছে ফেলা হয়েছে।',
|
|
||||||
'Schema has been created.' => 'স্কিমা তৈরি করা হয়েছে।',
|
|
||||||
'Schema has been altered.' => 'স্কিমা সম্পাদনা করা হয়েছে।',
|
|
||||||
'Sequences' => 'অনুক্রম',
|
|
||||||
'Create sequence' => 'অনুক্রম তৈরি করো',
|
|
||||||
'Alter sequence' => 'অনুক্রম সম্পাদনা করো',
|
|
||||||
'Sequence has been dropped.' => 'অনুক্রম মুছে ফেলা হয়েছে।',
|
|
||||||
'Sequence has been created.' => 'অনুক্রম তৈরি করা হয়েছে।',
|
|
||||||
'Sequence has been altered.' => 'অনুক্রম সম্পাদনা করা হয়েছে।',
|
|
||||||
'User types' => 'ইউজারের টাইপ',
|
|
||||||
'Create type' => 'টাইপ তৈরী করো',
|
|
||||||
'Alter type' => 'টাইপ পরিবর্তন করো',
|
|
||||||
'Type has been dropped.' => 'টাইপ মুছে ফেলা হয়েছে।',
|
|
||||||
'Type has been created.' => 'টাইপ তৈরি করা হয়েছে।',
|
|
||||||
'Use edit link to modify this value.' => 'এই মান পরিবর্তনের জন্য সম্পাদনা লিঙ্ক ব্যবহার করো।',
|
|
||||||
'last' => 'সর্বশেষ',
|
|
||||||
'From server' => 'সার্ভার থেকে',
|
|
||||||
'System' => 'সিস্টেম',
|
|
||||||
'Select data' => 'তথ্য নির্বাচন করো',
|
|
||||||
'Show structure' => 'গঠন দেখাও',
|
|
||||||
'empty' => 'খালি',
|
|
||||||
'Network' => 'নেটওয়ার্ক',
|
|
||||||
'Geometry' => 'জ্যামিতি',
|
|
||||||
'File exists.' => 'ফাইল রয়েছে।',
|
|
||||||
'Attachments' => 'সংযুক্তি',
|
|
||||||
'%d query(s) executed OK.' => array('SQL-কোয়্যারী সফলভাবে সম্পন্ন হয়েছে', '%d SQL-কোয়্যারীসমূহ সফলভাবে সম্পন্ন হয়েছে'),
|
|
||||||
'Show only errors' => 'শুধুমাত্র ত্রুটি দেখাও',
|
|
||||||
'Refresh' => 'রিফ্রেশ',
|
|
||||||
'Invalid schema.' => 'অবৈধ স্কিমা।',
|
|
||||||
'Please use one of the extensions %s.' => 'কোন একটা এক্সটেনশন %s ব্যবহার করো।',
|
|
||||||
'now' => 'এখন',
|
|
||||||
'ltr' => 'ltr',
|
|
||||||
'Tables have been copied.' => 'টেবিল কপি করা হয়েছে।',
|
|
||||||
'Copy' => 'কপি',
|
|
||||||
'Permanent link' => 'স্থায়ী লিংক',
|
|
||||||
'Edit all' => 'সকল সম্পাদনা করো',
|
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
|
||||||
);
|
|
||||||
@@ -1,271 +0,0 @@
|
|||||||
<?php
|
|
||||||
$translations = array(
|
|
||||||
'Login' => 'Inicia la sessió',
|
|
||||||
'Logout successful.' => 'Desconnexió correcta.',
|
|
||||||
'Invalid credentials.' => 'Credencials invàlids.',
|
|
||||||
'Server' => 'Servidor',
|
|
||||||
'Username' => 'Nom d\'usuari',
|
|
||||||
'Password' => 'Contrasenya',
|
|
||||||
'Select database' => 'Selecciona base de dades',
|
|
||||||
'Invalid database.' => 'Base de dades invàlida.',
|
|
||||||
'Create new database' => 'Crea una nova base de dades',
|
|
||||||
'Table has been dropped.' => 'S\'ha suprimit la taula.',
|
|
||||||
'Table has been altered.' => 'S\'ha modificat la taula.',
|
|
||||||
'Table has been created.' => 'S\'ha creat la taula.',
|
|
||||||
'Alter table' => 'Modifica la taula',
|
|
||||||
'Create table' => 'Crea una taula',
|
|
||||||
'Table name' => 'Nom de la taula',
|
|
||||||
'engine' => 'motor',
|
|
||||||
'collation' => 'compaginació',
|
|
||||||
'Column name' => 'Nom de la columna',
|
|
||||||
'Type' => 'Tipus',
|
|
||||||
'Length' => 'Llargada',
|
|
||||||
'Auto Increment' => 'Increment automàtic',
|
|
||||||
'Options' => 'Opcions',
|
|
||||||
'Save' => 'Desa',
|
|
||||||
'Drop' => 'Suprimeix',
|
|
||||||
'Database has been dropped.' => 'S\'ha suprimit la base de dades.',
|
|
||||||
'Database has been created.' => 'S\'ha creat la base de dades.',
|
|
||||||
'Database has been renamed.' => 'S\'ha canviat el nom de la base de dades.',
|
|
||||||
'Database has been altered.' => 'S\'ha modificat la base de dades.',
|
|
||||||
'Alter database' => 'Modifica la base de dades',
|
|
||||||
'Create database' => 'Crea una base de dades',
|
|
||||||
'SQL command' => 'Ordre SQL',
|
|
||||||
'Dump' => 'Exporta',
|
|
||||||
'Logout' => 'Desconnecta',
|
|
||||||
'database' => 'base de dades',
|
|
||||||
'Use' => 'Utilitza',
|
|
||||||
'No tables.' => 'No hi ha cap taula.',
|
|
||||||
'select' => 'registres',
|
|
||||||
'Create new table' => 'Crea una nova taula',
|
|
||||||
'Item has been deleted.' => 'S\'ha suprmit l\'element.',
|
|
||||||
'Item has been updated.' => 'S\'ha actualitzat l\'element.',
|
|
||||||
'Item%s has been inserted.' => 'S\'ha insertat l\'element%s.',
|
|
||||||
'Edit' => 'Edita',
|
|
||||||
'Insert' => 'Insereix',
|
|
||||||
'Save and insert next' => 'Desa i insereix el següent',
|
|
||||||
'Delete' => 'Suprimeix',
|
|
||||||
'Database' => 'Base de dades',
|
|
||||||
'Routines' => 'Rutines',
|
|
||||||
'Indexes have been altered.' => 'S\'han modificat els índexs.',
|
|
||||||
'Indexes' => 'Índexs',
|
|
||||||
'Alter indexes' => 'Modifica els índexs',
|
|
||||||
'Add next' => 'Afegeix el següent',
|
|
||||||
'Language' => 'Idioma',
|
|
||||||
'Select' => 'Selecciona',
|
|
||||||
'New item' => 'Nou element',
|
|
||||||
'Search' => 'Cerca',
|
|
||||||
'Sort' => 'Ordena',
|
|
||||||
'descending' => 'descendent',
|
|
||||||
'Limit' => 'Límit',
|
|
||||||
'No rows.' => 'No hi ha cap registre.',
|
|
||||||
'Action' => 'Acció',
|
|
||||||
'edit' => 'edita',
|
|
||||||
'Page' => 'Plana',
|
|
||||||
'Query executed OK, %d row(s) affected.' => array('Consulta executada correctament, %d registre modificat.', 'Consulta executada correctament, %d registres modificats.'),
|
|
||||||
'Error in query' => 'Error en la consulta',
|
|
||||||
'Execute' => 'Executa',
|
|
||||||
'Table' => 'Taula',
|
|
||||||
'Foreign keys' => 'Claus foranes',
|
|
||||||
'Triggers' => 'Activadors',
|
|
||||||
'View' => 'Vista',
|
|
||||||
'Unable to select the table' => 'Impossible seleccionar la taula',
|
|
||||||
'Invalid CSRF token. Send the form again.' => 'Token CSRF invàlid. Torna a enviar el formulari.',
|
|
||||||
'Comment' => 'Comentari',
|
|
||||||
'Default values' => 'Valors per defecte',
|
|
||||||
'%d byte(s)' => array('%d byte', '%d bytes'),
|
|
||||||
'No commands to execute.' => 'Cap comanda per executar.',
|
|
||||||
'Unable to upload a file.' => 'Impossible adjuntar el fitxer.',
|
|
||||||
'File upload' => 'Adjunta un fitxer',
|
|
||||||
'File uploads are disabled.' => 'L\'ddjunció de fitxers està desactivada.',
|
|
||||||
'Routine has been called, %d row(s) affected.' => array('S\'ha cridat la rutina, %d registre modificat.', 'S\'ha cridat la rutina, %d registres modificats.'),
|
|
||||||
'Call' => 'Crida',
|
|
||||||
'No extension' => 'Cap extensió',
|
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'No hi ha cap de les extensions PHP soporatades (%s) disponible.',
|
|
||||||
'Session support must be enabled.' => 'Cal que estigui permès l\'us de sessions.',
|
|
||||||
'Session expired, please login again.' => 'La sessió ha expirat, torna a iniciar-ne una.',
|
|
||||||
'Text length' => 'Longitud del text',
|
|
||||||
'Foreign key has been dropped.' => 'S\'ha suprimit la clau forana.',
|
|
||||||
'Foreign key has been altered.' => 'S\'ha modificat la clau forana.',
|
|
||||||
'Foreign key has been created.' => 'S\'ha creat la clau forana.',
|
|
||||||
'Foreign key' => 'Clau forana',
|
|
||||||
'Target table' => 'Taula de destí',
|
|
||||||
'Change' => 'Canvi',
|
|
||||||
'Source' => 'Font',
|
|
||||||
'Target' => 'Destí',
|
|
||||||
'Add column' => 'Afegeix una columna',
|
|
||||||
'Alter' => 'Modifica',
|
|
||||||
'Add foreign key' => 'Afegeix una clau forana',
|
|
||||||
'ON DELETE' => 'ON DELETE',
|
|
||||||
'ON UPDATE' => 'ON UPDATE',
|
|
||||||
'Index Type' => 'Tipus d\'índex',
|
|
||||||
'Column (length)' => 'Columna (longitud)',
|
|
||||||
'View has been dropped.' => 'S\'ha suprimit la vista.',
|
|
||||||
'View has been altered.' => 'S\'ha modificat la vista.',
|
|
||||||
'View has been created.' => 'S\'ha creat la vista.',
|
|
||||||
'Alter view' => 'Modifica la vista',
|
|
||||||
'Create view' => 'Crea una vista',
|
|
||||||
'Name' => 'Nom',
|
|
||||||
'Process list' => 'Llista de processos',
|
|
||||||
'%d process(es) have been killed.' => array('S\'ha aturat %d procés.', 'S\'han aturat %d processos.'),
|
|
||||||
'Kill' => 'Atura',
|
|
||||||
'Parameter name' => 'Nom del paràmetre',
|
|
||||||
'Database schema' => 'Esquema de la base de dades',
|
|
||||||
'Create procedure' => 'Crea un procediment',
|
|
||||||
'Create function' => 'Crea una funció',
|
|
||||||
'Routine has been dropped.' => 'S\'ha suprimit la rutina.',
|
|
||||||
'Routine has been altered.' => 'S\'ha modificat la rutina.',
|
|
||||||
'Routine has been created.' => 'S\'ha creat la rutina.',
|
|
||||||
'Alter function' => 'Modifica la funció',
|
|
||||||
'Alter procedure' => 'Modifica el procediment',
|
|
||||||
'Return type' => 'Tipus retornat',
|
|
||||||
'Add trigger' => 'Afegeix un activador',
|
|
||||||
'Trigger has been dropped.' => 'S\'ha suprimit l\'activador.',
|
|
||||||
'Trigger has been altered.' => 'S\'ha modificat l\'activador.',
|
|
||||||
'Trigger has been created.' => 'S\'ha creat l\'activador.',
|
|
||||||
'Alter trigger' => 'Modifica l\'activador',
|
|
||||||
'Create trigger' => 'Crea un activador',
|
|
||||||
'Time' => 'Temps',
|
|
||||||
'Event' => 'Event',
|
|
||||||
'%s version: %s through PHP extension %s' => 'Versió %s: %s amb l\'extensió de PHP %s',
|
|
||||||
'%d row(s)' => array('%d registre', '%d registres'),
|
|
||||||
'Remove' => 'Suprimeix',
|
|
||||||
'Are you sure?' => 'Estàs segur?',
|
|
||||||
'Privileges' => 'Privilegis',
|
|
||||||
'Create user' => 'Crea un usuari',
|
|
||||||
'User has been dropped.' => 'S\'ha suprimit l\'usuari.',
|
|
||||||
'User has been altered.' => 'S\'ha modificat l\'usuari.',
|
|
||||||
'User has been created.' => 'S\'ha creat l\'usuari.',
|
|
||||||
'Hashed' => 'Hashed',
|
|
||||||
'Column' => 'Columna',
|
|
||||||
'Routine' => 'Rutina',
|
|
||||||
'Grant' => 'Grant',
|
|
||||||
'Revoke' => 'Revoke',
|
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Les dades POST són massa grans. Redueix les dades o incrementa la directiva de configuració %s.',
|
|
||||||
'Logged as: %s' => 'Connectat com: %s',
|
|
||||||
'Move up' => 'Mou a dalt',
|
|
||||||
'Move down' => 'Mou a baix',
|
|
||||||
'Functions' => 'Funcions',
|
|
||||||
'Aggregation' => 'Agregació',
|
|
||||||
'Export' => 'Exporta',
|
|
||||||
'Output' => 'Sortida',
|
|
||||||
'open' => 'obre',
|
|
||||||
'save' => 'desa',
|
|
||||||
'Format' => 'Format',
|
|
||||||
'Tables' => 'Taules',
|
|
||||||
'Data' => 'Dades',
|
|
||||||
'Event has been dropped.' => 'S\'ha suprimit l\'event.',
|
|
||||||
'Event has been altered.' => 'S\'ha modificat l\'event.',
|
|
||||||
'Event has been created.' => 'S\'ha creat l\'event.',
|
|
||||||
'Alter event' => 'Modifica l\'event',
|
|
||||||
'Create event' => 'Crea un event',
|
|
||||||
'At given time' => 'A un moment donat',
|
|
||||||
'Every' => 'Cada',
|
|
||||||
'Events' => 'Events',
|
|
||||||
'Schedule' => 'Horari',
|
|
||||||
'Start' => 'Comença',
|
|
||||||
'End' => 'Acaba',
|
|
||||||
'Status' => 'Estat',
|
|
||||||
'On completion preserve' => 'Conservar en completar',
|
|
||||||
'Tables and views' => 'Taules i vistes',
|
|
||||||
'Data Length' => 'Longitud de les dades',
|
|
||||||
'Index Length' => 'Longitud de l\'índex',
|
|
||||||
'Data Free' => 'Espai lliure',
|
|
||||||
'Collation' => 'Compaginació',
|
|
||||||
'Analyze' => 'Analitza',
|
|
||||||
'Optimize' => 'Optimitza',
|
|
||||||
'Check' => 'Verifica',
|
|
||||||
'Repair' => 'Repara',
|
|
||||||
'Truncate' => 'Escapça',
|
|
||||||
'Tables have been truncated.' => 'S\'han escapçat les taules.',
|
|
||||||
'Rows' => 'Files',
|
|
||||||
',' => ',',
|
|
||||||
'Tables have been moved.' => 'S\'han desplaçat les taules.',
|
|
||||||
'Move to other database' => 'Desplaça a una altra base de dades',
|
|
||||||
'Move' => 'Desplaça',
|
|
||||||
'Engine' => 'Motor',
|
|
||||||
'Save and continue edit' => 'Desa i segueix editant',
|
|
||||||
'original' => 'original',
|
|
||||||
'%d item(s) have been affected.' => array('S\'ha modificat %d element.', 'S\'han modificat %d elements.'),
|
|
||||||
'whole result' => 'tots els resultats',
|
|
||||||
'Tables have been dropped.' => 'S\'han suprimit les taules.',
|
|
||||||
'Clone' => 'Clona',
|
|
||||||
'Partition by' => 'Fes particions segons',
|
|
||||||
'Partitions' => 'Particions',
|
|
||||||
'Partition name' => 'Nom de la partició',
|
|
||||||
'Values' => 'Valors',
|
|
||||||
'%d row(s) have been imported.' => array('S\'ha importat %d registre.', 'S\'han importat %d registres.'),
|
|
||||||
'Import' => 'Importa',
|
|
||||||
'Show structure' => 'Mostra l\'estructura',
|
|
||||||
'Select data' => 'Selecciona dades',
|
|
||||||
'Stop on error' => 'Atura en trobar un error',
|
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'S\'ha assolit el nombre màxim de camps. Incrementa %s.',
|
|
||||||
'anywhere' => 'a qualsevol lloc',
|
|
||||||
'%.3f s' => '%.3f s',
|
|
||||||
'$1-$3-$5' => '$5/$3/$1',
|
|
||||||
'[yyyy]-mm-dd' => 'dd/mm/[aaaa]',
|
|
||||||
'History' => 'Història',
|
|
||||||
'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.' => 'Les columnes origen i destí han de ser del mateix tipus, la columna destí ha d\'estar indexada i les dades referenciades han d\'existir.',
|
|
||||||
'E-mail' => 'Correu electrònic',
|
|
||||||
'From' => 'De',
|
|
||||||
'Subject' => 'Assumpte',
|
|
||||||
'Send' => 'Envia',
|
|
||||||
'%d e-mail(s) have been sent.' => array('S\'ha enviat %d correu electrònic.', 'S\'han enviat %d correus electrònics.'),
|
|
||||||
'Run file' => 'Executa el fitxer',
|
|
||||||
'Numbers' => 'Nombres',
|
|
||||||
'Date and time' => 'Data i hora',
|
|
||||||
'Strings' => 'Cadenes',
|
|
||||||
'Binary' => 'Binari',
|
|
||||||
'Lists' => 'Llistes',
|
|
||||||
'Relations' => 'Relacions',
|
|
||||||
'Maximum allowed file size is %sB.' => 'La mida màxima permesa del fitxer és de %sB.',
|
|
||||||
'Clear' => 'Suprimeix',
|
|
||||||
'Editor' => 'Editor',
|
|
||||||
'Webserver file %s' => 'Fitxer %s del servidor web',
|
|
||||||
'File does not exist.' => 'El fitxer no existeix.',
|
|
||||||
'Permanent login' => 'Sessió permanent',
|
|
||||||
'%d in total' => '%d en total',
|
|
||||||
'Attachments' => 'Adjuncions',
|
|
||||||
'System' => 'Sistema',
|
|
||||||
'last' => 'darrera',
|
|
||||||
'Network' => 'Xarxa',
|
|
||||||
'Geometry' => 'Geometria',
|
|
||||||
'Databases have been dropped.' => 'S\'han suprimit les bases de dades.',
|
|
||||||
'File exists.' => 'El fitxer ja existeix.',
|
|
||||||
'Ctrl+click on a value to modify it.' => 'Fes un Ctrl+clic a un valor per modificar-lo.',
|
|
||||||
'Use edit link to modify this value.' => 'Utilitza l\'enllaç d\'edició per modificar aquest valor.',
|
|
||||||
'Alter schema' => 'Modifica l\'esquema',
|
|
||||||
'Create schema' => 'Crea un esquema',
|
|
||||||
'Schema has been dropped.' => 'S\'ha suprimit l\'esquema.',
|
|
||||||
'Schema has been created.' => 'S\'ha creat l\'esquema.',
|
|
||||||
'Schema has been altered.' => 'S\'ha modificat l\'esquema.',
|
|
||||||
'schema' => 'esquema',
|
|
||||||
'Schema' => 'Esquema',
|
|
||||||
'Sequences' => 'Seqüències',
|
|
||||||
'Create sequence' => 'Crea una seqüència',
|
|
||||||
'Sequence has been dropped.' => 'S\'ha suprimit la seqüència.',
|
|
||||||
'Sequence has been created.' => 'S\'ha creat la seqüència.',
|
|
||||||
'Sequence has been altered.' => 'S\'ha modificat la seqüència.',
|
|
||||||
'Alter sequence' => 'Modifica la seqüència',
|
|
||||||
'User types' => 'Tipus de l\'usuari',
|
|
||||||
'Create type' => 'Crea un tipus',
|
|
||||||
'Type has been dropped.' => 'S\'ha suprimit el tipus.',
|
|
||||||
'Type has been created.' => 'S\'ha creat el tipus.',
|
|
||||||
'Alter type' => 'Modifica el tipus',
|
|
||||||
'Search data in tables' => 'Cerca dades en les taules',
|
|
||||||
'From server' => 'En el servidor',
|
|
||||||
'empty' => 'buit',
|
|
||||||
'now' => 'ara',
|
|
||||||
'%d query(s) executed OK.' => array('%d consulta executada correctament.', '%d consultes executades correctament.'),
|
|
||||||
'Show only errors' => 'Mostra només els errors',
|
|
||||||
'Refresh' => 'Refresca',
|
|
||||||
'Invalid schema.' => 'Esquema invàlid.',
|
|
||||||
'Please use one of the extensions %s.' => 'Si us plau, utilitza una de les extensions %s.',
|
|
||||||
'ltr' => 'ltr',
|
|
||||||
'Tables have been copied.' => 'S\'han copiat les taules.',
|
|
||||||
'Copy' => 'Còpia',
|
|
||||||
'Permanent link' => 'Enllaç permanent',
|
|
||||||
'Edit all' => 'Edita-ho tot',
|
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
|
||||||
);
|
|
||||||
@@ -1,28 +1,136 @@
|
|||||||
<?php
|
<?php
|
||||||
$translations = array(
|
$translations = array(
|
||||||
// label for database system selection (MySQL, SQLite, ...)
|
'Login' => 'Přihlásit se',
|
||||||
'System' => 'Systém',
|
'Logout successful.' => 'Odhlášení proběhlo v pořádku.',
|
||||||
|
'Invalid credentials.' => 'Neplatné přihlašovací údaje.',
|
||||||
'Server' => 'Server',
|
'Server' => 'Server',
|
||||||
'Username' => 'Uživatel',
|
'Username' => 'Uživatel',
|
||||||
'Password' => 'Heslo',
|
'Password' => 'Heslo',
|
||||||
'Permanent login' => 'Trvalé přihlášení',
|
'Select database' => 'Vybrat databázi',
|
||||||
'Login' => 'Přihlásit se',
|
'Invalid database.' => 'Nesprávná databáze.',
|
||||||
|
'Create new database' => 'Vytvořit novou databázi',
|
||||||
|
'Table has been dropped.' => 'Tabulka byla odstraněna.',
|
||||||
|
'Table has been altered.' => 'Tabulka byla změněna.',
|
||||||
|
'Table has been created.' => 'Tabulka byla vytvořena.',
|
||||||
|
'Alter table' => 'Pozměnit tabulku',
|
||||||
|
'Create table' => 'Vytvořit tabulku',
|
||||||
|
'Table name' => 'Název tabulky',
|
||||||
|
'engine' => 'úložiště',
|
||||||
|
'collation' => 'porovnávání',
|
||||||
|
'Column name' => 'Název sloupce',
|
||||||
|
'Type' => 'Typ',
|
||||||
|
'Length' => 'Délka',
|
||||||
|
'Auto Increment' => 'Auto Increment',
|
||||||
|
'Options' => 'Volby',
|
||||||
|
'Save' => 'Uložit',
|
||||||
|
'Drop' => 'Odstranit',
|
||||||
|
'Database has been dropped.' => 'Databáze byla odstraněna.',
|
||||||
|
'Database has been created.' => 'Databáze byla vytvořena.',
|
||||||
|
'Database has been renamed.' => 'Databáze byla přejmenována.',
|
||||||
|
'Database has been altered.' => 'Databáze byla změněna.',
|
||||||
|
'Alter database' => 'Pozměnit databázi',
|
||||||
|
'Create database' => 'Vytvořit databázi',
|
||||||
|
'SQL command' => 'SQL příkaz',
|
||||||
|
'Dump' => 'Export',
|
||||||
'Logout' => 'Odhlásit',
|
'Logout' => 'Odhlásit',
|
||||||
'Logged as: %s' => 'Přihlášen jako: %s',
|
'database' => 'databáze',
|
||||||
'Logout successful.' => 'Odhlášení proběhlo v pořádku.',
|
'Use' => 'Vybrat',
|
||||||
'Invalid credentials.' => 'Neplatné přihlašovací údaje.',
|
'No tables.' => 'Žádné tabulky.',
|
||||||
|
'select' => 'vypsat',
|
||||||
|
'Create new table' => 'Vytvořit novou tabulku',
|
||||||
|
'Item has been deleted.' => 'Položka byla smazána.',
|
||||||
|
'Item has been updated.' => 'Položka byla aktualizována.',
|
||||||
|
'Item%s has been inserted.' => 'Položka%s byla vložena.',
|
||||||
|
'Edit' => 'Upravit',
|
||||||
|
'Insert' => 'Vložit',
|
||||||
|
'Save and insert next' => 'Uložit a vložit další',
|
||||||
|
'Delete' => 'Smazat',
|
||||||
|
'Database' => 'Databáze',
|
||||||
|
'Routines' => 'Procedury a funkce',
|
||||||
|
'Indexes have been altered.' => 'Indexy byly změněny.',
|
||||||
|
'Indexes' => 'Indexy',
|
||||||
|
'Alter indexes' => 'Pozměnit indexy',
|
||||||
|
'Add next' => 'Přidat další',
|
||||||
'Language' => 'Jazyk',
|
'Language' => 'Jazyk',
|
||||||
|
'Select' => 'Vypsat',
|
||||||
|
'New item' => 'Nová položka',
|
||||||
|
'Search' => 'Vyhledat',
|
||||||
|
'Sort' => 'Seřadit',
|
||||||
|
'descending' => 'sestupně',
|
||||||
|
'Limit' => 'Limit',
|
||||||
|
'No rows.' => 'Žádné řádky.',
|
||||||
|
'Action' => 'Akce',
|
||||||
|
'edit' => 'upravit',
|
||||||
|
'Page' => 'Stránka',
|
||||||
|
'Query executed OK, %d row(s) affected.' => array('Příkaz proběhl v pořádku, byl změněn %d záznam.', 'Příkaz proběhl v pořádku, byly změněny %d záznamy.', 'Příkaz proběhl v pořádku, bylo změněno %d záznamů.'),
|
||||||
|
'Error in query' => 'Chyba v dotazu',
|
||||||
|
'Execute' => 'Provést',
|
||||||
|
'Table' => 'Tabulka',
|
||||||
|
'Foreign keys' => 'Cizí klíče',
|
||||||
|
'Triggers' => 'Triggery',
|
||||||
|
'View' => 'Pohled',
|
||||||
|
'Unable to select the table' => 'Nepodařilo se vypsat tabulku',
|
||||||
'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í',
|
'Comment' => 'Komentář',
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'Není dostupné žádné z podporovaných PHP rozšíření (%s).',
|
'Default values' => 'Výchozí hodnoty',
|
||||||
|
'%d byte(s)' => array('%d bajt', '%d bajty', '%d bajtů'),
|
||||||
|
'No commands to execute.' => 'Žádné příkazy k vykonání.',
|
||||||
|
'Unable to upload a file.' => 'Nepodařilo se nahrát soubor.',
|
||||||
|
'File upload' => 'Nahrání souboru',
|
||||||
|
'File uploads are disabled.' => 'Nahrávání souborů není povoleno.',
|
||||||
|
'Routine has been called, %d row(s) affected.' => array('Procedura byla zavolána, byl změněn %d záznam.', 'Procedura byla zavolána, byly změněny %d záznamy.', 'Procedura byla zavolána, bylo změněno %d záznamů.'),
|
||||||
|
'Call' => 'Zavolat',
|
||||||
|
'No extension' => 'Žádná extenze',
|
||||||
|
'None of the supported PHP extensions (%s) are available.' => 'Není dostupná žádná z podporovaných PHP extenzí (%s).',
|
||||||
'Session support must be enabled.' => 'Session proměnné musí být povolené.',
|
'Session support must be enabled.' => 'Session proměnné musí být povolené.',
|
||||||
'Session expired, please login again.' => 'Session vypršela, přihlašte se prosím znovu.',
|
'Session expired, please login again.' => 'Session vypršela, přihlašte se prosím znovu.',
|
||||||
'%s version: %s through PHP extension %s' => 'Verze %s: %s přes PHP rozšíření %s',
|
'Text length' => 'Délka textů',
|
||||||
'Refresh' => 'Obnovit',
|
'Foreign key has been dropped.' => 'Cizí klíč byl odstraněn.',
|
||||||
|
'Foreign key has been altered.' => 'Cizí klíč byl změněn.',
|
||||||
// text direction - 'ltr' or 'rtl'
|
'Foreign key has been created.' => 'Cizí klíč byl vytvořen.',
|
||||||
'ltr' => 'ltr',
|
'Foreign key' => 'Cizí klíč',
|
||||||
|
'Target table' => 'Cílová tabulka',
|
||||||
|
'Change' => 'Změnit',
|
||||||
|
'Source' => 'Zdroj',
|
||||||
|
'Target' => 'Cíl',
|
||||||
|
'Add column' => 'Přidat sloupec',
|
||||||
|
'Alter' => 'Změnit',
|
||||||
|
'Add foreign key' => 'Přidat cizí klíč',
|
||||||
|
'ON DELETE' => 'Při smazání',
|
||||||
|
'ON UPDATE' => 'Při změně',
|
||||||
|
'Index Type' => 'Typ indexu',
|
||||||
|
'Column (length)' => 'Sloupec (délka)',
|
||||||
|
'View has been dropped.' => 'Pohled byl odstraněn.',
|
||||||
|
'View has been altered.' => 'Pohled byl změněn.',
|
||||||
|
'View has been created.' => 'Pohled byl vytvořen.',
|
||||||
|
'Alter view' => 'Pozměnit pohled',
|
||||||
|
'Create view' => 'Vytvořit pohled',
|
||||||
|
'Name' => 'Název',
|
||||||
|
'Process list' => 'Seznam procesů',
|
||||||
|
'%d process(es) have been killed.' => array('Byl ukončen %d proces.', 'Byly ukončeny %d procesy.', 'Bylo ukončeno %d procesů.'),
|
||||||
|
'Kill' => 'Ukončit',
|
||||||
|
'Parameter name' => 'Název parametru',
|
||||||
|
'Database schema' => 'Schéma databáze',
|
||||||
|
'Create procedure' => 'Vytvořit proceduru',
|
||||||
|
'Create function' => 'Vytvořit funkci',
|
||||||
|
'Routine has been dropped.' => 'Procedura byla odstraněna.',
|
||||||
|
'Routine has been altered.' => 'Procedura byla změněna.',
|
||||||
|
'Routine has been created.' => 'Procedura byla vytvořena.',
|
||||||
|
'Alter function' => 'Změnit funkci',
|
||||||
|
'Alter procedure' => 'Změnit proceduru',
|
||||||
|
'Return type' => 'Návratový typ',
|
||||||
|
'Add trigger' => 'Přidat trigger',
|
||||||
|
'Trigger has been dropped.' => 'Trigger byl odstraněn.',
|
||||||
|
'Trigger has been altered.' => 'Trigger byl změněn.',
|
||||||
|
'Trigger has been created.' => 'Trigger byl vytvořen.',
|
||||||
|
'Alter trigger' => 'Změnit trigger',
|
||||||
|
'Create trigger' => 'Vytvořit trigger',
|
||||||
|
'Time' => 'Čas',
|
||||||
|
'Event' => 'Událost',
|
||||||
|
'%s version: %s through PHP extension %s' => 'Verze %s: %s přes PHP extenzi %s',
|
||||||
|
'%d row(s)' => array('%d řádek', '%d řádky', '%d řádků'),
|
||||||
|
'Remove' => 'Odebrat',
|
||||||
|
'Are you sure?' => 'Opravdu?',
|
||||||
'Privileges' => 'Oprávnění',
|
'Privileges' => 'Oprávnění',
|
||||||
'Create user' => 'Vytvořit uživatele',
|
'Create user' => 'Vytvořit uživatele',
|
||||||
'User has been dropped.' => 'Uživatel byl odstraněn.',
|
'User has been dropped.' => 'Uživatel byl odstraněn.',
|
||||||
@@ -33,99 +141,19 @@ $translations = array(
|
|||||||
'Routine' => 'Procedura',
|
'Routine' => 'Procedura',
|
||||||
'Grant' => 'Povolit',
|
'Grant' => 'Povolit',
|
||||||
'Revoke' => 'Zakázat',
|
'Revoke' => 'Zakázat',
|
||||||
|
|
||||||
'Process list' => 'Seznam procesů',
|
|
||||||
'%d process(es) have been killed.' => array('Byl ukončen %d proces.', 'Byly ukončeny %d procesy.', 'Bylo ukončeno %d procesů.'),
|
|
||||||
'Kill' => 'Ukončit',
|
|
||||||
|
|
||||||
'Variables' => 'Proměnné',
|
|
||||||
'Status' => 'Stav',
|
|
||||||
|
|
||||||
'SQL command' => 'SQL příkaz',
|
|
||||||
'%d query(s) executed OK.' => array('%d příkaz proběhl v pořádku.', '%d příkazy proběhly v pořádku.', '%d příkazů proběhlo v pořádku.'),
|
|
||||||
'Query executed OK, %d row(s) affected.' => array('Příkaz proběhl v pořádku, byl změněn %d záznam.', 'Příkaz proběhl v pořádku, byly změněny %d záznamy.', 'Příkaz proběhl v pořádku, bylo změněno %d záznamů.'),
|
|
||||||
'No commands to execute.' => 'Žádné příkazy k vykonání.',
|
|
||||||
'Error in query' => 'Chyba v dotazu',
|
|
||||||
'Execute' => 'Provést',
|
|
||||||
'Stop on error' => 'Zastavit při chybě',
|
|
||||||
'Show only errors' => 'Zobrazit pouze chyby',
|
|
||||||
// sprintf() format for time of the command
|
|
||||||
'%.3f s' => '%.3f s',
|
|
||||||
'History' => 'Historie',
|
|
||||||
'Clear' => 'Vyčistit',
|
|
||||||
'Edit all' => 'Upravit vše',
|
|
||||||
|
|
||||||
'File upload' => 'Nahrání souboru',
|
|
||||||
'From server' => 'Ze serveru',
|
|
||||||
'Webserver file %s' => 'Soubor %s na webovém serveru',
|
|
||||||
'Run file' => 'Spustit soubor',
|
|
||||||
'File does not exist.' => 'Soubor neexistuje.',
|
|
||||||
'File uploads are disabled.' => 'Nahrávání souborů není povoleno.',
|
|
||||||
'Unable to upload a file.' => 'Nepodařilo se nahrát soubor.',
|
|
||||||
'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.',
|
||||||
|
'Logged as: %s' => 'Přihlášen jako: %s',
|
||||||
|
'Move up' => 'Přesunout nahoru',
|
||||||
|
'Move down' => 'Přesunout dolů',
|
||||||
|
'Functions' => 'Funkce',
|
||||||
|
'Aggregation' => 'Agregace',
|
||||||
'Export' => 'Export',
|
'Export' => 'Export',
|
||||||
'Dump' => 'Export',
|
|
||||||
'Output' => 'Výstup',
|
'Output' => 'Výstup',
|
||||||
'open' => 'otevřít',
|
'open' => 'otevřít',
|
||||||
'save' => 'uložit',
|
'save' => 'uložit',
|
||||||
'Format' => 'Formát',
|
'Format' => 'Formát',
|
||||||
|
'Tables' => 'Tabulky',
|
||||||
'Data' => 'Data',
|
'Data' => 'Data',
|
||||||
|
|
||||||
'Database' => 'Databáze',
|
|
||||||
'database' => 'databáze',
|
|
||||||
'Use' => 'Vybrat',
|
|
||||||
'Select database' => 'Vybrat databázi',
|
|
||||||
'Invalid database.' => 'Nesprávná databáze.',
|
|
||||||
'Create new database' => 'Vytvořit novou databázi',
|
|
||||||
'Database has been dropped.' => 'Databáze byla odstraněna.',
|
|
||||||
'Databases have been dropped.' => 'Databáze byly odstraněny.',
|
|
||||||
'Database has been created.' => 'Databáze byla vytvořena.',
|
|
||||||
'Database has been renamed.' => 'Databáze byla přejmenována.',
|
|
||||||
'Database has been altered.' => 'Databáze byla změněna.',
|
|
||||||
'Alter database' => 'Pozměnit databázi',
|
|
||||||
'Create database' => 'Vytvořit databázi',
|
|
||||||
'Database schema' => 'Schéma databáze',
|
|
||||||
|
|
||||||
// link to current database schema layout
|
|
||||||
'Permanent link' => 'Trvalý odkaz',
|
|
||||||
|
|
||||||
// thousands separator - must contain single byte
|
|
||||||
',' => ' ',
|
|
||||||
'Engine' => 'Úložiště',
|
|
||||||
'Collation' => 'Porovnávání',
|
|
||||||
'Data Length' => 'Velikost dat',
|
|
||||||
'Index Length' => 'Velikost indexů',
|
|
||||||
'Data Free' => 'Volné místo',
|
|
||||||
'Rows' => 'Řádků',
|
|
||||||
'%d in total' => '%d celkem',
|
|
||||||
'Analyze' => 'Analyzovat',
|
|
||||||
'Optimize' => 'Optimalizovat',
|
|
||||||
'Check' => 'Zkontrolovat',
|
|
||||||
'Repair' => 'Opravit',
|
|
||||||
'Truncate' => 'Vyprázdnit',
|
|
||||||
'Tables have been truncated.' => 'Tabulky byly vyprázdněny.',
|
|
||||||
'Move to other database' => 'Přesunout do jiné databáze',
|
|
||||||
'Move' => 'Přesunout',
|
|
||||||
'Tables have been moved.' => 'Tabulky byly přesunuty.',
|
|
||||||
'Copy' => 'Zkopírovat',
|
|
||||||
'Tables have been copied.' => 'Tabulky byly zkopírovány.',
|
|
||||||
|
|
||||||
'Routines' => 'Procedury a funkce',
|
|
||||||
'Routine has been called, %d row(s) affected.' => array('Procedura byla zavolána, byl změněn %d záznam.', 'Procedura byla zavolána, byly změněny %d záznamy.', 'Procedura byla zavolána, bylo změněno %d záznamů.'),
|
|
||||||
'Call' => 'Zavolat',
|
|
||||||
'Parameter name' => 'Název parametru',
|
|
||||||
'Create procedure' => 'Vytvořit proceduru',
|
|
||||||
'Create function' => 'Vytvořit funkci',
|
|
||||||
'Routine has been dropped.' => 'Procedura byla odstraněna.',
|
|
||||||
'Routine has been altered.' => 'Procedura byla změněna.',
|
|
||||||
'Routine has been created.' => 'Procedura byla vytvořena.',
|
|
||||||
'Alter function' => 'Změnit funkci',
|
|
||||||
'Alter procedure' => 'Změnit proceduru',
|
|
||||||
'Return type' => 'Návratový typ',
|
|
||||||
|
|
||||||
'Events' => 'Události',
|
|
||||||
'Event has been dropped.' => 'Událost byla odstraněna.',
|
'Event has been dropped.' => 'Událost byla odstraněna.',
|
||||||
'Event has been altered.' => 'Událost byla změněna.',
|
'Event has been altered.' => 'Událost byla změněna.',
|
||||||
'Event has been created.' => 'Událost byla vytvořena.',
|
'Event has been created.' => 'Událost byla vytvořena.',
|
||||||
@@ -133,170 +161,82 @@ $translations = array(
|
|||||||
'Create event' => 'Vytvořit událost',
|
'Create event' => 'Vytvořit událost',
|
||||||
'At given time' => 'V daný čas',
|
'At given time' => 'V daný čas',
|
||||||
'Every' => 'Každých',
|
'Every' => 'Každých',
|
||||||
|
'Events' => 'Události',
|
||||||
'Schedule' => 'Plán',
|
'Schedule' => 'Plán',
|
||||||
'Start' => 'Začátek',
|
'Start' => 'Začátek',
|
||||||
'End' => 'Konec',
|
'End' => 'Konec',
|
||||||
|
'Status' => 'Stav',
|
||||||
'On completion preserve' => 'Po dokončení zachovat',
|
'On completion preserve' => 'Po dokončení zachovat',
|
||||||
|
|
||||||
'Tables' => 'Tabulky',
|
|
||||||
'Tables and views' => 'Tabulky a pohledy',
|
'Tables and views' => 'Tabulky a pohledy',
|
||||||
'Table' => 'Tabulka',
|
'Data Length' => 'Velikost dat',
|
||||||
'No tables.' => 'Žádné tabulky.',
|
'Index Length' => 'Velikost indexů',
|
||||||
'Alter table' => 'Pozměnit tabulku',
|
'Data Free' => 'Volné místo',
|
||||||
'Create table' => 'Vytvořit tabulku',
|
'Collation' => 'Porovnávání',
|
||||||
'Create new table' => 'Vytvořit novou tabulku',
|
'Analyze' => 'Analyzovat',
|
||||||
'Table has been dropped.' => 'Tabulka byla odstraněna.',
|
'Optimize' => 'Optimalizovat',
|
||||||
|
'Check' => 'Zkontrolovat',
|
||||||
|
'Repair' => 'Opravit',
|
||||||
|
'Truncate' => 'Vyprázdnit',
|
||||||
|
'Tables have been truncated.' => 'Tabulky byly vyprázdněny.',
|
||||||
|
'Rows' => 'Řádků',
|
||||||
|
',' => ' ',
|
||||||
|
'Tables have been moved.' => 'Tabulky byly přesunuty',
|
||||||
|
'Move to other database' => 'Přesunout do jiné databáze',
|
||||||
|
'Move' => 'Přesunout',
|
||||||
|
'Engine' => 'Úložiště',
|
||||||
|
'Save and continue edit' => 'Uložit a pokračovat v editaci',
|
||||||
|
'original' => 'původní',
|
||||||
|
'%d item(s) have been affected.' => array('Byl ovlivněn %d záznam.', 'Byly ovlivněny %d záznamy.', 'Bylo ovlivněno %d záznamů.'),
|
||||||
|
'whole result' => 'celý výsledek',
|
||||||
'Tables have been dropped.' => 'Tabulky byly odstraněny.',
|
'Tables have been dropped.' => 'Tabulky byly odstraněny.',
|
||||||
'Tables have been optimized.' => 'Tabulky byly optimalizovány.',
|
'Clone' => 'Klonovat',
|
||||||
'Table has been altered.' => 'Tabulka byla změněna.',
|
|
||||||
'Table has been created.' => 'Tabulka byla vytvořena.',
|
|
||||||
'Table name' => 'Název tabulky',
|
|
||||||
'Show structure' => 'Zobrazit strukturu',
|
|
||||||
'engine' => 'úložiště',
|
|
||||||
'collation' => 'porovnávání',
|
|
||||||
'Column name' => 'Název sloupce',
|
|
||||||
'Type' => 'Typ',
|
|
||||||
'Length' => 'Délka',
|
|
||||||
'Auto Increment' => 'Auto Increment',
|
|
||||||
'Options' => 'Volby',
|
|
||||||
'Comment' => 'Komentář',
|
|
||||||
'Default values' => 'Výchozí hodnoty',
|
|
||||||
'Drop' => 'Odstranit',
|
|
||||||
'Are you sure?' => 'Opravdu?',
|
|
||||||
'Move up' => 'Přesunout nahoru',
|
|
||||||
'Move down' => 'Přesunout dolů',
|
|
||||||
'Remove' => 'Odebrat',
|
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Byl překročen maximální povolený počet polí. Zvyšte prosím %s.',
|
|
||||||
|
|
||||||
'Partition by' => 'Rozdělit podle',
|
'Partition by' => 'Rozdělit podle',
|
||||||
'Partitions' => 'Oddíly',
|
'Partitions' => 'Oddíly',
|
||||||
'Partition name' => 'Název oddílu',
|
'Partition name' => 'Název oddílu',
|
||||||
'Values' => 'Hodnoty',
|
'Values' => 'Hodnoty',
|
||||||
|
|
||||||
'View' => 'Pohled',
|
|
||||||
'View has been dropped.' => 'Pohled byl odstraněn.',
|
|
||||||
'View has been altered.' => 'Pohled byl změněn.',
|
|
||||||
'View has been created.' => 'Pohled byl vytvořen.',
|
|
||||||
'Alter view' => 'Pozměnit pohled',
|
|
||||||
'Create view' => 'Vytvořit pohled',
|
|
||||||
|
|
||||||
'Indexes' => 'Indexy',
|
|
||||||
'Indexes have been altered.' => 'Indexy byly změněny.',
|
|
||||||
'Alter indexes' => 'Pozměnit indexy',
|
|
||||||
'Add next' => 'Přidat další',
|
|
||||||
'Index Type' => 'Typ indexu',
|
|
||||||
'Column (length)' => 'Sloupec (délka)',
|
|
||||||
|
|
||||||
'Foreign keys' => 'Cizí klíče',
|
|
||||||
'Foreign key' => 'Cizí klíč',
|
|
||||||
'Foreign key has been dropped.' => 'Cizí klíč byl odstraněn.',
|
|
||||||
'Foreign key has been altered.' => 'Cizí klíč byl změněn.',
|
|
||||||
'Foreign key has been created.' => 'Cizí klíč byl vytvořen.',
|
|
||||||
'Target table' => 'Cílová tabulka',
|
|
||||||
'Change' => 'Změnit',
|
|
||||||
'Source' => 'Zdroj',
|
|
||||||
'Target' => 'Cíl',
|
|
||||||
'Add column' => 'Přidat sloupec',
|
|
||||||
'Alter' => 'Změnit',
|
|
||||||
'Add foreign key' => 'Přidat cizí klíč',
|
|
||||||
'ON DELETE' => 'Při smazání',
|
|
||||||
'ON UPDATE' => 'Při změně',
|
|
||||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Zdrojové a cílové sloupce musí mít stejný datový typ, nad cílovými sloupci musí být definován index a odkazovaná data musí existovat.',
|
|
||||||
|
|
||||||
'Triggers' => 'Triggery',
|
|
||||||
'Add trigger' => 'Přidat trigger',
|
|
||||||
'Trigger has been dropped.' => 'Trigger byl odstraněn.',
|
|
||||||
'Trigger has been altered.' => 'Trigger byl změněn.',
|
|
||||||
'Trigger has been created.' => 'Trigger byl vytvořen.',
|
|
||||||
'Alter trigger' => 'Změnit trigger',
|
|
||||||
'Create trigger' => 'Vytvořit trigger',
|
|
||||||
'Time' => 'Čas',
|
|
||||||
'Event' => 'Událost',
|
|
||||||
'Name' => 'Název',
|
|
||||||
|
|
||||||
'select' => 'vypsat',
|
|
||||||
'Select' => 'Vypsat',
|
|
||||||
'Select data' => 'Vypsat data',
|
|
||||||
'Functions' => 'Funkce',
|
|
||||||
'Aggregation' => 'Agregace',
|
|
||||||
'Search' => 'Vyhledat',
|
|
||||||
'anywhere' => 'kdekoliv',
|
|
||||||
'Search data in tables' => 'Vyhledat data v tabulkách',
|
|
||||||
'Sort' => 'Seřadit',
|
|
||||||
'descending' => 'sestupně',
|
|
||||||
'Limit' => 'Limit',
|
|
||||||
'Text length' => 'Délka textů',
|
|
||||||
'Action' => 'Akce',
|
|
||||||
'Full table scan' => 'Průchod celé tabulky',
|
|
||||||
'Unable to select the table' => 'Nepodařilo se vypsat tabulku',
|
|
||||||
'No rows.' => 'Žádné řádky.',
|
|
||||||
'%d row(s)' => array('%d řádek', '%d řádky', '%d řádků'),
|
|
||||||
'Page' => 'Stránka',
|
|
||||||
'last' => 'poslední',
|
|
||||||
'Load more data' => 'Nahrát další data',
|
|
||||||
'Loading' => 'Nahrává se',
|
|
||||||
'whole result' => 'celý výsledek',
|
|
||||||
'%d byte(s)' => array('%d bajt', '%d bajty', '%d bajtů'),
|
|
||||||
|
|
||||||
'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ů.'),
|
||||||
|
'CSV Import' => 'Import CSV',
|
||||||
// in-place editing in select
|
'Import' => 'Import',
|
||||||
'Ctrl+click on a value to modify it.' => 'Ctrl+klikněte na políčko, které chcete změnit.',
|
'Show structure' => 'Zobrazit strukturu',
|
||||||
'Use edit link to modify this value.' => 'Ke změně této hodnoty použijte odkaz upravit.',
|
'Select data' => 'Vypsat data',
|
||||||
|
'Stop on error' => 'Zastavit při chybě',
|
||||||
// %s can contain auto-increment value
|
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Byl překročen maximální povolený počet polí. Zvyšte prosím %s a %s.',
|
||||||
'Item%s has been inserted.' => 'Položka%s byla vložena.',
|
'anywhere' => 'kdekoliv',
|
||||||
'Item has been deleted.' => 'Položka byla smazána.',
|
'%.3f s' => '%.3f s',
|
||||||
'Item has been updated.' => 'Položka byla aktualizována.',
|
'$1-$3-$5' => '$6.$4.$1',
|
||||||
'%d item(s) have been affected.' => array('Byl ovlivněn %d záznam.', 'Byly ovlivněny %d záznamy.', 'Bylo ovlivněno %d záznamů.'),
|
'[yyyy]-mm-dd' => 'd.m.[rrrr]',
|
||||||
'New item' => 'Nová položka',
|
'History' => 'Historie',
|
||||||
'original' => 'původní',
|
'Variables' => 'Proměnné',
|
||||||
// label for value '' in enum data type
|
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Zdrojové a cílové sloupce musí mít stejný datový typ, nad cílovými sloupci musí být definován index a odkazovaná data musí existovat.',
|
||||||
'empty' => 'prázdné',
|
|
||||||
'edit' => 'upravit',
|
|
||||||
'Edit' => 'Upravit',
|
|
||||||
'Insert' => 'Vložit',
|
|
||||||
'Save' => 'Uložit',
|
|
||||||
'Save and continue edit' => 'Uložit a pokračovat v editaci',
|
|
||||||
'Save and insert next' => 'Uložit a vložit další',
|
|
||||||
'Clone' => 'Klonovat',
|
|
||||||
'Delete' => 'Smazat',
|
|
||||||
'You have no privileges to update this table.' => 'Nemáte oprávnění editovat tuto tabulku.',
|
|
||||||
|
|
||||||
'E-mail' => 'E-mail',
|
'E-mail' => 'E-mail',
|
||||||
'From' => 'Odesílatel',
|
'From' => 'Odesílatel',
|
||||||
'Subject' => 'Předmět',
|
'Subject' => 'Předmět',
|
||||||
'Attachments' => 'Přílohy',
|
|
||||||
'Send' => 'Odeslat',
|
'Send' => 'Odeslat',
|
||||||
'%d e-mail(s) have been sent.' => array('Byl odeslán %d e-mail.', 'Byly odeslány %d e-maily.', 'Bylo odesláno %d e-mailů.'),
|
'%d e-mail(s) have been sent.' => array('Byl odeslán %d e-mail.', 'Byly odeslány %d e-maily.', 'Bylo odesláno %d e-mailů.'),
|
||||||
|
'Run file' => 'Spustit soubor',
|
||||||
// data type descriptions
|
|
||||||
'Numbers' => 'Čísla',
|
'Numbers' => 'Čísla',
|
||||||
'Date and time' => 'Datum a čas',
|
'Date and time' => 'Datum a čas',
|
||||||
'Strings' => 'Řetězce',
|
'Strings' => 'Řetězce',
|
||||||
'Binary' => 'Binární',
|
'Binary' => 'Binární',
|
||||||
'Lists' => 'Seznamy',
|
'Lists' => 'Seznamy',
|
||||||
|
'Relations' => 'Vztahy',
|
||||||
|
'Maximum allowed file size is %sB.' => 'Maximální povolená velikost souboru je %sB.',
|
||||||
|
'Clear' => 'Vyčistit',
|
||||||
|
'Editor' => 'Editor',
|
||||||
|
'Webserver file %s' => 'Soubor %s na webovém serveru',
|
||||||
|
'File does not exist.' => 'Soubor neexistuje.',
|
||||||
|
'Permanent login' => 'Trvalé přihlášení',
|
||||||
|
'%d in total' => '%d celkem',
|
||||||
|
'Attachments' => 'Přílohy',
|
||||||
|
'System' => 'Systém',
|
||||||
|
'last' => 'poslední',
|
||||||
'Network' => 'Síť',
|
'Network' => 'Síť',
|
||||||
'Geometry' => 'Geometrie',
|
'Geometry' => 'Geometrie',
|
||||||
'Relations' => 'Vztahy',
|
'Databases have been dropped.' => 'Databáze byly odstraněny.',
|
||||||
|
|
||||||
'Editor' => 'Editor',
|
|
||||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
|
||||||
'$1-$3-$5' => '$6.$4.$1',
|
|
||||||
// hint for date format - use language equivalents for day, month and year shortcuts
|
|
||||||
'[yyyy]-mm-dd' => 'd.m.[rrrr]',
|
|
||||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
|
||||||
'now' => 'teď',
|
|
||||||
'yes' => 'ano',
|
|
||||||
'no' => 'ne',
|
|
||||||
|
|
||||||
// general SQLite error in create, drop or rename database
|
|
||||||
'File exists.' => 'Soubor existuje.',
|
'File exists.' => 'Soubor existuje.',
|
||||||
'Please use one of the extensions %s.' => 'Prosím použijte jednu z koncovek %s.',
|
'Double click on a value to modify it.' => 'Dvojklikněte na políčko, které chcete změnit.',
|
||||||
|
'Increase text length to modify this value.' => 'Ke změně této hodnoty zvyšte délku textů.',
|
||||||
// PostgreSQL and MS SQL schema support
|
'Use edit link to modify this value.' => 'Ke změně této hodnoty použijte odkaz upravit.',
|
||||||
'Alter schema' => 'Pozměnit schéma',
|
'Alter schema' => 'Pozměnit schéma',
|
||||||
'Create schema' => 'Vytvořit schéma',
|
'Create schema' => 'Vytvořit schéma',
|
||||||
'Schema has been dropped.' => 'Schéma bylo odstraněno.',
|
'Schema has been dropped.' => 'Schéma bylo odstraněno.',
|
||||||
@@ -304,20 +244,11 @@ $translations = array(
|
|||||||
'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',
|
'Schema' => 'Schéma',
|
||||||
'Invalid schema.' => 'Nesprávné schéma.',
|
|
||||||
|
|
||||||
// PostgreSQL sequences support
|
|
||||||
'Sequences' => 'Sekvence',
|
'Sequences' => 'Sekvence',
|
||||||
'Create sequence' => 'Vytvořit sekvenci',
|
'Create sequence' => 'Vytvořit sekvenci',
|
||||||
'Sequence has been dropped.' => 'Sekvence byla odstraněna.',
|
'Sequence has been dropped.' => 'Sekvence byla odstraněna.',
|
||||||
'Sequence has been created.' => 'Sekvence byla vytvořena.',
|
'Sequence has been created.' => 'Sekvence byla vytvořena.',
|
||||||
'Sequence has been altered.' => 'Sekvence byla změněna.',
|
'Sequence has been altered.' => 'Sekvence byla změněna.',
|
||||||
'Alter sequence' => 'Pozměnit sekvenci',
|
'Alter sequence' => 'Pozměnit sekvenci',
|
||||||
|
'Search data in tables' => 'Vyhledat data v tabulkách',
|
||||||
// PostgreSQL user types support
|
|
||||||
'User types' => 'Uživatelské typy',
|
|
||||||
'Create type' => 'Vytvořit typ',
|
|
||||||
'Type has been dropped.' => 'Typ byl odstraněn.',
|
|
||||||
'Type has been created.' => 'Typ byl vytvořen.',
|
|
||||||
'Alter type' => 'Pozměnit typ',
|
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ $translations = array(
|
|||||||
'Create new table' => 'Neue Tabelle',
|
'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 has been inserted.' => 'Datensatz hinzugefügt.',
|
||||||
'Edit' => 'Ändern',
|
'Edit' => 'Ändern',
|
||||||
'Insert' => 'Hinzufügen',
|
'Insert' => 'Hinzufügen',
|
||||||
'Save and insert next' => 'Speichern und nächsten hinzufügen',
|
'Save and insert next' => 'Speichern und nächsten hinzufügen',
|
||||||
@@ -173,7 +173,7 @@ $translations = array(
|
|||||||
'Data Free' => 'Freier Bereich',
|
'Data Free' => 'Freier Bereich',
|
||||||
'Collation' => 'Collation',
|
'Collation' => 'Collation',
|
||||||
'Analyze' => 'Analysieren',
|
'Analyze' => 'Analysieren',
|
||||||
'Optimize' => 'Optimieren',
|
'Optimize' => 'Optimisieren',
|
||||||
'Check' => 'Prüfen',
|
'Check' => 'Prüfen',
|
||||||
'Repair' => 'Reparieren',
|
'Repair' => 'Reparieren',
|
||||||
'Truncate' => 'Entleeren (truncate)',
|
'Truncate' => 'Entleeren (truncate)',
|
||||||
@@ -187,18 +187,19 @@ $translations = array(
|
|||||||
'Save and continue edit' => 'Speichern und weiter bearbeiten',
|
'Save and continue edit' => 'Speichern und weiter bearbeiten',
|
||||||
'original' => 'Original',
|
'original' => 'Original',
|
||||||
'Tables have been dropped.' => 'Tabellen wurden entfernt (drop).',
|
'Tables have been dropped.' => 'Tabellen wurden entfernt (drop).',
|
||||||
'%d item(s) have been affected.' => '%d Artikel betroffen.',
|
'%d item(s) have been affected.' => array('%d Artikel betroffen.', '%d Artikel betroffen.'),
|
||||||
'whole result' => 'Gesamtergebnis',
|
'whole result' => 'Gesamtergebnis',
|
||||||
'Clone' => 'Klonen',
|
'Clone' => 'Klonen',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Die maximal erlaubte Anzahl der Felder ist überschritten. Bitte %s erhöhen.',
|
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Die maximal erlaubte Anzahl der Felder ist überschritten. Bitte %s und %s erhöhen.',
|
||||||
'Partition by' => 'Partitionieren um',
|
'Partition by' => 'Partitionieren um',
|
||||||
'Partitions' => 'Partitionen',
|
'Partitions' => 'Partitionen',
|
||||||
'Partition name' => 'Name der Partition',
|
'Partition name' => 'Name der Partition',
|
||||||
'Values' => 'Werte',
|
'Values' => 'Werte',
|
||||||
'%d row(s) have been imported.' => array('%d Datensatz importiert.', '%d Datensätze wurden importiert.'),
|
'%d row(s) have been imported.' => array('%d Datensatz importiert.', '%d Datensätze wurden importiert.'),
|
||||||
'anywhere' => 'beliebig',
|
'anywhere' => 'beliebig',
|
||||||
|
'CSV Import' => 'Importiere CSV',
|
||||||
'Import' => 'Importieren',
|
'Import' => 'Importieren',
|
||||||
'Stop on error' => 'Bei Fehler anhalten',
|
'Stop on error' => 'Bei Fehler anhaltan',
|
||||||
'%.3f s' => '%.3f s',
|
'%.3f s' => '%.3f s',
|
||||||
'$1-$3-$5' => '$6.$4.$1',
|
'$1-$3-$5' => '$6.$4.$1',
|
||||||
'[yyyy]-mm-dd' => 't.m.[jjjj]',
|
'[yyyy]-mm-dd' => 't.m.[jjjj]',
|
||||||
@@ -224,48 +225,4 @@ $translations = array(
|
|||||||
'File does not exist.' => 'Datei existiert nicht.',
|
'File does not exist.' => 'Datei existiert nicht.',
|
||||||
'%d in total' => '%d insgesamt',
|
'%d in total' => '%d insgesamt',
|
||||||
'Permanent login' => 'Passwort speichern',
|
'Permanent login' => 'Passwort speichern',
|
||||||
'Databases have been dropped.' => 'Datenbanken entfernt.',
|
|
||||||
'Search data in tables' => 'Suche in Tabellen',
|
|
||||||
'schema' => 'Schema',
|
|
||||||
'Schema' => 'Schema',
|
|
||||||
'Alter schema' => 'Schema ändern',
|
|
||||||
'Create schema' => 'Neues Schema',
|
|
||||||
'Schema has been dropped.' => 'Schema wurde gelöscht.',
|
|
||||||
'Schema has been created.' => 'Neues Schema erstellt.',
|
|
||||||
'Schema has been altered.' => 'Schema geändert.',
|
|
||||||
'Sequences' => 'Sequenz',
|
|
||||||
'Create sequence' => 'Neue Sequenz',
|
|
||||||
'Alter sequence' => 'Sequenz ändern',
|
|
||||||
'Sequence has been dropped.' => 'Sequenz gelöscht.',
|
|
||||||
'Sequence has been created.' => 'Neue Sequenz erstellt.',
|
|
||||||
'Sequence has been altered.' => 'Sequenz geändert.',
|
|
||||||
'User types' => 'Benutzer-definierte Typen',
|
|
||||||
'Create type' => 'Typ erstellen',
|
|
||||||
'Alter type' => 'Typ ändern',
|
|
||||||
'Type has been dropped.' => 'Typ gelöscht.',
|
|
||||||
'Type has been created.' => 'Typ erstellt.',
|
|
||||||
'Ctrl+click on a value to modify it.' => 'Ctrl+klick zum Bearbeiten des Wertes.',
|
|
||||||
'Use edit link to modify this value.' => 'Benutzen Sie den Link zum editieren dieses Wertes.',
|
|
||||||
'last' => 'letzte',
|
|
||||||
'From server' => 'Im Server',
|
|
||||||
'System' => 'Datenbank System',
|
|
||||||
'Select data' => 'Daten auswählen',
|
|
||||||
'Show structure' => 'Struktur anzeigen',
|
|
||||||
'empty' => 'leer',
|
|
||||||
'Network' => 'Netzwerk',
|
|
||||||
'Geometry' => 'Geometrie',
|
|
||||||
'File exists.' => 'Datei existiert schon.',
|
|
||||||
'Attachments' => 'Anhänge',
|
|
||||||
'%d query(s) executed OK.' => array('SQL-Query erfolgreich ausgeführt.', '%d SQL-Queries erfolgreich ausgeführt.'),
|
|
||||||
'Show only errors' => 'Nur Fehler anzeigen',
|
|
||||||
'Refresh' => 'Aktualisieren',
|
|
||||||
'Invalid schema.' => 'Schema nicht gültig.',
|
|
||||||
'Please use one of the extensions %s.' => 'Bitte einen der Dateitypen %s benutzen.',
|
|
||||||
'now' => 'jetzt',
|
|
||||||
'ltr' => 'ltr',
|
|
||||||
'Tables have been copied.' => 'Tabellen wurden kopiert.',
|
|
||||||
'Copy' => 'Kopieren',
|
|
||||||
'Permanent link' => 'Dauerhafter Link',
|
|
||||||
'Edit all' => 'Alle ändern',
|
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -9,5 +9,4 @@ $translations = array(
|
|||||||
'%d row(s) have been imported.' => array('%d row has been imported.', '%d rows have been imported.'),
|
'%d row(s) have been imported.' => array('%d row has been imported.', '%d rows have been imported.'),
|
||||||
'%d e-mail(s) have been sent.' => array('%d e-mail has been sent.', '%d e-mails have been sent.'),
|
'%d e-mail(s) have been sent.' => array('%d e-mail has been sent.', '%d e-mails have been sent.'),
|
||||||
'%d in total' => '%d in total',
|
'%d in total' => '%d in total',
|
||||||
'%d query(s) executed OK.' => array('%d query executed OK.', '%d queries executed OK.'),
|
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -2,25 +2,25 @@
|
|||||||
$translations = array(
|
$translations = array(
|
||||||
'Login' => 'Login',
|
'Login' => 'Login',
|
||||||
'Logout successful.' => 'Salida exitosa.',
|
'Logout successful.' => 'Salida exitosa.',
|
||||||
'Invalid credentials.' => 'Identificacion inválida.',
|
'Invalid credentials.' => 'Autenticación fallada.',
|
||||||
'Server' => 'Servidor',
|
'Server' => 'Servidor',
|
||||||
'Username' => 'Usuario',
|
'Username' => 'Usuario',
|
||||||
'Password' => 'Contraseña',
|
'Password' => 'Contraseña',
|
||||||
'Select database' => 'Seleccionar Base de datos',
|
'Select database' => 'Seleccionar Base de datos',
|
||||||
'Invalid database.' => 'Base de datos inválida.',
|
'Invalid database.' => 'Base de datos inválida.',
|
||||||
'Create new database' => 'Ingrese nueva base de datos',
|
'Create new database' => 'Nueva Base de datos',
|
||||||
'Table has been dropped.' => 'Tabla eliminada.',
|
'Table has been dropped.' => 'Tabla eliminada.',
|
||||||
'Table has been altered.' => 'Tabla modificada.',
|
'Table has been altered.' => 'Tabla modificada.',
|
||||||
'Table has been created.' => 'Tabla creada.',
|
'Table has been created.' => 'Tabla creada.',
|
||||||
'Alter table' => 'Modifique estructura',
|
'Alter table' => 'Modificar Estructura',
|
||||||
'Create table' => 'Crear tabla',
|
'Create table' => 'Crear tabla',
|
||||||
'Table name' => 'Nombre de la tabla',
|
'Table name' => 'Nombre de tabla',
|
||||||
'engine' => 'motor',
|
'engine' => 'motor',
|
||||||
'collation' => 'colación',
|
'collation' => 'colación',
|
||||||
'Column name' => 'Nombre de columna',
|
'Column name' => 'Nombre de columna',
|
||||||
'Type' => 'Tipo',
|
'Type' => 'Tipo',
|
||||||
'Length' => 'Longitud',
|
'Length' => 'Longitud',
|
||||||
'Auto Increment' => 'Incremento automático',
|
'Auto Increment' => 'Auto increment',
|
||||||
'Options' => 'Opciones',
|
'Options' => 'Opciones',
|
||||||
'Save' => 'Guardar',
|
'Save' => 'Guardar',
|
||||||
'Drop' => 'Eliminar',
|
'Drop' => 'Eliminar',
|
||||||
@@ -40,7 +40,7 @@ $translations = array(
|
|||||||
'Create new table' => 'Nueva tabla',
|
'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 has been inserted.' => 'Registro insertado.',
|
||||||
'Edit' => 'Modificar',
|
'Edit' => 'Modificar',
|
||||||
'Insert' => 'Agregar',
|
'Insert' => 'Agregar',
|
||||||
'Save and insert next' => 'Guardar e insertar otro',
|
'Save and insert next' => 'Guardar e insertar otro',
|
||||||
@@ -69,13 +69,13 @@ $translations = array(
|
|||||||
'Foreign keys' => 'Claves foráneas',
|
'Foreign keys' => 'Claves foráneas',
|
||||||
'Triggers' => 'Triggers',
|
'Triggers' => 'Triggers',
|
||||||
'View' => 'Vistas',
|
'View' => 'Vistas',
|
||||||
'Unable to select the table' => 'No es posible seleccionar la tabla',
|
'Unable to select the table' => 'No posible seleccionar la tabla',
|
||||||
'Invalid CSRF token. Send the form again.' => 'Token CSRF inválido. Vuelva a enviar los datos del formulario.',
|
'Invalid CSRF token. Send the form again.' => 'Token CSRF inválido. Vuelva a enviar los datos del formulario.',
|
||||||
'Comment' => 'Comentario',
|
'Comment' => 'Comentario',
|
||||||
'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.' => 'No hay comando para ejecutar.',
|
'No commands to execute.' => 'No hay comando para ejecutar.',
|
||||||
'Unable to upload a file.' => 'No es posible importar archivo.',
|
'Unable to upload a file.' => 'No posible importar archivo.',
|
||||||
'File upload' => 'Importar archivo',
|
'File upload' => 'Importar archivo',
|
||||||
'File uploads are disabled.' => 'Importación de archivos deshablilitado.',
|
'File uploads are disabled.' => 'Importación de archivos deshablilitado.',
|
||||||
'Routine has been called, %d row(s) affected.' => array('Consulta ejecutada, %d registro afectado.', 'Consulta ejecutada, %d registros afectados.'),
|
'Routine has been called, %d row(s) affected.' => array('Consulta ejecutada, %d registro afectado.', 'Consulta ejecutada, %d registros afectados.'),
|
||||||
@@ -83,13 +83,13 @@ $translations = array(
|
|||||||
'No extension' => 'No hay extension',
|
'No extension' => 'No hay extension',
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'Ninguna de las extensiones PHP soportadas (%s) está disponible.',
|
'None of the supported PHP extensions (%s) are available.' => 'Ninguna de las extensiones PHP soportadas (%s) está disponible.',
|
||||||
'Session support must be enabled.' => 'Deben estar habilitadas las sesiones.',
|
'Session support must be enabled.' => 'Deben estar habilitadas las sesiones.',
|
||||||
'Session expired, please login again.' => 'Sesión expirada, por favor ingrese su clave de nuevo.',
|
'Session expired, please login again.' => 'Sesión expirada, favor loguéese de nuevo.',
|
||||||
'Text length' => 'Longitud de texto',
|
'Text length' => 'Longitud de texto',
|
||||||
'Foreign key has been dropped.' => 'Clave externa eliminada.',
|
'Foreign key has been dropped.' => 'Clave foránea eliminada.',
|
||||||
'Foreign key has been altered.' => 'Clave externa modificada.',
|
'Foreign key has been altered.' => 'Clave foránea modificada.',
|
||||||
'Foreign key has been created.' => 'Clave externa creada.',
|
'Foreign key has been created.' => 'Clave foránea creada.',
|
||||||
'Foreign key' => 'Clave externa',
|
'Foreign key' => 'Clave foránea',
|
||||||
'Target table' => 'Tabla de destino',
|
'Target table' => 'Tabla destino',
|
||||||
'Change' => 'Modificar',
|
'Change' => 'Modificar',
|
||||||
'Source' => 'Origen',
|
'Source' => 'Origen',
|
||||||
'Target' => 'Destino',
|
'Target' => 'Destino',
|
||||||
@@ -104,12 +104,12 @@ $translations = array(
|
|||||||
'View has been altered.' => 'Vista modificada.',
|
'View has been altered.' => 'Vista modificada.',
|
||||||
'View has been created.' => 'Vista creada.',
|
'View has been created.' => 'Vista creada.',
|
||||||
'Alter view' => 'Modificar vista',
|
'Alter view' => 'Modificar vista',
|
||||||
'Create view' => 'Crear vista',
|
'Create view' => 'Cear vista',
|
||||||
'Name' => 'Nombre',
|
'Name' => 'Nombre',
|
||||||
'Process list' => 'Lista de procesos',
|
'Process list' => 'Lista de procesos',
|
||||||
'%d process(es) have been killed.' => array('%d proceso detenido.', '%d procesos detenidos.'),
|
'%d process(es) have been killed.' => array('%d proceso detenido.', '%d procesos detenidos.'),
|
||||||
'Kill' => 'Detener',
|
'Kill' => 'Detener',
|
||||||
'Parameter name' => 'Nombre de Parámetro',
|
'Parameter name' => 'Nombre de Parametro',
|
||||||
'Database schema' => 'Esquema de base de datos',
|
'Database schema' => 'Esquema de base de datos',
|
||||||
'Create procedure' => 'Crear procedimiento',
|
'Create procedure' => 'Crear procedimiento',
|
||||||
'Create function' => 'Crear función',
|
'Create function' => 'Crear función',
|
||||||
@@ -118,7 +118,7 @@ $translations = array(
|
|||||||
'Routine has been created.' => 'Procedimiento creado.',
|
'Routine has been created.' => 'Procedimiento creado.',
|
||||||
'Alter function' => 'Modificar Función',
|
'Alter function' => 'Modificar Función',
|
||||||
'Alter procedure' => 'Modificar procedimiento',
|
'Alter procedure' => 'Modificar procedimiento',
|
||||||
'Return type' => 'Tipo de valor de regreso',
|
'Return type' => 'Tipo de valor retornado',
|
||||||
'Add trigger' => 'Agregar trigger',
|
'Add trigger' => 'Agregar 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.',
|
||||||
@@ -162,7 +162,7 @@ $translations = array(
|
|||||||
'At given time' => 'A hora determinada',
|
'At given time' => 'A hora determinada',
|
||||||
'Every' => 'Cada',
|
'Every' => 'Cada',
|
||||||
'Events' => 'Eventos',
|
'Events' => 'Eventos',
|
||||||
'Schedule' => 'Agenda',
|
'Schedule' => 'Agendamiento',
|
||||||
'Start' => 'Inicio',
|
'Start' => 'Inicio',
|
||||||
'End' => 'Fin',
|
'End' => 'Fin',
|
||||||
'Status' => 'Estado',
|
'Status' => 'Estado',
|
||||||
@@ -190,13 +190,14 @@ $translations = array(
|
|||||||
'%d item(s) have been affected.' => array('%d ítem afectado.', '%d itemes afectados.'),
|
'%d item(s) have been affected.' => array('%d ítem afectado.', '%d itemes afectados.'),
|
||||||
'whole result' => 'resultado completo',
|
'whole result' => 'resultado completo',
|
||||||
'Clone' => 'Clonar',
|
'Clone' => 'Clonar',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Cantida máxima de campos permitidos excedidos. Por favor aumente %s.',
|
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Cantida máxima de campos permitidos excedidos. Favor aumente %s y %s.',
|
||||||
'Partition by' => 'Particionar por',
|
'Partition by' => 'Particionar por',
|
||||||
'Partitions' => 'Particiones',
|
'Partitions' => 'Particiones',
|
||||||
'Partition name' => 'Nombre de Partición',
|
'Partition name' => 'Nombre de Partición',
|
||||||
'Values' => 'Valores',
|
'Values' => 'Valores',
|
||||||
'%d row(s) have been imported.' => array('%d registro importado.', '%d registros importados.'),
|
'%d row(s) have been imported.' => array('%d registro importado.', '%d registros importados.'),
|
||||||
'anywhere' => 'donde sea',
|
'anywhere' => 'donde sea',
|
||||||
|
'CSV Import' => 'Importar CSV',
|
||||||
'Import' => 'Importar',
|
'Import' => 'Importar',
|
||||||
'Stop on error' => 'Parar en caso de error',
|
'Stop on error' => 'Parar en caso de error',
|
||||||
'%.3f s' => '%.3f s',
|
'%.3f s' => '%.3f s',
|
||||||
@@ -224,48 +225,4 @@ $translations = array(
|
|||||||
'File does not exist.' => 'Archivo no existe.',
|
'File does not exist.' => 'Archivo no existe.',
|
||||||
'%d in total' => '%d en total',
|
'%d in total' => '%d en total',
|
||||||
'Permanent login' => 'Guardar contraseña',
|
'Permanent login' => 'Guardar contraseña',
|
||||||
'Databases have been dropped.' => 'Bases de datos eliminadas.',
|
|
||||||
'Search data in tables' => 'Buscar datos en tablas',
|
|
||||||
'schema' => 'esquema',
|
|
||||||
'Schema' => 'Esquema',
|
|
||||||
'Alter schema' => 'Modificar esquema',
|
|
||||||
'Create schema' => 'Crear esquema',
|
|
||||||
'Schema has been dropped.' => 'Esquema eliminado.',
|
|
||||||
'Schema has been created.' => 'Esquema creado.',
|
|
||||||
'Schema has been altered.' => 'Esquema modificado.',
|
|
||||||
'Sequences' => 'Secuencias',
|
|
||||||
'Create sequence' => 'Crear secuencias',
|
|
||||||
'Alter sequence' => 'Modificar secuencia',
|
|
||||||
'Sequence has been dropped.' => 'Secuencia eliminada.',
|
|
||||||
'Sequence has been created.' => 'Secuencia creada.',
|
|
||||||
'Sequence has been altered.' => 'Secuencia modificada.',
|
|
||||||
'User types' => 'Tipos definido por el usuario',
|
|
||||||
'Create type' => 'Crear tipo',
|
|
||||||
'Alter type' => 'Modificar tipo',
|
|
||||||
'Type has been dropped.' => 'Tipo eliminado.',
|
|
||||||
'Type has been created.' => 'Tipo creado.',
|
|
||||||
'Ctrl+click on a value to modify it.' => 'Ctrl+clic sobre el valor para editarlo.',
|
|
||||||
'Use edit link to modify this value.' => 'Utilice el enlace de modificar para realizar los cambios.',
|
|
||||||
'last' => 'último',
|
|
||||||
'From server' => 'Desde servidor',
|
|
||||||
'System' => 'Motor de base de datos',
|
|
||||||
'Select data' => 'Visualizar contenido',
|
|
||||||
'Show structure' => 'Mostrar estructura',
|
|
||||||
'empty' => 'ningúno',
|
|
||||||
'Network' => 'Red',
|
|
||||||
'Geometry' => 'Geometría',
|
|
||||||
'File exists.' => 'Archivo ya existe.',
|
|
||||||
'Attachments' => 'Adjuntos',
|
|
||||||
'%d query(s) executed OK.' => array('%d sentencia sql ejecutada correctamente.', '%d sentencias sql ejecutadas correctamente.'),
|
|
||||||
'Show only errors' => 'Mostrar solamente errores',
|
|
||||||
'Refresh' => 'Refrescar',
|
|
||||||
'Invalid schema.' => 'Esquema inválido.',
|
|
||||||
'Please use one of the extensions %s.' => 'Por favor use una de las extensiones %s.',
|
|
||||||
'now' => 'ahora',
|
|
||||||
'ltr' => 'ltr',
|
|
||||||
'Tables have been copied.' => 'Tablas copiadas.',
|
|
||||||
'Copy' => 'Copiar',
|
|
||||||
'Permanent link' => 'Enlace permanente',
|
|
||||||
'Edit all' => 'Editar todos',
|
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ $translations = array(
|
|||||||
'Create new table' => 'Loo uus tabel',
|
'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 has been inserted.' => 'Lisamine õnnestus.',
|
||||||
'Edit' => 'Muuda',
|
'Edit' => 'Muuda',
|
||||||
'Insert' => 'Sisesta',
|
'Insert' => 'Sisesta',
|
||||||
'Save and insert next' => 'Salvesta ja lisa järgmine',
|
'Save and insert next' => 'Salvesta ja lisa järgmine',
|
||||||
@@ -62,7 +62,7 @@ $translations = array(
|
|||||||
'Action' => 'Tegevus',
|
'Action' => 'Tegevus',
|
||||||
'edit' => 'muuda',
|
'edit' => 'muuda',
|
||||||
'Page' => 'Lehekülg',
|
'Page' => 'Lehekülg',
|
||||||
'Query executed OK, %d row(s) affected.' => 'Päring õnnestus, mõjutatatud ridu: %d.',
|
'Query executed OK, %d row(s) affected.' => array('Päring õnnestus, mõjutatatud ridu: %d.', 'Päring õnnestus, mõjutatatud ridu: %d.'),
|
||||||
'Error in query' => 'Päringus esines viga',
|
'Error in query' => 'Päringus esines viga',
|
||||||
'Execute' => 'Käivita',
|
'Execute' => 'Käivita',
|
||||||
'Table' => 'Tabel',
|
'Table' => 'Tabel',
|
||||||
@@ -78,7 +78,7 @@ $translations = array(
|
|||||||
'Unable to upload a file.' => 'Faili üleslaadimine pole võimalik.',
|
'Unable to upload a file.' => 'Faili üleslaadimine pole võimalik.',
|
||||||
'File upload' => 'Faili üleslaadimine',
|
'File upload' => 'Faili üleslaadimine',
|
||||||
'File uploads are disabled.' => 'Failide üleslaadimine on keelatud.',
|
'File uploads are disabled.' => 'Failide üleslaadimine on keelatud.',
|
||||||
'Routine has been called, %d row(s) affected.' => 'Protseduur täideti edukalt, mõjutatud ridu: %d.',
|
'Routine has been called, %d row(s) affected.' => array('Protseduur täideti edukalt, mõjutatud ridu: %d.', 'Protseduur täideti edukalt, mõjutatud ridu: %d.'),
|
||||||
'Call' => 'Käivita',
|
'Call' => 'Käivita',
|
||||||
'No extension' => 'Ei leitud laiendust',
|
'No extension' => 'Ei leitud laiendust',
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'Serveris pole ühtegi toetatud PHP laiendustest (%s).',
|
'None of the supported PHP extensions (%s) are available.' => 'Serveris pole ühtegi toetatud PHP laiendustest (%s).',
|
||||||
@@ -127,7 +127,7 @@ $translations = array(
|
|||||||
'Create trigger' => 'Loo uus päästik (TRIGGER)',
|
'Create trigger' => 'Loo uus päästik (TRIGGER)',
|
||||||
'Time' => 'Aeg',
|
'Time' => 'Aeg',
|
||||||
'Event' => 'Sündmus',
|
'Event' => 'Sündmus',
|
||||||
'%d row(s)' => '%d rida',
|
'%d row(s)' => array('%d rida', '%d rida'),
|
||||||
'Remove' => 'Eemalda',
|
'Remove' => 'Eemalda',
|
||||||
'Are you sure?' => 'Kas oled kindel?',
|
'Are you sure?' => 'Kas oled kindel?',
|
||||||
'Privileges' => 'Õigused',
|
'Privileges' => 'Õigused',
|
||||||
@@ -187,16 +187,17 @@ $translations = array(
|
|||||||
'Truncate' => 'Tühjenda',
|
'Truncate' => 'Tühjenda',
|
||||||
'Move to other database' => 'Liiguta teise andmebaasi',
|
'Move to other database' => 'Liiguta teise andmebaasi',
|
||||||
'Move' => 'Liiguta',
|
'Move' => 'Liiguta',
|
||||||
'%d item(s) have been affected.' => 'Mõjutatud kirjeid: %d.',
|
'%d item(s) have been affected.' => array('Mõjutatud kirjeid: %d.', 'Mõjutatud kirjeid: %d.'),
|
||||||
'whole result' => 'Täielikud tulemused',
|
'whole result' => 'Täielikud tulemused',
|
||||||
'Clone' => 'Kloon',
|
'Clone' => 'Kloon',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Maksimaalne väljade arv ületatud. Palun suurendage %s.',
|
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Maksimaalne väljade arv ületatud. Palun suurendage %s ja %s.',
|
||||||
'Partition by' => 'Partitsiooni',
|
'Partition by' => 'Partitsiooni',
|
||||||
'Partitions' => 'Partitsioonid',
|
'Partitions' => 'Partitsioonid',
|
||||||
'Partition name' => 'Partitsiooni nimi',
|
'Partition name' => 'Partitsiooni nimi',
|
||||||
'Values' => 'Väärtused',
|
'Values' => 'Väärtused',
|
||||||
'%d row(s) have been imported.' => 'Imporditi %d rida.',
|
'%d row(s) have been imported.' => array('Imporditi %d rida.', 'Imporditi %d rida.'),
|
||||||
'anywhere' => 'vahet pole',
|
'anywhere' => 'vahet pole',
|
||||||
|
'CSV Import' => 'Impordi CSV',
|
||||||
'Import' => 'Impordi',
|
'Import' => 'Impordi',
|
||||||
'Stop on error' => 'Peatuda vea esinemisel',
|
'Stop on error' => 'Peatuda vea esinemisel',
|
||||||
'%.3f s' => '%.3f s',
|
'%.3f s' => '%.3f s',
|
||||||
@@ -219,53 +220,9 @@ $translations = array(
|
|||||||
'From' => 'Kellelt',
|
'From' => 'Kellelt',
|
||||||
'Subject' => 'Pealkiri',
|
'Subject' => 'Pealkiri',
|
||||||
'Send' => 'Saada',
|
'Send' => 'Saada',
|
||||||
'%d e-mail(s) have been sent.' => 'Saadetud kirju: %d.',
|
'%d e-mail(s) have been sent.' => array('Saadetud kirju: %d.', 'Saadetud kirju: %d.'),
|
||||||
'Webserver file %s' => 'Fail serveris: %s',
|
'Webserver file %s' => 'Fail serveris: %s',
|
||||||
'File does not exist.' => 'Faili ei leitud.',
|
'File does not exist.' => 'Faili ei leitud.',
|
||||||
'%d in total' => 'Kokku: %d',
|
'%d in total' => 'Kokku: %d',
|
||||||
'Permanent login' => 'Jäta mind meelde',
|
'Permanent login' => 'Jäta mind meelde',
|
||||||
'Databases have been dropped.' => 'Andmebaasid on edukalt kustutatud.',
|
|
||||||
'Search data in tables' => 'Otsi kogu andmebaasist',
|
|
||||||
'schema' => 'struktuur',
|
|
||||||
'Schema' => 'Struktuur',
|
|
||||||
'Alter schema' => 'Muuda struktuuri',
|
|
||||||
'Create schema' => 'Loo struktuur',
|
|
||||||
'Schema has been dropped.' => 'Struktuur on edukalt kustutatud.',
|
|
||||||
'Schema has been created.' => 'Struktuur on edukalt loodud.',
|
|
||||||
'Schema has been altered.' => 'Struktuur on edukalt muudetud.',
|
|
||||||
'Sequences' => 'Jadad (sequences)',
|
|
||||||
'Create sequence' => 'Loo jada',
|
|
||||||
'Alter sequence' => 'Muuda jada',
|
|
||||||
'Sequence has been dropped.' => 'Jada on edukalt kustutatud.',
|
|
||||||
'Sequence has been created.' => 'Jada on edukalt loodud.',
|
|
||||||
'Sequence has been altered.' => 'Jada on edukalt muudetud.',
|
|
||||||
'User types' => 'Kasutajatüübid',
|
|
||||||
'Create type' => 'Loo tüüp',
|
|
||||||
'Alter type' => 'Muuda tüüpi',
|
|
||||||
'Type has been dropped.' => 'Tüüp on edukalt kustutatud.',
|
|
||||||
'Type has been created.' => 'Tüüp on edukalt loodud.',
|
|
||||||
'Ctrl+click on a value to modify it.' => 'Väärtuse muutmiseks Ctrl+kliki sellel.',
|
|
||||||
'Use edit link to modify this value.' => 'Väärtuse muutmiseks kasuta muutmislinki.',
|
|
||||||
'last' => 'viimane',
|
|
||||||
'From server' => 'Serverist',
|
|
||||||
'System' => 'Andmebaasimootor',
|
|
||||||
'Select data' => 'Vaata andmeid',
|
|
||||||
'Show structure' => 'Näita struktuuri',
|
|
||||||
'empty' => 'tühi',
|
|
||||||
'Network' => 'Võrk (network)',
|
|
||||||
'Geometry' => 'Geomeetria',
|
|
||||||
'File exists.' => 'Fail juba eksisteerib.',
|
|
||||||
'Attachments' => 'Manused',
|
|
||||||
'%d query(s) executed OK.' => array('%d päring edukalt käivitatud.', '%d päringut edukalt käivitatud.'),
|
|
||||||
'Show only errors' => 'Kuva vaid veateateid',
|
|
||||||
'Refresh' => 'Uuenda',
|
|
||||||
'Invalid schema.' => 'Sobimatu skeema.',
|
|
||||||
'Please use one of the extensions %s.' => 'Palun kasuta üht laiendustest %s.',
|
|
||||||
'now' => 'nüüd',
|
|
||||||
'ltr' => 'ltr',
|
|
||||||
'Tables have been copied.' => 'Tabelid on edukalt kopeeritud.',
|
|
||||||
'Copy' => 'Kopeeri',
|
|
||||||
'Permanent link' => 'Püsilink',
|
|
||||||
'Edit all' => 'Muuda kõiki',
|
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,315 +0,0 @@
|
|||||||
<?php
|
|
||||||
$translations = array(
|
|
||||||
// label for database system selection (MySQL, SQLite, ...)
|
|
||||||
'System' => 'سيستم',
|
|
||||||
'Server' => 'سرور',
|
|
||||||
'Username' => 'نام كاربري',
|
|
||||||
'Password' => 'كلمه عبور',
|
|
||||||
'Permanent login' => '',
|
|
||||||
'Login' => 'ورود',
|
|
||||||
'Logout' => 'خروج',
|
|
||||||
'Logged as: %s' => 'ورود به عنوان: %s',
|
|
||||||
'Logout successful.' => 'با موفقيت خارج شديد',
|
|
||||||
'Invalid credentials.' => 'اعتبار سنجي نامعتبر',
|
|
||||||
'Language' => 'زبان',
|
|
||||||
'Invalid CSRF token. Send the form again.' => 'نامعتبر است. دوباره سعی کنید Token CSRF',
|
|
||||||
'No extension' => 'پسوند نامعتبر',
|
|
||||||
'None of the supported PHP extensions (%s) are available.' => ' پسوند پی اچ پی در دسترس نیست (%s) تعداد',
|
|
||||||
'Session support must be enabled.' => 'پشتيباني از نشست بايستي فعال گردد',
|
|
||||||
'Session expired, please login again.' => 'نشست پايان يافته، لطفا دوباره وارد شويد',
|
|
||||||
'%s version: %s through PHP extension %s' => 'نسخه %s : %s توسعه پی اچ پی %s',
|
|
||||||
'Refresh' => 'بازيابي',
|
|
||||||
|
|
||||||
// text direction - 'ltr' or 'rtl'
|
|
||||||
'ltr' => 'rtl',
|
|
||||||
|
|
||||||
'Privileges' => 'امتيازات',
|
|
||||||
'Create user' => 'ایجاد كاربر',
|
|
||||||
'User has been dropped.' => 'كاربر حذف شد',
|
|
||||||
'User has been altered.' => 'كاربر ويرايش گرديد',
|
|
||||||
'User has been created.' => 'كاربر ايجاد شد',
|
|
||||||
'Hashed' => 'به هم ريخته',
|
|
||||||
'Column' => 'ستون',
|
|
||||||
'Routine' => 'روتين',
|
|
||||||
'Grant' => 'اعطا',
|
|
||||||
'Revoke' => 'لغو كردن',
|
|
||||||
|
|
||||||
'Process list' => 'ليست فرآيند',
|
|
||||||
'%d process(es) have been killed.' => '%d فرآيند متوقف شد',
|
|
||||||
'Kill' => 'حذف فرآيند',
|
|
||||||
|
|
||||||
'Variables' => 'متغيرها',
|
|
||||||
'Status' => 'وضعيت',
|
|
||||||
|
|
||||||
'SQL command' => 'دستور اس كيو ال',
|
|
||||||
'%d query(s) executed OK.' => '%d كوئري اجرا شد',
|
|
||||||
'Query executed OK, %d row(s) affected.' => 'كوئري اجرا شد. %d سطر تغيير كرد.',
|
|
||||||
'No commands to execute.' => 'دستوري براي اجرا وجود ندارد',
|
|
||||||
'Error in query' => 'خطا در كوئري',
|
|
||||||
'Execute' => 'اجرا',
|
|
||||||
'Stop on error' => 'توقف در خطا',
|
|
||||||
'Show only errors' => 'فقط نمايش خطاها',
|
|
||||||
// sprintf() format for time of the command
|
|
||||||
'%.3f s' => '%.3f s',
|
|
||||||
'History' => 'تاريخ',
|
|
||||||
'Clear' => 'پاك كردن',
|
|
||||||
'Edit all' => 'ويرايش همه',
|
|
||||||
|
|
||||||
'File upload' => 'بارگذاري فايل',
|
|
||||||
'From server' => 'از سرور',
|
|
||||||
'Webserver file %s' => '%s فايل وب سرور',
|
|
||||||
'Run file' => 'نمايش فايل',
|
|
||||||
'File does not exist.' => 'فايل وجود ندارد',
|
|
||||||
'File uploads are disabled.' => 'بارگذاري غير فعال است',
|
|
||||||
'Unable to upload a file.' => 'قادر به بارگذاري فايل نيستيد',
|
|
||||||
'Maximum allowed file size is %sB.' => ' %sB حداكثر اندازه فايل',
|
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'حجم داده ارسالي برزگ است. حجم داده كاهش دهيد و يا مقدار %s را در پيكربندي افزايش دهيد.',
|
|
||||||
|
|
||||||
'Export' => 'استخراج',
|
|
||||||
'Dump' => 'خالي كردن',
|
|
||||||
'Output' => 'خروجي',
|
|
||||||
'open' => 'بازكردن',
|
|
||||||
'save' => 'ذخيره',
|
|
||||||
'Format' => 'حذف',
|
|
||||||
'Data' => 'داده',
|
|
||||||
|
|
||||||
'Database' => 'پايگاه داده',
|
|
||||||
'database' => 'پايگاه داده',
|
|
||||||
'Use' => 'استفاده',
|
|
||||||
'Select database' => 'انتخاب پايگاه داده',
|
|
||||||
'Invalid database.' => 'پايگاه داده نامعتبر',
|
|
||||||
'Create new database' => 'ایجاد پايگاه داده جديد',
|
|
||||||
'Database has been dropped.' => 'پايگاه داده حذف شد',
|
|
||||||
'Databases have been dropped.' => 'پايگاه دادها حذف شدند',
|
|
||||||
'Database has been created.' => 'پايگاه داده ايجاد شد',
|
|
||||||
'Database has been renamed.' => 'نام پايگاه داده تغيير كرد',
|
|
||||||
'Database has been altered.' => 'پايگاه داده ويرايش شد',
|
|
||||||
'Alter database' => 'ويرايش پايگاه داده',
|
|
||||||
'Create database' => 'ایجاد پايگاه داده',
|
|
||||||
'Database schema' => 'ساختار پايگاه داده',
|
|
||||||
|
|
||||||
// link to current database schema layout
|
|
||||||
'Permanent link' => 'ارتباط دائم',
|
|
||||||
|
|
||||||
// thousands separator - must contain single byte
|
|
||||||
',' => ' ',
|
|
||||||
'Engine' => 'موتور',
|
|
||||||
'Collation' => 'تطبیق',
|
|
||||||
'Data Length' => 'طول داده',
|
|
||||||
'Index Length' => 'طول ایندکس',
|
|
||||||
'Data Free' => 'داده اختیاری',
|
|
||||||
'Rows' => 'سطرها',
|
|
||||||
'%d in total' => ' به طور کل %d ',
|
|
||||||
'Analyze' => 'تحلیل',
|
|
||||||
'Optimize' => 'بهینه سازی',
|
|
||||||
'Check' => 'بررسی',
|
|
||||||
'Repair' => 'تعمیر',
|
|
||||||
'Truncate' => 'کوتاه کردن',
|
|
||||||
'Tables have been truncated.' => 'جدولها بریده شدند',
|
|
||||||
'Move to other database' => 'انتقال به یک پایگاه داده دیگر',
|
|
||||||
'Move' => 'انتقال',
|
|
||||||
'Tables have been moved.' => 'جدولها انتقال داده شدند',
|
|
||||||
'Copy' => 'کپی کردن',
|
|
||||||
'Tables have been copied.' => 'جدولها کپی شدند',
|
|
||||||
|
|
||||||
'Routines' => 'روالها',
|
|
||||||
'Routine has been called, %d row(s) affected.' => array('روال فراخوانی شد %d سطر متاثر شد', 'روال فراخوانی شد %d سطر متاثر شد'),
|
|
||||||
'Call' => 'صدا زدن',
|
|
||||||
'Parameter name' => 'نام پارامتر',
|
|
||||||
'Create procedure' => 'ایجاد زیربرنامه',
|
|
||||||
'Create function' => 'ایجاد تابع',
|
|
||||||
'Routine has been dropped.' => 'روال حذف شد',
|
|
||||||
'Routine has been altered.' => 'روال ویرایش شد',
|
|
||||||
'Routine has been created.' => 'روال ایجاد شد',
|
|
||||||
'Alter function' => 'ویرایش تابع',
|
|
||||||
'Alter procedure' => 'ویرایش زیربرنامه',
|
|
||||||
'Return type' => 'برگرداندن نوع',
|
|
||||||
|
|
||||||
'Events' => 'رویدادها',
|
|
||||||
'Event has been dropped.' => 'رویداد حذف شد',
|
|
||||||
'Event has been altered.' => 'رویداد ویرایش شد',
|
|
||||||
'Event has been created.' => 'رویداد ایجاد شد',
|
|
||||||
'Alter event' => 'ویرایش رویداد',
|
|
||||||
'Create event' => 'ایجاد رویداد',
|
|
||||||
'At given time' => 'زمان معین',
|
|
||||||
'Every' => 'همه',
|
|
||||||
'Schedule' => 'زمانبندی',
|
|
||||||
'Start' => 'آغاز',
|
|
||||||
'End' => 'پایان',
|
|
||||||
'On completion preserve' => 'تکمیل حفاظت فعال است',
|
|
||||||
|
|
||||||
'Tables' => 'جدولها',
|
|
||||||
'Tables and views' => 'جدولها و نمایه ها',
|
|
||||||
'Table' => 'جدول',
|
|
||||||
'No tables.' => 'جدولی وجود ندارد',
|
|
||||||
'Alter table' => 'ویرایش جدول',
|
|
||||||
'Create table' => 'ایجاد جدول',
|
|
||||||
'Create new table' => 'ایجاد جدول جدید',
|
|
||||||
'Table has been dropped.' => 'جدول حذف شد',
|
|
||||||
'Tables have been dropped.' => 'جدولها حذف شدند',
|
|
||||||
'Table has been altered.' => 'جدول ویرایش شد',
|
|
||||||
'Table has been created.' => 'جدول ایجاد شد',
|
|
||||||
'Table name' => 'نام جدول',
|
|
||||||
'Show structure' => 'نمایش ساختار',
|
|
||||||
'engine' => 'موتور',
|
|
||||||
'collation' => 'تطبیق',
|
|
||||||
'Column name' => 'نام ستون',
|
|
||||||
'Type' => 'نوع',
|
|
||||||
'Length' => 'طول',
|
|
||||||
'Auto Increment' => 'افزایش خودکار',
|
|
||||||
'Options' => 'اختیارات',
|
|
||||||
'Comment' => 'توضیح',
|
|
||||||
'Default values' => 'مقادیر پیش فرض',
|
|
||||||
'Drop' => 'حذف',
|
|
||||||
'Are you sure?' => 'مطمئن هستید؟',
|
|
||||||
'Move up' => 'انتقال به بالا',
|
|
||||||
'Move down' => 'انتقال به پایین',
|
|
||||||
'Remove' => 'حذف',
|
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'حداکثر مجاز فیلدهای مجاز اشباع شد. لطفا %s را کاهش دهید',
|
|
||||||
|
|
||||||
'Partition by' => 'بخشبندی توسط',
|
|
||||||
'Partitions' => 'بخشبندیها',
|
|
||||||
'Partition name' => 'نام بخش',
|
|
||||||
'Values' => 'مقادیر',
|
|
||||||
|
|
||||||
'View' => 'نمایش',
|
|
||||||
'View has been dropped.' => 'نمایش حذف شد',
|
|
||||||
'View has been altered.' => 'نمایش ویرایش شد',
|
|
||||||
'View has been created.' => 'نمایش ایجاد شد',
|
|
||||||
'Alter view' => 'حذف نمایش',
|
|
||||||
'Create view' => 'ایجاد نمایش',
|
|
||||||
|
|
||||||
'Indexes' => 'ایندکسها',
|
|
||||||
'Indexes have been altered.' => 'ایندکسها ویرایش شد',
|
|
||||||
'Alter indexes' => 'ویرایش ایندکسها',
|
|
||||||
'Add next' => 'افرودن بعدی',
|
|
||||||
'Index Type' => 'نوع ایندکس',
|
|
||||||
'Column (length)' => 'ستون (طول)',
|
|
||||||
|
|
||||||
'Foreign keys' => 'کلیدهای خارجی',
|
|
||||||
'Foreign key' => 'کلید خارجی',
|
|
||||||
'Foreign key has been dropped.' => 'کلید خارجی حذف شد',
|
|
||||||
'Foreign key has been altered.' => 'کلید خارجی ویرایش شد',
|
|
||||||
'Foreign key has been created.' => 'کلید خارجی ایجاد شد',
|
|
||||||
'Target table' => 'جدول هدف',
|
|
||||||
'Change' => 'تغییر',
|
|
||||||
'Source' => 'منبع',
|
|
||||||
'Target' => 'هدف',
|
|
||||||
'Add column' => 'افزودن ستون',
|
|
||||||
'Alter' => 'ویرایش',
|
|
||||||
'Add foreign key' => 'افزودن کلید خارجی',
|
|
||||||
'ON DELETE' => 'ON DELETE',
|
|
||||||
'ON UPDATE' => 'ON UPDATE',
|
|
||||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'داده مبدا و مقصد ستونها بایستی شبیه هم باشند',
|
|
||||||
|
|
||||||
'Triggers' => 'تریگرها',
|
|
||||||
'Add trigger' => 'افزودن تریگر',
|
|
||||||
'Trigger has been dropped.' => 'تریگر حذف شد',
|
|
||||||
'Trigger has been altered.' => 'تریگر ویرایش شد',
|
|
||||||
'Trigger has been created.' => 'تریگر ایجاد شد',
|
|
||||||
'Alter trigger' => 'ویرایش تریگر',
|
|
||||||
'Create trigger' => 'ایجاد تریگر',
|
|
||||||
'Time' => 'زمان',
|
|
||||||
'Event' => 'رویداد',
|
|
||||||
'Name' => 'نام',
|
|
||||||
|
|
||||||
'select' => 'انتخاب',
|
|
||||||
'Select' => 'انتخاب',
|
|
||||||
'Select data' => 'انتخاب داده',
|
|
||||||
'Functions' => 'توابع',
|
|
||||||
'Aggregation' => 'تجمع',
|
|
||||||
'Search' => 'جستجو',
|
|
||||||
'anywhere' => 'هرکجا',
|
|
||||||
'Search data in tables' => 'جستجوی داده در جدول',
|
|
||||||
'Sort' => 'مرتب کردن',
|
|
||||||
'descending' => 'نزولی',
|
|
||||||
'Limit' => 'محدودیت',
|
|
||||||
'Text length' => 'طول متن',
|
|
||||||
'Action' => 'عملیات',
|
|
||||||
'Unable to select the table' => 'قادر به انتخاب جدول نیستید',
|
|
||||||
'No rows.' => 'سطری وجود ندارد',
|
|
||||||
'%d row(s)' => array('%d سطر', '%d سطر'),
|
|
||||||
'Page' => 'صفحه',
|
|
||||||
'last' => 'آخری',
|
|
||||||
'whole result' => 'همه نتایج',
|
|
||||||
'%d byte(s)' => array('%d بایت', '%d بایت'),
|
|
||||||
|
|
||||||
'Import' => 'وارد کردن',
|
|
||||||
'%d row(s) have been imported.' => array('%d سطر وارد شد', '%d سطر وارد شد'),
|
|
||||||
|
|
||||||
// in-place editing in select
|
|
||||||
'Use edit link to modify this value.' => 'از لینک ویرایش برای ویرایش این مقدار استفاده کنید',
|
|
||||||
|
|
||||||
// %s can contain auto-increment value
|
|
||||||
'Item%s has been inserted.' => '%s آیتم درج شد',
|
|
||||||
'Item has been deleted.' => 'آیتم حذف شد',
|
|
||||||
'Item has been updated.' => 'آیتم بروز رسانی شد',
|
|
||||||
'%d item(s) have been affected.' => array('%d آیتم متاثر شد', '%d آیتم متاثر شد'),
|
|
||||||
'New item' => 'آیتم جدید',
|
|
||||||
'original' => 'اصلی',
|
|
||||||
// label for value '' in enum data type
|
|
||||||
'empty' => 'خالی',
|
|
||||||
'edit' => 'ویرایش',
|
|
||||||
'Edit' => 'ویرایش',
|
|
||||||
'Insert' => 'درج',
|
|
||||||
'Save' => 'ذخیره',
|
|
||||||
'Save and continue edit' => 'ذخیره و ادامه ویرایش',
|
|
||||||
'Save and insert next' => 'ذخیره و درج بعدی',
|
|
||||||
'Clone' => 'تکثیر',
|
|
||||||
'Delete' => 'حذف',
|
|
||||||
|
|
||||||
'E-mail' => 'پست الکترونیک',
|
|
||||||
'From' => 'فرستنده',
|
|
||||||
'Subject' => 'موضوع',
|
|
||||||
'Attachments' => 'پیوست ها',
|
|
||||||
'Send' => 'ارسال',
|
|
||||||
'%d e-mail(s) have been sent.' => array('%d ایمیل ارسال شد', '%d ایمیل ارسال شد'),
|
|
||||||
|
|
||||||
// data type descriptions
|
|
||||||
'Numbers' => 'اعداد',
|
|
||||||
'Date and time' => 'تاریخ و زمان',
|
|
||||||
'Strings' => 'رشته ها',
|
|
||||||
'Binary' => 'دودویی',
|
|
||||||
'Lists' => 'لیستها',
|
|
||||||
'Network' => 'شبکه',
|
|
||||||
'Geometry' => 'هندسه',
|
|
||||||
'Relations' => 'رابطه ها',
|
|
||||||
|
|
||||||
'Editor' => 'ویرایشگر',
|
|
||||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
|
||||||
'$1-$3-$5' => '$1-$3-$5',
|
|
||||||
// hint for date format - use language equivalents for day, month and year shortcuts
|
|
||||||
'[yyyy]-mm-dd' => '[yyyy]-mm-dd',
|
|
||||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
|
||||||
'now' => 'اکنون',
|
|
||||||
|
|
||||||
// general SQLite error in create, drop or rename database
|
|
||||||
'File exists.' => 'فایل موجود است',
|
|
||||||
'Please use one of the extensions %s.' => 'لطفا یکی از پسوندهای زیر را انتخاب نمائید %s ',
|
|
||||||
|
|
||||||
// PostgreSQL and MS SQL schema support
|
|
||||||
'Alter schema' => 'ویرایش ساختار',
|
|
||||||
'Create schema' => 'ایجاد ساختار',
|
|
||||||
'Schema has been dropped.' => 'ساختار حذف شد',
|
|
||||||
'Schema has been created.' => 'ساختار ایجاد شد',
|
|
||||||
'Schema has been altered.' => 'ساختار ویرایش شد',
|
|
||||||
'schema' => 'ساختار',
|
|
||||||
'Schema' => 'ساختار',
|
|
||||||
'Invalid schema.' => 'ساختار نامعتبر',
|
|
||||||
|
|
||||||
// PostgreSQL sequences support
|
|
||||||
'Sequences' => 'صف ها',
|
|
||||||
'Create sequence' => 'ایجاد صف',
|
|
||||||
'Sequence has been dropped.' => 'صف حذف شد',
|
|
||||||
'Sequence has been created.' => 'صف ایجاد شد',
|
|
||||||
'Sequence has been altered.' => 'صف ویرایش شد',
|
|
||||||
'Alter sequence' => 'ویرایش صف',
|
|
||||||
|
|
||||||
// PostgreSQL user types support
|
|
||||||
'User types' => 'انواع کاربر',
|
|
||||||
'Create type' => 'ایجاد نوع',
|
|
||||||
'Type has been dropped.' => 'نوع حذف شد',
|
|
||||||
'Type has been created.' => 'نوع ایجاد شد',
|
|
||||||
'Alter type' => 'ویرایش نوع',
|
|
||||||
);
|
|
||||||
@@ -1,32 +1,33 @@
|
|||||||
<?php
|
<?php
|
||||||
$translations = array(
|
$translations = array(
|
||||||
'Login' => 'Authentification',
|
'Login' => 'Authentification',
|
||||||
'Logout successful.' => 'Au revoir !',
|
'Logout successful.' => 'Aurevoir!',
|
||||||
'Invalid credentials.' => 'Authentification échouée.',
|
'Invalid credentials.' => 'Authentification échouée.',
|
||||||
'Server' => 'Serveur',
|
'Server' => 'Serveur',
|
||||||
'Username' => 'Utilisateur',
|
'Username' => 'Utilisateur',
|
||||||
'Password' => 'Mot de passe',
|
'Password' => 'Mot de passe',
|
||||||
'Select database' => 'Sélectionner la base de données',
|
'Select database' => 'Selectionner la base de donnée',
|
||||||
'Invalid database.' => 'Base de données invalide.',
|
'Invalid database.' => 'Base de donnée invalide.',
|
||||||
'Create new database' => 'Créer une base de données',
|
'Create new database' => 'Créer une base de donnée',
|
||||||
'Table has been dropped.' => 'La table a été effacée.',
|
'Table has been dropped.' => 'Table effacée.',
|
||||||
'Table has been altered.' => 'La table a été modifiée.',
|
'Table has been altered.' => 'Table modifiée.',
|
||||||
'Table has been created.' => 'La table a été créée.',
|
'Table has been created.' => 'Table créée.',
|
||||||
'Alter table' => 'Modifier la table',
|
'Alter table' => 'Modifier la table',
|
||||||
'Create table' => 'Créer une table',
|
'Create table' => 'Créer une table',
|
||||||
'Table name' => 'Nom de la table',
|
'Table name' => 'Nom de la table',
|
||||||
'engine' => 'moteur',
|
'engine' => 'moteur',
|
||||||
'collation' => 'interclassement',
|
'collation' => 'collation',
|
||||||
'Column name' => 'Nom de la colonne',
|
'Column name' => 'Nom de la colonne',
|
||||||
'Type' => 'Type',
|
'Type' => 'Type',
|
||||||
'Length' => 'Longueur',
|
'Length' => 'Longeur',
|
||||||
'Auto Increment' => 'Auto increment',
|
'Auto Increment' => 'Auto increment',
|
||||||
'Options' => 'Options',
|
'Options' => 'Options',
|
||||||
'Save' => 'Enregistrer',
|
'Save' => 'Sauvegarder',
|
||||||
'Drop' => 'Supprimer',
|
'Drop' => 'Effacer',
|
||||||
'Database has been created.' => 'La base de données a été créée.',
|
'Database has been dropped.' => 'Base de données effacée.',
|
||||||
'Database has been renamed.' => 'La base de données a été renommée.',
|
'Database has been created.' => 'Base de données créée.',
|
||||||
'Database has been altered.' => 'La base de données a été modifiée.',
|
'Database has been renamed.' => 'Base de données renommée.',
|
||||||
|
'Database has been altered.' => 'Base de données modifiée.',
|
||||||
'Alter database' => 'Modifier la base de données',
|
'Alter database' => 'Modifier la base de données',
|
||||||
'Create database' => 'Créer une base de données',
|
'Create database' => 'Créer une base de données',
|
||||||
'SQL command' => 'Requête SQL',
|
'SQL command' => 'Requête SQL',
|
||||||
@@ -34,14 +35,15 @@ $translations = array(
|
|||||||
'Logout' => 'Déconnexion',
|
'Logout' => 'Déconnexion',
|
||||||
'database' => 'base de données',
|
'database' => 'base de données',
|
||||||
'Use' => 'Utiliser',
|
'Use' => 'Utiliser',
|
||||||
'No tables.' => 'Aucune table.',
|
'No tables.' => 'Aucunes tables.',
|
||||||
'select' => 'select',
|
'select' => 'select',
|
||||||
'Create new table' => 'Créer une nouvelle table',
|
'Create new table' => 'Créer une table',
|
||||||
'Item has been deleted.' => 'L\'élément a été supprimé.',
|
'Item has been deleted.' => 'Élément supprimé.',
|
||||||
'Item has been updated.' => 'L\'élément a été modifié.',
|
'Item has been updated.' => 'Élément modifié.',
|
||||||
|
'Item has been inserted.' => 'Élément inseré.',
|
||||||
'Edit' => 'Modifier',
|
'Edit' => 'Modifier',
|
||||||
'Insert' => 'Insérer',
|
'Insert' => 'Insérer',
|
||||||
'Save and insert next' => 'Enr. et insérer prochain',
|
'Save and insert next' => 'Sauvegarder et insérer le prochain',
|
||||||
'Delete' => 'Effacer',
|
'Delete' => 'Effacer',
|
||||||
'Database' => 'Base de données',
|
'Database' => 'Base de données',
|
||||||
'Routines' => 'Routines',
|
'Routines' => 'Routines',
|
||||||
@@ -49,22 +51,22 @@ $translations = array(
|
|||||||
'Indexes' => 'Index',
|
'Indexes' => 'Index',
|
||||||
'Alter indexes' => 'Modifier les index',
|
'Alter indexes' => 'Modifier les index',
|
||||||
'Add next' => 'Ajouter le prochain',
|
'Add next' => 'Ajouter le prochain',
|
||||||
'Language' => 'Langue',
|
'Language' => 'Langues',
|
||||||
'Select' => 'Select',
|
'Select' => 'Select',
|
||||||
'New item' => 'Nouvel élément',
|
'New item' => 'Nouvel élément',
|
||||||
'Search' => 'Rechercher',
|
'Search' => 'Rechercher',
|
||||||
'Sort' => 'Trier',
|
'Sort' => 'Ordonner',
|
||||||
'descending' => 'décroissant',
|
'descending' => 'décroissant',
|
||||||
'Limit' => 'Limite',
|
'Limit' => 'Limit',
|
||||||
'No rows.' => 'Aucun résultat.',
|
'No rows.' => 'Aucun résultat.',
|
||||||
'Action' => 'Action',
|
'Action' => 'Action',
|
||||||
'edit' => 'modifier',
|
'edit' => 'modifier',
|
||||||
'Page' => 'Page',
|
'Page' => 'Page',
|
||||||
'Query executed OK, %d row(s) affected.' => array('Requête exécutée avec succès, %d ligne modifiée.', 'Requête exécutée avec succès, %d lignes modifiées.'),
|
'Query executed OK, %d row(s) affected.' => array('Requête exécutée, %d ligne affectée.', 'Requête exécutée, %d lignes affectées.'),
|
||||||
'Error in query' => 'Erreur dans la requête',
|
'Error in query' => 'Erreur dans la requête',
|
||||||
'Execute' => 'Exécuter',
|
'Execute' => 'Exécuter',
|
||||||
'Table' => 'Table',
|
'Table' => 'Table',
|
||||||
'Foreign keys' => 'Clés étrangères',
|
'Foreign keys' => 'Clé éxterne',
|
||||||
'Triggers' => 'Triggers',
|
'Triggers' => 'Triggers',
|
||||||
'View' => 'Vue',
|
'View' => 'Vue',
|
||||||
'Unable to select the table' => 'Impossible de sélectionner la table',
|
'Unable to select the table' => 'Impossible de sélectionner la table',
|
||||||
@@ -75,81 +77,81 @@ $translations = array(
|
|||||||
'No commands to execute.' => 'Aucune commande à exécuter.',
|
'No commands to execute.' => 'Aucune commande à exécuter.',
|
||||||
'Unable to upload a file.' => 'Impossible d\'importer le fichier.',
|
'Unable to upload a file.' => 'Impossible d\'importer le fichier.',
|
||||||
'File upload' => 'Importer un fichier',
|
'File upload' => 'Importer un fichier',
|
||||||
'File uploads are disabled.' => 'L\'importation de fichier est désactivée.',
|
'File uploads are disabled.' => 'Importation de fichier désactivé.',
|
||||||
'Routine has been called, %d row(s) affected.' => array('La routine a été exécutée, %d ligne modifiée.', 'La routine a été exécutée, %d lignes modifiées.'),
|
'Routine has been called, %d row(s) affected.' => array('Routine exécutée, %d ligne modifiée.', 'Routine exécutée, %d lignes modifiées.'),
|
||||||
'Call' => 'Appeler',
|
'Call' => 'Appeler',
|
||||||
'No extension' => 'Extension introuvable',
|
'No extension' => 'Extension introuvable',
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'Aucune des extensions PHP supportées (%s) n\'est disponible.',
|
'None of the supported PHP extensions (%s) are available.' => 'Aucune des extensions PHP supportées (%s) n\'est disponible.',
|
||||||
'Session support must be enabled.' => 'Veuillez activer les sessions.',
|
'Session support must be enabled.' => 'Veuillez activer les sessions.',
|
||||||
'Session expired, please login again.' => 'Session expirée, veuillez vous authentifier à nouveau.',
|
'Session expired, please login again.' => 'Session expirée, veuillez vous authentifier à nouveau.',
|
||||||
'Text length' => 'Longueur du texte',
|
'Text length' => 'Longueur du texte',
|
||||||
'Foreign key has been dropped.' => 'La clé étrangère a été effacée.',
|
'Foreign key has been dropped.' => 'Clé externe effacée.',
|
||||||
'Foreign key has been altered.' => 'La clé étrangère a été modifiée.',
|
'Foreign key has been altered.' => 'Clé externe modifiée.',
|
||||||
'Foreign key has been created.' => 'La clé étrangère a été créée.',
|
'Foreign key has been created.' => 'Clé externe créée.',
|
||||||
'Foreign key' => 'Clé étrangère',
|
'Foreign key' => 'Clé externe',
|
||||||
'Target table' => 'Table visée',
|
'Target table' => 'Table visée',
|
||||||
'Change' => 'Modifier',
|
'Change' => 'Modifier',
|
||||||
'Source' => 'Source',
|
'Source' => 'Source',
|
||||||
'Target' => 'Cible',
|
'Target' => 'Cible',
|
||||||
'Add column' => 'Ajouter une colonne',
|
'Add column' => 'Ajouter une colonne',
|
||||||
'Alter' => 'Modifier',
|
'Alter' => 'Modifier',
|
||||||
'Add foreign key' => 'Ajouter une clé étrangère',
|
'Add foreign key' => 'Ajouter une clé externe',
|
||||||
'ON DELETE' => 'ON DELETE',
|
'ON DELETE' => 'ON DELETE',
|
||||||
'ON UPDATE' => 'ON UPDATE',
|
'ON UPDATE' => 'ON UPDATE',
|
||||||
'Index Type' => 'Type d\'index',
|
'Index Type' => 'Type d\'index',
|
||||||
'Column (length)' => 'Colonne (longueur)',
|
'Column (length)' => 'Colonne (longueur)',
|
||||||
'View has been dropped.' => 'La vue a été effacée.',
|
'View has been dropped.' => 'Vue effacée.',
|
||||||
'View has been altered.' => 'La vue a été modifiée.',
|
'View has been altered.' => 'Vue modifiée.',
|
||||||
'View has been created.' => 'La vue a été créée.',
|
'View has been created.' => 'Vue créée.',
|
||||||
'Alter view' => 'Modifier une vue',
|
'Alter view' => 'Modifier une vue',
|
||||||
'Create view' => 'Créer une vue',
|
'Create view' => 'Créer une vue',
|
||||||
'Name' => 'Nom',
|
'Name' => 'Nom',
|
||||||
'Process list' => 'Liste des processus',
|
'Process list' => 'Liste de processus',
|
||||||
'%d process(es) have been killed.' => array('%d processus a été arrêté.', '%d processus ont été arrêtés.'),
|
'%d process(es) have been killed.' => array('%d processus arrêté.', '%d processus arrêtés.'),
|
||||||
'Kill' => 'Arrêter',
|
'Kill' => 'Arrêter',
|
||||||
'Parameter name' => 'Nom du paramètre',
|
'Parameter name' => 'Nom du Paramêtre',
|
||||||
'Database schema' => 'Schéma de la base de données',
|
'Database schema' => 'Schéma de la base de données',
|
||||||
'Create procedure' => 'Créer une procédure',
|
'Create procedure' => 'Créer une procédure',
|
||||||
'Create function' => 'Créer une fonction',
|
'Create function' => 'Créer une fonction',
|
||||||
'Routine has been dropped.' => 'La routine a été supprimée.',
|
'Routine has been dropped.' => 'Procédure éliminée.',
|
||||||
'Routine has been altered.' => 'La routine a été modifiée.',
|
'Routine has been altered.' => 'Procédure modifiée.',
|
||||||
'Routine has been created.' => 'La routine a été créée.',
|
'Routine has been created.' => 'Procédure créée.',
|
||||||
'Alter function' => 'Modifier la fonction',
|
'Alter function' => 'Modifier la fonction',
|
||||||
'Alter procedure' => 'Modifier la procédure',
|
'Alter procedure' => 'Modifier la procédure',
|
||||||
'Return type' => 'Type de retour',
|
'Return type' => 'Type de retour',
|
||||||
'Add trigger' => 'Ajouter un trigger',
|
'Add trigger' => 'Ajouter un trigger',
|
||||||
'Trigger has been dropped.' => 'Le trigger a été supprimé.',
|
'Trigger has been dropped.' => 'Trigger éliminé.',
|
||||||
'Trigger has been altered.' => 'Le trigger a été modifié.',
|
'Trigger has been altered.' => 'Trigger modifié.',
|
||||||
'Trigger has been created.' => 'Le trigger a été créé.',
|
'Trigger has been created.' => 'Trigger créé.',
|
||||||
'Alter trigger' => 'Modifier un trigger',
|
'Alter trigger' => 'Modifier un trigger',
|
||||||
'Create trigger' => 'Ajouter un trigger',
|
'Create trigger' => 'Ajouter un trigger',
|
||||||
'Time' => 'Temps',
|
'Time' => 'Temps',
|
||||||
'Event' => 'Évènement',
|
'Event' => 'Évènement',
|
||||||
'%d row(s)' => array('%d ligne', '%d lignes'),
|
'%d row(s)' => array('%d ligne', '%d lignes'),
|
||||||
'Remove' => 'Effacer',
|
'Remove' => 'Effacer',
|
||||||
'Are you sure?' => 'Êtes-vous certain ?',
|
'Are you sure?' => 'Êtes-vous certain?',
|
||||||
'Privileges' => 'Privilèges',
|
'Privileges' => 'Privilège',
|
||||||
'Create user' => 'Créer un utilisateur',
|
'Create user' => 'Créer un utilisateur',
|
||||||
'User has been dropped.' => 'L\'utilisateur a été effacé.',
|
'User has been dropped.' => 'Utilisateur éffacé.',
|
||||||
'User has been altered.' => 'L\'utilisateur a été modifié.',
|
'User has been altered.' => 'Utilisateur modifié.',
|
||||||
'User has been created.' => 'L\'utilisateur a été créé.',
|
'User has been created.' => 'Utilisateur créé.',
|
||||||
'Hashed' => 'Haché',
|
'Hashed' => 'Haché',
|
||||||
'Column' => 'Colonne',
|
'Column' => 'Colonne',
|
||||||
'Routine' => 'Routine',
|
'Routine' => 'Routine',
|
||||||
'Grant' => 'Grant',
|
'Grant' => 'Grant',
|
||||||
'Revoke' => 'Revoke',
|
'Revoke' => 'Revoke',
|
||||||
'%s version: %s through PHP extension %s' => 'Version de %s : %s via l\'extension PHP %s',
|
'%s version: %s through PHP extension %s' => 'Version de %s: %s utilisant l\'extension %s',
|
||||||
'Logged as: %s' => 'Authentifié en tant que : %s',
|
'Logged as: %s' => 'Authentifié en tant que %s',
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Données POST trop grandes. Réduisez la taille des données ou augmentez la valeur de %s dans la configuration de PHP.',
|
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Donnée POST trop grande . Réduire la taille des données ou modifier le %s dans la configuration de PHP.',
|
||||||
'Move up' => 'Déplacer vers le haut',
|
'Move up' => 'Déplacer vers le haut',
|
||||||
'Move down' => 'Déplacer vers le bas',
|
'Move down' => 'Déplacer vers le bas',
|
||||||
'Export' => 'Exporter',
|
'Export' => 'Exporter',
|
||||||
'Tables' => 'Tables',
|
'Tables' => 'Tables',
|
||||||
'Data' => 'Données',
|
'Data' => 'Donnée',
|
||||||
'Output' => 'Sortie',
|
'Output' => 'Sortie',
|
||||||
'open' => 'ouvrir',
|
'open' => 'ouvrir',
|
||||||
'save' => 'enregistrer',
|
'save' => 'sauvegarder',
|
||||||
'Format' => 'Format',
|
'Format' => 'Formatter',
|
||||||
'Functions' => 'Fonctions',
|
'Functions' => 'Fonctions',
|
||||||
'Aggregation' => 'Agrégation',
|
'Aggregation' => 'Agrégation',
|
||||||
'Event has been dropped.' => 'L\'évènement a été supprimé.',
|
'Event has been dropped.' => 'L\'évènement a été supprimé.',
|
||||||
@@ -160,112 +162,67 @@ $translations = array(
|
|||||||
'Start' => 'Démarrer',
|
'Start' => 'Démarrer',
|
||||||
'End' => 'Terminer',
|
'End' => 'Terminer',
|
||||||
'Every' => 'Chaque',
|
'Every' => 'Chaque',
|
||||||
'Status' => 'Statut',
|
'Status' => 'Status',
|
||||||
'On completion preserve' => 'Conserver quand complété',
|
'On completion preserve' => 'Conserver quand complété',
|
||||||
'Events' => 'Évènements',
|
'Events' => 'Évènement',
|
||||||
'Schedule' => 'Horaire',
|
'Schedule' => 'Horaire',
|
||||||
'At given time' => 'À un moment précis',
|
'At given time' => 'À un moment précis',
|
||||||
'Save and continue edit' => 'Enr. et continuer édition',
|
'Save and continue edit' => 'Sauvegarder et continuer l\'édition',
|
||||||
'original' => 'original',
|
'original' => 'original',
|
||||||
'Tables have been truncated.' => 'Les tables ont été tronquées.',
|
'Tables have been truncated.' => 'Les tables ont été tronquées.',
|
||||||
'Tables have been moved.' => 'Les tables ont été déplacées.',
|
'Tables have been moved.' => 'Les tables ont été déplacées.',
|
||||||
'Tables have been dropped.' => 'Les tables ont été effacées.',
|
'Tables have been dropped.' => 'Les tables ont été effacées.',
|
||||||
'Tables and views' => 'Tables et vues',
|
'Tables and views' => 'Tables et vues',
|
||||||
'Engine' => 'Moteur',
|
'Engine' => 'Moteur',
|
||||||
'Collation' => 'Interclassement',
|
'Collation' => 'Collation',
|
||||||
'Data Length' => 'Longueur des données',
|
'Data Length' => 'Longeur des données',
|
||||||
'Index Length' => 'Longueur de l\'index',
|
'Index Length' => 'Longeur de l\'index',
|
||||||
'Data Free' => 'Espace inutilisé',
|
'Data Free' => 'Vide',
|
||||||
'Rows' => 'Lignes',
|
'Rows' => 'Rangés',
|
||||||
',' => ',',
|
',' => ',',
|
||||||
'Analyze' => 'Analyser',
|
'Analyze' => 'Analyser',
|
||||||
'Optimize' => 'Optimiser',
|
'Optimize' => 'Opitimiser',
|
||||||
'Check' => 'Vérifier',
|
'Check' => 'Vérifier',
|
||||||
'Repair' => 'Réparer',
|
'Repair' => 'Réparer',
|
||||||
'Truncate' => 'Tronquer',
|
'Truncate' => 'Tronquer',
|
||||||
'Move to other database' => 'Déplacer vers une autre base de données',
|
'Move to other database' => 'Déplacer dans une autre base de données',
|
||||||
'Move' => 'Déplacer',
|
'Move' => 'Déplacer',
|
||||||
'%d item(s) have been affected.' => array('%d élément a été modifié.', '%d éléments ont été modifiés.'),
|
'%d item(s) have been affected.' => array('%d élément ont été modifié.', '%d éléments ont été modifié.'),
|
||||||
'whole result' => 'résultat entier',
|
'whole result' => 'résultat entier',
|
||||||
'Clone' => 'Cloner',
|
'Clone' => 'Cloner',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Le nombre maximum de champs est dépassé. Veuillez augmenter %s.',
|
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Le nombre de champs maximum est dépassé. Veuillez augmenter %s et %s.',
|
||||||
'Partition by' => 'Partitionner par',
|
'Partition by' => 'Partitionné par',
|
||||||
'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é.','%d lignes ont été importé.'),
|
||||||
'anywhere' => 'n\'importe où',
|
'anywhere' => 'n\'importe où',
|
||||||
|
'CSV Import' => 'Importation CVS',
|
||||||
'Import' => 'Importer',
|
'Import' => 'Importer',
|
||||||
'Stop on error' => 'Arrêter en cas d\'erreur',
|
'Stop on error' => 'Arrêt sur erreur',
|
||||||
'%.3f s' => '%.3f s',
|
'%.3f s' => '%.3f s',
|
||||||
'$1-$3-$5' => '$5/$3/$1',
|
'$1-$3-$5' => '$5/$3/$1',
|
||||||
'[yyyy]-mm-dd' => 'jj/mm/[aaaa]',
|
'[yyyy]-mm-dd' => 'jj/mm/[aaaa]',
|
||||||
'History' => 'Historique',
|
'History' => 'Historique',
|
||||||
'Variables' => 'Variables',
|
'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.' => 'Les colonnes de source et de destination doivent être du même type, il doit y avoir un index sur les colonnes de destination et les données référencées doivent exister.',
|
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Les colonnes selectionnées et les colonnes de destination doivent être du même type, il doit y avoir un index sur les colonnes de destination et les données de référence doivent exister.',
|
||||||
'Relations' => 'Relations',
|
'Relations' => 'Relations',
|
||||||
'Run file' => 'Exécuter le fichier',
|
'Run file' => 'Executer le fichier',
|
||||||
'Clear' => 'Effacer',
|
'Clear' => 'Effacer',
|
||||||
'Maximum allowed file size is %sB.' => 'La taille maximale des fichiers est de %sB.',
|
'Maximum allowed file size is %sB.' => 'Taille maximale des fichiers est de %sB.',
|
||||||
'Numbers' => 'Nombres',
|
'Numbers' => 'Nombres',
|
||||||
'Date and time' => 'Date et heure',
|
'Date and time' => 'Date et heure',
|
||||||
'Strings' => 'Chaînes',
|
'Strings' => 'Chaînes',
|
||||||
'Binary' => 'Binaires',
|
'Binary' => 'Binaires',
|
||||||
'Lists' => 'Listes',
|
'Lists' => 'Listes',
|
||||||
'Editor' => 'Éditeur',
|
'Editor' => 'Editeur',
|
||||||
'E-mail' => 'Courriel',
|
'E-mail' => 'Courriel',
|
||||||
'From' => 'De',
|
'From' => 'De',
|
||||||
'Subject' => 'Sujet',
|
'Subject' => 'Sujet',
|
||||||
'Send' => 'Envoyer',
|
'Send' => 'Envoyer',
|
||||||
'%d e-mail(s) have been sent.' => array('%d message a été envoyé.', '%d messages ont été envoyés.'),
|
'%d e-mail(s) have been sent.' => array('%d message a été envoyé.', '%d messages ont été envoyés.'),
|
||||||
'Webserver file %s' => 'Fichier %s du serveur Web',
|
'Webserver file %s' => '%s fichier du serveur Web',
|
||||||
'File does not exist.' => 'Le fichier est introuvable.',
|
'File does not exist.' => 'Le fichier est introuvable.',
|
||||||
'%d in total' => '%d au total',
|
'%d in total' => '%d au total',
|
||||||
'Permanent login' => 'Authentification permanente',
|
'Permanent login' => 'Authentification permanente',
|
||||||
'Databases have been dropped.' => 'Les bases de données ont été supprimées.',
|
|
||||||
'Database has been dropped.' => 'La base de données a été supprimée.',
|
|
||||||
'Search data in tables' => 'Rechercher dans les tables',
|
|
||||||
'schema' => 'schéma',
|
|
||||||
'Schema' => 'Schéma',
|
|
||||||
'Alter schema' => 'Modifier le schéma',
|
|
||||||
'Create schema' => 'Créer un schéma',
|
|
||||||
'Schema has been dropped.' => 'Le schéma a été supprimé.',
|
|
||||||
'Schema has been created.' => 'Le schéma a été créé.',
|
|
||||||
'Schema has been altered.' => 'Le schéma a été modifié.',
|
|
||||||
'Sequences' => 'Séquences',
|
|
||||||
'Create sequence' => 'Créer une séquence',
|
|
||||||
'Alter sequence' => 'Modifier la séquence',
|
|
||||||
'Sequence has been dropped.' => 'La séquence a été supprimée.',
|
|
||||||
'Sequence has been created.' => 'La séquence a été créée.',
|
|
||||||
'Sequence has been altered.' => 'La séquence a été modifiée.',
|
|
||||||
'User types' => 'Types utilisateur',
|
|
||||||
'Create type' => 'Créer un type',
|
|
||||||
'Alter type' => 'Modifier le type',
|
|
||||||
'Type has been dropped.' => 'Le type a été supprimé.',
|
|
||||||
'Type has been created.' => 'Le type a été créé.',
|
|
||||||
'Ctrl+click on a value to modify it.' => 'Ctrl+cliquez sur une valeur pour la modifier.',
|
|
||||||
'Use edit link to modify this value.' => 'Utilisez le lien "modifier" pour modifier cette valeur.',
|
|
||||||
'last' => 'dernière',
|
|
||||||
'From server' => 'Depuis le serveur',
|
|
||||||
'System' => 'Système',
|
|
||||||
'Select data' => 'Afficher les données',
|
|
||||||
'Show structure' => 'Afficher la structure',
|
|
||||||
'empty' => 'vide',
|
|
||||||
'Network' => 'Réseau',
|
|
||||||
'Geometry' => 'Géométrie',
|
|
||||||
'File exists.' => 'Le fichier existe.',
|
|
||||||
'Attachments' => 'Pièces jointes',
|
|
||||||
'Item%s has been inserted.' => 'L\'élément%s a été inséré.',
|
|
||||||
'now' => 'maintenant',
|
|
||||||
'%d query(s) executed OK.' => array('%d requête exécutée avec succès.', '%d requêtes exécutées avec succès.'),
|
|
||||||
'Show only errors' => 'Montrer seulement les erreurs',
|
|
||||||
'Refresh' => 'Rafraîchir',
|
|
||||||
'Invalid schema.' => 'Schéma invalide.',
|
|
||||||
'Please use one of the extensions %s.' => 'Veuillez utiliser l\'une des extensions %s.',
|
|
||||||
'ltr' => 'ltr',
|
|
||||||
'Tables have been copied.' => 'Les tables ont été copiées.',
|
|
||||||
'Copy' => 'Copier',
|
|
||||||
'Permanent link' => 'Lien permanent',
|
|
||||||
'Edit all' => 'Tout modifier',
|
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,270 +0,0 @@
|
|||||||
<?php
|
|
||||||
$translations = array(
|
|
||||||
'Login' => 'Belépés',
|
|
||||||
'Logout successful.' => 'Sikeres kilépés.',
|
|
||||||
'Invalid credentials.' => 'Érvénytelen adatok.',
|
|
||||||
'Server' => 'Szerver',
|
|
||||||
'Username' => 'Felhasználó',
|
|
||||||
'Password' => 'Jelszó',
|
|
||||||
'Select database' => 'Adatbázis kiválasztása',
|
|
||||||
'Invalid database.' => 'Érvénytelen adatbázis.',
|
|
||||||
'Create new database' => 'Új adatbázis',
|
|
||||||
'Table has been dropped.' => 'A tábla eldobva.',
|
|
||||||
'Table has been altered.' => 'A tábla módosult.',
|
|
||||||
'Table has been created.' => 'A tábla létrejött.',
|
|
||||||
'Alter table' => 'Tábla módosítása',
|
|
||||||
'Create table' => 'Tábla létrehozása',
|
|
||||||
'Table name' => 'Tábla név',
|
|
||||||
'engine' => 'motor',
|
|
||||||
'collation' => 'egybevetés',
|
|
||||||
'Column name' => 'Oszlop neve',
|
|
||||||
'Type' => 'Típus',
|
|
||||||
'Length' => 'Hossz',
|
|
||||||
'Auto Increment' => 'Automatikus növelés',
|
|
||||||
'Options' => 'Opciók',
|
|
||||||
'Save' => 'Mentés',
|
|
||||||
'Drop' => 'Eldob',
|
|
||||||
'Database has been dropped.' => 'Az adatbázis eldobva.',
|
|
||||||
'Database has been created.' => 'Az adatbázis létrejött.',
|
|
||||||
'Database has been renamed.' => 'Az adadtbázis átnevezve.',
|
|
||||||
'Database has been altered.' => 'Az adatbázis módosult.',
|
|
||||||
'Alter database' => 'Adatbázis módosítása',
|
|
||||||
'Create database' => 'Adatbázis létrehozása',
|
|
||||||
'SQL command' => 'SQL parancs',
|
|
||||||
'Dump' => 'Exportálás',
|
|
||||||
'Logout' => 'Kilépés',
|
|
||||||
'database' => 'adatbázis',
|
|
||||||
'Use' => 'Használ',
|
|
||||||
'No tables.' => 'Nincs tábla.',
|
|
||||||
'select' => 'kiválasztás',
|
|
||||||
'Create new table' => 'Új tábla',
|
|
||||||
'Item has been deleted.' => 'A tétel törölve.',
|
|
||||||
'Item has been updated.' => 'A tétel frissítve.',
|
|
||||||
'Item%s has been inserted.' => '%s tétel beszúrva.',
|
|
||||||
'Edit' => 'Szerkeszt',
|
|
||||||
'Insert' => 'Beszúr',
|
|
||||||
'Save and insert next' => 'Mentés és újat beszúr',
|
|
||||||
'Delete' => 'Törlés',
|
|
||||||
'Database' => 'Adatbázis',
|
|
||||||
'Routines' => 'Rutinok',
|
|
||||||
'Indexes have been altered.' => 'Az indexek megváltoztak.',
|
|
||||||
'Indexes' => 'Indexek',
|
|
||||||
'Alter indexes' => 'Index módosítása',
|
|
||||||
'Add next' => 'Következő hozzáadása',
|
|
||||||
'Language' => 'Nyelv',
|
|
||||||
'Select' => 'Kiválasztás',
|
|
||||||
'New item' => 'Új tétel',
|
|
||||||
'Search' => 'Keresés',
|
|
||||||
'Sort' => 'Sorba rendezés',
|
|
||||||
'descending' => 'csökkenő',
|
|
||||||
'Limit' => 'korlát',
|
|
||||||
'No rows.' => 'Nincs megjeleníthető eredmény.',
|
|
||||||
'Action' => 'Művelet',
|
|
||||||
'edit' => 'szerkeszt',
|
|
||||||
'Page' => 'oldal',
|
|
||||||
'Query executed OK, %d row(s) affected.' => array('Lekérdezés sikeresen végrehajtva, %d sor érintett.', 'Lekérdezés sikeresen végrehajtva, %d sor érintett.', 'Lekérdezés sikeresen végrehajtva, %d sor érintett.'),
|
|
||||||
'Error in query' => 'Hiba a lekérdezésben',
|
|
||||||
'Execute' => 'Végrehajt',
|
|
||||||
'Table' => 'Tábla',
|
|
||||||
'Foreign keys' => 'Idegen kulcs',
|
|
||||||
'Triggers' => 'Trigger',
|
|
||||||
'View' => 'Nézet',
|
|
||||||
'Unable to select the table' => 'Nem tudom kiválasztani a táblát',
|
|
||||||
'Invalid CSRF token. Send the form again.' => 'Érvénytelen CSRF azonosító. Küldd újra az űrlapot.',
|
|
||||||
'Comment' => 'Megjegyzés',
|
|
||||||
'Default values' => 'Alapértelmezett értékek',
|
|
||||||
'%d byte(s)' => array('%d bájt', '%d bájt', '%d bájt'),
|
|
||||||
'No commands to execute.' => 'Nincs végrehajtható parancs.',
|
|
||||||
'Unable to upload a file.' => 'Nem tudom feltölteni a fájlt.',
|
|
||||||
'File upload' => 'Fájl feltöltése',
|
|
||||||
'File uploads are disabled.' => 'A fájl feltöltés le van tiltva.',
|
|
||||||
'Routine has been called, %d row(s) affected.' => array('Rutin meghívva, %d sor érintett.', 'Rutin meghívva, %d sor érintett.', 'Rutin meghívva, %d sor érintett.'),
|
|
||||||
'Call' => 'Meghív',
|
|
||||||
'No extension' => 'Nincs kiterjesztés',
|
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'Nincs egy elérhető támogatott PHP kiterjesztés (%s) sem.',
|
|
||||||
'Session support must be enabled.' => 'A munkameneteknek (session) engedélyezve kell lennie.',
|
|
||||||
'Session expired, please login again.' => 'Munkamenet lejárt, jelentkezz be újra.',
|
|
||||||
'Text length' => 'Szöveg hossz',
|
|
||||||
'Foreign key has been dropped.' => 'Idegen kulcs eldobva.',
|
|
||||||
'Foreign key has been altered.' => 'Idegen kulcs módosult.',
|
|
||||||
'Foreign key has been created.' => 'Idegen kulcs létrejött.',
|
|
||||||
'Foreign key' => 'Idegen kulcs',
|
|
||||||
'Target table' => 'Cél tábla',
|
|
||||||
'Change' => 'Változtat',
|
|
||||||
'Source' => 'Forrás',
|
|
||||||
'Target' => 'Cél',
|
|
||||||
'Add column' => 'Oszlop hozzáadása',
|
|
||||||
'Alter' => 'Módosítás',
|
|
||||||
'Add foreign key' => 'Idegen kulcs hozzadása',
|
|
||||||
'ON DELETE' => 'törléskor',
|
|
||||||
'ON UPDATE' => 'frissítéskor',
|
|
||||||
'Index Type' => 'Index típusa',
|
|
||||||
'Column (length)' => 'Oszop (méret)',
|
|
||||||
'View has been dropped.' => 'A nézet eldobva.',
|
|
||||||
'View has been altered.' => 'A nézet módosult.',
|
|
||||||
'View has been created.' => 'A nézet létrejött.',
|
|
||||||
'Alter view' => 'Nézet módosítása',
|
|
||||||
'Create view' => 'Nézet létrehozása',
|
|
||||||
'Name' => 'Név',
|
|
||||||
'Process list' => 'Folyamatok',
|
|
||||||
'%d process(es) have been killed.' => array('%d folyamat leállítva.', '%d folyamat leállítva.', '%d folyamat leállítva.'),
|
|
||||||
'Kill' => 'Leállít',
|
|
||||||
'Parameter name' => 'Paraméter neve',
|
|
||||||
'Database schema' => 'Adatbázis séma',
|
|
||||||
'Create procedure' => 'Eljárás létrehozása',
|
|
||||||
'Create function' => 'Funkció létrehozása',
|
|
||||||
'Routine has been dropped.' => 'A rutin eldobva.',
|
|
||||||
'Routine has been altered.' => 'A rutin módosult.',
|
|
||||||
'Routine has been created.' => 'A rutin létrejött.',
|
|
||||||
'Alter function' => 'Funkció módosítása',
|
|
||||||
'Alter procedure' => 'Eljárás módosítása',
|
|
||||||
'Return type' => 'Visszatérési érték',
|
|
||||||
'Add trigger' => 'Trigger hozzáadása',
|
|
||||||
'Trigger has been dropped.' => 'A trigger eldobva.',
|
|
||||||
'Trigger has been altered.' => 'A trigger módosult.',
|
|
||||||
'Trigger has been created.' => 'A trigger létrejött.',
|
|
||||||
'Alter trigger' => 'Trigger módosítása',
|
|
||||||
'Create trigger' => 'Trigger létrehozása',
|
|
||||||
'Time' => 'Idő',
|
|
||||||
'Event' => 'Esemény',
|
|
||||||
'%s version: %s through PHP extension %s' => '%s verzió: %s, PHP: %s',
|
|
||||||
'%d row(s)' => array('%d sor', '%d sor', '%d sor'),
|
|
||||||
'Remove' => 'Eltávolítás',
|
|
||||||
'Are you sure?' => 'Biztos benne?',
|
|
||||||
'Privileges' => 'Privilégiumok',
|
|
||||||
'Create user' => 'Felhasználó hozzáadása',
|
|
||||||
'User has been dropped.' => 'A felhasználó eldobva.',
|
|
||||||
'User has been altered.' => 'A felhasználó módosult.',
|
|
||||||
'User has been created.' => 'A felhasználó létrejött.',
|
|
||||||
'Hashed' => 'Hashed',
|
|
||||||
'Column' => 'Oszlop',
|
|
||||||
'Routine' => 'Rutin',
|
|
||||||
'Grant' => 'Engedélyezés',
|
|
||||||
'Revoke' => 'Visszavonás',
|
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Túl sok a POST adat! Csökkentsd az adat méretét, vagy növeld a %s beállítást.',
|
|
||||||
'Logged as: %s' => 'Belépve: %s',
|
|
||||||
'Move up' => 'Felfelé',
|
|
||||||
'Move down' => 'Lefelé',
|
|
||||||
'Functions' => 'Funkciók',
|
|
||||||
'Aggregation' => 'Aggregálás',
|
|
||||||
'Export' => 'Export',
|
|
||||||
'Output' => 'Kimenet',
|
|
||||||
'open' => 'megnyit',
|
|
||||||
'save' => 'ment',
|
|
||||||
'Format' => 'Formátum',
|
|
||||||
'Tables' => 'Táblák',
|
|
||||||
'Data' => 'Adat',
|
|
||||||
'Event has been dropped.' => 'Az esemény eldobva.',
|
|
||||||
'Event has been altered.' => 'Az esemény módosult.',
|
|
||||||
'Event has been created.' => 'Az esemény létrejött.',
|
|
||||||
'Alter event' => 'Esemény módosítása',
|
|
||||||
'Create event' => 'Esemény létrehozása',
|
|
||||||
'At given time' => 'Megadott időben',
|
|
||||||
'Every' => 'Minden',
|
|
||||||
'Events' => 'Esemény',
|
|
||||||
'Schedule' => 'Ütemzés',
|
|
||||||
'Start' => 'Kezd',
|
|
||||||
'End' => 'Vége',
|
|
||||||
'Status' => 'Állapot',
|
|
||||||
'On completion preserve' => 'Befejezéskor megőrzi',
|
|
||||||
'Tables and views' => 'Táblák és nézetek',
|
|
||||||
'Data Length' => 'Méret',
|
|
||||||
'Index Length' => 'Index hossz',
|
|
||||||
'Data Free' => 'Adat szabad',
|
|
||||||
'Collation' => 'Egybevetés',
|
|
||||||
'Analyze' => 'Elemzés',
|
|
||||||
'Optimize' => 'Optimalizál',
|
|
||||||
'Check' => 'Ellenőrzés',
|
|
||||||
'Repair' => 'Javít',
|
|
||||||
'Truncate' => 'Felszabadít',
|
|
||||||
'Tables have been truncated.' => 'A tábla felszabadítva.',
|
|
||||||
'Rows' => 'Oszlop',
|
|
||||||
',' => ' ',
|
|
||||||
'Tables have been moved.' => 'Táblák áthelyezve.',
|
|
||||||
'Move to other database' => 'Áthelyezés másik adatbázisba',
|
|
||||||
'Move' => 'Áthelyez',
|
|
||||||
'Engine' => 'Motor',
|
|
||||||
'Save and continue edit' => 'Mentés és szerkesztés folytatása',
|
|
||||||
'original' => 'eredeti',
|
|
||||||
'%d item(s) have been affected.' => array('%d tétel érintett.', '%d tétel érintett.', '%d tétel érintett.'),
|
|
||||||
'whole result' => 'összes eredményt mutatása',
|
|
||||||
'Tables have been dropped.' => 'Táblák eldobva.',
|
|
||||||
'Clone' => 'Klónoz',
|
|
||||||
'Partition by' => 'Particionálás ezzel',
|
|
||||||
'Partitions' => 'Particiók',
|
|
||||||
'Partition name' => 'Partició neve',
|
|
||||||
'Values' => 'Értékek',
|
|
||||||
'%d row(s) have been imported.' => array('%d sor importálva.', '%d sor importálva.', '%d sor importálva.'),
|
|
||||||
'Import' => 'Importálás',
|
|
||||||
'Show structure' => 'Struktúra',
|
|
||||||
'Select data' => 'Tartalom',
|
|
||||||
'Stop on error' => 'Hiba esetén megáll',
|
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'A maximális mezőszámot elérted. Növeld meg ezeket: %s.',
|
|
||||||
'anywhere' => 'bárhol',
|
|
||||||
'%.3f s' => '%.3f másodperc',
|
|
||||||
'$1-$3-$5' => '$6.$4.$1',
|
|
||||||
'[yyyy]-mm-dd' => '[yyyy].m.d',
|
|
||||||
'History' => 'Történet',
|
|
||||||
'Variables' => 'Változók',
|
|
||||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'A forrás és cél oszlopoknak azonos típusúak legyenek, a cél oszlopok indexeltek legyenek, és a hivatkozott adatnak léteznie kell.',
|
|
||||||
'E-mail' => 'E-mail',
|
|
||||||
'From' => 'Feladó',
|
|
||||||
'Subject' => 'Tárgy',
|
|
||||||
'Send' => 'Küldés',
|
|
||||||
'%d e-mail(s) have been sent.' => array('%d e-mail elküldve.', '%d e-mail elküldve.', '%d e-mail elküldve.'),
|
|
||||||
'Run file' => 'Fájl futtatása',
|
|
||||||
'Numbers' => 'Szám',
|
|
||||||
'Date and time' => 'Dátum és idő',
|
|
||||||
'Strings' => 'Szöveg',
|
|
||||||
'Binary' => 'Bináris',
|
|
||||||
'Lists' => 'Lista',
|
|
||||||
'Relations' => 'Reláció',
|
|
||||||
'Maximum allowed file size is %sB.' => 'A maximális fájlméret %s B.',
|
|
||||||
'Clear' => 'Törlés',
|
|
||||||
'Editor' => 'Szerkesztő',
|
|
||||||
'Webserver file %s' => 'Webszerver fájl %s',
|
|
||||||
'File does not exist.' => 'A fájl nem létezik.',
|
|
||||||
'Permanent login' => 'Emlékezz rám',
|
|
||||||
'%d in total' => 'összesen %d',
|
|
||||||
'Attachments' => 'Csatolmány',
|
|
||||||
'System' => 'Adatbázis',
|
|
||||||
'last' => 'utolsó',
|
|
||||||
'Network' => 'Hálózat',
|
|
||||||
'Geometry' => 'Geometria',
|
|
||||||
'Databases have been dropped.' => 'Adatbázis eldobva.',
|
|
||||||
'File exists.' => 'A fájl létezik.',
|
|
||||||
'Use edit link to modify this value.' => 'Használd a szerkesztés hivatkozást ezen érték módosításához.',
|
|
||||||
'Alter schema' => 'Séma módosítása',
|
|
||||||
'Create schema' => 'Séma létrehozása',
|
|
||||||
'Schema has been dropped.' => 'Séma eldobva.',
|
|
||||||
'Schema has been created.' => 'Séma létrejött.',
|
|
||||||
'Schema has been altered.' => 'Séma módosult.',
|
|
||||||
'schema' => 'séma',
|
|
||||||
'Schema' => 'Séma',
|
|
||||||
'Sequences' => 'Sorozatok',
|
|
||||||
'Create sequence' => 'Sorozat létrehozása',
|
|
||||||
'Sequence has been dropped.' => 'Sorozat eldobva.',
|
|
||||||
'Sequence has been created.' => 'Sorozat létrejött.',
|
|
||||||
'Sequence has been altered.' => 'Sorozat módosult.',
|
|
||||||
'Alter sequence' => 'Sorozat módosítása',
|
|
||||||
'User types' => 'Felhasználói típus',
|
|
||||||
'Create type' => 'Típus létrehozása',
|
|
||||||
'Type has been dropped.' => 'Típus eldobva.',
|
|
||||||
'Type has been created.' => 'Típus létrehozva.',
|
|
||||||
'Alter type' => 'Típus módosítása',
|
|
||||||
'Search data in tables' => 'Keresés a táblákban',
|
|
||||||
'From server' => 'Szerverről',
|
|
||||||
'empty' => 'üres',
|
|
||||||
'now' => 'most',
|
|
||||||
'%d query(s) executed OK.' => '%d sikeres lekérdezés.',
|
|
||||||
'Show only errors' => 'Csak a hibák mutatása',
|
|
||||||
'Refresh' => 'Frissítés',
|
|
||||||
'Invalid schema.' => 'Érvénytelen séma.',
|
|
||||||
'Please use one of the extensions %s.' => 'Használja a(z) %s kiterjesztést.',
|
|
||||||
'ltr' => 'ltr',
|
|
||||||
'Tables have been copied.' => 'Táblák átmásolva.',
|
|
||||||
'Copy' => 'Másolás',
|
|
||||||
'Permanent link' => 'Hivatkozás',
|
|
||||||
'Edit all' => 'Összes szerkesztése',
|
|
||||||
'HH:MM:SS' => 'óó:pp:mm',
|
|
||||||
);
|
|
||||||
@@ -1,319 +0,0 @@
|
|||||||
<?php
|
|
||||||
$translations = array(
|
|
||||||
// label for database system selection (MySQL, SQLite, ...)
|
|
||||||
'System' => 'Sistem',
|
|
||||||
'Server' => 'Server',
|
|
||||||
'Username' => 'Pengguna',
|
|
||||||
'Password' => 'Sandi',
|
|
||||||
'Permanent login' => 'Masuk permanen',
|
|
||||||
'Login' => 'Masuk',
|
|
||||||
'Logout' => 'Keluar',
|
|
||||||
'Logged as: %s' => 'Masuk sebagai: %s',
|
|
||||||
'Logout successful.' => 'Berhasil keluar.',
|
|
||||||
'Invalid credentials.' => 'Akses invalid.',
|
|
||||||
'Language' => 'Bahasa',
|
|
||||||
'Invalid CSRF token. Send the form again.' => 'Token CSRF invalid. Kirim ulang formulir.',
|
|
||||||
'No extension' => 'Ekstensi tidak tersedia',
|
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'Ekstensi PHP yang didukung (%s) tidak tersedia.',
|
|
||||||
'Session support must be enabled.' => 'Dukungan sesi harus aktif.',
|
|
||||||
'Session expired, please login again.' => 'Sesi habis, silakan masuk lagi.',
|
|
||||||
'%s version: %s through PHP extension %s' => 'Versi %s: %s dengan ekstensi PHP %s',
|
|
||||||
'Refresh' => 'Segarkan',
|
|
||||||
|
|
||||||
// text direction - 'ltr' or 'rtl'
|
|
||||||
'ltr' => 'ltr',
|
|
||||||
|
|
||||||
'Privileges' => 'Privilese',
|
|
||||||
'Create user' => 'Buat pengguna',
|
|
||||||
'User has been dropped.' => 'Pengguna berhasil dihapus.',
|
|
||||||
'User has been altered.' => 'Pengguna berhasil diubah.',
|
|
||||||
'User has been created.' => 'Pengguna berhasil dibuat.',
|
|
||||||
'Hashed' => 'Hashed*',
|
|
||||||
'Column' => 'Kolom',
|
|
||||||
'Routine' => 'Rutin',
|
|
||||||
'Grant' => 'Beri',
|
|
||||||
'Revoke' => 'Tarik',
|
|
||||||
|
|
||||||
'Process list' => 'Daftar proses',
|
|
||||||
'%d process(es) have been killed.' => '%d proses berhasil dihentikan.',
|
|
||||||
'Kill' => 'Hentikan',
|
|
||||||
|
|
||||||
'Variables' => 'Variabel',
|
|
||||||
'Status' => 'Status',
|
|
||||||
|
|
||||||
'SQL command' => 'Perintah SQL',
|
|
||||||
'%d query(s) executed OK.' => '%d kueri berhasil dijalankan.',
|
|
||||||
'Query executed OK, %d row(s) affected.' => 'Kueri berhasil, %d baris terpengaruh.',
|
|
||||||
'No commands to execute.' => 'Tiada perintah untuk dijalankan.',
|
|
||||||
'Error in query' => 'Kesalahan dalam kueri',
|
|
||||||
'Execute' => 'Jalankan',
|
|
||||||
'Stop on error' => 'Hentikan pada kesalahan',
|
|
||||||
'Show only errors' => 'Hanya tampilkan kesalahan',
|
|
||||||
// sprintf() format for time of the command
|
|
||||||
'%.3f s' => '%.3f s',
|
|
||||||
'History' => 'Riwayat',
|
|
||||||
'Clear' => 'Bersihkan',
|
|
||||||
'Edit all' => 'Edit semua',
|
|
||||||
|
|
||||||
'File upload' => 'Unggah berkas',
|
|
||||||
'From server' => 'Dari server',
|
|
||||||
'Webserver file %s' => 'Berkas server web %s',
|
|
||||||
'Run file' => 'Jalankan berkas',
|
|
||||||
'File does not exist.' => 'Berkas tidak ditemukan.',
|
|
||||||
'File uploads are disabled.' => 'Pengunggahan berkas dimatikan.',
|
|
||||||
'Unable to upload a file.' => 'Tidak dapat mengunggah berkas.',
|
|
||||||
'Maximum allowed file size is %sB.' => 'Besar berkas yang diizinkan adalah %s bita.',
|
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Data POST terlalu besar. Kurangi data atau perbesar pengarah konfigurasi %s.',
|
|
||||||
|
|
||||||
'Export' => 'Ekspor',
|
|
||||||
'Dump' => 'Ekspor',
|
|
||||||
'Output' => 'Hasil',
|
|
||||||
'open' => 'buka',
|
|
||||||
'save' => 'simpan',
|
|
||||||
'Format' => 'Format',
|
|
||||||
'Data' => 'Data',
|
|
||||||
|
|
||||||
'Database' => 'Basis data',
|
|
||||||
'database' => 'basis data',
|
|
||||||
'Use' => 'Gunakan',
|
|
||||||
'Select database' => 'Pilih basis data',
|
|
||||||
'Invalid database.' => 'Basis data invalid.',
|
|
||||||
'Create new database' => 'Buat basis data baru',
|
|
||||||
'Database has been dropped.' => 'Basis data berhasil dihapus.',
|
|
||||||
'Databases have been dropped.' => 'Basis data berhasil dihapus.',
|
|
||||||
'Database has been created.' => 'Basis data berhasil dibuat.',
|
|
||||||
'Database has been renamed.' => 'Basis data berhasil diganti nama.',
|
|
||||||
'Database has been altered.' => 'Basis data berhasil diubah.',
|
|
||||||
'Alter database' => 'Ubah basis data',
|
|
||||||
'Create database' => 'Buat basis data',
|
|
||||||
'Database schema' => 'Skema basis data',
|
|
||||||
|
|
||||||
// link to current database schema layout
|
|
||||||
'Permanent link' => 'Tautan permanen',
|
|
||||||
|
|
||||||
// thousands separator - must contain single byte
|
|
||||||
',' => '.',
|
|
||||||
'Engine' => 'Mesin',
|
|
||||||
'Collation' => 'Kolasi',
|
|
||||||
'Data Length' => 'Panjang Data',
|
|
||||||
'Index Length' => 'Panjang Indeks',
|
|
||||||
'Data Free' => 'Data Bebas',
|
|
||||||
'Rows' => 'Baris',
|
|
||||||
'%d in total' => '%d total',
|
|
||||||
'Analyze' => 'Analisis',
|
|
||||||
'Optimize' => 'Optimalkan',
|
|
||||||
'Check' => 'Periksa',
|
|
||||||
'Repair' => 'Perbaiki',
|
|
||||||
'Truncate' => 'Kosongkan',
|
|
||||||
'Tables have been truncated.' => 'Tabel berhasil dikosongkan.',
|
|
||||||
'Move to other database' => 'Pindahkan ke basis data lain',
|
|
||||||
'Move' => 'Pindahkan',
|
|
||||||
'Tables have been moved.' => 'Tabel berhasil dipindahkan.',
|
|
||||||
'Copy' => 'Salin',
|
|
||||||
'Tables have been copied.' => 'Tabel berhasil disalin.',
|
|
||||||
|
|
||||||
'Routines' => 'Rutin',
|
|
||||||
'Routine has been called, %d row(s) affected.' => array('Rutin telah dipanggil, %d baris terpengaruh.', 'Rutin telah dipanggil, %d baris terpengaruh'),
|
|
||||||
'Call' => 'Panggilan',
|
|
||||||
'Parameter name' => 'Nama paramater',
|
|
||||||
'Create procedure' => 'Buat prosedur',
|
|
||||||
'Create function' => 'Buat fungsi',
|
|
||||||
'Routine has been dropped.' => 'Rutin berhasil dihapus.',
|
|
||||||
'Routine has been altered.' => 'Rutin berhasil diubah.',
|
|
||||||
'Routine has been created.' => 'Rutin berhasil dibuat.',
|
|
||||||
'Alter function' => 'Ubah fungsi',
|
|
||||||
'Alter procedure' => 'Ubah prosedur',
|
|
||||||
'Return type' => 'Jenis balikan',
|
|
||||||
|
|
||||||
'Events' => 'Peristiwa',
|
|
||||||
'Event has been dropped.' => 'Peristiwa berhasil dihapus.',
|
|
||||||
'Event has been altered.' => 'Peristiwa berhasil diubah.',
|
|
||||||
'Event has been created.' => 'Peristiwa berhasil dibuat.',
|
|
||||||
'Alter event' => 'Ubah peristiwa',
|
|
||||||
'Create event' => 'Buat peristiwa',
|
|
||||||
'At given time' => 'Pada waktu tertentu',
|
|
||||||
'Every' => 'Setiap',
|
|
||||||
'Schedule' => 'Jadwal',
|
|
||||||
'Start' => 'Mulai',
|
|
||||||
'End' => 'Selesai',
|
|
||||||
'On completion preserve' => 'Pertahankan saat selesai',
|
|
||||||
|
|
||||||
'Tables' => 'Tabel',
|
|
||||||
'Tables and views' => 'Tabel dan tampilan',
|
|
||||||
'Table' => 'Tabel',
|
|
||||||
'No tables.' => 'Tiada tabel.',
|
|
||||||
'Alter table' => 'Ubah tabel',
|
|
||||||
'Create table' => 'Buat tabel',
|
|
||||||
'Create new table' => 'Buat tabel baru',
|
|
||||||
'Table has been dropped.' => 'Tabel berhasil dihapus.',
|
|
||||||
'Tables have been dropped.' => 'Tabel berhasil dihapus.',
|
|
||||||
'Tables have been optimized.' => 'Tabel berhasil dioptimalkan.',
|
|
||||||
'Table has been altered.' => 'Tabel berhasil diubah.',
|
|
||||||
'Table has been created.' => 'Tabel berhasil dibuat.',
|
|
||||||
'Table name' => 'Nama tabel',
|
|
||||||
'Show structure' => 'Lihat struktur',
|
|
||||||
'engine' => 'mesin',
|
|
||||||
'collation' => 'kolasi',
|
|
||||||
'Column name' => 'Nama kolom',
|
|
||||||
'Type' => 'Jenis',
|
|
||||||
'Length' => 'Panjang',
|
|
||||||
'Auto Increment' => 'Kenaikan Otomatis',
|
|
||||||
'Options' => 'Opsi',
|
|
||||||
'Comment' => 'Komentar',
|
|
||||||
'Default values' => 'Nilai bawaan',
|
|
||||||
'Drop' => 'Hapus',
|
|
||||||
'Are you sure?' => 'Anda yakin',
|
|
||||||
'Move up' => 'Naik',
|
|
||||||
'Move down' => 'Turun',
|
|
||||||
'Remove' => 'Hapus',
|
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Jumlah ruas maksimum yang diizinkan dilewati. Harap naikkan %s.',
|
|
||||||
|
|
||||||
'Partition by' => 'Partisi menurut',
|
|
||||||
'Partitions' => 'Partisi',
|
|
||||||
'Partition name' => 'Nama partisi',
|
|
||||||
'Values' => 'Nilai',
|
|
||||||
|
|
||||||
'View' => 'Tampilan',
|
|
||||||
'View has been dropped.' => 'Tampilan berhasil dihapus.',
|
|
||||||
'View has been altered.' => 'Tampilan berhasil diubah.',
|
|
||||||
'View has been created.' => 'Tampilan berhasil dibuat.',
|
|
||||||
'Alter view' => 'Ubah tampilan',
|
|
||||||
'Create view' => 'Buat tampilan',
|
|
||||||
|
|
||||||
'Indexes' => 'Indeks',
|
|
||||||
'Indexes have been altered.' => 'Indeks berhasil diubah.',
|
|
||||||
'Alter indexes' => 'Ubah indeks',
|
|
||||||
'Add next' => 'Tambah setelahnya',
|
|
||||||
'Index Type' => 'Jenis Indeks',
|
|
||||||
'Column (length)' => 'Kolom (panjang)',
|
|
||||||
|
|
||||||
'Foreign keys' => 'Kunci asing',
|
|
||||||
'Foreign key' => 'Kunci asing',
|
|
||||||
'Foreign key has been dropped.' => 'Kunci asing berhasil dihapus.',
|
|
||||||
'Foreign key has been altered.' => 'Kunci asing berhasil diubah.',
|
|
||||||
'Foreign key has been created.' => 'Kunci asing berhasil dibuat.',
|
|
||||||
'Target table' => 'Tabel sasaran',
|
|
||||||
'Change' => 'Ubah',
|
|
||||||
'Source' => 'Sumber',
|
|
||||||
'Target' => 'Sasaran',
|
|
||||||
'Add column' => 'Tambah kolom',
|
|
||||||
'Alter' => 'Ubah',
|
|
||||||
'Add foreign key' => 'Tambah kunci asing',
|
|
||||||
'ON DELETE' => 'ON DELETE',
|
|
||||||
'ON UPDATE' => 'ON UPDATE',
|
|
||||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Kolom sumber dan sasaran harus memiliki jenis data yang sama. Kolom sasaran harus memiliki indeks dan data rujukan harus ada.',
|
|
||||||
|
|
||||||
'Triggers' => 'Picu',
|
|
||||||
'Add trigger' => 'Tambah picu',
|
|
||||||
'Trigger has been dropped.' => 'Picu berhasil dihapus.',
|
|
||||||
'Trigger has been altered.' => 'Picu berhasil diubah.',
|
|
||||||
'Trigger has been created.' => 'Picu berhasil dibuat.',
|
|
||||||
'Alter trigger' => 'Ubah picu',
|
|
||||||
'Create trigger' => 'Buat picu',
|
|
||||||
'Time' => 'Waktu',
|
|
||||||
'Event' => 'Peristiwa',
|
|
||||||
'Name' => 'Nama',
|
|
||||||
|
|
||||||
'select' => 'pilih',
|
|
||||||
'Select' => 'Pilih',
|
|
||||||
'Select data' => 'Pilih data',
|
|
||||||
'Functions' => 'Fungsi',
|
|
||||||
'Aggregation' => 'Agregasi',
|
|
||||||
'Search' => 'Cari',
|
|
||||||
'anywhere' => 'di mana pun',
|
|
||||||
'Search data in tables' => 'Cari data dalam tabel',
|
|
||||||
'Sort' => 'Urutan',
|
|
||||||
'descending' => 'menurun',
|
|
||||||
'Limit' => 'Limit',
|
|
||||||
'Text length' => 'Panjang teks',
|
|
||||||
'Action' => 'Tindakan',
|
|
||||||
'Full table scan' => 'Pindai tabel lengkap',
|
|
||||||
'Unable to select the table' => 'Gagal memilih tabel',
|
|
||||||
'No rows.' => 'Tiada baris.',
|
|
||||||
'%d row(s)' => '%d baris',
|
|
||||||
'Page' => 'Halaman',
|
|
||||||
'last' => 'terakhir',
|
|
||||||
'whole result' => 'Seluruh hasil',
|
|
||||||
'%d byte(s)' => '%d bita',
|
|
||||||
|
|
||||||
'Import' => 'Impor',
|
|
||||||
'%d row(s) have been imported.' => '%d baris berhasil diimpor.',
|
|
||||||
|
|
||||||
// in-place editing in select
|
|
||||||
'Use edit link to modify this value.' => 'Gunakan tautan edit untuk mengubah nilai ini.',
|
|
||||||
|
|
||||||
// %s can contain auto-increment value
|
|
||||||
'Item%s has been inserted.' => 'Entri%s berhasil disisipkan.',
|
|
||||||
'Item has been deleted.' => 'Entri berhasil dihapus.',
|
|
||||||
'Item has been updated.' => 'Entri berhasil diperbarui.',
|
|
||||||
'%d item(s) have been affected.' => '%d entri terpengaruh.',
|
|
||||||
'New item' => 'Entri baru',
|
|
||||||
'original' => 'orisinal',
|
|
||||||
// label for value '' in enum data type
|
|
||||||
'empty' => 'kosong',
|
|
||||||
'edit' => 'edit',
|
|
||||||
'Edit' => 'Edit',
|
|
||||||
'Insert' => 'Sisipkan',
|
|
||||||
'Save' => 'Simpan',
|
|
||||||
'Save and continue edit' => 'Simpan dan terus mengedit',
|
|
||||||
'Save and insert next' => 'Simpan dan sisipkan yang lain',
|
|
||||||
'Clone' => 'Gandakan',
|
|
||||||
'Delete' => 'Hapus',
|
|
||||||
|
|
||||||
'E-mail' => 'Surel',
|
|
||||||
'From' => 'Dari',
|
|
||||||
'Subject' => 'Subjek',
|
|
||||||
'Attachments' => 'Lampiran',
|
|
||||||
'Send' => 'Kirim',
|
|
||||||
'%d e-mail(s) have been sent.' => array('%d surel berhasil dikirim.', '%d surel berhasil dikirim'),
|
|
||||||
|
|
||||||
// data type descriptions
|
|
||||||
'Numbers' => 'Angka',
|
|
||||||
'Date and time' => 'Tanggal dan waktu',
|
|
||||||
'Strings' => 'String',
|
|
||||||
'Binary' => 'Biner',
|
|
||||||
'Lists' => 'Daftar',
|
|
||||||
'Network' => 'Jaringan',
|
|
||||||
'Geometry' => 'Geometri',
|
|
||||||
'Relations' => 'Relasi',
|
|
||||||
|
|
||||||
'Editor' => 'Editor',
|
|
||||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
|
||||||
'$1-$3-$5' => '$1-$3-$5',
|
|
||||||
// hint for date format - use language equivalents for day, month and year shortcuts
|
|
||||||
'[yyyy]-mm-dd' => '[yyyy]-mm-dd',
|
|
||||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
|
||||||
'now' => 'now',
|
|
||||||
'yes' => 'yes',
|
|
||||||
'no' => 'no',
|
|
||||||
|
|
||||||
// general SQLite error in create, drop or rename database
|
|
||||||
'File exists.' => 'Berkas sudah ada.',
|
|
||||||
'Please use one of the extensions %s.' => 'Harap gunakan salah satu ekstensi %s.',
|
|
||||||
|
|
||||||
// PostgreSQL and MS SQL schema support
|
|
||||||
'Alter schema' => 'Ubah skema',
|
|
||||||
'Create schema' => 'Buat skema',
|
|
||||||
'Schema has been dropped.' => 'Skema berhasil dihapus.',
|
|
||||||
'Schema has been created.' => 'Skema berhasil dibuat.',
|
|
||||||
'Schema has been altered.' => 'Skema berhasil diubah.',
|
|
||||||
'schema' => 'skema',
|
|
||||||
'Schema' => 'Skema',
|
|
||||||
'Invalid schema.' => 'Skema invalid.',
|
|
||||||
|
|
||||||
// PostgreSQL sequences support
|
|
||||||
'Sequences' => 'Deret',
|
|
||||||
'Create sequence' => 'Buat deret',
|
|
||||||
'Sequence has been dropped.' => 'Deret berhasil dihapus.',
|
|
||||||
'Sequence has been created.' => 'Deret berhasil dibuat.',
|
|
||||||
'Sequence has been altered.' => 'Deret berhasil diubah.',
|
|
||||||
'Alter sequence' => 'Ubah deret',
|
|
||||||
|
|
||||||
// PostgreSQL user types support
|
|
||||||
'User types' => 'Jenis pengguna',
|
|
||||||
'Create type' => 'Buat jenis',
|
|
||||||
'Type has been dropped.' => 'Jenis berhasil dihapus.',
|
|
||||||
'Type has been created.' => 'Jenis berhasil dibuat.',
|
|
||||||
'Alter type' => 'Ubah jenis',
|
|
||||||
);
|
|
||||||
@@ -40,7 +40,7 @@ $translations = array(
|
|||||||
'Create new table' => 'Crea nuova tabella',
|
'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 has been inserted.' => 'Elemento inserito.',
|
||||||
'Edit' => 'Modifica',
|
'Edit' => 'Modifica',
|
||||||
'Insert' => 'Inserisci',
|
'Insert' => 'Inserisci',
|
||||||
'Save and insert next' => 'Salva e inserisci un altro',
|
'Save and insert next' => 'Salva e inserisci un altro',
|
||||||
@@ -187,16 +187,17 @@ $translations = array(
|
|||||||
'Truncate' => 'Svuota',
|
'Truncate' => 'Svuota',
|
||||||
'Move to other database' => 'Sposta in altro database',
|
'Move to other database' => 'Sposta in altro database',
|
||||||
'Move' => 'Sposta',
|
'Move' => 'Sposta',
|
||||||
'%d item(s) have been affected.' => array('Il risultato consiste in %d elemento.', 'Il risultato consiste in %d elementi.'),
|
'%d item(s) have been affected.' => array('Il risultato consiste in %d elemento', 'Il risultato consiste in %d elementi'),
|
||||||
'whole result' => 'intero risultato',
|
'whole result' => 'intero risultato',
|
||||||
'Clone' => 'Clona',
|
'Clone' => 'Clona',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Troppi campi. Per favore aumentare %s.',
|
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Troppi campi. Per favore aumentare %s e %s.',
|
||||||
'Partition by' => 'Partiziona per',
|
'Partition by' => 'Partiziona per',
|
||||||
'Partitions' => 'Partizioni',
|
'Partitions' => 'Partizioni',
|
||||||
'Partition name' => 'Nome partizione',
|
'Partition name' => 'Nome partizione',
|
||||||
'Values' => 'Valori',
|
'Values' => 'Valori',
|
||||||
'%d row(s) have been imported.' => array('%d riga importata.', '%d righe importate.'),
|
'%d row(s) have been imported.' => array('%d riga importata.','%d righe importate.'),
|
||||||
'anywhere' => 'ovunque',
|
'anywhere' => 'ovunque',
|
||||||
|
'CSV Import' => 'Importa da CSV',
|
||||||
'Import' => 'Importa',
|
'Import' => 'Importa',
|
||||||
'Stop on error' => 'Stop su errore',
|
'Stop on error' => 'Stop su errore',
|
||||||
'%.3f s' => '%.3f s',
|
'%.3f s' => '%.3f s',
|
||||||
@@ -219,53 +220,9 @@ $translations = array(
|
|||||||
'From' => 'Da',
|
'From' => 'Da',
|
||||||
'Subject' => 'Oggetto',
|
'Subject' => 'Oggetto',
|
||||||
'Send' => 'Invia',
|
'Send' => 'Invia',
|
||||||
'%d e-mail(s) have been sent.' => array('%d e-mail inviata.', '%d e-mail inviate.'),
|
'%d e-mail(s) have been sent.' => array('%d e-mail inviata.','%d e-mail inviate.'),
|
||||||
'Webserver file %s' => 'Webserver file %s',
|
'Webserver file %s' => 'Webserver file %s',
|
||||||
'File does not exist.' => 'Il file non esiste.',
|
'File does not exist.' => 'Il file non esiste.',
|
||||||
'%d in total' => '%d in totale',
|
'%d in total' => '%d in totale',
|
||||||
'Permanent login' => 'Login permanente',
|
'Permanent login' => 'Login permanente',
|
||||||
'Databases have been dropped.' => 'Database eliminati.',
|
|
||||||
'Search data in tables' => 'Cerca nelle tabelle',
|
|
||||||
'schema' => 'schema',
|
|
||||||
'Schema' => 'Schema',
|
|
||||||
'Alter schema' => 'Modifica schema',
|
|
||||||
'Create schema' => 'Crea schema',
|
|
||||||
'Schema has been dropped.' => 'Schema eliminato.',
|
|
||||||
'Schema has been created.' => 'Schema creato.',
|
|
||||||
'Schema has been altered.' => 'Schema modificato.',
|
|
||||||
'Sequences' => 'Sequenza',
|
|
||||||
'Create sequence' => 'Crea sequenza',
|
|
||||||
'Alter sequence' => 'Modifica sequenza',
|
|
||||||
'Sequence has been dropped.' => 'Sequenza eliminata.',
|
|
||||||
'Sequence has been created.' => 'Sequenza creata.',
|
|
||||||
'Sequence has been altered.' => 'Sequenza modificata.',
|
|
||||||
'User types' => 'Tipi definiti dall\'utente',
|
|
||||||
'Create type' => 'Crea tipo definito dall\'utente',
|
|
||||||
'Alter type' => 'Modifica tipo definito dall\'utente',
|
|
||||||
'Type has been dropped.' => 'Tipo definito dall\'utente eliminato.',
|
|
||||||
'Type has been created.' => 'Tipo definito dall\'utente creato.',
|
|
||||||
'Ctrl+click on a value to modify it.' => 'Fai Ctrl+click su un valore per modificarlo.',
|
|
||||||
'Use edit link to modify this value.' => 'Usa il link modifica per modificare questo valore.',
|
|
||||||
'last' => 'ultima',
|
|
||||||
'From server' => 'Dal server',
|
|
||||||
'System' => 'Sistema',
|
|
||||||
'Select data' => 'Visualizza dati',
|
|
||||||
'Show structure' => 'Visualizza struttura',
|
|
||||||
'empty' => 'vuoto',
|
|
||||||
'Network' => 'Rete',
|
|
||||||
'Geometry' => 'Geometria',
|
|
||||||
'File exists.' => 'Il file esiste già.',
|
|
||||||
'Attachments' => 'Allegati',
|
|
||||||
'%d query(s) executed OK.' => array('%d query eseguita con successo.', '%d query eseguite con successo.'),
|
|
||||||
'Show only errors' => 'Mostra solo gli errori',
|
|
||||||
'Refresh' => 'Aggiorna',
|
|
||||||
'Invalid schema.' => 'Schema non valido.',
|
|
||||||
'Please use one of the extensions %s.' => 'Usa una delle estensioni %s.',
|
|
||||||
'now' => 'adesso',
|
|
||||||
'ltr' => 'ltr',
|
|
||||||
'Tables have been copied.' => 'Le tabelle sono state copiate.',
|
|
||||||
'Copy' => 'Copia',
|
|
||||||
'Permanent link' => 'Link permanente',
|
|
||||||
'Edit all' => 'Modifica tutto',
|
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -35,11 +35,12 @@ $translations = array(
|
|||||||
'Logout' => 'ログアウト',
|
'Logout' => 'ログアウト',
|
||||||
'database' => 'データベース',
|
'database' => 'データベース',
|
||||||
'Use' => '使用',
|
'Use' => '使用',
|
||||||
'No tables.' => 'テーブルがありません。',
|
'No tables.' => 'テーブルがありません没有表。',
|
||||||
'select' => '選択',
|
'select' => '選択',
|
||||||
'Create new table' => 'テーブルを作成',
|
'Create new table' => 'テーブルを作成',
|
||||||
'Item has been deleted.' => '項目を削除しました',
|
'Item has been deleted.' => '項目を削除しました',
|
||||||
'Item has been updated.' => '項目を更新しました',
|
'Item has been updated.' => '項目を更新しました',
|
||||||
|
'Item has been inserted.' => '項目を挿入しました',
|
||||||
'Edit' => '編集',
|
'Edit' => '編集',
|
||||||
'Insert' => '挿入',
|
'Insert' => '挿入',
|
||||||
'Save and insert next' => '保存/追加',
|
'Save and insert next' => '保存/追加',
|
||||||
@@ -72,6 +73,7 @@ $translations = array(
|
|||||||
'Invalid CSRF token. Send the form again.' => '不正なCSRFトークン。再送信してください',
|
'Invalid CSRF token. Send the form again.' => '不正なCSRFトークン。再送信してください',
|
||||||
'Comment' => 'コメント',
|
'Comment' => 'コメント',
|
||||||
'Default values' => '規定値',
|
'Default values' => '規定値',
|
||||||
|
'Show column comments' => '列コメントを表示',
|
||||||
'%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.' => 'ファイルをアップロードできません',
|
||||||
@@ -109,7 +111,7 @@ $translations = array(
|
|||||||
'%d process(es) have been killed.' => '%d プロセスを強制終了しました',
|
'%d process(es) have been killed.' => '%d プロセスを強制終了しました',
|
||||||
'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.' => 'ルーチンを作成',
|
||||||
@@ -128,7 +130,7 @@ $translations = array(
|
|||||||
'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' => 'ユーザを作成',
|
||||||
@@ -181,7 +183,7 @@ $translations = array(
|
|||||||
'Check' => 'チェック',
|
'Check' => 'チェック',
|
||||||
'Repair' => '修復',
|
'Repair' => '修復',
|
||||||
'Truncate' => 'Truncate',
|
'Truncate' => 'Truncate',
|
||||||
'Move to other database' => '別のデータベースへ移動',
|
'Move to other database' => '別のデータベースへ移動?',
|
||||||
'Move' => '移動',
|
'Move' => '移動',
|
||||||
'Save and continue edit' => '保存して継続',
|
'Save and continue edit' => '保存して継続',
|
||||||
'original' => '元',
|
'original' => '元',
|
||||||
@@ -189,7 +191,7 @@ $translations = array(
|
|||||||
'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 and %s.' => '定義可能な最大フィールド数を越えました。%s と %s を増やしてください。',
|
||||||
'Partition by' => 'パーティション',
|
'Partition by' => 'パーティション',
|
||||||
'Partitions' => 'パーティション',
|
'Partitions' => 'パーティション',
|
||||||
'Partition name' => 'パーティション名',
|
'Partition name' => 'パーティション名',
|
||||||
@@ -197,6 +199,7 @@ $translations = array(
|
|||||||
'%d row(s) have been imported.' => '%d 行をインポートしました',
|
'%d row(s) have been imported.' => '%d 行をインポートしました',
|
||||||
'Show structure' => '構造',
|
'Show structure' => '構造',
|
||||||
'anywhere' => '任意',
|
'anywhere' => '任意',
|
||||||
|
'CSV Import' => 'CSV インポート',
|
||||||
'Import' => 'インポート',
|
'Import' => 'インポート',
|
||||||
'Stop on error' => 'エラーの場合は停止',
|
'Stop on error' => 'エラーの場合は停止',
|
||||||
'Select data' => 'データ',
|
'Select data' => 'データ',
|
||||||
@@ -225,46 +228,4 @@ $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.' => 'データベースを削除しました',
|
|
||||||
'Search data in tables' => 'データを検索する',
|
|
||||||
'schema' => 'スキーマ',
|
|
||||||
'Schema' => 'スキーマ',
|
|
||||||
'Alter schema' => 'スキーマ変更',
|
|
||||||
'Create schema' => 'スキーマ追加',
|
|
||||||
'Schema has been dropped.' => 'スキーマを削除しました',
|
|
||||||
'Schema has been created.' => 'スキーマを追加しました',
|
|
||||||
'Schema has been altered.' => 'スキーマを変更しました',
|
|
||||||
'Sequences' => 'シーケンス',
|
|
||||||
'Create sequence' => 'シーケンス作成',
|
|
||||||
'Alter sequence' => 'シーケンス変更',
|
|
||||||
'Sequence has been dropped.' => 'シーケンスを削除しました',
|
|
||||||
'Sequence has been created.' => 'シーケンスを追加しました',
|
|
||||||
'Sequence has been altered.' => 'シーケンスを変更しました',
|
|
||||||
'User types' => 'ユーザー定義型',
|
|
||||||
'Create type' => 'ユーザー定義型作成',
|
|
||||||
'Alter type' => 'ユーザー定義型変更',
|
|
||||||
'Type has been dropped.' => 'ユーザー定義型を削除しました',
|
|
||||||
'Type has been created.' => 'ユーザー定義型を追加しました',
|
|
||||||
'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' => '時:分:秒',
|
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,315 +0,0 @@
|
|||||||
<?php
|
|
||||||
$translations = array(
|
|
||||||
// label for database system selection (MySQL, SQLite, ...)
|
|
||||||
'System' => 'Sistema',
|
|
||||||
'Server' => 'Serveris',
|
|
||||||
'Username' => 'Vartotojas',
|
|
||||||
'Password' => 'Slaptažodis',
|
|
||||||
'Permanent login' => 'Pastovus prisijungimas',
|
|
||||||
'Login' => 'Prisijungti',
|
|
||||||
'Logout' => 'Atsijungti',
|
|
||||||
'Logged as: %s' => 'Prisijungęs kaip: %s',
|
|
||||||
'Logout successful.' => 'Jūs atsijungėte nuo sistemos.',
|
|
||||||
'Invalid credentials.' => 'Neteisingi prisijungimo duomenys.',
|
|
||||||
'Language' => 'Kalba',
|
|
||||||
'Invalid CSRF token. Send the form again.' => 'Neteisingas CSRF tokenas. Bandykite siųsti formos duomenis dar kartą.',
|
|
||||||
'No extension' => 'Nėra plėtiio',
|
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'Nėra nei vieno iš palaikomų PHP plėtinių (%s).',
|
|
||||||
'Session support must be enabled.' => 'Sesijų palaikymas turi būti įjungtas.',
|
|
||||||
'Session expired, please login again.' => 'Sesijos galiojimas baigėsi. Prisijunkite iš naujo.',
|
|
||||||
'%s version: %s through PHP extension %s' => '%s versija: %s per PHP plėtinį %s',
|
|
||||||
'Refresh' => 'Atnaujinti',
|
|
||||||
|
|
||||||
// text direction - 'ltr' or 'rtl'
|
|
||||||
'ltr' => 'ltr',
|
|
||||||
|
|
||||||
'Privileges' => 'Privilegijos',
|
|
||||||
'Create user' => 'Sukurti vartotoją',
|
|
||||||
'User has been dropped.' => 'Vartotojas ištrintas.',
|
|
||||||
'User has been altered.' => 'Vartotojo duomenys pakeisti.',
|
|
||||||
'User has been created.' => 'Vartotojas sukurtas.',
|
|
||||||
'Hashed' => 'Šifruotas',
|
|
||||||
'Column' => 'Stulpelis',
|
|
||||||
'Routine' => 'Procedūra',
|
|
||||||
'Grant' => 'Suteikti',
|
|
||||||
'Revoke' => 'Atšaukti',
|
|
||||||
|
|
||||||
'Process list' => 'Procesų sąrašas',
|
|
||||||
'%d process(es) have been killed.' => array('%d procesas nutrauktas.', '%d procesai nutraukti.', '%d procesų nutraukta.'),
|
|
||||||
'Kill' => 'Nutraukti',
|
|
||||||
|
|
||||||
'Variables' => 'Kintamieji',
|
|
||||||
'Status' => 'Būsena',
|
|
||||||
|
|
||||||
'SQL command' => 'SQL užklausa',
|
|
||||||
'%d query(s) executed OK.' => array('%d užklausa įvykdyta.', '%d užklausos įvykdytos.', '%d užklausų įvykdyta.'),
|
|
||||||
'Query executed OK, %d row(s) affected.' => array('Užklausa įvykdyta. Pakeistas %d įrašas.', 'Užklausa įvykdyta. Pakeisti %d įrašai.', 'Užklausa įvykdyta. Pakeista %d įrašų.'),
|
|
||||||
'No commands to execute.' => 'Nėra vykdomų užklausų.',
|
|
||||||
'Error in query' => 'Klaida užklausoje',
|
|
||||||
'Execute' => 'Vykdyti',
|
|
||||||
'Stop on error' => 'Sustabdyti esant klaidai',
|
|
||||||
'Show only errors' => 'Rodyti tik klaidas',
|
|
||||||
// sprintf() format for time of the command
|
|
||||||
'%.3f s' => '%.3f s',
|
|
||||||
'History' => 'Istorija',
|
|
||||||
'Clear' => 'Išvalyti',
|
|
||||||
'Edit all' => 'Redaguoti visus',
|
|
||||||
|
|
||||||
'File upload' => 'Failo įkėlimas',
|
|
||||||
'From server' => 'Iš serverio',
|
|
||||||
'Webserver file %s' => 'Failas %s iš serverio',
|
|
||||||
'Run file' => 'Vykdyti failą',
|
|
||||||
'File does not exist.' => 'Failas neegzistuoja.',
|
|
||||||
'File uploads are disabled.' => 'Failų įkėlimas išjungtas.',
|
|
||||||
'Unable to upload a file.' => 'Nepavyko įkelti failo.',
|
|
||||||
'Maximum allowed file size is %sB.' => 'Maksimalus failo dydis - %sB.',
|
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Per daug POST duomenų. Sumažinkite duomenų kiekį arba padidinkite konfigūracijos nustatymą %s.',
|
|
||||||
|
|
||||||
'Export' => 'Eksportas',
|
|
||||||
'Dump' => 'Eksportuoti',
|
|
||||||
'Output' => 'Išvestis',
|
|
||||||
'open' => 'atidaryti',
|
|
||||||
'save' => 'išsaugoti',
|
|
||||||
'Format' => 'Formatas',
|
|
||||||
'Data' => 'Duomenys',
|
|
||||||
|
|
||||||
'Database' => 'Duomenų bazė',
|
|
||||||
'database' => 'duomenų bazė',
|
|
||||||
'Use' => 'Naudoti',
|
|
||||||
'Select database' => 'Pasirinkti duomenų bazę',
|
|
||||||
'Invalid database.' => 'Neteisinga duomenų bazė.',
|
|
||||||
'Create new database' => 'Sukurti naują duomenų bazę',
|
|
||||||
'Database has been dropped.' => 'Duomenų bazė panaikinta.',
|
|
||||||
'Databases have been dropped.' => 'Duomenų bazės panaikintos.',
|
|
||||||
'Database has been created.' => 'Duomenų bazė sukurta.',
|
|
||||||
'Database has been renamed.' => 'Duomenų bazė pervadinta.',
|
|
||||||
'Database has been altered.' => 'Duomenų bazė pakeista.',
|
|
||||||
'Alter database' => 'Redaguoti duomenų bazę',
|
|
||||||
'Create database' => 'Sukurti duomenų bazę',
|
|
||||||
'Database schema' => 'Duomenų bazės schema',
|
|
||||||
|
|
||||||
// link to current database schema layout
|
|
||||||
'Permanent link' => 'Pastovi nuoroda',
|
|
||||||
|
|
||||||
// thousands separator - must contain single byte
|
|
||||||
',' => ' ',
|
|
||||||
'Engine' => 'Variklis',
|
|
||||||
'Collation' => 'Lyginimas',
|
|
||||||
'Data Length' => 'Duomenų ilgis',
|
|
||||||
'Index Length' => 'Indekso ilgis',
|
|
||||||
'Data Free' => 'Laisvos vietos',
|
|
||||||
'Rows' => 'Įrašai',
|
|
||||||
'%d in total' => '%d iš viso',
|
|
||||||
'Analyze' => 'Analizuoti',
|
|
||||||
'Optimize' => 'Optimizuoti',
|
|
||||||
'Check' => 'Patikrinti',
|
|
||||||
'Repair' => 'Pataisyti',
|
|
||||||
'Truncate' => 'Tuštinti',
|
|
||||||
'Tables have been truncated.' => 'Lentelės buvo ištuštintos.',
|
|
||||||
'Move to other database' => 'Perkelti į kitą duomenų bazę',
|
|
||||||
'Move' => 'Perkelti',
|
|
||||||
'Tables have been moved.' => 'Lentelės perkeltos.',
|
|
||||||
'Copy' => 'Kopijuoti',
|
|
||||||
'Tables have been copied.' => 'Lentelės nukopijuotos.',
|
|
||||||
|
|
||||||
'Routines' => 'Procedūros',
|
|
||||||
'Routine has been called, %d row(s) affected.' => array('Procedūra įvykdyta. %d įrašas pakeistas.', 'Procedūra įvykdyta. %d įrašai pakeisti.', 'Procedūra įvykdyta. %d įrašų pakeista.'),
|
|
||||||
'Call' => 'Vykdyti',
|
|
||||||
'Parameter name' => 'Parametro pavadinimas',
|
|
||||||
'Create procedure' => 'Sukurti procedūrą',
|
|
||||||
'Create function' => 'Sukurti funkciją',
|
|
||||||
'Routine has been dropped.' => 'Procedūra pašalinta.',
|
|
||||||
'Routine has been altered.' => 'Procedūra pakeista.',
|
|
||||||
'Routine has been created.' => 'Procedūra sukurta.',
|
|
||||||
'Alter function' => 'Keisti funkciją',
|
|
||||||
'Alter procedure' => 'Keiskti procedūrą',
|
|
||||||
'Return type' => 'Grąžinimo tipas',
|
|
||||||
|
|
||||||
'Events' => 'Įvykiai',
|
|
||||||
'Event has been dropped.' => 'Įvykis pašalintas.',
|
|
||||||
'Event has been altered.' => 'Įvykis pakeistas.',
|
|
||||||
'Event has been created.' => 'Įvykis sukurtas.',
|
|
||||||
'Alter event' => 'Redaguoti įvykį',
|
|
||||||
'Create event' => 'Sukurti įvykį',
|
|
||||||
'At given time' => 'Nurodytu laiku',
|
|
||||||
'Every' => 'Kas',
|
|
||||||
'Schedule' => 'Grafikas',
|
|
||||||
'Start' => 'Pradžia',
|
|
||||||
'End' => 'Pabaiga',
|
|
||||||
'On completion preserve' => 'Įvykdžius išsaugoti',
|
|
||||||
|
|
||||||
'Tables' => 'Lentelės',
|
|
||||||
'Tables and views' => 'Lentelės ir vaizdai',
|
|
||||||
'Table' => 'Lentelė',
|
|
||||||
'No tables.' => 'Nėra lentelių.',
|
|
||||||
'Alter table' => 'Redaguoti lentelę',
|
|
||||||
'Create table' => 'Sukurti lentelę',
|
|
||||||
'Create new table' => 'Sukurti naują lentelę',
|
|
||||||
'Table has been dropped.' => 'Lentelė pašalinta.',
|
|
||||||
'Tables have been dropped.' => 'Lentelės pašalintos.',
|
|
||||||
'Table has been altered.' => 'Lentelė pakeista.',
|
|
||||||
'Table has been created.' => 'Lentelė sukurta.',
|
|
||||||
'Table name' => 'Lentelės pavadinimas',
|
|
||||||
'Show structure' => 'Rodyti struktūrą',
|
|
||||||
'engine' => 'variklis',
|
|
||||||
'collation' => 'palyginimas',
|
|
||||||
'Column name' => 'Stulpelio pavadinimas',
|
|
||||||
'Type' => 'Tipas',
|
|
||||||
'Length' => 'Ilgis',
|
|
||||||
'Auto Increment' => 'Auto Increment',
|
|
||||||
'Options' => 'Nustatymai',
|
|
||||||
'Comment' => 'Komentaras',
|
|
||||||
'Default values' => 'Reikšmės pagal nutylėjimą',
|
|
||||||
'Drop' => 'Pašalinti',
|
|
||||||
'Are you sure?' => 'Tikrai?',
|
|
||||||
'Move up' => 'Perkelti į viršų',
|
|
||||||
'Move down' => 'Perkelti žemyn',
|
|
||||||
'Remove' => 'Pašalinti',
|
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Viršytas maksimalus leidžiamų stulpelių kiekis. Padidinkite %s.',
|
|
||||||
|
|
||||||
'Partition by' => 'Skirstyti pagal',
|
|
||||||
'Partitions' => 'Skirsniai',
|
|
||||||
'Partition name' => 'Skirsnio pavadinimas',
|
|
||||||
'Values' => 'Reikšmės',
|
|
||||||
|
|
||||||
'View' => 'Vaizdas',
|
|
||||||
'View has been dropped.' => 'Vaizdas pašalintas.',
|
|
||||||
'View has been altered.' => 'Vaizdas pakeistas.',
|
|
||||||
'View has been created.' => 'Vaizdas sukurtas.',
|
|
||||||
'Alter view' => 'Redaguoti vaizdą',
|
|
||||||
'Create view' => 'Sukurti vaizdą',
|
|
||||||
|
|
||||||
'Indexes' => 'Indeksai',
|
|
||||||
'Indexes have been altered.' => 'Indeksai pakeisti.',
|
|
||||||
'Alter indexes' => 'Redaguoti indeksus',
|
|
||||||
'Add next' => 'Pridėti kitą',
|
|
||||||
'Index Type' => 'Indekso tipas',
|
|
||||||
'Column (length)' => 'Stulpelis (ilgis)',
|
|
||||||
|
|
||||||
'Foreign keys' => 'Išoriniai raktai',
|
|
||||||
'Foreign key' => 'Išorinis raktas',
|
|
||||||
'Foreign key has been dropped.' => 'Išorinis raktas pašalintas.',
|
|
||||||
'Foreign key has been altered.' => 'Išorinis raktas pakeistas.',
|
|
||||||
'Foreign key has been created.' => 'Išorinis raktas sukurtas.',
|
|
||||||
'Target table' => 'Tikslinė lentelė',
|
|
||||||
'Change' => 'Pakeisti',
|
|
||||||
'Source' => 'Šaltinis',
|
|
||||||
'Target' => 'Tikslas',
|
|
||||||
'Add column' => 'Pridėti stulpelį',
|
|
||||||
'Alter' => 'Redaguoti',
|
|
||||||
'Add foreign key' => 'Pridėti išorinį raktą',
|
|
||||||
'ON DELETE' => 'Ištrinant',
|
|
||||||
'ON UPDATE' => 'Atnaujinant',
|
|
||||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Šaltinio ir tikslinis stulpelis turi būti to paties tipo, tiksliniame stulpelyje turi būti naudojamas indeksas ir duomenys turi egzistuoti.',
|
|
||||||
|
|
||||||
'Triggers' => 'Trigeriai',
|
|
||||||
'Add trigger' => 'Pridėti trigerį',
|
|
||||||
'Trigger has been dropped.' => 'Trigeris pašalintas.',
|
|
||||||
'Trigger has been altered.' => 'Trigeris pakeistas.',
|
|
||||||
'Trigger has been created.' => 'Trigeris sukurtas.',
|
|
||||||
'Alter trigger' => 'Keisti trigerį',
|
|
||||||
'Create trigger' => 'Sukurti trigerį',
|
|
||||||
'Time' => 'Laikas',
|
|
||||||
'Event' => 'Įvykis',
|
|
||||||
'Name' => 'Pavadinimas',
|
|
||||||
|
|
||||||
'select' => 'atrinkti',
|
|
||||||
'Select' => 'Atrinkti',
|
|
||||||
'Select data' => 'Atrinkti duomenis',
|
|
||||||
'Functions' => 'Funkcijos',
|
|
||||||
'Aggregation' => 'Agregacija',
|
|
||||||
'Search' => 'Ieškoti',
|
|
||||||
'anywhere' => 'visur',
|
|
||||||
'Search data in tables' => 'Ieškoti duomenų lentelėse',
|
|
||||||
'Sort' => 'Rikiuoti',
|
|
||||||
'descending' => 'mažėjimo tvarka',
|
|
||||||
'Limit' => 'Limitas',
|
|
||||||
'Text length' => 'Teksto ilgis',
|
|
||||||
'Action' => 'Veiksmas',
|
|
||||||
'Unable to select the table' => 'Neįmanoma atrinkti lentelės',
|
|
||||||
'No rows.' => 'Nėra įrašų.',
|
|
||||||
'%d row(s)' => array('%d įrašas', '%d įrašai', '%d įrašų'),
|
|
||||||
'Page' => 'Puslapis',
|
|
||||||
'last' => 'paskutinis',
|
|
||||||
'whole result' => 'visas rezultatas',
|
|
||||||
'%d byte(s)' => array('%d baitas', '%d baigai', '%d baitų'),
|
|
||||||
|
|
||||||
'Import' => 'Importas',
|
|
||||||
'%d row(s) have been imported.' => array('%d įrašas įkelta.', '%d įrašai įkelti.', '%d įrašų įkelta.'),
|
|
||||||
|
|
||||||
// in-place editing in select
|
|
||||||
'Use edit link to modify this value.' => 'Norėdami redaguoti reikšmę naudokite redagavimo nuorodą.',
|
|
||||||
|
|
||||||
// %s can contain auto-increment value
|
|
||||||
'Item%s has been inserted.' => 'Įrašas%s sukurtas.',
|
|
||||||
'Item has been deleted.' => 'Įrašas ištrintas.',
|
|
||||||
'Item has been updated.' => 'Įrašas pakeistas.',
|
|
||||||
'%d item(s) have been affected.' => array('Pakeistas %d įrašas.', 'Pakeisti %d įrašai.', 'Pakeistas %d įrašų.'),
|
|
||||||
'New item' => 'Naujas įrašas',
|
|
||||||
'original' => 'originalas',
|
|
||||||
// label for value '' in enum data type
|
|
||||||
'empty' => 'tuščia',
|
|
||||||
'edit' => 'redaguoti',
|
|
||||||
'Edit' => 'Redaguoti',
|
|
||||||
'Insert' => 'Įrašyti',
|
|
||||||
'Save' => 'Išsaugoti',
|
|
||||||
'Save and continue edit' => 'Išsaugoti ir tęsti redagavimą',
|
|
||||||
'Save and insert next' => 'Išsaugoti ir įrašyti kitą',
|
|
||||||
'Clone' => 'Klonuoti',
|
|
||||||
'Delete' => 'Trinti',
|
|
||||||
|
|
||||||
'E-mail' => 'El. paštas',
|
|
||||||
'From' => 'Nuo',
|
|
||||||
'Subject' => 'Antraštė',
|
|
||||||
'Attachments' => 'Priedai',
|
|
||||||
'Send' => 'Siųsti',
|
|
||||||
'%d e-mail(s) have been sent.' => array('Išsiųstas %d laiškas.', 'Išsiųsti %d laiškai.', 'Išsiųsta %d laiškų.'),
|
|
||||||
|
|
||||||
// data type descriptions
|
|
||||||
'Numbers' => 'Skaičiai',
|
|
||||||
'Date and time' => 'Data ir laikas',
|
|
||||||
'Strings' => 'Tekstas',
|
|
||||||
'Binary' => 'Dvejetainis',
|
|
||||||
'Lists' => 'Sąrašai',
|
|
||||||
'Network' => 'Tinklas',
|
|
||||||
'Geometry' => 'Geometrija',
|
|
||||||
'Relations' => 'Ryšiai',
|
|
||||||
|
|
||||||
'Editor' => 'Redaktorius',
|
|
||||||
// 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' => 'dabar',
|
|
||||||
|
|
||||||
// general SQLite error in create, drop or rename database
|
|
||||||
'File exists.' => 'Failas egzistuoja.',
|
|
||||||
'Please use one of the extensions %s.' => 'Naudokite vieną iš plėtinių %s.',
|
|
||||||
|
|
||||||
// PostgreSQL and MS SQL schema support
|
|
||||||
'Alter schema' => 'Keisti schemą',
|
|
||||||
'Create schema' => 'Sukurti schemą',
|
|
||||||
'Schema has been dropped.' => 'Schema pašalinta.',
|
|
||||||
'Schema has been created.' => 'Schema sukurta.',
|
|
||||||
'Schema has been altered.' => 'Schema pakeista.',
|
|
||||||
'schema' => 'schema',
|
|
||||||
'Schema' => 'Schema',
|
|
||||||
'Invalid schema.' => 'Neteisinga schema.',
|
|
||||||
|
|
||||||
// PostgreSQL sequences support
|
|
||||||
'Sequences' => 'Sekos',
|
|
||||||
'Create sequence' => 'Sukurti seką',
|
|
||||||
'Sequence has been dropped.' => 'Seka pašalinta.',
|
|
||||||
'Sequence has been created.' => 'Seka sukurta.',
|
|
||||||
'Sequence has been altered.' => 'Seka pakeista.',
|
|
||||||
'Alter sequence' => 'Keisti seką',
|
|
||||||
|
|
||||||
// PostgreSQL user types support
|
|
||||||
'User types' => 'Vartotojų tipai',
|
|
||||||
'Create type' => 'Sukurti tipą',
|
|
||||||
'Type has been dropped.' => 'Tipas pašalintas.',
|
|
||||||
'Type has been created.' => 'Tipas sukurtas.',
|
|
||||||
'Alter type' => 'Keisti tipą',
|
|
||||||
);
|
|
||||||
@@ -24,7 +24,6 @@ $translations = array(
|
|||||||
'Options' => 'Opties',
|
'Options' => 'Opties',
|
||||||
'Save' => 'Opslaan',
|
'Save' => 'Opslaan',
|
||||||
'Drop' => 'Verwijderen',
|
'Drop' => 'Verwijderen',
|
||||||
'Databases have been dropped.' => 'Databases verwijderd.',
|
|
||||||
'Database has been dropped.' => 'Database verwijderd.',
|
'Database has been dropped.' => 'Database verwijderd.',
|
||||||
'Database has been created.' => 'Database aangemaakt.',
|
'Database has been created.' => 'Database aangemaakt.',
|
||||||
'Database has been renamed.' => 'Database hernoemd.',
|
'Database has been renamed.' => 'Database hernoemd.',
|
||||||
@@ -41,7 +40,7 @@ $translations = array(
|
|||||||
'Create new table' => 'Nieuwe tabel',
|
'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 has been inserted.' => 'Item toegevoegd.',
|
||||||
'Edit' => 'Bewerk',
|
'Edit' => 'Bewerk',
|
||||||
'Insert' => 'Toevoegen',
|
'Insert' => 'Toevoegen',
|
||||||
'Save and insert next' => 'Opslaan, daarna toevoegen',
|
'Save and insert next' => 'Opslaan, daarna toevoegen',
|
||||||
@@ -191,13 +190,14 @@ $translations = array(
|
|||||||
'%d item(s) have been affected.' => array('%d item aangepast.', '%d items aangepast.'),
|
'%d item(s) have been affected.' => array('%d item aangepast.', '%d items aangepast.'),
|
||||||
'whole result' => 'volledig resultaat',
|
'whole result' => 'volledig resultaat',
|
||||||
'Clone' => 'Dupliceer',
|
'Clone' => 'Dupliceer',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Maximum aantal velden bereikt. Verhoog %s.',
|
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Maximum aantal velden bereikt. Verhoog %s en %s.',
|
||||||
'Partition by' => 'Partitioneren op',
|
'Partition by' => 'Partitioneren op',
|
||||||
'Partitions' => 'Partities',
|
'Partitions' => 'Partities',
|
||||||
'Partition name' => 'Partitie naam',
|
'Partition name' => 'Partitie naam',
|
||||||
'Values' => 'Waarden',
|
'Values' => 'Waarden',
|
||||||
'%d row(s) have been imported.' => array('%d rij werd geïmporteerd.', '%d rijen werden geïmporteerd.'),
|
'%d row(s) have been imported.' => array('%d rij werd geïmporteerd.', '%d rijen werden geïmporteerd.'),
|
||||||
'anywhere' => 'overal',
|
'anywhere' => 'overal',
|
||||||
|
'CSV Import' => 'CSV Import',
|
||||||
'Import' => 'Importeren',
|
'Import' => 'Importeren',
|
||||||
'Stop on error' => 'Stoppen bij fout',
|
'Stop on error' => 'Stoppen bij fout',
|
||||||
'%.3f s' => '%.3f s',
|
'%.3f s' => '%.3f s',
|
||||||
@@ -225,47 +225,4 @@ $translations = array(
|
|||||||
'File does not exist.' => 'Bestand niet gevonden.',
|
'File does not exist.' => 'Bestand niet gevonden.',
|
||||||
'%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',
|
|
||||||
'schema' => 'schema',
|
|
||||||
'Schema' => 'Schema',
|
|
||||||
'Alter schema' => 'Schema wijzigen',
|
|
||||||
'Create schema' => 'Schema maken',
|
|
||||||
'Schema has been dropped.' => 'Schema verwijderd.',
|
|
||||||
'Schema has been created.' => 'Schema aangemaakt.',
|
|
||||||
'Schema has been altered.' => 'Schema gewijzigd.',
|
|
||||||
'Sequences' => 'Sequences',
|
|
||||||
'Create sequence' => 'Sequence maken',
|
|
||||||
'Alter sequence' => 'Sequence wijzigen',
|
|
||||||
'Sequence has been dropped.' => 'Sequence verwijderd.',
|
|
||||||
'Sequence has been created.' => 'Sequence aangemaakt.',
|
|
||||||
'Sequence has been altered.' => 'Sequence gewijzigd.',
|
|
||||||
'User types' => 'Gebruikersgedefiniëerde types',
|
|
||||||
'Create type' => 'Type maken',
|
|
||||||
'Alter type' => 'Type wijzigen',
|
|
||||||
'Type has been dropped.' => 'Type verwijderd.',
|
|
||||||
'Type has been created.' => 'Type aangemaakt.',
|
|
||||||
'Ctrl+click on a value to modify it.' => 'Ctrl+klik op een waarde om deze te bewerken.',
|
|
||||||
'Use edit link to modify this value.' => 'Gebruik de link "bewerk" om deze waarde te wijzigen.',
|
|
||||||
'last' => 'laatste',
|
|
||||||
'From server' => 'Van server',
|
|
||||||
'System' => 'Databasesysteem',
|
|
||||||
'Select data' => 'Gegevens selecteren',
|
|
||||||
'Show structure' => 'Toon structuur',
|
|
||||||
'empty' => 'leeg',
|
|
||||||
'Network' => 'Netwerk',
|
|
||||||
'Geometry' => 'Geometrie',
|
|
||||||
'File exists.' => 'Bestand bestaat reeds.',
|
|
||||||
'Attachments' => 'Bijlagen',
|
|
||||||
'%d query(s) executed OK.' => array('%d query succesvol uitgevoerd.', '%d querys succesvol uitgevoerd'),
|
|
||||||
'Show only errors' => 'Enkel fouten tonen',
|
|
||||||
'Refresh' => 'Vernieuwen',
|
|
||||||
'Invalid schema.' => 'Ongeldig schema.',
|
|
||||||
'Please use one of the extensions %s.' => 'Gebruik 1 van volgende extensies: %s.',
|
|
||||||
'now' => 'nu',
|
|
||||||
'ltr' => 'ltr',
|
|
||||||
'Tables have been copied.' => 'De tabellen zijn gekopieerd.',
|
|
||||||
'Copy' => 'Kopieren',
|
|
||||||
'Permanent link' => 'Permanente link',
|
|
||||||
'Edit all' => 'Alles bewerken',
|
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,323 +0,0 @@
|
|||||||
<?php
|
|
||||||
$translations = array(
|
|
||||||
// label for database system selection (MySQL, SQLite, ...)
|
|
||||||
'System' => 'Rodzaj bazy',
|
|
||||||
'Server' => 'Serwer',
|
|
||||||
'Username' => 'Użytkownik',
|
|
||||||
'Password' => 'Hasło',
|
|
||||||
'Permanent login' => 'Zapamiętaj sesję',
|
|
||||||
'Login' => 'Zaloguj się',
|
|
||||||
'Logout' => 'Wyloguj',
|
|
||||||
'Logged as: %s' => 'Zalogowany jako: %s',
|
|
||||||
'Logout successful.' => 'Wylogowano pomyślnie.',
|
|
||||||
'Invalid credentials.' => 'Nieprawidłowe dane logowania.',
|
|
||||||
'Language' => 'Język',
|
|
||||||
'Invalid CSRF token. Send the form again.' => 'Nieprawidłowy token CSRF. Spróbuj wysłać formularz ponownie.',
|
|
||||||
'No extension' => 'Brak rozszerzenia',
|
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'Żadne z rozszerzeń PHP umożliwiających połączenie się z bazą danych (%s) nie jest dostępne.',
|
|
||||||
'Session support must be enabled.' => 'Wymagana jest obsługa sesji w PHP.',
|
|
||||||
'Session expired, please login again.' => 'Sesja wygasła, zaloguj się ponownie.',
|
|
||||||
'%s version: %s through PHP extension %s' => 'Wersja %s: %s za pomocą %s',
|
|
||||||
'Refresh' => 'Odśwież',
|
|
||||||
|
|
||||||
// text direction - 'ltr' or 'rtl'
|
|
||||||
'ltr' => 'ltr',
|
|
||||||
|
|
||||||
'Privileges' => 'Uprawnienia użytkowników',
|
|
||||||
'Create user' => 'Dodaj użytkownika',
|
|
||||||
'User has been dropped.' => 'Użytkownik został usunięty.',
|
|
||||||
'User has been altered.' => 'Użytkownik został zmieniony.',
|
|
||||||
'User has been created.' => 'Użytkownik został dodany.',
|
|
||||||
'Hashed' => 'Zahashowane',
|
|
||||||
'Column' => 'Kolumna',
|
|
||||||
'Routine' => 'Procedura',
|
|
||||||
'Grant' => 'Uprawnienia',
|
|
||||||
'Revoke' => 'Usuń uprawnienia',
|
|
||||||
|
|
||||||
'Process list' => 'Lista procesów',
|
|
||||||
'%d process(es) have been killed.' => array('Przerwano %d wątek.', 'Przerwano %d wątki.', 'Przerwano %d wątków.'),
|
|
||||||
'Kill' => 'Przerwij wykonywanie',
|
|
||||||
|
|
||||||
'Variables' => 'Zmienne',
|
|
||||||
'Status' => 'Status',
|
|
||||||
|
|
||||||
'SQL command' => 'Zapytanie SQL',
|
|
||||||
'%d query(s) executed OK.' => array('Pomyślnie wykonano %d zapytanie.', 'Pomyślnie wykonano %d zapytania.', 'Pomyślnie wykonano %d zapytań.'),
|
|
||||||
'Query executed OK, %d row(s) affected.' => array('Zapytanie wykonane pomyślnie, zmieniono %d rekord.', 'Zapytanie wykonane pomyślnie, zmieniono %d rekordy.', 'Zapytanie wykonane pomyślnie, zmieniono %d rekordów.'),
|
|
||||||
'No commands to execute.' => 'Nic do wykonania.',
|
|
||||||
'Error in query' => 'Błąd w zapytaniu',
|
|
||||||
'Execute' => 'Wykonaj',
|
|
||||||
'Stop on error' => 'Zatrzymaj w przypadku błędu',
|
|
||||||
'Show only errors' => 'Pokaż tylko błędy',
|
|
||||||
// sprintf() format for time of the command
|
|
||||||
'%.3f s' => '%.3f s',
|
|
||||||
'History' => 'Historia',
|
|
||||||
'Clear' => 'Wyczyść',
|
|
||||||
'Edit all' => 'Edytuj wszystkie',
|
|
||||||
|
|
||||||
'File upload' => 'Wgranie pliku',
|
|
||||||
'From server' => 'Z serwera',
|
|
||||||
'Webserver file %s' => 'Plik %s na serwerze',
|
|
||||||
'Run file' => 'Uruchom z pliku',
|
|
||||||
'File does not exist.' => 'Plik nie istnieje.',
|
|
||||||
'File uploads are disabled.' => 'Wgrywanie plików jest wyłączone.',
|
|
||||||
'Unable to upload a file.' => 'Wgranie pliku było niemożliwe.',
|
|
||||||
'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.',
|
|
||||||
|
|
||||||
'Export' => 'Eksport',
|
|
||||||
'Dump' => 'Eksport',
|
|
||||||
'Output' => 'Rezultat',
|
|
||||||
'open' => 'otwórz',
|
|
||||||
'save' => 'zapisz',
|
|
||||||
'Format' => 'Format',
|
|
||||||
'Data' => 'Dane',
|
|
||||||
|
|
||||||
'Database' => 'Baza danych',
|
|
||||||
'database' => 'baza danych',
|
|
||||||
'Use' => 'Wybierz',
|
|
||||||
'Select database' => 'Wybierz bazę danych',
|
|
||||||
'Invalid database.' => 'Nie znaleziono bazy danych.',
|
|
||||||
'Create new database' => 'Utwórz nową bazę danych',
|
|
||||||
'Database has been dropped.' => 'Baza danych została usunięta.',
|
|
||||||
'Databases have been dropped.' => 'Bazy danych zostały usunięte.',
|
|
||||||
'Database has been created.' => 'Baza danych została utworzona.',
|
|
||||||
'Database has been renamed.' => 'Nazwa bazy danych została zmieniona.',
|
|
||||||
'Database has been altered.' => 'Baza danych została zmieniona.',
|
|
||||||
'Alter database' => 'Zmień bazę danych',
|
|
||||||
'Create database' => 'Utwórz bazę danych',
|
|
||||||
'Database schema' => 'Schemat bazy danych',
|
|
||||||
|
|
||||||
// link to current database schema layout
|
|
||||||
'Permanent link' => 'Trwały link',
|
|
||||||
|
|
||||||
// thousands separator - must contain single byte
|
|
||||||
',' => ' ',
|
|
||||||
'Engine' => 'Składowanie',
|
|
||||||
'Collation' => 'Porównywanie znaków',
|
|
||||||
'Data Length' => 'Rozmiar danych',
|
|
||||||
'Index Length' => 'Rozmiar indeksów',
|
|
||||||
'Data Free' => 'Wolne miejsce',
|
|
||||||
'Rows' => 'Liczba rekordów',
|
|
||||||
'%d in total' => '%d w sumie',
|
|
||||||
'Analyze' => 'Analizuj',
|
|
||||||
'Optimize' => 'Optymalizuj',
|
|
||||||
'Check' => 'Sprawdź',
|
|
||||||
'Repair' => 'Napraw',
|
|
||||||
'Truncate' => 'Opróżnij',
|
|
||||||
'Tables have been truncated.' => 'Tabele zostały opróżnione.',
|
|
||||||
'Move to other database' => 'Przenieś do innej bazy danych',
|
|
||||||
'Move' => 'Przenieś',
|
|
||||||
'Tables have been moved.' => 'Tabele zostały przeniesione.',
|
|
||||||
'Copy' => 'Kopiuj',
|
|
||||||
'Tables have been copied.' => 'Tabele zostały skopiowane.',
|
|
||||||
|
|
||||||
'Routines' => 'Procedury i funkcje',
|
|
||||||
'Routine has been called, %d row(s) affected.' => array('Procedura została uruchomiona, zmieniono %d rekord.', 'Procedura została uruchomiona, zmieniono %d rekordy.', 'Procedura została uruchomiona, zmieniono %d rekordów.'),
|
|
||||||
'Call' => 'Uruchom',
|
|
||||||
'Parameter name' => 'Nazwa parametru',
|
|
||||||
'Create procedure' => 'Utwórz procedurę',
|
|
||||||
'Create function' => 'Utwórz funkcję',
|
|
||||||
'Routine has been dropped.' => 'Procedura została usunięta.',
|
|
||||||
'Routine has been altered.' => 'Procedura została zmieniona.',
|
|
||||||
'Routine has been created.' => 'Procedura została utworzona.',
|
|
||||||
'Alter function' => 'Zmień funkcję',
|
|
||||||
'Alter procedure' => 'Zmień procedurę',
|
|
||||||
'Return type' => 'Zwracany typ',
|
|
||||||
|
|
||||||
'Events' => 'Wydarzenia',
|
|
||||||
'Event has been dropped.' => 'Wydarzenie zostało usunięte.',
|
|
||||||
'Event has been altered.' => 'Wydarzenie zostało zmienione.',
|
|
||||||
'Event has been created.' => 'Wydarzenie zostało utworzone.',
|
|
||||||
'Alter event' => 'Zmień wydarzenie',
|
|
||||||
'Create event' => 'Utwórz wydarzenie',
|
|
||||||
'At given time' => 'O danym czasie',
|
|
||||||
'Every' => 'Wykonuj co',
|
|
||||||
'Schedule' => 'Harmonogram',
|
|
||||||
'Start' => 'Początek',
|
|
||||||
'End' => 'Koniec',
|
|
||||||
'On completion preserve' => 'Nie kasuj wydarzenia po przeterminowaniu',
|
|
||||||
|
|
||||||
'Tables' => 'Tabele',
|
|
||||||
'Tables and views' => 'Tabele i perspektywy',
|
|
||||||
'Table' => 'Tabela',
|
|
||||||
'No tables.' => 'Brak tabel.',
|
|
||||||
'Alter table' => 'Zmień tabelę',
|
|
||||||
'Create table' => 'Utwórz tabelę',
|
|
||||||
'Create new table' => 'Utwórz nową tabelę',
|
|
||||||
'Table has been dropped.' => 'Tabela została usunięta.',
|
|
||||||
'Tables have been dropped.' => 'Tabele zostały usunięte.',
|
|
||||||
'Tables have been optimized.' => 'Tabele zostały zoptymalizowane.',
|
|
||||||
'Table has been altered.' => 'Tabela została zmieniona.',
|
|
||||||
'Table has been created.' => 'Tabela została utworzona.',
|
|
||||||
'Table name' => 'Nazwa tabeli',
|
|
||||||
'Show structure' => 'Struktura tabeli',
|
|
||||||
'engine' => 'składowanie',
|
|
||||||
'collation' => 'porównywanie znaków',
|
|
||||||
'Column name' => 'Nazwa kolumny',
|
|
||||||
'Type' => 'Typ',
|
|
||||||
'Length' => 'Długość',
|
|
||||||
'Auto Increment' => 'Auto Increment',
|
|
||||||
'Options' => 'Opcje',
|
|
||||||
'Comment' => 'Komentarz',
|
|
||||||
'Default values' => 'Wartości domyślne',
|
|
||||||
'Drop' => 'Usuń',
|
|
||||||
'Are you sure?' => 'Czy jesteś pewien?',
|
|
||||||
'Move up' => 'Przesuń w górę',
|
|
||||||
'Move down' => 'Przesuń w dół',
|
|
||||||
'Remove' => 'Usuń',
|
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Przekroczono maksymalną liczbę pól. Zwiększ %s.',
|
|
||||||
|
|
||||||
'Partition by' => 'Partycjonowanie',
|
|
||||||
'Partitions' => 'Partycje',
|
|
||||||
'Partition name' => 'Nazwa partycji',
|
|
||||||
'Values' => 'Wartości',
|
|
||||||
|
|
||||||
'View' => 'Perspektywa',
|
|
||||||
'View has been dropped.' => 'Perspektywa została usunięta.',
|
|
||||||
'View has been altered.' => 'Perspektywa została zmieniona.',
|
|
||||||
'View has been created.' => 'Perspektywa została utworzona.',
|
|
||||||
'Alter view' => 'Zmień perspektywę',
|
|
||||||
'Create view' => 'Utwórz perspektywę',
|
|
||||||
|
|
||||||
'Indexes' => 'Indeksy',
|
|
||||||
'Indexes have been altered.' => 'Indeksy zostały zmienione.',
|
|
||||||
'Alter indexes' => 'Zmień indeksy',
|
|
||||||
'Add next' => 'Dodaj następny',
|
|
||||||
'Index Type' => 'Typ indeksu',
|
|
||||||
'Column (length)' => 'Kolumna (długość)',
|
|
||||||
|
|
||||||
'Foreign keys' => 'Klucze obce',
|
|
||||||
'Foreign key' => 'Klucz obcy',
|
|
||||||
'Foreign key has been dropped.' => 'Klucz obcy został usunięty.',
|
|
||||||
'Foreign key has been altered.' => 'Klucz obcy został zmieniony.',
|
|
||||||
'Foreign key has been created.' => 'Klucz obcy został utworzony.',
|
|
||||||
'Target table' => 'Tabela docelowa',
|
|
||||||
'Change' => 'Zmień',
|
|
||||||
'Source' => 'Źródło',
|
|
||||||
'Target' => 'Cel',
|
|
||||||
'Add column' => 'Dodaj kolumnę',
|
|
||||||
'Alter' => 'Zmień',
|
|
||||||
'Add foreign key' => 'Dodaj klucz obcy',
|
|
||||||
'ON DELETE' => 'W przypadku usunięcia',
|
|
||||||
'ON UPDATE' => 'W przypadku zmiany',
|
|
||||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Źródłowa i docelowa kolumna muszą być tego samego typu, powinien istnieć indeks na docelowej kolumnie oraz muszą istnieć dane referencyjne.',
|
|
||||||
|
|
||||||
'Triggers' => 'Wyzwalacze',
|
|
||||||
'Add trigger' => 'Dodaj wyzwalacz',
|
|
||||||
'Trigger has been dropped.' => 'Wyzwalacz został usunięty.',
|
|
||||||
'Trigger has been altered.' => 'Wyzwalacz został zmieniony.',
|
|
||||||
'Trigger has been created.' => 'Wyzwalacz został utworzony.',
|
|
||||||
'Alter trigger' => 'Zmień wyzwalacz',
|
|
||||||
'Create trigger' => 'Utwórz wyzwalacz',
|
|
||||||
'Time' => 'Czas',
|
|
||||||
'Event' => 'Wydarzenie',
|
|
||||||
'Name' => 'Nazwa',
|
|
||||||
|
|
||||||
'select' => 'przeglądaj',
|
|
||||||
'Select' => 'pokaż',
|
|
||||||
'Select data' => 'Pokaż dane',
|
|
||||||
'Functions' => 'Funkcje',
|
|
||||||
'Aggregation' => 'Agregacje',
|
|
||||||
'Search' => 'Szukaj',
|
|
||||||
'anywhere' => 'gdziekolwiek',
|
|
||||||
'Search data in tables' => 'Wyszukaj we wszystkich tabelach',
|
|
||||||
'Sort' => 'Sortuj',
|
|
||||||
'descending' => 'malejąco',
|
|
||||||
'Limit' => 'Limit',
|
|
||||||
'Text length' => 'Długość tekstu',
|
|
||||||
'Action' => 'Czynność',
|
|
||||||
'Full table scan' => 'Wymaga pełnego przeskanowania tabeli',
|
|
||||||
'Unable to select the table' => 'Nie udało się pobrać danych z tabeli',
|
|
||||||
'No rows.' => 'Brak rekordów.',
|
|
||||||
'%d row(s)' => array('%d rekord', '%d rekordy', '%d rekordów'),
|
|
||||||
'Page' => 'Strona',
|
|
||||||
'last' => 'ostatni',
|
|
||||||
'Load more data' => 'Wczytaj więcej danych',
|
|
||||||
'Loading' => 'Wczytywanie',
|
|
||||||
'whole result' => 'wybierz wszystkie',
|
|
||||||
'%d byte(s)' => array('%d bajt', '%d bajty', '%d bajtów'),
|
|
||||||
|
|
||||||
'Import' => 'Import',
|
|
||||||
'%d row(s) have been imported.' => array('%d rekord został zaimportowany.', '%d rekordy zostały zaimportowane.', '%d rekordów zostało zaimportowanych.'),
|
|
||||||
|
|
||||||
// in-place editing in select
|
|
||||||
'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ść.',
|
|
||||||
|
|
||||||
// %s can contain auto-increment value
|
|
||||||
'Item%s has been inserted.' => 'Rekord%s został dodany.',
|
|
||||||
'Item has been deleted.' => 'Rekord został usunięty.',
|
|
||||||
'Item has been updated.' => 'Rekord został zaktualizowany.',
|
|
||||||
'%d item(s) have been affected.' => array('Zmieniono %d rekord.', 'Zmieniono %d rekordy.', 'Zmieniono %d rekordów.'),
|
|
||||||
'New item' => 'Nowy rekord',
|
|
||||||
'original' => 'bez zmian',
|
|
||||||
// label for value '' in enum data type
|
|
||||||
'empty' => 'puste',
|
|
||||||
'edit' => 'edytuj',
|
|
||||||
'Edit' => 'Edytuj',
|
|
||||||
'Insert' => 'Dodaj',
|
|
||||||
'Save' => 'Zapisz zmiany',
|
|
||||||
'Save and continue edit' => 'Zapisz i kontynuuj edycję',
|
|
||||||
'Save and insert next' => 'Zapisz i dodaj następny',
|
|
||||||
'Clone' => 'Duplikuj',
|
|
||||||
'Delete' => 'Usuń',
|
|
||||||
'You have no privileges to update this table.' => 'Brak uprawnień do edycji tej tabeli',
|
|
||||||
|
|
||||||
'E-mail' => 'E-mail',
|
|
||||||
'From' => 'Nadawca',
|
|
||||||
'Subject' => 'Temat',
|
|
||||||
'Attachments' => 'Załączniki',
|
|
||||||
'Send' => 'Wyślij',
|
|
||||||
'%d e-mail(s) have been sent.' => array('Wysłano %d e-mail.', 'Wysłano %d e-maile.', 'Wysłano %d e-maili.'),
|
|
||||||
|
|
||||||
// data type descriptions
|
|
||||||
'Numbers' => 'Numeryczne',
|
|
||||||
'Date and time' => 'Data i czas',
|
|
||||||
'Strings' => 'Tekstowe',
|
|
||||||
'Binary' => 'Binarne',
|
|
||||||
'Lists' => 'Listy',
|
|
||||||
'Network' => 'Sieć',
|
|
||||||
'Geometry' => 'Geometria',
|
|
||||||
'Relations' => 'Relacje',
|
|
||||||
|
|
||||||
'Editor' => 'Edytor',
|
|
||||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
|
||||||
'$1-$3-$5' => '$6.$4.$1',
|
|
||||||
// hint for date format - use language equivalents for day, month and year shortcuts
|
|
||||||
'[yyyy]-mm-dd' => 'd.m.[rrrr]',
|
|
||||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
|
||||||
'now' => 'teraz',
|
|
||||||
'yes' => 'tak',
|
|
||||||
'no' => 'nie',
|
|
||||||
|
|
||||||
// general SQLite error in create, drop or rename database
|
|
||||||
'File exists.' => 'Plik już istnieje.',
|
|
||||||
'Please use one of the extensions %s.' => 'Proszę użyć jednego z rozszerzeń: %s.',
|
|
||||||
|
|
||||||
// PostgreSQL and MS SQL schema support
|
|
||||||
'Alter schema' => 'Zmień schemat',
|
|
||||||
'Create schema' => 'Utwórz schemat',
|
|
||||||
'Schema has been dropped.' => 'Schemat został usunięty.',
|
|
||||||
'Schema has been created.' => 'Schemat został utworzony.',
|
|
||||||
'Schema has been altered.' => 'Schemat został zmieniony.',
|
|
||||||
'schema' => 'schemat',
|
|
||||||
'Schema' => 'Schemat',
|
|
||||||
'Invalid schema.' => 'Nieprawidłowy schemat.',
|
|
||||||
|
|
||||||
// PostgreSQL sequences support
|
|
||||||
'Sequences' => 'Sekwencje',
|
|
||||||
'Create sequence' => 'Utwórz sekwencję',
|
|
||||||
'Sequence has been dropped.' => 'Sekwencja została usunięta.',
|
|
||||||
'Sequence has been created.' => 'Sekwencja została utworzona.',
|
|
||||||
'Sequence has been altered.' => 'Sekwencja została zmieniona.',
|
|
||||||
'Alter sequence' => 'Zmień sekwencję',
|
|
||||||
|
|
||||||
// PostgreSQL user types support
|
|
||||||
'User types' => 'Typy użytkownika',
|
|
||||||
'Create type' => 'Utwórz typ',
|
|
||||||
'Type has been dropped.' => 'Typ został usunięty.',
|
|
||||||
'Type has been created.' => 'Typ został utworzony.',
|
|
||||||
'Alter type' => 'Zmień typ',
|
|
||||||
);
|
|
||||||
@@ -1,266 +0,0 @@
|
|||||||
<?php
|
|
||||||
$translations = array(
|
|
||||||
'Login' => 'Entrar',
|
|
||||||
'Logout successful.' => 'Saida 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.' => 'Tabela eliminada.',
|
|
||||||
'Table has been altered.' => 'Tabela modificada.',
|
|
||||||
'Table has been created.' => 'Tabela criada.',
|
|
||||||
'Alter table' => 'Modificar 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' => 'Remover',
|
|
||||||
'Database has been dropped.' => 'Base de dados eliminada.',
|
|
||||||
'Database has been created.' => 'Base de dados criada.',
|
|
||||||
'Database has been renamed.' => 'Base de dados renomeada.',
|
|
||||||
'Database has been altered.' => 'Base de dados modificada.',
|
|
||||||
'Alter database' => 'Modificar Base de dados',
|
|
||||||
'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' => 'registros',
|
|
||||||
'Create new table' => 'Nova tabela',
|
|
||||||
'Item has been deleted.' => 'Registro eliminado.',
|
|
||||||
'Item has been updated.' => 'Registro modificado.',
|
|
||||||
'Item%s has been inserted.' => 'Registro%s inserido.',
|
|
||||||
'Edit' => 'Modificar',
|
|
||||||
'Insert' => 'Inserir',
|
|
||||||
'Save and insert next' => 'Salvar e inserir outro',
|
|
||||||
'Delete' => 'Apagar',
|
|
||||||
'Database' => 'Base de dados',
|
|
||||||
'Routines' => 'Procedimentos',
|
|
||||||
'Indexes have been altered.' => 'Índices modificados.',
|
|
||||||
'Indexes' => 'Índices',
|
|
||||||
'Alter indexes' => 'Modificar í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' => 'modificar',
|
|
||||||
'Page' => 'Página',
|
|
||||||
'Query executed OK, %d row(s) affected.' => array('Consulta executada, %d registro afetado.', 'Consulta executada, %d registros afetados.'),
|
|
||||||
'Error in query' => 'Erro na consulta',
|
|
||||||
'Execute' => 'Executar',
|
|
||||||
'Table' => 'Tabela',
|
|
||||||
'Foreign keys' => 'Chaves foráneas',
|
|
||||||
'Triggers' => 'Triggers',
|
|
||||||
'View' => 'Visualizar',
|
|
||||||
'Unable to select the table' => 'Não é possivel selecionar a Tabela',
|
|
||||||
'Invalid CSRF token. Send the form again.' => 'Token CSRF inválido. Enviar o formulario novamente.',
|
|
||||||
'Comment' => 'Comentário',
|
|
||||||
'Default values' => 'Valores predeterminados',
|
|
||||||
'%d byte(s)' => array('%d byte', '%d bytes'),
|
|
||||||
'No commands to execute.' => 'Nenhum comando para executar.',
|
|
||||||
'Unable to upload a file.' => 'Não é possível enviar o arquivo.',
|
|
||||||
'File upload' => 'Importar arquivo',
|
|
||||||
'File uploads are disabled.' => 'Importação de arquivos desablilitada.',
|
|
||||||
'Routine has been called, %d row(s) affected.' => array('Consulta executada, %d registro afetado.', 'Consulta executada, %d registros afetados.'),
|
|
||||||
'Call' => 'Chamar',
|
|
||||||
'No extension' => 'Não há extension',
|
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'Nenhuma das extensões PHP suportadas (%s) está disponivel.',
|
|
||||||
'Session support must be enabled.' => 'Devem estar habilitadas as sessões.',
|
|
||||||
'Session expired, please login again.' => 'Sessão expirada, por favor entre sua Chave de novo.',
|
|
||||||
'Text length' => 'Tamanho de texto',
|
|
||||||
'Foreign key has been dropped.' => 'Chave externa eliminada.',
|
|
||||||
'Foreign key has been altered.' => 'Chave externa modificada.',
|
|
||||||
'Foreign key has been created.' => 'Chave externa criada.',
|
|
||||||
'Foreign key' => 'Chave externa',
|
|
||||||
'Target table' => 'Tabela de destino',
|
|
||||||
'Change' => 'Modificar',
|
|
||||||
'Source' => 'Origem',
|
|
||||||
'Target' => 'Destino',
|
|
||||||
'Add column' => 'Adicionar coluna',
|
|
||||||
'Alter' => 'Modificar',
|
|
||||||
'Add foreign key' => 'Adicionar Chave foránea',
|
|
||||||
'ON DELETE' => 'ON DELETE',
|
|
||||||
'ON UPDATE' => 'ON UPDATE',
|
|
||||||
'Index Type' => 'Tipo de índice',
|
|
||||||
'Column (length)' => 'coluna (tamanho)',
|
|
||||||
'View has been dropped.' => 'Vista eliminada.',
|
|
||||||
'View has been altered.' => 'Vista modificada.',
|
|
||||||
'View has been created.' => 'Vista criada.',
|
|
||||||
'Alter view' => 'Modificar vista',
|
|
||||||
'Create view' => 'Criar vista',
|
|
||||||
'Name' => 'Nome',
|
|
||||||
'Process list' => 'Lista de processos',
|
|
||||||
'%d process(es) have been killed.' => array('%d processo terminado.', '%d processos terminados.'),
|
|
||||||
'Kill' => 'Parar',
|
|
||||||
'Parameter name' => 'Nome de Parâmetro',
|
|
||||||
'Database schema' => 'Esquema de Base de dados',
|
|
||||||
'Create procedure' => 'Criar procedimento',
|
|
||||||
'Create function' => 'Criar função',
|
|
||||||
'Routine has been dropped.' => 'Procedimento eliminado.',
|
|
||||||
'Routine has been altered.' => 'Procedimento modificado.',
|
|
||||||
'Routine has been created.' => 'Procedimento criado.',
|
|
||||||
'Alter function' => 'Modificar Função',
|
|
||||||
'Alter procedure' => 'Modificar procedimento',
|
|
||||||
'Return type' => 'Tipo de valor de regreso',
|
|
||||||
'Add trigger' => 'Adicionar trigger',
|
|
||||||
'Trigger has been dropped.' => 'Trigger eliminado.',
|
|
||||||
'Trigger has been altered.' => 'Trigger modificado.',
|
|
||||||
'Trigger has been created.' => 'Trigger criado.',
|
|
||||||
'Alter trigger' => 'Modificar Trigger',
|
|
||||||
'Create trigger' => 'Adicionar Trigger',
|
|
||||||
'Time' => 'Tempo',
|
|
||||||
'Event' => 'Evento',
|
|
||||||
'%s version: %s through PHP extension %s' => 'Versão %s: %s através da extensão PHP %s',
|
|
||||||
'%d row(s)' => array('%d registro', '%d registros'),
|
|
||||||
'Remove' => 'Remover',
|
|
||||||
'Are you sure?' => 'Está seguro?',
|
|
||||||
'Privileges' => 'Privilégios',
|
|
||||||
'Create user' => 'Criar Usuário',
|
|
||||||
'User has been dropped.' => 'Usuário eliminado.',
|
|
||||||
'User has been altered.' => 'Usuário modificado.',
|
|
||||||
'User has been created.' => 'Usuário criado.',
|
|
||||||
'Hashed' => 'Hash',
|
|
||||||
'Column' => 'Coluna',
|
|
||||||
'Routine' => 'Rotina',
|
|
||||||
'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' => 'mostrar',
|
|
||||||
'save' => 'salvas',
|
|
||||||
'Format' => 'Formato',
|
|
||||||
'Tables' => 'Tabelas',
|
|
||||||
'Data' => 'Dados',
|
|
||||||
'Event has been dropped.' => 'Evento eliminado.',
|
|
||||||
'Event has been altered.' => 'Evento modificado.',
|
|
||||||
'Event has been created.' => 'Evento 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 vistas',
|
|
||||||
'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.' => 'Tabelas truncadas (truncate).',
|
|
||||||
'Rows' => 'Registros',
|
|
||||||
',' => ' ',
|
|
||||||
'Tables have been moved.' => 'As Tabelas foram movidas.',
|
|
||||||
'Move to other database' => 'Mover outra Base de dados',
|
|
||||||
'Move' => 'Mover',
|
|
||||||
'Engine' => 'Motor',
|
|
||||||
'Save and continue edit' => 'Salvar e continuar editando',
|
|
||||||
'original' => 'original',
|
|
||||||
'Tables have been dropped.' => 'Tabelas eliminadas.',
|
|
||||||
'%d item(s) have been affected.' => array('%d item afetado.', '%d itens afetados.'),
|
|
||||||
'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 importado.', '%d registros 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 é %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 enviado.', '%d emails enviados.'),
|
|
||||||
'Webserver file %s' => 'Arquivo do servidor web %s',
|
|
||||||
'File does not exist.' => 'Arquivo não existe.',
|
|
||||||
'%d in total' => '%d no total',
|
|
||||||
'Permanent login' => 'Salvar Senha',
|
|
||||||
'Databases have been dropped.' => 'Bases de dados eliminadas.',
|
|
||||||
'Search data in tables' => 'Buscar dados nas Tabelas',
|
|
||||||
'schema' => 'esquema',
|
|
||||||
'Schema' => 'Esquema',
|
|
||||||
'Alter schema' => 'Modificar esquema',
|
|
||||||
'Create schema' => 'Criar esquema',
|
|
||||||
'Schema has been dropped.' => 'Esquema eliminado.',
|
|
||||||
'Schema has been created.' => 'Esquema criado.',
|
|
||||||
'Schema has been altered.' => 'Esquema modificado.',
|
|
||||||
'Sequences' => 'Sequências',
|
|
||||||
'Create sequence' => 'Criar sequências',
|
|
||||||
'Alter sequence' => 'Modificar sequência',
|
|
||||||
'Sequence has been dropped.' => 'Sequência eliminada.',
|
|
||||||
'Sequence has been created.' => 'Sequência criada.',
|
|
||||||
'Sequence has been altered.' => 'Sequência modificada.',
|
|
||||||
'User types' => 'Tipos definido pelo usuário',
|
|
||||||
'Create type' => 'Criar tipo',
|
|
||||||
'Alter type' => 'Modificar tipo',
|
|
||||||
'Type has been dropped.' => 'Tipo eliminado.',
|
|
||||||
'Type has been created.' => 'Tipo criado.',
|
|
||||||
'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.',
|
|
||||||
'last' => 'último',
|
|
||||||
'From server' => 'Desde servidor',
|
|
||||||
'System' => 'Motor de Base de dados',
|
|
||||||
'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,271 +0,0 @@
|
|||||||
<?php
|
|
||||||
$translations = array(
|
|
||||||
'Login' => 'Intră',
|
|
||||||
'Logout successful.' => 'Ați eșit cu succes.',
|
|
||||||
'Invalid credentials.' => 'Numele de utilizator sau parola este greșită.',
|
|
||||||
'Server' => 'Server',
|
|
||||||
'Username' => 'Nume de utilizator',
|
|
||||||
'Password' => 'Parola',
|
|
||||||
'Select database' => 'Alege baza de date',
|
|
||||||
'Invalid database.' => 'Bază de deate invalidă.',
|
|
||||||
'Create new database' => 'Crează o bază de date nouă',
|
|
||||||
'Table has been dropped.' => 'Tabelul a fost șters.',
|
|
||||||
'Table has been altered.' => 'Tabelul a fost modificat.',
|
|
||||||
'Table has been created.' => 'Tabelul a fost creat.',
|
|
||||||
'Alter table' => 'Modifică tabelul',
|
|
||||||
'Create table' => 'Crează tabel',
|
|
||||||
'Table name' => 'Denumirea tabelului',
|
|
||||||
'engine' => 'tip',
|
|
||||||
'collation' => 'colaționarea',
|
|
||||||
'Column name' => 'Denumirea coloanei',
|
|
||||||
'Type' => 'Tip',
|
|
||||||
'Length' => 'Lungime',
|
|
||||||
'Auto Increment' => 'Creșterea automată',
|
|
||||||
'Options' => 'Acțiune',
|
|
||||||
'Save' => 'Salvează',
|
|
||||||
'Drop' => 'Șterge',
|
|
||||||
'Database has been dropped.' => 'Baza de date a fost ștearsă.',
|
|
||||||
'Database has been created.' => 'Baza de date a fost creată.',
|
|
||||||
'Database has been renamed.' => 'Baza de date a fost redenumită.',
|
|
||||||
'Database has been altered.' => 'Baza de date a fost modificată.',
|
|
||||||
'Alter database' => 'Modifică baza de date',
|
|
||||||
'Create database' => 'Crează baza de date',
|
|
||||||
'SQL command' => 'SQL query',
|
|
||||||
'Dump' => 'Dump',
|
|
||||||
'Logout' => 'Eșire',
|
|
||||||
'database' => 'baza de date',
|
|
||||||
'Use' => 'Alege',
|
|
||||||
'No tables.' => 'În baza de date nu sunt tabele.',
|
|
||||||
'select' => 'selectează',
|
|
||||||
'Create new table' => 'Crează tabel nou',
|
|
||||||
'Item has been deleted.' => 'Înregistrare a fost ștearsă.',
|
|
||||||
'Item has been updated.' => 'Înregistrare a fost înnoită.',
|
|
||||||
'Item%s has been inserted.' => 'Înregistrarea%s a fost inserată.',
|
|
||||||
'Edit' => 'Editează',
|
|
||||||
'Insert' => 'Inserează',
|
|
||||||
'Save and insert next' => 'Salvează și mai inserează',
|
|
||||||
'Delete' => 'Șterge',
|
|
||||||
'Database' => 'Baza de date',
|
|
||||||
'Routines' => 'Proceduri și funcții salvate',
|
|
||||||
'Indexes have been altered.' => 'Indexele au fost modificate.',
|
|
||||||
'Indexes' => 'Indexe',
|
|
||||||
'Alter indexes' => 'Modifică indexe',
|
|
||||||
'Add next' => 'Adaugă încă',
|
|
||||||
'Language' => 'Limba',
|
|
||||||
'Select' => 'Selectează',
|
|
||||||
'New item' => 'Înscriere nouă',
|
|
||||||
'Search' => 'Căutare',
|
|
||||||
'Sort' => 'Sortare',
|
|
||||||
'descending' => 'descrescător',
|
|
||||||
'Limit' => 'Limit',
|
|
||||||
'No rows.' => 'Nu sunt înscrieri.',
|
|
||||||
'Action' => 'Acțiune',
|
|
||||||
'edit' => 'editare',
|
|
||||||
'Page' => 'Pagina',
|
|
||||||
'Query executed OK, %d row(s) affected.' => array('Query executat, %d înscriere modificată.', 'Query executat, %d înscrieri modificate.'),
|
|
||||||
'Error in query' => 'Eroare în query',
|
|
||||||
'Execute' => 'Execută',
|
|
||||||
'Table' => 'Tabel',
|
|
||||||
'Foreign keys' => 'Cheiuri externe',
|
|
||||||
'Triggers' => 'Triggere',
|
|
||||||
'View' => 'Reprezentare',
|
|
||||||
'Unable to select the table' => 'Nu am putut selecta date din tabel',
|
|
||||||
'Invalid CSRF token. Send the form again.' => 'CSRF token imposibil. Retrimite forma.',
|
|
||||||
'Comment' => 'Comentariu',
|
|
||||||
'Default values' => 'Valoarea inițială',
|
|
||||||
'%d byte(s)' => array('%d octet', '%d octeți'),
|
|
||||||
'No commands to execute.' => 'Nu sunt comenzi de executat.',
|
|
||||||
'Unable to upload a file.' => 'Nu am putut încărca fișierul pe server.',
|
|
||||||
'File upload' => 'Încarcă fișierul',
|
|
||||||
'File uploads are disabled.' => 'Încărcarea fișierelor este interzisă.',
|
|
||||||
'Routine has been called, %d row(s) affected.' => array('A fost executată procedură, %d înscriere a fost modificată.', 'A fost executată procedură, %d înscrieri au fost modificate.'),
|
|
||||||
'Call' => 'Apelează',
|
|
||||||
'No extension' => 'Nu este extensie',
|
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'Nu este aviabilă nici o extensie suportată (%s).',
|
|
||||||
'Session support must be enabled.' => 'Sesiunile trebuie să fie pornite.',
|
|
||||||
'Session expired, please login again.' => 'Timpul sesiunii a expirat, rog să te loghezi din nou.',
|
|
||||||
'Text length' => 'Lungimea textului',
|
|
||||||
'Foreign key has been dropped.' => 'Chei extern a fost șters.',
|
|
||||||
'Foreign key has been altered.' => 'Chei extern a fost modificat.',
|
|
||||||
'Foreign key has been created.' => 'Chei extern a fost creat.',
|
|
||||||
'Foreign key' => 'Chei extern',
|
|
||||||
'Target table' => 'Tabela scop',
|
|
||||||
'Change' => 'Modifică',
|
|
||||||
'Source' => 'Sursă',
|
|
||||||
'Target' => 'Scop',
|
|
||||||
'Add column' => 'Adaugă coloană',
|
|
||||||
'Alter' => 'Modifică',
|
|
||||||
'Add foreign key' => 'Adaugă chei extern',
|
|
||||||
'ON DELETE' => 'La ștergere',
|
|
||||||
'ON UPDATE' => 'La modificare',
|
|
||||||
'Index Type' => 'Tipul indexului',
|
|
||||||
'Column (length)' => 'Coloană (lungimea)',
|
|
||||||
'View has been dropped.' => 'Reprezentarea a fost ștearsă.',
|
|
||||||
'View has been altered.' => 'Reprezentarea a fost modificată.',
|
|
||||||
'View has been created.' => 'Reprezentarea a fost creată.',
|
|
||||||
'Alter view' => 'Modifică reprezentare',
|
|
||||||
'Create view' => 'Crează reprezentare',
|
|
||||||
'Name' => 'Titlu',
|
|
||||||
'Process list' => 'Lista proceselor',
|
|
||||||
'%d process(es) have been killed.' => array('A fost finisat %d proces.', 'Au fost finisate %d procese.'),
|
|
||||||
'Kill' => 'Termină',
|
|
||||||
'Parameter name' => 'Numele parametrului',
|
|
||||||
'Database schema' => 'Schema bazei de date',
|
|
||||||
'Create procedure' => 'Crează procedură',
|
|
||||||
'Create function' => 'Crează funcție',
|
|
||||||
'Routine has been dropped.' => 'Procedura a fost ștearsă.',
|
|
||||||
'Routine has been altered.' => 'Procedura a fost modificată.',
|
|
||||||
'Routine has been created.' => 'Procedura a fost creată.',
|
|
||||||
'Alter function' => 'Modifică funcția',
|
|
||||||
'Alter procedure' => 'Modifică procedura',
|
|
||||||
'Return type' => 'Tipul returnării',
|
|
||||||
'Add trigger' => 'Adaugă trigger',
|
|
||||||
'Trigger has been dropped.' => 'Triggerul a fost șters.',
|
|
||||||
'Trigger has been altered.' => 'Triggerul a fost modificat.',
|
|
||||||
'Trigger has been created.' => 'Triggerul a fost creat.',
|
|
||||||
'Alter trigger' => 'Modifică trigger',
|
|
||||||
'Create trigger' => 'Crează trigger',
|
|
||||||
'Time' => 'Timp',
|
|
||||||
'Event' => 'Eveniment',
|
|
||||||
'%s version: %s through PHP extension %s' => 'Versiunea %s: %s cu extensia PHP %s',
|
|
||||||
'%d row(s)' => array('%d înscriere', '%d înscrieri'),
|
|
||||||
'Remove' => 'Șterge',
|
|
||||||
'Are you sure?' => 'Ești precis?',
|
|
||||||
'Privileges' => 'Privelegii',
|
|
||||||
'Create user' => 'Crează utilizator',
|
|
||||||
'User has been dropped.' => 'Utilizatorul a fost șters.',
|
|
||||||
'User has been altered.' => 'Utilizatorul a fost modificat.',
|
|
||||||
'User has been created.' => 'Utilizatorul a fost creat.',
|
|
||||||
'Hashed' => 'Hashed',
|
|
||||||
'Column' => 'Coloană',
|
|
||||||
'Routine' => 'Procedură',
|
|
||||||
'Grant' => 'Permite',
|
|
||||||
'Revoke' => 'Interzice',
|
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Mesajul POST este prea mare. Trimiteți mai puține date sau măriți parametrul configurației directivei %s.',
|
|
||||||
'Logged as: %s' => 'Ați intrat ca: %s',
|
|
||||||
'Move up' => 'Mișcă în sus',
|
|
||||||
'Move down' => 'Mișcă în jos',
|
|
||||||
'Functions' => 'Funcții',
|
|
||||||
'Aggregation' => 'Agregare',
|
|
||||||
'Export' => 'Export',
|
|
||||||
'Output' => 'Date de eșire',
|
|
||||||
'open' => 'deschide',
|
|
||||||
'save' => 'salvează',
|
|
||||||
'Format' => 'Format',
|
|
||||||
'Tables' => 'Tabele',
|
|
||||||
'Data' => 'Date',
|
|
||||||
'Event has been dropped.' => 'Evenimentul a fost șters.',
|
|
||||||
'Event has been altered.' => 'Evenimentul a fost modificat.',
|
|
||||||
'Event has been created.' => 'Evenimentul a fost adăugat.',
|
|
||||||
'Alter event' => 'Modifică eveniment',
|
|
||||||
'Create event' => 'Creează evenimet',
|
|
||||||
'At given time' => 'În timpul curent',
|
|
||||||
'Every' => 'Fiecare',
|
|
||||||
'Events' => 'Evenimente',
|
|
||||||
'Schedule' => 'Program',
|
|
||||||
'Start' => 'Început',
|
|
||||||
'End' => 'Svârșit',
|
|
||||||
'Status' => 'Stare',
|
|
||||||
'On completion preserve' => 'Salvează după finisare',
|
|
||||||
'Tables and views' => 'Tabele și reprezentări',
|
|
||||||
'Data Length' => 'Cantitatea de date',
|
|
||||||
'Index Length' => 'Cantitatea de indexe',
|
|
||||||
'Data Free' => 'Spațiu liber',
|
|
||||||
'Collation' => 'Colaționare',
|
|
||||||
'Analyze' => 'Analizează',
|
|
||||||
'Optimize' => 'Optimizează',
|
|
||||||
'Check' => 'Controlează',
|
|
||||||
'Repair' => 'Repară',
|
|
||||||
'Truncate' => 'Curăță',
|
|
||||||
'Tables have been truncated.' => 'Tabelele au fost curățate.',
|
|
||||||
'Rows' => 'Înscrieri',
|
|
||||||
',' => ',',
|
|
||||||
'Tables have been moved.' => 'Tabelele au fost mutate.',
|
|
||||||
'Move to other database' => 'Mută în altă bază de date',
|
|
||||||
'Move' => 'Mută',
|
|
||||||
'Engine' => 'Tip',
|
|
||||||
'Save and continue edit' => 'Salvează și continuă editarea',
|
|
||||||
'original' => 'original',
|
|
||||||
'%d item(s) have been affected.' => array('A fost modificată %d înscriere.', 'Au fost modificate %d înscrieri.'),
|
|
||||||
'whole result' => 'tot rezultatul',
|
|
||||||
'Tables have been dropped.' => 'Tabelele au fost șterse.',
|
|
||||||
'Clone' => 'Clonează',
|
|
||||||
'Partition by' => 'Împarte',
|
|
||||||
'Partitions' => 'Secțiuni',
|
|
||||||
'Partition name' => 'Denumirea secțiunii',
|
|
||||||
'Values' => 'Parametru',
|
|
||||||
'%d row(s) have been imported.' => array('%d rînd importat.', '%d rînduri importate.'),
|
|
||||||
'Import' => 'Importă',
|
|
||||||
'Stop on error' => 'Opreștete la eroare',
|
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Numărul maxim de înscrieri disponibile a fost atins. Majorați %s.',
|
|
||||||
'anywhere' => 'oriunde',
|
|
||||||
'%.3f s' => '%.3f s',
|
|
||||||
'$1-$3-$5' => '$5.$3.$1',
|
|
||||||
'[yyyy]-mm-dd' => 'dd.mm.[yyyy]',
|
|
||||||
'History' => 'Istoria',
|
|
||||||
'Variables' => 'Variabile',
|
|
||||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Coloanele ar trebui să aibă aceleaşi tipuri de date, trebuie să existe date de referinţă și un index pe coloanela-ţintă.',
|
|
||||||
'Relations' => 'Relații',
|
|
||||||
'Run file' => 'Execută fișier',
|
|
||||||
'Clear' => 'Curățp',
|
|
||||||
'Maximum allowed file size is %sB.' => 'Fișierul maxim admis - %sO.',
|
|
||||||
'Numbers' => 'Număr',
|
|
||||||
'Date and time' => 'Data și timpul',
|
|
||||||
'Strings' => 'Șire de caractere',
|
|
||||||
'Binary' => 'Tip binar',
|
|
||||||
'Lists' => 'Liste',
|
|
||||||
'Editor' => 'Editor',
|
|
||||||
'E-mail' => 'Poșta electronică',
|
|
||||||
'From' => 'De la',
|
|
||||||
'Subject' => 'Pentru',
|
|
||||||
'Send' => 'Trimite',
|
|
||||||
'%d e-mail(s) have been sent.' => array('A fost trimisă %d scrisoare.', 'Au fost trimise %d scrisori.'),
|
|
||||||
'Webserver file %s' => 'Fișierul %s pe server',
|
|
||||||
'File does not exist.' => 'Așa fișier nu există.',
|
|
||||||
'%d in total' => 'În total %d',
|
|
||||||
'Permanent login' => 'Logare permanentă',
|
|
||||||
'Databases have been dropped.' => 'Baze de date au fost șterse.',
|
|
||||||
'Search data in tables' => 'Caută în tabele',
|
|
||||||
'schema' => 'schema',
|
|
||||||
'Schema' => 'Schema',
|
|
||||||
'Alter schema' => 'Modifică schema',
|
|
||||||
'Create schema' => 'Crează o schemă',
|
|
||||||
'Schema has been dropped.' => 'Schema a fost ștearsă.',
|
|
||||||
'Schema has been created.' => 'Schema a fost creată.',
|
|
||||||
'Schema has been altered.' => 'Schema a fost modificată.',
|
|
||||||
'Sequences' => '«Secvențe»',
|
|
||||||
'Create sequence' => 'Crează «secvență»',
|
|
||||||
'Alter sequence' => 'Modifică «secvență»',
|
|
||||||
'Sequence has been dropped.' => '«secvența» a fost ștearsă.',
|
|
||||||
'Sequence has been created.' => '«secvența» a fost creată.',
|
|
||||||
'Sequence has been altered.' => '«secvența» a fost modificată.',
|
|
||||||
'User types' => 'Tipuri de utilizatori',
|
|
||||||
'Create type' => 'Crează tip noi',
|
|
||||||
'Alter type' => 'Modifică tip',
|
|
||||||
'Type has been dropped.' => 'Tiipul a fost șters.',
|
|
||||||
'Type has been created.' => 'Crează tip nou.',
|
|
||||||
'Ctrl+click on a value to modify it.' => 'Ctrl+click pe o valoare pentru a o modifica.',
|
|
||||||
'Use edit link to modify this value.' => 'Valoare poate fi modificată cu ajutorul butonului «modifică».',
|
|
||||||
'last' => 'ultima',
|
|
||||||
'From server' => 'De pe server',
|
|
||||||
'System' => 'Sistema',
|
|
||||||
'Select data' => 'Selectează',
|
|
||||||
'Show structure' => 'Arată structura',
|
|
||||||
'empty' => 'gol',
|
|
||||||
'Network' => 'Rețea',
|
|
||||||
'Geometry' => 'Geometrie',
|
|
||||||
'File exists.' => 'Fișierul deja există.',
|
|
||||||
'Attachments' => 'Fișiere atașate',
|
|
||||||
'%d query(s) executed OK.' => array('%d query executat.', '%d query-uri executate cu succes.'),
|
|
||||||
'Show only errors' => 'Arată doar greșeli',
|
|
||||||
'Refresh' => 'Împrospătează',
|
|
||||||
'Invalid schema.' => 'Schemă incorectă.',
|
|
||||||
'Please use one of the extensions %s.' => 'Folosiți una din următoarele extensii %s.',
|
|
||||||
'now' => 'acum',
|
|
||||||
'ltr' => 'ltr',
|
|
||||||
'Tables have been copied.' => 'Tabelele au fost copiate',
|
|
||||||
'Copy' => 'Copiază',
|
|
||||||
'Permanent link' => 'Adresă permanentă',
|
|
||||||
'Edit all' => 'Editează tot',
|
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
|
||||||
);
|
|
||||||
@@ -40,7 +40,7 @@ $translations = array(
|
|||||||
'Create new table' => 'Создать новую таблицу',
|
'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 has been inserted.' => 'Запись вставлена.',
|
||||||
'Edit' => 'Редактировать',
|
'Edit' => 'Редактировать',
|
||||||
'Insert' => 'Вставить',
|
'Insert' => 'Вставить',
|
||||||
'Save and insert next' => 'Сохранить и вставить еще',
|
'Save and insert next' => 'Сохранить и вставить еще',
|
||||||
@@ -147,7 +147,7 @@ $translations = array(
|
|||||||
'Move down' => 'Переместить вниз',
|
'Move down' => 'Переместить вниз',
|
||||||
'Functions' => 'Функции',
|
'Functions' => 'Функции',
|
||||||
'Aggregation' => 'Агрегация',
|
'Aggregation' => 'Агрегация',
|
||||||
'Export' => 'Экспорт',
|
'Export' => 'Експорт',
|
||||||
'Output' => 'Выходные данные',
|
'Output' => 'Выходные данные',
|
||||||
'open' => 'открыть',
|
'open' => 'открыть',
|
||||||
'save' => 'сохранить',
|
'save' => 'сохранить',
|
||||||
@@ -195,9 +195,10 @@ $translations = array(
|
|||||||
'Partition name' => 'Название раздела',
|
'Partition name' => 'Название раздела',
|
||||||
'Values' => 'Параметры',
|
'Values' => 'Параметры',
|
||||||
'%d row(s) have been imported.' => array('Импортирована %d строка.', 'Импортировано %d строки.', 'Импортировано %d строк.'),
|
'%d row(s) have been imported.' => array('Импортирована %d строка.', 'Импортировано %d строки.', 'Импортировано %d строк.'),
|
||||||
|
'CSV Import' => 'Импорт CSV',
|
||||||
'Import' => 'Импорт',
|
'Import' => 'Импорт',
|
||||||
'Stop on error' => 'Остановить при ошибке',
|
'Stop on error' => 'Остановить при ошибке',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Достигнуто максимальное значение количества доступных полей. Увеличьте %s.',
|
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Достигнуто максимальное значение количества доступных полей. Увеличьте %s и %s.',
|
||||||
'anywhere' => 'в любом месте',
|
'anywhere' => 'в любом месте',
|
||||||
'%.3f s' => '%.3f s',
|
'%.3f s' => '%.3f s',
|
||||||
'$1-$3-$5' => '$5.$3.$1',
|
'$1-$3-$5' => '$5.$3.$1',
|
||||||
@@ -224,48 +225,4 @@ $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.' => 'Базы данных удалены.',
|
|
||||||
'Search data in tables' => 'Поиск в таблицах',
|
|
||||||
'schema' => 'схема',
|
|
||||||
'Schema' => 'Схема',
|
|
||||||
'Alter schema' => 'Изменить схему',
|
|
||||||
'Create schema' => 'Новая схема',
|
|
||||||
'Schema has been dropped.' => 'Схема удалена.',
|
|
||||||
'Schema has been created.' => 'Создана новая схема.',
|
|
||||||
'Schema has been altered.' => 'Схема изменена.',
|
|
||||||
'Sequences' => '«Последовательности»',
|
|
||||||
'Create sequence' => 'Создать «последовательность»',
|
|
||||||
'Alter sequence' => 'Изменить «последовательность»',
|
|
||||||
'Sequence has been dropped.' => '«Последовательность» удалена.',
|
|
||||||
'Sequence has been created.' => 'Создана новая «последовательность».',
|
|
||||||
'Sequence has been altered.' => '«Последовательность» изменена.',
|
|
||||||
'User types' => 'Типы пользователей',
|
|
||||||
'Create type' => 'Создать тип',
|
|
||||||
'Alter type' => 'Изменить тип',
|
|
||||||
'Type has been dropped.' => 'Тип удален.',
|
|
||||||
'Type has been created.' => 'Создан новый тип.',
|
|
||||||
'Ctrl+click on a value to modify it.' => 'Ctrl+кликни по значению, чтобы его изменить.',
|
|
||||||
'Use edit link to modify this value.' => 'Изменить это значение можно с помощью ссылки «изменить».',
|
|
||||||
'last' => 'последняя',
|
|
||||||
'From server' => 'С сервера',
|
|
||||||
'System' => 'Движок',
|
|
||||||
'Select data' => 'Выбрать',
|
|
||||||
'Show structure' => 'Показать структуру',
|
|
||||||
'empty' => 'пусто',
|
|
||||||
'Network' => 'Сеть',
|
|
||||||
'Geometry' => 'Геометрия',
|
|
||||||
'File exists.' => 'Файл уже существует.',
|
|
||||||
'Attachments' => 'Прикрепленные файлы',
|
|
||||||
'%d query(s) executed OK.' => array('%d запрос выполнен успешно.', '%d запроса выполнено успешно.', '%d запросов выполнено успешно.'),
|
|
||||||
'Show only errors' => 'Только ошибки',
|
|
||||||
'Refresh' => 'Обновить',
|
|
||||||
'Invalid schema.' => 'Неправильная схема.',
|
|
||||||
'Please use one of the extensions %s.' => 'Используйте одно из этих расширений %s.',
|
|
||||||
'now' => 'сейчас',
|
|
||||||
'ltr' => 'ltr',
|
|
||||||
'Tables have been copied.' => 'Таблицы скопированы.',
|
|
||||||
'Copy' => 'Копировать',
|
|
||||||
'Permanent link' => 'Постоянная ссылка',
|
|
||||||
'Edit all' => 'Редактировать всё',
|
|
||||||
'HH:MM:SS' => 'ЧЧ:ММ:СС',
|
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ $translations = array(
|
|||||||
'Options' => 'Voľby',
|
'Options' => 'Voľby',
|
||||||
'Save' => 'Uložiť',
|
'Save' => 'Uložiť',
|
||||||
'Drop' => 'Odstrániť',
|
'Drop' => 'Odstrániť',
|
||||||
'Databases have been dropped.' => 'Databázy boli odstránené.',
|
|
||||||
'Database has been dropped.' => 'Databáza bola odstránená.',
|
'Database has been dropped.' => 'Databáza bola odstránená.',
|
||||||
'Database has been created.' => 'Databáza bola vytvorená.',
|
'Database has been created.' => 'Databáza bola vytvorená.',
|
||||||
'Database has been renamed.' => 'Databáza bola premenovaná.',
|
'Database has been renamed.' => 'Databáza bola premenovaná.',
|
||||||
@@ -41,7 +40,7 @@ $translations = array(
|
|||||||
'Create new table' => 'Vytvoriť novú tabuľku',
|
'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 has been inserted.' => 'Položka bola vložená.',
|
||||||
'Edit' => 'Upraviť',
|
'Edit' => 'Upraviť',
|
||||||
'Insert' => 'Vložiť',
|
'Insert' => 'Vložiť',
|
||||||
'Save and insert next' => 'Uložiť a vložiť ďalší',
|
'Save and insert next' => 'Uložiť a vložiť ďalší',
|
||||||
@@ -170,9 +169,9 @@ $translations = array(
|
|||||||
'On completion preserve' => 'Po dokončení zachovat',
|
'On completion preserve' => 'Po dokončení zachovat',
|
||||||
'Save and continue edit' => 'Uložiť a pokračovať v úpravách',
|
'Save and continue edit' => 'Uložiť a pokračovať v úpravách',
|
||||||
'original' => 'originál',
|
'original' => 'originál',
|
||||||
'Tables have been truncated.' => 'Tabuľka bola vyprázdnená.',
|
'Tables have been truncated.' => 'Tabuľka bola vyprázdnená',
|
||||||
'Tables have been moved.' => 'Tabuľka bola presunutá.',
|
'Tables have been moved.' => 'Tabuľka bola presunutá',
|
||||||
'Tables have been dropped.' => 'Tabuľka bola odstránená.',
|
'Tables have been dropped.' => 'Tabuľka bola odstránená',
|
||||||
'Tables and views' => 'Tabuľky a pohľady',
|
'Tables and views' => 'Tabuľky a pohľady',
|
||||||
'Engine' => 'Typ',
|
'Engine' => 'Typ',
|
||||||
'Collation' => 'Porovnávanie',
|
'Collation' => 'Porovnávanie',
|
||||||
@@ -196,9 +195,10 @@ $translations = array(
|
|||||||
'Partition name' => 'Názov oddielu',
|
'Partition name' => 'Názov oddielu',
|
||||||
'Values' => 'Hodnoty',
|
'Values' => 'Hodnoty',
|
||||||
'%d row(s) have been imported.' => array('Bol importovaný %d záznam.', 'Boli importované %d záznamy.', 'Bolo importovaných %d záznamov.'),
|
'%d row(s) have been imported.' => array('Bol importovaný %d záznam.', 'Boli importované %d záznamy.', 'Bolo importovaných %d záznamov.'),
|
||||||
|
'CSV Import' => 'Import CSV',
|
||||||
'Import' => 'Import',
|
'Import' => 'Import',
|
||||||
'Stop on error' => 'Zastaviť pri chybe',
|
'Stop on error' => 'Zastaviť pri chybe',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Bol prekročený maximálny počet povolených polí. Zvýšte prosím %s.',
|
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Bol prekročený maximálny počet povolených polí. Zvýšte prosím %s a %s.',
|
||||||
'anywhere' => 'kdekoľvek',
|
'anywhere' => 'kdekoľvek',
|
||||||
'%.3f s' => '%.3f s',
|
'%.3f s' => '%.3f s',
|
||||||
'$1-$3-$5' => '$6.$4.$1',
|
'$1-$3-$5' => '$6.$4.$1',
|
||||||
@@ -225,47 +225,4 @@ $translations = array(
|
|||||||
'File does not exist.' => 'Súbor neexistuje.',
|
'File does not exist.' => 'Súbor neexistuje.',
|
||||||
'Permanent login' => 'Trvalé prihlásenie',
|
'Permanent login' => 'Trvalé prihlásenie',
|
||||||
'%d in total' => '%d celkom',
|
'%d in total' => '%d celkom',
|
||||||
'Search data in tables' => 'Vyhľadať dáta v tabuľkách',
|
|
||||||
'Alter schema' => 'Pozmeniť schému',
|
|
||||||
'Create schema' => 'Vytvoriť schému',
|
|
||||||
'Schema has been dropped.' => 'Schéma bola odstránená.',
|
|
||||||
'Schema has been created.' => 'Schéma bola vytvorená.',
|
|
||||||
'Schema has been altered.' => 'Schéma bola zmenená.',
|
|
||||||
'schema' => 'schéma',
|
|
||||||
'Schema' => 'Schéma',
|
|
||||||
'Sequences' => 'Sekvencia',
|
|
||||||
'Create sequence' => 'Vytvoriť sekvenciu',
|
|
||||||
'Sequence has been dropped.' => 'Sekvencia bola odstránená.',
|
|
||||||
'Sequence has been created.' => 'Sekvencia bola vytvorená.',
|
|
||||||
'Sequence has been altered.' => 'Sekvencia bola zmenená.',
|
|
||||||
'Alter sequence' => 'Pozmeniť sekvenciu',
|
|
||||||
'User types' => 'Užívateľské typy',
|
|
||||||
'Create type' => 'Vytvoriť typ',
|
|
||||||
'Type has been dropped.' => 'Typ bol odstránený.',
|
|
||||||
'Type has been created.' => 'Typ bol vytvorený.',
|
|
||||||
'Alter type' => 'Pozmeniť typ',
|
|
||||||
'Ctrl+click on a value to modify it.' => 'Ctrl+kliknite na políčko, ktoré chcete zmeniť.',
|
|
||||||
'Use edit link to modify this value.' => 'Pre zmenu tejto hodnoty použite odkaz upraviť.',
|
|
||||||
'last' => 'posledný',
|
|
||||||
'From server' => 'Zo serveru',
|
|
||||||
'System' => 'Systém',
|
|
||||||
'Show structure' => 'Zobraziť štruktúru',
|
|
||||||
'Select data' => 'Vypísať dáta',
|
|
||||||
'empty' => 'prázdne',
|
|
||||||
'Network' => 'Sieť',
|
|
||||||
'Geometry' => 'Geometria',
|
|
||||||
'File exists.' => 'Súbor existuje.',
|
|
||||||
'Attachments' => 'Prílohy',
|
|
||||||
'%d query(s) executed OK.' => array('Bol vykonaný %d dotaz.', 'Boli vykonané %d dotazy.', 'Bolo vykonaných %d dotazov.'),
|
|
||||||
'Show only errors' => 'Zobraziť iba chyby',
|
|
||||||
'Refresh' => 'Obnoviť',
|
|
||||||
'Invalid schema.' => 'Neplatné schéma.',
|
|
||||||
'Please use one of the extensions %s.' => 'Prosím vyberte jednu z koncoviek %s.',
|
|
||||||
'now' => 'teraz',
|
|
||||||
'ltr' => 'ltr',
|
|
||||||
'Tables have been copied.' => 'Tabuľky boli skopírované.',
|
|
||||||
'Copy' => 'Kopírovať',
|
|
||||||
'Permanent link' => 'Permanentný odkaz',
|
|
||||||
'Edit all' => 'Upraviť všetko',
|
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,310 +0,0 @@
|
|||||||
<?php
|
|
||||||
$translations = array(
|
|
||||||
// label for database system selection (MySQL, SQLite, ...)
|
|
||||||
'System' => 'Sistem',
|
|
||||||
'Server' => 'Strežnik',
|
|
||||||
'Username' => 'Uporabniško ime',
|
|
||||||
'Password' => 'Geslo',
|
|
||||||
'Permanent login' => 'Trajna prijava',
|
|
||||||
'Login' => 'Prijavi se',
|
|
||||||
'Logout' => 'Odjavi se',
|
|
||||||
'Logged as: %s' => 'Prijavljen kot: %s',
|
|
||||||
'Logout successful.' => 'Prijava uspešna.',
|
|
||||||
'Invalid credentials.' => 'Neveljavne pravice.',
|
|
||||||
'Language' => 'Jezik',
|
|
||||||
'Invalid CSRF token. Send the form again.' => 'Neveljaven token CSRF. Pošljite formular še enkrat.',
|
|
||||||
'No extension' => 'Brez dodatkov',
|
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'Noben od podprtih dodatkov za PHP (%s) ni na voljo.',
|
|
||||||
'Session support must be enabled.' => 'Podpora za seje mora biti omogočena.',
|
|
||||||
'Session expired, please login again.' => 'Seja je potekla. Prosimo, ponovno se prijavite.',
|
|
||||||
'%s version: %s through PHP extension %s' => 'Verzija %s: %s preko dodatka za PHP %s',
|
|
||||||
'Refresh' => 'Osveži',
|
|
||||||
|
|
||||||
// text direction
|
|
||||||
'ltr' => 'ltr',
|
|
||||||
|
|
||||||
'Privileges' => 'Pravice',
|
|
||||||
'Create user' => 'Ustvari uporabnika',
|
|
||||||
'User has been dropped.' => 'Uporabnik je odstranjen.',
|
|
||||||
'User has been altered.' => 'Uporabnik je spremenjen.',
|
|
||||||
'User has been created.' => 'Uporabnik je ustvarjen.',
|
|
||||||
'Hashed' => 'Zakodirano',
|
|
||||||
'Column' => 'Stolpec',
|
|
||||||
'Routine' => 'Postopek',
|
|
||||||
'Grant' => 'Dovoli',
|
|
||||||
'Revoke' => 'Odvzemi',
|
|
||||||
|
|
||||||
'Process list' => 'Seznam procesov',
|
|
||||||
'%d process(es) have been killed.' => array('Končan je %d proces.', 'Končana sta %d procesa.', 'Končani so %d procesi.', 'Končanih je %d procesov.'),
|
|
||||||
'Kill' => 'Končaj',
|
|
||||||
|
|
||||||
'Variables' => 'Spremenljivke',
|
|
||||||
'Status' => 'Stanje',
|
|
||||||
|
|
||||||
'SQL command' => 'Ukaz SQL',
|
|
||||||
'%d query(s) executed OK.' => array('Uspešno se je končala %d poizvedba.', 'Uspešno sta se končali %d poizvedbi.', 'Uspešno so se končale %d poizvedbe.', 'Uspešno se je končalo %d poizvedb.'),
|
|
||||||
'Query executed OK, %d row(s) affected.' => array('Poizvedba se je uspešno izvedla, spremenjena je %d vrstica.', 'Poizvedba se je uspešno izvedla, spremenjeni sta %d vrstici.', 'Poizvedba se je uspešno izvedla, spremenjene so %d vrstice.', 'Poizvedba se je uspešno izvedla, spremenjenih je %d vrstic.'),
|
|
||||||
'No commands to execute.' => 'Ni ukazov za izvedbo.',
|
|
||||||
'Error in query' => 'Napaka v poizvedbi',
|
|
||||||
'Execute' => 'Izvedi',
|
|
||||||
'Stop on error' => 'Ustavi ob napaki',
|
|
||||||
'Show only errors' => 'Pokaži samo napake',
|
|
||||||
// sprintf() format for time of the command
|
|
||||||
'%.3f s' => '%.3f s',
|
|
||||||
'History' => 'Zgodovina',
|
|
||||||
'Clear' => 'Počisti',
|
|
||||||
|
|
||||||
'File upload' => 'Naloži datoteko',
|
|
||||||
'From server' => 'z strežnika',
|
|
||||||
'Webserver file %s' => 'Datoteka na spletnem strežniku %s',
|
|
||||||
'Run file' => 'Zaženi datoteko',
|
|
||||||
'File does not exist.' => 'Datoteka ne obstaja.',
|
|
||||||
'File uploads are disabled.' => 'Nalaganje datotek je onemogočeno.',
|
|
||||||
'Unable to upload a file.' => 'Ne morem naložiti datoteke.',
|
|
||||||
'Maximum allowed file size is %sB.' => 'Največja velikost datoteke je %sB.',
|
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Preveliko podatkov za POST. Zmanjšajte število podatkov ali povečajte nastavitev za %s.',
|
|
||||||
|
|
||||||
'Export' => 'Izvozi',
|
|
||||||
'Dump' => 'Izvozi',
|
|
||||||
'Output' => 'Izhod rezultata',
|
|
||||||
'open' => 'odpri',
|
|
||||||
'save' => 'shrani',
|
|
||||||
'Format' => 'Format',
|
|
||||||
'Data' => 'Podatki',
|
|
||||||
|
|
||||||
'Database' => 'Baza',
|
|
||||||
'database' => 'baza',
|
|
||||||
'Use' => 'Uporabi',
|
|
||||||
'Select database' => 'Izberi bazo',
|
|
||||||
'Invalid database.' => 'Neveljavna baza.',
|
|
||||||
'Create new database' => 'Ustvari novo bazo',
|
|
||||||
'Database has been dropped.' => 'Baza je zavržena.',
|
|
||||||
'Databases have been dropped.' => 'Baze so zavržene.',
|
|
||||||
'Database has been created.' => 'Baza je ustvarjena.',
|
|
||||||
'Database has been renamed.' => 'Baza je preimenovana.',
|
|
||||||
'Database has been altered.' => 'Baza je spremenjena.',
|
|
||||||
'Alter database' => 'Spremeni bazo',
|
|
||||||
'Create database' => 'Ustvari bazo',
|
|
||||||
'Database schema' => 'Shema baze',
|
|
||||||
|
|
||||||
// thousands separator - must contain single byte
|
|
||||||
',' => ' ',
|
|
||||||
'Engine' => 'Pogon',
|
|
||||||
'Collation' => 'Zbiranje',
|
|
||||||
'Data Length' => 'Velikost podatkov',
|
|
||||||
'Index Length' => 'Velikost indeksa',
|
|
||||||
'Data Free' => 'Podatkov prosto ',
|
|
||||||
'Rows' => 'Vrstic',
|
|
||||||
'%d in total' => 'Skupaj %d',
|
|
||||||
'Analyze' => 'Analiziraj',
|
|
||||||
'Optimize' => 'Optimiziraj',
|
|
||||||
'Check' => 'Preveri',
|
|
||||||
'Repair' => 'Popravi',
|
|
||||||
'Truncate' => 'Skrajšaj',
|
|
||||||
'Tables have been truncated.' => 'Tabele so skrajšane.',
|
|
||||||
'Move to other database' => 'Premakni v drugo bazo',
|
|
||||||
'Move' => 'Premakni',
|
|
||||||
'Tables have been moved.' => 'Tabele so premaknjene.',
|
|
||||||
'Copy' => 'Kopiraj',
|
|
||||||
'Tables have been copied.' => 'Tabele so kopirane.',
|
|
||||||
|
|
||||||
'Routines' => 'Postopki',
|
|
||||||
'Routine has been called, %d row(s) affected.' => array('Klican je bil postopek, spremenjena je %d vrstica.', 'Klican je bil postopek, spremenjeni sta %d vrstici.', 'Klican je bil postopek, spremenjene so %d vrstice.', 'Klican je bil postopek, spremenjenih je %d vrstic.'),
|
|
||||||
'Call' => 'Pokliči',
|
|
||||||
'Parameter name' => 'Ime parametra',
|
|
||||||
'Create procedure' => 'Ustvari postopek',
|
|
||||||
'Create function' => 'Ustvari funkcijo',
|
|
||||||
'Routine has been dropped.' => 'Postopek je zavržen.',
|
|
||||||
'Routine has been altered.' => 'Postopek je spremenjen.',
|
|
||||||
'Routine has been created.' => 'Postopek je ustvarjen.',
|
|
||||||
'Alter function' => 'Spremeni funkcijo',
|
|
||||||
'Alter procedure' => 'Spremeni postopek',
|
|
||||||
'Return type' => 'Vračalni tip',
|
|
||||||
|
|
||||||
'Events' => 'Dogodki',
|
|
||||||
'Event has been dropped.' => 'Dogodek je zavržen.',
|
|
||||||
'Event has been altered.' => 'Dogodek je spremenjen.',
|
|
||||||
'Event has been created.' => 'Dogodek je ustvarjen.',
|
|
||||||
'Alter event' => 'Spremeni dogodek',
|
|
||||||
'Create event' => 'Ustvari dogodek',
|
|
||||||
'At given time' => 'v danem času',
|
|
||||||
'Every' => 'vsake',
|
|
||||||
'Schedule' => 'Urnik',
|
|
||||||
'Start' => 'Začetek',
|
|
||||||
'End' => 'Konec',
|
|
||||||
'On completion preserve' => 'Po zaključku ohrani',
|
|
||||||
|
|
||||||
'Tables' => 'Tabele',
|
|
||||||
'Tables and views' => 'Tabele in pogledi',
|
|
||||||
'Table' => 'Tabela',
|
|
||||||
'No tables.' => 'Ni tabel.',
|
|
||||||
'Alter table' => 'Spremeni tabelo',
|
|
||||||
'Create table' => 'Ustvari tabelo',
|
|
||||||
'Create new table' => 'Ustvari novo tabelo',
|
|
||||||
'Table has been dropped.' => 'Tabela je zavržena.',
|
|
||||||
'Tables have been dropped.' => 'Tabele so zavržene.',
|
|
||||||
'Table has been altered.' => 'Tabela je spremenjena.',
|
|
||||||
'Table has been created.' => 'Tabela je ustvarjena.',
|
|
||||||
'Table name' => 'Ime tabele',
|
|
||||||
'Show structure' => 'Pokaži zgradbo',
|
|
||||||
'engine' => 'pogon',
|
|
||||||
'collation' => 'zbiranje',
|
|
||||||
'Column name' => 'Ime stolpca',
|
|
||||||
'Type' => 'Tip',
|
|
||||||
'Length' => 'Dolžina',
|
|
||||||
'Auto Increment' => 'Samodejno povečevanje',
|
|
||||||
'Options' => 'Možnosti',
|
|
||||||
'Comment' => 'Komentar',
|
|
||||||
'Default values' => 'Privzete vrednosti',
|
|
||||||
'Drop' => 'Zavrzi',
|
|
||||||
'Are you sure?' => 'Ste prepričani?',
|
|
||||||
'Move up' => 'Premakni gor',
|
|
||||||
'Move down' => 'Premakni dol',
|
|
||||||
'Remove' => 'Odstrani',
|
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Največje število dovoljenih polje je preseženo. Prosimo, povečajte %s.',
|
|
||||||
|
|
||||||
'Partition by' => 'Porazdeli po',
|
|
||||||
'Partitions' => 'Porazdelitve',
|
|
||||||
'Partition name' => 'Ime porazdelitve',
|
|
||||||
'Values' => 'Vrednosti',
|
|
||||||
|
|
||||||
'View' => 'Pogledi',
|
|
||||||
'View has been dropped.' => 'Pogled je zavržen.',
|
|
||||||
'View has been altered.' => 'Pogled je spremenjen.',
|
|
||||||
'View has been created.' => 'Pogled je ustvarjen.',
|
|
||||||
'Alter view' => 'Spremeni pogled',
|
|
||||||
'Create view' => 'Ustvari pogled',
|
|
||||||
|
|
||||||
'Indexes' => 'Indeksi',
|
|
||||||
'Indexes have been altered.' => 'Indeksi so spremenjeni.',
|
|
||||||
'Alter indexes' => 'Spremeni indekse',
|
|
||||||
'Add next' => 'Dodaj naslednjega',
|
|
||||||
'Index Type' => 'Tip indeksa',
|
|
||||||
'Column (length)' => 'Stolpec (dolžina)',
|
|
||||||
|
|
||||||
'Foreign keys' => 'Tuji ključi',
|
|
||||||
'Foreign key' => 'Tuj ključ',
|
|
||||||
'Foreign key has been dropped.' => 'Tuj ključ je zavržen.',
|
|
||||||
'Foreign key has been altered.' => 'Tuj ključ je spremenjen.',
|
|
||||||
'Foreign key has been created.' => 'Tuj ključ je ustvarjen.',
|
|
||||||
'Target table' => 'Ciljna tabela',
|
|
||||||
'Change' => 'Spremeni',
|
|
||||||
'Source' => 'Izvor',
|
|
||||||
'Target' => 'Cilj',
|
|
||||||
'Add column' => 'Dodaj stolpec',
|
|
||||||
'Alter' => 'Spremeni',
|
|
||||||
'Add foreign key' => 'Dodaj tuj ključ',
|
|
||||||
'ON DELETE' => 'pri brisanju',
|
|
||||||
'ON UPDATE' => 'pri posodabljanju',
|
|
||||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Izvorni in ciljni stolpec mora imeti isti podatkovni tip. Obstajati mora indeks na ciljnih stolpcih in obstajati morajo referenčni podatki.',
|
|
||||||
|
|
||||||
'Triggers' => 'Sprožilniki',
|
|
||||||
'Add trigger' => 'Dodaj sprožilnik',
|
|
||||||
'Trigger has been dropped.' => 'Sprožilnik je odstranjen.',
|
|
||||||
'Trigger has been altered.' => 'Sprožilnik je spremenjen.',
|
|
||||||
'Trigger has been created.' => 'Sprožilnik je ustvarjen.',
|
|
||||||
'Alter trigger' => 'Spremeni sprožilnik',
|
|
||||||
'Create trigger' => 'Ustvari sprožilnik',
|
|
||||||
'Time' => 'Čas',
|
|
||||||
'Event' => 'Dogodek',
|
|
||||||
'Name' => 'Naziv',
|
|
||||||
|
|
||||||
'select' => 'izberi',
|
|
||||||
'Select' => 'Izberi',
|
|
||||||
'Select data' => 'Izberi podatke',
|
|
||||||
'Functions' => 'Funkcije',
|
|
||||||
'Aggregation' => 'Združitev',
|
|
||||||
'Search' => 'Išči',
|
|
||||||
'anywhere' => 'kjerkoli',
|
|
||||||
'Search data in tables' => 'Išče podatke po tabelah',
|
|
||||||
'Sort' => 'Sortiraj',
|
|
||||||
'descending' => 'padajoče',
|
|
||||||
'Limit' => 'Limita',
|
|
||||||
'Text length' => 'Dolžina teksta',
|
|
||||||
'Action' => 'Dejanje',
|
|
||||||
'Unable to select the table' => 'Ne morem izbrati tabele',
|
|
||||||
'No rows.' => 'Ni vrstic.',
|
|
||||||
'%d row(s)' => array('%d vrstica', '%d vrstici', '%d vrstice', '%d vrstic'),
|
|
||||||
'Page' => 'Stran',
|
|
||||||
'last' => 'Zadnja',
|
|
||||||
'whole result' => 'cel razultat',
|
|
||||||
'%d byte(s)' => array('%d bajt', '%d bajta', '%d bajti', '%d bajtov'),
|
|
||||||
|
|
||||||
'Import' => 'Uvozi',
|
|
||||||
'%d row(s) have been imported.' => array('Uvožena je %d vrstica.', 'Uvoženi sta %d vrstici.', 'Uvožene so %d vrstice.', 'Uvoženih je %d vrstic.'),
|
|
||||||
|
|
||||||
// in-place editing in select
|
|
||||||
'Ctrl+click on a value to modify it.' => 'Ctrl+klik na vrednost za urejanje.',
|
|
||||||
'Use edit link to modify this value.' => 'Uporabite urejanje povezave za spreminjanje te vrednosti.',
|
|
||||||
|
|
||||||
// %s can contain auto-increment value
|
|
||||||
'Item%s has been inserted.' => 'Predmet%s je vstavljen.',
|
|
||||||
'Item has been deleted.' => 'Predmet je izbrisan.',
|
|
||||||
'Item has been updated.' => 'Predmet je posodobljen.',
|
|
||||||
'%d item(s) have been affected.' => array('Spremenjen je %d predmet.', 'Spremenjena sta %d predmeta.', 'Spremenjeni so %d predmeti.', 'Spremenjenih je %d predmetov.'),
|
|
||||||
'New item' => 'Nov predmet',
|
|
||||||
'original' => 'original',
|
|
||||||
// label for value '' in enum data type
|
|
||||||
'empty' => 'prazno',
|
|
||||||
'edit' => 'uredi',
|
|
||||||
'Edit' => 'Uredi',
|
|
||||||
'Insert' => 'Vstavi',
|
|
||||||
'Save' => 'Shrani',
|
|
||||||
'Save and continue edit' => 'Shrani in nadaljuj z urejanjem',
|
|
||||||
'Save and insert next' => 'Shrani in vstavi tekst',
|
|
||||||
'Clone' => 'Kloniraj',
|
|
||||||
'Delete' => 'Izbriši',
|
|
||||||
|
|
||||||
'E-mail' => 'E-mail',
|
|
||||||
'From' => 'Od',
|
|
||||||
'Subject' => 'Zadeva',
|
|
||||||
'Attachments' => 'Priponke',
|
|
||||||
'Send' => 'Pošlji',
|
|
||||||
'%d e-mail(s) have been sent.' => array('Poslan je %d e-mail.', 'Poslana sta %d e-maila.', 'Poslani so %d e-maili.', 'Poslanih je %d e-mailov.'),
|
|
||||||
|
|
||||||
// data type descriptions
|
|
||||||
'Numbers' => 'Števila',
|
|
||||||
'Date and time' => 'Datum in čas',
|
|
||||||
'Strings' => 'Nizi',
|
|
||||||
'Binary' => 'Binarni',
|
|
||||||
'Lists' => 'Seznami',
|
|
||||||
'Network' => 'Mrežni',
|
|
||||||
'Geometry' => 'Geometrčni',
|
|
||||||
'Relations' => 'Relacijski',
|
|
||||||
|
|
||||||
'Editor' => 'Urejevalnik',
|
|
||||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
|
||||||
'$1-$3-$5' => '$6.$4.$1',
|
|
||||||
// hint for date format - use language equivalents for day, month and year shortcuts
|
|
||||||
'[yyyy]-mm-dd' => 'd.m.[rrrr]',
|
|
||||||
'now' => 'zdaj',
|
|
||||||
|
|
||||||
// general SQLite error in create, drop or rename database
|
|
||||||
'File exists.' => 'Datoteka obstaja.',
|
|
||||||
'Please use one of the extensions %s.' => 'Prosim, uporabite enega od dodatkov %s.',
|
|
||||||
|
|
||||||
// PostgreSQL and MS SQL schema support
|
|
||||||
'Alter schema' => 'Spremeni shemo',
|
|
||||||
'Create schema' => 'Ustvari shemo',
|
|
||||||
'Schema has been dropped.' => 'Shema je zavržena.',
|
|
||||||
'Schema has been created.' => 'Shema je ustvarjena.',
|
|
||||||
'Schema has been altered.' => 'Shema je spremenjena.',
|
|
||||||
'schema' => 'shema',
|
|
||||||
'Schema' => 'Shema',
|
|
||||||
'Invalid schema.' => 'Neveljavna shema.',
|
|
||||||
|
|
||||||
// PostgreSQL sequences support
|
|
||||||
'Sequences' => 'Sekvence',
|
|
||||||
'Create sequence' => 'Ustvari sekvenco',
|
|
||||||
'Sequence has been dropped.' => 'Sekvenca je zavržena.',
|
|
||||||
'Sequence has been created.' => 'Sekvence je ustvarjena.',
|
|
||||||
'Sequence has been altered.' => 'Sekvence je spremenjena.',
|
|
||||||
'Alter sequence' => 'Spremni sekvenco',
|
|
||||||
|
|
||||||
// PostgreSQL user types support
|
|
||||||
'User types' => 'Uporabniški tipi',
|
|
||||||
'Create type' => 'Ustvari tip',
|
|
||||||
'Type has been dropped.' => 'Tip je zavržen.',
|
|
||||||
'Type has been created.' => 'Tip je ustvarjen.',
|
|
||||||
'Alter type' => 'Spremeni tip',
|
|
||||||
);
|
|
||||||
@@ -1,322 +0,0 @@
|
|||||||
<?php
|
|
||||||
$translations = array(
|
|
||||||
// label for database system selection (MySQL, SQLite, ...)
|
|
||||||
'System' => 'Систем',
|
|
||||||
'Server' => 'Сервер',
|
|
||||||
'Username' => 'Корисничко име',
|
|
||||||
'Password' => 'Лозинка',
|
|
||||||
'Permanent login' => 'Трајна пријава',
|
|
||||||
'Login' => 'Пријава',
|
|
||||||
'Logout' => 'Одјава',
|
|
||||||
'Logged as: %s' => 'Пријави се као: %s',
|
|
||||||
'Logout successful.' => 'Успешна одјава.',
|
|
||||||
'Invalid credentials.' => 'Неважеће дозволе.',
|
|
||||||
'Language' => 'Језик',
|
|
||||||
'Invalid CSRF token. Send the form again.' => 'Неважећи CSRF код. Проследите поново форму.',
|
|
||||||
'No extension' => 'Без додатака',
|
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'Ниједан од подржаних PHP додатака није доступан.',
|
|
||||||
'Session support must be enabled.' => 'Морате омогућити подршку за сесије.',
|
|
||||||
'Session expired, please login again.' => 'Ваша сесија је истекла, пријавите се поново.',
|
|
||||||
'%s version: %s through PHP extension %s' => '%s верзија: %s помоћу PHP додатка је %s',
|
|
||||||
'Refresh' => 'Освежи',
|
|
||||||
|
|
||||||
// text direction - 'ltr' or 'rtl'
|
|
||||||
'ltr' => 'ltr',
|
|
||||||
|
|
||||||
'Privileges' => 'Дозволе',
|
|
||||||
'Create user' => 'Направи корисника',
|
|
||||||
'User has been dropped.' => 'Корисник је избрисан.',
|
|
||||||
'User has been altered.' => 'Корисник је измењен.',
|
|
||||||
'User has been created.' => 'корисник је креиран.',
|
|
||||||
'Hashed' => 'Хеширано',
|
|
||||||
'Column' => 'Колона',
|
|
||||||
'Routine' => 'Рутина',
|
|
||||||
'Grant' => 'Дозволи',
|
|
||||||
'Revoke' => 'Опозови',
|
|
||||||
|
|
||||||
'Process list' => 'Списак процеса',
|
|
||||||
'%d process(es) have been killed.' => array('%d процес је убијен.', '%d процеса су убијена.', '%d процеса је убијено.'),
|
|
||||||
'Kill' => 'Убиј',
|
|
||||||
|
|
||||||
'Variables' => 'Променљиве',
|
|
||||||
'Status' => 'Статус',
|
|
||||||
|
|
||||||
'SQL command' => 'SQL команда',
|
|
||||||
'%d query(s) executed OK.' => array('%d упит је успешно извршен.', '%d упита су успешно извршена.', '%d упита је успешно извршено.'),
|
|
||||||
'Query executed OK, %d row(s) affected.' => array('Упит је успешно извршен, %d ред је погођен.', 'Упит је успешно извршен, %d реда су погођена.', 'Упит је успешно извршен, %d редова је погођено.'),
|
|
||||||
'No commands to execute.' => 'Без команди за извршавање.',
|
|
||||||
'Error in query' => 'Грешка у упиту',
|
|
||||||
'Execute' => 'Изврши',
|
|
||||||
'Stop on error' => 'Заустави приликом грешке',
|
|
||||||
'Show only errors' => 'Приказуј само грешке',
|
|
||||||
// sprintf() format for time of the command
|
|
||||||
'%.3f s' => '%.3f s',
|
|
||||||
'History' => 'Историјат',
|
|
||||||
'Clear' => 'Очисти',
|
|
||||||
'Edit all' => 'Измени све',
|
|
||||||
|
|
||||||
'File upload' => 'Слање датотека',
|
|
||||||
'From server' => 'Са сервера',
|
|
||||||
'Webserver file %s' => 'Датотека %s са веб сервера',
|
|
||||||
'Run file' => 'Покрени датотеку',
|
|
||||||
'File does not exist.' => 'Датотека не постоји.',
|
|
||||||
'File uploads are disabled.' => 'Онемогућено је слање датотека.',
|
|
||||||
'Unable to upload a file.' => 'Слање датотеке није успело.',
|
|
||||||
'Maximum allowed file size is %sB.' => 'Највећа дозвољена величина датотеке је %sB.',
|
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Превелики POST податак. Морате да смањите податак или повећајте вредност конфигурационе директиве %s.',
|
|
||||||
|
|
||||||
'Export' => 'Извоз',
|
|
||||||
'Dump' => 'Истовар',
|
|
||||||
'Output' => 'Испис',
|
|
||||||
'open' => 'отвори',
|
|
||||||
'save' => 'сачувај',
|
|
||||||
'Format' => 'Формат',
|
|
||||||
'Data' => 'Податци',
|
|
||||||
|
|
||||||
'Database' => 'База података',
|
|
||||||
'database' => 'база података',
|
|
||||||
'Use' => 'Користи',
|
|
||||||
'Select database' => 'Изаберите базу',
|
|
||||||
'Invalid database.' => 'Неисправна база података.',
|
|
||||||
'Create new database' => 'Направи нову базу података',
|
|
||||||
'Database has been dropped.' => 'База података је избрисана.',
|
|
||||||
'Databases have been dropped.' => 'Базњ података су избрисане.',
|
|
||||||
'Database has been created.' => 'База података је креирана.',
|
|
||||||
'Database has been renamed.' => 'База података је преименована.',
|
|
||||||
'Database has been altered.' => 'База података је измењена.',
|
|
||||||
'Alter database' => 'Уреди базу података',
|
|
||||||
'Create database' => 'Формирај базу података',
|
|
||||||
'Database schema' => 'Шема базе података',
|
|
||||||
|
|
||||||
// link to current database schema layout
|
|
||||||
'Permanent link' => 'Трајна веза',
|
|
||||||
|
|
||||||
// thousands separator - must contain single byte
|
|
||||||
',' => ',',
|
|
||||||
'Engine' => 'Механизам',
|
|
||||||
'Collation' => 'Сравњивање',
|
|
||||||
'Data Length' => 'Дужина података',
|
|
||||||
'Index Length' => 'Дужина индекса',
|
|
||||||
'Data Free' => 'Слободно података',
|
|
||||||
'Rows' => 'Редова',
|
|
||||||
'%d in total' => 'укупно %d',
|
|
||||||
'Analyze' => 'Анализирај',
|
|
||||||
'Optimize' => 'Оптимизуј',
|
|
||||||
'Check' => 'Провери',
|
|
||||||
'Repair' => 'Поправи',
|
|
||||||
'Truncate' => 'Испразни',
|
|
||||||
'Tables have been truncated.' => 'Табеле су испражњене.',
|
|
||||||
'Move to other database' => 'Премести у другу базу података',
|
|
||||||
'Move' => 'Премести',
|
|
||||||
'Tables have been moved.' => 'Табеле су премешћене.',
|
|
||||||
'Copy' => 'Умножи',
|
|
||||||
'Tables have been copied.' => 'Табеле су умножене.',
|
|
||||||
|
|
||||||
'Routines' => 'Рутине',
|
|
||||||
'Routine has been called, %d row(s) affected.' => array('Позвана је рутина, %d ред је погођен.', 'Позвана је рутина, %d реда су погођена.', 'Позвана је рутина, %d редова је погођено.'),
|
|
||||||
'Call' => 'Позови',
|
|
||||||
'Parameter name' => 'Назив параметра',
|
|
||||||
'Create procedure' => 'Формирај процедуру',
|
|
||||||
'Create function' => 'Формирај функцију',
|
|
||||||
'Routine has been dropped.' => 'Рутина је избрисана.',
|
|
||||||
'Routine has been altered.' => 'Рутина је измењена.',
|
|
||||||
'Routine has been created.' => 'Рутина је креирана.',
|
|
||||||
'Alter function' => 'Уреди функцију',
|
|
||||||
'Alter procedure' => 'Уреди процедуру',
|
|
||||||
'Return type' => 'Повратни тип',
|
|
||||||
|
|
||||||
'Events' => 'Догађаји',
|
|
||||||
'Event has been dropped.' => 'Догађај је избрисан.',
|
|
||||||
'Event has been altered.' => 'Догађај је измењен.',
|
|
||||||
'Event has been created.' => 'Догађај је креиран.',
|
|
||||||
'Alter event' => 'Уреди догађај',
|
|
||||||
'Create event' => 'Направи догађај',
|
|
||||||
'At given time' => 'У задато време',
|
|
||||||
'Every' => 'Сваки',
|
|
||||||
'Schedule' => 'Распоред',
|
|
||||||
'Start' => 'Почетак',
|
|
||||||
'End' => 'Крај',
|
|
||||||
'On completion preserve' => 'Задржи по завршетку',
|
|
||||||
|
|
||||||
'Tables' => 'Табеле',
|
|
||||||
'Tables and views' => 'Табеле и погледи',
|
|
||||||
'Table' => 'Табела',
|
|
||||||
'No tables.' => 'Без табела.',
|
|
||||||
'Alter table' => 'Уреди табелу',
|
|
||||||
'Create table' => 'Направи табелу',
|
|
||||||
'Create new table' => 'направи нову табелу',
|
|
||||||
'Table has been dropped.' => 'Табела је избрисана.',
|
|
||||||
'Tables have been dropped.' => 'Табеле су избрисане.',
|
|
||||||
'Tables have been optimized.' => 'Табеле су оптимизоване.',
|
|
||||||
'Table has been altered.' => 'Табела је измењена.',
|
|
||||||
'Table has been created.' => 'Табела је креирана.',
|
|
||||||
'Table name' => 'Назив табеле',
|
|
||||||
'Show structure' => 'Прикажи структуру',
|
|
||||||
'engine' => 'механизам',
|
|
||||||
'collation' => 'Сравњивање',
|
|
||||||
'Column name' => 'Назив колоне',
|
|
||||||
'Type' => 'Тип',
|
|
||||||
'Length' => 'Дужина',
|
|
||||||
'Auto Increment' => 'Ауто-прираштај',
|
|
||||||
'Options' => 'Опције',
|
|
||||||
'Comment' => 'Коментар',
|
|
||||||
'Default values' => 'Подразумеване вредности',
|
|
||||||
'Drop' => 'Избриши',
|
|
||||||
'Are you sure?' => 'Да ли сте сигурни?',
|
|
||||||
'Move up' => 'Помери на горе',
|
|
||||||
'Move down' => 'Помери на доле',
|
|
||||||
'Remove' => 'Уклони',
|
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Премашен је максимални број дозвољених поља. Молим увећајте %s.',
|
|
||||||
|
|
||||||
'Partition by' => 'Подели по',
|
|
||||||
'Partitions' => 'Поделе',
|
|
||||||
'Partition name' => 'Име поделе',
|
|
||||||
'Values' => 'Вредности',
|
|
||||||
|
|
||||||
'View' => 'Поглед',
|
|
||||||
'View has been dropped.' => 'Поглед је избрисан.',
|
|
||||||
'View has been altered.' => 'Поглед је измењен.',
|
|
||||||
'View has been created.' => 'Поглед је креиран.',
|
|
||||||
'Alter view' => 'Уреди поглед',
|
|
||||||
'Create view' => 'Направи поглед',
|
|
||||||
|
|
||||||
'Indexes' => 'Индекси',
|
|
||||||
'Indexes have been altered.' => 'Индекси су измењени.',
|
|
||||||
'Alter indexes' => 'Уреди индексе',
|
|
||||||
'Add next' => 'Додај следећи',
|
|
||||||
'Index Type' => 'Тип индекса',
|
|
||||||
'Column (length)' => 'Колона (дужина)',
|
|
||||||
|
|
||||||
'Foreign keys' => 'Страни кључеви',
|
|
||||||
'Foreign key' => 'Страни кључ',
|
|
||||||
'Foreign key has been dropped.' => 'Страни кључ је избрисан.',
|
|
||||||
'Foreign key has been altered.' => 'Страни кључ је измењен.',
|
|
||||||
'Foreign key has been created.' => 'Страни кључ је креиран.',
|
|
||||||
'Target table' => 'Циљна табела',
|
|
||||||
'Change' => 'Измени',
|
|
||||||
'Source' => 'Извор',
|
|
||||||
'Target' => 'Циљ',
|
|
||||||
'Add column' => 'Додај колону',
|
|
||||||
'Alter' => 'Уреди',
|
|
||||||
'Add foreign key' => 'Додај страни кључ',
|
|
||||||
'ON DELETE' => 'ON DELETE (приликом брисања)',
|
|
||||||
'ON UPDATE' => 'ON UPDATE (приликом освежавања)',
|
|
||||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Изворне и циљне колоне морају бити истог типа, циљна колона мора бити индексирана и изворна табела мора садржати податке из циљне.',
|
|
||||||
|
|
||||||
'Triggers' => 'Окидачи',
|
|
||||||
'Add trigger' => 'Додај окидач',
|
|
||||||
'Trigger has been dropped.' => 'Окидач је избрисан.',
|
|
||||||
'Trigger has been altered.' => 'Окидач је измењен.',
|
|
||||||
'Trigger has been created.' => 'Окидач је креиран.',
|
|
||||||
'Alter trigger' => 'Уреди окидач',
|
|
||||||
'Create trigger' => 'Формирај окидач',
|
|
||||||
'Time' => 'Време',
|
|
||||||
'Event' => 'Догађај',
|
|
||||||
'Name' => 'Име',
|
|
||||||
|
|
||||||
'select' => 'изабери',
|
|
||||||
'Select' => 'Изабери',
|
|
||||||
'Select data' => 'Изабери податке',
|
|
||||||
'Functions' => 'Функције',
|
|
||||||
'Aggregation' => 'Сакупљање',
|
|
||||||
'Search' => 'Претрага',
|
|
||||||
'anywhere' => 'било где',
|
|
||||||
'Search data in tables' => 'Претражи податке у табелама',
|
|
||||||
'Sort' => 'Поређај',
|
|
||||||
'descending' => 'опадајуће',
|
|
||||||
'Limit' => 'Граница',
|
|
||||||
'Text length' => 'Дужина текста',
|
|
||||||
'Action' => 'Акција',
|
|
||||||
'Full table scan' => 'Скренирање комплетне табеле',
|
|
||||||
'Unable to select the table' => 'Не могу да изаберем табелу',
|
|
||||||
'No rows.' => 'Без редова.',
|
|
||||||
'%d row(s)' => array('%d ред', '%d реда', '%d редова'),
|
|
||||||
'Page' => 'Страна',
|
|
||||||
'last' => 'последња',
|
|
||||||
'Loading' => 'Учитавам',
|
|
||||||
'Load more data' => 'Учитавам још података',
|
|
||||||
'whole result' => 'цео резултат',
|
|
||||||
'%d byte(s)' => array('%d бајт', '%d бајта', '%d бајтова'),
|
|
||||||
|
|
||||||
'Import' => 'Увоз',
|
|
||||||
'%d row(s) have been imported.' => array('%d ред је увежен.', '%d реда су увежена.', '%d редова је увежено.'),
|
|
||||||
|
|
||||||
// in-place editing in select
|
|
||||||
'Ctrl+click on a value to modify it.' => 'Ctrl+клик на вредност за измену.',
|
|
||||||
'Use edit link to modify this value.' => 'Користи везу за измену ове вредности.',
|
|
||||||
|
|
||||||
// %s can contain auto-increment value
|
|
||||||
'Item%s has been inserted.' => 'Ставка%s је додата.',
|
|
||||||
'Item has been deleted.' => 'Ставка је избрисана.',
|
|
||||||
'Item has been updated.' => 'Ставка је измењена.',
|
|
||||||
'%d item(s) have been affected.' => array('%d ставка је погођена.', '%d ставке су погођене.', '%d ставки је погођено.'),
|
|
||||||
'New item' => 'Нова ставка',
|
|
||||||
'original' => 'оригинал',
|
|
||||||
// label for value '' in enum data type
|
|
||||||
'empty' => 'празно',
|
|
||||||
'edit' => 'измени',
|
|
||||||
'Edit' => 'Измени',
|
|
||||||
'Insert' => 'Уметни',
|
|
||||||
'Save' => 'Сачувај',
|
|
||||||
'Save and continue edit' => 'Сачувај и настави уређење',
|
|
||||||
'Save and insert next' => 'Сачувај и уметни следеће',
|
|
||||||
'Clone' => 'Дуплирај',
|
|
||||||
'Delete' => 'Избриши',
|
|
||||||
|
|
||||||
'E-mail' => 'Ел. пошта',
|
|
||||||
'From' => 'Од',
|
|
||||||
'Subject' => 'Наслов',
|
|
||||||
'Attachments' => 'Прилози',
|
|
||||||
'Send' => 'Пошаљи',
|
|
||||||
'%d e-mail(s) have been sent.' => array('%d порука ел. поште је послата.', '%d поруке ел. поште су послате.', '%d порука ел. поште је послато.'),
|
|
||||||
|
|
||||||
// data type descriptions
|
|
||||||
'Numbers' => 'Број',
|
|
||||||
'Date and time' => 'Датум и време',
|
|
||||||
'Strings' => 'Текст',
|
|
||||||
'Binary' => 'Бинарно',
|
|
||||||
'Lists' => 'Листе',
|
|
||||||
'Network' => 'Мрежа',
|
|
||||||
'Geometry' => 'Геометрија',
|
|
||||||
'Relations' => 'Односи',
|
|
||||||
|
|
||||||
'Editor' => 'Уређивач',
|
|
||||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
|
||||||
'$1-$3-$5' => '$5.$3.$1.',
|
|
||||||
// hint for date format - use language equivalents for day, month and year shortcuts
|
|
||||||
'[yyyy]-mm-dd' => 'dd.mm.[yyyy].',
|
|
||||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
|
||||||
'now' => 'сад',
|
|
||||||
'yes' => 'да',
|
|
||||||
'no' => 'не',
|
|
||||||
|
|
||||||
// general SQLite error in create, drop or rename database
|
|
||||||
'File exists.' => 'Датотека већ постоји.',
|
|
||||||
'Please use one of the extensions %s.' => 'Молим користите један од наставака %s.',
|
|
||||||
|
|
||||||
// PostgreSQL and MS SQL schema support
|
|
||||||
'Alter schema' => 'Уреди шему',
|
|
||||||
'Create schema' => 'Формирај шему',
|
|
||||||
'Schema has been dropped.' => 'Шема је избрисана.',
|
|
||||||
'Schema has been created.' => 'Шема је креирана.',
|
|
||||||
'Schema has been altered.' => 'Шема је измењена.',
|
|
||||||
'schema' => 'шема',
|
|
||||||
'Schema' => 'Шема',
|
|
||||||
'Invalid schema.' => 'Шема није исправна.',
|
|
||||||
|
|
||||||
// PostgreSQL sequences support
|
|
||||||
'Sequences' => 'Низови',
|
|
||||||
'Create sequence' => 'Направи низ',
|
|
||||||
'Sequence has been dropped.' => 'Низ је избрисан.',
|
|
||||||
'Sequence has been created.' => 'Низ је формиран.',
|
|
||||||
'Sequence has been altered.' => 'Низ је измењен.',
|
|
||||||
'Alter sequence' => 'Уреди низ',
|
|
||||||
|
|
||||||
// PostgreSQL user types support
|
|
||||||
'User types' => 'Кориснички типови',
|
|
||||||
'Create type' => 'Дефиниши тип',
|
|
||||||
'Type has been dropped.' => 'Тип је избрисан.',
|
|
||||||
'Type has been created.' => 'тип је креиран.',
|
|
||||||
'Alter type' => 'Уреди тип',
|
|
||||||
);
|
|
||||||
@@ -1,270 +0,0 @@
|
|||||||
<?php
|
|
||||||
$translations = array(
|
|
||||||
'Login' => 'நுழை',
|
|
||||||
'Logout successful.' => 'வெற்றிகரமாய் வெளியேறியாயிற்று.',
|
|
||||||
'Invalid credentials.' => 'சரியான விபரங்கள் இல்லை.',
|
|
||||||
'Server' => 'வழங்கி (Server)',
|
|
||||||
'Username' => 'பயனாளர் (User)',
|
|
||||||
'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' => 'Dump',
|
|
||||||
'Logout' => 'வெளியேறு',
|
|
||||||
'database' => 'தகவல்தளம்',
|
|
||||||
'Use' => 'உபயோகி',
|
|
||||||
'No tables.' => 'அட்டவணை இல்லை.',
|
|
||||||
'select' => 'தேர்வு செய்',
|
|
||||||
'Create new table' => 'புதிய அட்டவணையை உருவாக்கு',
|
|
||||||
'Item has been deleted.' => 'உருப்படி நீக்கப்பட்டது.',
|
|
||||||
'Item has been updated.' => 'உருப்படி புதுப்பிக்கப்பட்டது.',
|
|
||||||
'Edit' => 'தொகு',
|
|
||||||
'Insert' => 'புகுத்து',
|
|
||||||
'Save and insert next' => 'சேமித்தப் பின் அடுத்ததை புகுத்து',
|
|
||||||
'Delete' => 'நீக்கு',
|
|
||||||
'Database' => 'தகவல்தளம்',
|
|
||||||
'Routines' => 'ரொட்டீன் ',
|
|
||||||
'Indexes have been altered.' => 'அகவரிசைகள் (Indexes) மாற்றப்பட்டது.',
|
|
||||||
'Indexes' => 'அகவரிசைகள் (Index) ',
|
|
||||||
'Alter indexes' => 'அகவரிசையை (Index) மாற்று',
|
|
||||||
'Add next' => 'அடுத்ததை சேர்க்கவும்',
|
|
||||||
'Language' => 'மொழி',
|
|
||||||
'Select' => 'தேர்வு செய்',
|
|
||||||
'New item' => 'புதிய உருப்படி',
|
|
||||||
'Search' => 'தேடு',
|
|
||||||
'Sort' => 'தரம் பிரி',
|
|
||||||
'descending' => 'இறங்குமுகமான',
|
|
||||||
'Limit' => 'வரம்பு',
|
|
||||||
'No rows.' => 'வரிசை இல்லை.',
|
|
||||||
'Action' => 'செயல்',
|
|
||||||
'edit' => 'தொகு',
|
|
||||||
'Page' => 'பக்கம்',
|
|
||||||
'Query executed OK, %d row(s) affected.' => array('வினவல் செயல்படுத்தப்பட்டது, %d வரிசை மாற்றப்பட்டது.', 'வினவல் செயல்படுத்தப்பட்டது, %d வரிசைகள் மாற்றப்பட்டன.'),
|
|
||||||
'Error in query' => 'வினவலில் தவறுள்ளது',
|
|
||||||
'Execute' => 'செயல்படுத்து',
|
|
||||||
'Table' => 'அட்டவணை',
|
|
||||||
'Foreign keys' => 'வேற்று விசைகள்',
|
|
||||||
'Triggers' => 'தூண்டுதல்கள்',
|
|
||||||
'View' => 'தோற்றம்',
|
|
||||||
'Unable to select the table' => 'அட்டவணையை தேர்வு செய்ய முடியவில்லை',
|
|
||||||
'Invalid CSRF token. Send the form again.' => 'CSRF டோக்கன் செல்லாது. படிவத்தை மீண்டும் அனுப்பவும்.',
|
|
||||||
'Comment' => 'குறிப்பு',
|
|
||||||
'Default values' => 'உள்ளிருக்கும் (Default) மதிப்புகள் ',
|
|
||||||
'%d byte(s)' => array('%d பைட்', '%d பைட்டுகள்'),
|
|
||||||
'No commands to execute.' => 'செயல் படுத்த எந்த கட்டளைகளும் இல்லை.',
|
|
||||||
'Unable to upload a file.' => 'கோப்பை மேலேற்றம் (upload) செய்ய இயலவில்லை.',
|
|
||||||
'File upload' => 'கோப்பை மேலேற்று (upload) ',
|
|
||||||
'File uploads are disabled.' => 'கோப்புகள் மேலேற்றம் (upload)முடக்கப்பட்டுள்ளன.',
|
|
||||||
'Routine has been called, %d row(s) affected.' => array('ரொட்டீன்கள் அழைக்கப்பட்டுள்ளன, %d வரிசை மாற்றம் அடைந்தது.', 'ரொட்டீன்கள் அழைக்கப்பட்டுள்ளன, %d வரிசைகள் மாற்றம் அடைந்துள்ளன.'),
|
|
||||||
'Call' => 'அழை',
|
|
||||||
'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' => 'அகவரிசை வகை (Index Type)',
|
|
||||||
'Column (length)' => 'நெடுவரிசை (நீளம்)',
|
|
||||||
'View has been dropped.' => 'தோற்றம் நீக்கப்பட்டது.',
|
|
||||||
'View has been altered.' => 'தோற்றம் மாற்றப்பட்டது.',
|
|
||||||
'View has been created.' => 'தோற்றம் உருவாக்கப்பட்டது.',
|
|
||||||
'Alter view' => 'தோற்றத்தை மாற்று',
|
|
||||||
'Create view' => 'தோற்றத்தை உருவாக்கு',
|
|
||||||
'Name' => 'பெயர்',
|
|
||||||
'Process list' => 'வேலைகளின் பட்டி',
|
|
||||||
'%d process(es) have been killed.' => array('%d வேலை வலுவில் நிறுத்தபட்டது.', '%d வேலைகள் வலுவில் நிறுத்தபட்டன.'),
|
|
||||||
'Kill' => 'வலுவில் நிறுத்து',
|
|
||||||
'Parameter name' => 'அளபுரு (Parameter) பெயர்',
|
|
||||||
'Database schema' => 'தகவல்தள அமைப்பு முறைகள்',
|
|
||||||
'Create procedure' => 'செய்முறையை உருவாக்கு',
|
|
||||||
'Create function' => 'Function உருவாக்கு',
|
|
||||||
'Routine has been dropped.' => 'ரொட்டீன் நீக்கப்பட்டது.',
|
|
||||||
'Routine has been altered.' => 'ரொட்டீன் மாற்றப்பட்டது.',
|
|
||||||
'Routine has been created.' => 'ரொட்டீன் உருவாக்கப்பட்டது.',
|
|
||||||
'Alter function' => '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' => 'நிகழ்ச்சி',
|
|
||||||
'%d row(s)' => array('%d வரிசை', '%d வரிசைகள்'),
|
|
||||||
'Remove' => 'நீக்கு',
|
|
||||||
'Are you sure?' => 'நிச்சயமாக ?',
|
|
||||||
'Privileges' => 'சலுகைகள் / சிறப்புரிமைகள்',
|
|
||||||
'Create user' => 'பயனாளரை உருவாக்கு',
|
|
||||||
'User has been dropped.' => 'பயனீட்டாளர் நீக்கப்பட்டார்.',
|
|
||||||
'User has been altered.' => 'பயனீட்டாளர் மாற்றப்பட்டார்.',
|
|
||||||
'User has been created.' => 'பயனீட்டாளர் உருவாக்கப்பட்டது.',
|
|
||||||
'Hashed' => 'Hashed',
|
|
||||||
'Column' => 'நெடுவரிசை',
|
|
||||||
'Routine' => 'ரொட்டீன்',
|
|
||||||
'Grant' => 'அனுமதியளி',
|
|
||||||
'Revoke' => 'இரத்துச்செய்',
|
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'மிக அதிகமான POST தகவல். தகவலை குறைக்கவும் அல்லது %s வடிவமைப்பை (configuration directive) மாற்றவும்.',
|
|
||||||
'Logged as: %s' => 'பயனாளர்: %s',
|
|
||||||
'Move up' => 'மேலே நகர்த்து',
|
|
||||||
'Move down' => 'கீழே நகர்த்து',
|
|
||||||
'Functions' => 'Functions',
|
|
||||||
'Aggregation' => 'திரள்வு (Aggregation)',
|
|
||||||
'Export' => 'ஏற்றுமதி',
|
|
||||||
'Output' => 'வெளியீடு',
|
|
||||||
'open' => 'திற',
|
|
||||||
'save' => 'சேமி',
|
|
||||||
'Format' => 'ஃபார்மட் (Format)',
|
|
||||||
'Tables' => 'அட்டவணை',
|
|
||||||
'Data' => 'தகவல்',
|
|
||||||
'Event has been dropped.' => 'நிகழ்ச்சி (Event) நீக்கப்பட்டது.',
|
|
||||||
'Event has been altered.' => 'நிகழ்ச்சி (Event) மாற்றப்பட்டது.',
|
|
||||||
'Event has been created.' => 'நிகழ்ச்சி (Event) உருவாக்கப்பட்டது.',
|
|
||||||
'Alter event' => 'நிகழ்ச்சியை (Event) மாற்று',
|
|
||||||
'Create event' => 'நிகழ்ச்சியை (Event) உருவாக்கு',
|
|
||||||
'At given time' => 'குறித்த நேரத்தில்',
|
|
||||||
'Every' => 'ஒவ்வொரு',
|
|
||||||
'Events' => 'நிகழ்ச்சிகள்',
|
|
||||||
'Schedule' => 'கால அட்டவணை',
|
|
||||||
'Start' => 'தொடங்கு',
|
|
||||||
'End' => 'முடி (வு)',
|
|
||||||
'Status' => 'நிகழ்நிலை (Status)',
|
|
||||||
'On completion preserve' => 'முடிந்ததின் பின் பாதுகாக்கவும்',
|
|
||||||
'Tables and views' => 'அட்டவணைகளும் பார்வைகளும்',
|
|
||||||
'Data Length' => 'தகவல் நீளம்',
|
|
||||||
'Index Length' => 'Index நீளம்',
|
|
||||||
'Data Free' => 'Data Free',
|
|
||||||
'Collation' => 'கொலேசன்',
|
|
||||||
'Analyze' => 'நுணுகி ஆராயவும்',
|
|
||||||
'Optimize' => 'உகப்பாக்கு (Optimize)',
|
|
||||||
'Check' => 'பரிசோதி',
|
|
||||||
'Repair' => 'பழுது பார்',
|
|
||||||
'Truncate' => 'குறை (Truncate)',
|
|
||||||
'Tables have been truncated.' => 'அட்டவணை குறைக்கப்பட்டது (truncated).',
|
|
||||||
'Rows' => 'வரிசைகள்',
|
|
||||||
',' => ',',
|
|
||||||
'Tables have been moved.' => 'அட்டவணை நகர்த்தப்பட்டது.',
|
|
||||||
'Move to other database' => 'மற்ற தகவல் தளத்திற்க்கு நகர்த்து',
|
|
||||||
'Move' => 'நகர்த்து',
|
|
||||||
'Engine' => 'எஞ்சின் (Engine)',
|
|
||||||
'Save and continue edit' => 'சேமித்த பிறகு தொகுப்பதை தொடரவும்',
|
|
||||||
'original' => 'அசல்',
|
|
||||||
'Tables have been dropped.' => 'அட்டவணை நீக்கப்பட்டது.',
|
|
||||||
'%d item(s) have been affected.' => array('%d உருப்படி மாற்றமடைந்தது.', '%d உருப்படிகள் மாற்றமடைந்தன.'),
|
|
||||||
'whole result' => 'முழுமையான முடிவு',
|
|
||||||
'Clone' => 'நகலி (Clone)',
|
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'அனுமதிக்கப்பட்ட அதிகபட்ச கோப்புகளின் எண்ணிக்கை மீறப்பட்டது. தயவு செய்து %s மற்றும் %s யை அதிகரிக்கவும்.',
|
|
||||||
'Partition by' => 'பிரித்தது',
|
|
||||||
'Partitions' => 'பிரிவுகள்',
|
|
||||||
'Partition name' => 'பிரிவின் பெயர்',
|
|
||||||
'Values' => 'மதிப்புகள்',
|
|
||||||
'%d row(s) have been imported.' => array('%d வரிசை இறக்குமதி (Import) செய்யப்பட்டது.', '%d வரிசைகள் இறக்குமதி (Import) செய்யப்பட்டன.'),
|
|
||||||
'Show structure' => 'கட்டமைப்பை காண்பிக்கவும்',
|
|
||||||
'Import' => 'இறக்குமதி (Import)',
|
|
||||||
'Stop on error' => 'பிழை ஏற்படின் நிற்க',
|
|
||||||
'Select data' => 'தகவலை தேர்வு செய்',
|
|
||||||
'%.3f s' => '%.3f s',
|
|
||||||
'$1-$3-$5' => '$5/$3/$1',
|
|
||||||
'[yyyy]-mm-dd' => 'dd/mm/[yyyy]',
|
|
||||||
'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.' => 'இலக்கு நெடுவரிசையில் அகவரிசை (Index) மற்றும் குறிக்கப்பட்ட தகவல் (Referenced DATA) கண்டிப்பாக இருத்தல் வேண்டும். மூல நெடுவரிசை மற்றும் இலக்கு நெடுவரிசையின் தகவல் வடிவம் (DATA TYPE) ஒன்றாக இருக்க வேண்டும்.',
|
|
||||||
'Relations' => 'உறவுகள் (Relations)',
|
|
||||||
'Run file' => 'கோப்பினை இயக்கவும்',
|
|
||||||
'Clear' => 'துடை (Clear)',
|
|
||||||
'Maximum allowed file size is %sB.' => 'கோப்பின் அதிகபட்ச அளவு %sB.',
|
|
||||||
'Numbers' => 'எண்கள்',
|
|
||||||
'Date and time' => 'தேதி மற்றும் நேரம்',
|
|
||||||
'Strings' => 'சரம் (String)',
|
|
||||||
'Binary' => 'பைனரி',
|
|
||||||
'Lists' => 'பட்டியல்',
|
|
||||||
'Editor' => 'தொகுப்பாளர்',
|
|
||||||
'E-mail' => 'மின்னஞ்சல்',
|
|
||||||
'From' => 'அனுப்புனர்',
|
|
||||||
'Subject' => 'பொருள்',
|
|
||||||
'Send' => 'அனுப்பு',
|
|
||||||
'%d e-mail(s) have been sent.' => array('%d மின்னஞ்சல் அனுப்பபட்டது.', '%d மின்னஞ்சல்கள் அனுப்பப்பட்டன.'),
|
|
||||||
'Webserver file %s' => 'வெப் சர்வர் கோப்பு %s',
|
|
||||||
'File does not exist.' => 'கோப்பு இல்லை.',
|
|
||||||
'%d in total' => 'மொத்தம் %d ',
|
|
||||||
'Permanent login' => 'நிரந்தரமாக நுழையவும்',
|
|
||||||
'Schema' => 'அமைப்புமுறை',
|
|
||||||
'Alter schema' => 'அமைப்புமுறையை மாற்று',
|
|
||||||
'Create schema' => 'அமைப்புமுறையை உருவாக்கு',
|
|
||||||
'Search data in tables' => 'தகவலை அட்டவணையில் தேடு',
|
|
||||||
'Sequences' => 'வரிசைமுறை',
|
|
||||||
'Create sequence' => 'வரிசைமுறையை உருவாக்கு',
|
|
||||||
'User types' => 'பயனாளர் வகைகள்',
|
|
||||||
'Create type' => 'வகையை உருவாக்கு',
|
|
||||||
'Item%s has been inserted.' => 'உருப்படி (Item) சேர்க்கப்பட்டது.',
|
|
||||||
'Schema has been dropped.' => 'அமைப்புமுறை நீக்கப்பட்டது.',
|
|
||||||
'Schema has been created.' => 'அமைப்புமுறை உருவாக்கப்பட்டது.',
|
|
||||||
'Schema has been altered.' => 'அமைப்புமுறை மாற்றப்பட்டது.',
|
|
||||||
'Use edit link to modify this value.' => 'இந்த மதிப்பினை மாற்ற, தொகுப்பு இணைப்பினை உபயோகிக்கவும்.',
|
|
||||||
'last' => 'கடைசி',
|
|
||||||
'Sequence has been dropped.' => 'வரிசைமுறை நீக்கப்பட்டது.',
|
|
||||||
'Sequence has been created.' => 'வரிசைமுறை உருவாக்கப்பட்டது.',
|
|
||||||
'Sequence has been altered.' => 'வரிசைமுறை மாற்றப்பட்டது.',
|
|
||||||
'Alter sequence' => 'வரிசைமுறையை மாற்று',
|
|
||||||
'From server' => 'செர்வரில் இருந்து',
|
|
||||||
'Type has been dropped.' => 'வகை (type) நீக்கப்பட்டது.',
|
|
||||||
'Type has been created.' => 'வகை (type) உருவாக்கப்பட்டது.',
|
|
||||||
'Alter type' => 'வகையினை (type) மாற்று',
|
|
||||||
'System' => 'சிஸ்டம் (System)',
|
|
||||||
'anywhere' => 'எங்காயினும்',
|
|
||||||
'empty' => 'வெறுமை (empty)',
|
|
||||||
'schema' => 'அமைப்புமுறை',
|
|
||||||
'No extension' => 'விரிவு (extensஇஒன்) இல்லை ',
|
|
||||||
'Databases have been dropped.' => 'தகவல் தளங்கள் நீக்கப்பட்டன.',
|
|
||||||
'%s version: %s through PHP extension %s' => '%s பதிப்பு: %s through PHP extension %s',
|
|
||||||
'Network' => 'நெட்வொர்க்',
|
|
||||||
'Geometry' => 'வடிவவியல் (Geometry)',
|
|
||||||
'File exists.' => 'கோப்பு உள்ளது.',
|
|
||||||
'Attachments' => 'இணைப்புகள்',
|
|
||||||
'now' => 'இப்பொழுது',
|
|
||||||
'%d query(s) executed OK.' => array('%d வினவல் செயல்படுத்தப்பட்டது.', '%d வினவல்கள் செயல்படுத்தப்பட்டன.'),
|
|
||||||
'Show only errors' => 'பிழைகளை மட்டும் காண்பிக்கவும்',
|
|
||||||
'Refresh' => 'புதுப்பி (Refresh)',
|
|
||||||
'Invalid schema.' => 'அமைப்புமுறை சரியானதல்ல (Invalid Schema).',
|
|
||||||
'Please use one of the extensions %s.' => 'தயவு செய்து ஒரு விரிவினை %s (extension) உபயோகிக்கவும்.',
|
|
||||||
'ltr' => 'ltr',
|
|
||||||
'Tables have been copied.' => 'அட்டவணைகள் நகலெடுக்கப் பட்டது.',
|
|
||||||
'Copy' => 'நகல்',
|
|
||||||
'Permanent link' => 'நிரந்தர இணைப்பு',
|
|
||||||
'Edit all' => 'அனைத்தையும் தொகு',
|
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
|
||||||
);
|
|
||||||
@@ -1,322 +0,0 @@
|
|||||||
<?php
|
|
||||||
$translations = array(
|
|
||||||
// label for database system selection (MySQL, SQLite, ...)
|
|
||||||
'System' => 'Sistem',
|
|
||||||
'Server' => 'Sunucu',
|
|
||||||
'Username' => 'Kullanıcı',
|
|
||||||
'Password' => 'Parola',
|
|
||||||
'Permanent login' => 'Beni hatırla',
|
|
||||||
'Login' => 'Giriş',
|
|
||||||
'Logout' => 'Çıkış',
|
|
||||||
'Logged as: %s' => '%s olarak giriş yapıldı.',
|
|
||||||
'Logout successful.' => 'Başarıyla çıkış yapıldı.',
|
|
||||||
'Invalid credentials.' => 'Geçersiz kimlik.',
|
|
||||||
'Language' => 'Dil',
|
|
||||||
'Invalid CSRF token. Send the form again.' => 'Geçersiz (CSRF) jetonu. Formu tekrar yolla.',
|
|
||||||
'No extension' => 'Uzantı yok',
|
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'Desteklenen PHP eklentilerinden (%s) hiçbiri mevcut değil.',
|
|
||||||
'Session support must be enabled.' => 'Oturum desteği etkin olmalıdır.',
|
|
||||||
'Session expired, please login again.' => 'Oturum süresi doldu, lütfen tekrar giriş yapın.',
|
|
||||||
'%s version: %s through PHP extension %s' => '%s sürüm: %s, %s PHP eklentisi ile',
|
|
||||||
'Refresh' => 'Tazele',
|
|
||||||
|
|
||||||
// text direction
|
|
||||||
'ltr' => 'ltr',
|
|
||||||
|
|
||||||
'Privileges' => 'İzinler',
|
|
||||||
'Create user' => 'Kullanıcı oluştur',
|
|
||||||
'User has been dropped.' => 'Kullanıcı silindi.',
|
|
||||||
'User has been altered.' => 'Kullanıcı değiştirildi.',
|
|
||||||
'User has been created.' => 'Kullanıcı oluşturuldu.',
|
|
||||||
'Hashed' => 'Harmanlandı',
|
|
||||||
'Column' => 'Kolon',
|
|
||||||
'Routine' => 'Yordam',
|
|
||||||
'Grant' => 'Yetki Ver',
|
|
||||||
'Revoke' => 'Yetki Kaldır',
|
|
||||||
|
|
||||||
'Process list' => 'İşlem listesi',
|
|
||||||
'%d process(es) have been killed.' => array('%d işlem sonlandırıldı.', '%d adet işlem sonlandırıldı.'),
|
|
||||||
'Kill' => 'Sonlandır',
|
|
||||||
|
|
||||||
'Variables' => 'Değişkenler',
|
|
||||||
'Status' => 'Durum',
|
|
||||||
|
|
||||||
'SQL command' => 'SQL komutu',
|
|
||||||
'%d query(s) executed OK.' => array('%d sorgu başarıyla çalıştırıldı.', '%d adet sorgu başarıyla çalıştırıldı.'),
|
|
||||||
'Query executed OK, %d row(s) affected.' => array('Sorgu başarıyla çalıştırıldı, %d adet kayıt etkilendi.', 'Sorgu başarıyla çalıştırıldı, %d adet kayıt etkilendi.'),
|
|
||||||
'No commands to execute.' => 'Çalıştırılacak komut yok.',
|
|
||||||
'Error in query' => 'Sorguda hata',
|
|
||||||
'Execute' => 'Çalıştır',
|
|
||||||
'Stop on error' => 'Hata oluşursa dur',
|
|
||||||
'Show only errors' => 'Sadece hataları göster.',
|
|
||||||
// sprintf() format for time of the command
|
|
||||||
'%.3f s' => '%.3f s',
|
|
||||||
'History' => 'Geçmiş',
|
|
||||||
'Clear' => 'Temizle',
|
|
||||||
'Edit all' => 'Tümünü düzenle',
|
|
||||||
|
|
||||||
'File upload' => 'Dosya gönder',
|
|
||||||
'From server' => 'Sunucudan',
|
|
||||||
'Webserver file %s' => '%s web sunucusu dosyası',
|
|
||||||
'Run file' => 'Dosyayı çalıştır',
|
|
||||||
'File does not exist.' => 'Dosya mevcut değil.',
|
|
||||||
'File uploads are disabled.' => 'Dosya gönderimi etkin değil.',
|
|
||||||
'Unable to upload a file.' => 'Dosya gönderilemiyor.',
|
|
||||||
'Maximum allowed file size is %sB.' => 'İzin verilen dosya boyutu sınırı %sB.',
|
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Çok büyük POST verisi, veriyi azaltın ya da %s ayar yönergesini uygun olarak yapılandırın.',
|
|
||||||
|
|
||||||
'Export' => 'Dışarı Aktar',
|
|
||||||
'Dump' => 'Döküm',
|
|
||||||
'Output' => 'Çıktı',
|
|
||||||
'open' => 'aç',
|
|
||||||
'save' => 'kaydet',
|
|
||||||
'Format' => 'Biçim',
|
|
||||||
'Data' => 'Veri',
|
|
||||||
|
|
||||||
'Database' => 'Veri Tabanı',
|
|
||||||
'database' => 'veri tabanı',
|
|
||||||
'Use' => 'Kullan',
|
|
||||||
'Select database' => 'Veri tabanı seç',
|
|
||||||
'Invalid database.' => 'Geçersiz veri tabanı.',
|
|
||||||
'Create new database' => 'Yeni veri tabanı oluştur',
|
|
||||||
'Database has been dropped.' => 'Veri tabanı silindi.',
|
|
||||||
'Databases have been dropped.' => 'Veritabanları silindi.',
|
|
||||||
'Database has been created.' => 'Veri tabanı oluşturuldu.',
|
|
||||||
'Database has been renamed.' => 'Veri tabanının ismi değiştirildi.',
|
|
||||||
'Database has been altered.' => 'Veri tabanı değiştirildi.',
|
|
||||||
'Alter database' => 'Veri tabanını değiştir',
|
|
||||||
'Create database' => 'Veri tabanı oluştur',
|
|
||||||
'Database schema' => 'Veri tabanı şeması',
|
|
||||||
|
|
||||||
// link to current database schema layout
|
|
||||||
'Permanent link' => 'Kalıcı bağlantı',
|
|
||||||
|
|
||||||
// thousands separator - must contain single byte
|
|
||||||
',' => ' ',
|
|
||||||
'Engine' => 'Motor',
|
|
||||||
'Collation' => 'Karşılaştırma',
|
|
||||||
'Data Length' => 'Veri Uzunluğu',
|
|
||||||
'Index Length' => 'Dizin Uzunluğu',
|
|
||||||
'Data Free' => 'Boş Veri',
|
|
||||||
'Rows' => 'Kayıtlar',
|
|
||||||
'%d in total' => 'toplam %d',
|
|
||||||
'Analyze' => 'Çözümle',
|
|
||||||
'Optimize' => 'En uygun hale getir',
|
|
||||||
'Check' => 'Denetle',
|
|
||||||
'Repair' => 'Tamir Et',
|
|
||||||
'Truncate' => 'Boşalt',
|
|
||||||
'Tables have been truncated.' => 'Tablolar boşaltıldı.',
|
|
||||||
'Move to other database' => 'Başka veri tabanına taşı',
|
|
||||||
'Move' => 'Taşı',
|
|
||||||
'Tables have been moved.' => 'Tablolar taşındı.',
|
|
||||||
'Copy' => 'Kopyala',
|
|
||||||
'Tables have been copied.' => 'Tablolar kopyalandı.',
|
|
||||||
|
|
||||||
'Routines' => 'Yordamlar',
|
|
||||||
'Routine has been called, %d row(s) affected.' => array('Yordam çağrıldı, %d adet kayıt etkilendi.', 'Yordam çağrıldı, %d kayıt etkilendi.'),
|
|
||||||
'Call' => 'Çağır',
|
|
||||||
'Parameter name' => 'Parametre adı',
|
|
||||||
'Create procedure' => 'Yöntem oluştur',
|
|
||||||
'Create function' => 'Fonksiyon oluştur',
|
|
||||||
'Routine has been dropped.' => 'Yordam silindi.',
|
|
||||||
'Routine has been altered.' => 'Yordam değiştirildi.',
|
|
||||||
'Routine has been created.' => 'Yordam oluşturuldu.',
|
|
||||||
'Alter function' => 'Fonksyionu değiştir',
|
|
||||||
'Alter procedure' => 'Yöntemi değiştir',
|
|
||||||
'Return type' => 'Geri dönüş türü',
|
|
||||||
|
|
||||||
'Events' => 'Olaylar',
|
|
||||||
'Event has been dropped.' => 'Olay silindi.',
|
|
||||||
'Event has been altered.' => 'Olay değiştirildi.',
|
|
||||||
'Event has been created.' => 'Olay oluşturuldu.',
|
|
||||||
'Alter event' => 'Olayı değiştir',
|
|
||||||
'Create event' => 'Olay oluştur',
|
|
||||||
'At given time' => 'Verilen zamanda',
|
|
||||||
'Every' => 'Her zaman',
|
|
||||||
'Schedule' => 'Takvimli',
|
|
||||||
'Start' => 'Başla',
|
|
||||||
'End' => 'Son',
|
|
||||||
'On completion preserve' => 'Tamamlama koruması',
|
|
||||||
|
|
||||||
'Tables' => 'Tablolar',
|
|
||||||
'Tables and views' => 'Tablolar ve görünümler',
|
|
||||||
'Table' => 'Tablo',
|
|
||||||
'No tables.' => 'Tablo yok.',
|
|
||||||
'Alter table' => 'Tabloyu değiştir',
|
|
||||||
'Create table' => 'Tablo oluştur',
|
|
||||||
'Create new table' => 'Yeni tablo oluştur',
|
|
||||||
'Table has been dropped.' => 'Tablo silindi.',
|
|
||||||
'Tables have been dropped.' => 'Tablolar silindi.',
|
|
||||||
'Tables have been optimized.' => 'Tablolar en uygun hale getirildi.',
|
|
||||||
'Table has been altered.' => 'Tablo değiştirildi.',
|
|
||||||
'Table has been created.' => 'Tablo oluşturuldu.',
|
|
||||||
'Table name' => 'Tablo adı',
|
|
||||||
'Show structure' => 'Yapıyı göster',
|
|
||||||
'engine' => 'motor',
|
|
||||||
'collation' => 'karşılaştırma',
|
|
||||||
'Column name' => 'Kolon adı',
|
|
||||||
'Type' => 'Tür',
|
|
||||||
'Length' => 'Uzunluk',
|
|
||||||
'Auto Increment' => 'Otomatik Artır',
|
|
||||||
'Options' => 'Seçenekler',
|
|
||||||
'Comment' => 'Yorum',
|
|
||||||
'Default values' => 'Varsayılan değerler',
|
|
||||||
'Drop' => 'Sil',
|
|
||||||
'Are you sure?' => 'Emin misiniz?',
|
|
||||||
'Move up' => 'Yukarı taşı',
|
|
||||||
'Move down' => 'Aşağı taşı',
|
|
||||||
'Remove' => 'Sil',
|
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'İzin verilen en fazla alan sayısı aşıldı. Lütfen %s değerlerini artırın.',
|
|
||||||
|
|
||||||
'Partition by' => 'Bununla bölümle',
|
|
||||||
'Partitions' => 'Bölümler',
|
|
||||||
'Partition name' => 'Bölüm adı',
|
|
||||||
'Values' => 'Değerler',
|
|
||||||
|
|
||||||
'View' => 'Görünüm',
|
|
||||||
'View has been dropped.' => 'Görünüm silindi.',
|
|
||||||
'View has been altered.' => 'Görünüm değiştirildi.',
|
|
||||||
'View has been created.' => 'Görünüm oluşturuldu.',
|
|
||||||
'Alter view' => 'Görünümü değiştir',
|
|
||||||
'Create view' => 'Görünüm oluştur',
|
|
||||||
|
|
||||||
'Indexes' => 'Dizinler',
|
|
||||||
'Indexes have been altered.' => 'Dizinler değiştirildi.',
|
|
||||||
'Alter indexes' => 'Dizinleri değiştir',
|
|
||||||
'Add next' => 'Bundan sonra ekle',
|
|
||||||
'Index Type' => 'Dizin Türü',
|
|
||||||
'Column (length)' => 'Kolon (uzunluğu)',
|
|
||||||
|
|
||||||
'Foreign keys' => 'Dış anahtarlar',
|
|
||||||
'Foreign key' => 'Dış anahtar',
|
|
||||||
'Foreign key has been dropped.' => 'Dış anahtar silindi.',
|
|
||||||
'Foreign key has been altered.' => 'Dış anahtar değiştirildi.',
|
|
||||||
'Foreign key has been created.' => 'Dış anahtar oluşturuldu.',
|
|
||||||
'Target table' => 'Hedef tablo',
|
|
||||||
'Change' => 'Değiştir',
|
|
||||||
'Source' => 'Kaynak',
|
|
||||||
'Target' => 'Hedef',
|
|
||||||
'Add column' => 'Kolon ekle',
|
|
||||||
'Alter' => 'Değiştir',
|
|
||||||
'Add foreign key' => 'Dış anahtar ekle',
|
|
||||||
'ON DELETE' => 'ON DELETE (Hedefteki Kayıt Silinirse)',
|
|
||||||
'ON UPDATE' => 'ON UPDATE (Hedefteki Kayıt Değiştirilirse)',
|
|
||||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Kaynak ve hedef kolonlar aynı veri türünde olmalı, hedef kolonlarda dizin bulunmalı ve başvurulan veri mevcut olmalı.',
|
|
||||||
|
|
||||||
'Triggers' => 'Tetikler',
|
|
||||||
'Add trigger' => 'Tetik ekle',
|
|
||||||
'Trigger has been dropped.' => 'Tetik silindi.',
|
|
||||||
'Trigger has been altered.' => 'Tetik değiştirildi.',
|
|
||||||
'Trigger has been created.' => 'Tetik oluşturuldu.',
|
|
||||||
'Alter trigger' => 'Tetiği değiştir.',
|
|
||||||
'Create trigger' => 'Tetik oluştur',
|
|
||||||
'Time' => 'Zaman',
|
|
||||||
'Event' => 'Olay',
|
|
||||||
'Name' => 'Ad',
|
|
||||||
|
|
||||||
'select' => 'seç',
|
|
||||||
'Select' => 'Seç',
|
|
||||||
'Select data' => 'Veri seç',
|
|
||||||
'Functions' => 'Fonksiyonlar',
|
|
||||||
'Aggregation' => 'Kümeleme',
|
|
||||||
'Search' => 'Ara',
|
|
||||||
'anywhere' => 'hiçbir yerde',
|
|
||||||
'Search data in tables' => 'Tablolarda veri ara',
|
|
||||||
'Sort' => 'Sırala',
|
|
||||||
'descending' => 'azalan',
|
|
||||||
'Limit' => 'sınır',
|
|
||||||
'Text length' => 'Yazı uzunluğu',
|
|
||||||
'Action' => 'Eylem',
|
|
||||||
'Full table scan' => 'Tam tablo tarama',
|
|
||||||
'Unable to select the table' => 'Tablo seçilemedi',
|
|
||||||
'No rows.' => 'Kayıt yok.',
|
|
||||||
'%d row(s)' => array('%d kayıt', '%d adet kayıt'),
|
|
||||||
'Page' => 'Sayfa',
|
|
||||||
'last' => 'son',
|
|
||||||
'Load more data' => 'Daha fazla veri yükle',
|
|
||||||
'Loading' => 'Yükleniyor',
|
|
||||||
'whole result' => 'tüm sonuç',
|
|
||||||
'%d byte(s)' => array('%d bayt', '%d bayt'),
|
|
||||||
|
|
||||||
'Import' => 'İçeri Aktar',
|
|
||||||
'%d row(s) have been imported.' => array('%d kayıt içeri aktarıldı.', '%d adet kayıt içeri aktarıldı.'),
|
|
||||||
|
|
||||||
// in-place editing in select
|
|
||||||
'Ctrl+click on a value to modify it.' => 'Bir değeri değiştirmek için üzerine Ctrl+tıklayın.',
|
|
||||||
'Use edit link to modify this value.' => 'Değeri değiştirmek için düzenleme bağlantısını kullanın.',
|
|
||||||
|
|
||||||
// %s can contain auto-increment value
|
|
||||||
'Item%s has been inserted.' => 'Kayıt%s eklendi.',
|
|
||||||
'Item has been deleted.' => 'Kayıt silindi.',
|
|
||||||
'Item has been updated.' => 'Kayıt güncellendi.',
|
|
||||||
'%d item(s) have been affected.' => array('%d kayıt etkilendi.', '%d adet kayıt etkilendi.'),
|
|
||||||
'New item' => 'Yeni kayıt',
|
|
||||||
'original' => 'orijinal',
|
|
||||||
// label for value '' in enum data type
|
|
||||||
'empty' => 'boş',
|
|
||||||
'edit' => 'düzenle',
|
|
||||||
'Edit' => 'Düzenle',
|
|
||||||
'Insert' => 'Ekle',
|
|
||||||
'Save' => 'Kaydet',
|
|
||||||
'Save and continue edit' => 'Kaydet ve düzenlemeye devam et',
|
|
||||||
'Save and insert next' => 'Kaydet ve sonrakini ekle',
|
|
||||||
'Clone' => 'Kopyala',
|
|
||||||
'Delete' => 'Sil',
|
|
||||||
|
|
||||||
'E-mail' => 'E-posta',
|
|
||||||
'From' => 'Gönderen',
|
|
||||||
'Subject' => 'Konu',
|
|
||||||
'Attachments' => 'Ekler',
|
|
||||||
'Send' => 'Gönder',
|
|
||||||
'%d e-mail(s) have been sent.' => array('%d e-posta gönderildi.', '%d adet e-posta gönderildi.'),
|
|
||||||
|
|
||||||
// data type descriptions
|
|
||||||
'Numbers' => 'Sayılar',
|
|
||||||
'Date and time' => 'Tarih ve zaman',
|
|
||||||
'Strings' => 'Dizge',
|
|
||||||
'Binary' => 'İkili',
|
|
||||||
'Lists' => 'Listeler',
|
|
||||||
'Network' => 'Ağ',
|
|
||||||
'Geometry' => 'Geometri',
|
|
||||||
'Relations' => 'İlişkiler',
|
|
||||||
|
|
||||||
'Editor' => 'Düzenleyici',
|
|
||||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
|
||||||
'$1-$3-$5' => '$6.$4.$1',
|
|
||||||
// hint for date format - use language equivalents for day, month and year shortcuts
|
|
||||||
'[yyyy]-mm-dd' => '[yyyy]-aa-gg',
|
|
||||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
|
||||||
'HH:MM:SS' => 'SS:DD:ss',
|
|
||||||
'now' => 'şimdi',
|
|
||||||
'yes' => 'evet',
|
|
||||||
'no' => 'hayır',
|
|
||||||
|
|
||||||
// general SQLite error in create, drop or rename database
|
|
||||||
'File exists.' => 'Dosya zaten mevcut.',
|
|
||||||
'Please use one of the extensions %s.' => '%s uzantılarından birini kullanın.',
|
|
||||||
|
|
||||||
// PostgreSQL and MS SQL schema support
|
|
||||||
'Alter schema' => 'Şemayı değiştir',
|
|
||||||
'Create schema' => 'Şema oluştur',
|
|
||||||
'Schema has been dropped.' => 'Şema silindi.',
|
|
||||||
'Schema has been created.' => 'Şema oluşturuldu.',
|
|
||||||
'Schema has been altered.' => 'Şema değiştirildi.',
|
|
||||||
'schema' => 'şema',
|
|
||||||
'Schema' => 'Şema',
|
|
||||||
'Invalid schema.' => 'Geçersiz şema.',
|
|
||||||
|
|
||||||
// PostgreSQL sequences support
|
|
||||||
'Sequences' => 'Diziler',
|
|
||||||
'Create sequence' => 'Dizi oluştur',
|
|
||||||
'Sequence has been dropped.' => 'Dizi silindi.',
|
|
||||||
'Sequence has been created.' => 'Dizi oluşturuldu.',
|
|
||||||
'Sequence has been altered.' => 'Dizi değiştirildi.',
|
|
||||||
'Alter sequence' => 'Diziyi değiştir',
|
|
||||||
|
|
||||||
// PostgreSQL user types support
|
|
||||||
'User types' => 'Kullanıcı türleri',
|
|
||||||
'Create type' => 'Tür oluştur',
|
|
||||||
'Type has been dropped.' => 'Tür silindi.',
|
|
||||||
'Type has been created.' => 'Tür oluşturuldu.',
|
|
||||||
'Alter type' => 'Türü değiştir',
|
|
||||||
);
|
|
||||||
@@ -1,319 +0,0 @@
|
|||||||
<?php
|
|
||||||
$translations = array(
|
|
||||||
// label for database system selection (MySQL, SQLite, ...)
|
|
||||||
'System' => 'Система Бази Даних',
|
|
||||||
'Server' => 'Сервер',
|
|
||||||
'Username' => 'Користувач',
|
|
||||||
'Password' => 'Пароль',
|
|
||||||
'Permanent login' => 'Пам\'ятати сесію',
|
|
||||||
'Login' => 'Увійти',
|
|
||||||
'Logout' => 'Вийти',
|
|
||||||
'Logged as: %s' => 'Ви увійшли як: %s',
|
|
||||||
'Logout successful.' => 'Ви вдало вийшли з системи.',
|
|
||||||
'Invalid credentials.' => 'Неправильні дані входу.',
|
|
||||||
'Language' => 'Мова',
|
|
||||||
'Invalid CSRF token. Send the form again.' => 'Недійсний CSRF токен. Надішліть форму ще раз.',
|
|
||||||
'No extension' => 'Нема розширень',
|
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'Жодне з PHP-розширень (%s), що підтримуються, не доступне.',
|
|
||||||
'Session support must be enabled.' => 'Сесії повинні бути дозволені.',
|
|
||||||
'Session expired, please login again.' => 'Сесія закінчилась, будь ласка, увійдіть в систему знову.',
|
|
||||||
'%s version: %s through PHP extension %s' => 'Версія %s: %s з PHP-розширенням %s',
|
|
||||||
'Refresh' => 'Оновити',
|
|
||||||
|
|
||||||
// text direction - 'ltr' or 'rtl'
|
|
||||||
'ltr' => 'ltr',
|
|
||||||
|
|
||||||
'Privileges' => 'Привілеї',
|
|
||||||
'Create user' => 'Створити користувача',
|
|
||||||
'User has been dropped.' => 'Користувача було видалено.',
|
|
||||||
'User has been altered.' => 'Користувача було змінено.',
|
|
||||||
'User has been created.' => 'Користувача було створено.',
|
|
||||||
'Hashed' => 'Хешовано',
|
|
||||||
'Column' => 'Колонка',
|
|
||||||
'Routine' => 'Процедура',
|
|
||||||
'Grant' => 'Дозволити',
|
|
||||||
'Revoke' => 'Заборонити',
|
|
||||||
|
|
||||||
'Process list' => 'Перелік процесів',
|
|
||||||
'%d process(es) have been killed.' => array('Було завершено %d процес.', 'Було завершено %d процеси.', 'Було завершёно %d процесів.'),
|
|
||||||
'Kill' => 'Завершити процес',
|
|
||||||
|
|
||||||
'Variables' => 'Змінні',
|
|
||||||
'Status' => 'Статус',
|
|
||||||
|
|
||||||
'SQL command' => 'SQL запит',
|
|
||||||
'%d query(s) executed OK.' => array('%d запит виконано успішно.', '%d запити виконано успішно.', '%d запитів виконано успішно.'),
|
|
||||||
'Query executed OK, %d row(s) affected.' => array('Запит виконано успішно, змінено %d рядок.', 'Запит виконано успішно, змінено %d рядки.', 'Запит виконано успішно, змінено %d рядків.'),
|
|
||||||
'No commands to execute.' => 'Нема запитів до виконання.',
|
|
||||||
'Error in query' => 'Помилка в запиті',
|
|
||||||
'Execute' => 'Виконати',
|
|
||||||
'Stop on error' => 'Зупинитись при помилці',
|
|
||||||
'Show only errors' => 'Показувати тільки помилки',
|
|
||||||
// sprintf() format for time of the command
|
|
||||||
'%.3f s' => '%.3f s',
|
|
||||||
'History' => 'Історія',
|
|
||||||
'Clear' => 'Очистити',
|
|
||||||
'Edit all' => 'Редагувати все',
|
|
||||||
|
|
||||||
'File upload' => 'Завантажити файл',
|
|
||||||
'From server' => 'З сервера',
|
|
||||||
'Webserver file %s' => 'Файл %s на вебсервері',
|
|
||||||
'Run file' => 'Запустити файл',
|
|
||||||
'File does not exist.' => 'Файл не існує.',
|
|
||||||
'File uploads are disabled.' => 'Завантаження файлів заборонене.',
|
|
||||||
'Unable to upload a file.' => 'Неможливо завантажити файл.',
|
|
||||||
'Maximum allowed file size is %sB.' => 'Максимально допустимий розмір файлу %sБ.',
|
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Занадто великий об\'єм POST-даних. Зменшіть об\'єм або збільшіть параметр директиви %s конфигурації.',
|
|
||||||
|
|
||||||
'Export' => 'Експорт',
|
|
||||||
'Dump' => 'Дамп',
|
|
||||||
'Output' => 'Вихідні дані',
|
|
||||||
'open' => 'відкрити',
|
|
||||||
'save' => 'зберегти',
|
|
||||||
'Format' => 'Формат',
|
|
||||||
'Data' => 'Дані',
|
|
||||||
|
|
||||||
'Database' => 'База даних',
|
|
||||||
'database' => 'база даних',
|
|
||||||
'Use' => 'Обрати',
|
|
||||||
'Select database' => 'Обрати базу даних',
|
|
||||||
'Invalid database.' => 'Погана база даних.',
|
|
||||||
'Create new database' => 'Створити нову базу даних',
|
|
||||||
'Database has been dropped.' => 'Базу даних було видалено.',
|
|
||||||
'Databases have been dropped.' => 'Бази даних були видалені.',
|
|
||||||
'Database has been created.' => 'Базу даних було створено.',
|
|
||||||
'Database has been renamed.' => 'Базу даних було переіменовано.',
|
|
||||||
'Database has been altered.' => 'Базу даних було змінено.',
|
|
||||||
'Alter database' => 'Змінити базу даних',
|
|
||||||
'Create database' => 'Створити базу даних',
|
|
||||||
'Database schema' => 'Схема бази даних',
|
|
||||||
|
|
||||||
// link to current database schema layout
|
|
||||||
'Permanent link' => 'Постійне посилання',
|
|
||||||
|
|
||||||
// thousands separator - must contain single byte
|
|
||||||
',' => ' ',
|
|
||||||
'Engine' => 'Рушій',
|
|
||||||
'Collation' => 'Співставлення',
|
|
||||||
'Data Length' => 'Об\'єм даних',
|
|
||||||
'Index Length' => 'Об\'єм індексів',
|
|
||||||
'Data Free' => 'Вільне місце',
|
|
||||||
'Rows' => 'Рядків',
|
|
||||||
'%d in total' => '%d всього',
|
|
||||||
'Analyze' => 'Аналізувати',
|
|
||||||
'Optimize' => 'Оптимізувати',
|
|
||||||
'Check' => 'Перевірити',
|
|
||||||
'Repair' => 'Виправити',
|
|
||||||
'Truncate' => 'Очистити',
|
|
||||||
'Tables have been truncated.' => 'Таблиці було очищено.',
|
|
||||||
'Move to other database' => 'Перенести до іншої бази даних',
|
|
||||||
'Move' => 'Перенести',
|
|
||||||
'Tables have been moved.' => 'Таблиці було перенесено.',
|
|
||||||
'Copy' => 'копіювати',
|
|
||||||
'Tables have been copied.' => 'Таблиці було зкопійовано.',
|
|
||||||
|
|
||||||
'Routines' => 'Збережені процедури',
|
|
||||||
'Routine has been called, %d row(s) affected.' => array('Була викликана процедура, %d запис було змінено.', 'Була викликана процедура, %d записи було змінено.', 'Була викликана процедура, %d записів було змінено.'),
|
|
||||||
'Call' => 'Викликати',
|
|
||||||
'Parameter name' => 'Назва параметра',
|
|
||||||
'Create procedure' => 'Створити процедуру',
|
|
||||||
'Create function' => 'Створити функцію',
|
|
||||||
'Routine has been dropped.' => 'Процедуру було видалено.',
|
|
||||||
'Routine has been altered.' => 'Процедуру було змінено.',
|
|
||||||
'Routine has been created.' => 'Процедуру було створено.',
|
|
||||||
'Alter function' => 'Змінити функцію',
|
|
||||||
'Alter procedure' => 'Змінити процедуру',
|
|
||||||
'Return type' => 'Тип, що повернеться',
|
|
||||||
|
|
||||||
'Events' => 'Події',
|
|
||||||
'Event has been dropped.' => 'Подію було видалено.',
|
|
||||||
'Event has been altered.' => 'Подію було змінено.',
|
|
||||||
'Event has been created.' => 'Подію було створено.',
|
|
||||||
'Alter event' => 'Змінити подію',
|
|
||||||
'Create event' => 'Створити подію',
|
|
||||||
'At given time' => 'В даний час',
|
|
||||||
'Every' => 'Кожного',
|
|
||||||
'Schedule' => 'Розклад',
|
|
||||||
'Start' => 'Початок',
|
|
||||||
'End' => 'Кінець',
|
|
||||||
'On completion preserve' => 'Після завершення зберегти',
|
|
||||||
|
|
||||||
'Tables' => 'Таблиці',
|
|
||||||
'Tables and views' => 'Таблиці і вигляди',
|
|
||||||
'Table' => 'Таблиця',
|
|
||||||
'No tables.' => 'Нема таблиць.',
|
|
||||||
'Alter table' => 'Змінити таблицю',
|
|
||||||
'Create table' => 'Створити таблицю',
|
|
||||||
'Create new table' => 'Створити нову таблицю',
|
|
||||||
'Table has been dropped.' => 'Таблицю було видалено.',
|
|
||||||
'Tables have been dropped.' => 'Таблиці були видалені.',
|
|
||||||
'Tables have been optimized.' => 'Таблиці були оптимізовані.',
|
|
||||||
'Table has been altered.' => 'Таблица була змінена.',
|
|
||||||
'Table has been created.' => 'Таблиця була створена.',
|
|
||||||
'Table name' => 'Назва таблиці',
|
|
||||||
'Show structure' => 'Показати структуру',
|
|
||||||
'engine' => 'рушій',
|
|
||||||
'collation' => 'співставлення',
|
|
||||||
'Column name' => 'Назва стовпця',
|
|
||||||
'Type' => 'Тип',
|
|
||||||
'Length' => 'Довжина',
|
|
||||||
'Auto Increment' => 'Автоматичне збільшення',
|
|
||||||
'Options' => 'Опції',
|
|
||||||
'Comment' => 'Коментарі',
|
|
||||||
'Default values' => 'Значення за замовчуванням',
|
|
||||||
'Drop' => 'Видалити',
|
|
||||||
'Are you sure?' => 'Ви впевнені?',
|
|
||||||
'Move up' => 'Пересунути вгору',
|
|
||||||
'Move down' => 'Пересунути вниз',
|
|
||||||
'Remove' => 'Видалити',
|
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Досягнута максимальна кількість доступних полів. Будь ласка, збільшіть %s.',
|
|
||||||
|
|
||||||
'Partition by' => 'Розділити по',
|
|
||||||
'Partitions' => 'Розділи',
|
|
||||||
'Partition name' => 'Назва розділу',
|
|
||||||
'Values' => 'Значення',
|
|
||||||
|
|
||||||
'View' => 'Вигляд',
|
|
||||||
'View has been dropped.' => 'Вигляд було видалено.',
|
|
||||||
'View has been altered.' => 'Вигляд було змінено.',
|
|
||||||
'View has been created.' => 'Вигляд було створено.',
|
|
||||||
'Alter view' => 'Змінити вигляд',
|
|
||||||
'Create view' => 'Створити вигляд',
|
|
||||||
|
|
||||||
'Indexes' => 'Індекси',
|
|
||||||
'Indexes have been altered.' => 'Індексування було змінено.',
|
|
||||||
'Alter indexes' => 'Змінити індексування',
|
|
||||||
'Add next' => 'Додати ще',
|
|
||||||
'Index Type' => 'Тип індексу',
|
|
||||||
'Column (length)' => 'Стовпець (довжина)',
|
|
||||||
|
|
||||||
'Foreign keys' => 'Зовнішні ключі',
|
|
||||||
'Foreign key' => 'Зовнішній ключ',
|
|
||||||
'Foreign key has been dropped.' => 'Зовнішній ключ було видалено.',
|
|
||||||
'Foreign key has been altered.' => 'Зовнішній ключ було змінено.',
|
|
||||||
'Foreign key has been created.' => 'Зовнішній ключ було створено.',
|
|
||||||
'Target table' => 'Цільова таблиця',
|
|
||||||
'Change' => 'Змінити',
|
|
||||||
'Source' => 'Джерело',
|
|
||||||
'Target' => 'Ціль',
|
|
||||||
'Add column' => 'Додати стовпець',
|
|
||||||
'Alter' => 'Змінити',
|
|
||||||
'Add foreign key' => 'Додати зовнішній ключ',
|
|
||||||
'ON DELETE' => 'ПРИ ВИДАЛЕННІ',
|
|
||||||
'ON UPDATE' => 'ПРИ ЗМІНІ',
|
|
||||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Стовпці повинні мати той самий тип даних, цільові стовпці повинні бути проіндексовані і дані, на які посилаються повинні існувати.',
|
|
||||||
|
|
||||||
'Triggers' => 'Тригери',
|
|
||||||
'Add trigger' => 'Додати тригер',
|
|
||||||
'Trigger has been dropped.' => 'Тригер було видалено.',
|
|
||||||
'Trigger has been altered.' => 'Тригер було змінено.',
|
|
||||||
'Trigger has been created.' => 'Тригер було створено.',
|
|
||||||
'Alter trigger' => 'Змінити тригер',
|
|
||||||
'Create trigger' => 'Створити тригер',
|
|
||||||
'Time' => 'Час',
|
|
||||||
'Event' => 'Подія',
|
|
||||||
'Name' => 'Назва',
|
|
||||||
|
|
||||||
'select' => 'вибрати',
|
|
||||||
'Select' => 'Вибрати',
|
|
||||||
'Select data' => 'Вибрати дані',
|
|
||||||
'Functions' => 'Функції',
|
|
||||||
'Aggregation' => 'Агрегація',
|
|
||||||
'Search' => 'Пошук',
|
|
||||||
'anywhere' => 'будь-де',
|
|
||||||
'Search data in tables' => 'Шукати дані в таблицях',
|
|
||||||
'Sort' => 'Сортувати',
|
|
||||||
'descending' => 'по спаданню',
|
|
||||||
'Limit' => 'Обмеження',
|
|
||||||
'Text length' => 'Довжина тексту',
|
|
||||||
'Action' => 'Дія',
|
|
||||||
'Unable to select the table' => 'Неможливо вибрати таблицю',
|
|
||||||
'No rows.' => 'Нема рядків.',
|
|
||||||
'%d row(s)' => array('%d рядок', '%d рядки', '%d рядків'),
|
|
||||||
'Page' => 'Сторінка',
|
|
||||||
'last' => 'остання',
|
|
||||||
'whole result' => 'весь результат',
|
|
||||||
'%d byte(s)' => array('%d байт', '%d байта', '%d байтів'),
|
|
||||||
|
|
||||||
'Import' => 'Імпортувати',
|
|
||||||
'%d row(s) have been imported.' => array('%d рядок було імпортовано.', '%d рядки було імпортовано.', '%d рядків було імпортовано.'),
|
|
||||||
|
|
||||||
// in-place editing in select
|
|
||||||
'Ctrl+click on a value to modify it.' => 'Ctrl+клікніть на значенні щоб змінити його.',
|
|
||||||
'Use edit link to modify this value.' => 'Використовуйте посилання щоб змінити це значення.',
|
|
||||||
|
|
||||||
// %s can contain auto-increment value
|
|
||||||
'Item%s has been inserted.' => 'Запис%s було вставлено.',
|
|
||||||
'Item has been deleted.' => 'Запис було видалено.',
|
|
||||||
'Item has been updated.' => 'Запис було змінено.',
|
|
||||||
'%d item(s) have been affected.' => array('Було змінено %d запис.', 'Було змінено %d записи.', 'Було змінено %d записів.'),
|
|
||||||
'New item' => 'Новий запис',
|
|
||||||
'original' => 'початковий',
|
|
||||||
// label for value '' in enum data type
|
|
||||||
'empty' => 'порожньо',
|
|
||||||
'edit' => 'редагувати',
|
|
||||||
'Edit' => 'Редагувати',
|
|
||||||
'Insert' => 'Вставити',
|
|
||||||
'Save' => 'Зберегти',
|
|
||||||
'Save and continue edit' => 'Зберегти і продовжити редагування',
|
|
||||||
'Save and insert next' => 'Зберегти і вставити знову',
|
|
||||||
'Clone' => 'Клонувати',
|
|
||||||
'Delete' => 'Видалити',
|
|
||||||
|
|
||||||
'E-mail' => 'E-mail',
|
|
||||||
'From' => 'Від',
|
|
||||||
'Subject' => 'Заголовок',
|
|
||||||
'Attachments' => 'Додатки',
|
|
||||||
'Send' => 'Надіслати',
|
|
||||||
'%d e-mail(s) have been sent.' => array('Було надіслано %d повідомлення.', 'Було надіслано %d повідомлення.', 'Було надіслано %d повідомлень.'),
|
|
||||||
|
|
||||||
// data type descriptions
|
|
||||||
'Numbers' => 'Числа',
|
|
||||||
'Date and time' => 'Дата і час',
|
|
||||||
'Strings' => 'Радки',
|
|
||||||
'Binary' => 'Двійкові',
|
|
||||||
'Lists' => 'Списки',
|
|
||||||
'Network' => 'Мережа',
|
|
||||||
'Geometry' => 'Геометрія',
|
|
||||||
'Relations' => 'Зв\'язки',
|
|
||||||
|
|
||||||
'Editor' => 'Редактор',
|
|
||||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
|
||||||
'$1-$3-$5' => '$5.$3.$1',
|
|
||||||
// hint for date format - use language equivalents for day, month and year shortcuts
|
|
||||||
'[yyyy]-mm-dd' => 'дд.мм.[рррр]',
|
|
||||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
|
||||||
'HH:MM:SS' => 'ГГ:ХХ:СС',
|
|
||||||
'now' => 'зараз',
|
|
||||||
'yes' => 'так',
|
|
||||||
'no' => 'ні',
|
|
||||||
|
|
||||||
// general SQLite error in create, drop or rename database
|
|
||||||
'File exists.' => 'Файл існує.',
|
|
||||||
'Please use one of the extensions %s.' => 'Будь ласка, використовуйте одне з розширень %s.',
|
|
||||||
|
|
||||||
// PostgreSQL and MS SQL schema support
|
|
||||||
'Alter schema' => 'Змінити схему',
|
|
||||||
'Create schema' => 'Створити схему',
|
|
||||||
'Schema has been dropped.' => 'Схему було видалено.',
|
|
||||||
'Schema has been created.' => 'Схему було створено.',
|
|
||||||
'Schema has been altered.' => 'Схему було змінено.',
|
|
||||||
'schema' => 'схема',
|
|
||||||
'Schema' => 'Схема',
|
|
||||||
'Invalid schema.' => 'Невірна схема.',
|
|
||||||
|
|
||||||
// PostgreSQL sequences support
|
|
||||||
'Sequences' => 'Послідовності',
|
|
||||||
'Create sequence' => 'Створити послідовність',
|
|
||||||
'Sequence has been dropped.' => 'Послідовність було видалено.',
|
|
||||||
'Sequence has been created.' => 'Послідовність було створено.',
|
|
||||||
'Sequence has been altered.' => 'Послідовність було змінено.',
|
|
||||||
'Alter sequence' => 'Змінити послідовність',
|
|
||||||
|
|
||||||
// PostgreSQL user types support
|
|
||||||
'User types' => 'Типи користувачів',
|
|
||||||
'Create type' => 'Створити тип',
|
|
||||||
'Type has been dropped.' => 'Тип було видалено.',
|
|
||||||
'Type has been created.' => 'Тип було створено.',
|
|
||||||
'Alter type' => 'Змінити тип',
|
|
||||||
);
|
|
||||||
@@ -1,323 +0,0 @@
|
|||||||
<?php
|
|
||||||
$translations = array(
|
|
||||||
// label for database system selection (MySQL, SQLite, ...)
|
|
||||||
'System' => 'xx',
|
|
||||||
'Server' => 'xx',
|
|
||||||
'Username' => 'xx',
|
|
||||||
'Password' => 'xx',
|
|
||||||
'Permanent login' => 'xx',
|
|
||||||
'Login' => 'xx',
|
|
||||||
'Logout' => 'xx',
|
|
||||||
'Logged as: %s' => 'xx',
|
|
||||||
'Logout successful.' => 'xx',
|
|
||||||
'Invalid credentials.' => 'xx',
|
|
||||||
'Language' => 'xx',
|
|
||||||
'Invalid CSRF token. Send the form again.' => 'xx',
|
|
||||||
'No extension' => 'xx',
|
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'xx',
|
|
||||||
'Session support must be enabled.' => 'xx',
|
|
||||||
'Session expired, please login again.' => 'xx',
|
|
||||||
'%s version: %s through PHP extension %s' => 'xx',
|
|
||||||
'Refresh' => 'xx',
|
|
||||||
|
|
||||||
// text direction - 'ltr' or 'rtl'
|
|
||||||
'ltr' => 'xx',
|
|
||||||
|
|
||||||
'Privileges' => 'xx',
|
|
||||||
'Create user' => 'xx',
|
|
||||||
'User has been dropped.' => 'xx',
|
|
||||||
'User has been altered.' => 'xx',
|
|
||||||
'User has been created.' => 'xx',
|
|
||||||
'Hashed' => 'xx',
|
|
||||||
'Column' => 'xx',
|
|
||||||
'Routine' => 'xx',
|
|
||||||
'Grant' => 'xx',
|
|
||||||
'Revoke' => 'xx',
|
|
||||||
|
|
||||||
'Process list' => 'xx',
|
|
||||||
'%d process(es) have been killed.' => array('xx', 'xx'),
|
|
||||||
'Kill' => 'xx',
|
|
||||||
|
|
||||||
'Variables' => 'xx',
|
|
||||||
'Status' => 'xx',
|
|
||||||
|
|
||||||
'SQL command' => 'xx',
|
|
||||||
'%d query(s) executed OK.' => array('xx', 'xx'),
|
|
||||||
'Query executed OK, %d row(s) affected.' => array('xx', 'xx'),
|
|
||||||
'No commands to execute.' => 'xx',
|
|
||||||
'Error in query' => 'xx',
|
|
||||||
'Execute' => 'xx',
|
|
||||||
'Stop on error' => 'xx',
|
|
||||||
'Show only errors' => 'xx',
|
|
||||||
// sprintf() format for time of the command
|
|
||||||
'%.3f s' => 'xx',
|
|
||||||
'History' => 'xx',
|
|
||||||
'Clear' => 'xx',
|
|
||||||
'Edit all' => 'xx',
|
|
||||||
|
|
||||||
'File upload' => 'xx',
|
|
||||||
'From server' => 'xx',
|
|
||||||
'Webserver file %s' => 'xx',
|
|
||||||
'Run file' => 'xx',
|
|
||||||
'File does not exist.' => 'xx',
|
|
||||||
'File uploads are disabled.' => 'xx',
|
|
||||||
'Unable to upload a file.' => 'xx',
|
|
||||||
'Maximum allowed file size is %sB.' => 'xx',
|
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'xx',
|
|
||||||
|
|
||||||
'Export' => 'xx',
|
|
||||||
'Dump' => 'xx',
|
|
||||||
'Output' => 'xx',
|
|
||||||
'open' => 'xx',
|
|
||||||
'save' => 'xx',
|
|
||||||
'Format' => 'xx',
|
|
||||||
'Data' => 'xx',
|
|
||||||
|
|
||||||
'Database' => 'xx',
|
|
||||||
'database' => 'xx',
|
|
||||||
'Use' => 'xx',
|
|
||||||
'Select database' => 'xx',
|
|
||||||
'Invalid database.' => 'xx',
|
|
||||||
'Create new database' => 'xx',
|
|
||||||
'Database has been dropped.' => 'xx',
|
|
||||||
'Databases have been dropped.' => 'xx',
|
|
||||||
'Database has been created.' => 'xx',
|
|
||||||
'Database has been renamed.' => 'xx',
|
|
||||||
'Database has been altered.' => 'xx',
|
|
||||||
'Alter database' => 'xx',
|
|
||||||
'Create database' => 'xx',
|
|
||||||
'Database schema' => 'xx',
|
|
||||||
|
|
||||||
// link to current database schema layout
|
|
||||||
'Permanent link' => 'xx',
|
|
||||||
|
|
||||||
// thousands separator - must contain single byte
|
|
||||||
',' => 'xx',
|
|
||||||
'Engine' => 'xx',
|
|
||||||
'Collation' => 'xx',
|
|
||||||
'Data Length' => 'xx',
|
|
||||||
'Index Length' => 'xx',
|
|
||||||
'Data Free' => 'xx',
|
|
||||||
'Rows' => 'xx',
|
|
||||||
'%d in total' => 'xx',
|
|
||||||
'Analyze' => 'xx',
|
|
||||||
'Optimize' => 'xx',
|
|
||||||
'Check' => 'xx',
|
|
||||||
'Repair' => 'xx',
|
|
||||||
'Truncate' => 'xx',
|
|
||||||
'Tables have been truncated.' => 'xx',
|
|
||||||
'Move to other database' => 'xx',
|
|
||||||
'Move' => 'xx',
|
|
||||||
'Tables have been moved.' => 'xx',
|
|
||||||
'Copy' => 'xx',
|
|
||||||
'Tables have been copied.' => 'xx',
|
|
||||||
|
|
||||||
'Routines' => 'xx',
|
|
||||||
'Routine has been called, %d row(s) affected.' => array('xx', 'xx'),
|
|
||||||
'Call' => 'xx',
|
|
||||||
'Parameter name' => 'xx',
|
|
||||||
'Create procedure' => 'xx',
|
|
||||||
'Create function' => 'xx',
|
|
||||||
'Routine has been dropped.' => 'xx',
|
|
||||||
'Routine has been altered.' => 'xx',
|
|
||||||
'Routine has been created.' => 'xx',
|
|
||||||
'Alter function' => 'xx',
|
|
||||||
'Alter procedure' => 'xx',
|
|
||||||
'Return type' => 'xx',
|
|
||||||
|
|
||||||
'Events' => 'xx',
|
|
||||||
'Event has been dropped.' => 'xx',
|
|
||||||
'Event has been altered.' => 'xx',
|
|
||||||
'Event has been created.' => 'xx',
|
|
||||||
'Alter event' => 'xx',
|
|
||||||
'Create event' => 'xx',
|
|
||||||
'At given time' => 'xx',
|
|
||||||
'Every' => 'xx',
|
|
||||||
'Schedule' => 'xx',
|
|
||||||
'Start' => 'xx',
|
|
||||||
'End' => 'xx',
|
|
||||||
'On completion preserve' => 'xx',
|
|
||||||
|
|
||||||
'Tables' => 'xx',
|
|
||||||
'Tables and views' => 'xx',
|
|
||||||
'Table' => 'xx',
|
|
||||||
'No tables.' => 'xx',
|
|
||||||
'Alter table' => 'xx',
|
|
||||||
'Create table' => 'xx',
|
|
||||||
'Create new table' => 'xx',
|
|
||||||
'Table has been dropped.' => 'xx',
|
|
||||||
'Tables have been dropped.' => 'xx',
|
|
||||||
'Tables have been optimized.' => 'xx',
|
|
||||||
'Table has been altered.' => 'xx',
|
|
||||||
'Table has been created.' => 'xx',
|
|
||||||
'Table name' => 'xx',
|
|
||||||
'Show structure' => 'xx',
|
|
||||||
'engine' => 'xx',
|
|
||||||
'collation' => 'xx',
|
|
||||||
'Column name' => 'xx',
|
|
||||||
'Type' => 'xx',
|
|
||||||
'Length' => 'xx',
|
|
||||||
'Auto Increment' => 'xx',
|
|
||||||
'Options' => 'xx',
|
|
||||||
'Comment' => 'xx',
|
|
||||||
'Default values' => 'xx',
|
|
||||||
'Drop' => 'xx',
|
|
||||||
'Are you sure?' => 'xx',
|
|
||||||
'Move up' => 'xx',
|
|
||||||
'Move down' => 'xx',
|
|
||||||
'Remove' => 'xx',
|
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'xx',
|
|
||||||
|
|
||||||
'Partition by' => 'xx',
|
|
||||||
'Partitions' => 'xx',
|
|
||||||
'Partition name' => 'xx',
|
|
||||||
'Values' => 'xx',
|
|
||||||
|
|
||||||
'View' => 'xx',
|
|
||||||
'View has been dropped.' => 'xx',
|
|
||||||
'View has been altered.' => 'xx',
|
|
||||||
'View has been created.' => 'xx',
|
|
||||||
'Alter view' => 'xx',
|
|
||||||
'Create view' => 'xx',
|
|
||||||
|
|
||||||
'Indexes' => 'xx',
|
|
||||||
'Indexes have been altered.' => 'xx',
|
|
||||||
'Alter indexes' => 'xx',
|
|
||||||
'Add next' => 'xx',
|
|
||||||
'Index Type' => 'xx',
|
|
||||||
'Column (length)' => 'xx',
|
|
||||||
|
|
||||||
'Foreign keys' => 'xx',
|
|
||||||
'Foreign key' => 'xx',
|
|
||||||
'Foreign key has been dropped.' => 'xx',
|
|
||||||
'Foreign key has been altered.' => 'xx',
|
|
||||||
'Foreign key has been created.' => 'xx',
|
|
||||||
'Target table' => 'xx',
|
|
||||||
'Change' => 'xx',
|
|
||||||
'Source' => 'xx',
|
|
||||||
'Target' => 'xx',
|
|
||||||
'Add column' => 'xx',
|
|
||||||
'Alter' => 'xx',
|
|
||||||
'Add foreign key' => 'xx',
|
|
||||||
'ON DELETE' => 'xx',
|
|
||||||
'ON UPDATE' => 'xx',
|
|
||||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'xx',
|
|
||||||
|
|
||||||
'Triggers' => 'xx',
|
|
||||||
'Add trigger' => 'xx',
|
|
||||||
'Trigger has been dropped.' => 'xx',
|
|
||||||
'Trigger has been altered.' => 'xx',
|
|
||||||
'Trigger has been created.' => 'xx',
|
|
||||||
'Alter trigger' => 'xx',
|
|
||||||
'Create trigger' => 'xx',
|
|
||||||
'Time' => 'xx',
|
|
||||||
'Event' => 'xx',
|
|
||||||
'Name' => 'xx',
|
|
||||||
|
|
||||||
'select' => 'xx',
|
|
||||||
'Select' => 'xx',
|
|
||||||
'Select data' => 'xx',
|
|
||||||
'Functions' => 'xx',
|
|
||||||
'Aggregation' => 'xx',
|
|
||||||
'Search' => 'xx',
|
|
||||||
'anywhere' => 'xx',
|
|
||||||
'Search data in tables' => 'xx',
|
|
||||||
'Sort' => 'xx',
|
|
||||||
'descending' => 'xx',
|
|
||||||
'Limit' => 'xx',
|
|
||||||
'Text length' => 'xx',
|
|
||||||
'Action' => 'xx',
|
|
||||||
'Full table scan' => 'xx',
|
|
||||||
'Unable to select the table' => 'xx',
|
|
||||||
'No rows.' => 'xx',
|
|
||||||
'%d row(s)' => array('xx', 'xx'),
|
|
||||||
'Page' => 'xx',
|
|
||||||
'last' => 'xx',
|
|
||||||
'Load more data' => 'xx',
|
|
||||||
'Loading' => 'xx',
|
|
||||||
'whole result' => 'xx',
|
|
||||||
'%d byte(s)' => array('xx', 'xx'),
|
|
||||||
|
|
||||||
'Import' => 'xx',
|
|
||||||
'%d row(s) have been imported.' => array('xx', 'xx'),
|
|
||||||
|
|
||||||
// in-place editing in select
|
|
||||||
'Ctrl+click on a value to modify it.' => 'xx',
|
|
||||||
'Use edit link to modify this value.' => 'xx',
|
|
||||||
|
|
||||||
// %s can contain auto-increment value
|
|
||||||
'Item%s has been inserted.' => 'xx',
|
|
||||||
'Item has been deleted.' => 'xx',
|
|
||||||
'Item has been updated.' => 'xx',
|
|
||||||
'%d item(s) have been affected.' => array('xx', 'xx'),
|
|
||||||
'New item' => 'xx',
|
|
||||||
'original' => 'xx',
|
|
||||||
// label for value '' in enum data type
|
|
||||||
'empty' => 'xx',
|
|
||||||
'edit' => 'xx',
|
|
||||||
'Edit' => 'xx',
|
|
||||||
'Insert' => 'xx',
|
|
||||||
'Save' => 'xx',
|
|
||||||
'Save and continue edit' => 'xx',
|
|
||||||
'Save and insert next' => 'xx',
|
|
||||||
'Clone' => 'xx',
|
|
||||||
'Delete' => 'xx',
|
|
||||||
'You have no privileges to update this table.' => 'xx',
|
|
||||||
|
|
||||||
'E-mail' => 'xx',
|
|
||||||
'From' => 'xx',
|
|
||||||
'Subject' => 'xx',
|
|
||||||
'Attachments' => 'xx',
|
|
||||||
'Send' => 'xx',
|
|
||||||
'%d e-mail(s) have been sent.' => array('xx', 'xx'),
|
|
||||||
|
|
||||||
// data type descriptions
|
|
||||||
'Numbers' => 'xx',
|
|
||||||
'Date and time' => 'xx',
|
|
||||||
'Strings' => 'xx',
|
|
||||||
'Binary' => 'xx',
|
|
||||||
'Lists' => 'xx',
|
|
||||||
'Network' => 'xx',
|
|
||||||
'Geometry' => 'xx',
|
|
||||||
'Relations' => 'xx',
|
|
||||||
|
|
||||||
'Editor' => 'xx',
|
|
||||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
|
||||||
'$1-$3-$5' => 'xx',
|
|
||||||
// hint for date format - use language equivalents for day, month and year shortcuts
|
|
||||||
'[yyyy]-mm-dd' => 'xx',
|
|
||||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
|
||||||
'HH:MM:SS' => 'xx',
|
|
||||||
'now' => 'xx',
|
|
||||||
'yes' => 'xx',
|
|
||||||
'no' => 'xx',
|
|
||||||
|
|
||||||
// general SQLite error in create, drop or rename database
|
|
||||||
'File exists.' => 'xx',
|
|
||||||
'Please use one of the extensions %s.' => 'xx',
|
|
||||||
|
|
||||||
// PostgreSQL and MS SQL schema support
|
|
||||||
'Alter schema' => 'xx',
|
|
||||||
'Create schema' => 'xx',
|
|
||||||
'Schema has been dropped.' => 'xx',
|
|
||||||
'Schema has been created.' => 'xx',
|
|
||||||
'Schema has been altered.' => 'xx',
|
|
||||||
'schema' => 'xx',
|
|
||||||
'Schema' => 'xx',
|
|
||||||
'Invalid schema.' => 'xx',
|
|
||||||
|
|
||||||
// PostgreSQL sequences support
|
|
||||||
'Sequences' => 'xx',
|
|
||||||
'Create sequence' => 'xx',
|
|
||||||
'Sequence has been dropped.' => 'xx',
|
|
||||||
'Sequence has been created.' => 'xx',
|
|
||||||
'Sequence has been altered.' => 'xx',
|
|
||||||
'Alter sequence' => 'xx',
|
|
||||||
|
|
||||||
// PostgreSQL user types support
|
|
||||||
'User types' => 'xx',
|
|
||||||
'Create type' => 'xx',
|
|
||||||
'Type has been dropped.' => 'xx',
|
|
||||||
'Type has been created.' => 'xx',
|
|
||||||
'Alter type' => 'xx',
|
|
||||||
);
|
|
||||||
@@ -23,7 +23,7 @@ $translations = array(
|
|||||||
'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.' => '已更改資料庫。',
|
||||||
@@ -38,7 +38,7 @@ $translations = array(
|
|||||||
'select' => '選擇',
|
'select' => '選擇',
|
||||||
'Create new table' => '建立新資料表',
|
'Create new table' => '建立新資料表',
|
||||||
'Item has been updated.' => '已更新項目。',
|
'Item has been updated.' => '已更新項目。',
|
||||||
'Item%s has been inserted.' => '已插入項目%s。',
|
'Item has been inserted.' => '已插入項目。',
|
||||||
'Edit' => '編輯',
|
'Edit' => '編輯',
|
||||||
'Insert' => '插入',
|
'Insert' => '插入',
|
||||||
'Save and insert next' => '儲存並插入下一個',
|
'Save and insert next' => '儲存並插入下一個',
|
||||||
@@ -188,13 +188,14 @@ $translations = array(
|
|||||||
'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 and %s.' => '超過最多允許的字段數量。請增加%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' => '任意位置',
|
||||||
|
'CSV Import' => '匯入 CSV',
|
||||||
'Import' => '匯入',
|
'Import' => '匯入',
|
||||||
'Stop on error' => '出錯時停止',
|
'Stop on error' => '出錯時停止',
|
||||||
'%.3f s' => '%.3f秒',
|
'%.3f s' => '%.3f秒',
|
||||||
@@ -224,47 +225,4 @@ $translations = array(
|
|||||||
'%d in total' => '總共 %d 個',
|
'%d in total' => '總共 %d 個',
|
||||||
'Permanent login' => '永久登入',
|
'Permanent login' => '永久登入',
|
||||||
'Table has been dropped.' => '已經刪除資料表。',
|
'Table has been dropped.' => '已經刪除資料表。',
|
||||||
'Databases have been dropped.' => '資料庫已刪除。',
|
|
||||||
'Search data in tables' => '在資料庫搜尋',
|
|
||||||
'schema' => '資料表結構',
|
|
||||||
'Schema' => '資料表結構',
|
|
||||||
'Alter schema' => '更改資料表結構',
|
|
||||||
'Create schema' => '建立資料表結構',
|
|
||||||
'Schema has been dropped.' => '已刪除資料表結構。',
|
|
||||||
'Schema has been created.' => '已建立資料表結構。',
|
|
||||||
'Schema has been altered.' => '已更改資料表結構。',
|
|
||||||
'Sequences' => '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.' => '已建立類型。',
|
|
||||||
'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.' => '無效的資料表結構。',
|
|
||||||
'Please use one of the extensions %s.' => '請使用下列其中一個 extension %s。',
|
|
||||||
'now' => '現在',
|
|
||||||
'ltr' => 'ltr',
|
|
||||||
'Tables have been copied.' => '表格已經複製',
|
|
||||||
'Copy' => '複製',
|
|
||||||
'Permanent link' => '永久鏈接',
|
|
||||||
'Edit all' => '編輯全部',
|
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ $translations = array(
|
|||||||
'Create new table' => '创建新表',
|
'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 has been inserted.' => '已插入项目。',
|
||||||
'Edit' => '编辑',
|
'Edit' => '编辑',
|
||||||
'Insert' => '插入',
|
'Insert' => '插入',
|
||||||
'Save and insert next' => '保存并插入下一个',
|
'Save and insert next' => '保存并插入下一个',
|
||||||
@@ -62,7 +62,7 @@ $translations = array(
|
|||||||
'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' => '表',
|
||||||
@@ -78,7 +78,7 @@ $translations = array(
|
|||||||
'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)。',
|
||||||
@@ -190,13 +190,14 @@ $translations = array(
|
|||||||
'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 and %s.' => '超过最多允许的字段数量。请增加 %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' => '任意位置',
|
||||||
|
'CSV Import' => 'CSV 导入',
|
||||||
'Import' => '导入',
|
'Import' => '导入',
|
||||||
'Stop on error' => '出错时停止',
|
'Stop on error' => '出错时停止',
|
||||||
'%.3f s' => '%.3f 秒',
|
'%.3f s' => '%.3f 秒',
|
||||||
@@ -221,50 +222,7 @@ $translations = array(
|
|||||||
'Send' => '发送',
|
'Send' => '发送',
|
||||||
'%d e-mail(s) have been sent.' => '%d 封邮件已发送。',
|
'%d e-mail(s) have been sent.' => '%d 封邮件已发送。',
|
||||||
'Webserver file %s' => 'Web服务器文件 %s',
|
'Webserver file %s' => 'Web服务器文件 %s',
|
||||||
'File does not exist.' => '文件不存在。',
|
'File does not exist.' => '文件不存在',
|
||||||
'%d in total' => '共计 %d',
|
'%d in total' => '共计 %d',
|
||||||
'Permanent login' => '保持登录',
|
'Permanent login' => '保持登录',
|
||||||
'Databases have been dropped.' => '已丢弃数据库。',
|
|
||||||
'Search data in tables' => '在表中搜索数据',
|
|
||||||
'schema' => '模式',
|
|
||||||
'Schema' => '模式',
|
|
||||||
'Alter schema' => '更改模式',
|
|
||||||
'Create schema' => '创建模式',
|
|
||||||
'Schema has been dropped.' => '已丢弃模式。',
|
|
||||||
'Schema has been created.' => '已创建模式。',
|
|
||||||
'Schema has been altered.' => '已更改模式。',
|
|
||||||
'Sequences' => '序列',
|
|
||||||
'Create sequence' => '创建序列',
|
|
||||||
'Alter sequence' => '更改序列',
|
|
||||||
'Sequence has been dropped.' => '已丢弃序列。',
|
|
||||||
'Sequence has been created.' => '已创建序列。',
|
|
||||||
'Sequence has been altered.' => '已更改序列。',
|
|
||||||
'User types' => '用户类型',
|
|
||||||
'Create type' => '创建类型',
|
|
||||||
'Alter type' => '更改类型',
|
|
||||||
'Type has been dropped.' => '已丢弃类型。',
|
|
||||||
'Type has been created.' => '已创建类型。',
|
|
||||||
'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.' => '非法模式。',
|
|
||||||
'Please use one of the extensions %s.' => '请使用这些扩展中的一个:%s。',
|
|
||||||
'now' => '现在',
|
|
||||||
'ltr' => 'ltr',
|
|
||||||
'Tables have been copied.' => '表已复制。',
|
|
||||||
'Copy' => '复制',
|
|
||||||
'Permanent link' => '固定链接',
|
|
||||||
'Edit all' => '编辑全部',
|
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,42 +0,0 @@
|
|||||||
<?php
|
|
||||||
function adminer_object() {
|
|
||||||
// required to run any plugin
|
|
||||||
include_once "../plugins/plugin.php";
|
|
||||||
|
|
||||||
// autoloader
|
|
||||||
foreach (glob("../plugins/*.php") as $filename) {
|
|
||||||
include_once $filename;
|
|
||||||
}
|
|
||||||
|
|
||||||
$plugins = array(
|
|
||||||
// specify enabled plugins here
|
|
||||||
new AdminerDatabaseHide(array('information_schema')),
|
|
||||||
new AdminerDumpJson,
|
|
||||||
new AdminerDumpZip,
|
|
||||||
new AdminerDumpXml,
|
|
||||||
new AdminerDumpAlter,
|
|
||||||
//~ new AdminerSqlLog("past-" . rtrim(`git describe --tags --abbrev=0`) . ".sql"),
|
|
||||||
//~ new AdminerEditCalendar("<script type='text/javascript' src='../externals/jquery-ui/jquery-1.4.4.js'></script>\n<script type='text/javascript' src='../externals/jquery-ui/ui/jquery.ui.core.js'></script>\n<script type='text/javascript' src='../externals/jquery-ui/ui/jquery.ui.widget.js'></script>\n<script type='text/javascript' src='../externals/jquery-ui/ui/jquery.ui.datepicker.js'></script>\n<script type='text/javascript' src='../externals/jquery-ui/ui/jquery.ui.mouse.js'></script>\n<script type='text/javascript' src='../externals/jquery-ui/ui/jquery.ui.slider.js'></script>\n<script type='text/javascript' src='../externals/jquery-timepicker/jquery-ui-timepicker-addon.js'></script>\n<link rel='stylesheet' href='../externals/jquery-ui/themes/base/jquery.ui.all.css'>\n<style type='text/css'>\n.ui-timepicker-div .ui-widget-header { margin-bottom: 8px; }\n.ui-timepicker-div dl { text-align: left; }\n.ui-timepicker-div dl dt { height: 25px; }\n.ui-timepicker-div dl dd { margin: -25px 0 10px 65px; }\n.ui-timepicker-div td { font-size: 90%; }\n</style>\n", "../externals/jquery-ui/ui/i18n/jquery.ui.datepicker-%s.js"),
|
|
||||||
//~ new AdminerTinymce("../externals/tinymce/jscripts/tiny_mce/tiny_mce_dev.js"),
|
|
||||||
//~ new AdminerWymeditor(array("../externals/wymeditor/src/jquery/jquery.js", "../externals/wymeditor/src/wymeditor/jquery.wymeditor.js", "../externals/wymeditor/src/wymeditor/jquery.wymeditor.explorer.js", "../externals/wymeditor/src/wymeditor/jquery.wymeditor.mozilla.js", "../externals/wymeditor/src/wymeditor/jquery.wymeditor.opera.js", "../externals/wymeditor/src/wymeditor/jquery.wymeditor.safari.js")),
|
|
||||||
new AdminerFileUpload(""),
|
|
||||||
new AdminerJsonColumn,
|
|
||||||
new AdminerSlugify,
|
|
||||||
new AdminerTranslation,
|
|
||||||
new AdminerForeignSystem,
|
|
||||||
new AdminerEnumOption,
|
|
||||||
new AdminerTablesFilter,
|
|
||||||
new AdminerEditForeign,
|
|
||||||
);
|
|
||||||
|
|
||||||
/* It is possible to combine customization and plugins:
|
|
||||||
class AdminerCustomization extends AdminerPlugin {
|
|
||||||
}
|
|
||||||
return new AdminerCustomization($plugins);
|
|
||||||
*/
|
|
||||||
|
|
||||||
return new AdminerPlugin($plugins);
|
|
||||||
}
|
|
||||||
|
|
||||||
// include original Adminer or Adminer Editor (usually named adminer.php)
|
|
||||||
include "./index.php";
|
|
||||||
@@ -1,25 +1,25 @@
|
|||||||
<?php
|
<?php
|
||||||
page_header(lang('Privileges'));
|
page_header(lang('Privileges'));
|
||||||
|
|
||||||
$result = $connection->query("SELECT User, Host FROM mysql." . (DB == "" ? "user" : "db WHERE " . q(DB) . " LIKE Db") . " ORDER BY Host, User");
|
$result = $connection->query("SELECT User, Host FROM mysql.user ORDER BY Host, User");
|
||||||
$grant = $result;
|
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
|
?>
|
||||||
|
<form action=""><p>
|
||||||
|
<?php hidden_fields_get(); ?>
|
||||||
|
<?php echo lang('Username'); ?>: <input name="user">
|
||||||
|
<?php echo lang('Server'); ?>: <input name="host" value="localhost">
|
||||||
|
<input type="hidden" name="grant" value="">
|
||||||
|
<input type="submit" value="<?php echo lang('Edit'); ?>">
|
||||||
|
</form>
|
||||||
|
<?php
|
||||||
// list logged user, information_schema.USER_PRIVILEGES lists just the current user too
|
// list logged user, information_schema.USER_PRIVILEGES lists just the current user too
|
||||||
$result = $connection->query("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', 1) AS User, SUBSTRING_INDEX(CURRENT_USER, '@', -1) AS Host");
|
$result = $connection->query("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', 1) AS User, SUBSTRING_INDEX(CURRENT_USER, '@', -1) AS Host");
|
||||||
}
|
}
|
||||||
echo "<form action=''><p>\n";
|
|
||||||
hidden_fields_get();
|
|
||||||
echo "<input type='hidden' name='db' value='" . h(DB) . "'>\n";
|
|
||||||
echo ($grant ? "" : "<input type='hidden' name='grant' value=''>\n");
|
|
||||||
echo "<table cellspacing='0'>\n";
|
echo "<table cellspacing='0'>\n";
|
||||||
echo "<thead><tr><th>" . lang('Username') . "<th>" . lang('Server') . "<th> </thead>\n";
|
echo "<thead><tr><th> <th>" . lang('Username') . "<th>" . lang('Server') . "</thead>\n";
|
||||||
while ($row = $result->fetch_assoc()) {
|
while ($row = $result->fetch_assoc()) {
|
||||||
echo '<tr' . odd() . '><td>' . h($row["User"]) . "<td>" . h($row["Host"]) . '<td><a href="' . h(ME . 'user=' . urlencode($row["User"]) . '&host=' . urlencode($row["Host"])) . '">' . lang('Edit') . "</a>\n";
|
echo '<tr' . odd() . '><td><a href="' . h(ME . 'user=' . urlencode($row["User"]) . '&host=' . urlencode($row["Host"])) . '">' . lang('edit') . '</a><td>' . h($row["User"]) . "<td>" . h($row["Host"]) . "\n";
|
||||||
}
|
|
||||||
if (!$grant || DB != "") {
|
|
||||||
echo "<tr" . odd() . "><td><input name='user' autocapitalize='off'><td><input name='host' value='localhost' autocapitalize='off'><td><input type='submit' value='" . lang('Edit') . "'>\n";
|
|
||||||
}
|
}
|
||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
echo "</form>\n";
|
|
||||||
|
|
||||||
echo '<p><a href="' . h(ME) . 'user=">' . lang('Create user') . "</a>";
|
echo '<p><a href="' . h(ME) . 'user=">' . lang('Create user') . "</a>";
|
||||||
|
|||||||
@@ -1,37 +1,44 @@
|
|||||||
<?php
|
<?php
|
||||||
$PROCEDURE = $_GET["procedure"];
|
$PROCEDURE = $_GET["procedure"];
|
||||||
$routine = (isset($_GET["function"]) ? "FUNCTION" : "PROCEDURE");
|
$routine = (isset($_GET["function"]) ? "FUNCTION" : "PROCEDURE");
|
||||||
$routine_languages = routine_languages();
|
|
||||||
$row = ($PROCEDURE == "" ? array("fields" => array()) : routine($PROCEDURE, $routine));
|
|
||||||
$row["name"] = $PROCEDURE;
|
|
||||||
|
|
||||||
if ($_POST) {
|
$dropped = false;
|
||||||
if (!$error && !$_POST["add"] && !$_POST["drop_col"] && !$_POST["up"] && !$_POST["down"]) {
|
if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"] && !$_POST["up"] && !$_POST["down"]) {
|
||||||
drop_create(
|
$set = array();
|
||||||
"DROP $routine " . idf_escape($PROCEDURE),
|
$fields = (array) $_POST["fields"];
|
||||||
create_routine($routine, $_POST),
|
ksort($fields); // enforce fields order
|
||||||
create_routine($routine, $row),
|
foreach ($fields as $field) {
|
||||||
substr(ME, 0, -1),
|
if ($field["field"] != "") {
|
||||||
lang('Routine has been dropped.'),
|
$set[] = (in_array($field["inout"], $inout) ? "$field[inout] " : "") . idf_escape($field["field"]) . process_type($field, "CHARACTER SET");
|
||||||
lang('Routine has been altered.'),
|
}
|
||||||
lang('Routine has been created.'),
|
|
||||||
$PROCEDURE
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
$row = $_POST;
|
$dropped = drop_create(
|
||||||
$row["fields"] = (array) $row["fields"];
|
"DROP $routine " . idf_escape($PROCEDURE),
|
||||||
process_fields($row["fields"]);
|
"CREATE $routine " . idf_escape($_POST["name"]) . " (" . implode(", ", $set) . ")" . (isset($_GET["function"]) ? " RETURNS" . process_type($_POST["returns"], "CHARACTER SET") : "") . "\n$_POST[definition]",
|
||||||
|
substr(ME, 0, -1),
|
||||||
|
lang('Routine has been dropped.'),
|
||||||
|
lang('Routine has been altered.'),
|
||||||
|
lang('Routine has been created.'),
|
||||||
|
$PROCEDURE
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
page_header(($PROCEDURE != "" ? (isset($_GET["function"]) ? lang('Alter function') : lang('Alter procedure')) . ": " . h($PROCEDURE) : (isset($_GET["function"]) ? lang('Create function') : lang('Create procedure'))), $error);
|
page_header(($PROCEDURE != "" ? (isset($_GET["function"]) ? lang('Alter function') : lang('Alter procedure')) . ": " . h($PROCEDURE) : (isset($_GET["function"]) ? lang('Create function') : lang('Create procedure'))), $error);
|
||||||
|
|
||||||
$collations = get_vals("SHOW CHARACTER SET");
|
$collations = get_vals("SHOW CHARACTER SET");
|
||||||
sort($collations);
|
sort($collations);
|
||||||
|
$row = array("fields" => array());
|
||||||
|
if ($_POST) {
|
||||||
|
$row = $_POST;
|
||||||
|
$row["fields"] = (array) $row["fields"];
|
||||||
|
process_fields($row["fields"]);
|
||||||
|
} elseif ($PROCEDURE != "") {
|
||||||
|
$row = routine($PROCEDURE, $routine);
|
||||||
|
$row["name"] = $PROCEDURE;
|
||||||
|
}
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<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">
|
|
||||||
<?php echo ($routine_languages ? lang('Language') . ": " . html_select("language", $routine_languages, $row["language"]) : ""); ?>
|
|
||||||
<table cellspacing="0" class="nowrap">
|
<table cellspacing="0" class="nowrap">
|
||||||
<?php
|
<?php
|
||||||
edit_fields($row["fields"], $collations, $routine);
|
edit_fields($row["fields"], $collations, $routine);
|
||||||
@@ -43,7 +50,9 @@ if (isset($_GET["function"])) {
|
|||||||
</table>
|
</table>
|
||||||
<p><?php textarea("definition", $row["definition"]); ?>
|
<p><?php textarea("definition", $row["definition"]); ?>
|
||||||
<p>
|
<p>
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
|
||||||
<?php if ($PROCEDURE != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo confirm(); ?>><?php } ?>
|
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
|
<?php if ($dropped) { ?><input type="hidden" name="dropped" value="1"><?php } ?>
|
||||||
|
<?php echo lang('Name'); ?>: <input name="name" value="<?php echo h($row["name"]); ?>" maxlength="64">
|
||||||
|
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||||
|
<?php if ($PROCEDURE != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo $confirm; ?>><?php } ?>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
if (support("kill") && $_POST && !$error) {
|
if ($_POST && !$error) {
|
||||||
$killed = 0;
|
$killed = 0;
|
||||||
foreach ((array) $_POST["kill"] as $val) {
|
foreach ((array) $_POST["kill"] as $val) {
|
||||||
if (queries("KILL " . (+$val))) {
|
if (queries("KILL " . ereg_replace("[^0-9]+", "", $val))) {
|
||||||
$killed++;
|
$killed++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -13,42 +13,18 @@ page_header(lang('Process list'), $error);
|
|||||||
?>
|
?>
|
||||||
|
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
<table cellspacing="0" onclick="tableClick(event);" ondblclick="tableClick(event, true);" class="nowrap checkable">
|
<table cellspacing="0" onclick="tableClick(event);">
|
||||||
<?php
|
<?php
|
||||||
// HTML valid because there is always at least one process
|
$result = $connection->query("SHOW PROCESSLIST");
|
||||||
$i = -1;
|
for ($i=0; $row = $result->fetch_assoc(); $i++) {
|
||||||
foreach (process_list() as $i => $row) {
|
|
||||||
if (!$i) {
|
if (!$i) {
|
||||||
echo "<thead><tr lang='en'>" . (support("kill") ? "<th> " : "");
|
echo "<thead><tr lang='en'><th> <th>" . implode("<th>", array_keys($row)) . "</thead>\n";
|
||||||
foreach ($row as $key => $val) {
|
|
||||||
echo "<th>" . ($jush == "sql"
|
|
||||||
? "<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>"
|
|
||||||
: $key
|
|
||||||
);
|
|
||||||
}
|
|
||||||
echo "</thead>\n";
|
|
||||||
}
|
}
|
||||||
echo "<tr" . odd() . ">" . (support("kill") ? "<td>" . checkbox("kill[]", $row["Id"], 0) : "");
|
echo "<tr" . odd() . "><td>" . checkbox("kill[]", $row["Id"], 0) . "<td>" . implode("<td>", array_map('nbsp', $row)) . "\n";
|
||||||
foreach ($row as $key => $val) {
|
|
||||||
echo "<td>" . (
|
|
||||||
($jush == "sql" && $key == "Info" && ereg("Query|Killed", $row["Command"]) && $val != "") ||
|
|
||||||
($jush == "pgsql" && $key == "current_query" && $val != "<IDLE>") ||
|
|
||||||
($jush == "oracle" && $key == "sql_text" && $val != "")
|
|
||||||
? "<code class='jush-$jush'>" . shorten_utf8($val, 100, "</code>") . ' <a href="' . h(ME . ($row["db"] != "" ? "db=" . urlencode($row["db"]) . "&" : "") . "sql=" . urlencode($val)) . '">' . lang('Clone') . '</a>'
|
|
||||||
: nbsp($val)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
echo "\n";
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
</table>
|
</table>
|
||||||
<script type='text/javascript'>tableCheck();</script>
|
|
||||||
<p>
|
<p>
|
||||||
<?php
|
|
||||||
if (support("kill")) {
|
|
||||||
echo ($i + 1) . "/" . lang('%d in total', $connection->result("SELECT @@max_connections"));
|
|
||||||
echo "<p><input type='submit' value='" . lang('Kill') . "'>\n";
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
|
<input type="submit" value="<?php echo lang('Kill'); ?>">
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -1,14 +1,13 @@
|
|||||||
<?php
|
<?php
|
||||||
page_header(lang('Database schema'), "", array(), DB . ($_GET["ns"] ? ".$_GET[ns]" : ""));
|
page_header(lang('Database schema'), "", array(), DB);
|
||||||
|
|
||||||
$table_pos = array();
|
$table_pos = array();
|
||||||
$table_pos_js = array();
|
$table_pos_js = array();
|
||||||
$name = "adminer_schema";
|
// saved in one cookie because there is a limit of 20 cookies per domain
|
||||||
$SCHEMA = ($_GET["schema"] ? $_GET["schema"] : $_COOKIE[($_COOKIE["$name-" . DB] ? "$name-" . DB : $name)]); // $_COOKIE["adminer_schema"] was used before 3.2.0 //! ':' in table name
|
preg_match_all('~([^:]+):([-0-9.]+)x([-0-9.]+)(_|$)~', $_COOKIE["adminer_schema"], $matches, PREG_SET_ORDER); //! ':' in table name
|
||||||
preg_match_all('~([^:]+):([-0-9.]+)x([-0-9.]+)(_|$)~', $SCHEMA, $matches, PREG_SET_ORDER);
|
|
||||||
foreach ($matches as $i => $match) {
|
foreach ($matches as $i => $match) {
|
||||||
$table_pos[$match[1]] = array($match[2], $match[3]);
|
$table_pos[$match[1]] = array($match[2], $match[3]);
|
||||||
$table_pos_js[] = "\n\t'" . js_escape($match[1]) . "': [ $match[2], $match[3] ]";
|
$table_pos_js[] = "\n\t'" . addcslashes($match[1], "\r\n'\\/") . "': [ $match[2], $match[3] ]";
|
||||||
}
|
}
|
||||||
|
|
||||||
$top = 0;
|
$top = 0;
|
||||||
@@ -16,62 +15,62 @@ $base_left = -1;
|
|||||||
$schema = array(); // table => array("fields" => array(name => field), "pos" => array(top, left), "references" => array(table => array(left => array(source, target))))
|
$schema = array(); // table => array("fields" => array(name => field), "pos" => array(top, left), "references" => array(table => array(left => array(source, target))))
|
||||||
$referenced = array(); // target_table => array(table => array(left => target_column))
|
$referenced = array(); // target_table => array(table => array(left => target_column))
|
||||||
$lefts = array(); // float => bool
|
$lefts = array(); // float => bool
|
||||||
foreach (table_status() as $table_status) {
|
foreach (table_status() as $row) {
|
||||||
if (!isset($table_status["Engine"])) { // view
|
if (!isset($row["Engine"])) { // view
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$pos = 0;
|
$pos = 0;
|
||||||
$schema[$table_status["Name"]]["fields"] = array();
|
$schema[$row["Name"]]["fields"] = array();
|
||||||
foreach (fields($table_status["Name"]) as $name => $field) {
|
foreach (fields($row["Name"]) as $name => $field) {
|
||||||
$pos += 1.25;
|
$pos += 1.25;
|
||||||
$field["pos"] = $pos;
|
$field["pos"] = $pos;
|
||||||
$schema[$table_status["Name"]]["fields"][$name] = $field;
|
$schema[$row["Name"]]["fields"][$name] = $field;
|
||||||
}
|
}
|
||||||
$schema[$table_status["Name"]]["pos"] = ($table_pos[$table_status["Name"]] ? $table_pos[$table_status["Name"]] : array($top, 0));
|
$schema[$row["Name"]]["pos"] = ($table_pos[$row["Name"]] ? $table_pos[$row["Name"]] : array($top, 0));
|
||||||
foreach ($adminer->foreignKeys($table_status["Name"]) as $val) {
|
if (fk_support($row)) {
|
||||||
if (!$val["db"]) {
|
foreach (foreign_keys($row["Name"]) as $val) {
|
||||||
$left = $base_left;
|
if (!$val["db"]) {
|
||||||
if ($table_pos[$table_status["Name"]][1] || $table_pos[$val["table"]][1]) {
|
$left = $base_left;
|
||||||
$left = min(floatval($table_pos[$table_status["Name"]][1]), floatval($table_pos[$val["table"]][1])) - 1;
|
if ($table_pos[$row["Name"]][1] || $table_pos[$val["table"]][1]) {
|
||||||
} else {
|
$left = min(floatval($table_pos[$row["Name"]][1]), floatval($table_pos[$val["table"]][1])) - 1;
|
||||||
$base_left -= .1;
|
} else {
|
||||||
|
$base_left -= .1;
|
||||||
|
}
|
||||||
|
while ($lefts[(string) $left]) {
|
||||||
|
// find free $left
|
||||||
|
$left -= .0001;
|
||||||
|
}
|
||||||
|
$schema[$row["Name"]]["references"][$val["table"]][(string) $left] = array($val["source"], $val["target"]);
|
||||||
|
$referenced[$val["table"]][$row["Name"]][(string) $left] = $val["target"];
|
||||||
|
$lefts[(string) $left] = true;
|
||||||
}
|
}
|
||||||
while ($lefts[(string) $left]) {
|
|
||||||
// find free $left
|
|
||||||
$left -= .0001;
|
|
||||||
}
|
|
||||||
$schema[$table_status["Name"]]["references"][$val["table"]][(string) $left] = array($val["source"], $val["target"]);
|
|
||||||
$referenced[$val["table"]][$table_status["Name"]][(string) $left] = $val["target"];
|
|
||||||
$lefts[(string) $left] = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$top = max($top, $schema[$table_status["Name"]]["pos"][0] + 2.5 + $pos);
|
$top = max($top, $schema[$row["Name"]]["pos"][0] + 2.5 + $pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
<div id="schema" style="height: <?php echo $top; ?>em;" onselectstart="return false;">
|
<div id="schema" style="height: <?php echo $top; ?>em;">
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var tablePos = {<?php echo implode(",", $table_pos_js) . "\n"; ?>};
|
tablePos = {<?php echo implode(",", $table_pos_js) . "\n"; ?>};
|
||||||
var em = document.getElementById('schema').offsetHeight / <?php echo $top; ?>;
|
em = document.getElementById('schema').offsetHeight / <?php echo $top; ?>;
|
||||||
document.onmousemove = schemaMousemove;
|
document.onmousemove = schemaMousemove;
|
||||||
document.onmouseup = function (ev) {
|
document.onmouseup = schemaMouseup;
|
||||||
schemaMouseup(ev, '<?php echo js_escape(DB); ?>');
|
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
<?php
|
<?php
|
||||||
foreach ($schema as $name => $table) {
|
foreach ($schema as $name => $table) {
|
||||||
echo "<div class='table' style='top: " . $table["pos"][0] . "em; left: " . $table["pos"][1] . "em;' onmousedown='schemaMousedown(this, event);'>";
|
echo "<div class='table' style='top: " . $table["pos"][0] . "em; left: " . $table["pos"][1] . "em;' onmousedown='schemaMousedown(this, event);'>";
|
||||||
echo '<a href="' . h(ME) . 'table=' . urlencode($name) . '"><b>' . h($name) . "</b></a>";
|
echo '<a href="' . h(ME) . 'table=' . urlencode($name) . '"><strong>' . h($name) . "</strong></a><br>\n";
|
||||||
foreach ($table["fields"] as $field) {
|
foreach ($table["fields"] as $field) {
|
||||||
$val = '<span' . type_class($field["type"]) . ' title="' . h($field["full_type"] . ($field["null"] ? " NULL" : '')) . '">' . h($field["field"]) . '</span>';
|
$val = '<span' . type_class($field["type"]) . ' title="' . h($field["full_type"] . ($field["null"] ? " NULL" : '')) . '">' . h($field["field"]) . '</span>';
|
||||||
echo "<br>" . ($field["primary"] ? "<i>$val</i>" : $val);
|
echo ($field["primary"] ? "<em>$val</em>" : $val) . "<br>\n";
|
||||||
}
|
}
|
||||||
foreach ((array) $table["references"] as $target_name => $refs) {
|
foreach ((array) $table["references"] as $target_name => $refs) {
|
||||||
foreach ($refs as $left => $ref) {
|
foreach ($refs as $left => $ref) {
|
||||||
$left1 = $left - $table_pos[$name][1];
|
$left1 = $left - $table_pos[$name][1];
|
||||||
$i = 0;
|
$i = 0;
|
||||||
foreach ($ref[0] as $source) {
|
foreach ($ref[0] as $source) {
|
||||||
echo "\n<div class='references' title='" . h($target_name) . "' id='refs$left-" . ($i++) . "' style='left: $left1" . "em; top: " . $table["fields"][$source]["pos"] . "em; padding-top: .5em;'><div style='border-top: 1px solid Gray; width: " . (-$left1) . "em;'></div></div>";
|
echo "<div class='references' title='" . h($target_name) . "' id='refs$left-" . ($i++) . "' style='left: $left1" . "em; top: " . $table["fields"][$source]["pos"] . "em; padding-top: .5em;'><div style='border-top: 1px solid Gray; width: " . (-$left1) . "em;'></div></div>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -80,11 +79,11 @@ foreach ($schema as $name => $table) {
|
|||||||
$left1 = $left - $table_pos[$name][1];
|
$left1 = $left - $table_pos[$name][1];
|
||||||
$i = 0;
|
$i = 0;
|
||||||
foreach ($columns as $target) {
|
foreach ($columns as $target) {
|
||||||
echo "\n<div class='references' title='" . h($target_name) . "' id='refd$left-" . ($i++) . "' style='left: $left1" . "em; top: " . $table["fields"][$target]["pos"] . "em; height: 1.25em; background: url(../adminer/static/arrow.gif) no-repeat right center;'><div style='height: .5em; border-bottom: 1px solid Gray; width: " . (-$left1) . "em;'></div></div>";
|
echo "<div class='references' title='" . h($target_name) . "' id='refd$left-" . ($i++) . "' style='left: $left1" . "em; top: " . $table["fields"][$target]["pos"] . "em; height: 1.25em; background: url(../adminer/static/arrow.gif) no-repeat right center;'><div style='height: .5em; border-bottom: 1px solid Gray; width: " . (-$left1) . "em;'></div></div>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
echo "\n</div>\n";
|
echo "</div>\n";
|
||||||
}
|
}
|
||||||
foreach ($schema as $name => $table) {
|
foreach ($schema as $name => $table) {
|
||||||
foreach ((array) $table["references"] as $target_name => $refs) {
|
foreach ((array) $table["references"] as $target_name => $refs) {
|
||||||
@@ -103,4 +102,3 @@ foreach ($schema as $name => $table) {
|
|||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
</div>
|
</div>
|
||||||
<p><a href="<?php echo h(ME . "schema=" . urlencode($SCHEMA)); ?>" id="schema-link"><?php echo lang('Permanent link'); ?></a>
|
|
||||||
|
|||||||
@@ -4,12 +4,11 @@ if ($_POST && !$error) {
|
|||||||
if ($_POST["drop"]) {
|
if ($_POST["drop"]) {
|
||||||
query_redirect("DROP SCHEMA " . idf_escape($_GET["ns"]), $link, lang('Schema has been dropped.'));
|
query_redirect("DROP SCHEMA " . idf_escape($_GET["ns"]), $link, lang('Schema has been dropped.'));
|
||||||
} else {
|
} else {
|
||||||
$name = trim($_POST["name"]);
|
$link .= urlencode($_POST["name"]);
|
||||||
$link .= urlencode($name);
|
|
||||||
if ($_GET["ns"] == "") {
|
if ($_GET["ns"] == "") {
|
||||||
query_redirect("CREATE SCHEMA " . idf_escape($name), $link, lang('Schema has been created.'));
|
query_redirect("CREATE SCHEMA " . idf_escape($_POST["name"]), $link, lang('Schema has been created.'));
|
||||||
} elseif ($_GET["ns"] != $name) {
|
} elseif ($_GET["ns"] != $_POST["name"]) {
|
||||||
query_redirect("ALTER SCHEMA " . idf_escape($_GET["ns"]) . " RENAME TO " . idf_escape($name), $link, lang('Schema has been altered.')); //! sp_rename in MS SQL
|
query_redirect("ALTER SCHEMA " . idf_escape($_GET["ns"]) . " RENAME TO " . idf_escape($_POST["name"]), $link, lang('Schema has been altered.')); //! sp_rename in MS SQL
|
||||||
} else {
|
} else {
|
||||||
redirect($link);
|
redirect($link);
|
||||||
}
|
}
|
||||||
@@ -18,20 +17,19 @@ if ($_POST && !$error) {
|
|||||||
|
|
||||||
page_header($_GET["ns"] != "" ? lang('Alter schema') : lang('Create schema'), $error);
|
page_header($_GET["ns"] != "" ? lang('Alter schema') : lang('Create schema'), $error);
|
||||||
|
|
||||||
$row = $_POST;
|
$row = array("name" => $_GET["ns"]);
|
||||||
if (!$row) {
|
if ($_POST) {
|
||||||
$row = array("name" => $_GET["ns"]);
|
$row = $_POST;
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
<p><input name="name" id="name" value="<?php echo h($row["name"]); ?>" autocapitalize="off">
|
<p><input name="name" value="<?php echo h($row["name"]); ?>">
|
||||||
<script type='text/javascript'>document.getElementById('name').focus();</script>
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||||
<?php
|
<?php
|
||||||
if ($_GET["ns"] != "") {
|
if ($_GET["ns"] != "") {
|
||||||
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm() . ">\n";
|
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'$confirm>\n";
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -1,45 +0,0 @@
|
|||||||
<?php
|
|
||||||
header("Content-Type: text/javascript; charset=utf-8");
|
|
||||||
|
|
||||||
if ($_GET["script"] == "db") {
|
|
||||||
$sums = array("Data_length" => 0, "Index_length" => 0, "Data_free" => 0);
|
|
||||||
foreach (table_status() as $table_status) {
|
|
||||||
$id = js_escape($table_status["Name"]);
|
|
||||||
json_row("Comment-$id", nbsp($table_status["Comment"]));
|
|
||||||
if (!is_view($table_status)) {
|
|
||||||
foreach (array("Engine", "Collation") as $key) {
|
|
||||||
json_row("$key-$id", nbsp($table_status[$key]));
|
|
||||||
}
|
|
||||||
foreach ($sums + array("Auto_increment" => 0, "Rows" => 0) as $key => $val) {
|
|
||||||
if ($table_status[$key] != "") {
|
|
||||||
$val = number_format($table_status[$key], 0, '.', lang(','));
|
|
||||||
json_row("$key-$id", ($key == "Rows" && $val && $table_status["Engine"] == ($sql == "pgsql" ? "table" : "InnoDB")
|
|
||||||
? "~ $val"
|
|
||||||
: $val
|
|
||||||
));
|
|
||||||
if (isset($sums[$key])) {
|
|
||||||
// ignore innodb_file_per_table because it is not active for tables created before it was enabled
|
|
||||||
$sums[$key] += ($table_status["Engine"] != "InnoDB" || $key != "Data_free" ? $table_status[$key] : 0);
|
|
||||||
}
|
|
||||||
} elseif (array_key_exists($key, $table_status)) {
|
|
||||||
json_row("$key-$id");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
foreach ($sums as $key => $val) {
|
|
||||||
json_row("sum-$key", number_format($val, 0, '.', lang(',')));
|
|
||||||
}
|
|
||||||
json_row("");
|
|
||||||
|
|
||||||
} elseif ($_GET["script"] == "kill") {
|
|
||||||
$connection->query("KILL " . (+$_POST["kill"]));
|
|
||||||
|
|
||||||
} else { // connect
|
|
||||||
foreach (count_tables($adminer->databases()) as $db => $val) {
|
|
||||||
json_row("tables-" . js_escape($db), $val);
|
|
||||||
}
|
|
||||||
json_row("");
|
|
||||||
}
|
|
||||||
|
|
||||||
exit; // don't print footer
|
|
||||||
@@ -4,12 +4,6 @@ $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 = "";
|
|
||||||
if ($table_status["Oid"] == "t") {
|
|
||||||
$oid = ($jush == "sqlite" ? "rowid" : "oid");
|
|
||||||
$indexes[] = array("type" => "PRIMARY", "columns" => array($oid));
|
|
||||||
}
|
|
||||||
parse_str($_COOKIE["adminer_import"], $adminer_import);
|
|
||||||
|
|
||||||
$rights = array(); // privilege => 0
|
$rights = array(); // privilege => 0
|
||||||
$columns = array(); // selectable columns
|
$columns = array(); // selectable columns
|
||||||
@@ -18,7 +12,7 @@ foreach ($fields as $key => $field) {
|
|||||||
$name = $adminer->fieldName($field);
|
$name = $adminer->fieldName($field);
|
||||||
if (isset($field["privileges"]["select"]) && $name != "") {
|
if (isset($field["privileges"]["select"]) && $name != "") {
|
||||||
$columns[$key] = html_entity_decode(strip_tags($name));
|
$columns[$key] = html_entity_decode(strip_tags($name));
|
||||||
if (is_shortable($field)) {
|
if (ereg('text|blob', $field["type"])) {
|
||||||
$text_length = $adminer->selectLengthProcess();
|
$text_length = $adminer->selectLengthProcess();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -26,68 +20,48 @@ foreach ($fields as $key => $field) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
list($select, $group) = $adminer->selectColumnsProcess($columns, $indexes);
|
list($select, $group) = $adminer->selectColumnsProcess($columns, $indexes);
|
||||||
$is_group = count($group) < count($select);
|
|
||||||
$where = $adminer->selectSearchProcess($fields, $indexes);
|
$where = $adminer->selectSearchProcess($fields, $indexes);
|
||||||
$order = $adminer->selectOrderProcess($fields, $indexes);
|
$order = $adminer->selectOrderProcess($fields, $indexes);
|
||||||
$limit = $adminer->selectLimitProcess();
|
$limit = $adminer->selectLimitProcess();
|
||||||
$from = ($select ? implode(", ", $select) : "*" . ($oid ? ", $oid" : ""));
|
$from = ($select ? implode(", ", $select) : "*") . "\nFROM " . table($TABLE);
|
||||||
if ($jush == "sql") {
|
$group_by = ($group && count($group) < count($select) ? "\nGROUP BY " . implode(", ", $group) : "") . ($order ? "\nORDER BY " . implode(", ", $order) : "");
|
||||||
foreach ($columns as $key => $val) {
|
|
||||||
if ($select && !$select[$key]) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$as = convert_field($fields[$key]);
|
|
||||||
if ($as) {
|
|
||||||
$from .= ", $as AS " . idf_escape($key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$from .= "\nFROM " . table($TABLE);
|
|
||||||
$group_by = ($group && $is_group ? "\nGROUP BY " . implode(", ", $group) : "") . ($order ? "\nORDER BY " . implode(", ", $order) : "");
|
|
||||||
|
|
||||||
if ($_GET["val"] && is_ajax()) {
|
|
||||||
header("Content-Type: text/plain; charset=utf-8");
|
|
||||||
foreach ($_GET["val"] as $unique_idf => $row) {
|
|
||||||
$as = convert_field($fields[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));
|
|
||||||
}
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($_POST && !$error) {
|
if ($_POST && !$error) {
|
||||||
$where_check = "(" . implode(") OR (", array_map('where_check', (array) $_POST["check"])) . ")";
|
$where_check = "(" . implode(") OR (", array_map('where_check', (array) $_POST["check"])) . ")";
|
||||||
$primary = $unselected = null;
|
$primary = ($indexes["PRIMARY"] ? ($select ? array_flip($indexes["PRIMARY"]["columns"]) : array()) : null); // empty array means that all primary fields are selected
|
||||||
foreach ($indexes as $index) {
|
foreach ($select as $key => $val) {
|
||||||
if ($index["type"] == "PRIMARY") {
|
$val = $_GET["columns"][$key];
|
||||||
$primary = array_flip($index["columns"]);
|
if (!$val["fun"]) {
|
||||||
$unselected = ($select ? $primary : array());
|
unset($primary[$val["col"]]);
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
foreach ((array) $unselected as $key => $val) {
|
|
||||||
if (in_array(idf_escape($key), $select)) {
|
|
||||||
unset($unselected[$key]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($_POST["export"]) {
|
if ($_POST["export"]) {
|
||||||
cookie("adminer_import", "output=" . urlencode($_POST["output"]) . "&format=" . urlencode($_POST["format"]));
|
|
||||||
dump_headers($TABLE);
|
dump_headers($TABLE);
|
||||||
$adminer->dumpTable($TABLE, "");
|
dump_table($TABLE, "");
|
||||||
if (!is_array($_POST["check"]) || $unselected === array()) {
|
if ($_POST["format"] != "sql") { // Editor doesn't send format
|
||||||
|
$row = array_keys($fields);
|
||||||
|
if ($select) {
|
||||||
|
$row = array();
|
||||||
|
foreach ($select as $val) {
|
||||||
|
$row[] = (ereg('^`.*`$', $val) ? idf_unescape($val) : $val); //! columns looking like functions
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dump_csv($row);
|
||||||
|
}
|
||||||
|
if (!is_array($_POST["check"]) || $primary === array()) {
|
||||||
$where2 = $where;
|
$where2 = $where;
|
||||||
if (is_array($_POST["check"])) {
|
if (is_array($_POST["check"])) {
|
||||||
$where2[] = "($where_check)";
|
$where2[] = "($where_check)";
|
||||||
}
|
}
|
||||||
$query = "SELECT $from" . ($where2 ? "\nWHERE " . implode(" AND ", $where2) : "") . $group_by;
|
dump_data($TABLE, "INSERT", "SELECT $from" . ($where2 ? "\nWHERE " . implode(" AND ", $where2) : "") . $group_by);
|
||||||
} else {
|
} else {
|
||||||
$union = array();
|
$union = array();
|
||||||
foreach ($_POST["check"] as $val) {
|
foreach ($_POST["check"] as $val) {
|
||||||
// where is not unique so OR can't be used
|
// where is not unique so OR can't be used
|
||||||
$union[] = "(SELECT" . limit($from, "\nWHERE " . ($where ? implode(" AND ", $where) . " AND " : "") . where_check($val, $fields) . $group_by, 1) . ")";
|
$union[] = "(SELECT" . limit($from, "\nWHERE " . ($where ? implode(" AND ", $where) . " AND " : "") . where_check($val) . $group_by, 1) . ")";
|
||||||
}
|
}
|
||||||
$query = implode(" UNION ALL ", $union);
|
dump_data($TABLE, "INSERT", implode(" UNION ALL ", $union));
|
||||||
}
|
}
|
||||||
$adminer->dumpData($TABLE, "table", $query);
|
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
if (!$adminer->selectEmailProcess($where, $foreign_keys)) {
|
if (!$adminer->selectEmailProcess($where, $foreign_keys)) {
|
||||||
@@ -119,13 +93,13 @@ if ($_POST && !$error) {
|
|||||||
$command = "INSERT";
|
$command = "INSERT";
|
||||||
$query = "INTO $query";
|
$query = "INTO $query";
|
||||||
}
|
}
|
||||||
if ($_POST["all"] || ($unselected === array() && $_POST["check"]) || $is_group) {
|
if ($_POST["all"] || ($primary === array() && $_POST["check"]) || count($group) < count($select)) {
|
||||||
$result = queries("$command $query" . ($_POST["all"] ? ($where ? "\nWHERE " . implode(" AND ", $where) : "") : "\nWHERE $where_check"));
|
$result = queries($command . " $query" . ($_POST["all"] ? ($where ? "\nWHERE " . implode(" AND ", $where) : "") : "\nWHERE $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
|
||||||
$result = queries($command . limit1($query, "\nWHERE " . where_check($val, $fields)));
|
$result = queries($command . limit1($query, "\nWHERE " . where_check($val)));
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -133,18 +107,11 @@ if ($_POST && !$error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$message = lang('%d item(s) have been affected.', $affected);
|
queries_redirect(remove_from_uri("page"), lang('%d item(s) have been affected.', $affected), $result);
|
||||||
if ($_POST["clone"] && $result && $affected == 1) {
|
|
||||||
$last_id = last_id();
|
|
||||||
if ($last_id) {
|
|
||||||
$message = lang('Item%s has been inserted.', " $last_id");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
queries_redirect(remove_from_uri($_POST["all"] && $_POST["delete"] ? "page" : ""), $message, $result);
|
|
||||||
//! display edit page in case of an error
|
//! display edit page in case of an error
|
||||||
} elseif (!$_POST["import"]) { // modify
|
} elseif (!$_POST["import"]) { // modify
|
||||||
if (!$_POST["val"]) {
|
if (!$_POST["val"]) {
|
||||||
$error = lang('Ctrl+click on a value to modify it.');
|
$error = lang('Double click on a value to modify it.');
|
||||||
} else {
|
} else {
|
||||||
$result = true;
|
$result = true;
|
||||||
$affected = 0;
|
$affected = 0;
|
||||||
@@ -152,11 +119,9 @@ 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) . " = " . (ereg('char|text', $fields[$key]["type"]) || $val != "" ? $adminer->processInput($fields[$key], $val) : "NULL");
|
$set[] = idf_escape($key) . " = " . $adminer->processInput($fields[$key], $val);
|
||||||
}
|
}
|
||||||
$query = table($TABLE) . " SET " . implode(", ", $set);
|
$result = queries("UPDATE" . limit1(table($TABLE) . " SET " . implode(", ", $set), " WHERE " . where_check($unique_idf) . ($where ? " AND " . implode(" AND ", $where) : ""))); // can change row on a different page without unique key
|
||||||
$where2 = " WHERE " . where_check($unique_idf, $fields) . ($where ? " AND " . implode(" AND ", $where) : "");
|
|
||||||
$result = queries("UPDATE" . ($is_group ? " $query$where2" : limit1($query, $where2))); // can change row on a different page without unique key
|
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -165,26 +130,26 @@ 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))) {
|
||||||
//! character set
|
$file = preg_replace("~^\xEF\xBB\xBF~", '', $file); //! character set
|
||||||
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]);
|
||||||
begin();
|
begin();
|
||||||
$separator = ($_POST["separator"] == "csv" ? "," : ($_POST["separator"] == "tsv" ? "\t" : ";"));
|
$separator = ($_POST["separator"] == "csv" ? "," : ";");
|
||||||
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
|
||||||
// first row corresponds to column names - use it for table structure
|
// first row corresponds to column names - use it for table structure
|
||||||
$cols = $matches2[1];
|
$cols = $matches2[1];
|
||||||
$affected--;
|
$affected--;
|
||||||
} else {
|
} else {
|
||||||
$set = array();
|
$set = "";
|
||||||
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" : $connection->quote(str_replace('""', '"', preg_replace('~^"|"$~', '', $col))));
|
||||||
}
|
}
|
||||||
$result = insert_update($TABLE, $set, $primary);
|
$set = substr($set, 1);
|
||||||
|
$result = queries("INSERT INTO " . table($TABLE) . " SET$set ON DUPLICATE KEY UPDATE$set");
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -194,7 +159,7 @@ if ($_POST && !$error) {
|
|||||||
queries("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);
|
||||||
queries("ROLLBACK"); // after queries_redirect() to not overwrite error
|
queries("ROLLBACK");
|
||||||
} else {
|
} else {
|
||||||
$error = upload_error($file);
|
$error = upload_error($file);
|
||||||
}
|
}
|
||||||
@@ -202,11 +167,8 @@ if ($_POST && !$error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$table_name = $adminer->tableName($table_status);
|
$table_name = $adminer->tableName($table_status);
|
||||||
if (is_ajax()) {
|
|
||||||
// needs to send headers
|
|
||||||
ob_start();
|
|
||||||
}
|
|
||||||
page_header(lang('Select') . ": $table_name", $error);
|
page_header(lang('Select') . ": $table_name", $error);
|
||||||
|
session_write_close();
|
||||||
|
|
||||||
$set = null;
|
$set = null;
|
||||||
if (isset($rights["insert"])) {
|
if (isset($rights["insert"])) {
|
||||||
@@ -235,46 +197,34 @@ if (!$columns) {
|
|||||||
$adminer->selectOrderPrint($order, $columns, $indexes);
|
$adminer->selectOrderPrint($order, $columns, $indexes);
|
||||||
$adminer->selectLimitPrint($limit);
|
$adminer->selectLimitPrint($limit);
|
||||||
$adminer->selectLengthPrint($text_length);
|
$adminer->selectLengthPrint($text_length);
|
||||||
$adminer->selectActionPrint($indexes);
|
$adminer->selectActionPrint($text_length);
|
||||||
echo "</form>\n";
|
echo "</form>\n";
|
||||||
|
|
||||||
$page = $_GET["page"];
|
$page = $_GET["page"];
|
||||||
if ($page == "last") {
|
if ($page == "last") {
|
||||||
$found_rows = $connection->result("SELECT COUNT(*) FROM " . table($TABLE) . ($where ? " WHERE " . implode(" AND ", $where) : ""));
|
$found_rows = $connection->result("SELECT COUNT(*) FROM " . table($TABLE) . ($where ? " WHERE " . implode(" AND ", $where) : ""));
|
||||||
$page = floor(max(0, $found_rows - 1) / $limit);
|
$page = floor(($found_rows - 1) / $limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
$query = $adminer->selectQueryBuild($select, $where, $group, $order, $limit, $page);
|
$query = "SELECT" . limit((intval($limit) && $group && count($group) < count($select) && $jush == "sql" ? "SQL_CALC_FOUND_ROWS " : "") . $from, ($where ? "\nWHERE " . implode(" AND ", $where) : "") . $group_by, ($limit != "" ? intval($limit) : null), ($page ? $limit * $page : 0), "\n");
|
||||||
if (!$query) {
|
|
||||||
$query = "SELECT" . limit(
|
|
||||||
(+$limit && $group && $is_group && $jush == "sql" ? "SQL_CALC_FOUND_ROWS " : "") . $from,
|
|
||||||
($where ? "\nWHERE " . implode(" AND ", $where) : "") . $group_by,
|
|
||||||
($limit != "" ? +$limit : null),
|
|
||||||
($page ? $limit * $page : 0),
|
|
||||||
"\n"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
echo $adminer->selectQuery($query);
|
echo $adminer->selectQuery($query);
|
||||||
|
|
||||||
$result = $connection->query($query);
|
$result = $connection->query($query);
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
echo "<p class='error'>" . error() . "\n";
|
echo "<p class='error'>" . error() . "\n";
|
||||||
} else {
|
} else {
|
||||||
if ($jush == "mssql" && $page) {
|
if ($jush == "mssql") {
|
||||||
$result->seek($limit * $page);
|
$result->seek($limit * $page);
|
||||||
}
|
}
|
||||||
$email_fields = array();
|
$email_fields = array();
|
||||||
echo "<form action='' method='post' enctype='multipart/form-data'>\n";
|
echo "<form action='' method='post' enctype='multipart/form-data'>\n";
|
||||||
$rows = array();
|
$rows = array();
|
||||||
while ($row = $result->fetch_assoc()) {
|
while ($row = $result->fetch_assoc()) {
|
||||||
if ($page && $jush == "oracle") {
|
|
||||||
unset($row["RNUM"]);
|
|
||||||
}
|
|
||||||
$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") {
|
if ($_GET["page"] != "last") {
|
||||||
$found_rows = (+$limit && $group && $is_group
|
$found_rows = (intval($limit) && $group && count($group) < count($select)
|
||||||
? ($jush == "sql" ? $connection->result(" SELECT FOUND_ROWS()") : $connection->result("SELECT COUNT(*) FROM ($query) x")) // space to allow mysql.trace_mode
|
? ($jush == "sql" ? $connection->result(" SELECT FOUND_ROWS()") : $connection->result("SELECT COUNT(*) FROM ($query) x")) // space to allow mysql.trace_mode
|
||||||
: count($rows)
|
: count($rows)
|
||||||
);
|
);
|
||||||
@@ -285,36 +235,23 @@ if (!$columns) {
|
|||||||
} else {
|
} else {
|
||||||
$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 cellspacing='0' class='nowrap' onclick='tableClick(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('edit') . "</a>");
|
echo "<thead><tr><td><input type='checkbox' id='all-page' onclick='formCheck(this, /check/);'> <a href='" . h($_GET["modify"] ? remove_from_uri("modify") : $_SERVER["REQUEST_URI"] . "&modify=1") . "'>" . lang('edit') . "</a>";
|
||||||
$names = array();
|
$names = array();
|
||||||
$functions = array();
|
$functions = array();
|
||||||
reset($select);
|
reset($select);
|
||||||
$rank = 1;
|
$order = 1;
|
||||||
foreach ($rows[0] as $key => $val) {
|
foreach ($rows[0] as $key => $val) {
|
||||||
if ($key != $oid) {
|
$val = $_GET["columns"][key($select)];
|
||||||
$val = $_GET["columns"][key($select)];
|
$field = $fields[$select ? $val["col"] : $key];
|
||||||
$field = $fields[$select ? ($val ? $val["col"] : current($select)) : $key];
|
$name = ($field ? $adminer->fieldName($field, $order) : "*");
|
||||||
$name = ($field ? $adminer->fieldName($field, $rank) : "*");
|
if ($name != "") {
|
||||||
if ($name != "") {
|
$order++;
|
||||||
$rank++;
|
$names[$key] = $name;
|
||||||
$names[$key] = $name;
|
echo '<th><a href="' . h(remove_from_uri('(order|desc)[^=]*|page') . '&order%5B0%5D=' . urlencode($key) . ($_GET["order"][0] == $key && !$_GET["desc"][0] ? '&desc%5B0%5D=1' : '')) . '">' . apply_sql_function($val["fun"], $name) . "</a>"; //! columns looking like functions
|
||||||
$column = idf_escape($key);
|
|
||||||
$href = remove_from_uri('(order|desc)[^=]*|page') . '&order%5B0%5D=' . urlencode($key);
|
|
||||||
$desc = "&desc%5B0%5D=1";
|
|
||||||
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 (!$select || $val ? apply_sql_function($val["fun"], $name) : h(current($select))) . "</a>"; //! columns looking like functions
|
|
||||||
echo "<span class='column hidden'>";
|
|
||||||
echo "<a href='" . h($href . $desc) . "' title='" . lang('descending') . "' class='text'> ↓</a>";
|
|
||||||
if (!$val["fun"]) {
|
|
||||||
echo '<a href="#fieldset-search" onclick="selectSearch(\'' . h(js_escape($key)) . '\'); return false;" title="' . lang('Search') . '" class="text jsonly"> =</a>';
|
|
||||||
}
|
|
||||||
echo "</span>";
|
|
||||||
}
|
|
||||||
$functions[$key] = $val["fun"];
|
|
||||||
next($select);
|
|
||||||
}
|
}
|
||||||
|
$functions[$key] = $val["fun"];
|
||||||
|
next($select);
|
||||||
}
|
}
|
||||||
$lengths = array();
|
$lengths = array();
|
||||||
if ($_GET["modify"]) {
|
if ($_GET["modify"]) {
|
||||||
@@ -325,178 +262,133 @@ if (!$columns) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
echo ($backward_keys ? "<th>" . lang('Relations') : "") . "</thead>\n";
|
echo ($backward_keys ? "<th>" . lang('Relations') : "") . "</thead>\n";
|
||||||
if (is_ajax()) {
|
|
||||||
if ($limit % 2 == 1 && $page % 2 == 1) {
|
|
||||||
odd();
|
|
||||||
}
|
|
||||||
ob_end_clean();
|
|
||||||
}
|
|
||||||
foreach ($adminer->rowDescriptions($rows, $foreign_keys) as $n => $row) {
|
foreach ($adminer->rowDescriptions($rows, $foreign_keys) as $n => $row) {
|
||||||
$unique_array = unique_array($rows[$n], $indexes);
|
$unique_array = unique_array($rows[$n], $indexes);
|
||||||
$unique_idf = "";
|
$unique_idf = "";
|
||||||
foreach ($unique_array as $key => $val) {
|
foreach ($unique_array as $key => $val) {
|
||||||
if (strlen($val) > 64) {
|
$unique_idf .= "&" . (isset($val) ? urlencode("where[" . bracket_escape($key) . "]") . "=" . urlencode($val) : "null%5B%5D=" . urlencode($key));
|
||||||
$key = "MD5(" . (strpos($key, '(') ? $key : idf_escape($key)) . ")"; //! columns looking like functions
|
|
||||||
$val = md5($val);
|
|
||||||
}
|
|
||||||
$unique_idf .= "&" . ($val !== null ? urlencode("where[" . bracket_escape($key) . "]") . "=" . urlencode($val) : "null%5B%5D=" . urlencode($key));
|
|
||||||
}
|
}
|
||||||
echo "<tr" . odd() . ">" . (!$group && $select ? "" : "<td>" . checkbox("check[]", substr($unique_idf, 1), in_array(substr($unique_idf, 1), (array) $_POST["check"]), "", "this.form['all'].checked = false; formUncheck('all-page');") . ($is_group || information_schema(DB) ? "" : " <a href='" . h(ME . "edit=" . urlencode($TABLE) . $unique_idf) . "'>" . lang('edit') . "</a>"));
|
echo "<tr" . odd() . "><td>" . checkbox("check[]", substr($unique_idf, 1), in_array(substr($unique_idf, 1), (array) $_POST["check"]), "", "this.form['all'].checked = false; formUncheck('all-page');") . (count($select) != count($group) || information_schema(DB) ? '' : " <a href='" . h(ME . "edit=" . urlencode($TABLE) . $unique_idf) . "'>" . lang('edit') . "</a>");
|
||||||
foreach ($row as $key => $val) {
|
foreach ($row as $key => $val) {
|
||||||
if (isset($names[$key])) {
|
if (isset($names[$key])) {
|
||||||
$field = $fields[$key];
|
$field = $fields[$key];
|
||||||
if ($val != "" && (!isset($email_fields[$key]) || $email_fields[$key] != "")) {
|
if ($val != "" && (!isset($email_fields[$key]) || $email_fields[$key] != "")) {
|
||||||
$email_fields[$key] = (is_mail($val) ? $names[$key] : ""); //! filled e-mails can be contained on other pages
|
$email_fields[$key] = (is_email($val) ? $names[$key] : ""); //! filled e-mails can be contained on other pages
|
||||||
}
|
}
|
||||||
$link = "";
|
$link = "";
|
||||||
$val = $adminer->editVal($val, $field);
|
$val = $adminer->editVal($val, $field);
|
||||||
if ($val !== null) {
|
if (!isset($val)) {
|
||||||
if (ereg('blob|bytea|raw|file', $field["type"]) && $val != "") {
|
$val = "<i>NULL</i>";
|
||||||
$link = ME . 'download=' . urlencode($TABLE) . '&field=' . urlencode($key) . $unique_idf;
|
} else {
|
||||||
|
if (ereg('binary|blob|bytea', $field["type"]) && $val != "") {
|
||||||
|
$link = h(ME . 'download=' . urlencode($TABLE) . '&field=' . urlencode($key) . $unique_idf);
|
||||||
}
|
}
|
||||||
if ($val === "") { // === - may be int
|
if ($val == "") {
|
||||||
$val = " ";
|
$val = " ";
|
||||||
} elseif ($text_length != "" && is_shortable($field)) {
|
} elseif ($text_length != "" && ereg('text|blob', $field["type"]) && is_utf8($val)) {
|
||||||
$val = shorten_utf8($val, max(0, +$text_length)); // usage of LEFT() would reduce traffic but complicate query - expected average speedup: .001 s VS .01 s on local network
|
$val = shorten_utf8($val, max(0, intval($text_length))); // usage of LEFT() would reduce traffic but complicate query - expected average speedup: .001 s VS .01 s on local network
|
||||||
} else {
|
} else {
|
||||||
$val = h($val);
|
$val = h($val);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$link) { // link related items
|
if (!$link) { // link related items
|
||||||
foreach ((array) $foreign_keys[$key] as $foreign_key) {
|
foreach ((array) $foreign_keys[$key] as $foreign_key) {
|
||||||
if (count($foreign_keys[$key]) == 1 || end($foreign_key["source"]) == $key) {
|
if (count($foreign_keys[$key]) == 1 || count($foreign_key["source"]) == 1) {
|
||||||
$link = "";
|
|
||||||
foreach ($foreign_key["source"] as $i => $source) {
|
foreach ($foreign_key["source"] as $i => $source) {
|
||||||
$link .= where_link($i, $foreign_key["target"][$i], $rows[$n][$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
|
$link = h(($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;
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($key == "COUNT(*)") { //! columns looking like functions
|
if ($key == "COUNT(*)") { //! columns looking like functions
|
||||||
$link = ME . "select=" . urlencode($TABLE);
|
$link = h(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 .= h(where_link($i++, $v["col"], $v["val"], $v["op"]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach ($unique_array as $k => $v) {
|
foreach ($unique_array as $k => $v) {
|
||||||
$link .= where_link($i++, $k, $v);
|
$link .= h(where_link($i++, $k, $v, (isset($v) ? "=" : "IS NULL")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!$link && ($link = $adminer->selectLink($row[$key], $field)) === null) {
|
if (!$link && is_email($val)) {
|
||||||
if (is_mail($row[$key])) {
|
$link = "mailto:$val";
|
||||||
$link = "mailto:$row[$key]";
|
}
|
||||||
}
|
if (!$link && is_url($row[$key])) {
|
||||||
if ($protocol = is_url($row[$key])) {
|
$link = "http://www.adminer.org/redirect/?url=" . urlencode($row[$key]); // intermediate page to hide Referer, may be changed to rel="noreferrer" in HTML5
|
||||||
$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
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
$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)];
|
||||||
$h_value = h($value !== null ? $value : $row[$key]);
|
$h_value = h(isset($value) ? $value : $row[$key]);
|
||||||
$long = strpos($val, "<i>...</i>");
|
$long = strpos($val, "<em>...</em>");
|
||||||
$editable = is_utf8($val) && $rows[$n][$key] == $row[$key] && !$functions[$key];
|
$editable = is_utf8($val) && !$long && $rows[$n][$key] == $row[$key] && !$functions[$key];
|
||||||
$text = ereg('text|lob', $field["type"]);
|
$text = ereg('text|blob', $field["type"]);
|
||||||
echo (($_GET["modify"] && $editable) || $value !== null
|
echo (($_GET["modify"] && $editable) || isset($value)
|
||||||
? "<td>" . ($text ? "<textarea name='$id' cols='30' rows='" . (substr_count($row[$key], "\n") + 1) . "'>$h_value</textarea>" : "<input name='$id' value='$h_value' size='$lengths[$key]'>")
|
? "<td>" . ($text ? "<textarea name='$id' cols='30' rows='" . (substr_count($row[$key], "\n") + 1) . "'>$h_value</textarea>" : "<input name='$id' value='$h_value' size='$lengths[$key]'>")
|
||||||
: "<td id='$id' onclick=\"selectClick(this, event, " . ($long ? 2 : ($text ? 1 : 0)) . ($editable ? "" : ", '" . h(lang('Use edit link to modify this value.')) . "'") . ");\">" . $adminer->selectVal($val, $link, $field)
|
: "<td id='$id' ondblclick=\"" . ($editable ? "selectDblClick(this, event" . ($text ? ", 1" : "") . ")" : "alert('" . ($long ? lang('Increase text length to modify this value.') : lang('Use edit link to modify this value.')) . "')") . ";\">" . $adminer->selectVal($val, $link, $field)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($backward_keys) {
|
|
||||||
echo "<td>";
|
|
||||||
}
|
|
||||||
$adminer->backwardKeysPrint($backward_keys, $rows[$n]);
|
$adminer->backwardKeysPrint($backward_keys, $rows[$n]);
|
||||||
echo "</tr>\n"; // close to allow white-space: pre
|
echo "</tr>\n"; // close to allow white-space: pre
|
||||||
}
|
}
|
||||||
if (is_ajax()) {
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
echo (!$group && $select ? "" : "<script type='text/javascript'>tableCheck();</script>\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (($rows || $page) && !is_ajax()) {
|
parse_str($_COOKIE["adminer_export"], $adminer_export);
|
||||||
|
|
||||||
|
if ($rows || $page) {
|
||||||
$exact_count = true;
|
$exact_count = true;
|
||||||
if ($_GET["page"] != "last" && +$limit && !$is_group && ($found_rows >= $limit || $page)) {
|
if ($_GET["page"] != "last" && intval($limit) && count($group) >= count($select) && ($found_rows >= $limit || $page)) {
|
||||||
$found_rows = found_rows($table_status, $where);
|
$found_rows = $table_status["Rows"];
|
||||||
if ($found_rows < max(1e4, 2 * ($page + 1) * $limit)) {
|
if (!isset($found_rows) || $where || 2 * $page * $limit > $found_rows || ($table_status["Engine"] == "InnoDB" && $found_rows < 1e4)) {
|
||||||
// slow with big tables
|
// slow with big tables
|
||||||
$found_rows = reset(slow_query("SELECT COUNT(*) FROM " . table($TABLE) . ($where ? " WHERE " . implode(" AND ", $where) : "")));
|
ob_flush();
|
||||||
|
flush();
|
||||||
|
$found_rows = $connection->result("SELECT COUNT(*) FROM " . table($TABLE) . ($where ? " WHERE " . implode(" AND ", $where) : ""));
|
||||||
} else {
|
} else {
|
||||||
$exact_count = false;
|
$exact_count = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (+$limit && ($found_rows === false || $found_rows > $limit || $page)) {
|
echo "<p class='pages'>";
|
||||||
echo "<p class='pages'>";
|
if (intval($limit) && $found_rows > $limit) {
|
||||||
// display first, previous 4, next 4 and last page
|
// display first, previous 4, next 4 and last page
|
||||||
$max_page = ($found_rows === false
|
$max_page = floor(($found_rows - 1) / $limit);
|
||||||
? $page + (count($rows) >= $limit ? 2 : 1)
|
echo lang('Page') . ":" . pagination(0, $page) . ($page > 5 ? " ..." : "");
|
||||||
: floor(($found_rows - 1) / $limit)
|
|
||||||
);
|
|
||||||
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 ? " ..." : "");
|
|
||||||
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 ? " ..." : "") . ($exact_count ? pagination($max_page, $page) : ' <a href="' . h(remove_from_uri() . "&page=last") . '">' . lang('last') . "</a>");
|
||||||
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>\n";
|
echo " (" . ($exact_count ? "" : "~ ") . lang('%d row(s)', $found_rows) . ") " . checkbox("all", 1, 0, lang('whole result')) . "\n";
|
||||||
echo ($found_rows !== false ? "(" . ($exact_count ? "" : "~ ") . lang('%d row(s)', $found_rows) . ") " : "");
|
|
||||||
echo checkbox("all", 1, 0, lang('whole result')) . "\n";
|
|
||||||
|
|
||||||
if ($adminer->selectCommandPrint()) {
|
if (!information_schema(DB)) {
|
||||||
?>
|
?>
|
||||||
<fieldset><legend><?php echo lang('Edit'); ?></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.') . '" class="jsonly"'); ?>>
|
<input type="submit" value="<?php echo lang('Save'); ?>" title="<?php echo lang('Double click on a value to modify it.'); ?>">
|
||||||
<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'); ?>" onclick="return confirm('<?php echo lang('Are you sure?'); ?> (' + (this.form['all'].checked ? <?php echo $found_rows; ?> : formChecked(this, /check/)) + ')');">
|
<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
|
||||||
}
|
}
|
||||||
$format = $adminer->dumpFormat();
|
print_fieldset("export", lang('Export'));
|
||||||
if ($format) {
|
echo $adminer->dumpOutput(1, $adminer_export["output"]) . " " . $adminer->dumpFormat(1, $adminer_export["format"]); // 1 - select
|
||||||
print_fieldset("export", lang('Export'));
|
echo " <input type='submit' name='export' value='" . lang('Export') . "'>\n";
|
||||||
$output = $adminer->dumpOutput();
|
|
||||||
echo ($output ? html_select("output", $output, $adminer_import["output"]) . " " : "");
|
|
||||||
echo html_select("format", $format, $adminer_import["format"]);
|
|
||||||
echo " <input type='submit' name='export' value='" . lang('Export') . "'>\n";
|
|
||||||
echo "</div></fieldset>\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($adminer->selectImportPrint()) {
|
|
||||||
print_fieldset("import", lang('Import'), !$rows);
|
|
||||||
echo "<input type='file' name='csv_file'> ";
|
|
||||||
echo html_select("separator", array("csv" => "CSV,", "csv;" => "CSV;", "tsv" => "TSV"), $adminer_import["format"], 1); // 1 - select
|
|
||||||
echo " <input type='submit' name='import' value='" . lang('Import') . "'>";
|
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
}
|
}
|
||||||
|
print_fieldset("import", lang('CSV Import'), !$result->num_rows);
|
||||||
|
echo "<input type='hidden' name='token' value='$token'><input type='file' name='csv_file'> ";
|
||||||
|
echo html_select("separator", array("csv" => "CSV,", "csv;" => "CSV;"), $adminer_export["format"], 1); // 1 - select
|
||||||
|
echo " <input type='submit' name='import' value='" . lang('Import') . "'>\n";
|
||||||
|
echo "</div></fieldset>\n";
|
||||||
|
|
||||||
$adminer->selectEmailPrint(array_filter($email_fields, 'strlen'), $columns);
|
$adminer->selectEmailPrint(array_filter($email_fields, 'strlen'), $columns);
|
||||||
|
|
||||||
echo "<p><input type='hidden' name='token' value='$token'></p>\n";
|
|
||||||
echo "</form>\n";
|
echo "</form>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_ajax()) {
|
|
||||||
ob_end_clean();
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -3,13 +3,12 @@ $SEQUENCE = $_GET["sequence"];
|
|||||||
|
|
||||||
if ($_POST && !$error) {
|
if ($_POST && !$error) {
|
||||||
$link = substr(ME, 0, -1);
|
$link = substr(ME, 0, -1);
|
||||||
$name = trim($_POST["name"]);
|
|
||||||
if ($_POST["drop"]) {
|
if ($_POST["drop"]) {
|
||||||
query_redirect("DROP SEQUENCE " . idf_escape($SEQUENCE), $link, lang('Sequence has been dropped.'));
|
query_redirect("DROP SEQUENCE " . idf_escape($SEQUENCE), $link, lang('Sequence has been dropped.'));
|
||||||
} elseif ($SEQUENCE == "") {
|
} elseif ($SEQUENCE == "") {
|
||||||
query_redirect("CREATE SEQUENCE " . idf_escape($name), $link, lang('Sequence has been created.'));
|
query_redirect("CREATE SEQUENCE " . idf_escape($_POST["name"]), $link, lang('Sequence has been created.'));
|
||||||
} elseif ($SEQUENCE != $name) {
|
} elseif ($SEQUENCE != $_POST["name"]) {
|
||||||
query_redirect("ALTER SEQUENCE " . idf_escape($SEQUENCE) . " RENAME TO " . idf_escape($name), $link, lang('Sequence has been altered.'));
|
query_redirect("ALTER SEQUENCE " . idf_escape($SEQUENCE) . " RENAME TO " . idf_escape($_POST["name"]), $link, lang('Sequence has been altered.'));
|
||||||
} else {
|
} else {
|
||||||
redirect($link);
|
redirect($link);
|
||||||
}
|
}
|
||||||
@@ -17,19 +16,19 @@ if ($_POST && !$error) {
|
|||||||
|
|
||||||
page_header($SEQUENCE != "" ? lang('Alter sequence') . ": " . h($SEQUENCE) : lang('Create sequence'), $error);
|
page_header($SEQUENCE != "" ? lang('Alter sequence') . ": " . h($SEQUENCE) : lang('Create sequence'), $error);
|
||||||
|
|
||||||
$row = $_POST;
|
$row = array("name" => $SEQUENCE);
|
||||||
if (!$row) {
|
if ($_POST) {
|
||||||
$row = array("name" => $SEQUENCE);
|
$row = $_POST;
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
<p><input name="name" value="<?php echo h($row["name"]); ?>" autocapitalize="off">
|
<p><input name="name" value="<?php echo h($row["name"]); ?>">
|
||||||
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||||
<?php
|
<?php
|
||||||
if ($SEQUENCE != "") {
|
if ($SEQUENCE != "") {
|
||||||
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm() . ">\n";
|
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'$confirm>\n";
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
if (!$error && $_POST["export"]) {
|
|
||||||
dump_headers("sql");
|
|
||||||
$adminer->dumpTable("", "");
|
|
||||||
$adminer->dumpData("", "table", $_POST["query"]);
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
restart_session();
|
restart_session();
|
||||||
$history_all = &get_session("queries");
|
$history_all = &get_session("history");
|
||||||
$history = &$history_all[DB];
|
$history = &$history_all[DB];
|
||||||
if (!$error && $_POST["clear"]) {
|
if (!$error && $_POST["clear"]) {
|
||||||
$history = array();
|
$history = array();
|
||||||
@@ -25,23 +18,20 @@ if (!$error && $_POST) {
|
|||||||
: "compress.bzip2://adminer.sql.bz2"
|
: "compress.bzip2://adminer.sql.bz2"
|
||||||
)), "rb");
|
)), "rb");
|
||||||
$query = ($fp ? fread($fp, 1e6) : false);
|
$query = ($fp ? fread($fp, 1e6) : false);
|
||||||
} elseif ($_FILES && $_FILES["sql_file"]["error"] != UPLOAD_ERR_NO_FILE) {
|
} elseif ($_POST["file"]) {
|
||||||
$query = get_file("sql_file", true);
|
$query = get_file("sql_file", true);
|
||||||
}
|
}
|
||||||
if (is_string($query)) { // get_file() returns error as number, fread() as false
|
if (is_string($query)) { // get_file() returns error as number, fread() as false
|
||||||
if (function_exists('memory_get_usage')) {
|
if (function_exists('memory_get_usage')) {
|
||||||
@ini_set("memory_limit", max(ini_bytes("memory_limit"), 2 * strlen($query) + memory_get_usage() + 8e6)); // @ - may be disabled, 2 - substr and trim, 8e6 - other variables
|
@ini_set("memory_limit", 2 * strlen($query) + memory_get_usage() + 8e6); // @ - may be disabled, 2 - substr and trim, 8e6 - other variables
|
||||||
}
|
}
|
||||||
if ($query != "" && strlen($query) < 1e6) { // don't add big queries
|
if ($query != "" && strlen($query) < 1e6 && (!$history || end($history) != $query)) { // don't add repeated and big queries
|
||||||
$q = $query . (ereg(";[ \t\r\n]*\$", $query) ? "" : ";"); //! doesn't work with DELIMITER |
|
$history[] = $query;
|
||||||
if (!$history || reset(end($history)) != $q) { // no repeated queries
|
}
|
||||||
restart_session();
|
$space = "(\\s|/\\*.*\\*/|(#|-- )[^\n]*\n|--\n)";
|
||||||
$history[] = array($q, time());
|
if (!ini_bool("session.use_cookies")) {
|
||||||
set_session("queries", $history_all); // required because reference is unlinked by stop_session()
|
session_write_close();
|
||||||
stop_session();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
$space = "(?:\\s|/\\*.*\\*/|(?:#|-- )[^\n]*\n|--\n)";
|
|
||||||
$delimiter = ";";
|
$delimiter = ";";
|
||||||
$offset = 0;
|
$offset = 0;
|
||||||
$empty = true;
|
$empty = true;
|
||||||
@@ -49,114 +39,87 @@ if (!$error && $_POST) {
|
|||||||
if (is_object($connection2) && DB != "") {
|
if (is_object($connection2) && DB != "") {
|
||||||
$connection2->select_db(DB);
|
$connection2->select_db(DB);
|
||||||
}
|
}
|
||||||
$commands = 0;
|
$queries = 0;
|
||||||
$errors = array();
|
$errors = "";
|
||||||
$line = 0;
|
|
||||||
$parse = '[\'"' . ($jush == "sql" ? '`#' : ($jush == "sqlite" ? '`[' : ($jush == "mssql" ? '[' : ''))) . ']|/\\*|-- |$' . ($jush == "pgsql" ? '|\\$[^$]*\\$' : '');
|
|
||||||
$total_start = microtime();
|
|
||||||
parse_str($_COOKIE["adminer_export"], $adminer_export);
|
|
||||||
$dump_format = $adminer->dumpFormat();
|
|
||||||
unset($dump_format["sql"]);
|
|
||||||
while ($query != "") {
|
while ($query != "") {
|
||||||
if (!$offset && preg_match("~^$space*DELIMITER\\s+(\\S+)~i", $query, $match)) {
|
if (!$offset && preg_match('~^\\s*DELIMITER\\s+(.+)~i', $query, $match)) {
|
||||||
$delimiter = $match[1];
|
$delimiter = $match[1];
|
||||||
$query = substr($query, strlen($match[0]));
|
$query = substr($query, strlen($match[0]));
|
||||||
} else {
|
} else {
|
||||||
preg_match('(' . preg_quote($delimiter) . "\\s*|$parse)", $query, $match, PREG_OFFSET_CAPTURE, $offset); // should always match
|
preg_match('(' . preg_quote($delimiter) . '|[\'`"]|/\\*|-- |#|$)', $query, $match, PREG_OFFSET_CAPTURE, $offset); // should always match
|
||||||
list($found, $pos) = $match[0];
|
$found = $match[0][0];
|
||||||
|
$offset = $match[0][1] + strlen($found);
|
||||||
if (!$found && $fp && !feof($fp)) {
|
if (!$found && $fp && !feof($fp)) {
|
||||||
$query .= fread($fp, 1e5);
|
$query .= fread($fp, 1e5);
|
||||||
} else {
|
} else {
|
||||||
if (!$found && rtrim($query) == "") {
|
if (!$found && rtrim($query) == "") {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$offset = $pos + strlen($found);
|
if (!$found || $found == $delimiter) { // end of a query
|
||||||
if ($found && rtrim($found) != $delimiter) { // find matching quote or comment end
|
|
||||||
while (preg_match('(' . ($found == '/*' ? '\\*/' : ($found == '[' ? ']' : (ereg('^-- |^#', $found) ? "\n" : preg_quote($found) . "|\\\\."))) . '|$)s', $query, $match, PREG_OFFSET_CAPTURE, $offset)) { //! respect sql_mode NO_BACKSLASH_ESCAPES
|
|
||||||
$s = $match[0][0];
|
|
||||||
if (!$s && $fp && !feof($fp)) {
|
|
||||||
$query .= fread($fp, 1e5);
|
|
||||||
} else {
|
|
||||||
$offset = $match[0][1] + strlen($s);
|
|
||||||
if ($s[0] != "\\") {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else { // end of a query
|
|
||||||
$empty = false;
|
$empty = false;
|
||||||
$q = substr($query, 0, $pos);
|
$q = substr($query, 0, $match[0][1]);
|
||||||
$commands++;
|
$queries++;
|
||||||
$print = "<pre id='sql-$commands'><code class='jush-$jush'>" . shorten_utf8(trim($q), 1000) . "</code></pre>\n";
|
echo "<pre class='jush-$jush' id='sql-$queries'>" . shorten_utf8(trim($q), 1000) . "</pre>\n";
|
||||||
if (!$_POST["only_errors"]) {
|
ob_flush();
|
||||||
echo $print;
|
flush(); // can take a long time - show the running query
|
||||||
ob_flush();
|
$start = explode(" ", microtime()); // microtime(true) is available since PHP 5
|
||||||
flush(); // can take a long time - show the running query
|
|
||||||
}
|
|
||||||
$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)) {
|
||||||
$connection2->query($q);
|
echo "<p class='error'>" . lang('Error in query') . ": " . error() . "\n";
|
||||||
}
|
$errors .= " <a href='#sql-$queries'>$queries</a>";
|
||||||
do {
|
if ($_POST["error_stops"]) {
|
||||||
$result = $connection->store_result();
|
break;
|
||||||
$end = microtime();
|
}
|
||||||
$time = format_time($start, $end) . (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
|
} else {
|
||||||
if ($connection->error) {
|
if (is_object($connection2) && preg_match("~^$space*(USE)\\b~isU", $q)) {
|
||||||
echo ($_POST["only_errors"] ? $print : "");
|
$connection2->query($q);
|
||||||
echo "<p class='error'>" . lang('Error in query') . ($connection->errno ? " ($connection->errno)" : "") . ": " . error() . "\n";
|
}
|
||||||
$errors[] = " <a href='#sql-$commands'>$commands</a>";
|
do {
|
||||||
if ($_POST["error_stops"]) {
|
$result = $connection->store_result();
|
||||||
break 2;
|
$end = explode(" ", microtime());
|
||||||
}
|
$time = " <span class='time'>(" . lang('%.3f s', max(0, $end[0] - $start[0] + $end[1] - $start[1])) . ")</span>";
|
||||||
} elseif (is_object($result)) {
|
if (is_object($result)) {
|
||||||
$orgtables = select($result, $connection2);
|
select($result, $connection2);
|
||||||
if (!$_POST["only_errors"]) {
|
|
||||||
echo "<form action='' method='post'>\n";
|
|
||||||
echo "<p>" . ($result->num_rows ? lang('%d row(s)', $result->num_rows) : "") . $time;
|
echo "<p>" . ($result->num_rows ? lang('%d row(s)', $result->num_rows) : "") . $time;
|
||||||
$id = "export-$commands";
|
if ($connection2 && preg_match("~^($space|\\()*SELECT\\b~isU", $q)) {
|
||||||
$export = ", <a href='#$id' onclick=\"return !toggle('$id');\">" . lang('Export') . "</a><span id='$id' class='hidden'>: "
|
$id = "explain-$queries";
|
||||||
. html_select("output", $adminer->dumpOutput(), $adminer_export["output"]) . " "
|
echo ", <a href='#$id' onclick=\"return !toggle('$id');\">EXPLAIN</a>\n";
|
||||||
. html_select("format", $dump_format, $adminer_export["format"])
|
|
||||||
. "<input type='hidden' name='query' value='" . h($q) . "'>"
|
|
||||||
. " <input type='submit' name='export' value='" . lang('Export') . "'><input type='hidden' name='token' value='$token'></span>\n"
|
|
||||||
;
|
|
||||||
if ($connection2 && preg_match("~^($space|\\()*SELECT\\b~isU", $q) && ($explain = explain($connection2, $q))) {
|
|
||||||
$id = "explain-$commands";
|
|
||||||
echo ", <a href='#$id' onclick=\"return !toggle('$id');\">EXPLAIN</a>$export";
|
|
||||||
echo "<div id='$id' class='hidden'>\n";
|
echo "<div id='$id' class='hidden'>\n";
|
||||||
select($explain, $connection2, ($jush == "sql" ? "http://dev.mysql.com/doc/refman/" . substr($connection->server_info, 0, 3) . "/en/explain-output.html#explain_" : ""), $orgtables);
|
select(explain($connection2, $q));
|
||||||
echo "</div>\n";
|
echo "</div>\n";
|
||||||
} else {
|
|
||||||
echo $export;
|
|
||||||
}
|
}
|
||||||
echo "</form>\n";
|
} else {
|
||||||
}
|
if (preg_match("~^$space*(CREATE|DROP|ALTER)$space+(DATABASE|SCHEMA)\\b~isU", $q)) {
|
||||||
} else {
|
restart_session();
|
||||||
if (preg_match("~^$space*(CREATE|DROP|ALTER)$space+(DATABASE|SCHEMA)\\b~isU", $q)) {
|
set_session("databases", null); // clear cache
|
||||||
restart_session();
|
session_write_close();
|
||||||
set_session("dbs", null); // clear cache
|
}
|
||||||
stop_session();
|
|
||||||
}
|
|
||||||
if (!$_POST["only_errors"]) {
|
|
||||||
echo "<p class='message' title='" . h($connection->info) . "'>" . lang('Query executed OK, %d row(s) affected.', $connection->affected_rows) . "$time\n";
|
echo "<p class='message' title='" . h($connection->info) . "'>" . lang('Query executed OK, %d row(s) affected.', $connection->affected_rows) . "$time\n";
|
||||||
}
|
}
|
||||||
}
|
$start = $end;
|
||||||
$start = $end;
|
} while ($connection->next_result());
|
||||||
} while ($connection->next_result());
|
}
|
||||||
$line += substr_count($q.$found, "\n");
|
|
||||||
$query = substr($query, $offset);
|
$query = substr($query, $offset);
|
||||||
$offset = 0;
|
$offset = 0;
|
||||||
|
} else { // find matching quote or comment end
|
||||||
|
while (preg_match('~' . ($found == '/*' ? '\\*/' : (ereg('-- |#', $found) ? "\n" : "$found|\\\\.")) . '|$~s', $query, $match, PREG_OFFSET_CAPTURE, $offset)) { //! respect sql_mode NO_BACKSLASH_ESCAPES
|
||||||
|
$s = $match[0][0];
|
||||||
|
$offset = $match[0][1] + strlen($s);
|
||||||
|
if (!$s && $fp && !feof($fp)) {
|
||||||
|
$query .= fread($fp, 1e6);
|
||||||
|
} elseif ($s[0] != "\\") {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if ($errors && $queries > 1) {
|
||||||
|
echo "<p class='error'>" . lang('Error in query') . ": $errors\n";
|
||||||
|
}
|
||||||
if ($empty) {
|
if ($empty) {
|
||||||
echo "<p class='message'>" . lang('No commands to execute.') . "\n";
|
echo "<p class='message'>" . lang('No commands to execute.') . "\n";
|
||||||
} elseif ($_POST["only_errors"]) {
|
|
||||||
echo "<p class='message'>" . lang('%d query(s) executed OK.', $commands - count($errors)) . format_time($total_start, microtime()) . "\n";
|
|
||||||
} elseif ($errors && $commands > 1) {
|
|
||||||
echo "<p class='error'>" . lang('Error in query') . ": " . implode("", $errors) . "\n";
|
|
||||||
}
|
}
|
||||||
//! MS SQL - SET SHOWPLAN_ALL OFF
|
//! MS SQL - SET SHOWPLAN_ALL OFF
|
||||||
} else {
|
} else {
|
||||||
@@ -165,31 +128,31 @@ if (!$error && $_POST) {
|
|||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<form action="" method="post" enctype="multipart/form-data" id="form">
|
<form action="" method="post" enctype="multipart/form-data">
|
||||||
<p><?php
|
<p><?php
|
||||||
$q = $_GET["sql"]; // overwrite $q from if ($_POST) to save memory
|
$q = $_GET["sql"]; // overwrite $q from if ($_POST) to save memory
|
||||||
if ($_POST) {
|
if ($_POST) {
|
||||||
$q = $_POST["query"];
|
$q = $_POST["query"];
|
||||||
} elseif ($_GET["history"] == "all") {
|
|
||||||
$q = $history;
|
|
||||||
} elseif ($_GET["history"] != "") {
|
} elseif ($_GET["history"] != "") {
|
||||||
$q = $history[$_GET["history"]][0];
|
$q = $history[$_GET["history"]];
|
||||||
}
|
}
|
||||||
textarea("query", $q, 20);
|
textarea("query", $q, 20);
|
||||||
echo ($_POST ? "" : "<script type='text/javascript'>document.getElementsByTagName('textarea')[0].focus();</script>\n");
|
|
||||||
echo "<p>" . (ini_bool("file_uploads")
|
|
||||||
? lang('File upload') . ': <input type="file" name="sql_file"' . ($_FILES && $_FILES["sql_file"]["error"] != 4 ? '' : ' onchange="this.form[\'only_errors\'].checked = true;"') . '> (< ' . 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.')
|
|
||||||
);
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
<p>
|
<p>
|
||||||
<input type="submit" value="<?php echo lang('Execute'); ?>" title="Ctrl+Enter">
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
<?php
|
<input type="submit" value="<?php echo lang('Execute'); ?>">
|
||||||
echo checkbox("error_stops", 1, $_POST["error_stops"], lang('Stop on error')) . "\n";
|
<?php echo checkbox("error_stops", 1, $_POST["error_stops"], lang('Stop on error')); ?>
|
||||||
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; ");
|
<p>
|
||||||
|
<?php
|
||||||
|
if (!ini_bool("file_uploads")) {
|
||||||
|
echo lang('File uploads are disabled.');
|
||||||
|
} else { ?>
|
||||||
|
<?php echo lang('File upload'); ?>: <input type="file" name="sql_file">
|
||||||
|
<input type="submit" name="file" value="<?php echo lang('Run file'); ?>">
|
||||||
|
<?php } ?>
|
||||||
|
|
||||||
|
<p><?php
|
||||||
$compress = array();
|
$compress = array();
|
||||||
foreach (array("gz" => "zlib", "bz2" => "bz2") as $key => $val) {
|
foreach (array("gz" => "zlib", "bz2" => "bz2") as $key => $val) {
|
||||||
if (extension_loaded($val)) {
|
if (extension_loaded($val)) {
|
||||||
@@ -197,20 +160,18 @@ foreach (array("gz" => "zlib", "bz2" => "bz2") as $key => $val) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
echo lang('Webserver file %s', "<code>adminer.sql" . ($compress ? "[" . implode("|", $compress) . "]" : "") . "</code>");
|
echo lang('Webserver file %s', "<code>adminer.sql" . ($compress ? "[" . implode("|", $compress) . "]" : "") . "</code>");
|
||||||
echo ' <input type="submit" name="webfile" value="' . lang('Run file') . '">';
|
?> <input type="submit" name="webfile" value="<?php echo lang('Run file'); ?>">
|
||||||
echo "</div></fieldset>\n";
|
|
||||||
|
|
||||||
|
<?php
|
||||||
if ($history) {
|
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
|
foreach ($history as $key => $val) {
|
||||||
$key = key($history);
|
//! save and display timestamp
|
||||||
list($q, $time) = $val;
|
echo '<a href="' . h(ME . "sql=&history=$key") . '">' . lang('Edit') . "</a> <code class='jush-$jush'>" . shorten_utf8(ltrim(str_replace("\n", " ", str_replace("\r", "", preg_replace('~^(#|-- ).*~m', '', $val)))), 80, "</code>") . "<br>\n";
|
||||||
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
|
|
||||||
}
|
}
|
||||||
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 "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
/** @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; }
|
a { color: blue; }
|
||||||
a:visited { color: navy; }
|
a:visited { color: navy; }
|
||||||
a:hover { color: red; }
|
a:hover { color: red; }
|
||||||
a.text { text-decoration: none; }
|
|
||||||
h1 { font-size: 150%; margin: 0; padding: .8em 1em; border-bottom: 1px solid #999; font-weight: normal; color: #777; background: #eee; }
|
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; }
|
||||||
@@ -11,19 +9,18 @@ form { 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; }
|
||||||
thead th { text-align: center; padding: .2em .5em; }
|
thead th { text-align: center; }
|
||||||
thead td, thead th { background: #ddf; }
|
thead td, thead th { background: #ddf; }
|
||||||
fieldset { display: inline; vertical-align: top; padding: .5em .8em; margin: .8em .5em 0 0; border: 1px solid #999; }
|
fieldset { display: inline; vertical-align: top; padding: .5em .8em; margin: .8em .5em 0 0; border: 1px solid #999; }
|
||||||
p { margin: .8em 20px 0 0; }
|
p { margin: .8em 20px 0 0; }
|
||||||
img { vertical-align: middle; border: 0; }
|
img { vertical-align: middle; border: 0; }
|
||||||
td img { max-width: 200px; max-height: 200px; }
|
td img { max-width: 200px; max-height: 200px; }
|
||||||
code { background: #eee; }
|
code { background: #eee; }
|
||||||
tbody tr:hover td, tbody tr:hover th { background: #eee; }
|
tr:hover td, tr:hover th { background: #ddf; }
|
||||||
pre { margin: 1em 0 0; }
|
pre { margin: 1em 0 0; }
|
||||||
input[type=image] { vertical-align: middle; }
|
ul { margin: 1em 0 0; }
|
||||||
.version { color: #777; font-size: 67%; }
|
.version { color: #777; font-size: 67%; }
|
||||||
.js .hidden, .nojs .jsonly { display: none; }
|
.js .hidden { display: none; }
|
||||||
.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; }
|
||||||
@@ -35,44 +32,26 @@ input[type=image] { vertical-align: middle; }
|
|||||||
.enum { color: #007F7F; }
|
.enum { color: #007F7F; }
|
||||||
.binary { color: red; }
|
.binary { color: red; }
|
||||||
.odd td { background: #F5F5F5; }
|
.odd td { background: #F5F5F5; }
|
||||||
.js .checked td, .js .checked th { background: #ddf; }
|
|
||||||
.time { color: silver; font-size: 70%; }
|
.time { color: silver; font-size: 70%; }
|
||||||
.function { text-align: right; }
|
.function { text-align: right; }
|
||||||
.number { text-align: right; }
|
.number { text-align: right; }
|
||||||
.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; }
|
#menu { position: absolute; margin: 10px 0 0; padding: 0 0 30px 0; top: 2em; left: 0; width: 19em; overflow: auto; overflow-y: hidden; white-space: nowrap; }
|
||||||
.active { font-weight: bold; }
|
|
||||||
.sqlarea { width: 98%; }
|
|
||||||
.icon { width: 18px; height: 18px; }
|
|
||||||
.size { width: 6ex; }
|
|
||||||
.help { cursor: help; }
|
|
||||||
.pages { position: fixed; bottom: 0; left: 21em; padding: 5px; background: #ddf; border: 1px solid #999; }
|
|
||||||
#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; }
|
#tables { padding: 0 0 0 1em; }
|
||||||
#logins, #tables { white-space: nowrap; overflow: auto; text-overflow: ellipsis; }
|
#tables li { list-style-type: none; }
|
||||||
#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; }
|
||||||
#h1 { color: #777; text-decoration: none; font-style: italic; }
|
#h1 { color: #777; text-decoration: none; font-style: italic; }
|
||||||
#version { font-size: 67%; color: red; }
|
#version { font-size: 67%; color: red; }
|
||||||
#schema { margin-left: 60px; position: relative; -moz-user-select: none; -webkit-user-select: none; }
|
#schema { margin-left: 60px; position: relative; }
|
||||||
#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; }
|
||||||
|
|
||||||
.rtl h2 { margin: 0 -18px 20px 0; }
|
|
||||||
.rtl p, .rtl table, .rtl .error, .rtl .message { margin: 1em 0 0 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 #lang, .rtl #menu { left: auto; right: 0; }
|
|
||||||
|
|
||||||
@media print {
|
@media print {
|
||||||
#lang, #menu { display: none; }
|
#lang, #menu { display: none; }
|
||||||
#content { margin-left: 1em; }
|
#content { margin-left: 1em; }
|
||||||
#breadcrumb { left: 1em; }
|
#breadcrumb { left: 1em; }
|
||||||
.nowrap td, .nowrap th, td.nowrap { white-space: normal; }
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,41 +1,45 @@
|
|||||||
// 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
|
||||||
|
* @param string 'http' or 'https' - used after compilation
|
||||||
*/
|
*/
|
||||||
function bodyLoad(version) {
|
function bodyLoad(version, protocol) {
|
||||||
if (jushRoot) {
|
var jushRoot = '../externals/jush/';
|
||||||
// copy of jush.style to load JS and CSS at once
|
var script = document.createElement('script');
|
||||||
var link = document.createElement('link');
|
script.src = jushRoot + 'jush.js';
|
||||||
link.rel = 'stylesheet';
|
script.onload = function () {
|
||||||
link.type = 'text/css';
|
if (window.jush) { // IE runs in case of an error too
|
||||||
link.href = jushRoot + 'jush.css';
|
jush.create_links = ' target="_blank"';
|
||||||
document.getElementsByTagName('head')[0].appendChild(link);
|
jush.urls.sql[0] = 'http://dev.mysql.com/doc/refman/' + version + '/en/$key';
|
||||||
|
jush.urls.sql_sqlset = jush.urls.sql[0];
|
||||||
var script = document.createElement('script');
|
jush.urls.sqlset[0] = jush.urls.sql[0];
|
||||||
script.src = jushRoot + 'jush.js';
|
jush.urls.sqlstatus[0] = jush.urls.sql[0];
|
||||||
script.onload = function () {
|
jush.urls.pgsql[0] = 'http://www.postgresql.org/docs/' + version + '/static/$key';
|
||||||
if (window.jush) { // IE runs in case of an error too
|
jush.urls.pgsql_pgsqlset = jush.urls.pgsql[0];
|
||||||
jush.create_links = ' target="_blank" rel="noreferrer"';
|
jush.urls.pgsqlset[0] = 'http://www.postgresql.org/docs/' + version + '/static/runtime-config-$key.html#GUC-$1';
|
||||||
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';
|
jush.style(jushRoot + 'jush.css');
|
||||||
var pgsql = 'http://www.postgresql.org/docs/' + version + '/static/';
|
if (window.jushLinks) {
|
||||||
jush.urls.pgsql_pgsqlset = jush.urls.pgsql[0] = pgsql + '$key';
|
jush.custom_links = jushLinks;
|
||||||
jush.urls.pgsqlset[0] = pgsql + 'runtime-config-$key.html#GUC-$1';
|
|
||||||
if (window.jushLinks) {
|
|
||||||
jush.custom_links = jushLinks;
|
|
||||||
}
|
|
||||||
jush.highlight_tag('code', 0);
|
|
||||||
}
|
}
|
||||||
};
|
jush.highlight_tag('pre', 0);
|
||||||
script.onreadystatechange = function () {
|
jush.highlight_tag('code');
|
||||||
if (/^(loaded|complete)$/.test(script.readyState)) {
|
}
|
||||||
script.onload();
|
};
|
||||||
}
|
script.onreadystatechange = function () {
|
||||||
};
|
if (/^(loaded|complete)$/.test(script.readyState)) {
|
||||||
document.body.appendChild(script);
|
script.onload();
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
document.body.appendChild(script);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get value of select
|
||||||
|
* @param HTMLSelectElement
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function selectValue(select) {
|
||||||
|
return select.value || select.options[select.selectedIndex].text;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get value of dynamically created form field
|
/** Get value of dynamically created form field
|
||||||
@@ -44,7 +48,6 @@ function bodyLoad(version) {
|
|||||||
* @return HTMLElement
|
* @return HTMLElement
|
||||||
*/
|
*/
|
||||||
function formField(form, name) {
|
function formField(form, name) {
|
||||||
// required in IE < 8, form.elements[name] doesn't work
|
|
||||||
for (var i=0; i < form.length; i++) {
|
for (var i=0; i < form.length; i++) {
|
||||||
if (form[i].name == name) {
|
if (form[i].name == name) {
|
||||||
return form[i];
|
return form[i];
|
||||||
@@ -63,178 +66,16 @@ function typePassword(el, disable) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Hide or show some login rows for selected driver
|
|
||||||
* @param HTMLSelectElement
|
|
||||||
*/
|
|
||||||
function loginDriver(driver) {
|
|
||||||
var trs = parentTag(driver, 'table').rows;
|
|
||||||
for (var i=1; i < trs.length - 1; i++) {
|
|
||||||
trs[i].className = (/sqlite/.test(driver.value) ? 'hidden' : '');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var dbCtrl;
|
|
||||||
var dbPrevious;
|
|
||||||
|
|
||||||
/** Check if database should be opened to a new window
|
|
||||||
* @param MouseEvent
|
|
||||||
* @param HTMLSelectElement
|
|
||||||
*/
|
|
||||||
function dbMouseDown(event, el) {
|
|
||||||
dbCtrl = isCtrl(event);
|
|
||||||
if (dbPrevious == undefined) {
|
|
||||||
dbPrevious = el.value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Load database after selecting it
|
|
||||||
* @param HTMLSelectElement
|
|
||||||
*/
|
|
||||||
function dbChange(el) {
|
|
||||||
if (dbCtrl) {
|
|
||||||
el.form.target = '_blank';
|
|
||||||
}
|
|
||||||
el.form.submit();
|
|
||||||
el.form.target = '';
|
|
||||||
if (dbCtrl && dbPrevious != undefined) {
|
|
||||||
el.value = dbPrevious;
|
|
||||||
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
|
|
||||||
* @param HTMLFormElement
|
|
||||||
*/
|
|
||||||
function selectFieldChange(form) {
|
|
||||||
var ok = (function () {
|
|
||||||
var inputs = form.getElementsByTagName('input');
|
|
||||||
for (var i=0; i < inputs.length; i++) {
|
|
||||||
if (inputs[i].value && /^fulltext/.test(inputs[i].name)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var ok = form.limit.value;
|
|
||||||
var selects = form.getElementsByTagName('select');
|
|
||||||
var group = false;
|
|
||||||
var columns = {};
|
|
||||||
for (var i=0; i < selects.length; i++) {
|
|
||||||
var select = selects[i];
|
|
||||||
var col = selectValue(select);
|
|
||||||
var match = /^(where.+)col\]/.exec(select.name);
|
|
||||||
if (match) {
|
|
||||||
var op = selectValue(form[match[1] + 'op]']);
|
|
||||||
var val = form[match[1] + 'val]'].value;
|
|
||||||
if (col in indexColumns && (!/LIKE|REGEXP/.test(op) || (op == 'LIKE' && val.charAt(0) != '%'))) {
|
|
||||||
return true;
|
|
||||||
} else if (col || val) {
|
|
||||||
ok = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ((match = /^(columns.+)fun\]/.exec(select.name))) {
|
|
||||||
if (/^(avg|count|count distinct|group_concat|max|min|sum)$/.test(col)) {
|
|
||||||
group = true;
|
|
||||||
}
|
|
||||||
var val = selectValue(form[match[1] + 'col]']);
|
|
||||||
if (val) {
|
|
||||||
columns[col && col != 'count' ? '' : val] = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (col && /^order/.test(select.name)) {
|
|
||||||
if (!(col in indexColumns)) {
|
|
||||||
ok = false;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (group) {
|
|
||||||
for (var col in columns) {
|
|
||||||
if (!(col in indexColumns)) {
|
|
||||||
ok = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 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;
|
||||||
|
|
||||||
/** Check if val is equal to a-delimiter-b where delimiter is '_', '' or big letter
|
/** Escape string to use in regular expression
|
||||||
* @param string
|
* @param string
|
||||||
* @param string
|
* @return string
|
||||||
* @param string
|
|
||||||
* @return boolean
|
|
||||||
*/
|
*/
|
||||||
function delimiterEqual(val, a, b) {
|
function reEscape(s) {
|
||||||
return (val == a + '_' + b || val == a + b || val == a + b.charAt(0).toUpperCase() + b.substr(1));
|
return s.replace(/[\[\]\\^$*+?.(){|}]/, '\\$&');
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Escape string to use as identifier
|
/** Escape string to use as identifier
|
||||||
@@ -252,28 +93,33 @@ function editingNameChange(field) {
|
|||||||
var name = field.name.substr(0, field.name.length - 7);
|
var name = field.name.substr(0, field.name.length - 7);
|
||||||
var type = formField(field.form, name + '[type]');
|
var type = formField(field.form, name + '[type]');
|
||||||
var opts = type.options;
|
var opts = type.options;
|
||||||
|
var table = reEscape(field.value);
|
||||||
|
var column = '';
|
||||||
|
var match;
|
||||||
|
if ((match = /(.+)_(.+)/.exec(table)) || (match = /(.*[a-z])([A-Z].*)/.exec(table))) { // limited to single word columns
|
||||||
|
table = match[1];
|
||||||
|
column = match[2];
|
||||||
|
}
|
||||||
|
var plural = '(?:e?s)?';
|
||||||
|
var tabCol = table + plural + '_?' + column;
|
||||||
|
var re = new RegExp('(^' + idfEscape(table + plural) + '`' + idfEscape(column) + '$' // table_column
|
||||||
|
+ '|^' + idfEscape(tabCol) + '`' // table
|
||||||
|
+ '|^' + idfEscape(column + plural) + '`' + idfEscape(table) + '$' // column_table
|
||||||
|
+ ')|`' + idfEscape(tabCol) + '$' // column
|
||||||
|
, 'i');
|
||||||
var candidate; // don't select anything with ambiguous match (like column `id`)
|
var candidate; // don't select anything with ambiguous match (like column `id`)
|
||||||
var val = field.value;
|
|
||||||
for (var i = opts.length; i--; ) {
|
for (var i = opts.length; i--; ) {
|
||||||
var match = /(.+)`(.+)/.exec(opts[i].value);
|
if (!/`/.test(opts[i].value)) { // common type
|
||||||
if (!match) { // common type
|
if (i == opts.length - 2 && candidate && !match[1] && name == 'fields[1]') { // single target table, link to column, first field - probably `id`
|
||||||
if (candidate && i == opts.length - 2 && val == opts[candidate].value.replace(/.+`/, '') && name == 'fields[1]') { // single target table, link to column, first field - probably `id`
|
return false;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
var table = match[1];
|
if (match = re.exec(opts[i].value)) {
|
||||||
var column = match[2];
|
if (candidate) {
|
||||||
var tables = [ table, table.replace(/s$/, ''), table.replace(/es$/, '') ];
|
return false;
|
||||||
for (var j=0; j < tables.length; j++) {
|
|
||||||
table = tables[j];
|
|
||||||
if (val == column || val == table || delimiterEqual(val, table, column) || delimiterEqual(val, column, table)) {
|
|
||||||
if (candidate) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
candidate = i;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
candidate = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (candidate) {
|
if (candidate) {
|
||||||
@@ -285,12 +131,16 @@ function editingNameChange(field) {
|
|||||||
/** Add table row for next field
|
/** Add table row for next field
|
||||||
* @param HTMLInputElement
|
* @param HTMLInputElement
|
||||||
* @param boolean
|
* @param boolean
|
||||||
|
* @param boolean
|
||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
function editingAddRow(button, focus) {
|
function editingAddRow(button, allowed, focus) {
|
||||||
var match = /(\d+)(\.\d+)?/.exec(button.name);
|
if (allowed && rowCount >= allowed) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var match = /([0-9]+)(\.[0-9]+)?/.exec(button.name);
|
||||||
var x = match[0] + (match[2] ? added.substr(match[2].length) : added) + '1';
|
var x = match[0] + (match[2] ? added.substr(match[2].length) : added) + '1';
|
||||||
var row = parentTag(button, 'tr');
|
var row = button.parentNode.parentNode;
|
||||||
var row2 = row.cloneNode(true);
|
var row2 = row.cloneNode(true);
|
||||||
var tags = row.getElementsByTagName('select');
|
var tags = row.getElementsByTagName('select');
|
||||||
var tags2 = row2.getElementsByTagName('select');
|
var tags2 = row2.getElementsByTagName('select');
|
||||||
@@ -336,7 +186,7 @@ function editingAddRow(button, focus) {
|
|||||||
function editingRemoveRow(button) {
|
function editingRemoveRow(button) {
|
||||||
var field = formField(button.form, button.name.replace(/drop_col(.+)/, 'fields$1[field]'));
|
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';
|
button.parentNode.parentNode.style.display = 'none';
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -365,9 +215,6 @@ function editingTypeChange(type) {
|
|||||||
if (el.name == name + '[unsigned]') {
|
if (el.name == name + '[unsigned]') {
|
||||||
el.className = (/(int|float|double|decimal)$/.test(text) ? '' : 'hidden');
|
el.className = (/(int|float|double|decimal)$/.test(text) ? '' : 'hidden');
|
||||||
}
|
}
|
||||||
if (el.name == name + '[on_update]') {
|
|
||||||
el.className = (text == 'timestamp' ? '' : 'hidden');
|
|
||||||
}
|
|
||||||
if (el.name == name + '[on_delete]') {
|
if (el.name == name + '[on_delete]') {
|
||||||
el.className = (/`/.test(text) ? '' : 'hidden');
|
el.className = (/`/.test(text) ? '' : 'hidden');
|
||||||
}
|
}
|
||||||
@@ -412,15 +259,6 @@ function columnShow(checked, column) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Hide column with default values in narrow window
|
|
||||||
*/
|
|
||||||
function editingHideDefaults() {
|
|
||||||
if (innerWidth < document.documentElement.scrollWidth) {
|
|
||||||
document.getElementById('defaults').checked = false;
|
|
||||||
columnShow(false, 5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Display partition options
|
/** Display partition options
|
||||||
* @param HTMLSelectElement
|
* @param HTMLSelectElement
|
||||||
*/
|
*/
|
||||||
@@ -434,9 +272,9 @@ function partitionByChange(el) {
|
|||||||
* @param HTMLInputElement
|
* @param HTMLInputElement
|
||||||
*/
|
*/
|
||||||
function partitionNameChange(el) {
|
function partitionNameChange(el) {
|
||||||
var row = parentTag(el, 'tr').cloneNode(true);
|
var row = el.parentNode.parentNode.cloneNode(true);
|
||||||
row.firstChild.firstChild.value = '';
|
row.firstChild.firstChild.value = '';
|
||||||
parentTag(el, 'table').appendChild(row);
|
el.parentNode.parentNode.parentNode.appendChild(row);
|
||||||
el.onchange = function () {};
|
el.onchange = function () {};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -446,14 +284,14 @@ function partitionNameChange(el) {
|
|||||||
* @param HTMLSelectElement
|
* @param HTMLSelectElement
|
||||||
*/
|
*/
|
||||||
function foreignAddRow(field) {
|
function foreignAddRow(field) {
|
||||||
field.onchange = function () { };
|
var row = field.parentNode.parentNode.cloneNode(true);
|
||||||
var row = parentTag(field, 'tr').cloneNode(true);
|
|
||||||
var selects = row.getElementsByTagName('select');
|
var selects = row.getElementsByTagName('select');
|
||||||
for (var i=0; i < selects.length; i++) {
|
for (var i=0; i < selects.length; i++) {
|
||||||
selects[i].name = selects[i].name.replace(/\]/, '1$&');
|
selects[i].name = selects[i].name.replace(/\]/, '1$&');
|
||||||
selects[i].selectedIndex = 0;
|
selects[i].selectedIndex = 0;
|
||||||
}
|
}
|
||||||
parentTag(field, 'table').appendChild(row);
|
field.parentNode.parentNode.parentNode.appendChild(row);
|
||||||
|
field.onchange = function () { };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -462,75 +300,50 @@ function foreignAddRow(field) {
|
|||||||
* @param HTMLSelectElement
|
* @param HTMLSelectElement
|
||||||
*/
|
*/
|
||||||
function indexesAddRow(field) {
|
function indexesAddRow(field) {
|
||||||
field.onchange = function () { };
|
var row = field.parentNode.parentNode.cloneNode(true);
|
||||||
var row = parentTag(field, 'tr').cloneNode(true);
|
var spans = row.getElementsByTagName('span');
|
||||||
|
for (var i=0; i < spans.length - 1; i++) {
|
||||||
|
row.removeChild(spans[i]);
|
||||||
|
}
|
||||||
var selects = row.getElementsByTagName('select');
|
var selects = row.getElementsByTagName('select');
|
||||||
for (var i=0; i < selects.length; i++) {
|
for (var i=0; i < selects.length; i++) {
|
||||||
selects[i].name = selects[i].name.replace(/indexes\[\d+/, '$&1');
|
selects[i].name = selects[i].name.replace(/indexes\[[0-9]+/, '$&1');
|
||||||
selects[i].selectedIndex = 0;
|
selects[i].selectedIndex = 0;
|
||||||
}
|
}
|
||||||
var inputs = row.getElementsByTagName('input');
|
var input = row.getElementsByTagName('input')[0];
|
||||||
for (var i=0; i < inputs.length; i++) {
|
input.name = input.name.replace(/indexes\[[0-9]+/, '$&1');
|
||||||
inputs[i].name = inputs[i].name.replace(/indexes\[\d+/, '$&1');
|
input.value = '';
|
||||||
inputs[i].value = '';
|
field.parentNode.parentNode.parentNode.appendChild(row);
|
||||||
}
|
field.onchange = function () { };
|
||||||
parentTag(field, 'table').appendChild(row);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Change column in index
|
|
||||||
* @param HTMLSelectElement
|
|
||||||
* @param string name prefix
|
|
||||||
*/
|
|
||||||
function indexesChangeColumn(field, prefix) {
|
|
||||||
var columns = parentTag(field, 'td').getElementsByTagName('select');
|
|
||||||
var names = [];
|
|
||||||
for (var i=0; i < columns.length; i++) {
|
|
||||||
var value = selectValue(columns[i]);
|
|
||||||
if (value) {
|
|
||||||
names.push(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
field.form[field.name.replace(/\].*/, '][name]')].value = prefix + names.join('_');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Add column for index
|
/** Add column for index
|
||||||
* @param HTMLSelectElement
|
* @param HTMLSelectElement
|
||||||
* @param string name prefix
|
|
||||||
*/
|
*/
|
||||||
function indexesAddColumn(field, prefix) {
|
function indexesAddColumn(field) {
|
||||||
field.onchange = function () {
|
|
||||||
indexesChangeColumn(field, prefix);
|
|
||||||
};
|
|
||||||
var select = field.form[field.name.replace(/\].*/, '][type]')];
|
|
||||||
if (!select.selectedIndex) {
|
|
||||||
select.selectedIndex = 3;
|
|
||||||
select.onchange();
|
|
||||||
}
|
|
||||||
var column = field.parentNode.cloneNode(true);
|
var column = field.parentNode.cloneNode(true);
|
||||||
select = column.getElementsByTagName('select')[0];
|
var select = column.getElementsByTagName('select')[0];
|
||||||
select.name = select.name.replace(/\]\[\d+/, '$&1');
|
select.name = select.name.replace(/\]\[[0-9]+/, '$&1');
|
||||||
select.selectedIndex = 0;
|
select.selectedIndex = 0;
|
||||||
var input = column.getElementsByTagName('input')[0];
|
var input = column.getElementsByTagName('input')[0];
|
||||||
input.name = input.name.replace(/\]\[\d+/, '$&1');
|
input.name = input.name.replace(/\]\[[0-9]+/, '$&1');
|
||||||
input.value = '';
|
input.value = '';
|
||||||
parentTag(field, 'td').appendChild(column);
|
field.parentNode.parentNode.appendChild(column);
|
||||||
field.onchange();
|
field.onchange = function () { };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var that, x, y; // em and tablePos defined in schema.inc.php
|
var that, x, y, em, tablePos;
|
||||||
|
|
||||||
/** Get mouse position
|
/** Get mouse position
|
||||||
* @param HTMLElement
|
* @param HTMLElement
|
||||||
* @param MouseEvent
|
* @param MouseEvent
|
||||||
*/
|
*/
|
||||||
function schemaMousedown(el, event) {
|
function schemaMousedown(el, event) {
|
||||||
if ((event.which ? event.which : event.button) == 1) {
|
that = el;
|
||||||
that = el;
|
x = event.clientX - el.offsetLeft;
|
||||||
x = event.clientX - el.offsetLeft;
|
y = event.clientY - el.offsetTop;
|
||||||
y = event.clientY - el.offsetTop;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Move object
|
/** Move object
|
||||||
@@ -545,9 +358,10 @@ function schemaMousemove(ev) {
|
|||||||
var lineSet = { };
|
var lineSet = { };
|
||||||
for (var i=0; i < divs.length; i++) {
|
for (var i=0; i < divs.length; i++) {
|
||||||
if (divs[i].className == 'references') {
|
if (divs[i].className == 'references') {
|
||||||
var div2 = document.getElementById((/^refs/.test(divs[i].id) ? 'refd' : 'refs') + divs[i].id.substr(4));
|
var div2 = document.getElementById((divs[i].id.substr(0, 4) == 'refs' ? 'refd' : 'refs') + divs[i].id.substr(4));
|
||||||
var ref = (tablePos[divs[i].title] ? tablePos[divs[i].title] : [ div2.parentNode.offsetTop / em, 0 ]);
|
var ref = (tablePos[divs[i].title] ? tablePos[divs[i].title] : [ div2.parentNode.offsetTop / em, 0 ]);
|
||||||
var left1 = -1;
|
var left1 = -1;
|
||||||
|
var isTop = true;
|
||||||
var id = divs[i].id.replace(/^ref.(.+)-.+/, '$1');
|
var id = divs[i].id.replace(/^ref.(.+)-.+/, '$1');
|
||||||
if (divs[i].parentNode != div2.parentNode) {
|
if (divs[i].parentNode != div2.parentNode) {
|
||||||
left1 = Math.min(0, ref[1] - left) - 1;
|
left1 = Math.min(0, ref[1] - left) - 1;
|
||||||
@@ -556,17 +370,19 @@ function schemaMousemove(ev) {
|
|||||||
var left2 = Math.min(0, left - ref[1]) - 1;
|
var left2 = Math.min(0, left - ref[1]) - 1;
|
||||||
div2.style.left = left2 + 'em';
|
div2.style.left = left2 + 'em';
|
||||||
div2.getElementsByTagName('div')[0].style.width = -left2 + 'em';
|
div2.getElementsByTagName('div')[0].style.width = -left2 + 'em';
|
||||||
|
isTop = (div2.offsetTop + ref[0] * em > divs[i].offsetTop + top * em);
|
||||||
}
|
}
|
||||||
if (!lineSet[id]) {
|
if (!lineSet[id]) {
|
||||||
var line = document.getElementById(divs[i].id.replace(/^....(.+)-.+$/, 'refl$1'));
|
var line = document.getElementById(divs[i].id.replace(/^....(.+)-[0-9]+$/, 'refl$1'));
|
||||||
var top1 = top + divs[i].offsetTop / em;
|
var shift = ev.clientY - y - that.offsetTop;
|
||||||
var top2 = top + div2.offsetTop / em;
|
|
||||||
if (divs[i].parentNode != div2.parentNode) {
|
|
||||||
top2 += ref[0] - top;
|
|
||||||
line.getElementsByTagName('div')[0].style.height = Math.abs(top1 - top2) + 'em';
|
|
||||||
}
|
|
||||||
line.style.left = (left + left1) + 'em';
|
line.style.left = (left + left1) + 'em';
|
||||||
line.style.top = Math.min(top1, top2) + 'em';
|
if (isTop) {
|
||||||
|
line.style.top = (line.offsetTop + shift) / em + 'em';
|
||||||
|
}
|
||||||
|
if (divs[i].parentNode != div2.parentNode) {
|
||||||
|
line = line.getElementsByTagName('div')[0];
|
||||||
|
line.style.height = (line.offsetHeight + (isTop ? -1 : 1) * shift) / em + 'em';
|
||||||
|
}
|
||||||
lineSet[id] = true;
|
lineSet[id] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -578,9 +394,8 @@ function schemaMousemove(ev) {
|
|||||||
|
|
||||||
/** Finish move
|
/** Finish move
|
||||||
* @param MouseEvent
|
* @param MouseEvent
|
||||||
* @param string
|
|
||||||
*/
|
*/
|
||||||
function schemaMouseup(ev, db) {
|
function schemaMouseup(ev) {
|
||||||
if (that !== undefined) {
|
if (that !== undefined) {
|
||||||
ev = ev || event;
|
ev = ev || event;
|
||||||
tablePos[that.firstChild.firstChild.firstChild.data] = [ (ev.clientY - y) / em, (ev.clientX - x) / em ];
|
tablePos[that.firstChild.firstChild.firstChild.data] = [ (ev.clientY - y) / em, (ev.clientX - x) / em ];
|
||||||
@@ -589,9 +404,6 @@ function schemaMouseup(ev, db) {
|
|||||||
for (var key in tablePos) {
|
for (var key in tablePos) {
|
||||||
s += '_' + key + ':' + Math.round(tablePos[key][0] * 10000) / 10000 + 'x' + Math.round(tablePos[key][1] * 10000) / 10000;
|
s += '_' + key + ':' + Math.round(tablePos[key][0] * 10000) / 10000 + 'x' + Math.round(tablePos[key][1] * 10000) / 10000;
|
||||||
}
|
}
|
||||||
s = encodeURIComponent(s.substr(1));
|
cookie('adminer_schema=' + encodeURIComponent(s.substr(1)), 30, '; path="' + location.pathname + location.search + '"');
|
||||||
var link = document.getElementById('schema-link');
|
|
||||||
link.href = link.href.replace(/[^=]+$/, '') + s;
|
|
||||||
cookie('adminer_schema-' + db + '=' + s, 30); //! special chars in db
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 318 B After Width: | Height: | Size: 318 B |
@@ -1,3 +1,5 @@
|
|||||||
|
// to hide elements displayed by JavaScript
|
||||||
|
document.body.className = 'js';
|
||||||
|
|
||||||
/** Toggle visibility
|
/** Toggle visibility
|
||||||
* @param string
|
* @param string
|
||||||
@@ -14,51 +16,22 @@ function toggle(id) {
|
|||||||
* @param number
|
* @param number
|
||||||
* @param string optional
|
* @param string optional
|
||||||
*/
|
*/
|
||||||
function cookie(assign, days) {
|
function cookie(assign, days, params) {
|
||||||
var date = new Date();
|
var date = new Date();
|
||||||
date.setDate(date.getDate() + days);
|
date.setDate(date.getDate() + days);
|
||||||
document.cookie = assign + '; expires=' + date;
|
document.cookie = assign + '; expires=' + date + (params || '');
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Verify current Adminer version
|
/** Verify current Adminer version
|
||||||
|
* @param string 'http' or 'https'
|
||||||
*/
|
*/
|
||||||
function verifyVersion() {
|
function verifyVersion(protocol) {
|
||||||
cookie('adminer_version=0', 1);
|
cookie('adminer_version=0', 1);
|
||||||
var script = document.createElement('script');
|
var script = document.createElement('script');
|
||||||
script.src = location.protocol + '//www.adminer.org/version.php';
|
script.src = protocol + '://www.adminer.org/version.php';
|
||||||
document.body.appendChild(script);
|
document.body.appendChild(script);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get value of select
|
|
||||||
* @param HTMLSelectElement
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function selectValue(select) {
|
|
||||||
var selected = select.options[select.selectedIndex];
|
|
||||||
return ((selected.attributes.value || {}).specified ? selected.value : selected.text);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Get parent node with specified tag name.
|
|
||||||
* @param HTMLElement
|
|
||||||
* @param string regular expression
|
|
||||||
* @return HTMLElement
|
|
||||||
*/
|
|
||||||
function parentTag(el, tag) {
|
|
||||||
var re = new RegExp('^' + tag + '$', 'i');
|
|
||||||
while (el && !re.test(el.tagName)) {
|
|
||||||
el = el.parentNode;
|
|
||||||
}
|
|
||||||
return el;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Set checked class
|
|
||||||
* @param HTMLInputElement
|
|
||||||
*/
|
|
||||||
function trCheck(el) {
|
|
||||||
var tr = parentTag(el, 'tr');
|
|
||||||
tr.className = tr.className.replace(/(^|\s)checked(\s|$)/, '$2') + (el.checked ? ' checked' : '');
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Check all elements matching given name
|
/** Check all elements matching given name
|
||||||
* @param HTMLInputElement
|
* @param HTMLInputElement
|
||||||
* @param RegExp
|
* @param RegExp
|
||||||
@@ -68,21 +41,6 @@ function formCheck(el, name) {
|
|||||||
for (var i=0; i < elems.length; i++) {
|
for (var i=0; i < elems.length; i++) {
|
||||||
if (name.test(elems[i].name)) {
|
if (name.test(elems[i].name)) {
|
||||||
elems[i].checked = el.checked;
|
elems[i].checked = el.checked;
|
||||||
trCheck(elems[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Check all rows in <table class="checkable">
|
|
||||||
*/
|
|
||||||
function tableCheck() {
|
|
||||||
var tables = document.getElementsByTagName('table');
|
|
||||||
for (var i=0; i < tables.length; i++) {
|
|
||||||
if (/(^|\s)checkable(\s|$)/.test(tables[i].className)) {
|
|
||||||
var trs = tables[i].getElementsByTagName('tr');
|
|
||||||
for (var j=0; j < trs.length; j++) {
|
|
||||||
trCheck(trs[j].firstChild.firstChild);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -91,9 +49,7 @@ function tableCheck() {
|
|||||||
* @param string
|
* @param string
|
||||||
*/
|
*/
|
||||||
function formUncheck(id) {
|
function formUncheck(id) {
|
||||||
var el = document.getElementById(id);
|
document.getElementById(id).checked = false;
|
||||||
el.checked = false;
|
|
||||||
trCheck(el);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get number of checked elements matching given name
|
/** Get number of checked elements matching given name
|
||||||
@@ -114,61 +70,18 @@ function formChecked(el, name) {
|
|||||||
|
|
||||||
/** Select clicked row
|
/** Select clicked row
|
||||||
* @param MouseEvent
|
* @param MouseEvent
|
||||||
* @param [boolean] force click
|
|
||||||
*/
|
*/
|
||||||
function tableClick(event, click) {
|
function tableClick(event) {
|
||||||
click = (click || !window.getSelection || getSelection().isCollapsed);
|
|
||||||
var el = event.target || event.srcElement;
|
var el = event.target || event.srcElement;
|
||||||
while (!/^tr$/i.test(el.tagName)) {
|
while (!/^tr$/i.test(el.tagName)) {
|
||||||
if (/^(table|a|input|textarea)$/i.test(el.tagName)) {
|
if (/^(table|a|input|textarea)$/i.test(el.tagName)) {
|
||||||
if (el.type != 'checkbox') {
|
return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
checkboxClick(event, el);
|
|
||||||
click = false;
|
|
||||||
}
|
}
|
||||||
el = el.parentNode;
|
el = el.parentNode;
|
||||||
}
|
}
|
||||||
el = el.firstChild.firstChild;
|
el = el.firstChild.firstChild;
|
||||||
if (click) {
|
el.click && el.click();
|
||||||
el.checked = !el.checked;
|
el.onclick && el.onclick();
|
||||||
el.onclick && el.onclick();
|
|
||||||
}
|
|
||||||
trCheck(el);
|
|
||||||
}
|
|
||||||
|
|
||||||
var lastChecked;
|
|
||||||
|
|
||||||
/** Shift-click on checkbox for multiple selection.
|
|
||||||
* @param MouseEvent
|
|
||||||
* @param HTMLInputElement
|
|
||||||
*/
|
|
||||||
function checkboxClick(event, el) {
|
|
||||||
if (!el.name) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (event.shiftKey && (!lastChecked || lastChecked.name == el.name)) {
|
|
||||||
var checked = (lastChecked ? lastChecked.checked : true);
|
|
||||||
var inputs = parentTag(el, 'table').getElementsByTagName('input');
|
|
||||||
var checking = !lastChecked;
|
|
||||||
for (var i=0; i < inputs.length; i++) {
|
|
||||||
var input = inputs[i];
|
|
||||||
if (input.name === el.name) {
|
|
||||||
if (checking) {
|
|
||||||
input.checked = checked;
|
|
||||||
trCheck(input);
|
|
||||||
}
|
|
||||||
if (input === el || input === lastChecked) {
|
|
||||||
if (checking) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
checking = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
lastChecked = el;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Set HTML code of an element
|
/** Set HTML code of an element
|
||||||
@@ -186,242 +99,26 @@ function setHtml(id, html) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Find node position
|
|
||||||
* @param Node
|
|
||||||
* @return number
|
|
||||||
*/
|
|
||||||
function nodePosition(el) {
|
|
||||||
var pos = 0;
|
|
||||||
while (el = el.previousSibling) {
|
|
||||||
pos++;
|
|
||||||
}
|
|
||||||
return pos;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Go to the specified page
|
|
||||||
* @param string
|
|
||||||
* @param string
|
|
||||||
* @param [MouseEvent]
|
|
||||||
*/
|
|
||||||
function pageClick(href, page, event) {
|
|
||||||
if (!isNaN(page) && page) {
|
|
||||||
href += (page != 1 ? '&page=' + (page - 1) : '');
|
|
||||||
location.href = href;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Display items in menu
|
|
||||||
* @param HTMLElement
|
|
||||||
* @param MouseEvent
|
|
||||||
*/
|
|
||||||
function menuOver(el, event) {
|
|
||||||
var a = event.target;
|
|
||||||
if (/^a$/i.test(a.tagName) && a.offsetLeft + a.offsetWidth > a.parentNode.offsetWidth - 15) { // 15 - ellipsis
|
|
||||||
el.style.overflow = 'visible';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Hide items in menu
|
|
||||||
* @param HTMLElement
|
|
||||||
*/
|
|
||||||
function menuOut(el) {
|
|
||||||
el.style.overflow = 'auto';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Add row in select fieldset
|
/** Add row in select fieldset
|
||||||
* @param HTMLSelectElement
|
* @param HTMLSelectElement
|
||||||
*/
|
*/
|
||||||
function selectAddRow(field) {
|
function selectAddRow(field) {
|
||||||
field.onchange = function () {
|
|
||||||
selectFieldChange(field.form);
|
|
||||||
};
|
|
||||||
field.onchange();
|
|
||||||
var row = field.parentNode.cloneNode(true);
|
var row = field.parentNode.cloneNode(true);
|
||||||
var selects = row.getElementsByTagName('select');
|
var selects = row.getElementsByTagName('select');
|
||||||
for (var i=0; i < selects.length; i++) {
|
for (var i=0; i < selects.length; i++) {
|
||||||
selects[i].name = selects[i].name.replace(/[a-z]\[\d+/, '$&1');
|
selects[i].name = selects[i].name.replace(/[a-z]\[[0-9]+/, '$&1');
|
||||||
selects[i].selectedIndex = 0;
|
selects[i].selectedIndex = 0;
|
||||||
}
|
}
|
||||||
var inputs = row.getElementsByTagName('input');
|
var inputs = row.getElementsByTagName('input');
|
||||||
if (inputs.length) {
|
if (inputs.length) {
|
||||||
inputs[0].name = inputs[0].name.replace(/[a-z]\[\d+/, '$&1');
|
inputs[0].name = inputs[0].name.replace(/[a-z]\[[0-9]+/, '$&1');
|
||||||
inputs[0].value = '';
|
inputs[0].value = '';
|
||||||
inputs[0].className = '';
|
inputs[0].className = '';
|
||||||
}
|
}
|
||||||
field.parentNode.parentNode.appendChild(row);
|
field.parentNode.parentNode.appendChild(row);
|
||||||
}
|
field.onchange = function () { };
|
||||||
|
|
||||||
/** Clear column name after resetting search
|
|
||||||
* @param HTMLInputElement
|
|
||||||
*/
|
|
||||||
function selectSearch(el) {
|
|
||||||
if (!el.value) {
|
|
||||||
el.parentNode.firstChild.selectedIndex = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Toggles column context menu
|
|
||||||
* @param HTMLElement
|
|
||||||
* @param [string] extra class name
|
|
||||||
*/
|
|
||||||
function columnMouse(el, className) {
|
|
||||||
var spans = el.getElementsByTagName('span');
|
|
||||||
for (var i=0; i < spans.length; i++) {
|
|
||||||
if (/column/.test(spans[i].className)) {
|
|
||||||
spans[i].className = 'column' + (className || '');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Fill column in search field
|
|
||||||
* @param string
|
|
||||||
*/
|
|
||||||
function selectSearch(name) {
|
|
||||||
var el = document.getElementById('fieldset-search');
|
|
||||||
el.className = '';
|
|
||||||
var divs = el.getElementsByTagName('div');
|
|
||||||
for (var i=0; i < divs.length; i++) {
|
|
||||||
var div = divs[i];
|
|
||||||
if (/select/i.test(div.firstChild.tagName) && selectValue(div.firstChild) == name) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (i == divs.length) {
|
|
||||||
div.firstChild.value = name;
|
|
||||||
div.firstChild.onchange();
|
|
||||||
}
|
|
||||||
div.lastChild.focus();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/** Check if Ctrl key (Command key on Mac) was pressed
|
|
||||||
* @param KeyboardEvent|MouseEvent
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
function isCtrl(event) {
|
|
||||||
return (event.ctrlKey || event.metaKey) && !event.altKey; // shiftKey allowed
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Send form by Ctrl+Enter on <select> and <textarea>
|
|
||||||
* @param KeyboardEvent
|
|
||||||
* @param [string]
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
function bodyKeydown(event, button) {
|
|
||||||
var target = event.target || event.srcElement;
|
|
||||||
if (isCtrl(event) && (event.keyCode == 13 || event.keyCode == 10) && /select|textarea|input/i.test(target.tagName)) { // 13|10 - Enter
|
|
||||||
target.blur();
|
|
||||||
if (button) {
|
|
||||||
target.form[button].click();
|
|
||||||
} else {
|
|
||||||
target.form.submit();
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Open form to a new window on Ctrl+click or Shift+click
|
|
||||||
* @param MouseEvent
|
|
||||||
*/
|
|
||||||
function bodyClick(event) {
|
|
||||||
var target = event.target || event.srcElement;
|
|
||||||
if ((isCtrl(event) || event.shiftKey) && target.type == 'submit' && /input/i.test(target.tagName)) {
|
|
||||||
target.form.target = '_blank';
|
|
||||||
setTimeout(function () {
|
|
||||||
// if (isCtrl(event)) { focus(); } doesn't work
|
|
||||||
target.form.target = '';
|
|
||||||
}, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Change focus by Ctrl+Up or Ctrl+Down
|
|
||||||
* @param KeyboardEvent
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
function editingKeydown(event) {
|
|
||||||
if ((event.keyCode == 40 || event.keyCode == 38) && isCtrl(event)) { // 40 - Down, 38 - Up
|
|
||||||
var target = event.target || event.srcElement;
|
|
||||||
var sibling = (event.keyCode == 40 ? 'nextSibling' : 'previousSibling');
|
|
||||||
var el = target.parentNode.parentNode[sibling];
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (event.shiftKey && !bodyKeydown(event, 'insert')) {
|
|
||||||
eventStop(event);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Disable maxlength for functions
|
|
||||||
* @param HTMLSelectElement
|
|
||||||
*/
|
|
||||||
function functionChange(select) {
|
|
||||||
var input = select.form[select.name.replace(/^function/, 'fields')];
|
|
||||||
if (selectValue(select)) {
|
|
||||||
if (input.origMaxLength === undefined) {
|
|
||||||
input.origMaxLength = input.maxLength;
|
|
||||||
}
|
|
||||||
input.removeAttribute('maxlength');
|
|
||||||
} else if (input.origMaxLength >= 0) {
|
|
||||||
input.maxLength = input.origMaxLength;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Create AJAX request
|
|
||||||
* @param string
|
|
||||||
* @param function (XMLHttpRequest)
|
|
||||||
* @param [string]
|
|
||||||
* @return XMLHttpRequest or false in case of an error
|
|
||||||
*/
|
|
||||||
function ajax(url, callback, data) {
|
|
||||||
var request = (window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : false));
|
|
||||||
if (request) {
|
|
||||||
request.open((data ? 'POST' : 'GET'), url);
|
|
||||||
if (data) {
|
|
||||||
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
|
||||||
}
|
|
||||||
request.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
|
|
||||||
request.onreadystatechange = function () {
|
|
||||||
if (request.readyState == 4) {
|
|
||||||
callback(request);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
request.send(data);
|
|
||||||
}
|
|
||||||
return request;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Use setHtml(key, value) for JSON response
|
|
||||||
* @param string
|
|
||||||
* @return XMLHttpRequest or false in case of an error
|
|
||||||
*/
|
|
||||||
function ajaxSetHtml(url) {
|
|
||||||
return ajax(url, function (request) {
|
|
||||||
if (request.status) {
|
|
||||||
var data = eval('(' + request.responseText + ')');
|
|
||||||
for (var key in data) {
|
|
||||||
setHtml(key, data[key]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -429,31 +126,15 @@ function ajaxSetHtml(url) {
|
|||||||
/** Display edit field
|
/** Display edit field
|
||||||
* @param HTMLElement
|
* @param HTMLElement
|
||||||
* @param MouseEvent
|
* @param MouseEvent
|
||||||
* @param number display textarea instead of input, 2 - load long text
|
* @param boolean display textarea instead of input
|
||||||
* @param string warning to display
|
|
||||||
*/
|
*/
|
||||||
function selectClick(td, event, text, warning) {
|
function selectDblClick(td, event, text) {
|
||||||
var target = event.target || event.srcElement;
|
|
||||||
if (!isCtrl(event) || /input|textarea/i.test(td.firstChild.tagName) || /^a$/i.test(target.tagName)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (warning) {
|
|
||||||
return alert(warning);
|
|
||||||
}
|
|
||||||
var original = td.innerHTML;
|
|
||||||
text = text || /\n/.test(original);
|
|
||||||
var input = document.createElement(text ? 'textarea' : 'input');
|
|
||||||
input.onkeydown = function (event) {
|
|
||||||
if (!event) {
|
|
||||||
event = window.event;
|
|
||||||
}
|
|
||||||
if (event.keyCode == 27 && !event.shiftKey && !event.altKey && !isCtrl(event)) { // 27 - Esc
|
|
||||||
td.innerHTML = original;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
var pos = event.rangeOffset;
|
var pos = event.rangeOffset;
|
||||||
var value = td.firstChild.alt || td.textContent || td.innerText;
|
var value = (td.firstChild.firstChild ? td.firstChild.firstChild.data : td.firstChild.data);
|
||||||
input.style.width = Math.max(td.clientWidth - 14, 20) + 'px'; // 14 = 2 * (td.border + td.padding + input.border)
|
var input = document.createElement(text ? 'textarea' : 'input');
|
||||||
|
input.name = td.id;
|
||||||
|
input.value = (value == '\u00A0' || td.getElementsByTagName('i').length ? '' : value); // or i - NULL
|
||||||
|
input.style.width = (td.clientWidth - 14) + 'px'; // 14 = 2 * (td.border + td.padding + input.border)
|
||||||
if (text) {
|
if (text) {
|
||||||
var rows = 1;
|
var rows = 1;
|
||||||
value.replace(/\n/g, function () {
|
value.replace(/\n/g, function () {
|
||||||
@@ -461,12 +142,9 @@ function selectClick(td, event, text, warning) {
|
|||||||
});
|
});
|
||||||
input.rows = rows;
|
input.rows = rows;
|
||||||
}
|
}
|
||||||
if (value == '\u00A0' || td.getElementsByTagName('i').length) { // or i - NULL
|
|
||||||
value = '';
|
|
||||||
}
|
|
||||||
if (document.selection) {
|
if (document.selection) {
|
||||||
var range = document.selection.createRange();
|
var range = document.selection.createRange();
|
||||||
range.moveToPoint(event.clientX, event.clientY);
|
range.moveToPoint(event.x, event.y);
|
||||||
var range2 = range.duplicate();
|
var range2 = range.duplicate();
|
||||||
range2.moveToElementText(td);
|
range2.moveToElementText(td);
|
||||||
range2.setEndPoint('EndToEnd', range);
|
range2.setEndPoint('EndToEnd', range);
|
||||||
@@ -475,64 +153,12 @@ function selectClick(td, event, text, warning) {
|
|||||||
td.innerHTML = '';
|
td.innerHTML = '';
|
||||||
td.appendChild(input);
|
td.appendChild(input);
|
||||||
input.focus();
|
input.focus();
|
||||||
if (text == 2) { // long text
|
|
||||||
return ajax(location.href + '&' + encodeURIComponent(td.id) + '=', function (request) {
|
|
||||||
if (request.status) {
|
|
||||||
input.value = request.responseText;
|
|
||||||
input.name = td.id;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
input.value = value;
|
|
||||||
input.name = td.id;
|
|
||||||
input.selectionStart = pos;
|
input.selectionStart = pos;
|
||||||
input.selectionEnd = pos;
|
input.selectionEnd = pos;
|
||||||
if (document.selection) {
|
if (document.selection) {
|
||||||
var range = document.selection.createRange();
|
var range = document.selection.createRange();
|
||||||
range.moveEnd('character', -input.value.length + pos);
|
range.moveStart('character', pos);
|
||||||
range.select();
|
range.select();
|
||||||
}
|
}
|
||||||
}
|
td.ondblclick = function () { };
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Load and display next page in select
|
|
||||||
* @param HTMLLinkElement
|
|
||||||
* @param string
|
|
||||||
* @param number
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
function selectLoadMore(a, limit, loading) {
|
|
||||||
var title = a.innerHTML;
|
|
||||||
var href = a.href;
|
|
||||||
a.innerHTML = loading;
|
|
||||||
if (href) {
|
|
||||||
a.removeAttribute('href');
|
|
||||||
return ajax(href, function (request) {
|
|
||||||
var tbody = document.createElement('tbody');
|
|
||||||
tbody.innerHTML = request.responseText;
|
|
||||||
document.getElementById('table').appendChild(tbody);
|
|
||||||
if (tbody.children.length < limit) {
|
|
||||||
a.parentNode.removeChild(a);
|
|
||||||
} else {
|
|
||||||
a.href = href.replace(/\d+$/, function (page) {
|
|
||||||
return +page + 1;
|
|
||||||
});
|
|
||||||
a.innerHTML = title;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Stop event propagation
|
|
||||||
* @param Event
|
|
||||||
*/
|
|
||||||
function eventStop(event) {
|
|
||||||
if (event.stopPropagation) {
|
|
||||||
event.stopPropagation();
|
|
||||||
} else {
|
|
||||||
event.cancelBubble = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,26 +6,21 @@ if (!$fields) {
|
|||||||
}
|
}
|
||||||
$table_status = ($fields ? table_status($TABLE) : array());
|
$table_status = ($fields ? table_status($TABLE) : array());
|
||||||
|
|
||||||
page_header(($fields && is_view($table_status) ? lang('View') : lang('Table')) . ": " . h($TABLE), $error);
|
page_header(($fields && $table_status["Engine"] == "VIEW" ? lang('View') : lang('Table')) . ": " . h($TABLE), $error);
|
||||||
$adminer->selectLinks($table_status);
|
$adminer->selectLinks($table_status);
|
||||||
$comment = $table_status["Comment"];
|
|
||||||
if ($comment != "") {
|
|
||||||
echo "<p>" . lang('Comment') . ": " . h($comment) . "\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($fields) {
|
if ($fields) {
|
||||||
echo "<table cellspacing='0'>\n";
|
echo "<table cellspacing='0'>\n";
|
||||||
echo "<thead><tr><th>" . lang('Column') . "<td>" . lang('Type') . (support("comment") ? "<td>" . lang('Comment') : "") . "</thead>\n";
|
echo "<thead><tr><th>" . lang('Column') . "<td>" . lang('Type') . (support("comment") ? "<td>" . lang('Comment') : "") . "</thead>\n";
|
||||||
foreach ($fields as $field) {
|
foreach ($fields as $field) {
|
||||||
echo "<tr" . odd() . "><th>" . h($field["field"]);
|
echo "<tr" . odd() . "><th>" . h($field["field"]);
|
||||||
echo "<td title='" . h($field["collation"]) . "'>" . h($field["full_type"]) . ($field["null"] ? " <i>NULL</i>" : "") . ($field["auto_increment"] ? " <i>" . lang('Auto Increment') . "</i>" : "");
|
echo "<td>" . h($field["full_type"]) . ($field["null"] ? " <i>NULL</i>" : "") . ($field["auto_increment"] ? " <i>" . lang('Auto Increment') . "</i>" : "");
|
||||||
echo (isset($field["default"]) ? " [<b>" . h($field["default"]) . "</b>]" : "");
|
|
||||||
echo (support("comment") ? "<td>" . nbsp($field["comment"]) : "");
|
echo (support("comment") ? "<td>" . nbsp($field["comment"]) : "");
|
||||||
echo "\n";
|
echo "\n";
|
||||||
}
|
}
|
||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
|
|
||||||
if (!is_view($table_status)) {
|
if ($table_status["Engine"] != "VIEW") {
|
||||||
echo "<h3>" . lang('Indexes') . "</h3>\n";
|
echo "<h3>" . lang('Indexes') . "</h3>\n";
|
||||||
$indexes = indexes($TABLE);
|
$indexes = indexes($TABLE);
|
||||||
if ($indexes) {
|
if ($indexes) {
|
||||||
@@ -49,16 +44,16 @@ if ($fields) {
|
|||||||
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') . ($jush != "sqlite" ? "<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) . "'>";
|
$link = ($foreign_key["db"] != "" ? "<strong>" . h($foreign_key["db"]) . "</strong>." : "") . h($foreign_key["table"]);
|
||||||
|
echo "<tr>";
|
||||||
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) : ME) . "table=" . urlencode($foreign_key["table"]) . "'>$link</a>";
|
||||||
. ($foreign_key["db"] != "" ? "<b>" . h($foreign_key["db"]) . "</b>." : "") . ($foreign_key["ns"] != "" ? "<b>" . h($foreign_key["ns"]) . "</b>." : "") . h($foreign_key["table"])
|
echo "(<em>" . implode("</em>, <em>", array_map('h', $foreign_key["target"])) . "</em>)";
|
||||||
. "</a>"
|
echo "<td>$foreign_key[on_delete]\n";
|
||||||
;
|
echo "<td>$foreign_key[on_update]\n";
|
||||||
echo "(<i>" . implode("</i>, <i>", array_map('h', $foreign_key["target"])) . "</i>)";
|
if ($jush != "sqlite") {
|
||||||
echo "<td>" . nbsp($foreign_key["on_delete"]) . "\n";
|
echo '<td><a href="' . h(ME . 'foreign=' . urlencode($TABLE) . '&name=' . urlencode($name)) . '">' . lang('Alter') . '</a>';
|
||||||
echo "<td>" . nbsp($foreign_key["on_update"]) . "\n";
|
}
|
||||||
echo ($jush == "sqlite" ? "" : '<td><a href="' . h(ME . 'foreign=' . urlencode($TABLE) . '&name=' . urlencode($name)) . '">' . lang('Alter') . '</a>');
|
|
||||||
}
|
}
|
||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,38 +2,43 @@
|
|||||||
$TABLE = $_GET["trigger"];
|
$TABLE = $_GET["trigger"];
|
||||||
$trigger_options = trigger_options();
|
$trigger_options = trigger_options();
|
||||||
$trigger_event = array("INSERT", "UPDATE", "DELETE");
|
$trigger_event = array("INSERT", "UPDATE", "DELETE");
|
||||||
$row = (array) trigger($_GET["name"]) + array("Trigger" => $TABLE . "_bi");
|
|
||||||
|
|
||||||
if ($_POST) {
|
$dropped = false;
|
||||||
if (!$error && in_array($_POST["Timing"], $trigger_options["Timing"]) && in_array($_POST["Event"], $trigger_event) && in_array($_POST["Type"], $trigger_options["Type"])) {
|
if ($_POST && !$error && in_array($_POST["Timing"], $trigger_options["Timing"]) && in_array($_POST["Event"], $trigger_event) && in_array($_POST["Type"], $trigger_options["Type"])) {
|
||||||
$on = " ON " . table($TABLE);
|
$timing_event = " $_POST[Timing] $_POST[Event]";
|
||||||
drop_create(
|
$on = " ON " . table($TABLE);
|
||||||
"DROP TRIGGER " . idf_escape($_GET["name"]) . ($jush == "pgsql" ? $on : ""),
|
$dropped = drop_create(
|
||||||
create_trigger($on, $_POST),
|
"DROP TRIGGER " . idf_escape($_GET["name"]) . ($jush == "pgsql" ? $on : ""),
|
||||||
create_trigger($on, $row + array("Type" => reset($trigger_options["Type"]))),
|
"CREATE TRIGGER " . idf_escape($_POST["Trigger"]) . ($jush == "mssql" ? $on . $timing_event : $timing_event . $on) . " $_POST[Type]\n$_POST[Statement]",
|
||||||
ME . "table=" . urlencode($TABLE),
|
ME . "table=" . urlencode($TABLE),
|
||||||
lang('Trigger has been dropped.'),
|
lang('Trigger has been dropped.'),
|
||||||
lang('Trigger has been altered.'),
|
lang('Trigger has been altered.'),
|
||||||
lang('Trigger has been created.'),
|
lang('Trigger has been created.'),
|
||||||
$_GET["name"]
|
$_GET["name"]
|
||||||
);
|
);
|
||||||
}
|
|
||||||
$row = $_POST;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
page_header(($_GET["name"] != "" ? lang('Alter trigger') . ": " . h($_GET["name"]) : lang('Create trigger')), $error, array("table" => $TABLE));
|
page_header(($_GET["name"] != "" ? lang('Alter trigger') . ": " . h($_GET["name"]) : lang('Create trigger')), $error, array("table" => $TABLE));
|
||||||
|
|
||||||
|
$row = array("Trigger" => $TABLE . "_bi");
|
||||||
|
if ($_POST) {
|
||||||
|
$row = $_POST;
|
||||||
|
} elseif ($_GET["name"] != "") {
|
||||||
|
$row = trigger($_GET["name"]);
|
||||||
|
}
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<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"], "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('Time'); ?><td><?php echo html_select("Timing", $trigger_options["Timing"], $row["Timing"], "if (/^" . h(preg_quote($TABLE, "/")) . "_[ba][iud]$/.test(this.form['Trigger'].value)) this.form['Trigger'].value = '" . h(addcslashes($TABLE, "\r\n'\\")) . "_' + selectValue(this).charAt(0).toLowerCase() + selectValue(this.form['Event']).charAt(0).toLowerCase();"); ?>
|
||||||
<tr><th><?php echo lang('Event'); ?><td><?php echo html_select("Event", $trigger_event, $row["Event"], "this.form['Timing'].onchange();"); ?>
|
<tr><th><?php echo lang('Event'); ?><td><?php echo html_select("Event", $trigger_event, $row["Event"], "this.form['Timing'].onchange();"); ?>
|
||||||
<tr><th><?php echo lang('Type'); ?><td><?php echo html_select("Type", $trigger_options["Type"], $row["Type"]); ?>
|
<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 textarea("Statement", $row["Statement"]); ?>
|
<p><?php textarea("Statement", $row["Statement"]); ?>
|
||||||
<p>
|
<p>
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
|
||||||
<?php if ($_GET["name"] != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo confirm(); ?>><?php } ?>
|
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
|
<?php if ($dropped) { ?><input type="hidden" name="dropped" value="1"><?php } ?>
|
||||||
|
<?php echo lang('Name'); ?>: <input name="Trigger" value="<?php echo h($row["Trigger"]); ?>" maxlength="64">
|
||||||
|
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||||
|
<?php if ($_GET["name"] != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo $confirm; ?>><?php } ?>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
<?php
|
|
||||||
$TYPE = $_GET["type"];
|
|
||||||
|
|
||||||
if ($_POST && !$error) {
|
|
||||||
$link = substr(ME, 0, -1);
|
|
||||||
if ($_POST["drop"]) {
|
|
||||||
query_redirect("DROP TYPE " . idf_escape($TYPE), $link, lang('Type has been dropped.'));
|
|
||||||
} else {
|
|
||||||
query_redirect("CREATE TYPE " . idf_escape(trim($_POST["name"])) . " $_POST[as]", $link, lang('Type has been created.'));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
page_header($TYPE != "" ? lang('Alter type') . ": " . h($TYPE) : lang('Create type'), $error);
|
|
||||||
|
|
||||||
$row = $_POST;
|
|
||||||
if (!$row) {
|
|
||||||
$row = array("as" => "AS ");
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|
||||||
<form action="" method="post">
|
|
||||||
<p>
|
|
||||||
<?php
|
|
||||||
if ($TYPE != "") {
|
|
||||||
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm() . ">\n";
|
|
||||||
} else {
|
|
||||||
echo "<input name='name' value='" . h($row['name']) . "' autocapitalize='off'>\n";
|
|
||||||
textarea("as", $row["as"]);
|
|
||||||
echo "<p><input type='submit' value='" . lang('Save') . "'>\n";
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
|
||||||
</form>
|
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
$USER = $_GET["user"];
|
$USER = $_GET["user"];
|
||||||
$privileges = array("" => array("All privileges" => ""));
|
$privileges = array("" => array("All privileges" => ""));
|
||||||
foreach (get_rows("SHOW PRIVILEGES") as $row) {
|
$result = $connection->query("SHOW PRIVILEGES");
|
||||||
|
while ($row = $result->fetch_assoc()) {
|
||||||
foreach (explode(",", ($row["Privilege"] == "Grant option" ? "" : $row["Context"])) as $context) {
|
foreach (explode(",", ($row["Privilege"] == "Grant option" ? "" : $row["Context"])) as $context) {
|
||||||
$privileges[$context][$row["Privilege"]] = $row["Comment"];
|
$privileges[$context][$row["Privilege"]] = $row["Comment"];
|
||||||
}
|
}
|
||||||
@@ -26,7 +27,7 @@ if ($_POST) {
|
|||||||
}
|
}
|
||||||
$grants = array();
|
$grants = array();
|
||||||
$old_pass = "";
|
$old_pass = "";
|
||||||
if (isset($_GET["host"]) && ($result = $connection->query("SHOW GRANTS FOR " . q($USER) . "@" . q($_GET["host"])))) { //! use information_schema for MySQL 5 - column names in column privileges are not escaped
|
if (isset($_GET["host"]) && ($result = $connection->query("SHOW GRANTS FOR " . $connection->quote($USER) . "@" . $connection->quote($_GET["host"])))) { //! use information_schema for MySQL 5 - column names in column privileges are not escaped
|
||||||
while ($row = $result->fetch_row()) {
|
while ($row = $result->fetch_row()) {
|
||||||
if (preg_match('~GRANT (.*) ON (.*) TO ~', $row[0], $match) && preg_match_all('~ *([^(,]*[^ ,(])( *\\([^)]+\\))?~', $match[1], $matches, PREG_SET_ORDER)) { //! escape the part between ON and TO
|
if (preg_match('~GRANT (.*) ON (.*) TO ~', $row[0], $match) && preg_match_all('~ *([^(,]*[^ ,(])( *\\([^)]+\\))?~', $match[1], $matches, PREG_SET_ORDER)) { //! escape the part between ON and TO
|
||||||
foreach ($matches as $val) {
|
foreach ($matches as $val) {
|
||||||
@@ -45,25 +46,16 @@ if (isset($_GET["host"]) && ($result = $connection->query("SHOW GRANTS FOR " . q
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($_POST && !$error) {
|
if ($_POST && !$error) {
|
||||||
$old_user = (isset($_GET["host"]) ? q($USER) . "@" . q($_GET["host"]) : "''");
|
$old_user = (isset($_GET["host"]) ? $connection->quote($USER) . "@" . $connection->quote($_GET["host"]) : "''");
|
||||||
|
$new_user = $connection->quote($_POST["user"]) . "@" . $connection->quote($_POST["host"]); // if $_GET["host"] is not set then $new_user is always different
|
||||||
|
$pass = $connection->quote($_POST["pass"]);
|
||||||
if ($_POST["drop"]) {
|
if ($_POST["drop"]) {
|
||||||
query_redirect("DROP USER $old_user", ME . "privileges=", lang('User has been dropped.'));
|
query_redirect("DROP USER $old_user", ME . "privileges=", lang('User has been dropped.'));
|
||||||
} else {
|
} else {
|
||||||
$new_user = q($_POST["user"]) . "@" . q($_POST["host"]); // if $_GET["host"] is not set then $new_user is always different
|
if ($old_user != $new_user) {
|
||||||
$pass = $_POST["pass"];
|
$error = !queries(($connection->server_info < 5 ? "GRANT USAGE ON *.* TO" : "CREATE USER") . " $new_user IDENTIFIED BY" . ($_POST["hashed"] ? " PASSWORD" : "") . " $pass");
|
||||||
if ($pass != '' && !$_POST["hashed"]) {
|
} elseif ($_POST["pass"] != $old_pass || !$_POST["hashed"]) {
|
||||||
// compute hash in a separate query so that plain text password is not saved to history
|
queries("SET PASSWORD FOR $new_user = " . ($_POST["hashed"] ? $pass : "PASSWORD($pass)"));
|
||||||
$pass = $connection->result("SELECT PASSWORD(" . q($pass) . ")");
|
|
||||||
$error = !$pass;
|
|
||||||
}
|
|
||||||
$created = false;
|
|
||||||
if (!$error) {
|
|
||||||
if ($old_user != $new_user) {
|
|
||||||
$created = queries(($connection->server_info < 5 ? "GRANT USAGE ON *.* TO" : "CREATE USER") . " $new_user IDENTIFIED BY PASSWORD " . q($pass));
|
|
||||||
$error = !$created;
|
|
||||||
} elseif ($pass != $old_pass) {
|
|
||||||
queries("SET PASSWORD FOR $new_user = " . q($pass));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (!$error) {
|
if (!$error) {
|
||||||
$revoke = array();
|
$revoke = array();
|
||||||
@@ -102,7 +94,7 @@ if ($_POST && !$error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
queries_redirect(ME . "privileges=", (isset($_GET["host"]) ? lang('User has been altered.') : lang('User has been created.')), !$error);
|
queries_redirect(ME . "privileges=", (isset($_GET["host"]) ? lang('User has been altered.') : lang('User has been created.')), !$error);
|
||||||
if ($created) {
|
if ($old_user != $new_user) {
|
||||||
// delete new user in case of an error
|
// delete new user in case of an error
|
||||||
$connection->query("DROP USER $new_user");
|
$connection->query("DROP USER $new_user");
|
||||||
}
|
}
|
||||||
@@ -120,15 +112,15 @@ if ($_POST) {
|
|||||||
if ($old_pass != "") {
|
if ($old_pass != "") {
|
||||||
$row["hashed"] = true;
|
$row["hashed"] = true;
|
||||||
}
|
}
|
||||||
$grants[(DB == "" || $grants ? "" : idf_escape(addcslashes(DB, "%_"))) . ".*"] = array();
|
$grants[""] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
<table cellspacing="0">
|
<table cellspacing="0">
|
||||||
<tr><th><?php echo lang('Server'); ?><td><input name="host" maxlength="60" value="<?php echo h($row["host"]); ?>" autocapitalize="off">
|
<tr><th><?php echo lang('Username'); ?><td><input name="user" maxlength="16" value="<?php echo h($row["user"]); ?>">
|
||||||
<tr><th><?php echo lang('Username'); ?><td><input name="user" maxlength="16" value="<?php echo h($row["user"]); ?>" autocapitalize="off">
|
<tr><th><?php echo lang('Server'); ?><td><input name="host" maxlength="60" value="<?php echo h($row["host"]); ?>">
|
||||||
<tr><th><?php echo lang('Password'); ?><td><input name="pass" id="pass" value="<?php echo h($row["pass"]); ?>">
|
<tr><th><?php echo lang('Password'); ?><td><input id="pass" name="pass" value="<?php echo h($row["pass"]); ?>">
|
||||||
<?php if (!$row["hashed"]) { ?><script type="text/javascript">typePassword(document.getElementById('pass'));</script><?php } ?>
|
<?php if (!$row["hashed"]) { ?><script type="text/javascript">typePassword(document.getElementById('pass'));</script><?php } ?>
|
||||||
<?php echo checkbox("hashed", 1, $row["hashed"], lang('Hashed'), "typePassword(this.form['pass'], this.checked);"); ?>
|
<?php echo checkbox("hashed", 1, $row["hashed"], lang('Hashed'), "typePassword(this.form['pass'], this.checked);"); ?>
|
||||||
</table>
|
</table>
|
||||||
@@ -136,10 +128,10 @@ 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'><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>";
|
echo "<thead><tr><th colspan='2'><a href='http://dev.mysql.com/doc/refman/" . substr($connection->server_info, 0, 3) . "/en/grant.html'>" . 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'>" : "<input type='hidden' name='objects[$i]' value='*.*' size='10'>*.*"); //! separate db, table, columns, PROCEDURE|FUNCTION, routine
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
echo "</thead>\n";
|
echo "</thead>\n";
|
||||||
@@ -157,7 +149,7 @@ foreach (array(
|
|||||||
foreach ($grants as $object => $grant) {
|
foreach ($grants as $object => $grant) {
|
||||||
$name = "'grants[$i][" . h(strtoupper($privilege)) . "]'";
|
$name = "'grants[$i][" . h(strtoupper($privilege)) . "]'";
|
||||||
$value = $grant[strtoupper($privilege)];
|
$value = $grant[strtoupper($privilege)];
|
||||||
if ($context == "Server Admin" && $object != (isset($grants["*.*"]) ? "*.*" : ".*")) {
|
if ($context == "Server Admin" && $object != (isset($grants["*.*"]) ? "*.*" : "")) {
|
||||||
echo "<td> ";
|
echo "<td> ";
|
||||||
} elseif (isset($_GET["grant"])) {
|
} elseif (isset($_GET["grant"])) {
|
||||||
echo "<td><select name=$name><option><option value='1'" . ($value ? " selected" : "") . ">" . lang('Grant') . "<option value='0'" . ($value == "0" ? " selected" : "") . ">" . lang('Revoke') . "</select>";
|
echo "<td><select name=$name><option><option value='1'" . ($value ? " selected" : "") . ">" . lang('Grant') . "<option value='0'" . ($value == "0" ? " selected" : "") . ">" . lang('Revoke') . "</select>";
|
||||||
@@ -171,7 +163,7 @@ foreach (array(
|
|||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
?>
|
?>
|
||||||
<p>
|
<p>
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
|
||||||
<?php if (isset($_GET["host"])) { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo confirm(); ?>><?php } ?>
|
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
|
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||||
|
<?php if (isset($_GET["host"])) { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo $confirm; ?>><?php } ?>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -1,33 +1,34 @@
|
|||||||
<?php
|
<?php
|
||||||
$TABLE = $_GET["view"];
|
$TABLE = $_GET["view"];
|
||||||
$row = ($TABLE == "" ? array() : view($TABLE));
|
$dropped = false;
|
||||||
$row["name"] = $TABLE;
|
if ($_POST && !$error) {
|
||||||
|
$dropped = drop_create(
|
||||||
if ($_POST) {
|
"DROP VIEW " . table($TABLE),
|
||||||
if (!$error) {
|
"CREATE VIEW " . table($_POST["name"]) . " AS\n$_POST[select]",
|
||||||
$name = trim($_POST["name"]);
|
($_POST["drop"] ? substr(ME, 0, -1) : ME . "table=" . urlencode($_POST["name"])),
|
||||||
drop_create(
|
lang('View has been dropped.'),
|
||||||
"DROP VIEW " . table($TABLE),
|
lang('View has been altered.'),
|
||||||
"CREATE VIEW " . table($name) . " AS\n$_POST[select]",
|
lang('View has been created.'),
|
||||||
"CREATE VIEW " . table($TABLE) . " AS\n$row[select]",
|
$TABLE
|
||||||
($_POST["drop"] ? substr(ME, 0, -1) : ME . "table=" . urlencode($name)),
|
);
|
||||||
lang('View has been dropped.'),
|
|
||||||
lang('View has been altered.'),
|
|
||||||
lang('View has been created.'),
|
|
||||||
$TABLE
|
|
||||||
);
|
|
||||||
}
|
|
||||||
$row = $_POST;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
page_header(($TABLE != "" ? lang('Alter view') : lang('Create view')), $error, array("table" => $TABLE), $TABLE);
|
page_header(($TABLE != "" ? lang('Alter view') : lang('Create view')), $error, array("table" => $TABLE), $TABLE);
|
||||||
|
|
||||||
|
$row = array();
|
||||||
|
if ($_POST) {
|
||||||
|
$row = $_POST;
|
||||||
|
} elseif ($TABLE != "") {
|
||||||
|
$row = view($TABLE);
|
||||||
|
$row["name"] = $TABLE;
|
||||||
|
}
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
<p><?php echo lang('Name'); ?>: <input name="name" value="<?php echo h($row["name"]); ?>" maxlength="64" autocapitalize="off">
|
|
||||||
<p><?php textarea("select", $row["select"]); ?>
|
<p><?php textarea("select", $row["select"]); ?>
|
||||||
<p>
|
<p>
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
|
||||||
<?php if ($_GET["view"] != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo confirm(); ?>><?php } ?>
|
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
|
<?php if ($dropped) { // old view was dropped but new wasn't created ?><input type="hidden" name="dropped" value="1"><?php } ?>
|
||||||
|
<?php echo lang('Name'); ?>: <input name="name" value="<?php echo h($row["name"]); ?>" maxlength="64">
|
||||||
|
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
269
changes.txt
269
changes.txt
@@ -1,264 +1,17 @@
|
|||||||
Adminer 3.6.4 (released 2013-04-26):
|
Adminer 3.0.0-dev:
|
||||||
Display pagination on a fixed position
|
|
||||||
Increase default select limit to 50
|
|
||||||
Display SQL edit form on Ctrl+click on the select query
|
|
||||||
Display SQL history from newest
|
|
||||||
Recover original view, trigger, routine if creating fails
|
|
||||||
Do not store plain text password to history in creating user
|
|
||||||
Selectable ON UPDATE CURRENT_TIMESTAMP field in create table
|
|
||||||
Open database to a new window after selecting it with Ctrl
|
|
||||||
Clear column name after resetting search (bug #3601200)
|
|
||||||
Explain partitions in SQL query (bug #3600150)
|
|
||||||
Allow loading more data with inline edit (bug #3605531)
|
|
||||||
Stay on the same page after deleting rows (bug #3605845)
|
|
||||||
Respect checked tables in export filename (bug #3245464)
|
|
||||||
Respect PHP configuration max_input_vars
|
|
||||||
Fix unsetting permanent login after logout
|
|
||||||
Disable autocapitalize in identifiers on mobile browsers
|
|
||||||
MySQL: Compatibility with MySQL 5.6
|
|
||||||
MySQL: Move ALTER export to plugin
|
|
||||||
MySQL: Use numeric time zone in export
|
|
||||||
MySQL: Link processlist documentation
|
|
||||||
SQLite: Export indexes
|
|
||||||
|
|
||||||
Adminer 3.6.3 (released 2013-01-23):
|
|
||||||
Display error code in SQL query
|
|
||||||
Allow specifying external links
|
|
||||||
Treat Meta key same as Ctrl
|
|
||||||
Fix XSS in displaying non-UTF-8 strings
|
|
||||||
Don't use type="number" for decimal numbers
|
|
||||||
|
|
||||||
Adminer 3.6.2 (released 2012-12-21):
|
|
||||||
Edit values by Ctrl+click instead of double click
|
|
||||||
Don't select row on double click
|
|
||||||
Support NULL in routine calls
|
|
||||||
Shorten printed values in varchar fields
|
|
||||||
Display table default values on wide screens
|
|
||||||
Display date in SQL history
|
|
||||||
HTML5 input fields
|
|
||||||
Display warning for missing UPDATE privilege
|
|
||||||
Fix switching language on first load
|
|
||||||
Support enabled mbstring.func_overload
|
|
||||||
MySQL: Prolong comment length since MySQL 5.5
|
|
||||||
PostgreSQL: Fix process list in version 9.2
|
|
||||||
MS SQL: Support databases starting with number
|
|
||||||
|
|
||||||
Adminer 3.6.1 (released 2012-09-17):
|
|
||||||
Fix compiled version on PHP with multibyte support
|
|
||||||
|
|
||||||
Adminer 3.6.0 (released 2012-09-16):
|
|
||||||
Load more data in select
|
|
||||||
Edit strings with \n in textarea
|
|
||||||
Time out long running database list and select count
|
|
||||||
Use VALUES() in INSERT+UPDATE export
|
|
||||||
Style logout button as link
|
|
||||||
Store selected database to permanent login
|
|
||||||
Ctrl+click and Shift+click on button opens form to a blank window
|
|
||||||
Switch language by POST
|
|
||||||
Compress translations
|
|
||||||
MySQL: Support geometry data types
|
|
||||||
selectQueryBuild() method (customization)
|
|
||||||
Serbian translation
|
|
||||||
|
|
||||||
Adminer 3.5.1 (released 2012-08-10):
|
|
||||||
Support same name fields in CSV export
|
|
||||||
Support Shift+click in export
|
|
||||||
|
|
||||||
Adminer 3.5.0 (released 2012-08-05):
|
|
||||||
Links for column search in select
|
|
||||||
Autohide column context menu in select
|
|
||||||
Autodisplay long table names in tables list
|
|
||||||
Display assigned auto_increment after clone
|
|
||||||
SQLite: Full alter table
|
|
||||||
SQLite: Better editing in tables without primary key
|
|
||||||
SQLite: Display number of rows in database overview
|
|
||||||
|
|
||||||
Adminer 3.4.0 (released 2012-06-30):
|
|
||||||
Link to descending order
|
|
||||||
Shift+click on checkbox to select consecutive rows
|
|
||||||
Print current time next to executed SQL queries
|
|
||||||
Warn about selecting data without index
|
|
||||||
Allow specifying database in login form
|
|
||||||
Link to original table in EXPLAIN of SELECT * FROM table t
|
|
||||||
Format numbers in translations
|
|
||||||
MySQL: inform about disabled event_scheduler
|
|
||||||
SQLite: support binary data
|
|
||||||
PostgreSQL: approximate row count in table overview
|
|
||||||
PostgreSQL: improve PDO support in SQL command
|
|
||||||
Oracle: schema, processlist, table overview numbers
|
|
||||||
Simplify work with NULL values (customization)
|
|
||||||
Use namespace in login form (customization)
|
|
||||||
Customizable export filename (customization)
|
|
||||||
Replace JSMin by better JavaScript minifier
|
|
||||||
Don't use AJAX links and forms
|
|
||||||
Indonesian translation
|
|
||||||
Ukrainian translation
|
|
||||||
Bengali translation
|
|
||||||
|
|
||||||
Adminer 3.3.4 (released 2012-03-07):
|
|
||||||
Foreign keys default actions (bug #3397606)
|
|
||||||
SET DEFAULT foreign key action
|
|
||||||
Fix minor parser bug in SQL command with webserver file
|
|
||||||
Ctrl+click on button opens form to a blank window
|
|
||||||
Trim table and column names (bug #3405309)
|
|
||||||
Error message with no response from server in AJAX
|
|
||||||
Esc to cancel AJAX request
|
|
||||||
Move AJAX loading indicator to the right
|
|
||||||
Don't quote bit type in export
|
|
||||||
Don't check row while selecting text
|
|
||||||
Fix invalid references line position on Database schema
|
|
||||||
Disable selecting text on Database schema
|
|
||||||
Ability to disable export (customization)
|
|
||||||
Extensible list of databases (customization)
|
|
||||||
MySQL: set autocommit after connect
|
|
||||||
SQLite, PostgreSQL: vacuum
|
|
||||||
SQLite, PostgreSQL: don't use LIKE for numbers (bug #3420408)
|
|
||||||
PostgreSQL: fix alter foreign key
|
|
||||||
PostgreSQL over PDO: connect if the eponymous database does not exist (bug #3391619)
|
|
||||||
Boolean search (Editor)
|
|
||||||
Persian translation
|
|
||||||
|
|
||||||
Adminer 3.3.3 (released 2011-08-12):
|
|
||||||
Highlight checked rows
|
|
||||||
Titles of links in database overview and navigation
|
|
||||||
Fix trigger export (SQLite)
|
|
||||||
Default trigger statement (SQLite, PostgreSQL)
|
|
||||||
Remove search by expression (PostgreSQL, MS SQL)
|
|
||||||
|
|
||||||
Adminer 3.3.2 (released 2011-08-08):
|
|
||||||
Display error with non-existent row in edit
|
|
||||||
Fix minor parser bug in SQL command with webserver file
|
|
||||||
Fix SQL command Stop on error
|
|
||||||
Don't scroll with AJAX select order and alter move column
|
|
||||||
Fast number of rows with big tables (PostgreSQL)
|
|
||||||
Sort databases and schemas (PostgreSQL)
|
|
||||||
|
|
||||||
Adminer 3.3.1 (released 2011-07-27):
|
|
||||||
Fix XSS introduced in Adminer 3.2.0
|
|
||||||
Fix altering default values (PostgreSQL)
|
|
||||||
Process list (PostgreSQL)
|
|
||||||
|
|
||||||
Adminer 3.3.0 (released 2011-07-19):
|
|
||||||
Use Esc to disable in-place edit
|
|
||||||
Shortcut for database privileges
|
|
||||||
Editable index names
|
|
||||||
Append new index with auto index selection (bug #3282127)
|
|
||||||
Preserve original timestamp value in multiple update (bug #3312614)
|
|
||||||
Bit type default value
|
|
||||||
Display foreign key name in tooltip
|
|
||||||
Display default column value in table overview
|
|
||||||
Display column collation in tooltip
|
|
||||||
Keyboard shortcuts: Alt+Shift+1 for homepage, Ctrl+Shift+Enter for Save and continue edit
|
|
||||||
Show only errors with Webserver file SQL command
|
|
||||||
Remember select export and import options
|
|
||||||
Link tables and indexes from SQL command EXPLAIN (MySQL)
|
|
||||||
Display error with all wrong SQL commands (MySQL)
|
|
||||||
Display foreign keys from other schemas (PostgreSQL)
|
|
||||||
Pagination support (Oracle)
|
|
||||||
Autocomplete for big foreign keys (Editor)
|
|
||||||
Display name of the referenced record in PostgreSQL (Editor)
|
|
||||||
Prefer NULL to empty string (Editor, bug #3323800)
|
|
||||||
Display searched columns (Editor)
|
|
||||||
Customizable favicon (customization)
|
|
||||||
Method name can return a link (customization)
|
|
||||||
Easier sending of default headers (customization)
|
|
||||||
Lithuanian and Romanian translation
|
|
||||||
|
|
||||||
Adminer 3.2.2 (released 2011-03-28):
|
|
||||||
Fix AJAX history after reload
|
|
||||||
|
|
||||||
Adminer 3.2.1 (released 2011-03-23):
|
|
||||||
Ability to save expression in edit
|
|
||||||
Respect default database collation (bug #3191489)
|
|
||||||
Don't export triggers without table (bug #3193489)
|
|
||||||
Esc to focus next field in Tab textarea
|
|
||||||
Send forms by Ctrl+Enter on <select>
|
|
||||||
Enum editor and textarea Ctrl+Enter working in IE
|
|
||||||
AJAX forms in Google Chrome
|
|
||||||
Parse UTF-16 and UTF-8 BOM in all text uploads
|
|
||||||
Display ; in history
|
|
||||||
Use DELIMITER in history
|
|
||||||
Show databases even with skip_show_database in MySQL 5
|
|
||||||
Disable maxlength with functions in edit
|
|
||||||
Better placement of AJAX icon
|
|
||||||
Table header in CSV export (Editor)
|
|
||||||
Time format hint (Editor)
|
|
||||||
Respect order after search (Editor)
|
|
||||||
Set MySQL time zone by PHP setting (Editor)
|
|
||||||
Allow own code in <head> (customization)
|
|
||||||
Polish translation
|
|
||||||
|
|
||||||
Adminer 3.2.0 (released 2011-02-24):
|
|
||||||
Get long texts and slow information by AJAX
|
|
||||||
Most links and forms by AJAX in browsers with support for history.pushState
|
|
||||||
Copy tables
|
|
||||||
Ability to search by expression in select
|
|
||||||
Export SQL command result (bug #3116854)
|
|
||||||
Focus first field with insert (bug #3126501)
|
|
||||||
Permanent link in schema
|
|
||||||
Display total time in show only errors mode in SQL command
|
|
||||||
History: edit all
|
|
||||||
MS SQL: auto primary and foreign key
|
|
||||||
SQLite: display 0
|
|
||||||
Create table default data type: int
|
|
||||||
Focus upper/lower fields by Ctrl+Up/Ctrl+Down
|
|
||||||
Hide credentials for SQLite
|
|
||||||
Utilize oids in PostgreSQL
|
|
||||||
Homepage customization
|
|
||||||
Use IN for search in numeric fields (Editor)
|
|
||||||
Use password input for _md5 and _sha1 fields (Editor)
|
|
||||||
Work without session.use_cookies (bug #3138640)
|
|
||||||
Fix saving schema to cookie in Opera
|
|
||||||
Portuguese, Slovenian and Turkish translation
|
|
||||||
|
|
||||||
Adminer 3.1.0 (released 2010-11-16):
|
|
||||||
TSV export and import
|
|
||||||
Customizable export
|
|
||||||
Option to show only errors in SQL command
|
|
||||||
Link to bookmark SQL command
|
|
||||||
Recognize $$ strings in SQL command (PostgreSQL)
|
|
||||||
Highlight and edit SQL command in processlist
|
|
||||||
Always display all drivers
|
|
||||||
Timestamp at the end of export
|
|
||||||
Link to refresh database cache (bug #3102451)
|
|
||||||
Support for virtual foreign keys
|
|
||||||
Disable XSS "protection" of IE8
|
|
||||||
Immunity against zend.ze1_compatibility_mode (bug #3089645)
|
|
||||||
Fix last page with empty result set
|
|
||||||
Arabic translation and RTL support
|
|
||||||
Dual licensing: Apache or GPL
|
|
||||||
|
|
||||||
Adminer 3.0.1 (released 2010-10-18):
|
|
||||||
Send the form by Ctrl+Enter in all textareas
|
|
||||||
Disable creating SQLite databases with extension other than db, sdb, sqlite
|
|
||||||
Ability to use Adminer in a frame through customization
|
|
||||||
Catalan translation
|
|
||||||
MS SQL 2005 compatibility
|
|
||||||
PostgreSQL: connect if the eponymous database does not exist
|
|
||||||
|
|
||||||
Adminer 3.0.0 (released 2010-10-15):
|
|
||||||
Drivers for MS SQL, SQLite, PostgreSQL, Oracle
|
Drivers for MS SQL, SQLite, PostgreSQL, Oracle
|
||||||
Allow concurrent logins on the same server
|
Allow concurrent logins on the same server
|
||||||
Allow permanent login without customization
|
Allow permanent login without customization
|
||||||
In-place editation in select
|
In-place editation in select
|
||||||
Foreign key options in Table creation
|
|
||||||
Treat binary type as hex
|
|
||||||
Show number of tables in server overview
|
Show number of tables in server overview
|
||||||
Operator LIKE %%
|
Operator LIKE %%
|
||||||
Remember export parameters in cookie
|
Remember export parameters in cookie
|
||||||
Allow semicolon as CSV separator
|
Allow semicolon as CSV separator
|
||||||
Schemas, sequences and types support (PostgreSQL)
|
|
||||||
Autofocus username in login form
|
Autofocus username in login form
|
||||||
Allow to insert Tab in SQL textareas and send the form by Ctrl+Enter
|
|
||||||
Disable spellchecking in SQL textareas
|
Disable spellchecking in SQL textareas
|
||||||
Display auto_increment value of inserted item
|
Display auto_increment value of inserted item
|
||||||
Allow disabling auto_increment value export
|
|
||||||
Prefill auto_increment column name
|
|
||||||
Ability to jump to any page in select by JavaScript
|
|
||||||
Display comment in table overview
|
|
||||||
Link last page above data in select
|
|
||||||
Link table names in SQL queries
|
Link table names in SQL queries
|
||||||
Hungarian, Japanese and Tamil translation
|
Japanese translation
|
||||||
Defer table information in database overview to JavaScript (performance)
|
Defer table information in database overview to JavaScript (performance)
|
||||||
Big tables optimizations (performance)
|
Big tables optimizations (performance)
|
||||||
|
|
||||||
@@ -334,9 +87,9 @@ Localize date (Editor)
|
|||||||
Treat tinyint(1) as bool (Editor)
|
Treat tinyint(1) as bool (Editor)
|
||||||
Divide types to groups in table creation
|
Divide types to groups in table creation
|
||||||
Link e-mails in select
|
Link e-mails in select
|
||||||
Show type in field name title
|
Show type in field name title (thanks to Jakub Sochor)
|
||||||
Preselect now() for timestamp columns
|
Preselect now() for timestamp columns (thanks to paranoiq)
|
||||||
Clear history
|
Clear history (thanks to paranoiq)
|
||||||
Prefill insert by foreign key searches
|
Prefill insert by foreign key searches
|
||||||
Print number of rows in SQL command
|
Print number of rows in SQL command
|
||||||
Remove Delete button from Edit page - use mass operation for it
|
Remove Delete button from Edit page - use mass operation for it
|
||||||
@@ -347,7 +100,7 @@ Use HTML Strict instead of XHTML
|
|||||||
Remove function minification in favor of performance and customization
|
Remove function minification in favor of performance and customization
|
||||||
Fix grant ALL PRIVILEGES with GRANT OPTION
|
Fix grant ALL PRIVILEGES with GRANT OPTION
|
||||||
Fix CSV import
|
Fix CSV import
|
||||||
Fix work with default values
|
Fix work with default values (thanks to Jiri Pospisil)
|
||||||
|
|
||||||
Adminer 1.11.1 (released 2009-07-03):
|
Adminer 1.11.1 (released 2009-07-03):
|
||||||
Fix problem with enabled Filter extension
|
Fix problem with enabled Filter extension
|
||||||
@@ -376,15 +129,15 @@ Use \n in SQL commands
|
|||||||
phpMinAdmin 1.10.1 (released 2009-05-07):
|
phpMinAdmin 1.10.1 (released 2009-05-07):
|
||||||
Highlight odd and hover rows
|
Highlight odd and hover rows
|
||||||
Partition editing comfort (bug #2783446)
|
Partition editing comfort (bug #2783446)
|
||||||
Allow full length in limited int
|
Allow full length in limited int (thanks to Vlasta Neubauer)
|
||||||
|
|
||||||
phpMinAdmin 1.10.0 (released 2009-04-28):
|
phpMinAdmin 1.10.0 (released 2009-04-28):
|
||||||
Partitioning (MySQL 5.1)
|
Partitioning (MySQL 5.1)
|
||||||
CSV import
|
CSV import
|
||||||
Plus and minus functions
|
Plus and minus functions
|
||||||
Option to stop on error in SQL command
|
Option to stop on error in SQL command (thanks to Vaclav Marik)
|
||||||
Cross links to select and table (bug #2236232), link new item
|
Cross links to select and table (bug #2236232), link new item
|
||||||
Suhosin compatibility
|
Suhosin compatibility (thanks to Klemens Hackel)
|
||||||
Remove max_allowed_packet from export
|
Remove max_allowed_packet from export
|
||||||
Read style from phpMinAdmin.css if exists
|
Read style from phpMinAdmin.css if exists
|
||||||
Size reduction by minification of variables and functions
|
Size reduction by minification of variables and functions
|
||||||
@@ -403,11 +156,11 @@ Search without column restriction
|
|||||||
Use type=password for unhashed password
|
Use type=password for unhashed password
|
||||||
Only one button for each action in select
|
Only one button for each action in select
|
||||||
Choose language through option-list
|
Choose language through option-list
|
||||||
XHTML syntax errors
|
XHTML syntax errors (thanks to kozotoc)
|
||||||
Don't set global variable in export
|
Don't set global variable in export
|
||||||
SHOW DATABASES can be revoked
|
SHOW DATABASES can be revoked
|
||||||
Order by function result working also in older MySQL versions
|
Order by function result working also in older MySQL versions
|
||||||
Tested on IIS
|
Tested on IIS (thanks to krasl.cz)
|
||||||
|
|
||||||
phpMinAdmin 1.8.0 (released 2008-09-12):
|
phpMinAdmin 1.8.0 (released 2008-09-12):
|
||||||
Events (MySQL 5.1)
|
Events (MySQL 5.1)
|
||||||
|
|||||||
287
compile.php
Executable file → Normal file
287
compile.php
Executable file → Normal file
@@ -1,21 +1,28 @@
|
|||||||
#!/usr/bin/env php
|
|
||||||
<?php
|
<?php
|
||||||
error_reporting(6135); // errors and warnings
|
error_reporting(6135); // errors and warnings
|
||||||
include dirname(__FILE__) . "/adminer/include/version.inc.php";
|
include dirname(__FILE__) . "/adminer/include/version.inc.php";
|
||||||
include dirname(__FILE__) . "/externals/JsShrink/jsShrink.php";
|
include dirname(__FILE__) . "/externals/jsmin-php/jsmin.php";
|
||||||
|
|
||||||
|
if (!class_exists("JSMin")) {
|
||||||
|
/** Simple JS minifier without full support for regex literals
|
||||||
|
* @link http://pastebin.com/2Jc2swSr
|
||||||
|
*/
|
||||||
|
class JSMin {
|
||||||
|
/*private static*/ function callback($match) {
|
||||||
|
$s = trim($match[0]);
|
||||||
|
return ($s === "" ? "\n" : ($s[0] === "/" && ($s[1] === "*" || $s[1] === "/") ? "" : $s));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*static*/ function minify($input) {
|
||||||
|
return preg_replace_callback('~//[^\n]*|/\*.*?\*/|/(?!\s)(?:\\\\.|[^/\\\\])*/|\'(?:\\\\.|[^\'\\\\])*\'|"(?:\\\\.|[^"\\\\])*"|\s*[^0-9a-z_$\'"/\s]\s*|\s+~si', array('JSMin', 'callback'), $input);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function add_apo_slashes($s) {
|
function add_apo_slashes($s) {
|
||||||
return addcslashes($s, "\\'");
|
return addcslashes($s, "\\'");
|
||||||
}
|
}
|
||||||
|
|
||||||
function add_quo_slashes($s) {
|
|
||||||
$return = $s;
|
|
||||||
$return = addcslashes($return, "\n\r\$\"\\");
|
|
||||||
$return = preg_replace('~\0(?![0-7])~', '\\\\0', $return);
|
|
||||||
$return = addcslashes($return, "\0");
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function remove_lang($match) {
|
function remove_lang($match) {
|
||||||
global $translations;
|
global $translations;
|
||||||
$idf = strtr($match[2], array("\\'" => "'", "\\\\" => "\\"));
|
$idf = strtr($match[2], array("\\'" => "'", "\\\\" => "\\"));
|
||||||
@@ -29,7 +36,7 @@ function remove_lang($match) {
|
|||||||
function lang_ids($match) {
|
function lang_ids($match) {
|
||||||
global $lang_ids;
|
global $lang_ids;
|
||||||
$lang_id = &$lang_ids[stripslashes($match[1])];
|
$lang_id = &$lang_ids[stripslashes($match[1])];
|
||||||
if ($lang_id === null) {
|
if (!isset($lang_id)) {
|
||||||
$lang_id = count($lang_ids) - 1;
|
$lang_id = count($lang_ids) - 1;
|
||||||
}
|
}
|
||||||
return ($_SESSION["lang"] ? $match[0] : "lang($lang_id$match[2]");
|
return ($_SESSION["lang"] ? $match[0] : "lang($lang_id$match[2]");
|
||||||
@@ -44,100 +51,41 @@ function put_file($match) {
|
|||||||
if (basename($match[2]) != "lang.inc.php" || !$_SESSION["lang"]) {
|
if (basename($match[2]) != "lang.inc.php" || !$_SESSION["lang"]) {
|
||||||
$tokens = token_get_all($return); // to find out the last token
|
$tokens = token_get_all($return); // to find out the last token
|
||||||
return "?>\n$return" . (in_array($tokens[count($tokens) - 1][0], array(T_CLOSE_TAG, T_INLINE_HTML), true) ? "<?php" : "");
|
return "?>\n$return" . (in_array($tokens[count($tokens) - 1][0], array(T_CLOSE_TAG, T_INLINE_HTML), true) ? "<?php" : "");
|
||||||
} elseif (preg_match('~\\s*(\\$pos = (.+\n).+;)~sU', $return, $match2)) {
|
} elseif (preg_match('~\\s*(\\$pos = .*)~', $return, $match2)) {
|
||||||
// single language lang() is used for plural
|
// single language lang() is used for plural
|
||||||
return "function get_lang() {
|
return "function lang(\$translation, \$number) {\n\t" . str_replace('$LANG', "'$_SESSION[lang]'", $match2[1]) . "\n\treturn sprintf(\$translation[\$pos], \$number);\n}\n";
|
||||||
return '$_SESSION[lang]';
|
|
||||||
}
|
|
||||||
|
|
||||||
function lang(\$translation, \$number) {
|
|
||||||
\$pos = $match2[2]\t\t: " . (preg_match("~\\\$LANG == '$_SESSION[lang]'.* \\? (.+)\n~U", $match2[1], $match3) ? $match3[1] : "1") . '
|
|
||||||
);
|
|
||||||
$translation = str_replace("%d", "%s", $translation[$pos]);
|
|
||||||
$number = number_format($number, 0, ".", lang(\',\'));
|
|
||||||
return sprintf($translation, $number);
|
|
||||||
}
|
|
||||||
';
|
|
||||||
} else {
|
} else {
|
||||||
echo "lang() not found\n";
|
echo "lang() not found\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function lzw_compress($string) {
|
|
||||||
// compression
|
|
||||||
$dictionary = array_flip(range("\0", "\xFF"));
|
|
||||||
$word = "";
|
|
||||||
$codes = array();
|
|
||||||
for ($i=0; $i <= strlen($string); $i++) {
|
|
||||||
$x = $string[$i];
|
|
||||||
if (strlen($x) && isset($dictionary[$word . $x])) {
|
|
||||||
$word .= $x;
|
|
||||||
} elseif ($i) {
|
|
||||||
$codes[] = $dictionary[$word];
|
|
||||||
$dictionary[$word . $x] = count($dictionary);
|
|
||||||
$word = $x;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// convert codes to binary string
|
|
||||||
$dictionary_count = 256;
|
|
||||||
$bits = 8; // ceil(log($dictionary_count, 2))
|
|
||||||
$return = "";
|
|
||||||
$rest = 0;
|
|
||||||
$rest_length = 0;
|
|
||||||
foreach ($codes as $code) {
|
|
||||||
$rest = ($rest << $bits) + $code;
|
|
||||||
$rest_length += $bits;
|
|
||||||
$dictionary_count++;
|
|
||||||
if ($dictionary_count >> $bits) {
|
|
||||||
$bits++;
|
|
||||||
}
|
|
||||||
while ($rest_length > 7) {
|
|
||||||
$rest_length -= 8;
|
|
||||||
$return .= chr($rest >> $rest_length);
|
|
||||||
$rest &= (1 << $rest_length) - 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $return . ($rest_length ? chr($rest << (8 - $rest_length)) : "");
|
|
||||||
}
|
|
||||||
|
|
||||||
function put_file_lang($match) {
|
function put_file_lang($match) {
|
||||||
global $lang_ids, $project, $langs;
|
global $lang_ids, $project;
|
||||||
if ($_SESSION["lang"]) {
|
if ($_SESSION["lang"]) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
$return = "";
|
$return = "";
|
||||||
foreach ($langs as $lang => $val) {
|
foreach (glob(dirname(__FILE__) . "/adminer/lang/*.inc.php") as $filename) {
|
||||||
include dirname(__FILE__) . "/adminer/lang/$lang.inc.php"; // assign $translations
|
include $filename; // assign $translations
|
||||||
$translation_ids = array_flip($lang_ids); // default translation
|
$translation_ids = array_flip($lang_ids); // default translation
|
||||||
foreach ($translations as $key => $val) {
|
foreach ($translations as $key => $val) {
|
||||||
if ($val !== null) {
|
if (isset($val)) {
|
||||||
$translation_ids[$lang_ids[$key]] = implode("\t", (array) $val);
|
$translation_ids[$lang_ids[$key]] = $val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$return .= '
|
$return .= "\tcase \"" . basename($filename, '.inc.php') . '": $translations = array(';
|
||||||
case "' . $lang . '": $compressed = "' . add_quo_slashes(lzw_compress(implode("\n", $translation_ids))) . '"; break;';
|
foreach ($translation_ids as $val) {
|
||||||
|
$return .= (is_array($val) ? "array('" . implode("', '", array_map('add_apo_slashes', $val)) . "')" : "'" . add_apo_slashes($val) . "'") . ", ";
|
||||||
|
}
|
||||||
|
$return = substr($return, 0, -2) . "); break;\n";
|
||||||
}
|
}
|
||||||
$translations_version = crc32($return);
|
return "switch (\$LANG) {\n$return}\n";
|
||||||
return '$translations = &$_SESSION["translations"];
|
|
||||||
if ($_SESSION["translations_version"] != ' . $translations_version . ') {
|
|
||||||
$translations = array();
|
|
||||||
$_SESSION["translations_version"] = ' . $translations_version . ';
|
|
||||||
}
|
|
||||||
if (!$translations) {
|
|
||||||
switch ($LANG) {' . $return . '
|
|
||||||
}
|
|
||||||
$translations = array();
|
|
||||||
foreach (explode("\n", lzw_decompress($compressed)) as $val) {
|
|
||||||
$translations[] = (strpos($val, "\t") ? explode("\t", $val) : $val);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function short_identifier($number, $chars) {
|
function short_identifier($number, $chars) {
|
||||||
$return = '';
|
$return = '';
|
||||||
while ($number >= 0) {
|
while ($number >= 0) {
|
||||||
$return .= $chars[$number % strlen($chars)];
|
$return .= $chars{$number % strlen($chars)};
|
||||||
$number = floor($number / strlen($chars)) - 1;
|
$number = floor($number / strlen($chars)) - 1;
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
@@ -145,39 +93,11 @@ 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;
|
|
||||||
$special_variables = array_flip(array('$this', '$GLOBALS', '$_GET', '$_POST', '$_FILES', '$_COOKIE', '$_SESSION', '$_SERVER'));
|
$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);
|
||||||
|
|
||||||
// remove unnecessary { }
|
|
||||||
//! change also `while () { if () {;} }` to `while () if () ;` but be careful about `if () { if () { } } else { }
|
|
||||||
$shorten = 0;
|
|
||||||
$opening = -1;
|
|
||||||
foreach ($tokens as $i => $token) {
|
|
||||||
if (in_array($token[0], array(T_IF, T_ELSE, T_ELSEIF, T_WHILE, T_DO, T_FOR, T_FOREACH), true)) {
|
|
||||||
$shorten = ($token[0] == T_FOR ? 4 : 2);
|
|
||||||
$opening = -1;
|
|
||||||
} elseif (in_array($token[0], array(T_SWITCH, T_FUNCTION, T_CLASS, T_CLOSE_TAG), true)) {
|
|
||||||
$shorten = 0;
|
|
||||||
} elseif ($token === ';') {
|
|
||||||
$shorten--;
|
|
||||||
} elseif ($token === '{') {
|
|
||||||
if ($opening < 0) {
|
|
||||||
$opening = $i;
|
|
||||||
} elseif ($shorten > 1) {
|
|
||||||
$shorten = 0;
|
|
||||||
}
|
|
||||||
} elseif ($token === '}' && $opening >= 0 && $shorten == 1) {
|
|
||||||
unset($tokens[$opening]);
|
|
||||||
unset($tokens[$i]);
|
|
||||||
$shorten = 0;
|
|
||||||
$opening = -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$tokens = array_values($tokens);
|
|
||||||
|
|
||||||
foreach ($tokens as $i => $token) {
|
foreach ($tokens as $i => $token) {
|
||||||
if ($token[0] === T_VARIABLE && !isset($special_variables[$token[1]])) {
|
if ($token[0] === T_VARIABLE && !isset($special_variables[$token[1]])) {
|
||||||
$short_variables[$token[1]]++;
|
$short_variables[$token[1]]++;
|
||||||
@@ -185,17 +105,11 @@ function php_shrink($input) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
arsort($short_variables);
|
arsort($short_variables);
|
||||||
$chars = implode(range('a', 'z')) . '_' . implode(range('A', 'Z'));
|
|
||||||
// preserve variable names between versions if possible
|
|
||||||
$short_variables2 = array_splice($short_variables, strlen($chars));
|
|
||||||
ksort($short_variables);
|
|
||||||
ksort($short_variables2);
|
|
||||||
$short_variables += $short_variables2;
|
|
||||||
foreach (array_keys($short_variables) as $number => $key) {
|
foreach (array_keys($short_variables) as $number => $key) {
|
||||||
$short_variables[$key] = short_identifier($number, $chars); // could use also numbers and \x7f-\xff
|
$short_variables[$key] = short_identifier($number, implode(range('a', 'z')) . '_' . implode(range('A', 'Z'))); // could use also numbers and \x7f-\xff
|
||||||
}
|
}
|
||||||
|
|
||||||
$set = array_flip(preg_split('//', '!"#$%&\'()*+,-./:;<=>?@[\]^`{|}'));
|
$set = array_flip(preg_split('//', '!"#$&\'()*+,-./:;<=>?@[\]^`{|}'));
|
||||||
$space = '';
|
$space = '';
|
||||||
$output = '';
|
$output = '';
|
||||||
$in_echo = false;
|
$in_echo = false;
|
||||||
@@ -205,10 +119,10 @@ function php_shrink($input) {
|
|||||||
$token = array(0, $token);
|
$token = array(0, $token);
|
||||||
}
|
}
|
||||||
if ($tokens[$i+2][0] === T_CLOSE_TAG && $tokens[$i+3][0] === T_INLINE_HTML && $tokens[$i+4][0] === T_OPEN_TAG
|
if ($tokens[$i+2][0] === T_CLOSE_TAG && $tokens[$i+3][0] === T_INLINE_HTML && $tokens[$i+4][0] === T_OPEN_TAG
|
||||||
&& strlen(add_apo_slashes($tokens[$i+3][1])) < strlen($tokens[$i+3][1]) + 3
|
&& strlen(addcslashes($tokens[$i+3][1], "'\\")) < strlen($tokens[$i+3][1]) + 3
|
||||||
) {
|
) {
|
||||||
$tokens[$i+2] = array(T_ECHO, 'echo');
|
$tokens[$i+2] = array(T_ECHO, 'echo');
|
||||||
$tokens[$i+3] = array(T_CONSTANT_ENCAPSED_STRING, "'" . add_apo_slashes($tokens[$i+3][1]) . "'");
|
$tokens[$i+3] = array(T_CONSTANT_ENCAPSED_STRING, "'" . addcslashes($tokens[$i+3][1], "'\\") . "'");
|
||||||
$tokens[$i+4] = array(0, ';');
|
$tokens[$i+4] = array(0, ';');
|
||||||
}
|
}
|
||||||
if ($token[0] == T_COMMENT || $token[0] == T_WHITESPACE || ($token[0] == T_DOC_COMMENT && $doc_comment)) {
|
if ($token[0] == T_COMMENT || $token[0] == T_WHITESPACE || ($token[0] == T_DOC_COMMENT && $doc_comment)) {
|
||||||
@@ -216,7 +130,6 @@ function php_shrink($input) {
|
|||||||
} else {
|
} else {
|
||||||
if ($token[0] == T_DOC_COMMENT) {
|
if ($token[0] == T_DOC_COMMENT) {
|
||||||
$doc_comment = true;
|
$doc_comment = true;
|
||||||
$token[1] = substr_replace($token[1], "* @version $VERSION\n", -2, 0);
|
|
||||||
}
|
}
|
||||||
if ($token[0] == T_VAR) {
|
if ($token[0] == T_VAR) {
|
||||||
$shortening = false;
|
$shortening = false;
|
||||||
@@ -252,33 +165,12 @@ function php_shrink($input) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function minify_css($file) {
|
function minify_css($file) {
|
||||||
return lzw_compress(preg_replace('~\\s*([:;{},])\\s*~', '\\1', preg_replace('~/\\*.*\\*/~sU', '', $file)));
|
return preg_replace('~\\s*([:;{},])\\s*~', '\\1', $file);
|
||||||
}
|
|
||||||
|
|
||||||
function minify_js($file) {
|
|
||||||
$file = str_replace("'../externals/jush/'", "location.protocol + '//www.adminer.org/static/'", $file);
|
|
||||||
if (function_exists('jsShrink')) {
|
|
||||||
$file = jsShrink($file);
|
|
||||||
}
|
|
||||||
return lzw_compress($file);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function compile_file($match) {
|
function compile_file($match) {
|
||||||
global $project;
|
global $project;
|
||||||
$file = "";
|
return call_user_func($match[2], file_get_contents(dirname(__FILE__) . "/$project/$match[1]"));
|
||||||
foreach (explode(";", $match[1]) as $filename) {
|
|
||||||
$file .= file_get_contents(dirname(__FILE__) . "/$project/$filename");
|
|
||||||
}
|
|
||||||
if ($match[2]) {
|
|
||||||
$file = call_user_func($match[2], $file);
|
|
||||||
}
|
|
||||||
return '"' . add_quo_slashes($file) . '"';
|
|
||||||
}
|
|
||||||
|
|
||||||
$project = "adminer";
|
|
||||||
if ($_SERVER["argv"][1] == "editor") {
|
|
||||||
$project = "editor";
|
|
||||||
array_shift($_SERVER["argv"]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$driver = "";
|
$driver = "";
|
||||||
@@ -290,15 +182,12 @@ if (file_exists(dirname(__FILE__) . "/adminer/drivers/" . $_SERVER["argv"][1] .
|
|||||||
unset($_COOKIE["adminer_lang"]);
|
unset($_COOKIE["adminer_lang"]);
|
||||||
$_SESSION["lang"] = $_SERVER["argv"][1]; // Adminer functions read language from session
|
$_SESSION["lang"] = $_SERVER["argv"][1]; // Adminer functions read language from session
|
||||||
include dirname(__FILE__) . "/adminer/include/lang.inc.php";
|
include dirname(__FILE__) . "/adminer/include/lang.inc.php";
|
||||||
if (isset($langs[$_SESSION["lang"]])) {
|
if (isset($_SESSION["lang"])) {
|
||||||
|
if (isset($_SERVER["argv"][2]) || !isset($langs[$_SESSION["lang"]])) {
|
||||||
|
echo "Usage: php compile.php [lang]\nPurpose: Compile adminer[-lang].php and editor[-lang].php.\n";
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
include dirname(__FILE__) . "/adminer/lang/$_SESSION[lang].inc.php";
|
include dirname(__FILE__) . "/adminer/lang/$_SESSION[lang].inc.php";
|
||||||
array_shift($_SERVER["argv"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($_SERVER["argv"][1]) {
|
|
||||||
echo "Usage: php compile.php [editor] [driver] [lang]\n";
|
|
||||||
echo "Purpose: Compile adminer[-driver][-lang].php or editor[-driver][-lang].php.\n";
|
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// check function definition in drivers
|
// check function definition in drivers
|
||||||
@@ -311,65 +200,55 @@ foreach (glob(dirname(__FILE__) . "/adminer/drivers/" . ($driver ? $driver : "*"
|
|||||||
$file = file_get_contents($filename);
|
$file = file_get_contents($filename);
|
||||||
foreach ($functions as $val) {
|
foreach ($functions as $val) {
|
||||||
if (!strpos($file, "$val(")) {
|
if (!strpos($file, "$val(")) {
|
||||||
fprintf(STDERR, "Missing $val in $filename\n");
|
echo "Missing $val in $filename\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
include dirname(__FILE__) . "/adminer/include/pdo.inc.php";
|
include dirname(__FILE__) . "/adminer/include/pdo.inc.php";
|
||||||
$features = array("call" => "routine", "dump", "event", "privileges", "procedure" => "routine", "processlist", "routine", "scheme", "sequence", "status", "trigger", "type", "user" => "privileges", "variables", "view");
|
foreach (array("adminer", "editor") as $project) {
|
||||||
$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");
|
||||||
if ($driver) {
|
if ($driver) {
|
||||||
$connection = (object) array("server_info" => 5.1); // MySQL support is version specific
|
$connection = (object) array("server_info" => 5.1); // MySQL support is version specific
|
||||||
$_GET[$driver] = true; // to load the driver
|
$_GET[$driver] = true; // to load the driver
|
||||||
include_once dirname(__FILE__) . "/adminer/drivers/$driver.inc.php";
|
include_once dirname(__FILE__) . "/adminer/drivers/$driver.inc.php";
|
||||||
foreach ($features as $key => $feature) {
|
foreach (array("view", "event", "privileges", "user", "processlist", "variables", "trigger", "scheme", "sequence") as $feature) {
|
||||||
if (!support($feature)) {
|
if (!support($feature)) {
|
||||||
if (!is_int($key)) {
|
$file = str_replace("} elseif (isset(\$_GET[\"$feature\"])) {\n\tinclude \"./$feature.inc.php\";\n", "", $file);
|
||||||
$feature = $key;
|
|
||||||
}
|
}
|
||||||
$file = str_replace("} elseif (isset(\$_GET[\"$feature\"])) {\n\tinclude \"./$feature.inc.php\";\n", "", $file);
|
}
|
||||||
|
if (!support("routine")) {
|
||||||
|
$file = str_replace("} elseif (isset(\$_GET[\"procedure\"])) {\n\tinclude \"./procedure.inc.php\";\n", "", $file);
|
||||||
|
$file = str_replace("} elseif (isset(\$_GET[\"call\"])) {\n\tinclude \"./call.inc.php\";\n", "", $file);
|
||||||
|
$file = str_replace("if (isset(\$_GET[\"callf\"])) {\n\t\$_GET[\"call\"] = \$_GET[\"callf\"];\n}\nif (isset(\$_GET[\"function\"])) {\n\t\$_GET[\"procedure\"] = \$_GET[\"function\"];\n}\n", "", $file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!support("routine")) {
|
$file = preg_replace_callback('~\\b(include|require) "([^"]*)";~', 'put_file', $file);
|
||||||
$file = str_replace("if (isset(\$_GET[\"callf\"])) {\n\t\$_GET[\"call\"] = \$_GET[\"callf\"];\n}\nif (isset(\$_GET[\"function\"])) {\n\t\$_GET[\"procedure\"] = \$_GET[\"function\"];\n}\n", "", $file);
|
$file = str_replace('include "../adminer/include/coverage.inc.php";', '', $file);
|
||||||
|
if ($driver) {
|
||||||
|
$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);
|
$file = preg_replace_callback("~lang\\('((?:[^\\\\']+|\\\\.)*)'([,)])~s", 'lang_ids', $file);
|
||||||
$file = str_replace('include "../adminer/include/coverage.inc.php";', '', $file);
|
$file = preg_replace_callback('~\\b(include|require) "([^"]*\\$LANG.inc.php)";~', 'put_file_lang', $file);
|
||||||
if ($driver) {
|
if ($_SESSION["lang"]) {
|
||||||
$file = preg_replace('(include "../adminer/drivers/(?!' . preg_quote($driver) . ').*\\s*)', '', $file);
|
// single language version
|
||||||
}
|
$file = preg_replace_callback("~(<\\?php\\s*echo )?lang\\('((?:[^\\\\']+|\\\\.)*)'([,)])(;\\s*\\?>)?~s", 'remove_lang', $file);
|
||||||
$file = preg_replace_callback('~\\b(include|require) "([^"]*)";~', 'put_file', $file); // bootstrap.inc.php
|
$file = str_replace("<?php switch_lang(); ?>\n", "", $file);
|
||||||
if ($driver) {
|
$file = str_replace('<?php echo $LANG; ?>', $_SESSION["lang"], $file);
|
||||||
foreach ($features as $feature) {
|
|
||||||
if (!support($feature)) {
|
|
||||||
$file = preg_replace("((\t*)" . preg_quote('if (support("' . $feature . '")') . ".*\n\\1\\})sU", '', $file);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (count($drivers) == 1) {
|
$file = str_replace('<script type="text/javascript" src="static/editing.js"></script>' . "\n", "", $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_callback("~compile_file\\('([^']+)', '([^']+)'\\);~", 'compile_file', $file); // integrate static files
|
||||||
}
|
$replace = 'h(preg_replace("~\\\\\\\\?.*~", "", $_SERVER["REQUEST_URI"])) . "?file=\\1&version=' . $VERSION;
|
||||||
}
|
$file = preg_replace('~\\.\\./adminer/static/(default\\.css|functions\\.js|favicon\\.ico)~', '<?php echo ' . $replace . '"; ?>', $file);
|
||||||
$file = preg_replace_callback("~lang\\('((?:[^\\\\']+|\\\\.)*)'([,)])~s", 'lang_ids', $file);
|
$file = preg_replace('~\\.\\./adminer/static/([^\'"]*)~', '" . ' . $replace, $file);
|
||||||
$file = preg_replace_callback('~\\b(include|require) "([^"]*\\$LANG.inc.php)";~', 'put_file_lang', $file);
|
$file = str_replace("'../externals/jush/'", "protocol + '://www.adminer.org/static/'", $file);
|
||||||
$file = str_replace("\r", "", $file);
|
$file = preg_replace("~<\\?php\\s*\\?>\n?|\\?>\n?<\\?php~", '', $file);
|
||||||
if ($_SESSION["lang"]) {
|
$file = php_shrink($file);
|
||||||
// single language version
|
|
||||||
$file = preg_replace_callback("~(<\\?php\\s*echo )?lang\\('((?:[^\\\\']+|\\\\.)*)'([,)])(;\\s*\\?>)?~s", 'remove_lang', $file);
|
|
||||||
$file = str_replace("<?php switch_lang(); ?>\n", "", $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 = preg_replace_callback("~compile_file\\('([^']+)'(?:, '([^']*)')?\\)~", 'compile_file', $file); // integrate static files
|
|
||||||
$replace = 'h(preg_replace("~\\\\\\\\?.*~", "", ME)) . "?file=\\1&version=' . $VERSION;
|
|
||||||
$file = preg_replace('~\\.\\./adminer/static/(default\\.css|functions\\.js|favicon\\.ico)~', '<?php echo ' . $replace . '"; ?>', $file);
|
|
||||||
$file = preg_replace('~\\.\\./adminer/static/([^\'"]*)~', '" . ' . $replace, $file);
|
|
||||||
$file = preg_replace("~<\\?php\\s*\\?>\n?|\\?>\n?<\\?php~", '', $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";
|
||||||
fwrite(fopen($filename, "w"), $file); // file_put_contents() since PHP 5
|
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";
|
||||||
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ if (!extension_loaded("xdebug")) {
|
|||||||
$filename = $_GET["coverage"];
|
$filename = $_GET["coverage"];
|
||||||
$coverage = (file_exists($coverage_filename) ? unserialize(file_get_contents($coverage_filename)) : array());
|
$coverage = (file_exists($coverage_filename) ? unserialize(file_get_contents($coverage_filename)) : array());
|
||||||
$file = explode("<br />", highlight_file($filename, true));
|
$file = explode("<br />", highlight_file($filename, true));
|
||||||
$prev_color = null;
|
unset($prev_color);
|
||||||
$s = "";
|
$s = "";
|
||||||
for ($l=0; $l <= count($file); $l++) {
|
for ($l=0; $l <= count($file); $l++) {
|
||||||
$line = $file[$l];
|
$line = $file[$l];
|
||||||
@@ -43,10 +43,10 @@ if (!extension_loaded("xdebug")) {
|
|||||||
case -2: $color = "Silver"; break; // dead code
|
case -2: $color = "Silver"; break; // dead code
|
||||||
case null: $color = ""; break; // not executable
|
case null: $color = ""; break; // not executable
|
||||||
}
|
}
|
||||||
if ($prev_color === null) {
|
if (!isset($prev_color)) {
|
||||||
$prev_color = $color;
|
$prev_color = $color;
|
||||||
}
|
}
|
||||||
if ($prev_color != $color || $line === null) {
|
if ($prev_color != $color || !isset($line)) {
|
||||||
echo "<div" . ($prev_color ? " style='background-color: $prev_color;'" : "") . ">$s";
|
echo "<div" . ($prev_color ? " style='background-color: $prev_color;'" : "") . ">$s";
|
||||||
$open_tags = xhtml_open_tags($s);
|
$open_tags = xhtml_open_tags($s);
|
||||||
foreach (array_reverse($open_tags) as $tag) {
|
foreach (array_reverse($open_tags) as $tag) {
|
||||||
|
|||||||
@@ -1,62 +0,0 @@
|
|||||||
/* CSS by Brade - www.bradezone.com */
|
|
||||||
*{margin:0;padding:0}
|
|
||||||
body{font:13px/18px Helvetica,Arial,sans-serif;background:#fff;color:#333}
|
|
||||||
/* generic */
|
|
||||||
a,a:visited{color:#06c;text-decoration:none;border-bottom:1px dotted}
|
|
||||||
a:hover{border-bottom:1px solid #06c;background:#06c;color:#fff}
|
|
||||||
p{padding-bottom:4px;margin-bottom:4px}
|
|
||||||
h1{font-size:18px;font-weight:bold;padding-bottom:0px;height:40px;padding:0 0 8px 0;color:#666;border:0}
|
|
||||||
h2{font:32px Georgia,serif;padding:10px 0 8px;margin:0;background:transparent;border:0;color:#333}
|
|
||||||
h3{font-size:18px;font-weight:bold;padding:4px 0;margin:0}
|
|
||||||
form#form{overflow:hidden}
|
|
||||||
fieldset{float:left;min-height:48px;padding:0 4px 4px 4px;border:1px solid #ccc;margin-bottom:8px;margin-right:4px}
|
|
||||||
fieldset div{margin-top:4px}
|
|
||||||
input,select,textarea{font:13px Helvetica,Arial,sans-serif;color:#555;border:1px solid #999;padding:3px}
|
|
||||||
input[type=submit]{background:#ccc;padding:2px;cursor:pointer;color:#333}
|
|
||||||
input[type=submit]:hover{background:#bbb}
|
|
||||||
input[type=image],input[type=checkbox]{border:0;padding:0}
|
|
||||||
label input[type=checkbox],td input[type=radio],td span select{margin-right:4px}
|
|
||||||
select{border:1px solid #999;padding:2px}
|
|
||||||
fieldset select{margin-right:4px}
|
|
||||||
option{padding:0 5px}
|
|
||||||
optgroup{font-size:11px}
|
|
||||||
code{background:#eee;padding:2px 4px;font:16px/20px Courier,monospace}
|
|
||||||
code a:hover{background:transparent}
|
|
||||||
table{margin:4px 0 8px;border:1px solid #ccc;font-size:inherit}
|
|
||||||
tbody tr:hover td,tbody tr:hover th{background:#eee}
|
|
||||||
thead tr:hover td,thead tr:hover th{background:#ddd}
|
|
||||||
th,td{text-align:left;padding:2px 4px;vertical-align:top;font-weight:normal;border:1px dotted #ccc;border-width:0 0 0 1px;
|
|
||||||
margin:0;background:inherit}
|
|
||||||
thead th,thead td{white-space:nowrap;font-weight:bold;background:#ddd;border-color:#ddd}
|
|
||||||
th:first-child,td:first-child{border-color:transparent;white-space:nowrap}
|
|
||||||
td[align=right]{text-align:right}
|
|
||||||
table code{font-size:13px;line-height:18px}
|
|
||||||
.hidden{display:none}
|
|
||||||
.error,.message{padding:0;background:transparent;font-weight:bold}
|
|
||||||
.error{color:#c00}
|
|
||||||
.message{color:#090}
|
|
||||||
/* specific */
|
|
||||||
#content{margin:0 0 0 320px;padding:50px 20px 40px 0;height:100%}
|
|
||||||
#content:after{content:'.';clear:both;height:0;overflow:hidden;display:block}
|
|
||||||
#lang{background:#333;color:#fff;position:fixed;top:0;left:0;width:100%;padding:0 20px 0 40px;line-height:40px;height:40px}
|
|
||||||
#lang select{border-color:#333}
|
|
||||||
#menu{background:#eee;position:fixed;top:60px;bottom:20px;overflow:auto;left:20px;width:240px;padding:10px 15px;
|
|
||||||
border:5px solid #ccc;margin:0}
|
|
||||||
#menu a{color:#333;margin-right:4px}
|
|
||||||
#menu a:hover{background:#333;color:#fff;border-color:#333}
|
|
||||||
#menu a.h1,#menu a.h1:hover{display:block;height:0;width:175px;padding:40px 0 0 0;overflow:hidden;float:left;border:0;margin:0;
|
|
||||||
outline:0;background:url(http://www.bradezone.com/random/adminer_logo.gif) no-repeat;line-height:32px}
|
|
||||||
#menu p{white-space:nowrap;border:0;padding:0 0 4px 0;margin:0 0 4px 0}
|
|
||||||
#breadcrumb{background:#333;color:#fff;position:fixed;top:0;left:320px;width:100%;line-height:40px;padding:0;z-index:1;margin:0}
|
|
||||||
#breadcrumb a{color:#ff9}
|
|
||||||
#breadcrumb a:hover{background:transparent;color:#ff9;border-color:#ff9}
|
|
||||||
#schema .table{padding:4px 8px;background:#f3f3f3}
|
|
||||||
/* IE hacks */
|
|
||||||
*+html th:first-child,*+html td:first-child{border-color:inherit;white-space:inherit}
|
|
||||||
* html #lang,* html #menu,* html #breadcrumb{position:absolute}
|
|
||||||
* html #lang{padding-top:10px;height:30px}
|
|
||||||
* html form#form{height:100%}
|
|
||||||
#logins a,#tables a{background: none}
|
|
||||||
#logout{color:#333;text-decoration:none;border-bottom:1px dotted}
|
|
||||||
#logout:hover{border-color:#333;background:#333;color:#fff}
|
|
||||||
.js .column{background:#ddd}
|
|
||||||
@@ -1,338 +0,0 @@
|
|||||||
/**
|
|
||||||
* Alternative style for Adminer by Frank Bueltge
|
|
||||||
* @link http://bueltge.de/
|
|
||||||
*/
|
|
||||||
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
line-height: 1.25em;
|
|
||||||
font-size: 12px;
|
|
||||||
background: #F9F9F9;
|
|
||||||
}
|
|
||||||
body, select, option, optgroup, button {
|
|
||||||
font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;
|
|
||||||
} /* IE6 */
|
|
||||||
input[type='submit'], input[type='reset'], input[type='button'], input[type='file'] {
|
|
||||||
font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;
|
|
||||||
}
|
|
||||||
input, textarea, pre, code, samp, kbd, var {
|
|
||||||
font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: #21759B;
|
|
||||||
}
|
|
||||||
a:visited {
|
|
||||||
color: #21759B;
|
|
||||||
}
|
|
||||||
a:hover {
|
|
||||||
text-decoration: none;
|
|
||||||
color: #D54E21;
|
|
||||||
}
|
|
||||||
|
|
||||||
form {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
table {
|
|
||||||
margin: 0 12px 12px 0;
|
|
||||||
border: 1px #BBB solid;
|
|
||||||
font-size: 90%;
|
|
||||||
}
|
|
||||||
th {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
td, th {
|
|
||||||
background-color: #fff;
|
|
||||||
padding: 1px 2px;
|
|
||||||
border: 1px #DfDfDf solid;
|
|
||||||
border-width: 1px 0 0 1px;
|
|
||||||
}
|
|
||||||
tr:first-child td, tr:first-child th {
|
|
||||||
border-top-width: 0;
|
|
||||||
}
|
|
||||||
td:first-child, th:first-child {
|
|
||||||
border-left-width: 0;
|
|
||||||
}
|
|
||||||
thead td, thead th {
|
|
||||||
background-color: #DFDFDF;
|
|
||||||
border: none;
|
|
||||||
border-bottom: 1px #BBB solid;
|
|
||||||
}
|
|
||||||
thead tr:hover td, thead tr:hover th {
|
|
||||||
background-color: #DDD !important;
|
|
||||||
}
|
|
||||||
tr:nth-child(2n) td, tr:nth-child(2n) th, .odd td, .odd th, tr.odd {
|
|
||||||
background-color: #F1F1F1;
|
|
||||||
}
|
|
||||||
tr:hover td, tr:hover th {
|
|
||||||
background-color: #BCD;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
fieldset, x:-moz-any-link {
|
|
||||||
padding-top: 4px;
|
|
||||||
}
|
|
||||||
fieldset {
|
|
||||||
%padding-top: 14px;
|
|
||||||
}
|
|
||||||
legend {
|
|
||||||
font-weight: 900;
|
|
||||||
color: #000;
|
|
||||||
position: absolute;
|
|
||||||
top: -1.666em;
|
|
||||||
left: -1em;
|
|
||||||
padding: 0 4px;
|
|
||||||
}
|
|
||||||
input[name='limit'], input[name*='length'] {
|
|
||||||
width: 3em;
|
|
||||||
xtext-align: right;
|
|
||||||
}
|
|
||||||
input[name='text_length'] {
|
|
||||||
width: 5em;
|
|
||||||
}
|
|
||||||
select + input, select + select {
|
|
||||||
margin-left: 2px;
|
|
||||||
}
|
|
||||||
textarea, input, select {
|
|
||||||
border-width: 1px;
|
|
||||||
border-style: solid;
|
|
||||||
-moz-border-radius: 4px;
|
|
||||||
-khtml-border-radius: 4px;
|
|
||||||
-webkit-border-radius: 4px;
|
|
||||||
border-radius: 4px;
|
|
||||||
border-color: #DFDFDF;
|
|
||||||
}
|
|
||||||
input[type="checkbox"], input[type="radio"], input[type="image"] {
|
|
||||||
border: 0 none;
|
|
||||||
}
|
|
||||||
input[type=button], input[type=submit] {
|
|
||||||
border-color: #bbb;
|
|
||||||
color: #464646;
|
|
||||||
}
|
|
||||||
input[type=button]:hover, input[type=submit]:hover {
|
|
||||||
color: #000;
|
|
||||||
border-color: #666;
|
|
||||||
}
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
input + label input, select + label input {
|
|
||||||
margin-left: 4px;
|
|
||||||
}
|
|
||||||
td input[type='checkbox']:first-child, td input[type='radio']:first-child {
|
|
||||||
margin-left: 2px;
|
|
||||||
}
|
|
||||||
label:hover {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
fieldset div {
|
|
||||||
margin-bottom: 2px;
|
|
||||||
}
|
|
||||||
input[name='Comment'] { /* !!! */
|
|
||||||
width: 24em;
|
|
||||||
}
|
|
||||||
input[name='Auto_increment'] { /* !!! */
|
|
||||||
width: 6em;
|
|
||||||
}
|
|
||||||
|
|
||||||
img {
|
|
||||||
vertical-align: middle;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
.error {
|
|
||||||
padding: 8px;
|
|
||||||
color: red;
|
|
||||||
background-color: #FEE;
|
|
||||||
}
|
|
||||||
.message {
|
|
||||||
padding: 8px;
|
|
||||||
background-color: #DDD;
|
|
||||||
}
|
|
||||||
.char {
|
|
||||||
color: #070;
|
|
||||||
}
|
|
||||||
.date {
|
|
||||||
color: #707;
|
|
||||||
}
|
|
||||||
.enum {
|
|
||||||
color: #077;
|
|
||||||
}
|
|
||||||
.binary {
|
|
||||||
color: red;
|
|
||||||
}
|
|
||||||
.jush-sql {
|
|
||||||
padding: 2px 4px;
|
|
||||||
margin-right: 4px;
|
|
||||||
outline: 1px #BBB dashed;
|
|
||||||
font-size: 9pt;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content {
|
|
||||||
margin: 2px 0 0 260px;
|
|
||||||
padding: 10px 20px 20px 0;
|
|
||||||
}
|
|
||||||
#lang {
|
|
||||||
height: 23px;
|
|
||||||
width: 250px;
|
|
||||||
display: block;
|
|
||||||
padding: 1px 0;
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
text-align: center;
|
|
||||||
background-color: #f1f1f1;
|
|
||||||
border: 1px solid #E3E3E3;
|
|
||||||
line-height: 1.25em;
|
|
||||||
}
|
|
||||||
#lang select {
|
|
||||||
font-size: 8pt;
|
|
||||||
}
|
|
||||||
#breadcrumb {
|
|
||||||
margin: 0;
|
|
||||||
height: 21px;
|
|
||||||
display: block;
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 260px;
|
|
||||||
background-color: #f1f1f1;
|
|
||||||
border: 1px solid #E3E3E3;
|
|
||||||
padding: 2px 12px;
|
|
||||||
line-height: 1.25em }
|
|
||||||
#menu {
|
|
||||||
position: absolute;
|
|
||||||
margin: 0;
|
|
||||||
top: 28px;
|
|
||||||
left: 0;
|
|
||||||
width: 250px;
|
|
||||||
background-color: #f1f1f1;
|
|
||||||
border: 1px solid #E3E3E3;
|
|
||||||
}
|
|
||||||
#menu form {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
#menu p {
|
|
||||||
padding-left: 8px;
|
|
||||||
font-size: 10pt;
|
|
||||||
border-bottom: none;
|
|
||||||
}
|
|
||||||
#menu form p {
|
|
||||||
padding-left: 0;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
h1 {
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
h1 .h1 {
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
h2 {
|
|
||||||
padding: 22px 0 0 10px;
|
|
||||||
}
|
|
||||||
h3 {
|
|
||||||
margin: 40px 0 0;
|
|
||||||
font-weight: 400;
|
|
||||||
font-size: 130%;
|
|
||||||
}
|
|
||||||
#schema {
|
|
||||||
margin: 1.5em 0 0 220px;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
#schema .table {
|
|
||||||
border: 1px solid #E3E3E3;
|
|
||||||
background-color: #F1F1F1;
|
|
||||||
padding: 0 2px;
|
|
||||||
cursor: move;
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
#schema .references {
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
.js div.hidden {
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
legend a {
|
|
||||||
color: #333;
|
|
||||||
text-decoration: none;
|
|
||||||
cursor: default;
|
|
||||||
}
|
|
||||||
legend a:hover {
|
|
||||||
color: #333;
|
|
||||||
}
|
|
||||||
code {
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
fieldset, legend, h2, table, .error, .message {
|
|
||||||
-moz-border-radius: 5px;
|
|
||||||
-khtml-border-radius: 5px;
|
|
||||||
-webkit-border-radius: 5px;
|
|
||||||
border-radius: 5px;
|
|
||||||
}
|
|
||||||
#breadcrumb, #lang, #menu {
|
|
||||||
-moz-border-radius-bottomright: 5px;
|
|
||||||
-khtml-border-bottom-right-radius: 5px;
|
|
||||||
-webkit-border-bottom-right-radius: 5px;
|
|
||||||
border-bottom-right-radius: 5px;
|
|
||||||
}
|
|
||||||
#breadcrumb {
|
|
||||||
-moz-border-radius-bottomleft: 5px;
|
|
||||||
-khtml-border-bottom-left-radius: 5px;
|
|
||||||
-webkit-border-bottom-left-radius: 5px;
|
|
||||||
border-bottom-left-radius: 5px;
|
|
||||||
}
|
|
||||||
#menu {
|
|
||||||
-moz-border-radius-topright: 5px;
|
|
||||||
-khtml-border-top-right-radius: 5px;
|
|
||||||
-webkit-border-top-right-radius: 5px;
|
|
||||||
border-bottom-top-radius: 5px;
|
|
||||||
}
|
|
||||||
.js .column {
|
|
||||||
background: #DFDFDF;
|
|
||||||
}
|
|
||||||
#logout {
|
|
||||||
color: #21759B;
|
|
||||||
}
|
|
||||||
#logout:hover {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
#logins a, #tables a {
|
|
||||||
background: #F1F1F1;
|
|
||||||
line-height: 1.5em;
|
|
||||||
}
|
|
||||||
File diff suppressed because one or more lines are too long
@@ -1,145 +0,0 @@
|
|||||||
/* 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 by Frank Bueltge
|
|
||||||
* @link http://bueltge.de/
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Added icons */
|
|
||||||
/* 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;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
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;}
|
|
||||||
|
|
||||||
/* html/*\*/>/*/*/body #content p a {padding-left:2px;} */
|
|
||||||
html/*\*/>/*/*/body #content p a[href*="&create="] {padding-left:22px;}
|
|
||||||
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;}
|
|
||||||
html/*\*/>/*/*/body #content p a[href*="&page="] {background-image:none; padding-left:0;}
|
|
||||||
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;}
|
|
||||||
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;}
|
|
||||||
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;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
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;}
|
|
||||||
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;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
|
|
||||||
html/*\*/>/*/*/body table tbody input[name*="check"] {display:block; float:left;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
html/*\*/>/*/*/body table tbody td:first-child {white-space:normal;}
|
|
||||||
html/*\*/>/*/*/body table thead input {margin-right: 5px;}
|
|
||||||
|
|
||||||
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==")}
|
|
||||||
|
|
||||||
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; }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#logout:hover { color: #D54E21; text-decoration: none; }
|
|
||||||
|
|
||||||
body {margin: 0; line-height: 1.25em; font-size: 13px; background: #F9F9F9;}
|
|
||||||
body, select, option, optgroup, button {font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;} /* IE6 */
|
|
||||||
input[type='submit'], input[type='reset'], input[type='button'], input[type='file'] {font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;}
|
|
||||||
input, textarea, pre, code, samp, kbd, var {font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif; font-size: 12px;}
|
|
||||||
a {color: #21759B;}
|
|
||||||
a:visited {color: #21759B;}
|
|
||||||
a:hover {text-decoration: none; color: #D54E21;}
|
|
||||||
form {margin: 0;}
|
|
||||||
table {margin: 10px 12px 12px 0; border: 1px #BBB solid; font-size: 90%;}
|
|
||||||
th {text-align: left;}
|
|
||||||
td, th {background-color: #fff; padding: 4px 6px; border: 1px #DfDfDf solid; border-width: 1px 0 0 1px;}
|
|
||||||
tr:first-child td, tr:first-child th {border-top-width: 0;}
|
|
||||||
td:first-child, th:first-child {border-left-width: 0;}
|
|
||||||
thead td, thead th {background-color: #DFDFDF; border: none; border-bottom: 1px #BBB solid;}
|
|
||||||
thead tr:hover td, thead tr:hover th {background-color: #DDD !important;}
|
|
||||||
tr:nth-child(2n) td, tr:nth-child(2n) th, .odd td, .odd th, tr.odd {background-color: #F1F1F1;}
|
|
||||||
tr:hover td, tr:hover th {background-color: #BCD;}
|
|
||||||
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;}
|
|
||||||
fieldset, x:-moz-any-link {padding-top: 4px;}
|
|
||||||
fieldset {%padding-top: 14px;}
|
|
||||||
legend {font-weight: 900; color: #000; position: absolute; top: -1.666em; left: -1em; padding: 0 4px;}
|
|
||||||
input[name='limit'], input[name*='length'] {width: 3em; xtext-align: right;}
|
|
||||||
input[name='text_length'] {width: 5em;}
|
|
||||||
select + input, select + select {margin-left: 2px;}
|
|
||||||
textarea, input, select {border-width: 1px; border-style: solid; -moz-border-radius: 4px; -khtml-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; border-color: #DFDFDF;}
|
|
||||||
input[type="checkbox"], input[type="radio"], input[type="image"] {border: 0 none;}
|
|
||||||
input[type=button], input[type=submit] {border-color: #bbb; color: #464646;}
|
|
||||||
input[type=button]:hover, input[type=submit]:hover {color: #000; border-color: #666;}
|
|
||||||
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;}
|
|
||||||
input + label input, select + label input {margin-left: 4px;}
|
|
||||||
td input[type='checkbox']:first-child, td input[type='radio']:first-child {margin-left: 2px;}
|
|
||||||
label:hover {text-decoration: underline;}
|
|
||||||
fieldset div {margin-bottom: 2px;}
|
|
||||||
input[name='Comment'] { /* !!! */ width: 24em;}
|
|
||||||
input[name='Auto_increment'] { /* !!! */width: 6em;}
|
|
||||||
img {vertical-align: middle; margin: 0; padding: 0;}
|
|
||||||
.error {padding: 8px; color: red; background-color: #FEE;}
|
|
||||||
.message {padding: 8px; background-color: #DDD;}
|
|
||||||
.char {color: #070;}
|
|
||||||
.date {color: #707;}
|
|
||||||
.enum {color: #077;}
|
|
||||||
.binary {color: red;}
|
|
||||||
.jush-sql {padding: 2px 4px; margin-right: 4px; outline: 1px #BBB dashed; font-size: 9pt;}
|
|
||||||
#content {margin: 2px 0 0 260px; padding: 10px 20px 20px 0;}
|
|
||||||
#breadcrumb, #lang {margin-top: 4px; height: 22px; display: block; position: fixed; top: 0; left: 260px; padding: 2px 12px; line-height: 1.25em }
|
|
||||||
#breadcrumb {z-index: 100; background-color: #DFDFDF; }
|
|
||||||
|
|
||||||
#lang {right: 20px; left: auto; z-index: 10; }
|
|
||||||
#lang select {font-size: 8pt;}
|
|
||||||
#menu {position: absolute; padding: 10px; margin: 0; top: 0; left: 0; width: 220px; background-color: #f1f1f1; border: 1px solid #E3E3E3;}
|
|
||||||
#menu form {margin: 0;}
|
|
||||||
#menu p {padding-left: 8px; font-size: 10pt; border-bottom: none;}
|
|
||||||
#menu form p {padding-left: 0; margin-top: 5px; text-align: left;}
|
|
||||||
#menu form p.logout {margin-top: 25px; }
|
|
||||||
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;}
|
|
||||||
h1 {font-size: 12px;}
|
|
||||||
h1 .h1 {font-size: 12px;}
|
|
||||||
h2 {padding: 22px 0 0 10px; font-size: 0; height: 2px; border-bottom: none;}
|
|
||||||
h3 {margin: 40px 0 0; font-weight: 400; font-size: 130%;}
|
|
||||||
#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;}
|
|
||||||
/* border-bottom: none; */
|
|
||||||
#menu h1 a { font-size: 13px; }
|
|
||||||
/*#dbs {position: absolute; top: 70px; }
|
|
||||||
* #dbs {margin: 0; }
|
|
||||||
p.logout {margin-top: 30px;}
|
|
||||||
#dbs {position: relative; top: -20px; height: 0;}
|
|
||||||
* */
|
|
||||||
|
|
||||||
|
|
||||||
#schema {margin: 1.5em 0 0 220px; position: relative;}
|
|
||||||
#schema .table {border: 1px solid #E3E3E3; background-color: #F1F1F1; padding: 0 2px; cursor: move; position: absolute;}
|
|
||||||
#schema .references {position: absolute;}
|
|
||||||
.js .hidden {display: inline;}
|
|
||||||
.js .column {background: none; margin: 0; padding: 0; position: relative; }
|
|
||||||
.js td.hidden, .js input.hidden {display: none;}
|
|
||||||
legend a {color: #333; text-decoration: none; cursor: default;}
|
|
||||||
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;}
|
|
||||||
/* #breadcrumb, #lang,
|
|
||||||
#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;}
|
|
||||||
#menu {-moz-border-radius-topright: 5px; -khtml-border-top-right-radius: 5px; -webkit-border-top-right-radius: 5px; border-bottom-top-radius: 5px;}
|
|
||||||
#logins a, #tables a {background: #F1F1F1;}
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
/* Redesigned (iconized) by Hever [hev.cz] - June 2009, ver 0.1.3 */
|
|
||||||
|
|
||||||
/* Added icons */
|
|
||||||
/* 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;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
|
|
||||||
|
|
||||||
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;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
|
|
||||||
html/*\*/>/*/*/body #tables br {display:none;}
|
|
||||||
|
|
||||||
|
|
||||||
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;}
|
|
||||||
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;}
|
|
||||||
|
|
||||||
html/*\*/>/*/*/body #content p a {padding-left:2px;}
|
|
||||||
html/*\*/>/*/*/body #content p a[href*="&create="] {padding-left:22px;}
|
|
||||||
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;}
|
|
||||||
html/*\*/>/*/*/body #content p a[href*="&page="] {background-image:none; padding-left:0;}
|
|
||||||
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;}
|
|
||||||
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;}
|
|
||||||
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;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
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;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
|
|
||||||
html/*\*/>/*/*/body table tbody input[name*="check"] {display:block; float:left;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
|
|
||||||
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==")}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
|
|
||||||
/*Used icons: Silk icon set 1.3 by Mark James --- http://www.famfamfam.com/lab/icons/silk/ */
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
/* Redesigned by Janamou - September 2008 */
|
|
||||||
|
|
||||||
body { color: #000; background-color: #fff; line-height: 1.25em; font-family: Verdana, Arial, Helvetica, sans-serif; margin: 0; font-size: 90%; }
|
|
||||||
a { color: black; }
|
|
||||||
a:visited { color: black; }
|
|
||||||
a:hover { color: #626262; text-decoration: none; }
|
|
||||||
h1 { margin: 0; padding: 5px; }
|
|
||||||
h2 { margin: 0; padding: 7px 0px 7px 10px; border: 1px solid #a3a3a3; font-weight: normal; background: #FCE28E url('data:image/gif;base64,R0lGODlhEAAiAIMAAP/nnf/nn//nof/kk//llP/ab//Zav/aa/7aagAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAEAAiAAMERBDISSsIOOvNu/9gKI5k6VnoJKxs6wpmmsayZQ54jhN8zxfAoHBYMBiPyKTyeGg6m4iodEpFLK/YrHbL7Xq/4LB4LI4AADs=') top left repeat-x; margin-bottom: 20px; }
|
|
||||||
h3 { font-weight: normal; font-size: 130%; margin: .8em 0; }
|
|
||||||
table { margin: 0 20px .8em 0; border: 0; border-top: 1px solid #999; border-left: 1px solid #999; font-size: 90%; }
|
|
||||||
td, th { margin-bottom: 1em; border: 0; border-right: 1px solid #999; border-bottom: 1px solid #999; padding: .2em .3em; }
|
|
||||||
th { background: black; color: white; }
|
|
||||||
th a, th a:visited { color: white; text-decoration: none; }
|
|
||||||
th a:hover { color: #626262; }
|
|
||||||
fieldset { display: inline; vertical-align: top; padding: .5em .8em; margin: 0 .5em .5em 0; border: 1px solid #999; }
|
|
||||||
img { vertical-align: middle; margin: 0; padding: 0; }
|
|
||||||
.error { color: red; background: #fee; padding: .5em .8em; border: 1px solid red; }
|
|
||||||
.message { color: black; background: #dedede; padding: .5em .8em; border: 1px solid black; }
|
|
||||||
#menu { overflow: scroll; position: absolute; top: 0; left: 0; width: 270px; white-space: nowrap; background: #FFE594 url('data:image/gif;base64,R0lGODlhXgEBAIIAAPzabPzijvzihPzefvzmnPzedPzmlPzadCwAAAAAXgEBAAIDYEi63P5wGTXJvNZew7sJBNiBwWeWaPoFbNq+cCzPs8DaeJDvuGAPOh9wIBgWAwMjMblsOpnQqHRKrRaY1+sguz1sB4esN0wulM+HtNqMZqsBafgBTp/PAfQ8fs/v+/8ACQA7') top left repeat-y; height: 100%; _height: 650px; border: 1px solid #a3a3a3; }
|
|
||||||
#menu form { margin: 0; }
|
|
||||||
#menu p { text-align: center; font-size: 11px; }
|
|
||||||
#menu p a { color: black; }
|
|
||||||
#menu p a:hover { color: #626262; text-decoration: none; }
|
|
||||||
#content { margin: 1.5em 0 0 293px; padding: 10px 20px 20px 0; }
|
|
||||||
#lang { margin: 0; padding: 0; text-align: center; font-size: 10px; width: 270px; background-color: #d9dadb; border-bottom: 1px solid black; }
|
|
||||||
#lang a { color: black; font-weight: bold; }
|
|
||||||
#breadcrumb { position: absolute; top: 0; left: 293px; background: #d9dadb; font-size: 10px; margin: 0; padding: 2px 5px 2px 5px; }
|
|
||||||
#breadcrumb a { color: black; }
|
|
||||||
@@ -1,290 +0,0 @@
|
|||||||
/*
|
|
||||||
Ok, it's a mess. You don't have to read it!
|
|
||||||
*/
|
|
||||||
|
|
||||||
body {
|
|
||||||
font-family: "Segoe UI", Tahoma, sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
body a[href^="#"] {
|
|
||||||
color:#000; text-decoration: none; border-bottom: 1px dotted #999;
|
|
||||||
}
|
|
||||||
|
|
||||||
h3 {
|
|
||||||
margin-top: 2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jush-bac {
|
|
||||||
color:#22c !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover {
|
|
||||||
color:#000; text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
@group Headers (visually)
|
|
||||||
*/
|
|
||||||
|
|
||||||
#menu .logout {
|
|
||||||
border-bottom:0; height:auto; padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
@end
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
@group Sidebar (visually)
|
|
||||||
*/
|
|
||||||
|
|
||||||
#menu {
|
|
||||||
margin:0; padding:0;
|
|
||||||
position:static; float:left; margin-left:-100%;
|
|
||||||
width:25%; padding-top:80px;
|
|
||||||
line-height:1.4;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* header "adminer 2.3.2" */
|
|
||||||
h1 {
|
|
||||||
margin:0; padding:0;
|
|
||||||
position: fixed; left:0; top:0;
|
|
||||||
width:25%; height:60px;
|
|
||||||
border-bottom: 1px solid #bbb;
|
|
||||||
background-color:#efefef; background-color:rgba(240,240,240,0.9);
|
|
||||||
line-height:60px; text-indent:20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#h1 {
|
|
||||||
font-weight:bold; color:#666; font-style:normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu a {
|
|
||||||
padding:1px; margin-right:4px;
|
|
||||||
color:#000; font-size:small; text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu a:hover {
|
|
||||||
font-weight:bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu #tables + p a {
|
|
||||||
color:green;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
#menu form+form, #menu #tables {
|
|
||||||
position: fixed; left:0; top:100px; width:25%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu #tables {
|
|
||||||
max-height:100%; padding-top:130px; overflow-y:auto;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
/* @todo ev. position fixed for whole sidebar (not simple) */
|
|
||||||
|
|
||||||
/*
|
|
||||||
@end
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
@group Sidebar (based on HTML position, not visual)
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* languages */
|
|
||||||
#lang {
|
|
||||||
position: absolute; left:auto; left:120px; top:0px; z-index:3;
|
|
||||||
font-size:11px; line-height:60px; text-decoration: underline; text-transform:lowercase;
|
|
||||||
opacity:0.5;
|
|
||||||
}
|
|
||||||
|
|
||||||
#lang:hover {
|
|
||||||
opacity:1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#lang select {
|
|
||||||
display:none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#lang:hover select {
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* logout */
|
|
||||||
input[name="logout"] {
|
|
||||||
position:fixed; right:15px; top:22px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
@end
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
@group Content: main
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#content {
|
|
||||||
margin:0; padding:155px 0 50px 0;
|
|
||||||
position: static; float:left; margin-left:25%;
|
|
||||||
width:75%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content > * {
|
|
||||||
margin-left:20px; margin-right:20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#content h2 {
|
|
||||||
margin:0; padding:0;
|
|
||||||
position:fixed; left:25%; top:0; margin-left:-1px;
|
|
||||||
width:75%;
|
|
||||||
border-bottom: 1px solid #bbb;
|
|
||||||
background-color:#efefef; background-color:rgba(240,240,240,0.9);
|
|
||||||
font-weight:bold; line-height:60px; text-indent:20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* breadcrumbs */
|
|
||||||
#breadcrumb {
|
|
||||||
margin:0; padding:0;
|
|
||||||
position:absolute; top:75px; left:25%;
|
|
||||||
background:url() no-repeat;
|
|
||||||
text-indent: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Dump link */
|
|
||||||
#menu .logout a {
|
|
||||||
margin:0; padding:2px 4px;
|
|
||||||
position:absolute; left:25%; top:110px;
|
|
||||||
border-radius:3px;
|
|
||||||
background-color:#053AC0; color:#fff; margin-left:120px; text-transform: uppercase; font-size:11px; text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* SQL command link */
|
|
||||||
body #menu .logout a[href$="sql="] {
|
|
||||||
margin-left: 20px;
|
|
||||||
background-color:green;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
@end
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
@group Content: details
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#content p > a {
|
|
||||||
margin-right:1ex;
|
|
||||||
color: #333;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content p > a[href$="&database="],
|
|
||||||
#content p > a[href*="&edit="] {
|
|
||||||
color:green !important;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
@group Messages
|
|
||||||
*/
|
|
||||||
|
|
||||||
.message {
|
|
||||||
background-color:#D0EE76;
|
|
||||||
color:#000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.error {
|
|
||||||
background-color:#fbb;
|
|
||||||
color: #000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.message a,
|
|
||||||
.error a {
|
|
||||||
margin-left:1em;
|
|
||||||
color:#000; opacity:0.5; font-size:smaller;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
@end
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#menu p {
|
|
||||||
padding:20px; /* wtf? */
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu form + form p:before {
|
|
||||||
content:'DB:'; font-size:11px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
@group Tables
|
|
||||||
*/
|
|
||||||
|
|
||||||
table {
|
|
||||||
border:1px solid #ccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
table thead tr > * {
|
|
||||||
padding:5px;
|
|
||||||
border-color:#ccc;
|
|
||||||
border-bottom:2px solid #ccc;
|
|
||||||
background-color:#f2f2f2;
|
|
||||||
text-align: left; font-weight:bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
thead a {
|
|
||||||
color:#333; text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
body thead tr:hover > * {
|
|
||||||
background-color:#f2f2f2;
|
|
||||||
}
|
|
||||||
|
|
||||||
body tbody tr:hover > * {
|
|
||||||
background-color:#f2f7ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
@end
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
@group Pagination
|
|
||||||
*/
|
|
||||||
|
|
||||||
#content .pages {
|
|
||||||
margin:1em 0 2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content .pages a {
|
|
||||||
padding:3px 5px; margin:0 1px;
|
|
||||||
border:1px solid #eee;
|
|
||||||
text-decoration:none; color: #000;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content .pages a:hover {
|
|
||||||
background-color:#eee;
|
|
||||||
border-color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
@end
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
@end
|
|
||||||
*/
|
|
||||||
@@ -1,129 +0,0 @@
|
|||||||
/* 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 by Frank Bueltge
|
|
||||||
* @link http://bueltge.de/
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Added icons */
|
|
||||||
/* 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;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
|
|
||||||
html/*\*/>/*/*/body #menu p#tables br {display:none;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
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;}
|
|
||||||
|
|
||||||
html/*\*/>/*/*/body #content p a {padding-left:2px;}
|
|
||||||
html/*\*/>/*/*/body #content p a[href*="&create="] {padding-left:22px;}
|
|
||||||
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;}
|
|
||||||
html/*\*/>/*/*/body #content p a[href*="&page="] {background-image:none; padding-left:0;}
|
|
||||||
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;}
|
|
||||||
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;}
|
|
||||||
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;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
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;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
|
|
||||||
html/*\*/>/*/*/body table tbody input[name*="check"] {display:block; float:left;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
|
|
||||||
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;}
|
|
||||||
html/*\*/>/*/*/body table tbody td:first-child {white-space:normal;}
|
|
||||||
html/*\*/>/*/*/body table thead input {margin-right: 5px;}
|
|
||||||
|
|
||||||
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==")}
|
|
||||||
|
|
||||||
.logout {font-size: 8pt !important;}
|
|
||||||
#logout{ height:17px; 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; color: #21759B; text-decoration: underline;}
|
|
||||||
#logout:hover {text-decoration: none; color: #D54E21;}
|
|
||||||
#logins a, #tables a {background: none repeat scroll 0 0 transparent;}
|
|
||||||
body {margin: 0; line-height: 1.25em; font-size: 13px; background: #F9F9F9;}
|
|
||||||
body, select, option, optgroup, button {font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;} /* IE6 */
|
|
||||||
input[type='submit'], input[type='reset'], input[type='button'], input[type='file'] {font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;}
|
|
||||||
input, textarea, pre, code, samp, kbd, var {font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif; font-size: 12px;}
|
|
||||||
a {color: #21759B;}
|
|
||||||
a:visited {color: #21759B;}
|
|
||||||
a:hover {text-decoration: none; color: #D54E21;}
|
|
||||||
form {margin: 0;}
|
|
||||||
table {margin: 10px 12px 12px 0; border: 1px #BBB solid; font-size: 90%;}
|
|
||||||
th {text-align: left;}
|
|
||||||
td, th {background-color: #fff; padding: 4px 6px; border: 1px #DfDfDf solid; border-width: 1px 0 0 1px;}
|
|
||||||
tr:first-child td, tr:first-child th {border-top-width: 0;}
|
|
||||||
tr:first-child th {padding-right: 30px;}
|
|
||||||
td:first-child, th:first-child {border-left-width: 0;}
|
|
||||||
thead td, thead th {background-color: #DFDFDF; border: none; border-bottom: 1px #BBB solid;}
|
|
||||||
thead tr:hover td, thead tr:hover th {background-color: #DDD !important;}
|
|
||||||
tr:nth-child(2n) td, tr:nth-child(2n) th, .odd td, .odd th, tr.odd {background-color: #F1F1F1;}
|
|
||||||
tr:hover td, tr:hover th {background-color: #BCD;}
|
|
||||||
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;}
|
|
||||||
fieldset, x:-moz-any-link {padding-top: 4px;}
|
|
||||||
fieldset {%padding-top: 14px;}
|
|
||||||
legend {font-weight: 900; color: #000; position: absolute; top: -1.666em; left: -1em; padding: 0 4px;}
|
|
||||||
input[name='limit'], input[name*='length'] {width: 3em; xtext-align: right;}
|
|
||||||
input[name='text_length'] {width: 5em;}
|
|
||||||
select + input, select + select {margin-left: 2px;}
|
|
||||||
textarea, input, select {border-width: 1px; border-style: solid; -moz-border-radius: 4px; -khtml-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; border-color: #DFDFDF;}
|
|
||||||
input[type="checkbox"], input[type="radio"], input[type="image"] {border: 0 none;}
|
|
||||||
input[type=button], input[type=submit] {border-color: #bbb; color: #464646;}
|
|
||||||
input[type=button]:hover, input[type=submit]:hover {color: #000; border-color: #666;}
|
|
||||||
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;}
|
|
||||||
input + label input, select + label input {margin-left: 4px;}
|
|
||||||
td input[type='checkbox']:first-child, td input[type='radio']:first-child {margin-left: 2px;}
|
|
||||||
label:hover {text-decoration: underline;}
|
|
||||||
fieldset div {margin-bottom: 2px;}
|
|
||||||
input[name='Comment'] { /* !!! */ width: 24em;}
|
|
||||||
input[name='Auto_increment'] { /* !!! */width: 6em;}
|
|
||||||
img {vertical-align: middle; margin: 0; padding: 0;}
|
|
||||||
.error {padding: 8px; color: red; background-color: #FEE;}
|
|
||||||
.message {padding: 8px; background-color: #DDD;}
|
|
||||||
.char {color: #070;}
|
|
||||||
.date {color: #707;}
|
|
||||||
.enum {color: #077;}
|
|
||||||
.binary {color: red;}
|
|
||||||
.jush-sql {padding: 2px 4px; margin-right: 4px; outline: 1px #BBB dashed; font-size: 9pt;}
|
|
||||||
#content {margin: 2px 0 0 300px; padding: 10px 20px 20px 0;}
|
|
||||||
#lang {height: 23px; width: 250px; display: block; padding: 1px 10px; position: absolute; top: 0; left: 0; text-align: center; background-color: #f1f1f1; border: 1px solid #E3E3E3; line-height: 1.25em;}
|
|
||||||
#lang select {font-size: 8pt;}
|
|
||||||
#breadcrumb {margin: 0; height: 21px; display: block; position: absolute; top: 0; left: 300px; background-color: #f1f1f1; border: 1px solid #E3E3E3; padding: 2px 12px; line-height: 1.25em }
|
|
||||||
#menu {position: absolute; padding: 10px; margin: 0; top: 28px; left: 0; width: 250px; background-color: #f1f1f1; border: 1px solid #E3E3E3;}
|
|
||||||
#menu form {margin: 0;}
|
|
||||||
#menu p {padding-left: 8px; font-size: 10pt; border-bottom: none;}
|
|
||||||
#menu form p {padding-left: 0; text-align: left;}
|
|
||||||
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;}
|
|
||||||
h1 {font-size: 12px;}
|
|
||||||
h1 .h1 {font-size: 12px;}
|
|
||||||
h2 {padding: 22px 0 0 10px;}
|
|
||||||
h3 {margin: 40px 0 0; font-weight: 400; font-size: 130%;}
|
|
||||||
#schema {margin: 1.5em 0 0 220px; position: relative;}
|
|
||||||
#schema .table {border: 1px solid #E3E3E3; background-color: #F1F1F1; padding: 0 2px; cursor: move; position: absolute;}
|
|
||||||
#schema .references {position: absolute;}
|
|
||||||
.js .hidden {display: inline;}
|
|
||||||
.js td.hidden, .js input.hidden {display: none;}
|
|
||||||
legend a {color: #333; text-decoration: none; cursor: default;}
|
|
||||||
legend a:hover {color: #333;}
|
|
||||||
code {background: transparent;}
|
|
||||||
fieldset, legend, h2, table, .error, .message {-moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px;border-radius: 5px;}
|
|
||||||
#breadcrumb, #lang, #menu {-moz-border-radius-bottomright: 5px; -khtml-border-bottom-right-radius: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px;}
|
|
||||||
#breadcrumb {-moz-border-radius-bottomleft: 5px; -khtml-border-bottom-left-radius: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px;}
|
|
||||||
#menu {-moz-border-radius-topright: 5px; -khtml-border-top-right-radius: 5px; -webkit-border-top-right-radius: 5px; border-bottom-top-radius: 5px;}
|
|
||||||
#loader {margin-left: 35px;}
|
|
||||||
@@ -1,562 +0,0 @@
|
|||||||
/* Theme "Nette" for Adminer, (c) David Grudl */
|
|
||||||
|
|
||||||
/*
|
|
||||||
it is based on some parts of:
|
|
||||||
- Nette Framework design - http://api.nette.org
|
|
||||||
- CSS by Brade - http://www.bradezone.com
|
|
||||||
- Silk icon set 1.3 by Mark James - http://www.famfamfam.com/lab/icons/silk
|
|
||||||
- CSS icons by Hever - http://hev.cz
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
body {
|
|
||||||
background: #FFF;
|
|
||||||
color: #333;
|
|
||||||
font: 13px/18px Helvetica, Arial, sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* generic */
|
|
||||||
a, a:visited {
|
|
||||||
padding: 3px 2px;
|
|
||||||
color: #006AEB;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover {
|
|
||||||
background-color: #006AEB !important;
|
|
||||||
border-bottom: 1px solid #006AEB;
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
p {
|
|
||||||
margin-bottom: 4px;
|
|
||||||
padding-bottom: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
background: none;
|
|
||||||
border: none;
|
|
||||||
color: #666;
|
|
||||||
font-size: 18px;
|
|
||||||
font-weight: bold;
|
|
||||||
height: 40px;
|
|
||||||
padding: 0 0 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
background: transparent;
|
|
||||||
border: none;
|
|
||||||
color: #333;
|
|
||||||
font: 32px Georgia,serif;
|
|
||||||
margin: 0;
|
|
||||||
padding: 10px 0 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
h3 {
|
|
||||||
font-size: 18px;
|
|
||||||
font-weight: bold;
|
|
||||||
margin: 0;
|
|
||||||
padding: 4px 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset {
|
|
||||||
border: 1px solid #CCC;
|
|
||||||
float: left;
|
|
||||||
margin-bottom: 8px;
|
|
||||||
margin-right: 4px;
|
|
||||||
min-height: 48px;
|
|
||||||
padding: 0 4px 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset div {
|
|
||||||
margin-top: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
input, select, textarea {
|
|
||||||
border: 1px solid #CCC;
|
|
||||||
color: #555;
|
|
||||||
font: 13px Helvetica,Arial,sans-serif;
|
|
||||||
padding: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
select {
|
|
||||||
padding: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
textarea, .sqlarea {
|
|
||||||
font-family: Consolas,monospace;
|
|
||||||
height: 500px;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type=submit] {
|
|
||||||
background: #4890E7;
|
|
||||||
color: white;
|
|
||||||
cursor: pointer;
|
|
||||||
padding: 3px;
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type=submit]:hover {
|
|
||||||
background-color: #006AEB;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type=image], input[type=checkbox] {
|
|
||||||
border: none;
|
|
||||||
padding: 0;
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
|
|
||||||
label input[type=checkbox], td input[type=radio], td span select {
|
|
||||||
margin-right: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset select {
|
|
||||||
margin-right: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
option {
|
|
||||||
padding: 0 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
optgroup {
|
|
||||||
font-size: 11px;
|
|
||||||
}
|
|
||||||
|
|
||||||
code {
|
|
||||||
background: #EEE;
|
|
||||||
font-family: Consolas,monospace;
|
|
||||||
padding: 2px 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
code a:hover {
|
|
||||||
background-color: transparent !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
table {
|
|
||||||
border: 1px solid #D0CDC4;
|
|
||||||
font-size: inherit;
|
|
||||||
margin: 4px 0 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
tbody tr:hover td, tbody tr:hover th {
|
|
||||||
background: #EDF4FF;
|
|
||||||
}
|
|
||||||
|
|
||||||
th, td {
|
|
||||||
background: inherit;
|
|
||||||
border: 1px dotted #CCC;
|
|
||||||
border-width:0 0 0 1px;
|
|
||||||
font-weight: normal;
|
|
||||||
margin: 0;
|
|
||||||
padding: 3px 5px;
|
|
||||||
text-align: left;
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
||||||
|
|
||||||
.odd th, .odd td {
|
|
||||||
background: #FCFAF5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.js .checked th, .js .checked td {
|
|
||||||
background: #CEE0FC;
|
|
||||||
}
|
|
||||||
|
|
||||||
thead th, thead td {
|
|
||||||
background: #F2EEE1;
|
|
||||||
border-color: #D0CDC4;
|
|
||||||
font-weight: bold;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
thead tr:hover td, thead tr:hover th,
|
|
||||||
.js thead .checked th, .js thead .checked td {
|
|
||||||
background: #F2EEE1;
|
|
||||||
}
|
|
||||||
|
|
||||||
th:first-child, td:first-child {
|
|
||||||
border-color: transparent;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
td[align=right] {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
table code {
|
|
||||||
font-size: 13px;
|
|
||||||
line-height: 18px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.error, .message {
|
|
||||||
background: transparent;
|
|
||||||
font-weight: bold;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.error {
|
|
||||||
color: #C00;
|
|
||||||
}
|
|
||||||
|
|
||||||
.message {
|
|
||||||
color: #090;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* specific */
|
|
||||||
|
|
||||||
#content {
|
|
||||||
height: 100%;
|
|
||||||
margin: 40px 0 0 300px;
|
|
||||||
padding: 20px;
|
|
||||||
background: white;
|
|
||||||
z-index: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content:after {
|
|
||||||
clear: both;
|
|
||||||
content: ".";
|
|
||||||
display: block;
|
|
||||||
height: 0;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content > p {
|
|
||||||
clear: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
#lang {
|
|
||||||
background: #333;
|
|
||||||
color: #FFF;
|
|
||||||
height: 40px;
|
|
||||||
left: 0;
|
|
||||||
line-height: 40px;
|
|
||||||
padding: 0 0 0 40px;
|
|
||||||
position: fixed;
|
|
||||||
top: 0;
|
|
||||||
width: 260px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#lang select {
|
|
||||||
border: none;
|
|
||||||
background: #5F5F5F;
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu {
|
|
||||||
background: #FCFAF5;
|
|
||||||
border-right: 5px solid #E4E2DA;
|
|
||||||
bottom: 0;
|
|
||||||
margin: 0;
|
|
||||||
overflow: auto;
|
|
||||||
padding: 10px 15px;
|
|
||||||
position: fixed;
|
|
||||||
top: 40px;
|
|
||||||
width: 240px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu a {
|
|
||||||
color: #333;
|
|
||||||
border: none;
|
|
||||||
margin-right: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#tables a {
|
|
||||||
padding: 1px 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu a:hover {
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu p {
|
|
||||||
border: none;
|
|
||||||
margin: 0 0 4px;
|
|
||||||
padding: 0 0 4px;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
#breadcrumb {
|
|
||||||
background: #333;
|
|
||||||
color: #FFF;
|
|
||||||
left: 300px;
|
|
||||||
line-height: 40px;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0 0 0 20px;
|
|
||||||
position: fixed;
|
|
||||||
top: 0;
|
|
||||||
width: 100%;
|
|
||||||
height: 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#breadcrumb a {
|
|
||||||
color: #FF9;
|
|
||||||
}
|
|
||||||
|
|
||||||
#breadcrumb a:hover {
|
|
||||||
background: transparent;
|
|
||||||
border-color: #FF9;
|
|
||||||
color: #FF9;
|
|
||||||
}
|
|
||||||
|
|
||||||
#schema .table {
|
|
||||||
background: #F3F3F3;
|
|
||||||
padding: 4px 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#logins a, #tables a {
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* IE hacks */
|
|
||||||
* + html th:first-child, * + html td:first-child {
|
|
||||||
border-color: inherit;
|
|
||||||
white-space: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
* html #lang, * html #menu, * html #breadcrumb {
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
|
|
||||||
* html #lang {
|
|
||||||
height: 30px;
|
|
||||||
padding-top: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
* html form#form {
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* icons */
|
|
||||||
.error {
|
|
||||||
background: 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 #FFEEEE;
|
|
||||||
padding-left: 38px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.message, #menu p.message {
|
|
||||||
background: 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 #EEFFEE;
|
|
||||||
padding-left: 38px;
|
|
||||||
}
|
|
||||||
|
|
||||||
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 center;
|
|
||||||
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 center ;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
|
|
||||||
select[name="db"] {
|
|
||||||
background: 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 center white;
|
|
||||||
padding-left: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
select[name="db"] option {
|
|
||||||
padding-left: 18px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu p a[href*="&select="] {
|
|
||||||
clear: left;
|
|
||||||
display: block;
|
|
||||||
float: left;
|
|
||||||
margin-right: 8px;
|
|
||||||
overflow: hidden;
|
|
||||||
padding-left: 0;
|
|
||||||
text-decoration: none;
|
|
||||||
width: 16px;
|
|
||||||
line-height: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu p a[href*="&select="]:before {
|
|
||||||
content: 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=");
|
|
||||||
padding-right: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu p a[href*="&select="]:hover {
|
|
||||||
margin-left: -3px;
|
|
||||||
margin-top: -2px;
|
|
||||||
overflow: visible;
|
|
||||||
padding: 1px 2px;
|
|
||||||
position: absolute;
|
|
||||||
width: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu p a[href*="&table="], #menu p a[href*="&view="] {
|
|
||||||
clear: right;
|
|
||||||
display: block;
|
|
||||||
min-height: 20px;
|
|
||||||
margin-left: 24px;
|
|
||||||
padding-bottom: 1px;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu p br {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
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 center;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
|
|
||||||
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 center;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
|
|
||||||
a[href*="&default="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ7SURBVHjabFPfa1JhGH6OR88odSKDaTEzS9i0jejXBtVuBzGooOgqoquu+heii27aRUTUaKx1nbAYDCqqm4raoBZDZrqhaCw31janm3r0eOb8+t4PFXW98Jz3O985z/P++j6JMQZJkroAODhk/Mfs/nZrJpLN8eUGxx/OqdQ/kgC3M7qub5fL5T1ujHtGvrYmlEolFggEnvB/j3IYiCe4VYF+IheLRaZpGiNPyOfzLJfLsXQ6zVKZDZZKpfaJkEkkQNEoCs9EeBJSVVUIZDIZkQ3tFQoFNjk5KURE+VWBczyD75VKBaFQCLu7uwJ8T4DWQ0ND1CtUewZZlgc4b65JQKQjSfXe8KggUfIEbf0zMnOvIFv6oKa+gBVWbhsbu03kSCRSj1xDTcSHWTj7bsLmOYXt391Y+jgx0iRAUf1+f+uEBFmNP4TZegHp+CIUSYe13QlLxxGbsTE6WSwWE4RaZIJbmYL9+CWU1gJQDkpYDi5BK5R2VDU3YGw9NF6vt+k9u3gPNu9laKtjMChlmCxumNkKnk0v3B19F48aG9OlLJLJZL1m685LdPZe5eTnMJjK0LMepGaDcA6PYPRWb5R4hsYSSMTlcuGAxhuZGEfniWHofycgKwylrBubM/M4fG0MbY6eeob7pvDz/TgsUhJlfj3WQk9h71SgpV3Y+hGGfP4+TLZDTSUaGodAj+Vfr+G/eAdtyW+ITs8g+CGN6Kcguq48gtt3thaoUi2b0XkmIi+7UiQfS2xCD7+B5+QgzOZurIcS8N14DKXDIzIkMrcCTVeIVZvnql5nw/VB+9fTxxxyf48H+T114cVU+MHb+a3VlmEReYNzk/8EGADOaaVGDf2TtwAAAABJRU5ErkJggg==") no-repeat scroll 2px center;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#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 center;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content p a[href*="&page="] {
|
|
||||||
background-image: none;
|
|
||||||
padding: .2em .5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
#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 center;
|
|
||||||
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 center;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content p 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 center;
|
|
||||||
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 center;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#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 center;
|
|
||||||
padding-left: 24px;
|
|
||||||
}
|
|
||||||
|
|
||||||
table tbody input[type="checkbox"] {
|
|
||||||
display: block;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
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 center;
|
|
||||||
padding-right: 18px;
|
|
||||||
}
|
|
||||||
|
|
||||||
table input + a[href*="&edit="][href*="&where"] {
|
|
||||||
clear: right;
|
|
||||||
display: block;
|
|
||||||
float: left;
|
|
||||||
line-height: 15px;
|
|
||||||
margin-right: 8px;
|
|
||||||
overflow: hidden;
|
|
||||||
padding: 0;
|
|
||||||
text-decoration: none;
|
|
||||||
width: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
table input + a[href*="&edit="][href*="&where"]:before {
|
|
||||||
content: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFUSURBVDjLrZM/SAJxGIZdWwuDlnCplkAEm1zkaIiGFFpyMIwGK5KGoK2lphDKkMDg3LLUSIJsSKhIi+684CokOtTiMizCGuzEU5K3vOEgKvtBDe/2Pc8H3x8NAM1fQlx4H9M3pcOWp6TXWmM8A7j0629v1nraiAVC0IrrwATKIgs5xyG5QiE+Z4iQdoeU2oAsnqCSO1NSTu+D9VhqRLD8nIB8F0Q2MgmJDyipCzjvYJkIfpN2UBLG8MpP4dxvQ3ZzGuyyBQ2H+AnOOCBd9aL6soh81A5hyYSGWyCFvxUcerqI4S+CvYVOFPMHxLAq8I3qdHVY5LbBhJzEsCrwutpRFBlUHy6wO2tEYtWAzLELPN2P03kjfj3luqDycV2F8AgefWbEnVqEHa2IznSD6BdsVDNStB0lfh0FPoQjdx8RrAqGzC0YprSgxzsUMOY2bf37N/6Ud1Vc9yYcH50CAAAAAElFTkSuQmCC");
|
|
||||||
padding-right: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
table input + a[href*="&edit="][href*="&where"]:hover {
|
|
||||||
background: #FFC;
|
|
||||||
color: white;
|
|
||||||
margin-left: 19px;
|
|
||||||
margin-top: -1px;
|
|
||||||
overflow: visible;
|
|
||||||
padding: 1px 2px;
|
|
||||||
position: absolute;
|
|
||||||
width: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
table a[href*="&clone="] {
|
|
||||||
clear: right;
|
|
||||||
display: block;
|
|
||||||
float: left;
|
|
||||||
line-height: 15px;
|
|
||||||
margin-right: 8px;
|
|
||||||
overflow: hidden;
|
|
||||||
padding-top: 0;
|
|
||||||
text-decoration: none;
|
|
||||||
width: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
table a[href*="&clone="]:before {
|
|
||||||
content: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADHSURBVCjPdZFNbsIwFAa/5B5FuQPCOQ9HQuqCq3SHUAtrrgFCSKQk8Y80XTjYJqiajRfj55GftNBKJtGoRiXSytlAZORzM1ckExjouHEm0LPdqHkTRnruXAgEPGpVq1JVCJ6RB3dOfHFEa7W5RzLx3kjPDse8ZxKisue9JwkByzevPQGZQnD8kHuunEvB43EcyD0dt/kEzzGdLD2/k9Ckb261zs9ZhiggVRO12jzN4Z5C+tQq90T+ETK20/J1tU2xeCOjpT7+APfbTaDnTb/mAAAAAElFTkSuQmCC");
|
|
||||||
padding-right: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
table a[href*="&clone="]:hover {
|
|
||||||
background: #FFC;
|
|
||||||
border: 1px solid #CCC;
|
|
||||||
color: white;
|
|
||||||
font-size: .9em;
|
|
||||||
margin-left: 42px;
|
|
||||||
margin-top: -2px;
|
|
||||||
overflow: visible;
|
|
||||||
padding: 1px 2px;
|
|
||||||
position: absolute;
|
|
||||||
width: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[name="delete"], input[name="drop"] {
|
|
||||||
background: 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;
|
|
||||||
border: none;
|
|
||||||
cursor: pointer;
|
|
||||||
font-size: .9em;
|
|
||||||
padding: 1px 5px 1px 18px;
|
|
||||||
color: #999;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[name="delete"]:hover, input[name="drop"]:hover {
|
|
||||||
background: 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==") no-repeat scroll left center;
|
|
||||||
color: red;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[name="logout"] {
|
|
||||||
background: 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 left center;
|
|
||||||
border: none;
|
|
||||||
cursor: pointer;
|
|
||||||
margin-left: 6px;
|
|
||||||
overflow: hidden;
|
|
||||||
text-indent: 18px;
|
|
||||||
width: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* paginator */
|
|
||||||
.pages {
|
|
||||||
margin: 1em 0;
|
|
||||||
font-size: 90%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pages a[href*="&page="] {
|
|
||||||
margin: .2em;
|
|
||||||
padding: .2em .5em;
|
|
||||||
border: 1px solid #9AAFE5;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
@@ -1,259 +0,0 @@
|
|||||||
* {
|
|
||||||
font: 13px/1.5 Verdana, 'Geneva CE', lucida, sans-serif;
|
|
||||||
color:#333333;
|
|
||||||
margin:0px;
|
|
||||||
padding:0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
a,a:visited {
|
|
||||||
color:#006aeb;
|
|
||||||
text-decoration:none;
|
|
||||||
padding:3px 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content table thead span, #content table thead a {
|
|
||||||
font-weight:bold;
|
|
||||||
color:black;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content table thead a:hover {
|
|
||||||
background:none;
|
|
||||||
text-decoration:underline;
|
|
||||||
color:black;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover {
|
|
||||||
color:white;
|
|
||||||
background:#006aeb;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
font-size:1.9em;
|
|
||||||
font-weight:normal;
|
|
||||||
background:white;
|
|
||||||
color:#1e5eb6;
|
|
||||||
border-bottom:1px solid #f4f4f4;
|
|
||||||
|
|
||||||
padding:20px;
|
|
||||||
margin:0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu h1 {
|
|
||||||
padding:0px 0px 5px 20px;
|
|
||||||
background:none;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2,h3 {
|
|
||||||
font-size:1.5em;
|
|
||||||
font-weight:normal;
|
|
||||||
background:white;
|
|
||||||
color:#1e5eb6;
|
|
||||||
border-bottom:1px solid #f4f4f4;
|
|
||||||
|
|
||||||
padding:20px 0px;
|
|
||||||
margin:0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset {
|
|
||||||
padding:5px;
|
|
||||||
border:1px solid #f4f4f4;
|
|
||||||
}
|
|
||||||
|
|
||||||
input,select,textarea {
|
|
||||||
border:1px solid #e5e5e5;
|
|
||||||
margin:1px;
|
|
||||||
padding:3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type=submit] {
|
|
||||||
color:white;
|
|
||||||
background:#3390e6;
|
|
||||||
padding:3px 10px;
|
|
||||||
cursor:pointer;
|
|
||||||
border:0px solid;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type=submit]:hover{
|
|
||||||
background:blue;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type=checkbox]{
|
|
||||||
margin-right:5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type=image] {
|
|
||||||
border:1px solid #d0cdc4;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type=checkbox],input[type=radio]{
|
|
||||||
border:1px solid #e5e5e5;
|
|
||||||
padding:2px 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
code{
|
|
||||||
background:#f0ffe1;
|
|
||||||
border:1px dashed #d5f1b9;
|
|
||||||
padding:2px 4px;
|
|
||||||
font-family:"Courier New";
|
|
||||||
}
|
|
||||||
code a:hover{background:transparent}
|
|
||||||
|
|
||||||
table{
|
|
||||||
margin:10px 0px;
|
|
||||||
border:1px solid #d0cdc4;
|
|
||||||
border-collapse:collapse;
|
|
||||||
}
|
|
||||||
|
|
||||||
tbody tr:hover td,tbody tr:hover th{
|
|
||||||
background:#edf4ff
|
|
||||||
}
|
|
||||||
|
|
||||||
thead th, thead td {
|
|
||||||
text-align:center;
|
|
||||||
vertical-align:middle;
|
|
||||||
font-weight:bold;
|
|
||||||
white-space:nowrap;
|
|
||||||
background:#f2eee1;
|
|
||||||
color:#808080;
|
|
||||||
}
|
|
||||||
|
|
||||||
th,td{
|
|
||||||
border:1px solid #d0cdc4;
|
|
||||||
padding:3px 6px;
|
|
||||||
vertical-align:top;
|
|
||||||
}
|
|
||||||
|
|
||||||
th a {
|
|
||||||
font-weight:bold;
|
|
||||||
padding-bottom:0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
th {
|
|
||||||
background:white;
|
|
||||||
}
|
|
||||||
|
|
||||||
tr.odd td {
|
|
||||||
background:#fcfaf5;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content tbody tr.checked td, tr.checked.odd td {
|
|
||||||
background:#fbe2e2;
|
|
||||||
color:red;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hidden{
|
|
||||||
display:none
|
|
||||||
}
|
|
||||||
|
|
||||||
.error,.message{
|
|
||||||
padding:0px;
|
|
||||||
background:transparent;
|
|
||||||
font-weight:bold
|
|
||||||
}
|
|
||||||
|
|
||||||
.error{
|
|
||||||
color:#c00
|
|
||||||
}
|
|
||||||
|
|
||||||
.message{
|
|
||||||
color:#090
|
|
||||||
}
|
|
||||||
|
|
||||||
#content{
|
|
||||||
margin:0px 0px 0px 320px;
|
|
||||||
padding:50px 20px 40px 0px;
|
|
||||||
height:100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#lang {
|
|
||||||
background:#f2eee1;
|
|
||||||
color:#808080;
|
|
||||||
position:fixed;
|
|
||||||
top:0px;
|
|
||||||
left:0px;
|
|
||||||
width:100%;
|
|
||||||
padding:10px 20px;
|
|
||||||
z-index:1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#breadcrumb {
|
|
||||||
position:fixed;
|
|
||||||
top:0px;
|
|
||||||
left:300px;
|
|
||||||
background:#f2eee1;
|
|
||||||
z-index:2;
|
|
||||||
width:100%;
|
|
||||||
padding:10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu {
|
|
||||||
background:#fcfaf5;
|
|
||||||
position:fixed;
|
|
||||||
top:-10px;
|
|
||||||
padding:20px;
|
|
||||||
padding-top:40px;
|
|
||||||
bottom:0px;
|
|
||||||
overflow:auto;
|
|
||||||
left:0px;
|
|
||||||
width:240px;
|
|
||||||
border-right:5px solid #f2eee1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#schema .table {
|
|
||||||
padding:5px;
|
|
||||||
background:#fcfaf5;
|
|
||||||
border:1px solid #d0cdc4;
|
|
||||||
}
|
|
||||||
|
|
||||||
#schema .table b {
|
|
||||||
color:#006aeb;
|
|
||||||
font-weight:bold;
|
|
||||||
text-decoration:underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
#schema .table b:hover {
|
|
||||||
color:white;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[name=logout] {
|
|
||||||
color:#fce2e2;
|
|
||||||
background:#d73e3e;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[name=logout]:hover {
|
|
||||||
background:#ea0202;
|
|
||||||
}
|
|
||||||
|
|
||||||
#logins a, #tables a {
|
|
||||||
background:none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#logins a:hover, #tables a:hover {
|
|
||||||
background:#006aeb;
|
|
||||||
}
|
|
||||||
|
|
||||||
#logout {
|
|
||||||
color:#006aeb;
|
|
||||||
text-decoration:none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#logout:hover {
|
|
||||||
color:white;
|
|
||||||
background:#006aeb;
|
|
||||||
}
|
|
||||||
|
|
||||||
.js .column {
|
|
||||||
background:#f2eee1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content table thead a.text:hover {
|
|
||||||
text-decoration:none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#version, .version {
|
|
||||||
font-size:50%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#h1:hover {
|
|
||||||
color:white;
|
|
||||||
}
|
|
||||||
@@ -1,286 +0,0 @@
|
|||||||
/**
|
|
||||||
* Alternative style for Adminer. Zrobeno 7.4.2011
|
|
||||||
* @author Vlasta Neubauer [@paranoiq]
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* -- fonts ----------------------------------------------------------------- */
|
|
||||||
body {
|
|
||||||
font-size: 11pt; }
|
|
||||||
body, select, option, optgroup, button {
|
|
||||||
font-family: Calibri, Arial, Helvetica, sans-serif; } /* IE6 */
|
|
||||||
input[type='submit'], input[type='reset'], input[type='button'], input[type='file'],
|
|
||||||
input[name$='[comment]'], input[name='Comment'] {
|
|
||||||
font-family: Calibri, Arial, Helvetica, sans-serif; }
|
|
||||||
input, textarea, pre, code, samp, kbd, var {
|
|
||||||
font-family: Consolas, "Courier New", monospace;
|
|
||||||
font-size: 10pt; } /* FF3 */
|
|
||||||
|
|
||||||
|
|
||||||
/* -- links ----------------------------------------------------------------- */
|
|
||||||
a {
|
|
||||||
color: #007; }
|
|
||||||
a:visited {
|
|
||||||
color: #707; }
|
|
||||||
a:hover, input[name='logout']:hover {
|
|
||||||
color: #700;
|
|
||||||
text-decoration: none; }
|
|
||||||
h1 a:visited {
|
|
||||||
color: #007; }
|
|
||||||
input[name='logout'] {
|
|
||||||
position: absolute;
|
|
||||||
bottom: 10px;
|
|
||||||
left: 33%; }
|
|
||||||
input[name='logout'] { /* IEx */
|
|
||||||
%position: static;
|
|
||||||
%background: transparent;
|
|
||||||
%text-decoration: underline;
|
|
||||||
%font-weight: bold;
|
|
||||||
%cursor: pointer;
|
|
||||||
%border: none;
|
|
||||||
%margin: 0;
|
|
||||||
%padding: 0;
|
|
||||||
%color: #007;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* -- tables ---------------------------------------------------------------- */
|
|
||||||
table {
|
|
||||||
margin: 12px 12px 12px 0;
|
|
||||||
border: 1px #DDD solid;
|
|
||||||
border-collapse: collapse; }
|
|
||||||
td, th {
|
|
||||||
background-color: #FFF;
|
|
||||||
padding: 1px 2px;
|
|
||||||
border-left: 1px #DDD dotted;
|
|
||||||
border-width: 1px 0px 0px 1px; }
|
|
||||||
th {
|
|
||||||
text-align: left !important; }
|
|
||||||
tr:first-child td, tr:first-child th {
|
|
||||||
border-top-width: 0; }
|
|
||||||
td:first-child, th:first-child {
|
|
||||||
border-left-width: 0; }
|
|
||||||
thead td, thead th {
|
|
||||||
background-color: #EEE;
|
|
||||||
border: none;
|
|
||||||
border-bottom: 1px #DDD solid; }
|
|
||||||
.nowrap tr:nth-child(2n) td, .nowrap tr:nth-child(2n) th {
|
|
||||||
background-color: #DEF; }
|
|
||||||
.odd td, .odd th {
|
|
||||||
background-color: #DEF; } /* IEx */
|
|
||||||
tr.selected td, tr.selected th {
|
|
||||||
background-color: #ABC !important; }
|
|
||||||
tr:hover td, tr:hover th {
|
|
||||||
background-color: #BCD !important; } /* WTF? */
|
|
||||||
thead tr:hover td, thead tr:hover th {
|
|
||||||
background-color: #EEE !important; }
|
|
||||||
|
|
||||||
|
|
||||||
/* -- forms ----------------------------------------------------------------- */
|
|
||||||
fieldset {
|
|
||||||
background-color: #DEF;
|
|
||||||
border: none;
|
|
||||||
%padding-left: 8px;
|
|
||||||
%border: 1px #DDD solid; /* IEx */
|
|
||||||
%background-repeat: repeat-x; /* IE8 */
|
|
||||||
%background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAIAAAC0tAIdAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAACJJREFUKFNj/P//PwPxAKiaeMBAvFKQK0ZVY4TAaJhgJgoAj5t2py3lrtoAAAAASUVORK5CYII='); }
|
|
||||||
legend {
|
|
||||||
color: #000;
|
|
||||||
background-color: #FFF;
|
|
||||||
%background-color: transparent; /* IEx */
|
|
||||||
padding: 0px 4px; }
|
|
||||||
legend a:visited {
|
|
||||||
color: #000; } /* IE6+7 */
|
|
||||||
input[name='limit'], input[name*='length'] {
|
|
||||||
width: 3em; }
|
|
||||||
input[name='text_length'] {
|
|
||||||
width: 5em; } /* ~FF3 */
|
|
||||||
select + input, select + select {
|
|
||||||
margin-left: 2px; }
|
|
||||||
input + label input, select + label input {
|
|
||||||
margin-left: 4px; }
|
|
||||||
td input[type='checkbox']:first-child, td input[type='radio']:first-child {
|
|
||||||
margin-left: 2px; }
|
|
||||||
label:hover {
|
|
||||||
text-decoration: underline; }
|
|
||||||
fieldset div {
|
|
||||||
margin-bottom: 2px; }
|
|
||||||
input[name='Comment'] { /* !!! */
|
|
||||||
width: 24em; }
|
|
||||||
input[name='Auto_increment'] { /* !!! */
|
|
||||||
width: 6em; }
|
|
||||||
textarea[name='definition'] {
|
|
||||||
height: 480px; }
|
|
||||||
input[name$='[comment]'] {
|
|
||||||
width: 24em; }
|
|
||||||
input[type='text'], textarea {
|
|
||||||
border: 1px #DDD solid; }
|
|
||||||
input[type='submit'], input[type='reset'], input[type='submit'], button, input[type='checkbox'], label, select, option {
|
|
||||||
cursor: pointer; }
|
|
||||||
.minifieldset {
|
|
||||||
display: inline-block;
|
|
||||||
padding: 2px 4px;
|
|
||||||
background-color: #DEF;
|
|
||||||
-moz-border-radius: 5px;
|
|
||||||
-webkit-border-radius: 5px;
|
|
||||||
border-radius: 5px; }
|
|
||||||
.minifieldset * {
|
|
||||||
margin: 0; }
|
|
||||||
|
|
||||||
|
|
||||||
/* -- other ----------------------------------------------------------------- */
|
|
||||||
.error {
|
|
||||||
padding: 8px; }
|
|
||||||
.message {
|
|
||||||
padding: 8px;
|
|
||||||
color: #000;
|
|
||||||
background: #DDD; }
|
|
||||||
.jush-sql {
|
|
||||||
padding: 2px 4px;
|
|
||||||
margin-right: 4px;
|
|
||||||
outline: 1px #BBB dashed;
|
|
||||||
font-size: 9pt; }
|
|
||||||
code {
|
|
||||||
background: transparent; }
|
|
||||||
.nowrap td i {
|
|
||||||
color: #AAA; }
|
|
||||||
|
|
||||||
/* -- structure ------------------------------------------------------------- */
|
|
||||||
#content {
|
|
||||||
margin: 28px 0 0 192px;
|
|
||||||
padding: 10px 20px 20px 0; }
|
|
||||||
h3 {
|
|
||||||
margin: 20px 0; }
|
|
||||||
|
|
||||||
#lang {
|
|
||||||
height: 23px;
|
|
||||||
width: 180px;
|
|
||||||
display: block;
|
|
||||||
padding: 1px 0px;
|
|
||||||
text-align: center;
|
|
||||||
background-color: #EEE;
|
|
||||||
line-height: 1.25em; }
|
|
||||||
#lang select {
|
|
||||||
font-size: 8pt; }
|
|
||||||
|
|
||||||
#breadcrumb {
|
|
||||||
margin: 0;
|
|
||||||
height: 21px;
|
|
||||||
display: block;
|
|
||||||
left: 192px;
|
|
||||||
background-color: #DDD;
|
|
||||||
padding: 2px 12px;
|
|
||||||
line-height: 1.25em; }
|
|
||||||
|
|
||||||
#menu {
|
|
||||||
margin: 0;
|
|
||||||
padding-bottom: 50px;
|
|
||||||
top: 38px;
|
|
||||||
width: 180px;
|
|
||||||
background-color: #DEF; }
|
|
||||||
#menu p {
|
|
||||||
padding-left: 8px;
|
|
||||||
font-size: 10pt;
|
|
||||||
border-bottom: none; }
|
|
||||||
h1 {
|
|
||||||
margin-top: 8px;
|
|
||||||
color: #000;
|
|
||||||
padding: 5px;
|
|
||||||
text-align: center;
|
|
||||||
font-size: 14pt;
|
|
||||||
border-bottom: none;
|
|
||||||
background: transparent;
|
|
||||||
font-style: italic;
|
|
||||||
text-shadow: #FFF 2px 2px 0px; }
|
|
||||||
h1 #h1 {
|
|
||||||
color: #000;
|
|
||||||
font-weight: bold; }
|
|
||||||
h1 #h1:hover {
|
|
||||||
text-decoration: underline; }
|
|
||||||
h1 #h1:visited {
|
|
||||||
color: #000; }
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
margin: 0;
|
|
||||||
margin-bottom: 12px;
|
|
||||||
padding: 6px 18px;
|
|
||||||
background-color: #CDE;
|
|
||||||
border-bottom: none;
|
|
||||||
color: #000;
|
|
||||||
text-shadow: #FFF 0px 0px 4px; }
|
|
||||||
|
|
||||||
#schema {
|
|
||||||
margin: 1.5em 0 0 220px; }
|
|
||||||
#schema .table {
|
|
||||||
border: 1px solid #DDD;
|
|
||||||
background-color: #DEF;
|
|
||||||
padding: 0 2px; }
|
|
||||||
|
|
||||||
|
|
||||||
/* -- GUI adjustments ------------------------------------------------------- */
|
|
||||||
.js .hidden {
|
|
||||||
display: inline; }
|
|
||||||
.js td.hidden, .js input.hidden {
|
|
||||||
display: none; }
|
|
||||||
legend a {
|
|
||||||
color: #000;
|
|
||||||
text-decoration: none;
|
|
||||||
cursor: default; }
|
|
||||||
legend a:hover {
|
|
||||||
color: black; }
|
|
||||||
|
|
||||||
select[name^="columns"] optgroup:last-child option:nth-child(3)::before {
|
|
||||||
content: "count "; }
|
|
||||||
select[name$="[collation]"] {
|
|
||||||
max-width: 120px; }
|
|
||||||
|
|
||||||
.logout a:first-child, p a {
|
|
||||||
margin-right: 8px; }
|
|
||||||
#tables a, #breadcrumb a, p.pages a, p code + a {
|
|
||||||
margin-right: 0; }
|
|
||||||
.logout a::before, p a::before {
|
|
||||||
content: '» '; }
|
|
||||||
#tables a::before, #breadcrumb a::before, p.pages a::before, p code + a::before {
|
|
||||||
content: ''; }
|
|
||||||
#form + p a:first-child::before {
|
|
||||||
content: ''; }
|
|
||||||
|
|
||||||
|
|
||||||
/* -- eye candy ------------------------------------------------------------- */
|
|
||||||
fieldset, legend, h2, .error, .message {
|
|
||||||
-moz-border-radius: 5px;
|
|
||||||
border-radius: 5px; }
|
|
||||||
#breadcrumb, #lang, #menu {
|
|
||||||
-moz-border-radius-bottomright: 5px;
|
|
||||||
border-bottom-right-radius: 5px; }
|
|
||||||
#breadcrumb {
|
|
||||||
-moz-border-radius-bottomleft: 5px;
|
|
||||||
border-bottom-left-radius: 5px; }
|
|
||||||
#menu {
|
|
||||||
-moz-border-radius-topright: 5px;
|
|
||||||
border-top-right-radius: 5px; }
|
|
||||||
fieldset, h2, .error, #breadcrumb, #lang, #menu, #breadcrumb, #menu {
|
|
||||||
x-moz-box-shadow: 1px 1px 3px #DDD;
|
|
||||||
xbox-shadow: 1px 1px 3px #DDD; }
|
|
||||||
fieldset table {
|
|
||||||
x-moz-box-shadow: none;
|
|
||||||
xbox-shadow: none; }
|
|
||||||
|
|
||||||
|
|
||||||
/* -- printing -------------------------------------------------------------- */
|
|
||||||
@media print {
|
|
||||||
#lang, #menu {
|
|
||||||
display: none; }
|
|
||||||
#content {
|
|
||||||
margin-left: 1em; }
|
|
||||||
#breadcrumb {
|
|
||||||
left: 1em;
|
|
||||||
background: none;
|
|
||||||
border-bottom: 1px silver dashed;
|
|
||||||
box-shadow: none; }
|
|
||||||
h2 {
|
|
||||||
background: none;
|
|
||||||
box-shadow: none; }
|
|
||||||
p.tabs {
|
|
||||||
display: none; }
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,116 +0,0 @@
|
|||||||
#menu {
|
|
||||||
margin: 0;
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
width: 270px;
|
|
||||||
padding: 0;
|
|
||||||
border-right: 1px #ccc solid;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu p {
|
|
||||||
margin: 0;
|
|
||||||
padding: 4px 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu p select {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu h1 {
|
|
||||||
height: 25px;
|
|
||||||
padding: 0 10px;
|
|
||||||
margin: 0;
|
|
||||||
line-height: 20px;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu h1 a {
|
|
||||||
font-size: 13px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu h1 .version {
|
|
||||||
font-size: 9px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu * {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
p#tables {
|
|
||||||
margin: 0;
|
|
||||||
position: absolute;
|
|
||||||
top: 108px;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
padding: 0;
|
|
||||||
overflow-x: hidden;
|
|
||||||
overflow-y: auto;
|
|
||||||
width: 270px;
|
|
||||||
}
|
|
||||||
|
|
||||||
p#tables a {
|
|
||||||
display: block;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
text-decoration: none;
|
|
||||||
margin-top: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
p#tables a[href*="select"] {
|
|
||||||
position: absolute;
|
|
||||||
left: 10px;
|
|
||||||
width: 50px;
|
|
||||||
}
|
|
||||||
|
|
||||||
p#tables a[href*="table"] {
|
|
||||||
position: absolute;
|
|
||||||
left: 65px;
|
|
||||||
width: 200px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#lang {
|
|
||||||
top: -1px;
|
|
||||||
right: 2px;
|
|
||||||
left: auto;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
z-index: 10;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0 10px 10px 10px;
|
|
||||||
position: absolute;
|
|
||||||
left: 270px;
|
|
||||||
right: 0;
|
|
||||||
top: 82px;
|
|
||||||
bottom: 0;
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content h2 {
|
|
||||||
display: block;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
height: 55px;
|
|
||||||
position: fixed;
|
|
||||||
left: 270px;
|
|
||||||
right: 0;
|
|
||||||
top: 26px;
|
|
||||||
line-height: 55px;
|
|
||||||
padding-left: 10px;
|
|
||||||
border-bottom: 1px solid #ccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
#breadcrumb {
|
|
||||||
position: fixed;
|
|
||||||
left: 270px;
|
|
||||||
right: 0;
|
|
||||||
top: 0;
|
|
||||||
height: 25px;
|
|
||||||
margin: 0;
|
|
||||||
border-bottom: 1px solid #999;
|
|
||||||
}
|
|
||||||
@@ -1,290 +0,0 @@
|
|||||||
/**
|
|
||||||
* Alternative style for Adminer.
|
|
||||||
* Created by Miroslav Pokorný [http://fuch.cz].
|
|
||||||
* Icons by Yusuke Kamiyamane [http://p.yusukekamiyamane.com/] (some of them were modified).
|
|
||||||
* Slightly inspired by themes created by Martin Hořínek and Klemens Häckel.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*** Fonts ***/
|
|
||||||
@import url(http://fonts.googleapis.com/css?family=Ubuntu:300&subset=latin,latin-ext);
|
|
||||||
@import url(http://fonts.googleapis.com/css?family=Ubuntu+Mono&subset=latin,latin-ext);
|
|
||||||
* {
|
|
||||||
font-family: 'Ubuntu', sans-serif
|
|
||||||
}
|
|
||||||
textarea, pre, code, samp, kbd, var {
|
|
||||||
font-family: 'Ubuntu Mono', Consolas, 'Courier New', monospace
|
|
||||||
}
|
|
||||||
/*** Icons ***/
|
|
||||||
/* Error message */
|
|
||||||
html>/**/body .error {
|
|
||||||
background: #FFEEEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlpJREFUeNqkU8tu2lAQHT8wtlEQcUKUIjVVgaiCVkhIlSq1isSKTdRNuu5P8AX5Alb9g+6zqZR8QNWmC3ZRa1UJIm0hAWpeNthg/OiMechl00UtHXvuvXPOnbn3mPF9H/7n4en1nmGAwy+BAUghTjB8iThY5v1EfMatzhB3Lg4Ib3FzfkPwdUSSKulCIZs6PFSkeFykCi1dL95dXx81rq7e2JZVxbwPf1WwIkuJxOmL4+Ocz/PSzHHgvtEIFhRFkfdzOTmZTu/ULi5OJ6MRrERYemFZKU4UK8VyOTcyTWk4HEKr1YLC+XkAimluPJ1Kz0qlHBuNVoizFsB+Tg7y+ezAMKQRqhuGAaZprkujmOZ0XQcDRfYymay7OKdFCw7Aq61kUtH6/TVpPB5Dp9MJSLfYiue6i555Hna3txXi4PDdSuChx7Kig3278zkYgwGYkwk0m02IRCLA4jy3Usb1qWmKxAlXAA4u2FQ6VuHjbhGcI3IsFgNh47Q5zHXCtzAH+GV0u0Vf02QpZCy1VAq+8Y27ntv2lDjrQ0S1T912u7eF/ck4lheGgpKqQrleD2I5BN2y+sQJC5zd9np1YFlLRldSUhQhCEKwYzRE9jzPas9mN8RZC3hoz4nrVi81TcUFS0KRJM5/yWQCUCwhbCTXxmPV9LwqcYjLkFUZJDzCwXN042OWreQEIftEEJQEx4mUNHTd6Xfb7qu2fdNAcg1d+IMMSNylAB3mDmIX7bWfBzjaA3iKV/dgabT7LsDXbwAfcVsM4TdCQ66zEmBDbfL/+IPJURMyKHK9PwIMAA7iHkoee771AAAAAElFTkSuQmCC") no-repeat 0.8em center;
|
|
||||||
padding-left: 38px;
|
|
||||||
}
|
|
||||||
/* Ok message */
|
|
||||||
html>/**/body .message, html>/**/body #menu p.message {
|
|
||||||
background: #EEFFEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnZJREFUeNqkk01PE0EYx/+zu/TNanTbGCjWhrCmlp6MGl94kUQ9eOCC8chHMDG9mHjiE/QjePGOJsR4QQ8Q0UOJHqgVA6kiKQXa0th97+4OM1tq25MHJ/lvdmae3z/PzDMPoZTif4bEP+RVHBAJE5+QBAjm2d9dpsuncbtM66BYAqUVuGzmUtCFWsegb8yFpEAuPZpWUvGkHA1GQzw/zVSv/aztTm9Vfjy22laeLS0PZNCFzwXPLs5mZzISpLBjO1BttbsXGZfHIkn5Umy1uLbYMvx130TwtykSQSGQm746mbE0K6yqKkzTHFC1WoXe1MK3lVuZABnKcaZn4NL5K8PjiqmaYV3XYRjGgOr1OtZn3mJh5Akcox1OxZIKZ3oGDp2MR+Nyq9VCs9mEZVloqS0cHB6gXC7jdfol9vb28GhoFpvFTXiGJ3OmdwcOTQoQQpqmYePhCpQ3N6HbOii76Y17K36IKIqYeDfpV8q0zRBn+jOA67p4rjzFzs4Ovtz/ACp2YEmSfGXfTwFRFhtm4ZLjMz2DNv1d047MZ6UX/vT4+Bgbd/rgVQZf4LXoyCaWyZn+DD5Wj/Yboixi6vvcX9CHPzH4Yg/mMv/oDc70Gyw1d+vbAohBRgmubz7owAUGjw7CnucaVlXf5kzPwKMVV3Py9c/7Jep4BkkRZL8yONU5c1ee7RhqoVHydC/PGb8NeDMRwvogxa73hjAnjIm5QOaMEkhHZPG8FPKfSdMx7S29YZe0ba/s5lHwlvHLhc+eGvByxpjiSJBhTJBpdu4sK9lI56FhH4co4htdQ4UespUjphpjna6B0HdS6R8dzHtRY9IZ650IMACI9kBqNfbjbgAAAABJRU5ErkJggg==") no-repeat scroll 0.8em center; padding-left:38px;
|
|
||||||
}
|
|
||||||
/* Sql */
|
|
||||||
html>/**/body a[href$="sql="] {
|
|
||||||
background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAARpJREFUeNrE0z9LQlEYx/Fr/gXdJILegSQJEk13yrUxxDFwUhqagyAEF8E34BsIFKlozpqao8K9WVrCJSWu30d+F44SOjj4wId77nPOeTjn3HMjQRB4m8SOt2Fsv0CE8HleYoRdnGEPF8jhB4+4xw0ONLc7R4E7VJBX23JNtJBFSflD9YXjrT3fQhxpfKqqRQEf+MaLxuTVF3e3bo02yjjBrTMojD+9R52+sO3F8KxC13YmeELCHbT0vtBnE6ua1EfDGZRQO7qiQNEK1LiNRzynSKpjCJ+8fY1T5d/VZ+2Y5nQs8YVXPW01+zjGg3JvuFK+q1yoZ3tOaVnJpcOzqOtwzzF28rbaX0zWXbQMBvqc/r83cet/40yAAQCHjz1eQkhXqAAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
/* Dump */
|
|
||||||
html>/**/body #dump {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjpJREFUeNqMU8+LElEc/8w4qeM4urvsCgqpEO7VYu/9YAmkNqiDRNdOQtC5k3QIL127BF78G+rQqegQlBRRhz24S0jWuumOrs74c2be9H2jkuJi+4XPvMe87/f73ufzPk/IZrOYxh1CFOeLOuEVn0izP6PRKFosFl/2ej0MBgNYlo1m06A5g98vQ1VVhEIhhMMh5HL3H3k8Hiw04GFZFjqdDjRNcxs0GjqGIwZFUWHZFkSPiIAiLxxFXHlQAXBocAQ2ASY4fwNKnxQ602LbxXzMU/hSKBRep9PpPcYY+v3+lIpFGvgRDAaJfxiVSuUN5X4+q8FOPp/fmxexcdJFbziG1+dFUFUQJhFv3r6XeZx7yG+g/F8R/5x00BuPIZNwJltD9WAffUNHq9VyeM5Sg2UR/3Fngo3uaRuZBxm6xhzX7grh60oRGbPAzCH6py38qlRgmia0Yw2H2uELWr7OaQszJ5KRduLx+NN5EU3bxPrWOhKXEohejCKgBhY2SG2mnkg8ebIbWxLx5+9jNNtNHOz/wLdP3zEaDLF7dxeRWATbW9t5QRDei7VaDbquwzAMZyZivV4nHKHV0WBYA1zYUJC4nMKYBJ0WP6M93xI+iuVyGdVqlSsvrTQTQVkLovi8iGQy2ZZl+YNt2+4tyGQONRaLBSRJcs3i9XpdCh6fjMCwC9EnQAnKuHrrmuuFUqkk0IkjVKuT27FBiFHHG47jbPKuNE5fAoimwD8QRZGPDp/TepN0ekfrR38FGAASfDL3E+dZ1QAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
/* Modified adminer logo */
|
|
||||||
html>/**/body h1 {
|
|
||||||
background: #eee url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpFMEMzMjFEREIzNENFMTExOTE4QkYwQjc5MjcxNEMzNyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxOUM1RjA3QTRENkIxMUUxODFCNkVBNEZGMDk2NUJEMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxOUM1RjA3OTRENkIxMUUxODFCNkVBNEZGMDk2NUJEMSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFM0MzMjFEREIzNENFMTExOTE4QkYwQjc5MjcxNEMzNyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFMEMzMjFEREIzNENFMTExOTE4QkYwQjc5MjcxNEMzNyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Ph6vyIoAAAJsSURBVHjalFNNaxNRFD3z0Uxm2iRtGhVdBOxOcFkESQ2GNoXgwk1X/Q9uxB+QRf6CP6HQbQs1UFqisREhG4MYJVlEiyR2IM4kZjL5mJnnfZOMpAsFH5y5dz7OefeeuU8AECIs5XK5p6Io3nFdV2aMiRyHh4fPMF+CIPDA+GV/f/95sVg8onTK78OEWDabfaHrOmu1WqxerzPbHrHBYMjY5iZF248c06nHDMP4wTkEVaQLh+R5nuQ4Dnq9HpLJJBxniuXHaRin5+DPB6Uy7HIF8sMHoOqEVCrFNxY4mdcm8ZIXSsVKJgPz7NzPi6cXflTTKUzfvffzSqXiLQoIXNVvkvlt0o4lrO5s+23ndrf8aJdnQnt7ey8DnhiYRKV/yufzpWq1ioODA4zHY+gnJ1jb3cFkYtO9TRVsod83h9TS54AnB0ksFrtfKBQylmXBtm202x1sbGzgV+k1VGqL/hBGFxVEJUmTZfkeUd5cE+ArMLHb7VLu4sPHL7DpmaIqiK+tIrG+jhuJxCIFIv61BAbXc6h7F55AYLP8PwTIOsGbgYvMsbikYBLj8bjSaDRuUX6Xt9But/H921eYug7LMGH9NDGg+Oro+G2z2TzudDqXfBL/eBCJRK6ZyD3QidSzLciKiOUVFdFoBOkn249qtdoZUS4WTWTD4dC7bqKDK8NAb2JB0UJYZVGIMoOmKXwDNzgX4jxhRPyLH2zBhxlM0xQCnjw/THESCNH/5fOAUCjktyApKrRRH6Ii+C1omgpJFrnAEucQulzpNiEZDoczNMY36ThL8zENxtw/HzRIjKJHcOm7q9FoVKJXl78FGAAi7FBT6eTVegAAAABJRU5ErkJggg==") no-repeat 14px center;
|
|
||||||
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;
|
|
||||||
font-size: 1em;
|
|
||||||
padding: 6px 6px 5px 35px;
|
|
||||||
}
|
|
||||||
/* Logout */
|
|
||||||
html>/**/body input[name="logout"], #logout {
|
|
||||||
background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAkVJREFUeNqMU01rE1EUPZkMaGI+JEMkXyaNiKINzSJLBSEEaRbRVf6Ai1Jw68K9O3dCN3ZR/AUxC0UCwW4k4KKoGKVioGATg4kNY2aSTDqZifdOmmmKFr1weG/e3HPeue++59i4BTgceAogg3/H6+kUm+YUDdMEaIRICyBkvPeeZVwul5XlIEVBEGyMXz7C8vJ1HHz/ttT49C4/UPqvKG2T0BANcybNZEmSTpCdTqeFPcqp1Wr8X1q5eVtSep3w14/v8yoJCSwwF/kbmedsN5lMotlsol6vo6eMpBurd1OmgawwMQDGnCzLMkajkU3mkTeYUp2hUAjRaBStVgu6rmNC6yKTOex6x2MLPA8EAhBF0RIwyQaL8Oj1emEYBoF4X4SLIOwwiS3yj2KxiG63i06nYzngTRYFZmWZMwcfxgE2sLNRKNi9GgwGKNB3uVxGIpGwHbC4oihQVdWas7AY1/aZkymVSrZALpdDtVpFPB7/w8H+Txnp+1uYvHkyK+EqeiBkgsEgUqmUpVypVBCLxRCJRGaHuCDAF+fFwzvHDvSjQ+REPjCPx2PdBxbgNe7O5KgEjnjkAiT/udkZsMBYPxZgsIv5nMkM6pjVWo65EDvgzYXnbUBWcKLvi2SO/hDw+/3QNM3CXECldfHHIc7vKdh9vJo97QEJ7rP4PD1wp69cuxT2+XxSu922nPQHJEAJ2lsdDzjx1Dd4iNG6PJS2t+trZ1zu/Ep6KUxuJZWqcuA/Yz0O/KIdlSEuazrWqIIsNWT3twADAMZTN2W0KIqPAAAAAElFTkSuQmCC") no-repeat 2px bottom;
|
|
||||||
border: none;
|
|
||||||
cursor: pointer;
|
|
||||||
height: 18px;
|
|
||||||
line-height: 18px;
|
|
||||||
overflow: hidden;
|
|
||||||
padding: 0;
|
|
||||||
position: absolute;
|
|
||||||
right: 8px;
|
|
||||||
text-indent: 18px;
|
|
||||||
top: 5px;
|
|
||||||
width: 18px;
|
|
||||||
}
|
|
||||||
/* Alter table */
|
|
||||||
html>/**/body a[href*="&create="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAl1JREFUeNqck19IU1Ecx7/3drfrXVpJf6BEx53bjK02UaLIJdQsiOrJJvVaL/UePgS52LvPKdRe68GCQOohg4gYmGTZnEzndNPWXpqbNPfH3T+dc3BrDp888OP8zv2d7+/3+f24h/P5/bcAnMT+VlrQNO3URCAwth/17ZGRB4KmqpxODte+Abqu14wkZqbTvf68E//qPQKq5VVV5ekFuq52cmwfsPz3vcT3ynrte9WnGqoVVEXhVJaAw4e4DotQIp0VWOUBiVRMa+BInPpazSdi/RCoVlAUZReB9quIR45Wdp5ZWsI5u535oUgEF51O5n+emyMEHaDaOgIwAq8IfF9ZYf0ebGrCdDTKem6WJHwJh5lPF9VQLU+zqORy/QzOmM1wyTK2SiX02GzoJRT5YhHnHQ5cIBQiocn5fDi7uGhnLTQSzCeTjEASRczGYqyqidIsLCC3sYHc6io83d3oGR29ziuVSq2FKsHp9nY4CEWxXIarsxNuqxUFQmM/+gfq5ibuDg/j2fY2ptzuqV1DrBJE19cZgWg04mc8zgiMlXn8CI3hZr8HjwMzGBwaQjCRWKYEfCOBra0NXYSiTKo4ySzMLWlk4+PwEvHkuxA8fTIsZC5UK5RLpQONBLFUihHQFQ5PIJ98gSuX+vDq9Ue0Wu+h+UQv+5GoVshmMqLBYECwK7/zh4u1t1XIxPB7+SUTvyWV3Zf9OGbuZzGqoVpOkuWHvMnUsddjueNMeZ4Hpz1Pn7jW3oePhyLpw4n6uFYorNGmJWItxIQ9cqTu3+Ams1sYf/NJn22IKcT+/hNgALjZYbRNSSf5AAAAAElFTkSuQmCC") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
/* Create table */
|
|
||||||
html>/**/body a[href$="&create="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi9JREFUeNqck8trE1EUxr+ZTjKZ+kB31UwtSUiVRFykRsGFKGkEF7qqe5e6FARdtVBc+B+0brTg1pU7dSGIWm2sMebRkDQNTVMSoUWC2qZmHp57kkzTuFB64HK/MzPfub9z517pxtTUNQDHsL+oKZZlHX82PT27H/fE5OQtxTJNyabkyiJg27YzqDAPW8y9eef9QuwIhFc2TVMWH4iIBySex/27OkY65rOd510tPMKrmIYhmVxAwquSDb/SpM62eOVxjVasWZDovdCWo8lsH4bwKoZh7CGwqtu4GzrKeaJQQHR0lPX7bBYXwmHWb1IpIjgB4e0hABPEVCC5ssL9HvB48DGf554PahreptOsRQiPQ2DSx7sEwOmREc6/lEqIBINtGip0PhRiPZ/JQHiYgAv0EWRWV5lAU1V8LhZ51UFBk8vtIWgXaLWcFroEp4aHOc+UyzgTCLBO0n483ZlDspGGbul4EnoE4ZV7N1EQiMivrSFHFKrbja/URmp5GR6ieVddwNnoGAq/ivwbuwRyP0HQ6+V8iYqEfT7cSdzDfP0TBqlIw2wALQvxF1dRCX+bUHaazQGrbw+K6+u8ByKy1MaHSgLeeLvohrEB76XOAuUlXfm+uam6XC48Pvmzc8LVv+7WuWoUqZfJ9gm8LEN+TQdKorniriuNWq3uj0Qe/s/l2b5evTl0UR+q56t17bk+J2+5KuLAazQO0VD+WeG2+wH9vzEMSIuY+X2fnvz4I8AAYtpfN5Cu7WwAAAAASUVORK5CYII=") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
/* Create new database */
|
|
||||||
html>/**/body #content a[href*="&database="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjpJREFUeNqUkr+LE1EQx7/7g93sJptERPFSbCGSJkUKK20CinB4d8UVQWytAqIiWEoKi4CVlYJwWNwfoMVZCIJWFhcuTQiCORFDJN5tNtns5TY/Nm93fW8TNcHTOwdmZ1hm5s18Zrh8Po+ZrFFdwsnkO9Ut5og//4zH46WNjY3njuNgOByCEA/t9iH1fUQiCjRNQzweRyIRR6Fw47YgCFgowIQQAtu20el0wgKG0cdo7CMa1UA8Al7goUaVhVb4fzbKAQE1AedPFVM9eQEaPk0MZsleqPMyP0KlVCq9zmazq77vYzAYzEYhlEEEsViMzp9AvV5/Q2N3jipwsVgsrs5DNMwDOCMXkiwhpkWRoBCvrawv3y3cYhsoHwtx37ThuC4UCm7iJylEQFHl/4H4e3af845lcPQWfm3Aw2PjCb7sNWDl2jdPm/FnxCcQMplMGOt5HqrVaoraNBuh1WrhW+MreoYBx+rB6fawxb1F7moOH5rbg70znafmqR5ERpwJtX9CpEn20MGL4SZ2x7tQeQW2Z0MccCqRgx3aVkVsNptIJpNwXTdYhEiwb1mwXQe1UQ3n1y6ED5nExKX1yzp19fcv30Esl8tIp9OQZVn82zHpQQqNV58hiiKk5Sg+bdaak4hnUEYVlqTQ49BSqZTKAtixSJIUjiDICtTRAe7LdxCNKbi3/QBdrwv/kHB42L9Oc/thAapnLctydV1/xGAGQTDbATgq7AOe5zG54q/4ZZzj2sFHlsNO54cAAwDujTg3Gh40tQAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
/* Privileges */
|
|
||||||
html>/**/body #content a[href*="&privileges="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlNJREFUeNp8U11Ik1EYfr795kynaBBLglbtqiyRSMiMunCCF0FgBP14U5d1JdHFJAKD8rKrEAIjqMlGF/0hTHKLSpi15ZoMjdZgbi23ydzn3PZ93/b1nuFkK7cXHs457/s8z/ee853DybKMckxbVNAowSkUOELLXoJhqxQlfCwW4RcKkAfGpG2NCtXBSUUMtuw1DR3qGeqVtXqjkOUh55LBlW/TPalY0EactwR5R4O8KHe27Tt86fjgyOWvTmvg15LbUShKMHTs7zh5+sI173ubcu13KEzUhbJGUWmQE3Cus/+G2ee2BoMRhx369WFla2Y4lg7Y/QuvgkdPDZgZp1JT1cGmgANNzXvao8n5sEoHM6XM5dqfjdB6d4PKyDi1DfIynxdyOXP/eFdBkpBKxZHhk9BpJOzWyhAEMcc4lZrqLYj47PnkWCySOJ9OYy0WRTwSBJ8IoyDl4fniW2Scmh3QIc7MvrEbE6ur+WMn+kxaXWN7g6SHCCnhdLqXAz6/leMwU7MD5lEo4rF37oNl8tGYq7GlFSq1Bi+fT7m+e/0WVmOcegYsRMIsQc0WSnVpUG/lxH/JVVsQpf9rticT72gYLSfpNqJmB+xWV4BjuSs3b5+l+QOWY+KfsToG9+zAcgTIZkso/a6Jh+OvaX4nswk8dQGTrjoGLF7MAUsrQJpHjq1v3R29yPMY+UHGofgOJ8ZeYxnsMRE0hKar3bBGPfdlGqf6DuI85fSEXeyjlRqu8jlzHMc60hGauww4Y2rD9UAcz3wxzFOObSlN2CDN9nH/FWAAi5Yew8BvpusAAAAASUVORK5CYII=") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
/* Process list */
|
|
||||||
html>/**/body #content a[href*="&processlist="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAj5JREFUeNp0k8FrE0EUxr/ZrNvEWlqITdKqTS/ai6AWTyIWFHsTETx4KF49KR68+Q8IHqwgQr2pBasVBEUFL6KtejBLQRDEoiKShBpzWGya3ZnsjG92Z9co6cCPN/Ptm5n33r5huD8MM3acP3LOqbfWWC6Xw93lewFpVf2BnfmFzYaFUMFQ7nQ6E5zzCW1pPa51triR+B4mFo0dM/NRG0IlDnuFECPtdls5jgPS66S9gUy/XyROEw+NZVr85wAuxG7f91U2m2Wkr0ZqmEbLelkbXCYOewTn+4IgAEUC0q34gPSC68Qj4hpRjtIHijaC1GF7KGUpDENQDUB6VEB1zAF76uvpa0MyTsVF1BEYlIyjkfKvxp75yYZDxGMznzLzKRu/KUknTosLDs/z4hQCk1ohvfF7V/6XiBPEExs+OQrSMwyNnw00m83YxY9/rxphYLso3R+SmbzRbS0ozJFjBQ3ekRk6rI/2ZSgqWke6/r4zunjcbNT2KvFcW8Yu9LnTZ09OSqVQ9Wqoe3WUBooobBumFpBYWnjhkuNBdkP07MQMDlgbX9xP5dzk4Gg9oN7JAuushdCRWLm97EJilr2XH1BTR8l/LmlvGg+IlzqFeQg5+/HmOzdfzAODwFBhCKu3XFfrqKp5VKKCXiamjf0WXZ4WtUT2uDWDGatS/rxfaRutS6w72qUedkyfsgXr9Di+qhb60fJW1vJ0/gJeqbek90fdGlMj7hBXCMc0kstMKAPE1v/qo18BN3Q2e85/BBgADNADzS2n40UAAAAASUVORK5CYII=") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
/* Variables */
|
|
||||||
html>/**/body #content a[href*="&variables="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi5JREFUeNqMU0FoE0EUfTvZlArmFpR4L0jT3HvoKR6EQG6eC5bQeuwhIAhpYREUDz2IYKG0SEvoxbOtBIVC793oRTCQQyOlFGNNUrK72Z3x/8nOpkUQP/z9uzv/vX3vz6z1aG0NHJZllank8O/4LKVsySiCUgrfjo9h8w0H1Xu76+ubAS2OOKVERGtm3XVd7DYaT/hblN/53f2FBQhmi9OSDBqNdAaeh+HVFQaDAfr9vq7vHWeT+h4QdsZIsiMCx2ExtaBrOpWaiA5DhETc7Xbxpl5HcXb27et6vUYrzzWBnBAIBgtNg79IisWitpPJZPDRdX8loJAI4qQ5jgnarRb2trbQabfhk/QP+/vwyI4Vk3OvwYmI2ONMLDQODvB4ZQWfDg+RzWbh+z7SQsCmZBLuNTibLzcsUBMD+P56nSJLU7aN1JhATCzwkMYpjIJSuYwXjoOHpRJ+XlzAox0Z9HqYTqf1bLjX4OxwokDPgLNQKCA/NwfeVkmDe1qr6cqZIoWEsRIFZt8pEwVfm01UV1e1nebJCZ5Vq/hCB4nXtAXqNbibFlgBn+dcLvH/bnsbrzY2sLezo58tvasTC+L32ZkhSHaBIwgCbYcrK9E13mbuZQxjRevoCN1Oh4+tHQ8CndNTjEjeD3pfWV7G0uIiliqVRAH3MoaxHLco79ydn3fUtaCBqUhKRcdY0c+l6CdTXhgqn565lzGMtQ1B7/z88nY+/xL/EXI4vIwJwj8CDAAVoIrz1xox8QAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
/* Status */
|
|
||||||
html>/**/body #content a[href*="&status="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAftJREFUeNqkU7+LE0EU/mZ2d3bD7pqckhQqB4YDuQRsTj2t1ULESkgnWKloYRMQizQ2dhZXxkq8fyCFjdrYCAqCCIIgLCgWIkQ0m+Q2+9P3ZnMrNsJ5Ax/zivd973vvzYiiKLCfY/Z6vTbdmwR/j9yQ8NrMsuxsv9+/12q1ulmWIk0zQoIk4ThFnucoTRoQwtQwTYXxePxhOHz4wKSEA7PZrBsEgU5mkKjGv2JCdzQauaZlWflgMECz2dS+eCZl1aKKGUmSIIpiSMkOTO1Sz4BsCiZ3Op2qCltfnFpD9vK9Jk4mIWGOet3X9hnz+aQSkFyJSbtgUnH0EFWMiDil5BiW5RBKMrmmnOiPgBACcRxr4i6c1RbCcIbFIoNt15ZEtXRgUTzVApKSJdvmaumZ4/pm8CEdeJ02jmzdROPSaS1k2w6UsrWIdkCVjdqFk0g3T2Dx6Su8+9eqRXvrx9C4dRE/7j6Bf/083HNXcLi2go2VNh5fvVMJSPHiLSbvPush/nz6Su/dXV/DwduXEQ6fwXUbyLbfIC1yBAIIiMhtVw4cx9F98wC5HaU8qG8LTB89h/M9gUG9S2n89Qx3dsoZmPSILKVUtffyWDTAMYyPvxARUUqxrCgqgSgKaa11T/i+f8MwjNX/+Ujk9gtL1pYfydwjP+UPJfb7nX8LMAC+uy+OK4sAWgAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
/* Alter database */
|
|
||||||
html>/**/body #content a[href*="&database="][href*="&db="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAltJREFUeNqMks1rE1EUxc98kMlkMkkqbaXRhaEStCAhaDeuKii2JBWFtiqCYFcBof+BKW6yU3FpyUJxU1Eo2IKtXdRFV7EiFMG0pVAsxnRmYpPWSTLT+fDNpGpCwfbC4T1m7rvvnt991PDwMPZjkKgLR4sfRNPOhv3zRdO0rmw2+0xVVdRqNRiGCVn+RfYWvF4eoigiEAggGAwglbp5n2EYtBRwwjAMVCoVlEolt4Ak7aKuWRAEEYZpgGZo+AS+pRX6v41SgE0Wm7IaQkNHL0DSGwft/cOmq+ZotvApk8nMxGKxpGVZqFar+1YMwsALv99P/Aexuro6S3KXTisKhhYXWwqcT6fTyWaIkrIDta7Dw3ngFwUECcQriRv9Y6nR6f58PncoxC2lAlXXwRNwe1aIQAR4H4ceWY5EFGWqCDw9BOI/7xbV8C/JRewwzJnI+Ph1GXjIHjqFvxMwsacuYX2Dw6P5+eTV7u4nt2179sgQ620S9rhF3LmWQDwen5Dq9ecjwDLrJDtB1oMQf5ZRqang6RWYpfe43JfA1NsPuHBOqC6vnFzOt7eD3dzcRCgUgq7rditEA1vb29C1zzCNOQwODGDyzRy6e8fw/dWLfEcHjYVyGWwul0M0GgXHcQd4UHoRgvYOg8kEXk7OoLPnHtpO9JILHjNOl2tra+4YefI4xHA47GNZ1n0sHo/HtVBan8Stu6+RnRjB8bOj6Dx1EQxLQ1EUvlAodJKzu4QzjhGFeZ6/ZNt2u2mScdm22wCx8WCoj/76ZYP5uFFkvlEUZRM5/2XSwQLJKfwWYAAtt0zt3hIutwAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
/* Database schema */
|
|
||||||
html>/**/body #content a[href*="&schema="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAcZJREFUeNqkU7tOAkEUvfuABIgsyksTAkgBtISS0kIbYk/sTKgt7PgF/QEK/QMaSDREjQmFNhu0oLEglISHbniEAAE8l8AG2O2Y5OTOnT1z7rk7M8JisaB9hkh7DjmXyx2KoniGuRvozufz19ls9lev13VSJBIhSZJMeVI8Hr/MZDLXwI3T6VQqlUq/2+3W8FEXGA6HNJ1ODbzRaFSTG43GMUTOmcQR+ZOiKNlNm+PxmFqtlm2Xx9/gTIp5PB4lEAiclkqlt2Kx+Gmz2R5kWVYnk0kSnHy/31exwcDTNO1bgB0P7KZB9AEtCBbRayeRSHABdpKvVquEnk15MhY76O9x07LX66XBYKDnbrebms2mgQcBks2OxmKxEGzrOaxTNBpdblgPOCL+0QYBq9VKvV5vay0YDBIu3BE2XbAe0EH+jPhLDoeD/+RWdZzCGlm73U4+n49SqdRVuVx+QdUFR84BEkyvJ/cmL82lUemEJ+Fw+EBV1bs1J5lM3iLcS2YC/D64P1j+wVxdIeb3+12hUChcKBTecYwf7Xb7a9MBz1mQS1u5m1VcAq5cAN8LF6BBXAXquwLC6oFJJhA3wLwp33Jh3+f8L8AAZ3ntkRsbeCkAAAAASUVORK5CYII=") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
/* Refresh */
|
|
||||||
html>/**/body #content a[href*="&refresh="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAt9JREFUeNqkU0tPE1EUPtOZQh9QSVsKtAgB5A3RWDRaU+PCR4RUDSZGSTeuiDvjD3DRhJ1xYeI/MJi4wMRHosTEuJCNEqJBQQtFaAuhb0amnee9nlsLNW5cOMk3c+fc8333nO/McJRS+J9LYLfjD1ZBMJtBEAQw8byX47hxDAcQPZW874g5PGyGELLJ83wY34Nvb3omhb8EQwJPI4cO2tytjRanwybYWFAs6v2JtByMrktXCaVzhq5f2COY9qmUhqy1MHXltOdIm9PSyulgK5UMUBSCZXK2dpeldeyk+4yO5PCY14/PaguUEC/PkchYoGk4tVmCkqrLK1tSMpEuFth+h8/ecKzf1ZVNy3D9vM+/k1dBU9VqBbqqjnf5rO6tuAjZ/K785kPiy3qycBeFRzRZHonGcq+mX0bnPS1WWI/mQNd00BWlKqAqyim3w+zcyRfhayybRPX7aNi0JIpsL4w4cSs86BfzJWhwWcBiFVi82gKe0s1znE2SNUhuFwo4iWlD0wAdZ94E2ajvPZyb/9NtnNT8vgBTkxQdJIOU18QwwDB0qLVY2XgnmRDrGUn+kcPt9c1NdfT568X1aguyHN0uyEXJJIDjgLUBPZlQSzLkUinIZzKwg8Aqj9bV1ZzDnKF4erdRUxTzvgC+vF+LZ3KiUAstvW0+PO0Olj1R2cMu6CjGrnn72lswh9tIZFWM71YFVHVmbflHhtitkODtlqHRwKCnrTGCU/iIeIfr20MXAwNJcz1lORvRuIScbNkLZpAj/Jj1HeLttinX5dHhkk7BbubAUVPWF0WVJCWNxqwCt5J9+mLBKMmzaPSW+OjGbwE0B0yePjD1XgqZfMMRc0+3m+vscBKni33KoimXjdHV2JIWjX4mycUn5NuzGEktQ5lbEWDTcCHcnGegmes8GwRn9yDw5k6MSaDLC5BZ+kRXZpdpfu0nxtKIDHL1PQFWq60C4R9/sFEWBSgil/wSYABg+JOXZhLaRAAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
/* Show structure */
|
|
||||||
html>/**/body .tabs a[href*="&table="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAoJJREFUeNqkU01oE1EQnk02iTFQE7QihUKRkKTF1iU9+FdQCoWYgAcPegkIeiiIWiHgwUvpQXs1Ggo99OYlFwUhWAhYhZJWUmhMxJbYYk1LFDcmJraSv911vjQbevPgg9kZ5vu+eW9n3hM0TaP/WSI+gUCADAYDmUwmEgSBUNRoNJ5jaKjNSyuKsqRjjUaDVFWlWCy2X0BfDJ5nd5r9KxZI0Wh0BuRgMHibcznGrrD/wD6hawwHxBdcLte12dnZGYfDcYOFhkJBpnL5F3Y0IAcMHHB1nYAj+Xw+xHeZ8FSWf1BPTw+trqY2JElyAkilUhsej8dZKhWpu/s4jY+P3+P0s/n5+f0TVCoVqlarL0Oh0KTZbCZZlmlgoN+pqgrBEO/u/iZg4IALTecX+BQX6/X69Xw+v8e7bYqiSMvLy+t+f2AGhhg5YOCAC43+7+T1eh+srCS1hYU32tJSQkun09rg4NA0TwLTIMTIAQMHXGigbU2hVqsZq9UaNZsKKYrKoxRZKDYwKizEyAEDB1xoOk3kzo6xP4PExMT9WyMjl/q2t7+npqYevkBucvLx1d7eE9Li4tutcPjJXEsoCO+z2WxcP0GcC3zmDt8ZHj7bVyyWyO32SLHYOwl4ufyTdna+ELCuriN2nlSEC2x1mshdRZGbkchcSJaLfCOtFI+//prLbRIMMXLAwAEXmk4T+ZLALo+Ojj1PJtc1t7s/bLfbHyUSGQ2GGDlg4IALTesd6Y8JY7JarX6bzTZtsVhOwq+tfdMymZx2MAcOuPrmrSYKaDHRUbZjbIcA8sM6xQ9sADFP4xNf54/t21tnk9kKrG3qBdCLw20T//GCFbY9tj+sVf8KMAACOoVxz9PPRwAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
/* Edit row */
|
|
||||||
html>/**/body table a[href*="&edit="][href*="&where"] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2lpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wUmlnaHRzPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvcmlnaHRzLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcFJpZ2h0czpNYXJrZWQ9IkZhbHNlIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjcwNEVCNDY0MDM4NzExRTFBREUyQ0JDMzAwQUI1NjI2IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjcwNEVCNDYzMDM4NzExRTFBREUyQ0JDMzAwQUI1NjI2IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzMgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ1dWlkOkFDMUYyRTgzMzI0QURGMTFBQUI4QzUzOTBEODVCNUIzIiBzdFJlZjpkb2N1bWVudElEPSJ1dWlkOkM5RDM0OTY2NEEzQ0REMTFCMDhBQkJCQ0ZGMTcyMTU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+MT7FiQAAAiZJREFUeNqMk1FIU1EYx/9nO3e+NranKIw2ErM9SQQXxCKMRdFDCWEaNIuIetseQiIKG/jQQ4H0kkQxdLRaYiijtdWwljjKjQlNRQPHEhWUjca9eb3bPd2tFTdrrgMf53x8/98533e+cwhqDFsDQccpILHYXvbv+f1NBcD5DfB8BcZpLfDAvp9+YrE81c+azc6jLlf3RE/PLgWgtBaoGVZZltv4dLpbcjph6+w8Fhgc3CD/AQIMhzOr5osOV7orlUrBaDTC29gY2L25eZPurwfOtAIHW6rUosKyjOtXr7ns4bEW7G1+Bp7n3Tv1eq+V42bojfMAIdvDpzv67MWiDIvFguFHTS8FgfrnCJmZ4zhUvUQtLEkiVlYWEJ98MW7dg35F0SV/yWgtWBByyGaXEH379L16oFtPyRutlG4H53KrEIQsXo0ORQ0c7qg9C2+V02rw2loakvQdwz7PhMGAXkYR0krVlpaN/gteXp6HohQw9MQzqcK3GSO/Yd8YgyiKf2bAGBrEPC6fdfTZM5nPqq/g8YA3pqZ9S42V4ZEww0iI/VUxFSUYCkW0nbsSOT415YbJZMbDB76PtARTvA5GgWBUqdosmhdJs413tBOdbofR1CXev+uI19Ux94ckCb77xGr9NdD1PE4eOnKhdfR5/3Qk5I99WUIgkkBcLcykxhWNFbf4pd2V0htkl06QgdkMYskFTOdFtlERF0qXXZm1a7kSL9sPAQYA2Q4Ie25SbgYAAAAASUVORK5CYII=") no-repeat 5px bottom;
|
|
||||||
display: block;
|
|
||||||
float: left;
|
|
||||||
height: 16px;
|
|
||||||
overflow: hidden;
|
|
||||||
padding-left: 24px;
|
|
||||||
width: 0;
|
|
||||||
}
|
|
||||||
/* Select data */
|
|
||||||
html>/**/body #menu p a[href*="&select="], html>/**/body .tabs a[href*="&select="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdVJREFUeNqck8tO21AQhn8bB8ehRe0SUEBOlIsSVFGqqlK3oey6K+9A96wTKU/RFU/AG7CrKhAg7gmKiJKIplFWqItWIQEfuzOT2LmsSo408j+2/5lvjo+1rULhM4AFTLfahuu6i3vF4rdp3F/y+W3DVUrzKNk8BTzPC4IKS3h8Hc0Hz49zr8BeXSml8wu8PsU1uW7EhjpHOmd7wX1fs4e9hnIcTUkBDfs1DzGjS5N1pPOGRR3bLjR6ztoNNJm9ebDXcBxnjMD99YCdzGvJT25v8T6ZFH1QLuNjNiv6++UlESyDvSMEEIKcCZzX6zLvXDiMo0pFZn5hWfhxfS2aF3sCAkUvDwmA1ZUVyS9qNawnEn0aKvQhkxF9WCqBPUIgBSYISnd3QmCZJs6qVekaYZqbmzGCfoGnp2AEnyAdjUpeajTwJh4XfU778S6d7tNQISlA3rFN9AkqzaYQmLOzuKIxuGuYaE4H++F/RvbqVEVXE+cgsbSEFFH0Hh+RtW2sxmLo9npYoy/yNpUajkBeo9ftzkwSVFstIeBVpjH8rhc0xigBe43f9/dmKBTCburv4ISb//VvsYe9mmXbX/VIZHman8ntdH7y0BbFSwrjmX6H4s8/AQYAQChL+KIinhAAAAAASUVORK5CYII=") no-repeat left bottom
|
|
||||||
}
|
|
||||||
html>/**/body #menu p a[href*="&select="] {
|
|
||||||
clear: left;
|
|
||||||
display: block;
|
|
||||||
float: left;
|
|
||||||
height: 18px;
|
|
||||||
margin-right: 5px;
|
|
||||||
overflow: hidden;
|
|
||||||
padding-left: 16px;
|
|
||||||
text-decoration: none;
|
|
||||||
width: 0;
|
|
||||||
}
|
|
||||||
html>/**/body .tabs a[href*="&select="] {
|
|
||||||
background-position: 2px bottom;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
/* Edit Sql */
|
|
||||||
html>/**/body #content a[href*="&sql="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY1Mjg3MUE5NEQwOTExRTFBMTlFQjAzMEMzRTgwNzJGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY1Mjg3MUFBNEQwOTExRTFBMTlFQjAzMEMzRTgwNzJGIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RjUyODcxQTc0RDA5MTFFMUExOUVCMDMwQzNFODA3MkYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RjUyODcxQTg0RDA5MTFFMUExOUVCMDMwQzNFODA3MkYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz67SGPfAAABvElEQVR42sTTSyhEURgH8O94jRqTJg1lo6YsptGIpEzKa2FhRGhY2chCWZDSbHATmkgkC81CInklpCxGmlGy8QqTopnFJEXyiGsadDv+p87UbKwsfPXr3PP67nncyzjn9JdIoD/G/ydgiFKUXfAIJmiCLOgEC7zBNmyCAlabwZAx9f6uTybqFRk2oAXy5LNoG4ZRyIAq2W7bXWBkNBq9DRbLClcUvsXYvtgCEpEeArAqV5YPl8v9/AmlX47Jw4WVmUym7MXTU2e1xzPxzPmwSDAOTqiEJZkgObZH7zxpot7iIGvkg3rP/Y1Ws9m8fhyNzqHDm4ROnzzMPnEmsAcpkBhLUlJAmeXF5Kiuc9mUAfdrmi4xFInoL2K30CYnrcOgnJMi0ecXVTgqKKe1zWWbnXH7dvx0FwxrN5qmUTtjhSJBB77GIpTfoJMJrqD0IED2+wca6+5xGacn3SeqykcCQYqiL0lVVTHHIwaH4VCWYjXZUAxbtXb2ytVrrnSyUH0VNctDDsdZE3tOlcvVxR8eIhPOakrY0+0jDV0E+RHqX2JX8AGq9GukQS4cwAvUQLq88lT5sgT273/jjwADAGLJkFFBwODaAAAAAElFTkSuQmCC") no-repeat 2px bottom;
|
|
||||||
margin-left: 10px;
|
|
||||||
padding-left: 22px;
|
|
||||||
}
|
|
||||||
/* Inline plus */
|
|
||||||
html>/**/body #content input[src*="file=plus.gif"] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAelJREFUeNqkU81qFEEQ/tr50UncrI4iwq6oRJCIIV6zxFxE9iCIbxHwXXwA32CPXgRFEZFgPGgiIcfNn0hgYU1mnV070zPTbXXP7Mwke4hgNzVT3f3VV9VV1Uwphf8ZDJ2r9GUXSVuhdZvEP8PmkOQtFF5CqaFttpRauXN99vmDmwtNz7ngVtGnI+QxF9/3Nme3ezt6+cJGavbbCzfmm+JP5ApEBXgwGJh/vV6vcrj3G/ea2wc77ZzAePAtWG54HBaoMAzxefm10VufnqBWqxVnnue5ZGeuaiPJQoyiCJzzAiSEOKFXzxhjGNsVBBpUJdF6v9836/0f+5BSZga2Dd/3JwniOMZoNMK3x+/R6/UwHA4NgeM4+PronTHUMvemhTAKJwnSNAVPOLrdrsm8BmvjseFYQDVKnKRCEGfKkThC4AR4uPU0uyhhNpY+GKP5j8samY0ZcsaodPGpCAIrgJoifWpccJReL+vUl3WUNCciENQBOIcqqiQ4j5JYNxfNMoLIZPcwllQGD2UXkse59VamN072suSSSiZ1S8PCLt3nFq5Jnt61G+40m2aWua+dvwo/13MhnDj+MviZHkQddMQaM5AZdhtL7BmuYJHWl854TAF+YQ2r6hV+q12Wp6eGMs//OhLd8X8FGACYiuElnjs9iAAAAABJRU5ErkJggg==") no-repeat left center;
|
|
||||||
height: 16px;
|
|
||||||
overflow: hidden;
|
|
||||||
padding-left: 16px;
|
|
||||||
width: 0;
|
|
||||||
}
|
|
||||||
/* Inline up */
|
|
||||||
html>/**/body #content input[src*="file=up.gif"] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi1JREFUeNqkUz2IE0EYfZOZ3WySi9FAPLU4fwjEw8IUhyjXxUYrK8FOG8FWQQst7OxEUE7wOq200qv0GguR4+BEMIpwGDxNBE8vcMZcsv87fjPJrkl1iB885s238958M/Mtk1Lif0KI6iINLAfGzhOpEXZto9kkvISUDwHZE4OcvFA9svfS7LH9ZSttWOPrJeIi1Wg7vrO08rVS//idUWpOIArVt9qJmaly51ff6oxIO53BrFAojDpaM0f3lesfvtUGBlIbFFNMWo7jjO399HZFj+eufxnLm2bGIl1R8ZSugOB5LmzbTvD41oFEoPjoN9t2EOuEDAO1hjmOB9d1teDF/arm3W5XC6Iowr3LOZy8+AZccJRKRSogYMMKyCAKmO/7CMMQC3em0Ww28Wyxjna7TZV5eLfaBeccrx/N0pUK9Pu+1ihtbIAgCGG7ARqNBpberuPm/AYMw6B3Frh2t4n3n3qaCzMLyUzEOoHhEbb6EXoex9kb6+D0kkZmx0BAUPzq3AZCvwUzUwDjVP3wCEI7kYEdmjDSeQ0VvttLDISRpXxuvD2i2CD0tQFSalH6b/tQ1yQGZjYxTiL0hwaBp9vT86UrrInEgThOX/mseb50aEzr9Xsu6VRLg8Ndpf0PTwaOU9m5ZypnWBMixQ0oZPK7NeK5gu/Y7trKq9bWz9YT/H6wrMooghUPgp86AzZ5nNy2+ZnkJuSPZYTPF4iuKYOMqlIf599C3X73jwADAG6CADM79TwjAAAAAElFTkSuQmCC") no-repeat left center;
|
|
||||||
height: 16px;
|
|
||||||
overflow: hidden;
|
|
||||||
padding-left: 16px;
|
|
||||||
width: 0;
|
|
||||||
}
|
|
||||||
/* Inline down */
|
|
||||||
html>/**/body #content input[src*="file=down.gif"] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjVJREFUeNqkU01oE1EQ/l72vWTTZps22B+ltCiBRItYsYhSBIkXxUMv9qzgQaH04kEFe/WsIh486s1jDyJePIhIoRepogjRYipoNRBjmuz/Pue9dJf0VKQDHzP7Zr5vZ97sMikl9mKcT78kx/rB2GUKKoShXTgNwitI+QSQbd49k1emp/Zfnz05WTQzwtxZLxE3qbzt+M7b1W+ltY8/GB094ohClaucnpkoNv90zGYPtdnsPuXz+V5Fc+bYgeLah++VroDUAoUUk6bjOElVq9XC84dHdXxx8T0sy0py6XTWJF5B38F2B/A8F7ZtJ0We5+2Ie3NCUPfbPC7DQHnmOB5c102KFKFer2tfq9UQRd2LMLiB4eECNRCoO0AKEQlEAfN9H2EYYvneYSxeMvG73tAC6u0SBh7cnsKbp7MUc3Q6vuYoLtcCZEEQwnYDVKtVTI5I3F0Yp1YF7Znj/s0SThwZ1DFP90EygZiXghqB2tnqRGh7Bubv/NSFx8sDXQIhJp+5+g7CtMBEVnMUNxnBDtMQGQu5oXHML9UTcoyz1z7pXJoEDJFLRqAOaJ7QZ0j1aQGFgX2HMHdrMyGfW/iiz+K8guYQlyPQ62p4vnS5mcvEW8iPlXHhxtck7jWv03aJ19BbgfuZllgeDRynNDg20S/MHE8ZAgpZa0QjflbwHdtdX329sfVr4xn+Pl5RuyyAFQ7COD8HNnqK1Hb5mWQDcnMF4YtlCteVAF0pLP1V/p+pPbb+CTAAmwfytdL1/44AAAAASUVORK5CYII=") no-repeat left center;
|
|
||||||
height: 16px;
|
|
||||||
overflow: hidden;
|
|
||||||
padding-left: 16px;
|
|
||||||
width: 0;
|
|
||||||
}
|
|
||||||
/* Inline cross */
|
|
||||||
html>/**/body #content input[src*="file=cross.gif"] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAe5JREFUeNqkk89KG1EUxr+ZubnUjJaipgtNtTZKxE1AVIi4yM5tF30Hoe/iA3TnQkTBRbZFKApCAl1142CJqLR0ZUNJJpPJZP70nJvcEK0SpAPfzD3n5vedM2dujCRJ8D+XODIMGMA4aYfibdLkCKZO+kxlP5FcwRla7MytrHxcLhazMp2WT5HcbeB5gVOp5H44Dqd2RdTb217a2Mi6vi/h+6O6lu9WV7M3jsPd7ppsQJqMTVO6rgtWdn8fev1YrpskkhlmzZBuLJ8qN5tNLJfLqgw/OX4sxyaaE2G/L8/z0Gq1cLy4iA+1mjKcOzhQ+RrFpmniy9oaUqkUMpkMNDcwCIIAYRhiwraxNz2NwskJLMtSgJQSZwSr6Xa7aDca/xowHFB7Xr0OO47vwazx4W9PJpozu2xK6hCY3N1hLIqQPz29BwshULq8RJp+x5JUTHODIRpkkKbv/GYI/ra+jq+FgjJgbV5dKYMX1KHmBh1ImgFv3pZKCr4geJZiVjWfV+2e53K9LqiQ5kSnfzwjmuIY+cxT8J3g+aF35nWVYJ1rx3HQ6R1pWNd0ewu8bkdRfkYI2zYMi/8M4oF0juGq7//8FUWHh0DF4L2XwMIW8H4KKFL8asRR/vObwHOg3ACu2YA6x0S/wHMunmHzrwADAPb07huzEp/RAAAAAElFTkSuQmCC") no-repeat left center;
|
|
||||||
height: 16px;
|
|
||||||
overflow: hidden;
|
|
||||||
padding-left: 16px;
|
|
||||||
width: 0;
|
|
||||||
}
|
|
||||||
/* Delete */
|
|
||||||
html>/**/body input[name="delete"], html>/**/body input[name="drop"] {
|
|
||||||
background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjE0RDRCQjlFNENFRDExRTFCRkZGOUEzNzI5RTFCODEwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjE0RDRCQjlGNENFRDExRTFCRkZGOUEzNzI5RTFCODEwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTRENEJCOUM0Q0VEMTFFMUJGRkY5QTM3MjlFMUI4MTAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MTRENEJCOUQ0Q0VEMTFFMUJGRkY5QTM3MjlFMUI4MTAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5zX5oGAAAB3klEQVR42qRSvU7CUBS+LQXaBgIpgSiJEpIuxMlVwgMwuOAb8Ah9AgZnJmfeABYegMHoGxiW6qAJJg3UEJAWaIvfKW1TjamDJ/l6b+893/n57uEOhwP7jwn0GQwGjOM4H7Aq0AGugPPA7xV4BEbAjJISut3uMUDMrgVB0CqViqrAstmsSI673e7SNM2WYRg3juP04Tf+VkFIBqGnqmoDlUie5zHLssI7GfHkYrFY0nW9t91uWRiEDxyqqVRKq9frDWSTiEhOcdAZ3dVqtQbP81rQ6rEClNkpl8uqbdsSSkwUDYkkVKLO53PS6S4M0JQkSdlsNpGj67qU0QftCUEAJsuyQpx4gDMsIjm12222XC4ZqvFfJZPJMGjjE8mGwyHb7/diwIla8DPggkFpf0+En2RfNP4oWzg/fgAo/obyLxFAnkwmf2lA/jZx4hU8rNfrJjLKwTAlGpKZxImeET8j9P0MsoVBYkmA4UUtnTjxADOaMPQ/xd6iPn8DtLEWi8UUa584UQuYLiaK4rhQKNCzafl8XgWUdDot0j20sVerlQnoKL+Pasf0SvFRFnBQAl6g+m0ul2tBjwucnwb37wj8BJ3uMZUG/k+AOeCEATzgk7qBwwcwTdDQDXyJw74EGAC1PioqQ6UN2AAAAABJRU5ErkJggg==") no-repeat left center;
|
|
||||||
border: 0;
|
|
||||||
cursor: pointer;
|
|
||||||
font-size: .9em;
|
|
||||||
padding: 1px 5px 1px 18px;
|
|
||||||
}
|
|
||||||
html>/**/body input[name="delete"]:hover, html>/**/body input[name="drop"]:hover {
|
|
||||||
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjFJREFUeNqkU0tPE1EUPvPoOHdaSSkUsYkY2xLTmpCQmJBAumBNZIFLoz+CX8Av6MpfoHHLhgXsTTWE7ohtDRhEkrGpQy0M7e3ceXnO2Db1BQtv8s3cx/m+87pXCsMQ/meo9HktSaDgnyABZBAbOF1GzA3sviDeoatthOnjgvAcnau/CT6JMbaZXVjIZ+bnU2xiQqcI+eXlonl0VDo5PHwqOC+j3c4vEQzJLJncWlpbK4SqyhzPA+fiYnhmzBYKRjqbnaru7m51f+5HIhJ5eCVJmVu6/mZ5fX2Juy4LguCv+UqYqhqG/GBvb184zrMXYWhGEWA+G3PFYv67bTPHca4tWiwWYzO5XP60VqM6vYwEPICV2+l0ymq3R4au60Kv240ghAAPU4pyVlWYnpxMEWdc4F4gyzoZlSoVME0TOp0OKIoC8XgcEokEaJoWCezkctDv9XTijIpI2h56FLYNjUYj8oah/kGmwajdaOuNd8EFOLNbrcXQsozG6uq1NUiQvRB94oxHUGk1myt3VNUwUP2mccZ5mzg0lwcC25/Pzz+BLHMDW2VQ4/8BbDFvOs4xcUYC2HWz6/vl95ZVxwPOUIQN8h2HQHL16qreC4IycUYXiS7IfVw8xtv4QJY3C5qWf6hpqaSi6GTU8f3+RyHadSGOT5BcxWac4n7EHQhQLaYQ0xmA2SJAaQbgET6uu4OL9rUF8KEG8Bbd4hS+ISzkekMBeSxN9YYa0kPsInrIDX4IMADJaAE/Me2jPAAAAABJRU5ErkJggg==");
|
|
||||||
color: red;
|
|
||||||
}
|
|
||||||
/* New item */
|
|
||||||
html>/**/body #content p a[href*="&edit="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAetJREFUeNqUU01LG1EUPW/yQsigUmOISZSkYxdVwW2lm4KkFrpwV6F/QGj3Lrpy4a9oN/0FBcFNQYWIuFHoIsRSWxzFkjZCsKaZNElN5r3eOzMOtEg1F87MvTPvnHfu+xDPVlYghFgAkEH/UZVaaxCy71ZXX/fLpslfSOW6nAtNjycfgEAQSqkQ19X7hTsgrpCuL2AozRIC8/cENo6091aKQL83bKBgsYiPrWOAxxPXkG6v5zlwA4FNW2NCdqC//4Lm2QiP40Q8UxDKB9euHgJxhez5AoED+DNX2lieToS97h0eYnZyMqx3SiVykANxDfnz4QkGd3Pf2MFisgs0NKxhidNaLVwPK5PBcbUa1plkEjzec3A53NQXD+w5l6y9+fz01jtQTL/3HbQc5xSmU2RFyjH1aOZG8qedsufAE2icn+cHOqk5+lCkHHtr27dy4Al0u0IatbgY+mg9V0sarwoHoC4xEWnDku2w53/BoQIHRrI0zUmeFdfrcbQTJsoOkE0kMDYygnFasEaziVwqhfzoKO6m0/hRr185MOTvTocFI1fbyOegEAO+VCrhyeMo2/ZfNY8nbkReUN8UsWg0irf3m0GHpIDsf9eAxxM3JmJkyzDNl4Rcv5dJtVpfRZCbhEFupQ8+XyLnjwADAJgWSEmnMNKYAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;
|
|
||||||
}
|
|
||||||
/* Create view */
|
|
||||||
html>/**/body #content a[href*="&view="] {
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAkVJREFUeNqkU89rE1EQns1udhOCrk2KlxIhaaGHFPfQBFJYxFbc+gtvkQq5+uPoQfAPEHJQemnFIAFFzCFYycGLGEgVElgMRhG7OTRiKiaVKCkYSTTbbF5nYuJBDxYy8LFv3sw384b5lmOMwShmgxFt5AIcWv8wGOUg4jhCQ/gR7kHeDuIjIoN4iWgOecMCHBY4L0nSJU3TpqLR6GHDMFz5fF6koKqqZiAQaCWTya+ZTOZDp9NJIO8p9aURHIhroVDoRi6XU9Pp9LRlWWNer1dstdpAQJJIdxSjHMolTp/L8/wp7Lper9c77XabEbLZLCNLJO4zVZ1nmnaO4avYME65xCGugFWWwuGwG58vmqbZnysWi2FnC1ZX431/cnIGqtUSDOOUSxxstEQFHhYKhbFmszntQKMEn88H2awOc3Mn+wSHQwK73fenwC805HwiLm+z2b5UKpWerutWMBgcl2X5AM4LhvEe/H4FZNmN3Q1YWDgG8e4juLm5vLvyPP7ZePD2Dm2Fx1EtPGzUarXtVCr1vVwuNxRF4Z1Ou1gqvRIbjS1QlMAPj8ezdbt6Vzhz+qwrV9W/Iedq77qrSzvkEYcQHlyNG180gd8j6MuDDYF12bnIpvhxEDgzcjHiX3uyZgDPdVGGBW6gRkp0Imjv3D9yW5GfzUdOHP37+kV6/Q33X60uSqhL6R4wmCV35oIyu/H4XfG3DKEo7EvwDK5AF6W+y17vWKjqnz0AOxfEkUDY919TxxV2WXH71iYgsUhkmJBgT4ABAOtC+bduhTyuAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;
|
|
||||||
}
|
|
||||||
/*** Messages ***/
|
|
||||||
.error {
|
|
||||||
border: red 1px solid
|
|
||||||
}
|
|
||||||
.message {
|
|
||||||
border: green 1px solid
|
|
||||||
}
|
|
||||||
.error, .message {
|
|
||||||
margin: 1em 0 0 0
|
|
||||||
}
|
|
||||||
/*** Content ***/
|
|
||||||
#breadcrumb {
|
|
||||||
background: #fbfbfb;
|
|
||||||
border-radius: 2px !important;
|
|
||||||
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;
|
|
||||||
margin-left: 0em;
|
|
||||||
}
|
|
||||||
h2 {
|
|
||||||
display: none
|
|
||||||
}
|
|
||||||
#content {
|
|
||||||
margin: 2em 0 0 21em
|
|
||||||
}
|
|
||||||
.tabs {
|
|
||||||
margin: 12px auto 10px auto
|
|
||||||
}
|
|
||||||
#form + p {
|
|
||||||
margin: 20px 0
|
|
||||||
}
|
|
||||||
/*** Tables ***/
|
|
||||||
html>/**/body table tbody input[name*="check"] {
|
|
||||||
display: block;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
table {
|
|
||||||
border-radius: 2px !important;
|
|
||||||
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;
|
|
||||||
}
|
|
||||||
thead td, thead th {
|
|
||||||
background: #eee
|
|
||||||
}
|
|
||||||
table tbody td:first-child {
|
|
||||||
white-space: normal
|
|
||||||
}
|
|
||||||
td, th {
|
|
||||||
border-color: #bbb;
|
|
||||||
border-width: 0 1px 1px 0;
|
|
||||||
}
|
|
||||||
#tables a {
|
|
||||||
height: 18px;
|
|
||||||
line-height: 18px;
|
|
||||||
}
|
|
||||||
/*** Links ***/
|
|
||||||
a:hover {
|
|
||||||
color: #3b82ca
|
|
||||||
}
|
|
||||||
a, a:visited {
|
|
||||||
color: #385a75
|
|
||||||
}
|
|
||||||
/*** Sidebar ***/
|
|
||||||
#h1 {
|
|
||||||
color: #222;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
#menu {
|
|
||||||
background-color: #fafafa;
|
|
||||||
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;
|
|
||||||
margin: 0;
|
|
||||||
padding-bottom: 0;
|
|
||||||
top: 0;
|
|
||||||
}
|
|
||||||
/*** Forms ***/
|
|
||||||
fieldset {
|
|
||||||
border-radius: 1px !important
|
|
||||||
}
|
|
||||||
/*** Others ***/
|
|
||||||
#lang {
|
|
||||||
font-size: 0.8em;
|
|
||||||
left: auto;
|
|
||||||
right: 6px;
|
|
||||||
}
|
|
||||||
.sqlarea {
|
|
||||||
width: 99%
|
|
||||||
}
|
|
||||||
.jush-sql {
|
|
||||||
padding: 1px 2px
|
|
||||||
}
|
|
||||||
p {
|
|
||||||
margin: 0.8em 0 0 0
|
|
||||||
}
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
/**
|
|
||||||
* @package Adminer.css - v1.0.0 - January 08, 2013
|
|
||||||
* @author James Price
|
|
||||||
* @version $Id$
|
|
||||||
* @copyright Copyright <20> 2013 Neurotechnics Pty Ltd. http://www.neurotechnics.com/
|
|
||||||
* @license MIT: http://mit-license.org/
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
* this software and associated documentation files (the <20>Software<72>), to deal in
|
|
||||||
* the Software without restriction, including without limitation the rights to use,
|
|
||||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
|
||||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
* subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be
|
|
||||||
* included in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED <20>AS IS<49>, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
||||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
|
||||||
* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
||||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
||||||
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* IE doesn't support inline images - So, we use a hack that IE cannot interpret */
|
|
||||||
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 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 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;}
|
|
||||||
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;}
|
|
||||||
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:1px 0 0 16px; overflow:hidden; width:0; text-decoration:none; }
|
|
||||||
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;}
|
|
||||||
html/*\*/>/*/*/body #content p a[href*="&create="] {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;}
|
|
||||||
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;}
|
|
||||||
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;}
|
|
||||||
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;}
|
|
||||||
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;}
|
|
||||||
html/*\*/>/*/*/body table tbody input[name*="check"] {display:block; float:left;}
|
|
||||||
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;}
|
|
||||||
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;}
|
|
||||||
html/*\*/>/*/*/body table tbody td:first-child {white-space:normal;}
|
|
||||||
html/*\*/>/*/*/body table thead input {margin-right: 5px;}
|
|
||||||
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==")}
|
|
||||||
body{background-color:#eee}
|
|
||||||
form{margin:0;overflow:auto}
|
|
||||||
#breadcrumb{position:absolute;top:0;left:0;height:2.6em;margin:0;padding:5px 5px 0 22em;width:-moz-available!important;width:100%;line-height:1.6em;border:1px solid #444;white-space:nowrap;color:#fff;background:#7abcff;background:-moz-linear-gradient(top,#7abcff 0,#60abf8 44%,#4096ee 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#7abcff),color-stop(44%,#60abf8),color-stop(100%,#4096ee));background:-webkit-linear-gradient(top,#7abcff 0,#60abf8 44%,#4096ee 100%);background:-o-linear-gradient(top,#7abcff 0,#60abf8 44%,#4096ee 100%);background:-ms-linear-gradient(top,#7abcff 0,#60abf8 44%,#4096ee 100%);background:linear-gradient(to bottom,#7abcff 0,#60abf8 44%,#4096ee 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7abcff',endColorstr='#4096ee',GradientType=0)}
|
|
||||||
#menu,#content{background-color:#fff;border-radius:10px;border:1px solid #444;box-shadow:0 0 5px #999;margin:5em 1em 2em 0}
|
|
||||||
#menu{position:absolute;top:0;left:0;margin-left:1em;padding:0 0 30px;width:19em}
|
|
||||||
#content{border:1px solid #444;margin-left:21.5em;padding:10px 10px 30px 30px}
|
|
||||||
#menu h1,#content h2{line-height:44px;margin:0;padding:0 20px;border-bottom:1px solid #000;border-radius:9px 9px 0 0;display:block;color:#FFF;background:#1e5799;background:-moz-linear-gradient(top,#1e5799 0,#2989d8 50%,#207cca 51%,#7db9e8 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#1e5799),color-stop(50%,#2989d8),color-stop(51%,#207cca),color-stop(100%,#7db9e8));background:-webkit-linear-gradient(top,#1e5799 0,#2989d8 50%,#207cca 51%,#7db9e8 100%);background:-o-linear-gradient(top,#1e5799 0,#2989d8 50%,#207cca 51%,#7db9e8 100%);background:-ms-linear-gradient(top,#1e5799 0,#2989d8 50%,#207cca 51%,#7db9e8 100%);background:linear-gradient(to bottom,#1e5799 0,#2989d8 50%,#207cca 51%,#7db9e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#1e5799',endColorstr='#7db9e8',GradientType=0)}
|
|
||||||
#menu h1,#menu h1 a,#menu h1 span{color:#fff}
|
|
||||||
#menu h1{line-height:41px}
|
|
||||||
#content h2{font-weight:normal;position:relative;left:-30px;top:-10px;height:44px;width:100%}
|
|
||||||
table{-moz-border-bottom-colors:none;-moz-border-left-colors:none;-moz-border-right-colors:none;-moz-border-top-colors:none;border-color:#999 -moz-use-text-color -moz-use-text-color #999;border-image:none;border-right:0 none;border-style:solid none none solid;border-width:1px 0 0 1px;font-size:90%;margin:1em 20px 0 0}
|
|
||||||
td,th{-moz-border-bottom-colors:none;-moz-border-left-colors:none;-moz-border-right-colors:none;-moz-border-top-colors:none;border-color:-moz-use-text-color #999 #999 -moz-use-text-color;border-image:none;border-style:none solid solid none;border-width:0 1px 1px 0;padding:.2em .3em}
|
|
||||||
thead td,thead th{background:#eee;background:-moz-linear-gradient(top,#eee 0,#ccc 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#eee),color-stop(100%,#ccc));background:-webkit-linear-gradient(top,#eee 0,#ccc 100%);background:-o-linear-gradient(top,#eee 0,#ccc 100%);background:-ms-linear-gradient(top,#eee 0,#ccc 100%);background:linear-gradient(to bottom,#eee 0,#ccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee',endColorstr='#cccccc',GradientType=0)}
|
|
||||||
td{background-color:#f4f8ff}
|
|
||||||
.odd td{background-color:#fff}
|
|
||||||
tbody tr:hover td,tbody tr:hover th{background-color:#FFE}
|
|
||||||
p.tabs{margin:0 20px 0 0}
|
|
||||||
.jush-sql{background:0}
|
|
||||||
.jush{padding:5px 15px 3px;margin:0 20px;background-color:#fff;border:1px solid #369;border-radius:4px}
|
|
||||||
fieldset{border:1px solid #999;border-radius:5px;display:inline;margin:.8em .5em 0 0;padding:.5em .8em;vertical-align:top}
|
|
||||||
a{color:#369}
|
|
||||||
a:hover{color:#28c}
|
|
||||||
#logout,#logins a,#logins a:link,#breadcrumb a,#breadcrumb a:link,.logout a,.logout a:link,.tabs a,.tabs a:link{display:inline-block;border:1px solid #667eac;border-radius:4px;padding:3px 8px;margin:2px 0;vertical-align:middle;text-decoration:none;color:#fff;background:#7abcff;background:-moz-linear-gradient(top,#7abcff 0,#60abf8 44%,#4096ee 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#7abcff),color-stop(44%,#60abf8),color-stop(100%,#4096ee));background:-webkit-linear-gradient(top,#7abcff 0,#60abf8 44%,#4096ee 100%);background:-o-linear-gradient(top,#7abcff 0,#60abf8 44%,#4096ee 100%);background:-ms-linear-gradient(top,#7abcff 0,#60abf8 44%,#4096ee 100%);background:linear-gradient(to bottom,#7abcff 0,#60abf8 44%,#4096ee 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7abcff',endColorstr='#4096ee',GradientType=0)}
|
|
||||||
.logout a,.logout a:link,#logout{padding:3px 4px}
|
|
||||||
#logout:hover,#logins a:hover,#tables a:hover,#breadcrumb a:hover,.logout a:hover,.tabs a:hover{color:#fff;text-decoration:none;background:#93c9ff;background:-moz-linear-gradient(top,#93c9ff 0,#79b8f7 44%,#57a2ed 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#93c9ff),color-stop(44%,#79b8f7),color-stop(100%,#57a2ed));background:-webkit-linear-gradient(top,#93c9ff 0,#79b8f7 44%,#57a2ed 100%);background:-o-linear-gradient(top,#93c9ff 0,#79b8f7 44%,#57a2ed 100%);background:-ms-linear-gradient(top,#93c9ff 0,#79b8f7 44%,#57a2ed 100%);background:linear-gradient(to bottom,#93c9ff 0,#79b8f7 44%,#57a2ed 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#93c9ff',endColorstr='#57a2ed',GradientType=0)}
|
|
||||||
#breadcrumb a,#breadcrumb a:link{border:1px solid #246;padding:2px 6px;margin:1px auto;line-height:1.6em}
|
|
||||||
#logins a,#tables a{background:none repeat scroll 0 0 #fff;padding:2px 6px;margin:1px 0;font-size:.8em}
|
|
||||||
a[title='Show structure'],#tables a[title='Show structure']{border:0;background:0;color:#369}
|
|
||||||
.jush a{border:0;background:0;margin:0;padding:0}
|
|
||||||
a.active,a.active:link,a.active:hover{text-decoration:underline}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Copy adminer.css alongside Adminer PHP script to use an alternative design.
|
|
||||||
@@ -1,24 +1,14 @@
|
|||||||
<?php
|
<?php
|
||||||
page_header(lang('Server'), "", false);
|
page_header(lang('Server'), "", false);
|
||||||
|
|
||||||
if ($adminer->homepage()) {
|
?>
|
||||||
echo "<form action='' method='post'>\n";
|
<form action=""><p>
|
||||||
echo "<p>" . lang('Search data in tables') . ": <input name='query' value='" . h($_POST["query"]) . "'> <input type='submit' value='" . lang('Search') . "'>\n";
|
<?php echo lang('Search data in tables'); ?>:
|
||||||
if ($_POST["query"] != "") {
|
<?php hidden_fields_get(); ?>
|
||||||
search_tables();
|
<input name="where[0][val]" value="<?php echo h($_GET["where"][0]["val"]); ?>">
|
||||||
}
|
<input type="submit" value="<?php echo lang('Search'); ?>" />
|
||||||
echo "<table cellspacing='0' class='nowrap checkable' onclick='tableClick(event);'>\n";
|
</form>
|
||||||
echo '<thead><tr class="wrap"><td><input id="check-all" type="checkbox" onclick="formCheck(this, /^tables\[/);"><th>' . lang('Table') . '<td>' . lang('Rows') . "</thead>\n";
|
<?php
|
||||||
foreach (table_status() as $table => $row) {
|
if ($_GET["where"][0]["val"] != "") {
|
||||||
$name = $adminer->tableName($row);
|
search_tables();
|
||||||
if (isset($row["Engine"]) && $name != "") {
|
|
||||||
echo '<tr' . odd() . '><td>' . checkbox("tables[]", $table, in_array($table, (array) $_POST["tables"], true), "", "formUncheck('check-all');");
|
|
||||||
echo "<th><a href='" . h(ME) . 'select=' . urlencode($table) . "'>$name</a>";
|
|
||||||
$val = number_format($row["Rows"], 0, '.', lang(','));
|
|
||||||
echo "<td align='right'><a href='" . h(ME . "edit=") . urlencode($table) . "'>" . ($row["Engine"] == "InnoDB" && $val ? "~ $val" : $val) . "</a>";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
echo "</table>\n";
|
|
||||||
echo "<script type='text/javascript'>tableCheck();</script>\n";
|
|
||||||
echo "</form>\n";
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,19 +29,8 @@ function adminer_object() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function fieldName($field, $order = 0) {
|
function fieldName($field, $order = 0) {
|
||||||
if ($order && ereg('_(md5|sha1)$', $field["field"])) {
|
// only columns with comments will be displayed and only the first five in select
|
||||||
return ""; // hide hashes in select
|
return ($order <= 5 && !ereg('_(md5|sha1)$', $field["field"]) ? h($field["comment"]) : "");
|
||||||
}
|
|
||||||
// display only column with comments, first five of them plus searched columns
|
|
||||||
if ($order < 5) {
|
|
||||||
return h($field["comment"]);
|
|
||||||
}
|
|
||||||
foreach ((array) $_GET["where"] as $key => $where) {
|
|
||||||
if ($where["col"] == $field["field"] && ($key >= 0 || $where["val"] != "")) {
|
|
||||||
return h($field["comment"]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,13 +4,13 @@ class Adminer {
|
|||||||
var $_values = array();
|
var $_values = array();
|
||||||
|
|
||||||
function name() {
|
function name() {
|
||||||
return "<a href='http://www.adminer.org/editor/' id='h1'>" . lang('Editor') . "</a>";
|
return lang('Editor');
|
||||||
}
|
}
|
||||||
|
|
||||||
//! driver, ns
|
//! driver, ns
|
||||||
|
|
||||||
function credentials() {
|
function credentials() {
|
||||||
return array(SERVER, $_GET["username"], get_session("pwds"));
|
return array(); // default INI settings
|
||||||
}
|
}
|
||||||
|
|
||||||
function permanentLogin() {
|
function permanentLogin() {
|
||||||
@@ -19,46 +19,28 @@ class Adminer {
|
|||||||
|
|
||||||
function database() {
|
function database() {
|
||||||
global $connection;
|
global $connection;
|
||||||
$databases = $this->databases(false);
|
$dbs = get_databases(false);
|
||||||
return (!$databases
|
return (!$dbs
|
||||||
? $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
|
: $dbs[(information_schema($dbs[0]) ? 1 : 0)] // first available database
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function databases($flush = true) {
|
|
||||||
return get_databases($flush);
|
|
||||||
}
|
|
||||||
|
|
||||||
function queryTimeout() {
|
|
||||||
return 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
function headers() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function head() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function loginForm() {
|
function loginForm() {
|
||||||
?>
|
?>
|
||||||
<table cellspacing="0">
|
<table cellspacing="0">
|
||||||
<tr><th><?php echo lang('Username'); ?><td><input type="hidden" name="auth[driver]" value="server"><input name="auth[username]" id="username" value="<?php echo h($_GET["username"]); ?>" autocapitalize="off">
|
<tr><th><?php echo lang('Username'); ?><td><input type="hidden" name="driver" value="server"><input type="hidden" name="server" value=""><input id="username" name="username" value="<?php echo h($_GET["username"]); ?>">
|
||||||
<tr><th><?php echo lang('Password'); ?><td><input type="password" name="auth[password]">
|
<tr><th><?php echo lang('Password'); ?><td><input type="password" name="password">
|
||||||
</table>
|
</table>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
document.getElementById('username').focus();
|
document.getElementById('username').focus();
|
||||||
</script>
|
</script>
|
||||||
<?php
|
<?php
|
||||||
echo "<p><input type='submit' value='" . lang('Login') . "'>\n";
|
echo "<p><input type='submit' value='" . lang('Login') . "'>\n";
|
||||||
echo checkbox("auth[permanent]", 1, $_COOKIE["adminer_permanent"], lang('Permanent login')) . "\n";
|
echo checkbox("permanent", 1, $_COOKIE["adminer_permanent"], lang('Permanent login')) . "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
function login($login, $password) {
|
function login($login, $password) {
|
||||||
global $connection;
|
|
||||||
$connection->query("SET time_zone = " . q(substr_replace(@date("O"), ":", -2, 0))); // date("P") available since PHP 5.1.3, @ - requires date.timezone since PHP 5.3.0
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,64 +54,67 @@ document.getElementById('username').focus();
|
|||||||
|
|
||||||
function selectLinks($tableStatus, $set = "") {
|
function selectLinks($tableStatus, $set = "") {
|
||||||
$TABLE = $tableStatus["Name"];
|
$TABLE = $tableStatus["Name"];
|
||||||
if ($set !== null) {
|
if (isset($set)) {
|
||||||
echo '<p class="tabs"><a href="' . h(ME . 'edit=' . urlencode($TABLE) . $set) . '">' . lang('New item') . "</a>\n";
|
echo '<p class="tabs"><a href="' . h(ME . 'edit=' . urlencode($TABLE) . $set) . '">' . lang('New item') . "</a>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function foreignKeys($table) {
|
|
||||||
return foreign_keys($table);
|
|
||||||
}
|
|
||||||
|
|
||||||
function backwardKeys($table, $tableName) {
|
function backwardKeys($table, $tableName) {
|
||||||
|
global $connection;
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows("SELECT TABLE_NAME, CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_COLUMN_NAME
|
$result = $connection->query("SELECT TABLE_NAME, CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_COLUMN_NAME
|
||||||
FROM information_schema.KEY_COLUMN_USAGE
|
FROM information_schema.KEY_COLUMN_USAGE
|
||||||
WHERE TABLE_SCHEMA = " . q($this->database()) . "
|
WHERE TABLE_SCHEMA = " . $connection->quote($this->database()) . "
|
||||||
AND REFERENCED_TABLE_SCHEMA = " . q($this->database()) . "
|
AND REFERENCED_TABLE_SCHEMA = " . $connection->quote($this->database()) . "
|
||||||
AND REFERENCED_TABLE_NAME = " . q($table) . "
|
AND REFERENCED_TABLE_NAME = " . $connection->quote($table) . "
|
||||||
ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
ORDER BY ORDINAL_POSITION");
|
||||||
$return[$row["TABLE_NAME"]]["keys"][$row["CONSTRAINT_NAME"]][$row["COLUMN_NAME"]] = $row["REFERENCED_COLUMN_NAME"];
|
if ($result) { //! requires MySQL 5
|
||||||
}
|
while ($row = $result->fetch_assoc()) {
|
||||||
foreach ($return as $key => $val) {
|
$return[$row["TABLE_NAME"]]["keys"][$row["CONSTRAINT_NAME"]][$row["COLUMN_NAME"]] = $row["REFERENCED_COLUMN_NAME"];
|
||||||
$name = $this->tableName(table_status($key));
|
}
|
||||||
if ($name != "") {
|
foreach ($return as $key => $val) {
|
||||||
$search = preg_quote($tableName);
|
$name = $this->tableName(table_status($key));
|
||||||
$separator = "(:|\\s*-)?\\s+";
|
if ($name != "") {
|
||||||
$return[$key]["name"] = (preg_match("(^$search$separator(.+)|^(.+?)$separator$search\$)iu", $name, $match) ? $match[2] . $match[3] : $name);
|
$search = preg_quote($tableName);
|
||||||
} else {
|
$separator = "(:|\\s*-)?\\s+";
|
||||||
unset($return[$key]);
|
$return[$key]["name"] = (preg_match("(^$search$separator(.+)|^(.+?)$separator$search\$)", $name, $match) ? $match[2] . $match[3] : $name);
|
||||||
|
} else {
|
||||||
|
unset($return[$key]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function backwardKeysPrint($backwardKeys, $row) {
|
function backwardKeysPrint($backwardKeys, $row) {
|
||||||
foreach ($backwardKeys as $table => $backwardKey) {
|
if ($backwardKeys) {
|
||||||
foreach ($backwardKey["keys"] as $cols) {
|
echo "<td>";
|
||||||
$link = ME . 'select=' . urlencode($table);
|
foreach ($backwardKeys as $table => $backwardKey) {
|
||||||
$i = 0;
|
foreach ($backwardKey["keys"] as $cols) {
|
||||||
foreach ($cols as $column => $val) {
|
$link = ME . 'select=' . urlencode($table);
|
||||||
$link .= where_link($i++, $column, $row[$val]);
|
$i = 0;
|
||||||
|
foreach ($cols as $column => $val) {
|
||||||
|
$link .= where_link($i++, $column, $row[$val]);
|
||||||
|
}
|
||||||
|
echo "<a href='" . h($link) . "'>" . h($backwardKey["name"]) . "</a>";
|
||||||
|
$link = ME . 'edit=' . urlencode($table);
|
||||||
|
foreach ($cols as $column => $val) {
|
||||||
|
$link .= "&set" . urlencode("[" . bracket_escape($column) . "]") . "=" . urlencode($row[$val]);
|
||||||
|
}
|
||||||
|
echo "<a href='" . h($link) . "' title='" . lang('New item') . "'>+</a> ";
|
||||||
}
|
}
|
||||||
echo "<a href='" . h($link) . "'>" . h($backwardKey["name"]) . "</a>";
|
|
||||||
$link = ME . 'edit=' . urlencode($table);
|
|
||||||
foreach ($cols as $column => $val) {
|
|
||||||
$link .= "&set" . urlencode("[" . bracket_escape($column) . "]") . "=" . urlencode($row[$val]);
|
|
||||||
}
|
|
||||||
echo "<a href='" . h($link) . "' title='" . lang('New item') . "'>+</a> ";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function selectQuery($query) {
|
function selectQuery($query) {
|
||||||
return "<!--\n" . str_replace("--", "--><!-- ", $query) . "\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 (ereg("varchar|character varying", $field["type"])) {
|
if ($field["type"] == "varchar") {
|
||||||
return idf_escape($field["field"]);
|
return idf_escape($field["field"]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -139,21 +124,28 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
function rowDescriptions($rows, $foreignKeys) {
|
function rowDescriptions($rows, $foreignKeys) {
|
||||||
$return = $rows;
|
$return = $rows;
|
||||||
foreach ($rows[0] as $key => $val) {
|
foreach ($rows[0] as $key => $val) {
|
||||||
if (list($table, $id, $name) = $this->_foreignColumn($foreignKeys, $key)) {
|
foreach ((array) $foreignKeys[$key] as $foreignKey) {
|
||||||
// find all used ids
|
if (count($foreignKey["source"]) == 1) {
|
||||||
$ids = array();
|
$id = idf_escape($foreignKey["target"][0]);
|
||||||
foreach ($rows as $row) {
|
$name = $this->rowDescription($foreignKey["table"]);
|
||||||
$ids[$row[$key]] = exact_value($row[$key]);
|
if ($name != "") {
|
||||||
}
|
// find all used ids
|
||||||
// uses constant number of queries to get the descriptions, join would be complex, multiple queries would be slow
|
$ids = array();
|
||||||
$descriptions = $this->_values[$table];
|
foreach ($rows as $row) {
|
||||||
if (!$descriptions) {
|
$ids[$row[$key]] = exact_value($row[$key]);
|
||||||
$descriptions = get_key_vals("SELECT $id, $name FROM " . table($table) . " WHERE $id IN (" . implode(", ", $ids) . ")");
|
}
|
||||||
}
|
// uses constant number of queries to get the descriptions, join would be complex, multiple queries would be slow
|
||||||
// use the descriptions
|
$descriptions = $this->_values[$foreignKey["table"]];
|
||||||
foreach ($rows as $n => $row) {
|
if (!$descriptions) {
|
||||||
if (isset($row[$key])) {
|
$descriptions = get_key_vals("SELECT $id, $name FROM " . idf_escape($foreignKey["table"]) . " WHERE $id IN (" . implode(", ", $ids) . ")");
|
||||||
$return[$n][$key] = (string) $descriptions[$row[$key]];
|
}
|
||||||
|
// use the descriptions
|
||||||
|
foreach ($rows as $n => $row) {
|
||||||
|
if (isset($row[$key])) {
|
||||||
|
$return[$n][$key] = (string) $descriptions[$row[$key]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -161,25 +153,21 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function selectLink($val, $field) {
|
|
||||||
}
|
|
||||||
|
|
||||||
function selectVal($val, $link, $field) {
|
function selectVal($val, $link, $field) {
|
||||||
$return = ($val === null ? " " : $val);
|
$return = ($val == "<i>NULL</i>" ? " " : $val);
|
||||||
$link = h($link);
|
if (ereg('binary|blob|bytea', $field["type"]) && !is_utf8($val)) {
|
||||||
if (ereg('blob|bytea', $field["type"]) && !is_utf8($val)) {
|
|
||||||
$return = lang('%d byte(s)', strlen($val));
|
$return = lang('%d byte(s)', strlen($val));
|
||||||
if (ereg("^(GIF|\xFF\xD8\xFF|\x89PNG\x0D\x0A\x1A\x0A)", $val)) { // GIF|JPG|PNG, getimagetype() works with filename
|
if (ereg("^(GIF|\xFF\xD8\xFF|\x89\x50\x4E\x47\x0D\x0A\x1A\x0A)", $val)) { // GIF|JPG|PNG, getimagetype() works with filename
|
||||||
$return = "<img src='$link' alt='$return'>";
|
$return = "<img src='$link' alt='$return'>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (like_bool($field) && $return != " ") { // bool
|
if ($field["full_type"] == "tinyint(1)" && $return != " ") { // bool
|
||||||
$return = ($val ? lang('yes') : lang('no'));
|
$return = '<img src="' . ($val ? "../adminer/static/plus.gif" : "../adminer/static/cross.gif") . '" alt="' . h($val) . '">';
|
||||||
}
|
}
|
||||||
if ($link) {
|
if ($link) {
|
||||||
$return = "<a href='$link'>$return</a>";
|
$return = "<a href='$link'>$return</a>";
|
||||||
}
|
}
|
||||||
if (!$link && !like_bool($field) && ereg('int|float|double|decimal', $field["type"])) {
|
if (!$link && $field["full_type"] != "tinyint(1)" && 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 (ereg('date', $field["type"])) {
|
} elseif (ereg('date', $field["type"])) {
|
||||||
$return = "<div class='datetime'>$return</div>";
|
$return = "<div class='datetime'>$return</div>";
|
||||||
@@ -188,8 +176,8 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
}
|
}
|
||||||
|
|
||||||
function editVal($val, $field) {
|
function editVal($val, $field) {
|
||||||
if (ereg('date|timestamp', $field["type"]) && $val !== null) {
|
if (ereg('date|timestamp', $field["type"]) && isset($val)) {
|
||||||
return preg_replace('~^(\\d{2}(\\d+))-(0?(\\d+))-(0?(\\d+))~', lang('$1-$3-$5'), $val);
|
return preg_replace('~^([0-9]{2}([0-9]+))-(0?([0-9]+))-(0?([0-9]+))~', lang('$1-$3-$5'), $val);
|
||||||
}
|
}
|
||||||
return $val;
|
return $val;
|
||||||
}
|
}
|
||||||
@@ -200,29 +188,26 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
|
|
||||||
function selectSearchPrint($where, $columns, $indexes) {
|
function selectSearchPrint($where, $columns, $indexes) {
|
||||||
$where = (array) $_GET["where"];
|
$where = (array) $_GET["where"];
|
||||||
echo '<fieldset id="fieldset-search"><legend>' . lang('Search') . "</legend><div>\n";
|
echo '<fieldset><legend>' . lang('Search') . "</legend><div>\n";
|
||||||
$keys = array();
|
$keys = array();
|
||||||
foreach ($where as $key => $val) {
|
foreach ($where as $key => $val) {
|
||||||
$keys[$val["col"]] = $key;
|
$keys[$val["col"]] = $key;
|
||||||
}
|
}
|
||||||
$i = 0;
|
$i = 0;
|
||||||
$fields = fields($_GET["select"]);
|
foreach (fields($_GET["select"]) as $name => $field) {
|
||||||
foreach ($columns as $name => $desc) {
|
if (ereg("enum", $field["type"])) { //! set - uses 1 << $i and FIND_IN_SET()
|
||||||
$field = $fields[$name];
|
$desc = $columns[$name];
|
||||||
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) . "'>:";
|
||||||
echo (like_bool($field)
|
enum_input("checkbox", "where[$i][val][]", $field, (array) $where[$key]["val"]); //! impossible to search for NULL
|
||||||
? " <select name='where[$i][val]'>" . optionlist(array("" => "", lang('no'), lang('yes')), $where[$key]["val"], true) . "</select>"
|
|
||||||
: enum_input("checkbox", " name='where[$i][val][]'", $field, (array) $where[$key]["val"], ($field["null"] ? 0 : null))
|
|
||||||
);
|
|
||||||
echo "</div>\n";
|
echo "</div>\n";
|
||||||
unset($columns[$name]);
|
unset($columns[$name]);
|
||||||
} elseif (is_array($options = $this->_foreignKeyOptions($_GET["select"], $name))) {
|
}
|
||||||
if ($fields[$name]["null"]) {
|
}
|
||||||
$options[0] = '(' . lang('empty') . ')';
|
foreach ($columns as $name => $desc) {
|
||||||
}
|
$options = $this->_foreignKeyOptions($_GET["select"], $name);
|
||||||
|
if ($options) {
|
||||||
$key = $keys[$name];
|
$key = $keys[$name];
|
||||||
$i--;
|
$i--;
|
||||||
echo "<div>" . h($desc) . "<input type='hidden' name='where[$i][col]' value='" . h($name) . "'><input type='hidden' name='where[$i][op]' value='='>: <select name='where[$i][val]'>" . optionlist($options, $where[$key]["val"], true) . "</select></div>\n";
|
echo "<div>" . h($desc) . "<input type='hidden' name='where[$i][col]' value='" . h($name) . "'><input type='hidden' name='where[$i][op]' value='='>: <select name='where[$i][val]'>" . optionlist($options, $where[$key]["val"], true) . "</select></div>\n";
|
||||||
@@ -231,16 +216,16 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
}
|
}
|
||||||
$i = 0;
|
$i = 0;
|
||||||
foreach ($where as $val) {
|
foreach ($where as $val) {
|
||||||
if (($val["col"] == "" || $columns[$val["col"]]) && "$val[col]$val[val]" != "") {
|
if ($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"]) . "' onsearch='selectSearch(this);'></div>\n";
|
echo "<input name='where[$i][val]' value='" . h($val["val"]) . "'></div>\n";
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
echo "<div><select name='where[$i][col]' onchange='this.nextSibling.nextSibling.onchange();'><option value=''>(" . lang('anywhere') . ")" . optionlist($columns, null, true) . "</select>";
|
echo "<div><select name='where[$i][col]' onchange='selectAddRow(this);'><option value=''>(" . lang('anywhere') . ")" . optionlist($columns, null, true) . "</select>";
|
||||||
echo html_select("where[$i][op]", array(-1 => "") + $this->operators);
|
echo html_select("where[$i][op]", array(-1 => "") + $this->operators);
|
||||||
echo "<input type='search' name='where[$i][val]' onchange='selectAddRow(this);' onsearch='selectSearch(this);'></div>\n";
|
echo "<input name='where[$i][val]'></div>\n";
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -250,7 +235,7 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
foreach ($indexes as $key => $index) {
|
foreach ($indexes as $key => $index) {
|
||||||
$order = array();
|
$order = array();
|
||||||
foreach ($index["columns"] as $val) {
|
foreach ($index["columns"] as $val) {
|
||||||
$order[] = $columns[$val];
|
$order[] = $this->fieldName(array("field" => $val, "comment" => $columns[$val]));
|
||||||
}
|
}
|
||||||
if (count(array_filter($order, 'strlen')) > 1 && $key != "PRIMARY") {
|
if (count(array_filter($order, 'strlen')) > 1 && $key != "PRIMARY") {
|
||||||
$orders[$key] = implode(", ", $order);
|
$orders[$key] = implode(", ", $order);
|
||||||
@@ -258,52 +243,36 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
}
|
}
|
||||||
if ($orders) {
|
if ($orders) {
|
||||||
echo '<fieldset><legend>' . lang('Sort') . "</legend><div>";
|
echo '<fieldset><legend>' . lang('Sort') . "</legend><div>";
|
||||||
echo "<select name='index_order'>" . optionlist(array("" => "") + $orders, ($_GET["order"][0] != "" ? "" : $_GET["index_order"]), true) . "</select>";
|
echo "<select name='index_order'>" . optionlist(array("" => "") + $orders, $_GET["index_order"], true) . "</select>";
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
}
|
}
|
||||||
if ($_GET["order"]) {
|
|
||||||
echo "<div style='display: none;'>" . hidden_fields(array(
|
|
||||||
"order" => array(1 => reset($_GET["order"])),
|
|
||||||
"desc" => ($_GET["desc"] ? array(1 => 1) : array()),
|
|
||||||
)) . "</div>\n";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function selectLimitPrint($limit) {
|
function selectLimitPrint($limit) {
|
||||||
echo "<fieldset><legend>" . lang('Limit') . "</legend><div>"; // <div> for easy styling
|
echo "<fieldset><legend>" . lang('Limit') . "</legend><div>"; // <div> for easy styling
|
||||||
echo html_select("limit", array("", "50", "100"), $limit);
|
echo html_select("limit", array("", "30", "100"), $limit);
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
function selectLengthPrint($text_length) {
|
function selectLengthPrint($text_length) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function selectActionPrint($indexes) {
|
function selectActionPrint() {
|
||||||
echo "<fieldset><legend>" . lang('Action') . "</legend><div>";
|
echo "<fieldset><legend>" . lang('Action') . "</legend><div>";
|
||||||
echo "<input type='submit' value='" . lang('Select') . "'>";
|
echo "<input type='submit' value='" . lang('Select') . "'>";
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
function selectCommandPrint() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function selectImportPrint() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function selectEmailPrint($emailFields, $columns) {
|
function selectEmailPrint($emailFields, $columns) {
|
||||||
if ($emailFields) {
|
if ($emailFields) {
|
||||||
print_fieldset("email", lang('E-mail'), $_POST["email_append"]);
|
echo '<fieldset><legend><a href="#fieldset-email" onclick="return !toggle(\'fieldset-email\');">' . lang('E-mail') . "</a></legend><div id='fieldset-email'" . ($_POST["email_append"] ? "" : " class='hidden'") . ">\n";
|
||||||
echo "<div onkeydown=\"eventStop(event); return bodyKeydown(event, 'email');\">\n";
|
|
||||||
echo "<p>" . lang('From') . ": <input name='email_from' value='" . h($_POST ? $_POST["email_from"] : $_COOKIE["adminer_email"]) . "'>\n";
|
echo "<p>" . lang('From') . ": <input name='email_from' value='" . h($_POST ? $_POST["email_from"] : $_COOKIE["adminer_email"]) . "'>\n";
|
||||||
echo lang('Subject') . ": <input name='email_subject' value='" . h($_POST["email_subject"]) . "'>\n";
|
echo lang('Subject') . ": <input name='email_subject' value='" . h($_POST["email_subject"]) . "'>\n";
|
||||||
echo "<p><textarea name='email_message' rows='15' cols='75'>" . h($_POST["email_message"] . ($_POST["email_append"] ? '{$' . "$_POST[email_addition]}" : "")) . "</textarea>\n";
|
echo "<p><textarea name='email_message' rows='15' cols='75'>" . h($_POST["email_message"] . ($_POST["email_append"] ? '{$' . "$_POST[email_addition]}" : "")) . "</textarea><br>\n";
|
||||||
echo "<p onkeydown=\"eventStop(event); return bodyKeydown(event, 'email_append');\">" . html_select("email_addition", $columns, $_POST["email_addition"]) . "<input type='submit' name='email_append' value='" . lang('Insert') . "'>\n"; //! JavaScript
|
echo html_select("email_addition", $columns, $_POST["email_addition"]) . "<input type='submit' name='email_append' value='" . lang('Insert') . "'>\n"; //! JavaScript
|
||||||
echo "<p>" . lang('Attachments') . ": <input type='file' name='email_files[]' onchange=\"this.onchange = function () { }; var el = this.cloneNode(true); el.value = ''; this.parentNode.appendChild(el);\">";
|
echo "<p>" . lang('Attachments') . ": <input type='file' name='email_files[]' onchange=\"var el = this.cloneNode(true); el.value = ''; this.parentNode.appendChild(el); this.onchange = function () { };\">";
|
||||||
echo "<p>" . (count($emailFields) == 1 ? '<input type="hidden" name="email_field" value="' . h(key($emailFields)) . '">' : html_select("email_field", $emailFields));
|
echo "<p>" . (count($emailFields) == 1 ? '<input type="hidden" name="email_field" value="' . h(key($emailFields)) . '">' : html_select("email_field", $emailFields));
|
||||||
echo "<input type='submit' name='email' value='" . lang('Send') . "' onclick=\"return this.form['delete'].onclick();\">\n";
|
echo "<input type='submit' name='email' value='" . lang('Send') . "' onclick=\"return this.form['delete'].onclick();\">\n";
|
||||||
echo "</div>\n";
|
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -322,20 +291,12 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
$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) || !ereg('int|float|double|decimal', $field["type"])) {
|
if ($col != "" || is_numeric($val) || !ereg('int|float|double|decimal', $field["type"])) {
|
||||||
$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[] = idf_escape($name) . " IN (" . implode(", ", array_map('intval', $val)) . ")";
|
||||||
} else {
|
} else {
|
||||||
$text_type = ereg('char|text|enum|set', $field["type"]);
|
$text_type = ereg('char|text|enum|set', $field["type"]);
|
||||||
$value = $this->processInput($field, (!$op && $text_type && ereg('^[^%]+$', $val) ? "%$val%" : $val));
|
$value = $this->processInput($field, ($text_type && ereg('^[^%]+$', $val) ? "%$val%" : $val));
|
||||||
$conds[] = $name . ($value == "NULL" ? " IS" . ($op == ">=" ? " NOT" : "") . " $value"
|
$conds[] = idf_escape($name) . ($value == "NULL" ? " IS" . ($op == ">=" ? " NOT" : "") : (in_array($op, $this->operators) ? " $op" : ($op != "=" && $text_type ? " LIKE" : " ="))) . " $value"; //! can issue "Illegal mix of collations" for columns in other character sets - solve by CONVERT($name using utf8)
|
||||||
: (in_array($op, $this->operators) || $op == "=" ? " $op $value"
|
|
||||||
: ($text_type ? " LIKE $value"
|
|
||||||
: " IN (" . str_replace(",", "', '", $value) . ")"
|
|
||||||
))); //! can issue "Illegal mix of collations" for columns in other character sets - solve by CONVERT($name using utf8)
|
|
||||||
if ($key < 0 && $val == "0") {
|
|
||||||
$conds[] = "$name IS NULL";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -346,13 +307,10 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
}
|
}
|
||||||
|
|
||||||
function selectOrderProcess($fields, $indexes) {
|
function selectOrderProcess($fields, $indexes) {
|
||||||
$index_order = $_GET["index_order"];
|
|
||||||
if ($index_order != "") {
|
|
||||||
unset($_GET["order"][1]);
|
|
||||||
}
|
|
||||||
if ($_GET["order"]) {
|
if ($_GET["order"]) {
|
||||||
return array(idf_escape(reset($_GET["order"])) . ($_GET["desc"] ? " DESC" : ""));
|
return array(idf_escape($_GET["order"][0]) . (isset($_GET["desc"][0]) ? " DESC" : ""));
|
||||||
}
|
}
|
||||||
|
$index_order = $_GET["index_order"];
|
||||||
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") {
|
||||||
$desc = false;
|
$desc = false;
|
||||||
@@ -373,7 +331,7 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
}
|
}
|
||||||
|
|
||||||
function selectLimitProcess() {
|
function selectLimitProcess() {
|
||||||
return (isset($_GET["limit"]) ? $_GET["limit"] : "50");
|
return (isset($_GET["limit"]) ? $_GET["limit"] : "30");
|
||||||
}
|
}
|
||||||
|
|
||||||
function selectLengthProcess() {
|
function selectLengthProcess() {
|
||||||
@@ -381,6 +339,7 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
}
|
}
|
||||||
|
|
||||||
function selectEmailProcess($where, $foreignKeys) {
|
function selectEmailProcess($where, $foreignKeys) {
|
||||||
|
global $connection;
|
||||||
if ($_POST["email_append"]) {
|
if ($_POST["email_append"]) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -391,11 +350,15 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
$subject = $_POST["email_subject"];
|
$subject = $_POST["email_subject"];
|
||||||
$message = $_POST["email_message"];
|
$message = $_POST["email_message"];
|
||||||
preg_match_all('~\\{\\$([a-z0-9_]+)\\}~i', "$subject.$message", $matches); // allows {$name} in subject or message
|
preg_match_all('~\\{\\$([a-z0-9_]+)\\}~i', "$subject.$message", $matches); // allows {$name} in subject or message
|
||||||
$rows = get_rows("SELECT DISTINCT $field" . ($matches[1] ? ", " . implode(", ", array_map('idf_escape', array_unique($matches[1]))) : "") . " FROM " . table($_GET["select"])
|
$result = $connection->query("SELECT DISTINCT $field" . ($matches[1] ? ", " . implode(", ", array_map('idf_escape', array_unique($matches[1]))) : "") . " FROM " . idf_escape($_GET["select"])
|
||||||
. " WHERE $field IS NOT NULL AND $field != ''"
|
. " WHERE $field IS NOT NULL AND $field != ''"
|
||||||
. ($where ? " AND " . implode(" AND ", $where) : "")
|
. ($where ? " AND " . implode(" AND ", $where) : "")
|
||||||
. ($_POST["all"] ? "" : " AND ((" . implode(") OR (", array_map('where_check', (array) $_POST["check"])) . "))")
|
. ($_POST["all"] ? "" : " AND ((" . implode(") OR (", array_map('where_check', (array) $_POST["check"])) . "))")
|
||||||
);
|
);
|
||||||
|
$rows = array();
|
||||||
|
while ($row = $result->fetch_assoc()) {
|
||||||
|
$rows[] = $row;
|
||||||
|
}
|
||||||
$fields = fields($_GET["select"]);
|
$fields = fields($_GET["select"]);
|
||||||
foreach ($this->rowDescriptions($rows, $foreignKeys) as $row) {
|
foreach ($this->rowDescriptions($rows, $foreignKeys) as $row) {
|
||||||
$replace = array('{\\' => '{'); // allow literal {$name}
|
$replace = array('{\\' => '{'); // allow literal {$name}
|
||||||
@@ -403,7 +366,7 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
$replace['{$' . "$val}"] = $this->editVal($row[$val], $fields[$val]);
|
$replace['{$' . "$val}"] = $this->editVal($row[$val], $fields[$val]);
|
||||||
}
|
}
|
||||||
$email = $row[$_POST["email_field"]];
|
$email = $row[$_POST["email_field"]];
|
||||||
if (is_mail($email) && send_mail($email, strtr($subject, $replace), strtr($message, $replace), $_POST["email_from"], $_FILES["email_files"])) {
|
if (is_email($email) && send_email($email, strtr($subject, $replace), strtr($message, $replace), $_POST["email_from"], $_FILES["email_files"])) {
|
||||||
$sent++;
|
$sent++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -414,23 +377,15 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function selectQueryBuild($select, $where, $group, $order, $limit, $page) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
function messageQuery($query) {
|
function messageQuery($query) {
|
||||||
return " <span class='time'>" . @date("H:i:s") . "</span><!--\n" . str_replace("--", "--><!-- ", $query) . "\n-->";
|
return "<!--\n" . str_replace("--", "--><!--", $query) . "\n-->";
|
||||||
}
|
}
|
||||||
|
|
||||||
function editFunctions($field) {
|
function editFunctions($field) {
|
||||||
$return = array();
|
$return = array("" => ($field["null"] || $field["auto_increment"] || $field["full_type"] == "tinyint(1)" ? "" : "*"));
|
||||||
if ($field["null"] && ereg('blob', $field["type"])) {
|
|
||||||
$return["NULL"] = lang('empty');
|
|
||||||
}
|
|
||||||
$return[""] = ($field["null"] || $field["auto_increment"] || like_bool($field) ? "" : "*");
|
|
||||||
//! respect driver
|
//! respect driver
|
||||||
if (ereg('date|time', $field["type"])) {
|
if (ereg('date|time', $field["type"])) {
|
||||||
$return["now"] = lang('now');
|
$return[] = "now";
|
||||||
}
|
}
|
||||||
if (eregi('_(md5|sha1)$', $field["field"], $match)) {
|
if (eregi('_(md5|sha1)$', $field["field"], $match)) {
|
||||||
$return[] = strtolower($match[1]);
|
$return[] = strtolower($match[1]);
|
||||||
@@ -440,128 +395,77 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
|
|
||||||
function editInput($table, $field, $attrs, $value) {
|
function editInput($table, $field, $attrs, $value) {
|
||||||
if ($field["type"] == "enum") {
|
if ($field["type"] == "enum") {
|
||||||
return (isset($_GET["select"]) ? "<label><input type='radio'$attrs value='-1' checked><i>" . lang('original') . "</i></label> " : "")
|
return ($field["null"] ? "<input type='radio'$attrs value=''" . ($value || isset($_GET["select"]) ? "" : " checked") . ">" : "");
|
||||||
. enum_input("radio", $attrs, $field, ($value || isset($_GET["select"]) ? $value : 0), ($field["null"] ? "" : null))
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
$options = $this->_foreignKeyOptions($table, $field["field"], $value);
|
$options = $this->_foreignKeyOptions($table, $field["field"]);
|
||||||
if ($options !== null) {
|
if ($options) {
|
||||||
return (is_array($options)
|
return "<select$attrs>" . optionlist($options, $value, true) . "</select>";
|
||||||
? "<select$attrs>" . optionlist($options, $value, true) . "</select>"
|
|
||||||
: "<input value='" . h($value) . "'$attrs class='hidden'><input value='" . h($options) . "' class='jsonly' onkeyup=\"whisper('" . h(ME . "script=complete&source=" . urlencode($table) . "&field=" . urlencode($field["field"])) . "&value=', this);\"><div onclick='return whisperClick(event, this.previousSibling);'></div>"
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
if (like_bool($field)) {
|
if ($field["full_type"] == "tinyint(1)") { // bool
|
||||||
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 = "";
|
|
||||||
if (ereg('time', $field["type"])) {
|
|
||||||
$hint = lang('HH:MM:SS');
|
|
||||||
}
|
|
||||||
if (ereg('date|timestamp', $field["type"])) {
|
if (ereg('date|timestamp', $field["type"])) {
|
||||||
$hint = lang('[yyyy]-mm-dd') . ($hint ? " [$hint]" : "");
|
return "<input value='" . h($value) . "'$attrs> (" . lang('[yyyy]-mm-dd') . ")"; //! maxlength
|
||||||
}
|
|
||||||
if ($hint) {
|
|
||||||
return "<input value='" . h($value) . "'$attrs> ($hint)"; //! maxlength
|
|
||||||
}
|
|
||||||
if (eregi('_(md5|sha1)$', $field["field"])) {
|
|
||||||
return "<input type='password' value='" . h($value) . "'$attrs>";
|
|
||||||
}
|
}
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
function processInput($field, $value, $function = "") {
|
function processInput($field, $value, $function = "") {
|
||||||
|
global $connection;
|
||||||
if ($function == "now") {
|
if ($function == "now") {
|
||||||
return "$function()";
|
return "$function()";
|
||||||
}
|
}
|
||||||
$return = $value;
|
$return = $value;
|
||||||
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)) {
|
if (ereg('date|timestamp', $field["type"]) && preg_match('(^' . str_replace('\\$1', '(?P<p1>[0-9]*)', preg_replace('~(\\\\\\$([2-6]))~', '(?P<p\\2>[0-9]{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" && ereg('^[0-9]+$', $value) ? $return : q($return));
|
$return = $connection->quote($return);
|
||||||
if ($value == "" && like_bool($field)) {
|
if (!ereg('varchar|text', $field["type"]) && $field["full_type"] != "tinyint(1)" && $value == "") {
|
||||||
$return = "0";
|
|
||||||
} elseif ($value == "" && ($field["null"] || !ereg('char|text', $field["type"]))) {
|
|
||||||
$return = "NULL";
|
$return = "NULL";
|
||||||
} elseif (ereg('^(md5|sha1)$', $function)) {
|
} elseif (ereg('^(md5|sha1)$', $function)) {
|
||||||
$return = "$function($return)";
|
$return = "$function($return)";
|
||||||
}
|
}
|
||||||
return unconvert_field($field, $return);
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function dumpOutput() {
|
function dumpOutput($select, $value = "") {
|
||||||
return array();
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
function dumpFormat() {
|
function dumpFormat($select, $value = "") {
|
||||||
return array('csv' => 'CSV,', 'csv;' => 'CSV;', 'tsv' => 'TSV');
|
return html_select("format", array('csv' => 'CSV,', 'csv;' => 'CSV;'), $value, $select);
|
||||||
}
|
|
||||||
|
|
||||||
function dumpDatabase($db) {
|
|
||||||
}
|
|
||||||
|
|
||||||
function dumpTable() {
|
|
||||||
echo "\xef\xbb\xbf"; // UTF-8 byte order mark
|
|
||||||
}
|
|
||||||
|
|
||||||
function dumpData($table, $style, $query) {
|
|
||||||
global $connection;
|
|
||||||
$result = $connection->query($query, 1); // 1 - MYSQLI_USE_RESULT
|
|
||||||
if ($result) {
|
|
||||||
while ($row = $result->fetch_assoc()) {
|
|
||||||
if ($style == "table") {
|
|
||||||
dump_csv(array_keys($row));
|
|
||||||
$style = "INSERT";
|
|
||||||
}
|
|
||||||
dump_csv($row);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function dumpFilename($identifier) {
|
|
||||||
return friendly_url($identifier);
|
|
||||||
}
|
|
||||||
|
|
||||||
function dumpHeaders($identifier, $multi_table = false) {
|
|
||||||
$ext = "csv";
|
|
||||||
header("Content-Type: text/csv; charset=utf-8");
|
|
||||||
return $ext;
|
|
||||||
}
|
|
||||||
|
|
||||||
function homepage() {
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function navigation($missing) {
|
function navigation($missing) {
|
||||||
global $VERSION, $token;
|
global $VERSION, $token;
|
||||||
?>
|
?>
|
||||||
<h1>
|
<h1>
|
||||||
<?php echo $this->name(); ?> <span class="version"><?php echo $VERSION; ?></span>
|
<a href="http://www.adminer.org/" id="h1"><?php echo $this->name(); ?></a>
|
||||||
|
<span class="version"><?php echo $VERSION; ?></span>
|
||||||
<a href="http://www.adminer.org/editor/#download" 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"]["server"][""] as $username => $password) {
|
foreach ((array) $_SESSION["passwords"]["server"][""] as $username => $password) {
|
||||||
if ($password !== null) {
|
if (isset($password)) {
|
||||||
if ($first) {
|
if ($first) {
|
||||||
echo "<p id='logins' onmouseover='menuOver(this, event);' onmouseout='menuOut(this);'>\n";
|
echo "<p>\n";
|
||||||
$first = false;
|
$first = false;
|
||||||
}
|
}
|
||||||
echo "<a href='" . h(auth_url("server", "", $username)) . "'>" . ($username != "" ? h($username) : "<i>" . lang('empty') . "</i>") . "</a><br>\n";
|
echo "<a href='" . h(auth_url("server", "", $username)) . "'>" . h($username) . "</a><br>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
?>
|
?>
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
<p class="logout">
|
<p class="logout">
|
||||||
<input type="submit" name="logout" value="<?php echo lang('Logout'); ?>" id="logout">
|
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
|
<input type="submit" name="logout" value="<?php echo lang('Logout'); ?>">
|
||||||
</p>
|
</p>
|
||||||
</form>
|
</form>
|
||||||
<?php
|
<?php
|
||||||
$this->databasesPrint($missing);
|
if ($missing != "db") {
|
||||||
if ($missing != "db" && $missing != "ns") {
|
|
||||||
$table_status = table_status();
|
$table_status = table_status();
|
||||||
if (!$table_status) {
|
if (!$table_status) {
|
||||||
echo "<p class='message'>" . lang('No tables.') . "\n";
|
echo "<p class='message'>" . lang('No tables.') . "\n";
|
||||||
@@ -572,45 +476,34 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function databasesPrint($missing) {
|
|
||||||
}
|
|
||||||
|
|
||||||
function tablesPrint($tables) {
|
function tablesPrint($tables) {
|
||||||
echo "<p id='tables' onmouseover='menuOver(this, event);' onmouseout='menuOut(this);'>\n";
|
echo "<p id='tables'>\n";
|
||||||
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"]) . " title='" . lang('Select data') . "'>$name</a><br>\n";
|
echo "<a href='" . h(ME) . 'select=' . urlencode($row["Name"]) . "'>" . bold($name, $_GET["select"] == $row["Name"]) . "</a><br>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function _foreignColumn($foreignKeys, $column) {
|
function _foreignKeyOptions($table, $column) {
|
||||||
|
global $connection;
|
||||||
|
$foreignKeys = column_foreign_keys($table);
|
||||||
foreach ((array) $foreignKeys[$column] as $foreignKey) {
|
foreach ((array) $foreignKeys[$column] as $foreignKey) {
|
||||||
if (count($foreignKey["source"]) == 1) {
|
if (count($foreignKey["source"]) == 1) {
|
||||||
|
$id = idf_escape($foreignKey["target"][0]);
|
||||||
$name = $this->rowDescription($foreignKey["table"]);
|
$name = $this->rowDescription($foreignKey["table"]);
|
||||||
if ($name != "") {
|
if ($name != "") {
|
||||||
$id = idf_escape($foreignKey["target"][0]);
|
$return = &$this->_values[$foreignKey["table"]];
|
||||||
return array($foreignKey["table"], $id, $name);
|
if (!isset($return)) {
|
||||||
|
$table_status = table_status($foreignKey["table"]);
|
||||||
|
$return = ($table_status["Rows"] > 1000 ? array() : array("" => "") + get_key_vals("SELECT $id, $name FROM " . idf_escape($foreignKey["table"]) . " ORDER BY 2"));
|
||||||
|
}
|
||||||
|
return $return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function _foreignKeyOptions($table, $column, $value = null) {
|
|
||||||
global $connection;
|
|
||||||
if (list($target, $id, $name) = $this->_foreignColumn(column_foreign_keys($table), $column)) {
|
|
||||||
$return = &$this->_values[$target];
|
|
||||||
if ($return === null) {
|
|
||||||
$table_status = table_status($target);
|
|
||||||
$return = ($table_status["Rows"] > 1000 ? "" : array("" => "") + get_key_vals("SELECT $id, $name FROM " . table($target) . " ORDER BY 2"));
|
|
||||||
}
|
|
||||||
if (!$return && $value !== null) {
|
|
||||||
return $connection->result("SELECT $name FROM " . table($target) . " WHERE $id = " . q($value));
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,14 +14,14 @@ function email_header($header) {
|
|||||||
* @param string
|
* @param string
|
||||||
* @param string
|
* @param string
|
||||||
* @param array
|
* @param array
|
||||||
* @return bool
|
* @return
|
||||||
*/
|
*/
|
||||||
function send_mail($email, $subject, $message, $from = "", $files = array()) {
|
function send_email($email, $subject, $message, $from = "", $files = array()) {
|
||||||
$eol = (strncasecmp(PHP_OS, "win", 3) ? "\n" : "\r\n"); // PHP_EOL available since PHP 4.3.10 and 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 = "";
|
||||||
foreach ((array) $files["error"] as $key => $val) {
|
foreach ($files["error"] as $key => $val) {
|
||||||
if (!$val) {
|
if (!$val) {
|
||||||
$attachments .= "--$boundary$eol"
|
$attachments .= "--$boundary$eol"
|
||||||
. "Content-Type: " . str_replace("\n", "", $files["type"][$key]) . $eol
|
. "Content-Type: " . str_replace("\n", "", $files["type"][$key]) . $eol
|
||||||
@@ -43,11 +43,3 @@ function send_mail($email, $subject, $message, $from = "", $files = array()) {
|
|||||||
;
|
;
|
||||||
return mail($email, email_header($subject), $beginning . $message . $attachments, $headers);
|
return mail($email, email_header($subject), $beginning . $message . $attachments, $headers);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Check whether the column looks like boolean
|
|
||||||
* @param array single field returned from fields()
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
function like_bool($field) {
|
|
||||||
return ereg("bool|(tinyint|bit)\\(1\\)", $field["full_type"]);
|
|
||||||
}
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user