mirror of
https://github.com/vrana/adminer.git
synced 2025-08-30 09:39:51 +02:00
Compare commits
338 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
a186460648 | ||
|
2d942e692d | ||
|
2dcfb70d08 | ||
|
405ad5f07e | ||
|
b959ba41c6 | ||
|
22125790b3 | ||
|
f539836fd5 | ||
|
2ca26386c2 | ||
|
4cc29e0137 | ||
|
a25fa67e06 | ||
|
99a75c3c44 | ||
|
83113cbe67 | ||
|
d35f83fb8d | ||
|
7f2e97f0d2 | ||
|
c6c48553b8 | ||
|
27c046f753 | ||
|
9e7fcdf32c | ||
|
c7f1a6322e | ||
|
640afc74d7 | ||
|
6bcbb0f1d8 | ||
|
41e197ac06 | ||
|
9fd2880968 | ||
|
70994abcbd | ||
|
7e97fcd0b9 | ||
|
bbbf4eeb79 | ||
|
3c5c08e793 | ||
|
27b5e46a45 | ||
|
af3b762067 | ||
|
1e70b74f4c | ||
|
543e172513 | ||
|
841cbbb7d2 | ||
|
fd7e8cbaae | ||
|
468644e2d8 | ||
|
319abbaf2f | ||
|
b848764299 | ||
|
ed25431f3c | ||
|
6b3e3c2532 | ||
|
0e0b79b815 | ||
|
998e2f5027 | ||
|
ef867e6bd1 | ||
|
bed3856f2d | ||
|
3ed7f453bc | ||
|
dd85aa5d6a | ||
|
c456f52d9f | ||
|
9d34071eb9 | ||
|
db3ae281bb | ||
|
de056d41c2 | ||
|
0f1c2c217b | ||
|
ce0d001e8b | ||
|
3a333e92ff | ||
|
9d944c8fc1 | ||
|
2348c4cd4c | ||
|
e6843dfbc1 | ||
|
2dd39c6df5 | ||
|
a4c2b4a7cb | ||
|
daf60b29f8 | ||
|
a88dccb961 | ||
|
43e646eb54 | ||
|
8a06b35c44 | ||
|
2b472a5c10 | ||
|
112c9b3d87 | ||
|
5d1a84d390 | ||
|
2830ecd2e1 | ||
|
e854a04117 | ||
|
75783421f1 | ||
|
5a58d35405 | ||
|
023b62a39c | ||
|
bf8b620560 | ||
|
1370d29d27 | ||
|
93e835aea8 | ||
|
9c6a5cd542 | ||
|
afa70c94e5 | ||
|
74e199e488 | ||
|
71e0db4106 | ||
|
db2ac19b80 | ||
|
b92fe58553 | ||
|
b358a2dd62 | ||
|
c75ee44387 | ||
|
734f0881f0 | ||
|
0ced6d33ce | ||
|
b7e1cb09c1 | ||
|
1a30f25311 | ||
|
5275ed870b | ||
|
a30f149376 | ||
|
b96facf0af | ||
|
e011b87670 | ||
|
9ef9b8646e | ||
|
709ef12a88 | ||
|
593e071dbf | ||
|
0e2438c98e | ||
|
52c15bf251 | ||
|
388c21a0f9 | ||
|
55223eb10c | ||
|
f0d0bdbf39 | ||
|
323f4ab34c | ||
|
ad45a666cc | ||
|
c99c11648d | ||
|
3efcd4d5b7 | ||
|
fd65b4c9b9 | ||
|
8e75d54e44 | ||
|
c91185c435 | ||
|
bbe46b7c0d | ||
|
a80c1d1632 | ||
|
2d721016d9 | ||
|
0ecf84f987 | ||
|
9dda217d55 | ||
|
21e88515c1 | ||
|
b01d0cec22 | ||
|
c82829942c | ||
|
2e1d38a920 | ||
|
b1f1b03424 | ||
|
aeae30ffb7 | ||
|
5046f71f9a | ||
|
503034d010 | ||
|
f4204386c7 | ||
|
f80e15f987 | ||
|
4b4055432d | ||
|
be4f2ef76c | ||
|
037c547365 | ||
|
71efbc545a | ||
|
1c415dbcf8 | ||
|
903a0377af | ||
|
628a43156d | ||
|
6c1598ebaf | ||
|
cde1d43e89 | ||
|
06aa0f842b | ||
|
7f05e73689 | ||
|
83d82d6eee | ||
|
a3663066b0 | ||
|
dc4851dacd | ||
|
492f78f6fe | ||
|
3e3928ea05 | ||
|
3a8395d18e | ||
|
ad937f8665 | ||
|
1c768e87fa | ||
|
8a9642b217 | ||
|
ac8a64e88a | ||
|
ead05e6839 | ||
|
9e0e161253 | ||
|
33c4623345 | ||
|
67e5cbdb6e | ||
|
6027d181a4 | ||
|
5fa9f84de0 | ||
|
9a4cabe898 | ||
|
55e2b7597e | ||
|
0474c21108 | ||
|
7fa8263629 | ||
|
a9b2ac915d | ||
|
d26fb6276e | ||
|
87137e55c9 | ||
|
46c99c9a0c | ||
|
ddfe924a38 | ||
|
50a2823d36 | ||
|
d938efb1a8 | ||
|
7ff2a67ae8 | ||
|
0060c608d6 | ||
|
0d427ad5a8 | ||
|
3ab609188b | ||
|
c101a1f8bd | ||
|
08e70e6309 | ||
|
f8ae1d6360 | ||
|
d9c2e80100 | ||
|
aa29b01724 | ||
|
5576d84980 | ||
|
e0773c0072 | ||
|
c2965bc88d | ||
|
9c370ad504 | ||
|
98a00bacc5 | ||
|
e6b520212b | ||
|
2eee7a75aa | ||
|
3c066debf3 | ||
|
c561d70486 | ||
|
c0c21d4d12 | ||
|
2140f09b68 | ||
|
56a1bdd7fc | ||
|
3a148454c1 | ||
|
05ad2268fa | ||
|
4bcc0ca27c | ||
|
8372913ab5 | ||
|
955e6b44b3 | ||
|
bf0c626224 | ||
|
04127bcbf5 | ||
|
ce3d18e538 | ||
|
4787b57d30 | ||
|
42a422e623 | ||
|
ae50ef7594 | ||
|
16a72b4521 | ||
|
98e410f42d | ||
|
d09f05b01b | ||
|
ea4eba4761 | ||
|
00342a1532 | ||
|
0f00277b82 | ||
|
2b9bd6f05d | ||
|
e8aad6a580 | ||
|
5bc419ef32 | ||
|
e641e5ceba | ||
|
d2c513d1c2 | ||
|
6a491373c2 | ||
|
baf21724cf | ||
|
20a65465c6 | ||
|
e3c4324e49 | ||
|
c1c598db1e | ||
|
48981e9acb | ||
|
4ff2f03a0f | ||
|
cbdf09d868 | ||
|
dd39e3aa3f | ||
|
fcc773660e | ||
|
9bb764162d | ||
|
1b47195a7e | ||
|
b48d6cf42b | ||
|
1da3ca544a | ||
|
fb9db96e4d | ||
|
a8895c8238 | ||
|
2a1c409681 | ||
|
bd88113666 | ||
|
24e66c2812 | ||
|
dd295df9bd | ||
|
1c1537b089 | ||
|
4358ba8181 | ||
|
6b4ee48ae8 | ||
|
daf85306a5 | ||
|
b6be64e9c0 | ||
|
5792eabd9b | ||
|
88d473ae16 | ||
|
4091912219 | ||
|
417b29fe65 | ||
|
d94aad0f69 | ||
|
374e39eb3e | ||
|
d7183def4f | ||
|
d3d6a9ae60 | ||
|
ba357a553e | ||
|
91aae7332f | ||
|
3ebfdd30c1 | ||
|
46dad6eec3 | ||
|
d55ba18b43 | ||
|
8e46171f14 | ||
|
8f046ea234 | ||
|
8b0acfe8ca | ||
|
324b19d281 | ||
|
87888f1048 | ||
|
9f58dc6328 | ||
|
63f197213e | ||
|
869193fa18 | ||
|
989d75886f | ||
|
52a67a9d7c | ||
|
8bda0b64ba | ||
|
3929e19c7f | ||
|
b5cbbce3cd | ||
|
6d0b86bffa | ||
|
3535d0a325 | ||
|
ce9270ba66 | ||
|
aea84dda9a | ||
|
2dbc73833b | ||
|
ebc0c52f5f | ||
|
92259121a5 | ||
|
58347d495e | ||
|
fa832055c8 | ||
|
5ee14079b8 | ||
|
07e4476e78 | ||
|
06e3746510 | ||
|
7d2735512f | ||
|
85fc4b18e2 | ||
|
931f7ef6c6 | ||
|
fa3268269a | ||
|
e89f42d466 | ||
|
d8cba0eb5d | ||
|
2e6ad2037f | ||
|
0bc930c52a | ||
|
2671a4774f | ||
|
04e5250044 | ||
|
9565f74745 | ||
|
e4cb779bd9 | ||
|
43b9502ce1 | ||
|
7d152fbabf | ||
|
b68ddcad2b | ||
|
1804f71b96 | ||
|
11863ab2ef | ||
|
2f76084bbd | ||
|
08650eecf1 | ||
|
3fadf35599 | ||
|
0bf40f9c70 | ||
|
5586c51d18 | ||
|
266d83215d | ||
|
10bb2b1526 | ||
|
ef3eb908fd | ||
|
622845b096 | ||
|
cdeecc3e19 | ||
|
0f4ca18427 | ||
|
06ba118199 | ||
|
010b3e9307 | ||
|
ee229ef618 | ||
|
a8b62ceff0 | ||
|
4cb08c4ab3 | ||
|
a00b52a689 | ||
|
f60058aa74 | ||
|
8e5d9d0756 | ||
|
327b56bcdf | ||
|
c708fa1c69 | ||
|
c41c101aa3 | ||
|
021e1e319c | ||
|
70066b3f37 | ||
|
d1f6fa9a3a | ||
|
f6e29f78f6 | ||
|
d3609817a1 | ||
|
3a84672355 | ||
|
db40abccc8 | ||
|
e52ac37c3e | ||
|
a8df780fe0 | ||
|
15ab4d28a7 | ||
|
d48c3593e3 | ||
|
3c5cd76d26 | ||
|
2edd575767 | ||
|
6fee8048e0 | ||
|
1a0369adc0 | ||
|
0a8cd02636 | ||
|
b0fe26ba3e | ||
|
5e189f68e2 | ||
|
f332258d56 | ||
|
8bf026336f | ||
|
dea2dcc878 | ||
|
12f7503a56 | ||
|
3f4ef94f83 | ||
|
5d7a974671 | ||
|
d06de5512e | ||
|
1420b6a259 | ||
|
740ae10a3d | ||
|
071e6a2408 | ||
|
61cec7efcc | ||
|
9ff10f8301 | ||
|
db030df487 | ||
|
de4820cc83 | ||
|
2ad1b6a062 | ||
|
ee653a689e | ||
|
5b8361af65 | ||
|
e25e78037f | ||
|
8141463609 | ||
|
32f2000034 | ||
|
f842e33bee |
4
.gitignore
vendored
4
.gitignore
vendored
@@ -1,2 +1,2 @@
|
||||
adminer*.php
|
||||
editor*.php
|
||||
/adminer*.php
|
||||
/editor*.php
|
||||
|
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -13,3 +13,6 @@
|
||||
[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
|
||||
|
@@ -33,10 +33,14 @@ if (!$error && $_POST) {
|
||||
if (!$connection->multi_query($query)) {
|
||||
echo "<p class='error'>" . error() . "\n";
|
||||
} else {
|
||||
$connection2 = connect();
|
||||
if (is_object($connection2)) {
|
||||
$connection2->select_db(DB);
|
||||
}
|
||||
do {
|
||||
$result = $connection->store_result();
|
||||
if (is_object($result)) {
|
||||
select($result);
|
||||
select($result, $connection2);
|
||||
} else {
|
||||
echo "<p class='message'>" . lang('Routine has been called, %d row(s) affected.', $connection->affected_rows) . "\n";
|
||||
}
|
||||
@@ -72,6 +76,6 @@ if ($in) {
|
||||
}
|
||||
?>
|
||||
<p>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
<input type="submit" value="<?php echo lang('Call'); ?>">
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</form>
|
||||
|
@@ -14,6 +14,9 @@ if ($TABLE != "") {
|
||||
$orig_fields = fields($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["drop"]) {
|
||||
@@ -44,7 +47,7 @@ if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"] && !$_POST["up"]
|
||||
$fields[] = array($field["orig"], $process_field, $after);
|
||||
}
|
||||
if (isset($foreign_key)) {
|
||||
$foreign[idf_escape($field["field"])] = ($TABLE != "" ? "ADD" : " ") . " FOREIGN KEY (" . idf_escape($field["field"]) . ") REFERENCES " . table($foreign_keys[$field["type"]]) . " (" . idf_escape($type_field["field"]) . ")" . (in_array($field["on_delete"], $on_actions) ? " ON DELETE $field[on_delete]" : "");
|
||||
$foreign[idf_escape($field["field"])] = ($TABLE != "" ? "ADD" : " ") . " FOREIGN KEY (" . idf_escape($field["field"]) . ") REFERENCES " . table($foreign_keys[$field["type"]]) . " (" . idf_escape($type_field["field"]) . ")" . (ereg("^($on_actions)\$", $field["on_delete"]) ? " ON DELETE $field[on_delete]" : "");
|
||||
}
|
||||
$after = "AFTER " . idf_escape($field["field"]);
|
||||
} elseif ($field["orig"] != "") {
|
||||
@@ -75,9 +78,10 @@ if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"] && !$_POST["up"]
|
||||
cookie("adminer_engine", $_POST["Engine"]);
|
||||
$message = lang('Table has been created.');
|
||||
}
|
||||
queries_redirect(ME . "table=" . urlencode($_POST["name"]), $message, alter_table(
|
||||
$name = trim($_POST["name"]);
|
||||
queries_redirect(ME . "table=" . urlencode($name), $message, alter_table(
|
||||
$TABLE,
|
||||
$_POST["name"],
|
||||
$name,
|
||||
$fields,
|
||||
$foreign,
|
||||
$_POST["Comment"],
|
||||
@@ -154,16 +158,27 @@ foreach ($engines as $engine) {
|
||||
<?php echo ($collations && !ereg("sqlite|mssql", $jush) ? html_select("Collation", array("" => "(" . lang('collation') . ")") + $collations, $row["Collation"]) : ""); ?>
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||
<table cellspacing="0" id="edit-fields" class="nowrap">
|
||||
<?php $comments = edit_fields($row["fields"], $collations, "TABLE", $suhosin, $foreign_keys, $row["Comment"] != ""); ?>
|
||||
<?php
|
||||
$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", $suhosin, $foreign_keys, $comments);
|
||||
?>
|
||||
</table>
|
||||
<p>
|
||||
<?php echo lang('Auto Increment'); ?>: <input name="Auto_increment" size="6" value="<?php echo h($row["Auto_increment"]); ?>">
|
||||
<label><input type="checkbox" onclick="columnShow(this.checked, 5);"><?php echo lang('Default values'); ?></label>
|
||||
<?php echo (support("comment") ? checkbox("", "", $comments, lang('Comment'), "columnShow(this.checked, 6); toggle('Comment'); if (this.checked) this.form['Comment'].focus();") . ' <input id="Comment" name="Comment" value="' . h($row["Comment"]) . '" maxlength="60"' . ($comments ? '' : ' class="hidden"') . '>' : ''); ?>
|
||||
<label class="jsonly"><input type="checkbox" name="defaults" value="1"<?php echo ($_POST["defaults"] ? " checked" : ""); ?> 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 id="Comment" name="Comment" value="' . h($row["Comment"]) . '" maxlength="60"' . ($comments ? '' : ' class="hidden"') . '>' : ''); ?>
|
||||
<p>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||
<?php if (strlen($_GET["create"])) { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo confirm(); ?>><?php } ?>
|
||||
<?php if ($_GET["create"] != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo confirm(); ?>><?php } ?>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
<?php
|
||||
if (support("partitioning")) {
|
||||
$partition_table = ereg('RANGE|LIST', $row["partition_by"]);
|
||||
|
@@ -1,16 +1,17 @@
|
||||
<?php
|
||||
if ($_POST && !$error && !isset($_POST["add_x"])) { // add is an image and PHP changes add.x to add_x
|
||||
restart_session();
|
||||
$name = trim($_POST["name"]);
|
||||
if ($_POST["drop"]) {
|
||||
$_GET["db"] = ""; // to save in global history
|
||||
queries_redirect(remove_from_uri("db|database"), lang('Database has been dropped.'), drop_databases(array(DB)));
|
||||
} elseif (DB !== $_POST["name"]) {
|
||||
} elseif (DB !== $name) {
|
||||
// create or rename database
|
||||
if (DB != "") {
|
||||
$_GET["db"] = $_POST["name"];
|
||||
queries_redirect(preg_replace('~db=[^&]*&~', '', ME) . "db=" . urlencode($_POST["name"]), lang('Database has been renamed.'), rename_database($_POST["name"], $_POST["collation"]));
|
||||
$_GET["db"] = $name;
|
||||
queries_redirect(preg_replace('~db=[^&]*&~', '', ME) . "db=" . urlencode($name), lang('Database has been renamed.'), rename_database($name, $_POST["collation"]));
|
||||
} else {
|
||||
$databases = explode("\n", str_replace("\r", "", $_POST["name"]));
|
||||
$databases = explode("\n", str_replace("\r", "", $name));
|
||||
$success = true;
|
||||
$last = "";
|
||||
foreach ($databases as $db) {
|
||||
@@ -28,7 +29,7 @@ if ($_POST && !$error && !isset($_POST["add_x"])) { // add is an image and PHP c
|
||||
if (!$_POST["collation"]) {
|
||||
redirect(substr(ME, 0, -1));
|
||||
}
|
||||
query_redirect("ALTER DATABASE " . idf_escape($_POST["name"]) . (eregi('^[a-z0-9_]+$', $_POST["collation"]) ? " COLLATE $_POST[collation]" : ""), substr(ME, 0, -1), lang('Database has been altered.'));
|
||||
query_redirect("ALTER DATABASE " . idf_escape($name) . (eregi('^[a-z0-9_]+$', $_POST["collation"]) ? " COLLATE $_POST[collation]" : ""), substr(ME, 0, -1), lang('Database has been altered.'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,12 +58,11 @@ if ($_POST) {
|
||||
<p>
|
||||
<?php
|
||||
echo ($_POST["add_x"] || strpos($name, "\n")
|
||||
? '<textarea id="name" name="name" rows="10" cols="40" onkeypress="return textareaKeypress(this, event);">' . h($name) . '</textarea><br>'
|
||||
? '<textarea id="name" name="name" rows="10" cols="40">' . h($name) . '</textarea><br>'
|
||||
: '<input id="name" name="name" value="' . h($name) . '" maxlength="64">'
|
||||
) . "\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'); ?>">
|
||||
<?php
|
||||
if (DB != "") {
|
||||
@@ -71,4 +71,5 @@ if (DB != "") {
|
||||
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>
|
||||
|
@@ -26,6 +26,12 @@ if ($tables_views && !$error && !$_POST["search"]) {
|
||||
$result = drop_tables($_POST["tables"]);
|
||||
}
|
||||
$message = lang('Tables have been dropped.');
|
||||
} elseif ($jush != "sql") {
|
||||
$result = ($jush == "sqlite"
|
||||
? queries("VACUUM")
|
||||
: apply_queries("VACUUM" . ($_POST["optimize"] ? "" : " ANALYZE"), $_POST["tables"])
|
||||
);
|
||||
$message = lang('Tables have been optimized.');
|
||||
} elseif ($_POST["tables"] && ($result = queries(($_POST["optimize"] ? "OPTIMIZE" : ($_POST["check"] ? "CHECK" : ($_POST["repair"] ? "REPAIR" : "ANALYZE"))) . " TABLE " . implode(", ", array_map('idf_escape', $_POST["tables"]))))) {
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
$message .= "<b>" . h($row["Table"]) . "</b>: " . h($row["Msg_text"]) . "<br>";
|
||||
@@ -38,7 +44,6 @@ page_header(($_GET["ns"] == "" ? lang('Database') . ": " . h(DB) : lang('Schema'
|
||||
|
||||
if ($adminer->homepage()) {
|
||||
if ($_GET["ns"] !== "") {
|
||||
echo '<a href="' . h(ME) . 'schema=">' . lang('Database schema') . "</a>\n";
|
||||
echo "<h3>" . lang('Tables and views') . "</h3>\n";
|
||||
$tables_list = tables_list();
|
||||
if (!$tables_list) {
|
||||
@@ -49,32 +54,54 @@ if ($adminer->homepage()) {
|
||||
if ($_POST["search"] && $_POST["query"] != "") {
|
||||
search_tables();
|
||||
}
|
||||
echo "<table cellspacing='0' class='nowrap' onclick='tableClick(event);'>\n";
|
||||
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 "<table cellspacing='0' class='nowrap checkable' onclick='tableClick(event);'>\n";
|
||||
echo '<thead><tr class="wrap"><td><input id="check-all" type="checkbox" onclick="formCheck(this, /^(tables|views)\[/);">';
|
||||
echo '<th>' . lang('Table');
|
||||
echo '<td>' . lang('Engine');
|
||||
echo '<td>' . lang('Collation');
|
||||
echo '<td>' . lang('Data Length');
|
||||
echo '<td>' . lang('Index Length');
|
||||
echo '<td>' . lang('Data Free');
|
||||
echo '<td>' . lang('Auto Increment');
|
||||
echo '<td>' . lang('Rows');
|
||||
echo (support("comment") ? '<td>' . lang('Comment') : '');
|
||||
echo "</thead>\n";
|
||||
foreach ($tables_list as $name => $type) {
|
||||
$view = (isset($type) && !eregi("table", $type));
|
||||
echo '<tr' . odd() . '><td>' . checkbox(($view ? "views[]" : "tables[]"), $name, in_array($name, $tables_views, true), "", "formUncheck('check-all');");
|
||||
echo '<th><a href="' . h(ME) . 'table=' . urlencode($name) . '">' . h($name) . '</a>';
|
||||
echo '<th><a href="' . h(ME) . 'table=' . urlencode($name) . '" title="' . lang('Show structure') . '">' . h($name) . '</a>';
|
||||
if ($view) {
|
||||
echo '<td colspan="6"><a href="' . h(ME) . "view=" . urlencode($name) . '">' . lang('View') . '</a>';
|
||||
echo '<td align="right"><a href="' . h(ME) . "select=" . urlencode($name) . '">?</a>';
|
||||
echo '<td colspan="6"><a href="' . h(ME) . "view=" . urlencode($name) . '" title="' . lang('Alter view') . '">' . lang('View') . '</a>';
|
||||
echo '<td align="right"><a href="' . h(ME) . "select=" . urlencode($name) . '" title="' . lang('Select data') . '">?</a>';
|
||||
} else {
|
||||
foreach (array("Engine" => "", "Collation" => "", "Data_length" => "create", "Index_length" => "indexes", "Data_free" => "edit", "Auto_increment" => "auto_increment=1&create", "Rows" => "select") as $key => $link) {
|
||||
echo ($link ? "<td align='right'><a href='" . h(ME . "$link=") . urlencode($name) . "' id='$key-" . h($name) . "'>?</a>" : "<td id='$key-" . h($name) . "'> ");
|
||||
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 "<td>" . nbsp($connection->result("SELECT @@storage_engine"));
|
||||
echo "<td>" . nbsp($jush == "sql" ? $connection->result("SELECT @@storage_engine") : "");
|
||||
echo "<td>" . nbsp(db_collation(DB, collations()));
|
||||
foreach (array("Data_length", "Index_length", "Data_free") as $key) {
|
||||
echo "<td align='right' id='sum-$key'> ";
|
||||
}
|
||||
echo "</table>\n";
|
||||
echo "<script type='text/javascript'>tableCheck();</script>\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') . "'" . confirm("formChecked(this, /tables/)") . "> <input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm("formChecked(this, /tables|views/)", 1) . ">\n"; // 1 - eventStop
|
||||
$databases = (support("scheme") ? schemas() : get_databases());
|
||||
echo "<p>" . (ereg('^(sql|sqlite|pgsql)$', $jush)
|
||||
? ($jush != "sqlite" ? "<input type='submit' value='" . lang('Analyze') . "'> " : "")
|
||||
. "<input type='submit' name='optimize' value='" . lang('Optimize') . "'> " : ""
|
||||
) . ($jush == "sql" ? "<input type='submit' name='check' value='" . lang('Check') . "'> <input type='submit' name='repair' value='" . lang('Repair') . "'> " : "") . "<input type='submit' name='truncate' value='" . lang('Truncate') . "'" . confirm("formChecked(this, /tables/)") . "> <input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm("formChecked(this, /tables|views/)", 1) . ">\n"; // 1 - eventStop
|
||||
$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') . ": ";
|
||||
@@ -83,6 +110,7 @@ if ($adminer->homepage()) {
|
||||
echo (support("copy") ? " <input type='submit' name='copy' value='" . lang('Copy') . "' onclick='eventStop(event);'>" : "");
|
||||
echo "\n";
|
||||
}
|
||||
echo "<input type='hidden' name='token' value='$token'>\n";
|
||||
}
|
||||
echo "</form>\n";
|
||||
}
|
||||
@@ -101,14 +129,14 @@ if ($adminer->homepage()) {
|
||||
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 '<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"] == "FUNCTION" ? 'function=' : 'procedure=') . urlencode($row["ROUTINE_NAME"]) . '">' . lang('Alter') . "</a>";
|
||||
echo '<td><a href="' . h(ME) . ($row["ROUTINE_TYPE"] != "PROCEDURE" ? 'function=' : 'procedure=') . urlencode($row["ROUTINE_NAME"]) . '">' . lang('Alter') . "</a>";
|
||||
}
|
||||
echo "</table>\n";
|
||||
}
|
||||
echo '<p><a href="' . h(ME) . 'procedure=">' . lang('Create procedure') . '</a> <a href="' . h(ME) . 'function=">' . lang('Create function') . "</a>\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")) {
|
||||
|
@@ -334,10 +334,6 @@ WHERE o.schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND o.type IN ('S', 'U',
|
||||
}
|
||||
|
||||
function indexes($table, $connection2 = null) {
|
||||
global $connection;
|
||||
if (!is_object($connection2)) {
|
||||
$connection2 = $connection;
|
||||
}
|
||||
$return = array();
|
||||
// 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
|
||||
@@ -440,16 +436,16 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
||||
$index = array();
|
||||
$drop = array();
|
||||
foreach ($alter as $val) {
|
||||
if ($val[2]) {
|
||||
if ($val[2] == "DROP") {
|
||||
if ($val[0] == "PRIMARY") { //! sometimes used also for UNIQUE
|
||||
$drop[] = $val[1];
|
||||
$drop[] = idf_escape($val[1]);
|
||||
} else {
|
||||
$index[] = "$val[1] ON " . table($table);
|
||||
$index[] = idf_escape($val[1]) . " ON " . table($table);
|
||||
}
|
||||
} elseif (!queries(($val[0] != "PRIMARY"
|
||||
? "CREATE" . ($val[0] != "INDEX" ? " UNIQUE" : "") . " INDEX " . idf_escape(uniqid($table . "_")) . " ON " . table($table)
|
||||
? "CREATE $val[0] " . ($val[0] != "INDEX" ? "INDEX " : "") . idf_escape($val[1] != "" ? $val[1] : uniqid($table . "_")) . " ON " . table($table)
|
||||
: "ALTER TABLE " . table($table) . " ADD PRIMARY KEY"
|
||||
) . " $val[1]")) {
|
||||
) . " $val[2]")) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -494,6 +490,9 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
||||
return $return;
|
||||
}
|
||||
|
||||
function found_rows($table_status, $where) {
|
||||
}
|
||||
|
||||
function foreign_keys($table) {
|
||||
$return = array();
|
||||
foreach (get_rows("EXEC sp_fkeys @fktable_name = " . q($table)) as $row) {
|
||||
@@ -522,6 +521,9 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
||||
}
|
||||
|
||||
function trigger($name) {
|
||||
if ($name == "") {
|
||||
return array();
|
||||
}
|
||||
$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, 'ExecIsInsteadOfTrigger') = 1 THEN 'INSTEAD OF' ELSE 'AFTER' END [Timing],
|
||||
@@ -603,7 +605,7 @@ WHERE sys1.xtype = 'TR' AND sys2.name = " . q($table)
|
||||
$structured_types[$key] = array_keys($val);
|
||||
}
|
||||
$unsigned = array();
|
||||
$operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL", "");
|
||||
$operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL");
|
||||
$functions = array("len", "lower", "round", "upper");
|
||||
$grouping = array("avg", "count", "count distinct", "max", "min", "sum");
|
||||
$edit_functions = array(
|
||||
|
@@ -18,8 +18,8 @@ if (!defined("DRIVER")) {
|
||||
list($host, $port) = explode(":", $server, 2); // part after : is used for port or socket
|
||||
$return = @$this->real_connect(
|
||||
($server != "" ? $host : ini_get("mysqli.default_host")),
|
||||
("$server$username" != "" ? $username : ini_get("mysqli.default_user")),
|
||||
("$server$username$password" != "" ? $password : ini_get("mysqli.default_pw")),
|
||||
($server . $username != "" ? $username : ini_get("mysqli.default_user")),
|
||||
($server . $username . $password != "" ? $password : ini_get("mysqli.default_pw")),
|
||||
null,
|
||||
(is_numeric($port) ? $port : ini_get("mysqli.default_port")),
|
||||
(!is_numeric($port) ? $port : null)
|
||||
@@ -48,7 +48,7 @@ if (!defined("DRIVER")) {
|
||||
}
|
||||
}
|
||||
|
||||
} elseif (extension_loaded("mysql")) {
|
||||
} elseif (extension_loaded("mysql") && !(ini_get("sql.safe_mode") && extension_loaded("pdo_mysql"))) {
|
||||
class Min_DB {
|
||||
var
|
||||
$extension = "MySQL", ///< @var string extension name
|
||||
@@ -250,10 +250,14 @@ if (!defined("DRIVER")) {
|
||||
$connection = new Min_DB;
|
||||
$credentials = $adminer->credentials();
|
||||
if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) {
|
||||
$connection->query("SET SQL_QUOTE_SHOW_CREATE=1");
|
||||
$connection->query("SET sql_quote_show_create = 1, autocommit = 1");
|
||||
return $connection;
|
||||
}
|
||||
return $connection->error;
|
||||
$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
|
||||
@@ -261,6 +265,7 @@ if (!defined("DRIVER")) {
|
||||
* @return array
|
||||
*/
|
||||
function get_databases($flush = true) {
|
||||
global $connection;
|
||||
// SHOW DATABASES can take a very long time so it is cached
|
||||
$return = &get_session("dbs");
|
||||
if (!isset($return)) {
|
||||
@@ -269,7 +274,7 @@ if (!defined("DRIVER")) {
|
||||
ob_flush();
|
||||
flush();
|
||||
}
|
||||
$return = get_vals("SHOW DATABASES");
|
||||
$return = get_vals($connection->server_info >= 5 ? "SELECT SCHEMA_NAME FROM information_schema.SCHEMATA" : "SHOW DATABASES"); // SHOW DATABASES can be disabled by skip_show_database
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
@@ -307,7 +312,7 @@ if (!defined("DRIVER")) {
|
||||
$return = $match[1];
|
||||
} elseif (preg_match('~ CHARACTER SET ([^ ]+)~', $create, $match)) {
|
||||
// default collation
|
||||
$return = $collations[$match[1]][0];
|
||||
$return = $collations[$match[1]][-1];
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
@@ -334,7 +339,7 @@ if (!defined("DRIVER")) {
|
||||
}
|
||||
|
||||
/** Get tables list
|
||||
* @return array
|
||||
* @return array array($name => $type)
|
||||
*/
|
||||
function tables_list() {
|
||||
global $connection;
|
||||
@@ -355,7 +360,7 @@ if (!defined("DRIVER")) {
|
||||
|
||||
/** Get table status
|
||||
* @param string
|
||||
* @return array
|
||||
* @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
|
||||
*/
|
||||
function table_status($name = "") {
|
||||
$return = array();
|
||||
@@ -388,7 +393,7 @@ if (!defined("DRIVER")) {
|
||||
* @return bool
|
||||
*/
|
||||
function fk_support($table_status) {
|
||||
return ($table_status["Engine"] == "InnoDB");
|
||||
return eregi("InnoDB|IBMDB2I", $table_status["Engine"]);
|
||||
}
|
||||
|
||||
/** Get information about fields
|
||||
@@ -424,10 +429,6 @@ if (!defined("DRIVER")) {
|
||||
* @return array array($key_name => array("type" => , "columns" => array(), "lengths" => array()))
|
||||
*/
|
||||
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();
|
||||
foreach (get_rows("SHOW INDEX FROM " . table($table), $connection2) as $row) {
|
||||
$return[$row["Key_name"]]["type"] = ($row["Key_name"] == "PRIMARY" ? "PRIMARY" : ($row["Index_type"] == "FULLTEXT" ? "FULLTEXT" : ($row["Non_unique"] ? "INDEX" : "UNIQUE")));
|
||||
@@ -439,7 +440,7 @@ if (!defined("DRIVER")) {
|
||||
|
||||
/** Get foreign keys in table
|
||||
* @param string
|
||||
* @return array array($name => array("db" => , "table" => , "source" => array(), "target" => array(), "on_delete" => , "on_update" => ))
|
||||
* @return array array($name => array("db" => , "ns" => , "table" => , "source" => array(), "target" => array(), "on_delete" => , "on_update" => ))
|
||||
*/
|
||||
function foreign_keys($table) {
|
||||
global $connection, $on_actions;
|
||||
@@ -447,7 +448,7 @@ if (!defined("DRIVER")) {
|
||||
$return = array();
|
||||
$create_table = $connection->result("SHOW CREATE TABLE " . table($table), 1);
|
||||
if ($create_table) {
|
||||
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);
|
||||
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);
|
||||
foreach ($matches as $match) {
|
||||
preg_match_all("~$pattern~", $match[2], $source);
|
||||
preg_match_all("~$pattern~", $match[5], $target);
|
||||
@@ -456,8 +457,8 @@ if (!defined("DRIVER")) {
|
||||
"table" => idf_unescape($match[4] != "" ? $match[4] : $match[3]),
|
||||
"source" => array_map('idf_unescape', $source[0]),
|
||||
"target" => array_map('idf_unescape', $target[0]),
|
||||
"on_delete" => $match[6],
|
||||
"on_update" => $match[7],
|
||||
"on_delete" => ($match[6] ? $match[6] : "RESTRICT"),
|
||||
"on_update" => ($match[7] ? $match[7] : "RESTRICT"),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -479,11 +480,15 @@ if (!defined("DRIVER")) {
|
||||
function collations() {
|
||||
$return = array();
|
||||
foreach (get_rows("SHOW COLLATION") as $row) {
|
||||
$return[$row["Charset"]][] = $row["Collation"];
|
||||
if ($row["Default"]) {
|
||||
$return[$row["Charset"]][-1] = $row["Collation"];
|
||||
} else {
|
||||
$return[$row["Charset"]][] = $row["Collation"];
|
||||
}
|
||||
}
|
||||
ksort($return);
|
||||
foreach ($return as $key => $val) {
|
||||
sort($return[$key]);
|
||||
asort($return[$key]);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
@@ -610,12 +615,15 @@ if (!defined("DRIVER")) {
|
||||
|
||||
/** Run commands to alter indexes
|
||||
* @param string escaped table name
|
||||
* @param array of array("index type", "(columns definition)") or array("index type", "escaped name", "DROP")
|
||||
* @param array of array("index type", "name", "(columns definition)") or array("index type", "name", "DROP")
|
||||
* @return bool
|
||||
*/
|
||||
function alter_indexes($table, $alter) {
|
||||
foreach ($alter as $key => $val) {
|
||||
$alter[$key] = ($val[2] ? "\nDROP INDEX " : "\nADD $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "")) . $val[1];
|
||||
$alter[$key] = ($val[2] == "DROP"
|
||||
? "\nDROP INDEX " . idf_escape($val[1])
|
||||
: "\nADD $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "") . ($val[1] != "" ? idf_escape($val[1]) . " " : "") . $val[2]
|
||||
);
|
||||
}
|
||||
return queries("ALTER TABLE " . table($table) . implode(",", $alter));
|
||||
}
|
||||
@@ -666,6 +674,7 @@ if (!defined("DRIVER")) {
|
||||
* @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")
|
||||
@@ -692,6 +701,9 @@ if (!defined("DRIVER")) {
|
||||
* @return array array("Trigger" => , "Timing" => , "Event" => , "Statement" => )
|
||||
*/
|
||||
function trigger($name) {
|
||||
if ($name == "") {
|
||||
return array();
|
||||
}
|
||||
$rows = get_rows("SHOW TRIGGERS WHERE `Trigger` = " . q($name));
|
||||
return reset($rows);
|
||||
}
|
||||
@@ -721,14 +733,14 @@ if (!defined("DRIVER")) {
|
||||
|
||||
/** Get information about stored routine
|
||||
* @param string
|
||||
* @param string FUNCTION or PROCEDURE
|
||||
* @return array ("fields" => array("field" => , "type" => , "length" => , "unsigned" => , "inout" => , "collation" => ), "returns" => , "definition" => )
|
||||
* @param string "FUNCTION" or "PROCEDURE"
|
||||
* @return array ("fields" => array("field" => , "type" => , "length" => , "unsigned" => , "inout" => , "collation" => ), "returns" => , "definition" => , "language" => )
|
||||
*/
|
||||
function routine($name, $type) {
|
||||
global $connection, $enum_length, $inout, $types;
|
||||
$aliases = array("bool", "boolean", "integer", "double precision", "real", "dec", "numeric", "fixed", "national char", "national varchar");
|
||||
$type_pattern = "((" . implode("|", array_merge(array_keys($types), $aliases)) . ")(?:\\s*\\(((?:[^'\")]*|$enum_length)+)\\))?\\s*(zerofill\\s*)?(unsigned(?:\\s+zerofill)?)?)(?:\\s*(?:CHARSET|CHARACTER\\s+SET)\\s*['\"]?([^'\"\\s]+)['\"]?)?";
|
||||
$pattern = "\\s*(" . ($type == "FUNCTION" ? "" : implode("|", $inout)) . ")?\\s*(?:`((?:[^`]|``)*)`\\s*|\\b(\\S+)\\s+)$type_pattern";
|
||||
$pattern = "\\s*(" . ($type == "FUNCTION" ? "" : $inout) . ")?\\s*(?:`((?:[^`]|``)*)`\\s*|\\b(\\S+)\\s+)$type_pattern";
|
||||
$create = $connection->result("SHOW CREATE $type " . idf_escape($name), 2);
|
||||
preg_match("~\\(((?:$pattern\\s*,?)*)\\)" . ($type == "FUNCTION" ? "\\s*RETURNS\\s+$type_pattern" : "") . "\\s*(.*)~is", $create, $match);
|
||||
$fields = array();
|
||||
@@ -752,13 +764,24 @@ if (!defined("DRIVER")) {
|
||||
"fields" => $fields,
|
||||
"returns" => array("type" => $match[12], "length" => $match[13], "unsigned" => $match[15], "collation" => $match[16]),
|
||||
"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() {
|
||||
return get_rows("SELECT * FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = " . q(DB));
|
||||
}
|
||||
|
||||
/** Get list of available routine languages
|
||||
* @return array
|
||||
*/
|
||||
function routine_languages() {
|
||||
return array(); // "SQL" not required
|
||||
}
|
||||
|
||||
/** Begin transaction
|
||||
* @return bool
|
||||
*/
|
||||
@@ -806,6 +829,15 @@ if (!defined("DRIVER")) {
|
||||
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
|
||||
*/
|
||||
@@ -886,6 +918,13 @@ if (!defined("DRIVER")) {
|
||||
return get_key_vals("SHOW VARIABLES");
|
||||
}
|
||||
|
||||
/** Get process list
|
||||
* @return array ($row)
|
||||
*/
|
||||
function process_list() {
|
||||
return get_rows("SHOW FULL PROCESSLIST");
|
||||
}
|
||||
|
||||
/** Get status variables
|
||||
* @return array ($name => $value)
|
||||
*/
|
||||
@@ -894,7 +933,7 @@ if (!defined("DRIVER")) {
|
||||
}
|
||||
|
||||
/** Check whether a feature is supported
|
||||
* @param string "comment", "drop_col", "dump", "event", "partitioning", "routine", "scheme", "sequence", "status", "trigger", "type", "variables", "view", "copy"
|
||||
* @param string "comment", "copy", "drop_col", "dump", "event", "kill", "partitioning", "privileges", "procedure", "processlist", "routine", "scheme", "sequence", "status", "trigger", "type", "variables", "view"
|
||||
* @return bool
|
||||
*/
|
||||
function support($feature) {
|
||||
|
@@ -153,7 +153,10 @@ if (isset($_GET["oracle"])) {
|
||||
}
|
||||
|
||||
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
|
||||
return " $query$where" . (isset($limit) ? ($where ? " AND" : $separator . "WHERE") . ($offset ? " rownum > $offset AND" : "") . " rownum <= " . ($limit + $offset) : "");
|
||||
return ($offset ? " * FROM (SELECT t.*, rownum AS rnum FROM (SELECT $query$where) t WHERE rownum <= " . ($limit + $offset) . ") WHERE rnum > $offset"
|
||||
: (isset($limit) ? " * FROM (SELECT $query$where) WHERE rownum <= " . ($limit + $offset)
|
||||
: " $query$where"
|
||||
));
|
||||
}
|
||||
|
||||
function limit1($query, $where) {
|
||||
@@ -232,7 +235,17 @@ UNION SELECT view_name, 'view' FROM user_views" . ($name != "" ? " WHERE view_na
|
||||
}
|
||||
|
||||
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) {
|
||||
@@ -262,6 +275,9 @@ UNION SELECT view_name, 'view' FROM user_views" . ($name != "" ? " WHERE view_na
|
||||
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) {
|
||||
$alter = $drop = array();
|
||||
foreach ($fields as $field) {
|
||||
|
@@ -17,13 +17,15 @@ if (isset($_GET["pgsql"])) {
|
||||
}
|
||||
|
||||
function connect($server, $username, $password) {
|
||||
global $adminer;
|
||||
$db = $adminer->database();
|
||||
set_error_handler(array($this, '_error'));
|
||||
$this->_string = "host='" . str_replace(":", "' port='", addcslashes($server, "'\\")) . "' user='" . addcslashes($username, "'\\") . "' password='" . addcslashes($password, "'\\") . "'";
|
||||
$this->_link = @pg_connect($this->_string . (DB != "" ? " dbname='" . addcslashes(DB, "'\\") . "'" : " dbname='template1'"), PGSQL_CONNECT_FORCE_NEW);
|
||||
if (!$this->_link && DB != "") {
|
||||
$this->_link = @pg_connect("$this->_string dbname='" . ($db != "" ? addcslashes($db, "'\\") : "postgres") . "'", PGSQL_CONNECT_FORCE_NEW);
|
||||
if (!$this->_link && $db != "") {
|
||||
// try to connect directly with database for performance
|
||||
$this->_database = false;
|
||||
$this->_link = @pg_connect("$this->_string dbname='template1'", PGSQL_CONNECT_FORCE_NEW);
|
||||
$this->_link = @pg_connect("$this->_string dbname='postgres'", PGSQL_CONNECT_FORCE_NEW);
|
||||
}
|
||||
restore_error_handler();
|
||||
if ($this->_link) {
|
||||
@@ -39,7 +41,8 @@ if (isset($_GET["pgsql"])) {
|
||||
}
|
||||
|
||||
function select_db($database) {
|
||||
if ($database == DB) {
|
||||
global $adminer;
|
||||
if ($database == $adminer->database()) {
|
||||
return $this->_database;
|
||||
}
|
||||
$return = @pg_connect("$this->_string dbname='" . addcslashes($database, "'\\") . "'", PGSQL_CONNECT_FORCE_NEW);
|
||||
@@ -50,7 +53,7 @@ if (isset($_GET["pgsql"])) {
|
||||
}
|
||||
|
||||
function close() {
|
||||
$this->_link = @pg_connect("$this->_string dbname='template1'");
|
||||
$this->_link = @pg_connect("$this->_string dbname='postgres'");
|
||||
}
|
||||
|
||||
function query($query, $unbuffered = false) {
|
||||
@@ -126,14 +129,17 @@ if (isset($_GET["pgsql"])) {
|
||||
var $extension = "PDO_PgSQL";
|
||||
|
||||
function connect($server, $username, $password) {
|
||||
global $adminer;
|
||||
$db = $adminer->database();
|
||||
$string = "pgsql:host='" . str_replace(":", "' port='", addcslashes($server, "'\\")) . "' options='-c client_encoding=utf8'";
|
||||
$this->dsn($string . (DB != "" ? " dbname='" . addcslashes(DB, "'\\") . "'" : ""), $username, $password);
|
||||
$this->dsn("$string dbname='" . ($db != "" ? addcslashes($db, "'\\") : "postgres") . "'", $username, $password);
|
||||
//! connect without DB in case of an error
|
||||
return true;
|
||||
}
|
||||
|
||||
function select_db($database) {
|
||||
return (DB == $database);
|
||||
global $adminer;
|
||||
return ($adminer->database() == $database);
|
||||
}
|
||||
|
||||
function close() {
|
||||
@@ -155,13 +161,16 @@ if (isset($_GET["pgsql"])) {
|
||||
$connection = new Min_DB;
|
||||
$credentials = $adminer->credentials();
|
||||
if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) {
|
||||
if ($connection->server_info >= 9) {
|
||||
$connection->query("SET application_name = 'Adminer'");
|
||||
}
|
||||
return $connection;
|
||||
}
|
||||
return $connection->error;
|
||||
}
|
||||
|
||||
function get_databases() {
|
||||
return get_vals("SELECT datname FROM pg_database");
|
||||
return get_vals("SELECT datname FROM pg_database ORDER BY datname");
|
||||
}
|
||||
|
||||
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
|
||||
@@ -235,6 +244,9 @@ ORDER BY a.attnum"
|
||||
$row["null"] = ($row["attnotnull"] == "f");
|
||||
$row["auto_increment"] = eregi("^nextval\\(", $row["default"]);
|
||||
$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;
|
||||
@@ -260,20 +272,25 @@ ORDER BY a.attnum"
|
||||
}
|
||||
|
||||
function foreign_keys($table) {
|
||||
global $on_actions;
|
||||
$return = array();
|
||||
foreach (get_rows("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 information_schema.table_constraints tc
|
||||
LEFT JOIN information_schema.key_column_usage kcu USING (constraint_catalog, constraint_schema, constraint_name)
|
||||
LEFT JOIN information_schema.referential_constraints rc USING (constraint_catalog, constraint_schema, constraint_name)
|
||||
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
|
||||
WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = " . q($table) //! there can be more unique_constraint_name
|
||||
) as $row) {
|
||||
$foreign_key = &$return[$row["constraint_name"]];
|
||||
if (!$foreign_key) {
|
||||
$foreign_key = $row;
|
||||
foreach (get_rows("SELECT conname, pg_get_constraintdef(oid) AS definition
|
||||
FROM pg_constraint
|
||||
WHERE conrelid = (SELECT pc.oid FROM pg_class AS pc INNER JOIN pg_namespace AS pn ON (pn.oid = pc.relnamespace) WHERE pc.relname = " . q($table) . " AND pn.nspname = current_schema())
|
||||
AND contype = 'f'::char
|
||||
ORDER BY conkey, conname") as $row) {
|
||||
if (preg_match('~FOREIGN KEY\s*\((.+)\)\s*REFERENCES (.+)\((.+)\)(.*)$~iA', $row['definition'], $match)) {
|
||||
$row['source'] = array_map('trim', explode(',', $match[1]));
|
||||
$row['table'] = $match[2];
|
||||
if (preg_match('~(.+)\.(.+)~', $match[2], $match2)) {
|
||||
$row['ns'] = $match2[1];
|
||||
$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;
|
||||
}
|
||||
@@ -383,10 +400,13 @@ WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = " . q($table) //! t
|
||||
$drop = array();
|
||||
foreach ($alter as $val) {
|
||||
if ($val[0] != "INDEX") {
|
||||
$create[] = ($val[2] ? "\nDROP CONSTRAINT " : "\nADD $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "")) . $val[1];
|
||||
} elseif ($val[2]) {
|
||||
$drop[] = $val[1];
|
||||
} elseif (!queries("CREATE INDEX " . idf_escape(uniqid($table . "_")) . " ON " . table($table) . " $val[1]")) {
|
||||
$create[] = ($val[2] == "DROP"
|
||||
? "\nDROP CONSTRAINT " . idf_escape($val[1])
|
||||
: "\nADD $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "") . $val[2]
|
||||
);
|
||||
} 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;
|
||||
}
|
||||
}
|
||||
@@ -423,6 +443,9 @@ WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = " . q($table) //! t
|
||||
}
|
||||
|
||||
function trigger($name) {
|
||||
if ($name == "") {
|
||||
return array("Statement" => "EXECUTE PROCEDURE ()");
|
||||
}
|
||||
$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);
|
||||
}
|
||||
@@ -442,6 +465,32 @@ WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = " . q($table) //! t
|
||||
);
|
||||
}
|
||||
|
||||
/*
|
||||
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() {
|
||||
return queries("BEGIN");
|
||||
}
|
||||
@@ -473,6 +522,18 @@ WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = " . q($table) //! t
|
||||
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
|
||||
@@ -483,7 +544,7 @@ AND typelem = 0"
|
||||
}
|
||||
|
||||
function schemas() {
|
||||
return get_vals("SELECT nspname FROM pg_namespace");
|
||||
return get_vals("SELECT nspname FROM pg_namespace ORDER BY nspname");
|
||||
}
|
||||
|
||||
function get_schema() {
|
||||
@@ -510,12 +571,16 @@ AND typelem = 0"
|
||||
function show_variables() {
|
||||
return get_key_vals("SHOW ALL");
|
||||
}
|
||||
|
||||
function process_list() {
|
||||
return get_rows("SELECT * FROM pg_stat_activity ORDER BY procpid");
|
||||
}
|
||||
|
||||
function show_status() {
|
||||
}
|
||||
|
||||
function support($feature) {
|
||||
return ereg('^(comment|view|scheme|sequence|trigger|type|variables|drop_col)$', $feature); //! routine|
|
||||
return ereg('^(comment|view|scheme|processlist|sequence|trigger|type|variables|drop_col)$', $feature); //! routine|
|
||||
}
|
||||
|
||||
$jush = "pgsql";
|
||||
@@ -533,7 +598,7 @@ AND typelem = 0"
|
||||
$structured_types[$key] = array_keys($val);
|
||||
}
|
||||
$unsigned = array();
|
||||
$operators = array("=", "<", ">", "<=", ">=", "!=", "~", "!~", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL", "");
|
||||
$operators = array("=", "<", ">", "<=", ">=", "!=", "~", "!~", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL"); // no "" to avoid SQL injection
|
||||
$functions = array("char_length", "lower", "round", "to_hex", "to_timestamp", "upper");
|
||||
$grouping = array("avg", "count", "count distinct", "max", "min", "sum");
|
||||
$edit_functions = array(
|
||||
|
@@ -181,7 +181,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
}
|
||||
|
||||
function select_db($filename) {
|
||||
if (is_readable($filename) && $this->query("ATTACH " . $this->quote(ereg("(^[/\\]|:)", $filename) ? $filename : dirname($_SERVER["SCRIPT_FILENAME"]) . "/$filename") . " AS a")) { // is_readable - SQLite 3
|
||||
if (is_readable($filename) && $this->query("ATTACH " . $this->quote(ereg("(^[/\\\\]|:)", $filename) ? $filename : dirname($_SERVER["SCRIPT_FILENAME"]) . "/$filename") . " AS a")) { // is_readable - SQLite 3
|
||||
$this->Min_SQLite($filename);
|
||||
return true;
|
||||
}
|
||||
@@ -262,7 +262,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
|
||||
function fk_support($table_status) {
|
||||
global $connection;
|
||||
return !$connection->result("SELECT sqlite_compileoption_used('OMIT_FOREIGN_KEY')");
|
||||
return $_GET["create"] == "" && !$connection->result("SELECT sqlite_compileoption_used('OMIT_FOREIGN_KEY')");
|
||||
}
|
||||
|
||||
function fields($table) {
|
||||
@@ -422,7 +422,10 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
|
||||
function alter_indexes($table, $alter) {
|
||||
foreach ($alter as $val) {
|
||||
if (!queries(($val[2] ? "DROP INDEX" : "CREATE" . ($val[0] != "INDEX" ? " UNIQUE" : "") . " INDEX " . idf_escape(uniqid($table . "_")) . " ON " . table($table)) . " $val[1]")) {
|
||||
if (!queries($val[2] == "DROP"
|
||||
? "DROP INDEX " . idf_escape($val[1])
|
||||
: "CREATE $val[0] " . ($val[0] != "INDEX" ? "INDEX " : "") . idf_escape($val[1] != "" ? $val[1] : uniqid($table . "_")) . " ON " . table($table) . " $val[2]"
|
||||
)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -447,6 +450,9 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
|
||||
function trigger($name) {
|
||||
global $connection;
|
||||
if ($name == "") {
|
||||
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]);
|
||||
}
|
||||
@@ -475,6 +481,10 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
// not supported by SQLite
|
||||
}
|
||||
|
||||
function routine_languages() {
|
||||
// not supported by SQLite
|
||||
}
|
||||
|
||||
function begin() {
|
||||
return queries("BEGIN");
|
||||
}
|
||||
@@ -496,6 +506,9 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
return $connection->query("EXPLAIN $query");
|
||||
}
|
||||
|
||||
function found_rows($table_status, $where) {
|
||||
}
|
||||
|
||||
function types() {
|
||||
return array();
|
||||
}
|
||||
@@ -525,7 +538,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
}
|
||||
|
||||
function trigger_sql($table, $style) {
|
||||
return implode(get_vals("SELECT sql || ';;\n' FROM sqlite_master WHERE type = 'trigger' AND name = " . q($table)));
|
||||
return implode(get_vals("SELECT sql || ';;\n' FROM sqlite_master WHERE type = 'trigger' AND tbl_name = " . q($table)));
|
||||
}
|
||||
|
||||
function show_variables() {
|
||||
|
@@ -65,31 +65,28 @@ SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
|
||||
|
||||
if ($_POST["table_style"] || $_POST["data_style"]) {
|
||||
$views = array();
|
||||
foreach (table_status() as $row) {
|
||||
$table = (DB == "" || in_array($row["Name"], (array) $_POST["tables"]));
|
||||
$data = (DB == "" || in_array($row["Name"], (array) $_POST["data"]));
|
||||
foreach (table_status() as $table_status) {
|
||||
$table = (DB == "" || in_array($table_status["Name"], (array) $_POST["tables"]));
|
||||
$data = (DB == "" || in_array($table_status["Name"], (array) $_POST["data"]));
|
||||
if ($table || $data) {
|
||||
if (!is_view($row)) {
|
||||
if (!is_view($table_status)) {
|
||||
if ($ext == "tar") {
|
||||
ob_start();
|
||||
}
|
||||
$adminer->dumpTable($row["Name"], ($table ? $_POST["table_style"] : ""));
|
||||
$adminer->dumpTable($table_status["Name"], ($table ? $_POST["table_style"] : ""));
|
||||
if ($data) {
|
||||
$adminer->dumpData($row["Name"], $_POST["data_style"], "SELECT * FROM " . table($row["Name"]));
|
||||
$adminer->dumpData($table_status["Name"], $_POST["data_style"], "SELECT * FROM " . table($table_status["Name"]));
|
||||
}
|
||||
if ($is_sql && $_POST["triggers"]) {
|
||||
$triggers = trigger_sql($row["Name"], $_POST["table_style"]);
|
||||
if ($triggers) {
|
||||
echo "\nDELIMITER ;;\n$triggers\nDELIMITER ;\n";
|
||||
}
|
||||
if ($is_sql && $_POST["triggers"] && $table && ($triggers = trigger_sql($table_status["Name"], $_POST["table_style"]))) {
|
||||
echo "\nDELIMITER ;;\n$triggers\nDELIMITER ;\n";
|
||||
}
|
||||
if ($ext == "tar") {
|
||||
echo tar_file((DB != "" ? "" : "$db/") . "$row[Name].csv", ob_get_clean());
|
||||
echo tar_file((DB != "" ? "" : "$db/") . "$table_status[Name].csv", ob_get_clean());
|
||||
} elseif ($is_sql) {
|
||||
echo "\n";
|
||||
}
|
||||
} elseif ($is_sql) {
|
||||
$views[] = $row["Name"];
|
||||
$views[] = $table_status["Name"];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -168,7 +165,7 @@ if (!$row) {
|
||||
}
|
||||
if (!isset($row["events"])) { // backwards compatibility
|
||||
$row["routines"] = $row["events"] = ($_GET["dump"] == "");
|
||||
$row["auto_increment"] = $row["triggers"] = $row["table_style"];
|
||||
$row["triggers"] = $row["table_style"];
|
||||
}
|
||||
echo "<tr><th>" . lang('Output') . "<td>" . html_select("output", $adminer->dumpOutput(), $row["output"], 0) . "\n"; // 0 - radio
|
||||
echo "<tr><th>" . lang('Format') . "<td>" . html_select("format", $adminer->dumpFormat(), $row["format"], 0) . "\n"; // 0 - radio
|
||||
@@ -196,22 +193,22 @@ if (DB != "") {
|
||||
echo "</thead>\n";
|
||||
$views = "";
|
||||
//! defer number of rows to JavaScript
|
||||
foreach (table_status() as $row) {
|
||||
$name = $row["Name"];
|
||||
foreach (table_status() as $table_status) {
|
||||
$name = $table_status["Name"];
|
||||
$prefix = ereg_replace("_.*", "", $name);
|
||||
$checked = ($TABLE == "" || $TABLE == (substr($TABLE, -1) == "%" ? "$prefix%" : $name)); //! % may be part of table name
|
||||
$print = "<tr><td>" . checkbox("tables[]", $name, $checked, $name, "formUncheck('check-tables');");
|
||||
if (is_view($row)) {
|
||||
if (is_view($table_status)) {
|
||||
$views .= "$print\n";
|
||||
} else {
|
||||
echo "$print<td align='right'><label>" . ($row["Engine"] == "InnoDB" && $row["Rows"] ? "~ " : "") . $row["Rows"] . checkbox("data[]", $name, $checked, "", "formUncheck('check-data');") . "</label>\n";
|
||||
echo "$print<td align='right'><label>" . ($table_status["Engine"] == "InnoDB" && $table_status["Rows"] ? "~ " : "") . $table_status["Rows"] . checkbox("data[]", $name, $checked, "", "formUncheck('check-data');") . "</label>\n";
|
||||
}
|
||||
$prefixes[$prefix]++;
|
||||
}
|
||||
echo $views;
|
||||
} else {
|
||||
echo "<thead><tr><th style='text-align: left;'><label><input type='checkbox' id='check-databases'" . ($TABLE == "" ? " checked" : "") . " onclick='formCheck(this, /^databases\\[/);'>" . lang('Database') . "</label></thead>\n";
|
||||
$databases = get_databases();
|
||||
$databases = $adminer->databases();
|
||||
if ($databases) {
|
||||
foreach ($databases as $db) {
|
||||
if (!information_schema($db)) {
|
||||
@@ -221,7 +218,7 @@ if (DB != "") {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
echo "<tr><td><textarea name='databases' rows='10' cols='20' onkeypress='return textareaKeypress(this, event);'></textarea>";
|
||||
echo "<tr><td><textarea name='databases' rows='10' cols='20'></textarea>";
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
@@ -43,7 +43,7 @@ page_header(
|
||||
($update ? lang('Edit') : lang('Insert')),
|
||||
$error,
|
||||
array("select" => array($TABLE, $table_name)),
|
||||
$table_name
|
||||
$table_name //! two calls of h()
|
||||
);
|
||||
|
||||
$row = null;
|
||||
@@ -62,6 +62,10 @@ if ($_POST["save"]) {
|
||||
$row = (isset($_GET["select"]) && count($rows) != 1 ? null : reset($rows));
|
||||
}
|
||||
}
|
||||
|
||||
if ($row === false) {
|
||||
echo "<p class='error'>" . lang('No rows.') . "\n";
|
||||
}
|
||||
?>
|
||||
|
||||
<form action="" method="post" enctype="multipart/form-data" id="form">
|
||||
@@ -72,13 +76,13 @@ if ($fields) {
|
||||
echo "<tr><th>" . $adminer->fieldName($field);
|
||||
$default = $_GET["set"][bracket_escape($name)];
|
||||
$value = (isset($row)
|
||||
? ($row[$name] != "" && ereg("enum|set", $field["type"]) ? +$row[$name] : $row[$name])
|
||||
? ($row[$name] != "" && ereg("enum|set", $field["type"]) ? (is_array($row[$name]) ? array_sum($row[$name]) : +$row[$name]) : $row[$name])
|
||||
: (!$update && $field["auto_increment"] ? "" : (isset($_GET["select"]) ? false : (isset($default) ? $default : $field["default"])))
|
||||
);
|
||||
if (!$_POST["save"] && is_string($value)) {
|
||||
$value = $adminer->editVal($value, $field);
|
||||
}
|
||||
$function = ($_POST["save"] ? (string) $_POST["function"][$name] : ($where && $field["on_update"] == "CURRENT_TIMESTAMP" ? "now" : ($value === false ? null : (isset($value) ? '' : 'NULL'))));
|
||||
$function = ($_POST["save"] ? (string) $_POST["function"][$name] : ($update && $field["on_update"] == "CURRENT_TIMESTAMP" ? "now" : ($value === false ? null : (isset($value) ? '' : 'NULL'))));
|
||||
if ($field["type"] == "timestamp" && $value == "CURRENT_TIMESTAMP") {
|
||||
$value = "";
|
||||
$function = "now";
|
||||
@@ -90,21 +94,21 @@ if ($fields) {
|
||||
}
|
||||
?>
|
||||
<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
|
||||
if (isset($_GET["select"])) {
|
||||
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";
|
||||
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 ? "" : "<script type='text/javascript'>document.getElementById('form').getElementsByTagName('td')[1].firstChild.focus();</script>\n")
|
||||
: ($_POST || !$fields ? "" : "<script type='text/javascript'>document.getElementById('form').getElementsByTagName('td')[1].firstChild.focus();</script>\n")
|
||||
);
|
||||
if (isset($_GET["select"])) {
|
||||
hidden_fields(array("check" => (array) $_POST["check"], "clone" => $_POST["clone"], "all" => $_POST["all"]));
|
||||
}
|
||||
?>
|
||||
<input type="hidden" name="referer" value="<?php echo h(isset($_POST["referer"]) ? $_POST["referer"] : $_SERVER["HTTP_REFERER"]); ?>">
|
||||
<input type="hidden" name="save" value="1">
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</form>
|
||||
|
@@ -14,22 +14,20 @@ if ($_POST && !$error) {
|
||||
: "AT " . q($_POST["STARTS"])
|
||||
) . " ON COMPLETION" . ($_POST["ON_COMPLETION"] ? "" : " NOT") . " PRESERVE"
|
||||
;
|
||||
query_redirect(($EVENT != ""
|
||||
queries_redirect(substr(ME, 0, -1), ($EVENT != "" ? lang('Event has been altered.') : lang('Event has been created.')), queries(($EVENT != ""
|
||||
? "ALTER EVENT " . idf_escape($EVENT) . $schedule
|
||||
. ($EVENT != $_POST["EVENT_NAME"] ? "\nRENAME TO " . idf_escape($_POST["EVENT_NAME"]) : "")
|
||||
: "CREATE EVENT " . idf_escape($_POST["EVENT_NAME"]) . $schedule
|
||||
) . "\n" . $statuses[$_POST["STATUS"]] . " COMMENT " . q($_POST["EVENT_COMMENT"])
|
||||
. " DO\n$_POST[EVENT_DEFINITION]"
|
||||
, substr(ME, 0, -1), ($EVENT != "" ? lang('Event has been altered.') : lang('Event has been created.')));
|
||||
. rtrim(" DO\n$_POST[EVENT_DEFINITION]", ";") . ";"
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
page_header(($EVENT != "" ? lang('Alter event') . ": " . h($EVENT) : lang('Create event')), $error);
|
||||
|
||||
$row = array();
|
||||
if ($_POST) {
|
||||
$row = $_POST;
|
||||
} elseif ($EVENT != "") {
|
||||
$row = $_POST;
|
||||
if (!$row && $EVENT != "") {
|
||||
$rows = get_rows("SELECT * FROM information_schema.EVENTS WHERE EVENT_SCHEMA = " . q(DB) . " AND EVENT_NAME = " . q($EVENT));
|
||||
$row = reset($rows);
|
||||
}
|
||||
@@ -47,7 +45,7 @@ if ($_POST) {
|
||||
</table>
|
||||
<p><?php textarea("EVENT_DEFINITION", $row["EVENT_DEFINITION"]); ?>
|
||||
<p>
|
||||
<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 } ?>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</form>
|
||||
|
@@ -11,10 +11,10 @@ if ($_POST && !$error && !$_POST["add"] && !$_POST["change"] && !$_POST["change-
|
||||
$target[$key] = $_POST["target"][$key];
|
||||
}
|
||||
query_redirect("ALTER TABLE " . table($TABLE)
|
||||
. ($_GET["name"] != "" ? "\nDROP FOREIGN KEY " . idf_escape($_GET["name"]) . "," : "")
|
||||
. "\nADD FOREIGN KEY (" . implode(", ", array_map('idf_escape', $source)) . ") REFERENCES " . table($_POST["table"]) . " (" . implode(", ", array_map('idf_escape', $target)) . ")"
|
||||
. (in_array($_POST["on_delete"], $on_actions) ? " ON DELETE $_POST[on_delete]" : "")
|
||||
. (in_array($_POST["on_update"], $on_actions) ? " ON UPDATE $_POST[on_update]" : "")
|
||||
. ($_GET["name"] != "" ? "\nDROP " . ($jush == "sql" ? "FOREIGN KEY " : "CONSTRAINT ") . idf_escape($_GET["name"]) . "," : "")
|
||||
. "\nADD FOREIGN KEY (" . implode(", ", array_map('idf_escape', $source)) . ") REFERENCES " . table($_POST["table"]) . " (" . implode(", ", array_map('idf_escape', $target)) . ")" //! reuse $_GET["name"] - check in older MySQL versions
|
||||
. (ereg("^($on_actions)\$", $_POST["on_delete"]) ? " ON DELETE $_POST[on_delete]" : "")
|
||||
. (ereg("^($on_actions)\$", $_POST["on_update"]) ? " ON UPDATE $_POST[on_update]" : "")
|
||||
, 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
|
||||
}
|
||||
@@ -49,9 +49,9 @@ foreach (table_status() as $name => $table_status) {
|
||||
|
||||
<form action="" method="post">
|
||||
<p>
|
||||
<?php if ($row["db"] == "") { ?>
|
||||
<?php if ($row["db"] == "" && $row["ns"] == "") { ?>
|
||||
<?php echo lang('Target table'); ?>:
|
||||
<?php echo html_select("table", $referencable, $row["table"], "this.form['change-js'].value = '1'; this.form.submit();"); ?>
|
||||
<?php echo html_select("table", $referencable, $row["table"], "this.form['change-js'].value = '1'; if (!ajaxForm(this.form)) this.form.submit();"); ?>
|
||||
<input type="hidden" name="change-js" value="">
|
||||
<noscript><p><input type="submit" name="change" value="<?php echo lang('Change'); ?>"></noscript>
|
||||
<table cellspacing="0">
|
||||
@@ -67,8 +67,8 @@ foreach ($row["source"] as $key => $val) {
|
||||
?>
|
||||
</table>
|
||||
<p>
|
||||
<?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 => "") + $on_actions, $row["on_update"]); ?>
|
||||
<?php echo lang('ON DELETE'); ?>: <?php echo html_select("on_delete", array(-1 => "") + explode("|", $on_actions), $row["on_delete"]); ?>
|
||||
<?php echo lang('ON UPDATE'); ?>: <?php echo html_select("on_update", array(-1 => "") + explode("|", $on_actions), $row["on_update"]); ?>
|
||||
<p>
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||
<noscript><p><input type="submit" name="add" value="<?php echo lang('Add column'); ?>"></noscript>
|
||||
|
@@ -1,13 +1,15 @@
|
||||
<?php
|
||||
// any method change in this file should be transferred to editor/include/adminer.inc.php and plugins/plugin.php
|
||||
|
||||
class Adminer {
|
||||
/** @var array operators used in select, null for all operators */
|
||||
var $operators;
|
||||
|
||||
/** Name in title and navigation
|
||||
* @return string
|
||||
* @return string HTML code
|
||||
*/
|
||||
function name() {
|
||||
return "Adminer";
|
||||
return "<a href='http://www.adminer.org/' id='h1'>Adminer</a>";
|
||||
}
|
||||
|
||||
/** Connection parameters
|
||||
@@ -32,12 +34,26 @@ class Adminer {
|
||||
return DB;
|
||||
}
|
||||
|
||||
/** Get cached list of databases
|
||||
* @param bool
|
||||
* @return array
|
||||
*/
|
||||
function databases($flush = true) {
|
||||
return get_databases($flush);
|
||||
}
|
||||
|
||||
/** Headers to send before HTML output
|
||||
* @return null
|
||||
* @return bool true to send security headers
|
||||
*/
|
||||
function headers() {
|
||||
header("X-Frame-Options: deny"); // ClickJacking protection in IE8, Safari 4, Chrome 2, Firefox 3.6.9
|
||||
header("X-XSS-Protection: 0"); // prevents introducing XSS in IE8 by removing safe parts of the page
|
||||
return true;
|
||||
}
|
||||
|
||||
/** Print HTML code inside <head>
|
||||
* @return bool true to link adminer.css if exists
|
||||
*/
|
||||
function head() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/** Print login form
|
||||
@@ -48,7 +64,7 @@ class Adminer {
|
||||
?>
|
||||
<table cellspacing="0">
|
||||
<tr><th><?php echo lang('System'); ?><td><?php echo html_select("driver", $drivers, DRIVER, "loginDriver(this);"); ?>
|
||||
<tr><th><?php echo lang('Server'); ?><td><input name="server" value="<?php echo h(SERVER); ?>">
|
||||
<tr><th><?php echo lang('Server'); ?><td><input name="server" value="<?php echo h(SERVER); ?>" title="hostname[:port]">
|
||||
<tr><th><?php echo lang('Username'); ?><td><input id="username" name="username" value="<?php echo h($_GET["username"]); ?>">
|
||||
<tr><th><?php echo lang('Password'); ?><td><input type="password" name="password">
|
||||
</table>
|
||||
@@ -73,7 +89,7 @@ username.form['driver'].onchange();
|
||||
|
||||
/** Table caption used in navigation and headings
|
||||
* @param array result of SHOW TABLE STATUS
|
||||
* @return string
|
||||
* @return string HTML code, "" to ignore table
|
||||
*/
|
||||
function tableName($tableStatus) {
|
||||
return h($tableStatus["Name"]);
|
||||
@@ -82,7 +98,7 @@ username.form['driver'].onchange();
|
||||
/** Field caption used in select and edit
|
||||
* @param array single field returned from fields()
|
||||
* @param int order of column in select
|
||||
* @return string
|
||||
* @return string HTML code, "" to ignore field
|
||||
*/
|
||||
function fieldName($field, $order = 0) {
|
||||
return '<span title="' . h($field["full_type"]) . '">' . h($field["field"]) . '</span>';
|
||||
@@ -141,7 +157,7 @@ username.form['driver'].onchange();
|
||||
*/
|
||||
function selectQuery($query) {
|
||||
global $jush;
|
||||
return "<p><a href='" . h(remove_from_uri("page")) . "&page=last' title='" . lang('Last page') . "'>>></a> <code class='jush-$jush'>" . h(str_replace("\n", " ", $query)) . "</code> <a href='" . h(ME) . "sql=" . urlencode($query) . "'>" . lang('Edit') . "</a>\n";
|
||||
return "<p><a href='" . h(remove_from_uri("page")) . "&page=last' title='" . lang('Last page') . "'>>></a> <code class='jush-$jush'>" . h(str_replace("\n", " ", $query)) . "</code> <a href='" . h(ME) . "sql=" . urlencode($query) . "'>" . lang('Edit') . "</a></p>\n"; // </p> - required for IE9 inline edit
|
||||
}
|
||||
|
||||
/** Description of a row in a table
|
||||
@@ -185,7 +201,7 @@ username.form['driver'].onchange();
|
||||
}
|
||||
|
||||
/** Print columns box in select
|
||||
* @param array result of selectColumnsProcess()
|
||||
* @param array result of selectColumnsProcess()[0]
|
||||
* @param array selectable columns
|
||||
* @return null
|
||||
*/
|
||||
@@ -230,9 +246,9 @@ username.form['driver'].onchange();
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
echo "<div><select name='where[$i][col]' onchange='selectAddRow(this);'><option value=''>(" . lang('anywhere') . ")" . optionlist($columns, null, true) . "</select>";
|
||||
echo "<div><select name='where[$i][col]' onchange='this.nextSibling.nextSibling.onchange();'><option value=''>(" . lang('anywhere') . ")" . optionlist($columns, null, true) . "</select>";
|
||||
echo html_select("where[$i][op]", $this->operators, "=");
|
||||
echo "<input name='where[$i][val]'></div>\n";
|
||||
echo "<input name='where[$i][val]' onchange='selectAddRow(this);'></div>\n";
|
||||
echo "</div></fieldset>\n";
|
||||
}
|
||||
|
||||
@@ -253,7 +269,7 @@ username.form['driver'].onchange();
|
||||
}
|
||||
}
|
||||
echo "<div><select name='order[$i]' onchange='selectAddRow(this);'><option>" . optionlist($columns, null, true) . "</select>";
|
||||
echo checkbox("desc[$i]", 1, 0, lang('descending')) . "</div>\n";
|
||||
echo "<label><input type='checkbox' name='desc[$i]' value='1'>" . lang('descending') . "</label></div>\n"; // not checkbox() to allow selectAddRow()
|
||||
echo "</div></fieldset>\n";
|
||||
}
|
||||
|
||||
@@ -288,6 +304,20 @@ username.form['driver'].onchange();
|
||||
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 true;
|
||||
}
|
||||
|
||||
/** Print extra text in the end of a select form
|
||||
* @param array fields holding e-mails
|
||||
* @param array selectable columns
|
||||
@@ -408,10 +438,10 @@ username.form['driver'].onchange();
|
||||
restart_session();
|
||||
$id = "sql-" . ($count++);
|
||||
$history = &get_session("queries");
|
||||
$history[$_GET["db"]][] = (strlen($query) > 1e6 // not DB - reset in drop database
|
||||
? ereg_replace('[\x80-\xFF]+$', '', substr($query, 0, 1e6)) . "\n..." // [\x80-\xFF] - valid UTF-8, \n - can end by one-line comment
|
||||
: $query
|
||||
); //! respect $_GET["ns"]
|
||||
if (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
|
||||
}
|
||||
$history[$_GET["db"]][] = $query; // not DB - $_GET["db"] is changed in database.inc.php //! respect $_GET["ns"]
|
||||
return " <a href='#$id' onclick=\"return !toggle('$id');\">" . lang('SQL command') . "</a><div id='$id' class='hidden'><pre><code class='jush-$jush'>" . shorten_utf8($query, 1000) . '</code></pre><p><a href="' . h(str_replace("db=" . urlencode(DB), "db=" . urlencode($_GET["db"]), ME) . 'sql=&history=' . (count($history[$_GET["db"]]) - 1)) . '">' . lang('Edit') . '</a></div>';
|
||||
}
|
||||
|
||||
@@ -429,6 +459,9 @@ username.form['driver'].onchange();
|
||||
$return .= "/$val";
|
||||
}
|
||||
}
|
||||
if ($key && !ereg('set|blob|bytea|raw|file', $field["type"])) {
|
||||
$return .= "/=";
|
||||
}
|
||||
}
|
||||
}
|
||||
return explode("/", $return);
|
||||
@@ -458,8 +491,11 @@ username.form['driver'].onchange();
|
||||
* @return string expression to use in a query
|
||||
*/
|
||||
function processInput($field, $value, $function = "") {
|
||||
if ($function == "=") {
|
||||
return $value; // SQL injection
|
||||
}
|
||||
$name = $field["field"];
|
||||
$return = ($field["type"] == "bit" && ereg('^[0-9]+$', $value) ? $value : q($value));
|
||||
$return = ($field["type"] == "bit" && ereg("^([0-9]+|b'[0-1]+')\$", $value) ? $value : q($value));
|
||||
if (ereg('^(now|getdate|uuid)$', $function)) {
|
||||
$return = "$function()";
|
||||
} elseif (ereg('^current_(date|timestamp)$', $function)) {
|
||||
@@ -495,7 +531,7 @@ username.form['driver'].onchange();
|
||||
}
|
||||
|
||||
/** Returns export format options
|
||||
* @return array
|
||||
* @return array empty to disable export
|
||||
*/
|
||||
function dumpFormat() {
|
||||
return array('sql' => 'SQL', 'csv' => 'CSV,', 'csv;' => 'CSV;', 'tsv' => 'TSV');
|
||||
@@ -521,7 +557,7 @@ username.form['driver'].onchange();
|
||||
}
|
||||
if ($is_view) {
|
||||
// remove DEFINER with current user
|
||||
$create = preg_replace('~^([A-Z =]+) DEFINER=`' . str_replace("@", "`@`", logged_user()) . '`~', '\\1', $create); //! proper escaping of user
|
||||
$create = preg_replace('~^([A-Z =]+) DEFINER=`' . preg_replace('~@(.*)~', '`@`(%|\\1)', logged_user()) . '`~', '\\1', $create); //! proper escaping of user
|
||||
}
|
||||
echo ($style != "CREATE+ALTER" ? $create : ($is_view ? substr_replace($create, " OR REPLACE", 6, 0) : substr_replace($create, " IF NOT EXISTS", 12, 0))) . ";\n\n";
|
||||
}
|
||||
@@ -569,10 +605,10 @@ CREATE PROCEDURE adminer_alter (INOUT alter_command text) BEGIN
|
||||
foreach ($fields as $row) {
|
||||
echo "
|
||||
WHEN " . q($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 != " . q($row["COLUMN_TYPE"]) . " OR _extra != '$row[EXTRA]' OR _column_comment != " . q($row["COLUMN_COMMENT"]) . " OR after != $row[after] THEN
|
||||
SET @alter_table = CONCAT(@alter_table, ', MODIFY $row[alter]');
|
||||
END IF;"; //! don't replace in comment
|
||||
SET add_columns = REPLACE(add_columns, ', ADD $row[alter]', IF(
|
||||
_column_default <=> $row[default] AND _is_nullable = '$row[IS_NULLABLE]' AND _collation_name <=> " . (isset($row["COLLATION_NAME"]) ? "'$row[COLLATION_NAME]'" : "NULL") . " AND _column_type = " . q($row["COLUMN_TYPE"]) . " AND _extra = '$row[EXTRA]' AND _column_comment = " . q($row["COLUMN_COMMENT"]) . " AND after = $row[after]
|
||||
, '', ', MODIFY $row[alter]'));"
|
||||
; //! don't replace in comment
|
||||
}
|
||||
echo "
|
||||
ELSE
|
||||
@@ -631,7 +667,7 @@ DROP PROCEDURE adminer_alter;
|
||||
$insert = "INSERT INTO " . table($table) . " (" . implode(", ", array_map('idf_escape', array_keys($row))) . ") VALUES";
|
||||
}
|
||||
foreach ($row as $key => $val) {
|
||||
$row[$key] = (isset($val) ? (ereg('int|float|double|decimal', $fields[$key]["type"]) ? $val : q($val)) : "NULL"); //! columns looking like functions
|
||||
$row[$key] = (isset($val) ? (ereg('int|float|double|decimal|bit', $fields[$key]["type"]) ? $val : q($val)) : "NULL"); //! columns looking like functions
|
||||
}
|
||||
$s = implode(",\t", $row);
|
||||
if ($style == "INSERT+UPDATE") {
|
||||
@@ -644,11 +680,10 @@ DROP PROCEDURE adminer_alter;
|
||||
$s = ($max_packet ? "\n" : " ") . "($s)";
|
||||
if (!$buffer) {
|
||||
$buffer = $insert . $s;
|
||||
} elseif (strlen($buffer) + 2 + strlen($s) < $max_packet) { // 2 - separator and terminator length
|
||||
} elseif (strlen($buffer) + 4 + strlen($s) < $max_packet) { // 4 - length specification
|
||||
$buffer .= ",$s";
|
||||
} else {
|
||||
$buffer .= ";\n";
|
||||
echo $buffer;
|
||||
echo "$buffer;\n";
|
||||
$buffer = $insert . $s;
|
||||
}
|
||||
}
|
||||
@@ -692,9 +727,9 @@ DROP PROCEDURE adminer_alter;
|
||||
*/
|
||||
function homepage() {
|
||||
echo '<p>' . ($_GET["ns"] == "" ? '<a href="' . h(ME) . 'database=">' . lang('Alter database') . "</a>\n" : "");
|
||||
if (support("scheme")) {
|
||||
echo "<a href='" . h(ME) . "scheme='>" . ($_GET["ns"] != "" ? lang('Alter schema') : lang('Create schema')) . "</a>\n";
|
||||
}
|
||||
echo (support("scheme") ? "<a href='" . h(ME) . "scheme='>" . ($_GET["ns"] != "" ? lang('Alter schema') : lang('Create schema')) . "</a>\n" : "");
|
||||
echo ($_GET["ns"] !== "" ? '<a href="' . h(ME) . 'schema=">' . lang('Database schema') . "</a>\n" : "");
|
||||
echo (support("privileges") ? "<a href='" . h(ME) . "privileges='>" . lang('Privileges') . "</a>\n" : "");
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -706,8 +741,7 @@ DROP PROCEDURE adminer_alter;
|
||||
global $VERSION, $connection, $token, $jush, $drivers;
|
||||
?>
|
||||
<h1>
|
||||
<a href="http://www.adminer.org/" id="h1"><?php echo $this->name(); ?></a>
|
||||
<span class="version"><?php echo $VERSION; ?></span>
|
||||
<?php echo $this->name(); ?> <span class="version"><?php echo $VERSION; ?></span>
|
||||
<a href="http://www.adminer.org/#download" id="version"><?php echo (version_compare($VERSION, $_COOKIE["adminer_version"]) < 0 ? h($_COOKIE["adminer_version"]) : ""); ?></a>
|
||||
</h1>
|
||||
<?php
|
||||
@@ -727,7 +761,7 @@ DROP PROCEDURE adminer_alter;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$databases = get_databases();
|
||||
$databases = $this->databases();
|
||||
?>
|
||||
<form action="" method="post">
|
||||
<p class="logout">
|
||||
@@ -739,8 +773,8 @@ DROP PROCEDURE adminer_alter;
|
||||
}
|
||||
}
|
||||
?>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
<input type="submit" name="logout" value="<?php echo lang('Logout'); ?>" onclick="eventStop(event);">
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</p>
|
||||
</form>
|
||||
<form action="">
|
||||
@@ -792,7 +826,7 @@ DROP PROCEDURE adminer_alter;
|
||||
echo "<p id='tables'>\n";
|
||||
foreach ($tables as $table => $type) {
|
||||
echo '<a href="' . h(ME) . 'select=' . urlencode($table) . '"' . bold($_GET["select"] == $table) . ">" . lang('select') . "</a> ";
|
||||
echo '<a href="' . h(ME) . 'table=' . urlencode($table) . '"' . bold($_GET["table"] == $table) . ">" . $this->tableName(array("Name" => $table)) . "</a><br>\n"; //! 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
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -4,8 +4,8 @@ error_reporting(6135); // errors and warnings
|
||||
include "../adminer/include/coverage.inc.php";
|
||||
|
||||
// disable filter.default
|
||||
$filter = (!ereg('^(unsafe_raw)?$', ini_get("filter.default")) || ini_get("filter.default_flags"));
|
||||
if ($filter) {
|
||||
$filter = !ereg('^(unsafe_raw)?$', ini_get("filter.default"));
|
||||
if ($filter || ini_get("filter.default_flags")) {
|
||||
foreach (array('_GET', '_POST', '_COOKIE', '_SERVER') as $val) {
|
||||
$unsafe = filter_input_array(constant("INPUT$val"), FILTER_UNSAFE_RAW);
|
||||
if ($unsafe) {
|
||||
@@ -22,8 +22,11 @@ if (isset($_GET["file"])) {
|
||||
include "../adminer/include/functions.inc.php";
|
||||
|
||||
global $adminer, $connection, $drivers, $edit_functions, $enum_length, $error, $functions, $grouping, $HTTPS, $inout, $jush, $LANG, $langs, $on_actions, $structured_types, $token, $translations, $types, $unsigned, $VERSION; // allows including Adminer inside a function
|
||||
if (!isset($_SERVER["REQUEST_URI"])) {
|
||||
$_SERVER["REQUEST_URI"] = $_SERVER["ORIG_PATH_INFO"] . ($_SERVER["QUERY_STRING"] != "" ? "?$_SERVER[QUERY_STRING]" : ""); // IIS 5 compatibility
|
||||
if (!$_SERVER["REQUEST_URI"]) { // IIS 5 compatibility
|
||||
$_SERVER["REQUEST_URI"] = $_SERVER["ORIG_PATH_INFO"];
|
||||
}
|
||||
if (!strpos($_SERVER["REQUEST_URI"], '?') && $_SERVER["QUERY_STRING"] != "") { // IIS 7 compatibility
|
||||
$_SERVER["REQUEST_URI"] .= "?$_SERVER[QUERY_STRING]";
|
||||
}
|
||||
$HTTPS = $_SERVER["HTTPS"] && strcasecmp($_SERVER["HTTPS"], "off");
|
||||
|
||||
@@ -39,7 +42,7 @@ if (!defined("SID")) {
|
||||
}
|
||||
|
||||
// disable magic quotes to be able to use database escaping function
|
||||
remove_slashes(array(&$_GET, &$_POST, &$_COOKIE));
|
||||
remove_slashes(array(&$_GET, &$_POST, &$_COOKIE), $filter);
|
||||
if (function_exists("set_magic_quotes_runtime")) { // removed in PHP 6
|
||||
set_magic_quotes_runtime(false);
|
||||
}
|
||||
@@ -78,4 +81,4 @@ if (!ini_bool("session.use_cookies") || @ini_set("session.use_cookies", false) !
|
||||
session_write_close(); // improves concurrency if a user opens several pages at once, may be restarted later
|
||||
}
|
||||
|
||||
$on_actions = array("RESTRICT", "CASCADE", "SET NULL", "NO ACTION"); ///< @var array used in foreign_keys()
|
||||
$on_actions = "RESTRICT|NO ACTION|CASCADE|SET NULL|SET DEFAULT"; ///< @var string used in foreign_keys()
|
||||
|
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
function connect_error() {
|
||||
global $connection, $token, $error, $drivers;
|
||||
global $adminer, $connection, $token, $error, $drivers;
|
||||
$databases = array();
|
||||
if (DB != "") {
|
||||
page_header(lang('Database') . ": " . h(DB), lang('Invalid database.'), true);
|
||||
@@ -26,23 +26,25 @@ function connect_error() {
|
||||
if ($_GET["refresh"]) {
|
||||
set_session("dbs", null);
|
||||
}
|
||||
$databases = get_databases();
|
||||
$databases = $adminer->databases();
|
||||
if ($databases) {
|
||||
$scheme = support("scheme");
|
||||
$collations = collations();
|
||||
echo "<form action='' method='post'>\n";
|
||||
echo "<table cellspacing='0' onclick='tableClick(event);'>\n";
|
||||
echo "<thead><tr><td><input type='hidden' name='token' value='$token'> <th>" . lang('Database') . "<td>" . lang('Collation') . "<td>" . lang('Tables') . "</thead>\n";
|
||||
echo "<table cellspacing='0' class='checkable' onclick='tableClick(event);'>\n";
|
||||
echo "<thead><tr><td> <th>" . lang('Database') . "<td>" . lang('Collation') . "<td>" . lang('Tables') . "</thead>\n";
|
||||
foreach ($databases as $db) {
|
||||
$root = h(ME) . "db=" . urlencode($db);
|
||||
echo "<tr" . odd() . "><td>" . checkbox("db[]", $db, in_array($db, (array) $_POST["db"]));
|
||||
echo "<th><a href='$root'>" . h($db) . "</a>";
|
||||
echo "<td><a href='$root" . ($scheme ? "&ns=" : "") . "&database='>" . nbsp(db_collation($db, $collations)) . "</a>";
|
||||
echo "<td align='right'><a href='$root&schema=' id='tables-" . h($db) . "'>?</a>";
|
||||
echo "<td><a href='$root" . ($scheme ? "&ns=" : "") . "&database=' title='" . lang('Alter 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 "\n";
|
||||
}
|
||||
echo "</table>\n";
|
||||
echo "<script type='text/javascript'>tableCheck();</script>\n";
|
||||
echo "<p><input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm("formChecked(this, /db/)", 1) . ">\n"; // 1 - eventStop
|
||||
echo "<input type='hidden' name='token' value='$token'>\n";
|
||||
echo "<a href='" . h(ME) . "refresh=1' onclick='eventStop(event);'>" . lang('Refresh') . "</a>\n";
|
||||
echo "</form>\n";
|
||||
}
|
||||
|
@@ -1,17 +1,20 @@
|
||||
<?php
|
||||
/** Print HTML header
|
||||
* @param string used in title, breadcrumb and heading
|
||||
* @param string used in title, breadcrumb and heading, should be HTML escaped
|
||||
* @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 string used after colon in title and heading
|
||||
* @param string used after colon in title and heading, will be HTML escaped
|
||||
* @return null
|
||||
*/
|
||||
function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") {
|
||||
global $LANG, $adminer, $connection, $drivers;
|
||||
header("Content-Type: text/html; charset=utf-8");
|
||||
$adminer->headers();
|
||||
if ($adminer->headers()) {
|
||||
header("X-Frame-Options: deny"); // ClickJacking protection in IE8, Safari 4, Chrome 2, Firefox 3.6.9
|
||||
header("X-XSS-Protection: 0"); // prevents introducing XSS in IE8 by removing safe parts of the page
|
||||
}
|
||||
$title_all = $title . ($title2 != "" ? ": " . h($title2) : "");
|
||||
$title_page = $title_all . (SERVER != "" && SERVER != "localhost" ? h(" - " . SERVER) : "") . " - " . $adminer->name();
|
||||
$title_page = strip_tags($title_all . (SERVER != "" && SERVER != "localhost" ? h(" - " . SERVER) : "") . " - " . $adminer->name());
|
||||
if (is_ajax()) {
|
||||
header("X-AJAX-Title: " . rawurlencode($title_page));
|
||||
} else {
|
||||
@@ -22,28 +25,38 @@ function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") {
|
||||
<meta http-equiv="Content-Script-Type" content="text/javascript">
|
||||
<meta name="robots" content="noindex">
|
||||
<title><?php echo $title_page; ?></title>
|
||||
<link rel="shortcut icon" type="image/x-icon" href="../adminer/static/favicon.ico">
|
||||
<link rel="stylesheet" type="text/css" href="../adminer/static/default.css">
|
||||
<script type="text/javascript">
|
||||
var areYouSure = '<?php echo lang('Resend POST data?'); ?>';
|
||||
var noResponse = '<?php echo lang('No response from server.'); ?>';
|
||||
</script>
|
||||
<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" id="favicon">
|
||||
<?php if (file_exists("adminer.css")) { ?>
|
||||
<link rel="stylesheet" type="text/css" href="adminer.css">
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
|
||||
<body class="<?php echo lang('ltr'); ?>" onclick="return bodyClick(event, '<?php echo js_escape(DB); ?>', '<?php echo js_escape($_GET["ns"]); ?>');" onload="bodyLoad('<?php echo (is_object($connection) ? substr($connection->server_info, 0, 3) : ""); ?>');<?php echo (isset($_COOKIE["adminer_version"]) ? "" : " verifyVersion('$protocol');"); ?>">
|
||||
<script type="text/javascript" src="../adminer/static/functions.js"></script>
|
||||
<script type="text/javascript" src="static/editing.js"></script>
|
||||
<body class="<?php echo lang('ltr'); ?> nojs"<?php echo ($_POST ? "" : " onclick=\"return bodyClick(event, '" . h(js_escape(DB) . "', '" . js_escape($_GET["ns"])) . "');\""); // avoid re-post confirmation after refreshing the next page in Google Chrome ?> onkeydown="bodyKeydown(event);" onload="bodyLoad('<?php echo (is_object($connection) ? substr($connection->server_info, 0, 3) : ""); ?>');<?php echo (isset($_COOKIE["adminer_version"]) ? "" : " verifyVersion();"); ?>">
|
||||
<script type="text/javascript">
|
||||
document.body.className = document.body.className.replace(/ nojs/, ' js');
|
||||
</script>
|
||||
|
||||
<div id="loader"><img src="../adminer/static/loader.gif" alt=""></div>
|
||||
<div id="content">
|
||||
<?php
|
||||
}
|
||||
if (isset($breadcrumb)) {
|
||||
$link = substr(preg_replace('~(username|db|ns)=[^&]*&~', '', ME), 0, -1);
|
||||
echo '<p id="breadcrumb"><a href="' . ($link ? h($link) : ".") . '">' . $drivers[DRIVER] . '</a> » ';
|
||||
echo '<p id="breadcrumb"><a href="' . h($link ? $link : ".") . '">' . $drivers[DRIVER] . '</a> » ';
|
||||
$link = substr(preg_replace('~(db|ns)=[^&]*&~', '', ME), 0, -1);
|
||||
$server = (SERVER != "" ? h(SERVER) : lang('Server'));
|
||||
if ($breadcrumb === false) {
|
||||
echo "$server\n";
|
||||
} else {
|
||||
echo "<a href='" . ($link ? h($link) : ".") . "'>$server</a> » ";
|
||||
echo "<a href='" . ($link ? h($link) : ".") . "' accesskey='1' title='Alt+Shift+1'>$server</a> » ";
|
||||
if ($_GET["ns"] != "" || (DB != "" && is_array($breadcrumb))) {
|
||||
echo '<a href="' . h($link . "&db=" . urlencode(DB) . (support("scheme") ? "&ns=" : "")) . '">' . h(DB) . '</a> » ';
|
||||
}
|
||||
|
@@ -18,9 +18,12 @@ function select($result, $connection2 = null, $href = "") {
|
||||
echo "<thead><tr>";
|
||||
for ($j=0; $j < count($row); $j++) {
|
||||
$field = $result->fetch_field();
|
||||
$name = $field->name;
|
||||
$orgtable = $field->orgtable;
|
||||
$orgname = $field->orgname;
|
||||
if ($orgtable != "") {
|
||||
if ($href) { // MySQL EXPLAIN
|
||||
$links[$j] = ($name == "table" ? "table=" : ($name == "possible_keys" ? "indexes=" : null));
|
||||
} elseif ($orgtable != "") {
|
||||
if (!isset($indexes[$orgtable])) {
|
||||
// find primary key in each table
|
||||
$indexes[$orgtable] = array();
|
||||
@@ -42,7 +45,7 @@ function select($result, $connection2 = null, $href = "") {
|
||||
$blobs[$j] = true;
|
||||
}
|
||||
$types[$j] = $field->type;
|
||||
$name = h($field->name);
|
||||
$name = h($name);
|
||||
echo "<th" . ($orgtable != "" || $field->name != $orgname ? " title='" . h(($orgtable != "" ? "$orgtable." : "") . $orgname) . "'" : "") . ">" . ($href ? "<a href='$href" . strtolower($name) . "' target='_blank' rel='noreferrer'>$name</a>" : $name);
|
||||
}
|
||||
echo "</thead>\n";
|
||||
@@ -51,24 +54,26 @@ function select($result, $connection2 = null, $href = "") {
|
||||
foreach ($row as $key => $val) {
|
||||
if (!isset($val)) {
|
||||
$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 {
|
||||
if ($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>";
|
||||
}
|
||||
$val = h($val);
|
||||
if ($types[$key] == 254) { // 254 - char
|
||||
$val = "<code>$val</code>";
|
||||
}
|
||||
if (isset($links[$key]) && !$columns[$links[$key]]) {
|
||||
}
|
||||
if (isset($links[$key]) && !$columns[$links[$key]]) {
|
||||
if ($href) { // MySQL EXPLAIN
|
||||
$link = $links[$key] . urlencode($row[array_search("table=", $links)]);
|
||||
} else {
|
||||
$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";
|
||||
}
|
||||
@@ -106,10 +111,10 @@ function referencable_primary($self) {
|
||||
* @return null
|
||||
*/
|
||||
function textarea($name, $value, $rows = 10, $cols = 80) {
|
||||
echo "<textarea name='$name' rows='$rows' cols='$cols' style='width: 98%;' spellcheck='false' wrap='off' onkeypress='return textareaKeypress(this, event, true);'>"; // spellcheck, wrap - not valid before HTML5
|
||||
echo "<textarea name='$name' rows='$rows' cols='$cols' class='sqlarea' spellcheck='false' wrap='off' onkeydown='return textareaKeydown(this, event);'>"; // spellcheck, wrap - not valid before HTML5
|
||||
if (is_array($value)) {
|
||||
foreach ($value as $val) { // not implode() to save memory
|
||||
echo h($val) . ";\n\n\n"; // rtrim(, ';') would possibly damage DELIMITER
|
||||
echo h($val) . "\n\n\n";
|
||||
}
|
||||
} else {
|
||||
echo h($value);
|
||||
@@ -118,12 +123,12 @@ function textarea($name, $value, $rows = 10, $cols = 80) {
|
||||
}
|
||||
|
||||
/** Format time difference
|
||||
* @param array ($sec, $sec)
|
||||
* @param array ($sec, $sec)
|
||||
* @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, $end[0] - $start[0] + $end[1] - $start[1])) . ")</span>";
|
||||
return " <span class='time'>(" . lang('%.3f s', max(0, array_sum(explode(" ", $end)) - array_sum(explode(" ", $start)))) . ")</span>";
|
||||
}
|
||||
|
||||
/** Print table columns for type edit
|
||||
@@ -140,7 +145,7 @@ function edit_type($key, $field, $collations, $foreign_keys = array()) {
|
||||
<td><input name="<?php echo $key; ?>[length]" value="<?php echo h($field["length"]); ?>" size="3" onfocus="editingLengthFocus(this);"><td class="options"><?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 ($unsigned ? "<select name='$key" . "[unsigned]'" . (!$field["type"] || ereg('(int|float|double|decimal)$', $field["type"]) ? "" : " class='hidden'") . '><option>' . optionlist($unsigned, $field["unsigned"]) . '</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
|
||||
@@ -173,10 +178,10 @@ function process_type($field, $collate = "COLLATE") {
|
||||
*/
|
||||
function process_field($field, $type_field) {
|
||||
return array(
|
||||
idf_escape($field["field"]),
|
||||
idf_escape(trim($field["field"])),
|
||||
process_type($type_field),
|
||||
($field["null"] ? " NULL" : " NOT NULL"), // NULL for timestamp
|
||||
(isset($field["default"]) ? " DEFAULT " . ($field["type"] == "timestamp" && eregi("^CURRENT_TIMESTAMP$", $field["default"]) ? $field["default"] : q($field["default"])) : ""),
|
||||
(isset($field["default"]) ? " DEFAULT " . (($field["type"] == "timestamp" && eregi('^CURRENT_TIMESTAMP$', $field["default"])) || ($field["type"] == "bit" && ereg("^([0-9]+|b'[0-1]+')\$", $field["default"])) ? $field["default"] : q($field["default"])) : ""),
|
||||
($field["on_update"] ? " ON UPDATE $field[on_update]" : ""),
|
||||
(support("comment") && $field["comment"] != "" ? " COMMENT " . q($field["comment"]) : ""),
|
||||
($field["auto_increment"] ? auto_increment() : null),
|
||||
@@ -206,16 +211,11 @@ function type_class($type) {
|
||||
* @param string TABLE or PROCEDURE
|
||||
* @param int number of fields allowed by Suhosin
|
||||
* @param array returned by referencable_primary()
|
||||
* @return bool column comments used
|
||||
* @param bool display comments column
|
||||
* @return null
|
||||
*/
|
||||
function edit_fields($fields, $collations, $type = "TABLE", $allowed = 0, $foreign_keys = array(), $comments = false) {
|
||||
global $inout;
|
||||
foreach ($fields as $field) {
|
||||
if ($field["comment"] != "") {
|
||||
$comments = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
?>
|
||||
<thead><tr class="wrap">
|
||||
<?php if ($type == "PROCEDURE") { ?><td> <?php } ?>
|
||||
@@ -226,7 +226,7 @@ function edit_fields($fields, $collations, $type = "TABLE", $allowed = 0, $forei
|
||||
<?php if ($type == "TABLE") { ?>
|
||||
<td>NULL
|
||||
<td><input type="radio" name="auto_increment_col" value=""><acronym title="<?php echo lang('Auto Increment'); ?>">AI</acronym>
|
||||
<td class="hidden"><?php echo lang('Default values'); ?>
|
||||
<td<?php echo ($_POST["defaults"] ? "" : " class='hidden'"); ?>><?php echo lang('Default values'); ?>
|
||||
<?php echo (support("comment") ? "<td" . ($comments ? "" : " class='hidden'") . ">" . lang('Comment') : ""); ?>
|
||||
<?php } ?>
|
||||
<td><?php echo "<input type='image' name='add[" . (support("move_col") ? 0 : count($fields)) . "]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>"; ?><script type="text/javascript">row_count = <?php echo count($fields); ?>;</script>
|
||||
@@ -239,13 +239,13 @@ function edit_fields($fields, $collations, $type = "TABLE", $allowed = 0, $forei
|
||||
$display = (isset($_POST["add"][$i-1]) || (isset($field["field"]) && !$_POST["drop_col"][$i])) && (support("drop_col") || $orig == "");
|
||||
?>
|
||||
<tr<?php echo ($display ? "" : " style='display: none;'"); ?>>
|
||||
<?php echo ($type == "PROCEDURE" ? "<td>" . html_select("fields[$i][inout]", $inout, $field["inout"]) : ""); ?>
|
||||
<?php echo ($type == "PROCEDURE" ? "<td>" . html_select("fields[$i][inout]", explode("|", $inout), $field["inout"]) : ""); ?>
|
||||
<th><?php if ($display) { ?><input name="fields[<?php echo $i; ?>][field]" value="<?php echo h($field["field"]); ?>" onchange="<?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 if ($type == "TABLE") { ?>
|
||||
<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 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;">
|
||||
<td<?php echo ($_POST["defaults"] ? "" : " 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='255'>" : ""); ?>
|
||||
<?php } ?>
|
||||
<?php
|
||||
@@ -258,7 +258,6 @@ function edit_fields($fields, $collations, $type = "TABLE", $allowed = 0, $forei
|
||||
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";
|
||||
}
|
||||
return $comments;
|
||||
}
|
||||
|
||||
/** Move fields up and down or add field
|
||||
@@ -367,3 +366,17 @@ function tar_file($filename, $contents) {
|
||||
$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;
|
||||
}
|
||||
|
@@ -8,6 +8,14 @@ function connection() {
|
||||
return $connection;
|
||||
}
|
||||
|
||||
/** Get Adminer object
|
||||
* @return Adminer
|
||||
*/
|
||||
function adminer() {
|
||||
global $adminer;
|
||||
return $adminer;
|
||||
}
|
||||
|
||||
/** Unescape database identifier
|
||||
* @param string text inside ``
|
||||
* @return string
|
||||
@@ -27,9 +35,10 @@ function escape_string($val) {
|
||||
|
||||
/** 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) {
|
||||
function remove_slashes($process, $filter = false) {
|
||||
if (get_magic_quotes_gpc()) {
|
||||
while (list($key, $val) = each($process)) {
|
||||
foreach ($val as $k => $v) {
|
||||
@@ -61,7 +70,7 @@ function bracket_escape($idf, $back = false) {
|
||||
* @return string
|
||||
*/
|
||||
function h($string) {
|
||||
return htmlspecialchars($string, ENT_QUOTES);
|
||||
return htmlspecialchars(str_replace("\0", "", $string), ENT_QUOTES);
|
||||
}
|
||||
|
||||
/** Escape for TD
|
||||
@@ -86,12 +95,13 @@ function nl_br($string) {
|
||||
* @param bool
|
||||
* @param string
|
||||
* @param string
|
||||
* @param bool
|
||||
* @return string
|
||||
*/
|
||||
function checkbox($name, $value, $checked, $label = "", $onclick = "") {
|
||||
function checkbox($name, $value, $checked, $label = "", $onclick = "", $jsonly = false) {
|
||||
static $id = 0;
|
||||
$id++;
|
||||
$return = "<input type='checkbox'" . ($name ? " name='$name' value='" . h($value) . "'" : "") . ($checked ? " checked" : "") . ($onclick ? " onclick=\"$onclick\"" : "") . " id='checkbox-$id'>";
|
||||
$return = "<input type='checkbox' name='$name' value='" . h($value) . "'" . ($checked ? " checked" : "") . ($onclick ? ' onclick="' . h($onclick) . '"' : '') . ($jsonly ? " class='jsonly'" : "") . " id='checkbox-$id'>";
|
||||
return ($label != "" ? "<label for='checkbox-$id'>$return" . h($label) . "</label>" : $return);
|
||||
}
|
||||
|
||||
@@ -104,10 +114,12 @@ function checkbox($name, $value, $checked, $label = "", $onclick = "") {
|
||||
function optionlist($options, $selected = null, $use_keys = false) {
|
||||
$return = "";
|
||||
foreach ($options as $k => $v) {
|
||||
$opts = array($k => $v);
|
||||
if (is_array($v)) {
|
||||
$return .= '<optgroup label="' . h($k) . '">';
|
||||
$opts = $v;
|
||||
}
|
||||
foreach ((is_array($v) ? $v : array($k => $v)) as $key => $val) {
|
||||
foreach ($opts 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);
|
||||
}
|
||||
if (is_array($v)) {
|
||||
@@ -126,7 +138,7 @@ function optionlist($options, $selected = null, $use_keys = false) {
|
||||
*/
|
||||
function html_select($name, $options, $value = "", $onchange = true) {
|
||||
if ($onchange) {
|
||||
return "<select name='" . h($name) . "'" . (is_string($onchange) ? " onchange=\"$onchange\"" : "") . ">" . optionlist($options, $value) . "</select>";
|
||||
return "<select name='" . h($name) . "'" . (is_string($onchange) ? ' onchange="' . h($onchange) . '"' : "") . ">" . optionlist($options, $value) . "</select>";
|
||||
}
|
||||
$return = "";
|
||||
foreach ($options as $key => $val) {
|
||||
@@ -144,6 +156,37 @@ function confirm($count = "", $stop = false) {
|
||||
return " onclick=\"" . ($stop ? "eventStop(event); " : "") . "return confirm('" . lang('Are you sure?') . ($count ? " (' + $count + ')" : "") . "');\"";
|
||||
}
|
||||
|
||||
/** Print header for hidden fieldset (close by </div></fieldset>)
|
||||
* @param string
|
||||
* @param string
|
||||
* @param bool
|
||||
* @param string
|
||||
* @return null
|
||||
*/
|
||||
function print_fieldset($id, $legend, $visible = false, $onclick = "") {
|
||||
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";
|
||||
}
|
||||
|
||||
/** 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
|
||||
* @param string
|
||||
* @return string
|
||||
@@ -152,6 +195,25 @@ 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\"\\") . '": ' . (isset($val) ? '"' . addcslashes($val, "\r\n\"\\") . '"' : 'undefined');
|
||||
$first = false;
|
||||
} else {
|
||||
echo "\n}\n";
|
||||
$first = true;
|
||||
}
|
||||
}
|
||||
|
||||
/** Get INI boolean value
|
||||
* @param string
|
||||
* @return bool
|
||||
@@ -220,20 +282,20 @@ function get_key_vals($query, $connection2 = null) {
|
||||
|
||||
/** Get all rows of result
|
||||
* @param string
|
||||
* @param Min_DB
|
||||
* @param string
|
||||
* @return array associative
|
||||
*/
|
||||
function get_rows($query, $connection2 = null, $error = "<p class='error'>") {
|
||||
global $connection;
|
||||
if (!is_object($connection2)) {
|
||||
$connection2 = $connection;
|
||||
}
|
||||
$conn = (is_object($connection2) ? $connection2 : $connection);
|
||||
$return = array();
|
||||
$result = $connection2->query($query);
|
||||
$result = $conn->query($query);
|
||||
if (is_object($result)) { // can return true
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
$return[] = $row;
|
||||
}
|
||||
} elseif (!$result && $connection->error && $error && defined("PAGE_HEADER")) {
|
||||
} elseif (!$result && !is_object($connection2) && $error && defined("PAGE_HEADER")) {
|
||||
echo $error . error() . "\n";
|
||||
}
|
||||
return $return;
|
||||
@@ -275,7 +337,7 @@ function where($where) {
|
||||
$return = array();
|
||||
foreach ((array) $where["where"] as $key => $val) {
|
||||
$return[] = idf_escape(bracket_escape($key, 1)) // 1 - back
|
||||
. (ereg('\\.', $val) || $jush == "mssql" ? " LIKE " . exact_value(addcslashes($val, "%_")) : " = " . exact_value($val)) // LIKE because of floats, but slow with ints, in MS SQL because of text
|
||||
. (($jush == "sql" && ereg('\\.', $val)) || $jush == "mssql" ? " LIKE " . exact_value(addcslashes($val, "%_\\")) : " = " . exact_value($val)) // LIKE because of floats, but slow with ints, in MS SQL because of text
|
||||
; //! enum and set
|
||||
}
|
||||
foreach ((array) $where["null"] as $key) {
|
||||
@@ -411,7 +473,7 @@ function query_redirect($query, $location, $message, $redirect = true, $execute
|
||||
}
|
||||
$sql = "";
|
||||
if ($query) {
|
||||
$sql = $adminer->messageQuery($query);
|
||||
$sql = $adminer->messageQuery("$query;");
|
||||
}
|
||||
if ($failed) {
|
||||
$error = error() . $sql;
|
||||
@@ -424,7 +486,7 @@ function query_redirect($query, $location, $message, $redirect = true, $execute
|
||||
}
|
||||
|
||||
/** Execute and remember query
|
||||
* @param string null to return remembered queries
|
||||
* @param string null to return remembered queries, end with ';' to use DELIMITER
|
||||
* @return Min_Result
|
||||
*/
|
||||
function queries($query = null) {
|
||||
@@ -434,7 +496,7 @@ function queries($query = null) {
|
||||
// return executed queries without parameter
|
||||
return implode(";\n", $queries);
|
||||
}
|
||||
$queries[] = $query;
|
||||
$queries[] = (ereg(';$', $query) ? "DELIMITER ;;\n$query;\nDELIMITER " : $query);
|
||||
return $connection->query($query);
|
||||
}
|
||||
|
||||
@@ -489,10 +551,19 @@ function get_file($key, $decompress = false) {
|
||||
if (!$file || $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]"
|
||||
: $file["tmp_name"]
|
||||
)); //! 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
|
||||
@@ -500,50 +571,10 @@ function get_file($key, $decompress = false) {
|
||||
* @return string
|
||||
*/
|
||||
function upload_error($error) {
|
||||
$max_size = ($error == UPLOAD_ERR_INI_SIZE ? ini_get("upload_max_filesize") : null); // post_max_size is checked in index.php
|
||||
$max_size = ($error == UPLOAD_ERR_INI_SIZE ? ini_get("upload_max_filesize") : 0); // post_max_size is checked in index.php
|
||||
return ($error ? lang('Unable to upload a file.') . ($max_size ? " " . lang('Maximum allowed file size is %sB.', $max_size) : "") : lang('File does not exist.'));
|
||||
}
|
||||
|
||||
/** 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 : '');
|
||||
}
|
||||
|
||||
/** 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\"\\") . '": ' . (isset($val) ? '"' . addcslashes($val, "\r\n\"\\") . '"' : 'undefined');
|
||||
$first = false;
|
||||
} else {
|
||||
echo "\n}\n";
|
||||
$first = true;
|
||||
}
|
||||
}
|
||||
|
||||
/** Check whether the string is in UTF-8
|
||||
* @param string
|
||||
* @return bool
|
||||
*/
|
||||
function is_utf8($val) {
|
||||
// don't print control chars except \t\r\n
|
||||
return (preg_match('~~u', $val) && !preg_match('~[\\0-\\x8\\xB\\xC\\xE-\\x1F]~', $val));
|
||||
}
|
||||
|
||||
/** Create repeat pattern for preg
|
||||
* @param string
|
||||
* @param int
|
||||
@@ -554,6 +585,15 @@ function repeat_pattern($pattern, $length) {
|
||||
return str_repeat("$pattern{0,65535}", $length / 65535) . "$pattern{0," . ($length % 65535) . "}"; // can create {0,0} which is OK
|
||||
}
|
||||
|
||||
/** Check whether the string is in UTF-8
|
||||
* @param string
|
||||
* @return bool
|
||||
*/
|
||||
function is_utf8($val) {
|
||||
// don't print control chars except \t\r\n
|
||||
return (preg_match('~~u', $val) && !preg_match('~[\\0-\\x8\\xB\\xC\\xE-\\x1F]~', $val));
|
||||
}
|
||||
|
||||
/** Shorten UTF-8 string
|
||||
* @param string
|
||||
* @param int
|
||||
@@ -663,9 +703,9 @@ function input($field, $value, $function) {
|
||||
}
|
||||
$first++;
|
||||
}
|
||||
$onchange = ($first ? " onchange=\"var f = this.form['function[" . js_escape($name) . "]']; if ($first > f.selectedIndex) f.selectedIndex = $first;\"" : "");
|
||||
$onchange = ($first ? " onchange=\"var f = this.form['function[" . h(js_escape(bracket_escape($field["field"]))) . "]']; if ($first > f.selectedIndex) f.selectedIndex = $first;\"" : "");
|
||||
$attrs .= $onchange;
|
||||
echo (count($functions) > 1 ? html_select("function[$name]", $functions, !isset($function) || in_array($function, $functions) || isset($functions[$function]) ? $function : "") : nbsp(reset($functions))) . '<td>';
|
||||
echo (count($functions) > 1 ? html_select("function[$name]", $functions, !isset($function) || in_array($function, $functions) || isset($functions[$function]) ? $function : "", "functionChange(this);") : nbsp(reset($functions))) . '<td>';
|
||||
$input = $adminer->editInput($_GET["edit"], $field, $attrs, $value); // usage in call is without a table
|
||||
if ($input != "") {
|
||||
echo $input;
|
||||
@@ -679,7 +719,7 @@ function input($field, $value, $function) {
|
||||
} elseif (ereg('blob|bytea|raw|file', $field["type"]) && ini_bool("file_uploads")) {
|
||||
echo "<input type='file' name='fields-$name'$onchange>";
|
||||
} elseif (ereg('text|lob', $field["type"])) {
|
||||
echo "<textarea " . ($jush != "sqlite" || ereg("\n", $value) ? "cols='50' rows='12'" : "cols='30' rows='1' style='height: 1.2em;'") . "$attrs onkeypress='return textareaKeypress(this, event);'>" . h($value) . '</textarea>'; // 1.2em - line-height
|
||||
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
|
||||
} else {
|
||||
// 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));
|
||||
@@ -710,7 +750,7 @@ function process_input($field) {
|
||||
return null;
|
||||
}
|
||||
if ($function == "orig") {
|
||||
return false;
|
||||
return ($field["on_update"] == "CURRENT_TIMESTAMP" ? idf_escape($field["field"]) : false);
|
||||
}
|
||||
if ($function == "NULL") {
|
||||
return "NULL";
|
||||
@@ -747,7 +787,7 @@ function search_tables() {
|
||||
echo "<ul>\n";
|
||||
$found = true;
|
||||
}
|
||||
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";
|
||||
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"])) . "'>$name</a>\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -764,7 +804,7 @@ function dump_headers($identifier, $multi_table = false) {
|
||||
$return = $adminer->dumpHeaders($identifier, $multi_table);
|
||||
$output = $_POST["output"];
|
||||
if ($output != "text") {
|
||||
header("Content-Disposition: attachment; filename=" . ($identifier != "" ? friendly_url($identifier) : "dump") . ".$return" . ($output != "file" && !ereg('[^0-9a-z]', $output) ? ".$output" : ""));
|
||||
header("Content-Disposition: attachment; filename=" . friendly_url($identifier != "" ? $identifier : (SERVER != "" ? SERVER : "localhost")) . ".$return" . ($output != "file" && !ereg('[^0-9a-z]', $output) ? ".$output" : ""));
|
||||
}
|
||||
session_write_close();
|
||||
return $return;
|
||||
@@ -842,21 +882,3 @@ 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
|
||||
}
|
||||
|
||||
/** Print header for hidden fieldset (close by </div></fieldset>)
|
||||
* @param string
|
||||
* @param string
|
||||
* @param bool
|
||||
* @return null
|
||||
*/
|
||||
function print_fieldset($id, $legend, $visible = false) {
|
||||
echo "<fieldset><legend><a href='#fieldset-$id' onclick=\"return !toggle('fieldset-$id');\">$legend</a></legend><div id='fieldset-$id'" . ($visible ? "" : " class='hidden'") . ">\n";
|
||||
}
|
||||
|
||||
/** Return class='active' if $bold is true
|
||||
* @param bool
|
||||
* @return string
|
||||
*/
|
||||
function bold($bold) {
|
||||
return ($bold ? " class='active'" : "");
|
||||
}
|
||||
|
@@ -12,17 +12,20 @@ $langs = array(
|
||||
'it' => 'Italiano', // Alessandro Fiorotto, Paolo Asperti
|
||||
'et' => 'Eesti', // Priit Kallas
|
||||
'hu' => 'Magyar', // Borsos Szilárd (Borsosfi) - http://www.borsosfi.hu, info@borsosfi.hu
|
||||
// hidden because of poor quality according to author: 'pl' => 'Polski', // Helmut von Ślask cieszyński
|
||||
'pl' => 'Polski', // Radosław Kowalewski - http://srsbiz.pl/
|
||||
'ca' => 'Català', // Joan Llosas
|
||||
'pt' => 'Português', // Gian Live - gian@live.com
|
||||
'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
|
||||
'ru' => 'Русский язык', // Maksim Izmaylov
|
||||
'zh' => '简体中文', // Mr. Lodar
|
||||
'zh-tw' => '繁體中文', // http://tzangms.com
|
||||
'ja' => '日本語', // Hitoshi Ozawa - http://sourceforge.jp/projects/oss-ja-jpn/releases/
|
||||
'ta' => 'தமிழ்', // G. Sampath Kumar, Chennai, India, sampathkumar11@gmail.com
|
||||
'ar' => 'العربية', // Y.M Amine - Algeria - nbr7@live.fr
|
||||
'fa' => 'فارسی', // mojtaba barghbani - Iran - mbarghbani@gmail.com
|
||||
);
|
||||
|
||||
/** Get current language
|
||||
@@ -41,11 +44,16 @@ function get_lang() {
|
||||
function lang($idf, $number = null) {
|
||||
global $LANG, $translations;
|
||||
$translation = $translations[$idf];
|
||||
if (is_array($translation) && $translation) {
|
||||
$pos = ($number == 1 || (!$number && $LANG == 'fr') ? 0 // French treat zero as singular
|
||||
: ($LANG == 'sl' && (!$number || $number > 2) ? 1 : 0) // Slovenian use different forms for 1, 2, 3-4, other
|
||||
+ ((!$number || $number >= 5) && ereg('cs|sk|ru|sl', $LANG) ? 2 : 1) // Slavic languages use different forms for 1, 2-4, other
|
||||
);
|
||||
if (is_array($translation)) {
|
||||
$pos = ($number == 1 ? 0
|
||||
: ($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' ? ($number % 10 == 1 && $number % 100 != 11 ? 0 : ($number % 10 > 1 && $number % 10 < 5 && $number / 10 % 10 != 1 ? 1 : 2)) // different forms for 1, 2-4, other
|
||||
: 1
|
||||
))))))); // http://www.gnu.org/software/gettext/manual/html_node/Plural-forms.html
|
||||
$translation = $translation[$pos];
|
||||
}
|
||||
$args = func_get_args();
|
||||
|
@@ -5,6 +5,11 @@ if (extension_loaded('pdo')) {
|
||||
var $_result, $server_info, $affected_rows, $error;
|
||||
|
||||
function __construct() {
|
||||
global $adminer;
|
||||
$pos = array_search("", $adminer->operators);
|
||||
if ($pos !== false) {
|
||||
unset($adminer->operators[$pos]);
|
||||
}
|
||||
}
|
||||
|
||||
function dsn($dsn, $username, $password, $exception_handler = 'auth_error') {
|
||||
|
@@ -1,2 +1,2 @@
|
||||
<?php
|
||||
$VERSION = "3.2.0";
|
||||
$VERSION = "3.3.4";
|
||||
|
@@ -10,7 +10,7 @@
|
||||
include "./include/bootstrap.inc.php";
|
||||
|
||||
$enum_length = "'(?:''|[^'\\\\]|\\\\.)*+'";
|
||||
$inout = array("IN", "OUT", "INOUT");
|
||||
$inout = "IN|OUT|INOUT";
|
||||
|
||||
if (isset($_GET["select"]) && ($_POST["edit"] || $_POST["clone"]) && !$_POST["save"]) {
|
||||
$_GET["edit"] = $_GET["select"];
|
||||
|
@@ -13,6 +13,7 @@ if ($jush == "sqlite") { // doesn't support primary key
|
||||
if ($_POST && !$error && !$_POST["add"]) {
|
||||
$alter = array();
|
||||
foreach ($_POST["indexes"] as $index) {
|
||||
$name = $index["name"];
|
||||
if (in_array($index["type"], $index_types)) {
|
||||
$columns = array();
|
||||
$lengths = array();
|
||||
@@ -27,22 +28,23 @@ if ($_POST && !$error && !$_POST["add"]) {
|
||||
}
|
||||
}
|
||||
if ($columns) {
|
||||
foreach ($indexes as $name => $existing) {
|
||||
$existing = $indexes[$name];
|
||||
if ($existing) {
|
||||
ksort($existing["columns"]);
|
||||
ksort($existing["lengths"]);
|
||||
if ($index["type"] == $existing["type"] && array_values($existing["columns"]) === $columns && (!$existing["lengths"] || array_values($existing["lengths"]) === $lengths)) {
|
||||
// skip existing index
|
||||
unset($indexes[$name]);
|
||||
continue 2;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
$alter[] = array($index["type"], "(" . implode(", ", $set) . ")");
|
||||
$alter[] = array($index["type"], $name, "(" . implode(", ", $set) . ")");
|
||||
}
|
||||
}
|
||||
}
|
||||
// drop removed indexes
|
||||
foreach ($indexes as $name => $existing) {
|
||||
$alter[] = array($existing["type"], idf_escape($name), "DROP");
|
||||
$alter[] = array($existing["type"], $name, "DROP");
|
||||
}
|
||||
if (!$alter) {
|
||||
redirect(ME . "table=" . urlencode($TABLE));
|
||||
@@ -69,6 +71,7 @@ if ($_POST) {
|
||||
}
|
||||
} else {
|
||||
foreach ($row["indexes"] as $key => $index) {
|
||||
$row["indexes"][$key]["name"] = $key;
|
||||
$row["indexes"][$key]["columns"][] = "";
|
||||
}
|
||||
$row["indexes"][] = array("columns" => array(1 => ""));
|
||||
@@ -77,7 +80,7 @@ if ($_POST) {
|
||||
|
||||
<form action="" method="post">
|
||||
<table cellspacing="0" class="nowrap">
|
||||
<thead><tr><th><?php echo lang('Index Type'); ?><th><?php echo lang('Column (length)'); ?></thead>
|
||||
<thead><tr><th><?php echo lang('Index Type'); ?><th><?php echo lang('Column (length)'); ?><th><?php echo lang('Name'); ?></thead>
|
||||
<?php
|
||||
$j = 1;
|
||||
foreach ($row["indexes"] as $index) {
|
||||
@@ -85,16 +88,17 @@ foreach ($row["indexes"] as $index) {
|
||||
ksort($index["columns"]);
|
||||
$i = 1;
|
||||
foreach ($index["columns"] as $key => $column) {
|
||||
echo "<span>" . html_select("indexes[$j][columns][$i]", array(-1 => "") + $fields, $column, ($i == count($index["columns"]) ? "indexesAddColumn(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"][$key]) . "'> </span>"; //! hide for non-MySQL drivers, add ASC|DESC
|
||||
$i++;
|
||||
}
|
||||
echo "<td><input name='indexes[$j][name]' value='" . h($index["name"]) . "'>\n";
|
||||
$j++;
|
||||
}
|
||||
?>
|
||||
</table>
|
||||
<p>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||
<noscript><p><input type="submit" name="add" value="<?php echo lang('Add next'); ?>"></noscript>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</form>
|
||||
|
@@ -136,8 +136,8 @@ $translations = array(
|
||||
'Hashed' => 'تلبيد',
|
||||
'Column' => 'عمود',
|
||||
'Routine' => 'روتين',
|
||||
'Grant' => 'Grant',
|
||||
'Revoke' => 'Revoke',
|
||||
'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.',
|
||||
@@ -262,6 +262,12 @@ $translations = array(
|
||||
'Last page' => 'الصفحة السابقة',
|
||||
'Refresh' => 'تحديث',
|
||||
'Invalid schema.' => 'مخطط خاطئ.',
|
||||
'Please use one of the extensions %s.' => 'من فضلك إستعمل إحدى الغمتدادات: %s.',
|
||||
'Please use one of the extensions %s.' => 'من فضلك إستعمل إحدى الإمتدادات: %s.',
|
||||
'ltr' => 'rtl',
|
||||
'Tables have been copied.' => 'تم نسخ الجداول.',
|
||||
'Copy' => 'نسخ',
|
||||
'Permanent link' => 'وصلة دائمة',
|
||||
'Edit all' => 'تعديل الكل',
|
||||
'Resend POST data?' => 'هل تود إعادة إرسال بيانات POST ؟',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
@@ -58,11 +58,11 @@ $translations = array(
|
||||
'Sort' => 'Ordena',
|
||||
'descending' => 'descendent',
|
||||
'Limit' => 'Límit',
|
||||
'No rows.' => 'No hi ha cap fila.',
|
||||
'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 fila modificada.', 'Consulta executada correctament, %d files modificades.'),
|
||||
'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',
|
||||
@@ -78,7 +78,7 @@ $translations = array(
|
||||
'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 fila modificada.', 'S\'ha cridat la rutina, %d files modificades.'),
|
||||
'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.',
|
||||
@@ -128,7 +128,7 @@ $translations = array(
|
||||
'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 fila', '%d files'),
|
||||
'%d row(s)' => array('%d registre', '%d registres'),
|
||||
'Remove' => 'Suprimeix',
|
||||
'Are you sure?' => 'Estàs segur?',
|
||||
'Privileges' => 'Privilegis',
|
||||
@@ -153,7 +153,7 @@ $translations = array(
|
||||
'save' => 'desa',
|
||||
'Format' => 'Format',
|
||||
'Tables' => 'Taules',
|
||||
'Data' => 'Data',
|
||||
'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.',
|
||||
@@ -169,7 +169,7 @@ $translations = array(
|
||||
'On completion preserve' => 'Conservar en completar',
|
||||
'Tables and views' => 'Taules i vistes',
|
||||
'Data Length' => 'Longitud de les dades',
|
||||
'Index Length' => 'L\'ongitud de l\'índex',
|
||||
'Index Length' => 'Longitud de l\'índex',
|
||||
'Data Free' => 'Espai lliure',
|
||||
'Collation' => 'Compaginació',
|
||||
'Analyze' => 'Analitza',
|
||||
@@ -194,7 +194,7 @@ $translations = array(
|
||||
'Partitions' => 'Particions',
|
||||
'Partition name' => 'Nom de la partició',
|
||||
'Values' => 'Valors',
|
||||
'%d row(s) have been imported.' => array('S\'ha importat %d fila.', 'S\'han importat %d files.'),
|
||||
'%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',
|
||||
@@ -264,4 +264,10 @@ $translations = array(
|
||||
'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',
|
||||
'Resend POST data?' => 'Torna a enviar les dades POST?',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
@@ -20,7 +20,7 @@ $translations = array(
|
||||
'%s version: %s through PHP extension %s' => 'Verze %s: %s přes PHP extenzi %s',
|
||||
'Refresh' => 'Obnovit',
|
||||
|
||||
// text direction
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'ltr',
|
||||
|
||||
'Privileges' => 'Oprávnění',
|
||||
@@ -53,6 +53,7 @@ $translations = array(
|
||||
'%.3f s' => '%.3f s',
|
||||
'History' => 'Historie',
|
||||
'Clear' => 'Vyčistit',
|
||||
'Edit all' => 'Upravit vše',
|
||||
|
||||
'File upload' => 'Nahrání souboru',
|
||||
'From server' => 'Ze serveru',
|
||||
@@ -87,6 +88,9 @@ $translations = array(
|
||||
'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ě',
|
||||
@@ -143,6 +147,7 @@ $translations = array(
|
||||
'Create new table' => 'Vytvořit novou tabulku',
|
||||
'Table has been dropped.' => 'Tabulka byla odstraněna.',
|
||||
'Tables have been dropped.' => 'Tabulky byly odstraněny.',
|
||||
'Tables have been optimized.' => 'Tabulky byly optimalizovány.',
|
||||
'Table has been altered.' => 'Tabulka byla změněna.',
|
||||
'Table has been created.' => 'Tabulka byla vytvořena.',
|
||||
'Table name' => 'Název tabulky',
|
||||
@@ -273,12 +278,20 @@ $translations = array(
|
||||
'Geometry' => 'Geometrie',
|
||||
'Relations' => 'Vztahy',
|
||||
|
||||
// reload confirmation in AJAX
|
||||
'Resend POST data?' => 'Znovu odeslat POST data?',
|
||||
'No response from server.' => 'Server neodpověděl.',
|
||||
|
||||
'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.',
|
||||
|
@@ -247,7 +247,7 @@ $translations = array(
|
||||
'Double click on a value to modify it.' => 'Doppelklick zum Bearbeiten des Wertes.',
|
||||
'Use edit link to modify this value.' => 'Benutzen Sie den Link zum editieren dieses Wertes.',
|
||||
'last' => 'letzte',
|
||||
'From server' => 'Auf Server',
|
||||
'From server' => 'Im Server',
|
||||
'System' => 'Datenbank System',
|
||||
'Select data' => 'Daten auswählen',
|
||||
'Show structure' => 'Struktur anzeigen',
|
||||
@@ -264,4 +264,10 @@ $translations = array(
|
||||
'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',
|
||||
'Resend POST data?' => 'POST data noch einmal senden ?',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
@@ -249,7 +249,7 @@ $translations = array(
|
||||
'last' => 'último',
|
||||
'From server' => 'Desde servidor',
|
||||
'System' => 'Motor de base de datos',
|
||||
'Select data' => 'Seleccionar datos',
|
||||
'Select data' => 'Visualizar contenido',
|
||||
'Show structure' => 'Mostrar estructura',
|
||||
'empty' => 'ningúno',
|
||||
'Network' => 'Red',
|
||||
@@ -264,4 +264,10 @@ $translations = array(
|
||||
'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',
|
||||
'Resend POST data?' => 'Volver a enviar POST data?',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
@@ -264,4 +264,10 @@ $translations = array(
|
||||
'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',
|
||||
'Resend POST data?' => 'Saada POST andmed uuesti?',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
320
adminer/lang/fa.inc.php
Normal file
320
adminer/lang/fa.inc.php
Normal file
@@ -0,0 +1,320 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
// label for database system selection (MySQL, SQLite, ...)
|
||||
'System' => 'سيستم',
|
||||
'Server' => 'سرور',
|
||||
'Username' => 'نام كاربري',
|
||||
'Password' => 'كلمه عبور',
|
||||
'Permanent login' => '',
|
||||
'Login' => 'ورود',
|
||||
'Logout' => 'خروج',
|
||||
'Logged as: %s' => 'ورود به عنوان: %s',
|
||||
'Logout successful.' => 'با موفقيت خارج شديد',
|
||||
'Invalid credentials.' => 'اعتبار سنجي نامعتبر',
|
||||
'Language' => 'زبان',
|
||||
'Invalid CSRF token. Send the form again.' => 'نامعتبر است. دوباره سعی کنید Token CSRF',
|
||||
'No extension' => 'پسوند نامعتبر',
|
||||
'None of the supported PHP extensions (%s) are available.' => ' پسوند پی اچ پی در دسترس نیست (%s) تعداد',
|
||||
'Session support must be enabled.' => 'پشتيباني از نشست بايستي فعال گردد',
|
||||
'Session expired, please login again.' => 'نشست پايان يافته، لطفا دوباره وارد شويد',
|
||||
'%s version: %s through PHP extension %s' => 'نسخه %s : %s توسعه پی اچ پی %s',
|
||||
'Refresh' => 'بازيابي',
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'rtl',
|
||||
|
||||
'Privileges' => 'امتيازات',
|
||||
'Create user' => 'ایجاد كاربر',
|
||||
'User has been dropped.' => 'كاربر حذف شد',
|
||||
'User has been altered.' => 'كاربر ويرايش گرديد',
|
||||
'User has been created.' => 'كاربر ايجاد شد',
|
||||
'Hashed' => 'به هم ريخته',
|
||||
'Column' => 'ستون',
|
||||
'Routine' => 'روتين',
|
||||
'Grant' => 'اعطا',
|
||||
'Revoke' => 'لغو كردن',
|
||||
|
||||
'Process list' => 'ليست فرآيند',
|
||||
'%d process(es) have been killed.' => '%d فرآيند متوقف شد',
|
||||
'Kill' => 'حذف فرآيند',
|
||||
|
||||
'Variables' => 'متغيرها',
|
||||
'Status' => 'وضعيت',
|
||||
|
||||
'SQL command' => 'دستور اس كيو ال',
|
||||
'%d query(s) executed OK.' => '%d كوئري اجرا شد',
|
||||
'Query executed OK, %d row(s) affected.' => 'كوئري اجرا شد. %d سطر تغيير كرد.',
|
||||
'No commands to execute.' => 'دستوري براي اجرا وجود ندارد',
|
||||
'Error in query' => 'خطا در كوئري',
|
||||
'Execute' => 'اجرا',
|
||||
'Stop on error' => 'توقف در خطا',
|
||||
'Show only errors' => 'فقط نمايش خطاها',
|
||||
// sprintf() format for time of the command
|
||||
'%.3f s' => '%.3f s',
|
||||
'History' => 'تاريخ',
|
||||
'Clear' => 'پاك كردن',
|
||||
'Edit all' => 'ويرايش همه',
|
||||
|
||||
'File upload' => 'بارگذاري فايل',
|
||||
'From server' => 'از سرور',
|
||||
'Webserver file %s' => '%s فايل وب سرور',
|
||||
'Run file' => 'نمايش فايل',
|
||||
'File does not exist.' => 'فايل وجود ندارد',
|
||||
'File uploads are disabled.' => 'بارگذاري غير فعال است',
|
||||
'Unable to upload a file.' => 'قادر به بارگذاري فايل نيستيد',
|
||||
'Maximum allowed file size is %sB.' => ' %sB حداكثر اندازه فايل',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'حجم داده ارسالي برزگ است. حجم داده كاهش دهيد و يا مقدار %s را در پيكربندي افزايش دهيد.',
|
||||
|
||||
'Export' => 'استخراج',
|
||||
'Dump' => 'خالي كردن',
|
||||
'Output' => 'خروجي',
|
||||
'open' => 'بازكردن',
|
||||
'save' => 'ذخيره',
|
||||
'Format' => 'حذف',
|
||||
'Data' => 'داده',
|
||||
|
||||
'Database' => 'پايگاه داده',
|
||||
'database' => 'پايگاه داده',
|
||||
'Use' => 'استفاده',
|
||||
'Select database' => 'انتخاب پايگاه داده',
|
||||
'Invalid database.' => 'پايگاه داده نامعتبر',
|
||||
'Create new database' => 'ایجاد پايگاه داده جديد',
|
||||
'Database has been dropped.' => 'پايگاه داده حذف شد',
|
||||
'Databases have been dropped.' => 'پايگاه دادها حذف شدند',
|
||||
'Database has been created.' => 'پايگاه داده ايجاد شد',
|
||||
'Database has been renamed.' => 'نام پايگاه داده تغيير كرد',
|
||||
'Database has been altered.' => 'پايگاه داده ويرايش شد',
|
||||
'Alter database' => 'ويرايش پايگاه داده',
|
||||
'Create database' => 'ایجاد پايگاه داده',
|
||||
'Database schema' => 'ساختار پايگاه داده',
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'ارتباط دائم',
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ' ',
|
||||
'Engine' => 'موتور',
|
||||
'Collation' => 'تطبیق',
|
||||
'Data Length' => 'طول داده',
|
||||
'Index Length' => 'طول ایندکس',
|
||||
'Data Free' => 'داده اختیاری',
|
||||
'Rows' => 'سطرها',
|
||||
'%d in total' => ' به طور کل %d ',
|
||||
'Analyze' => 'تحلیل',
|
||||
'Optimize' => 'بهینه سازی',
|
||||
'Check' => 'بررسی',
|
||||
'Repair' => 'تعمیر',
|
||||
'Truncate' => 'کوتاه کردن',
|
||||
'Tables have been truncated.' => 'جدولها بریده شدند',
|
||||
'Move to other database' => 'انتقال به یک پایگاه داده دیگر',
|
||||
'Move' => 'انتقال',
|
||||
'Tables have been moved.' => 'جدولها انتقال داده شدند',
|
||||
'Copy' => 'کپی کردن',
|
||||
'Tables have been copied.' => 'جدولها کپی شدند',
|
||||
|
||||
'Routines' => 'روالها',
|
||||
'Routine has been called, %d row(s) affected.' => array('روال فراخوانی شد %d سطر متاثر شد', 'روال فراخوانی شد %d سطر متاثر شد'),
|
||||
'Call' => 'صدا زدن',
|
||||
'Parameter name' => 'نام پارامتر',
|
||||
'Create procedure' => 'ایجاد زیربرنامه',
|
||||
'Create function' => 'ایجاد تابع',
|
||||
'Routine has been dropped.' => 'روال حذف شد',
|
||||
'Routine has been altered.' => 'روال ویرایش شد',
|
||||
'Routine has been created.' => 'روال ایجاد شد',
|
||||
'Alter function' => 'ویرایش تابع',
|
||||
'Alter procedure' => 'ویرایش زیربرنامه',
|
||||
'Return type' => 'برگرداندن نوع',
|
||||
|
||||
'Events' => 'رویدادها',
|
||||
'Event has been dropped.' => 'رویداد حذف شد',
|
||||
'Event has been altered.' => 'رویداد ویرایش شد',
|
||||
'Event has been created.' => 'رویداد ایجاد شد',
|
||||
'Alter event' => 'ویرایش رویداد',
|
||||
'Create event' => 'ایجاد رویداد',
|
||||
'At given time' => 'زمان معین',
|
||||
'Every' => 'همه',
|
||||
'Schedule' => 'زمانبندی',
|
||||
'Start' => 'آغاز',
|
||||
'End' => 'پایان',
|
||||
'On completion preserve' => 'تکمیل حفاظت فعال است',
|
||||
|
||||
'Tables' => 'جدولها',
|
||||
'Tables and views' => 'جدولها و نمایه ها',
|
||||
'Table' => 'جدول',
|
||||
'No tables.' => 'جدولی وجود ندارد',
|
||||
'Alter table' => 'ویرایش جدول',
|
||||
'Create table' => 'ایجاد جدول',
|
||||
'Create new table' => 'ایجاد جدول جدید',
|
||||
'Table has been dropped.' => 'جدول حذف شد',
|
||||
'Tables have been dropped.' => 'جدولها حذف شدند',
|
||||
'Table has been altered.' => 'جدول ویرایش شد',
|
||||
'Table has been created.' => 'جدول ایجاد شد',
|
||||
'Table name' => 'نام جدول',
|
||||
'Show structure' => 'نمایش ساختار',
|
||||
'engine' => 'موتور',
|
||||
'collation' => 'تطبیق',
|
||||
'Column name' => 'نام ستون',
|
||||
'Type' => 'نوع',
|
||||
'Length' => 'طول',
|
||||
'Auto Increment' => 'افزایش خودکار',
|
||||
'Options' => 'اختیارات',
|
||||
'Comment' => 'توضیح',
|
||||
'Default values' => 'مقادیر پیش فرض',
|
||||
'Drop' => 'حذف',
|
||||
'Are you sure?' => 'مطمئن هستید؟',
|
||||
'Move up' => 'انتقال به بالا',
|
||||
'Move down' => 'انتقال به پایین',
|
||||
'Remove' => 'حذف',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'حداکثر مجاز فیلدهای مجاز اشباع شد. لطفا %s و %s را کاهش دهید',
|
||||
|
||||
'Partition by' => 'بخشبندی توسط',
|
||||
'Partitions' => 'بخشبندیها',
|
||||
'Partition name' => 'نام بخش',
|
||||
'Values' => 'مقادیر',
|
||||
|
||||
'View' => 'نمایش',
|
||||
'View has been dropped.' => 'نمایش حذف شد',
|
||||
'View has been altered.' => 'نمایش ویرایش شد',
|
||||
'View has been created.' => 'نمایش ایجاد شد',
|
||||
'Alter view' => 'حذف نمایش',
|
||||
'Create view' => 'ایجاد نمایش',
|
||||
|
||||
'Indexes' => 'ایندکسها',
|
||||
'Indexes have been altered.' => 'ایندکسها ویرایش شد',
|
||||
'Alter indexes' => 'ویرایش ایندکسها',
|
||||
'Add next' => 'افرودن بعدی',
|
||||
'Index Type' => 'نوع ایندکس',
|
||||
'Column (length)' => 'ستون (طول)',
|
||||
|
||||
'Foreign keys' => 'کلیدهای خارجی',
|
||||
'Foreign key' => 'کلید خارجی',
|
||||
'Foreign key has been dropped.' => 'کلید خارجی حذف شد',
|
||||
'Foreign key has been altered.' => 'کلید خارجی ویرایش شد',
|
||||
'Foreign key has been created.' => 'کلید خارجی ایجاد شد',
|
||||
'Target table' => 'جدول هدف',
|
||||
'Change' => 'تغییر',
|
||||
'Source' => 'منبع',
|
||||
'Target' => 'هدف',
|
||||
'Add column' => 'افزودن ستون',
|
||||
'Alter' => 'ویرایش',
|
||||
'Add foreign key' => 'افزودن کلید خارجی',
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'داده مبدا و مقصد ستونها بایستی شبیه هم باشند',
|
||||
|
||||
'Triggers' => 'تریگرها',
|
||||
'Add trigger' => 'افزودن تریگر',
|
||||
'Trigger has been dropped.' => 'تریگر حذف شد',
|
||||
'Trigger has been altered.' => 'تریگر ویرایش شد',
|
||||
'Trigger has been created.' => 'تریگر ایجاد شد',
|
||||
'Alter trigger' => 'ویرایش تریگر',
|
||||
'Create trigger' => 'ایجاد تریگر',
|
||||
'Time' => 'زمان',
|
||||
'Event' => 'رویداد',
|
||||
'Name' => 'نام',
|
||||
|
||||
'select' => 'انتخاب',
|
||||
'Select' => 'انتخاب',
|
||||
'Select data' => 'انتخاب داده',
|
||||
'Functions' => 'توابع',
|
||||
'Aggregation' => 'تجمع',
|
||||
'Search' => 'جستجو',
|
||||
'anywhere' => 'هرکجا',
|
||||
'Search data in tables' => 'جستجوی داده در جدول',
|
||||
'Sort' => 'مرتب کردن',
|
||||
'descending' => 'نزولی',
|
||||
'Limit' => 'محدودیت',
|
||||
'Text length' => 'طول متن',
|
||||
'Action' => 'عملیات',
|
||||
'Unable to select the table' => 'قادر به انتخاب جدول نیستید',
|
||||
'No rows.' => 'سطری وجود ندارد',
|
||||
'%d row(s)' => array('%d سطر', '%d سطر'),
|
||||
'Page' => 'صفحه',
|
||||
'last' => 'آخری',
|
||||
'Last page' => 'صفحه آخر',
|
||||
'whole result' => 'همه نتایج',
|
||||
'%d byte(s)' => array('%d بایت', '%d بایت'),
|
||||
|
||||
'Import' => 'وارد کردن',
|
||||
'%d row(s) have been imported.' => array('%d سطر وارد شد', '%d سطر وارد شد'),
|
||||
|
||||
// in-place editing in select
|
||||
'Double click on a value to modify it.' => 'روی مقدار دوبار کلیک کنید تا آنرا ویرایش کنید',
|
||||
'Use edit link to modify this value.' => 'از لینک ویرایش برای ویرایش این مقدار استفاده کنید',
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => '%s آیتم درج شد',
|
||||
'Item has been deleted.' => 'آیتم حذف شد',
|
||||
'Item has been updated.' => 'آیتم بروز رسانی شد',
|
||||
'%d item(s) have been affected.' => array('%d آیتم متاثر شد', '%d آیتم متاثر شد'),
|
||||
'New item' => 'آیتم جدید',
|
||||
'original' => 'اصلی',
|
||||
// label for value '' in enum data type
|
||||
'empty' => 'خالی',
|
||||
'edit' => 'ویرایش',
|
||||
'Edit' => 'ویرایش',
|
||||
'Insert' => 'درج',
|
||||
'Save' => 'ذخیره',
|
||||
'Save and continue edit' => 'ذخیره و ادامه ویرایش',
|
||||
'Save and insert next' => 'ذخیره و درج بعدی',
|
||||
'Clone' => 'تکثیر',
|
||||
'Delete' => 'حذف',
|
||||
|
||||
'E-mail' => 'پست الکترونیک',
|
||||
'From' => 'فرستنده',
|
||||
'Subject' => 'موضوع',
|
||||
'Attachments' => 'پیوست ها',
|
||||
'Send' => 'ارسال',
|
||||
'%d e-mail(s) have been sent.' => array('%d ایمیل ارسال شد', '%d ایمیل ارسال شد'),
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'اعداد',
|
||||
'Date and time' => 'تاریخ و زمان',
|
||||
'Strings' => 'رشته ها',
|
||||
'Binary' => 'دودویی',
|
||||
'Lists' => 'لیستها',
|
||||
'Network' => 'شبکه',
|
||||
'Geometry' => 'هندسه',
|
||||
'Relations' => 'رابطه ها',
|
||||
|
||||
// reload confirmation in AJAX
|
||||
'Resend POST data?' => 'ارسال مجدد داده ها؟',
|
||||
|
||||
'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' => 'ویرایش نوع',
|
||||
);
|
@@ -212,7 +212,7 @@ $translations = array(
|
||||
'Strings' => 'Chaînes',
|
||||
'Binary' => 'Binaires',
|
||||
'Lists' => 'Listes',
|
||||
'Editor' => 'Editeur',
|
||||
'Editor' => 'Éditeur',
|
||||
'E-mail' => 'Courriel',
|
||||
'From' => 'De',
|
||||
'Subject' => 'Sujet',
|
||||
@@ -264,4 +264,10 @@ $translations = array(
|
||||
'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',
|
||||
'Resend POST data?' => 'Renvoyer les données POST ?',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
@@ -36,7 +36,7 @@ $translations = array(
|
||||
'database' => 'adatbázis',
|
||||
'Use' => 'Használ',
|
||||
'No tables.' => 'Nincs tábla.',
|
||||
'select' => 'kiválaszt',
|
||||
'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.',
|
||||
@@ -52,7 +52,7 @@ $translations = array(
|
||||
'Alter indexes' => 'Index módosítása',
|
||||
'Add next' => 'Következő hozzáadása',
|
||||
'Language' => 'Nyelv',
|
||||
'Select' => 'Kiválaszt',
|
||||
'Select' => 'Kiválasztás',
|
||||
'New item' => 'Új tétel',
|
||||
'Search' => 'Keresés',
|
||||
'Sort' => 'Sorba rendezés',
|
||||
@@ -228,7 +228,7 @@ $translations = array(
|
||||
'%d in total' => 'összesen %d',
|
||||
'Attachments' => 'Csatolmány',
|
||||
'System' => 'Adatbázis',
|
||||
'last' => 'utoljára',
|
||||
'last' => 'utolsó',
|
||||
'Network' => 'Hálózat',
|
||||
'Geometry' => 'Geometria',
|
||||
'Databases have been dropped.' => 'Adatbázis eldobva.',
|
||||
@@ -264,4 +264,10 @@ $translations = array(
|
||||
'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',
|
||||
'Resend POST data?' => 'Újraküldi a POST adatokat?',
|
||||
'HH:MM:SS' => 'óó:pp:mm',
|
||||
);
|
||||
|
@@ -264,4 +264,10 @@ $translations = array(
|
||||
'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',
|
||||
'Resend POST data?' => 'Reinvio i dati POST?',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
@@ -264,4 +264,10 @@ $translations = array(
|
||||
'Invalid schema.' => '無効なスキーマ',
|
||||
'Please use one of the extensions %s.' => 'いずれかの拡張機能を使ってください %s',
|
||||
'ltr' => 'ltr',
|
||||
'Tables have been copied.' => 'テーブルをコピーしました',
|
||||
'Copy' => 'コピー',
|
||||
'Permanent link' => 'パーマネントリンク',
|
||||
'Edit all' => 'すべて編集',
|
||||
'Resend POST data?' => '再送信しますか?',
|
||||
'HH:MM:SS' => '時:分:秒',
|
||||
);
|
||||
|
320
adminer/lang/lt.inc.php
Normal file
320
adminer/lang/lt.inc.php
Normal file
@@ -0,0 +1,320 @@
|
||||
<?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 and %s.' => 'Viršytas maksimalus leidžiamų stulpelių kiekis. Padidinkite %s ir %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',
|
||||
'Last page' => 'Paskutinis puslapis',
|
||||
'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
|
||||
'Double click on a value to modify it.' => 'Du kartus spragtelėkite pelyte norėdami redaguoti.',
|
||||
'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',
|
||||
|
||||
// reload confirmation in AJAX
|
||||
'Resend POST data?' => 'Persiųsti POST duomenis?',
|
||||
|
||||
'Editor' => 'Redaktorius',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$1-$3-$5',
|
||||
// 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ą',
|
||||
);
|
@@ -264,4 +264,10 @@ $translations = array(
|
||||
'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',
|
||||
'Resend POST data?' => 'POST data opnieuw verzenden',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
@@ -1,116 +1,121 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
'Login' => 'Zalogować się',
|
||||
'Logout successful.' => 'Wylogowanie pomyślne.',
|
||||
'Invalid credentials.' => 'Nieprawidłowe dane.',
|
||||
// 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' => '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 bazę danych.',
|
||||
'Invalid database.' => 'Nie znaleziono bazy danych.',
|
||||
'Create new database' => 'Utwórz nową bazę danych',
|
||||
'Table has been dropped.' => 'Tabela została usunięta.',
|
||||
'Table has been altered.' => 'Tabela została zmieniona.',
|
||||
'Table has been created.' => 'Tabela została utworzona.',
|
||||
'Alter table' => 'Zmień tabelę',
|
||||
'Create table' => 'Utwórz nową tabelę',
|
||||
'Table name' => 'Nazwa tabeli',
|
||||
'engine' => 'składowanie',
|
||||
'collation' => 'porównywanie',
|
||||
'Column name' => 'Nazwa kolumny',
|
||||
'Type' => 'Typ',
|
||||
'Length' => 'Długość',
|
||||
'Auto Increment' => 'Auto Increment',
|
||||
'Options' => 'Operacje',
|
||||
'Save' => 'Zachowaj',
|
||||
'Drop' => 'Usuń',
|
||||
'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.' => 'Baza danych została przemianowana.',
|
||||
'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',
|
||||
'SQL command' => 'SQL zapytanie',
|
||||
'Dump' => 'Eksport',
|
||||
'Logout' => 'Wyjście',
|
||||
'database' => 'baza danych',
|
||||
'Use' => 'Vybrat',
|
||||
'No tables.' => 'Nie znaleziono tabeli.',
|
||||
'select' => 'pokaż',
|
||||
'Create new table' => 'Utwórz nową tabelę',
|
||||
'Item has been deleted.' => 'Rekord został usunięty.',
|
||||
'Item has been updated.' => 'Rekord został aktualizowany.',
|
||||
'Item%s has been inserted.' => 'Rekord%s został włożony.',
|
||||
'Edit' => 'Edytuj',
|
||||
'Insert' => 'Dodaj',
|
||||
'Save and insert next' => 'Wykonaj i dodaj następny',
|
||||
'Delete' => 'Usuń',
|
||||
'Database' => 'Baza danych',
|
||||
'Routines' => 'Procedury i funkcje',
|
||||
'Indexes have been altered.' => 'Indeksy uległy zmianie.',
|
||||
'Indexes' => 'Indeksy',
|
||||
'Alter indexes' => 'Edytuj indeksy',
|
||||
'Add next' => 'Dodaj następny',
|
||||
'Language' => 'Język',
|
||||
'Select' => 'Przeglądaj',
|
||||
'New item' => 'Nowy rekord',
|
||||
'Search' => 'Szukaj',
|
||||
'Sort' => 'Sortuj',
|
||||
'descending' => 'malejąco',
|
||||
'Limit' => 'Limit',
|
||||
'No rows.' => 'Pusty wynik.',
|
||||
'Action' => 'Czynność',
|
||||
'edit' => 'zmień',
|
||||
'Page' => 'Strona',
|
||||
'Query executed OK, %d row(s) affected.' => array('Wykonanie pomyślne, zmieniono %d rekord.', 'Wykonanie pomyślne, zmieniono %d rekordy.', 'Wykonanie pomyślne, zmieniono %d rekordów.'),
|
||||
'Error in query' => 'Bląd w zapytaniu',
|
||||
'Execute' => 'Wykonaj',
|
||||
'Table' => 'Tabela',
|
||||
'Foreign keys' => 'Klucze obce',
|
||||
'Triggers' => 'Wyzwalacze',
|
||||
'View' => 'Perspektywa',
|
||||
'Unable to select the table' => 'Nie mozna było przeglądać tabel',
|
||||
'Invalid CSRF token. Send the form again.' => 'Niepoprawny CSRF token. Odeślij ponownie.',
|
||||
'Comment' => 'Komentarz',
|
||||
'Default values' => 'Wartości domyślne',
|
||||
'%d byte(s)' => array('%d bajt', '%d bajty', '%d bajtów'),
|
||||
'No commands to execute.' => 'Nic do wykonania.',
|
||||
'Unable to upload a file.' => 'Nie było możliwe nagrać plik.',
|
||||
'File upload' => 'Nagranie pliku',
|
||||
'File uploads are disabled.' => 'Nagranie pliku nie jest dozwolone.',
|
||||
'Routine has been called, %d row(s) affected.' => array('Procedura była uruchomiona, został zmieniony %d rekord.', 'Procedura była uruchomiona, zostały zmienione %d rekordy.', 'Procedura była uruchomiona, %d rekordów zostało zmienionych.'),
|
||||
'Call' => 'Uruchomić',
|
||||
'No extension' => 'Bez rozszerzenia',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Nie jest dostępne żadne z PHP rozszerzeń (%s).',
|
||||
'Session support must be enabled.' => 'Session zmienne muszą być dozwolone.',
|
||||
'Session expired, please login again.' => 'Minął czas session, zaloguj się ponownie.',
|
||||
'Text length' => 'Długość tekstu',
|
||||
'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.',
|
||||
'Foreign key' => 'Obcy klucz',
|
||||
'Target table' => 'Tabela celowa',
|
||||
'Change' => 'Zmienić',
|
||||
'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',
|
||||
'Index Type' => 'Typ indeksu',
|
||||
'Column (length)' => 'Kolumna (długość)',
|
||||
'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ę',
|
||||
'Name' => 'Nazwa',
|
||||
'Process list' => 'Lista procesów',
|
||||
'%d process(es) have been killed.' => array('Wątek %d został unicestwiony.', 'Unicestwiono %d wątki.', 'Unicestwiono %d wątków.'),
|
||||
'Kill' => 'Unicestwij',
|
||||
'Parameter name' => 'Nazwa parametru',
|
||||
'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.',
|
||||
@@ -118,7 +123,86 @@ $translations = array(
|
||||
'Routine has been created.' => 'Procedura została utworzona.',
|
||||
'Alter function' => 'Zmień funkcję',
|
||||
'Alter procedure' => 'Zmień procedurę',
|
||||
'Return type' => 'Typ zwracania',
|
||||
'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.',
|
||||
'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 and %s.' => 'Przekroczono maksymalną liczbę pól. Zwiększ %s i %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.',
|
||||
@@ -127,134 +211,110 @@ $translations = array(
|
||||
'Create trigger' => 'Utwórz wyzwalacz',
|
||||
'Time' => 'Czas',
|
||||
'Event' => 'Wydarzenie',
|
||||
'%s version: %s through PHP extension %s' => 'Wersja %s: %s przez PHP rozszerzenie %s',
|
||||
'%d row(s)' => array('%d linia', '%d linie ', '%d linii'),
|
||||
'Remove' => 'Usunąć',
|
||||
'Are you sure?' => 'Naprawdę?',
|
||||
'Privileges' => 'Uprawnienia użytkowników',
|
||||
'Create user' => 'Utwórz 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ł utworzony.',
|
||||
'Hashed' => 'Hashed',
|
||||
'Column' => 'Kolumna',
|
||||
'Routine' => 'Procedura',
|
||||
'Grant' => 'Udzielić',
|
||||
'Revoke' => 'Odwołać',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Zbyt duże POST data. Zmiejszyj data albo podwyższ wartość w konfiguracji %s.',
|
||||
'Logged as: %s' => 'Zalogowany jako: %s',
|
||||
'Move up' => 'Przesuń w górę',
|
||||
'Move down' => 'Przesuń w dół',
|
||||
'Name' => 'Nazwa',
|
||||
|
||||
'select' => 'przeglądaj',
|
||||
'Select' => 'pokaż',
|
||||
'Select data' => 'Pokaż dane',
|
||||
'Functions' => 'Funkcje',
|
||||
'Aggregation' => 'Agregacje',
|
||||
'Export' => 'Eksport',
|
||||
'Output' => 'Wyjście',
|
||||
'open' => 'otworzyć',
|
||||
'save' => 'uchować',
|
||||
'Format' => 'Format',
|
||||
'Tables' => 'Tabele',
|
||||
'Data' => 'Data',
|
||||
'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' => 'Każdych',
|
||||
'Events' => 'Wydarzenie',
|
||||
'Schedule' => 'Harmonogram',
|
||||
'Start' => 'Początek',
|
||||
'End' => 'Koniec',
|
||||
'Status' => 'Status',
|
||||
'On completion preserve' => 'Po zakończeniu zachować',
|
||||
'Tables and views' => 'Tabele a perspektywy',
|
||||
'Data Length' => 'Długość danych',
|
||||
'Index Length' => 'Długość indeksów',
|
||||
'Data Free' => 'Wolne miejsce',
|
||||
'Collation' => 'Porównywanie',
|
||||
'Analyze' => 'Analizuj',
|
||||
'Optimize' => 'Optymalizacja',
|
||||
'Check' => 'Sprawdź',
|
||||
'Repair' => 'Napraw',
|
||||
'Truncate' => 'Wypróźnij',
|
||||
'Tables have been truncated.' => 'Tabele zostały wypróźnione.',
|
||||
'Rows' => 'Linie',
|
||||
',' => ' ',
|
||||
'Tables have been moved.' => 'Tabele zostały przesunięte',
|
||||
'Move to other database' => 'Przesunąć do innej bazy danych',
|
||||
'Move' => 'Przesunąć',
|
||||
'Engine' => 'Engine',
|
||||
'Save and continue edit' => 'Zapisz i kontynuuj edycję',
|
||||
'original' => 'oryginalny',
|
||||
'%d item(s) have been affected.' => array('Został dotknięty %d rekord.', 'Zostały dotknięte %d rekordy.', 'Zostało dotkniętych %d rekordów.'),
|
||||
'whole result' => 'cały wynik',
|
||||
'Tables have been dropped.' => 'Tabele zostały usunięte.',
|
||||
'Clone' => 'Klonować',
|
||||
'Partition by' => 'Rozdzielić przez',
|
||||
'Partitions' => 'Rozdziały',
|
||||
'Partition name' => 'Nazwa rozdziału',
|
||||
'Values' => 'Wartości',
|
||||
'%d row(s) have been imported.' => array('%d rekord został importowany.', '%d rekordy zostały importowane.', 'Zostało importowanych %d rekordów.'),
|
||||
'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ść',
|
||||
'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',
|
||||
'Last page' => 'Ostatnia strona',
|
||||
'whole result' => 'wybierz wszystkie',
|
||||
'%d byte(s)' => array('%d bajt', '%d bajty', '%d bajtów'),
|
||||
|
||||
'Import' => 'Import',
|
||||
'Show structure' => 'Pokaż całą strukturę',
|
||||
'Select data' => 'Pokaż dane',
|
||||
'Stop on error' => 'Stop w przypadku błędu',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Przekroczono maksymalną liczbę pól. Zwiększ %s i %s.',
|
||||
'anywhere' => 'kdziekolwiek',
|
||||
'%.3f s' => '%.3f s',
|
||||
'$1-$3-$5' => '$6.$4.$1',
|
||||
'[yyyy]-mm-dd' => 'd.m.[rrrr]',
|
||||
'History' => 'Historia',
|
||||
'Variables' => 'Zmienne',
|
||||
'%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
|
||||
'Double click on a value to modify it.' => 'Kliknij podwójnie 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ń',
|
||||
|
||||
'E-mail' => 'E-mail',
|
||||
'From' => 'Nadawca',
|
||||
'Subject' => 'Temat',
|
||||
'Send' => 'Wyślij',
|
||||
'%d e-mail(s) have been sent.' => array('Został wysłany %d e-mail.', 'Zostały wysłane %d e-maile.', 'Zostało wysłanych %d e-mailów.'),
|
||||
'Run file' => 'Uruchomić plik',
|
||||
'Numbers' => 'Numery',
|
||||
'Date and time' => 'Datum i czas',
|
||||
'Strings' => 'Typu string',
|
||||
'Binary' => 'Binarny',
|
||||
'Lists' => 'Listy',
|
||||
'Relations' => 'Relacje',
|
||||
'Maximum allowed file size is %sB.' => 'Maksymalna wielkość pliku to %sB.',
|
||||
'Clear' => 'Wyczyścić',
|
||||
'Editor' => 'Edytor',
|
||||
'Webserver file %s' => 'Plik %s na serweru',
|
||||
'File does not exist.' => 'Plik nieistnieje.',
|
||||
'Permanent login' => 'Logowanie stałe',
|
||||
'%d in total' => '%d w sumie',
|
||||
'Attachments' => 'Załączniki',
|
||||
'System' => 'System',
|
||||
'last' => 'ostatni',
|
||||
'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',
|
||||
'Databases have been dropped.' => 'Baze danych zostały usunięte.',
|
||||
'File exists.' => 'Plik istnieje.',
|
||||
'Double click on a value to modify it.' => 'Kliknij podwójnie by zmienić wartość.',
|
||||
'Increase text length to modify this value.' => 'Aby zmienić wartość to potrzeba powiększyć długość tekstu.',
|
||||
'Use edit link to modify this value.' => 'Użyj linku zmienić by poprawić wartość.',
|
||||
'Alter schema' => 'Zmienić schemat',
|
||||
'Relations' => 'Relacje',
|
||||
|
||||
// reload confirmation in AJAX
|
||||
'Resend POST data?' => 'Wysłać dane ponownie?',
|
||||
|
||||
'Editor' => 'Edytor',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$6.$4.$1',
|
||||
// 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',
|
||||
|
||||
// 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ę',
|
||||
'User types' => 'Typy definiowane użytkownikiem',
|
||||
'Create type' => 'Utwórz definiowany typ',
|
||||
|
||||
// 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',
|
||||
'Search data in tables' => 'Wyszukaj data w tabelach',
|
||||
'From server' => 'Ze serweru',
|
||||
'empty' => 'puste',
|
||||
'now' => 'teraz',
|
||||
);
|
||||
|
273
adminer/lang/ro.inc.php
Normal file
273
adminer/lang/ro.inc.php
Normal file
@@ -0,0 +1,273 @@
|
||||
<?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 and %s.' => 'Numărul maxim de înscrieri disponibile a fost atins. Majorați %s ș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.',
|
||||
'Double click on a value to modify it.' => 'Dublu 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',
|
||||
'Last page' => 'Ultima pagină',
|
||||
'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',
|
||||
'Resend POST data?' => 'Retrimite datele POST?',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
@@ -264,4 +264,10 @@ $translations = array(
|
||||
'Please use one of the extensions %s.' => 'Используйте одно из этих расширений %s.',
|
||||
'now' => 'сейчас',
|
||||
'ltr' => 'ltr',
|
||||
'Tables have been copied.' => 'Таблицы скопированы.',
|
||||
'Copy' => 'Копировать',
|
||||
'Permanent link' => 'Постоянная ссылка',
|
||||
'Edit all' => 'Редактировать всё',
|
||||
'Resend POST data?' => 'Еще раз послать данные POST запроса?',
|
||||
'HH:MM:SS' => 'ЧЧ:ММ:СС',
|
||||
);
|
||||
|
@@ -264,4 +264,10 @@ $translations = array(
|
||||
'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',
|
||||
'Resend POST data?' => 'Znovu poslať POST data?',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
@@ -138,7 +138,7 @@ $translations = array(
|
||||
'Routine' => 'ரொட்டீன்',
|
||||
'Grant' => 'அனுமதியளி',
|
||||
'Revoke' => 'இரத்துச்செய்',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'மிக அதிகமான POST தகவல். தகவலை குறைக்கவும் அல்லது %s வடிவமைப்பை (configuration directive) மாற்றவும்.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'மிக அதிகமான POST தகவல். தகவலை குறைக்கவும் அல்லது %s வடிவமைப்பை (configuration directive) மாற்றவும்.',
|
||||
'Logged as: %s' => 'பயனாளர்: %s',
|
||||
'Move up' => 'மேலே நகர்த்து',
|
||||
'Move down' => 'கீழே நகர்த்து',
|
||||
@@ -264,4 +264,10 @@ $translations = array(
|
||||
'Invalid schema.' => 'அமைப்புமுறை சரியானதல்ல (Invalid Schema).',
|
||||
'Please use one of the extensions %s.' => 'தயவு செய்து ஒரு விரிவினை %s (extension) உபயோகிக்கவும்.',
|
||||
'ltr' => 'ltr',
|
||||
'Tables have been copied.' => 'அட்டவணைகள் நகலெடுக்கப் பட்டது.',
|
||||
'Copy' => 'நகல்',
|
||||
'Permanent link' => 'நிரந்தர இணைப்பு',
|
||||
'Edit all' => 'அனைத்தையும் தொகு',
|
||||
'Resend POST data?' => 'POST data வை மீண்டும் அனுப்பவா?',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
@@ -264,4 +264,10 @@ $translations = array(
|
||||
'Please use one of the extensions %s.' => '請使用下列其中一個 extension %s。',
|
||||
'now' => '現在',
|
||||
'ltr' => 'ltr',
|
||||
'Tables have been copied.' => '表格已經複製',
|
||||
'Copy' => '複製',
|
||||
'Permanent link' => '永久鏈接',
|
||||
'Edit all' => '編輯全部',
|
||||
'Resend POST data?' => '重新發送表單資料?',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
@@ -264,4 +264,10 @@ $translations = array(
|
||||
'Please use one of the extensions %s.' => '请使用这些扩展中的一个:%s。',
|
||||
'now' => '现在',
|
||||
'ltr' => 'ltr',
|
||||
'Tables have been copied.' => '表已复制。',
|
||||
'Copy' => '复制',
|
||||
'Permanent link' => '固定链接',
|
||||
'Edit all' => '编辑全部',
|
||||
'Resend POST data?' => '重新发送 POST 数据?',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
@@ -8,24 +8,31 @@ function adminer_object() {
|
||||
include_once $filename;
|
||||
}
|
||||
|
||||
$plugins = array(
|
||||
// specify enabled plugins here
|
||||
new AdminerDatabaseHide(array('information_schema')),
|
||||
new AdminerDumpZip,
|
||||
new AdminerDumpXml,
|
||||
//~ new AdminerSqlLog("past-" . rtrim(`git describe --tags --abbrev=0`) . ".sql"),
|
||||
//~ 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 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(array(
|
||||
// specify enabled plugins here
|
||||
new AdminerDumpZip,
|
||||
new AdminerDumpXml,
|
||||
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 AdminerFileUpload(""),
|
||||
new AdminerSlugify,
|
||||
new AdminerTranslation,
|
||||
new AdminerForeignSystem,
|
||||
new AdminerEnumOption,
|
||||
));
|
||||
return new AdminerPlugin($plugins);
|
||||
}
|
||||
|
||||
// include original Adminer or Adminer Editor (usually named adminer.php)
|
||||
|
@@ -1,25 +1,25 @@
|
||||
<?php
|
||||
page_header(lang('Privileges'));
|
||||
|
||||
$result = $connection->query("SELECT User, Host FROM mysql.user ORDER BY Host, User");
|
||||
$result = $connection->query("SELECT User, Host FROM mysql." . (DB == "" ? "user" : "db WHERE " . q(DB) . " LIKE Db") . " ORDER BY Host, User");
|
||||
$grant = $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
|
||||
$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 "<thead><tr><th> <th>" . lang('Username') . "<th>" . lang('Server') . "</thead>\n";
|
||||
echo "<thead><tr><th>" . lang('Username') . "<th>" . lang('Server') . "<th> </thead>\n";
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
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";
|
||||
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";
|
||||
}
|
||||
if (!$grant || DB != "") {
|
||||
echo "<tr" . odd() . "><td><input name='user'><td><input name='host' value='localhost'><td><input type='submit' value='" . lang('Edit') . "'>\n";
|
||||
}
|
||||
echo "</table>\n";
|
||||
echo "</form>\n";
|
||||
|
||||
echo '<p><a href="' . h(ME) . 'user=">' . lang('Create user') . "</a>";
|
||||
|
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
$PROCEDURE = $_GET["procedure"];
|
||||
$routine = (isset($_GET["function"]) ? "FUNCTION" : "PROCEDURE");
|
||||
$routine_languages = routine_languages();
|
||||
|
||||
$dropped = false;
|
||||
if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"] && !$_POST["up"] && !$_POST["down"]) {
|
||||
@@ -9,12 +10,12 @@ if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"] && !$_POST["up"]
|
||||
ksort($fields); // enforce fields order
|
||||
foreach ($fields as $field) {
|
||||
if ($field["field"] != "") {
|
||||
$set[] = (in_array($field["inout"], $inout) ? "$field[inout] " : "") . idf_escape($field["field"]) . process_type($field, "CHARACTER SET");
|
||||
$set[] = (ereg("^($inout)\$", $field["inout"]) ? "$field[inout] " : "") . idf_escape($field["field"]) . process_type($field, "CHARACTER SET");
|
||||
}
|
||||
}
|
||||
$dropped = drop_create(
|
||||
"DROP $routine " . idf_escape($PROCEDURE),
|
||||
"CREATE $routine " . idf_escape($_POST["name"]) . " (" . implode(", ", $set) . ")" . (isset($_GET["function"]) ? " RETURNS" . process_type($_POST["returns"], "CHARACTER SET") : "") . "\n$_POST[definition]",
|
||||
"CREATE $routine " . idf_escape(trim($_POST["name"])) . " (" . implode(", ", $set) . ")" . (isset($_GET["function"]) ? " RETURNS" . process_type($_POST["returns"], "CHARACTER SET") : "") . (in_array($_POST["language"], $routine_languages) ? " LANGUAGE $_POST[language]" : "") . rtrim("\n$_POST[definition]", ";") . ";",
|
||||
substr(ME, 0, -1),
|
||||
lang('Routine has been dropped.'),
|
||||
lang('Routine has been altered.'),
|
||||
@@ -40,6 +41,7 @@ if ($_POST) {
|
||||
|
||||
<form action="" method="post" id="form">
|
||||
<p><?php echo lang('Name'); ?>: <input name="name" value="<?php echo h($row["name"]); ?>" maxlength="64">
|
||||
<?php echo ($routine_languages ? lang('Language') . ": " . html_select("language", $routine_languages, $row["language"]) : ""); ?>
|
||||
<table cellspacing="0" class="nowrap">
|
||||
<?php
|
||||
edit_fields($row["fields"], $collations, $routine);
|
||||
@@ -51,8 +53,8 @@ if (isset($_GET["function"])) {
|
||||
</table>
|
||||
<p><?php textarea("definition", $row["definition"]); ?>
|
||||
<p>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
<?php if ($dropped) { ?><input type="hidden" name="dropped" value="1"><?php } ?>
|
||||
<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 } ?>
|
||||
<?php if ($dropped) { ?><input type="hidden" name="dropped" value="1"><?php } ?>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</form>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
if ($_POST && !$error) {
|
||||
if (support("kill") && $_POST && !$error) {
|
||||
$killed = 0;
|
||||
foreach ((array) $_POST["kill"] as $val) {
|
||||
if (queries("KILL " . (+$val))) {
|
||||
@@ -13,23 +13,29 @@ page_header(lang('Process list'), $error);
|
||||
?>
|
||||
|
||||
<form action="" method="post">
|
||||
<table cellspacing="0" onclick="tableClick(event);" class="nowrap">
|
||||
<table cellspacing="0" onclick="tableClick(event);" class="nowrap checkable">
|
||||
<?php
|
||||
// HTML valid because there is always at least one process
|
||||
$i = -1;
|
||||
foreach (get_rows("SHOW FULL PROCESSLIST") as $i => $row) {
|
||||
foreach (process_list() as $i => $row) {
|
||||
if (!$i) {
|
||||
echo "<thead><tr lang='en'><th> <th>" . implode("<th>", array_keys($row)) . "</thead>\n";
|
||||
echo "<thead><tr lang='en'>" . (support("kill") ? "<th> " : "") . "<th>" . implode("<th>", array_keys($row)) . "</thead>\n";
|
||||
}
|
||||
echo "<tr" . odd() . "><td>" . checkbox("kill[]", $row["Id"], 0);
|
||||
echo "<tr" . odd() . ">" . (support("kill") ? "<td>" . checkbox("kill[]", $row["Id"], 0) : "");
|
||||
foreach ($row as $key => $val) {
|
||||
echo "<td>" . ($key == "Info" && $val != "" ? "<code class='jush-$jush'>" . shorten_utf8($val, 100, "</code>") . ' <a href="' . h(ME . ($row["db"] != "" ? "db=" . urlencode($row["db"]) . "&" : "") . "sql=" . urlencode($val)) . '">' . lang('Edit') . '</a>' : nbsp($val));
|
||||
echo "<td>" . (($jush == "sql" ? $key == "Info" && $val != "" : $key == "current_query" && $val != "<IDLE>") ? "<code class='jush-$jush'>" . shorten_utf8($val, 100, "</code>") . ' <a href="' . h(ME . ($row["db"] != "" ? "db=" . urlencode($row["db"]) . "&" : "") . "sql=" . urlencode($val)) . '">' . lang('Edit') . '</a>' : nbsp($val));
|
||||
}
|
||||
echo "\n";
|
||||
}
|
||||
?>
|
||||
</table>
|
||||
<p><?php echo ($i + 1) . "/" . lang('%d in total', $connection->result("SELECT @@max_connections")); ?>
|
||||
<script type='text/javascript'>tableCheck();</script>
|
||||
<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="submit" value="<?php echo lang('Kill'); ?>">
|
||||
</form>
|
||||
|
@@ -1,11 +1,11 @@
|
||||
<?php
|
||||
page_header(lang('Database schema'), "", array(), DB);
|
||||
page_header(lang('Database schema'), "", array(), DB . ($_GET["ns"] ? ".$_GET[ns]" : ""));
|
||||
|
||||
$table_pos = array();
|
||||
$table_pos_js = array();
|
||||
// saved in one cookie because there is a limit of 20 cookies per domain
|
||||
$name = "adminer_schema";
|
||||
preg_match_all('~([^:]+):([-0-9.]+)x([-0-9.]+)(_|$)~', ($_GET["schema"] ? $_GET["schema"] : $_COOKIE[($_COOKIE["$name-" . DB] ? "$name-" . DB : $name)]), $matches, PREG_SET_ORDER); // $_COOKIE["adminer_schema"] was used before 3.2.0 //! ':' in table name
|
||||
$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.]+)(_|$)~', $SCHEMA, $matches, PREG_SET_ORDER);
|
||||
foreach ($matches as $i => $match) {
|
||||
$table_pos[$match[1]] = array($match[2], $match[3]);
|
||||
$table_pos_js[] = "\n\t'" . js_escape($match[1]) . "': [ $match[2], $match[3] ]";
|
||||
@@ -16,23 +16,23 @@ $base_left = -1;
|
||||
$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))
|
||||
$lefts = array(); // float => bool
|
||||
foreach (table_status() as $row) {
|
||||
if (!isset($row["Engine"])) { // view
|
||||
foreach (table_status() as $table_status) {
|
||||
if (!isset($table_status["Engine"])) { // view
|
||||
continue;
|
||||
}
|
||||
$pos = 0;
|
||||
$schema[$row["Name"]]["fields"] = array();
|
||||
foreach (fields($row["Name"]) as $name => $field) {
|
||||
$schema[$table_status["Name"]]["fields"] = array();
|
||||
foreach (fields($table_status["Name"]) as $name => $field) {
|
||||
$pos += 1.25;
|
||||
$field["pos"] = $pos;
|
||||
$schema[$row["Name"]]["fields"][$name] = $field;
|
||||
$schema[$table_status["Name"]]["fields"][$name] = $field;
|
||||
}
|
||||
$schema[$row["Name"]]["pos"] = ($table_pos[$row["Name"]] ? $table_pos[$row["Name"]] : array($top, 0));
|
||||
foreach ($adminer->foreignKeys($row["Name"]) as $val) {
|
||||
$schema[$table_status["Name"]]["pos"] = ($table_pos[$table_status["Name"]] ? $table_pos[$table_status["Name"]] : array($top, 0));
|
||||
foreach ($adminer->foreignKeys($table_status["Name"]) as $val) {
|
||||
if (!$val["db"]) {
|
||||
$left = $base_left;
|
||||
if ($table_pos[$row["Name"]][1] || $table_pos[$val["table"]][1]) {
|
||||
$left = min(floatval($table_pos[$row["Name"]][1]), floatval($table_pos[$val["table"]][1])) - 1;
|
||||
if ($table_pos[$table_status["Name"]][1] || $table_pos[$val["table"]][1]) {
|
||||
$left = min(floatval($table_pos[$table_status["Name"]][1]), floatval($table_pos[$val["table"]][1])) - 1;
|
||||
} else {
|
||||
$base_left -= .1;
|
||||
}
|
||||
@@ -40,19 +40,19 @@ foreach (table_status() as $row) {
|
||||
// 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"];
|
||||
$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[$row["Name"]]["pos"][0] + 2.5 + $pos);
|
||||
$top = max($top, $schema[$table_status["Name"]]["pos"][0] + 2.5 + $pos);
|
||||
}
|
||||
|
||||
?>
|
||||
<div id="schema" style="height: <?php echo $top; ?>em;">
|
||||
<div id="schema" style="height: <?php echo $top; ?>em;" onselectstart="return false;">
|
||||
<script type="text/javascript">
|
||||
tablePos = {<?php echo implode(",", $table_pos_js) . "\n"; ?>};
|
||||
em = document.getElementById('schema').offsetHeight / <?php echo $top; ?>;
|
||||
var tablePos = {<?php echo implode(",", $table_pos_js) . "\n"; ?>};
|
||||
var em = document.getElementById('schema').offsetHeight / <?php echo $top; ?>;
|
||||
document.onmousemove = schemaMousemove;
|
||||
document.onmouseup = function (ev) {
|
||||
schemaMouseup(ev, '<?php echo js_escape(DB); ?>');
|
||||
@@ -61,17 +61,17 @@ document.onmouseup = function (ev) {
|
||||
<?php
|
||||
foreach ($schema as $name => $table) {
|
||||
echo "<div class='table' style='top: " . $table["pos"][0] . "em; left: " . $table["pos"][1] . "em;' onmousedown='schemaMousedown(this, event);'>";
|
||||
echo '<a href="' . h(ME) . 'table=' . urlencode($name) . '"><b>' . h($name) . "</b></a><br>\n";
|
||||
echo '<a href="' . h(ME) . 'table=' . urlencode($name) . '"><b>' . h($name) . "</b></a>";
|
||||
foreach ($table["fields"] as $field) {
|
||||
$val = '<span' . type_class($field["type"]) . ' title="' . h($field["full_type"] . ($field["null"] ? " NULL" : '')) . '">' . h($field["field"]) . '</span>';
|
||||
echo ($field["primary"] ? "<i>$val</i>" : $val) . "<br>\n";
|
||||
echo "<br>" . ($field["primary"] ? "<i>$val</i>" : $val);
|
||||
}
|
||||
foreach ((array) $table["references"] as $target_name => $refs) {
|
||||
foreach ($refs as $left => $ref) {
|
||||
$left1 = $left - $table_pos[$name][1];
|
||||
$i = 0;
|
||||
foreach ($ref[0] as $source) {
|
||||
echo "<div class='references' title='" . h($target_name) . "' id='refs$left-" . ($i++) . "' style='left: $left1" . "em; top: " . $table["fields"][$source]["pos"] . "em; padding-top: .5em;'><div style='border-top: 1px solid Gray; width: " . (-$left1) . "em;'></div></div>\n";
|
||||
echo "\n<div class='references' title='" . h($target_name) . "' id='refs$left-" . ($i++) . "' style='left: $left1" . "em; top: " . $table["fields"][$source]["pos"] . "em; padding-top: .5em;'><div style='border-top: 1px solid Gray; width: " . (-$left1) . "em;'></div></div>";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -80,11 +80,11 @@ foreach ($schema as $name => $table) {
|
||||
$left1 = $left - $table_pos[$name][1];
|
||||
$i = 0;
|
||||
foreach ($columns as $target) {
|
||||
echo "<div class='references' title='" . h($target_name) . "' id='refd$left-" . ($i++) . "' style='left: $left1" . "em; top: " . $table["fields"][$target]["pos"] . "em; height: 1.25em; background: url(../adminer/static/arrow.gif) no-repeat right center;'><div style='height: .5em; border-bottom: 1px solid Gray; width: " . (-$left1) . "em;'></div></div>\n";
|
||||
echo "\n<div class='references' title='" . h($target_name) . "' id='refd$left-" . ($i++) . "' style='left: $left1" . "em; top: " . $table["fields"][$target]["pos"] . "em; height: 1.25em; background: url(../adminer/static/arrow.gif) no-repeat right center;'><div style='height: .5em; border-bottom: 1px solid Gray; width: " . (-$left1) . "em;'></div></div>";
|
||||
}
|
||||
}
|
||||
}
|
||||
echo "</div>\n";
|
||||
echo "\n</div>\n";
|
||||
}
|
||||
foreach ($schema as $name => $table) {
|
||||
foreach ((array) $table["references"] as $target_name => $refs) {
|
||||
@@ -103,4 +103,4 @@ foreach ($schema as $name => $table) {
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<p><a href="<?php echo h($_SERVER["REQUEST_URI"]); ?>" id="schema-link">#</a>
|
||||
<p><a href="<?php echo h(ME . "schema=" . urlencode($SCHEMA)); ?>" id="schema-link"><?php echo lang('Permanent link'); ?></a>
|
||||
|
@@ -4,11 +4,12 @@ if ($_POST && !$error) {
|
||||
if ($_POST["drop"]) {
|
||||
query_redirect("DROP SCHEMA " . idf_escape($_GET["ns"]), $link, lang('Schema has been dropped.'));
|
||||
} else {
|
||||
$link .= urlencode($_POST["name"]);
|
||||
$name = trim($_POST["name"]);
|
||||
$link .= urlencode($name);
|
||||
if ($_GET["ns"] == "") {
|
||||
query_redirect("CREATE SCHEMA " . idf_escape($_POST["name"]), $link, lang('Schema has been created.'));
|
||||
} elseif ($_GET["ns"] != $_POST["name"]) {
|
||||
query_redirect("ALTER SCHEMA " . idf_escape($_GET["ns"]) . " RENAME TO " . idf_escape($_POST["name"]), $link, lang('Schema has been altered.')); //! sp_rename in MS SQL
|
||||
query_redirect("CREATE SCHEMA " . idf_escape($name), $link, lang('Schema has been created.'));
|
||||
} elseif ($_GET["ns"] != $name) {
|
||||
query_redirect("ALTER SCHEMA " . idf_escape($_GET["ns"]) . " RENAME TO " . idf_escape($name), $link, lang('Schema has been altered.')); //! sp_rename in MS SQL
|
||||
} else {
|
||||
redirect($link);
|
||||
}
|
||||
@@ -17,19 +18,20 @@ if ($_POST && !$error) {
|
||||
|
||||
page_header($_GET["ns"] != "" ? lang('Alter schema') : lang('Create schema'), $error);
|
||||
|
||||
$row = array("name" => $_GET["ns"]);
|
||||
if ($_POST) {
|
||||
$row = $_POST;
|
||||
$row = $_POST;
|
||||
if (!$row) {
|
||||
$row = array("name" => $_GET["ns"]);
|
||||
}
|
||||
?>
|
||||
|
||||
<form action="" method="post">
|
||||
<p><input name="name" value="<?php echo h($row["name"]); ?>">
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
<p><input id="name" name="name" value="<?php echo h($row["name"]); ?>">
|
||||
<script type='text/javascript'>document.getElementById('name').focus();</script>
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||
<?php
|
||||
if ($_GET["ns"] != "") {
|
||||
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm() . ">\n";
|
||||
}
|
||||
?>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</form>
|
||||
|
@@ -3,21 +3,21 @@ 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 $row) {
|
||||
$id = js_escape($row["Name"]);
|
||||
json_row("Comment-$id", nbsp($row["Comment"]));
|
||||
if (!is_view($row)) {
|
||||
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($row[$key]));
|
||||
json_row("$key-$id", nbsp($table_status[$key]));
|
||||
}
|
||||
foreach ($sums + array("Auto_increment" => 0, "Rows" => 0) as $key => $val) {
|
||||
if ($row[$key] != "") {
|
||||
$val = number_format($row[$key], 0, '.', lang(','));
|
||||
json_row("$key-$id", ($key == "Rows" && $row["Engine"] == "InnoDB" && $val ? "~ $val" : $val));
|
||||
if ($table_status[$key] != "") {
|
||||
$val = number_format($table_status[$key], 0, '.', lang(','));
|
||||
json_row("$key-$id", ($key == "Rows" && $table_status["Engine"] == "InnoDB" && $val ? "~ $val" : $val));
|
||||
if (isset($sums[$key])) {
|
||||
$sums[$key] += ($row["Engine"] != "InnoDB" || $key != "Data_free" ? $row[$key] : 0);
|
||||
$sums[$key] += ($table_status["Engine"] != "InnoDB" || $key != "Data_free" ? $table_status[$key] : 0);
|
||||
}
|
||||
} elseif (array_key_exists($key, $row)) {
|
||||
} elseif (array_key_exists($key, $table_status)) {
|
||||
json_row("$key-$id");
|
||||
}
|
||||
}
|
||||
@@ -28,7 +28,7 @@ if ($_GET["script"] == "db") {
|
||||
}
|
||||
json_row("");
|
||||
} else { // connect
|
||||
foreach (count_tables(get_databases()) as $db => $val) {
|
||||
foreach (count_tables($adminer->databases()) as $db => $val) {
|
||||
json_row("tables-" . js_escape($db), $val);
|
||||
}
|
||||
json_row("");
|
||||
|
@@ -7,6 +7,7 @@ $foreign_keys = column_foreign_keys($TABLE);
|
||||
if ($table_status["Oid"] == "t") {
|
||||
$indexes[] = array("type" => "PRIMARY", "columns" => array("oid"));
|
||||
}
|
||||
parse_str($_COOKIE["adminer_import"], $adminer_import);
|
||||
|
||||
$rights = array(); // privilege => 0
|
||||
$columns = array(); // selectable columns
|
||||
@@ -47,13 +48,13 @@ if ($_POST && !$error) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
foreach ($select as $key => $val) {
|
||||
$val = $_GET["columns"][$key];
|
||||
if (!$val["fun"]) {
|
||||
unset($unselected[$val["col"]]);
|
||||
foreach ((array) $unselected as $key => $val) {
|
||||
if (in_array(idf_escape($key), $select)) {
|
||||
unset($unselected[$key]);
|
||||
}
|
||||
}
|
||||
if ($_POST["export"]) {
|
||||
cookie("adminer_import", "output=" . urlencode($_POST["output"]) . "&format=" . urlencode($_POST["format"]));
|
||||
dump_headers($TABLE);
|
||||
$adminer->dumpTable($TABLE, "");
|
||||
if (!is_array($_POST["check"]) || $unselected === array()) {
|
||||
@@ -141,7 +142,8 @@ if ($_POST && !$error) {
|
||||
queries_redirect(remove_from_uri(), lang('%d item(s) have been affected.', $affected), $result);
|
||||
}
|
||||
} elseif (is_string($file = get_file("csv_file", true))) {
|
||||
$file = preg_replace("~^\xEF\xBB\xBF~", '', $file); //! character set
|
||||
//! character set
|
||||
cookie("adminer_import", "output=" . urlencode($adminer_import["output"]) . "&format=" . urlencode($_POST["separator"]));
|
||||
$result = true;
|
||||
$cols = array_keys($fields);
|
||||
preg_match_all('~(?>"[^"]*"|[^"\\r\\n]+)+~', $file, $matches);
|
||||
@@ -207,7 +209,7 @@ if (!$columns) {
|
||||
$adminer->selectOrderPrint($order, $columns, $indexes);
|
||||
$adminer->selectLimitPrint($limit);
|
||||
$adminer->selectLengthPrint($text_length);
|
||||
$adminer->selectActionPrint($text_length);
|
||||
$adminer->selectActionPrint();
|
||||
echo "</form>\n";
|
||||
|
||||
$page = $_GET["page"];
|
||||
@@ -230,6 +232,9 @@ if (!$columns) {
|
||||
echo "<form action='' method='post' enctype='multipart/form-data'>\n";
|
||||
$rows = array();
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
if ($page && $jush == "oracle") {
|
||||
unset($row["RNUM"]);
|
||||
}
|
||||
$rows[] = $row;
|
||||
}
|
||||
// use count($rows) without LIMIT, COUNT(*) without grouping, FOUND_ROWS otherwise (slowest)
|
||||
@@ -245,7 +250,7 @@ if (!$columns) {
|
||||
} else {
|
||||
$backward_keys = $adminer->backwardKeys($TABLE, $table_name);
|
||||
|
||||
echo "<table cellspacing='0' class='nowrap' onclick='tableClick(event);' onkeydown='return editingKeydown(event);'>\n";
|
||||
echo "<table cellspacing='0' class='nowrap checkable' onclick='tableClick(event);' onkeydown='return editingKeydown(event);'>\n";
|
||||
echo "<thead><tr>" . (!$group && $select ? "" : "<td><input type='checkbox' id='all-page' onclick='formCheck(this, /check/);'> <a href='" . h($_GET["modify"] ? remove_from_uri("modify") : $_SERVER["REQUEST_URI"] . "&modify=1") . "'>" . lang('edit') . "</a>");
|
||||
$names = array();
|
||||
$functions = array();
|
||||
@@ -254,13 +259,15 @@ if (!$columns) {
|
||||
foreach ($rows[0] as $key => $val) {
|
||||
if ($table_status["Oid"] != "t" || $key != "oid") {
|
||||
$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, $rank) : "*");
|
||||
if ($name != "") {
|
||||
$rank++;
|
||||
$names[$key] = $name;
|
||||
$column = idf_escape($key);
|
||||
echo '<th><a href="' . h(remove_from_uri('(order|desc)[^=]*|page') . '&order%5B0%5D=' . urlencode($key) . ($order[0] == $column || $order[0] == $key || (!$order && $group[0] == $column) ? '&desc%5B0%5D=1' : '')) . '">' . apply_sql_function($val["fun"], $name) . "</a>"; // $order[0] == $key - COUNT(*) //! columns looking like functions
|
||||
echo '<th><a href="' . h(remove_from_uri('(order|desc)[^=]*|page') . '&order%5B0%5D=' . urlencode($key)
|
||||
. ($order[0] == $column || $order[0] == $key || (!$order && count($group) < count($select) && $group[0] == $column) ? '&desc%5B0%5D=1' : '') // $order[0] == $key - COUNT(*)
|
||||
) . '">' . (!$select || $val ? apply_sql_function($val["fun"], $name) : h(current($select))) . "</a>"; //! columns looking like functions
|
||||
}
|
||||
$functions[$key] = $val["fun"];
|
||||
next($select);
|
||||
@@ -349,7 +356,7 @@ if (!$columns) {
|
||||
$editable = is_utf8($val) && $rows[$n][$key] == $row[$key] && !$functions[$key];
|
||||
$text = ereg('text|lob', $field["type"]);
|
||||
echo (($_GET["modify"] && $editable) || isset($value)
|
||||
? "<td>" . ($text ? "<textarea name='$id' cols='30' rows='" . (substr_count($row[$key], "\n") + 1) . "' onkeypress='return textareaKeypress(this, event);'>$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' ondblclick=\"" . ($editable ? "selectDblClick(this, event" . ($long ? ", 2" : ($text ? ", 1" : "")) . ")" : "alert('" . h(lang('Use edit link to modify this value.')) . "')") . ";\">" . $adminer->selectVal($val, $link, $field)
|
||||
);
|
||||
}
|
||||
@@ -361,17 +368,16 @@ if (!$columns) {
|
||||
echo "</tr>\n"; // close to allow white-space: pre
|
||||
}
|
||||
echo "</table>\n";
|
||||
echo (!$group && $select ? "" : "<script type='text/javascript'>tableCheck();</script>\n");
|
||||
}
|
||||
|
||||
parse_str($_COOKIE["adminer_export"], $adminer_export);
|
||||
|
||||
if ($rows || $page) {
|
||||
$exact_count = true;
|
||||
if ($_GET["page"] != "last" && +$limit && count($group) >= count($select) && ($found_rows >= $limit || $page)) {
|
||||
$found_rows = $table_status["Rows"];
|
||||
if (!isset($found_rows) || $where || 2 * $page * $limit > $found_rows || ($table_status["Engine"] == "InnoDB" && $found_rows < 1e4)) {
|
||||
$found_rows = found_rows($table_status, $where);
|
||||
if ($found_rows < max(1e4, 2 * ($page + 1) * $limit)) {
|
||||
// slow with big tables
|
||||
ob_flush();
|
||||
ob_flush(); //! doesn't work with AJAX
|
||||
flush();
|
||||
$found_rows = $connection->result("SELECT COUNT(*) FROM " . table($TABLE) . ($where ? " WHERE " . implode(" AND ", $where) : ""));
|
||||
} else {
|
||||
@@ -391,28 +397,34 @@ if (!$columns) {
|
||||
}
|
||||
echo " (" . ($exact_count ? "" : "~ ") . lang('%d row(s)', $found_rows) . ") " . checkbox("all", 1, 0, lang('whole result')) . "\n";
|
||||
|
||||
if (!information_schema(DB)) {
|
||||
if ($adminer->selectCommandPrint()) {
|
||||
?>
|
||||
<fieldset><legend><?php echo lang('Edit'); ?></legend><div>
|
||||
<input type="submit" id="save" value="<?php echo lang('Save'); ?>" title="<?php echo lang('Double click on a value to modify it.'); ?>">
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>"<?php echo ($_GET["modify"] ? '' : ' title="' . lang('Double click on a value to modify it.') . '" class="jsonly"'); ?>>
|
||||
<input type="submit" name="edit" value="<?php echo lang('Edit'); ?>">
|
||||
<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/)) + ')');">
|
||||
</div></fieldset>
|
||||
<?php
|
||||
}
|
||||
print_fieldset("export", lang('Export'));
|
||||
$output = $adminer->dumpOutput();
|
||||
echo ($output ? html_select("output", $output, $adminer_export["output"]) . " " : "");
|
||||
echo html_select("format", $adminer->dumpFormat(), $adminer_export["format"]);
|
||||
echo " <input type='submit' name='export' value='" . lang('Export') . "' onclick='eventStop(event);'>\n";
|
||||
$format = $adminer->dumpFormat();
|
||||
if ($format) {
|
||||
print_fieldset("export", lang('Export'));
|
||||
$output = $adminer->dumpOutput();
|
||||
echo ($output ? html_select("output", $output, $adminer_import["output"]) . " " : "");
|
||||
echo html_select("format", $format, $adminer_import["format"]);
|
||||
echo " <input type='submit' name='export' value='" . lang('Export') . "' onclick='eventStop(event);'>\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 "<input type='hidden' name='token' value='$token'>\n";
|
||||
echo "</div></fieldset>\n";
|
||||
}
|
||||
print_fieldset("import", lang('Import'), !$rows);
|
||||
echo "<input type='hidden' name='token' value='$token'><input type='file' name='csv_file'> ";
|
||||
echo html_select("separator", array("csv" => "CSV,", "csv;" => "CSV;", "tsv" => "TSV"), $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);
|
||||
|
||||
|
@@ -3,12 +3,13 @@ $SEQUENCE = $_GET["sequence"];
|
||||
|
||||
if ($_POST && !$error) {
|
||||
$link = substr(ME, 0, -1);
|
||||
$name = trim($_POST["name"]);
|
||||
if ($_POST["drop"]) {
|
||||
query_redirect("DROP SEQUENCE " . idf_escape($SEQUENCE), $link, lang('Sequence has been dropped.'));
|
||||
} elseif ($SEQUENCE == "") {
|
||||
query_redirect("CREATE SEQUENCE " . idf_escape($_POST["name"]), $link, lang('Sequence has been created.'));
|
||||
} elseif ($SEQUENCE != $_POST["name"]) {
|
||||
query_redirect("ALTER SEQUENCE " . idf_escape($SEQUENCE) . " RENAME TO " . idf_escape($_POST["name"]), $link, lang('Sequence has been altered.'));
|
||||
query_redirect("CREATE SEQUENCE " . idf_escape($name), $link, lang('Sequence has been created.'));
|
||||
} elseif ($SEQUENCE != $name) {
|
||||
query_redirect("ALTER SEQUENCE " . idf_escape($SEQUENCE) . " RENAME TO " . idf_escape($name), $link, lang('Sequence has been altered.'));
|
||||
} else {
|
||||
redirect($link);
|
||||
}
|
||||
@@ -16,19 +17,19 @@ if ($_POST && !$error) {
|
||||
|
||||
page_header($SEQUENCE != "" ? lang('Alter sequence') . ": " . h($SEQUENCE) : lang('Create sequence'), $error);
|
||||
|
||||
$row = array("name" => $SEQUENCE);
|
||||
if ($_POST) {
|
||||
$row = $_POST;
|
||||
$row = $_POST;
|
||||
if (!$row) {
|
||||
$row = array("name" => $SEQUENCE);
|
||||
}
|
||||
?>
|
||||
|
||||
<form action="" method="post">
|
||||
<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'); ?>">
|
||||
<?php
|
||||
if ($SEQUENCE != "") {
|
||||
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm() . ">\n";
|
||||
}
|
||||
?>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</form>
|
||||
|
@@ -25,17 +25,20 @@ if (!$error && $_POST) {
|
||||
: "compress.bzip2://adminer.sql.bz2"
|
||||
)), "rb");
|
||||
$query = ($fp ? fread($fp, 1e6) : false);
|
||||
} elseif ($_FILES && $_FILES["sql_file"]["error"] != 4) { // 4 - UPLOAD_ERR_NO_FILE
|
||||
} elseif ($_FILES && $_FILES["sql_file"]["error"] != UPLOAD_ERR_NO_FILE) {
|
||||
$query = get_file("sql_file", true);
|
||||
}
|
||||
if (is_string($query)) { // get_file() returns error as number, fread() as false
|
||||
if (function_exists('memory_get_usage')) {
|
||||
@ini_set("memory_limit", 2 * strlen($query) + memory_get_usage() + 8e6); // @ - may be disabled, 2 - substr and trim, 8e6 - other variables
|
||||
@ini_set("memory_limit", max(ini_bytes("memory_limit"), 2 * strlen($query) + memory_get_usage() + 8e6)); // @ - may be disabled, 2 - substr and trim, 8e6 - other variables
|
||||
}
|
||||
if ($query != "" && strlen($query) < 1e6 && (!$history || end($history) != $query)) { // don't add repeated and big queries
|
||||
$history[] = $query;
|
||||
if ($query != "" && strlen($query) < 1e6) { // don't add big queries
|
||||
$q = $query . (ereg(";[ \t\r\n]*\$", $query) ? "" : ";"); //! doesn't work with DELIMITER |
|
||||
if (!$history || end($history) != $q) { // no repeated queries
|
||||
$history[] = $q;
|
||||
}
|
||||
}
|
||||
$space = "(\\s|/\\*.*\\*/|(#|-- )[^\n]*\n|--\n)";
|
||||
$space = "(?:\\s|/\\*.*\\*/|(?:#|-- )[^\n]*\n|--\n)";
|
||||
if (!ini_bool("session.use_cookies")) {
|
||||
session_write_close();
|
||||
}
|
||||
@@ -48,33 +51,35 @@ if (!$error && $_POST) {
|
||||
}
|
||||
$commands = 0;
|
||||
$errors = array();
|
||||
$parse = '[\'`"]' . ($jush == "pgsql" ? '|\\$[^$]*\\$' : ($jush == "mssql" || $jush == "sqlite" ? '|\\[' : '')) . '|/\\*|-- |#'; //! ` and # not everywhere
|
||||
$total_start = explode(" ", microtime());
|
||||
$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 != "") {
|
||||
if (!$offset && $jush == "sql" && preg_match('~^\\s*DELIMITER\\s+(.+)~i', $query, $match)) {
|
||||
if (!$offset && preg_match("~^$space*DELIMITER\\s+(.+)~i", $query, $match)) {
|
||||
$delimiter = $match[1];
|
||||
$query = substr($query, strlen($match[0]));
|
||||
} else {
|
||||
preg_match('(' . preg_quote($delimiter) . "|$parse|\$)", $query, $match, PREG_OFFSET_CAPTURE, $offset); // should always match
|
||||
preg_match('(' . preg_quote($delimiter) . "|$parse)", $query, $match, PREG_OFFSET_CAPTURE, $offset); // should always match
|
||||
$found = $match[0][0];
|
||||
$offset = $match[0][1] + strlen($found);
|
||||
if (!$found && $fp && !feof($fp)) {
|
||||
$query .= fread($fp, 1e5);
|
||||
} else {
|
||||
$offset = $match[0][1] + strlen($found);
|
||||
if (!$found && rtrim($query) == "") {
|
||||
break;
|
||||
}
|
||||
if ($found && $found != $delimiter) { // find matching quote or comment end
|
||||
while (preg_match('(' . ($found == '/*' ? '\\*/' : ($found == '[' ? ']' : (ereg('^-- |^#', $found) ? "\n" : preg_quote($found) . "|\\\\."))) . '|$)s', $query, $match, PREG_OFFSET_CAPTURE, $offset)) { //! respect sql_mode NO_BACKSLASH_ESCAPES
|
||||
$s = $match[0][0];
|
||||
$offset = $match[0][1] + strlen($s);
|
||||
if (!$s && $fp && !feof($fp)) {
|
||||
$query .= fread($fp, 1e6);
|
||||
} elseif ($s[0] != "\\") {
|
||||
break;
|
||||
$query .= fread($fp, 1e5);
|
||||
} else {
|
||||
$offset = $match[0][1] + strlen($s);
|
||||
if ($s[0] != "\\") {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else { // end of a query
|
||||
@@ -87,62 +92,57 @@ if (!$error && $_POST) {
|
||||
ob_flush();
|
||||
flush(); // can take a long time - show the running query
|
||||
}
|
||||
$start = explode(" ", microtime()); // microtime(true) is available since PHP 5
|
||||
$start = microtime(); // microtime(true) is available since PHP 5
|
||||
//! don't allow changing of character_set_results, convert encoding of displayed query
|
||||
if ($connection->multi_query($q)) {
|
||||
if (is_object($connection2) && preg_match("~^$space*(USE)\\b~isU", $q)) {
|
||||
$connection2->query($q);
|
||||
}
|
||||
do {
|
||||
$result = $connection->store_result();
|
||||
$end = explode(" ", 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
|
||||
if (!is_object($result)) {
|
||||
if (preg_match("~^$space*(CREATE|DROP|ALTER)$space+(DATABASE|SCHEMA)\\b~isU", $q)) {
|
||||
restart_session();
|
||||
set_session("dbs", null); // clear cache
|
||||
session_write_close();
|
||||
}
|
||||
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";
|
||||
}
|
||||
} else {
|
||||
if ($_POST["only_errors"]) {
|
||||
echo $print;
|
||||
$print = "";
|
||||
}
|
||||
select($result, $connection2);
|
||||
if ($connection->multi_query($q) && is_object($connection2) && preg_match("~^$space*USE\\b~isU", $q)) {
|
||||
$connection2->query($q);
|
||||
}
|
||||
do {
|
||||
$result = $connection->store_result();
|
||||
$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
|
||||
if ($connection->error) {
|
||||
echo ($_POST["only_errors"] ? $print : "");
|
||||
echo "<p class='error'>" . lang('Error in query') . ": " . error() . "\n";
|
||||
$errors[] = " <a href='#sql-$commands'>$commands</a>";
|
||||
if ($_POST["error_stops"]) {
|
||||
break 2;
|
||||
}
|
||||
} elseif (is_object($result)) {
|
||||
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;
|
||||
$id = "export-$commands";
|
||||
$export = ", <a href='#$id' onclick=\"return !toggle('$id');\">" . lang('Export') . "</a><span id='$id' class='hidden'>: "
|
||||
. html_select("output", $adminer->dumpOutput(), $adminer_export["output"]) . " "
|
||||
. html_select("format", $dump_format, $adminer_export["format"])
|
||||
. " <input type='hidden' name='query' value='" . h($q) . "' />"
|
||||
. " <input type='hidden' name='token' value='$token' />"
|
||||
. " <input type='submit' name='export' value='" . lang('Export') . "' onclick='eventStop(event);'></span>"
|
||||
. "<input type='hidden' name='query' value='" . h($q) . "'>"
|
||||
. " <input type='submit' name='export' value='" . lang('Export') . "' onclick='eventStop(event);'><input type='hidden' name='token' value='$token'></span>\n"
|
||||
;
|
||||
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\n";
|
||||
echo ", <a href='#$id' onclick=\"return !toggle('$id');\">EXPLAIN</a>$export";
|
||||
echo "<div id='$id' class='hidden'>\n";
|
||||
select($explain, $connection2, ($jush == "sql" ? "http://dev.mysql.com/doc/refman/" . substr($connection->server_info, 0, 3) . "/en/explain-output.html#" : ""));
|
||||
select($explain, $connection2, ($jush == "sql" ? "http://dev.mysql.com/doc/refman/" . substr($connection->server_info, 0, 3) . "/en/explain-output.html#explain_" : ""));
|
||||
echo "</div>\n";
|
||||
} else {
|
||||
echo "$export\n";
|
||||
echo $export;
|
||||
}
|
||||
echo "</form>\n";
|
||||
}
|
||||
$start = $end;
|
||||
} while ($connection->next_result());
|
||||
} elseif ($connection->error) {
|
||||
echo ($_POST["only_errors"] ? $print : "");
|
||||
echo "<p class='error'>" . lang('Error in query') . ": " . error() . "\n";
|
||||
$errors[] = " <a href='#sql-$commands'>$commands</a>";
|
||||
if ($_POST["error_stops"]) {
|
||||
break;
|
||||
} else {
|
||||
if (preg_match("~^$space*(CREATE|DROP|ALTER)$space+(DATABASE|SCHEMA)\\b~isU", $q)) {
|
||||
restart_session();
|
||||
set_session("dbs", null); // clear cache
|
||||
session_write_close();
|
||||
}
|
||||
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";
|
||||
}
|
||||
}
|
||||
}
|
||||
$start = $end;
|
||||
} while ($connection->next_result());
|
||||
$query = substr($query, $offset);
|
||||
$offset = 0;
|
||||
}
|
||||
@@ -152,7 +152,7 @@ if (!$error && $_POST) {
|
||||
if ($empty) {
|
||||
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, explode(" ", microtime())) . "\n";
|
||||
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";
|
||||
}
|
||||
@@ -163,7 +163,7 @@ if (!$error && $_POST) {
|
||||
}
|
||||
?>
|
||||
|
||||
<form action="" method="post" enctype="multipart/form-data">
|
||||
<form action="" method="post" enctype="multipart/form-data" id="form">
|
||||
<p><?php
|
||||
$q = $_GET["sql"]; // overwrite $q from if ($_POST) to save memory
|
||||
if ($_POST) {
|
||||
@@ -175,17 +175,20 @@ if ($_POST) {
|
||||
}
|
||||
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"> (< ' . ini_get("upload_max_filesize") . 'B)' : lang('File uploads are disabled.')); // ignore post_max_size because it is for all form fields together and bytes computing would be necessary
|
||||
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>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
<input type="submit" value="<?php echo lang('Execute'); ?>" title="Ctrl+Enter">
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
<?php
|
||||
echo checkbox("error_stops", 1, $_POST["error_stops"], lang('Stop on error')) . "\n";
|
||||
echo checkbox("only_errors", 1, $_POST["only_errors"], lang('Show only errors')) . "\n";
|
||||
|
||||
print_fieldset("webfile", lang('From server'), $_POST["webfile"]);
|
||||
print_fieldset("webfile", lang('From server'), $_POST["webfile"], "document.getElementById('form')['only_errors'].checked = true; ");
|
||||
$compress = array();
|
||||
foreach (array("gz" => "zlib", "bz2" => "bz2") as $key => $val) {
|
||||
if (extension_loaded($val)) {
|
||||
@@ -203,7 +206,7 @@ if ($history) {
|
||||
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 "<input type='submit' name='clear' value='" . lang('Clear') . "'>\n";
|
||||
echo "<a href='" . h(ME . "sql=&history=all") . "'>" . lang('Edit') . "</a>\n";
|
||||
echo "<a href='" . h(ME . "sql=&history=all") . "'>" . lang('Edit all') . "</a>\n";
|
||||
echo "</div></fieldset>\n";
|
||||
}
|
||||
?>
|
||||
|
@@ -17,10 +17,13 @@ p { margin: .8em 20px 0 0; }
|
||||
img { vertical-align: middle; border: 0; }
|
||||
td img { max-width: 200px; max-height: 200px; }
|
||||
code { background: #eee; }
|
||||
tr:hover td, tr:hover th { background: #ddf; }
|
||||
tbody tr:hover td, tbody tr:hover th { background: #eee; }
|
||||
pre { margin: 1em 0 0; }
|
||||
input[type=image] { vertical-align: middle; }
|
||||
.loading { cursor: progress; }
|
||||
.loading #loader { display: inline; }
|
||||
.version { color: #777; font-size: 67%; }
|
||||
.js .hidden { display: none; }
|
||||
.js .hidden, .nojs .jsonly { display: none; }
|
||||
.nowrap td, .nowrap th, td.nowrap { white-space: pre; }
|
||||
.wrap td { white-space: normal; }
|
||||
.error { color: red; background: #fee; }
|
||||
@@ -32,6 +35,7 @@ pre { margin: 1em 0 0; }
|
||||
.enum { color: #007F7F; }
|
||||
.binary { color: red; }
|
||||
.odd td { background: #F5F5F5; }
|
||||
.js .checked td, .js .checked th { background: #ddf; }
|
||||
.time { color: silver; font-size: 70%; }
|
||||
.function { text-align: right; }
|
||||
.number { text-align: right; }
|
||||
@@ -39,14 +43,16 @@ pre { margin: 1em 0 0; }
|
||||
.type { width: 15ex; width: auto\9; }
|
||||
.options select { width: 20ex; width: auto\9; }
|
||||
.active { font-weight: bold; }
|
||||
.sqlarea { width: 98%; }
|
||||
#menu { position: absolute; margin: 10px 0 0; padding: 0 0 30px 0; top: 2em; left: 0; width: 19em; overflow: auto; overflow-y: hidden; white-space: nowrap; }
|
||||
#menu p { padding: .8em 1em; margin: 0; border-bottom: 1px solid #ccc; }
|
||||
#content { margin: 2em 0 0 21em; padding: 10px 20px 20px 0; }
|
||||
#lang { position: absolute; top: 0; left: 0; line-height: 1.8em; padding: .3em 1em; }
|
||||
#breadcrumb { white-space: nowrap; position: absolute; top: 0; left: 21em; background: #eee; height: 2em; line-height: 1.8em; padding: 0 1em; margin: 0 0 0 -18px; }
|
||||
#loader { display: none; position: fixed; top: 2px; right: 2px; z-index: 1; }
|
||||
#h1 { color: #777; text-decoration: none; font-style: italic; }
|
||||
#version { font-size: 67%; color: red; }
|
||||
#schema { margin-left: 60px; position: relative; }
|
||||
#schema { margin-left: 60px; position: relative; -moz-user-select: none; -webkit-user-select: none; }
|
||||
#schema .table { border: 1px solid silver; padding: 0 2px; cursor: move; position: absolute; }
|
||||
#schema .references { position: absolute; }
|
||||
|
||||
|
@@ -1,35 +1,38 @@
|
||||
// Adminer specific functions
|
||||
|
||||
var jushRoot = '../externals/jush/'; // global variable to allow simple customization
|
||||
|
||||
/** Load syntax highlighting
|
||||
* @param string first three characters of database system version
|
||||
*/
|
||||
function bodyLoad(version) {
|
||||
var jushRoot = '../externals/jush/';
|
||||
var script = document.createElement('script');
|
||||
script.src = jushRoot + 'jush.js';
|
||||
script.onload = function () {
|
||||
if (window.jush) { // IE runs in case of an error too
|
||||
jush.create_links = ' target="_blank" rel="noreferrer"';
|
||||
jush.urls.sql[0] = 'http://dev.mysql.com/doc/refman/' + version + '/en/$key';
|
||||
jush.urls.sql_sqlset = jush.urls.sql[0];
|
||||
jush.urls.sqlset[0] = jush.urls.sql[0];
|
||||
jush.urls.sqlstatus[0] = jush.urls.sql[0];
|
||||
jush.urls.pgsql[0] = 'http://www.postgresql.org/docs/' + version + '/static/$key';
|
||||
jush.urls.pgsql_pgsqlset = jush.urls.pgsql[0];
|
||||
jush.urls.pgsqlset[0] = 'http://www.postgresql.org/docs/' + version + '/static/runtime-config-$key.html#GUC-$1';
|
||||
jush.style(jushRoot + 'jush.css');
|
||||
if (window.jushLinks) {
|
||||
jush.custom_links = jushLinks;
|
||||
if (history.state !== undefined) { // copied from editor/static/editing.js
|
||||
onpopstate(history);
|
||||
}
|
||||
if (jushRoot) {
|
||||
var script = document.createElement('script');
|
||||
script.src = jushRoot + 'jush.js';
|
||||
script.onload = function () {
|
||||
if (window.jush) { // IE runs in case of an error too
|
||||
jush.create_links = ' target="_blank" rel="noreferrer"';
|
||||
jush.urls.sql_sqlset = jush.urls.sql[0] = jush.urls.sqlset[0] = jush.urls.sqlstatus[0] = 'http://dev.mysql.com/doc/refman/' + version + '/en/$key';
|
||||
var pgsql = 'http://www.postgresql.org/docs/' + version + '/static/';
|
||||
jush.urls.pgsql_pgsqlset = jush.urls.pgsql[0] = pgsql + '$key';
|
||||
jush.urls.pgsqlset[0] = pgsql + 'runtime-config-$key.html#GUC-$1';
|
||||
jush.style(jushRoot + 'jush.css');
|
||||
if (window.jushLinks) {
|
||||
jush.custom_links = jushLinks;
|
||||
}
|
||||
jush.highlight_tag('code', 0);
|
||||
}
|
||||
jush.highlight_tag('code', 0);
|
||||
}
|
||||
};
|
||||
script.onreadystatechange = function () {
|
||||
if (/^(loaded|complete)$/.test(script.readyState)) {
|
||||
script.onload();
|
||||
}
|
||||
};
|
||||
document.body.appendChild(script);
|
||||
};
|
||||
script.onreadystatechange = function () {
|
||||
if (/^(loaded|complete)$/.test(script.readyState)) {
|
||||
script.onload();
|
||||
}
|
||||
};
|
||||
document.body.appendChild(script);
|
||||
}
|
||||
}
|
||||
|
||||
/** Get value of dynamically created form field
|
||||
@@ -66,14 +69,53 @@ function loginDriver(driver) {
|
||||
|
||||
|
||||
|
||||
/** Handle Tab and Esc in textarea
|
||||
* @param HTMLTextAreaElement
|
||||
* @param KeyboardEvent
|
||||
* @return boolean
|
||||
*/
|
||||
function textareaKeydown(target, event) {
|
||||
if (!event.shiftKey && !event.altKey && !event.ctrlKey && !event.metaKey) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
var added = '.', rowCount;
|
||||
|
||||
/** Escape string to use in regular expression
|
||||
/** Check if val is equal to a-delimiter-b where delimiter is '_', '' or big letter
|
||||
* @param string
|
||||
* @return string
|
||||
* @param string
|
||||
* @param string
|
||||
* @return boolean
|
||||
*/
|
||||
function reEscape(s) {
|
||||
return s.replace(/[\[\]\\^$*+?.(){|}]/, '\\$&');
|
||||
function delimiterEqual(val, a, b) {
|
||||
return (val == a + '_' + b || val == a + b || val == a + b.charAt(0).toUpperCase() + b.substr(1));
|
||||
}
|
||||
|
||||
/** Escape string to use as identifier
|
||||
@@ -91,33 +133,28 @@ function editingNameChange(field) {
|
||||
var name = field.name.substr(0, field.name.length - 7);
|
||||
var type = formField(field.form, name + '[type]');
|
||||
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 val = field.value;
|
||||
for (var i = opts.length; i--; ) {
|
||||
if (!/`/.test(opts[i].value)) { // common type
|
||||
if (i == opts.length - 2 && candidate && !match[1] && name == 'fields[1]') { // single target table, link to column, first field - probably `id`
|
||||
return false;
|
||||
var match = /(.+)`(.+)/.exec(opts[i].value);
|
||||
if (!match) { // common type
|
||||
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;
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (match = re.exec(opts[i].value)) {
|
||||
if (candidate) {
|
||||
return false;
|
||||
var table = match[1];
|
||||
var column = match[2];
|
||||
var tables = [ table, table.replace(/s$/, ''), table.replace(/es$/, '') ];
|
||||
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) {
|
||||
@@ -299,53 +336,75 @@ function foreignAddRow(field) {
|
||||
*/
|
||||
function indexesAddRow(field) {
|
||||
field.onchange = function () { };
|
||||
var row = field.parentNode.parentNode.cloneNode(true);
|
||||
var spans = row.getElementsByTagName('span');
|
||||
for (var i=0; i < spans.length - 1; i++) {
|
||||
row.removeChild(spans[i]);
|
||||
}
|
||||
var parent = field.parentNode.parentNode;
|
||||
var row = parent.cloneNode(true);
|
||||
var selects = row.getElementsByTagName('select');
|
||||
for (var i=0; i < selects.length; i++) {
|
||||
selects[i].name = selects[i].name.replace(/indexes\[\d+/, '$&1');
|
||||
selects[i].selectedIndex = 0;
|
||||
}
|
||||
var input = row.getElementsByTagName('input')[0];
|
||||
input.name = input.name.replace(/indexes\[\d+/, '$&1');
|
||||
input.value = '';
|
||||
field.parentNode.parentNode.parentNode.appendChild(row);
|
||||
var inputs = row.getElementsByTagName('input');
|
||||
for (var i=0; i < inputs.length; i++) {
|
||||
inputs[i].name = inputs[i].name.replace(/indexes\[\d+/, '$&1');
|
||||
inputs[i].value = '';
|
||||
}
|
||||
parent.parentNode.appendChild(row);
|
||||
}
|
||||
|
||||
/** Change column in index
|
||||
* @param HTMLSelectElement
|
||||
* @param string name prefix
|
||||
*/
|
||||
function indexesChangeColumn(field, prefix) {
|
||||
var columns = field.parentNode.parentNode.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
|
||||
* @param HTMLSelectElement
|
||||
* @param string name prefix
|
||||
*/
|
||||
function indexesAddColumn(field) {
|
||||
field.onchange = function () { };
|
||||
function indexesAddColumn(field, prefix) {
|
||||
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 select = column.getElementsByTagName('select')[0];
|
||||
select = column.getElementsByTagName('select')[0];
|
||||
select.name = select.name.replace(/\]\[\d+/, '$&1');
|
||||
select.selectedIndex = 0;
|
||||
var input = column.getElementsByTagName('input')[0];
|
||||
input.name = input.name.replace(/\]\[\d+/, '$&1');
|
||||
input.value = '';
|
||||
field.parentNode.parentNode.appendChild(column);
|
||||
select = field.form[field.name.replace(/\].*/, '][type]')];
|
||||
if (!select.selectedIndex) {
|
||||
select.selectedIndex = 3;
|
||||
}
|
||||
field.onchange();
|
||||
}
|
||||
|
||||
|
||||
|
||||
var that, x, y, em, tablePos;
|
||||
var that, x, y; // em and tablePos defined in schema.inc.php
|
||||
|
||||
/** Get mouse position
|
||||
* @param HTMLElement
|
||||
* @param MouseEvent
|
||||
*/
|
||||
function schemaMousedown(el, event) {
|
||||
that = el;
|
||||
x = event.clientX - el.offsetLeft;
|
||||
y = event.clientY - el.offsetTop;
|
||||
if ((event.which ? event.which : event.button) == 1) {
|
||||
that = el;
|
||||
x = event.clientX - el.offsetLeft;
|
||||
y = event.clientY - el.offsetTop;
|
||||
}
|
||||
}
|
||||
|
||||
/** Move object
|
||||
@@ -360,10 +419,9 @@ function schemaMousemove(ev) {
|
||||
var lineSet = { };
|
||||
for (var i=0; i < divs.length; i++) {
|
||||
if (divs[i].className == 'references') {
|
||||
var div2 = document.getElementById((divs[i].id.substr(0, 4) == 'refs' ? 'refd' : 'refs') + divs[i].id.substr(4));
|
||||
var div2 = document.getElementById((/^refs/.test(divs[i].id) ? 'refd' : 'refs') + divs[i].id.substr(4));
|
||||
var ref = (tablePos[divs[i].title] ? tablePos[divs[i].title] : [ div2.parentNode.offsetTop / em, 0 ]);
|
||||
var left1 = -1;
|
||||
var isTop = true;
|
||||
var id = divs[i].id.replace(/^ref.(.+)-.+/, '$1');
|
||||
if (divs[i].parentNode != div2.parentNode) {
|
||||
left1 = Math.min(0, ref[1] - left) - 1;
|
||||
@@ -372,19 +430,17 @@ function schemaMousemove(ev) {
|
||||
var left2 = Math.min(0, left - ref[1]) - 1;
|
||||
div2.style.left = left2 + 'em';
|
||||
div2.getElementsByTagName('div')[0].style.width = -left2 + 'em';
|
||||
isTop = (div2.offsetTop + ref[0] * em > divs[i].offsetTop + top * em);
|
||||
}
|
||||
if (!lineSet[id]) {
|
||||
var line = document.getElementById(divs[i].id.replace(/^....(.+)-\d+$/, 'refl$1'));
|
||||
var shift = ev.clientY - y - that.offsetTop;
|
||||
line.style.left = (left + left1) + 'em';
|
||||
if (isTop) {
|
||||
line.style.top = (line.offsetTop + shift) / em + 'em';
|
||||
}
|
||||
var line = document.getElementById(divs[i].id.replace(/^....(.+)-.+$/, 'refl$1'));
|
||||
var top1 = top + divs[i].offsetTop / em;
|
||||
var top2 = top + div2.offsetTop / em;
|
||||
if (divs[i].parentNode != div2.parentNode) {
|
||||
line = line.getElementsByTagName('div')[0];
|
||||
line.style.height = (line.offsetHeight + (isTop ? -1 : 1) * shift) / em + 'em';
|
||||
top2 += ref[0] - top;
|
||||
line.getElementsByTagName('div')[0].style.height = Math.abs(top1 - top2) + 'em';
|
||||
}
|
||||
line.style.left = (left + left1) + 'em';
|
||||
line.style.top = Math.min(top1, top2) + 'em';
|
||||
lineSet[id] = true;
|
||||
}
|
||||
}
|
||||
|
@@ -1,5 +1,3 @@
|
||||
// to hide elements displayed by JavaScript
|
||||
document.body.className += ' js';
|
||||
|
||||
/** Toggle visibility
|
||||
* @param string
|
||||
@@ -36,7 +34,16 @@ function verifyVersion() {
|
||||
* @return string
|
||||
*/
|
||||
function selectValue(select) {
|
||||
return (select.value !== undefined ? select.value : select.options[select.selectedIndex].text);
|
||||
var selected = select.options[select.selectedIndex];
|
||||
return ((selected.attributes.value || {}).specified ? selected.value : selected.text);
|
||||
}
|
||||
|
||||
/** Set checked class
|
||||
* @param HTMLInputElement
|
||||
*/
|
||||
function trCheck(el) {
|
||||
var tr = el.parentNode.parentNode;
|
||||
tr.className = tr.className.replace(/(^|\s)checked(\s|$)/, '$2') + (el.checked ? ' checked' : '');
|
||||
}
|
||||
|
||||
/** Check all elements matching given name
|
||||
@@ -48,6 +55,21 @@ function formCheck(el, name) {
|
||||
for (var i=0; i < elems.length; i++) {
|
||||
if (name.test(elems[i].name)) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -56,7 +78,9 @@ function formCheck(el, name) {
|
||||
* @param string
|
||||
*/
|
||||
function formUncheck(id) {
|
||||
document.getElementById(id).checked = false;
|
||||
var el = document.getElementById(id);
|
||||
el.checked = false;
|
||||
trCheck(el);
|
||||
}
|
||||
|
||||
/** Get number of checked elements matching given name
|
||||
@@ -79,16 +103,23 @@ function formChecked(el, name) {
|
||||
* @param MouseEvent
|
||||
*/
|
||||
function tableClick(event) {
|
||||
var click = (!window.getSelection || getSelection().isCollapsed);
|
||||
var el = event.target || event.srcElement;
|
||||
while (!/^tr$/i.test(el.tagName)) {
|
||||
if (/^(table|a|input|textarea)$/i.test(el.tagName)) {
|
||||
if (/^table$/i.test(el.tagName)) {
|
||||
return;
|
||||
}
|
||||
if (/^(a|input|textarea)$/i.test(el.tagName)) {
|
||||
click = false;
|
||||
}
|
||||
el = el.parentNode;
|
||||
}
|
||||
el = el.firstChild.firstChild;
|
||||
el.click && el.click();
|
||||
el.onclick && el.onclick();
|
||||
if (click) {
|
||||
el.click && el.click();
|
||||
el.onclick && el.onclick();
|
||||
}
|
||||
trCheck(el);
|
||||
}
|
||||
|
||||
/** Set HTML code of an element
|
||||
@@ -101,7 +132,7 @@ function setHtml(id, html) {
|
||||
if (html == undefined) {
|
||||
el.parentNode.innerHTML = ' ';
|
||||
} else {
|
||||
el.innerHTML = html.replace(/<noscript>.*<\/noscript>/i, ''); // required for Google Chrome // hopes that there will be only one <noscript> on each line
|
||||
el.innerHTML = html;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -126,7 +157,7 @@ function nodePosition(el) {
|
||||
function pageClick(href, page, event) {
|
||||
if (!isNaN(page) && page) {
|
||||
href += (page != 1 ? '&page=' + (page - 1) : '');
|
||||
if (!ajaxMain(href, '', event)) {
|
||||
if (!ajaxSend(href)) {
|
||||
location.href = href;
|
||||
}
|
||||
}
|
||||
@@ -156,33 +187,43 @@ function selectAddRow(field) {
|
||||
|
||||
|
||||
|
||||
/** Handle Ctrl+Enter and optionally Tab in textarea
|
||||
* @param HTMLTextAreaElement
|
||||
/** Abort AJAX request
|
||||
* @uses ajaxRequest
|
||||
*/
|
||||
function ajaxAbort() {
|
||||
ajaxRequest.onreadystatechange = null;
|
||||
if (ajaxRequest.abort) {
|
||||
ajaxRequest.abort();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** Send form by Ctrl+Enter on <select> and <textarea>
|
||||
* @param KeyboardEvent
|
||||
* @param boolean handle also Tab
|
||||
* @param HTMLInputElement submit button
|
||||
* @param [string]
|
||||
* @return boolean
|
||||
*/
|
||||
function textareaKeypress(target, event, tab, button) {
|
||||
if (tab && event.keyCode == 9 && !event.shiftKey && !event.altKey && !event.ctrlKey && !event.metaKey) {
|
||||
// inspired by http://pallieter.org/Projects/insertTab/
|
||||
if (target.setSelectionRange) {
|
||||
var start = target.selectionStart;
|
||||
target.value = target.value.substr(0, start) + '\t' + target.value.substr(target.selectionEnd);
|
||||
target.setSelectionRange(start + 1, start + 1);
|
||||
return false; //! still loses focus in Opera, can be solved by handling onblur
|
||||
} else if (target.createTextRange) {
|
||||
document.selection.createRange().text = '\t';
|
||||
return false;
|
||||
function bodyKeydown(event, button) {
|
||||
var target = event.target || event.srcElement;
|
||||
if (event.keyCode == 27 && !event.shiftKey && !event.ctrlKey && !event.altKey && !event.metaKey) { // 27 - Esc
|
||||
ajaxAbort();
|
||||
document.body.className = document.body.className.replace(/ loading/g, '');
|
||||
onblur = function () { };
|
||||
if (originalFavicon) {
|
||||
replaceFavicon(originalFavicon);
|
||||
}
|
||||
}
|
||||
if (event.ctrlKey && (event.keyCode == 13 || event.keyCode == 10) && !event.altKey && !event.metaKey) { // shiftKey allowed
|
||||
if (event.ctrlKey && (event.keyCode == 13 || event.keyCode == 10) && !event.altKey && !event.metaKey && /select|textarea|input/i.test(target.tagName)) { // 13|10 - Enter, shiftKey allowed
|
||||
target.blur();
|
||||
if (button) {
|
||||
button.click();
|
||||
} else if (!target.form.onsubmit || target.form.onsubmit() !== false) {
|
||||
target.form.submit();
|
||||
if (!ajaxForm(target.form, (button ? button + '=1' : ''))) {
|
||||
if (button) {
|
||||
target.form[button].click();
|
||||
} else {
|
||||
target.form.submit();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -194,7 +235,7 @@ function textareaKeypress(target, event, tab, button) {
|
||||
* @return boolean
|
||||
*/
|
||||
function editingKeydown(event) {
|
||||
if ((event.keyCode == 40 || event.keyCode == 38) && event.ctrlKey && !event.altKey && !event.metaKey) { // shiftKey allowed
|
||||
if ((event.keyCode == 40 || event.keyCode == 38) && event.ctrlKey && !event.altKey && !event.metaKey) { // 40 - Down, 38 - Up, shiftKey allowed
|
||||
var target = event.target || event.srcElement;
|
||||
var sibling = (event.keyCode == 40 ? 'nextSibling' : 'previousSibling');
|
||||
var el = target.parentNode.parentNode[sibling];
|
||||
@@ -203,44 +244,52 @@ function editingKeydown(event) {
|
||||
}
|
||||
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 (text)
|
||||
* @param function (XMLHttpRequest)
|
||||
* @param [string]
|
||||
* @return XMLHttpRequest or false in case of an error
|
||||
*/
|
||||
function ajax(url, callback, data) {
|
||||
var xmlhttp = (window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : false));
|
||||
if (xmlhttp) {
|
||||
xmlhttp.open((data ? 'POST' : 'GET'), url);
|
||||
var request = (window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : false));
|
||||
if (request) {
|
||||
request.open((data ? 'POST' : 'GET'), url);
|
||||
if (data) {
|
||||
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
||||
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
||||
}
|
||||
xmlhttp.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
|
||||
xmlhttp.onreadystatechange = function () {
|
||||
if (xmlhttp.readyState == 4) {
|
||||
var redirect = xmlhttp.getResponseHeader('X-AJAX-Redirect');
|
||||
if (redirect) {
|
||||
if (history.replaceState) {
|
||||
history.replaceState(null, '', redirect);
|
||||
}
|
||||
return ajaxSend(redirect);
|
||||
}
|
||||
var title = xmlhttp.getResponseHeader('X-AJAX-Title');
|
||||
if (title) {
|
||||
document.title = decodeURIComponent(title);
|
||||
}
|
||||
callback(xmlhttp.responseText);
|
||||
request.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
|
||||
request.onreadystatechange = function () {
|
||||
if (request.readyState == 4) {
|
||||
callback(request);
|
||||
}
|
||||
};
|
||||
xmlhttp.send(data);
|
||||
request.send(data);
|
||||
}
|
||||
return xmlhttp;
|
||||
return request;
|
||||
}
|
||||
|
||||
/** Use setHtml(key, value) for JSON response
|
||||
@@ -248,94 +297,124 @@ function ajax(url, callback, data) {
|
||||
* @return XMLHttpRequest or false in case of an error
|
||||
*/
|
||||
function ajaxSetHtml(url) {
|
||||
return ajax(url, function (text) {
|
||||
var data = eval('(' + text + ')');
|
||||
for (var key in data) {
|
||||
setHtml(key, data[key]);
|
||||
return ajax(url, function (request) {
|
||||
if (request.status) {
|
||||
var data = eval('(' + request.responseText + ')');
|
||||
for (var key in data) {
|
||||
setHtml(key, data[key]);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var ajaxState = 0, ajaxTimeout;
|
||||
var originalFavicon;
|
||||
|
||||
/** Replace favicon
|
||||
* @param string
|
||||
*/
|
||||
function replaceFavicon(href) {
|
||||
var favicon = document.getElementById('favicon');
|
||||
if (favicon) {
|
||||
favicon.href = href;
|
||||
favicon.parentNode.appendChild(favicon); // to replace the icon in Firefox
|
||||
}
|
||||
}
|
||||
|
||||
var ajaxRequest = {};
|
||||
|
||||
/** Safely load content to #content
|
||||
* @param string
|
||||
* @param [string]
|
||||
* @param [boolean]
|
||||
* @param [boolean]
|
||||
* @return XMLHttpRequest or false in case of an error
|
||||
* @uses ajaxRequest
|
||||
*/
|
||||
function ajaxSend(url, data) {
|
||||
var currentState = ++ajaxState;
|
||||
clearTimeout(ajaxTimeout);
|
||||
ajaxTimeout = setTimeout(function () {
|
||||
scrollTo(0, 0);
|
||||
setHtml('content', '<img src="../adminer/static/loader.gif" alt="">');
|
||||
}, 500); // defer displaying loader
|
||||
return ajax(url, function (text) {
|
||||
if (currentState == ajaxState) {
|
||||
clearTimeout(ajaxTimeout);
|
||||
scrollTo(0, 0);
|
||||
setHtml('content', text);
|
||||
var content = document.getElementById('content');
|
||||
var scripts = content.getElementsByTagName('script');
|
||||
var length = scripts.length; // required to avoid infinite loop
|
||||
for (var i=0; i < length; i++) {
|
||||
var script = document.createElement('script');
|
||||
script.text = scripts[i].text;
|
||||
content.appendChild(script);
|
||||
}
|
||||
|
||||
var as = document.getElementById('menu').getElementsByTagName('a');
|
||||
var href = location.href.replace(/(&(sql=|dump=|(select|table)=[^&]*)).*/, '$1');
|
||||
for (var i=0; i < as.length; i++) {
|
||||
if (href == as[i].href) {
|
||||
as[i].className = 'active';
|
||||
} else if (as[i].className == 'active') {
|
||||
as[i].className = '';
|
||||
}
|
||||
}
|
||||
var dump = document.getElementById('dump');
|
||||
if (dump) {
|
||||
var match = /&(select|table)=([^&]+)/.exec(href);
|
||||
dump.href = dump.href.replace(/[^=]+$/, '') + (match ? match[2] : '');
|
||||
}
|
||||
//! modify Change database hidden fields
|
||||
|
||||
if (window.jush) {
|
||||
jush.highlight_tag('code', 0);
|
||||
}
|
||||
}
|
||||
}, data);
|
||||
}
|
||||
|
||||
/** Load content to #content
|
||||
* @param string
|
||||
* @param [string]
|
||||
* @param [MouseEvent]
|
||||
* @return XMLHttpRequest or false in case of an error
|
||||
*/
|
||||
function ajaxMain(url, data, event) {
|
||||
if (!history.pushState || (event && (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey))) {
|
||||
function ajaxSend(url, data, popState, noscroll) {
|
||||
if (!history.pushState) {
|
||||
return false;
|
||||
}
|
||||
history.pushState(data, '', url);
|
||||
return ajaxSend(url, data);
|
||||
ajaxAbort();
|
||||
onblur = function () {
|
||||
if (!originalFavicon) {
|
||||
originalFavicon = (document.getElementById('favicon') || {}).href;
|
||||
}
|
||||
replaceFavicon(document.getElementById('loader').firstChild.src);
|
||||
};
|
||||
document.body.className += ' loading';
|
||||
ajaxRequest = ajax(url, function (request) {
|
||||
var title = request.getResponseHeader('X-AJAX-Title');
|
||||
if (title) {
|
||||
document.title = decodeURIComponent(title);
|
||||
}
|
||||
var redirect = request.getResponseHeader('X-AJAX-Redirect');
|
||||
if (redirect) {
|
||||
return ajaxSend(redirect, '', popState);
|
||||
}
|
||||
onblur = function () { };
|
||||
if (originalFavicon) {
|
||||
replaceFavicon(originalFavicon);
|
||||
}
|
||||
if (!popState) {
|
||||
if (data || url != location.href) {
|
||||
history.pushState(data, '', url); //! remember window position
|
||||
}
|
||||
}
|
||||
if (!noscroll && !/&order/.test(url)) {
|
||||
scrollTo(0, 0);
|
||||
}
|
||||
setHtml('content', (request.status ? request.responseText : '<p class="error">' + noResponse));
|
||||
document.body.className = document.body.className.replace(/ loading/g, '');
|
||||
var content = document.getElementById('content');
|
||||
var scripts = content.getElementsByTagName('script');
|
||||
var length = scripts.length; // required to avoid infinite loop
|
||||
for (var i=0; i < length; i++) {
|
||||
var script = document.createElement('script');
|
||||
script.text = scripts[i].text;
|
||||
content.appendChild(script);
|
||||
}
|
||||
|
||||
var as = document.getElementById('menu').getElementsByTagName('a');
|
||||
var href = location.href.replace(/(&(sql=|dump=|(select|table)=[^&]*)).*/, '$1');
|
||||
for (var i=0; i < as.length; i++) {
|
||||
as[i].className = (href == as[i].href ? 'active' : '');
|
||||
}
|
||||
var dump = document.getElementById('dump');
|
||||
if (dump) {
|
||||
var match = /&(select|table)=([^&]+)/.exec(href);
|
||||
dump.href = dump.href.replace(/[^=]+$/, '') + (match ? match[2] : '');
|
||||
}
|
||||
//! modify Change database hidden fields
|
||||
|
||||
if (window.jush) {
|
||||
jush.highlight_tag('code', 0);
|
||||
}
|
||||
}, data);
|
||||
return ajaxRequest;
|
||||
}
|
||||
|
||||
/** Revive page from history
|
||||
* @param PopStateEvent
|
||||
* @param PopStateEvent|history
|
||||
* @uses ajaxRequest
|
||||
*/
|
||||
window.onpopstate = function (event) {
|
||||
if (ajaxState || event.state) {
|
||||
ajaxSend(location.href, event.state);
|
||||
onpopstate = function (event) {
|
||||
if ((ajaxRequest.send || event.state) && !/#/.test(location.href)) {
|
||||
ajaxSend(location.href, (event.state && confirm(areYouSure) ? event.state : ''), 1); // 1 - disable pushState
|
||||
} else {
|
||||
ajaxRequest.send = true; // to enable AJAX for next call of this function
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/** Send form by AJAX GET
|
||||
* @param HTMLFormElement
|
||||
* @param [string]
|
||||
* @param [boolean]
|
||||
* @return XMLHttpRequest or false in case of an error
|
||||
*/
|
||||
function ajaxForm(form, data) {
|
||||
function ajaxForm(form, data, noscroll) {
|
||||
if ((/&(database|scheme|create|view|sql|user|dump|call)=/.test(location.href) && !/\./.test(data)) || (form.onsubmit && form.onsubmit() === false)) { // . - type="image"
|
||||
return false;
|
||||
}
|
||||
var params = [ ];
|
||||
for (var i=0; i < form.elements.length; i++) {
|
||||
var el = form.elements[i];
|
||||
@@ -349,9 +428,9 @@ function ajaxForm(form, data) {
|
||||
params.push(data);
|
||||
}
|
||||
if (form.method == 'post') {
|
||||
return ajaxMain((/\?/.test(form.action) ? form.action : location.href), params.join('&')); // ? - always part of Adminer URL
|
||||
return ajaxSend((/\?/.test(form.action) ? form.action : location.href), params.join('&'), false, noscroll); // ? - always part of Adminer URL
|
||||
}
|
||||
return ajaxMain((form.action || location.pathname) + '?' + params.join('&'));
|
||||
return ajaxSend((form.action || location.href).replace(/\?.*/, '') + '?' + params.join('&'), '', false, noscroll);
|
||||
}
|
||||
|
||||
|
||||
@@ -362,13 +441,21 @@ function ajaxForm(form, data) {
|
||||
* @param number display textarea instead of input, 2 - load long text
|
||||
*/
|
||||
function selectDblClick(td, event, text) {
|
||||
td.ondblclick = function () { };
|
||||
var pos = event.rangeOffset;
|
||||
var value = (td.firstChild.alt ? td.firstChild.alt : (td.textContent ? td.textContent : td.innerText));
|
||||
if (value == '\u00A0' || td.getElementsByTagName('i').length) { // or i - NULL
|
||||
value = '';
|
||||
if (/input|textarea/i.test(td.firstChild.tagName)) {
|
||||
return;
|
||||
}
|
||||
var original = td.innerHTML;
|
||||
var input = document.createElement(text ? 'textarea' : 'input');
|
||||
input.onkeydown = function (event) {
|
||||
if (!event) {
|
||||
event = window.event;
|
||||
}
|
||||
if (event.keyCode == 27 && !(event.ctrlKey || event.shiftKey || event.altKey || event.metaKey)) { // 27 - Esc
|
||||
td.innerHTML = original;
|
||||
}
|
||||
};
|
||||
var pos = event.rangeOffset;
|
||||
var value = td.firstChild.alt || td.textContent || td.innerText;
|
||||
input.style.width = Math.max(td.clientWidth - 14, 20) + 'px'; // 14 = 2 * (td.border + td.padding + input.border)
|
||||
if (text) {
|
||||
var rows = 1;
|
||||
@@ -376,9 +463,9 @@ function selectDblClick(td, event, text) {
|
||||
rows++;
|
||||
});
|
||||
input.rows = rows;
|
||||
input.onkeypress = function (event) {
|
||||
return textareaKeypress(input, event || window.event, false, document.getElementById('save'));
|
||||
};
|
||||
}
|
||||
if (value == '\u00A0' || td.getElementsByTagName('i').length) { // or i - NULL
|
||||
value = '';
|
||||
}
|
||||
if (document.selection) {
|
||||
var range = document.selection.createRange();
|
||||
@@ -392,9 +479,11 @@ function selectDblClick(td, event, text) {
|
||||
td.appendChild(input);
|
||||
input.focus();
|
||||
if (text == 2) { // long text
|
||||
return ajax(location.href + '&' + encodeURIComponent(td.id) + '=', function (text) {
|
||||
input.value = text;
|
||||
input.name = td.id;
|
||||
return ajax(location.href + '&' + encodeURIComponent(td.id) + '=', function (request) {
|
||||
if (request.status) {
|
||||
input.value = request.responseText;
|
||||
input.name = td.id;
|
||||
}
|
||||
});
|
||||
}
|
||||
input.value = value;
|
||||
@@ -414,26 +503,30 @@ function selectDblClick(td, event, text) {
|
||||
* @param MouseEvent
|
||||
* @param string
|
||||
* @param string
|
||||
* @return bool
|
||||
* @return boolean
|
||||
*/
|
||||
function bodyClick(event, db, ns) {
|
||||
if (event.button) {
|
||||
if (event.button || event.shiftKey || event.altKey || event.metaKey) {
|
||||
return;
|
||||
}
|
||||
if (event.getPreventDefault ? event.getPreventDefault() : event.returnValue === false) {
|
||||
if (event.getPreventDefault ? event.getPreventDefault() : event.returnValue === false || event.defaultPrevented) {
|
||||
return false;
|
||||
}
|
||||
var el = event.target || event.srcElement;
|
||||
if (/^a$/i.test(el.parentNode.tagName)) {
|
||||
el = el.parentNode;
|
||||
}
|
||||
if (/^a$/i.test(el.tagName) && !/^https?:|#|&download=/i.test(el.getAttribute('href')) && /[&?]username=/.exec(el.href)) {
|
||||
if (/^a$/i.test(el.tagName) && !/:|#|&download=/i.test(el.getAttribute('href')) && /[&?]username=/.test(el.href) && !event.ctrlKey) {
|
||||
var match = /&db=([^&]*)/.exec(el.href);
|
||||
var match2 = /&ns=([^&]*)/.exec(el.href);
|
||||
return !(db == (match ? match[1] : '') && ns == (match2 ? match2[1] : '') && ajaxMain(el.href, '', event));
|
||||
return !(db == (match ? decodeURIComponent(match[1]) : '') && ns == (match2 ? decodeURIComponent(match2[1]) : '') && ajaxSend(el.href));
|
||||
}
|
||||
if (/^input$/i.test(el.tagName) && (el.type == 'image' || (el.type == 'submit' && !/&(database|scheme|create|view|sql|user|dump|call)=/.test(location.href)))) {
|
||||
return !ajaxForm(el.form, (el.name ? encodeURIComponent(el.name) + (el.type == 'image' ? '.x' : '') + '=1' : ''));
|
||||
if (/^input$/i.test(el.tagName) && /image|submit/.test(el.type)) {
|
||||
if (event.ctrlKey) {
|
||||
el.form.target = '_blank';
|
||||
} else {
|
||||
return !ajaxForm(el.form, (el.name ? encodeURIComponent(el.name) + (el.type == 'image' ? '.x' : '') + '=1' : ''), el.type == 'image');
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 673 B After Width: | Height: | Size: 673 B |
@@ -18,7 +18,8 @@ if ($fields) {
|
||||
echo "<thead><tr><th>" . lang('Column') . "<td>" . lang('Type') . (support("comment") ? "<td>" . lang('Comment') : "") . "</thead>\n";
|
||||
foreach ($fields as $field) {
|
||||
echo "<tr" . odd() . "><th>" . h($field["field"]);
|
||||
echo "<td>" . h($field["full_type"]) . ($field["null"] ? " <i>NULL</i>" : "") . ($field["auto_increment"] ? " <i>" . lang('Auto Increment') . "</i>" : "");
|
||||
echo "<td title='" . h($field["collation"]) . "'>" . 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 "\n";
|
||||
}
|
||||
@@ -48,13 +49,15 @@ if ($fields) {
|
||||
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";
|
||||
foreach ($foreign_keys as $name => $foreign_key) {
|
||||
$link = ($foreign_key["db"] != "" ? "<b>" . h($foreign_key["db"]) . "</b>." : "") . h($foreign_key["table"]);
|
||||
echo "<tr>";
|
||||
echo "<tr title='" . h($name) . "'>";
|
||||
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) : ME) . "table=" . urlencode($foreign_key["table"]) . "'>$link</a>";
|
||||
echo "<td><a href='" . h($foreign_key["db"] != "" ? preg_replace('~db=[^&]*~', "db=" . urlencode($foreign_key["db"]), ME) : ($foreign_key["ns"] != "" ? preg_replace('~ns=[^&]*~', "ns=" . urlencode($foreign_key["ns"]), ME) : ME)) . "table=" . urlencode($foreign_key["table"]) . "'>"
|
||||
. ($foreign_key["db"] != "" ? "<b>" . h($foreign_key["db"]) . "</b>." : "") . ($foreign_key["ns"] != "" ? "<b>" . h($foreign_key["ns"]) . "</b>." : "") . h($foreign_key["table"])
|
||||
. "</a>"
|
||||
;
|
||||
echo "(<i>" . implode("</i>, <i>", array_map('h', $foreign_key["target"])) . "</i>)";
|
||||
echo "<td>$foreign_key[on_delete]\n";
|
||||
echo "<td>$foreign_key[on_update]\n";
|
||||
echo "<td>" . nbsp($foreign_key["on_delete"]) . "\n";
|
||||
echo "<td>" . nbsp($foreign_key["on_update"]) . "\n";
|
||||
if ($jush != "sqlite") {
|
||||
echo '<td><a href="' . h(ME . 'foreign=' . urlencode($TABLE) . '&name=' . urlencode($name)) . '">' . lang('Alter') . '</a>';
|
||||
}
|
||||
|
@@ -9,7 +9,7 @@ if ($_POST && !$error && in_array($_POST["Timing"], $trigger_options["Timing"])
|
||||
$on = " ON " . table($TABLE);
|
||||
$dropped = drop_create(
|
||||
"DROP TRIGGER " . idf_escape($_GET["name"]) . ($jush == "pgsql" ? $on : ""),
|
||||
"CREATE TRIGGER " . idf_escape($_POST["Trigger"]) . ($jush == "mssql" ? $on . $timing_event : $timing_event . $on) . " $_POST[Type]\n$_POST[Statement]",
|
||||
"CREATE TRIGGER " . idf_escape($_POST["Trigger"]) . ($jush == "mssql" ? $on . $timing_event : $timing_event . $on) . rtrim(" $_POST[Type]\n$_POST[Statement]", ";") . ";",
|
||||
ME . "table=" . urlencode($TABLE),
|
||||
lang('Trigger has been dropped.'),
|
||||
lang('Trigger has been altered.'),
|
||||
@@ -20,25 +20,23 @@ if ($_POST && !$error && in_array($_POST["Timing"], $trigger_options["Timing"])
|
||||
|
||||
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"]);
|
||||
$row = $_POST;
|
||||
if (!$row) {
|
||||
$row = trigger($_GET["name"]) + array("Trigger" => $TABLE . "_bi");
|
||||
}
|
||||
?>
|
||||
|
||||
<form action="" method="post" id="form">
|
||||
<table cellspacing="0">
|
||||
<tr><th><?php echo lang('Time'); ?><td><?php echo html_select("Timing", $trigger_options["Timing"], $row["Timing"], "if (/^" . h(preg_quote($TABLE, "/")) . "_[ba][iud]$/.test(this.form['Trigger'].value)) this.form['Trigger'].value = '" . h(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 (/^" . preg_quote($TABLE, "/") . "_[ba][iud]$/.test(this.form['Trigger'].value)) this.form['Trigger'].value = '" . js_escape($TABLE) . "_' + selectValue(this).charAt(0).toLowerCase() + selectValue(this.form['Event']).charAt(0).toLowerCase();"); ?>
|
||||
<tr><th><?php echo lang('Event'); ?><td><?php echo html_select("Event", $trigger_event, $row["Event"], "this.form['Timing'].onchange();"); ?>
|
||||
<tr><th><?php echo lang('Type'); ?><td><?php echo html_select("Type", $trigger_options["Type"], $row["Type"]); ?>
|
||||
</table>
|
||||
<p><?php echo lang('Name'); ?>: <input name="Trigger" value="<?php echo h($row["Trigger"]); ?>" maxlength="64">
|
||||
<p><?php textarea("Statement", $row["Statement"]); ?>
|
||||
<p>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
<?php if ($dropped) { ?><input type="hidden" name="dropped" value="1"><?php } ?>
|
||||
<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 } ?>
|
||||
<?php if ($dropped) { ?><input type="hidden" name="dropped" value="1"><?php } ?>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</form>
|
||||
|
@@ -6,21 +6,20 @@ if ($_POST && !$error) {
|
||||
if ($_POST["drop"]) {
|
||||
query_redirect("DROP TYPE " . idf_escape($TYPE), $link, lang('Type has been dropped.'));
|
||||
} else {
|
||||
query_redirect("CREATE TYPE " . idf_escape($_POST["name"]) . " $_POST[as]", $link, lang('Type has been created.'));
|
||||
query_redirect("CREATE TYPE " . idf_escape(trim($_POST["name"])) . " $_POST[as]", $link, lang('Type has been created.'));
|
||||
}
|
||||
}
|
||||
|
||||
page_header($TYPE != "" ? lang('Alter type') . ": " . h($TYPE) : lang('Create type'), $error);
|
||||
|
||||
$row["as"] = "AS ";
|
||||
if ($_POST) {
|
||||
$row = $_POST;
|
||||
$row = $_POST;
|
||||
if (!$row) {
|
||||
$row = array("as" => "AS ");
|
||||
}
|
||||
?>
|
||||
|
||||
<form action="" method="post">
|
||||
<p>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
<?php
|
||||
if ($TYPE != "") {
|
||||
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm() . ">\n";
|
||||
@@ -30,4 +29,5 @@ if ($TYPE != "") {
|
||||
echo "<p><input type='submit' value='" . lang('Save') . "'>\n";
|
||||
}
|
||||
?>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</form>
|
||||
|
@@ -51,8 +51,10 @@ if ($_POST && !$error) {
|
||||
if ($_POST["drop"]) {
|
||||
query_redirect("DROP USER $old_user", ME . "privileges=", lang('User has been dropped.'));
|
||||
} else {
|
||||
$created = false;
|
||||
if ($old_user != $new_user) {
|
||||
$error = !queries(($connection->server_info < 5 ? "GRANT USAGE ON *.* TO" : "CREATE USER") . " $new_user IDENTIFIED BY" . ($_POST["hashed"] ? " PASSWORD" : "") . " $pass");
|
||||
$created = queries(($connection->server_info < 5 ? "GRANT USAGE ON *.* TO" : "CREATE USER") . " $new_user IDENTIFIED BY" . ($_POST["hashed"] ? " PASSWORD" : "") . " $pass");
|
||||
$error = !$created;
|
||||
} elseif ($_POST["pass"] != $old_pass || !$_POST["hashed"]) {
|
||||
queries("SET PASSWORD FOR $new_user = " . ($_POST["hashed"] ? $pass : "PASSWORD($pass)"));
|
||||
}
|
||||
@@ -93,7 +95,7 @@ if ($_POST && !$error) {
|
||||
}
|
||||
}
|
||||
queries_redirect(ME . "privileges=", (isset($_GET["host"]) ? lang('User has been altered.') : lang('User has been created.')), !$error);
|
||||
if ($old_user != $new_user) {
|
||||
if ($created) {
|
||||
// delete new user in case of an error
|
||||
$connection->query("DROP USER $new_user");
|
||||
}
|
||||
@@ -111,14 +113,14 @@ if ($_POST) {
|
||||
if ($old_pass != "") {
|
||||
$row["hashed"] = true;
|
||||
}
|
||||
$grants[""] = true;
|
||||
$grants[(DB != "" && !isset($_GET["host"]) ? idf_escape(addcslashes(DB, "%_")) : "") . ".*"] = array();
|
||||
}
|
||||
|
||||
?>
|
||||
<form action="" method="post">
|
||||
<table cellspacing="0">
|
||||
<tr><th><?php echo lang('Username'); ?><td><input name="user" maxlength="16" value="<?php echo h($row["user"]); ?>">
|
||||
<tr><th><?php echo lang('Server'); ?><td><input name="host" maxlength="60" value="<?php echo h($row["host"]); ?>">
|
||||
<tr><th><?php echo lang('Username'); ?><td><input name="user" maxlength="16" value="<?php echo h($row["user"]); ?>">
|
||||
<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 echo checkbox("hashed", 1, $row["hashed"], lang('Hashed'), "typePassword(this.form['pass'], this.checked);"); ?>
|
||||
@@ -148,7 +150,7 @@ foreach (array(
|
||||
foreach ($grants as $object => $grant) {
|
||||
$name = "'grants[$i][" . h(strtoupper($privilege)) . "]'";
|
||||
$value = $grant[strtoupper($privilege)];
|
||||
if ($context == "Server Admin" && $object != (isset($grants["*.*"]) ? "*.*" : "")) {
|
||||
if ($context == "Server Admin" && $object != (isset($grants["*.*"]) ? "*.*" : ".*")) {
|
||||
echo "<td> ";
|
||||
} elseif (isset($_GET["grant"])) {
|
||||
echo "<td><select name=$name><option><option value='1'" . ($value ? " selected" : "") . ">" . lang('Grant') . "<option value='0'" . ($value == "0" ? " selected" : "") . ">" . lang('Revoke') . "</select>";
|
||||
@@ -162,7 +164,7 @@ foreach (array(
|
||||
echo "</table>\n";
|
||||
?>
|
||||
<p>
|
||||
<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 } ?>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</form>
|
||||
|
@@ -2,10 +2,11 @@
|
||||
$TABLE = $_GET["view"];
|
||||
$dropped = false;
|
||||
if ($_POST && !$error) {
|
||||
$name = trim($_POST["name"]);
|
||||
$dropped = drop_create(
|
||||
"DROP VIEW " . table($TABLE),
|
||||
"CREATE VIEW " . table($_POST["name"]) . " AS\n$_POST[select]",
|
||||
($_POST["drop"] ? substr(ME, 0, -1) : ME . "table=" . urlencode($_POST["name"])),
|
||||
"CREATE VIEW " . table($name) . " AS\n$_POST[select]",
|
||||
($_POST["drop"] ? substr(ME, 0, -1) : ME . "table=" . urlencode($name)),
|
||||
lang('View has been dropped.'),
|
||||
lang('View has been altered.'),
|
||||
lang('View has been created.'),
|
||||
@@ -15,10 +16,8 @@ if ($_POST && !$error) {
|
||||
|
||||
page_header(($TABLE != "" ? lang('Alter view') : lang('Create view')), $error, array("table" => $TABLE), $TABLE);
|
||||
|
||||
$row = array();
|
||||
if ($_POST) {
|
||||
$row = $_POST;
|
||||
} elseif ($TABLE != "") {
|
||||
$row = $_POST;
|
||||
if (!$row && $TABLE != "") {
|
||||
$row = view($TABLE);
|
||||
$row["name"] = $TABLE;
|
||||
}
|
||||
@@ -28,7 +27,8 @@ if ($_POST) {
|
||||
<p><?php echo lang('Name'); ?>: <input name="name" value="<?php echo h($row["name"]); ?>" maxlength="64">
|
||||
<p><?php textarea("select", $row["select"]); ?>
|
||||
<p>
|
||||
<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 } ?>
|
||||
<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; ?>">
|
||||
</form>
|
||||
|
111
changes.txt
111
changes.txt
@@ -1,3 +1,96 @@
|
||||
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
|
||||
@@ -144,9 +237,9 @@ Localize date (Editor)
|
||||
Treat tinyint(1) as bool (Editor)
|
||||
Divide types to groups in table creation
|
||||
Link e-mails in select
|
||||
Show type in field name title (thanks to Jakub Sochor)
|
||||
Preselect now() for timestamp columns (thanks to paranoiq)
|
||||
Clear history (thanks to paranoiq)
|
||||
Show type in field name title
|
||||
Preselect now() for timestamp columns
|
||||
Clear history
|
||||
Prefill insert by foreign key searches
|
||||
Print number of rows in SQL command
|
||||
Remove Delete button from Edit page - use mass operation for it
|
||||
@@ -157,7 +250,7 @@ Use HTML Strict instead of XHTML
|
||||
Remove function minification in favor of performance and customization
|
||||
Fix grant ALL PRIVILEGES with GRANT OPTION
|
||||
Fix CSV import
|
||||
Fix work with default values (thanks to Jiri Pospisil)
|
||||
Fix work with default values
|
||||
|
||||
Adminer 1.11.1 (released 2009-07-03):
|
||||
Fix problem with enabled Filter extension
|
||||
@@ -186,15 +279,15 @@ Use \n in SQL commands
|
||||
phpMinAdmin 1.10.1 (released 2009-05-07):
|
||||
Highlight odd and hover rows
|
||||
Partition editing comfort (bug #2783446)
|
||||
Allow full length in limited int (thanks to Vlasta Neubauer)
|
||||
Allow full length in limited int
|
||||
|
||||
phpMinAdmin 1.10.0 (released 2009-04-28):
|
||||
Partitioning (MySQL 5.1)
|
||||
CSV import
|
||||
Plus and minus functions
|
||||
Option to stop on error in SQL command (thanks to Vaclav Marik)
|
||||
Option to stop on error in SQL command
|
||||
Cross links to select and table (bug #2236232), link new item
|
||||
Suhosin compatibility (thanks to Klemens Hackel)
|
||||
Suhosin compatibility
|
||||
Remove max_allowed_packet from export
|
||||
Read style from phpMinAdmin.css if exists
|
||||
Size reduction by minification of variables and functions
|
||||
@@ -213,11 +306,11 @@ Search without column restriction
|
||||
Use type=password for unhashed password
|
||||
Only one button for each action in select
|
||||
Choose language through option-list
|
||||
XHTML syntax errors (thanks to kozotoc)
|
||||
XHTML syntax errors
|
||||
Don't set global variable in export
|
||||
SHOW DATABASES can be revoked
|
||||
Order by function result working also in older MySQL versions
|
||||
Tested on IIS (thanks to krasl.cz)
|
||||
Tested on IIS
|
||||
|
||||
phpMinAdmin 1.8.0 (released 2008-09-12):
|
||||
Events (MySQL 5.1)
|
||||
|
29
compile.php
29
compile.php
@@ -51,14 +51,15 @@ function put_file($match) {
|
||||
if (basename($match[2]) != "lang.inc.php" || !$_SESSION["lang"]) {
|
||||
$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" : "");
|
||||
} elseif (preg_match('~\\s*(\\$pos = .*;)~sU', $return, $match2)) {
|
||||
} elseif (preg_match('~\\s*(\\$pos = (.+\n).+;)~sU', $return, $match2)) {
|
||||
// single language lang() is used for plural
|
||||
return "function get_lang() {
|
||||
return '$_SESSION[lang]';
|
||||
}
|
||||
|
||||
function lang(\$translation, \$number) {
|
||||
" . str_replace('$LANG', "'$_SESSION[lang]'", $match2[1]) . '
|
||||
\$pos = $match2[2]\t\t: " . (preg_match("~\\\$LANG == '$_SESSION[lang]'.* \\? (.+)\n~U", $match2[1], $match3) ? $match3[1] : "1") . '
|
||||
);
|
||||
return sprintf($translation[$pos], $number);
|
||||
}
|
||||
';
|
||||
@@ -101,6 +102,7 @@ function short_identifier($number, $chars) {
|
||||
|
||||
// based on http://latrine.dgx.cz/jak-zredukovat-php-skripty
|
||||
function php_shrink($input) {
|
||||
global $VERSION;
|
||||
$special_variables = array_flip(array('$this', '$GLOBALS', '$_GET', '$_POST', '$_FILES', '$_COOKIE', '$_SESSION', '$_SERVER'));
|
||||
$short_variables = array();
|
||||
$shortening = true;
|
||||
@@ -113,8 +115,14 @@ function php_shrink($input) {
|
||||
}
|
||||
|
||||
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) {
|
||||
$short_variables[$key] = short_identifier($number, implode(range('a', 'z')) . '_' . implode(range('A', 'Z'))); // could use also numbers and \x7f-\xff
|
||||
$short_variables[$key] = short_identifier($number, $chars); // could use also numbers and \x7f-\xff
|
||||
}
|
||||
|
||||
$set = array_flip(preg_split('//', '!"#$&\'()*+,-./:;<=>?@[\]^`{|}'));
|
||||
@@ -138,6 +146,7 @@ function php_shrink($input) {
|
||||
} else {
|
||||
if ($token[0] == T_DOC_COMMENT) {
|
||||
$doc_comment = true;
|
||||
$token[1] = substr_replace($token[1], "* @version $VERSION\n", -2, 0);
|
||||
}
|
||||
if ($token[0] == T_VAR) {
|
||||
$shortening = false;
|
||||
@@ -192,7 +201,7 @@ $_SESSION["lang"] = $_SERVER["argv"][1]; // Adminer functions read language from
|
||||
include dirname(__FILE__) . "/adminer/include/lang.inc.php";
|
||||
if (isset($_SESSION["lang"])) {
|
||||
if (isset($_SERVER["argv"][2]) || !isset($langs[$_SESSION["lang"]])) {
|
||||
echo "Usage: php compile.php [lang]\nPurpose: Compile adminer[-lang].php and editor[-lang].php.\n";
|
||||
echo "Usage: php compile.php [driver] [lang]\nPurpose: Compile adminer[-driver][-lang].php and editor[-driver][-lang].php.\n";
|
||||
exit(1);
|
||||
}
|
||||
include dirname(__FILE__) . "/adminer/lang/$_SESSION[lang].inc.php";
|
||||
@@ -215,7 +224,7 @@ foreach (glob(dirname(__FILE__) . "/adminer/drivers/" . ($driver ? $driver : "*"
|
||||
}
|
||||
|
||||
include dirname(__FILE__) . "/adminer/include/pdo.inc.php";
|
||||
$features = array("view", "event", "privileges", "user", "processlist", "variables", "trigger", "scheme", "sequence", "dump");
|
||||
$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
|
||||
$file = file_get_contents(dirname(__FILE__) . "/$project/index.php");
|
||||
@@ -223,14 +232,15 @@ foreach (array("adminer", "editor") as $project) {
|
||||
$connection = (object) array("server_info" => 5.1); // MySQL support is version specific
|
||||
$_GET[$driver] = true; // to load the driver
|
||||
include_once dirname(__FILE__) . "/adminer/drivers/$driver.inc.php";
|
||||
foreach ($features as $feature) {
|
||||
foreach ($features as $key => $feature) {
|
||||
if (!support($feature)) {
|
||||
if (!is_int($key)) {
|
||||
$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);
|
||||
}
|
||||
}
|
||||
@@ -262,8 +272,7 @@ foreach (array("adminer", "editor") as $project) {
|
||||
$file = str_replace('<script type="text/javascript" src="static/editing.js"></script>' . "\n", "", $file);
|
||||
$file = preg_replace_callback("~compile_file\\('([^']+)', '([^']+)'\\);~", 'compile_file', $file); // integrate static files
|
||||
$replace = 'h(preg_replace("~\\\\\\\\?.*~", "", ME)) . "?file=\\1&version=' . $VERSION;
|
||||
$file = preg_replace('~\\.\\./adminer/static/(loader\\.gif)~', "'+location.pathname+'?file=\\1&version=$VERSION", $file);
|
||||
$file = preg_replace('~\\.\\./adminer/static/(default\\.css|functions\\.js|favicon\\.ico)~', '<?php echo ' . $replace . '"; ?>', $file);
|
||||
$file = preg_replace('~\\.\\./adminer/static/(default\\.css|functions\\.js|favicon\\.ico|loader\\.gif)~', '<?php echo ' . $replace . '"; ?>', $file);
|
||||
$file = preg_replace('~\\.\\./adminer/static/([^\'"]*)~', '" . ' . $replace, $file);
|
||||
$file = str_replace("'../externals/jush/'", "location.protocol + '//www.adminer.org/static/'", $file);
|
||||
$file = preg_replace("~<\\?php\\s*\\?>\n?|\\?>\n?<\\?php~", '', $file);
|
||||
|
58
designs/brade/adminer.css
Normal file
58
designs/brade/adminer.css
Normal file
@@ -0,0 +1,58 @@
|
||||
/* 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%}
|
328
designs/bueltge/adminer.css
Normal file
328
designs/bueltge/adminer.css
Normal file
@@ -0,0 +1,328 @@
|
||||
/**
|
||||
* 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 .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;
|
||||
}
|
271
designs/cvicebni-ubor/adminer.css
Normal file
271
designs/cvicebni-ubor/adminer.css
Normal file
File diff suppressed because one or more lines are too long
144
designs/haeckel/adminer.css
Normal file
144
designs/haeckel/adminer.css
Normal file
@@ -0,0 +1,144 @@
|
||||
/* 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*="&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"]{ height:16px; border: none; position: absolute; top: 0; left: 140px; margin-top: 8px; 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: 12px; line-height: 0px; cursor:pointer; }
|
||||
|
||||
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: 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 }
|
||||
#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; 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; font-size: 0; height: 2px;}
|
||||
h3 {margin: 40px 0 0; font-weight: 400; font-size: 130%;}
|
||||
#menu h1 {
|
||||
height: 25px;
|
||||
padding: 0 10px;
|
||||
margin: 0;
|
||||
line-height: 20px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
#menu h1 a {
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
#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, 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, #lang {-moz-border-radius-bottomleft: 5px; -khtml-border-bottom-left-radius: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px;}
|
||||
#menu {-moz-border-radius-topright: 5px; -khtml-border-top-right-radius: 5px; -webkit-border-top-right-radius: 5px; border-bottom-top-radius: 5px;}
|
||||
#loader {margin-left: 35px;}
|
54
designs/hever/adminer.css
Normal file
54
designs/hever/adminer.css
Normal file
@@ -0,0 +1,54 @@
|
||||
/* 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 #menu p 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"]{ 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/ */
|
28
designs/jukin/adminer.css
Normal file
28
designs/jukin/adminer.css
Normal file
@@ -0,0 +1,28 @@
|
||||
/* 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; }
|
290
designs/kahi/adminer.css
Normal file
290
designs/kahi/adminer.css
Normal file
@@ -0,0 +1,290 @@
|
||||
/*
|
||||
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
|
||||
*/
|
126
designs/konya/adminer.css
Normal file
126
designs/konya/adminer.css
Normal file
@@ -0,0 +1,126 @@
|
||||
/* 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==")}
|
||||
|
||||
html/*\*/>/*/*/body input[name="logout"]{ width:45px; 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;}
|
||||
|
||||
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 300px; 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: 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;}
|
286
designs/paranoiq/adminer.css
Normal file
286
designs/paranoiq/adminer.css
Normal file
@@ -0,0 +1,286 @@
|
||||
/**
|
||||
* 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; }
|
||||
}
|
||||
|
116
designs/pilot/adminer.css
Normal file
116
designs/pilot/adminer.css
Normal file
@@ -0,0 +1,116 @@
|
||||
#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;
|
||||
}
|
295
designs/pokorny/adminer.css
Normal file
295
designs/pokorny/adminer.css
Normal file
@@ -0,0 +1,295 @@
|
||||
/**
|
||||
* Alternative style for Adminer.
|
||||
* Created by Miroslav Pokorný [http://fuch.cz].
|
||||
* Icons by Yusuke Kamiyamane [http://p.yusukekamiyamane.com/] (some of them were modified).
|
||||
* Slightly inspired by themes created by Martin Hořínek and Klemens Häckel.
|
||||
*/
|
||||
|
||||
/*** Fonts ***/
|
||||
@import url(http://fonts.googleapis.com/css?family=Ubuntu:300&subset=latin,latin-ext);
|
||||
@import url(http://fonts.googleapis.com/css?family=Ubuntu+Mono&subset=latin,latin-ext);
|
||||
* {
|
||||
font-family: 'Ubuntu', sans-serif
|
||||
}
|
||||
textarea, pre, code, samp, kbd, var {
|
||||
font-family: 'Ubuntu Mono', Consolas, 'Courier New', monospace
|
||||
}
|
||||
/*** Icons ***/
|
||||
/* Error message */
|
||||
html>/**/body .error {
|
||||
background: #FFEEEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlpJREFUeNqkU8tu2lAQHT8wtlEQcUKUIjVVgaiCVkhIlSq1isSKTdRNuu5P8AX5Alb9g+6zqZR8QNWmC3ZRa1UJIm0hAWpeNthg/OiMechl00UtHXvuvXPOnbn3mPF9H/7n4en1nmGAwy+BAUghTjB8iThY5v1EfMatzhB3Lg4Ib3FzfkPwdUSSKulCIZs6PFSkeFykCi1dL95dXx81rq7e2JZVxbwPf1WwIkuJxOmL4+Ocz/PSzHHgvtEIFhRFkfdzOTmZTu/ULi5OJ6MRrERYemFZKU4UK8VyOTcyTWk4HEKr1YLC+XkAimluPJ1Kz0qlHBuNVoizFsB+Tg7y+ezAMKQRqhuGAaZprkujmOZ0XQcDRfYymay7OKdFCw7Aq61kUtH6/TVpPB5Dp9MJSLfYiue6i555Hna3txXi4PDdSuChx7Kig3278zkYgwGYkwk0m02IRCLA4jy3Usb1qWmKxAlXAA4u2FQ6VuHjbhGcI3IsFgNh47Q5zHXCtzAH+GV0u0Vf02QpZCy1VAq+8Y27ntv2lDjrQ0S1T912u7eF/ck4lheGgpKqQrleD2I5BN2y+sQJC5zd9np1YFlLRldSUhQhCEKwYzRE9jzPas9mN8RZC3hoz4nrVi81TcUFS0KRJM5/yWQCUCwhbCTXxmPV9LwqcYjLkFUZJDzCwXN042OWreQEIftEEJQEx4mUNHTd6Xfb7qu2fdNAcg1d+IMMSNylAB3mDmIX7bWfBzjaA3iKV/dgabT7LsDXbwAfcVsM4TdCQ66zEmBDbfL/+IPJURMyKHK9PwIMAA7iHkoee771AAAAAElFTkSuQmCC") no-repeat 0.8em center;
|
||||
padding-left: 38px;
|
||||
}
|
||||
/* Ok message */
|
||||
html>/**/body .message, html>/**/body #menu p.message {
|
||||
background: #EEFFEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnZJREFUeNqkk01PE0EYx/+zu/TNanTbGCjWhrCmlp6MGl94kUQ9eOCC8chHMDG9mHjiE/QjePGOJsR4QQ8Q0UOJHqgVA6kiKQXa0th97+4OM1tq25MHJ/lvdmae3z/PzDMPoZTif4bEP+RVHBAJE5+QBAjm2d9dpsuncbtM66BYAqUVuGzmUtCFWsegb8yFpEAuPZpWUvGkHA1GQzw/zVSv/aztTm9Vfjy22laeLS0PZNCFzwXPLs5mZzISpLBjO1BttbsXGZfHIkn5Umy1uLbYMvx130TwtykSQSGQm746mbE0K6yqKkzTHFC1WoXe1MK3lVuZABnKcaZn4NL5K8PjiqmaYV3XYRjGgOr1OtZn3mJh5Akcox1OxZIKZ3oGDp2MR+Nyq9VCs9mEZVloqS0cHB6gXC7jdfol9vb28GhoFpvFTXiGJ3OmdwcOTQoQQpqmYePhCpQ3N6HbOii76Y17K36IKIqYeDfpV8q0zRBn+jOA67p4rjzFzs4Ovtz/ACp2YEmSfGXfTwFRFhtm4ZLjMz2DNv1d047MZ6UX/vT4+Bgbd/rgVQZf4LXoyCaWyZn+DD5Wj/Yboixi6vvcX9CHPzH4Yg/mMv/oDc70Gyw1d+vbAohBRgmubz7owAUGjw7CnucaVlXf5kzPwKMVV3Py9c/7Jep4BkkRZL8yONU5c1ee7RhqoVHydC/PGb8NeDMRwvogxa73hjAnjIm5QOaMEkhHZPG8FPKfSdMx7S29YZe0ba/s5lHwlvHLhc+eGvByxpjiSJBhTJBpdu4sK9lI56FhH4co4htdQ4UespUjphpjna6B0HdS6R8dzHtRY9IZ650IMACI9kBqNfbjbgAAAABJRU5ErkJggg==") no-repeat scroll 0.8em center; padding-left:38px;
|
||||
}
|
||||
/* Sql */
|
||||
html>/**/body a[href$="sql="] {
|
||||
background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAARpJREFUeNrE0z9LQlEYx/Fr/gXdJILegSQJEk13yrUxxDFwUhqagyAEF8E34BsIFKlozpqao8K9WVrCJSWu30d+F44SOjj4wId77nPOeTjn3HMjQRB4m8SOt2Fsv0CE8HleYoRdnGEPF8jhB4+4xw0ONLc7R4E7VJBX23JNtJBFSflD9YXjrT3fQhxpfKqqRQEf+MaLxuTVF3e3bo02yjjBrTMojD+9R52+sO3F8KxC13YmeELCHbT0vtBnE6ua1EfDGZRQO7qiQNEK1LiNRzynSKpjCJ+8fY1T5d/VZ+2Y5nQs8YVXPW01+zjGg3JvuFK+q1yoZ3tOaVnJpcOzqOtwzzF28rbaX0zWXbQMBvqc/r83cet/40yAAQCHjz1eQkhXqAAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Dump */
|
||||
html>/**/body #dump {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjpJREFUeNqMU8+LElEc/8w4qeM4urvsCgqpEO7VYu/9YAmkNqiDRNdOQtC5k3QIL127BF78G+rQqegQlBRRhz24S0jWuumOrs74c2be9H2jkuJi+4XPvMe87/f73ufzPk/IZrOYxh1CFOeLOuEVn0izP6PRKFosFl/2ej0MBgNYlo1m06A5g98vQ1VVhEIhhMMh5HL3H3k8Hiw04GFZFjqdDjRNcxs0GjqGIwZFUWHZFkSPiIAiLxxFXHlQAXBocAQ2ASY4fwNKnxQ602LbxXzMU/hSKBRep9PpPcYY+v3+lIpFGvgRDAaJfxiVSuUN5X4+q8FOPp/fmxexcdJFbziG1+dFUFUQJhFv3r6XeZx7yG+g/F8R/5x00BuPIZNwJltD9WAffUNHq9VyeM5Sg2UR/3Fngo3uaRuZBxm6xhzX7grh60oRGbPAzCH6py38qlRgmia0Yw2H2uELWr7OaQszJ5KRduLx+NN5EU3bxPrWOhKXEohejCKgBhY2SG2mnkg8ebIbWxLx5+9jNNtNHOz/wLdP3zEaDLF7dxeRWATbW9t5QRDei7VaDbquwzAMZyZivV4nHKHV0WBYA1zYUJC4nMKYBJ0WP6M93xI+iuVyGdVqlSsvrTQTQVkLovi8iGQy2ZZl+YNt2+4tyGQONRaLBSRJcs3i9XpdCh6fjMCwC9EnQAnKuHrrmuuFUqkk0IkjVKuT27FBiFHHG47jbPKuNE5fAoimwD8QRZGPDp/TepN0ekfrR38FGAASfDL3E+dZ1QAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Modified adminer logo */
|
||||
html>/**/body h1 {
|
||||
background: #eee url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpFMEMzMjFEREIzNENFMTExOTE4QkYwQjc5MjcxNEMzNyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxOUM1RjA3QTRENkIxMUUxODFCNkVBNEZGMDk2NUJEMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxOUM1RjA3OTRENkIxMUUxODFCNkVBNEZGMDk2NUJEMSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFM0MzMjFEREIzNENFMTExOTE4QkYwQjc5MjcxNEMzNyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFMEMzMjFEREIzNENFMTExOTE4QkYwQjc5MjcxNEMzNyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Ph6vyIoAAAJsSURBVHjalFNNaxNRFD3z0Uxm2iRtGhVdBOxOcFkESQ2GNoXgwk1X/Q9uxB+QRf6CP6HQbQs1UFqisREhG4MYJVlEiyR2IM4kZjL5mJnnfZOMpAsFH5y5dz7OefeeuU8AECIs5XK5p6Io3nFdV2aMiRyHh4fPMF+CIPDA+GV/f/95sVg8onTK78OEWDabfaHrOmu1WqxerzPbHrHBYMjY5iZF248c06nHDMP4wTkEVaQLh+R5nuQ4Dnq9HpLJJBxniuXHaRin5+DPB6Uy7HIF8sMHoOqEVCrFNxY4mdcm8ZIXSsVKJgPz7NzPi6cXflTTKUzfvffzSqXiLQoIXNVvkvlt0o4lrO5s+23ndrf8aJdnQnt7ey8DnhiYRKV/yufzpWq1ioODA4zHY+gnJ1jb3cFkYtO9TRVsod83h9TS54AnB0ksFrtfKBQylmXBtm202x1sbGzgV+k1VGqL/hBGFxVEJUmTZfkeUd5cE+ArMLHb7VLu4sPHL7DpmaIqiK+tIrG+jhuJxCIFIv61BAbXc6h7F55AYLP8PwTIOsGbgYvMsbikYBLj8bjSaDRuUX6Xt9But/H921eYug7LMGH9NDGg+Oro+G2z2TzudDqXfBL/eBCJRK6ZyD3QidSzLciKiOUVFdFoBOkn249qtdoZUS4WTWTD4dC7bqKDK8NAb2JB0UJYZVGIMoOmKXwDNzgX4jxhRPyLH2zBhxlM0xQCnjw/THESCNH/5fOAUCjktyApKrRRH6Ii+C1omgpJFrnAEucQulzpNiEZDoczNMY36ThL8zENxtw/HzRIjKJHcOm7q9FoVKJXl78FGAAi7FBT6eTVegAAAABJRU5ErkJggg==") no-repeat 14px center;
|
||||
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;
|
||||
font-size: 1em;
|
||||
padding: 6px 6px 5px 35px;
|
||||
}
|
||||
/* Logout */
|
||||
html>/**/body input[name="logout"] {
|
||||
background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAkVJREFUeNqMU01rE1EUPZkMaGI+JEMkXyaNiKINzSJLBSEEaRbRVf6Ai1Jw68K9O3dCN3ZR/AUxC0UCwW4k4KKoGKVioGATg4kNY2aSTDqZifdOmmmKFr1weG/e3HPeue++59i4BTgceAogg3/H6+kUm+YUDdMEaIRICyBkvPeeZVwul5XlIEVBEGyMXz7C8vJ1HHz/ttT49C4/UPqvKG2T0BANcybNZEmSTpCdTqeFPcqp1Wr8X1q5eVtSep3w14/v8yoJCSwwF/kbmedsN5lMotlsol6vo6eMpBurd1OmgawwMQDGnCzLMkajkU3mkTeYUp2hUAjRaBStVgu6rmNC6yKTOex6x2MLPA8EAhBF0RIwyQaL8Oj1emEYBoF4X4SLIOwwiS3yj2KxiG63i06nYzngTRYFZmWZMwcfxgE2sLNRKNi9GgwGKNB3uVxGIpGwHbC4oihQVdWas7AY1/aZkymVSrZALpdDtVpFPB7/w8H+Txnp+1uYvHkyK+EqeiBkgsEgUqmUpVypVBCLxRCJRGaHuCDAF+fFwzvHDvSjQ+REPjCPx2PdBxbgNe7O5KgEjnjkAiT/udkZsMBYPxZgsIv5nMkM6pjVWo65EDvgzYXnbUBWcKLvi2SO/hDw+/3QNM3CXECldfHHIc7vKdh9vJo97QEJ7rP4PD1wp69cuxT2+XxSu922nPQHJEAJ2lsdDzjx1Dd4iNG6PJS2t+trZ1zu/Ep6KUxuJZWqcuA/Yz0O/KIdlSEuazrWqIIsNWT3twADAMZTN2W0KIqPAAAAAElFTkSuQmCC") no-repeat 2px bottom;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
height: 18px;
|
||||
line-height: 18px;
|
||||
overflow: hidden;
|
||||
padding: 0;
|
||||
position: absolute;
|
||||
right: 8px;
|
||||
text-indent: 18px;
|
||||
top: 5px;
|
||||
width: 18px;
|
||||
}
|
||||
/* Alter table */
|
||||
html>/**/body a[href*="&create="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAl1JREFUeNqck19IU1Ecx7/3drfrXVpJf6BEx53bjK02UaLIJdQsiOrJJvVaL/UePgS52LvPKdRe68GCQOohg4gYmGTZnEzndNPWXpqbNPfH3T+dc3BrDp888OP8zv2d7+/3+f24h/P5/bcAnMT+VlrQNO3URCAwth/17ZGRB4KmqpxODte+Abqu14wkZqbTvf68E//qPQKq5VVV5ekFuq52cmwfsPz3vcT3ynrte9WnGqoVVEXhVJaAw4e4DotQIp0VWOUBiVRMa+BInPpazSdi/RCoVlAUZReB9quIR45Wdp5ZWsI5u535oUgEF51O5n+emyMEHaDaOgIwAq8IfF9ZYf0ebGrCdDTKem6WJHwJh5lPF9VQLU+zqORy/QzOmM1wyTK2SiX02GzoJRT5YhHnHQ5cIBQiocn5fDi7uGhnLTQSzCeTjEASRczGYqyqidIsLCC3sYHc6io83d3oGR29ziuVSq2FKsHp9nY4CEWxXIarsxNuqxUFQmM/+gfq5ibuDg/j2fY2ptzuqV1DrBJE19cZgWg04mc8zgiMlXn8CI3hZr8HjwMzGBwaQjCRWKYEfCOBra0NXYSiTKo4ySzMLWlk4+PwEvHkuxA8fTIsZC5UK5RLpQONBLFUihHQFQ5PIJ98gSuX+vDq9Ue0Wu+h+UQv+5GoVshmMqLBYECwK7/zh4u1t1XIxPB7+SUTvyWV3Zf9OGbuZzGqoVpOkuWHvMnUsddjueNMeZ4Hpz1Pn7jW3oePhyLpw4n6uFYorNGmJWItxIQ9cqTu3+Ams1sYf/NJn22IKcT+/hNgALjZYbRNSSf5AAAAAElFTkSuQmCC") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Create table */
|
||||
html>/**/body a[href$="&create="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi9JREFUeNqck8trE1EUxr+ZTjKZ+kB31UwtSUiVRFykRsGFKGkEF7qqe5e6FARdtVBc+B+0brTg1pU7dSGIWm2sMebRkDQNTVMSoUWC2qZmHp57kkzTuFB64HK/MzPfub9z517pxtTUNQDHsL+oKZZlHX82PT27H/fE5OQtxTJNyabkyiJg27YzqDAPW8y9eef9QuwIhFc2TVMWH4iIBySex/27OkY65rOd510tPMKrmIYhmVxAwquSDb/SpM62eOVxjVasWZDovdCWo8lsH4bwKoZh7CGwqtu4GzrKeaJQQHR0lPX7bBYXwmHWb1IpIjgB4e0hABPEVCC5ssL9HvB48DGf554PahreptOsRQiPQ2DSx7sEwOmREc6/lEqIBINtGip0PhRiPZ/JQHiYgAv0EWRWV5lAU1V8LhZ51UFBk8vtIWgXaLWcFroEp4aHOc+UyzgTCLBO0n483ZlDspGGbul4EnoE4ZV7N1EQiMivrSFHFKrbja/URmp5GR6ieVddwNnoGAq/ivwbuwRyP0HQ6+V8iYqEfT7cSdzDfP0TBqlIw2wALQvxF1dRCX+bUHaazQGrbw+K6+u8ByKy1MaHSgLeeLvohrEB76XOAuUlXfm+uam6XC48Pvmzc8LVv+7WuWoUqZfJ9gm8LEN+TQdKorniriuNWq3uj0Qe/s/l2b5evTl0UR+q56t17bk+J2+5KuLAazQO0VD+WeG2+wH9vzEMSIuY+X2fnvz4I8AAYtpfN5Cu7WwAAAAASUVORK5CYII=") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Create new database */
|
||||
html>/**/body #content a[href*="&database="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjpJREFUeNqUkr+LE1EQx7/7g93sJptERPFSbCGSJkUKK20CinB4d8UVQWytAqIiWEoKi4CVlYJwWNwfoMVZCIJWFhcuTQiCORFDJN5tNtns5TY/Nm93fW8TNcHTOwdmZ1hm5s18Zrh8Po+ZrFFdwsnkO9Ut5og//4zH46WNjY3njuNgOByCEA/t9iH1fUQiCjRNQzweRyIRR6Fw47YgCFgowIQQAtu20el0wgKG0cdo7CMa1UA8Al7goUaVhVb4fzbKAQE1AedPFVM9eQEaPk0MZsleqPMyP0KlVCq9zmazq77vYzAYzEYhlEEEsViMzp9AvV5/Q2N3jipwsVgsrs5DNMwDOCMXkiwhpkWRoBCvrawv3y3cYhsoHwtx37ThuC4UCm7iJylEQFHl/4H4e3af845lcPQWfm3Aw2PjCb7sNWDl2jdPm/FnxCcQMplMGOt5HqrVaoraNBuh1WrhW+MreoYBx+rB6fawxb1F7moOH5rbg70znafmqR5ERpwJtX9CpEn20MGL4SZ2x7tQeQW2Z0MccCqRgx3aVkVsNptIJpNwXTdYhEiwb1mwXQe1UQ3n1y6ED5nExKX1yzp19fcv30Esl8tIp9OQZVn82zHpQQqNV58hiiKk5Sg+bdaak4hnUEYVlqTQ49BSqZTKAtixSJIUjiDICtTRAe7LdxCNKbi3/QBdrwv/kHB42L9Oc/thAapnLctydV1/xGAGQTDbATgq7AOe5zG54q/4ZZzj2sFHlsNO54cAAwDujTg3Gh40tQAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Privileges */
|
||||
html>/**/body #content a[href*="&privileges="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlNJREFUeNp8U11Ik1EYfr795kynaBBLglbtqiyRSMiMunCCF0FgBP14U5d1JdHFJAKD8rKrEAIjqMlGF/0hTHKLSpi15ZoMjdZgbi23ydzn3PZ93/b1nuFkK7cXHs457/s8z/ee853DybKMckxbVNAowSkUOELLXoJhqxQlfCwW4RcKkAfGpG2NCtXBSUUMtuw1DR3qGeqVtXqjkOUh55LBlW/TPalY0EactwR5R4O8KHe27Tt86fjgyOWvTmvg15LbUShKMHTs7zh5+sI173ubcu13KEzUhbJGUWmQE3Cus/+G2ee2BoMRhx369WFla2Y4lg7Y/QuvgkdPDZgZp1JT1cGmgANNzXvao8n5sEoHM6XM5dqfjdB6d4PKyDi1DfIynxdyOXP/eFdBkpBKxZHhk9BpJOzWyhAEMcc4lZrqLYj47PnkWCySOJ9OYy0WRTwSBJ8IoyDl4fniW2Scmh3QIc7MvrEbE6ur+WMn+kxaXWN7g6SHCCnhdLqXAz6/leMwU7MD5lEo4rF37oNl8tGYq7GlFSq1Bi+fT7m+e/0WVmOcegYsRMIsQc0WSnVpUG/lxH/JVVsQpf9rticT72gYLSfpNqJmB+xWV4BjuSs3b5+l+QOWY+KfsToG9+zAcgTIZkso/a6Jh+OvaX4nswk8dQGTrjoGLF7MAUsrQJpHjq1v3R29yPMY+UHGofgOJ8ZeYxnsMRE0hKar3bBGPfdlGqf6DuI85fSEXeyjlRqu8jlzHMc60hGauww4Y2rD9UAcz3wxzFOObSlN2CDN9nH/FWAAi5Yew8BvpusAAAAASUVORK5CYII=") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Process list */
|
||||
html>/**/body #content a[href*="&processlist="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAj5JREFUeNp0k8FrE0EUxr/ZrNvEWlqITdKqTS/ai6AWTyIWFHsTETx4KF49KR68+Q8IHqwgQr2pBasVBEUFL6KtejBLQRDEoiKShBpzWGya3ZnsjG92Z9co6cCPN/Ptm5n33r5huD8MM3acP3LOqbfWWC6Xw93lewFpVf2BnfmFzYaFUMFQ7nQ6E5zzCW1pPa51triR+B4mFo0dM/NRG0IlDnuFECPtdls5jgPS66S9gUy/XyROEw+NZVr85wAuxG7f91U2m2Wkr0ZqmEbLelkbXCYOewTn+4IgAEUC0q34gPSC68Qj4hpRjtIHijaC1GF7KGUpDENQDUB6VEB1zAF76uvpa0MyTsVF1BEYlIyjkfKvxp75yYZDxGMznzLzKRu/KUknTosLDs/z4hQCk1ohvfF7V/6XiBPEExs+OQrSMwyNnw00m83YxY9/rxphYLso3R+SmbzRbS0ozJFjBQ3ekRk6rI/2ZSgqWke6/r4zunjcbNT2KvFcW8Yu9LnTZ09OSqVQ9Wqoe3WUBooobBumFpBYWnjhkuNBdkP07MQMDlgbX9xP5dzk4Gg9oN7JAuushdCRWLm97EJilr2XH1BTR8l/LmlvGg+IlzqFeQg5+/HmOzdfzAODwFBhCKu3XFfrqKp5VKKCXiamjf0WXZ4WtUT2uDWDGatS/rxfaRutS6w72qUedkyfsgXr9Di+qhb60fJW1vJ0/gJeqbek90fdGlMj7hBXCMc0kstMKAPE1v/qo18BN3Q2e85/BBgADNADzS2n40UAAAAASUVORK5CYII=") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Variables */
|
||||
html>/**/body #content a[href*="&variables="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi5JREFUeNqMU0FoE0EUfTvZlArmFpR4L0jT3HvoKR6EQG6eC5bQeuwhIAhpYREUDz2IYKG0SEvoxbOtBIVC793oRTCQQyOlFGNNUrK72Z3x/8nOpkUQP/z9uzv/vX3vz6z1aG0NHJZllank8O/4LKVsySiCUgrfjo9h8w0H1Xu76+ubAS2OOKVERGtm3XVd7DYaT/hblN/53f2FBQhmi9OSDBqNdAaeh+HVFQaDAfr9vq7vHWeT+h4QdsZIsiMCx2ExtaBrOpWaiA5DhETc7Xbxpl5HcXb27et6vUYrzzWBnBAIBgtNg79IisWitpPJZPDRdX8loJAI4qQ5jgnarRb2trbQabfhk/QP+/vwyI4Vk3OvwYmI2ONMLDQODvB4ZQWfDg+RzWbh+z7SQsCmZBLuNTibLzcsUBMD+P56nSJLU7aN1JhATCzwkMYpjIJSuYwXjoOHpRJ+XlzAox0Z9HqYTqf1bLjX4OxwokDPgLNQKCA/NwfeVkmDe1qr6cqZIoWEsRIFZt8pEwVfm01UV1e1nebJCZ5Vq/hCB4nXtAXqNbibFlgBn+dcLvH/bnsbrzY2sLezo58tvasTC+L32ZkhSHaBIwgCbYcrK9E13mbuZQxjRevoCN1Oh4+tHQ8CndNTjEjeD3pfWV7G0uIiliqVRAH3MoaxHLco79ydn3fUtaCBqUhKRcdY0c+l6CdTXhgqn565lzGMtQ1B7/z88nY+/xL/EXI4vIwJwj8CDAAVoIrz1xox8QAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Status */
|
||||
html>/**/body #content a[href*="&status="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAftJREFUeNqkU7+LE0EU/mZ2d3bD7pqckhQqB4YDuQRsTj2t1ULESkgnWKloYRMQizQ2dhZXxkq8fyCFjdrYCAqCCIIgLCgWIkQ0m+Q2+9P3ZnMrNsJ5Ax/zivd973vvzYiiKLCfY/Z6vTbdmwR/j9yQ8NrMsuxsv9+/12q1ulmWIk0zQoIk4ThFnucoTRoQwtQwTYXxePxhOHz4wKSEA7PZrBsEgU5mkKjGv2JCdzQauaZlWflgMECz2dS+eCZl1aKKGUmSIIpiSMkOTO1Sz4BsCiZ3Op2qCltfnFpD9vK9Jk4mIWGOet3X9hnz+aQSkFyJSbtgUnH0EFWMiDil5BiW5RBKMrmmnOiPgBACcRxr4i6c1RbCcIbFIoNt15ZEtXRgUTzVApKSJdvmaumZ4/pm8CEdeJ02jmzdROPSaS1k2w6UsrWIdkCVjdqFk0g3T2Dx6Su8+9eqRXvrx9C4dRE/7j6Bf/083HNXcLi2go2VNh5fvVMJSPHiLSbvPush/nz6Su/dXV/DwduXEQ6fwXUbyLbfIC1yBAIIiMhtVw4cx9F98wC5HaU8qG8LTB89h/M9gUG9S2n89Qx3dsoZmPSILKVUtffyWDTAMYyPvxARUUqxrCgqgSgKaa11T/i+f8MwjNX/+Ujk9gtL1pYfydwjP+UPJfb7nX8LMAC+uy+OK4sAWgAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Alter database */
|
||||
html>/**/body #content a[href*="&database="][href*="&db="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAltJREFUeNqMks1rE1EUxc98kMlkMkkqbaXRhaEStCAhaDeuKii2JBWFtiqCYFcBof+BKW6yU3FpyUJxU1Eo2IKtXdRFV7EiFMG0pVAsxnRmYpPWSTLT+fDNpGpCwfbC4T1m7rvvnt991PDwMPZjkKgLR4sfRNPOhv3zRdO0rmw2+0xVVdRqNRiGCVn+RfYWvF4eoigiEAggGAwglbp5n2EYtBRwwjAMVCoVlEolt4Ak7aKuWRAEEYZpgGZo+AS+pRX6v41SgE0Wm7IaQkNHL0DSGwft/cOmq+ZotvApk8nMxGKxpGVZqFar+1YMwsALv99P/Aexuro6S3KXTisKhhYXWwqcT6fTyWaIkrIDta7Dw3ngFwUECcQriRv9Y6nR6f58PncoxC2lAlXXwRNwe1aIQAR4H4ceWY5EFGWqCDw9BOI/7xbV8C/JRewwzJnI+Ph1GXjIHjqFvxMwsacuYX2Dw6P5+eTV7u4nt2179sgQ620S9rhF3LmWQDwen5Dq9ecjwDLrJDtB1oMQf5ZRqang6RWYpfe43JfA1NsPuHBOqC6vnFzOt7eD3dzcRCgUgq7rditEA1vb29C1zzCNOQwODGDyzRy6e8fw/dWLfEcHjYVyGWwul0M0GgXHcQd4UHoRgvYOg8kEXk7OoLPnHtpO9JILHjNOl2tra+4YefI4xHA47GNZ1n0sHo/HtVBan8Stu6+RnRjB8bOj6Dx1EQxLQ1EUvlAodJKzu4QzjhGFeZ6/ZNt2u2mScdm22wCx8WCoj/76ZYP5uFFkvlEUZRM5/2XSwQLJKfwWYAAtt0zt3hIutwAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Database schema */
|
||||
html>/**/body #content a[href*="&schema="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAcZJREFUeNqkU7tOAkEUvfuABIgsyksTAkgBtISS0kIbYk/sTKgt7PgF/QEK/QMaSDREjQmFNhu0oLEglISHbniEAAE8l8AG2O2Y5OTOnT1z7rk7M8JisaB9hkh7DjmXyx2KoniGuRvozufz19ls9lev13VSJBIhSZJMeVI8Hr/MZDLXwI3T6VQqlUq/2+3W8FEXGA6HNJ1ODbzRaFSTG43GMUTOmcQR+ZOiKNlNm+PxmFqtlm2Xx9/gTIp5PB4lEAiclkqlt2Kx+Gmz2R5kWVYnk0kSnHy/31exwcDTNO1bgB0P7KZB9AEtCBbRayeRSHABdpKvVquEnk15MhY76O9x07LX66XBYKDnbrebms2mgQcBks2OxmKxEGzrOaxTNBpdblgPOCL+0QYBq9VKvV5vay0YDBIu3BE2XbAe0EH+jPhLDoeD/+RWdZzCGlm73U4+n49SqdRVuVx+QdUFR84BEkyvJ/cmL82lUemEJ+Fw+EBV1bs1J5lM3iLcS2YC/D64P1j+wVxdIeb3+12hUChcKBTecYwf7Xb7a9MBz1mQS1u5m1VcAq5cAN8LF6BBXAXquwLC6oFJJhA3wLwp33Jh3+f8L8AAZ3ntkRsbeCkAAAAASUVORK5CYII=") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Refresh */
|
||||
html>/**/body #content a[href*="&refresh="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAt9JREFUeNqkU0tPE1EUPtOZQh9QSVsKtAgB5A3RWDRaU+PCR4RUDSZGSTeuiDvjD3DRhJ1xYeI/MJi4wMRHosTEuJCNEqJBQQtFaAuhb0amnee9nlsLNW5cOMk3c+fc8333nO/McJRS+J9LYLfjD1ZBMJtBEAQw8byX47hxDAcQPZW874g5PGyGELLJ83wY34Nvb3omhb8EQwJPI4cO2tytjRanwybYWFAs6v2JtByMrktXCaVzhq5f2COY9qmUhqy1MHXltOdIm9PSyulgK5UMUBSCZXK2dpeldeyk+4yO5PCY14/PaguUEC/PkchYoGk4tVmCkqrLK1tSMpEuFth+h8/ecKzf1ZVNy3D9vM+/k1dBU9VqBbqqjnf5rO6tuAjZ/K785kPiy3qycBeFRzRZHonGcq+mX0bnPS1WWI/mQNd00BWlKqAqyim3w+zcyRfhayybRPX7aNi0JIpsL4w4cSs86BfzJWhwWcBiFVi82gKe0s1znE2SNUhuFwo4iWlD0wAdZ94E2ajvPZyb/9NtnNT8vgBTkxQdJIOU18QwwDB0qLVY2XgnmRDrGUn+kcPt9c1NdfT568X1aguyHN0uyEXJJIDjgLUBPZlQSzLkUinIZzKwg8Aqj9bV1ZzDnKF4erdRUxTzvgC+vF+LZ3KiUAstvW0+PO0Olj1R2cMu6CjGrnn72lswh9tIZFWM71YFVHVmbflHhtitkODtlqHRwKCnrTGCU/iIeIfr20MXAwNJcz1lORvRuIScbNkLZpAj/Jj1HeLttinX5dHhkk7BbubAUVPWF0WVJCWNxqwCt5J9+mLBKMmzaPSW+OjGbwE0B0yePjD1XgqZfMMRc0+3m+vscBKni33KoimXjdHV2JIWjX4mycUn5NuzGEktQ5lbEWDTcCHcnGegmes8GwRn9yDw5k6MSaDLC5BZ+kRXZpdpfu0nxtKIDHL1PQFWq60C4R9/sFEWBSgil/wSYABg+JOXZhLaRAAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Show structure */
|
||||
html>/**/body .tabs a[href*="&table="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAoJJREFUeNqkU01oE1EQnk02iTFQE7QihUKRkKTF1iU9+FdQCoWYgAcPegkIeiiIWiHgwUvpQXs1Ggo99OYlFwUhWAhYhZJWUmhMxJbYYk1LFDcmJraSv911vjQbevPgg9kZ5vu+eW9n3hM0TaP/WSI+gUCADAYDmUwmEgSBUNRoNJ5jaKjNSyuKsqRjjUaDVFWlWCy2X0BfDJ5nd5r9KxZI0Wh0BuRgMHibcznGrrD/wD6hawwHxBdcLte12dnZGYfDcYOFhkJBpnL5F3Y0IAcMHHB1nYAj+Xw+xHeZ8FSWf1BPTw+trqY2JElyAkilUhsej8dZKhWpu/s4jY+P3+P0s/n5+f0TVCoVqlarL0Oh0KTZbCZZlmlgoN+pqgrBEO/u/iZg4IALTecX+BQX6/X69Xw+v8e7bYqiSMvLy+t+f2AGhhg5YOCAC43+7+T1eh+srCS1hYU32tJSQkun09rg4NA0TwLTIMTIAQMHXGigbU2hVqsZq9UaNZsKKYrKoxRZKDYwKizEyAEDB1xoOk3kzo6xP4PExMT9WyMjl/q2t7+npqYevkBucvLx1d7eE9Li4tutcPjJXEsoCO+z2WxcP0GcC3zmDt8ZHj7bVyyWyO32SLHYOwl4ufyTdna+ELCuriN2nlSEC2x1mshdRZGbkchcSJaLfCOtFI+//prLbRIMMXLAwAEXmk4T+ZLALo+Ojj1PJtc1t7s/bLfbHyUSGQ2GGDlg4IALTesd6Y8JY7JarX6bzTZtsVhOwq+tfdMymZx2MAcOuPrmrSYKaDHRUbZjbIcA8sM6xQ9sADFP4xNf54/t21tnk9kKrG3qBdCLw20T//GCFbY9tj+sVf8KMAACOoVxz9PPRwAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Edit row */
|
||||
html>/**/body table a[href*="&edit="][href*="&where"] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2lpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wUmlnaHRzPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvcmlnaHRzLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcFJpZ2h0czpNYXJrZWQ9IkZhbHNlIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjcwNEVCNDY0MDM4NzExRTFBREUyQ0JDMzAwQUI1NjI2IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjcwNEVCNDYzMDM4NzExRTFBREUyQ0JDMzAwQUI1NjI2IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzMgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ1dWlkOkFDMUYyRTgzMzI0QURGMTFBQUI4QzUzOTBEODVCNUIzIiBzdFJlZjpkb2N1bWVudElEPSJ1dWlkOkM5RDM0OTY2NEEzQ0REMTFCMDhBQkJCQ0ZGMTcyMTU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+MT7FiQAAAiZJREFUeNqMk1FIU1EYx/9nO3e+NranKIw2ErM9SQQXxCKMRdFDCWEaNIuIetseQiIKG/jQQ4H0kkQxdLRaYiijtdWwljjKjQlNRQPHEhWUjca9eb3bPd2tFTdrrgMf53x8/98533e+cwhqDFsDQccpILHYXvbv+f1NBcD5DfB8BcZpLfDAvp9+YrE81c+azc6jLlf3RE/PLgWgtBaoGVZZltv4dLpbcjph6+w8Fhgc3CD/AQIMhzOr5osOV7orlUrBaDTC29gY2L25eZPurwfOtAIHW6rUosKyjOtXr7ns4bEW7G1+Bp7n3Tv1eq+V42bojfMAIdvDpzv67MWiDIvFguFHTS8FgfrnCJmZ4zhUvUQtLEkiVlYWEJ98MW7dg35F0SV/yWgtWBByyGaXEH379L16oFtPyRutlG4H53KrEIQsXo0ORQ0c7qg9C2+V02rw2loakvQdwz7PhMGAXkYR0krVlpaN/gteXp6HohQw9MQzqcK3GSO/Yd8YgyiKf2bAGBrEPC6fdfTZM5nPqq/g8YA3pqZ9S42V4ZEww0iI/VUxFSUYCkW0nbsSOT415YbJZMbDB76PtARTvA5GgWBUqdosmhdJs413tBOdbofR1CXev+uI19Ux94ckCb77xGr9NdD1PE4eOnKhdfR5/3Qk5I99WUIgkkBcLcykxhWNFbf4pd2V0htkl06QgdkMYskFTOdFtlERF0qXXZm1a7kSL9sPAQYA2Q4Ie25SbgYAAAAASUVORK5CYII=") no-repeat 5px bottom;
|
||||
display: block;
|
||||
float: left;
|
||||
height: 16px;
|
||||
overflow: hidden;
|
||||
padding-left: 24px;
|
||||
width: 0;
|
||||
}
|
||||
/* Select data */
|
||||
html>/**/body #menu p a[href*="&select="], html>/**/body .tabs a[href*="&select="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdVJREFUeNqck8tO21AQhn8bB8ehRe0SUEBOlIsSVFGqqlK3oey6K+9A96wTKU/RFU/AG7CrKhAg7gmKiJKIplFWqItWIQEfuzOT2LmsSo408j+2/5lvjo+1rULhM4AFTLfahuu6i3vF4rdp3F/y+W3DVUrzKNk8BTzPC4IKS3h8Hc0Hz49zr8BeXSml8wu8PsU1uW7EhjpHOmd7wX1fs4e9hnIcTUkBDfs1DzGjS5N1pPOGRR3bLjR6ztoNNJm9ebDXcBxnjMD99YCdzGvJT25v8T6ZFH1QLuNjNiv6++UlESyDvSMEEIKcCZzX6zLvXDiMo0pFZn5hWfhxfS2aF3sCAkUvDwmA1ZUVyS9qNawnEn0aKvQhkxF9WCqBPUIgBSYISnd3QmCZJs6qVekaYZqbmzGCfoGnp2AEnyAdjUpeajTwJh4XfU778S6d7tNQISlA3rFN9AkqzaYQmLOzuKIxuGuYaE4H++F/RvbqVEVXE+cgsbSEFFH0Hh+RtW2sxmLo9npYoy/yNpUajkBeo9ftzkwSVFstIeBVpjH8rhc0xigBe43f9/dmKBTCburv4ISb//VvsYe9mmXbX/VIZHman8ntdH7y0BbFSwrjmX6H4s8/AQYAQChL+KIinhAAAAAASUVORK5CYII=") no-repeat left bottom
|
||||
}
|
||||
html>/**/body #menu p a[href*="&select="] {
|
||||
clear: left;
|
||||
display: block;
|
||||
float: left;
|
||||
height: 18px;
|
||||
margin-right: 5px;
|
||||
overflow: hidden;
|
||||
padding-left: 16px;
|
||||
text-decoration: none;
|
||||
width: 0;
|
||||
}
|
||||
html>/**/body .tabs a[href*="&select="] {
|
||||
background-position: 2px bottom;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Edit Sql */
|
||||
html>/**/body #content a[href*="&sql="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY1Mjg3MUE5NEQwOTExRTFBMTlFQjAzMEMzRTgwNzJGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY1Mjg3MUFBNEQwOTExRTFBMTlFQjAzMEMzRTgwNzJGIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RjUyODcxQTc0RDA5MTFFMUExOUVCMDMwQzNFODA3MkYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RjUyODcxQTg0RDA5MTFFMUExOUVCMDMwQzNFODA3MkYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz67SGPfAAABvElEQVR42sTTSyhEURgH8O94jRqTJg1lo6YsptGIpEzKa2FhRGhY2chCWZDSbHATmkgkC81CInklpCxGmlGy8QqTopnFJEXyiGsadDv+p87UbKwsfPXr3PP67nncyzjn9JdIoD/G/ydgiFKUXfAIJmiCLOgEC7zBNmyCAlabwZAx9f6uTybqFRk2oAXy5LNoG4ZRyIAq2W7bXWBkNBq9DRbLClcUvsXYvtgCEpEeArAqV5YPl8v9/AmlX47Jw4WVmUym7MXTU2e1xzPxzPmwSDAOTqiEJZkgObZH7zxpot7iIGvkg3rP/Y1Ws9m8fhyNzqHDm4ROnzzMPnEmsAcpkBhLUlJAmeXF5Kiuc9mUAfdrmi4xFInoL2K30CYnrcOgnJMi0ecXVTgqKKe1zWWbnXH7dvx0FwxrN5qmUTtjhSJBB77GIpTfoJMJrqD0IED2+wca6+5xGacn3SeqykcCQYqiL0lVVTHHIwaH4VCWYjXZUAxbtXb2ytVrrnSyUH0VNctDDsdZE3tOlcvVxR8eIhPOakrY0+0jDV0E+RHqX2JX8AGq9GukQS4cwAvUQLq88lT5sgT273/jjwADAGLJkFFBwODaAAAAAElFTkSuQmCC") no-repeat 2px bottom;
|
||||
margin-left: 10px;
|
||||
padding-left: 22px;
|
||||
}
|
||||
/* Inline plus */
|
||||
html>/**/body #content input[src*="file=plus.gif"] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAelJREFUeNqkU81qFEEQ/tr50UncrI4iwq6oRJCIIV6zxFxE9iCIbxHwXXwA32CPXgRFEZFgPGgiIcfNn0hgYU1mnV070zPTbXXP7Mwke4hgNzVT3f3VV9VV1Uwphf8ZDJ2r9GUXSVuhdZvEP8PmkOQtFF5CqaFttpRauXN99vmDmwtNz7ngVtGnI+QxF9/3Nme3ezt6+cJGavbbCzfmm+JP5ApEBXgwGJh/vV6vcrj3G/ea2wc77ZzAePAtWG54HBaoMAzxefm10VufnqBWqxVnnue5ZGeuaiPJQoyiCJzzAiSEOKFXzxhjGNsVBBpUJdF6v9836/0f+5BSZga2Dd/3JwniOMZoNMK3x+/R6/UwHA4NgeM4+PronTHUMvemhTAKJwnSNAVPOLrdrsm8BmvjseFYQDVKnKRCEGfKkThC4AR4uPU0uyhhNpY+GKP5j8samY0ZcsaodPGpCAIrgJoifWpccJReL+vUl3WUNCciENQBOIcqqiQ4j5JYNxfNMoLIZPcwllQGD2UXkse59VamN072suSSSiZ1S8PCLt3nFq5Jnt61G+40m2aWua+dvwo/13MhnDj+MviZHkQddMQaM5AZdhtL7BmuYJHWl854TAF+YQ2r6hV+q12Wp6eGMs//OhLd8X8FGACYiuElnjs9iAAAAABJRU5ErkJggg==") no-repeat left center;
|
||||
height: 16px;
|
||||
overflow: hidden;
|
||||
padding-left: 16px;
|
||||
width: 0;
|
||||
}
|
||||
/* Inline up */
|
||||
html>/**/body #content input[src*="file=up.gif"] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi1JREFUeNqkUz2IE0EYfZOZ3WySi9FAPLU4fwjEw8IUhyjXxUYrK8FOG8FWQQst7OxEUE7wOq200qv0GguR4+BEMIpwGDxNBE8vcMZcsv87fjPJrkl1iB885s238958M/Mtk1Lif0KI6iINLAfGzhOpEXZto9kkvISUDwHZE4OcvFA9svfS7LH9ZSttWOPrJeIi1Wg7vrO08rVS//idUWpOIArVt9qJmaly51ff6oxIO53BrFAojDpaM0f3lesfvtUGBlIbFFNMWo7jjO399HZFj+eufxnLm2bGIl1R8ZSugOB5LmzbTvD41oFEoPjoN9t2EOuEDAO1hjmOB9d1teDF/arm3W5XC6Iowr3LOZy8+AZccJRKRSogYMMKyCAKmO/7CMMQC3em0Ww28Wyxjna7TZV5eLfaBeccrx/N0pUK9Pu+1ihtbIAgCGG7ARqNBpberuPm/AYMw6B3Frh2t4n3n3qaCzMLyUzEOoHhEbb6EXoex9kb6+D0kkZmx0BAUPzq3AZCvwUzUwDjVP3wCEI7kYEdmjDSeQ0VvttLDISRpXxuvD2i2CD0tQFSalH6b/tQ1yQGZjYxTiL0hwaBp9vT86UrrInEgThOX/mseb50aEzr9Xsu6VRLg8Ndpf0PTwaOU9m5ZypnWBMixQ0oZPK7NeK5gu/Y7trKq9bWz9YT/H6wrMooghUPgp86AzZ5nNy2+ZnkJuSPZYTPF4iuKYOMqlIf599C3X73jwADAG6CADM79TwjAAAAAElFTkSuQmCC") no-repeat left center;
|
||||
height: 16px;
|
||||
overflow: hidden;
|
||||
padding-left: 16px;
|
||||
width: 0;
|
||||
}
|
||||
/* Inline down */
|
||||
html>/**/body #content input[src*="file=down.gif"] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjVJREFUeNqkU01oE1EQ/l72vWTTZps22B+ltCiBRItYsYhSBIkXxUMv9qzgQaH04kEFe/WsIh486s1jDyJePIhIoRepogjRYipoNRBjmuz/Pue9dJf0VKQDHzP7Zr5vZ97sMikl9mKcT78kx/rB2GUKKoShXTgNwitI+QSQbd49k1emp/Zfnz05WTQzwtxZLxE3qbzt+M7b1W+ltY8/GB094ohClaucnpkoNv90zGYPtdnsPuXz+V5Fc+bYgeLah++VroDUAoUUk6bjOElVq9XC84dHdXxx8T0sy0py6XTWJF5B38F2B/A8F7ZtJ0We5+2Ie3NCUPfbPC7DQHnmOB5c102KFKFer2tfq9UQRd2LMLiB4eECNRCoO0AKEQlEAfN9H2EYYvneYSxeMvG73tAC6u0SBh7cnsKbp7MUc3Q6vuYoLtcCZEEQwnYDVKtVTI5I3F0Yp1YF7Znj/s0SThwZ1DFP90EygZiXghqB2tnqRGh7Bubv/NSFx8sDXQIhJp+5+g7CtMBEVnMUNxnBDtMQGQu5oXHML9UTcoyz1z7pXJoEDJFLRqAOaJ7QZ0j1aQGFgX2HMHdrMyGfW/iiz+K8guYQlyPQ62p4vnS5mcvEW8iPlXHhxtck7jWv03aJ19BbgfuZllgeDRynNDg20S/MHE8ZAgpZa0QjflbwHdtdX329sfVr4xn+Pl5RuyyAFQ7COD8HNnqK1Hb5mWQDcnMF4YtlCteVAF0pLP1V/p+pPbb+CTAAmwfytdL1/44AAAAASUVORK5CYII=") no-repeat left center;
|
||||
height: 16px;
|
||||
overflow: hidden;
|
||||
padding-left: 16px;
|
||||
width: 0;
|
||||
}
|
||||
/* Inline cross */
|
||||
html>/**/body #content input[src*="file=cross.gif"] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAe5JREFUeNqkk89KG1EUxr+ZubnUjJaipgtNtTZKxE1AVIi4yM5tF30Hoe/iA3TnQkTBRbZFKApCAl1142CJqLR0ZUNJJpPJZP70nJvcEK0SpAPfzD3n5vedM2dujCRJ8D+XODIMGMA4aYfibdLkCKZO+kxlP5FcwRla7MytrHxcLhazMp2WT5HcbeB5gVOp5H44Dqd2RdTb217a2Mi6vi/h+6O6lu9WV7M3jsPd7ppsQJqMTVO6rgtWdn8fev1YrpskkhlmzZBuLJ8qN5tNLJfLqgw/OX4sxyaaE2G/L8/z0Gq1cLy4iA+1mjKcOzhQ+RrFpmniy9oaUqkUMpkMNDcwCIIAYRhiwraxNz2NwskJLMtSgJQSZwSr6Xa7aDca/xowHFB7Xr0OO47vwazx4W9PJpozu2xK6hCY3N1hLIqQPz29BwshULq8RJp+x5JUTHODIRpkkKbv/GYI/ra+jq+FgjJgbV5dKYMX1KHmBh1ImgFv3pZKCr4geJZiVjWfV+2e53K9LqiQ5kSnfzwjmuIY+cxT8J3g+aF35nWVYJ1rx3HQ6R1pWNd0ewu8bkdRfkYI2zYMi/8M4oF0juGq7//8FUWHh0DF4L2XwMIW8H4KKFL8asRR/vObwHOg3ACu2YA6x0S/wHMunmHzrwADAPb07huzEp/RAAAAAElFTkSuQmCC") no-repeat left center;
|
||||
height: 16px;
|
||||
overflow: hidden;
|
||||
padding-left: 16px;
|
||||
width: 0;
|
||||
}
|
||||
/* Delete */
|
||||
html>/**/body input[name="delete"], html>/**/body input[name="drop"] {
|
||||
background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjE0RDRCQjlFNENFRDExRTFCRkZGOUEzNzI5RTFCODEwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjE0RDRCQjlGNENFRDExRTFCRkZGOUEzNzI5RTFCODEwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTRENEJCOUM0Q0VEMTFFMUJGRkY5QTM3MjlFMUI4MTAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MTRENEJCOUQ0Q0VEMTFFMUJGRkY5QTM3MjlFMUI4MTAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5zX5oGAAAB3klEQVR42qRSvU7CUBS+LQXaBgIpgSiJEpIuxMlVwgMwuOAb8Ah9AgZnJmfeABYegMHoGxiW6qAJJg3UEJAWaIvfKW1TjamDJ/l6b+893/n57uEOhwP7jwn0GQwGjOM4H7Aq0AGugPPA7xV4BEbAjJISut3uMUDMrgVB0CqViqrAstmsSI673e7SNM2WYRg3juP04Tf+VkFIBqGnqmoDlUie5zHLssI7GfHkYrFY0nW9t91uWRiEDxyqqVRKq9frDWSTiEhOcdAZ3dVqtQbP81rQ6rEClNkpl8uqbdsSSkwUDYkkVKLO53PS6S4M0JQkSdlsNpGj67qU0QftCUEAJsuyQpx4gDMsIjm12222XC4ZqvFfJZPJMGjjE8mGwyHb7/diwIla8DPggkFpf0+En2RfNP4oWzg/fgAo/obyLxFAnkwmf2lA/jZx4hU8rNfrJjLKwTAlGpKZxImeET8j9P0MsoVBYkmA4UUtnTjxADOaMPQ/xd6iPn8DtLEWi8UUa584UQuYLiaK4rhQKNCzafl8XgWUdDot0j20sVerlQnoKL+Pasf0SvFRFnBQAl6g+m0ul2tBjwucnwb37wj8BJ3uMZUG/k+AOeCEATzgk7qBwwcwTdDQDXyJw74EGAC1PioqQ6UN2AAAAABJRU5ErkJggg==") no-repeat left center;
|
||||
border: 0;
|
||||
cursor: pointer;
|
||||
font-size: .9em;
|
||||
padding: 1px 5px 1px 18px;
|
||||
}
|
||||
html>/**/body input[name="delete"]:hover, html>/**/body input[name="drop"]:hover {
|
||||
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjFJREFUeNqkU0tPE1EUPvPoOHdaSSkUsYkY2xLTmpCQmJBAumBNZIFLoz+CX8Av6MpfoHHLhgXsTTWE7ohtDRhEkrGpQy0M7e3ceXnO2Db1BQtv8s3cx/m+87pXCsMQ/meo9HktSaDgnyABZBAbOF1GzA3sviDeoatthOnjgvAcnau/CT6JMbaZXVjIZ+bnU2xiQqcI+eXlonl0VDo5PHwqOC+j3c4vEQzJLJncWlpbK4SqyhzPA+fiYnhmzBYKRjqbnaru7m51f+5HIhJ5eCVJmVu6/mZ5fX2Juy4LguCv+UqYqhqG/GBvb184zrMXYWhGEWA+G3PFYv67bTPHca4tWiwWYzO5XP60VqM6vYwEPICV2+l0ymq3R4au60Kv240ghAAPU4pyVlWYnpxMEWdc4F4gyzoZlSoVME0TOp0OKIoC8XgcEokEaJoWCezkctDv9XTijIpI2h56FLYNjUYj8oah/kGmwajdaOuNd8EFOLNbrcXQsozG6uq1NUiQvRB94oxHUGk1myt3VNUwUP2mccZ5mzg0lwcC25/Pzz+BLHMDW2VQ4/8BbDFvOs4xcUYC2HWz6/vl95ZVxwPOUIQN8h2HQHL16qreC4IycUYXiS7IfVw8xtv4QJY3C5qWf6hpqaSi6GTU8f3+RyHadSGOT5BcxWac4n7EHQhQLaYQ0xmA2SJAaQbgET6uu4OL9rUF8KEG8Bbd4hS+ISzkekMBeSxN9YYa0kPsInrIDX4IMADJaAE/Me2jPAAAAABJRU5ErkJggg==");
|
||||
color: red;
|
||||
}
|
||||
/* New item */
|
||||
html>/**/body #content p a[href*="&edit="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAetJREFUeNqUU01LG1EUPW/yQsigUmOISZSkYxdVwW2lm4KkFrpwV6F/QGj3Lrpy4a9oN/0FBcFNQYWIuFHoIsRSWxzFkjZCsKaZNElN5r3eOzMOtEg1F87MvTPvnHfu+xDPVlYghFgAkEH/UZVaaxCy71ZXX/fLpslfSOW6nAtNjycfgEAQSqkQ19X7hTsgrpCuL2AozRIC8/cENo6091aKQL83bKBgsYiPrWOAxxPXkG6v5zlwA4FNW2NCdqC//4Lm2QiP40Q8UxDKB9euHgJxhez5AoED+DNX2lieToS97h0eYnZyMqx3SiVykANxDfnz4QkGd3Pf2MFisgs0NKxhidNaLVwPK5PBcbUa1plkEjzec3A53NQXD+w5l6y9+fz01jtQTL/3HbQc5xSmU2RFyjH1aOZG8qedsufAE2icn+cHOqk5+lCkHHtr27dy4Al0u0IatbgY+mg9V0sarwoHoC4xEWnDku2w53/BoQIHRrI0zUmeFdfrcbQTJsoOkE0kMDYygnFasEaziVwqhfzoKO6m0/hRr185MOTvTocFI1fbyOegEAO+VCrhyeMo2/ZfNY8nbkReUN8UsWg0irf3m0GHpIDsf9eAxxM3JmJkyzDNl4Rcv5dJtVpfRZCbhEFupQ8+XyLnjwADAJgWSEmnMNKYAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;
|
||||
}
|
||||
/* Create view */
|
||||
html>/**/body #content a[href*="&view="] {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAkVJREFUeNqkU89rE1EQns1udhOCrk2KlxIhaaGHFPfQBFJYxFbc+gtvkQq5+uPoQfAPEHJQemnFIAFFzCFYycGLGEgVElgMRhG7OTRiKiaVKCkYSTTbbF5nYuJBDxYy8LFv3sw384b5lmOMwShmgxFt5AIcWv8wGOUg4jhCQ/gR7kHeDuIjIoN4iWgOecMCHBY4L0nSJU3TpqLR6GHDMFz5fF6koKqqZiAQaCWTya+ZTOZDp9NJIO8p9aURHIhroVDoRi6XU9Pp9LRlWWNer1dstdpAQJJIdxSjHMolTp/L8/wp7Lper9c77XabEbLZLCNLJO4zVZ1nmnaO4avYME65xCGugFWWwuGwG58vmqbZnysWi2FnC1ZX431/cnIGqtUSDOOUSxxstEQFHhYKhbFmszntQKMEn88H2awOc3Mn+wSHQwK73fenwC805HwiLm+z2b5UKpWerutWMBgcl2X5AM4LhvEe/H4FZNmN3Q1YWDgG8e4juLm5vLvyPP7ZePD2Dm2Fx1EtPGzUarXtVCr1vVwuNxRF4Z1Ou1gqvRIbjS1QlMAPj8ezdbt6Vzhz+qwrV9W/Iedq77qrSzvkEYcQHlyNG180gd8j6MuDDYF12bnIpvhxEDgzcjHiX3uyZgDPdVGGBW6gRkp0Imjv3D9yW5GfzUdOHP37+kV6/Q33X60uSqhL6R4wmCV35oIyu/H4XfG3DKEo7EvwDK5AF6W+y17vWKjqnz0AOxfEkUDY919TxxV2WXH71iYgsUhkmJBgT4ABAOtC+bduhTyuAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;
|
||||
}
|
||||
/*** Messages ***/
|
||||
.error {
|
||||
border: red 1px solid
|
||||
}
|
||||
.message {
|
||||
border: green 1px solid
|
||||
}
|
||||
.error, .message {
|
||||
margin: 1em 0 0 0
|
||||
}
|
||||
/*** Content ***/
|
||||
#breadcrumb {
|
||||
background: #fbfbfb;
|
||||
border-radius: 2px !important;
|
||||
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;
|
||||
margin-left: 0em;
|
||||
}
|
||||
h2 {
|
||||
display: none
|
||||
}
|
||||
#content {
|
||||
margin: 2em 0 0 21em
|
||||
}
|
||||
.tabs {
|
||||
margin: 12px auto 10px auto
|
||||
}
|
||||
#form + p {
|
||||
margin: 20px 0
|
||||
}
|
||||
/*** Tables ***/
|
||||
html>/**/body table tbody input[name*="check"] {
|
||||
display: block;
|
||||
float: left;
|
||||
}
|
||||
table {
|
||||
border-radius: 2px !important;
|
||||
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;
|
||||
}
|
||||
thead td, thead th {
|
||||
background: #eee
|
||||
}
|
||||
table tbody td:first-child {
|
||||
white-space: normal
|
||||
}
|
||||
td, th {
|
||||
border-color: #bbb;
|
||||
border-width: 0 1px 1px 0;
|
||||
}
|
||||
#tables a {
|
||||
height: 18px;
|
||||
line-height: 18px;
|
||||
}
|
||||
/*** Links ***/
|
||||
a:hover {
|
||||
color: #3b82ca
|
||||
}
|
||||
a, a:visited {
|
||||
color: #385a75
|
||||
}
|
||||
/*** Sidebar ***/
|
||||
#h1 {
|
||||
color: #222;
|
||||
font-style: normal;
|
||||
}
|
||||
#menu {
|
||||
background-color: #fafafa;
|
||||
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;
|
||||
margin: 0;
|
||||
padding-bottom: 0;
|
||||
top: 0;
|
||||
}
|
||||
/*** Forms ***/
|
||||
fieldset {
|
||||
border-radius: 1px !important
|
||||
}
|
||||
/*** Others ***/
|
||||
#lang {
|
||||
font-size: 0.8em;
|
||||
left: auto;
|
||||
right: 6px;
|
||||
}
|
||||
.sqlarea {
|
||||
width: 99%
|
||||
}
|
||||
.jush-sql {
|
||||
padding: 1px 2px
|
||||
}
|
||||
p {
|
||||
margin: 0.8em 0 0 0
|
||||
}
|
||||
#loader {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 16em;
|
||||
}
|
1
designs/readme.txt
Normal file
1
designs/readme.txt
Normal file
@@ -0,0 +1 @@
|
||||
Copy adminer.css alongside Adminer PHP script to use an alternative design.
|
@@ -7,17 +7,18 @@ if ($adminer->homepage()) {
|
||||
if ($_POST["query"] != "") {
|
||||
search_tables();
|
||||
}
|
||||
echo "<table cellspacing='0' class='nowrap' onclick='tableClick(event);'>\n";
|
||||
echo "<table cellspacing='0' class='nowrap checkable' onclick='tableClick(event);'>\n";
|
||||
echo '<thead><tr class="wrap"><td><input id="check-all" type="checkbox" onclick="formCheck(this, /^tables\[/);"><th>' . lang('Table') . '<td>' . lang('Rows') . "</thead>\n";
|
||||
foreach (table_status() as $table => $row) {
|
||||
$name = $adminer->tableName($row);
|
||||
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) . '">' . h($name) . '</a>';
|
||||
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";
|
||||
}
|
||||
|
@@ -32,8 +32,16 @@ function adminer_object() {
|
||||
if ($order && ereg('_(md5|sha1)$', $field["field"])) {
|
||||
return ""; // hide hashes in select
|
||||
}
|
||||
// only columns with comments will be displayed and only the first five in select
|
||||
return ($order <= 5 ? 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,7 +4,7 @@ class Adminer {
|
||||
var $_values = array();
|
||||
|
||||
function name() {
|
||||
return lang('Editor');
|
||||
return "<a href='http://www.adminer.org/editor/' id='h1'>" . lang('Editor') . "</a>";
|
||||
}
|
||||
|
||||
//! driver, ns
|
||||
@@ -19,16 +19,23 @@ class Adminer {
|
||||
|
||||
function database() {
|
||||
global $connection;
|
||||
$databases = get_databases(false);
|
||||
$databases = $this->databases(false);
|
||||
return (!$databases
|
||||
? $connection->result("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', 1)") // username without the database list
|
||||
: $databases[(information_schema($databases[0]) ? 1 : 0)] // first available database
|
||||
);
|
||||
}
|
||||
|
||||
function databases($flush = true) {
|
||||
return get_databases($flush);
|
||||
}
|
||||
|
||||
function headers() {
|
||||
header("X-Frame-Options: deny");
|
||||
header("X-XSS-Protection: 0");
|
||||
return true;
|
||||
}
|
||||
|
||||
function head() {
|
||||
return true;
|
||||
}
|
||||
|
||||
function loginForm() {
|
||||
@@ -46,6 +53,8 @@ document.getElementById('username').focus();
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -117,7 +126,7 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
function rowDescription($table) {
|
||||
// first varchar column
|
||||
foreach (fields($table) as $field) {
|
||||
if ($field["type"] == "varchar") {
|
||||
if (ereg("varchar|character varying", $field["type"])) {
|
||||
return idf_escape($field["field"]);
|
||||
}
|
||||
}
|
||||
@@ -127,28 +136,21 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
function rowDescriptions($rows, $foreignKeys) {
|
||||
$return = $rows;
|
||||
foreach ($rows[0] as $key => $val) {
|
||||
foreach ((array) $foreignKeys[$key] as $foreignKey) {
|
||||
if (count($foreignKey["source"]) == 1) {
|
||||
$id = idf_escape($foreignKey["target"][0]);
|
||||
$name = $this->rowDescription($foreignKey["table"]);
|
||||
if ($name != "") {
|
||||
// find all used ids
|
||||
$ids = array();
|
||||
foreach ($rows as $row) {
|
||||
$ids[$row[$key]] = exact_value($row[$key]);
|
||||
}
|
||||
// uses constant number of queries to get the descriptions, join would be complex, multiple queries would be slow
|
||||
$descriptions = $this->_values[$foreignKey["table"]];
|
||||
if (!$descriptions) {
|
||||
$descriptions = get_key_vals("SELECT $id, $name FROM " . table($foreignKey["table"]) . " WHERE $id IN (" . implode(", ", $ids) . ")");
|
||||
}
|
||||
// use the descriptions
|
||||
foreach ($rows as $n => $row) {
|
||||
if (isset($row[$key])) {
|
||||
$return[$n][$key] = (string) $descriptions[$row[$key]];
|
||||
}
|
||||
}
|
||||
break;
|
||||
if (list($table, $id, $name) = $this->_foreignColumn($foreignKeys, $key)) {
|
||||
// find all used ids
|
||||
$ids = array();
|
||||
foreach ($rows as $row) {
|
||||
$ids[$row[$key]] = exact_value($row[$key]);
|
||||
}
|
||||
// uses constant number of queries to get the descriptions, join would be complex, multiple queries would be slow
|
||||
$descriptions = $this->_values[$table];
|
||||
if (!$descriptions) {
|
||||
$descriptions = get_key_vals("SELECT $id, $name FROM " . table($table) . " WHERE $id IN (" . implode(", ", $ids) . ")");
|
||||
}
|
||||
// use the descriptions
|
||||
foreach ($rows as $n => $row) {
|
||||
if (isset($row[$key])) {
|
||||
$return[$n][$key] = (string) $descriptions[$row[$key]];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -160,17 +162,17 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
$return = ($val == "<i>NULL</i>" ? " " : $val);
|
||||
if (ereg('blob|bytea', $field["type"]) && !is_utf8($val)) {
|
||||
$return = lang('%d byte(s)', strlen($val));
|
||||
if (ereg("^(GIF|\xFF\xD8\xFF|\x89\x50\x4E\x47\x0D\x0A\x1A\x0A)", $val)) { // GIF|JPG|PNG, getimagetype() works with filename
|
||||
if (ereg("^(GIF|\xFF\xD8\xFF|\x89PNG\x0D\x0A\x1A\x0A)", $val)) { // GIF|JPG|PNG, getimagetype() works with filename
|
||||
$return = "<img src='$link' alt='$return'>";
|
||||
}
|
||||
}
|
||||
if (ereg("(tinyint|bit)\\(1\\)", $field["full_type"]) && $return != " ") { // bool
|
||||
$return = '<img src="' . ($val ? "../adminer/static/plus.gif" : "../adminer/static/cross.gif") . '" alt="' . h($val) . '">';
|
||||
if (like_bool($field) && $return != " ") { // bool
|
||||
$return = ($val ? lang('yes') : lang('no'));
|
||||
}
|
||||
if ($link) {
|
||||
$return = "<a href='$link'>$return</a>";
|
||||
}
|
||||
if (!$link && !ereg("(tinyint|bit)\\(1\\)", $field["full_type"]) && ereg('int|float|double|decimal', $field["type"])) {
|
||||
if (!$link && !like_bool($field) && ereg('int|float|double|decimal', $field["type"])) {
|
||||
$return = "<div class='number'>$return</div>"; // Firefox doesn't support <colgroup>
|
||||
} elseif (ereg('date', $field["type"])) {
|
||||
$return = "<div class='datetime'>$return</div>";
|
||||
@@ -198,20 +200,19 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
}
|
||||
$i = 0;
|
||||
$fields = fields($_GET["select"]);
|
||||
foreach ($fields as $name => $field) {
|
||||
if (ereg("enum", $field["type"])) { //! set - uses 1 << $i and FIND_IN_SET()
|
||||
$desc = $columns[$name];
|
||||
foreach ($columns as $name => $desc) {
|
||||
$field = $fields[$name];
|
||||
if (ereg("enum", $field["type"]) || like_bool($field)) { //! set - uses 1 << $i and FIND_IN_SET()
|
||||
$key = $keys[$name];
|
||||
$i--;
|
||||
echo "<div>" . h($desc) . "<input type='hidden' name='where[$i][col]' value='" . h($name) . "'>:";
|
||||
echo enum_input("checkbox", " name='where[$i][val][]'", $field, (array) $where[$key]["val"], ($field["null"] ? 0 : null));
|
||||
echo (like_bool($field)
|
||||
? " <select name='where[$i][val]'>" . optionlist(array("" => "", lang('no'), lang('yes')), $where[$key]["val"], true) . "</select>"
|
||||
: enum_input("checkbox", " name='where[$i][val][]'", $field, (array) $where[$key]["val"], ($field["null"] ? 0 : null))
|
||||
);
|
||||
echo "</div>\n";
|
||||
unset($columns[$name]);
|
||||
}
|
||||
}
|
||||
foreach ($columns as $name => $desc) {
|
||||
$options = $this->_foreignKeyOptions($_GET["select"], $name);
|
||||
if ($options) {
|
||||
} elseif (is_array($options = $this->_foreignKeyOptions($_GET["select"], $name))) {
|
||||
if ($fields[$name]["null"]) {
|
||||
$options[0] = '(' . lang('empty') . ')';
|
||||
}
|
||||
@@ -230,9 +231,9 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
echo "<div><select name='where[$i][col]' onchange='selectAddRow(this);'><option value=''>(" . lang('anywhere') . ")" . optionlist($columns, null, true) . "</select>";
|
||||
echo "<div><select name='where[$i][col]' onchange='this.nextSibling.nextSibling.onchange();'><option value=''>(" . lang('anywhere') . ")" . optionlist($columns, null, true) . "</select>";
|
||||
echo html_select("where[$i][op]", array(-1 => "") + $this->operators);
|
||||
echo "<input name='where[$i][val]'></div>\n";
|
||||
echo "<input name='where[$i][val]' onchange='selectAddRow(this);'></div>\n";
|
||||
echo "</div></fieldset>\n";
|
||||
}
|
||||
|
||||
@@ -250,9 +251,15 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
}
|
||||
if ($orders) {
|
||||
echo '<fieldset><legend>' . lang('Sort') . "</legend><div>";
|
||||
echo "<select name='index_order'>" . optionlist(array("" => "") + $orders, $_GET["index_order"], true) . "</select>";
|
||||
echo "<select name='index_order'>" . optionlist(array("" => "") + $orders, ($_GET["order"][0] != "" ? "" : $_GET["index_order"]), true) . "</select>";
|
||||
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) {
|
||||
@@ -270,16 +277,26 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
echo "</div></fieldset>\n";
|
||||
}
|
||||
|
||||
function selectCommandPrint() {
|
||||
return true;
|
||||
}
|
||||
|
||||
function selectImportPrint() {
|
||||
return true;
|
||||
}
|
||||
|
||||
function selectEmailPrint($emailFields, $columns) {
|
||||
if ($emailFields) {
|
||||
print_fieldset("email", lang('E-mail'), $_POST["email_append"]);
|
||||
echo "<div onkeydown=\"eventStop(event); return bodyKeydown(event, 'email');\">\n";
|
||||
echo "<p>" . lang('From') . ": <input name='email_from' value='" . h($_POST ? $_POST["email_from"] : $_COOKIE["adminer_email"]) . "'>\n";
|
||||
echo lang('Subject') . ": <input name='email_subject' value='" . h($_POST["email_subject"]) . "'>\n";
|
||||
echo "<p><textarea name='email_message' rows='15' cols='75' onkeypress='return textareaKeypress(this, event, false, this.form.email);'>" . h($_POST["email_message"] . ($_POST["email_append"] ? '{$' . "$_POST[email_addition]}" : "")) . "</textarea><br>\n";
|
||||
echo html_select("email_addition", $columns, $_POST["email_addition"]) . "<input type='submit' name='email_append' value='" . lang('Insert') . "'>\n"; //! JavaScript
|
||||
echo "<p><textarea name='email_message' rows='15' cols='75'>" . h($_POST["email_message"] . ($_POST["email_append"] ? '{$' . "$_POST[email_addition]}" : "")) . "</textarea>\n"; //! Ctrl+Enter for this.form.email
|
||||
echo "<p onkeydown=\"eventStop(event); return bodyKeydown(event, 'email_append');\">" . html_select("email_addition", $columns, $_POST["email_addition"]) . "<input type='submit' name='email_append' value='" . lang('Insert') . "'>\n"; //! JavaScript
|
||||
echo "<p>" . lang('Attachments') . ": <input type='file' name='email_files[]' onchange=\"this.onchange = function () { }; var el = this.cloneNode(true); el.value = ''; this.parentNode.appendChild(el);\">";
|
||||
echo "<p>" . (count($emailFields) == 1 ? '<input type="hidden" name="email_field" value="' . h(key($emailFields)) . '">' : html_select("email_field", $emailFields));
|
||||
echo "<input type='submit' name='email' value='" . lang('Send') . "' onclick=\"return this.form['delete'].onclick();\">\n";
|
||||
echo "</div>\n";
|
||||
echo "</div></fieldset>\n";
|
||||
}
|
||||
}
|
||||
@@ -322,10 +339,13 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
}
|
||||
|
||||
function selectOrderProcess($fields, $indexes) {
|
||||
if ($_GET["order"]) {
|
||||
return array(idf_escape($_GET["order"][0]) . (isset($_GET["desc"][0]) ? " DESC" : ""));
|
||||
}
|
||||
$index_order = $_GET["index_order"];
|
||||
if ($index_order != "") {
|
||||
unset($_GET["order"][1]);
|
||||
}
|
||||
if ($_GET["order"]) {
|
||||
return array(idf_escape(reset($_GET["order"])) . ($_GET["desc"] ? " DESC" : ""));
|
||||
}
|
||||
foreach (($index_order != "" ? array($indexes[$index_order]) : $indexes) as $index) {
|
||||
if ($index_order != "" || $index["type"] == "INDEX") {
|
||||
$desc = false;
|
||||
@@ -396,7 +416,7 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
if ($field["null"] && ereg('blob', $field["type"])) {
|
||||
$return["NULL"] = lang('empty');
|
||||
}
|
||||
$return[""] = ($field["null"] || $field["auto_increment"] || ereg("(tinyint|bit)\\(1\\)", $field["full_type"]) ? "" : "*");
|
||||
$return[""] = ($field["null"] || $field["auto_increment"] || like_bool($field) ? "" : "*");
|
||||
//! respect driver
|
||||
if (ereg('date|time', $field["type"])) {
|
||||
$return["now"] = lang('now');
|
||||
@@ -413,15 +433,25 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
. enum_input("radio", $attrs, $field, ($value || isset($_GET["select"]) ? $value : 0), ($field["null"] ? "" : null))
|
||||
;
|
||||
}
|
||||
$options = $this->_foreignKeyOptions($table, $field["field"]);
|
||||
if ($options) {
|
||||
return "<select$attrs>" . optionlist($options, $value, true) . "</select>";
|
||||
$options = $this->_foreignKeyOptions($table, $field["field"], $value);
|
||||
if (isset($options)) {
|
||||
return (is_array($options)
|
||||
? "<select$attrs>" . optionlist($options, $value, true) . "</select>"
|
||||
: "<input value='" . h($value) . "'$attrs class='hidden'><input value='" . h($options) . "' class='jsonly' onkeyup=\"whisper('" . h(ME . "script=complete&source=" . urlencode($table) . "&field=" . urlencode($field["field"])) . "&value=', this);\"><div onclick='return whisperClick(event, this.previousSibling);'></div>"
|
||||
);
|
||||
}
|
||||
if (ereg("(tinyint|bit)\\(1\\)", $field["full_type"])) { // bool
|
||||
if (like_bool($field)) {
|
||||
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"])) {
|
||||
return "<input value='" . h($value) . "'$attrs> (" . lang('[yyyy]-mm-dd') . ")"; //! maxlength
|
||||
$hint = lang('[yyyy]-mm-dd') . ($hint ? " [$hint]" : "");
|
||||
}
|
||||
if ($hint) {
|
||||
return "<input value='" . h($value) . "'$attrs> ($hint)"; //! maxlength
|
||||
}
|
||||
if (eregi('_(md5|sha1)$', $field["field"])) {
|
||||
return "<input type='password' value='" . h($value) . "'$attrs>";
|
||||
@@ -438,7 +468,7 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
$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));
|
||||
if (!ereg('char|text', $field["type"]) && !ereg("(tinyint|bit)\\(1\\)", $field["full_type"]) && $value == "") {
|
||||
if ($value == "" && ($field["null"] || !ereg('char|text', $field["type"])) && !like_bool($field)) {
|
||||
$return = "NULL";
|
||||
} elseif (ereg('^(md5|sha1)$', $function)) {
|
||||
$return = "$function($return)";
|
||||
@@ -466,6 +496,10 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
$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);
|
||||
}
|
||||
}
|
||||
@@ -485,8 +519,7 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
global $VERSION, $token;
|
||||
?>
|
||||
<h1>
|
||||
<a href="http://www.adminer.org/" id="h1"><?php echo $this->name(); ?></a>
|
||||
<span class="version"><?php echo $VERSION; ?></span>
|
||||
<?php echo $this->name(); ?> <span class="version"><?php echo $VERSION; ?></span>
|
||||
<a href="http://www.adminer.org/editor/#download" id="version"><?php echo (version_compare($VERSION, $_COOKIE["adminer_version"]) < 0 ? h($_COOKIE["adminer_version"]) : ""); ?></a>
|
||||
</h1>
|
||||
<?php
|
||||
@@ -505,8 +538,8 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
?>
|
||||
<form action="" method="post">
|
||||
<p class="logout">
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
<input type="submit" name="logout" value="<?php echo lang('Logout'); ?>" onclick="eventStop(event);">
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</p>
|
||||
</form>
|
||||
<?php
|
||||
@@ -526,28 +559,37 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
||||
foreach ($tables as $row) {
|
||||
$name = $this->tableName($row);
|
||||
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"]) . ">$name</a><br>\n";
|
||||
echo "<a href='" . h(ME) . 'select=' . urlencode($row["Name"]) . "'" . bold($_GET["select"] == $row["Name"]) . " title='" . lang('Select data') . "'>$name</a><br>\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function _foreignKeyOptions($table, $column) {
|
||||
$foreignKeys = column_foreign_keys($table);
|
||||
function _foreignColumn($foreignKeys, $column) {
|
||||
foreach ((array) $foreignKeys[$column] as $foreignKey) {
|
||||
if (count($foreignKey["source"]) == 1) {
|
||||
$id = idf_escape($foreignKey["target"][0]);
|
||||
$name = $this->rowDescription($foreignKey["table"]);
|
||||
if ($name != "") {
|
||||
$return = &$this->_values[$foreignKey["table"]];
|
||||
if (!isset($return)) {
|
||||
$table_status = table_status($foreignKey["table"]);
|
||||
$return = ($table_status["Rows"] > 1000 ? array() : array("" => "") + get_key_vals("SELECT $id, $name FROM " . table($foreignKey["table"]) . " ORDER BY 2"));
|
||||
}
|
||||
return $return;
|
||||
$id = idf_escape($foreignKey["target"][0]);
|
||||
return array($foreignKey["table"], $id, $name);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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 (!isset($return)) {
|
||||
$table_status = table_status($target);
|
||||
$return = ($table_status["Rows"] > 1000 ? "" : array("" => "") + get_key_vals("SELECT $id, $name FROM " . table($target) . " ORDER BY 2"));
|
||||
}
|
||||
if (!$return && isset($value)) {
|
||||
return $connection->result("SELECT $name FROM " . table($target) . " WHERE $id = " . q($value));
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@@ -16,12 +16,12 @@ function email_header($header) {
|
||||
* @param array
|
||||
* @return bool
|
||||
*/
|
||||
function send_mail($email, $subject, $message, $from = "", $files = array("error" => array())) {
|
||||
function send_mail($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
|
||||
$message = str_replace("\n", $eol, wordwrap(str_replace("\r", "", "$message\n")));
|
||||
$boundary = uniqid("boundary");
|
||||
$attachments = "";
|
||||
foreach ($files["error"] as $key => $val) {
|
||||
foreach ((array) $files["error"] as $key => $val) {
|
||||
if (!$val) {
|
||||
$attachments .= "--$boundary$eol"
|
||||
. "Content-Type: " . str_replace("\n", "", $files["type"][$key]) . $eol
|
||||
@@ -43,3 +43,11 @@ function send_mail($email, $subject, $message, $from = "", $files = array("error
|
||||
;
|
||||
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"]);
|
||||
}
|
||||
|
@@ -19,6 +19,8 @@ if (isset($_GET["download"])) {
|
||||
include "../adminer/edit.inc.php";
|
||||
} elseif (isset($_GET["select"])) {
|
||||
include "../adminer/select.inc.php";
|
||||
} elseif (isset($_GET["script"])) {
|
||||
include "./script.inc.php";
|
||||
} else {
|
||||
include "./db.inc.php";
|
||||
}
|
||||
|
12
editor/script.inc.php
Normal file
12
editor/script.inc.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
if (list($table, $id, $name) = $adminer->_foreignColumn(column_foreign_keys($_GET["source"]), $_GET["field"])) {
|
||||
$result = $connection->query("SELECT $id, $name FROM " . table($table) . " WHERE " . (ereg('^[0-9]+$', $_GET["value"]) ? "$id = $_GET[value] OR " : "") . "$name LIKE " . q("$_GET[value]%") . " ORDER BY 2 LIMIT 11");
|
||||
for ($i=0; $i < 10 && ($row = $result->fetch_row()); $i++) {
|
||||
echo "<a href='" . h(ME . "edit=" . urlencode($table) . "&where" . urlencode("[" . bracket_escape(idf_unescape($id)) . "]") . "=" . urlencode($row[0])) . "'>" . h($row[1]) . "</a><br>\n";
|
||||
}
|
||||
if ($i == 10) {
|
||||
echo "...\n";
|
||||
}
|
||||
}
|
||||
|
||||
exit; // don't print footer
|
@@ -1,4 +1,36 @@
|
||||
// Editor specific functions
|
||||
|
||||
function bodyLoad(version) {
|
||||
if (history.state !== undefined) {
|
||||
onpopstate(history);
|
||||
}
|
||||
}
|
||||
|
||||
function whisperClick(event, field) {
|
||||
var el = event.target || event.srcElement;
|
||||
if (/^a$/i.test(el.tagName) && !(event.button || event.ctrlKey || event.shiftKey || event.altKey || event.metaKey)) {
|
||||
field.value = el.firstChild.data;
|
||||
field.previousSibling.value = decodeURIComponent(el.href.replace(/.*=/, ''));
|
||||
field.nextSibling.style.display = 'none';
|
||||
eventStop(event);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function whisper(url, field) {
|
||||
if (field.orig != field.value) { // ignore arrows, Shift, ...
|
||||
field.orig = field.value;
|
||||
field.previousSibling.value = field.value; // accept number, reject string
|
||||
return ajax(url + encodeURIComponent(field.value), function (xmlhttp) {
|
||||
if (xmlhttp.status && field.orig == field.value) { // ignore old responses
|
||||
field.nextSibling.innerHTML = xmlhttp.responseText;
|
||||
field.nextSibling.style.display = '';
|
||||
var a = field.nextSibling.firstChild;
|
||||
if (a && a.firstChild.data == field.value) {
|
||||
field.previousSibling.value = decodeURIComponent(a.href.replace(/.*=/, ''));
|
||||
a.className = 'active';
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
2
externals/jsmin-php
vendored
2
externals/jsmin-php
vendored
Submodule externals/jsmin-php updated: f89f32db50...8689392dab
2
externals/jush
vendored
2
externals/jush
vendored
Submodule externals/jush updated: d9a8b6d1dd...bc2b8c15bf
28
plugins/database-hide.php
Normal file
28
plugins/database-hide.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
/** Hide some databases from the interface - just to improve design, not a security plugin
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
*/
|
||||
class AdminerDatabaseHide {
|
||||
protected $disabled;
|
||||
|
||||
/**
|
||||
* @param array case insensitive database names in values
|
||||
*/
|
||||
function AdminerDatabaseHide($disabled) {
|
||||
$this->disabled = array_map('strtolower', $disabled);
|
||||
}
|
||||
|
||||
function databases($flush = true) {
|
||||
$return = array();
|
||||
foreach (get_databases($flush) as $db) {
|
||||
if (!in_array(strtolower($db), $this->disabled)) {
|
||||
$return[] = $db;
|
||||
}
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
}
|
@@ -7,6 +7,7 @@
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
*/
|
||||
class AdminerDumpZip {
|
||||
/** @access protected */
|
||||
var $filename;
|
||||
|
||||
function dumpOutput() {
|
||||
|
@@ -8,39 +8,39 @@
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
*/
|
||||
class AdminerEditCalendar {
|
||||
/** @access protected */
|
||||
var $prepend, $langPath;
|
||||
|
||||
/**
|
||||
* @param string text to append before first calendar usage
|
||||
* @param string path to language file, %s stands for language code
|
||||
*/
|
||||
function AdminerEditCalendar($prepend = "<script type='text/javascript' src='jquery-ui/jquery.js'></script>\n<script type='text/javascript' src='jquery-ui/jquery-ui.js'></script>\n<script type='text/javascript' src='jquery-ui/jquery-ui-timepicker-addon.js'></script>\n<link rel='stylesheet' type='text/css' href='jquery-ui/jquery-ui.css'>\n", $langPath = "jquery-ui/i18n/jquery.ui.datepicker-%s.js") { //! insert <link> by JavaScript to achieve HTML validity
|
||||
function AdminerEditCalendar($prepend = "<script type='text/javascript' src='jquery-ui/jquery.js'></script>\n<script type='text/javascript' src='jquery-ui/jquery-ui.js'></script>\n<script type='text/javascript' src='jquery-ui/jquery-ui-timepicker-addon.js'></script>\n<link rel='stylesheet' type='text/css' href='jquery-ui/jquery-ui.css'>\n", $langPath = "jquery-ui/i18n/jquery.ui.datepicker-%s.js") {
|
||||
$this->prepend = $prepend;
|
||||
$this->langPath = $langPath;
|
||||
}
|
||||
|
||||
function editInput($table, $field, $attrs, $value) {
|
||||
static $calendar = false;
|
||||
if (ereg("date|time", $field["type"])) {
|
||||
if (!$calendar) {
|
||||
$calendar = true;
|
||||
echo $this->prepend;
|
||||
if ($this->langPath && function_exists('get_lang')) { // since Adminer 3.2.0
|
||||
$lang = get_lang();
|
||||
$lang = ($lang == "zh" ? "zh-CN" : ($lang == "zh-tw" ? "zh-TW" : $lang));
|
||||
if ($lang != "en" && file_exists(sprintf($this->langPath, $lang))) {
|
||||
printf("<script type='text/javascript' src='$this->langPath'></script>\n", $lang);
|
||||
echo "<script type='text/javascript'>jQuery(function () { jQuery.timepicker.setDefaults(jQuery.datepicker.regional['$lang']); });</script>\n";
|
||||
}
|
||||
}
|
||||
function head() {
|
||||
echo $this->prepend;
|
||||
if ($this->langPath && function_exists('get_lang')) { // since Adminer 3.2.0
|
||||
$lang = get_lang();
|
||||
$lang = ($lang == "zh" ? "zh-CN" : ($lang == "zh-tw" ? "zh-TW" : $lang));
|
||||
if ($lang != "en" && file_exists(sprintf($this->langPath, $lang))) {
|
||||
printf("<script type='text/javascript' src='$this->langPath'></script>\n", $lang);
|
||||
echo "<script type='text/javascript'>jQuery(function () { jQuery.timepicker.setDefaults(jQuery.datepicker.regional['$lang']); });</script>\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function editInput($table, $field, $attrs, $value) {
|
||||
if (ereg("date|time", $field["type"])) {
|
||||
$dateFormat = "changeYear: true, dateFormat: 'yy-mm-dd'"; //! yy-mm-dd regional
|
||||
$timeFormat = "showSecond: true, timeFormat: 'hh:mm:ss'";
|
||||
return "<input id='fields-" . h($field["field"]) . "' value='" . h($value) . "'" . ($maxlength ? " maxlength='$maxlength'" : "") . "$attrs><script type='text/javascript'>jQuery(function () { jQuery('#fields-" . js_escape($field["field"]) . "')."
|
||||
return "<input id='fields-" . h($field["field"]) . "' value='" . h($value) . "'" . (+$field["length"] ? " maxlength='" . (+$field["length"]) . "'" : "") . "$attrs><script type='text/javascript'>jQuery('#fields-" . js_escape($field["field"]) . "')."
|
||||
. ($field["type"] == "time" ? "timepicker({ $timeFormat })"
|
||||
: (ereg("time", $field["type"]) ? "datetimepicker({ $dateFormat, $timeFormat })"
|
||||
: "datepicker({ $dateFormat })"
|
||||
)) . "; });</script>";
|
||||
)) . ";</script>";
|
||||
}
|
||||
}
|
||||
|
||||
|
30
plugins/edit-foreign.php
Normal file
30
plugins/edit-foreign.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
/** Select foreign key in edit form
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
*/
|
||||
class AdminerEditForeign {
|
||||
|
||||
function editInput($table, $field, $attrs, $value) {
|
||||
static $foreignTables = array();
|
||||
static $values = array();
|
||||
$foreignKeys = &$foreignTables[$table];
|
||||
if (!isset($foreignKeys)) {
|
||||
$foreignKeys = column_foreign_keys($table);
|
||||
}
|
||||
foreach ((array) $foreignKeys[$field["field"]] as $foreignKey) {
|
||||
if (count($foreignKey["source"]) == 1) {
|
||||
$target = $foreignKey["table"];
|
||||
$id = $foreignKey["target"][0];
|
||||
$options = &$values[$target][$id];
|
||||
if (!$options) {
|
||||
$options = array("" => "") + get_vals("SELECT " . idf_escape($id) . " FROM " . table($target) . " ORDER BY 1");
|
||||
}
|
||||
return "<select$attrs>" . optionlist($options, $value) . "</select>";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
16
plugins/edit-textarea.php
Normal file
16
plugins/edit-textarea.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
/** Use <textarea> for char and varchar
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
*/
|
||||
class AdminerEditTextarea {
|
||||
|
||||
function editInput($table, $field, $attrs, $value) {
|
||||
if (ereg('char', $field["type"])) {
|
||||
return "<textarea cols='30' rows='1' style='height: 1.2em;'$attrs>" . h($value) . '</textarea>';
|
||||
}
|
||||
}
|
||||
|
||||
}
|
52
plugins/email-table.php
Normal file
52
plugins/email-table.php
Normal file
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
/** Get e-mail subject and message from database (Adminer Editor)
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
*/
|
||||
class AdminerEmailTable {
|
||||
/** @access protected */
|
||||
var $table, $id, $title, $subject, $message;
|
||||
|
||||
/**
|
||||
* @param string quoted table name
|
||||
* @param string quoted column name
|
||||
* @param string quoted column name
|
||||
* @param string quoted column name
|
||||
* @param string quoted column name
|
||||
*/
|
||||
function AdminerEmailTable($table = "email", $id = "id", $title = "subject", $subject = "subject", $message = "message") {
|
||||
$this->table = $table;
|
||||
$this->id = $id;
|
||||
$this->title = $title;
|
||||
$this->subject = $subject;
|
||||
$this->message = $message;
|
||||
}
|
||||
|
||||
function selectEmailPrint($emailFields, $columns) {
|
||||
if ($emailFields) {
|
||||
print_fieldset("email", ('E-mail'));
|
||||
echo "<div onkeydown=\"eventStop(event); return bodyKeydown(event, 'email');\">\n";
|
||||
echo "<p>" . ('From') . ": <input name='email_from' value='" . h($_POST ? $_POST["email_from"] : $_COOKIE["adminer_email"]) . "'>\n";
|
||||
echo ('Subject') . ": <select name='email_id'><option>" . optionlist(get_key_vals("SELECT $this->id, $this->title FROM $this->table ORDER BY $this->title"), $_POST["email_id"], true) . "</select>\n";
|
||||
echo "<p>" . ('Attachments') . ": <input type='file' name='email_files[]' onchange=\"this.onchange = function () { }; var el = this.cloneNode(true); el.value = ''; this.parentNode.appendChild(el);\">";
|
||||
echo "<p>" . (count($emailFields) == 1 ? '<input type="hidden" name="email_field" value="' . h(key($emailFields)) . '">' : html_select("email_field", $emailFields));
|
||||
echo "<input type='submit' name='email' value='" . ('Send') . "' onclick=\"return this.form['delete'].onclick();\">\n";
|
||||
echo "</div>\n";
|
||||
echo "</div></fieldset>\n";
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
function selectEmailProcess($where, $foreignKeys) {
|
||||
$connection = connection();
|
||||
if ($_POST["email_id"]) {
|
||||
$result = $connection->query("SELECT $this->subject, $this->message FROM $this->table WHERE $this->id = " . q($_POST["email_id"]));
|
||||
$row = $result->fetch_row();
|
||||
$_POST["email_subject"] = $row[0];
|
||||
$_POST["email_message"] = $row[1];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -1,4 +1,5 @@
|
||||
<?php
|
||||
//! delete
|
||||
|
||||
/** Edit fields ending with "_path" by <input type="file"> and link to the uploaded files from select
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
@@ -6,15 +7,18 @@
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
*/
|
||||
class AdminerFileUpload {
|
||||
var $uploadPath, $displayPath;
|
||||
/** @access protected */
|
||||
var $uploadPath, $displayPath, $extensions;
|
||||
|
||||
/**
|
||||
* @param string prefix for uploading data (create writable subdirectory for each table containing uploadable fields)
|
||||
* @param string prefix for displaying data, null stands for $uploadPath
|
||||
* @param string regular expression with allowed file extensions
|
||||
*/
|
||||
function AdminerFileUpload($uploadPath = "../static/data/", $displayPath = null) {
|
||||
function AdminerFileUpload($uploadPath = "../static/data/", $displayPath = null, $extensions = "[a-zA-Z0-9]+") {
|
||||
$this->uploadPath = $uploadPath;
|
||||
$this->displayPath = (isset($displayPath) ? $displayPath : $uploadPath);
|
||||
$this->extensions = $extensions;
|
||||
}
|
||||
|
||||
function editInput($table, $field, $attrs, $value) {
|
||||
@@ -27,7 +31,7 @@ class AdminerFileUpload {
|
||||
if (ereg('(.*)_path$', $field["field"], $regs)) {
|
||||
$table = ($_GET["edit"] != "" ? $_GET["edit"] : $_GET["select"]);
|
||||
$name = "fields-$field[field]";
|
||||
if ($_FILES[$name]["error"] || !eregi('(\\.([a-z0-9]+))?$', $_FILES[$name]["name"], $regs2)) {
|
||||
if ($_FILES[$name]["error"] || !ereg("(\\.($this->extensions))?\$", $_FILES[$name]["name"], $regs2)) {
|
||||
return false;
|
||||
}
|
||||
//! unlink old
|
||||
|
@@ -6,6 +6,7 @@
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
*/
|
||||
class AdminerFrames {
|
||||
/** @access protected */
|
||||
var $sameOrigin;
|
||||
|
||||
/**
|
||||
@@ -20,7 +21,7 @@ class AdminerFrames {
|
||||
header("X-Frame-Options: SameOrigin");
|
||||
}
|
||||
header("X-XSS-Protection: 0");
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
50
plugins/login-servers.php
Normal file
50
plugins/login-servers.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
/** Display constant list of servers in login form
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
*/
|
||||
class AdminerLoginServers {
|
||||
/** @access protected */
|
||||
var $servers, $driver;
|
||||
|
||||
/** Set supported servers
|
||||
* @param array array($domain) or array($domain => $description) or array($category => array())
|
||||
* @param string
|
||||
*/
|
||||
function AdminerLoginServers($servers, $driver = "server") {
|
||||
$this->servers = $servers;
|
||||
$this->driver = $driver;
|
||||
}
|
||||
|
||||
function login($login, $password) {
|
||||
// check if server is allowed
|
||||
foreach ($this->servers as $key => $val) {
|
||||
$servers = $val;
|
||||
if (!is_array($val)) {
|
||||
$servers = array($key => $val);
|
||||
}
|
||||
foreach ($servers as $k => $v) {
|
||||
if ((is_string($k) ? $k : $v) == SERVER) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function loginForm() {
|
||||
?>
|
||||
<table cellspacing="0">
|
||||
<tr><th><?php echo lang('Server'); ?><td><input type="hidden" name="driver" value="<?php echo $this->driver; ?>"><select name="server"><?php echo optionlist($this->servers, SERVER); ?></select>
|
||||
<tr><th><?php echo lang('Username'); ?><td><input id="username" name="username" value="<?php echo h($_GET["username"]); ?>">
|
||||
<tr><th><?php echo lang('Password'); ?><td><input type="password" name="password">
|
||||
</table>
|
||||
<p><input type="submit" value="<?php echo lang('Login'); ?>">
|
||||
<?php
|
||||
echo checkbox("permanent", 1, $_COOKIE["adminer_permanent"], lang('Permanent login')) . "\n";
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
@@ -15,15 +15,19 @@ CREATE TABLE login (
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
*/
|
||||
class AdminerLoginTable {
|
||||
/** @access protected */
|
||||
var $database;
|
||||
|
||||
/** Set database of login table
|
||||
* @param string
|
||||
*/
|
||||
function AdminerLoginTable($database) {
|
||||
$this->database = $database;
|
||||
}
|
||||
|
||||
function login($login, $password) {
|
||||
$connection = connection();
|
||||
return (bool) $connection->result($q = "SELECT COUNT(*) FROM " . idf_escape($this->database) . ".login WHERE login = " . $connection->quote($login) . " AND password_sha1 = " . $connection->quote(sha1($password)));
|
||||
return (bool) $connection->result("SELECT COUNT(*) FROM " . idf_escape($this->database) . ".login WHERE login = " . q($login) . " AND password_sha1 = " . q(sha1($password)));
|
||||
}
|
||||
|
||||
}
|
||||
|
38
plugins/password-sha1.php
Normal file
38
plugins/password-sha1.php
Normal file
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
/** Store password's SHA1 to session
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
*/
|
||||
class AdminerPasswordSha1 {
|
||||
/** @access protected */
|
||||
var $login, $passwordSha1, $credentials;
|
||||
|
||||
/**
|
||||
* @param string
|
||||
* @param string
|
||||
* @param array returned by credentials()
|
||||
*/
|
||||
function AdminerPasswordSha1($login, $passwordSha1, $credentials) {
|
||||
$this->login = $login;
|
||||
$this->passwordSha1 = $passwordSha1;
|
||||
$this->credentials = $credentials;
|
||||
if (isset($_POST["password"])) {
|
||||
$_POST["password"] = sha1($_POST["password"]);
|
||||
}
|
||||
}
|
||||
|
||||
function login($login, $password) {
|
||||
return ($login == $this->login && $password == $this->passwordSha1);
|
||||
}
|
||||
|
||||
function credentials() {
|
||||
return $this->credentials;
|
||||
}
|
||||
|
||||
function permanentLogin() {
|
||||
//! should save original $_POST["password"] and hash after load
|
||||
}
|
||||
|
||||
}
|
@@ -6,16 +6,43 @@
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
*/
|
||||
class AdminerPlugin extends Adminer {
|
||||
/** @access protected */
|
||||
var $plugins;
|
||||
|
||||
/**
|
||||
* @param array
|
||||
function _findRootClass($class) { // is_subclass_of(string, string) is available since PHP 5.0.3
|
||||
do {
|
||||
$return = $class;
|
||||
} while ($class = get_parent_class($class));
|
||||
return $return;
|
||||
}
|
||||
|
||||
/** Register plugins
|
||||
* @param array object instances or null to register all classes starting by 'Adminer'
|
||||
*/
|
||||
function AdminerPlugin($plugins) {
|
||||
if (!isset($plugins)) {
|
||||
$plugins = array();
|
||||
foreach (get_declared_classes() as $class) {
|
||||
if (preg_match('~^Adminer.~i', $class) && strcasecmp($this->_findRootClass($class), 'Adminer')) { // can use interface since PHP 5
|
||||
$plugins[$class] = new $class;
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->plugins = $plugins;
|
||||
// it is possible to use ReflectionObject in PHP 5 to find out which plugins defines which methods at once
|
||||
}
|
||||
|
||||
function _callParent($function, $args) {
|
||||
switch (count($args)) { // call_user_func_array(array('parent', $function), $args) works since PHP 5
|
||||
case 0: return parent::$function();
|
||||
case 1: return parent::$function($args[0]);
|
||||
case 2: return parent::$function($args[0], $args[1]);
|
||||
case 3: return parent::$function($args[0], $args[1], $args[2]);
|
||||
case 4: return parent::$function($args[0], $args[1], $args[2], $args[3]);
|
||||
default: trigger_error('Too many parameters.', E_USER_WARNING);
|
||||
}
|
||||
}
|
||||
|
||||
function _applyPlugin($function, $args) {
|
||||
foreach ($this->plugins as $plugin) {
|
||||
if (method_exists($plugin, $function)) {
|
||||
@@ -32,11 +59,11 @@ class AdminerPlugin extends Adminer {
|
||||
}
|
||||
}
|
||||
}
|
||||
return call_user_func_array(array($this, "parent::$function"), $args);
|
||||
return $this->_callParent($function, $args);
|
||||
}
|
||||
|
||||
function _appendPlugin($function, $args) {
|
||||
$return = call_user_func_array(array($this, "parent::$function"), $args);
|
||||
$return = $this->_callParent($function, $args);
|
||||
foreach ($this->plugins as $plugin) {
|
||||
if (method_exists($plugin, $function)) {
|
||||
$return += call_user_func_array(array($plugin, $function), $args);
|
||||
@@ -84,11 +111,21 @@ class AdminerPlugin extends Adminer {
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function databases() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function headers() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function head() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function loginForm() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
@@ -184,6 +221,16 @@ class AdminerPlugin extends Adminer {
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function selectCommandPrint() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function selectImportPrint() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function selectEmailPrint() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user