mirror of
https://github.com/vrana/adminer.git
synced 2026-03-25 22:10:02 +01:00
Compare commits
337 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7cb3e768bb | ||
|
|
baf7225602 | ||
|
|
0cfc68e6c6 | ||
|
|
03dfea2943 | ||
|
|
54f6806339 | ||
|
|
ee4f7db641 | ||
|
|
b53762ae5f | ||
|
|
866d109a9b | ||
|
|
37c57c386a | ||
|
|
1f5ca321b6 | ||
|
|
059d6266e2 | ||
|
|
0e1d8c67fc | ||
|
|
a113a25123 | ||
|
|
49a865d106 | ||
|
|
026b362e7d | ||
|
|
7c32360c67 | ||
|
|
8a94bc6f41 | ||
|
|
3f901cfe30 | ||
|
|
c8fd73d70a | ||
|
|
30d0060b96 | ||
|
|
8b157a673e | ||
|
|
ce381aaf48 | ||
|
|
d3eac979d4 | ||
|
|
f19e23c98b | ||
|
|
705d3a910f | ||
|
|
d18c7b3587 | ||
|
|
1f12ea4e4a | ||
|
|
71a6a1269d | ||
|
|
6a3bce1174 | ||
|
|
28acee861f | ||
|
|
42b15654c4 | ||
|
|
e2d858d638 | ||
|
|
879963dec1 | ||
|
|
daa19b0a6e | ||
|
|
d27ee7a388 | ||
|
|
1ec4637ade | ||
|
|
ea1ff7e902 | ||
|
|
2761f44cf4 | ||
|
|
557b8b178e | ||
|
|
07d1bc4291 | ||
|
|
7ac96dd0b2 | ||
|
|
eeb7ce1939 | ||
|
|
ea4ac5c8f3 | ||
|
|
3906231dc5 | ||
|
|
fad20d1065 | ||
|
|
ffb4ee3a61 | ||
|
|
34d338b185 | ||
|
|
1b148bc08c | ||
|
|
f4983dfd5f | ||
|
|
800fbb9b9e | ||
|
|
4b1960f498 | ||
|
|
e299e9d82d | ||
|
|
cf7fe88990 | ||
|
|
60e5d24116 | ||
|
|
a1927d5b71 | ||
|
|
76d7560d27 | ||
|
|
f0b7d8ccd0 | ||
|
|
d322e0165b | ||
|
|
4009ede3ee | ||
|
|
cddd61c214 | ||
|
|
8b8cfd9f04 | ||
|
|
99d7b88341 | ||
|
|
2db1c74310 | ||
|
|
fb2d34f739 | ||
|
|
6e2f681faa | ||
|
|
686865bc10 | ||
|
|
996ebf61d7 | ||
|
|
6a7ee5a2f3 | ||
|
|
4b45722fad | ||
|
|
14998e12b6 | ||
|
|
718f9d3791 | ||
|
|
964a988fef | ||
|
|
66e7ec56bb | ||
|
|
ca336427f5 | ||
|
|
8a75cbc630 | ||
|
|
c8bb112a5d | ||
|
|
06660882b5 | ||
|
|
42eec7d728 | ||
|
|
cac523402a | ||
|
|
02cd416093 | ||
|
|
33f0023d37 | ||
|
|
f09d26a51d | ||
|
|
b500a46f9a | ||
|
|
19653de764 | ||
|
|
29c127e94a | ||
|
|
4417a8b220 | ||
|
|
17b110f0d5 | ||
|
|
b649fb2f3f | ||
|
|
d3914ea58e | ||
|
|
31d8803db2 | ||
|
|
d43b773214 | ||
|
|
f09a04ed09 | ||
|
|
d7f9b6b5de | ||
|
|
197abdcb70 | ||
|
|
c2de3b8ec1 | ||
|
|
c52fb951b0 | ||
|
|
14429ff355 | ||
|
|
a7632fd9fd | ||
|
|
967d5c64a3 | ||
|
|
c34ada5368 | ||
|
|
2d7bda4d1e | ||
|
|
6cfb3676a7 | ||
|
|
11a7fc0277 | ||
|
|
de539cf0c7 | ||
|
|
880902da17 | ||
|
|
89ceb06208 | ||
|
|
d2ed0f7810 | ||
|
|
7b0c58af32 | ||
|
|
d3cdfc17de | ||
|
|
f097817386 | ||
|
|
3b55c4c0f7 | ||
|
|
6636434378 | ||
|
|
dd3e57086b | ||
|
|
473b60361b | ||
|
|
f128c2d1ea | ||
|
|
c75096f173 | ||
|
|
c0b2c506bc | ||
|
|
0ebf710d41 | ||
|
|
fa41126c37 | ||
|
|
09920e0056 | ||
|
|
685bf29abc | ||
|
|
0866c79afb | ||
|
|
e8e3ced948 | ||
|
|
52d98e16fa | ||
|
|
763e66a148 | ||
|
|
8868b48e4c | ||
|
|
4961588f7d | ||
|
|
f4625da53d | ||
|
|
dc94b2ec38 | ||
|
|
f8af8c9cbf | ||
|
|
e55f0d7cb2 | ||
|
|
5b7f2d9086 | ||
|
|
6d55395d9e | ||
|
|
2e6190fdf1 | ||
|
|
b9ad864b75 | ||
|
|
7296f017fb | ||
|
|
ae91088cb3 | ||
|
|
51a574926d | ||
|
|
532a4ee083 | ||
|
|
6b9c0dee14 | ||
|
|
be75939344 | ||
|
|
d667f585e0 | ||
|
|
ebb23a7a88 | ||
|
|
e9add6d985 | ||
|
|
e3346fb0bc | ||
|
|
ae2ea56681 | ||
|
|
080fd0f374 | ||
|
|
e32f90f8ff | ||
|
|
7ad09d2cb4 | ||
|
|
40038d4210 | ||
|
|
2adc174541 | ||
|
|
2fb2d208c0 | ||
|
|
4de6e3180d | ||
|
|
8829ccdf93 | ||
|
|
0320bcdda6 | ||
|
|
851700516d | ||
|
|
d542843fdd | ||
|
|
4bb2f806b1 | ||
|
|
cc31a69b65 | ||
|
|
78f0a1152e | ||
|
|
1f21cd4329 | ||
|
|
9f69160797 | ||
|
|
e81334ef87 | ||
|
|
6c3e1e2768 | ||
|
|
92739f48ce | ||
|
|
d28d01e76c | ||
|
|
75450548b3 | ||
|
|
c3b4208853 | ||
|
|
d38c673e2a | ||
|
|
93686eab65 | ||
|
|
224ddb5a33 | ||
|
|
4db23fd471 | ||
|
|
a003866a55 | ||
|
|
0d90f1f1dd | ||
|
|
ef5a76392d | ||
|
|
8d0cbb6eb4 | ||
|
|
536999d4dc | ||
|
|
827a2b8a54 | ||
|
|
a954f7d4b4 | ||
|
|
a137f248f7 | ||
|
|
95d02bb924 | ||
|
|
921e57b9aa | ||
|
|
25f9655a38 | ||
|
|
919204dd38 | ||
|
|
34f25afe90 | ||
|
|
8b29ae910f | ||
|
|
6c96b060e7 | ||
|
|
f4662d5e27 | ||
|
|
b15618fcfd | ||
|
|
03e3f517a8 | ||
|
|
f0d2af329a | ||
|
|
452b9ad7f1 | ||
|
|
fb18e814de | ||
|
|
75413c56d2 | ||
|
|
c3d83d5412 | ||
|
|
b14aa75a98 | ||
|
|
dbc76a2b1e | ||
|
|
6d774794c8 | ||
|
|
81be5edb97 | ||
|
|
e30e5dd059 | ||
|
|
0cdd8beab1 | ||
|
|
7b9d5a29aa | ||
|
|
5cc831c1e1 | ||
|
|
72aa3c5127 | ||
|
|
43ccfcef8f | ||
|
|
c789c147b7 | ||
|
|
a2adb67d2f | ||
|
|
34e2f47761 | ||
|
|
0d2b232bd7 | ||
|
|
83e16e059f | ||
|
|
6e4dc3911f | ||
|
|
2a08a11e89 | ||
|
|
993dce398d | ||
|
|
eee9a62c8f | ||
|
|
ce17b6cf46 | ||
|
|
923c0ffc87 | ||
|
|
48ed20323f | ||
|
|
9a4cd8936d | ||
|
|
019ada8da5 | ||
|
|
6a95b71164 | ||
|
|
3b4ce4a0b4 | ||
|
|
a414896885 | ||
|
|
47734d8ff4 | ||
|
|
fef1808288 | ||
|
|
d2c82fdeca | ||
|
|
e657cdbc3a | ||
|
|
bc14e8432f | ||
|
|
34b03ef835 | ||
|
|
329b7de9cc | ||
|
|
2dcad1f284 | ||
|
|
1b98a10100 | ||
|
|
187dd56b1c | ||
|
|
ba9099f084 | ||
|
|
16e05167a4 | ||
|
|
756e304c92 | ||
|
|
e762a6aa95 | ||
|
|
b3d5c9affe | ||
|
|
0268aba85a | ||
|
|
9ca92309a1 | ||
|
|
0fae40fb61 | ||
|
|
0e5df34ea8 | ||
|
|
f3938c1a66 | ||
|
|
07aa80048a | ||
|
|
c57e7ac3e3 | ||
|
|
6d14b47d02 | ||
|
|
ef3b468626 | ||
|
|
4d38c09db5 | ||
|
|
3ba99a1c2a | ||
|
|
9cbdb6262b | ||
|
|
cc268428b8 | ||
|
|
80d030f51a | ||
|
|
e23da5da0e | ||
|
|
9d532fc0a1 | ||
|
|
144c7de27f | ||
|
|
b7fcebfba8 | ||
|
|
d39a6e59c7 | ||
|
|
fc559a1cf6 | ||
|
|
f457053d85 | ||
|
|
e255ba9aa4 | ||
|
|
3fe0d88f98 | ||
|
|
68c6b1c942 | ||
|
|
001c37e240 | ||
|
|
b6cc584f48 | ||
|
|
af1ad47a64 | ||
|
|
2eaac2e94e | ||
|
|
40abffe8de | ||
|
|
259a465125 | ||
|
|
6c1fbf13c6 | ||
|
|
6353a89816 | ||
|
|
38aac7ada2 | ||
|
|
24245867d7 | ||
|
|
1459df56bc | ||
|
|
dc3a0e1a32 | ||
|
|
0411495d20 | ||
|
|
3d69fbf5f7 | ||
|
|
5e9df49fd1 | ||
|
|
565a5ca0eb | ||
|
|
9061583538 | ||
|
|
35b1db6974 | ||
|
|
068ee71bf7 | ||
|
|
efcf37d162 | ||
|
|
e645693147 | ||
|
|
12fbfc9847 | ||
|
|
6b2ba65084 | ||
|
|
a5ee3451ac | ||
|
|
da671df728 | ||
|
|
650221357d | ||
|
|
d996b48cfa | ||
|
|
22b4322710 | ||
|
|
36edd445a6 | ||
|
|
7305783c21 | ||
|
|
ee3a88d574 | ||
|
|
e5c52589ec | ||
|
|
3b0e1cf289 | ||
|
|
767fc0e47e | ||
|
|
63581af0f6 | ||
|
|
813ada6661 | ||
|
|
4be72a2a0d | ||
|
|
541c3c1fed | ||
|
|
3408d4ad78 | ||
|
|
e614ae08c4 | ||
|
|
552d2a6be4 | ||
|
|
415253b1b1 | ||
|
|
d07b7e3773 | ||
|
|
3de101dff4 | ||
|
|
48dacd1e97 | ||
|
|
14778165a8 | ||
|
|
72b199378a | ||
|
|
329fa55af5 | ||
|
|
ecf34769ad | ||
|
|
dc85ba2d86 | ||
|
|
741b76fbd4 | ||
|
|
58b2904d62 | ||
|
|
9cb281868f | ||
|
|
67f6aea77f | ||
|
|
7bcba262df | ||
|
|
75c0786d2e | ||
|
|
c4f6cbb32e | ||
|
|
b10e9e127e | ||
|
|
32f1e856ad | ||
|
|
17e45e9a9c | ||
|
|
e1f43da8df | ||
|
|
70aef8a55a | ||
|
|
0b824dad29 | ||
|
|
65fa4b4e31 | ||
|
|
c0a3f30060 | ||
|
|
7af1ee3702 | ||
|
|
3cbece1ec0 | ||
|
|
0d73372c50 | ||
|
|
fb7bd02713 | ||
|
|
fb71941daa | ||
|
|
504c56216c | ||
|
|
88803c6d0e | ||
|
|
b585ee8261 | ||
|
|
f4817e8568 | ||
|
|
105aca9b04 | ||
|
|
f556f6acb1 |
@@ -1,5 +1,5 @@
|
|||||||
language: php
|
language: php
|
||||||
php:
|
php:
|
||||||
- '5.3'
|
- '5.6'
|
||||||
- '7.1'
|
- '7.1'
|
||||||
script: git diff --name-only $TRAVIS_COMMIT_RANGE | grep '\.php$' | xargs -n1 -P8 php -l | grep -v 'No syntax errors'; test $? -eq 1
|
script: git diff --name-only $TRAVIS_COMMIT_RANGE | grep '\.php$' | xargs -n1 -P8 php -l | grep -v 'No syntax errors'; test $? -eq 1
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
$PROCEDURE = $_GET["call"];
|
$PROCEDURE = ($_GET["name"] ? $_GET["name"] : $_GET["call"]);
|
||||||
page_header(lang('Call') . ": " . h($PROCEDURE), $error);
|
page_header(lang('Call') . ": " . h($PROCEDURE), $error);
|
||||||
|
|
||||||
$routine = routine($PROCEDURE, (isset($_GET["callf"]) ? "FUNCTION" : "PROCEDURE"));
|
$routine = routine($_GET["call"], (isset($_GET["callf"]) ? "FUNCTION" : "PROCEDURE"));
|
||||||
$in = array();
|
$in = array();
|
||||||
$out = array();
|
$out = array();
|
||||||
foreach ($routine["fields"] as $i => $field) {
|
foreach ($routine["fields"] as $i => $field) {
|
||||||
@@ -30,9 +30,12 @@ if (!$error && $_POST) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$query = (isset($_GET["callf"]) ? "SELECT" : "CALL") . " " . table($PROCEDURE) . "(" . implode(", ", $call) . ")";
|
$query = (isset($_GET["callf"]) ? "SELECT" : "CALL") . " " . table($PROCEDURE) . "(" . implode(", ", $call) . ")";
|
||||||
echo "<p><code class='jush-$jush'>" . h($query) . "</code> <a href='" . h(ME) . "sql=" . urlencode($query) . "'>" . lang('Edit') . "</a>\n";
|
$start = microtime(true);
|
||||||
|
$result = $connection->multi_query($query);
|
||||||
|
$affected = $connection->affected_rows; // getting warnigns overwrites this
|
||||||
|
echo $adminer->selectQuery($query, $start, !$result);
|
||||||
|
|
||||||
if (!$connection->multi_query($query)) {
|
if (!$result) {
|
||||||
echo "<p class='error'>" . error() . "\n";
|
echo "<p class='error'>" . error() . "\n";
|
||||||
} else {
|
} else {
|
||||||
$connection2 = connect();
|
$connection2 = connect();
|
||||||
@@ -45,7 +48,7 @@ if (!$error && $_POST) {
|
|||||||
if (is_object($result)) {
|
if (is_object($result)) {
|
||||||
select($result, $connection2);
|
select($result, $connection2);
|
||||||
} else {
|
} else {
|
||||||
echo "<p class='message'>" . lang('Routine has been called, %d row(s) affected.', $connection->affected_rows) . "\n";
|
echo "<p class='message'>" . lang('Routine has been called, %d row(s) affected.', $affected) . "\n";
|
||||||
}
|
}
|
||||||
} while ($connection->next_result());
|
} while ($connection->next_result());
|
||||||
|
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ page_header(($TABLE != "" ? lang('Alter table') : lang('Create table')), $error,
|
|||||||
if (!$_POST) {
|
if (!$_POST) {
|
||||||
$row = array(
|
$row = array(
|
||||||
"Engine" => $_COOKIE["adminer_engine"],
|
"Engine" => $_COOKIE["adminer_engine"],
|
||||||
"fields" => array(array("field" => "", "type" => (isset($types["int"]) ? "int" : (isset($types["integer"]) ? "integer" : "")))),
|
"fields" => array(array("field" => "", "type" => (isset($types["int"]) ? "int" : (isset($types["integer"]) ? "integer" : "")), "on_update" => "")),
|
||||||
"partition_names" => array(""),
|
"partition_names" => array(""),
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -163,8 +163,8 @@ foreach ($engines as $engine) {
|
|||||||
<p>
|
<p>
|
||||||
<?php if (support("columns") || $TABLE == "") { ?>
|
<?php if (support("columns") || $TABLE == "") { ?>
|
||||||
<?php echo lang('Table name'); ?>: <input name="name" maxlength="64" value="<?php echo h($row["name"]); ?>" autocapitalize="off">
|
<?php echo lang('Table name'); ?>: <input name="name" maxlength="64" value="<?php echo h($row["name"]); ?>" autocapitalize="off">
|
||||||
<?php if ($TABLE == "" && !$_POST) { ?><script type='text/javascript'>focus(document.getElementById('form')['name']);</script><?php } ?>
|
<?php if ($TABLE == "" && !$_POST) { echo script("focus(qs('#form')['name']);"); } ?>
|
||||||
<?php echo ($engines ? "<select name='Engine' onchange='helpClose();'" . on_help("getTarget(event).value", 1) . ">" . optionlist(array("" => "(" . lang('engine') . ")") + $engines, $row["Engine"]) . "</select>" : ""); ?>
|
<?php echo ($engines ? "<select name='Engine'>" . optionlist(array("" => "(" . lang('engine') . ")") + $engines, $row["Engine"]) . "</select>" . on_help("getTarget(event).value", 1) . script("qsl('select').onchange = helpClose;") : ""); ?>
|
||||||
<?php echo ($collations && !preg_match("~sqlite|mssql~", $jush) ? html_select("Collation", array("" => "(" . lang('collation') . ")") + $collations, $row["Collation"]) : ""); ?>
|
<?php echo ($collations && !preg_match("~sqlite|mssql~", $jush) ? html_select("Collation", array("" => "(" . lang('collation') . ")") + $collations, $row["Collation"]) : ""); ?>
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
@@ -186,25 +186,26 @@ edit_fields($row["fields"], $collations, "TABLE", $foreign_keys, $comments);
|
|||||||
</table>
|
</table>
|
||||||
<p>
|
<p>
|
||||||
<?php echo lang('Auto Increment'); ?>: <input type="number" name="Auto_increment" size="6" value="<?php echo h($row["Auto_increment"]); ?>">
|
<?php echo lang('Auto Increment'); ?>: <input type="number" name="Auto_increment" size="6" value="<?php echo h($row["Auto_increment"]); ?>">
|
||||||
<?php echo checkbox("defaults", 1, true, lang('Default values'), "columnShow(this.checked, 5)", "jsonly"); ?>
|
<?php echo checkbox("defaults", 1, !$_POST || $_POST["defaults"], lang('Default values'), "columnShow(this.checked, 5)", "jsonly"); ?>
|
||||||
<?php if (!$_POST["defaults"]) { ?><script type="text/javascript">editingHideDefaults()</script><?php } ?>
|
<?php echo ($_POST ? "" : script("editingHideDefaults();")); ?>
|
||||||
<?php echo (support("comment")
|
<?php echo (support("comment")
|
||||||
? "<label><input type='checkbox' name='comments' value='1' class='jsonly' onclick=\"columnShow(this.checked, 6); toggle('Comment'); if (this.checked) this.form['Comment'].focus();\"" . ($comments ? " checked" : "") . ">" . lang('Comment') . "</label>"
|
? "<label><input type='checkbox' name='comments' value='1' class='jsonly'" . ($comments ? " checked" : "") . ">" . lang('Comment') . "</label>"
|
||||||
. ' <input name="Comment" id="Comment" value="' . h($row["Comment"]) . '" maxlength="' . ($connection->server_info >= 5.5 ? 2048 : 60) . '"' . ($comments ? '' : ' class="hidden"') . '>'
|
. script("qsl('input').onclick = partial(editingCommentsClick, true);")
|
||||||
|
. ' <input name="Comment" value="' . h($row["Comment"]) . '" maxlength="' . (min_version(5.5) ? 2048 : 60) . '"' . ($comments ? '' : ' class="hidden"') . '>'
|
||||||
: '')
|
: '')
|
||||||
; ?>
|
; ?>
|
||||||
<p>
|
<p>
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
|
|
||||||
<?php if ($TABLE != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo confirm(); ?>><?php } ?>
|
<?php if ($TABLE != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"><?php echo confirm(lang('Drop %s?', $TABLE)); ?><?php } ?>
|
||||||
<?php
|
<?php
|
||||||
if (support("partitioning")) {
|
if (support("partitioning")) {
|
||||||
$partition_table = preg_match('~RANGE|LIST~', $row["partition_by"]);
|
$partition_table = preg_match('~RANGE|LIST~', $row["partition_by"]);
|
||||||
print_fieldset("partition", lang('Partition by'), $row["partition_by"]);
|
print_fieldset("partition", lang('Partition by'), $row["partition_by"]);
|
||||||
?>
|
?>
|
||||||
<p>
|
<p>
|
||||||
<?php echo "<select name='partition_by' onchange='partitionByChange(this);'" . on_help("getTarget(event).value.replace(/./, 'PARTITION BY \$&')", 1) . ">" . optionlist(array("" => "") + $partition_by, $row["partition_by"]) . "</select>"; ?>
|
<?php echo "<select name='partition_by'>" . optionlist(array("" => "") + $partition_by, $row["partition_by"]) . "</select>" . on_help("getTarget(event).value.replace(/./, 'PARTITION BY \$&')", 1) . script("qsl('select').onchange = partitionByChange;"); ?>
|
||||||
(<input name="partition" value="<?php echo h($row["partition"]); ?>">)
|
(<input name="partition" value="<?php echo h($row["partition"]); ?>">)
|
||||||
<?php echo lang('Partitions'); ?>: <input type="number" name="partitions" class="size<?php echo ($partition_table || !$row["partition_by"] ? " hidden" : ""); ?>" value="<?php echo h($row["partitions"]); ?>">
|
<?php echo lang('Partitions'); ?>: <input type="number" name="partitions" class="size<?php echo ($partition_table || !$row["partition_by"] ? " hidden" : ""); ?>" value="<?php echo h($row["partitions"]); ?>">
|
||||||
<table cellspacing="0" id="partition-table"<?php echo ($partition_table ? "" : " class='hidden'"); ?>>
|
<table cellspacing="0" id="partition-table"<?php echo ($partition_table ? "" : " class='hidden'"); ?>>
|
||||||
@@ -212,7 +213,8 @@ if (support("partitioning")) {
|
|||||||
<?php
|
<?php
|
||||||
foreach ($row["partition_names"] as $key => $val) {
|
foreach ($row["partition_names"] as $key => $val) {
|
||||||
echo '<tr>';
|
echo '<tr>';
|
||||||
echo '<td><input name="partition_names[]" value="' . h($val) . '"' . ($key == count($row["partition_names"]) - 1 ? ' onchange="partitionNameChange(this);"' : '') . ' autocapitalize="off">';
|
echo '<td><input name="partition_names[]" value="' . h($val) . '" autocapitalize="off">';
|
||||||
|
echo ($key == count($row["partition_names"]) - 1 ? script("qsl('input').oninput = partitionNameChange;") : '');
|
||||||
echo '<td><input name="partition_values[]" value="' . h($row["partition_values"][$key]) . '">';
|
echo '<td><input name="partition_values[]" value="' . h($row["partition_values"][$key]) . '">';
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
@@ -223,3 +225,4 @@ foreach ($row["partition_names"] as $key => $val) {
|
|||||||
?>
|
?>
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
</form>
|
</form>
|
||||||
|
<?php echo script("qs('#form')['defaults'].onclick();" . (support("comment") ? " editingCommentsClick.call(qs('#form')['comments']);" : "")); ?>
|
||||||
|
|||||||
@@ -63,14 +63,15 @@ echo ($_POST["add_x"] || strpos($name, "\n")
|
|||||||
: '<input name="name" id="name" value="' . h($name) . '" maxlength="64" autocapitalize="off">'
|
: '<input name="name" id="name" value="' . h($name) . '" maxlength="64" autocapitalize="off">'
|
||||||
) . "\n" . ($collations ? html_select("collation", array("" => "(" . lang('collation') . ")") + $collations, $row["collation"]) . doc_link(array(
|
) . "\n" . ($collations ? html_select("collation", array("" => "(" . lang('collation') . ")") + $collations, $row["collation"]) . doc_link(array(
|
||||||
'sql' => "charset-charsets.html",
|
'sql' => "charset-charsets.html",
|
||||||
|
'mariadb' => "supported-character-sets-and-collations/",
|
||||||
'mssql' => "ms187963.aspx",
|
'mssql' => "ms187963.aspx",
|
||||||
)) : "");
|
)) : "");
|
||||||
|
echo script("focus(qs('#name'));");
|
||||||
?>
|
?>
|
||||||
<script type='text/javascript'>focus(document.getElementById('name'));</script>
|
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||||
<?php
|
<?php
|
||||||
if (DB != "") {
|
if (DB != "") {
|
||||||
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm() . ">\n";
|
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'>" . confirm(lang('Drop %s?', DB)) . "\n";
|
||||||
} elseif (!$_POST["add_x"] && $_GET["db"] == "") {
|
} elseif (!$_POST["add_x"] && $_GET["db"] == "") {
|
||||||
echo "<input type='image' class='icon' name='add' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>\n";
|
echo "<input type='image' class='icon' name='add' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>\n";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ $tables_views = array_merge((array) $_POST["tables"], (array) $_POST["views"]);
|
|||||||
if ($tables_views && !$error && !$_POST["search"]) {
|
if ($tables_views && !$error && !$_POST["search"]) {
|
||||||
$result = true;
|
$result = true;
|
||||||
$message = "";
|
$message = "";
|
||||||
if ($jush == "sql" && count($_POST["tables"]) > 1 && ($_POST["drop"] || $_POST["truncate"] || $_POST["copy"])) {
|
if ($jush == "sql" && $_POST["tables"] && count($_POST["tables"]) > 1 && ($_POST["drop"] || $_POST["truncate"] || $_POST["copy"])) {
|
||||||
queries("SET foreign_key_checks = 0"); // allows to truncate or drop several tables at once
|
queries("SET foreign_key_checks = 0"); // allows to truncate or drop several tables at once
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,22 +56,27 @@ if ($adminer->homepage()) {
|
|||||||
echo "<form action='' method='post'>\n";
|
echo "<form action='' method='post'>\n";
|
||||||
if (support("table")) {
|
if (support("table")) {
|
||||||
echo "<fieldset><legend>" . lang('Search data in tables') . " <span id='selected2'></span></legend><div>";
|
echo "<fieldset><legend>" . lang('Search data in tables') . " <span id='selected2'></span></legend><div>";
|
||||||
echo "<input type='search' name='query' value='" . h($_POST["query"]) . "'> <input type='submit' name='search' value='" . lang('Search') . "'>\n";
|
echo "<input type='search' name='query' value='" . h($_POST["query"]) . "'>";
|
||||||
|
echo script("qsl('input').onkeydown = partialArg(bodyKeydown, 'search');", "");
|
||||||
|
echo " <input type='submit' name='search' value='" . lang('Search') . "'>\n";
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
if ($_POST["search"] && $_POST["query"] != "") {
|
if ($_POST["search"] && $_POST["query"] != "") {
|
||||||
|
$_GET["where"][0]["op"] = "LIKE %%";
|
||||||
search_tables();
|
search_tables();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$doc_link = doc_link(array('sql' => 'show-table-status.html'));
|
$doc_link = doc_link(array('sql' => 'show-table-status.html'));
|
||||||
echo "<table cellspacing='0' class='nowrap checkable' onclick='tableClick(event);' ondblclick='tableClick(event, true);'>\n";
|
echo "<table cellspacing='0' class='nowrap checkable'>\n";
|
||||||
echo '<thead><tr class="wrap"><td><input id="check-all" type="checkbox" onclick="formCheck(this, /^(tables|views)\[/);" class="jsonly">';
|
echo script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});");
|
||||||
|
echo '<thead><tr class="wrap">';
|
||||||
|
echo '<td><input id="check-all" type="checkbox" class="jsonly">' . script("qs('#check-all').onclick = partial(formCheck, /^(tables|views)\[/);", "");
|
||||||
echo '<th>' . lang('Table');
|
echo '<th>' . lang('Table');
|
||||||
echo '<td>' . lang('Engine') . doc_link(array('sql' => 'storage-engines.html'));
|
echo '<td>' . lang('Engine') . doc_link(array('sql' => 'storage-engines.html'));
|
||||||
echo '<td>' . lang('Collation') . doc_link(array('sql' => 'charset-mysql.html'));
|
echo '<td>' . lang('Collation') . doc_link(array('sql' => 'charset-charsets.html', 'mariadb' => 'supported-character-sets-and-collations/'));
|
||||||
echo '<td>' . lang('Data Length') . $doc_link;
|
echo '<td>' . lang('Data Length') . $doc_link;
|
||||||
echo '<td>' . lang('Index Length') . $doc_link;
|
echo '<td>' . lang('Index Length') . $doc_link;
|
||||||
echo '<td>' . lang('Data Free') . $doc_link;
|
echo '<td>' . lang('Data Free') . $doc_link;
|
||||||
echo '<td>' . lang('Auto Increment') . doc_link(array('sql' => 'example-auto-increment.html'));
|
echo '<td>' . lang('Auto Increment') . doc_link(array('sql' => 'example-auto-increment.html', 'mariadb' => 'auto_increment/'));
|
||||||
echo '<td>' . lang('Rows') . $doc_link;
|
echo '<td>' . lang('Rows') . $doc_link;
|
||||||
echo (support("comment") ? '<td>' . lang('Comment') . $doc_link : '');
|
echo (support("comment") ? '<td>' . lang('Comment') . $doc_link : '');
|
||||||
echo "</thead>\n";
|
echo "</thead>\n";
|
||||||
@@ -80,7 +85,7 @@ if ($adminer->homepage()) {
|
|||||||
foreach ($tables_list as $name => $type) {
|
foreach ($tables_list as $name => $type) {
|
||||||
$view = ($type !== null && !preg_match('~table~i', $type));
|
$view = ($type !== null && !preg_match('~table~i', $type));
|
||||||
$id = h("Table-" . $name);
|
$id = h("Table-" . $name);
|
||||||
echo '<tr' . odd() . '><td>' . checkbox(($view ? "views[]" : "tables[]"), $name, in_array($name, $tables_views, true), "", "formUncheck('check-all');", "", $id);
|
echo '<tr' . odd() . '><td>' . checkbox(($view ? "views[]" : "tables[]"), $name, in_array($name, $tables_views, true), "", "", "", $id);
|
||||||
echo '<th>' . (support("table") || support("indexes") ? "<a href='" . h(ME) . "table=" . urlencode($name) . "' title='" . lang('Show structure') . "' id='$id'>" . h($name) . '</a>' : h($name));
|
echo '<th>' . (support("table") || support("indexes") ? "<a href='" . h(ME) . "table=" . urlencode($name) . "' title='" . lang('Show structure') . "' id='$id'>" . h($name) . '</a>' : h($name));
|
||||||
if ($view) {
|
if ($view) {
|
||||||
echo '<td colspan="6"><a href="' . h(ME) . "view=" . urlencode($name) . '" title="' . lang('Alter view') . '">' . (preg_match('~materialized~i', $type) ? lang('Materialized view') : lang('View')) . '</a>';
|
echo '<td colspan="6"><a href="' . h(ME) . "view=" . urlencode($name) . '" title="' . lang('Alter view') . '">' . (preg_match('~materialized~i', $type) ? lang('Materialized view') : lang('View')) . '</a>';
|
||||||
@@ -115,17 +120,18 @@ if ($adminer->homepage()) {
|
|||||||
|
|
||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
if (!information_schema(DB)) {
|
if (!information_schema(DB)) {
|
||||||
$vacuum = "<input type='submit' value='" . lang('Vacuum') . "'" . on_help("'VACUUM'") . "> ";
|
echo "<div class='footer'><div>\n";
|
||||||
$optimize = "<input type='submit' name='optimize' value='" . lang('Optimize') . "'" . on_help($jush == "sql" ? "'OPTIMIZE TABLE'" : "'VACUUM OPTIMIZE'") . "> ";
|
$vacuum = "<input type='submit' value='" . lang('Vacuum') . "'> " . on_help("'VACUUM'");
|
||||||
|
$optimize = "<input type='submit' name='optimize' value='" . lang('Optimize') . "'> " . on_help($jush == "sql" ? "'OPTIMIZE TABLE'" : "'VACUUM OPTIMIZE'");
|
||||||
echo "<fieldset><legend>" . lang('Selected') . " <span id='selected'></span></legend><div>"
|
echo "<fieldset><legend>" . lang('Selected') . " <span id='selected'></span></legend><div>"
|
||||||
. ($jush == "sqlite" ? $vacuum
|
. ($jush == "sqlite" ? $vacuum
|
||||||
: ($jush == "pgsql" ? $vacuum . $optimize
|
: ($jush == "pgsql" ? $vacuum . $optimize
|
||||||
: ($jush == "sql" ? "<input type='submit' value='" . lang('Analyze') . "'" . on_help("'ANALYZE TABLE'") . "> " . $optimize
|
: ($jush == "sql" ? "<input type='submit' value='" . lang('Analyze') . "'> " . on_help("'ANALYZE TABLE'") . $optimize
|
||||||
. "<input type='submit' name='check' value='" . lang('Check') . "'" . on_help("'CHECK TABLE'") . "> "
|
. "<input type='submit' name='check' value='" . lang('Check') . "'> " . on_help("'CHECK TABLE'")
|
||||||
. "<input type='submit' name='repair' value='" . lang('Repair') . "'" . on_help("'REPAIR TABLE'") . "> "
|
. "<input type='submit' name='repair' value='" . lang('Repair') . "'> " . on_help("'REPAIR TABLE'")
|
||||||
: "")))
|
: "")))
|
||||||
. "<input type='submit' name='truncate' value='" . lang('Truncate') . "'" . confirm() . on_help($jush == "sqlite" ? "'DELETE'" : "'TRUNCATE" . ($jush == "pgsql" ? "'" : " TABLE'")) . "> "
|
. "<input type='submit' name='truncate' value='" . lang('Truncate') . "'> " . on_help($jush == "sqlite" ? "'DELETE'" : "'TRUNCATE" . ($jush == "pgsql" ? "'" : " TABLE'")) . confirm()
|
||||||
. "<input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm() . on_help("'DROP TABLE'") . ">\n";
|
. "<input type='submit' name='drop' value='" . lang('Drop') . "'>" . on_help("'DROP TABLE'") . confirm() . "\n";
|
||||||
$databases = (support("scheme") ? $adminer->schemas() : $adminer->databases());
|
$databases = (support("scheme") ? $adminer->schemas() : $adminer->databases());
|
||||||
if (count($databases) != 1 && $jush != "sqlite") {
|
if (count($databases) != 1 && $jush != "sqlite") {
|
||||||
$db = (isset($_POST["target"]) ? $_POST["target"] : (support("scheme") ? $_GET["ns"] : DB));
|
$db = (isset($_POST["target"]) ? $_POST["target"] : (support("scheme") ? $_GET["ns"] : DB));
|
||||||
@@ -135,12 +141,14 @@ if ($adminer->homepage()) {
|
|||||||
echo (support("copy") ? " <input type='submit' name='copy' value='" . lang('Copy') . "'>" : "");
|
echo (support("copy") ? " <input type='submit' name='copy' value='" . lang('Copy') . "'>" : "");
|
||||||
echo "\n";
|
echo "\n";
|
||||||
}
|
}
|
||||||
echo "<input type='hidden' name='all' value='' onclick=\"selectCount('selected', formChecked(this, /^(tables|views)\[/));" . (support("table") ? " selectCount('selected2', formChecked(this, /^tables\[/) || $tables);" : "") . "\">\n"; // used by trCheck()
|
echo "<input type='hidden' name='all' value=''>"; // used by trCheck()
|
||||||
|
echo script("qsl('input').onclick = function () { selectCount('selected', formChecked(this, /^(tables|views)\[/));" . (support("table") ? " selectCount('selected2', formChecked(this, /^tables\[/) || $tables);" : "") . " }");
|
||||||
echo "<input type='hidden' name='token' value='$token'>\n";
|
echo "<input type='hidden' name='token' value='$token'>\n";
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
|
echo "</div></div>\n";
|
||||||
}
|
}
|
||||||
echo "</form>\n";
|
echo "</form>\n";
|
||||||
echo "<script type='text/javascript'>tableCheck();</script>\n";
|
echo script("tableCheck();");
|
||||||
}
|
}
|
||||||
|
|
||||||
echo '<p class="links"><a href="' . h(ME) . 'create=">' . lang('Create table') . "</a>\n";
|
echo '<p class="links"><a href="' . h(ME) . 'create=">' . lang('Create table') . "</a>\n";
|
||||||
@@ -154,11 +162,12 @@ if ($adminer->homepage()) {
|
|||||||
echo '<thead><tr><th>' . lang('Name') . '<td>' . lang('Type') . '<td>' . lang('Return type') . "<td> </thead>\n";
|
echo '<thead><tr><th>' . lang('Name') . '<td>' . lang('Type') . '<td>' . lang('Return type') . "<td> </thead>\n";
|
||||||
odd('');
|
odd('');
|
||||||
foreach ($routines as $row) {
|
foreach ($routines as $row) {
|
||||||
|
$name = ($row["SPECIFIC_NAME"] == $row["ROUTINE_NAME"] ? "" : "&name=" . urlencode($row["ROUTINE_NAME"])); // not computed on the pages to be able to print the header first
|
||||||
echo '<tr' . odd() . '>';
|
echo '<tr' . odd() . '>';
|
||||||
echo '<th><a href="' . h(ME) . ($row["ROUTINE_TYPE"] != "PROCEDURE" ? 'callf=' : 'call=') . urlencode($row["ROUTINE_NAME"]) . '">' . h($row["ROUTINE_NAME"]) . '</a>';
|
echo '<th><a href="' . h(ME . ($row["ROUTINE_TYPE"] != "PROCEDURE" ? 'callf=' : 'call=') . urlencode($row["SPECIFIC_NAME"]) . $name) . '">' . h($row["ROUTINE_NAME"]) . '</a>';
|
||||||
echo '<td>' . h($row["ROUTINE_TYPE"]);
|
echo '<td>' . h($row["ROUTINE_TYPE"]);
|
||||||
echo '<td>' . h($row["DTD_IDENTIFIER"]);
|
echo '<td>' . h($row["DTD_IDENTIFIER"]);
|
||||||
echo '<td><a href="' . h(ME) . ($row["ROUTINE_TYPE"] != "PROCEDURE" ? 'function=' : 'procedure=') . urlencode($row["ROUTINE_NAME"]) . '">' . lang('Alter') . "</a>";
|
echo '<td><a href="' . h(ME . ($row["ROUTINE_TYPE"] != "PROCEDURE" ? 'function=' : 'procedure=') . urlencode($row["SPECIFIC_NAME"]) . $name) . '">' . lang('Alter') . "</a>";
|
||||||
}
|
}
|
||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
}
|
}
|
||||||
@@ -221,7 +230,7 @@ if ($adminer->homepage()) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($tables_list) {
|
if ($tables_list) {
|
||||||
echo "<script type='text/javascript'>ajaxSetHtml('" . js_escape(ME) . "script=db');</script>\n";
|
echo script("ajaxSetHtml('" . js_escape(ME) . "script=db');");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
14
adminer/designs.php
Normal file
14
adminer/designs.php
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
function adminer_object() {
|
||||||
|
include_once "../plugins/plugin.php";
|
||||||
|
include_once "../plugins/designs.php";
|
||||||
|
$designs = array();
|
||||||
|
foreach (glob("../designs/*", GLOB_ONLYDIR) as $filename) {
|
||||||
|
$designs["$filename/adminer.css"] = basename($filename);
|
||||||
|
}
|
||||||
|
return new AdminerPlugin(array(
|
||||||
|
new AdminerDesigns($designs),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
include "./index.php";
|
||||||
@@ -6,5 +6,5 @@ header("Content-Disposition: attachment; filename=" . friendly_url("$TABLE-" . i
|
|||||||
$select = array(idf_escape($_GET["field"]));
|
$select = array(idf_escape($_GET["field"]));
|
||||||
$result = $driver->select($TABLE, $select, array(where($_GET, $fields)), $select);
|
$result = $driver->select($TABLE, $select, array(where($_GET, $fields)), $select);
|
||||||
$row = ($result ? $result->fetch_row() : array());
|
$row = ($result ? $result->fetch_row() : array());
|
||||||
echo $row[0];
|
echo $driver->value($row[0], $fields[$_GET["field"]]);
|
||||||
exit; // don't output footer
|
exit; // don't output footer
|
||||||
|
|||||||
@@ -17,9 +17,10 @@ if (isset($_GET["elastic"])) {
|
|||||||
*/
|
*/
|
||||||
function rootQuery($path, $content = array(), $method = 'GET') {
|
function rootQuery($path, $content = array(), $method = 'GET') {
|
||||||
@ini_set('track_errors', 1); // @ - may be disabled
|
@ini_set('track_errors', 1); // @ - may be disabled
|
||||||
$file = @file_get_contents($this->_url . '/' . ltrim($path, '/'), false, stream_context_create(array('http' => array(
|
$file = @file_get_contents("$this->_url/" . ltrim($path, '/'), false, stream_context_create(array('http' => array(
|
||||||
'method' => $method,
|
'method' => $method,
|
||||||
'content' => json_encode($content),
|
'content' => $content === null ? $content : json_encode($content),
|
||||||
|
'header' => 'Content-Type: application/json',
|
||||||
'ignore_errors' => 1, // available since PHP 5.2.10
|
'ignore_errors' => 1, // available since PHP 5.2.10
|
||||||
))));
|
))));
|
||||||
if (!$file) {
|
if (!$file) {
|
||||||
@@ -60,7 +61,7 @@ if (isset($_GET["elastic"])) {
|
|||||||
|
|
||||||
function connect($server, $username, $password) {
|
function connect($server, $username, $password) {
|
||||||
preg_match('~^(https?://)?(.*)~', $server, $match);
|
preg_match('~^(https?://)?(.*)~', $server, $match);
|
||||||
$this->_url = ($match[1] ? $match[1] : "http://") . "$username:$password@$match[2]/";
|
$this->_url = ($match[1] ? $match[1] : "http://") . "$username:$password@$match[2]";
|
||||||
$return = $this->query('');
|
$return = $this->query('');
|
||||||
if ($return) {
|
if ($return) {
|
||||||
$this->server_info = $return['version']['number'];
|
$this->server_info = $return['version']['number'];
|
||||||
@@ -147,7 +148,7 @@ if (isset($_GET["elastic"])) {
|
|||||||
$start = microtime(true);
|
$start = microtime(true);
|
||||||
$search = $this->_conn->query($query, $data);
|
$search = $this->_conn->query($query, $data);
|
||||||
if ($print) {
|
if ($print) {
|
||||||
echo $adminer->selectQuery("$query: " . print_r($data, true), format_time($start));
|
echo $adminer->selectQuery("$query: " . print_r($data, true), $start, !$search);
|
||||||
}
|
}
|
||||||
if (!$search) {
|
if (!$search) {
|
||||||
return false;
|
return false;
|
||||||
@@ -156,7 +157,7 @@ if (isset($_GET["elastic"])) {
|
|||||||
foreach ($search['hits']['hits'] as $hit) {
|
foreach ($search['hits']['hits'] as $hit) {
|
||||||
$row = array();
|
$row = array();
|
||||||
if ($select == array("*")) {
|
if ($select == array("*")) {
|
||||||
$row["_id"] = $hit["_id"];
|
$row["_id"] = $hit["_id"];
|
||||||
}
|
}
|
||||||
$fields = $hit['_source'];
|
$fields = $hit['_source'];
|
||||||
if ($select != array("*")) {
|
if ($select != array("*")) {
|
||||||
@@ -176,6 +177,47 @@ if (isset($_GET["elastic"])) {
|
|||||||
return new Min_Result($return);
|
return new Min_Result($return);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function update($type, $record, $queryWhere) {
|
||||||
|
$parts = preg_split('~ *= *~', $queryWhere);
|
||||||
|
if (count($parts) == 2) {
|
||||||
|
$id = trim($parts[1]);
|
||||||
|
$query = "$type/$id";
|
||||||
|
return $this->_conn->query($query, $record, 'POST');
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function insert($type, $record) {
|
||||||
|
$id = ""; //! user should be able to inform _id
|
||||||
|
$query = "$type/$id";
|
||||||
|
$response = $this->_conn->query($query, $record, 'POST');
|
||||||
|
$this->_conn->last_id = $response['_id'];
|
||||||
|
return $response['created'];
|
||||||
|
}
|
||||||
|
|
||||||
|
function delete($type, $queryWhere) {
|
||||||
|
$ids = array();
|
||||||
|
if (is_array($_GET["where"]) && $_GET["where"]["_id"]) {
|
||||||
|
$ids[] = $_GET["where"]["_id"];
|
||||||
|
}
|
||||||
|
if (is_array($_POST['check'])) {
|
||||||
|
foreach ($_POST['check'] as $check) {
|
||||||
|
$parts = preg_split('~ *= *~', $check);
|
||||||
|
if (count($parts) == 2) {
|
||||||
|
$ids[] = trim($parts[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->_conn->affected_rows = 0;
|
||||||
|
foreach ($ids as $id) {
|
||||||
|
$query = "{$type}/{$id}";
|
||||||
|
$response = $this->_conn->query($query, '{}', 'DELETE');
|
||||||
|
if (is_array($response) && $response['found'] == true) {
|
||||||
|
$this->_conn->affected_rows++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $this->_conn->affected_rows;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -223,9 +265,14 @@ if (isset($_GET["elastic"])) {
|
|||||||
|
|
||||||
function count_tables($databases) {
|
function count_tables($databases) {
|
||||||
global $connection;
|
global $connection;
|
||||||
$return = $connection->query('_mapping');
|
$return = array();
|
||||||
if ($return) {
|
$result = $connection->query('_stats');
|
||||||
$return = array_map('count', $return);
|
if ($result && $result['indices']) {
|
||||||
|
$indices = $result['indices'];
|
||||||
|
foreach ($indices as $indice => $stats) {
|
||||||
|
$indexing = $stats['total']['indexing'];
|
||||||
|
$return[$indice] = $indexing['index_total'];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -241,24 +288,26 @@ if (isset($_GET["elastic"])) {
|
|||||||
|
|
||||||
function table_status($name = "", $fast = false) {
|
function table_status($name = "", $fast = false) {
|
||||||
global $connection;
|
global $connection;
|
||||||
$search = $connection->query("_search?search_type=count", array(
|
$search = $connection->query("_search", array(
|
||||||
"facets" => array(
|
"size" => 0,
|
||||||
|
"aggregations" => array(
|
||||||
"count_by_type" => array(
|
"count_by_type" => array(
|
||||||
"terms" => array(
|
"terms" => array(
|
||||||
"field" => "_type",
|
"field" => "_type"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
), "POST");
|
), "POST");
|
||||||
$return = array();
|
$return = array();
|
||||||
if ($search) {
|
if ($search) {
|
||||||
foreach ($search["facets"]["count_by_type"]["terms"] as $table) {
|
$tables = $search["aggregations"]["count_by_type"]["buckets"];
|
||||||
$return[$table["term"]] = array(
|
foreach ($tables as $table) {
|
||||||
"Name" => $table["term"],
|
$return[$table["key"]] = array(
|
||||||
|
"Name" => $table["key"],
|
||||||
"Engine" => "table",
|
"Engine" => "table",
|
||||||
"Rows" => $table["count"],
|
"Rows" => $table["doc_count"],
|
||||||
);
|
);
|
||||||
if ($name != "" && $name == $table["term"]) {
|
if ($name != "" && $name == $table["key"]) {
|
||||||
return $return[$name];
|
return $return[$name];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -336,16 +385,16 @@ if (isset($_GET["elastic"])) {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Create database
|
/** Create index
|
||||||
* @param string
|
* @param string
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
function create_database($db) {
|
function create_database($db) {
|
||||||
global $connection;
|
global $connection;
|
||||||
return $connection->rootQuery(urlencode($db), array(), 'PUT');
|
return $connection->rootQuery(urlencode($db), null, 'PUT');
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Drop databases
|
/** Remove index
|
||||||
* @param array
|
* @param array
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
@@ -354,7 +403,27 @@ if (isset($_GET["elastic"])) {
|
|||||||
return $connection->rootQuery(urlencode(implode(',', $databases)), array(), 'DELETE');
|
return $connection->rootQuery(urlencode(implode(',', $databases)), array(), 'DELETE');
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Drop tables
|
/** Alter type
|
||||||
|
* @param array
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
|
||||||
|
global $connection;
|
||||||
|
$properties = array();
|
||||||
|
foreach ($fields as $f) {
|
||||||
|
$field_name = trim($f[1][0]);
|
||||||
|
$field_type = trim($f[1][1] ? $f[1][1] : "text");
|
||||||
|
$properties[$field_name] = array(
|
||||||
|
'type' => $field_type
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (!empty($properties)) {
|
||||||
|
$properties = array('properties' => $properties);
|
||||||
|
}
|
||||||
|
return $connection->query("_mapping/{$name}", $properties, 'PUT');
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Drop types
|
||||||
* @param array
|
* @param array
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
@@ -367,9 +436,25 @@ if (isset($_GET["elastic"])) {
|
|||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function last_id() {
|
||||||
|
global $connection;
|
||||||
|
return $connection->last_id;
|
||||||
|
}
|
||||||
|
|
||||||
$jush = "elastic";
|
$jush = "elastic";
|
||||||
$operators = array("=", "query");
|
$operators = array("=", "query");
|
||||||
$functions = array();
|
$functions = array();
|
||||||
$grouping = array();
|
$grouping = array();
|
||||||
$edit_functions = array(array("json"));
|
$edit_functions = array(array("json"));
|
||||||
|
$types = array(); ///< @var array ($type => $maximum_unsigned_length, ...)
|
||||||
|
$structured_types = array(); ///< @var array ($description => array($type, ...), ...)
|
||||||
|
foreach (array(
|
||||||
|
lang('Numbers') => array("long" => 3, "integer" => 5, "short" => 8, "byte" => 10, "double" => 20, "float" => 66, "half_float" => 12, "scaled_float" => 21),
|
||||||
|
lang('Date and time') => array("date" => 10),
|
||||||
|
lang('Strings') => array("string" => 65535, "text" => 65535),
|
||||||
|
lang('Binary') => array("binary" => 255),
|
||||||
|
) as $key => $val) {
|
||||||
|
$types += $val;
|
||||||
|
$structured_types[$key] = array_keys($val);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -147,8 +147,8 @@ if (isset($_GET["firebird"])) {
|
|||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function limit1($query, $where) {
|
function limit1($table, $query, $where, $separator = "\n") {
|
||||||
return limit($query, $where, 1);
|
return limit($query, $where, 1, 0, $separator);
|
||||||
}
|
}
|
||||||
|
|
||||||
function db_collation($db, $collations) {
|
function db_collation($db, $collations) {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
$drivers["mongo"] = "MongoDB (beta)";
|
$drivers["mongo"] = "MongoDB";
|
||||||
|
|
||||||
if (isset($_GET["mongo"])) {
|
if (isset($_GET["mongo"])) {
|
||||||
$possible_drivers = array("mongo");
|
$possible_drivers = array("mongo", "mongodb");
|
||||||
define("DRIVER", "mongo");
|
define("DRIVER", "mongo");
|
||||||
|
|
||||||
if (class_exists('MongoDB')) {
|
if (class_exists('MongoDB')) {
|
||||||
@@ -109,97 +109,502 @@ if (isset($_GET["mongo"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Min_Driver extends Min_SQL {
|
class Min_Driver extends Min_SQL {
|
||||||
public $primary = "_id";
|
public $primary = "_id";
|
||||||
|
|
||||||
function select($table, $select, $where, $group, $order = array(), $limit = 1, $page = 0, $print = false) {
|
function select($table, $select, $where, $group, $order = array(), $limit = 1, $page = 0, $print = false) {
|
||||||
$select = ($select == array("*")
|
$select = ($select == array("*")
|
||||||
? array()
|
? array()
|
||||||
: array_fill_keys($select, true)
|
: array_fill_keys($select, true)
|
||||||
);
|
);
|
||||||
$sort = array();
|
$sort = array();
|
||||||
foreach ($order as $val) {
|
foreach ($order as $val) {
|
||||||
$val = preg_replace('~ DESC$~', '', $val, 1, $count);
|
$val = preg_replace('~ DESC$~', '', $val, 1, $count);
|
||||||
$sort[$val] = ($count ? -1 : 1);
|
$sort[$val] = ($count ? -1 : 1);
|
||||||
|
}
|
||||||
|
return new Min_Result($this->_conn->_db->selectCollection($table)
|
||||||
|
->find(array(), $select)
|
||||||
|
->sort($sort)
|
||||||
|
->limit($limit != "" ? +$limit : 0)
|
||||||
|
->skip($page * $limit)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function insert($table, $set) {
|
||||||
|
try {
|
||||||
|
$return = $this->_conn->_db->selectCollection($table)->insert($set);
|
||||||
|
$this->_conn->errno = $return['code'];
|
||||||
|
$this->_conn->error = $return['err'];
|
||||||
|
$this->_conn->last_id = $set['_id'];
|
||||||
|
return !$return['err'];
|
||||||
|
} catch (Exception $ex) {
|
||||||
|
$this->_conn->error = $ex->getMessage();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return new Min_Result($this->_conn->_db->selectCollection($table)
|
|
||||||
->find(array(), $select)
|
|
||||||
->sort($sort)
|
|
||||||
->limit(+$limit)
|
|
||||||
->skip($page * $limit)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function insert($table, $set) {
|
function get_databases($flush) {
|
||||||
try {
|
global $connection;
|
||||||
$return = $this->_conn->_db->selectCollection($table)->insert($set);
|
$return = array();
|
||||||
$this->_conn->errno = $return['code'];
|
$dbs = $connection->_link->listDBs();
|
||||||
$this->_conn->error = $return['err'];
|
foreach ($dbs['databases'] as $db) {
|
||||||
$this->_conn->last_id = $set['_id'];
|
$return[] = $db['name'];
|
||||||
return !$return['err'];
|
}
|
||||||
} catch (Exception $ex) {
|
return $return;
|
||||||
$this->_conn->error = $ex->getMessage();
|
}
|
||||||
|
|
||||||
|
function count_tables($databases) {
|
||||||
|
global $connection;
|
||||||
|
$return = array();
|
||||||
|
foreach ($databases as $db) {
|
||||||
|
$return[$db] = count($connection->_link->selectDB($db)->getCollectionNames(true));
|
||||||
|
}
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
function tables_list() {
|
||||||
|
global $connection;
|
||||||
|
return array_fill_keys($connection->_db->getCollectionNames(true), 'table');
|
||||||
|
}
|
||||||
|
|
||||||
|
function drop_databases($databases) {
|
||||||
|
global $connection;
|
||||||
|
foreach ($databases as $db) {
|
||||||
|
$response = $connection->_link->selectDB($db)->drop();
|
||||||
|
if (!$response['ok']) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function indexes($table, $connection2 = null) {
|
||||||
|
global $connection;
|
||||||
|
$return = array();
|
||||||
|
foreach ($connection->_db->selectCollection($table)->getIndexInfo() as $index) {
|
||||||
|
$descs = array();
|
||||||
|
foreach ($index["key"] as $column => $type) {
|
||||||
|
$descs[] = ($type == -1 ? '1' : null);
|
||||||
|
}
|
||||||
|
$return[$index["name"]] = array(
|
||||||
|
"type" => ($index["name"] == "_id_" ? "PRIMARY" : ($index["unique"] ? "UNIQUE" : "INDEX")),
|
||||||
|
"columns" => array_keys($index["key"]),
|
||||||
|
"lengths" => array(),
|
||||||
|
"descs" => $descs,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fields($table) {
|
||||||
|
return fields_from_edit();
|
||||||
|
}
|
||||||
|
|
||||||
|
function found_rows($table_status, $where) {
|
||||||
|
global $connection;
|
||||||
|
//! don't call count_rows()
|
||||||
|
return $connection->_db->selectCollection($_GET["select"])->count($where);
|
||||||
|
}
|
||||||
|
|
||||||
|
$operators = array("=");
|
||||||
|
|
||||||
|
} elseif (class_exists('MongoDB\Driver\Manager')) {
|
||||||
|
class Min_DB {
|
||||||
|
var $extension = "MongoDB", $error, $last_id;
|
||||||
|
/** @var MongoDB\Driver\Manager */
|
||||||
|
var $_link;
|
||||||
|
var $_db, $_db_name;
|
||||||
|
|
||||||
|
function connect($server, $username, $password) {
|
||||||
|
global $adminer;
|
||||||
|
$db = $adminer->database();
|
||||||
|
$options = array();
|
||||||
|
if ($username != "") {
|
||||||
|
$options["username"] = $username;
|
||||||
|
$options["password"] = $password;
|
||||||
|
}
|
||||||
|
if ($db != "") {
|
||||||
|
$options["db"] = $db;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
$class = 'MongoDB\Driver\Manager';
|
||||||
|
$this->_link = new $class("mongodb://$server", $options);
|
||||||
|
return true;
|
||||||
|
} catch (Exception $ex) {
|
||||||
|
$this->error = $ex->getMessage();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function query($query) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function select_db($database) {
|
||||||
|
try {
|
||||||
|
$this->_db_name = $database;
|
||||||
|
return true;
|
||||||
|
} catch (Exception $ex) {
|
||||||
|
$this->error = $ex->getMessage();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function quote($string) {
|
||||||
|
return $string;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
class Min_Result {
|
||||||
|
var $num_rows, $_rows = array(), $_offset = 0, $_charset = array();
|
||||||
|
|
||||||
|
function __construct($result) {
|
||||||
|
foreach ($result as $item) {
|
||||||
|
$row = array();
|
||||||
|
foreach ($item as $key => $val) {
|
||||||
|
if (is_a($val, 'MongoDB\BSON\Binary')) {
|
||||||
|
$this->_charset[$key] = 63;
|
||||||
|
}
|
||||||
|
$row[$key] =
|
||||||
|
(is_a($val, 'MongoDB\BSON\ObjectID') ? 'MongoDB\BSON\ObjectID("' . strval($val) . '")' :
|
||||||
|
(is_a($val, 'MongoDB\BSON\UTCDatetime') ? $val->toDateTime()->format('Y-m-d H:i:s') :
|
||||||
|
(is_a($val, 'MongoDB\BSON\Binary') ? $val->bin : //! allow downloading
|
||||||
|
(is_a($val, 'MongoDB\BSON\Regex') ? strval($val) :
|
||||||
|
(is_object($val) ? json_encode($val, 256) : // 256 = JSON_UNESCAPED_UNICODE
|
||||||
|
$val // MongoMinKey, MongoMaxKey
|
||||||
|
)))));
|
||||||
|
}
|
||||||
|
$this->_rows[] = $row;
|
||||||
|
foreach ($row as $key => $val) {
|
||||||
|
if (!isset($this->_rows[0][$key])) {
|
||||||
|
$this->_rows[0][$key] = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->num_rows = $result->count;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fetch_assoc() {
|
||||||
|
$row = current($this->_rows);
|
||||||
|
if (!$row) {
|
||||||
|
return $row;
|
||||||
|
}
|
||||||
|
$return = array();
|
||||||
|
foreach ($this->_rows[0] as $key => $val) {
|
||||||
|
$return[$key] = $row[$key];
|
||||||
|
}
|
||||||
|
next($this->_rows);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fetch_row() {
|
||||||
|
$return = $this->fetch_assoc();
|
||||||
|
if (!$return) {
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
return array_values($return);
|
||||||
|
}
|
||||||
|
|
||||||
|
function fetch_field() {
|
||||||
|
$keys = array_keys($this->_rows[0]);
|
||||||
|
$name = $keys[$this->_offset++];
|
||||||
|
return (object) array(
|
||||||
|
'name' => $name,
|
||||||
|
'charsetnr' => $this->_charset[$name],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
function connect() {
|
|
||||||
global $adminer;
|
|
||||||
$connection = new Min_DB;
|
|
||||||
$credentials = $adminer->credentials();
|
|
||||||
if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) {
|
|
||||||
return $connection;
|
|
||||||
}
|
}
|
||||||
return $connection->error;
|
|
||||||
}
|
|
||||||
|
|
||||||
function error() {
|
|
||||||
global $connection;
|
|
||||||
return h($connection->error);
|
|
||||||
}
|
|
||||||
|
|
||||||
function logged_user() {
|
class Min_Driver extends Min_SQL {
|
||||||
global $adminer;
|
public $primary = "_id";
|
||||||
$credentials = $adminer->credentials();
|
|
||||||
return $credentials[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
function get_databases($flush) {
|
function select($table, $select, $where, $group, $order = array(), $limit = 1, $page = 0, $print = false) {
|
||||||
global $connection;
|
global $connection;
|
||||||
$return = array();
|
$select = ($select == array("*")
|
||||||
$dbs = $connection->_link->listDBs();
|
? array()
|
||||||
foreach ($dbs['databases'] as $db) {
|
: array_fill_keys($select, 1)
|
||||||
$return[] = $db['name'];
|
);
|
||||||
|
if (count($select) && !isset($select['_id'])) {
|
||||||
|
$select['_id'] = 0;
|
||||||
|
}
|
||||||
|
$where = where_to_query($where);
|
||||||
|
$sort = array();
|
||||||
|
foreach ($order as $val) {
|
||||||
|
$val = preg_replace('~ DESC$~', '', $val, 1, $count);
|
||||||
|
$sort[$val] = ($count ? -1 : 1);
|
||||||
|
}
|
||||||
|
if (isset($_GET['limit']) && is_numeric($_GET['limit']) && $_GET['limit'] > 0) {
|
||||||
|
$limit = $_GET['limit'];
|
||||||
|
}
|
||||||
|
$limit = min(200, max(1, (int) $limit));
|
||||||
|
$skip = $page * $limit;
|
||||||
|
$class = 'MongoDB\Driver\Query';
|
||||||
|
$query = new $class($where, array('projection' => $select, 'limit' => $limit, 'skip' => $skip, 'sort' => $sort));
|
||||||
|
$results = $connection->_link->executeQuery("$connection->_db_name.$table", $query);
|
||||||
|
return new Min_Result($results);
|
||||||
|
}
|
||||||
|
|
||||||
|
function update($table, $set, $queryWhere, $limit = 0, $separator = "\n") {
|
||||||
|
global $connection;
|
||||||
|
$db = $connection->_db_name;
|
||||||
|
$where = sql_query_where_parser($queryWhere);
|
||||||
|
$class = 'MongoDB\Driver\BulkWrite';
|
||||||
|
$bulk = new $class(array());
|
||||||
|
if (isset($set['_id'])) {
|
||||||
|
unset($set['_id']);
|
||||||
|
}
|
||||||
|
$removeFields = array();
|
||||||
|
foreach ($set as $key => $value) {
|
||||||
|
if ($value == 'NULL') {
|
||||||
|
$removeFields[$key] = 1;
|
||||||
|
unset($set[$key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$update = array('$set' => $set);
|
||||||
|
if (count($removeFields)) {
|
||||||
|
$update['$unset'] = $removeFields;
|
||||||
|
}
|
||||||
|
$bulk->update($where, $update, array('upsert' => false));
|
||||||
|
$results = $connection->_link->executeBulkWrite("$db.$table", $bulk);
|
||||||
|
$connection->affected_rows = $results->getModifiedCount();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function delete($table, $queryWhere, $limit = 0) {
|
||||||
|
global $connection;
|
||||||
|
$db = $connection->_db_name;
|
||||||
|
$where = sql_query_where_parser($queryWhere);
|
||||||
|
$class = 'MongoDB\Driver\BulkWrite';
|
||||||
|
$bulk = new $class(array());
|
||||||
|
$bulk->delete($where, array('limit' => $limit));
|
||||||
|
$results = $connection->_link->executeBulkWrite("$db.$table", $bulk);
|
||||||
|
$connection->affected_rows = $results->getDeletedCount();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function insert($table, $set) {
|
||||||
|
global $connection;
|
||||||
|
$db = $connection->_db_name;
|
||||||
|
$class = 'MongoDB\Driver\BulkWrite';
|
||||||
|
$bulk = new $class(array());
|
||||||
|
if (isset($set['_id']) && empty($set['_id'])) {
|
||||||
|
unset($set['_id']);
|
||||||
|
}
|
||||||
|
$bulk->insert($set);
|
||||||
|
$results = $connection->_link->executeBulkWrite("$db.$table", $bulk);
|
||||||
|
$connection->affected_rows = $results->getInsertedCount();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function collations() {
|
function get_databases($flush) {
|
||||||
return array();
|
/** @var $connection Min_DB */
|
||||||
}
|
global $connection;
|
||||||
|
$return = array();
|
||||||
function db_collation($db, $collations) {
|
$class = 'MongoDB\Driver\Command';
|
||||||
}
|
$command = new $class(array('listDatabases' => 1));
|
||||||
|
$results = $connection->_link->executeCommand('admin', $command);
|
||||||
function count_tables($databases) {
|
foreach ($results as $dbs) {
|
||||||
global $connection;
|
foreach ($dbs->databases as $db) {
|
||||||
$return = array();
|
$return[] = $db->name;
|
||||||
foreach ($databases as $db) {
|
}
|
||||||
$return[$db] = count($connection->_link->selectDB($db)->getCollectionNames(true));
|
}
|
||||||
|
return $return;
|
||||||
}
|
}
|
||||||
return $return;
|
|
||||||
|
function count_tables($databases) {
|
||||||
|
$return = array();
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
function tables_list() {
|
||||||
|
global $connection;
|
||||||
|
$class = 'MongoDB\Driver\Command';
|
||||||
|
$command = new $class(array('listCollections' => 1));
|
||||||
|
$results = $connection->_link->executeCommand($connection->_db_name, $command);
|
||||||
|
$collections = array();
|
||||||
|
foreach ($results as $result) {
|
||||||
|
$collections[$result->name] = 'table';
|
||||||
|
}
|
||||||
|
return $collections;
|
||||||
|
}
|
||||||
|
|
||||||
|
function drop_databases($databases) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function indexes($table, $connection2 = null) {
|
||||||
|
global $connection;
|
||||||
|
$return = array();
|
||||||
|
$class = 'MongoDB\Driver\Command';
|
||||||
|
$command = new $class(array('listIndexes' => $table));
|
||||||
|
$results = $connection->_link->executeCommand($connection->_db_name, $command);
|
||||||
|
foreach ($results as $index) {
|
||||||
|
$descs = array();
|
||||||
|
$columns = array();
|
||||||
|
foreach (get_object_vars($index->key) as $column => $type) {
|
||||||
|
$descs[] = ($type == -1 ? '1' : null);
|
||||||
|
$columns[] = $column;
|
||||||
|
}
|
||||||
|
$return[$index->name] = array(
|
||||||
|
"type" => ($index->name == "_id_" ? "PRIMARY" : (isset($index->unique) ? "UNIQUE" : "INDEX")),
|
||||||
|
"columns" => $columns,
|
||||||
|
"lengths" => array(),
|
||||||
|
"descs" => $descs,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fields($table) {
|
||||||
|
$fields = fields_from_edit();
|
||||||
|
if (!count($fields)) {
|
||||||
|
global $driver;
|
||||||
|
$result = $driver->select($table, array("*"), null, null, array(), 10);
|
||||||
|
while ($row = $result->fetch_assoc()) {
|
||||||
|
foreach ($row as $key => $val) {
|
||||||
|
$row[$key] = null;
|
||||||
|
$fields[$key] = array(
|
||||||
|
"field" => $key,
|
||||||
|
"type" => "string",
|
||||||
|
"null" => ($key != $driver->primary),
|
||||||
|
"auto_increment" => ($key == $driver->primary),
|
||||||
|
"privileges" => array(
|
||||||
|
"insert" => 1,
|
||||||
|
"select" => 1,
|
||||||
|
"update" => 1,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $fields;
|
||||||
|
}
|
||||||
|
|
||||||
|
function found_rows($table_status, $where) {
|
||||||
|
global $connection;
|
||||||
|
$where = where_to_query($where);
|
||||||
|
$class = 'MongoDB\Driver\Command';
|
||||||
|
$command = new $class(array('count' => $table_status['Name'], 'query' => $where));
|
||||||
|
$results = $connection->_link->executeCommand($connection->_db_name, $command);
|
||||||
|
$toArray = $results->toArray();
|
||||||
|
return $toArray[0]->n;
|
||||||
|
}
|
||||||
|
|
||||||
|
function sql_query_where_parser($queryWhere) {
|
||||||
|
$queryWhere = trim(preg_replace('/WHERE[\s]?[(]?\(?/', '', $queryWhere));
|
||||||
|
$queryWhere = preg_replace('/\)\)\)$/', ')', $queryWhere);
|
||||||
|
$wheres = explode(' AND ', $queryWhere);
|
||||||
|
$wheresOr = explode(') OR (', $queryWhere);
|
||||||
|
$where = array();
|
||||||
|
foreach ($wheres as $whereStr) {
|
||||||
|
$where[] = trim($whereStr);
|
||||||
|
}
|
||||||
|
if (count($wheresOr) == 1) {
|
||||||
|
$wheresOr = array();
|
||||||
|
} elseif (count($wheresOr) > 1) {
|
||||||
|
$where = array();
|
||||||
|
}
|
||||||
|
return where_to_query($where, $wheresOr);
|
||||||
|
}
|
||||||
|
|
||||||
|
function where_to_query($whereAnd = array(), $whereOr = array()) {
|
||||||
|
global $operators;
|
||||||
|
$data = array();
|
||||||
|
foreach (array('and' => $whereAnd, 'or' => $whereOr) as $type => $where) {
|
||||||
|
if (is_array($where)) {
|
||||||
|
foreach ($where as $expression) {
|
||||||
|
list($col, $op, $val) = explode(" ", $expression, 3);
|
||||||
|
if ($col == "_id") {
|
||||||
|
$val = str_replace('MongoDB\BSON\ObjectID("', "", $val);
|
||||||
|
$val = str_replace('")', "", $val);
|
||||||
|
$class = 'MongoDB\BSON\ObjectID';
|
||||||
|
$val = new $class($val);
|
||||||
|
}
|
||||||
|
if (!in_array($op, $operators)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (preg_match('~^\(f\)(.+)~', $op, $match)) {
|
||||||
|
$val = (float) $val;
|
||||||
|
$op = $match[1];
|
||||||
|
} elseif (preg_match('~^\(date\)(.+)~', $op, $match)) {
|
||||||
|
$dateTime = new DateTime($val);
|
||||||
|
$class = 'MongoDB\BSON\UTCDatetime';
|
||||||
|
$val = new $class($dateTime->getTimestamp() * 1000);
|
||||||
|
$op = $match[1];
|
||||||
|
}
|
||||||
|
switch ($op) {
|
||||||
|
case '=':
|
||||||
|
$op = '$eq';
|
||||||
|
break;
|
||||||
|
case '!=':
|
||||||
|
$op = '$ne';
|
||||||
|
break;
|
||||||
|
case '>':
|
||||||
|
$op = '$gt';
|
||||||
|
break;
|
||||||
|
case '<':
|
||||||
|
$op = '$lt';
|
||||||
|
break;
|
||||||
|
case '>=':
|
||||||
|
$op = '$gte';
|
||||||
|
break;
|
||||||
|
case '<=':
|
||||||
|
$op = '$lte';
|
||||||
|
break;
|
||||||
|
case 'regex':
|
||||||
|
$op = '$regex';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ($type == 'and') {
|
||||||
|
$data['$and'][] = array($col => array($op => $val));
|
||||||
|
} elseif ($type == 'or') {
|
||||||
|
$data['$or'][] = array($col => array($op => $val));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
$operators = array(
|
||||||
|
"=",
|
||||||
|
"!=",
|
||||||
|
">",
|
||||||
|
"<",
|
||||||
|
">=",
|
||||||
|
"<=",
|
||||||
|
"regex",
|
||||||
|
"(f)=",
|
||||||
|
"(f)!=",
|
||||||
|
"(f)>",
|
||||||
|
"(f)<",
|
||||||
|
"(f)>=",
|
||||||
|
"(f)<=",
|
||||||
|
"(date)=",
|
||||||
|
"(date)!=",
|
||||||
|
"(date)>",
|
||||||
|
"(date)<",
|
||||||
|
"(date)>=",
|
||||||
|
"(date)<=",
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function tables_list() {
|
function table($idf) {
|
||||||
global $connection;
|
return $idf;
|
||||||
return array_fill_keys($connection->_db->getCollectionNames(true), 'table');
|
}
|
||||||
|
|
||||||
|
function idf_escape($idf) {
|
||||||
|
return $idf;
|
||||||
}
|
}
|
||||||
|
|
||||||
function table_status($name = "", $fast = false) {
|
function table_status($name = "", $fast = false) {
|
||||||
@@ -213,43 +618,73 @@ if (isset($_GET["mongo"])) {
|
|||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function information_schema() {
|
function last_id() {
|
||||||
}
|
|
||||||
|
|
||||||
function is_view($table_status) {
|
|
||||||
}
|
|
||||||
|
|
||||||
function drop_databases($databases) {
|
|
||||||
global $connection;
|
global $connection;
|
||||||
foreach ($databases as $db) {
|
return $connection->last_id;
|
||||||
$response = $connection->_link->selectDB($db)->drop();
|
}
|
||||||
if (!$response['ok']) {
|
|
||||||
|
function error() {
|
||||||
|
global $connection;
|
||||||
|
return h($connection->error);
|
||||||
|
}
|
||||||
|
|
||||||
|
function collations() {
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
|
||||||
|
function logged_user() {
|
||||||
|
global $adminer;
|
||||||
|
$credentials = $adminer->credentials();
|
||||||
|
return $credentials[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
function connect() {
|
||||||
|
global $adminer;
|
||||||
|
$connection = new Min_DB;
|
||||||
|
$credentials = $adminer->credentials();
|
||||||
|
if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) {
|
||||||
|
return $connection;
|
||||||
|
}
|
||||||
|
return $connection->error;
|
||||||
|
}
|
||||||
|
|
||||||
|
function alter_indexes($table, $alter) {
|
||||||
|
global $connection;
|
||||||
|
foreach ($alter as $val) {
|
||||||
|
list($type, $name, $set) = $val;
|
||||||
|
if ($set == "DROP") {
|
||||||
|
$return = $connection->_db->command(array("deleteIndexes" => $table, "index" => $name));
|
||||||
|
} else {
|
||||||
|
$columns = array();
|
||||||
|
foreach ($set as $column) {
|
||||||
|
$column = preg_replace('~ DESC$~', '', $column, 1, $count);
|
||||||
|
$columns[$column] = ($count ? -1 : 1);
|
||||||
|
}
|
||||||
|
$return = $connection->_db->selectCollection($table)->ensureIndex($columns, array(
|
||||||
|
"unique" => ($type == "UNIQUE"),
|
||||||
|
"name" => $name,
|
||||||
|
//! "sparse"
|
||||||
|
));
|
||||||
|
}
|
||||||
|
if ($return['errmsg']) {
|
||||||
|
$connection->error = $return['errmsg'];
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function indexes($table, $connection2 = null) {
|
function support($feature) {
|
||||||
global $connection;
|
return preg_match("~database|indexes~", $feature);
|
||||||
$return = array();
|
|
||||||
foreach ($connection->_db->selectCollection($table)->getIndexInfo() as $index) {
|
|
||||||
$descs = array();
|
|
||||||
foreach ($index["key"] as $column => $type) {
|
|
||||||
$descs[] = ($type == -1 ? '1' : null);
|
|
||||||
}
|
|
||||||
$return[$index["name"]] = array(
|
|
||||||
"type" => ($index["name"] == "_id_" ? "PRIMARY" : ($index["unique"] ? "UNIQUE" : "INDEX")),
|
|
||||||
"columns" => array_keys($index["key"]),
|
|
||||||
"lengths" => array(),
|
|
||||||
"descs" => $descs,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function fields($table) {
|
function db_collation($db, $collations) {
|
||||||
return fields_from_edit();
|
}
|
||||||
|
|
||||||
|
function information_schema() {
|
||||||
|
}
|
||||||
|
|
||||||
|
function is_view($table_status) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function convert_field($field) {
|
function convert_field($field) {
|
||||||
@@ -270,12 +705,6 @@ if (isset($_GET["mongo"])) {
|
|||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
|
||||||
function found_rows($table_status, $where) {
|
|
||||||
global $connection;
|
|
||||||
//! don't call count_rows()
|
|
||||||
return $connection->_db->selectCollection($_GET["select"])->count($where);
|
|
||||||
}
|
|
||||||
|
|
||||||
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
|
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
|
||||||
global $connection;
|
global $connection;
|
||||||
if ($table == "") {
|
if ($table == "") {
|
||||||
@@ -306,51 +735,7 @@ if (isset($_GET["mongo"])) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function alter_indexes($table, $alter) {
|
|
||||||
global $connection;
|
|
||||||
foreach ($alter as $val) {
|
|
||||||
list($type, $name, $set) = $val;
|
|
||||||
if ($set == "DROP") {
|
|
||||||
$return = $connection->_db->command(array("deleteIndexes" => $table, "index" => $name));
|
|
||||||
} else {
|
|
||||||
$columns = array();
|
|
||||||
foreach ($set as $column) {
|
|
||||||
$column = preg_replace('~ DESC$~', '', $column, 1, $count);
|
|
||||||
$columns[$column] = ($count ? -1 : 1);
|
|
||||||
}
|
|
||||||
$return = $connection->_db->selectCollection($table)->ensureIndex($columns, array(
|
|
||||||
"unique" => ($type == "UNIQUE"),
|
|
||||||
"name" => $name,
|
|
||||||
//! "sparse"
|
|
||||||
));
|
|
||||||
}
|
|
||||||
if ($return['errmsg']) {
|
|
||||||
$connection->error = $return['errmsg'];
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function last_id() {
|
|
||||||
global $connection;
|
|
||||||
return $connection->last_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
function table($idf) {
|
|
||||||
return $idf;
|
|
||||||
}
|
|
||||||
|
|
||||||
function idf_escape($idf) {
|
|
||||||
return $idf;
|
|
||||||
}
|
|
||||||
|
|
||||||
function support($feature) {
|
|
||||||
return preg_match("~database|indexes~", $feature);
|
|
||||||
}
|
|
||||||
|
|
||||||
$jush = "mongo";
|
$jush = "mongo";
|
||||||
$operators = array("=");
|
|
||||||
$functions = array();
|
$functions = array();
|
||||||
$grouping = array();
|
$grouping = array();
|
||||||
$edit_functions = array(array("json"));
|
$edit_functions = array(array("json"));
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
* @author Jakub Vrana
|
* @author Jakub Vrana
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$drivers["mssql"] = "MS SQL";
|
$drivers["mssql"] = "MS SQL (beta)";
|
||||||
|
|
||||||
if (isset($_GET["mssql"])) {
|
if (isset($_GET["mssql"])) {
|
||||||
$possible_drivers = array("SQLSRV", "MSSQL", "PDO_DBLIB");
|
$possible_drivers = array("SQLSRV", "MSSQL", "PDO_DBLIB");
|
||||||
@@ -308,13 +308,13 @@ if (isset($_GET["mssql"])) {
|
|||||||
return ($limit !== null ? " TOP (" . ($limit + $offset) . ")" : "") . " $query$where"; // seek later
|
return ($limit !== null ? " TOP (" . ($limit + $offset) . ")" : "") . " $query$where"; // seek later
|
||||||
}
|
}
|
||||||
|
|
||||||
function limit1($query, $where) {
|
function limit1($table, $query, $where, $separator = "\n") {
|
||||||
return limit($query, $where, 1);
|
return limit($query, $where, 1, 0, $separator);
|
||||||
}
|
}
|
||||||
|
|
||||||
function db_collation($db, $collations) {
|
function db_collation($db, $collations) {
|
||||||
global $connection;
|
global $connection;
|
||||||
return $connection->result("SELECT collation_name FROM sys.databases WHERE name = " . q($db));
|
return $connection->result("SELECT collation_name FROM sys.databases WHERE name = " . q($db));
|
||||||
}
|
}
|
||||||
|
|
||||||
function engines() {
|
function engines() {
|
||||||
@@ -361,7 +361,7 @@ if (isset($_GET["mssql"])) {
|
|||||||
|
|
||||||
function fields($table) {
|
function fields($table) {
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows("SELECT c.*, t.name type, d.definition [default]
|
foreach (get_rows("SELECT c.max_length, c.precision, c.scale, c.name, c.is_nullable, c.is_identity, c.collation_name, t.name type, CAST(d.definition as text) [default]
|
||||||
FROM sys.all_columns c
|
FROM sys.all_columns c
|
||||||
JOIN sys.all_objects o ON c.object_id = o.object_id
|
JOIN sys.all_objects o ON c.object_id = o.object_id
|
||||||
JOIN sys.types t ON c.user_type_id = t.user_type_id
|
JOIN sys.types t ON c.user_type_id = t.user_type_id
|
||||||
|
|||||||
@@ -14,15 +14,21 @@ if (!defined("DRIVER")) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function connect($server = "", $username = "", $password = "", $database = null, $port = null, $socket = null) {
|
function connect($server = "", $username = "", $password = "", $database = null, $port = null, $socket = null) {
|
||||||
|
global $adminer;
|
||||||
mysqli_report(MYSQLI_REPORT_OFF); // stays between requests, not required since PHP 5.3.4
|
mysqli_report(MYSQLI_REPORT_OFF); // stays between requests, not required since PHP 5.3.4
|
||||||
list($host, $port) = explode(":", $server, 2); // part after : is used for port or socket
|
list($host, $port) = explode(":", $server, 2); // part after : is used for port or socket
|
||||||
|
$ssl = $adminer->connectSsl();
|
||||||
|
if ($ssl) {
|
||||||
|
$this->ssl_set($ssl['key'], $ssl['cert'], $ssl['ca'], '', '');
|
||||||
|
}
|
||||||
$return = @$this->real_connect(
|
$return = @$this->real_connect(
|
||||||
($server != "" ? $host : ini_get("mysqli.default_host")),
|
($server != "" ? $host : ini_get("mysqli.default_host")),
|
||||||
($server . $username != "" ? $username : ini_get("mysqli.default_user")),
|
($server . $username != "" ? $username : ini_get("mysqli.default_user")),
|
||||||
($server . $username . $password != "" ? $password : ini_get("mysqli.default_pw")),
|
($server . $username . $password != "" ? $password : ini_get("mysqli.default_pw")),
|
||||||
$database,
|
$database,
|
||||||
(is_numeric($port) ? $port : ini_get("mysqli.default_port")),
|
(is_numeric($port) ? $port : ini_get("mysqli.default_port")),
|
||||||
(!is_numeric($port) ? $port : $socket)
|
(!is_numeric($port) ? $port : $socket),
|
||||||
|
($ssl ? 64 : 0) // 64 - MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT (not available before PHP 5.6.16)
|
||||||
);
|
);
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -223,7 +229,22 @@ if (!defined("DRIVER")) {
|
|||||||
var $extension = "PDO_MySQL";
|
var $extension = "PDO_MySQL";
|
||||||
|
|
||||||
function connect($server, $username, $password) {
|
function connect($server, $username, $password) {
|
||||||
$this->dsn("mysql:charset=utf8;host=" . str_replace(":", ";unix_socket=", preg_replace('~:(\\d)~', ';port=\\1', $server)), $username, $password);
|
global $adminer;
|
||||||
|
$options = array();
|
||||||
|
$ssl = $adminer->connectSsl();
|
||||||
|
if ($ssl) {
|
||||||
|
$options = array(
|
||||||
|
PDO::MYSQL_ATTR_SSL_KEY => $ssl['key'],
|
||||||
|
PDO::MYSQL_ATTR_SSL_CERT => $ssl['cert'],
|
||||||
|
PDO::MYSQL_ATTR_SSL_CA => $ssl['ca'],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
$this->dsn(
|
||||||
|
"mysql:charset=utf8;host=" . str_replace(":", ";unix_socket=", preg_replace('~:(\\d)~', ';port=\\1', $server)),
|
||||||
|
$username,
|
||||||
|
$password,
|
||||||
|
$options
|
||||||
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -276,6 +297,32 @@ if (!defined("DRIVER")) {
|
|||||||
}
|
}
|
||||||
return queries($prefix . implode(",\n", $values) . $suffix);
|
return queries($prefix . implode(",\n", $values) . $suffix);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function convertSearch($idf, $val, $field) {
|
||||||
|
return (preg_match('~char|text|enum|set~', $field["type"]) && !preg_match("~^utf8~", $field["collation"])
|
||||||
|
? "CONVERT($idf USING " . charset($this->_conn) . ")"
|
||||||
|
: $idf
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function warnings() {
|
||||||
|
$result = $this->_conn->query("SHOW WARNINGS");
|
||||||
|
if ($result && $result->num_rows) {
|
||||||
|
ob_start();
|
||||||
|
select($result); // select() usually needs to print a big table progressively
|
||||||
|
return ob_get_clean();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function tableHelp($name) {
|
||||||
|
$maria = preg_match('~MariaDB~', $this->_conn->server_info);
|
||||||
|
if (information_schema(DB)) {
|
||||||
|
return strtolower(($maria ? "information-schema-$name-table/" : str_replace("_", "-", $name) . "-table.html"));
|
||||||
|
}
|
||||||
|
if (DB == "mysql") {
|
||||||
|
return ($maria ? "mysql$name-table/" : "system-database.html"); //! more precise link
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -307,7 +354,7 @@ if (!defined("DRIVER")) {
|
|||||||
if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) {
|
if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) {
|
||||||
$connection->set_charset(charset($connection)); // available in MySQLi since PHP 5.0.5
|
$connection->set_charset(charset($connection)); // available in MySQLi since PHP 5.0.5
|
||||||
$connection->query("SET sql_quote_show_create = 1, autocommit = 1");
|
$connection->query("SET sql_quote_show_create = 1, autocommit = 1");
|
||||||
if (version_compare($connection->server_info, '5.7.8') >= 0) {
|
if (min_version('5.7.8', 10.2, $connection)) {
|
||||||
$structured_types[lang('Strings')][] = "json";
|
$structured_types[lang('Strings')][] = "json";
|
||||||
$types["json"] = 4294967295;
|
$types["json"] = 4294967295;
|
||||||
}
|
}
|
||||||
@@ -325,11 +372,10 @@ if (!defined("DRIVER")) {
|
|||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
function get_databases($flush) {
|
function get_databases($flush) {
|
||||||
global $connection;
|
|
||||||
// SHOW DATABASES can take a very long time so it is cached
|
// SHOW DATABASES can take a very long time so it is cached
|
||||||
$return = get_session("dbs");
|
$return = get_session("dbs");
|
||||||
if ($return === null) {
|
if ($return === null) {
|
||||||
$query = ($connection->server_info >= 5
|
$query = (min_version(5)
|
||||||
? "SELECT SCHEMA_NAME FROM information_schema.SCHEMATA"
|
? "SELECT SCHEMA_NAME FROM information_schema.SCHEMATA"
|
||||||
: "SHOW DATABASES"
|
: "SHOW DATABASES"
|
||||||
); // SHOW DATABASES can be disabled by skip_show_database
|
); // SHOW DATABASES can be disabled by skip_show_database
|
||||||
@@ -354,12 +400,14 @@ if (!defined("DRIVER")) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Formulate SQL modification query with limit 1
|
/** Formulate SQL modification query with limit 1
|
||||||
|
* @param string
|
||||||
* @param string everything after UPDATE or DELETE
|
* @param string everything after UPDATE or DELETE
|
||||||
* @param string
|
* @param string
|
||||||
|
* @param string
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function limit1($query, $where) {
|
function limit1($table, $query, $where, $separator = "\n") {
|
||||||
return limit($query, $where, 1);
|
return limit($query, $where, 1, 0, $separator);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get database collation
|
/** Get database collation
|
||||||
@@ -405,8 +453,7 @@ if (!defined("DRIVER")) {
|
|||||||
* @return array array($name => $type)
|
* @return array array($name => $type)
|
||||||
*/
|
*/
|
||||||
function tables_list() {
|
function tables_list() {
|
||||||
global $connection;
|
return get_key_vals(min_version(5)
|
||||||
return get_key_vals($connection->server_info >= 5
|
|
||||||
? "SELECT TABLE_NAME, TABLE_TYPE FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ORDER BY TABLE_NAME"
|
? "SELECT TABLE_NAME, TABLE_TYPE FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ORDER BY TABLE_NAME"
|
||||||
: "SHOW TABLES"
|
: "SHOW TABLES"
|
||||||
);
|
);
|
||||||
@@ -430,9 +477,8 @@ if (!defined("DRIVER")) {
|
|||||||
* @return array array($name => array("Name" => , "Engine" => , "Comment" => , "Oid" => , "Rows" => , "Collation" => , "Auto_increment" => , "Data_length" => , "Index_length" => , "Data_free" => )) or only inner array with $name
|
* @return array 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 = "", $fast = false) {
|
function table_status($name = "", $fast = false) {
|
||||||
global $connection;
|
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows($fast && $connection->server_info >= 5
|
foreach (get_rows($fast && min_version(5)
|
||||||
? "SELECT TABLE_NAME AS Name, ENGINE AS Engine, TABLE_COMMENT AS Comment FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() " . ($name != "" ? "AND TABLE_NAME = " . q($name) : "ORDER BY Name")
|
? "SELECT TABLE_NAME AS Name, ENGINE AS Engine, TABLE_COMMENT AS Comment FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() " . ($name != "" ? "AND TABLE_NAME = " . q($name) : "ORDER BY Name")
|
||||||
: "SHOW TABLE STATUS" . ($name != "" ? " LIKE " . q(addcslashes($name, "%_\\")) : "")
|
: "SHOW TABLE STATUS" . ($name != "" ? " LIKE " . q(addcslashes($name, "%_\\")) : "")
|
||||||
) as $row) {
|
) as $row) {
|
||||||
@@ -464,9 +510,8 @@ if (!defined("DRIVER")) {
|
|||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function fk_support($table_status) {
|
function fk_support($table_status) {
|
||||||
global $connection;
|
|
||||||
return preg_match('~InnoDB|IBMDB2I~i', $table_status["Engine"])
|
return preg_match('~InnoDB|IBMDB2I~i', $table_status["Engine"])
|
||||||
|| (preg_match('~NDB~i', $table_status["Engine"]) && version_compare($connection->server_info, '5.6') >= 0);
|
|| (preg_match('~NDB~i', $table_status["Engine"]) && min_version(5.6));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get information about fields
|
/** Get information about fields
|
||||||
@@ -573,9 +618,8 @@ if (!defined("DRIVER")) {
|
|||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function information_schema($db) {
|
function information_schema($db) {
|
||||||
global $connection;
|
return (min_version(5) && $db == "information_schema")
|
||||||
return ($connection->server_info >= 5 && $db == "information_schema")
|
|| (min_version(5.5) && $db == "performance_schema");
|
||||||
|| ($connection->server_info >= 5.5 && $db == "performance_schema");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get escaped error message
|
/** Get escaped error message
|
||||||
@@ -813,8 +857,9 @@ if (!defined("DRIVER")) {
|
|||||||
function routine($name, $type) {
|
function routine($name, $type) {
|
||||||
global $connection, $enum_length, $inout, $types;
|
global $connection, $enum_length, $inout, $types;
|
||||||
$aliases = array("bool", "boolean", "integer", "double precision", "real", "dec", "numeric", "fixed", "national char", "national varchar");
|
$aliases = array("bool", "boolean", "integer", "double precision", "real", "dec", "numeric", "fixed", "national char", "national varchar");
|
||||||
|
$space = "(?:\\s|/\\*[\s\S]*?\\*/|(?:#|-- )[^\n]*\n?|--\r?\n)";
|
||||||
$type_pattern = "((" . implode("|", array_merge(array_keys($types), $aliases)) . ")\\b(?:\\s*\\(((?:[^'\")]|$enum_length)++)\\))?\\s*(zerofill\\s*)?(unsigned(?:\\s+zerofill)?)?)(?:\\s*(?:CHARSET|CHARACTER\\s+SET)\\s*['\"]?([^'\"\\s,]+)['\"]?)?";
|
$type_pattern = "((" . implode("|", array_merge(array_keys($types), $aliases)) . ")\\b(?:\\s*\\(((?:[^'\")]|$enum_length)++)\\))?\\s*(zerofill\\s*)?(unsigned(?:\\s+zerofill)?)?)(?:\\s*(?:CHARSET|CHARACTER\\s+SET)\\s*['\"]?([^'\"\\s,]+)['\"]?)?";
|
||||||
$pattern = "\\s*(" . ($type == "FUNCTION" ? "" : $inout) . ")?\\s*(?:`((?:[^`]|``)*)`\\s*|\\b(\\S+)\\s+)$type_pattern";
|
$pattern = "$space*(" . ($type == "FUNCTION" ? "" : $inout) . ")?\\s*(?:`((?:[^`]|``)*)`\\s*|\\b(\\S+)\\s+)$type_pattern";
|
||||||
$create = $connection->result("SHOW CREATE $type " . idf_escape($name), 2);
|
$create = $connection->result("SHOW CREATE $type " . idf_escape($name), 2);
|
||||||
preg_match("~\\(((?:$pattern\\s*,?)*)\\)\\s*" . ($type == "FUNCTION" ? "RETURNS\\s+$type_pattern\\s+" : "") . "(.*)~is", $create, $match);
|
preg_match("~\\(((?:$pattern\\s*,?)*)\\)\\s*" . ($type == "FUNCTION" ? "RETURNS\\s+$type_pattern\\s+" : "") . "(.*)~is", $create, $match);
|
||||||
$fields = array();
|
$fields = array();
|
||||||
@@ -844,10 +889,10 @@ if (!defined("DRIVER")) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Get list of routines
|
/** Get list of routines
|
||||||
* @return array ("ROUTINE_TYPE" => , "ROUTINE_NAME" => , "DTD_IDENTIFIER" => )
|
* @return array ("SPECIFIC_NAME" => , "ROUTINE_NAME" => , "ROUTINE_TYPE" => , "DTD_IDENTIFIER" => )
|
||||||
*/
|
*/
|
||||||
function routines() {
|
function routines() {
|
||||||
return get_rows("SELECT ROUTINE_NAME, ROUTINE_TYPE, DTD_IDENTIFIER FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = " . q(DB));
|
return get_rows("SELECT ROUTINE_NAME AS SPECIFIC_NAME, ROUTINE_NAME, ROUTINE_TYPE, DTD_IDENTIFIER FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = " . q(DB));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get list of available routine languages
|
/** Get list of available routine languages
|
||||||
@@ -857,6 +902,15 @@ if (!defined("DRIVER")) {
|
|||||||
return array(); // "SQL" not required
|
return array(); // "SQL" not required
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Get routine signature
|
||||||
|
* @param string
|
||||||
|
* @param array result of routine()
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function routine_id($name, $row) {
|
||||||
|
return idf_escape($name);
|
||||||
|
}
|
||||||
|
|
||||||
/** Get last auto increment ID
|
/** Get last auto increment ID
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
@@ -871,7 +925,7 @@ if (!defined("DRIVER")) {
|
|||||||
* @return Min_Result
|
* @return Min_Result
|
||||||
*/
|
*/
|
||||||
function explain($connection, $query) {
|
function explain($connection, $query) {
|
||||||
return $connection->query("EXPLAIN " . ($connection->server_info >= 5.1 ? "PARTITIONS " : "") . $query);
|
return $connection->query("EXPLAIN " . (min_version(5.1) ? "PARTITIONS " : "") . $query);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get approximate number of rows
|
/** Get approximate number of rows
|
||||||
@@ -915,9 +969,10 @@ if (!defined("DRIVER")) {
|
|||||||
/** Get SQL command to create table
|
/** Get SQL command to create table
|
||||||
* @param string
|
* @param string
|
||||||
* @param bool
|
* @param bool
|
||||||
|
* @param string
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function create_sql($table, $auto_increment) {
|
function create_sql($table, $auto_increment, $style) {
|
||||||
global $connection;
|
global $connection;
|
||||||
$return = $connection->result("SHOW CREATE TABLE " . table($table), 1);
|
$return = $connection->result("SHOW CREATE TABLE " . table($table), 1);
|
||||||
if (!$auto_increment) {
|
if (!$auto_increment) {
|
||||||
@@ -944,14 +999,12 @@ if (!defined("DRIVER")) {
|
|||||||
|
|
||||||
/** Get SQL commands to create triggers
|
/** Get SQL commands to create triggers
|
||||||
* @param string
|
* @param string
|
||||||
* @param string
|
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function trigger_sql($table, $style) {
|
function trigger_sql($table) {
|
||||||
$return = "";
|
$return = "";
|
||||||
foreach (get_rows("SHOW TRIGGERS LIKE " . q(addcslashes($table, "%_\\")), null, "-- ") as $row) {
|
foreach (get_rows("SHOW TRIGGERS LIKE " . q(addcslashes($table, "%_\\")), null, "-- ") as $row) {
|
||||||
$return .= "\n" . ($style == 'CREATE+ALTER' ? "DROP TRIGGER IF EXISTS " . idf_escape($row["Trigger"]) . ";;\n" : "")
|
$return .= "\nCREATE TRIGGER " . idf_escape($row["Trigger"]) . " $row[Timing] $row[Event] ON " . table($row["Table"]) . " FOR EACH ROW\n$row[Statement];;\n";
|
||||||
. "CREATE TRIGGER " . idf_escape($row["Trigger"]) . " $row[Timing] $row[Event] ON " . table($row["Table"]) . " FOR EACH ROW\n$row[Statement];;\n";
|
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -977,14 +1030,6 @@ if (!defined("DRIVER")) {
|
|||||||
return get_key_vals("SHOW STATUS");
|
return get_key_vals("SHOW STATUS");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get replication status of master or slave
|
|
||||||
* @param string
|
|
||||||
* @return array ($name => $value)
|
|
||||||
*/
|
|
||||||
function replication_status($type) {
|
|
||||||
return get_rows("SHOW $type STATUS");
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Convert field in select and edit
|
/** Convert field in select and edit
|
||||||
* @param array one element from fields()
|
* @param array one element from fields()
|
||||||
* @return string
|
* @return string
|
||||||
@@ -997,7 +1042,7 @@ if (!defined("DRIVER")) {
|
|||||||
return "BIN(" . idf_escape($field["field"]) . " + 0)"; // + 0 is required outside MySQLnd
|
return "BIN(" . idf_escape($field["field"]) . " + 0)"; // + 0 is required outside MySQLnd
|
||||||
}
|
}
|
||||||
if (preg_match("~geometry|point|linestring|polygon~", $field["type"])) {
|
if (preg_match("~geometry|point|linestring|polygon~", $field["type"])) {
|
||||||
return "AsWKT(" . idf_escape($field["field"]) . ")";
|
return (min_version(8) ? "ST_" : "") . "AsWKT(" . idf_escape($field["field"]) . ")";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1014,7 +1059,7 @@ if (!defined("DRIVER")) {
|
|||||||
$return = "CONV($return, 2, 10) + 0";
|
$return = "CONV($return, 2, 10) + 0";
|
||||||
}
|
}
|
||||||
if (preg_match("~geometry|point|linestring|polygon~", $field["type"])) {
|
if (preg_match("~geometry|point|linestring|polygon~", $field["type"])) {
|
||||||
$return = "GeomFromText($return)";
|
$return = (min_version(8) ? "ST_" : "") . "GeomFromText($return)";
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -1024,8 +1069,7 @@ if (!defined("DRIVER")) {
|
|||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function support($feature) {
|
function support($feature) {
|
||||||
global $connection;
|
return !preg_match("~scheme|sequence|type|view_trigger|materializedview" . (min_version(5.1) ? "" : "|event|partitioning" . (min_version(5) ? "" : "|routine|trigger|view")) . "~", $feature);
|
||||||
return !preg_match("~scheme|sequence|type|view_trigger|materializedview" . ($connection->server_info < 5.1 ? "|event|partitioning" . ($connection->server_info < 5 ? "|routine|trigger|view" : "") : "") . "~", $feature);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function kill_process($val) {
|
function kill_process($val) {
|
||||||
@@ -1056,8 +1100,8 @@ if (!defined("DRIVER")) {
|
|||||||
$structured_types[$key] = array_keys($val);
|
$structured_types[$key] = array_keys($val);
|
||||||
}
|
}
|
||||||
$unsigned = array("unsigned", "zerofill", "unsigned zerofill"); ///< @var array number variants
|
$unsigned = array("unsigned", "zerofill", "unsigned zerofill"); ///< @var array number variants
|
||||||
$operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "REGEXP", "IN", "IS NULL", "NOT LIKE", "NOT REGEXP", "NOT IN", "IS NOT NULL", "SQL"); ///< @var array operators used in select
|
$operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "REGEXP", "IN", "FIND_IN_SET", "IS NULL", "NOT LIKE", "NOT REGEXP", "NOT IN", "IS NOT NULL", "SQL"); ///< @var array operators used in select
|
||||||
$functions = array("char_length", "date", "from_unixtime", "lower", "round", "sec_to_time", "time_to_sec", "upper"); ///< @var array functions used in select
|
$functions = array("char_length", "date", "from_unixtime", "lower", "round", "floor", "ceil", "sec_to_time", "time_to_sec", "upper"); ///< @var array functions used in select
|
||||||
$grouping = array("avg", "count", "count distinct", "group_concat", "max", "min", "sum"); ///< @var array grouping functions used in select
|
$grouping = array("avg", "count", "count distinct", "group_concat", "max", "min", "sum"); ///< @var array grouping functions used in select
|
||||||
$edit_functions = array( ///< @var array of array("$type|$type2" => "$function/$function2") functions used in editing, [0] - edit and insert, [1] - edit only
|
$edit_functions = array( ///< @var array of array("$type|$type2" => "$function/$function2") functions used in editing, [0] - edit and insert, [1] - edit only
|
||||||
array(
|
array(
|
||||||
@@ -1065,7 +1109,7 @@ if (!defined("DRIVER")) {
|
|||||||
"binary" => "md5/sha1",
|
"binary" => "md5/sha1",
|
||||||
"date|time" => "now",
|
"date|time" => "now",
|
||||||
), array(
|
), array(
|
||||||
"(^|[^o])int|float|double|decimal" => "+/-", // not point
|
number_type() => "+/-",
|
||||||
"date" => "+ interval/- interval",
|
"date" => "+ interval/- interval",
|
||||||
"time" => "addtime/subtime",
|
"time" => "addtime/subtime",
|
||||||
"char|text" => "concat",
|
"char|text" => "concat",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
$drivers["oracle"] = "Oracle";
|
$drivers["oracle"] = "Oracle (beta)";
|
||||||
|
|
||||||
if (isset($_GET["oracle"])) {
|
if (isset($_GET["oracle"])) {
|
||||||
$possible_drivers = array("OCI8", "PDO_OCI");
|
$possible_drivers = array("OCI8", "PDO_OCI");
|
||||||
@@ -175,8 +175,8 @@ if (isset($_GET["oracle"])) {
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
function limit1($query, $where) {
|
function limit1($table, $query, $where, $separator = "\n") {
|
||||||
return " $query$where";
|
return " $query$where"; //! limit
|
||||||
}
|
}
|
||||||
|
|
||||||
function db_collation($db, $collations) {
|
function db_collation($db, $collations) {
|
||||||
|
|||||||
@@ -37,7 +37,15 @@ if (isset($_GET["pgsql"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function quote($string) {
|
function quote($string) {
|
||||||
return "'" . pg_escape_string($this->_link, $string) . "'"; //! bytea
|
return "'" . pg_escape_string($this->_link, $string) . "'";
|
||||||
|
}
|
||||||
|
|
||||||
|
function value($val, $field) {
|
||||||
|
return ($field["type"] == "bytea" ? pg_unescape_bytea($val) : $val);
|
||||||
|
}
|
||||||
|
|
||||||
|
function quoteBinary($string) {
|
||||||
|
return "'" . pg_escape_bytea($this->_link, $string) . "'";
|
||||||
}
|
}
|
||||||
|
|
||||||
function select_db($database) {
|
function select_db($database) {
|
||||||
@@ -89,6 +97,10 @@ if (isset($_GET["pgsql"])) {
|
|||||||
}
|
}
|
||||||
return pg_fetch_result($result->_result, 0, $field);
|
return pg_fetch_result($result->_result, 0, $field);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function warnings() {
|
||||||
|
return h(pg_last_notice($this->_link)); // second parameter is available since PHP 7.1.0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Min_Result {
|
class Min_Result {
|
||||||
@@ -143,6 +155,18 @@ if (isset($_GET["pgsql"])) {
|
|||||||
return ($adminer->database() == $database);
|
return ($adminer->database() == $database);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function value($val, $field) {
|
||||||
|
return $val;
|
||||||
|
}
|
||||||
|
|
||||||
|
function quoteBinary($s) {
|
||||||
|
return q($s);
|
||||||
|
}
|
||||||
|
|
||||||
|
function warnings() {
|
||||||
|
return ''; // not implemented in PDO_PgSQL as of PHP 7.2.1
|
||||||
|
}
|
||||||
|
|
||||||
function close() {
|
function close() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -173,6 +197,36 @@ if (isset($_GET["pgsql"])) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function convertSearch($idf, $val, $field) {
|
||||||
|
return (preg_match('~char|text' . (is_numeric($val["val"]) && !preg_match('~LIKE~', $val["op"]) ? '|' . number_type() : '') . '~', $field["type"])
|
||||||
|
? $idf
|
||||||
|
: "CAST($idf AS text)"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function value($val, $field) {
|
||||||
|
return $this->_conn->value($val, $field);
|
||||||
|
}
|
||||||
|
|
||||||
|
function quoteBinary($s) {
|
||||||
|
return $this->_conn->quoteBinary($s);
|
||||||
|
}
|
||||||
|
|
||||||
|
function warnings() {
|
||||||
|
return $this->_conn->warnings();
|
||||||
|
}
|
||||||
|
|
||||||
|
function tableHelp($name) {
|
||||||
|
$links = array(
|
||||||
|
"information_schema" => "infoschema",
|
||||||
|
"pg_catalog" => "catalog",
|
||||||
|
);
|
||||||
|
$link = $links[$_GET["ns"]];
|
||||||
|
if ($link) {
|
||||||
|
return "$link-" . str_replace("_", "-", $name) . ".html";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -186,12 +240,20 @@ if (isset($_GET["pgsql"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function connect() {
|
function connect() {
|
||||||
global $adminer;
|
global $adminer, $types, $structured_types;
|
||||||
$connection = new Min_DB;
|
$connection = new Min_DB;
|
||||||
$credentials = $adminer->credentials();
|
$credentials = $adminer->credentials();
|
||||||
if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) {
|
if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) {
|
||||||
if ($connection->server_info >= 9) {
|
if (min_version(9, 0, $connection)) {
|
||||||
$connection->query("SET application_name = 'Adminer'");
|
$connection->query("SET application_name = 'Adminer'");
|
||||||
|
if (min_version(9.2, 0, $connection)) {
|
||||||
|
$structured_types[lang('Strings')][] = "json";
|
||||||
|
$types["json"] = 4294967295;
|
||||||
|
if (min_version(9.4, 0, $connection)) {
|
||||||
|
$structured_types[lang('Strings')][] = "jsonb";
|
||||||
|
$types["jsonb"] = 4294967295;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return $connection;
|
return $connection;
|
||||||
}
|
}
|
||||||
@@ -206,8 +268,11 @@ if (isset($_GET["pgsql"])) {
|
|||||||
return " $query$where" . ($limit !== null ? $separator . "LIMIT $limit" . ($offset ? " OFFSET $offset" : "") : "");
|
return " $query$where" . ($limit !== null ? $separator . "LIMIT $limit" . ($offset ? " OFFSET $offset" : "") : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
function limit1($query, $where) {
|
function limit1($table, $query, $where, $separator = "\n") {
|
||||||
return " $query$where";
|
return (preg_match('~^INTO~', $query)
|
||||||
|
? limit($query, $where, 1, 0, $separator)
|
||||||
|
: " $query WHERE ctid = (SELECT ctid FROM " . table($table) . $where . $separator . "LIMIT 1)"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function db_collation($db, $collations) {
|
function db_collation($db, $collations) {
|
||||||
@@ -244,10 +309,10 @@ ORDER BY 1";
|
|||||||
|
|
||||||
function table_status($name = "") {
|
function table_status($name = "") {
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows("SELECT c.relname AS \"Name\", CASE c.relkind WHEN 'r' THEN 'table' WHEN 'm' THEN 'materialized view' ELSE 'view' END AS \"Engine\", pg_relation_size(c.oid) AS \"Data_length\", pg_indexes_size(c.oid) AS \"Index_length\", obj_description(c.oid, 'pg_class') AS \"Comment\", c.relhasoids::int AS \"Oid\", c.reltuples as \"Rows\", n.nspname
|
foreach (get_rows("SELECT c.relname AS \"Name\", CASE c.relkind WHEN 'r' THEN 'table' WHEN 'm' THEN 'materialized view' ELSE 'view' END AS \"Engine\", pg_relation_size(c.oid) AS \"Data_length\", pg_total_relation_size(c.oid) - pg_relation_size(c.oid) AS \"Index_length\", obj_description(c.oid, 'pg_class') AS \"Comment\", CASE WHEN c.relhasoids THEN 'oid' ELSE '' END AS \"Oid\", c.reltuples as \"Rows\", n.nspname
|
||||||
FROM pg_class c
|
FROM pg_class c
|
||||||
JOIN pg_namespace n ON(n.nspname = current_schema() AND n.oid = c.relnamespace)
|
JOIN pg_namespace n ON(n.nspname = current_schema() AND n.oid = c.relnamespace)
|
||||||
WHERE relkind IN ('r', 'm', 'v')
|
WHERE relkind IN ('r', 'm', 'v', 'f')
|
||||||
" . ($name != "" ? "AND relname = " . q($name) : "ORDER BY relname")
|
" . ($name != "" ? "AND relname = " . q($name) : "ORDER BY relname")
|
||||||
) as $row) { //! Index_length, Auto_increment
|
) as $row) { //! Index_length, Auto_increment
|
||||||
$return[$row["Name"]] = $row;
|
$return[$row["Name"]] = $row;
|
||||||
@@ -296,7 +361,7 @@ ORDER BY a.attnum"
|
|||||||
$row["auto_increment"] = preg_match('~^nextval\\(~i', $row["default"]);
|
$row["auto_increment"] = preg_match('~^nextval\\(~i', $row["default"]);
|
||||||
$row["privileges"] = array("insert" => 1, "select" => 1, "update" => 1);
|
$row["privileges"] = array("insert" => 1, "select" => 1, "update" => 1);
|
||||||
if (preg_match('~(.+)::[^)]+(.*)~', $row["default"], $match)) {
|
if (preg_match('~(.+)::[^)]+(.*)~', $row["default"], $match)) {
|
||||||
$row["default"] = ($match[1][0] == "'" ? idf_unescape($match[1]) : $match[1]) . $match[2];
|
$row["default"] = ($match[1] == "NULL" ? null : (($match[1][0] == "'" ? idf_unescape($match[1]) : $match[1]) . $match[2]));
|
||||||
}
|
}
|
||||||
$return[$row["field"]] = $row;
|
$return[$row["field"]] = $row;
|
||||||
}
|
}
|
||||||
@@ -352,7 +417,9 @@ ORDER BY conkey, conname") as $row) {
|
|||||||
|
|
||||||
function view($name) {
|
function view($name) {
|
||||||
global $connection;
|
global $connection;
|
||||||
return array("select" => trim($connection->result("SELECT pg_get_viewdef(" . q($name) . ")")));
|
return array("select" => trim($connection->result("SELECT view_definition
|
||||||
|
FROM information_schema.views
|
||||||
|
WHERE table_schema = current_schema() AND table_name = " . q($name))));
|
||||||
}
|
}
|
||||||
|
|
||||||
function collations() {
|
function collations() {
|
||||||
@@ -533,30 +600,36 @@ ORDER BY conkey, conname") as $row) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
function routine($name, $type) {
|
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
|
$rows = get_rows('SELECT routine_definition AS definition, LOWER(external_language) AS language, *
|
||||||
//! no procedures, only functions
|
FROM information_schema.routines
|
||||||
//! different syntax of CREATE FUNCTION
|
WHERE routine_schema = current_schema() AND specific_name = ' . q($name));
|
||||||
$rows = get_rows('SELECT pg_catalog.format_type(p.prorettype, NULL) AS "returns", p.prosrc AS "definition"
|
$return = $rows[0];
|
||||||
FROM pg_catalog.pg_namespace n
|
$return["returns"] = array("type" => $return["type_udt_name"]);
|
||||||
JOIN pg_catalog.pg_proc p ON p.pronamespace = n.oid
|
$return["fields"] = get_rows('SELECT parameter_name AS field, data_type AS type, character_maximum_length AS length, parameter_mode AS inout
|
||||||
WHERE n.nspname = current_schema() AND p.proname = ' . q($name));
|
FROM information_schema.parameters
|
||||||
$rows[0]["fields"] = array(); //!
|
WHERE specific_schema = current_schema() AND specific_name = ' . q($name) . '
|
||||||
return $rows[0];
|
ORDER BY ordinal_position');
|
||||||
|
return $return;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
function routines() {
|
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"
|
return get_rows('SELECT specific_name AS "SPECIFIC_NAME", routine_type AS "ROUTINE_TYPE", routine_name AS "ROUTINE_NAME", type_udt_name AS "DTD_IDENTIFIER"
|
||||||
FROM pg_catalog.pg_namespace n
|
FROM information_schema.routines
|
||||||
JOIN pg_catalog.pg_proc p ON p.pronamespace = n.oid
|
WHERE routine_schema = current_schema()
|
||||||
WHERE n.nspname = current_schema()
|
ORDER BY SPECIFIC_NAME');
|
||||||
ORDER BY p.proname');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function routine_languages() {
|
function routine_languages() {
|
||||||
return get_vals("SELECT langname FROM pg_catalog.pg_language");
|
return get_vals("SELECT LOWER(lanname) FROM pg_catalog.pg_language");
|
||||||
|
}
|
||||||
|
|
||||||
|
function routine_id($name, $row) {
|
||||||
|
$return = array();
|
||||||
|
foreach ($row["fields"] as $field) {
|
||||||
|
$return[] = $field["type"];
|
||||||
|
}
|
||||||
|
return idf_escape($name) . "(" . implode(", ", $return) . ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
function last_id() {
|
function last_id() {
|
||||||
@@ -609,12 +682,7 @@ AND typelem = 0"
|
|||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get SQL command to create table
|
function create_sql($table, $auto_increment, $style) {
|
||||||
* @param string
|
|
||||||
* @param bool
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function create_sql($table, $auto_increment) {
|
|
||||||
global $connection;
|
global $connection;
|
||||||
$return = '';
|
$return = '';
|
||||||
$return_parts = array();
|
$return_parts = array();
|
||||||
@@ -626,7 +694,6 @@ AND typelem = 0"
|
|||||||
ksort($indexes);
|
ksort($indexes);
|
||||||
$fkeys = foreign_keys($table);
|
$fkeys = foreign_keys($table);
|
||||||
ksort($fkeys);
|
ksort($fkeys);
|
||||||
$triggers = triggers($table);
|
|
||||||
|
|
||||||
if (!$status || empty($fields)) {
|
if (!$status || empty($fields)) {
|
||||||
return false;
|
return false;
|
||||||
@@ -637,15 +704,19 @@ AND typelem = 0"
|
|||||||
// fields' definitions
|
// fields' definitions
|
||||||
foreach ($fields as $field_name => $field) {
|
foreach ($fields as $field_name => $field) {
|
||||||
$part = idf_escape($field['field']) . ' ' . $field['full_type']
|
$part = idf_escape($field['field']) . ' ' . $field['full_type']
|
||||||
. (is_null($field['default']) ? "" : " DEFAULT $field[default]")
|
. default_value($field)
|
||||||
. ($field['attnotnull'] ? "" : " NOT NULL");
|
. ($field['attnotnull'] ? " NOT NULL" : "");
|
||||||
$return_parts[] = $part;
|
$return_parts[] = $part;
|
||||||
|
|
||||||
// sequences for fields
|
// sequences for fields
|
||||||
if (preg_match('~nextval\(\'([^\']+)\'\)~', $field['default'], $matches)) {
|
if (preg_match('~nextval\(\'([^\']+)\'\)~', $field['default'], $matches)) {
|
||||||
$sequence_name = $matches[1];
|
$sequence_name = $matches[1];
|
||||||
$sq = reset(get_rows("SELECT * FROM $sequence_name"));
|
$sq = reset(get_rows(min_version(10)
|
||||||
$sequences[] = "CREATE SEQUENCE $sequence_name INCREMENT $sq[increment_by] MINVALUE $sq[min_value] MAXVALUE $sq[max_value] START " . ($auto_increment ? $sq['last_value'] : 1) . " CACHE $sq[cache_value];";
|
? "SELECT *, cache_size AS cache_value FROM pg_sequences WHERE schemaname = current_schema() AND sequencename = " . q($sequence_name)
|
||||||
|
: "SELECT * FROM $sequence_name"
|
||||||
|
));
|
||||||
|
$sequences[] = ($style == "DROP+CREATE" ? "DROP SEQUENCE IF EXISTS $sequence_name;\n" : "")
|
||||||
|
. "CREATE SEQUENCE $sequence_name INCREMENT $sq[increment_by] MINVALUE $sq[min_value] MAXVALUE $sq[max_value] START " . ($auto_increment ? $sq['last_value'] : 1) . " CACHE $sq[cache_value];";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -687,30 +758,21 @@ AND typelem = 0"
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// triggers
|
|
||||||
foreach ($triggers as $trg_id => $trg) {
|
|
||||||
$trigger = trigger($trg_id, $status['Name']);
|
|
||||||
$return .= "\n\nCREATE TRIGGER " . idf_escape($trigger['Trigger']) . " $trigger[Timing] $trigger[Events] ON " . idf_escape($status["nspname"]) . "." . idf_escape($status['Name']) . " $trigger[Type] $trigger[Statement];";
|
|
||||||
}
|
|
||||||
|
|
||||||
return rtrim($return, ';');
|
return rtrim($return, ';');
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get SQL commands to create triggers
|
function truncate_sql($table) {
|
||||||
* @param string
|
return "TRUNCATE " . table($table);
|
||||||
* @param string
|
}
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
//@TODO
|
|
||||||
function trigger_sql($table, $style) {
|
|
||||||
$return = "";
|
|
||||||
//foreach (get_rows("SHOW TRIGGERS LIKE " . q(addcslashes($table, "%_\\")), null, "-- ") as $row) {
|
|
||||||
// $return .= "\n" . ($style == 'CREATE+ALTER' ? "DROP TRIGGER IF EXISTS " . idf_escape($row["Trigger"]) . ";;\n" : "")
|
|
||||||
// . "CREATE TRIGGER " . idf_escape($row["Trigger"]) . " $row[Timing] $row[Event] ON " . table($row["Table"]) . " FOR EACH ROW\n$row[Statement];;\n";
|
|
||||||
//}
|
|
||||||
//return $return;
|
|
||||||
|
|
||||||
return false;
|
function trigger_sql($table) {
|
||||||
|
$status = table_status($table);
|
||||||
|
$return = "";
|
||||||
|
foreach (triggers($table) as $trg_id => $trg) {
|
||||||
|
$trigger = trigger($trg_id, $status['Name']);
|
||||||
|
$return .= "\nCREATE TRIGGER " . idf_escape($trigger['Trigger']) . " $trigger[Timing] $trigger[Events] ON " . idf_escape($status["nspname"]) . "." . idf_escape($status['Name']) . " $trigger[Type] $trigger[Statement];;\n";
|
||||||
|
}
|
||||||
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -723,8 +785,7 @@ AND typelem = 0"
|
|||||||
}
|
}
|
||||||
|
|
||||||
function process_list() {
|
function process_list() {
|
||||||
global $connection;
|
return get_rows("SELECT * FROM pg_stat_activity ORDER BY " . (min_version(9.2) ? "pid" : "procpid"));
|
||||||
return get_rows("SELECT * FROM pg_stat_activity ORDER BY " . ($connection->server_info < 9.2 ? "procpid" : "pid"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function show_status() {
|
function show_status() {
|
||||||
@@ -738,8 +799,7 @@ AND typelem = 0"
|
|||||||
}
|
}
|
||||||
|
|
||||||
function support($feature) {
|
function support($feature) {
|
||||||
global $connection;
|
return preg_match('~^(database|table|columns|sql|indexes|comment|view|' . (min_version(9.3) ? 'materializedview|' : '') . 'scheme|routine|processlist|sequence|trigger|type|variables|drop_col|kill|dump)$~', $feature);
|
||||||
return preg_match('~^(database|table|columns|sql|indexes|comment|view|' . ($connection->server_info >= 9.3 ? 'materializedview|' : '') . 'scheme|processlist|sequence|trigger|type|variables|drop_col|kill|dump)$~', $feature); //! routine|
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function kill_process($val) {
|
function kill_process($val) {
|
||||||
@@ -778,7 +838,7 @@ AND typelem = 0"
|
|||||||
"char" => "md5",
|
"char" => "md5",
|
||||||
"date|time" => "now",
|
"date|time" => "now",
|
||||||
), array(
|
), array(
|
||||||
"int|numeric|real|money" => "+/-",
|
number_type() => "+/-",
|
||||||
"date|time" => "+ interval/- interval", //! escape
|
"date|time" => "+ interval/- interval", //! escape
|
||||||
"char|text" => "||",
|
"char|text" => "||",
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
$drivers["simpledb"] = "SimpleDB";
|
$drivers["simpledb"] = "SimpleDB";
|
||||||
|
|
||||||
if (isset($_GET["simpledb"])) {
|
if (isset($_GET["simpledb"])) {
|
||||||
$possible_drivers = array("SimpleXML");
|
$possible_drivers = array("SimpleXML + allow_url_fopen");
|
||||||
define("DRIVER", "simpledb");
|
define("DRIVER", "simpledb");
|
||||||
|
|
||||||
if (class_exists('SimpleXMLElement')) {
|
if (class_exists('SimpleXMLElement') && ini_bool('allow_url_fopen')) {
|
||||||
class Min_DB {
|
class Min_DB {
|
||||||
var $extension = "SimpleXML", $server_info = '2009-04-15', $error, $timeout, $next, $affected_rows, $_result;
|
var $extension = "SimpleXML", $server_info = '2009-04-15', $error, $timeout, $next, $affected_rows, $_result;
|
||||||
|
|
||||||
|
|||||||
@@ -184,11 +184,13 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
|
|
||||||
function __construct() {
|
function __construct() {
|
||||||
parent::__construct(":memory:");
|
parent::__construct(":memory:");
|
||||||
|
$this->query("PRAGMA foreign_keys = 1");
|
||||||
}
|
}
|
||||||
|
|
||||||
function select_db($filename) {
|
function select_db($filename) {
|
||||||
if (is_readable($filename) && $this->query("ATTACH " . $this->quote(preg_match("~(^[/\\\\]|:)~", $filename) ? $filename : dirname($_SERVER["SCRIPT_FILENAME"]) . "/$filename") . " AS a")) { // is_readable - SQLite 3
|
if (is_readable($filename) && $this->query("ATTACH " . $this->quote(preg_match("~(^[/\\\\]|:)~", $filename) ? $filename : dirname($_SERVER["SCRIPT_FILENAME"]) . "/$filename") . " AS a")) { // is_readable - SQLite 3
|
||||||
parent::__construct($filename);
|
parent::__construct($filename);
|
||||||
|
$this->query("PRAGMA foreign_keys = 1");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -216,6 +218,15 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
return queries("REPLACE INTO " . table($table) . " (" . implode(", ", array_keys(reset($rows))) . ") VALUES\n" . implode(",\n", $values));
|
return queries("REPLACE INTO " . table($table) . " (" . implode(", ", array_keys(reset($rows))) . ") VALUES\n" . implode(",\n", $values));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function tableHelp($name) {
|
||||||
|
if ($name == "sqlite_sequence") {
|
||||||
|
return "fileformat2.html#seqtab";
|
||||||
|
}
|
||||||
|
if ($name == "sqlite_master") {
|
||||||
|
return "fileformat2.html#$name";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -240,9 +251,12 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
return " $query$where" . ($limit !== null ? $separator . "LIMIT $limit" . ($offset ? " OFFSET $offset" : "") : "");
|
return " $query$where" . ($limit !== null ? $separator . "LIMIT $limit" . ($offset ? " OFFSET $offset" : "") : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
function limit1($query, $where) {
|
function limit1($table, $query, $where, $separator = "\n") {
|
||||||
global $connection;
|
global $connection;
|
||||||
return ($connection->result("SELECT sqlite_compileoption_used('ENABLE_UPDATE_DELETE_LIMIT')") ? limit($query, $where, 1) : " $query$where");
|
return (preg_match('~^INTO~', $query) || $connection->result("SELECT sqlite_compileoption_used('ENABLE_UPDATE_DELETE_LIMIT')")
|
||||||
|
? limit($query, $where, 1, 0, $separator)
|
||||||
|
: " $query WHERE rowid = (SELECT rowid FROM " . table($table) . $where . $separator . "LIMIT 1)" //! use primary key in tables with WITHOUT rowid
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function db_collation($db, $collations) {
|
function db_collation($db, $collations) {
|
||||||
@@ -269,9 +283,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
function table_status($name = "") {
|
function table_status($name = "") {
|
||||||
global $connection;
|
global $connection;
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows("SELECT name AS Name, type AS Engine FROM sqlite_master WHERE type IN ('table', 'view') " . ($name != "" ? "AND name = " . q($name) : "ORDER BY name")) as $row) {
|
foreach (get_rows("SELECT name AS Name, type AS Engine, 'rowid' AS Oid, '' AS Auto_increment FROM sqlite_master WHERE type IN ('table', 'view') " . ($name != "" ? "AND name = " . q($name) : "ORDER BY name")) as $row) {
|
||||||
$row["Oid"] = 1;
|
|
||||||
$row["Auto_increment"] = "";
|
|
||||||
$row["Rows"] = $connection->result("SELECT COUNT(*) FROM " . idf_escape($row["Name"]));
|
$row["Rows"] = $connection->result("SELECT COUNT(*) FROM " . idf_escape($row["Name"]));
|
||||||
$return[$row["Name"]] = $row;
|
$return[$row["Name"]] = $row;
|
||||||
}
|
}
|
||||||
@@ -334,9 +346,9 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
}
|
}
|
||||||
$return = array();
|
$return = array();
|
||||||
$sql = $connection2->result("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = " . q($table));
|
$sql = $connection2->result("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = " . q($table));
|
||||||
if (preg_match('~\bPRIMARY\s+KEY\s*\((([^)"]+|"[^"]*")++)~i', $sql, $match)) {
|
if (preg_match('~\bPRIMARY\s+KEY\s*\((([^)"]+|"[^"]*"|`[^`]*`)++)~i', $sql, $match)) {
|
||||||
$return[""] = array("type" => "PRIMARY", "columns" => array(), "lengths" => array(), "descs" => array());
|
$return[""] = array("type" => "PRIMARY", "columns" => array(), "lengths" => array(), "descs" => array());
|
||||||
preg_match_all('~((("[^"]*+")+)|(\S+))(\s+(ASC|DESC))?(,\s*|$)~i', $match[1], $matches, PREG_SET_ORDER);
|
preg_match_all('~((("[^"]*+")+|(?:`[^`]*+`)+)|(\S+))(\s+(ASC|DESC))?(,\s*|$)~i', $match[1], $matches, PREG_SET_ORDER);
|
||||||
foreach ($matches as $match) {
|
foreach ($matches as $match) {
|
||||||
$return[""]["columns"][] = idf_unescape($match[2]) . $match[4];
|
$return[""]["columns"][] = idf_unescape($match[2]) . $match[4];
|
||||||
$return[""]["descs"][] = (preg_match('~DESC~i', $match[5]) ? '1' : null);
|
$return[""]["descs"][] = (preg_match('~DESC~i', $match[5]) ? '1' : null);
|
||||||
@@ -504,6 +516,9 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
if ($table != "") {
|
if ($table != "") {
|
||||||
if (!$fields) {
|
if (!$fields) {
|
||||||
foreach (fields($table) as $key => $field) {
|
foreach (fields($table) as $key => $field) {
|
||||||
|
if ($indexes) {
|
||||||
|
$field["auto_increment"] = 0;
|
||||||
|
}
|
||||||
$fields[] = process_field($field, $field);
|
$fields[] = process_field($field, $field);
|
||||||
$originals[$key] = idf_escape($key);
|
$originals[$key] = idf_escape($key);
|
||||||
}
|
}
|
||||||
@@ -669,18 +684,6 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function routine($name, $type) {
|
|
||||||
// not supported by SQLite
|
|
||||||
}
|
|
||||||
|
|
||||||
function routines() {
|
|
||||||
// not supported by SQLite
|
|
||||||
}
|
|
||||||
|
|
||||||
function routine_languages() {
|
|
||||||
// not supported by SQLite
|
|
||||||
}
|
|
||||||
|
|
||||||
function begin() {
|
function begin() {
|
||||||
return queries("BEGIN");
|
return queries("BEGIN");
|
||||||
}
|
}
|
||||||
@@ -713,7 +716,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function create_sql($table, $auto_increment) {
|
function create_sql($table, $auto_increment, $style) {
|
||||||
global $connection;
|
global $connection;
|
||||||
$return = $connection->result("SELECT sql FROM sqlite_master WHERE type IN ('table', 'view') AND name = " . q($table));
|
$return = $connection->result("SELECT sql FROM sqlite_master WHERE type IN ('table', 'view') AND name = " . q($table));
|
||||||
foreach (indexes($table) as $name => $index) {
|
foreach (indexes($table) as $name => $index) {
|
||||||
@@ -732,7 +735,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
function use_sql($database) {
|
function use_sql($database) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function trigger_sql($table, $style) {
|
function trigger_sql($table) {
|
||||||
return implode(get_vals("SELECT sql || ';;\n' FROM sqlite_master WHERE type = 'trigger' AND tbl_name = " . q($table)));
|
return implode(get_vals("SELECT sql || ';;\n' FROM sqlite_master WHERE type = 'trigger' AND tbl_name = " . q($table)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
|
|||||||
$fields = fields($name);
|
$fields = fields($name);
|
||||||
$adminer->dumpData($name, $_POST["data_style"], "SELECT *" . convert_fields($fields, $fields) . " FROM " . table($name));
|
$adminer->dumpData($name, $_POST["data_style"], "SELECT *" . convert_fields($fields, $fields) . " FROM " . table($name));
|
||||||
}
|
}
|
||||||
if ($is_sql && $_POST["triggers"] && $table && ($triggers = trigger_sql($name, $_POST["table_style"]))) {
|
if ($is_sql && $_POST["triggers"] && $table && ($triggers = trigger_sql($name))) {
|
||||||
echo "\nDELIMITER ;;\n$triggers\nDELIMITER ;\n";
|
echo "\nDELIMITER ;;\n$triggers\nDELIMITER ;\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -165,12 +165,13 @@ echo "<tr><th>" . lang('Data') . "<td>" . html_select('data_style', $data_style,
|
|||||||
|
|
||||||
<table cellspacing="0">
|
<table cellspacing="0">
|
||||||
<?php
|
<?php
|
||||||
|
echo script("qsl('table').onclick = dumpClick;");
|
||||||
$prefixes = array();
|
$prefixes = array();
|
||||||
if (DB != "") {
|
if (DB != "") {
|
||||||
$checked = ($TABLE != "" ? "" : " checked");
|
$checked = ($TABLE != "" ? "" : " checked");
|
||||||
echo "<thead><tr>";
|
echo "<thead><tr>";
|
||||||
echo "<th style='text-align: left;'><label class='block'><input type='checkbox' id='check-tables'$checked onclick='formCheck(this, /^tables\\[/);'>" . lang('Tables') . "</label>";
|
echo "<th style='text-align: left;'><label class='block'><input type='checkbox' id='check-tables'$checked>" . lang('Tables') . "</label>" . script("qs('#check-tables').onclick = partial(formCheck, /^tables\\[/);", "");
|
||||||
echo "<th style='text-align: right;'><label class='block'>" . lang('Data') . "<input type='checkbox' id='check-data'$checked onclick='formCheck(this, /^data\\[/);'></label>";
|
echo "<th style='text-align: right;'><label class='block'>" . lang('Data') . "<input type='checkbox' id='check-data'$checked></label>" . script("qs('#check-data').onclick = partial(formCheck, /^data\\[/);", "");
|
||||||
echo "</thead>\n";
|
echo "</thead>\n";
|
||||||
|
|
||||||
$views = "";
|
$views = "";
|
||||||
@@ -178,28 +179,31 @@ if (DB != "") {
|
|||||||
foreach ($tables_list as $name => $type) {
|
foreach ($tables_list as $name => $type) {
|
||||||
$prefix = preg_replace('~_.*~', '', $name);
|
$prefix = preg_replace('~_.*~', '', $name);
|
||||||
$checked = ($TABLE == "" || $TABLE == (substr($TABLE, -1) == "%" ? "$prefix%" : $name)); //! % may be part of table name
|
$checked = ($TABLE == "" || $TABLE == (substr($TABLE, -1) == "%" ? "$prefix%" : $name)); //! % may be part of table name
|
||||||
$print = "<tr><td>" . checkbox("tables[]", $name, $checked, $name, "checkboxClick(event, this); formUncheck('check-tables');", "block");
|
$print = "<tr><td>" . checkbox("tables[]", $name, $checked, $name, "", "block");
|
||||||
if ($type !== null && !preg_match('~table~i', $type)) {
|
if ($type !== null && !preg_match('~table~i', $type)) {
|
||||||
$views .= "$print\n";
|
$views .= "$print\n";
|
||||||
} else {
|
} else {
|
||||||
echo "$print<td align='right'><label class='block'><span id='Rows-" . h($name) . "'></span>" . checkbox("data[]", $name, $checked, "", "checkboxClick(event, this); formUncheck('check-data');") . "</label>\n";
|
echo "$print<td align='right'><label class='block'><span id='Rows-" . h($name) . "'></span>" . checkbox("data[]", $name, $checked) . "</label>\n";
|
||||||
}
|
}
|
||||||
$prefixes[$prefix]++;
|
$prefixes[$prefix]++;
|
||||||
}
|
}
|
||||||
echo $views;
|
echo $views;
|
||||||
|
|
||||||
if ($tables_list) {
|
if ($tables_list) {
|
||||||
echo "<script type='text/javascript'>ajaxSetHtml('" . js_escape(ME) . "script=db');</script>\n";
|
echo script("ajaxSetHtml('" . js_escape(ME) . "script=db');");
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
echo "<thead><tr><th style='text-align: left;'><label class='block'><input type='checkbox' id='check-databases'" . ($TABLE == "" ? " checked" : "") . " onclick='formCheck(this, /^databases\\[/);'>" . lang('Database') . "</label></thead>\n";
|
echo "<thead><tr><th style='text-align: left;'>";
|
||||||
|
echo "<label class='block'><input type='checkbox' id='check-databases'" . ($TABLE == "" ? " checked" : "") . ">" . lang('Database') . "</label>";
|
||||||
|
echo script("qs('#check-databases').onclick = partial(formCheck, /^databases\\[/);", "");
|
||||||
|
echo "</thead>\n";
|
||||||
$databases = $adminer->databases();
|
$databases = $adminer->databases();
|
||||||
if ($databases) {
|
if ($databases) {
|
||||||
foreach ($databases as $db) {
|
foreach ($databases as $db) {
|
||||||
if (!information_schema($db)) {
|
if (!information_schema($db)) {
|
||||||
$prefix = preg_replace('~_.*~', '', $db);
|
$prefix = preg_replace('~_.*~', '', $db);
|
||||||
echo "<tr><td>" . checkbox("databases[]", $db, $TABLE == "" || $TABLE == "$prefix%", $db, "formUncheck('check-databases');", "block") . "\n";
|
echo "<tr><td>" . checkbox("databases[]", $db, $TABLE == "" || $TABLE == "$prefix%", $db, "", "block") . "\n";
|
||||||
$prefixes[$prefix]++;
|
$prefixes[$prefix]++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
$TABLE = $_GET["edit"];
|
$TABLE = $_GET["edit"];
|
||||||
$fields = fields($TABLE);
|
$fields = fields($TABLE);
|
||||||
$where = (isset($_GET["select"]) ? (count($_POST["check"]) == 1 ? where_check($_POST["check"][0], $fields) : "") : where($_GET, $fields));
|
$where = (isset($_GET["select"]) ? ($_POST["check"] && count($_POST["check"]) == 1 ? where_check($_POST["check"][0], $fields) : "") : where($_GET, $fields));
|
||||||
$update = (isset($_GET["select"]) ? $_POST["edit"] : $where);
|
$update = (isset($_GET["select"]) ? $_POST["edit"] : $where);
|
||||||
foreach ($fields as $name => $field) {
|
foreach ($fields as $name => $field) {
|
||||||
if (!isset($field["privileges"][$update ? "update" : "insert"]) || $adminer->fieldName($field) == "") {
|
if (!isset($field["privileges"][$update ? "update" : "insert"]) || $adminer->fieldName($field) == "") {
|
||||||
@@ -82,9 +82,13 @@ if ($_POST["save"]) {
|
|||||||
}
|
}
|
||||||
if ($select) {
|
if ($select) {
|
||||||
$result = $driver->select($TABLE, $select, array($where), $select, array(), (isset($_GET["select"]) ? 2 : 1));
|
$result = $driver->select($TABLE, $select, array($where), $select, array(), (isset($_GET["select"]) ? 2 : 1));
|
||||||
$row = $result->fetch_assoc();
|
if (!$result) {
|
||||||
if (!$row) { // MySQLi returns null
|
$error = error();
|
||||||
$row = false;
|
} else {
|
||||||
|
$row = $result->fetch_assoc();
|
||||||
|
if (!$row) { // MySQLi returns null
|
||||||
|
$row = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (isset($_GET["select"]) && (!$row || $result->fetch_assoc())) { // $result->num_rows != 1 isn't available in all drivers
|
if (isset($_GET["select"]) && (!$row || $result->fetch_assoc())) { // $result->num_rows != 1 isn't available in all drivers
|
||||||
$row = null;
|
$row = null;
|
||||||
|
|||||||
@@ -47,6 +47,6 @@ if (!$row && $EVENT != "") {
|
|||||||
<p><?php textarea("EVENT_DEFINITION", $row["EVENT_DEFINITION"]); ?>
|
<p><?php textarea("EVENT_DEFINITION", $row["EVENT_DEFINITION"]); ?>
|
||||||
<p>
|
<p>
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
<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 } ?>
|
<?php if ($EVENT != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"><?php echo confirm(lang('Drop %s?', $EVENT)); ?><?php } ?>
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
//! rewrite in compile.php to cache moderately with -dev version
|
||||||
if ($_SERVER["HTTP_IF_MODIFIED_SINCE"]) {
|
if ($_SERVER["HTTP_IF_MODIFIED_SINCE"]) {
|
||||||
header("HTTP/1.1 304 Not Modified");
|
header("HTTP/1.1 304 Not Modified");
|
||||||
exit;
|
exit;
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ $referencable = array_keys(array_filter(table_status('', true), 'fk_support'));
|
|||||||
$j = 0;
|
$j = 0;
|
||||||
foreach ($row["source"] as $key => $val) {
|
foreach ($row["source"] as $key => $val) {
|
||||||
echo "<tr>";
|
echo "<tr>";
|
||||||
echo "<td>" . html_select("source[" . (+$key) . "]", array(-1 => "") + $source, $val, ($j == count($row["source"]) - 1 ? "foreignAddRow(this);" : 1), "label-source");
|
echo "<td>" . html_select("source[" . (+$key) . "]", array(-1 => "") + $source, $val, ($j == count($row["source"]) - 1 ? "foreignAddRow.call(this);" : 1), "label-source");
|
||||||
echo "<td>" . html_select("target[" . (+$key) . "]", $target, $row["target"][$key], 1, "label-target");
|
echo "<td>" . html_select("target[" . (+$key) . "]", $target, $row["target"][$key], 1, "label-target");
|
||||||
$j++;
|
$j++;
|
||||||
}
|
}
|
||||||
@@ -78,6 +78,7 @@ foreach ($row["source"] as $key => $val) {
|
|||||||
<?php echo lang('ON UPDATE'); ?>: <?php echo html_select("on_update", array(-1 => "") + explode("|", $on_actions), $row["on_update"]); ?>
|
<?php echo lang('ON UPDATE'); ?>: <?php echo html_select("on_update", array(-1 => "") + explode("|", $on_actions), $row["on_update"]); ?>
|
||||||
<?php echo doc_link(array(
|
<?php echo doc_link(array(
|
||||||
'sql' => "innodb-foreign-key-constraints.html",
|
'sql' => "innodb-foreign-key-constraints.html",
|
||||||
|
'mariadb' => "foreign-keys/",
|
||||||
'pgsql' => "sql-createtable.html#SQL-CREATETABLE-REFERENCES",
|
'pgsql' => "sql-createtable.html#SQL-CREATETABLE-REFERENCES",
|
||||||
'mssql' => "ms174979.aspx",
|
'mssql' => "ms174979.aspx",
|
||||||
'oracle' => "clauses002.htm#sthref2903",
|
'oracle' => "clauses002.htm#sthref2903",
|
||||||
@@ -86,6 +87,6 @@ foreach ($row["source"] as $key => $val) {
|
|||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||||
<noscript><p><input type="submit" name="add" value="<?php echo lang('Add column'); ?>"></noscript>
|
<noscript><p><input type="submit" name="add" value="<?php echo lang('Add column'); ?>"></noscript>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
<?php if ($name != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo confirm(); ?>><?php } ?>
|
<?php if ($name != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"><?php echo confirm(lang('Drop %s?', $name)); ?><?php } ?>
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ class Adminer {
|
|||||||
* @return string HTML code
|
* @return string HTML code
|
||||||
*/
|
*/
|
||||||
function name() {
|
function name() {
|
||||||
return "<a href='https://www.adminer.org/' target='_blank' id='h1'>Adminer</a>";
|
return "<a href='https://www.adminer.org/'" . target_blank() . " id='h1'>Adminer</a>";
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Connection parameters
|
/** Connection parameters
|
||||||
@@ -19,6 +19,12 @@ class Adminer {
|
|||||||
return array(SERVER, $_GET["username"], get_password());
|
return array(SERVER, $_GET["username"], get_password());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Get SSL connection options
|
||||||
|
* @return array array("key" => filename, "cert" => filename, "ca" => filename) or null
|
||||||
|
*/
|
||||||
|
function connectSsl() {
|
||||||
|
}
|
||||||
|
|
||||||
/** Get key used for permanent login
|
/** Get key used for permanent login
|
||||||
* @param bool
|
* @param bool
|
||||||
* @return string cryptic string which gets combined with password or false in case of an error
|
* @return string cryptic string which gets combined with password or false in case of an error
|
||||||
@@ -33,6 +39,14 @@ class Adminer {
|
|||||||
function bruteForceKey() {
|
function bruteForceKey() {
|
||||||
return $_SERVER["REMOTE_ADDR"];
|
return $_SERVER["REMOTE_ADDR"];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Get server name displayed in breadcrumbs
|
||||||
|
* @param string
|
||||||
|
* @return string HTML code or null
|
||||||
|
*/
|
||||||
|
function serverName($server) {
|
||||||
|
return h($server);
|
||||||
|
}
|
||||||
|
|
||||||
/** Identifier of selected database
|
/** Identifier of selected database
|
||||||
* @return string
|
* @return string
|
||||||
@@ -65,14 +79,20 @@ class Adminer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Headers to send before HTML output
|
/** Headers to send before HTML output
|
||||||
* @return bool true to send security headers
|
* @return null
|
||||||
*/
|
*/
|
||||||
function headers() {
|
function headers() {
|
||||||
return true;
|
}
|
||||||
|
|
||||||
|
/** Get Content Security Policy headers
|
||||||
|
* @return array of arrays with directive name in key, allowed sources in value
|
||||||
|
*/
|
||||||
|
function csp() {
|
||||||
|
return csp();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Print HTML code inside <head>
|
/** Print HTML code inside <head>
|
||||||
* @return bool true to link adminer.css if exists
|
* @return bool true to link favicon.ico and adminer.css if exists
|
||||||
*/
|
*/
|
||||||
function head() {
|
function head() {
|
||||||
?>
|
?>
|
||||||
@@ -81,6 +101,18 @@ class Adminer {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Get URLs of the CSS files
|
||||||
|
* @return array of strings
|
||||||
|
*/
|
||||||
|
function css() {
|
||||||
|
$return = array();
|
||||||
|
$filename = "adminer.css";
|
||||||
|
if (file_exists($filename)) {
|
||||||
|
$return[] = $filename;
|
||||||
|
}
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
/** Print login form
|
/** Print login form
|
||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
@@ -88,16 +120,14 @@ class Adminer {
|
|||||||
global $drivers;
|
global $drivers;
|
||||||
?>
|
?>
|
||||||
<table cellspacing="0">
|
<table cellspacing="0">
|
||||||
<tr><th><?php echo lang('System'); ?><td><?php echo html_select("auth[driver]", $drivers, DRIVER); ?>
|
<tr><th><?php echo lang('System'); ?><td><?php echo html_select("auth[driver]", $drivers, DRIVER) . "\n"; ?>
|
||||||
<tr><th><?php echo lang('Server'); ?><td><input name="auth[server]" value="<?php echo h(SERVER); ?>" title="hostname[:port]" placeholder="localhost" autocapitalize="off">
|
<tr><th><?php echo lang('Server'); ?><td><input name="auth[server]" value="<?php echo h(SERVER); ?>" title="hostname[:port]" placeholder="localhost" autocapitalize="off">
|
||||||
<tr><th><?php echo lang('Username'); ?><td><input name="auth[username]" id="username" value="<?php echo h($_GET["username"]); ?>" autocapitalize="off">
|
<tr><th><?php echo lang('Username'); ?><td><input name="auth[username]" id="username" value="<?php echo h($_GET["username"]); ?>" autocapitalize="off">
|
||||||
<tr><th><?php echo lang('Password'); ?><td><input type="password" name="auth[password]">
|
<tr><th><?php echo lang('Password'); ?><td><input type="password" name="auth[password]">
|
||||||
<tr><th><?php echo lang('Database'); ?><td><input name="auth[db]" value="<?php echo h($_GET["db"]); ?>" autocapitalize="off">
|
<tr><th><?php echo lang('Database'); ?><td><input name="auth[db]" value="<?php echo h($_GET["db"]); ?>" autocapitalize="off">
|
||||||
</table>
|
</table>
|
||||||
<script type="text/javascript">
|
|
||||||
focus(document.getElementById('username'));
|
|
||||||
</script>
|
|
||||||
<?php
|
<?php
|
||||||
|
echo script("focus(qs('#username'));");
|
||||||
echo "<p><input type='submit' value='" . lang('Login') . "'>\n";
|
echo "<p><input type='submit' value='" . lang('Login') . "'>\n";
|
||||||
echo checkbox("auth[permanent]", 1, $_COOKIE["adminer_permanent"], lang('Permanent login')) . "\n";
|
echo checkbox("auth[permanent]", 1, $_COOKIE["adminer_permanent"], lang('Permanent login')) . "\n";
|
||||||
}
|
}
|
||||||
@@ -110,7 +140,7 @@ focus(document.getElementById('username'));
|
|||||||
function login($login, $password) {
|
function login($login, $password) {
|
||||||
global $jush;
|
global $jush;
|
||||||
if ($jush == "sqlite") {
|
if ($jush == "sqlite") {
|
||||||
return lang('<a href="https://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to use SQLite.', '<code>login()</code>');
|
return lang('<a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to use SQLite.', target_blank(), '<code>login()</code>');
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -138,6 +168,7 @@ focus(document.getElementById('username'));
|
|||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function selectLinks($tableStatus, $set = "") {
|
function selectLinks($tableStatus, $set = "") {
|
||||||
|
global $jush, $driver;
|
||||||
echo '<p class="links">';
|
echo '<p class="links">';
|
||||||
$links = array("select" => lang('Select data'));
|
$links = array("select" => lang('Select data'));
|
||||||
if (support("table") || support("indexes")) {
|
if (support("table") || support("indexes")) {
|
||||||
@@ -153,9 +184,11 @@ focus(document.getElementById('username'));
|
|||||||
if ($set !== null) {
|
if ($set !== null) {
|
||||||
$links["edit"] = lang('New item');
|
$links["edit"] = lang('New item');
|
||||||
}
|
}
|
||||||
|
$name = $tableStatus["Name"];
|
||||||
foreach ($links as $key => $val) {
|
foreach ($links as $key => $val) {
|
||||||
echo " <a href='" . h(ME) . "$key=" . urlencode($tableStatus["Name"]) . ($key == "edit" ? $set : "") . "'" . bold(isset($_GET[$key])) . ">$val</a>";
|
echo " <a href='" . h(ME) . "$key=" . urlencode($name) . ($key == "edit" ? $set : "") . "'" . bold(isset($_GET[$key])) . ">$val</a>";
|
||||||
}
|
}
|
||||||
|
echo doc_link(array($jush => $driver->tableHelp($name)), "?");
|
||||||
echo "\n";
|
echo "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -186,14 +219,22 @@ focus(document.getElementById('username'));
|
|||||||
|
|
||||||
/** Query printed in select before execution
|
/** Query printed in select before execution
|
||||||
* @param string query to be executed
|
* @param string query to be executed
|
||||||
* @param string elapsed time
|
* @param float start time of the query
|
||||||
|
* @param bool
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function selectQuery($query, $time) {
|
function selectQuery($query, $start, $failed = false) {
|
||||||
global $jush;
|
global $jush, $driver;
|
||||||
return "<p><code class='jush-$jush'>" . h(str_replace("\n", " ", $query)) . "</code> <span class='time'>($time)</span>"
|
$return = "</p>\n"; // required for IE9 inline edit
|
||||||
|
if (!$failed && ($warnings = $driver->warnings())) {
|
||||||
|
$id = "warnings";
|
||||||
|
$return = ", <a href='#$id'>" . lang('Warnings') . "</a>" . script("qsl('a').onclick = partial(toggle, '$id');", "")
|
||||||
|
. "$return<div id='$id' class='hidden'>\n$warnings</div>\n"
|
||||||
|
;
|
||||||
|
}
|
||||||
|
return "<p><code class='jush-$jush'>" . h(str_replace("\n", " ", $query)) . "</code> <span class='time'>(" . format_time($start) . ")</span>"
|
||||||
. (support("sql") ? " <a href='" . h(ME) . "sql=" . urlencode($query) . "'>" . lang('Edit') . "</a>" : "")
|
. (support("sql") ? " <a href='" . h(ME) . "sql=" . urlencode($query) . "'>" . lang('Edit') . "</a>" : "")
|
||||||
. "</p>" // </p> - required for IE9 inline edit
|
. $return
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -239,14 +280,14 @@ focus(document.getElementById('username'));
|
|||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function selectVal($val, $link, $field, $original) {
|
function selectVal($val, $link, $field, $original) {
|
||||||
$return = ($val === null ? "<i>NULL</i>" : (preg_match("~char|binary~", $field["type"]) && !preg_match("~var~", $field["type"]) ? "<code>$val</code>" : $val));
|
$return = ($val === null ? "<i>NULL</i>" : (preg_match("~char|binary|boolean~", $field["type"]) && !preg_match("~var~", $field["type"]) ? "<code>$val</code>" : $val));
|
||||||
if (preg_match('~blob|bytea|raw|file~', $field["type"]) && !is_utf8($val)) {
|
if (preg_match('~blob|bytea|raw|file~', $field["type"]) && !is_utf8($val)) {
|
||||||
$return = "<i>" . lang('%d byte(s)', strlen($original)) . "</i>";
|
$return = "<i>" . lang('%d byte(s)', strlen($original)) . "</i>";
|
||||||
}
|
}
|
||||||
if (preg_match('~json~', $field["type"])) {
|
if (preg_match('~json~', $field["type"])) {
|
||||||
$return = "<code class='jush-js'>$return</code>";
|
$return = "<code class='jush-js'>$return</code>";
|
||||||
}
|
}
|
||||||
return ($link ? "<a href='" . h($link) . "'" . (is_url($link) ? " rel='noreferrer'" : "") . ">$return</a>" : $return);
|
return ($link ? "<a href='" . h($link) . "'" . (is_url($link) ? target_blank() : "") . ">$return</a>" : $return);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Value conversion used in select and edit
|
/** Value conversion used in select and edit
|
||||||
@@ -263,7 +304,7 @@ focus(document.getElementById('username'));
|
|||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function tableStructurePrint($fields) {
|
function tableStructurePrint($fields) {
|
||||||
echo "<table cellspacing='0'>\n";
|
echo "<table cellspacing='0' class='nowrap'>\n";
|
||||||
echo "<thead><tr><th>" . lang('Column') . "<td>" . lang('Type') . (support("comment") ? "<td>" . lang('Comment') : "") . "</thead>\n";
|
echo "<thead><tr><th>" . lang('Column') . "<td>" . lang('Type') . (support("comment") ? "<td>" . lang('Comment') : "") . "</thead>\n";
|
||||||
foreach ($fields as $field) {
|
foreach ($fields as $field) {
|
||||||
echo "<tr" . odd() . "><th>" . h($field["field"]);
|
echo "<tr" . odd() . "><th>" . h($field["field"]);
|
||||||
@@ -309,9 +350,16 @@ focus(document.getElementById('username'));
|
|||||||
$select[""] = array();
|
$select[""] = array();
|
||||||
foreach ($select as $key => $val) {
|
foreach ($select as $key => $val) {
|
||||||
$val = $_GET["columns"][$key];
|
$val = $_GET["columns"][$key];
|
||||||
$column = select_input(" name='columns[$i][col]' onchange='" . ($key !== "" ? "selectFieldChange(this.form)" : "selectAddRow(this)") . ";'", $columns, $val["col"]);
|
$column = select_input(
|
||||||
echo "<div>" . ($functions || $grouping ? "<select name='columns[$i][fun]' onchange='helpClose();" . ($key !== "" ? "" : " this.nextSibling.nextSibling.onchange();") . "'"
|
" name='columns[$i][col]'",
|
||||||
. on_help("getTarget(event).value && getTarget(event).value.replace(/ |\$/, '(') + ')'", 1) . ">" . optionlist(array(-1 => "") + array_filter(array(lang('Functions') => $functions, lang('Aggregation') => $grouping)), $val["fun"]) . "</select>"
|
$columns,
|
||||||
|
$val["col"],
|
||||||
|
($key !== "" ? "selectFieldChange" : "selectAddRow")
|
||||||
|
);
|
||||||
|
echo "<div>" . ($functions || $grouping ? "<select name='columns[$i][fun]'>"
|
||||||
|
. optionlist(array(-1 => "") + array_filter(array(lang('Functions') => $functions, lang('Aggregation') => $grouping)), $val["fun"]) . "</select>"
|
||||||
|
. on_help("getTarget(event).value && getTarget(event).value.replace(/ |\$/, '(') + ')'", 1)
|
||||||
|
. script("qsl('select').onchange = function () { helpClose();" . ($key !== "" ? "" : " qsl('select, input', this.parentNode).onchange();") . " };", "")
|
||||||
. "($column)" : $column) . "</div>\n";
|
. "($column)" : $column) . "</div>\n";
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
@@ -328,21 +376,27 @@ focus(document.getElementById('username'));
|
|||||||
print_fieldset("search", lang('Search'), $where);
|
print_fieldset("search", lang('Search'), $where);
|
||||||
foreach ($indexes as $i => $index) {
|
foreach ($indexes as $i => $index) {
|
||||||
if ($index["type"] == "FULLTEXT") {
|
if ($index["type"] == "FULLTEXT") {
|
||||||
echo "(<i>" . implode("</i>, <i>", array_map('h', $index["columns"])) . "</i>) AGAINST";
|
echo "<div>(<i>" . implode("</i>, <i>", array_map('h', $index["columns"])) . "</i>) AGAINST";
|
||||||
echo " <input type='search' name='fulltext[$i]' value='" . h($_GET["fulltext"][$i]) . "' onchange='selectFieldChange(this.form);'>";
|
echo " <input type='search' name='fulltext[$i]' value='" . h($_GET["fulltext"][$i]) . "'>";
|
||||||
|
echo script("qsl('input').oninput = selectFieldChange;", "");
|
||||||
echo checkbox("boolean[$i]", 1, isset($_GET["boolean"][$i]), "BOOL");
|
echo checkbox("boolean[$i]", 1, isset($_GET["boolean"][$i]), "BOOL");
|
||||||
echo "<br>\n";
|
echo "</div>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$_GET["where"] = (array) $_GET["where"];
|
$change_next = "this.parentNode.firstChild.onchange();";
|
||||||
reset($_GET["where"]);
|
foreach (array_merge((array) $_GET["where"], array(array())) as $i => $val) {
|
||||||
$change_next = "this.nextSibling.onchange();";
|
|
||||||
for ($i = 0; $i <= count($_GET["where"]); $i++) {
|
|
||||||
list(, $val) = each($_GET["where"]);
|
|
||||||
if (!$val || ("$val[col]$val[val]" != "" && in_array($val["op"], $this->operators))) {
|
if (!$val || ("$val[col]$val[val]" != "" && in_array($val["op"], $this->operators))) {
|
||||||
echo "<div>" . select_input(" name='where[$i][col]' onchange='$change_next'", $columns, $val["col"], "(" . lang('anywhere') . ")");
|
echo "<div>" . select_input(
|
||||||
|
" name='where[$i][col]'",
|
||||||
|
$columns,
|
||||||
|
$val["col"],
|
||||||
|
($val ? "selectFieldChange" : "selectAddRow"),
|
||||||
|
"(" . lang('anywhere') . ")"
|
||||||
|
);
|
||||||
echo html_select("where[$i][op]", $this->operators, $val["op"], $change_next);
|
echo html_select("where[$i][op]", $this->operators, $val["op"], $change_next);
|
||||||
echo "<input type='search' name='where[$i][val]' value='" . h($val["val"]) . "' onchange='" . ($val ? "selectFieldChange(this.form)" : "selectAddRow(this)") . ";' onkeydown='selectSearchKeydown(this, event);' onsearch='selectSearchSearch(this);'></div>\n";
|
echo "<input type='search' name='where[$i][val]' value='" . h($val["val"]) . "'>";
|
||||||
|
echo script("mixin(qsl('input'), {oninput: function () { $change_next }, onkeydown: selectSearchKeydown, onsearch: selectSearchSearch});", "");
|
||||||
|
echo "</div>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
@@ -359,12 +413,12 @@ focus(document.getElementById('username'));
|
|||||||
$i = 0;
|
$i = 0;
|
||||||
foreach ((array) $_GET["order"] as $key => $val) {
|
foreach ((array) $_GET["order"] as $key => $val) {
|
||||||
if ($val != "") {
|
if ($val != "") {
|
||||||
echo "<div>" . select_input(" name='order[$i]' onchange='selectFieldChange(this.form);'", $columns, $val);
|
echo "<div>" . select_input(" name='order[$i]'", $columns, $val, "selectFieldChange");
|
||||||
echo checkbox("desc[$i]", 1, isset($_GET["desc"][$key]), lang('descending')) . "</div>\n";
|
echo checkbox("desc[$i]", 1, isset($_GET["desc"][$key]), lang('descending')) . "</div>\n";
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
echo "<div>" . select_input(" name='order[$i]' onchange='selectAddRow(this);'", $columns);
|
echo "<div>" . select_input(" name='order[$i]'", $columns, "", "selectAddRow");
|
||||||
echo checkbox("desc[$i]", 1, false, lang('descending')) . "</div>\n";
|
echo checkbox("desc[$i]", 1, false, lang('descending')) . "</div>\n";
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
}
|
}
|
||||||
@@ -375,7 +429,8 @@ focus(document.getElementById('username'));
|
|||||||
*/
|
*/
|
||||||
function selectLimitPrint($limit) {
|
function selectLimitPrint($limit) {
|
||||||
echo "<fieldset><legend>" . lang('Limit') . "</legend><div>"; // <div> for easy styling
|
echo "<fieldset><legend>" . lang('Limit') . "</legend><div>"; // <div> for easy styling
|
||||||
echo "<input type='number' name='limit' class='size' value='" . h($limit) . "' onchange='selectFieldChange(this.form);'>";
|
echo "<input type='number' name='limit' class='size' value='" . h($limit) . "'>";
|
||||||
|
echo script("qsl('input').oninput = selectFieldChange;", "");
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -399,7 +454,7 @@ focus(document.getElementById('username'));
|
|||||||
echo "<fieldset><legend>" . lang('Action') . "</legend><div>";
|
echo "<fieldset><legend>" . lang('Action') . "</legend><div>";
|
||||||
echo "<input type='submit' value='" . lang('Select') . "'>";
|
echo "<input type='submit' value='" . lang('Select') . "'>";
|
||||||
echo " <span id='noindex' title='" . lang('Full table scan') . "'></span>";
|
echo " <span id='noindex' title='" . lang('Full table scan') . "'></span>";
|
||||||
echo "<script type='text/javascript'>\n";
|
echo "<script" . nonce() . ">\n";
|
||||||
echo "var indexColumns = ";
|
echo "var indexColumns = ";
|
||||||
$columns = array();
|
$columns = array();
|
||||||
foreach ($indexes as $index) {
|
foreach ($indexes as $index) {
|
||||||
@@ -413,7 +468,7 @@ focus(document.getElementById('username'));
|
|||||||
json_row($key);
|
json_row($key);
|
||||||
}
|
}
|
||||||
echo ";\n";
|
echo ";\n";
|
||||||
echo "selectFieldChange(document.getElementById('form'));\n";
|
echo "selectFieldChange.call(qs('#form')['select']);\n";
|
||||||
echo "</script>\n";
|
echo "</script>\n";
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
}
|
}
|
||||||
@@ -466,15 +521,16 @@ focus(document.getElementById('username'));
|
|||||||
* @return array expressions to join by AND
|
* @return array expressions to join by AND
|
||||||
*/
|
*/
|
||||||
function selectSearchProcess($fields, $indexes) {
|
function selectSearchProcess($fields, $indexes) {
|
||||||
global $connection, $jush;
|
global $connection, $driver;
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach ($indexes as $i => $index) {
|
foreach ($indexes as $i => $index) {
|
||||||
if ($index["type"] == "FULLTEXT" && $_GET["fulltext"][$i] != "") {
|
if ($index["type"] == "FULLTEXT" && $_GET["fulltext"][$i] != "") {
|
||||||
$return[] = "MATCH (" . implode(", ", array_map('idf_escape', $index["columns"])) . ") AGAINST (" . q($_GET["fulltext"][$i]) . (isset($_GET["boolean"][$i]) ? " IN BOOLEAN MODE" : "") . ")";
|
$return[] = "MATCH (" . implode(", ", array_map('idf_escape', $index["columns"])) . ") AGAINST (" . q($_GET["fulltext"][$i]) . (isset($_GET["boolean"][$i]) ? " IN BOOLEAN MODE" : "") . ")";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach ((array) $_GET["where"] as $val) {
|
foreach ((array) $_GET["where"] as $key => $val) {
|
||||||
if ("$val[col]$val[val]" != "" && in_array($val["op"], $this->operators)) {
|
if ("$val[col]$val[val]" != "" && in_array($val["op"], $this->operators)) {
|
||||||
|
$prefix = "";
|
||||||
$cond = " $val[op]";
|
$cond = " $val[op]";
|
||||||
if (preg_match('~IN$~', $val["op"])) {
|
if (preg_match('~IN$~', $val["op"])) {
|
||||||
$in = process_length($val["val"]);
|
$in = process_length($val["val"]);
|
||||||
@@ -485,24 +541,25 @@ focus(document.getElementById('username'));
|
|||||||
$cond = " LIKE " . $this->processInput($fields[$val["col"]], "%$val[val]%");
|
$cond = " LIKE " . $this->processInput($fields[$val["col"]], "%$val[val]%");
|
||||||
} elseif ($val["op"] == "ILIKE %%") {
|
} elseif ($val["op"] == "ILIKE %%") {
|
||||||
$cond = " ILIKE " . $this->processInput($fields[$val["col"]], "%$val[val]%");
|
$cond = " ILIKE " . $this->processInput($fields[$val["col"]], "%$val[val]%");
|
||||||
|
} elseif ($val["op"] == "FIND_IN_SET") {
|
||||||
|
$prefix = "$val[op](" . q($val["val"]) . ", ";
|
||||||
|
$cond = ")";
|
||||||
} elseif (!preg_match('~NULL$~', $val["op"])) {
|
} elseif (!preg_match('~NULL$~', $val["op"])) {
|
||||||
$cond .= " " . $this->processInput($fields[$val["col"]], $val["val"]);
|
$cond .= " " . $this->processInput($fields[$val["col"]], $val["val"]);
|
||||||
}
|
}
|
||||||
if ($val["col"] != "") {
|
if ($val["col"] != "") {
|
||||||
$return[] = idf_escape($val["col"]) . $cond;
|
$return[] = $prefix . $driver->convertSearch(idf_escape($val["col"]), $val, $fields[$val["col"]]) . $cond;
|
||||||
} else {
|
} else {
|
||||||
// find anywhere
|
// find anywhere
|
||||||
$cols = array();
|
$cols = array();
|
||||||
foreach ($fields as $name => $field) {
|
foreach ($fields as $name => $field) {
|
||||||
$is_text = preg_match('~char|text|enum|set~', $field["type"]);
|
if ((is_numeric($val["val"]) || !preg_match('~' . number_type() . '|bit~', $field["type"]))
|
||||||
if ((is_numeric($val["val"]) || !preg_match('~(^|[^o])int|float|double|decimal|bit~', $field["type"]))
|
&& (!preg_match("~[\x80-\xFF]~", $val["val"]) || preg_match('~char|text|enum|set~', $field["type"]))
|
||||||
&& (!preg_match("~[\x80-\xFF]~", $val["val"]) || $is_text)
|
|
||||||
) {
|
) {
|
||||||
$name = idf_escape($name);
|
$cols[] = $prefix . $driver->convertSearch(idf_escape($name), $val, $field) . $cond;
|
||||||
$cols[] = ($jush == "sql" && $is_text && !preg_match("~^utf8_~", $field["collation"]) ? "CONVERT($name USING " . charset($connection) . ")" : $name);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$return[] = ($cols ? "(" . implode("$cond OR ", $cols) . "$cond)" : "0");
|
$return[] = ($cols ? "(" . implode(" OR ", $cols) . ")" : "1 = 0");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -565,19 +622,28 @@ focus(document.getElementById('username'));
|
|||||||
/** Query printed after execution in the message
|
/** Query printed after execution in the message
|
||||||
* @param string executed query
|
* @param string executed query
|
||||||
* @param string elapsed time
|
* @param string elapsed time
|
||||||
|
* @param bool
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function messageQuery($query, $time) {
|
function messageQuery($query, $time, $failed = false) {
|
||||||
global $jush;
|
global $jush, $driver;
|
||||||
restart_session();
|
restart_session();
|
||||||
$history = &get_session("queries");
|
$history = &get_session("queries");
|
||||||
$id = "sql-" . count($history[$_GET["db"]]);
|
if (!$history[$_GET["db"]]) {
|
||||||
|
$history[$_GET["db"]] = array();
|
||||||
|
}
|
||||||
if (strlen($query) > 1e6) {
|
if (strlen($query) > 1e6) {
|
||||||
$query = preg_replace('~[\x80-\xFF]+$~', '', substr($query, 0, 1e6)) . "\n..."; // [\x80-\xFF] - valid UTF-8, \n - can end by one-line comment
|
$query = preg_replace('~[\x80-\xFF]+$~', '', substr($query, 0, 1e6)) . "\n..."; // [\x80-\xFF] - valid UTF-8, \n - can end by one-line comment
|
||||||
}
|
}
|
||||||
$history[$_GET["db"]][] = array($query, time(), $time); // not DB - $_GET["db"] is changed in database.inc.php //! respect $_GET["ns"]
|
$history[$_GET["db"]][] = array($query, time(), $time); // not DB - $_GET["db"] is changed in database.inc.php //! respect $_GET["ns"]
|
||||||
return " <span class='time'>" . @date("H:i:s") . "</span> <a href='#$id' onclick=\"return !toggle('$id');\">" . lang('SQL command') . "</a>" // @ - time zone may be not set
|
$sql_id = "sql-" . count($history[$_GET["db"]]);
|
||||||
. "<div id='$id' class='hidden'><pre><code class='jush-$jush'>" . shorten_utf8($query, 1000) . '</code></pre>'
|
$return = "<a href='#$sql_id' class='toggle'>" . lang('SQL command') . "</a>\n";
|
||||||
|
if (!$failed && ($warnings = $driver->warnings())) {
|
||||||
|
$id = "warnings-" . count($history[$_GET["db"]]);
|
||||||
|
$return = "<a href='#$id' class='toggle'>" . lang('Warnings') . "</a>, $return<div id='$id' class='hidden'>\n$warnings</div>\n";
|
||||||
|
}
|
||||||
|
return " <span class='time'>" . @date("H:i:s") . "</span>" // @ - time zone may be not set
|
||||||
|
. " $return<div id='$sql_id' class='hidden'><pre><code class='jush-$jush'>" . shorten_utf8($query, 1000) . "</code></pre>"
|
||||||
. ($time ? " <span class='time'>($time)</span>" : '')
|
. ($time ? " <span class='time'>($time)</span>" : '')
|
||||||
. (support("sql") ? '<p><a href="' . h(str_replace("db=" . urlencode(DB), "db=" . urlencode($_GET["db"]), ME) . 'sql=&history=' . (count($history[$_GET["db"]]) - 1)) . '">' . lang('Edit') . '</a>' : '')
|
. (support("sql") ? '<p><a href="' . h(str_replace("db=" . urlencode(DB), "db=" . urlencode($_GET["db"]), ME) . 'sql=&history=' . (count($history[$_GET["db"]]) - 1)) . '">' . lang('Edit') . '</a>' : '')
|
||||||
. '</div>'
|
. '</div>'
|
||||||
@@ -626,6 +692,16 @@ focus(document.getElementById('username'));
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Get hint for edit field
|
||||||
|
* @param string table name
|
||||||
|
* @param array single field from fields()
|
||||||
|
* @param string
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function editHint($table, $field, $value) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
/** Process sent input
|
/** Process sent input
|
||||||
* @param array single field from fields()
|
* @param array single field from fields()
|
||||||
* @param string
|
* @param string
|
||||||
@@ -645,7 +721,7 @@ focus(document.getElementById('username'));
|
|||||||
} elseif (preg_match('~^([+-]|\\|\\|)$~', $function)) {
|
} elseif (preg_match('~^([+-]|\\|\\|)$~', $function)) {
|
||||||
$return = idf_escape($name) . " $function $return";
|
$return = idf_escape($name) . " $function $return";
|
||||||
} elseif (preg_match('~^[+-] interval$~', $function)) {
|
} elseif (preg_match('~^[+-] interval$~', $function)) {
|
||||||
$return = idf_escape($name) . " $function " . (preg_match("~^(\\d+|'[0-9.: -]') [A-Z_]+$~i", $value) ? $value : $return);
|
$return = idf_escape($name) . " $function " . (preg_match("~^(\\d+|'[0-9.: -]') [A-Z_]+\$~i", $value) ? $value : $return);
|
||||||
} elseif (preg_match('~^(addtime|subtime|concat)$~', $function)) {
|
} elseif (preg_match('~^(addtime|subtime|concat)$~', $function)) {
|
||||||
$return = "$function(" . idf_escape($name) . ", $return)";
|
$return = "$function(" . idf_escape($name) . ", $return)";
|
||||||
} elseif (preg_match('~^(md5|sha1|password|encrypt)$~', $function)) {
|
} elseif (preg_match('~^(md5|sha1|password|encrypt)$~', $function)) {
|
||||||
@@ -699,7 +775,7 @@ focus(document.getElementById('username'));
|
|||||||
}
|
}
|
||||||
$create = "CREATE TABLE " . table($table) . " (" . implode(", ", $fields) . ")";
|
$create = "CREATE TABLE " . table($table) . " (" . implode(", ", $fields) . ")";
|
||||||
} else {
|
} else {
|
||||||
$create = create_sql($table, $_POST["auto_increment"]);
|
$create = create_sql($table, $_POST["auto_increment"], $style);
|
||||||
}
|
}
|
||||||
set_utf8mb4($create);
|
set_utf8mb4($create);
|
||||||
if ($style && $create) {
|
if ($style && $create) {
|
||||||
@@ -761,7 +837,7 @@ focus(document.getElementById('username'));
|
|||||||
foreach ($row as $key => $val) {
|
foreach ($row as $key => $val) {
|
||||||
$field = $fields[$key];
|
$field = $fields[$key];
|
||||||
$row[$key] = ($val !== null
|
$row[$key] = ($val !== null
|
||||||
? unconvert_field($field, preg_match('~(^|[^o])int|float|double|decimal~', $field["type"]) && $val != '' ? $val : q($val))
|
? unconvert_field($field, preg_match(number_type(), $field["type"]) && $val != '' ? $val : q($val))
|
||||||
: "NULL"
|
: "NULL"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -812,6 +888,13 @@ focus(document.getElementById('username'));
|
|||||||
return $ext;
|
return $ext;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Set the path of the file for webserver load
|
||||||
|
* @return string path of the sql dump file
|
||||||
|
*/
|
||||||
|
function importServerPath() {
|
||||||
|
return "adminer.sql";
|
||||||
|
}
|
||||||
|
|
||||||
/** Print homepage
|
/** Print homepage
|
||||||
* @return bool whether to print default homepage
|
* @return bool whether to print default homepage
|
||||||
*/
|
*/
|
||||||
@@ -832,7 +915,7 @@ focus(document.getElementById('username'));
|
|||||||
?>
|
?>
|
||||||
<h1>
|
<h1>
|
||||||
<?php echo $this->name(); ?> <span class="version"><?php echo $VERSION; ?></span>
|
<?php echo $this->name(); ?> <span class="version"><?php echo $VERSION; ?></span>
|
||||||
<a href="https://www.adminer.org/#download" target="_blank" id="version"><?php echo (version_compare($VERSION, $_COOKIE["adminer_version"]) < 0 ? h($_COOKIE["adminer_version"]) : ""); ?></a>
|
<a href="https://www.adminer.org/#download"<?php echo target_blank(); ?> id="version"><?php echo (version_compare($VERSION, $_COOKIE["adminer_version"]) < 0 ? h($_COOKIE["adminer_version"]) : ""); ?></a>
|
||||||
</h1>
|
</h1>
|
||||||
<?php
|
<?php
|
||||||
if ($missing == "auth") {
|
if ($missing == "auth") {
|
||||||
@@ -842,12 +925,12 @@ focus(document.getElementById('username'));
|
|||||||
foreach ($usernames as $username => $password) {
|
foreach ($usernames as $username => $password) {
|
||||||
if ($password !== null) {
|
if ($password !== null) {
|
||||||
if ($first) {
|
if ($first) {
|
||||||
echo "<p id='logins' onmouseover='menuOver(this, event);' onmouseout='menuOut(this);'>\n";
|
echo "<p id='logins'>" . script("mixin(qs('#logins'), {onmouseover: menuOver, onmouseout: menuOut});");
|
||||||
$first = false;
|
$first = false;
|
||||||
}
|
}
|
||||||
$dbs = $_SESSION["db"][$vendor][$server][$username];
|
$dbs = $_SESSION["db"][$vendor][$server][$username];
|
||||||
foreach (($dbs ? array_keys($dbs) : array("")) as $db) {
|
foreach (($dbs ? array_keys($dbs) : array("")) as $db) {
|
||||||
echo "<a href='" . h(auth_url($vendor, $server, $username, $db)) . "'>($drivers[$vendor]) " . h($username . ($server != "" ? "@$server" : "") . ($db != "" ? " - $db" : "")) . "</a><br>\n";
|
echo "<a href='" . h(auth_url($vendor, $server, $username, $db)) . "'>($drivers[$vendor]) " . h($username . ($server != "" ? "@" . $this->serverName($server) : "") . ($db != "" ? " - $db" : "")) . "</a><br>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -858,16 +941,14 @@ focus(document.getElementById('username'));
|
|||||||
$connection->select_db(DB);
|
$connection->select_db(DB);
|
||||||
$tables = table_status('', true);
|
$tables = table_status('', true);
|
||||||
}
|
}
|
||||||
?>
|
echo script_src("../externals/jush/modules/jush.js");
|
||||||
<script type="text/javascript" src="../externals/jush/modules/jush.js"></script>
|
echo script_src("../externals/jush/modules/jush-textarea.js");
|
||||||
<script type="text/javascript" src="../externals/jush/modules/jush-textarea.js"></script>
|
echo script_src("../externals/jush/modules/jush-txt.js");
|
||||||
<script type="text/javascript" src="../externals/jush/modules/jush-txt.js"></script>
|
echo script_src("../externals/jush/modules/jush-js.js");
|
||||||
<script type="text/javascript" src="../externals/jush/modules/jush-js.js"></script>
|
|
||||||
<?php
|
|
||||||
if (support("sql")) {
|
if (support("sql")) {
|
||||||
|
echo script_src("../externals/jush/modules/jush-$jush.js");
|
||||||
?>
|
?>
|
||||||
<script type="text/javascript" src="../externals/jush/modules/jush-<?php echo $jush; ?>.js"></script>
|
<script<?php echo nonce(); ?>>
|
||||||
<script type="text/javascript">
|
|
||||||
<?php
|
<?php
|
||||||
if ($tables) {
|
if ($tables) {
|
||||||
$links = array();
|
$links = array();
|
||||||
@@ -879,8 +960,9 @@ focus(document.getElementById('username'));
|
|||||||
echo "jushLinks.$val = jushLinks.$jush;\n";
|
echo "jushLinks.$val = jushLinks.$jush;\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$server_info = $connection->server_info;
|
||||||
?>
|
?>
|
||||||
bodyLoad('<?php echo (is_object($connection) ? substr($connection->server_info, 0, 3) : ""); ?>');
|
bodyLoad('<?php echo (is_object($connection) ? preg_replace('~^(\\d\\.?\\d).*~s', '\\1', $server_info) : ""); ?>'<?php echo (preg_match('~MariaDB~', $server_info) ? ", true" : ""); ?>);
|
||||||
</script>
|
</script>
|
||||||
<?php
|
<?php
|
||||||
}
|
}
|
||||||
@@ -914,15 +996,15 @@ bodyLoad('<?php echo (is_object($connection) ? substr($connection->server_info,
|
|||||||
<p id="dbs">
|
<p id="dbs">
|
||||||
<?php
|
<?php
|
||||||
hidden_fields_get();
|
hidden_fields_get();
|
||||||
$db_events = " onmousedown='dbMouseDown(event, this);' onchange='dbChange(this);'";
|
$db_events = script("mixin(qsl('select'), {onmousedown: dbMouseDown, onchange: dbChange});");
|
||||||
echo "<span title='" . lang('database') . "'>DB</span>: " . ($databases
|
echo "<span title='" . lang('database') . "'>" . lang('DB') . "</span>: " . ($databases
|
||||||
? "<select name='db'$db_events>" . optionlist(array("" => "") + $databases, DB) . "</select>"
|
? "<select name='db'>" . optionlist(array("" => "") + $databases, DB) . "</select>$db_events"
|
||||||
: '<input name="db" value="' . h(DB) . '" autocapitalize="off">'
|
: "<input name='db' value='" . h(DB) . "' autocapitalize='off'>\n"
|
||||||
);
|
);
|
||||||
echo "<input type='submit' value='" . lang('Use') . "'" . ($databases ? " class='hidden'" : "") . ">\n";
|
echo "<input type='submit' value='" . lang('Use') . "'" . ($databases ? " class='hidden'" : "") . ">\n";
|
||||||
if ($missing != "db" && DB != "" && $connection->select_db(DB)) {
|
if ($missing != "db" && DB != "" && $connection->select_db(DB)) {
|
||||||
if (support("scheme")) {
|
if (support("scheme")) {
|
||||||
echo "<br>" . lang('Schema') . ": <select name='ns'$db_events>" . optionlist(array("" => "") + $adminer->schemas(), $_GET["ns"]) . "</select>";
|
echo "<br>" . lang('Schema') . ": <select name='ns'>" . optionlist(array("" => "") + $adminer->schemas(), $_GET["ns"]) . "</select>$db_events";
|
||||||
if ($_GET["ns"] != "") {
|
if ($_GET["ns"] != "") {
|
||||||
set_schema($_GET["ns"]);
|
set_schema($_GET["ns"]);
|
||||||
}
|
}
|
||||||
@@ -941,16 +1023,18 @@ bodyLoad('<?php echo (is_object($connection) ? substr($connection->server_info,
|
|||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function tablesPrint($tables) {
|
function tablesPrint($tables) {
|
||||||
echo "<ul id='tables' onmouseover='menuOver(this, event);' onmouseout='menuOut(this);'>\n";
|
echo "<ul id='tables'>" . script("mixin(qs('#tables'), {onmouseover: menuOver, onmouseout: menuOut});");
|
||||||
foreach ($tables as $table => $status) {
|
foreach ($tables as $table => $status) {
|
||||||
echo '<li><a href="' . h(ME) . 'select=' . urlencode($table) . '"' . bold($_GET["select"] == $table || $_GET["edit"] == $table, "select") . ">" . lang('select') . "</a> ";
|
|
||||||
$name = $this->tableName($status);
|
$name = $this->tableName($status);
|
||||||
echo (support("table") || support("indexes")
|
if ($name != "") {
|
||||||
? '<a href="' . h(ME) . 'table=' . urlencode($table) . '"'
|
echo '<li><a href="' . h(ME) . 'select=' . urlencode($table) . '"' . bold($_GET["select"] == $table || $_GET["edit"] == $table, "select") . ">" . lang('select') . "</a> ";
|
||||||
. bold(in_array($table, array($_GET["table"], $_GET["create"], $_GET["indexes"], $_GET["foreign"], $_GET["trigger"])), (is_view($status) ? "view" : "structure"))
|
echo (support("table") || support("indexes")
|
||||||
. " title='" . lang('Show structure') . "'>$name</a>"
|
? '<a href="' . h(ME) . 'table=' . urlencode($table) . '"'
|
||||||
: "<span>$name</span>"
|
. bold(in_array($table, array($_GET["table"], $_GET["create"], $_GET["indexes"], $_GET["foreign"], $_GET["trigger"])), (is_view($status) ? "view" : "structure"))
|
||||||
) . "\n";
|
. " title='" . lang('Show structure') . "'>$name</a>"
|
||||||
|
: "<span>$name</span>"
|
||||||
|
) . "\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
echo "</ul>\n";
|
echo "</ul>\n";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,15 +17,10 @@ if ($_COOKIE["adminer_permanent"]) {
|
|||||||
|
|
||||||
function add_invalid_login() {
|
function add_invalid_login() {
|
||||||
global $adminer;
|
global $adminer;
|
||||||
$filename = get_temp_dir() . "/adminer.invalid";
|
$fp = file_open_lock(get_temp_dir() . "/adminer.invalid");
|
||||||
$fp = @fopen($filename, "r+"); // @ - may not exist
|
if (!$fp) {
|
||||||
if (!$fp) { // c+ is available since PHP 5.2.6
|
return;
|
||||||
$fp = @fopen($filename, "w"); // @ - may not be writable
|
|
||||||
if (!$fp) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
flock($fp, LOCK_EX);
|
|
||||||
$invalids = unserialize(stream_get_contents($fp));
|
$invalids = unserialize(stream_get_contents($fp));
|
||||||
$time = time();
|
$time = time();
|
||||||
if ($invalids) {
|
if ($invalids) {
|
||||||
@@ -40,22 +35,21 @@ function add_invalid_login() {
|
|||||||
$invalid = array($time + 30*60, 0); // active for 30 minutes
|
$invalid = array($time + 30*60, 0); // active for 30 minutes
|
||||||
}
|
}
|
||||||
$invalid[1]++;
|
$invalid[1]++;
|
||||||
$serialized = serialize($invalids);
|
file_write_unlock($fp, serialize($invalids));
|
||||||
rewind($fp);
|
}
|
||||||
fwrite($fp, $serialized);
|
|
||||||
ftruncate($fp, strlen($serialized));
|
function check_invalid_login() {
|
||||||
flock($fp, LOCK_UN);
|
global $adminer;
|
||||||
fclose($fp);
|
$invalids = unserialize(@file_get_contents(get_temp_dir() . "/adminer.invalid")); // @ - may not exist
|
||||||
|
$invalid = $invalids[$adminer->bruteForceKey()];
|
||||||
|
$next_attempt = ($invalid[1] > 29 ? $invalid[0] - time() : 0); // allow 30 invalid attempts
|
||||||
|
if ($next_attempt > 0) { //! do the same with permanent login
|
||||||
|
auth_error(lang('Too many unsuccessful logins, try again in %d minute(s).', ceil($next_attempt / 60)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$auth = $_POST["auth"];
|
$auth = $_POST["auth"];
|
||||||
if ($auth) {
|
if ($auth) {
|
||||||
$invalids = unserialize(@file_get_contents(get_temp_dir() . "/adminer.invalid")); // @ - may not exist
|
|
||||||
$invalid = $invalids[$adminer->bruteForceKey()];
|
|
||||||
$next_attempt = ($invalid[1] > 30 ? $invalid[0] - time() : 0); // allow 30 invalid attempts
|
|
||||||
if ($next_attempt > 0) { //! do the same with permanent login
|
|
||||||
auth_error(lang('Too many unsuccessful logins, try again in %d minute(s).', ceil($next_attempt / 60)));
|
|
||||||
}
|
|
||||||
session_regenerate_id(); // defense against session fixation
|
session_regenerate_id(); // defense against session fixation
|
||||||
$vendor = $auth["driver"];
|
$vendor = $auth["driver"];
|
||||||
$server = $auth["server"];
|
$server = $auth["server"];
|
||||||
@@ -89,7 +83,7 @@ if ($auth) {
|
|||||||
set_session($key, null);
|
set_session($key, null);
|
||||||
}
|
}
|
||||||
unset_permanent();
|
unset_permanent();
|
||||||
redirect(substr(preg_replace('~\b(username|db|ns)=[^&]*&~', '', ME), 0, -1), lang('Logout successful.'));
|
redirect(substr(preg_replace('~\b(username|db|ns)=[^&]*&~', '', ME), 0, -1), lang('Logout successful.') . ' ' . lang('Thanks for using Adminer, consider <a href="%s">donating</a>.', 'https://sourceforge.net/donate/index.php?group_id=264133'));
|
||||||
}
|
}
|
||||||
|
|
||||||
} elseif ($permanent && !$_SESSION["pwds"]) {
|
} elseif ($permanent && !$_SESSION["pwds"]) {
|
||||||
@@ -130,7 +124,7 @@ function auth_error($error) {
|
|||||||
$password = get_password();
|
$password = get_password();
|
||||||
if ($password !== null) {
|
if ($password !== null) {
|
||||||
if ($password === false) {
|
if ($password === false) {
|
||||||
$error .= '<br>' . lang('Master password expired. <a href="https://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.', '<code>permanentLogin()</code>');
|
$error .= '<br>' . lang('Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.', target_blank(), '<code>permanentLogin()</code>');
|
||||||
}
|
}
|
||||||
set_password(DRIVER, SERVER, $_GET["username"], null);
|
set_password(DRIVER, SERVER, $_GET["username"], null);
|
||||||
}
|
}
|
||||||
@@ -144,10 +138,12 @@ function auth_error($error) {
|
|||||||
cookie("adminer_key", ($_COOKIE["adminer_key"] ? $_COOKIE["adminer_key"] : rand_string()), $params["lifetime"]);
|
cookie("adminer_key", ($_COOKIE["adminer_key"] ? $_COOKIE["adminer_key"] : rand_string()), $params["lifetime"]);
|
||||||
page_header(lang('Login'), $error, null);
|
page_header(lang('Login'), $error, null);
|
||||||
echo "<form action='' method='post'>\n";
|
echo "<form action='' method='post'>\n";
|
||||||
$adminer->loginForm();
|
|
||||||
echo "<div>";
|
echo "<div>";
|
||||||
hidden_fields($_POST, array("auth")); // expired session
|
if (hidden_fields($_POST, array("auth"))) { // expired session
|
||||||
|
echo "<p class='message'>" . lang('The action will be performed after successful login with the same credentials.') . "\n";
|
||||||
|
}
|
||||||
echo "</div>\n";
|
echo "</div>\n";
|
||||||
|
$adminer->loginForm();
|
||||||
echo "</form>\n";
|
echo "</form>\n";
|
||||||
page_footer("auth");
|
page_footer("auth");
|
||||||
exit;
|
exit;
|
||||||
@@ -161,11 +157,16 @@ if (isset($_GET["username"])) {
|
|||||||
page_footer("auth");
|
page_footer("auth");
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
list($host, $port) = explode(":", SERVER, 2);
|
||||||
|
if (is_numeric($port) && $port < 1024) {
|
||||||
|
auth_error(lang('Connecting to privileged ports is not allowed.'));
|
||||||
|
}
|
||||||
|
check_invalid_login();
|
||||||
$connection = connect();
|
$connection = connect();
|
||||||
|
$driver = new Min_Driver($connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
$driver = new Min_Driver($connection);
|
$login = null;
|
||||||
|
|
||||||
if (!is_object($connection) || ($login = $adminer->login($_GET["username"], get_password())) !== true) {
|
if (!is_object($connection) || ($login = $adminer->login($_GET["username"], get_password())) !== true) {
|
||||||
auth_error((is_string($connection) ? h($connection) : (is_string($login) ? $login : lang('Invalid credentials.'))));
|
auth_error((is_string($connection) ? h($connection) : (is_string($login) ? $login : lang('Invalid credentials.'))));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,12 +18,20 @@ if (function_exists("mb_internal_encoding")) {
|
|||||||
mb_internal_encoding("8bit");
|
mb_internal_encoding("8bit");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
include "../adminer/include/functions.inc.php";
|
||||||
|
|
||||||
// used only in compiled file
|
// used only in compiled file
|
||||||
if (isset($_GET["file"])) {
|
if (isset($_GET["file"])) {
|
||||||
include "../adminer/file.inc.php";
|
include "../adminer/file.inc.php";
|
||||||
}
|
}
|
||||||
|
|
||||||
include "../adminer/include/functions.inc.php";
|
if ($_GET["script"] == "version") {
|
||||||
|
$fp = file_open_lock(get_temp_dir() . "/adminer.version");
|
||||||
|
if ($fp) {
|
||||||
|
file_write_unlock($fp, serialize(array("signature" => $_POST["signature"], "version" => $_POST["version"])));
|
||||||
|
}
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
global $adminer, $connection, $drivers, $edit_functions, $enum_length, $error, $functions, $grouping, $HTTPS, $inout, $jush, $LANG, $langs, $on_actions, $permanent, $structured_types, $has_token, $token, $translations, $types, $unsigned, $VERSION; // allows including Adminer inside a function
|
global $adminer, $connection, $drivers, $edit_functions, $enum_length, $error, $functions, $grouping, $HTTPS, $inout, $jush, $LANG, $langs, $on_actions, $permanent, $structured_types, $has_token, $token, $translations, $types, $unsigned, $VERSION; // allows including Adminer inside a function
|
||||||
|
|
||||||
@@ -33,11 +41,14 @@ if (!$_SERVER["REQUEST_URI"]) { // IIS 5 compatibility
|
|||||||
if (!strpos($_SERVER["REQUEST_URI"], '?') && $_SERVER["QUERY_STRING"] != "") { // IIS 7 compatibility
|
if (!strpos($_SERVER["REQUEST_URI"], '?') && $_SERVER["QUERY_STRING"] != "") { // IIS 7 compatibility
|
||||||
$_SERVER["REQUEST_URI"] .= "?$_SERVER[QUERY_STRING]";
|
$_SERVER["REQUEST_URI"] .= "?$_SERVER[QUERY_STRING]";
|
||||||
}
|
}
|
||||||
|
if ($_SERVER["HTTP_X_FORWARDED_PREFIX"]) {
|
||||||
|
$_SERVER["REQUEST_URI"] = $_SERVER["HTTP_X_FORWARDED_PREFIX"] . $_SERVER["REQUEST_URI"];
|
||||||
|
}
|
||||||
$HTTPS = $_SERVER["HTTPS"] && strcasecmp($_SERVER["HTTPS"], "off");
|
$HTTPS = $_SERVER["HTTPS"] && strcasecmp($_SERVER["HTTPS"], "off");
|
||||||
|
|
||||||
@ini_set("session.use_trans_sid", false); // protect links in export, @ - may be disabled
|
@ini_set("session.use_trans_sid", false); // protect links in export, @ - may be disabled
|
||||||
session_cache_limiter(""); // to allow restarting session and to not send Cache-Control: no-store
|
|
||||||
if (!defined("SID")) {
|
if (!defined("SID")) {
|
||||||
|
session_cache_limiter(""); // to allow restarting session
|
||||||
session_name("adminer_sid"); // use specific session name to get own namespace
|
session_name("adminer_sid"); // use specific session name to get own namespace
|
||||||
$params = array(0, preg_replace('~\\?.*~', '', $_SERVER["REQUEST_URI"]), "", $HTTPS);
|
$params = array(0, preg_replace('~\\?.*~', '', $_SERVER["REQUEST_URI"]), "", $HTTPS);
|
||||||
if (version_compare(PHP_VERSION, '5.2.0') >= 0) {
|
if (version_compare(PHP_VERSION, '5.2.0') >= 0) {
|
||||||
@@ -54,7 +65,7 @@ if (get_magic_quotes_runtime()) {
|
|||||||
}
|
}
|
||||||
@set_time_limit(0); // @ - can be disabled
|
@set_time_limit(0); // @ - can be disabled
|
||||||
@ini_set("zend.ze1_compatibility_mode", false); // @ - deprecated
|
@ini_set("zend.ze1_compatibility_mode", false); // @ - deprecated
|
||||||
@ini_set("precision", 20); // @ - can be disabled
|
@ini_set("precision", 15); // @ - can be disabled, 15 - internal PHP precision
|
||||||
|
|
||||||
include "../adminer/include/lang.inc.php";
|
include "../adminer/include/lang.inc.php";
|
||||||
include "../adminer/lang/$LANG.inc.php";
|
include "../adminer/lang/$LANG.inc.php";
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ function connect_error() {
|
|||||||
'processlist' => lang('Process list'),
|
'processlist' => lang('Process list'),
|
||||||
'variables' => lang('Variables'),
|
'variables' => lang('Variables'),
|
||||||
'status' => lang('Status'),
|
'status' => lang('Status'),
|
||||||
'replication' => lang('Replication'),
|
|
||||||
) as $key => $val) {
|
) as $key => $val) {
|
||||||
if (support($key)) {
|
if (support($key)) {
|
||||||
echo "<a href='" . h(ME) . "$key='>$val</a>\n";
|
echo "<a href='" . h(ME) . "$key='>$val</a>\n";
|
||||||
@@ -30,13 +29,14 @@ function connect_error() {
|
|||||||
$scheme = support("scheme");
|
$scheme = support("scheme");
|
||||||
$collations = collations();
|
$collations = collations();
|
||||||
echo "<form action='' method='post'>\n";
|
echo "<form action='' method='post'>\n";
|
||||||
echo "<table cellspacing='0' class='checkable' onclick='tableClick(event);' ondblclick='tableClick(event, true);'>\n";
|
echo "<table cellspacing='0' class='checkable'>\n";
|
||||||
|
echo script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});");
|
||||||
echo "<thead><tr>"
|
echo "<thead><tr>"
|
||||||
. (support("database") ? "<td> " : "")
|
. (support("database") ? "<td> " : "")
|
||||||
. "<th>" . lang('Database') . " - <a href='" . h(ME) . "refresh=1'>" . lang('Refresh') . "</a>"
|
. "<th>" . lang('Database') . " - <a href='" . h(ME) . "refresh=1'>" . lang('Refresh') . "</a>"
|
||||||
. "<td>" . lang('Collation')
|
. "<td>" . lang('Collation')
|
||||||
. "<td>" . lang('Tables')
|
. "<td>" . lang('Tables')
|
||||||
. "<td>" . lang('Size') . " - <a href='" . h(ME) . "dbsize=1' onclick=\"return !ajaxSetHtml('" . h(js_escape(ME)) . "script=connect');\">" . lang('Compute') . "</a>"
|
. "<td>" . lang('Size') . " - <a href='" . h(ME) . "dbsize=1'>" . lang('Compute') . "</a>" . script("qsl('a').onclick = partial(ajaxSetHtml, '" . js_escape(ME) . "script=connect');", "")
|
||||||
. "</thead>\n"
|
. "</thead>\n"
|
||||||
;
|
;
|
||||||
|
|
||||||
@@ -46,7 +46,7 @@ function connect_error() {
|
|||||||
$root = h(ME) . "db=" . urlencode($db);
|
$root = h(ME) . "db=" . urlencode($db);
|
||||||
$id = h("Db-" . $db);
|
$id = h("Db-" . $db);
|
||||||
echo "<tr" . odd() . ">" . (support("database") ? "<td>" . checkbox("db[]", $db, in_array($db, (array) $_POST["db"]), "", "", "", $id) : "");
|
echo "<tr" . odd() . ">" . (support("database") ? "<td>" . checkbox("db[]", $db, in_array($db, (array) $_POST["db"]), "", "", "", $id) : "");
|
||||||
echo "<th><a href='$root' id='$db'>" . h($db) . "</a>";
|
echo "<th><a href='$root' id='$id'>" . h($db) . "</a>";
|
||||||
$collation = nbsp(db_collation($db, $collations));
|
$collation = nbsp(db_collation($db, $collations));
|
||||||
echo "<td>" . (support("database") ? "<a href='$root" . ($scheme ? "&ns=" : "") . "&database=' title='" . lang('Alter database') . "'>$collation</a>" : $collation);
|
echo "<td>" . (support("database") ? "<a href='$root" . ($scheme ? "&ns=" : "") . "&database=' title='" . lang('Alter database') . "'>$collation</a>" : $collation);
|
||||||
echo "<td align='right'><a href='$root&schema=' id='tables-" . h($db) . "' title='" . lang('Database schema') . "'>" . ($_GET["dbsize"] ? $tables : "?") . "</a>";
|
echo "<td align='right'><a href='$root&schema=' id='tables-" . h($db) . "' title='" . lang('Database schema') . "'>" . ($_GET["dbsize"] ? $tables : "?") . "</a>";
|
||||||
@@ -56,15 +56,17 @@ function connect_error() {
|
|||||||
|
|
||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
echo (support("database")
|
echo (support("database")
|
||||||
? "<fieldset><legend>" . lang('Selected') . " <span id='selected'></span></legend><div>\n"
|
? "<div class='footer'><div>\n"
|
||||||
. "<input type='hidden' name='all' value='' onclick=\"selectCount('selected', formChecked(this, /^db/));\">\n" // used by trCheck()
|
. "<fieldset><legend>" . lang('Selected') . " <span id='selected'></span></legend><div>\n"
|
||||||
. "<input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm() . ">\n"
|
. "<input type='hidden' name='all' value=''>" . script("qsl('input').onclick = function () { selectCount('selected', formChecked(this, /^db/)); };") // used by trCheck()
|
||||||
|
. "<input type='submit' name='drop' value='" . lang('Drop') . "'>" . confirm() . "\n"
|
||||||
. "</div></fieldset>\n"
|
. "</div></fieldset>\n"
|
||||||
|
. "</div></div>\n"
|
||||||
: ""
|
: ""
|
||||||
);
|
);
|
||||||
echo "<script type='text/javascript'>tableCheck();</script>\n";
|
|
||||||
echo "<input type='hidden' name='token' value='$token'>\n";
|
echo "<input type='hidden' name='token' value='$token'>\n";
|
||||||
echo "</form>\n";
|
echo "</form>\n";
|
||||||
|
echo script("tableCheck();");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,7 +80,7 @@ if (isset($_GET["import"])) {
|
|||||||
$_GET["sql"] = $_GET["import"];
|
$_GET["sql"] = $_GET["import"];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(DB != "" ? $connection->select_db(DB) : isset($_GET["sql"]) || isset($_GET["dump"]) || isset($_GET["database"]) || isset($_GET["processlist"]) || isset($_GET["privileges"]) || isset($_GET["user"]) || isset($_GET["replication"]) || isset($_GET["variables"]) || $_GET["script"] == "connect" || $_GET["script"] == "kill")) {
|
if (!(DB != "" ? $connection->select_db(DB) : isset($_GET["sql"]) || isset($_GET["dump"]) || isset($_GET["database"]) || isset($_GET["processlist"]) || isset($_GET["privileges"]) || isset($_GET["user"]) || isset($_GET["variables"]) || $_GET["script"] == "connect" || $_GET["script"] == "kill")) {
|
||||||
if (DB != "" || $_GET["refresh"]) {
|
if (DB != "" || $_GET["refresh"]) {
|
||||||
restart_session();
|
restart_session();
|
||||||
set_session("dbs", null);
|
set_session("dbs", null);
|
||||||
|
|||||||
@@ -19,28 +19,50 @@ function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") {
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="<?php echo $LANG; ?>" dir="<?php echo lang('ltr'); ?>">
|
<html lang="<?php echo $LANG; ?>" dir="<?php echo lang('ltr'); ?>">
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
<meta http-equiv="Content-Script-Type" content="text/javascript">
|
|
||||||
<meta name="robots" content="noindex">
|
<meta name="robots" content="noindex">
|
||||||
<meta name="referrer" content="origin-when-crossorigin">
|
|
||||||
<title><?php echo $title_page; ?></title>
|
<title><?php echo $title_page; ?></title>
|
||||||
<link rel="stylesheet" type="text/css" href="../adminer/static/default.css">
|
<link rel="stylesheet" type="text/css" href="../adminer/static/default.css">
|
||||||
<script type="text/javascript" src="../adminer/static/functions.js"></script>
|
<?php echo script_src("../adminer/static/functions.js"); ?>
|
||||||
<script type="text/javascript" src="static/editing.js"></script>
|
<?php echo script_src("static/editing.js"); ?>
|
||||||
<?php if ($adminer->head()) { ?>
|
<?php if ($adminer->head()) { ?>
|
||||||
<link rel="shortcut icon" type="image/x-icon" href="../adminer/static/favicon.ico">
|
<link rel="shortcut icon" type="image/x-icon" href="../adminer/static/favicon.ico">
|
||||||
<link rel="apple-touch-icon" href="../adminer/static/favicon.ico">
|
<link rel="apple-touch-icon" href="../adminer/static/favicon.ico">
|
||||||
<?php if (file_exists("adminer.css")) { ?>
|
<?php foreach ($adminer->css() as $css) { ?>
|
||||||
<link rel="stylesheet" type="text/css" href="adminer.css">
|
<link rel="stylesheet" type="text/css" href="<?php echo h($css); ?>">
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
|
|
||||||
<body class="<?php echo lang('ltr'); ?> nojs" onkeydown="bodyKeydown(event);" onclick="bodyClick(event);"<?php echo (isset($_COOKIE["adminer_version"]) ? "" : " onload=\"verifyVersion('$VERSION');\""); ?>>
|
<body class="<?php echo lang('ltr'); ?> nojs">
|
||||||
<script type="text/javascript">
|
<?php
|
||||||
|
$filename = get_temp_dir() . "/adminer.version";
|
||||||
|
if (!$_COOKIE["adminer_version"] && function_exists('openssl_verify') && file_exists($filename) && filemtime($filename) + 86400 > time()) { // 86400 - 1 day in seconds
|
||||||
|
$version = unserialize(file_get_contents($filename));
|
||||||
|
$public = "-----BEGIN PUBLIC KEY-----
|
||||||
|
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwqWOVuF5uw7/+Z70djoK
|
||||||
|
RlHIZFZPO0uYRezq90+7Amk+FDNd7KkL5eDve+vHRJBLAszF/7XKXe11xwliIsFs
|
||||||
|
DFWQlsABVZB3oisKCBEuI71J4kPH8dKGEWR9jDHFw3cWmoH3PmqImX6FISWbG3B8
|
||||||
|
h7FIx3jEaw5ckVPVTeo5JRm/1DZzJxjyDenXvBQ/6o9DgZKeNDgxwKzH+sw9/YCO
|
||||||
|
jHnq1cFpOIISzARlrHMa/43YfeNRAm/tsBXjSxembBPo7aQZLAWHmaj5+K19H10B
|
||||||
|
nCpz9Y++cipkVEiKRGih4ZEvjoFysEOdRLj6WiD/uUNky4xGeA6LaJqh5XpkFkcQ
|
||||||
|
fQIDAQAB
|
||||||
|
-----END PUBLIC KEY-----
|
||||||
|
";
|
||||||
|
if (openssl_verify($version["version"], base64_decode($version["signature"]), $public) == 1) {
|
||||||
|
$_COOKIE["adminer_version"] = $version["version"]; // doesn't need to send to the browser
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<script<?php echo nonce(); ?>>
|
||||||
|
mixin(document.body, {onkeydown: bodyKeydown, onclick: bodyClick<?php
|
||||||
|
echo (isset($_COOKIE["adminer_version"]) ? "" : ", onload: partial(verifyVersion, '$VERSION', '" . js_escape(ME) . "', '" . get_token() . "')"); // $token may be empty in auth.inc.php
|
||||||
|
?>});
|
||||||
document.body.className = document.body.className.replace(/ nojs/, ' js');
|
document.body.className = document.body.className.replace(/ nojs/, ' js');
|
||||||
var offlineMessage = '<?php echo js_escape(lang('You are offline.')); ?>';
|
var offlineMessage = '<?php echo js_escape(lang('You are offline.')); ?>';
|
||||||
|
var thousandsSeparator = '<?php echo js_escape(lang(',')); ?>';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div id="help" class="jush-<?php echo $jush; ?> jsonly hidden" onmouseover="helpOpen = 1;" onmouseout="helpMouseout(this, event);"></div>
|
<div id="help" class="jush-<?php echo $jush; ?> jsonly hidden"></div>
|
||||||
|
<?php echo script("mixin(qs('#help'), {onmouseover: function () { helpOpen = 1; }, onmouseout: helpMouseout});"); ?>
|
||||||
|
|
||||||
<div id="content">
|
<div id="content">
|
||||||
<?php
|
<?php
|
||||||
@@ -48,7 +70,8 @@ var offlineMessage = '<?php echo js_escape(lang('You are offline.')); ?>';
|
|||||||
$link = substr(preg_replace('~\b(username|db|ns)=[^&]*&~', '', ME), 0, -1);
|
$link = substr(preg_replace('~\b(username|db|ns)=[^&]*&~', '', ME), 0, -1);
|
||||||
echo '<p id="breadcrumb"><a href="' . h($link ? $link : ".") . '">' . $drivers[DRIVER] . '</a> » ';
|
echo '<p id="breadcrumb"><a href="' . h($link ? $link : ".") . '">' . $drivers[DRIVER] . '</a> » ';
|
||||||
$link = substr(preg_replace('~\b(db|ns)=[^&]*&~', '', ME), 0, -1);
|
$link = substr(preg_replace('~\b(db|ns)=[^&]*&~', '', ME), 0, -1);
|
||||||
$server = (SERVER != "" ? h(SERVER) : lang('Server'));
|
$server = $adminer->serverName(SERVER);
|
||||||
|
$server = ($server != "" ? $server : lang('Server'));
|
||||||
if ($breadcrumb === false) {
|
if ($breadcrumb === false) {
|
||||||
echo "$server\n";
|
echo "$server\n";
|
||||||
} else {
|
} else {
|
||||||
@@ -89,10 +112,45 @@ function page_headers() {
|
|||||||
global $adminer;
|
global $adminer;
|
||||||
header("Content-Type: text/html; charset=utf-8");
|
header("Content-Type: text/html; charset=utf-8");
|
||||||
header("Cache-Control: no-cache");
|
header("Cache-Control: no-cache");
|
||||||
if ($adminer->headers()) {
|
header("X-Frame-Options: deny"); // ClickJacking protection in IE8, Safari 4, Chrome 2, Firefox 3.6.9
|
||||||
header("X-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
|
||||||
header("X-XSS-Protection: 0"); // prevents introducing XSS in IE8 by removing safe parts of the page
|
header("X-Content-Type-Options: nosniff");
|
||||||
|
header("Referrer-Policy: origin-when-cross-origin");
|
||||||
|
foreach ($adminer->csp() as $csp) {
|
||||||
|
$header = array();
|
||||||
|
foreach ($csp as $key => $val) {
|
||||||
|
$header[] = "$key $val";
|
||||||
|
}
|
||||||
|
header("Content-Security-Policy: " . implode("; ", $header));
|
||||||
}
|
}
|
||||||
|
$adminer->headers();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get Content Security Policy headers
|
||||||
|
* @return array of arrays with directive name in key, allowed sources in value
|
||||||
|
*/
|
||||||
|
function csp() {
|
||||||
|
return array(
|
||||||
|
array(
|
||||||
|
"script-src" => "'self' 'unsafe-inline' 'nonce-" . get_nonce() . "' 'strict-dynamic'", // 'self' is a fallback for browsers not supporting 'strict-dynamic', 'unsafe-inline' is a fallback for browsers not supporting 'nonce-'
|
||||||
|
"connect-src" => "'self'",
|
||||||
|
"frame-src" => "https://www.adminer.org",
|
||||||
|
"object-src" => "'none'",
|
||||||
|
"base-uri" => "'none'",
|
||||||
|
"form-action" => "'self'",
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get a CSP nonce
|
||||||
|
* @return string Base64 value
|
||||||
|
*/
|
||||||
|
function get_nonce() {
|
||||||
|
static $nonce;
|
||||||
|
if (!$nonce) {
|
||||||
|
$nonce = base64_encode(rand_string());
|
||||||
|
}
|
||||||
|
return $nonce;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Print flash and error messages
|
/** Print flash and error messages
|
||||||
@@ -103,7 +161,7 @@ function page_messages($error) {
|
|||||||
$uri = preg_replace('~^[^?]*~', '', $_SERVER["REQUEST_URI"]);
|
$uri = preg_replace('~^[^?]*~', '', $_SERVER["REQUEST_URI"]);
|
||||||
$messages = $_SESSION["messages"][$uri];
|
$messages = $_SESSION["messages"][$uri];
|
||||||
if ($messages) {
|
if ($messages) {
|
||||||
echo "<div class='message'>" . implode("</div>\n<div class='message'>", $messages) . "</div>\n";
|
echo "<div class='message'>" . implode("</div>\n<div class='message'>", $messages) . "</div>" . script("messagesPrint();");
|
||||||
unset($_SESSION["messages"][$uri]);
|
unset($_SESSION["messages"][$uri]);
|
||||||
}
|
}
|
||||||
if ($error) {
|
if ($error) {
|
||||||
@@ -132,6 +190,6 @@ function page_footer($missing = "") {
|
|||||||
<div id="menu">
|
<div id="menu">
|
||||||
<?php $adminer->navigation($missing); ?>
|
<?php $adminer->navigation($missing); ?>
|
||||||
</div>
|
</div>
|
||||||
<script type="text/javascript">setupSubmitHighlight(document);</script>
|
|
||||||
<?php
|
<?php
|
||||||
|
echo script("setupSubmitHighlight(document);");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
$query = $adminer->selectQueryBuild($select, $where, $group, $order, $limit, $page);
|
$query = $adminer->selectQueryBuild($select, $where, $group, $order, $limit, $page);
|
||||||
if (!$query) {
|
if (!$query) {
|
||||||
$query = "SELECT" . limit(
|
$query = "SELECT" . limit(
|
||||||
($_GET["page"] != "last" && +$limit && $group && $is_group && $jush == "sql" ? "SQL_CALC_FOUND_ROWS " : "") . implode(", ", $select) . "\nFROM " . table($table),
|
($_GET["page"] != "last" && $limit != "" && $group && $is_group && $jush == "sql" ? "SQL_CALC_FOUND_ROWS " : "") . implode(", ", $select) . "\nFROM " . table($table),
|
||||||
($where ? "\nWHERE " . implode(" AND ", $where) : "") . ($group && $is_group ? "\nGROUP BY " . implode(", ", $group) : "") . ($order ? "\nORDER BY " . implode(", ", $order) : ""),
|
($where ? "\nWHERE " . implode(" AND ", $where) : "") . ($group && $is_group ? "\nGROUP BY " . implode(", ", $group) : "") . ($order ? "\nORDER BY " . implode(", ", $order) : ""),
|
||||||
($limit != "" ? +$limit : null),
|
($limit != "" ? +$limit : null),
|
||||||
($page ? $limit * $page : 0),
|
($page ? $limit * $page : 0),
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
$start = microtime(true);
|
$start = microtime(true);
|
||||||
$return = $this->_conn->query($query);
|
$return = $this->_conn->query($query);
|
||||||
if ($print) {
|
if ($print) {
|
||||||
echo $adminer->selectQuery($query, format_time($start));
|
echo $adminer->selectQuery($query, $start, !$return);
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
*/
|
*/
|
||||||
function delete($table, $queryWhere, $limit = 0) {
|
function delete($table, $queryWhere, $limit = 0) {
|
||||||
$query = "FROM " . table($table);
|
$query = "FROM " . table($table);
|
||||||
return queries("DELETE" . ($limit ? limit1($query, $queryWhere) : " $query$queryWhere"));
|
return queries("DELETE" . ($limit ? limit1($table, $query, $queryWhere) : " $query$queryWhere"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Update data in table
|
/** Update data in table
|
||||||
@@ -67,7 +67,7 @@
|
|||||||
$values[] = "$key = $val";
|
$values[] = "$key = $val";
|
||||||
}
|
}
|
||||||
$query = table($table) . " SET$separator" . implode(",$separator", $values);
|
$query = table($table) . " SET$separator" . implode(",$separator", $values);
|
||||||
return queries("UPDATE" . ($limit ? limit1($query, $queryWhere) : " $query$queryWhere"));
|
return queries("UPDATE" . ($limit ? limit1($table, $query, $queryWhere, $separator) : " $query$queryWhere"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Insert data into table
|
/** Insert data into table
|
||||||
@@ -99,12 +99,59 @@
|
|||||||
return queries("BEGIN");
|
return queries("BEGIN");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Commit transaction
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
function commit() {
|
function commit() {
|
||||||
return queries("COMMIT");
|
return queries("COMMIT");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Rollback transaction
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
function rollback() {
|
function rollback() {
|
||||||
return queries("ROLLBACK");
|
return queries("ROLLBACK");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Convert column to be searchable
|
||||||
|
* @param string escaped column name
|
||||||
|
* @param array array("op" => , "val" => )
|
||||||
|
* @param array
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function convertSearch($idf, $val, $field) {
|
||||||
|
return $idf;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Convert value returned by database to actual value
|
||||||
|
* @param string
|
||||||
|
* @param array
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function value($val, $field) {
|
||||||
|
return $val;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Quote binary string
|
||||||
|
* @param string
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function quoteBinary($s) {
|
||||||
|
return q($s);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get warnings about the last command
|
||||||
|
* @return string HTML
|
||||||
|
*/
|
||||||
|
function warnings() {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get help link for table
|
||||||
|
* @param string
|
||||||
|
* @return string relative URL or null
|
||||||
|
*/
|
||||||
|
function tableHelp($name) {
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,7 +50,10 @@ function select($result, $connection2 = null, $orgtables = array(), $limit = 0)
|
|||||||
}
|
}
|
||||||
$types[$j] = $field->type;
|
$types[$j] = $field->type;
|
||||||
echo "<th" . ($orgtable != "" || $field->name != $orgname ? " title='" . h(($orgtable != "" ? "$orgtable." : "") . $orgname) . "'" : "") . ">" . h($name)
|
echo "<th" . ($orgtable != "" || $field->name != $orgname ? " title='" . h(($orgtable != "" ? "$orgtable." : "") . $orgname) . "'" : "") . ">" . h($name)
|
||||||
. ($orgtables ? doc_link(array('sql' => "explain-output.html#explain_" . strtolower($name))) : "")
|
. ($orgtables ? doc_link(array(
|
||||||
|
'sql' => "explain-output.html#explain_" . strtolower($name),
|
||||||
|
'mariadb' => "explain/#the-columns-in-explain-select",
|
||||||
|
)) : "")
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
echo "</thead>\n";
|
echo "</thead>\n";
|
||||||
@@ -135,24 +138,27 @@ function textarea($name, $value, $rows = 10, $cols = 80) {
|
|||||||
* @param array
|
* @param array
|
||||||
* @param array
|
* @param array
|
||||||
* @param array returned by referencable_primary()
|
* @param array returned by referencable_primary()
|
||||||
|
* @param array extra types to prepend
|
||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function edit_type($key, $field, $collations, $foreign_keys = array()) {
|
function edit_type($key, $field, $collations, $foreign_keys = array(), $extra_types = array()) {
|
||||||
global $structured_types, $types, $unsigned, $on_actions;
|
global $structured_types, $types, $unsigned, $on_actions;
|
||||||
$type = $field["type"];
|
$type = $field["type"];
|
||||||
?>
|
?>
|
||||||
<td><select name="<?php echo h($key); ?>[type]" class="type" onfocus="lastType = selectValue(this);" onchange="editingTypeChange(this);"<?php echo on_help("getTarget(event).value", 1); ?> aria-labelledby="label-type"><?php
|
<td><select name="<?php echo h($key); ?>[type]" class="type" aria-labelledby="label-type"><?php
|
||||||
if ($type && !isset($types[$type]) && !isset($foreign_keys[$type])) {
|
if ($type && !isset($types[$type]) && !isset($foreign_keys[$type]) && !in_array($type, $extra_types)) {
|
||||||
array_unshift($structured_types, $type);
|
$extra_types[] = $type;
|
||||||
}
|
}
|
||||||
if ($foreign_keys) {
|
if ($foreign_keys) {
|
||||||
$structured_types[lang('Foreign keys')] = $foreign_keys;
|
$structured_types[lang('Foreign keys')] = $foreign_keys;
|
||||||
}
|
}
|
||||||
echo optionlist($structured_types, $type);
|
echo optionlist(array_merge($extra_types, $structured_types), $type);
|
||||||
?></select>
|
?></select>
|
||||||
<td><input name="<?php echo h($key); ?>[length]" value="<?php echo h($field["length"]); ?>" size="3" onfocus="editingLengthFocus(this);"<?php echo (!$field["length"] && preg_match('~var(char|binary)$~', $type) ? " class='required'" : ""); ?> onchange="editingLengthChange(this);" onkeyup="this.onchange();" aria-labelledby="label-length"><td class="options"><?php //! type="number" with enabled JavaScript
|
<?php echo on_help("getTarget(event).value", 1); ?>
|
||||||
|
<?php echo script("mixin(qsl('select'), {onfocus: function () { lastType = selectValue(this); }, onchange: editingTypeChange});", ""); ?>
|
||||||
|
<td><input name="<?php echo h($key); ?>[length]" value="<?php echo h($field["length"]); ?>" size="3"<?php echo (!$field["length"] && preg_match('~var(char|binary)$~', $type) ? " class='required'" : ""); ?> aria-labelledby="label-length"><?php echo script("mixin(qsl('input'), {onfocus: editingLengthFocus, oninput: editingLengthChange});", ""); ?><td class="options"><?php //! type="number" with enabled JavaScript
|
||||||
echo "<select name='" . h($key) . "[collation]'" . (preg_match('~(char|text|enum|set)$~', $type) ? "" : " class='hidden'") . '><option value="">(' . lang('collation') . ')' . optionlist($collations, $field["collation"]) . '</select>';
|
echo "<select name='" . h($key) . "[collation]'" . (preg_match('~(char|text|enum|set)$~', $type) ? "" : " class='hidden'") . '><option value="">(' . lang('collation') . ')' . optionlist($collations, $field["collation"]) . '</select>';
|
||||||
echo ($unsigned ? "<select name='" . h($key) . "[unsigned]'" . (!$type || preg_match('~((^|[^o])int|float|double|decimal)$~', $type) ? "" : " class='hidden'") . '><option>' . optionlist($unsigned, $field["unsigned"]) . '</select>' : '');
|
echo ($unsigned ? "<select name='" . h($key) . "[unsigned]'" . (!$type || preg_match(number_type(), $type) ? "" : " class='hidden'") . '><option>' . optionlist($unsigned, $field["unsigned"]) . '</select>' : '');
|
||||||
echo (isset($field['on_update']) ? "<select name='" . h($key) . "[on_update]'" . (preg_match('~timestamp|datetime~', $type) ? "" : " class='hidden'") . '>' . optionlist(array("" => "(" . lang('ON UPDATE') . ")", "CURRENT_TIMESTAMP"), $field["on_update"]) . '</select>' : '');
|
echo (isset($field['on_update']) ? "<select name='" . h($key) . "[on_update]'" . (preg_match('~timestamp|datetime~', $type) ? "" : " class='hidden'") . '>' . optionlist(array("" => "(" . lang('ON UPDATE') . ")", "CURRENT_TIMESTAMP"), $field["on_update"]) . '</select>' : '');
|
||||||
echo ($foreign_keys ? "<select name='" . h($key) . "[on_delete]'" . (preg_match("~`~", $type) ? "" : " class='hidden'") . "><option value=''>(" . lang('ON DELETE') . ")" . optionlist(explode("|", $on_actions), $field["on_delete"]) . "</select> " : " "); // space for IE
|
echo ($foreign_keys ? "<select name='" . h($key) . "[on_delete]'" . (preg_match("~`~", $type) ? "" : " class='hidden'") . "><option value=''>(" . lang('ON DELETE') . ")" . optionlist(explode("|", $on_actions), $field["on_delete"]) . "</select> " : " "); // space for IE
|
||||||
}
|
}
|
||||||
@@ -178,7 +184,7 @@ function process_type($field, $collate = "COLLATE") {
|
|||||||
global $unsigned;
|
global $unsigned;
|
||||||
return " $field[type]"
|
return " $field[type]"
|
||||||
. process_length($field["length"])
|
. process_length($field["length"])
|
||||||
. (preg_match('~(^|[^o])int|float|double|decimal~', $field["type"]) && in_array($field["unsigned"], $unsigned) ? " $field[unsigned]" : "")
|
. (preg_match(number_type(), $field["type"]) && in_array($field["unsigned"], $unsigned) ? " $field[unsigned]" : "")
|
||||||
. (preg_match('~char|text|enum|set~', $field["type"]) && $field["collation"] ? " $collate " . q($field["collation"]) : "")
|
. (preg_match('~char|text|enum|set~', $field["type"]) && $field["collation"] ? " $collate " . q($field["collation"]) : "")
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
@@ -189,24 +195,26 @@ function process_type($field, $collate = "COLLATE") {
|
|||||||
* @return array array("field", "type", "NULL", "DEFAULT", "ON UPDATE", "COMMENT", "AUTO_INCREMENT")
|
* @return array array("field", "type", "NULL", "DEFAULT", "ON UPDATE", "COMMENT", "AUTO_INCREMENT")
|
||||||
*/
|
*/
|
||||||
function process_field($field, $type_field) {
|
function process_field($field, $type_field) {
|
||||||
global $jush;
|
|
||||||
$default = $field["default"];
|
|
||||||
return array(
|
return array(
|
||||||
idf_escape(trim($field["field"])),
|
idf_escape(trim($field["field"])),
|
||||||
process_type($type_field),
|
process_type($type_field),
|
||||||
($field["null"] ? " NULL" : " NOT NULL"), // NULL for timestamp
|
($field["null"] ? " NULL" : " NOT NULL"), // NULL for timestamp
|
||||||
(isset($default) ? " DEFAULT " . (
|
default_value($field),
|
||||||
(preg_match('~time~', $field["type"]) && preg_match('~^CURRENT_TIMESTAMP$~i', $default))
|
|
||||||
|| ($jush == "sqlite" && preg_match('~^CURRENT_(TIME|TIMESTAMP|DATE)$~i', $default))
|
|
||||||
|| ($field["type"] == "bit" && preg_match("~^([0-9]+|b'[0-1]+')\$~", $default))
|
|
||||||
|| ($jush == "pgsql" && preg_match("~^[a-z]+\\(('[^']*')+\\)\$~", $default))
|
|
||||||
? $default : q($default)) : ""),
|
|
||||||
(preg_match('~timestamp|datetime~', $field["type"]) && $field["on_update"] ? " ON UPDATE $field[on_update]" : ""),
|
(preg_match('~timestamp|datetime~', $field["type"]) && $field["on_update"] ? " ON UPDATE $field[on_update]" : ""),
|
||||||
(support("comment") && $field["comment"] != "" ? " COMMENT " . q($field["comment"]) : ""),
|
(support("comment") && $field["comment"] != "" ? " COMMENT " . q($field["comment"]) : ""),
|
||||||
($field["auto_increment"] ? auto_increment() : null),
|
($field["auto_increment"] ? auto_increment() : null),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Get default value clause
|
||||||
|
* @param array
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function default_value($field) {
|
||||||
|
$default = $field["default"];
|
||||||
|
return ($default === null ? "" : " DEFAULT " . (preg_match('~char|binary|text|enum|set~', $field["type"]) || preg_match('~^(?![a-z])~i', $default) ? q($default) : $default));
|
||||||
|
}
|
||||||
|
|
||||||
/** Get type class to use in CSS
|
/** Get type class to use in CSS
|
||||||
* @param string
|
* @param string
|
||||||
* @return string class=''
|
* @return string class=''
|
||||||
@@ -233,19 +241,20 @@ function type_class($type) {
|
|||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function edit_fields($fields, $collations, $type = "TABLE", $foreign_keys = array(), $comments = false) {
|
function edit_fields($fields, $collations, $type = "TABLE", $foreign_keys = array(), $comments = false) {
|
||||||
global $connection, $inout;
|
global $inout;
|
||||||
$fields = array_values($fields);
|
$fields = array_values($fields);
|
||||||
?>
|
?>
|
||||||
<thead><tr class="wrap">
|
<thead><tr>
|
||||||
<?php if ($type == "PROCEDURE") { ?><td> <?php } ?>
|
<?php if ($type == "PROCEDURE") { ?><td> <?php } ?>
|
||||||
<th id="label-name"><?php echo ($type == "TABLE" ? lang('Column name') : lang('Parameter name')); ?>
|
<th id="label-name"><?php echo ($type == "TABLE" ? lang('Column name') : lang('Parameter name')); ?>
|
||||||
<td id="label-type"><?php echo lang('Type'); ?><textarea id="enum-edit" rows="4" cols="12" wrap="off" style="display: none;" onblur="editingLengthBlur(this);"></textarea>
|
<td id="label-type"><?php echo lang('Type'); ?><textarea id="enum-edit" rows="4" cols="12" wrap="off" style="display: none;"></textarea><?php echo script("qs('#enum-edit').onblur = editingLengthBlur;"); ?>
|
||||||
<td id="label-length"><?php echo lang('Length'); ?>
|
<td id="label-length"><?php echo lang('Length'); ?>
|
||||||
<td><?php echo lang('Options'); /* no label required, options have their own label */ ?>
|
<td><?php echo lang('Options'); /* no label required, options have their own label */ ?>
|
||||||
<?php if ($type == "TABLE") { ?>
|
<?php if ($type == "TABLE") { ?>
|
||||||
<td id="label-null">NULL
|
<td id="label-null">NULL
|
||||||
<td><input type="radio" name="auto_increment_col" value=""><acronym id="label-ai" title="<?php echo lang('Auto Increment'); ?>">AI</acronym><?php echo doc_link(array(
|
<td><input type="radio" name="auto_increment_col" value=""><acronym id="label-ai" title="<?php echo lang('Auto Increment'); ?>">AI</acronym><?php echo doc_link(array(
|
||||||
'sql' => "example-auto-increment.html",
|
'sql' => "example-auto-increment.html",
|
||||||
|
'mariadb' => "auto_increment/",
|
||||||
'sqlite' => "autoinc.html",
|
'sqlite' => "autoinc.html",
|
||||||
'pgsql' => "datatype.html#DATATYPE-SERIAL",
|
'pgsql' => "datatype.html#DATATYPE-SERIAL",
|
||||||
'mssql' => "ms186775.aspx",
|
'mssql' => "ms186775.aspx",
|
||||||
@@ -253,10 +262,11 @@ function edit_fields($fields, $collations, $type = "TABLE", $foreign_keys = arra
|
|||||||
<td id="label-default"><?php echo lang('Default value'); ?>
|
<td id="label-default"><?php echo lang('Default value'); ?>
|
||||||
<?php echo (support("comment") ? "<td id='label-comment'" . ($comments ? "" : " class='hidden'") . ">" . lang('Comment') : ""); ?>
|
<?php echo (support("comment") ? "<td id='label-comment'" . ($comments ? "" : " class='hidden'") . ">" . lang('Comment') : ""); ?>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
<td><?php echo "<input type='image' class='icon' name='add[" . (support("move_col") ? 0 : count($fields)) . "]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>"; ?><script type="text/javascript">row_count = <?php echo count($fields); ?>;</script>
|
<td><?php echo "<input type='image' class='icon' name='add[" . (support("move_col") ? 0 : count($fields)) . "]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>" . script("row_count = " . count($fields) . ";"); ?>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody onkeydown="return editingKeydown(event);">
|
<tbody>
|
||||||
<?php
|
<?php
|
||||||
|
echo script("mixin(qsl('tbody'), {onclick: editingClick, onkeydown: editingKeydown, oninput: editingInput});");
|
||||||
foreach ($fields as $i => $field) {
|
foreach ($fields as $i => $field) {
|
||||||
$i++;
|
$i++;
|
||||||
$orig = $field[($_POST ? "orig" : "field")];
|
$orig = $field[($_POST ? "orig" : "field")];
|
||||||
@@ -264,24 +274,22 @@ function edit_fields($fields, $collations, $type = "TABLE", $foreign_keys = arra
|
|||||||
?>
|
?>
|
||||||
<tr<?php echo ($display ? "" : " style='display: none;'"); ?>>
|
<tr<?php echo ($display ? "" : " style='display: none;'"); ?>>
|
||||||
<?php echo ($type == "PROCEDURE" ? "<td>" . html_select("fields[$i][inout]", explode("|", $inout), $field["inout"]) : ""); ?>
|
<?php echo ($type == "PROCEDURE" ? "<td>" . html_select("fields[$i][inout]", explode("|", $inout), $field["inout"]) : ""); ?>
|
||||||
<th><?php if ($display) { ?><input name="fields[<?php echo $i; ?>][field]" value="<?php echo h($field["field"]); ?>" onchange="editingNameChange(this);<?php echo ($field["field"] != "" || count($fields) > 1 ? '' : ' editingAddRow(this);" onkeyup="if (this.value) editingAddRow(this);'); ?>" maxlength="64" autocapitalize="off" aria-labelledby="label-name"><?php } ?>
|
<th><?php if ($display) { ?><input name="fields[<?php echo $i; ?>][field]" value="<?php echo h($field["field"]); ?>" maxlength="64" autocapitalize="off" aria-labelledby="label-name"><?php echo script("qsl('input').oninput = function () { editingNameChange.call(this);" . ($field["field"] != "" || count($fields) > 1 ? "" : " editingAddRow.call(this);") . " };", ""); ?><?php } ?>
|
||||||
<input type="hidden" name="fields[<?php echo $i; ?>][orig]" value="<?php echo h($orig); ?>">
|
<input type="hidden" name="fields[<?php echo $i; ?>][orig]" value="<?php echo h($orig); ?>">
|
||||||
<?php edit_type("fields[$i]", $field, $collations, $foreign_keys); ?>
|
<?php edit_type("fields[$i]", $field, $collations, $foreign_keys); ?>
|
||||||
<?php if ($type == "TABLE") { ?>
|
<?php if ($type == "TABLE") { ?>
|
||||||
<td><?php echo checkbox("fields[$i][null]", 1, $field["null"], "", "", "block", "label-null"); ?>
|
<td><?php echo checkbox("fields[$i][null]", 1, $field["null"], "", "", "block", "label-null"); ?>
|
||||||
<td><label class="block"><input type="radio" name="auto_increment_col" value="<?php echo $i; ?>"<?php if ($field["auto_increment"]) { ?> checked<?php } ?> onclick="var field = this.form['fields[' + this.value + '][field]']; if (!field.value) { field.value = 'id'; field.onchange(); }" aria-labelledby="label-ai"></label><td><?php
|
<td><label class="block"><input type="radio" name="auto_increment_col" value="<?php echo $i; ?>"<?php if ($field["auto_increment"]) { ?> checked<?php } ?> aria-labelledby="label-ai"></label><td><?php
|
||||||
echo checkbox("fields[$i][has_default]", 1, $field["has_default"], "", "", "", "label-default"); ?><input name="fields[<?php echo $i; ?>][default]" value="<?php echo h($field["default"]); ?>" onkeyup="keyupChange.call(this);" onchange="this.previousSibling.checked = true;" aria-labelledby="label-default">
|
echo checkbox("fields[$i][has_default]", 1, $field["has_default"], "", "", "", "label-default"); ?><input name="fields[<?php echo $i; ?>][default]" value="<?php echo h($field["default"]); ?>" aria-labelledby="label-default"><?php
|
||||||
<?php echo (support("comment") ? "<td" . ($comments ? "" : " class='hidden'") . "><input name='fields[$i][comment]' value='" . h($field["comment"]) . "' maxlength='" . ($connection->server_info >= 5.5 ? 1024 : 255) . "' aria-labelledby='label-comment'>" : ""); ?>
|
echo (support("comment") ? "<td" . ($comments ? "" : " class='hidden'") . "><input name='fields[$i][comment]' value='" . h($field["comment"]) . "' maxlength='" . (min_version(5.5) ? 1024 : 255) . "' aria-labelledby='label-comment'>" : "");
|
||||||
<?php } ?>
|
}
|
||||||
<?php
|
|
||||||
echo "<td>";
|
echo "<td>";
|
||||||
echo (support("move_col") ?
|
echo (support("move_col") ?
|
||||||
"<input type='image' class='icon' name='add[$i]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "' onclick='return !editingAddRow(this, 1);'> "
|
"<input type='image' class='icon' name='add[$i]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'> "
|
||||||
. "<input type='image' class='icon' name='up[$i]' src='../adminer/static/up.gif' alt='^' title='" . lang('Move up') . "' onclick='return !editingMoveRow(this, 1);'> "
|
. "<input type='image' class='icon' name='up[$i]' src='../adminer/static/up.gif' alt='↑' title='" . lang('Move up') . "'> "
|
||||||
. "<input type='image' class='icon' name='down[$i]' src='../adminer/static/down.gif' alt='v' title='" . lang('Move down') . "' onclick='return !editingMoveRow(this, 0);'> "
|
. "<input type='image' class='icon' name='down[$i]' src='../adminer/static/down.gif' alt='↓' title='" . lang('Move down') . "'> "
|
||||||
: "");
|
: "");
|
||||||
echo ($orig == "" || support("drop_col") ? "<input type='image' class='icon' name='drop_col[$i]' src='../adminer/static/cross.gif' alt='x' title='" . lang('Remove') . "' onclick=\"return !editingRemoveRow(this, 'fields\$1[field]');\">" : "");
|
echo ($orig == "" || support("drop_col") ? "<input type='image' class='icon' name='drop_col[$i]' src='../adminer/static/cross.gif' alt='x' title='" . lang('Remove') . "'>" : "");
|
||||||
echo "\n";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -411,7 +419,7 @@ function create_trigger($on, $row) {
|
|||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function create_routine($routine, $row) {
|
function create_routine($routine, $row) {
|
||||||
global $inout;
|
global $inout, $jush;
|
||||||
$set = array();
|
$set = array();
|
||||||
$fields = (array) $row["fields"];
|
$fields = (array) $row["fields"];
|
||||||
ksort($fields); // enforce fields order
|
ksort($fields); // enforce fields order
|
||||||
@@ -420,13 +428,13 @@ function create_routine($routine, $row) {
|
|||||||
$set[] = (preg_match("~^($inout)\$~", $field["inout"]) ? "$field[inout] " : "") . idf_escape($field["field"]) . process_type($field, "CHARACTER SET");
|
$set[] = (preg_match("~^($inout)\$~", $field["inout"]) ? "$field[inout] " : "") . idf_escape($field["field"]) . process_type($field, "CHARACTER SET");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$definition = rtrim("\n$row[definition]", ";");
|
||||||
return "CREATE $routine "
|
return "CREATE $routine "
|
||||||
. idf_escape(trim($row["name"]))
|
. idf_escape(trim($row["name"]))
|
||||||
. " (" . implode(", ", $set) . ")"
|
. " (" . implode(", ", $set) . ")"
|
||||||
. (isset($_GET["function"]) ? " RETURNS" . process_type($row["returns"], "CHARACTER SET") : "")
|
. (isset($_GET["function"]) ? " RETURNS" . process_type($row["returns"], "CHARACTER SET") : "")
|
||||||
. ($row["language"] ? " LANGUAGE $row[language]" : "")
|
. ($row["language"] ? " LANGUAGE $row[language]" : "")
|
||||||
. rtrim("\n$row[definition]", ";")
|
. ($jush == "pgsql" ? " AS " . q($definition) : "$definition;")
|
||||||
. ";"
|
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -485,18 +493,25 @@ function ini_bytes($ini) {
|
|||||||
|
|
||||||
/** Create link to database documentation
|
/** Create link to database documentation
|
||||||
* @param array $jush => $path
|
* @param array $jush => $path
|
||||||
|
* @param string HTML code
|
||||||
* @return string HTML code
|
* @return string HTML code
|
||||||
*/
|
*/
|
||||||
function doc_link($paths) {
|
function doc_link($paths, $text = "<sup>?</sup>") {
|
||||||
global $jush, $connection;
|
global $jush, $connection;
|
||||||
|
$server_info = $connection->server_info;
|
||||||
|
$version = preg_replace('~^(\\d\\.?\\d).*~s', '\\1', $server_info); // two most significant digits
|
||||||
$urls = array(
|
$urls = array(
|
||||||
'sql' => "http://dev.mysql.com/doc/refman/" . substr($connection->server_info, 0, 3) . "/en/",
|
'sql' => "https://dev.mysql.com/doc/refman/$version/en/",
|
||||||
'sqlite' => "http://www.sqlite.org/",
|
'sqlite' => "https://www.sqlite.org/",
|
||||||
'pgsql' => "http://www.postgresql.org/docs/" . substr($connection->server_info, 0, 3) . "/static/",
|
'pgsql' => "https://www.postgresql.org/docs/$version/static/",
|
||||||
'mssql' => "http://msdn.microsoft.com/library/",
|
'mssql' => "https://msdn.microsoft.com/library/",
|
||||||
'oracle' => "http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/",
|
'oracle' => "https://download.oracle.com/docs/cd/B19306_01/server.102/b14200/",
|
||||||
);
|
);
|
||||||
return ($paths[$jush] ? "<a href='$urls[$jush]$paths[$jush]' target='_blank' rel='noreferrer'><sup>?</sup></a>" : "");
|
if (preg_match('~MariaDB~', $server_info)) {
|
||||||
|
$urls['sql'] = "https://mariadb.com/kb/en/library/";
|
||||||
|
$paths['sql'] = (isset($paths['mariadb']) ? $paths['mariadb'] : str_replace(".html", "/", $paths['sql']));
|
||||||
|
}
|
||||||
|
return ($paths[$jush] ? "<a href='$urls[$jush]$paths[$jush]'" . target_blank() . ">$text</a>" : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Wrap gzencode() for usage in ob_start()
|
/** Wrap gzencode() for usage in ob_start()
|
||||||
@@ -529,7 +544,7 @@ function db_size($db) {
|
|||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function set_utf8mb4($create) {
|
function set_utf8mb4($create) {
|
||||||
global $connection;
|
global $connection;
|
||||||
static $set = false;
|
static $set = false;
|
||||||
if (!$set && preg_match('~\butf8mb4~i', $create)) { // possible false positive
|
if (!$set && preg_match('~\butf8mb4~i', $create)) { // possible false positive
|
||||||
$set = true;
|
$set = true;
|
||||||
|
|||||||
@@ -16,6 +16,14 @@ function adminer() {
|
|||||||
return $adminer;
|
return $adminer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Get Adminer version
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function version() {
|
||||||
|
global $VERSION;
|
||||||
|
return $VERSION;
|
||||||
|
}
|
||||||
|
|
||||||
/** Unescape database identifier
|
/** Unescape database identifier
|
||||||
* @param string text inside ``
|
* @param string text inside ``
|
||||||
* @return string
|
* @return string
|
||||||
@@ -38,7 +46,14 @@ function escape_string($val) {
|
|||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function number($val) {
|
function number($val) {
|
||||||
return preg_replace('~[^0-9]+~', '', $val);
|
return preg_replace('~[^0-9]+~', '', $val);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get regular expression to match numeric types
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function number_type() {
|
||||||
|
return '((?<!o)int(?!er)|numeric|real|float|double|decimal|money)'; // not point, not interval
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Disable magic_quotes_gpc
|
/** Disable magic_quotes_gpc
|
||||||
@@ -73,12 +88,62 @@ function bracket_escape($idf, $back = false) {
|
|||||||
return strtr($idf, ($back ? array_flip($trans) : $trans));
|
return strtr($idf, ($back ? array_flip($trans) : $trans));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Check if connection has at least the given version
|
||||||
|
* @param string required version
|
||||||
|
* @param string required MariaDB version
|
||||||
|
* @param Min_DB defaults to $connection
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
function min_version($version, $maria_db = "", $connection2 = null) {
|
||||||
|
global $connection;
|
||||||
|
if (!$connection2) {
|
||||||
|
$connection2 = $connection;
|
||||||
|
}
|
||||||
|
$server_info = $connection2->server_info;
|
||||||
|
if ($maria_db && preg_match('~([\d.]+)-MariaDB~', $server_info, $match)) {
|
||||||
|
$server_info = $match[1];
|
||||||
|
$version = $maria_db;
|
||||||
|
}
|
||||||
|
return (version_compare($server_info, $version) >= 0);
|
||||||
|
}
|
||||||
|
|
||||||
/** Get connection charset
|
/** Get connection charset
|
||||||
* @param Min_DB
|
* @param Min_DB
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function charset($connection) {
|
function charset($connection) {
|
||||||
return (version_compare($connection->server_info, "5.5.3") >= 0 ? "utf8mb4" : "utf8"); // SHOW CHARSET would require an extra query
|
return (min_version("5.5.3", 0, $connection) ? "utf8mb4" : "utf8"); // SHOW CHARSET would require an extra query
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Return <script> element
|
||||||
|
* @param string
|
||||||
|
* @param string
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function script($source, $trailing = "\n") {
|
||||||
|
return "<script" . nonce() . ">$source</script>$trailing";
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Return <script src> element
|
||||||
|
* @param string
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function script_src($url) {
|
||||||
|
return "<script src='" . h($url) . "'" . nonce() . "></script>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get a nonce="" attribute with CSP nonce
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function nonce() {
|
||||||
|
return ' nonce="' . get_nonce() . '"';
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get a target="_blank" attribute
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function target_blank() {
|
||||||
|
return ' target="_blank" rel="noreferrer noopener"';
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Escape for HTML
|
/** Escape for HTML
|
||||||
@@ -119,8 +184,8 @@ function checkbox($name, $value, $checked, $label = "", $onclick = "", $class =
|
|||||||
$return = "<input type='checkbox' name='$name' value='" . h($value) . "'"
|
$return = "<input type='checkbox' name='$name' value='" . h($value) . "'"
|
||||||
. ($checked ? " checked" : "")
|
. ($checked ? " checked" : "")
|
||||||
. ($labelled_by ? " aria-labelledby='$labelled_by'" : "")
|
. ($labelled_by ? " aria-labelledby='$labelled_by'" : "")
|
||||||
. ($onclick ? ' onclick="' . h($onclick) . '"' : '')
|
|
||||||
. ">"
|
. ">"
|
||||||
|
. ($onclick ? script("qsl('input').onclick = function () { $onclick };", "") : "")
|
||||||
;
|
;
|
||||||
return ($label != "" || $class ? "<label" . ($class ? " class='$class'" : "") . ">$return" . h($label) . "</label>" : $return);
|
return ($label != "" || $class ? "<label" . ($class ? " class='$class'" : "") . ">$return" . h($label) . "</label>" : $return);
|
||||||
}
|
}
|
||||||
@@ -160,9 +225,10 @@ function optionlist($options, $selected = null, $use_keys = false) {
|
|||||||
function html_select($name, $options, $value = "", $onchange = true, $labelled_by = "") {
|
function html_select($name, $options, $value = "", $onchange = true, $labelled_by = "") {
|
||||||
if ($onchange) {
|
if ($onchange) {
|
||||||
return "<select name='" . h($name) . "'"
|
return "<select name='" . h($name) . "'"
|
||||||
. (is_string($onchange) ? ' onchange="' . h($onchange) . '"' : "")
|
|
||||||
. ($labelled_by ? " aria-labelledby='$labelled_by'" : "")
|
. ($labelled_by ? " aria-labelledby='$labelled_by'" : "")
|
||||||
. ">" . optionlist($options, $value) . "</select>";
|
. ">" . optionlist($options, $value) . "</select>"
|
||||||
|
. (is_string($onchange) ? script("qsl('select').onchange = function () { $onchange };", "") : "")
|
||||||
|
;
|
||||||
}
|
}
|
||||||
$return = "";
|
$return = "";
|
||||||
foreach ($options as $key => $val) {
|
foreach ($options as $key => $val) {
|
||||||
@@ -172,35 +238,42 @@ function html_select($name, $options, $value = "", $onchange = true, $labelled_b
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Generate HTML <select> or <input> if $options are empty
|
/** Generate HTML <select> or <input> if $options are empty
|
||||||
* @param string
|
* @param string
|
||||||
* @param array
|
* @param array
|
||||||
* @param string
|
* @param string
|
||||||
* @param string
|
* @param string
|
||||||
* @return string
|
* @param string
|
||||||
*/
|
* @return string
|
||||||
function select_input($attrs, $options, $value = "", $placeholder = "") {
|
*/
|
||||||
return ($options
|
function select_input($attrs, $options, $value = "", $onchange = "", $placeholder = "") {
|
||||||
? "<select$attrs><option value=''>$placeholder" . optionlist($options, $value, true) . "</select>"
|
$tag = ($options ? "select" : "input");
|
||||||
: "<input$attrs size='10' value='" . h($value) . "' placeholder='$placeholder'>"
|
return "<$tag$attrs" . ($options
|
||||||
);
|
? "><option value=''>$placeholder" . optionlist($options, $value, true) . "</select>"
|
||||||
|
: " size='10' value='" . h($value) . "' placeholder='$placeholder'>"
|
||||||
|
) . ($onchange ? script("qsl('$tag').onchange = $onchange;", "") : ""); //! use oninput for input
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get onclick confirmation
|
/** Get onclick confirmation
|
||||||
|
* @param string
|
||||||
|
* @param string
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function confirm() {
|
function confirm($message = "", $selector = "qsl('input')") {
|
||||||
return " onclick=\"return confirm('" . lang('Are you sure?') . "');\"";
|
return script("$selector.onclick = function () { return confirm('" . ($message ? js_escape($message) : lang('Are you sure?')) . "'); };", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Print header for hidden fieldset (close by </div></fieldset>)
|
/** Print header for hidden fieldset (close by </div></fieldset>)
|
||||||
* @param string
|
* @param string
|
||||||
* @param string
|
* @param string
|
||||||
* @param bool
|
* @param bool
|
||||||
* @param string
|
|
||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function print_fieldset($id, $legend, $visible = false, $onclick = "") {
|
function print_fieldset($id, $legend, $visible = false) {
|
||||||
echo "<fieldset><legend><a href='#fieldset-$id' onclick=\"" . h($onclick) . "return !toggle('fieldset-$id');\">$legend</a></legend><div id='fieldset-$id'" . ($visible ? "" : " class='hidden'") . ">\n";
|
echo "<fieldset><legend>";
|
||||||
|
echo "<a href='#fieldset-$id'>$legend</a>";
|
||||||
|
echo script("qsl('a').onclick = partial(toggle, 'fieldset-$id');", "");
|
||||||
|
echo "</legend>";
|
||||||
|
echo "<div id='fieldset-$id'" . ($visible ? "" : " class='hidden'") . ">\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Return class='active' if $bold is true
|
/** Return class='active' if $bold is true
|
||||||
@@ -329,9 +402,10 @@ function get_vals($query, $column = 0) {
|
|||||||
* @param string
|
* @param string
|
||||||
* @param Min_DB
|
* @param Min_DB
|
||||||
* @param float
|
* @param float
|
||||||
|
* @param bool
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
function get_key_vals($query, $connection2 = null, $timeout = 0) {
|
function get_key_vals($query, $connection2 = null, $timeout = 0, $set_keys = true) {
|
||||||
global $connection;
|
global $connection;
|
||||||
if (!is_object($connection2)) {
|
if (!is_object($connection2)) {
|
||||||
$connection2 = $connection;
|
$connection2 = $connection;
|
||||||
@@ -342,7 +416,11 @@ function get_key_vals($query, $connection2 = null, $timeout = 0) {
|
|||||||
$connection2->timeout = 0;
|
$connection2->timeout = 0;
|
||||||
if (is_object($result)) {
|
if (is_object($result)) {
|
||||||
while ($row = $result->fetch_row()) {
|
while ($row = $result->fetch_row()) {
|
||||||
$return[$row[0]] = $row[1];
|
if ($set_keys) {
|
||||||
|
$return[$row[0]] = $row[1];
|
||||||
|
} else {
|
||||||
|
$return[] = $row[0];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
@@ -352,7 +430,7 @@ function get_key_vals($query, $connection2 = null, $timeout = 0) {
|
|||||||
* @param string
|
* @param string
|
||||||
* @param Min_DB
|
* @param Min_DB
|
||||||
* @param string
|
* @param string
|
||||||
* @return array associative
|
* @return array of associative arrays
|
||||||
*/
|
*/
|
||||||
function get_rows($query, $connection2 = null, $error = "<p class='error'>") {
|
function get_rows($query, $connection2 = null, $error = "<p class='error'>") {
|
||||||
global $connection;
|
global $connection;
|
||||||
@@ -481,8 +559,8 @@ function cookie($name, $value, $lifetime = 2592000) { // 2592000 - 30 days
|
|||||||
. ($lifetime ? "; expires=" . gmdate("D, d M Y H:i:s", time() + $lifetime) . " GMT" : "")
|
. ($lifetime ? "; expires=" . gmdate("D, d M Y H:i:s", time() + $lifetime) . " GMT" : "")
|
||||||
. "; path=" . preg_replace('~\\?.*~', '', $_SERVER["REQUEST_URI"])
|
. "; path=" . preg_replace('~\\?.*~', '', $_SERVER["REQUEST_URI"])
|
||||||
. ($HTTPS ? "; secure" : "")
|
. ($HTTPS ? "; secure" : "")
|
||||||
. "; HttpOnly; SameSite=lax"
|
. "; HttpOnly; SameSite=lax",
|
||||||
);
|
false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Restart stopped session
|
/** Restart stopped session
|
||||||
@@ -584,10 +662,10 @@ function query_redirect($query, $location, $message, $redirect = true, $execute
|
|||||||
}
|
}
|
||||||
$sql = "";
|
$sql = "";
|
||||||
if ($query) {
|
if ($query) {
|
||||||
$sql = $adminer->messageQuery($query, $time);
|
$sql = $adminer->messageQuery($query, $time, $failed);
|
||||||
}
|
}
|
||||||
if ($failed) {
|
if ($failed) {
|
||||||
$error = error() . $sql;
|
$error = error() . $sql . script("messagesPrint();");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if ($redirect) {
|
if ($redirect) {
|
||||||
@@ -755,7 +833,7 @@ function shorten_utf8($string, $length = 80, $suffix = "") {
|
|||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function format_number($val) {
|
function format_number($val) {
|
||||||
return strtr(number_format($val, 0, ".", lang(',')), preg_split('~~u', lang('0123456789'), -1, PREG_SPLIT_NO_EMPTY));
|
return strtr(number_format($val, 0, ".", lang(',')), preg_split('~~u', lang('0123456789'), -1, PREG_SPLIT_NO_EMPTY));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Generate friendly URL
|
/** Generate friendly URL
|
||||||
@@ -770,9 +848,10 @@ function friendly_url($val) {
|
|||||||
/** Print hidden fields
|
/** Print hidden fields
|
||||||
* @param array
|
* @param array
|
||||||
* @param array
|
* @param array
|
||||||
* @return null
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function hidden_fields($process, $ignore = array()) {
|
function hidden_fields($process, $ignore = array()) {
|
||||||
|
$return = false;
|
||||||
while (list($key, $val) = each($process)) {
|
while (list($key, $val) = each($process)) {
|
||||||
if (!in_array($key, $ignore)) {
|
if (!in_array($key, $ignore)) {
|
||||||
if (is_array($val)) {
|
if (is_array($val)) {
|
||||||
@@ -780,10 +859,12 @@ function hidden_fields($process, $ignore = array()) {
|
|||||||
$process[$key . "[$k]"] = $v;
|
$process[$key . "[$k]"] = $v;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
$return = true;
|
||||||
echo '<input type="hidden" name="' . h($key) . '" value="' . h($val) . '">';
|
echo '<input type="hidden" name="' . h($key) . '" value="' . h($val) . '">';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Print hidden fields for GET forms
|
/** Print hidden fields for GET forms
|
||||||
@@ -847,7 +928,7 @@ function enum_input($type, $attrs, $field, $value, $empty = null) {
|
|||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
function input($field, $value, $function) {
|
function input($field, $value, $function) {
|
||||||
global $connection, $types, $adminer, $jush;
|
global $types, $adminer, $jush;
|
||||||
$name = h(bracket_escape($field["field"]));
|
$name = h(bracket_escape($field["field"]));
|
||||||
echo "<td class='function'>";
|
echo "<td class='function'>";
|
||||||
if (is_array($value) && !$function) {
|
if (is_array($value) && !$function) {
|
||||||
@@ -867,18 +948,11 @@ function input($field, $value, $function) {
|
|||||||
if ($field["type"] == "enum") {
|
if ($field["type"] == "enum") {
|
||||||
echo nbsp($functions[""]) . "<td>" . $adminer->editInput($_GET["edit"], $field, $attrs, $value);
|
echo nbsp($functions[""]) . "<td>" . $adminer->editInput($_GET["edit"], $field, $attrs, $value);
|
||||||
} else {
|
} else {
|
||||||
$first = 0;
|
|
||||||
foreach ($functions as $key => $val) {
|
|
||||||
if ($key === "" || !$val) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
$first++;
|
|
||||||
}
|
|
||||||
$onchange = ($first ? " onchange=\"var f = this.form['function[" . h(js_escape(bracket_escape($field["field"]))) . "]']; if ($first > f.selectedIndex) f.selectedIndex = $first;\" onkeyup='keyupChange.call(this);'" : "");
|
|
||||||
$attrs .= $onchange;
|
|
||||||
$has_function = (in_array($function, $functions) || isset($functions[$function]));
|
$has_function = (in_array($function, $functions) || isset($functions[$function]));
|
||||||
echo (count($functions) > 1
|
echo (count($functions) > 1
|
||||||
? "<select name='function[$name]' onchange='functionChange(this);'" . on_help("getTarget(event).value.replace(/^SQL\$/, '')", 1) . ">" . optionlist($functions, $function === null || $has_function ? $function : "") . "</select>"
|
? "<select name='function[$name]'>" . optionlist($functions, $function === null || $has_function ? $function : "") . "</select>"
|
||||||
|
. on_help("getTarget(event).value.replace(/^SQL\$/, '')", 1)
|
||||||
|
. script("qsl('select').onchange = functionChange;", "")
|
||||||
: nbsp(reset($functions))
|
: nbsp(reset($functions))
|
||||||
) . '<td>';
|
) . '<td>';
|
||||||
$input = $adminer->editInput($_GET["edit"], $field, $attrs, $value); // usage in call is without a table
|
$input = $adminer->editInput($_GET["edit"], $field, $attrs, $value); // usage in call is without a table
|
||||||
@@ -886,16 +960,16 @@ function input($field, $value, $function) {
|
|||||||
echo $input;
|
echo $input;
|
||||||
} elseif (preg_match('~bool~', $field["type"])) {
|
} elseif (preg_match('~bool~', $field["type"])) {
|
||||||
echo "<input type='hidden'$attrs value='0'>" .
|
echo "<input type='hidden'$attrs value='0'>" .
|
||||||
"<input type='checkbox'" . (in_array(strtolower($value), array('1', 't', 'true', 'y', 'yes', 'on')) ? " checked='checked'" : "") . "$attrs value='1'>";
|
"<input type='checkbox'" . (preg_match('~^(1|t|true|y|yes|on)$~i', $value) ? " checked='checked'" : "") . "$attrs value='1'>";
|
||||||
} elseif ($field["type"] == "set") { //! 64 bits
|
} elseif ($field["type"] == "set") { //! 64 bits
|
||||||
preg_match_all("~'((?:[^']|'')*)'~", $field["length"], $matches);
|
preg_match_all("~'((?:[^']|'')*)'~", $field["length"], $matches);
|
||||||
foreach ($matches[1] as $i => $val) {
|
foreach ($matches[1] as $i => $val) {
|
||||||
$val = stripcslashes(str_replace("''", "'", $val));
|
$val = stripcslashes(str_replace("''", "'", $val));
|
||||||
$checked = (is_int($value) ? ($value >> $i) & 1 : in_array($val, explode(",", $value), true));
|
$checked = (is_int($value) ? ($value >> $i) & 1 : in_array($val, explode(",", $value), true));
|
||||||
echo " <label><input type='checkbox' name='fields[$name][$i]' value='" . (1 << $i) . "'" . ($checked ? ' checked' : '') . "$onchange>" . h($adminer->editVal($val, $field)) . '</label>';
|
echo " <label><input type='checkbox' name='fields[$name][$i]' value='" . (1 << $i) . "'" . ($checked ? ' checked' : '') . ">" . h($adminer->editVal($val, $field)) . '</label>';
|
||||||
}
|
}
|
||||||
} elseif (preg_match('~blob|bytea|raw|file~', $field["type"]) && ini_bool("file_uploads")) {
|
} elseif (preg_match('~blob|bytea|raw|file~', $field["type"]) && ini_bool("file_uploads")) {
|
||||||
echo "<input type='file' name='fields-$name'$onchange>";
|
echo "<input type='file' name='fields-$name'>";
|
||||||
} elseif (($text = preg_match('~text|lob~', $field["type"])) || preg_match("~\n~", $value)) {
|
} elseif (($text = preg_match('~text|lob~', $field["type"])) || preg_match("~\n~", $value)) {
|
||||||
if ($text && $jush != "sqlite") {
|
if ($text && $jush != "sqlite") {
|
||||||
$attrs .= " cols='50' rows='12'";
|
$attrs .= " cols='50' rows='12'";
|
||||||
@@ -909,17 +983,29 @@ function input($field, $value, $function) {
|
|||||||
} else {
|
} else {
|
||||||
// int(3) is only a display hint
|
// int(3) is only a display hint
|
||||||
$maxlength = (!preg_match('~int~', $field["type"]) && preg_match('~^(\\d+)(,(\\d+))?$~', $field["length"], $match) ? ((preg_match("~binary~", $field["type"]) ? 2 : 1) * $match[1] + ($match[3] ? 1 : 0) + ($match[2] && !$field["unsigned"] ? 1 : 0)) : ($types[$field["type"]] ? $types[$field["type"]] + ($field["unsigned"] ? 0 : 1) : 0));
|
$maxlength = (!preg_match('~int~', $field["type"]) && preg_match('~^(\\d+)(,(\\d+))?$~', $field["length"], $match) ? ((preg_match("~binary~", $field["type"]) ? 2 : 1) * $match[1] + ($match[3] ? 1 : 0) + ($match[2] && !$field["unsigned"] ? 1 : 0)) : ($types[$field["type"]] ? $types[$field["type"]] + ($field["unsigned"] ? 0 : 1) : 0));
|
||||||
if ($jush == 'sql' && $connection->server_info >= 5.6 && preg_match('~time~', $field["type"])) {
|
if ($jush == 'sql' && min_version(5.6) && preg_match('~time~', $field["type"])) {
|
||||||
$maxlength += 7; // microtime
|
$maxlength += 7; // microtime
|
||||||
}
|
}
|
||||||
// type='date' and type='time' display localized value which may be confusing, type='datetime' uses 'T' as date and time separator
|
// type='date' and type='time' display localized value which may be confusing, type='datetime' uses 'T' as date and time separator
|
||||||
echo "<input"
|
echo "<input"
|
||||||
. ((!$has_function || $function === "") && preg_match('~(?<!o)int~', $field["type"]) && !preg_match('~\[\]~', $field["full_type"]) ? " type='number'" : "")
|
. ((!$has_function || $function === "") && preg_match('~(?<!o)int(?!er)~', $field["type"]) && !preg_match('~\[\]~', $field["full_type"]) ? " type='number'" : "")
|
||||||
. " value='" . h($value) . "'" . ($maxlength ? " data-maxlength='$maxlength'" : "")
|
. " value='" . h($value) . "'" . ($maxlength ? " data-maxlength='$maxlength'" : "")
|
||||||
. (preg_match('~char|binary~', $field["type"]) && $maxlength > 20 ? " size='40'" : "")
|
. (preg_match('~char|binary~', $field["type"]) && $maxlength > 20 ? " size='40'" : "")
|
||||||
. "$attrs>"
|
. "$attrs>"
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
echo $adminer->editHint($_GET["edit"], $field, $value);
|
||||||
|
// skip 'original'
|
||||||
|
$first = 0;
|
||||||
|
foreach ($functions as $key => $val) {
|
||||||
|
if ($key === "" || !$val) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$first++;
|
||||||
|
}
|
||||||
|
if ($first) {
|
||||||
|
echo script("mixin(qsl('td'), {onchange: partial(skipOriginal, $first), oninput: function () { this.onchange(); }});");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -928,7 +1014,7 @@ function input($field, $value, $function) {
|
|||||||
* @return string or false to leave the original value
|
* @return string or false to leave the original value
|
||||||
*/
|
*/
|
||||||
function process_input($field) {
|
function process_input($field) {
|
||||||
global $adminer;
|
global $adminer, $driver;
|
||||||
$idf = bracket_escape($field["field"]);
|
$idf = bracket_escape($field["field"]);
|
||||||
$function = $_POST["function"][$idf];
|
$function = $_POST["function"][$idf];
|
||||||
$value = $_POST["fields"][$idf];
|
$value = $_POST["fields"][$idf];
|
||||||
@@ -966,7 +1052,7 @@ function process_input($field) {
|
|||||||
if (!is_string($file)) {
|
if (!is_string($file)) {
|
||||||
return false; //! report errors
|
return false; //! report errors
|
||||||
}
|
}
|
||||||
return q($file);
|
return $driver->quoteBinary($file);
|
||||||
}
|
}
|
||||||
return $adminer->processInput($field, $value, $function);
|
return $adminer->processInput($field, $value, $function);
|
||||||
}
|
}
|
||||||
@@ -1003,25 +1089,20 @@ function fields_from_edit() {
|
|||||||
*/
|
*/
|
||||||
function search_tables() {
|
function search_tables() {
|
||||||
global $adminer, $connection;
|
global $adminer, $connection;
|
||||||
$_GET["where"][0]["op"] = "LIKE %%";
|
|
||||||
$_GET["where"][0]["val"] = $_POST["query"];
|
$_GET["where"][0]["val"] = $_POST["query"];
|
||||||
$found = false;
|
$sep = "<ul>\n";
|
||||||
foreach (table_status('', true) as $table => $table_status) {
|
foreach (table_status('', true) as $table => $table_status) {
|
||||||
$name = $adminer->tableName($table_status);
|
$name = $adminer->tableName($table_status);
|
||||||
if (isset($table_status["Engine"]) && $name != "" && (!$_POST["tables"] || in_array($table, $_POST["tables"]))) {
|
if (isset($table_status["Engine"]) && $name != "" && (!$_POST["tables"] || in_array($table, $_POST["tables"]))) {
|
||||||
$result = $connection->query("SELECT" . limit("1 FROM " . table($table), " WHERE " . implode(" AND ", $adminer->selectSearchProcess(fields($table), array())), 1));
|
$result = $connection->query("SELECT" . limit("1 FROM " . table($table), " WHERE " . implode(" AND ", $adminer->selectSearchProcess(fields($table), array())), 1));
|
||||||
if (!$result || $result->fetch_row()) {
|
if (!$result || $result->fetch_row()) {
|
||||||
if (!$found) {
|
$print = "<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>";
|
||||||
echo "<ul>\n";
|
echo "$sep<li>" . ($result ? $print : "<p class='error'>$print: " . error()) . "\n";
|
||||||
$found = true;
|
$sep = "";
|
||||||
}
|
|
||||||
echo "<li>" . ($result
|
|
||||||
? "<a href='" . h(ME . "select=" . urlencode($table) . "&where[0][op]=" . urlencode($_GET["where"][0]["op"]) . "&where[0][val]=" . urlencode($_GET["where"][0]["val"])) . "'>$name</a>\n"
|
|
||||||
: "$name: <span class='error'>" . error() . "</span>\n");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
echo ($found ? "</ul>" : "<p class='message'>" . lang('No tables.')) . "\n";
|
echo ($sep ? "<p class='message'>" . lang('No tables.') : "</ul>") . "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Send headers for export
|
/** Send headers for export
|
||||||
@@ -1084,6 +1165,35 @@ function get_temp_dir() {
|
|||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Open and exclusively lock a file
|
||||||
|
* @param string
|
||||||
|
* @return resource or null for error
|
||||||
|
*/
|
||||||
|
function file_open_lock($filename) {
|
||||||
|
$fp = @fopen($filename, "r+"); // @ - may not exist
|
||||||
|
if (!$fp) { // c+ is available since PHP 5.2.6
|
||||||
|
$fp = @fopen($filename, "w"); // @ - may not be writable
|
||||||
|
if (!$fp) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
chmod($filename, 0660);
|
||||||
|
}
|
||||||
|
flock($fp, LOCK_EX);
|
||||||
|
return $fp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Write and unlock a file
|
||||||
|
* @param resource
|
||||||
|
* @param string
|
||||||
|
*/
|
||||||
|
function file_write_unlock($fp, $data) {
|
||||||
|
rewind($fp);
|
||||||
|
fwrite($fp, $data);
|
||||||
|
ftruncate($fp, strlen($data));
|
||||||
|
flock($fp, LOCK_UN);
|
||||||
|
fclose($fp);
|
||||||
|
}
|
||||||
|
|
||||||
/** Read password from file adminer.key in temporary directory or create one
|
/** Read password from file adminer.key in temporary directory or create one
|
||||||
* @param bool
|
* @param bool
|
||||||
* @return string or false if the file can not be created
|
* @return string or false if the file can not be created
|
||||||
@@ -1119,7 +1229,7 @@ function rand_string() {
|
|||||||
* @return string HTML
|
* @return string HTML
|
||||||
*/
|
*/
|
||||||
function select_value($val, $link, $field, $text_length) {
|
function select_value($val, $link, $field, $text_length) {
|
||||||
global $adminer, $HTTPS;
|
global $adminer;
|
||||||
if (is_array($val)) {
|
if (is_array($val)) {
|
||||||
$return = "";
|
$return = "";
|
||||||
foreach ($val as $k => $v) {
|
foreach ($val as $k => $v) {
|
||||||
@@ -1137,11 +1247,8 @@ function select_value($val, $link, $field, $text_length) {
|
|||||||
if (is_mail($val)) {
|
if (is_mail($val)) {
|
||||||
$link = "mailto:$val";
|
$link = "mailto:$val";
|
||||||
}
|
}
|
||||||
if ($protocol = is_url($val)) {
|
if (is_url($val)) {
|
||||||
$link = (($protocol == "http" && $HTTPS) || preg_match('~WebKit|Firefox~i', $_SERVER["HTTP_USER_AGENT"]) // WebKit supports noreferrer since 2009, Firefox since version 38
|
$link = $val; // IE 11 and all modern browsers hide referrer
|
||||||
? $val // HTTP links from HTTPS pages don't receive Referer automatically
|
|
||||||
: "https://www.adminer.org/redirect/?url=" . urlencode($val) // intermediate page to hide Referer
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$return = $adminer->editVal($val, $field);
|
$return = $adminer->editVal($val, $field);
|
||||||
@@ -1172,11 +1279,11 @@ function is_mail($email) {
|
|||||||
|
|
||||||
/** Check whether the string is URL address
|
/** Check whether the string is URL address
|
||||||
* @param string
|
* @param string
|
||||||
* @return string "http", "https" or ""
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function is_url($string) {
|
function is_url($string) {
|
||||||
$domain = '[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])'; // one domain component //! IDN
|
$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
|
return preg_match("~^(https?)://($domain?\\.)+$domain(:\\d+)?(/.*)?(\\?.*)?(#.*)?\$~i", $string); //! restrict path, query and fragment characters
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Check if field should be shortened
|
/** Check if field should be shortened
|
||||||
@@ -1184,7 +1291,7 @@ function is_url($string) {
|
|||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function is_shortable($field) {
|
function is_shortable($field) {
|
||||||
return preg_match('~char|text|lob|geometry|point|linestring|polygon|string|bytea~', $field["type"]);
|
return preg_match('~char|text|json|lob|geometry|point|linestring|polygon|string|bytea~', $field["type"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get query to compute number of found rows
|
/** Get query to compute number of found rows
|
||||||
@@ -1199,7 +1306,7 @@ function count_rows($table, $where, $is_group, $group) {
|
|||||||
$query = " FROM " . table($table) . ($where ? " WHERE " . implode(" AND ", $where) : "");
|
$query = " FROM " . table($table) . ($where ? " WHERE " . implode(" AND ", $where) : "");
|
||||||
return ($is_group && ($jush == "sql" || count($group) == 1)
|
return ($is_group && ($jush == "sql" || count($group) == 1)
|
||||||
? "SELECT COUNT(DISTINCT " . implode(", ", $group) . ")$query"
|
? "SELECT COUNT(DISTINCT " . implode(", ", $group) . ")$query"
|
||||||
: "SELECT COUNT(*)" . ($is_group ? " FROM (SELECT 1$query$group_by) x" : $query)
|
: "SELECT COUNT(*)" . ($is_group ? " FROM (SELECT 1$query GROUP BY " . implode(", ", $group) . ") x" : $query)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1214,10 +1321,10 @@ function slow_query($query) {
|
|||||||
if (support("kill") && is_object($connection2 = connect()) && ($db == "" || $connection2->select_db($db))) {
|
if (support("kill") && is_object($connection2 = connect()) && ($db == "" || $connection2->select_db($db))) {
|
||||||
$kill = $connection2->result(connection_id()); // MySQL and MySQLi can use thread_id but it's not in PDO_MySQL
|
$kill = $connection2->result(connection_id()); // MySQL and MySQLi can use thread_id but it's not in PDO_MySQL
|
||||||
?>
|
?>
|
||||||
<script type="text/javascript">
|
<script<?php echo nonce(); ?>>
|
||||||
var timeout = setTimeout(function () {
|
var timeout = setTimeout(function () {
|
||||||
ajax('<?php echo js_escape(ME); ?>script=kill', function () {
|
ajax('<?php echo js_escape(ME); ?>script=kill', function () {
|
||||||
}, 'token=<?php echo $token; ?>&kill=<?php echo $kill; ?>');
|
}, 'kill=<?php echo $kill; ?>&token=<?php echo $token; ?>');
|
||||||
}, <?php echo 1000 * $timeout; ?>);
|
}, <?php echo 1000 * $timeout; ?>);
|
||||||
</script>
|
</script>
|
||||||
<?php
|
<?php
|
||||||
@@ -1226,13 +1333,13 @@ var timeout = setTimeout(function () {
|
|||||||
}
|
}
|
||||||
ob_flush();
|
ob_flush();
|
||||||
flush();
|
flush();
|
||||||
$return = @get_key_vals($query, $connection2, $timeout); // @ - may be killed
|
$return = @get_key_vals($query, $connection2, $timeout, false); // @ - may be killed
|
||||||
if ($connection2) {
|
if ($connection2) {
|
||||||
echo "<script type='text/javascript'>clearTimeout(timeout);</script>\n";
|
echo script("clearTimeout(timeout);");
|
||||||
ob_flush();
|
ob_flush();
|
||||||
flush();
|
flush();
|
||||||
}
|
}
|
||||||
return array_keys($return);
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Generate BREACH resistant CSRF token
|
/** Generate BREACH resistant CSRF token
|
||||||
@@ -1295,7 +1402,7 @@ function lzw_decompress($binary) {
|
|||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function on_help($command, $side = 0) {
|
function on_help($command, $side = 0) {
|
||||||
return " onmouseover='helpMouseover(this, event, " . h($command) . ", $side);' onmouseout='helpMouseout(this, event);'";
|
return script("mixin(qsl('select, input'), {onmouseover: function (event) { helpMouseover.call(this, event, $command, $side) }, onmouseout: helpMouseout});", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Print edit data form
|
/** Print edit data form
|
||||||
@@ -1323,7 +1430,7 @@ function edit_form($TABLE, $fields, $row, $update) {
|
|||||||
if (!$fields) {
|
if (!$fields) {
|
||||||
echo "<p class='error'>" . lang('You have no privileges to update this table.') . "\n";
|
echo "<p class='error'>" . lang('You have no privileges to update this table.') . "\n";
|
||||||
} else {
|
} else {
|
||||||
echo "<table cellspacing='0' onkeydown='return editingKeydown(event);'>\n";
|
echo "<table cellspacing='0'>" . script("qsl('table').onkeydown = editingKeydown;");
|
||||||
|
|
||||||
foreach ($fields as $name => $field) {
|
foreach ($fields as $name => $field) {
|
||||||
echo "<tr><th>" . $adminer->fieldName($field);
|
echo "<tr><th>" . $adminer->fieldName($field);
|
||||||
@@ -1363,7 +1470,8 @@ function edit_form($TABLE, $fields, $row, $update) {
|
|||||||
}
|
}
|
||||||
if (!support("table")) {
|
if (!support("table")) {
|
||||||
echo "<tr>"
|
echo "<tr>"
|
||||||
. "<th><input name='field_keys[]' onkeyup='keyupChange.call(this);' onchange='fieldChange(this);' value=''>" // needs empty value for keyupChange()
|
. "<th><input name='field_keys[]'>"
|
||||||
|
. script("qsl('input').oninput = fieldChange;")
|
||||||
. "<td class='function'>" . html_select("field_funs[]", $adminer->editFunctions(array("null" => isset($_GET["select"]))))
|
. "<td class='function'>" . html_select("field_funs[]", $adminer->editFunctions(array("null" => isset($_GET["select"]))))
|
||||||
. "<td><input name='field_vals[]'>"
|
. "<td><input name='field_vals[]'>"
|
||||||
. "\n"
|
. "\n"
|
||||||
@@ -1376,13 +1484,14 @@ function edit_form($TABLE, $fields, $row, $update) {
|
|||||||
echo "<input type='submit' value='" . lang('Save') . "'>\n";
|
echo "<input type='submit' value='" . lang('Save') . "'>\n";
|
||||||
if (!isset($_GET["select"])) {
|
if (!isset($_GET["select"])) {
|
||||||
echo "<input type='submit' name='insert' value='" . ($update
|
echo "<input type='submit' name='insert' value='" . ($update
|
||||||
? lang('Save and continue edit') . "' onclick='return !ajaxForm(this.form, \"" . lang('Saving') . '...", this)'
|
? lang('Save and continue edit')
|
||||||
: lang('Save and insert next')
|
: lang('Save and insert next')
|
||||||
) . "' title='Ctrl+Shift+Enter'>\n";
|
) . "' title='Ctrl+Shift+Enter'>\n";
|
||||||
|
echo ($update ? script("qsl('input').onclick = function () { return !ajaxForm(this.form, '" . lang('Saving') . "...', this); };") : "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
echo ($update ? "<input type='submit' name='delete' value='" . lang('Delete') . "'" . confirm() . ">\n"
|
echo ($update ? "<input type='submit' name='delete' value='" . lang('Delete') . "'>" . confirm() . "\n"
|
||||||
: ($_POST || !$fields ? "" : "<script type='text/javascript'>focus(document.getElementById('form').getElementsByTagName('td')[1].firstChild);</script>\n")
|
: ($_POST || !$fields ? "" : script("focus(qsa('td', qs('#form'))[1].firstChild);"))
|
||||||
);
|
);
|
||||||
if (isset($_GET["select"])) {
|
if (isset($_GET["select"])) {
|
||||||
hidden_fields(array("check" => (array) $_POST["check"], "clone" => $_POST["clone"], "all" => $_POST["all"]));
|
hidden_fields(array("check" => (array) $_POST["check"], "clone" => $_POST["clone"], "all" => $_POST["all"]));
|
||||||
|
|||||||
@@ -2,13 +2,13 @@
|
|||||||
// not used in a single language version
|
// not used in a single language version
|
||||||
|
|
||||||
$langs = array(
|
$langs = array(
|
||||||
'en' => 'English', // Jakub Vrána - http://www.vrana.cz
|
'en' => 'English', // Jakub Vrána - https://www.vrana.cz
|
||||||
'ar' => 'العربية', // Y.M Amine - Algeria - nbr7@live.fr
|
'ar' => 'العربية', // Y.M Amine - Algeria - nbr7@live.fr
|
||||||
'bg' => 'Български', // Deyan Delchev
|
'bg' => 'Български', // Deyan Delchev
|
||||||
'bn' => 'বাংলা', // Dipak Kumar - dipak.ndc@gmail.com
|
'bn' => 'বাংলা', // Dipak Kumar - dipak.ndc@gmail.com
|
||||||
'bs' => 'Bosanski', // Emir Kurtovic
|
'bs' => 'Bosanski', // Emir Kurtovic
|
||||||
'ca' => 'Català', // Joan Llosas
|
'ca' => 'Català', // Joan Llosas
|
||||||
'cs' => 'Čeština', // Jakub Vrána - http://www.vrana.cz
|
'cs' => 'Čeština', // Jakub Vrána - https://www.vrana.cz
|
||||||
'da' => 'Dansk', // Jarne W. Beutnagel - jarne@beutnagel.dk
|
'da' => 'Dansk', // Jarne W. Beutnagel - jarne@beutnagel.dk
|
||||||
'de' => 'Deutsch', // Klemens Häckel - http://clickdimension.wordpress.com
|
'de' => 'Deutsch', // Klemens Häckel - http://clickdimension.wordpress.com
|
||||||
'el' => 'Ελληνικά', // Dimitrios T. Tanis - jtanis@tanisfood.gr
|
'el' => 'Ελληνικά', // Dimitrios T. Tanis - jtanis@tanisfood.gr
|
||||||
@@ -18,24 +18,26 @@ $langs = array(
|
|||||||
'fi' => 'Suomi', // Finnish - Kari Eveli - http://www.lexitec.fi/
|
'fi' => 'Suomi', // Finnish - Kari Eveli - http://www.lexitec.fi/
|
||||||
'fr' => 'Français', // Francis Gagné, Aurélien Royer
|
'fr' => 'Français', // Francis Gagné, Aurélien Royer
|
||||||
'gl' => 'Galego', // Eduardo Penabad Ramos
|
'gl' => 'Galego', // Eduardo Penabad Ramos
|
||||||
|
'he' => 'עברית', // Binyamin Yawitz - https://stuff-group.com/
|
||||||
'hu' => 'Magyar', // Borsos Szilárd (Borsosfi) - http://www.borsosfi.hu, info@borsosfi.hu
|
'hu' => 'Magyar', // Borsos Szilárd (Borsosfi) - http://www.borsosfi.hu, info@borsosfi.hu
|
||||||
'id' => 'Bahasa Indonesia', // Ivan Lanin - http://ivan.lanin.org
|
'id' => 'Bahasa Indonesia', // Ivan Lanin - http://ivan.lanin.org
|
||||||
'it' => 'Italiano', // Alessandro Fiorotto, Paolo Asperti
|
'it' => 'Italiano', // Alessandro Fiorotto, Paolo Asperti
|
||||||
'ja' => '日本語', // Hitoshi Ozawa - http://sourceforge.jp/projects/oss-ja-jpn/releases/
|
'ja' => '日本語', // Hitoshi Ozawa - http://sourceforge.jp/projects/oss-ja-jpn/releases/
|
||||||
'ko' => '한국어', // dalli - skcha67@gmail.com
|
'ko' => '한국어', // dalli - skcha67@gmail.com
|
||||||
'lt' => 'Lietuvių', // Paulius Leščinskas - http://www.lescinskas.lt
|
'lt' => 'Lietuvių', // Paulius Leščinskas - http://www.lescinskas.lt
|
||||||
|
'ms' => 'Bahasa Melayu', // Pisyek
|
||||||
'nl' => 'Nederlands', // Maarten Balliauw - http://blog.maartenballiauw.be
|
'nl' => 'Nederlands', // Maarten Balliauw - http://blog.maartenballiauw.be
|
||||||
'no' => 'Norsk', // Iver Odin Kvello, mupublishing.com
|
'no' => 'Norsk', // Iver Odin Kvello, mupublishing.com
|
||||||
'pl' => 'Polski', // Radosław Kowalewski - http://srsbiz.pl/
|
'pl' => 'Polski', // Radosław Kowalewski - http://srsbiz.pl/
|
||||||
'pt' => 'Português', // André Dias
|
'pt' => 'Português', // André Dias
|
||||||
'pt-br' => 'Português (Brazil)', // Gian Live - gian@live.com, Davi Alexandre davi@davialexandre.com.br, RobertoPC - http://www.robertopc.com.br
|
'pt-br' => 'Português (Brazil)', // Gian Live - gian@live.com, Davi Alexandre davi@davialexandre.com.br, RobertoPC - http://www.robertopc.com.br
|
||||||
'ro' => 'Limba Română', // .nick .messing - dot.nick.dot.messing@gmail.com
|
'ro' => 'Limba Română', // .nick .messing - dot.nick.dot.messing@gmail.com
|
||||||
'ru' => 'Русский язык', // Maksim Izmaylov
|
'ru' => 'Русский', // Maksim Izmaylov; Andre Polykanine - https://github.com/Oire/
|
||||||
'sk' => 'Slovenčina', // Ivan Suchy - http://www.ivansuchy.com, Juraj Krivda - http://www.jstudio.cz
|
'sk' => 'Slovenčina', // Ivan Suchy - http://www.ivansuchy.com, Juraj Krivda - http://www.jstudio.cz
|
||||||
'sl' => 'Slovenski', // Matej Ferlan - www.itdinamik.com, matej.ferlan@itdinamik.com
|
'sl' => 'Slovenski', // Matej Ferlan - www.itdinamik.com, matej.ferlan@itdinamik.com
|
||||||
'sr' => 'Српски', // Nikola Radovanović - cobisimo@gmail.com
|
'sr' => 'Српски', // Nikola Radovanović - cobisimo@gmail.com
|
||||||
'ta' => 'தமிழ்', // G. Sampath Kumar, Chennai, India, sampathkumar11@gmail.com
|
'ta' => 'தமிழ்', // G. Sampath Kumar, Chennai, India, sampathkumar11@gmail.com
|
||||||
'th' => 'ภาษาไทย', // Panya Saraphi, elect.tu@gmail.com - http://www.opencart2u.com/
|
'th' => 'ภาษาไทย', // Panya Saraphi, elect.tu@gmail.com - http://www.opencart2u.com/
|
||||||
'tr' => 'Türkçe', // Bilgehan Korkmaz - turktron.com
|
'tr' => 'Türkçe', // Bilgehan Korkmaz - turktron.com
|
||||||
'uk' => 'Українська', // Valerii Kryzhov
|
'uk' => 'Українська', // Valerii Kryzhov
|
||||||
'vi' => 'Tiếng Việt', // Giang Manh @ manhgd google mail
|
'vi' => 'Tiếng Việt', // Giang Manh @ manhgd google mail
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ if (extension_loaded('pdo')) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function dsn($dsn, $username, $password) {
|
function dsn($dsn, $username, $password, $options = array()) {
|
||||||
try {
|
try {
|
||||||
parent::__construct($dsn, $username, $password);
|
parent::__construct($dsn, $username, $password, $options);
|
||||||
} catch (Exception $ex) {
|
} catch (Exception $ex) {
|
||||||
auth_error(h($ex->getMessage()));
|
auth_error(h($ex->getMessage()));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
<?php
|
<?php
|
||||||
$VERSION = "4.3.0";
|
$VERSION = "4.6.2";
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
* @link https://www.adminer.org/
|
* @link https://www.adminer.org/
|
||||||
* @author Jakub Vrana, https://www.vrana.cz/
|
* @author Jakub Vrana, https://www.vrana.cz/
|
||||||
* @copyright 2007 Jakub Vrana
|
* @copyright 2007 Jakub Vrana
|
||||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
* @license https://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)
|
* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
include "./include/bootstrap.inc.php";
|
include "./include/bootstrap.inc.php";
|
||||||
@@ -65,8 +65,6 @@ if (isset($_GET["download"])) {
|
|||||||
include "./user.inc.php";
|
include "./user.inc.php";
|
||||||
} elseif (isset($_GET["processlist"])) {
|
} elseif (isset($_GET["processlist"])) {
|
||||||
include "./processlist.inc.php";
|
include "./processlist.inc.php";
|
||||||
} elseif (isset($_GET["replication"])) {
|
|
||||||
include "./replication.inc.php";
|
|
||||||
} elseif (isset($_GET["select"])) {
|
} elseif (isset($_GET["select"])) {
|
||||||
include "./select.inc.php";
|
include "./select.inc.php";
|
||||||
} elseif (isset($_GET["variables"])) {
|
} elseif (isset($_GET["variables"])) {
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
$TABLE = $_GET["indexes"];
|
$TABLE = $_GET["indexes"];
|
||||||
$index_types = array("PRIMARY", "UNIQUE", "INDEX");
|
$index_types = array("PRIMARY", "UNIQUE", "INDEX");
|
||||||
$table_status = table_status($TABLE, true);
|
$table_status = table_status($TABLE, true);
|
||||||
if (preg_match('~MyISAM|M?aria' . ($connection->server_info >= 5.6 ? '|InnoDB' : '') . '~i', $table_status["Engine"])) {
|
if (preg_match('~MyISAM|M?aria' . (min_version(5.6, '10.0.5') ? '|InnoDB' : '') . '~i', $table_status["Engine"])) {
|
||||||
$index_types[] = "FULLTEXT";
|
$index_types[] = "FULLTEXT";
|
||||||
}
|
}
|
||||||
if (preg_match('~MyISAM|M?aria' . ($connection->server_info >= 5.7 ? '|InnoDB' : '') . '~i', $table_status["Engine"])) {
|
if (preg_match('~MyISAM|M?aria' . (min_version(5.7, '10.2.2') ? '|InnoDB' : '') . '~i', $table_status["Engine"])) {
|
||||||
$index_types[] = "SPATIAL";
|
$index_types[] = "SPATIAL";
|
||||||
}
|
}
|
||||||
$indexes = indexes($TABLE);
|
$indexes = indexes($TABLE);
|
||||||
@@ -113,16 +113,17 @@ if ($primary) {
|
|||||||
$j = 1;
|
$j = 1;
|
||||||
foreach ($row["indexes"] as $index) {
|
foreach ($row["indexes"] as $index) {
|
||||||
if (!$_POST["drop_col"] || $j != key($_POST["drop_col"])) {
|
if (!$_POST["drop_col"] || $j != key($_POST["drop_col"])) {
|
||||||
echo "<tr><td>" . html_select("indexes[$j][type]", array(-1 => "") + $index_types, $index["type"], ($j == count($row["indexes"]) ? "indexesAddRow(this);" : 1), "label-type");
|
echo "<tr><td>" . html_select("indexes[$j][type]", array(-1 => "") + $index_types, $index["type"], ($j == count($row["indexes"]) ? "indexesAddRow.call(this);" : 1), "label-type");
|
||||||
|
|
||||||
echo "<td>";
|
echo "<td>";
|
||||||
ksort($index["columns"]);
|
ksort($index["columns"]);
|
||||||
$i = 1;
|
$i = 1;
|
||||||
foreach ($index["columns"] as $key => $column) {
|
foreach ($index["columns"] as $key => $column) {
|
||||||
echo "<span>" . select_input(
|
echo "<span>" . select_input(
|
||||||
" name='indexes[$j][columns][$i]' onchange=\"" . ($i == count($index["columns"]) ? "indexesAddColumn" : "indexesChangeColumn") . "(this, '" . h(js_escape($jush == "sql" ? "" : $_GET["indexes"] . "_")) . "');\" title='" . lang('Column') . "'",
|
" name='indexes[$j][columns][$i]' title='" . lang('Column') . "'",
|
||||||
($fields ? array_combine($fields, $fields) : $fields),
|
($fields ? array_combine($fields, $fields) : $fields),
|
||||||
$column
|
$column,
|
||||||
|
"partial(" . ($i == count($index["columns"]) ? "indexesAddColumn" : "indexesChangeColumn") . ", '" . js_escape($jush == "sql" ? "" : $_GET["indexes"] . "_") . "')"
|
||||||
);
|
);
|
||||||
echo ($jush == "sql" || $jush == "mssql" ? "<input type='number' name='indexes[$j][lengths][$i]' class='size' value='" . h($index["lengths"][$key]) . "' title='" . lang('Length') . "'>" : "");
|
echo ($jush == "sql" || $jush == "mssql" ? "<input type='number' name='indexes[$j][lengths][$i]' class='size' value='" . h($index["lengths"][$key]) . "' title='" . lang('Length') . "'>" : "");
|
||||||
echo ($jush != "sql" ? checkbox("indexes[$j][descs][$i]", 1, $index["descs"][$key], lang('descending')) : "");
|
echo ($jush != "sql" ? checkbox("indexes[$j][descs][$i]", 1, $index["descs"][$key], lang('descending')) : "");
|
||||||
@@ -131,7 +132,7 @@ foreach ($row["indexes"] as $index) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
echo "<td><input name='indexes[$j][name]' value='" . h($index["name"]) . "' autocapitalize='off' aria-labelledby='label-name'>\n";
|
echo "<td><input name='indexes[$j][name]' value='" . h($index["name"]) . "' autocapitalize='off' aria-labelledby='label-name'>\n";
|
||||||
echo "<td><input type='image' class='icon' name='drop_col[$j]' src='../adminer/static/cross.gif' alt='x' title='" . lang('Remove') . "' onclick=\"return !editingRemoveRow(this, 'indexes\$1[type]');\">\n";
|
echo "<td><input type='image' class='icon' name='drop_col[$j]' src='../adminer/static/cross.gif' alt='x' title='" . lang('Remove') . "'>" . script("qsl('input').onclick = partial(editingRemoveRow, 'indexes\$1[type]');");
|
||||||
}
|
}
|
||||||
$j++;
|
$j++;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -184,7 +184,7 @@ $translations = array(
|
|||||||
'Move to other database' => 'نقل إلى قاعدة بيانات أخرى',
|
'Move to other database' => 'نقل إلى قاعدة بيانات أخرى',
|
||||||
'Move' => 'نقل',
|
'Move' => 'نقل',
|
||||||
'%d item(s) have been affected.' => 'عدد العناصر المعدلة هو %d.',
|
'%d item(s) have been affected.' => 'عدد العناصر المعدلة هو %d.',
|
||||||
'whole result' => 'نتيجة كاملة',
|
'Whole result' => 'نتيجة كاملة',
|
||||||
'Clone' => 'نسخ',
|
'Clone' => 'نسخ',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'لقد تجاوزت العدد الأقصى للحقول. يرجى الرفع من %s.',
|
'Maximum number of allowed fields exceeded. Please increase %s.' => 'لقد تجاوزت العدد الأقصى للحقول. يرجى الرفع من %s.',
|
||||||
'Partition by' => 'مقسم بواسطة',
|
'Partition by' => 'مقسم بواسطة',
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ $translations = array(
|
|||||||
'Logout successful.' => 'Излизането е успешно.',
|
'Logout successful.' => 'Излизането е успешно.',
|
||||||
'Invalid credentials.' => 'Невалидни потребителски данни.',
|
'Invalid credentials.' => 'Невалидни потребителски данни.',
|
||||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Прекалено много неуспешни опити за вход, опитайте пак след %d минута.', 'Прекалено много неуспешни опити за вход, опитайте пак след %d минути.'),
|
'Too many unsuccessful logins, try again in %d minute(s).' => array('Прекалено много неуспешни опити за вход, опитайте пак след %d минута.', 'Прекалено много неуспешни опити за вход, опитайте пак след %d минути.'),
|
||||||
'Master password expired. <a href="https://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.' => 'Главната парола вече е невалидна. <a href="https://www.adminer.org/en/extension/" target="_blank">Изберете</a> %s метод, за да я направите постоянна.',
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Главната парола вече е невалидна. <a href="https://www.adminer.org/en/extension/"%s>Изберете</a> %s метод, за да я направите постоянна.',
|
||||||
'Language' => 'Език',
|
'Language' => 'Език',
|
||||||
'Invalid CSRF token. Send the form again.' => 'Невалиден шифроващ ключ. Попълнете и изпратете формуляра отново.',
|
'Invalid CSRF token. Send the form again.' => 'Невалиден шифроващ ключ. Попълнете и изпратете формуляра отново.',
|
||||||
'If you did not send this request from Adminer then close this page.' => 'Ако не сте изпратили тази заявка през Adminer, затворете тази страница.',
|
'If you did not send this request from Adminer then close this page.' => 'Ако не сте изпратили тази заявка през Adminer, затворете тази страница.',
|
||||||
@@ -245,7 +245,7 @@ $translations = array(
|
|||||||
'last' => 'последен',
|
'last' => 'последен',
|
||||||
'Load more data' => 'Зареждане на повече данни',
|
'Load more data' => 'Зареждане на повече данни',
|
||||||
'Loading' => 'Зареждане',
|
'Loading' => 'Зареждане',
|
||||||
'whole result' => 'пълен резултат',
|
'Whole result' => 'Пълен резултат',
|
||||||
'%d byte(s)' => array('%d байт', '%d байта'),
|
'%d byte(s)' => array('%d байт', '%d байта'),
|
||||||
|
|
||||||
'Import' => 'Импорт',
|
'Import' => 'Импорт',
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ $translations = array(
|
|||||||
'original' => 'প্রকৃত',
|
'original' => 'প্রকৃত',
|
||||||
'Tables have been dropped.' => 'টেবিলসমূহ মুছে ফেলা হয়েছে।',
|
'Tables have been dropped.' => 'টেবিলসমূহ মুছে ফেলা হয়েছে।',
|
||||||
'%d item(s) have been affected.' => '%d টি বিষয়বস্তু প্রভাবিত হয়েছে',
|
'%d item(s) have been affected.' => '%d টি বিষয়বস্তু প্রভাবিত হয়েছে',
|
||||||
'whole result' => 'সম্পূর্ণ ফলাফল',
|
'Whole result' => 'সম্পূর্ণ ফলাফল',
|
||||||
'Clone' => 'ক্লোন',
|
'Clone' => 'ক্লোন',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'অনুমোদিত ফিল্ড এর সর্বাধিক সংখ্যা অতিক্রম করে গেছে। অনুগ্রহপূর্বক %s বৃদ্ধি করুন।',
|
'Maximum number of allowed fields exceeded. Please increase %s.' => 'অনুমোদিত ফিল্ড এর সর্বাধিক সংখ্যা অতিক্রম করে গেছে। অনুগ্রহপূর্বক %s বৃদ্ধি করুন।',
|
||||||
'Partition by' => 'পার্টিশন যার মাধ্যমে',
|
'Partition by' => 'পার্টিশন যার মাধ্যমে',
|
||||||
|
|||||||
@@ -234,7 +234,7 @@ $translations = array(
|
|||||||
'last' => 'poslijednja',
|
'last' => 'poslijednja',
|
||||||
'Loading' => 'Učitavam',
|
'Loading' => 'Učitavam',
|
||||||
'Load more data' => 'Učitavam još podataka',
|
'Load more data' => 'Učitavam još podataka',
|
||||||
'whole result' => 'ceo rezultat',
|
'Whole result' => 'Ceo rezultat',
|
||||||
'%d byte(s)' => array('%d bajt', '%d bajta', '%d bajtova'),
|
'%d byte(s)' => array('%d bajt', '%d bajta', '%d bajtova'),
|
||||||
|
|
||||||
'Import' => 'Uvoz',
|
'Import' => 'Uvoz',
|
||||||
|
|||||||
@@ -185,7 +185,7 @@ $translations = array(
|
|||||||
'Save and continue edit' => 'Desa i segueix editant',
|
'Save and continue edit' => 'Desa i segueix editant',
|
||||||
'original' => 'original',
|
'original' => 'original',
|
||||||
'%d item(s) have been affected.' => array('S\'ha modificat %d element.', 'S\'han modificat %d elements.'),
|
'%d item(s) have been affected.' => array('S\'ha modificat %d element.', 'S\'han modificat %d elements.'),
|
||||||
'whole result' => 'tots els resultats',
|
'Whole result' => 'Tots els resultats',
|
||||||
'Tables have been dropped.' => 'S\'han suprimit les taules.',
|
'Tables have been dropped.' => 'S\'han suprimit les taules.',
|
||||||
'Clone' => 'Clona',
|
'Clone' => 'Clona',
|
||||||
'Partition by' => 'Fes particions segons',
|
'Partition by' => 'Fes particions segons',
|
||||||
|
|||||||
@@ -10,17 +10,20 @@ $translations = array(
|
|||||||
'Logout' => 'Odhlásit',
|
'Logout' => 'Odhlásit',
|
||||||
'Logged as: %s' => 'Přihlášen jako: %s',
|
'Logged as: %s' => 'Přihlášen jako: %s',
|
||||||
'Logout successful.' => 'Odhlášení proběhlo v pořádku.',
|
'Logout successful.' => 'Odhlášení proběhlo v pořádku.',
|
||||||
|
'Thanks for using Adminer, consider <a href="%s">donating</a>.' => 'Díky za použití Admineru, zvažte <a href="%s">příspěvek</a>.',
|
||||||
'Invalid credentials.' => 'Neplatné přihlašovací údaje.',
|
'Invalid credentials.' => 'Neplatné přihlašovací údaje.',
|
||||||
'<a href="https://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to use SQLite.' => 'Pro přihlášení k SQLite <a href="https://www.adminer.org/cs/extension/" target="_blank">implementujte</a> metodu %s.',
|
'<a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to use SQLite.' => 'Pro přihlášení k SQLite <a href="https://www.adminer.org/cs/extension/"%s>implementujte</a> metodu %s.',
|
||||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Příliš mnoho pokusů o přihlášení, zkuste to znovu za %d minutu.', 'Příliš mnoho pokusů o přihlášení, zkuste to znovu za %d minuty.', 'Příliš mnoho pokusů o přihlášení, zkuste to znovu za %d minut.'),
|
'Too many unsuccessful logins, try again in %d minute(s).' => array('Příliš mnoho pokusů o přihlášení, zkuste to znovu za %d minutu.', 'Příliš mnoho pokusů o přihlášení, zkuste to znovu za %d minuty.', 'Příliš mnoho pokusů o přihlášení, zkuste to znovu za %d minut.'),
|
||||||
'Master password expired. <a href="https://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.' => 'Platnost hlavního hesla vypršela. <a href="https://www.adminer.org/cs/extension/" target="_blank">Implementujte</a> metodu %s, aby platilo stále.',
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Platnost hlavního hesla vypršela. <a href="https://www.adminer.org/cs/extension/"%s>Implementujte</a> metodu %s, aby platilo stále.',
|
||||||
'Language' => 'Jazyk',
|
'Language' => 'Jazyk',
|
||||||
'Invalid CSRF token. Send the form again.' => 'Neplatný token CSRF. Odešlete formulář znovu.',
|
'Invalid CSRF token. Send the form again.' => 'Neplatný token CSRF. Odešlete formulář znovu.',
|
||||||
'If you did not send this request from Adminer then close this page.' => 'Pokud jste tento požadavek neposlali z Adminera, tak tuto stránku zavřete.',
|
'If you did not send this request from Adminer then close this page.' => 'Pokud jste tento požadavek neposlali z Adminera, tak tuto stránku zavřete.',
|
||||||
'No extension' => 'Žádné rozšíření',
|
'No extension' => 'Žádné rozšíření',
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'Není dostupné žádné z podporovaných PHP rozšíření (%s).',
|
'None of the supported PHP extensions (%s) are available.' => 'Není dostupné žádné z podporovaných PHP rozšíření (%s).',
|
||||||
|
'Connecting to privileged ports is not allowed.' => 'Připojování k privilegovaným portům není povoleno.',
|
||||||
'Session support must be enabled.' => 'Session proměnné musí být povolené.',
|
'Session support must be enabled.' => 'Session proměnné musí být povolené.',
|
||||||
'Session expired, please login again.' => 'Session vypršela, přihlašte se prosím znovu.',
|
'Session expired, please login again.' => 'Session vypršela, přihlašte se prosím znovu.',
|
||||||
|
'The action will be performed after successful login with the same credentials.' => 'Akce bude provedena po úspěšném přihlášení se stejnými přihlašovacími údaji.',
|
||||||
'%s version: %s through PHP extension %s' => 'Verze %s: %s přes PHP rozšíření %s',
|
'%s version: %s through PHP extension %s' => 'Verze %s: %s přes PHP rozšíření %s',
|
||||||
'Refresh' => 'Obnovit',
|
'Refresh' => 'Obnovit',
|
||||||
|
|
||||||
@@ -45,15 +48,12 @@ $translations = array(
|
|||||||
'Variables' => 'Proměnné',
|
'Variables' => 'Proměnné',
|
||||||
'Status' => 'Stav',
|
'Status' => 'Stav',
|
||||||
|
|
||||||
'Replication' => 'Replikace',
|
|
||||||
'Master status' => 'Master status',
|
|
||||||
'Slave status' => 'Slave status',
|
|
||||||
|
|
||||||
'SQL command' => 'SQL příkaz',
|
'SQL command' => 'SQL příkaz',
|
||||||
'%d query(s) executed OK.' => array('%d příkaz proběhl v pořádku.', '%d příkazy proběhly v pořádku.', '%d příkazů proběhlo v pořádku.'),
|
'%d query(s) executed OK.' => array('%d příkaz proběhl v pořádku.', '%d příkazy proběhly v pořádku.', '%d příkazů proběhlo v pořádku.'),
|
||||||
'Query executed OK, %d row(s) affected.' => array('Příkaz proběhl v pořádku, byl změněn %d záznam.', 'Příkaz proběhl v pořádku, byly změněny %d záznamy.', 'Příkaz proběhl v pořádku, bylo změněno %d záznamů.'),
|
'Query executed OK, %d row(s) affected.' => array('Příkaz proběhl v pořádku, byl změněn %d záznam.', 'Příkaz proběhl v pořádku, byly změněny %d záznamy.', 'Příkaz proběhl v pořádku, bylo změněno %d záznamů.'),
|
||||||
'No commands to execute.' => 'Žádné příkazy k vykonání.',
|
'No commands to execute.' => 'Žádné příkazy k vykonání.',
|
||||||
'Error in query' => 'Chyba v dotazu',
|
'Error in query' => 'Chyba v dotazu',
|
||||||
|
'Warnings' => 'Varování',
|
||||||
'ATTACH queries are not supported.' => 'Dotazy ATTACH nejsou podporované.',
|
'ATTACH queries are not supported.' => 'Dotazy ATTACH nejsou podporované.',
|
||||||
'Execute' => 'Provést',
|
'Execute' => 'Provést',
|
||||||
'Stop on error' => 'Zastavit při chybě',
|
'Stop on error' => 'Zastavit při chybě',
|
||||||
@@ -85,6 +85,7 @@ $translations = array(
|
|||||||
|
|
||||||
'Database' => 'Databáze',
|
'Database' => 'Databáze',
|
||||||
'database' => 'databáze',
|
'database' => 'databáze',
|
||||||
|
'DB' => 'DB',
|
||||||
'Use' => 'Vybrat',
|
'Use' => 'Vybrat',
|
||||||
'Select database' => 'Vybrat databázi',
|
'Select database' => 'Vybrat databázi',
|
||||||
'Invalid database.' => 'Nesprávná databáze.',
|
'Invalid database.' => 'Nesprávná databáze.',
|
||||||
@@ -173,6 +174,7 @@ $translations = array(
|
|||||||
'Default value' => 'Výchozí hodnota',
|
'Default value' => 'Výchozí hodnota',
|
||||||
'Default values' => 'Výchozí hodnoty',
|
'Default values' => 'Výchozí hodnoty',
|
||||||
'Drop' => 'Odstranit',
|
'Drop' => 'Odstranit',
|
||||||
|
'Drop %s?' => 'Odstranit %s?',
|
||||||
'Are you sure?' => 'Opravdu?',
|
'Are you sure?' => 'Opravdu?',
|
||||||
'Size' => 'Velikost',
|
'Size' => 'Velikost',
|
||||||
'Compute' => 'Spočítat',
|
'Compute' => 'Spočítat',
|
||||||
@@ -251,7 +253,7 @@ $translations = array(
|
|||||||
'last' => 'poslední',
|
'last' => 'poslední',
|
||||||
'Load more data' => 'Nahrát další data',
|
'Load more data' => 'Nahrát další data',
|
||||||
'Loading' => 'Nahrává se',
|
'Loading' => 'Nahrává se',
|
||||||
'whole result' => 'celý výsledek',
|
'Whole result' => 'Celý výsledek',
|
||||||
'%d byte(s)' => array('%d bajt', '%d bajty', '%d bajtů'),
|
'%d byte(s)' => array('%d bajt', '%d bajty', '%d bajtů'),
|
||||||
|
|
||||||
'Import' => 'Import',
|
'Import' => 'Import',
|
||||||
@@ -339,8 +341,4 @@ $translations = array(
|
|||||||
'Type has been dropped.' => 'Typ byl odstraněn.',
|
'Type has been dropped.' => 'Typ byl odstraněn.',
|
||||||
'Type has been created.' => 'Typ byl vytvořen.',
|
'Type has been created.' => 'Typ byl vytvořen.',
|
||||||
'Alter type' => 'Pozměnit typ',
|
'Alter type' => 'Pozměnit typ',
|
||||||
|
|
||||||
'Replication' => null,
|
|
||||||
'Master status' => null,
|
|
||||||
'Slave status' => null,
|
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ $translations = array(
|
|||||||
'Logged as: %s' => 'Logget ind som: %s',
|
'Logged as: %s' => 'Logget ind som: %s',
|
||||||
'Logout successful.' => 'Log af vellykket.',
|
'Logout successful.' => 'Log af vellykket.',
|
||||||
'Invalid credentials.' => 'Ugyldige log ind oplysninger.',
|
'Invalid credentials.' => 'Ugyldige log ind oplysninger.',
|
||||||
'Master password expired. <a href="https://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.' => 'Master-kodeordet er udløbet. <a href="https://www.adminer.org/en/extension/" target="_blank">Implementer</a> en metode for %s for at gøre det permanent.',
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Master-kodeordet er udløbet. <a href="https://www.adminer.org/en/extension/"%s>Implementer</a> en metode for %s for at gøre det permanent.',
|
||||||
'Language' => 'Sprog',
|
'Language' => 'Sprog',
|
||||||
'Invalid CSRF token. Send the form again.' => 'Ugyldigt CSRF-token - Genindsend formen.',
|
'Invalid CSRF token. Send the form again.' => 'Ugyldigt CSRF-token - Genindsend formen.',
|
||||||
'No extension' => 'Ingen udvidelse',
|
'No extension' => 'Ingen udvidelse',
|
||||||
@@ -212,7 +212,7 @@ $translations = array(
|
|||||||
'last' => 'sidste',
|
'last' => 'sidste',
|
||||||
'Load more data' => 'Indlæs mere data',
|
'Load more data' => 'Indlæs mere data',
|
||||||
'Loading' => 'Indlæser',
|
'Loading' => 'Indlæser',
|
||||||
'whole result' => 'hele resultatet',
|
'Whole result' => 'Hele resultatet',
|
||||||
'%d byte(s)' => array('%d byte', '%d bytes'),
|
'%d byte(s)' => array('%d byte', '%d bytes'),
|
||||||
'Import' => 'Importer',
|
'Import' => 'Importer',
|
||||||
'%d row(s) have been imported.' => array('%d række er importeret.', '%d rækker er importeret.'),
|
'%d row(s) have been imported.' => array('%d række er importeret.', '%d rækker er importeret.'),
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ $translations = array(
|
|||||||
'original' => 'Original',
|
'original' => 'Original',
|
||||||
'Tables have been dropped.' => 'Tabellen wurden entfernt (drop).',
|
'Tables have been dropped.' => 'Tabellen wurden entfernt (drop).',
|
||||||
'%d item(s) have been affected.' => '%d Artikel betroffen.',
|
'%d item(s) have been affected.' => '%d Artikel betroffen.',
|
||||||
'whole result' => 'Gesamtergebnis',
|
'Whole result' => 'Gesamtergebnis',
|
||||||
'Clone' => 'Klonen',
|
'Clone' => 'Klonen',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Die maximal erlaubte Anzahl der Felder ist überschritten. Bitte %s erhöhen.',
|
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Die maximal erlaubte Anzahl der Felder ist überschritten. Bitte %s erhöhen.',
|
||||||
'Partition by' => 'Partitionieren um',
|
'Partition by' => 'Partitionieren um',
|
||||||
@@ -283,6 +283,6 @@ $translations = array(
|
|||||||
'Saving' => 'Speichere',
|
'Saving' => 'Speichere',
|
||||||
'yes' => 'ja',
|
'yes' => 'ja',
|
||||||
'no' => 'nein',
|
'no' => 'nein',
|
||||||
'Master password expired. <a href="https://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.' => 'Das Master-Passwort ist abgelaufen. <a href="https://www.adminer.org/de/extension/" target="_blank">Implementieren</a> Sie die %s Methode, um es permanent zu machen.',
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Das Master-Passwort ist abgelaufen. <a href="https://www.adminer.org/de/extension/"%s>Implementieren</a> Sie die %s Methode, um es permanent zu machen.',
|
||||||
'%d / ' => '%d / ',
|
'%d / ' => '%d / ',
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ $translations = array(
|
|||||||
'Logout successful.' => 'Αποσυνδεθήκατε με επιτυχία.',
|
'Logout successful.' => 'Αποσυνδεθήκατε με επιτυχία.',
|
||||||
'Invalid credentials.' => 'Εσφαλμένα Διαπιστευτήρια.',
|
'Invalid credentials.' => 'Εσφαλμένα Διαπιστευτήρια.',
|
||||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Επανηλημμένες ανεπιτυχείς προσπάθειες σύνδεσης, δοκιμάστε ξανά σε %s λεπτό.', 'Επανηλημμένες ανεπιτυχείς προσπάθειες σύνδεσης, δοκιμάστε ξανά σε %s λεπτά.'),
|
'Too many unsuccessful logins, try again in %d minute(s).' => array('Επανηλημμένες ανεπιτυχείς προσπάθειες σύνδεσης, δοκιμάστε ξανά σε %s λεπτό.', 'Επανηλημμένες ανεπιτυχείς προσπάθειες σύνδεσης, δοκιμάστε ξανά σε %s λεπτά.'),
|
||||||
'Master password expired. <a href="https://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.' => 'Έλειξε ο Κύριος Κωδικός. <a href="https://www.adminer.org/en/extension/" target="_blank">Ενεργοποιήστε</a> τη μέθοδο %s για να τον κάνετε μόνιμο.',
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Έλειξε ο Κύριος Κωδικός. <a href="https://www.adminer.org/en/extension/"%s>Ενεργοποιήστε</a> τη μέθοδο %s για να τον κάνετε μόνιμο.',
|
||||||
'Language' => 'Γλώσσα',
|
'Language' => 'Γλώσσα',
|
||||||
'Invalid CSRF token. Send the form again.' => 'Άκυρο κουπόνι CSRF. Στείλτε τη φόρμα ξανά.',
|
'Invalid CSRF token. Send the form again.' => 'Άκυρο κουπόνι CSRF. Στείλτε τη φόρμα ξανά.',
|
||||||
'If you did not send this request from Adminer then close this page.' => 'Αν δε στείλατε αυτό το αίτημα από το Adminer, τότε κλείστε αυτή τη σελίδα.',
|
'If you did not send this request from Adminer then close this page.' => 'Αν δε στείλατε αυτό το αίτημα από το Adminer, τότε κλείστε αυτή τη σελίδα.',
|
||||||
@@ -149,7 +149,7 @@ $translations = array(
|
|||||||
'Table' => 'Πίνακας',
|
'Table' => 'Πίνακας',
|
||||||
'No tables.' => 'Χωρίς πίνακες.',
|
'No tables.' => 'Χωρίς πίνακες.',
|
||||||
'Alter table' => 'Τροποποίηση πίνακα',
|
'Alter table' => 'Τροποποίηση πίνακα',
|
||||||
'Create table' => 'Δημιουργία πίνακα',
|
'Create table' => 'Δημιουργία πίνακα',
|
||||||
'Table has been dropped.' => 'Ο πίνακας διαγράφηκε.',
|
'Table has been dropped.' => 'Ο πίνακας διαγράφηκε.',
|
||||||
'Tables have been dropped.' => 'Οι πινακες διαγράφηκαν.',
|
'Tables have been dropped.' => 'Οι πινακες διαγράφηκαν.',
|
||||||
'Tables have been optimized.' => 'Οι πίνακες βελτιστοποιήθηκαν.',
|
'Tables have been optimized.' => 'Οι πίνακες βελτιστοποιήθηκαν.',
|
||||||
@@ -246,7 +246,7 @@ $translations = array(
|
|||||||
'last' => 'τελευταία',
|
'last' => 'τελευταία',
|
||||||
'Load more data' => 'Φόρτωση κι άλλων δεδομένων',
|
'Load more data' => 'Φόρτωση κι άλλων δεδομένων',
|
||||||
'Loading' => 'Φορτώνει',
|
'Loading' => 'Φορτώνει',
|
||||||
'whole result' => 'όλο το αποτέλεσμα',
|
'Whole result' => 'Όλο το αποτέλεσμα',
|
||||||
'%d byte(s)' => array('%d byte', '%d bytes'),
|
'%d byte(s)' => array('%d byte', '%d bytes'),
|
||||||
|
|
||||||
'Import' => 'Εισαγωγή',
|
'Import' => 'Εισαγωγή',
|
||||||
|
|||||||
@@ -44,9 +44,9 @@ $translations = array(
|
|||||||
'Delete' => 'Eliminar',
|
'Delete' => 'Eliminar',
|
||||||
'Database' => 'Base de datos',
|
'Database' => 'Base de datos',
|
||||||
'Routines' => 'Procedimientos',
|
'Routines' => 'Procedimientos',
|
||||||
'Indexes have been altered.' => 'Indices actualizados.',
|
'Indexes have been altered.' => 'Índices actualizados.',
|
||||||
'Indexes' => 'Indices',
|
'Indexes' => 'Índices',
|
||||||
'Alter indexes' => 'Modificar indices',
|
'Alter indexes' => 'Modificar índices',
|
||||||
'Add next' => 'Agregar',
|
'Add next' => 'Agregar',
|
||||||
'Language' => 'Idioma',
|
'Language' => 'Idioma',
|
||||||
'Select' => 'Mostrar',
|
'Select' => 'Mostrar',
|
||||||
@@ -77,7 +77,7 @@ $translations = array(
|
|||||||
'File uploads are disabled.' => 'Importación de archivos deshablilitada.',
|
'File uploads are disabled.' => 'Importación de archivos deshablilitada.',
|
||||||
'Routine has been called, %d row(s) affected.' => array('Consulta ejecutada, %d registro afectado.', 'Consulta ejecutada, %d registros afectados.'),
|
'Routine has been called, %d row(s) affected.' => array('Consulta ejecutada, %d registro afectado.', 'Consulta ejecutada, %d registros afectados.'),
|
||||||
'Call' => 'Llamar',
|
'Call' => 'Llamar',
|
||||||
'No extension' => 'No hay extension',
|
'No extension' => 'No hay extensión',
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'Ninguna de las extensiones PHP soportadas (%s) está disponible.',
|
'None of the supported PHP extensions (%s) are available.' => 'Ninguna de las extensiones PHP soportadas (%s) está disponible.',
|
||||||
'Session support must be enabled.' => 'Deben estar habilitadas las sesiones.',
|
'Session support must be enabled.' => 'Deben estar habilitadas las sesiones.',
|
||||||
'Session expired, please login again.' => 'Sesión caducada, por favor escriba su clave de nuevo.',
|
'Session expired, please login again.' => 'Sesión caducada, por favor escriba su clave de nuevo.',
|
||||||
@@ -113,7 +113,7 @@ $translations = array(
|
|||||||
'Routine has been dropped.' => 'Procedimiento eliminado.',
|
'Routine has been dropped.' => 'Procedimiento eliminado.',
|
||||||
'Routine has been altered.' => 'Procedimiento modificado.',
|
'Routine has been altered.' => 'Procedimiento modificado.',
|
||||||
'Routine has been created.' => 'Procedimiento creado.',
|
'Routine has been created.' => 'Procedimiento creado.',
|
||||||
'Alter function' => 'Modificar Función',
|
'Alter function' => 'Modificar función',
|
||||||
'Alter procedure' => 'Modificar procedimiento',
|
'Alter procedure' => 'Modificar procedimiento',
|
||||||
'Return type' => 'Tipo de valor de vuelta',
|
'Return type' => 'Tipo de valor de vuelta',
|
||||||
'Add trigger' => 'Agregar disparador',
|
'Add trigger' => 'Agregar disparador',
|
||||||
@@ -127,7 +127,7 @@ $translations = array(
|
|||||||
'%s version: %s through PHP extension %s' => 'Versión %s: %s a través de la extensión de PHP %s',
|
'%s version: %s through PHP extension %s' => 'Versión %s: %s a través de la extensión de PHP %s',
|
||||||
'%d row(s)' => array('%d registro', '%d registros'),
|
'%d row(s)' => array('%d registro', '%d registros'),
|
||||||
'Remove' => 'Eliminar',
|
'Remove' => 'Eliminar',
|
||||||
'Are you sure?' => 'Está seguro?',
|
'Are you sure?' => '¿Está seguro?',
|
||||||
'Privileges' => 'Privilegios',
|
'Privileges' => 'Privilegios',
|
||||||
'Create user' => 'Crear Usuario',
|
'Create user' => 'Crear Usuario',
|
||||||
'User has been dropped.' => 'Usuario eliminado.',
|
'User has been dropped.' => 'Usuario eliminado.',
|
||||||
@@ -139,7 +139,7 @@ $translations = array(
|
|||||||
'Grant' => 'Conceder',
|
'Grant' => 'Conceder',
|
||||||
'Revoke' => 'Impedir',
|
'Revoke' => 'Impedir',
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST data demasiado grande. Reduzca el tamaño o aumente la directiva de configuración %s.',
|
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST data demasiado grande. Reduzca el tamaño o aumente la directiva de configuración %s.',
|
||||||
'Logged as: %s' => 'Logeado como: %s',
|
'Logged as: %s' => 'Logueado como: %s',
|
||||||
'Move up' => 'Mover arriba',
|
'Move up' => 'Mover arriba',
|
||||||
'Move down' => 'Mover abajo',
|
'Move down' => 'Mover abajo',
|
||||||
'Functions' => 'Funciones',
|
'Functions' => 'Funciones',
|
||||||
@@ -186,12 +186,12 @@ $translations = array(
|
|||||||
'original' => 'original',
|
'original' => 'original',
|
||||||
'Tables have been dropped.' => 'Tablas eliminadas.',
|
'Tables have been dropped.' => 'Tablas eliminadas.',
|
||||||
'%d item(s) have been affected.' => array('%d elemento afectado.', '%d elementos afectados.'),
|
'%d item(s) have been affected.' => array('%d elemento afectado.', '%d elementos afectados.'),
|
||||||
'whole result' => 'resultado completo',
|
'Whole result' => 'Resultado completo',
|
||||||
'Clone' => 'Clonar',
|
'Clone' => 'Clonar',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Excedida la cantidad máxima de campos permitidos. Por favor aumente %s.',
|
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Excedida la cantidad máxima de campos permitidos. Por favor aumente %s.',
|
||||||
'Partition by' => 'Particionar por',
|
'Partition by' => 'Particionar por',
|
||||||
'Partitions' => 'Particiones',
|
'Partitions' => 'Particiones',
|
||||||
'Partition name' => 'Nombre de Partición',
|
'Partition name' => 'Nombre de partición',
|
||||||
'Values' => 'Valores',
|
'Values' => 'Valores',
|
||||||
'%d row(s) have been imported.' => array('%d registro importado.', '%d registros importados.'),
|
'%d row(s) have been imported.' => array('%d registro importado.', '%d registros importados.'),
|
||||||
'anywhere' => 'donde sea',
|
'anywhere' => 'donde sea',
|
||||||
@@ -248,16 +248,16 @@ $translations = array(
|
|||||||
'System' => 'Motor de base de datos',
|
'System' => 'Motor de base de datos',
|
||||||
'Select data' => 'Visualizar contenido',
|
'Select data' => 'Visualizar contenido',
|
||||||
'Show structure' => 'Mostrar estructura',
|
'Show structure' => 'Mostrar estructura',
|
||||||
'empty' => 'ningúno',
|
'empty' => 'ninguno',
|
||||||
'Network' => 'Red',
|
'Network' => 'Red',
|
||||||
'Geometry' => 'Geometría',
|
'Geometry' => 'Geometría',
|
||||||
'File exists.' => 'Ese archivo ya existe.',
|
'File exists.' => 'Ese archivo ya existe.',
|
||||||
'Attachments' => 'Adjuntos',
|
'Attachments' => 'Adjuntos',
|
||||||
'%d query(s) executed OK.' => array('%d sentencia sql ejecutada correctamente.', '%d sentencias sql ejecutadas correctamente.'),
|
'%d query(s) executed OK.' => array('%d sentencia SQL ejecutada correctamente.', '%d sentencias SQL ejecutadas correctamente.'),
|
||||||
'Show only errors' => 'Mostrar solamente errores',
|
'Show only errors' => 'Mostrar solamente errores',
|
||||||
'Refresh' => 'Refrescar',
|
'Refresh' => 'Refrescar',
|
||||||
'Invalid schema.' => 'Esquema inválido.',
|
'Invalid schema.' => 'Esquema inválido.',
|
||||||
'Please use one of the extensions %s.' => 'Por favor use una de las extensiones %s.',
|
'Please use one of the extensions %s.' => 'Por favor, use una de las extensiones %s.',
|
||||||
'now' => 'ahora',
|
'now' => 'ahora',
|
||||||
'ltr' => 'ltr',
|
'ltr' => 'ltr',
|
||||||
'Tables have been copied.' => 'Tablas copiadas.',
|
'Tables have been copied.' => 'Tablas copiadas.',
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ $translations = array(
|
|||||||
'Move to other database' => 'Liiguta teise andmebaasi',
|
'Move to other database' => 'Liiguta teise andmebaasi',
|
||||||
'Move' => 'Liiguta',
|
'Move' => 'Liiguta',
|
||||||
'%d item(s) have been affected.' => 'Mõjutatud kirjeid: %d.',
|
'%d item(s) have been affected.' => 'Mõjutatud kirjeid: %d.',
|
||||||
'whole result' => 'Täielikud tulemused',
|
'Whole result' => 'Täielikud tulemused',
|
||||||
'Clone' => 'Kloon',
|
'Clone' => 'Kloon',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Maksimaalne väljade arv ületatud. Palun suurendage %s.',
|
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Maksimaalne väljade arv ületatud. Palun suurendage %s.',
|
||||||
'Partition by' => 'Partitsiooni',
|
'Partition by' => 'Partitsiooni',
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ $translations = array(
|
|||||||
'Logout successful.' => 'با موفقیت خارج شدید.',
|
'Logout successful.' => 'با موفقیت خارج شدید.',
|
||||||
'Invalid credentials.' => 'اعتبار سنجی نامعتبر.',
|
'Invalid credentials.' => 'اعتبار سنجی نامعتبر.',
|
||||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('ورودهای ناموفق بیش از حد، %d دقیقه دیگر تلاش نمایید.', 'ورودهای ناموفق بیش از حد، %d دقیقه دیگر تلاش نمایید.'),
|
'Too many unsuccessful logins, try again in %d minute(s).' => array('ورودهای ناموفق بیش از حد، %d دقیقه دیگر تلاش نمایید.', 'ورودهای ناموفق بیش از حد، %d دقیقه دیگر تلاش نمایید.'),
|
||||||
'Master password expired. <a href="https://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.' => 'رمز اصلی باطل شده است. روش %s را <a href="https://www.adminer.org/en/extension/" target="_blank">پیاده سازی</a> کرده تا آن را دائمی سازید.',
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'رمز اصلی باطل شده است. روش %s را <a href="https://www.adminer.org/en/extension/"%s>پیاده سازی</a> کرده تا آن را دائمی سازید.',
|
||||||
'Language' => 'زبان',
|
'Language' => 'زبان',
|
||||||
'Invalid CSRF token. Send the form again.' => 'CSRF token نامعتبر است. دوباره سعی کنید.',
|
'Invalid CSRF token. Send the form again.' => 'CSRF token نامعتبر است. دوباره سعی کنید.',
|
||||||
'No extension' => 'پسوند نامعتبر',
|
'No extension' => 'پسوند نامعتبر',
|
||||||
@@ -244,7 +244,7 @@ $translations = array(
|
|||||||
'last' => 'آخری',
|
'last' => 'آخری',
|
||||||
'Load more data' => 'بارگزاری اطلاعات بیشتر',
|
'Load more data' => 'بارگزاری اطلاعات بیشتر',
|
||||||
'Loading' => 'در حال بارگزاری',
|
'Loading' => 'در حال بارگزاری',
|
||||||
'whole result' => 'همه نتایج',
|
'Whole result' => 'همه نتایج',
|
||||||
'%d byte(s)' => array('%d بایت', '%d بایت'),
|
'%d byte(s)' => array('%d بایت', '%d بایت'),
|
||||||
|
|
||||||
'Import' => 'وارد کردن',
|
'Import' => 'وارد کردن',
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ $translations = array(
|
|||||||
'Logout successful.' => 'Uloskirjautuminen onnistui.',
|
'Logout successful.' => 'Uloskirjautuminen onnistui.',
|
||||||
'Invalid credentials.' => 'Virheelliset kirjautumistiedot.',
|
'Invalid credentials.' => 'Virheelliset kirjautumistiedot.',
|
||||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Liian monta epäonnistunutta sisäänkirjautumisyritystä, kokeile uudestaan %d minuutin kuluttua.', 'Liian monta epäonnistunutta sisäänkirjautumisyritystä, kokeile uudestaan %d minuutin kuluttua.'),
|
'Too many unsuccessful logins, try again in %d minute(s).' => array('Liian monta epäonnistunutta sisäänkirjautumisyritystä, kokeile uudestaan %d minuutin kuluttua.', 'Liian monta epäonnistunutta sisäänkirjautumisyritystä, kokeile uudestaan %d minuutin kuluttua.'),
|
||||||
'Master password expired. <a href="https://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.' => 'Master-salasana ei ole enää voimassa. <a href="https://www.adminer.org/en/extension/" target="_blank">Toteuta</a> %s-metodi sen tekemiseksi pysyväksi.',
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Master-salasana ei ole enää voimassa. <a href="https://www.adminer.org/en/extension/"%s>Toteuta</a> %s-metodi sen tekemiseksi pysyväksi.',
|
||||||
'Language' => 'Kieli',
|
'Language' => 'Kieli',
|
||||||
'Invalid CSRF token. Send the form again.' => 'Virheellinen CSRF-vastamerkki. Lähetä lomake uudelleen.',
|
'Invalid CSRF token. Send the form again.' => 'Virheellinen CSRF-vastamerkki. Lähetä lomake uudelleen.',
|
||||||
'If you did not send this request from Adminer then close this page.' => 'Jollet lähettänyt tämä pyyntö Adminerista, sulje tämä sivu.',
|
'If you did not send this request from Adminer then close this page.' => 'Jollet lähettänyt tämä pyyntö Adminerista, sulje tämä sivu.',
|
||||||
@@ -246,7 +246,7 @@ $translations = array(
|
|||||||
'last' => 'viimeinen',
|
'last' => 'viimeinen',
|
||||||
'Load more data' => 'Lataa lisää dataa',
|
'Load more data' => 'Lataa lisää dataa',
|
||||||
'Loading' => 'Ladataan',
|
'Loading' => 'Ladataan',
|
||||||
'whole result' => 'koko tulos',
|
'Whole result' => 'Koko tulos',
|
||||||
'%d byte(s)' => array('%d tavu', '%d tavua'),
|
'%d byte(s)' => array('%d tavu', '%d tavua'),
|
||||||
|
|
||||||
'Import' => 'Tuonti',
|
'Import' => 'Tuonti',
|
||||||
|
|||||||
@@ -184,7 +184,7 @@ $translations = array(
|
|||||||
'Move to other database' => 'Déplacer vers une autre base de données',
|
'Move to other database' => 'Déplacer vers une autre base de données',
|
||||||
'Move' => 'Déplacer',
|
'Move' => 'Déplacer',
|
||||||
'%d item(s) have been affected.' => array('%d élément a été modifié.', '%d éléments ont été modifiés.'),
|
'%d item(s) have been affected.' => array('%d élément a été modifié.', '%d éléments ont été modifiés.'),
|
||||||
'whole result' => 'résultat entier',
|
'Whole result' => 'Résultat entier',
|
||||||
'Clone' => 'Cloner',
|
'Clone' => 'Cloner',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Le nombre maximum de champs est dépassé. Veuillez augmenter %s.',
|
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Le nombre maximum de champs est dépassé. Veuillez augmenter %s.',
|
||||||
'Partition by' => 'Partitionner par',
|
'Partition by' => 'Partitionner par',
|
||||||
@@ -274,7 +274,7 @@ $translations = array(
|
|||||||
'File must be in UTF-8 encoding.' => 'Les fichiers doivent être encodés en UTF-8.',
|
'File must be in UTF-8 encoding.' => 'Les fichiers doivent être encodés en UTF-8.',
|
||||||
'Full table scan' => 'Scan de toute la table',
|
'Full table scan' => 'Scan de toute la table',
|
||||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Trop de connexions échouées, essayez à nouveau dans %d minute.', 'Trop de connexions échouées, essayez à nouveau dans %d minutes.'),
|
'Too many unsuccessful logins, try again in %d minute(s).' => array('Trop de connexions échouées, essayez à nouveau dans %d minute.', 'Trop de connexions échouées, essayez à nouveau dans %d minutes.'),
|
||||||
'Master password expired. <a href="https://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.' => 'Le mot de passe a expiré. <a href="https://www.adminer.org/en/extension/" target="_blank">Implémentez</a> la méthode %s afin de le rendre permanent.',
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Le mot de passe a expiré. <a href="https://www.adminer.org/en/extension/"%s>Implémentez</a> la méthode %s afin de le rendre permanent.',
|
||||||
'You can upload a big SQL file via FTP and import it from server.' => 'Vous pouvez uploader un gros fichier SQL par FTP et ensuite l\'importer depuis le serveur.',
|
'You can upload a big SQL file via FTP and import it from server.' => 'Vous pouvez uploader un gros fichier SQL par FTP et ensuite l\'importer depuis le serveur.',
|
||||||
'Size' => 'Taille',
|
'Size' => 'Taille',
|
||||||
'Compute' => 'Calcul',
|
'Compute' => 'Calcul',
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ $translations = array(
|
|||||||
'original' => 'orixinal',
|
'original' => 'orixinal',
|
||||||
'Tables have been dropped.' => 'Elimináronse as táboas.',
|
'Tables have been dropped.' => 'Elimináronse as táboas.',
|
||||||
'%d item(s) have been affected.' => array('%d elemento afectado.', '%d elementos afectados.'),
|
'%d item(s) have been affected.' => array('%d elemento afectado.', '%d elementos afectados.'),
|
||||||
'whole result' => 'resultado completo',
|
'Whole result' => 'Resultado completo',
|
||||||
'Clone' => 'Clonar',
|
'Clone' => 'Clonar',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Excedida o número máximo de campos permitidos. Por favor aumente %s.',
|
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Excedida o número máximo de campos permitidos. Por favor aumente %s.',
|
||||||
'Partition by' => 'Particionar por',
|
'Partition by' => 'Particionar por',
|
||||||
@@ -278,7 +278,7 @@ $translations = array(
|
|||||||
'Default value' => 'Valor por defecto',
|
'Default value' => 'Valor por defecto',
|
||||||
'Full table scan' => 'Escaneo completo da táboa',
|
'Full table scan' => 'Escaneo completo da táboa',
|
||||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Demasiados intentos de conexión, intentao de novo en %d minuto', 'Demasiados intentos de conexión, intentao de novo en %d minutos'),
|
'Too many unsuccessful logins, try again in %d minute(s).' => array('Demasiados intentos de conexión, intentao de novo en %d minuto', 'Demasiados intentos de conexión, intentao de novo en %d minutos'),
|
||||||
'Master password expired. <a href="https://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.' => 'O contrasinal principal caducou. <a href="https://www.adminer.org/en/extension/" target="_blank">Implementa</a> o método %s para facelo permanente.',
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'O contrasinal principal caducou. <a href="https://www.adminer.org/en/extension/"%s>Implementa</a> o método %s para facelo permanente.',
|
||||||
'If you did not send this request from Adminer then close this page.' => 'Se non enviaches esta petición dende o Adminer entón pecha esta páxina',
|
'If you did not send this request from Adminer then close this page.' => 'Se non enviaches esta petición dende o Adminer entón pecha esta páxina',
|
||||||
'You can upload a big SQL file via FTP and import it from server.' => 'Podes subir un ficheiro SQL de gran tamaño vía FTP e importalo dende o servidor',
|
'You can upload a big SQL file via FTP and import it from server.' => 'Podes subir un ficheiro SQL de gran tamaño vía FTP e importalo dende o servidor',
|
||||||
'Size' => 'Tamaño',
|
'Size' => 'Tamaño',
|
||||||
|
|||||||
294
adminer/lang/he.inc.php
Normal file
294
adminer/lang/he.inc.php
Normal file
@@ -0,0 +1,294 @@
|
|||||||
|
<?php
|
||||||
|
$translations = array(
|
||||||
|
'Login' => 'התחברות',
|
||||||
|
'Logout successful.' => 'ההתחברות הצליחה',
|
||||||
|
'Invalid credentials.' => 'פרטי התחברות שגויים',
|
||||||
|
'Server' => 'שרת',
|
||||||
|
'Username' => 'שם משתמש',
|
||||||
|
'Password' => 'סיסמה',
|
||||||
|
'Select database' => 'בחר מסד נתונים',
|
||||||
|
'Invalid database.' => 'מסד נתונים שגוי',
|
||||||
|
'Table has been dropped.' => 'הטבלה הושלכה',
|
||||||
|
'Table has been altered.' => 'הטבלה שונתה',
|
||||||
|
'Table has been created.' => 'הטבלה נוצרה',
|
||||||
|
'Alter table' => 'שנה טבלה',
|
||||||
|
'Create table' => 'צור טבלה',
|
||||||
|
'Table name' => 'שם הטבלה',
|
||||||
|
'engine' => 'מנוע',
|
||||||
|
'collation' => 'קולקציה',
|
||||||
|
'Column name' => 'שם עמודה',
|
||||||
|
'Type' => 'סוג',
|
||||||
|
'Length' => 'אורך',
|
||||||
|
'Auto Increment' => 'הגדלה אוטומטית',
|
||||||
|
'Options' => 'אפשרויות',
|
||||||
|
'Save' => 'שמור',
|
||||||
|
'Drop' => 'השלך',
|
||||||
|
'Database has been created.' => 'מסד הנתונים נוצר',
|
||||||
|
'Database has been renamed.' => 'שם מסד הנתונים שונה',
|
||||||
|
'Database has been altered.' => 'מסד הנתונים שונה',
|
||||||
|
'Alter database' => 'שנה מסד נתונים',
|
||||||
|
'Create database' => 'צור מסד נתונים',
|
||||||
|
'SQL command' => 'שאילתת SQL',
|
||||||
|
'Logout' => 'התנתק',
|
||||||
|
'database' => 'מסד נתונים',
|
||||||
|
'Use' => 'השתמש',
|
||||||
|
'No tables.' => 'אין טבלאות',
|
||||||
|
'select' => 'בחר',
|
||||||
|
'Item has been deleted.' => 'הפריט נמחק',
|
||||||
|
'Item has been updated.' => 'הפריט עודכן',
|
||||||
|
'Edit' => 'ערוך',
|
||||||
|
'Insert' => 'הכנס',
|
||||||
|
'Save and insert next' => 'שמור והמשך להכניס',
|
||||||
|
'Delete' => 'מחק',
|
||||||
|
'Database' => 'מסד נתונים',
|
||||||
|
'Routines' => 'רוטינות',
|
||||||
|
'Indexes have been altered.' => 'האינדקסים שונו',
|
||||||
|
'Indexes' => 'אינדקסים',
|
||||||
|
'Alter indexes' => 'שנה אינדקסים',
|
||||||
|
'Add next' => 'הוסף הבא',
|
||||||
|
'Language' => 'שפה',
|
||||||
|
'Select' => 'בחר',
|
||||||
|
'New item' => 'פריט חדש',
|
||||||
|
'Search' => 'חפש',
|
||||||
|
'Sort' => 'מיין',
|
||||||
|
'descending' => 'סדר הפוך',
|
||||||
|
'Limit' => 'הגבל',
|
||||||
|
'No rows.' => 'אין שורות',
|
||||||
|
'Action' => 'פעולות',
|
||||||
|
'edit' => 'ערוך',
|
||||||
|
'Page' => 'עמוד',
|
||||||
|
'Query executed OK, %d row(s) affected.' => 'השאילתה בוצעה כהלכה, %d שורות הושפעו',
|
||||||
|
'Error in query' => 'שגיאה בשאילתה',
|
||||||
|
'Execute' => 'הרץ',
|
||||||
|
'Table' => 'טבלה',
|
||||||
|
'Foreign keys' => 'מפתחות זרים',
|
||||||
|
'Triggers' => 'מפעילים',
|
||||||
|
'View' => 'הצג',
|
||||||
|
'Unable to select the table' => 'בחירת הטבלה נכשלה',
|
||||||
|
'Invalid CSRF token. Send the form again.' => 'כשל באבטחת נתונים, שלח טופס שוב',
|
||||||
|
'Comment' => 'הערה',
|
||||||
|
'Default values' => 'ערכי ברירת מחדל',
|
||||||
|
'%d byte(s)' => '%d בתים',
|
||||||
|
'No commands to execute.' => 'לא נמצאו פקודות להרצה',
|
||||||
|
'Unable to upload a file.' => 'העלאת הקובץ נכשלה',
|
||||||
|
'File upload' => 'העלה קובץ',
|
||||||
|
'File uploads are disabled.' => 'העלאת קבצים מבוטלת',
|
||||||
|
'Routine has been called, %d row(s) affected.' => 'הרוטינה נקראה, %d שורות הושפעו',
|
||||||
|
'Call' => 'קרא',
|
||||||
|
'No extension' => 'אין תוסף',
|
||||||
|
'None of the supported PHP extensions (%s) are available.' => 'שום תוסף PHP (%s) זמין',
|
||||||
|
'Session support must be enabled.' => 'חובה להפעיל תמיכה בסשן',
|
||||||
|
'Session expired, please login again.' => 'תם זמן ההפעלה, אנא התחבר שוב',
|
||||||
|
'Text length' => 'אורך הטקסט',
|
||||||
|
'Foreign key has been dropped.' => 'המפתח הזר הושלך',
|
||||||
|
'Foreign key has been altered.' => 'המפתח הזר שונה',
|
||||||
|
'Foreign key has been created.' => 'המפתח הזר נוצר',
|
||||||
|
'Foreign key' => 'מפתח זר',
|
||||||
|
'Target table' => 'טבלת יעד',
|
||||||
|
'Change' => 'שנה',
|
||||||
|
'Source' => 'מקור',
|
||||||
|
'Target' => 'יעד',
|
||||||
|
'Add column' => 'הוסף עמודה',
|
||||||
|
'Alter' => 'שנה',
|
||||||
|
'Add foreign key' => 'הוסף מפתח זר',
|
||||||
|
'ON DELETE' => 'בעת מחיקה',
|
||||||
|
'ON UPDATE' => 'בעת עידכון',
|
||||||
|
'Index Type' => 'סוג אינדקס',
|
||||||
|
'Column (length)' => 'עמודה (אורך)',
|
||||||
|
'View has been dropped.' => 'התצוגה הושלכה',
|
||||||
|
'View has been altered.' => 'התצוגה שונתה',
|
||||||
|
'View has been created.' => 'התצוגה נוצרה',
|
||||||
|
'Alter view' => 'שנה תצוגה',
|
||||||
|
'Create view' => 'צור תצוגה',
|
||||||
|
'Name' => 'שם',
|
||||||
|
'Process list' => 'רשימת תהליכים',
|
||||||
|
'%d process(es) have been killed.' => '%d תהליכים חוסלו',
|
||||||
|
'Kill' => 'חסל',
|
||||||
|
'Parameter name' => 'שם הפרמטר',
|
||||||
|
'Database schema' => 'סכמת מסד נתונים',
|
||||||
|
'Create procedure' => 'צור פרוצדורה',
|
||||||
|
'Create function' => 'צור פונקציה',
|
||||||
|
'Routine has been dropped.' => 'הרוטינה הושלכה',
|
||||||
|
'Routine has been altered.' => 'הרוטינה שונתה',
|
||||||
|
'Routine has been created.' => 'הרוטינה נוצרה',
|
||||||
|
'Alter function' => 'שנה פונקציה',
|
||||||
|
'Alter procedure' => 'שנה פרוצדורה',
|
||||||
|
'Return type' => 'סוג ערך מוחזר',
|
||||||
|
'Add trigger' => 'הוסף טריגר',
|
||||||
|
'Trigger has been dropped.' => 'הטריגר הושלך',
|
||||||
|
'Trigger has been altered.' => 'הטריגר שונה',
|
||||||
|
'Trigger has been created.' => 'הטריגר נוצר',
|
||||||
|
'Alter trigger' => 'שנה טריגר',
|
||||||
|
'Create trigger' => 'צור טריגר',
|
||||||
|
'Time' => 'זמן',
|
||||||
|
'Event' => 'אירוע',
|
||||||
|
'%d row(s)' => '%d שורות',
|
||||||
|
'Remove' => 'הסר',
|
||||||
|
'Are you sure?' => 'האם אתה בטוח?',
|
||||||
|
'Privileges' => 'פריווילגיות',
|
||||||
|
'Create user' => 'צור משתמש',
|
||||||
|
'User has been dropped.' => 'המשתמש הושלך',
|
||||||
|
'User has been altered.' => 'המשתמש שונה',
|
||||||
|
'User has been created.' => 'המשתמש נוצר',
|
||||||
|
'Hashed' => 'הצפנה',
|
||||||
|
'Column' => 'עמודה',
|
||||||
|
'Routine' => 'רוטינה',
|
||||||
|
'Grant' => 'הענק',
|
||||||
|
'Revoke' => 'שלול',
|
||||||
|
'%s version: %s through PHP extension %s' => '%s גרסה: %s דרך תוסף PHP %s',
|
||||||
|
'Logged as: %s' => 'מחובר כ: %s',
|
||||||
|
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'מידע גדול מידי נשלח ב-POST. הקטן את את המידע הוא הגדלת את הגדרות ה-%s',
|
||||||
|
'Move up' => 'הזז למעלה',
|
||||||
|
'Move down' => 'הזז למטה',
|
||||||
|
'Export' => 'יצא',
|
||||||
|
'Tables' => 'טבלאות',
|
||||||
|
'Data' => 'נתונים',
|
||||||
|
'Output' => 'פלט',
|
||||||
|
'open' => 'פתח',
|
||||||
|
'save' => 'שמור',
|
||||||
|
'Format' => 'פורמט',
|
||||||
|
'Functions' => 'פונקציות',
|
||||||
|
'Aggregation' => 'צבירה',
|
||||||
|
'Event has been dropped.' => 'האירוע הושלך',
|
||||||
|
'Event has been altered.' => 'האירוע שונה',
|
||||||
|
'Event has been created.' => 'האירוע נוצר',
|
||||||
|
'Alter event' => 'שנה אירוע',
|
||||||
|
'Create event' => 'צור אירוע',
|
||||||
|
'Start' => 'התחלה',
|
||||||
|
'End' => 'סיום',
|
||||||
|
'Every' => 'כל',
|
||||||
|
'Status' => 'סטטוס',
|
||||||
|
'On completion preserve' => 'בעת סיום שמור',
|
||||||
|
'Events' => 'אירועים',
|
||||||
|
'Schedule' => 'תזמן',
|
||||||
|
'At given time' => 'לפי זמן נתון',
|
||||||
|
'Save and continue edit' => 'שמור והמשך לערוך',
|
||||||
|
'original' => 'מקורי',
|
||||||
|
'Tables have been truncated.' => 'הטבלה קוצרה',
|
||||||
|
'Tables have been moved.' => 'הטבלה הועברה',
|
||||||
|
'Tables have been dropped.' => 'הטבלה הושלכה',
|
||||||
|
'Tables and views' => 'טבלאות ותצוגות',
|
||||||
|
'Engine' => 'מנוע',
|
||||||
|
'Collation' => 'קולקציה',
|
||||||
|
'Data Length' => 'אורך נתונים',
|
||||||
|
'Index Length' => 'אורך אינדקס',
|
||||||
|
'Data Free' => 'נתונים משוחררים',
|
||||||
|
'Rows' => 'שורות',
|
||||||
|
',' => ',',
|
||||||
|
'0123456789' => '0123456789',
|
||||||
|
'Analyze' => 'נתח',
|
||||||
|
'Optimize' => 'יעל',
|
||||||
|
'Check' => 'בדוק',
|
||||||
|
'Repair' => 'תקן',
|
||||||
|
'Truncate' => 'קצר',
|
||||||
|
'Move to other database' => 'העבר למסד נתונים אחר',
|
||||||
|
'Move' => 'העבר',
|
||||||
|
'%d item(s) have been affected.' => '%d פריטים הושפעו',
|
||||||
|
'Whole result' => 'כל התוצאות',
|
||||||
|
'Clone' => 'שכפל',
|
||||||
|
'Maximum number of allowed fields exceeded. Please increase %s.' => 'הגעת למספר השדות המרבי. בבקשה הגדל את %s',
|
||||||
|
'Partition by' => 'מחיצות ע"י',
|
||||||
|
'Partitions' => 'מחיצות',
|
||||||
|
'Partition name' => 'שם מחיצה',
|
||||||
|
'Values' => 'ערכים',
|
||||||
|
'%d row(s) have been imported.' => '%d שורות יובאו',
|
||||||
|
'anywhere' => 'בכל מקום',
|
||||||
|
'Import' => 'יבא',
|
||||||
|
'Stop on error' => 'עצור בעת שגיאה',
|
||||||
|
'%.3f s' => '%.3f s',
|
||||||
|
'$1-$3-$5' => '$1-$3-$5',
|
||||||
|
'[yyyy]-mm-dd' => '[yyyy]-mm-dd',
|
||||||
|
'History' => 'היסטוריה',
|
||||||
|
'Variables' => 'משתנים',
|
||||||
|
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'על עמודות המקור והיעד להיות מאותו טיפוס נתונים, חובה שיהיה אינדקס בעמודת היעד ושהמידע המתאים יהיה קיים',
|
||||||
|
'Relations' => 'הקשרים',
|
||||||
|
'Run file' => 'הרץ קובץ',
|
||||||
|
'Clear' => 'נקה',
|
||||||
|
'Maximum allowed file size is %sB.' => 'גודל מקסימלאי להעלאה: %sB',
|
||||||
|
'Numbers' => 'מספרים',
|
||||||
|
'Date and time' => 'תאריך ושעה',
|
||||||
|
'Strings' => 'מחרוזות',
|
||||||
|
'Binary' => 'בינארי',
|
||||||
|
'Lists' => 'רשימות',
|
||||||
|
'Editor' => 'עורך',
|
||||||
|
'E-mail' => 'דוא"ל',
|
||||||
|
'From' => 'מ:',
|
||||||
|
'Subject' => 'נושא',
|
||||||
|
'Send' => 'שלח',
|
||||||
|
'%d e-mail(s) have been sent.' => '%d הודעות דוא"ל נשלחו',
|
||||||
|
'Webserver file %s' => 'קובץ השרת %s',
|
||||||
|
'File does not exist.' => 'הקובץ אינו קיים',
|
||||||
|
'%d in total' => '%d בסך הכל',
|
||||||
|
'Permanent login' => 'התחבר לצמיתות',
|
||||||
|
'Databases have been dropped.' => 'מסד הנתונים הושלך',
|
||||||
|
'Database has been dropped.' => 'מסד הנתונים הושלך',
|
||||||
|
'Search data in tables' => 'חפש מידע בטבלאות',
|
||||||
|
'Schema' => 'סכמה',
|
||||||
|
'Alter schema' => 'שנה סכמה',
|
||||||
|
'Create schema' => 'צור סכמה',
|
||||||
|
'Schema has been dropped.' => 'הסכמה הושלכה',
|
||||||
|
'Schema has been created.' => 'הסכמה נוצרה',
|
||||||
|
'Schema has been altered.' => 'הסכמה שונתה',
|
||||||
|
'Sequences' => 'סדרות',
|
||||||
|
'Create sequence' => 'צור סדרה',
|
||||||
|
'Alter sequence' => 'שנה סדרה',
|
||||||
|
'Sequence has been dropped.' => 'הסדרה הושלכה',
|
||||||
|
'Sequence has been created.' => 'הסדרה נוצרה',
|
||||||
|
'Sequence has been altered.' => 'הסדרה שונתה',
|
||||||
|
'User types' => 'סוגי משתמשים',
|
||||||
|
'Create type' => 'צור סוג',
|
||||||
|
'Alter type' => 'שנה סוג',
|
||||||
|
'Type has been dropped.' => 'הסוג הושלך',
|
||||||
|
'Type has been created.' => 'הסוג נוצר',
|
||||||
|
'Use edit link to modify this value.' => 'השתמש בקישור העריכה בשביל לשנות את הערך',
|
||||||
|
'last' => 'אחרון',
|
||||||
|
'From server' => 'משרת',
|
||||||
|
'System' => 'מערכת',
|
||||||
|
'Select data' => 'בחר נתונים',
|
||||||
|
'Show structure' => 'הראה מבנה',
|
||||||
|
'empty' => 'ריק',
|
||||||
|
'Network' => 'רשת',
|
||||||
|
'Geometry' => 'גיאומטריה',
|
||||||
|
'File exists.' => 'קובץ קיים',
|
||||||
|
'Attachments' => 'קבצים מצורפים',
|
||||||
|
'Item%s has been inserted.' => 'הפריט %s הוזן בהצלחה',
|
||||||
|
'now' => 'כעת',
|
||||||
|
'%d query(s) executed OK.' => '%d שאילתות בוצעו בהצלחה',
|
||||||
|
'Show only errors' => 'הראה שגיאות בלבד',
|
||||||
|
'Refresh' => 'רענן',
|
||||||
|
'Invalid schema.' => 'סכמה שגויה',
|
||||||
|
'Please use one of the extensions %s.' => 'בבקשה השתמש באחד מהתוספים %s',
|
||||||
|
'ltr' => 'rtl',
|
||||||
|
'Tables have been copied.' => 'הטבלה הועתקה',
|
||||||
|
'Copy' => 'העתק',
|
||||||
|
'Permanent link' => 'קישור סופי',
|
||||||
|
'Edit all' => 'ערוך הכל',
|
||||||
|
'HH:MM:SS' => 'HH:MM:SS',
|
||||||
|
'Tables have been optimized.' => 'הטבלאות עברו אופטימיזציה',
|
||||||
|
'Materialized view' => 'תצוגת מימוש ',
|
||||||
|
'Vacuum' => 'וואקום',
|
||||||
|
'Selected' => 'נבחרים',
|
||||||
|
'Ctrl+click on a value to modify it.' => 'לחץ ctrl + לחיצת עכבר לערוך ערך זה',
|
||||||
|
'File must be in UTF-8 encoding.' => 'על הקובץ להיות בקידוד utf-8',
|
||||||
|
'Modify' => 'ערוך',
|
||||||
|
'Loading' => 'טוען',
|
||||||
|
'Load more data' => 'טען נתונים נוספים',
|
||||||
|
'ATTACH queries are not supported.' => 'שאילתת ATTACH אינה נתמכת',
|
||||||
|
'%d / ' => '%d / ',
|
||||||
|
'Limit rows' => 'הגבל שורות',
|
||||||
|
'<a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to use SQLite.' => '<a href="https://www.adminer.org/en/extension/"%s>התקן</a> את תוסף SQLite בשביל להתחבר',
|
||||||
|
'Default value' => 'ערך ברירת מחדל',
|
||||||
|
'Full table scan' => 'סריקה טבלה מלאה',
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => 'יותר מידי נסיונות כניסה נכשלו, אנא נסה עוד %d דקות',
|
||||||
|
'Thanks for using Adminer, consider <a href="%s">donating</a>.' => 'תודה שהשתמש ב-adminer אנא שקול <a href="%s">לתרום</a>.',
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'סיסמת המאסטר פגה <a href="https://www.adminer.org/en/extension/"%s>התקן תוסף</a> על מנת להפוך את זה לתמידי',
|
||||||
|
'If you did not send this request from Adminer then close this page.' => 'אם לא אתה שלחת בקשה ל-Adminer הינך יכול לסגור חלון זה',
|
||||||
|
'You can upload a big SQL file via FTP and import it from server.' => 'ניתן לעלות קבצים ב-FTP ואז למשוך אותם מהשרת',
|
||||||
|
'Size' => 'גודל',
|
||||||
|
'Compute' => 'חישוב',
|
||||||
|
'You are offline.' => 'הינך לא מקוון',
|
||||||
|
'You have no privileges to update this table.' => 'אין לך ההרשאות המתאימות לעדכן טבלה זו',
|
||||||
|
'Saving' => 'שומר',
|
||||||
|
'yes' => 'כן',
|
||||||
|
'no' => 'לא',
|
||||||
|
);
|
||||||
@@ -185,7 +185,7 @@ $translations = array(
|
|||||||
'Save and continue edit' => 'Mentés és szerkesztés folytatása',
|
'Save and continue edit' => 'Mentés és szerkesztés folytatása',
|
||||||
'original' => 'eredeti',
|
'original' => 'eredeti',
|
||||||
'%d item(s) have been affected.' => array('%d tétel érintett.', '%d tétel érintett.', '%d tétel érintett.'),
|
'%d item(s) have been affected.' => array('%d tétel érintett.', '%d tétel érintett.', '%d tétel érintett.'),
|
||||||
'whole result' => 'összes eredményt mutatása',
|
'Whole result' => 'Összes eredményt mutatása',
|
||||||
'Tables have been dropped.' => 'Táblák eldobva.',
|
'Tables have been dropped.' => 'Táblák eldobva.',
|
||||||
'Clone' => 'Klónoz',
|
'Clone' => 'Klónoz',
|
||||||
'Partition by' => 'Particionálás ezzel',
|
'Partition by' => 'Particionálás ezzel',
|
||||||
|
|||||||
@@ -231,7 +231,7 @@ $translations = array(
|
|||||||
'%d row(s)' => '%d baris',
|
'%d row(s)' => '%d baris',
|
||||||
'Page' => 'Halaman',
|
'Page' => 'Halaman',
|
||||||
'last' => 'terakhir',
|
'last' => 'terakhir',
|
||||||
'whole result' => 'Seluruh hasil',
|
'Whole result' => 'Seluruh hasil',
|
||||||
'%d byte(s)' => '%d bita',
|
'%d byte(s)' => '%d bita',
|
||||||
|
|
||||||
'Import' => 'Impor',
|
'Import' => 'Impor',
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ $translations = array(
|
|||||||
'Move to other database' => 'Sposta in altro database',
|
'Move to other database' => 'Sposta in altro database',
|
||||||
'Move' => 'Sposta',
|
'Move' => 'Sposta',
|
||||||
'%d item(s) have been affected.' => array('Il risultato consiste in %d elemento.', 'Il risultato consiste in %d elementi.'),
|
'%d item(s) have been affected.' => array('Il risultato consiste in %d elemento.', 'Il risultato consiste in %d elementi.'),
|
||||||
'whole result' => 'intero risultato',
|
'Whole result' => 'Intero risultato',
|
||||||
'Clone' => 'Clona',
|
'Clone' => 'Clona',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Troppi campi. Per favore aumentare %s.',
|
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Troppi campi. Per favore aumentare %s.',
|
||||||
'Partition by' => 'Partiziona per',
|
'Partition by' => 'Partiziona per',
|
||||||
|
|||||||
@@ -184,7 +184,7 @@ $translations = array(
|
|||||||
'Save and continue edit' => '保存して継続',
|
'Save and continue edit' => '保存して継続',
|
||||||
'original' => '元',
|
'original' => '元',
|
||||||
'%d item(s) have been affected.' => '%d を更新しました',
|
'%d item(s) have been affected.' => '%d を更新しました',
|
||||||
'whole result' => '全結果',
|
'Whole result' => '全結果',
|
||||||
'Tables have been dropped.' => 'テーブルを削除しました',
|
'Tables have been dropped.' => 'テーブルを削除しました',
|
||||||
'Clone' => 'クローン',
|
'Clone' => 'クローン',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => '定義可能な最大フィールド数を越えました。%s を増やしてください。',
|
'Maximum number of allowed fields exceeded. Please increase %s.' => '定義可能な最大フィールド数を越えました。%s を増やしてください。',
|
||||||
|
|||||||
@@ -184,7 +184,7 @@ $translations = array(
|
|||||||
'Save and continue edit' => '저장하고 계속',
|
'Save and continue edit' => '저장하고 계속',
|
||||||
'original' => '원래',
|
'original' => '원래',
|
||||||
'%d item(s) have been affected.' => '%d를 갱신했습니다.',
|
'%d item(s) have been affected.' => '%d를 갱신했습니다.',
|
||||||
'whole result' => '모든 결과',
|
'Whole result' => '모든 결과',
|
||||||
'Tables have been dropped.' => '테이블을 삭제했습니다.',
|
'Tables have been dropped.' => '테이블을 삭제했습니다.',
|
||||||
'Clone' => '복제',
|
'Clone' => '복제',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => '정의 가능한 최대 필드 수를 초과했습니다. %s를 늘리십시오.',
|
'Maximum number of allowed fields exceeded. Please increase %s.' => '정의 가능한 최대 필드 수를 초과했습니다. %s를 늘리십시오.',
|
||||||
|
|||||||
@@ -229,7 +229,7 @@ $translations = array(
|
|||||||
'%d row(s)' => array('%d įrašas', '%d įrašai', '%d įrašų'),
|
'%d row(s)' => array('%d įrašas', '%d įrašai', '%d įrašų'),
|
||||||
'Page' => 'Puslapis',
|
'Page' => 'Puslapis',
|
||||||
'last' => 'paskutinis',
|
'last' => 'paskutinis',
|
||||||
'whole result' => 'visas rezultatas',
|
'Whole result' => 'Visas rezultatas',
|
||||||
'%d byte(s)' => array('%d baitas', '%d baigai', '%d baitų'),
|
'%d byte(s)' => array('%d baitas', '%d baigai', '%d baitų'),
|
||||||
|
|
||||||
'Import' => 'Importas',
|
'Import' => 'Importas',
|
||||||
|
|||||||
341
adminer/lang/ms.inc.php
Normal file
341
adminer/lang/ms.inc.php
Normal file
@@ -0,0 +1,341 @@
|
|||||||
|
<?php
|
||||||
|
$translations = array(
|
||||||
|
// label for database system selection (MySQL, SQLite, ...)
|
||||||
|
'System' => 'Sistem',
|
||||||
|
'Server' => 'Pelayan',
|
||||||
|
'Username' => 'Nama pengguna',
|
||||||
|
'Password' => 'Kata laluan',
|
||||||
|
'Permanent login' => 'Log masuk kekal',
|
||||||
|
'Login' => 'Log masuk',
|
||||||
|
'Logout' => 'Log keluar',
|
||||||
|
'Logged as: %s' => 'Log masuk sebagai: %s',
|
||||||
|
'Logout successful.' => 'Log keluar berjaya.',
|
||||||
|
'Thanks for using Adminer, consider <a href="%s">donating</a>.' => 'Terima kasih kerana menggunakan Adminer, pertimbangkan untuk <a href="%s">menderma</a>.',
|
||||||
|
'Invalid credentials.' => 'Akses tidak sah.',
|
||||||
|
'<a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to use SQLite.' => '<a href="https://www.adminer.org/en/extension/"%s>Gunakan</a> cara %s untuk menggunakan SQLite.',
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => 'Terlalu banyak percubaan log masuk yang gagal, sila cuba lagi dalam masa %d minit.',
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Kata laluan utama telah luput. <a href="https://www.adminer.org/en/extension/"%s>Gunakan</a> cara %s untuk mengekalkannya.',
|
||||||
|
'Language' => 'Bahasa',
|
||||||
|
'Invalid CSRF token. Send the form again.' => 'Token CSRF tidak sah. Sila hantar borang sekali lagi.',
|
||||||
|
'If you did not send this request from Adminer then close this page.' => 'Jika anda tidak menghantar permintaan ini dari Adminer sila tutup halaman ini.',
|
||||||
|
'No extension' => 'Tiada sambungan',
|
||||||
|
'None of the supported PHP extensions (%s) are available.' => 'Sambungan PHP yang (%s) disokong tidak wujud.',
|
||||||
|
'Connecting to privileged ports is not allowed.' => 'Penyambungan ke port yang istimewa tidak dibenarkan.',
|
||||||
|
'Session support must be enabled.' => 'Sokongan sesi perlu diaktifkan.',
|
||||||
|
'Session expired, please login again.' => 'Sesi telah luput, sila log masuk kembali.',
|
||||||
|
'%s version: %s through PHP extension %s' => 'Versi %s: %s melalui sambungan PHP %s',
|
||||||
|
'Refresh' => 'Segar kembali',
|
||||||
|
|
||||||
|
// text direction - 'ltr' or 'rtl'
|
||||||
|
'ltr' => 'ltr',
|
||||||
|
|
||||||
|
'Privileges' => 'Keistimewaan',
|
||||||
|
'Create user' => 'Bina pengguna',
|
||||||
|
'User has been dropped.' => 'Pengguna telah dijatuhkan.',
|
||||||
|
'User has been altered.' => 'Pengguna telah diubah.',
|
||||||
|
'User has been created.' => 'Pengguna telah dibuat.',
|
||||||
|
'Hashed' => 'Hashed',
|
||||||
|
'Column' => 'Kolum',
|
||||||
|
'Routine' => 'Rutin',
|
||||||
|
'Grant' => 'Beri',
|
||||||
|
'Revoke' => 'Batal',
|
||||||
|
|
||||||
|
'Process list' => 'Senarai proses',
|
||||||
|
'%d process(es) have been killed.' => '%d proses telah dihentikan.',
|
||||||
|
'Kill' => 'Henti',
|
||||||
|
|
||||||
|
'Variables' => 'Pembolehubah',
|
||||||
|
'Status' => 'Status',
|
||||||
|
|
||||||
|
'SQL command' => 'Arahan SQL',
|
||||||
|
'%d query(s) executed OK.' => '%d query berjaya dilaksanakan.',
|
||||||
|
'Query executed OK, %d row(s) affected.' => 'Query berjaya dilaksanakan, %d baris terjejas.',
|
||||||
|
'No commands to execute.' => 'Tiada arahan untuk dilaksanakan.',
|
||||||
|
'Error in query' => 'Ralat pada query',
|
||||||
|
'ATTACH queries are not supported.' => 'Query berikut tidak disokong.',
|
||||||
|
'Execute' => 'Laksana',
|
||||||
|
'Stop on error' => 'Berhenti jika ralat',
|
||||||
|
'Show only errors' => 'Paparkan jika ralat',
|
||||||
|
// sprintf() format for time of the command
|
||||||
|
'%.3f s' => '%.3f s',
|
||||||
|
'History' => 'Sejarah',
|
||||||
|
'Clear' => 'Bersih',
|
||||||
|
'Edit all' => 'Ubah semua',
|
||||||
|
|
||||||
|
'File upload' => 'Muat naik fail',
|
||||||
|
'From server' => 'Dari pelayan',
|
||||||
|
'Webserver file %s' => 'Fail pelayan sesawang %s',
|
||||||
|
'Run file' => 'Jalankan fail',
|
||||||
|
'File does not exist.' => 'Fail tidak wujud.',
|
||||||
|
'File uploads are disabled.' => 'Muat naik fail dihalang.',
|
||||||
|
'Unable to upload a file.' => 'Muat naik fail gagal.',
|
||||||
|
'Maximum allowed file size is %sB.' => 'Saiz fail maksimum yang dibenarkan adalah %sB.',
|
||||||
|
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Data POST terlalu besar. Kecilkan data atau tingkatkan tetapan %s.',
|
||||||
|
'You can upload a big SQL file via FTP and import it from server.' => 'Anda boleh muat naik fail SQL yang besar melalui FTP dan import melalui pelayan.',
|
||||||
|
'You are offline.' => 'Anda sedang offline.',
|
||||||
|
|
||||||
|
'Export' => 'Eksport',
|
||||||
|
'Output' => 'Pengeluaran',
|
||||||
|
'open' => 'buka',
|
||||||
|
'save' => 'simpan',
|
||||||
|
'Saving' => 'Menyimpan',
|
||||||
|
'Format' => 'Format',
|
||||||
|
'Data' => 'Data',
|
||||||
|
|
||||||
|
'Database' => 'Pangkalan data',
|
||||||
|
'database' => 'pangkalan data',
|
||||||
|
'Use' => 'Guna',
|
||||||
|
'Select database' => 'Pilih pangkalan data',
|
||||||
|
'Invalid database.' => 'Pangkalan data tidak sah.',
|
||||||
|
'Database has been dropped.' => 'Pangkalan data telah dijatuhkan.',
|
||||||
|
'Databases have been dropped.' => 'Pangkalan data telah dijatuhkan.',
|
||||||
|
'Database has been created.' => 'Pangkalan data telah dibuat.',
|
||||||
|
'Database has been renamed.' => 'Pangkalan data telah ditukar nama.',
|
||||||
|
'Database has been altered.' => 'Pangkalan data telah diubah.',
|
||||||
|
'Alter database' => 'Ubah pangkalan data',
|
||||||
|
'Create database' => 'Bina pangkalan data',
|
||||||
|
'Database schema' => 'Skema pangkalan data',
|
||||||
|
|
||||||
|
// link to current database schema layout
|
||||||
|
'Permanent link' => 'Pautan kekal',
|
||||||
|
|
||||||
|
// thousands separator - must contain single byte
|
||||||
|
',' => ',',
|
||||||
|
'0123456789' => '0123456789',
|
||||||
|
'Engine' => 'Enjin',
|
||||||
|
'Collation' => 'Collation',
|
||||||
|
'Data Length' => 'Panjang Data',
|
||||||
|
'Index Length' => 'Panjang Indeks',
|
||||||
|
'Data Free' => 'Data Free',
|
||||||
|
'Rows' => 'Baris',
|
||||||
|
'%d in total' => '%d secara keseluruhan',
|
||||||
|
'Analyze' => 'Menganalisis',
|
||||||
|
'Optimize' => 'Mengoptimum',
|
||||||
|
'Vacuum' => 'Vacuum',
|
||||||
|
'Check' => 'Periksa',
|
||||||
|
'Repair' => 'Baiki',
|
||||||
|
'Truncate' => 'Memangkas',
|
||||||
|
'Tables have been truncated.' => 'Jadual telah dimangkaskan.',
|
||||||
|
'Move to other database' => 'Pindahkan ke pangkalan data yang lain',
|
||||||
|
'Move' => 'Pindah',
|
||||||
|
'Tables have been moved.' => 'Jadual telah dipindahkan.',
|
||||||
|
'Copy' => 'Salin',
|
||||||
|
'Tables have been copied.' => 'Jadual telah disalin.',
|
||||||
|
|
||||||
|
'Routines' => 'Rutin',
|
||||||
|
'Routine has been called, %d row(s) affected.' => 'Rutin telah dipanggil, %d baris terjejas.',
|
||||||
|
'Call' => 'Panggil',
|
||||||
|
'Parameter name' => 'Nama pembolehubah',
|
||||||
|
'Create procedure' => 'Bina prosedur',
|
||||||
|
'Create function' => 'Bina fungsi',
|
||||||
|
'Routine has been dropped.' => 'Rutin telah dijatuhkan.',
|
||||||
|
'Routine has been altered.' => 'Rutin telah diubah.',
|
||||||
|
'Routine has been created.' => 'Rutin telah dibuat.',
|
||||||
|
'Alter function' => 'Ubah fungsi',
|
||||||
|
'Alter procedure' => 'Ubah prosedur',
|
||||||
|
'Return type' => 'Jenis Return',
|
||||||
|
|
||||||
|
'Events' => 'Peristiwa',
|
||||||
|
'Event has been dropped.' => 'Peristiwa telah dijatuhkan.',
|
||||||
|
'Event has been altered.' => 'Peristiwa telah diubah.',
|
||||||
|
'Event has been created.' => 'Peristiwa telah dibuat.',
|
||||||
|
'Alter event' => 'Ubah peristiwa',
|
||||||
|
'Create event' => 'Bina peristiwa',
|
||||||
|
'At given time' => 'Pada masa tersebut',
|
||||||
|
'Every' => 'Setiap',
|
||||||
|
'Schedule' => 'Jadual',
|
||||||
|
'Start' => 'Mula',
|
||||||
|
'End' => 'Habis',
|
||||||
|
'On completion preserve' => 'Dalam melestarikan penyelesaian',
|
||||||
|
|
||||||
|
'Tables' => 'Jadual',
|
||||||
|
'Tables and views' => 'Jadual dan pandangan',
|
||||||
|
'Table' => 'Jadual',
|
||||||
|
'No tables.' => 'Tiada jadual.',
|
||||||
|
'Alter table' => 'Ubah jadual',
|
||||||
|
'Create table' => 'Bina jadual',
|
||||||
|
'Table has been dropped.' => 'Jadual telah dijatuhkan.',
|
||||||
|
'Tables have been dropped.' => 'Jadual telah dijatuhkan.',
|
||||||
|
'Tables have been optimized.' => 'Jadual telah dioptimumkan.',
|
||||||
|
'Table has been altered.' => 'Jadual telah diubah.',
|
||||||
|
'Table has been created.' => 'Jadual telah dibuat.',
|
||||||
|
'Table name' => 'Nama jadual',
|
||||||
|
'Show structure' => 'Paparkan struktur',
|
||||||
|
'engine' => 'enjin',
|
||||||
|
'collation' => 'collation',
|
||||||
|
'Column name' => 'Nama kolum',
|
||||||
|
'Type' => 'Jenis',
|
||||||
|
'Length' => 'Kepanjangan',
|
||||||
|
'Auto Increment' => 'Kenaikan Auto',
|
||||||
|
'Options' => 'Pilihan',
|
||||||
|
'Comment' => 'Komen',
|
||||||
|
'Default value' => 'Nilai lalai',
|
||||||
|
'Default values' => 'Nilai lalai',
|
||||||
|
'Drop' => 'Jatuh',
|
||||||
|
'Drop %s?' => 'Jatuhkan %s?',
|
||||||
|
'Are you sure?' => 'Anda pasti?',
|
||||||
|
'Size' => 'Saiz',
|
||||||
|
'Compute' => 'Kira',
|
||||||
|
'Move up' => 'Gerak ke atas',
|
||||||
|
'Move down' => 'Gerak ke bawah',
|
||||||
|
'Remove' => 'Buang',
|
||||||
|
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Bilangan medan telah melebihi had yang dibenarkan. Sila tingkatkan %s.',
|
||||||
|
|
||||||
|
'Partition by' => 'Partition mengikut',
|
||||||
|
'Partitions' => 'Partition',
|
||||||
|
'Partition name' => 'Nama partition',
|
||||||
|
'Values' => 'Nilai',
|
||||||
|
|
||||||
|
'View' => 'Papar',
|
||||||
|
'Materialized view' => 'Paparan yang menjadi kenyataan',
|
||||||
|
'View has been dropped.' => 'Paparan telah dijatuhkan.',
|
||||||
|
'View has been altered.' => 'Paparan telah diubah.',
|
||||||
|
'View has been created.' => 'Paparan telah dibuat.',
|
||||||
|
'Alter view' => 'Ubah paparan',
|
||||||
|
'Create view' => 'Bina paparan',
|
||||||
|
|
||||||
|
'Indexes' => 'Indeks',
|
||||||
|
'Indexes have been altered.' => 'Indeks telah diubah.',
|
||||||
|
'Alter indexes' => 'Ubah indeks',
|
||||||
|
'Add next' => 'Tambah yang seterusnya',
|
||||||
|
'Index Type' => 'Jenis Indeks',
|
||||||
|
'Column (length)' => 'Kolum (kepanjangan)',
|
||||||
|
|
||||||
|
'Foreign keys' => 'Kunci asing',
|
||||||
|
'Foreign key' => 'Kunci asing',
|
||||||
|
'Foreign key has been dropped.' => 'Kunci asing telah dijatuhkan.',
|
||||||
|
'Foreign key has been altered.' => 'Kunci asing telah diubah.',
|
||||||
|
'Foreign key has been created.' => 'Kunci asing telah dibuat.',
|
||||||
|
'Target table' => 'Jadual sasaran',
|
||||||
|
'Change' => 'Tukar',
|
||||||
|
'Source' => 'Sumber',
|
||||||
|
'Target' => 'Sasaran',
|
||||||
|
'Add column' => 'Tambah kolum',
|
||||||
|
'Alter' => 'Ubah',
|
||||||
|
'Add foreign key' => 'Tambah kunci asing',
|
||||||
|
'ON DELETE' => 'ON DELETE',
|
||||||
|
'ON UPDATE' => 'ON UPDATE',
|
||||||
|
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Kolum sumber dan sasaran perlu mempunyai jenis data yang sama, indeks diperlukan pada kolum sasaran dan data yang dirujuk wujud.',
|
||||||
|
|
||||||
|
'Triggers' => ' Pencetus',
|
||||||
|
'Add trigger' => 'Tambah pencetus',
|
||||||
|
'Trigger has been dropped.' => 'Pencetus telah dijatuhkan.',
|
||||||
|
'Trigger has been altered.' => 'Pencetus telah diubah.',
|
||||||
|
'Trigger has been created.' => 'Pencetus telah dibuat.',
|
||||||
|
'Alter trigger' => 'Ubah pencetus',
|
||||||
|
'Create trigger' => 'Buat pencetus',
|
||||||
|
'Time' => 'Masa',
|
||||||
|
'Event' => 'Peristiwa',
|
||||||
|
'Name' => 'Nama',
|
||||||
|
|
||||||
|
'select' => 'pilih',
|
||||||
|
'Select' => 'Pilih',
|
||||||
|
'Select data' => 'Pilih data',
|
||||||
|
'Functions' => 'Fungsi',
|
||||||
|
'Aggregation' => 'Pengagregatan',
|
||||||
|
'Search' => 'Cari',
|
||||||
|
'anywhere' => 'di mana-mana',
|
||||||
|
'Search data in tables' => 'Cari data dalam jadual',
|
||||||
|
'Sort' => 'Susun',
|
||||||
|
'descending' => 'menurun',
|
||||||
|
'Limit' => 'Had',
|
||||||
|
'Limit rows' => 'Had baris',
|
||||||
|
'Text length' => 'Kepanjangan teks',
|
||||||
|
'Action' => 'Aksi',
|
||||||
|
'Full table scan' => 'Imbasan penuh jadual',
|
||||||
|
'Unable to select the table' => 'Pemilihan jadual tidak berjaya',
|
||||||
|
'No rows.' => 'Tiada baris.',
|
||||||
|
'%d / ' => '%d / ',
|
||||||
|
'%d row(s)' => '%d baris',
|
||||||
|
'Page' => 'Halaman',
|
||||||
|
'last' => 'akhir',
|
||||||
|
'Load more data' => 'Load lebih data',
|
||||||
|
'Loading' => 'Loading',
|
||||||
|
'Whole result' => 'Keputusan keseluruhan',
|
||||||
|
'%d byte(s)' => array('%d byte', '%d bytes'),
|
||||||
|
|
||||||
|
'Import' => 'Import',
|
||||||
|
'%d row(s) have been imported.' => '%d baris telah diimport.',
|
||||||
|
'File must be in UTF-8 encoding.' => 'Fail mesti dalam pengekodan UTF-8.',
|
||||||
|
|
||||||
|
// in-place editing in select
|
||||||
|
'Modify' => 'Pinda',
|
||||||
|
'Ctrl+click on a value to modify it.' => 'Ctrl+click pada nilai untuk meminda.',
|
||||||
|
'Use edit link to modify this value.' => 'Guna pautan ubah untuk meminda nilai ini.',
|
||||||
|
|
||||||
|
// %s can contain auto-increment value
|
||||||
|
'Item%s has been inserted.' => 'Item%s telah dimasukkan.',
|
||||||
|
'Item has been deleted.' => 'Item telah dipadamkan.',
|
||||||
|
'Item has been updated.' => 'Item telah dikemaskini.',
|
||||||
|
'%d item(s) have been affected.' => '%d item telah terjejas.',
|
||||||
|
'New item' => 'Item baru',
|
||||||
|
'original' => 'asli',
|
||||||
|
// label for value '' in enum data type
|
||||||
|
'empty' => 'kosong',
|
||||||
|
'edit' => 'ubah',
|
||||||
|
'Edit' => 'Ubah',
|
||||||
|
'Insert' => 'Masukkan',
|
||||||
|
'Save' => 'Simpan',
|
||||||
|
'Save and continue edit' => 'Simpan dan sambung ubah',
|
||||||
|
'Save and insert next' => 'Simpan dan masukkan seterusnya',
|
||||||
|
'Selected' => 'Terpilih',
|
||||||
|
'Clone' => 'Klon',
|
||||||
|
'Delete' => 'Padam',
|
||||||
|
'You have no privileges to update this table.' => 'Anda tidak mempunyai keistimewaan untuk mengemaskini jadual ini.',
|
||||||
|
|
||||||
|
'E-mail' => 'Emel',
|
||||||
|
'From' => 'Dari',
|
||||||
|
'Subject' => 'Subjek',
|
||||||
|
'Attachments' => 'Lampiran',
|
||||||
|
'Send' => 'Hantar',
|
||||||
|
'%d e-mail(s) have been sent.' => '%d emel telah dihantar.',
|
||||||
|
|
||||||
|
// data type descriptions
|
||||||
|
'Numbers' => 'Nombor',
|
||||||
|
'Date and time' => 'Tarikh dan masa',
|
||||||
|
'Strings' => 'String',
|
||||||
|
'Binary' => 'Binari',
|
||||||
|
'Lists' => 'Senarai',
|
||||||
|
'Network' => 'Rangkaian',
|
||||||
|
'Geometry' => 'Geometri',
|
||||||
|
'Relations' => 'Hubungan',
|
||||||
|
|
||||||
|
'Editor' => 'Editor',
|
||||||
|
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||||
|
'$1-$3-$5' => '$1-$3-$5',
|
||||||
|
// hint for date format - use language equivalents for day, month and year shortcuts
|
||||||
|
'[yyyy]-mm-dd' => '[yyyy]-mm-dd',
|
||||||
|
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
||||||
|
'HH:MM:SS' => 'HH:MM:SS',
|
||||||
|
'now' => 'sekarang',
|
||||||
|
'yes' => 'ya',
|
||||||
|
'no' => 'tidak',
|
||||||
|
|
||||||
|
// general SQLite error in create, drop or rename database
|
||||||
|
'File exists.' => 'Fail wujud.',
|
||||||
|
'Please use one of the extensions %s.' => 'Sila guna salah satu sambungan %s.',
|
||||||
|
|
||||||
|
// PostgreSQL and MS SQL schema support
|
||||||
|
'Alter schema' => 'Ubah skema',
|
||||||
|
'Create schema' => 'Buat skema',
|
||||||
|
'Schema has been dropped.' => 'Skema telah dijatuhkan.',
|
||||||
|
'Schema has been created.' => 'Skema telah dibuat.',
|
||||||
|
'Schema has been altered.' => 'Skema telah diubah.',
|
||||||
|
'Schema' => 'Skema',
|
||||||
|
'Invalid schema.' => 'Skema tidak sah.',
|
||||||
|
|
||||||
|
// PostgreSQL sequences support
|
||||||
|
'Sequences' => 'Turutan',
|
||||||
|
'Create sequence' => 'Buat turutan',
|
||||||
|
'Sequence has been dropped.' => 'Turutan telah dijatuhkan.',
|
||||||
|
'Sequence has been created.' => 'Turutan telah dibuat.',
|
||||||
|
'Sequence has been altered.' => 'Turutan telah diubah.',
|
||||||
|
'Alter sequence' => 'Ubah turutan',
|
||||||
|
|
||||||
|
// PostgreSQL user types support
|
||||||
|
'User types' => 'Jenis pengguna',
|
||||||
|
'Create type' => 'Buat jenis',
|
||||||
|
'Type has been dropped.' => 'Jenis telah dijatuhkan.',
|
||||||
|
'Type has been created.' => 'Jenis telah dibuat.',
|
||||||
|
'Alter type' => 'Ubah jenis',
|
||||||
|
);
|
||||||
@@ -187,7 +187,7 @@ $translations = array(
|
|||||||
'Move to other database' => 'Verplaats naar andere database',
|
'Move to other database' => 'Verplaats naar andere database',
|
||||||
'Move' => 'Verplaats',
|
'Move' => 'Verplaats',
|
||||||
'%d item(s) have been affected.' => array('%d item aangepast.', '%d items aangepast.'),
|
'%d item(s) have been affected.' => array('%d item aangepast.', '%d items aangepast.'),
|
||||||
'whole result' => 'volledig resultaat',
|
'Whole result' => 'Volledig resultaat',
|
||||||
'Clone' => 'Dupliceer',
|
'Clone' => 'Dupliceer',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Maximum aantal velden bereikt. Verhoog %s.',
|
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Maximum aantal velden bereikt. Verhoog %s.',
|
||||||
'Partition by' => 'Partitioneren op',
|
'Partition by' => 'Partitioneren op',
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ $translations = array(
|
|||||||
'Logged as: %s' => 'Logget inn som: %s',
|
'Logged as: %s' => 'Logget inn som: %s',
|
||||||
'Logout successful.' => 'Utlogging vellykket.',
|
'Logout successful.' => 'Utlogging vellykket.',
|
||||||
'Invalid credentials.' => 'Ugylding innloggingsinformasjon.',
|
'Invalid credentials.' => 'Ugylding innloggingsinformasjon.',
|
||||||
'Master password expired. <a href="https://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.' => 'Master-passord er utløpt. <a href="https://www.adminer.org/en/extension/" target="_blank">Implementer</a> en metode for %s for å gjøre det permanent.',
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Master-passord er utløpt. <a href="https://www.adminer.org/en/extension/"%s>Implementer</a> en metode for %s for å gjøre det permanent.',
|
||||||
'Language' => 'Språk',
|
'Language' => 'Språk',
|
||||||
'Invalid CSRF token. Send the form again.' => 'Ugylding CSRF-token - Send inn skjemaet igjen.',
|
'Invalid CSRF token. Send the form again.' => 'Ugylding CSRF-token - Send inn skjemaet igjen.',
|
||||||
'No extension' => 'Ingen utvidelse',
|
'No extension' => 'Ingen utvidelse',
|
||||||
@@ -212,7 +212,7 @@ $translations = array(
|
|||||||
'last' => 'siste',
|
'last' => 'siste',
|
||||||
'Load more data' => 'Last mer data',
|
'Load more data' => 'Last mer data',
|
||||||
'Loading' => 'Laster',
|
'Loading' => 'Laster',
|
||||||
'whole result' => 'hele resultatet',
|
'Whole result' => 'Hele resultatet',
|
||||||
'%d byte(s)' => array('%d byte', '%d bytes'),
|
'%d byte(s)' => array('%d byte', '%d bytes'),
|
||||||
'Import' => 'Importer',
|
'Import' => 'Importer',
|
||||||
'%d row(s) have been imported.' => array('%d rad er importert.', '%d rader er importert.'),
|
'%d row(s) have been imported.' => array('%d rad er importert.', '%d rader er importert.'),
|
||||||
|
|||||||
@@ -10,14 +10,17 @@ $translations = array(
|
|||||||
'Logout' => 'Wyloguj',
|
'Logout' => 'Wyloguj',
|
||||||
'Logged as: %s' => 'Zalogowany jako: %s',
|
'Logged as: %s' => 'Zalogowany jako: %s',
|
||||||
'Logout successful.' => 'Wylogowano pomyślnie.',
|
'Logout successful.' => 'Wylogowano pomyślnie.',
|
||||||
|
'Thanks for using Adminer, consider <a href="%s">donating</a>.' => 'Dziękujemy za używanie Adminera, rozważ proszę <a href="%s">dotację</a>.',
|
||||||
'Invalid credentials.' => 'Nieprawidłowe dane logowania.',
|
'Invalid credentials.' => 'Nieprawidłowe dane logowania.',
|
||||||
|
'<a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to use SQLite.' => '<a href="https://www.adminer.org/pl/extension/"%s>Zaimplementuj</a> metodę %s aby użyć SQLite.',
|
||||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Za dużo nieudanych prób logowania, spróbuj ponownie za %d minutę.', 'Za dużo nieudanych prób logowania, spróbuj ponownie za %d minuty.', 'Za dużo nieudanych prób logowania, spróbuj ponownie za %d minut.'),
|
'Too many unsuccessful logins, try again in %d minute(s).' => array('Za dużo nieudanych prób logowania, spróbuj ponownie za %d minutę.', 'Za dużo nieudanych prób logowania, spróbuj ponownie za %d minuty.', 'Za dużo nieudanych prób logowania, spróbuj ponownie za %d minut.'),
|
||||||
'Master password expired. <a href="https://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.' => 'Ważność hasła głównego wygasła. <a href="https://www.adminer.org/pl/extension/" target="_blank">Zaimplementuj</a> własną metodę %s, aby ustawić je na stałe.',
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Ważność hasła głównego wygasła. <a href="https://www.adminer.org/pl/extension/"%s>Zaimplementuj</a> własną metodę %s, aby ustawić je na stałe.',
|
||||||
'Language' => 'Język',
|
'Language' => 'Język',
|
||||||
'Invalid CSRF token. Send the form again.' => 'Nieprawidłowy token CSRF. Spróbuj wysłać formularz ponownie.',
|
'Invalid CSRF token. Send the form again.' => 'Nieprawidłowy token CSRF. Spróbuj wysłać formularz ponownie.',
|
||||||
'If you did not send this request from Adminer then close this page.' => 'Jeżeli nie wywołałeś tej strony z Adminera, zamknij to okno.',
|
'If you did not send this request from Adminer then close this page.' => 'Jeżeli nie wywołałeś tej strony z Adminera, zamknij to okno.',
|
||||||
'No extension' => 'Brak rozszerzenia',
|
'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.',
|
'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.',
|
||||||
|
'Connecting to privileged ports is not allowed.' => 'Łączenie do portów uprzywilejowanych jest niedozwolone.',
|
||||||
'Session support must be enabled.' => 'Wymagana jest obsługa sesji w PHP.',
|
'Session support must be enabled.' => 'Wymagana jest obsługa sesji w PHP.',
|
||||||
'Session expired, please login again.' => 'Sesja wygasła, zaloguj się ponownie.',
|
'Session expired, please login again.' => 'Sesja wygasła, zaloguj się ponownie.',
|
||||||
'%s version: %s through PHP extension %s' => 'Wersja %s: %s za pomocą %s',
|
'%s version: %s through PHP extension %s' => 'Wersja %s: %s za pomocą %s',
|
||||||
@@ -49,6 +52,7 @@ $translations = array(
|
|||||||
'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.'),
|
'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.',
|
'No commands to execute.' => 'Nic do wykonania.',
|
||||||
'Error in query' => 'Błąd w zapytaniu',
|
'Error in query' => 'Błąd w zapytaniu',
|
||||||
|
'ATTACH queries are not supported.' => 'Zapytania ATTACH są niewspierane.',
|
||||||
'Execute' => 'Wykonaj',
|
'Execute' => 'Wykonaj',
|
||||||
'Stop on error' => 'Zatrzymaj w przypadku błędu',
|
'Stop on error' => 'Zatrzymaj w przypadku błędu',
|
||||||
'Show only errors' => 'Pokaż tylko błędy',
|
'Show only errors' => 'Pokaż tylko błędy',
|
||||||
@@ -167,6 +171,7 @@ $translations = array(
|
|||||||
'Default value' => 'Wartość domyślna',
|
'Default value' => 'Wartość domyślna',
|
||||||
'Default values' => 'Wartości domyślne',
|
'Default values' => 'Wartości domyślne',
|
||||||
'Drop' => 'Usuń',
|
'Drop' => 'Usuń',
|
||||||
|
'Drop %s?' => 'Usunąć %s?',
|
||||||
'Are you sure?' => 'Czy jesteś pewien?',
|
'Are you sure?' => 'Czy jesteś pewien?',
|
||||||
'Size' => 'Wielkość',
|
'Size' => 'Wielkość',
|
||||||
'Compute' => 'Oblicz',
|
'Compute' => 'Oblicz',
|
||||||
@@ -233,17 +238,19 @@ $translations = array(
|
|||||||
'Sort' => 'Sortuj',
|
'Sort' => 'Sortuj',
|
||||||
'descending' => 'malejąco',
|
'descending' => 'malejąco',
|
||||||
'Limit' => 'Limit',
|
'Limit' => 'Limit',
|
||||||
|
'Limit rows' => 'Limit rekordów',
|
||||||
'Text length' => 'Długość tekstu',
|
'Text length' => 'Długość tekstu',
|
||||||
'Action' => 'Czynność',
|
'Action' => 'Czynność',
|
||||||
'Full table scan' => 'Wymaga pełnego przeskanowania tabeli',
|
'Full table scan' => 'Wymaga pełnego przeskanowania tabeli',
|
||||||
'Unable to select the table' => 'Nie udało się pobrać danych z tabeli',
|
'Unable to select the table' => 'Nie udało się pobrać danych z tabeli',
|
||||||
'No rows.' => 'Brak rekordów.',
|
'No rows.' => 'Brak rekordów.',
|
||||||
|
'%d / ' => '%d / ',
|
||||||
'%d row(s)' => array('%d rekord', '%d rekordy', '%d rekordów'),
|
'%d row(s)' => array('%d rekord', '%d rekordy', '%d rekordów'),
|
||||||
'Page' => 'Strona',
|
'Page' => 'Strona',
|
||||||
'last' => 'ostatni',
|
'last' => 'ostatni',
|
||||||
'Load more data' => 'Wczytaj więcej danych',
|
'Load more data' => 'Wczytaj więcej danych',
|
||||||
'Loading' => 'Wczytywanie',
|
'Loading' => 'Wczytywanie',
|
||||||
'whole result' => 'wybierz wszystkie',
|
'Whole result' => 'Wybierz wszystkie',
|
||||||
'%d byte(s)' => array('%d bajt', '%d bajty', '%d bajtów'),
|
'%d byte(s)' => array('%d bajt', '%d bajty', '%d bajtów'),
|
||||||
|
|
||||||
'Import' => 'Import',
|
'Import' => 'Import',
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ $translations = array(
|
|||||||
'original' => 'original',
|
'original' => 'original',
|
||||||
'Tables have been dropped.' => 'As Tabelas foram eliminadas.',
|
'Tables have been dropped.' => 'As Tabelas foram eliminadas.',
|
||||||
'%d item(s) have been affected.' => array('%d item foi afetado.', '%d itens foram afetados.'),
|
'%d item(s) have been affected.' => array('%d item foi afetado.', '%d itens foram afetados.'),
|
||||||
'whole result' => 'resultado completo',
|
'Whole result' => 'Resultado completo',
|
||||||
'Clone' => 'Clonar',
|
'Clone' => 'Clonar',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Quantidade máxima de campos permitidos excedidos. Por favor aumente %s.',
|
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Quantidade máxima de campos permitidos excedidos. Por favor aumente %s.',
|
||||||
'Partition by' => 'Particionar por',
|
'Partition by' => 'Particionar por',
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ $translations = array(
|
|||||||
'original' => 'original',
|
'original' => 'original',
|
||||||
'Tables have been dropped.' => 'As tabelas foram eliminadas.',
|
'Tables have been dropped.' => 'As tabelas foram eliminadas.',
|
||||||
'%d item(s) have been affected.' => array('%d item afetado.', '%d itens afetados.'),
|
'%d item(s) have been affected.' => array('%d item afetado.', '%d itens afetados.'),
|
||||||
'whole result' => 'resultado completo',
|
'Whole result' => 'Resultado completo',
|
||||||
'Clone' => 'Clonar',
|
'Clone' => 'Clonar',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Quantidade máxima de campos permitidos excedidos. Por favor aumente %s.',
|
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Quantidade máxima de campos permitidos excedidos. Por favor aumente %s.',
|
||||||
'Partition by' => 'Particionar por',
|
'Partition by' => 'Particionar por',
|
||||||
|
|||||||
@@ -185,7 +185,7 @@ $translations = array(
|
|||||||
'Save and continue edit' => 'Salvează și continuă editarea',
|
'Save and continue edit' => 'Salvează și continuă editarea',
|
||||||
'original' => 'original',
|
'original' => 'original',
|
||||||
'%d item(s) have been affected.' => array('A fost modificată %d înscriere.', 'Au fost modificate %d înscrieri.'),
|
'%d item(s) have been affected.' => array('A fost modificată %d înscriere.', 'Au fost modificate %d înscrieri.'),
|
||||||
'whole result' => 'tot rezultatul',
|
'Whole result' => 'Tot rezultatul',
|
||||||
'Tables have been dropped.' => 'Tabelele au fost șterse.',
|
'Tables have been dropped.' => 'Tabelele au fost șterse.',
|
||||||
'Clone' => 'Clonează',
|
'Clone' => 'Clonează',
|
||||||
'Partition by' => 'Împarte',
|
'Partition by' => 'Împarte',
|
||||||
|
|||||||
@@ -7,14 +7,14 @@ $translations = array(
|
|||||||
'Username' => 'Имя пользователя',
|
'Username' => 'Имя пользователя',
|
||||||
'Password' => 'Пароль',
|
'Password' => 'Пароль',
|
||||||
'Select database' => 'Выбрать базу данных',
|
'Select database' => 'Выбрать базу данных',
|
||||||
'Invalid database.' => 'Плохая база данных.',
|
'Invalid database.' => 'Неверная база данных.',
|
||||||
'Table has been dropped.' => 'Таблица была удалена.',
|
'Table has been dropped.' => 'Таблица была удалена.',
|
||||||
'Table has been altered.' => 'Таблица была изменена.',
|
'Table has been altered.' => 'Таблица была изменена.',
|
||||||
'Table has been created.' => 'Таблица была создана.',
|
'Table has been created.' => 'Таблица была создана.',
|
||||||
'Alter table' => 'Изменить таблицу',
|
'Alter table' => 'Изменить таблицу',
|
||||||
'Create table' => 'Создать таблицу',
|
'Create table' => 'Создать таблицу',
|
||||||
'Table name' => 'Название таблицы',
|
'Table name' => 'Название таблицы',
|
||||||
'engine' => 'тип',
|
'engine' => 'Тип таблицы',
|
||||||
'collation' => 'режим сопоставления',
|
'collation' => 'режим сопоставления',
|
||||||
'Column name' => 'Название поля',
|
'Column name' => 'Название поля',
|
||||||
'Type' => 'Тип',
|
'Type' => 'Тип',
|
||||||
@@ -29,7 +29,7 @@ $translations = array(
|
|||||||
'Database has been altered.' => 'База данных была изменена.',
|
'Database has been altered.' => 'База данных была изменена.',
|
||||||
'Alter database' => 'Изменить базу данных',
|
'Alter database' => 'Изменить базу данных',
|
||||||
'Create database' => 'Создать базу данных',
|
'Create database' => 'Создать базу данных',
|
||||||
'SQL command' => 'SQL запрос',
|
'SQL command' => 'SQL-запрос',
|
||||||
'Logout' => 'Выйти',
|
'Logout' => 'Выйти',
|
||||||
'database' => 'база данных',
|
'database' => 'база данных',
|
||||||
'Use' => 'Выбрать',
|
'Use' => 'Выбрать',
|
||||||
@@ -67,7 +67,7 @@ $translations = array(
|
|||||||
'Triggers' => 'Триггеры',
|
'Triggers' => 'Триггеры',
|
||||||
'View' => 'Представление',
|
'View' => 'Представление',
|
||||||
'Unable to select the table' => 'Не удалось получить данные из таблицы',
|
'Unable to select the table' => 'Не удалось получить данные из таблицы',
|
||||||
'Invalid CSRF token. Send the form again.' => 'Недействительный CSRF токен. Отправите форму ещё раз.',
|
'Invalid CSRF token. Send the form again.' => 'Недействительный CSRF-токен. Отправите форму ещё раз.',
|
||||||
'Comment' => 'Комментарий',
|
'Comment' => 'Комментарий',
|
||||||
'Default values' => 'Значения по умолчанию',
|
'Default values' => 'Значения по умолчанию',
|
||||||
'%d byte(s)' => array('%d байт', '%d байта', '%d байтов'),
|
'%d byte(s)' => array('%d байт', '%d байта', '%d байтов'),
|
||||||
@@ -90,13 +90,13 @@ $translations = array(
|
|||||||
'Change' => 'Изменить',
|
'Change' => 'Изменить',
|
||||||
'Source' => 'Источник',
|
'Source' => 'Источник',
|
||||||
'Target' => 'Цель',
|
'Target' => 'Цель',
|
||||||
'Add column' => 'Добавить колонку',
|
'Add column' => 'Добавить поле',
|
||||||
'Alter' => 'Изменить',
|
'Alter' => 'Изменить',
|
||||||
'Add foreign key' => 'Добавить внешний ключ',
|
'Add foreign key' => 'Добавить внешний ключ',
|
||||||
'ON DELETE' => 'При стирании',
|
'ON DELETE' => 'При стирании',
|
||||||
'ON UPDATE' => 'При обновлении',
|
'ON UPDATE' => 'При обновлении',
|
||||||
'Index Type' => 'Тип индекса',
|
'Index Type' => 'Тип индекса',
|
||||||
'Column (length)' => 'Колонка (длина)',
|
'Column (length)' => 'Поле (длина)',
|
||||||
'View has been dropped.' => 'Представление было удалено.',
|
'View has been dropped.' => 'Представление было удалено.',
|
||||||
'View has been altered.' => 'Представление было изменено.',
|
'View has been altered.' => 'Представление было изменено.',
|
||||||
'View has been created.' => 'Представление было создано.',
|
'View has been created.' => 'Представление было создано.',
|
||||||
@@ -134,11 +134,11 @@ $translations = array(
|
|||||||
'User has been altered.' => 'Пользователь был изменён.',
|
'User has been altered.' => 'Пользователь был изменён.',
|
||||||
'User has been created.' => 'Пользователь был создан.',
|
'User has been created.' => 'Пользователь был создан.',
|
||||||
'Hashed' => 'Хешировано',
|
'Hashed' => 'Хешировано',
|
||||||
'Column' => 'Колонка',
|
'Column' => 'поле',
|
||||||
'Routine' => 'Процедура',
|
'Routine' => 'Процедура',
|
||||||
'Grant' => 'Позволить',
|
'Grant' => 'Позволить',
|
||||||
'Revoke' => 'Запретить',
|
'Revoke' => 'Запретить',
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Слишком большой объем POST-данных. Пошлите меньший объем данных или увеличьте параметр конфигурационной директивы %s.',
|
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Слишком большой объем POST-данных. Пошлите меньший объём данных или увеличьте параметр конфигурационной директивы %s.',
|
||||||
'Logged as: %s' => 'Вы вошли как: %s',
|
'Logged as: %s' => 'Вы вошли как: %s',
|
||||||
'Move up' => 'Переместить вверх',
|
'Move up' => 'Переместить вверх',
|
||||||
'Move down' => 'Переместить вниз',
|
'Move down' => 'Переместить вниз',
|
||||||
@@ -181,11 +181,11 @@ $translations = array(
|
|||||||
'Tables have been moved.' => 'Таблицы были перемещены.',
|
'Tables have been moved.' => 'Таблицы были перемещены.',
|
||||||
'Move to other database' => 'Переместить в другую базу данных',
|
'Move to other database' => 'Переместить в другую базу данных',
|
||||||
'Move' => 'Переместить',
|
'Move' => 'Переместить',
|
||||||
'Engine' => 'Тип',
|
'Engine' => 'Тип таблиц',
|
||||||
'Save and continue edit' => 'Сохранить и продолжить редактирование',
|
'Save and continue edit' => 'Сохранить и продолжить редактирование',
|
||||||
'original' => 'исходный',
|
'original' => 'исходный',
|
||||||
'%d item(s) have been affected.' => array('Была изменена %d запись.', 'Были изменены %d записи.', 'Было изменено %d записей.'),
|
'%d item(s) have been affected.' => array('Была изменена %d запись.', 'Были изменены %d записи.', 'Было изменено %d записей.'),
|
||||||
'whole result' => 'весь результат',
|
'Whole result' => 'Весь результат',
|
||||||
'Tables have been dropped.' => 'Таблицы были удалены.',
|
'Tables have been dropped.' => 'Таблицы были удалены.',
|
||||||
'Clone' => 'Клонировать',
|
'Clone' => 'Клонировать',
|
||||||
'Partition by' => 'Разделить по',
|
'Partition by' => 'Разделить по',
|
||||||
@@ -202,20 +202,20 @@ $translations = array(
|
|||||||
'[yyyy]-mm-dd' => 'дд.мм.[гггг]',
|
'[yyyy]-mm-dd' => 'дд.мм.[гггг]',
|
||||||
'History' => 'История',
|
'History' => 'История',
|
||||||
'Variables' => 'Переменные',
|
'Variables' => 'Переменные',
|
||||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Колонки должны иметь одинаковые типы данных, в результирующей колонке должен быть индекс, данные для импорта должны существовать.',
|
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Поля должны иметь одинаковые типы данных, в результирующем поле должен быть индекс, данные для импорта должны существовать.',
|
||||||
'Relations' => 'Реляции',
|
'Relations' => 'Отношения',
|
||||||
'Run file' => 'Запустить файл',
|
'Run file' => 'Запустить файл',
|
||||||
'Clear' => 'Очистить',
|
'Clear' => 'Очистить',
|
||||||
'Maximum allowed file size is %sB.' => 'Максимальный разрешённый размер файла - %sB.',
|
'Maximum allowed file size is %sB.' => 'Максимальный разрешённый размер файла — %sB.',
|
||||||
'Numbers' => 'Число',
|
'Numbers' => 'Числа',
|
||||||
'Date and time' => 'Дата и время',
|
'Date and time' => 'Дата и время',
|
||||||
'Strings' => 'Строки',
|
'Strings' => 'Строки',
|
||||||
'Binary' => 'Двоичный тип',
|
'Binary' => 'Двоичный тип',
|
||||||
'Lists' => 'Списки',
|
'Lists' => 'Списки',
|
||||||
'Editor' => 'Редактор',
|
'Editor' => 'Редактор',
|
||||||
'E-mail' => 'Электропочта',
|
'E-mail' => 'Эл. почта',
|
||||||
'From' => 'От',
|
'From' => 'От',
|
||||||
'Subject' => 'Кому',
|
'Subject' => 'Тема',
|
||||||
'Send' => 'Послать',
|
'Send' => 'Послать',
|
||||||
'%d e-mail(s) have been sent.' => array('Было отправлено %d письмо.', 'Было отправлено %d письма.', 'Было отправлено %d писем.'),
|
'%d e-mail(s) have been sent.' => array('Было отправлено %d письмо.', 'Было отправлено %d письма.', 'Было отправлено %d писем.'),
|
||||||
'Webserver file %s' => 'Файл %s на вебсервере',
|
'Webserver file %s' => 'Файл %s на вебсервере',
|
||||||
@@ -241,7 +241,7 @@ $translations = array(
|
|||||||
'Alter type' => 'Изменить тип',
|
'Alter type' => 'Изменить тип',
|
||||||
'Type has been dropped.' => 'Тип удален.',
|
'Type has been dropped.' => 'Тип удален.',
|
||||||
'Type has been created.' => 'Создан новый тип.',
|
'Type has been created.' => 'Создан новый тип.',
|
||||||
'Ctrl+click on a value to modify it.' => 'Ctrl+кликни по значению, чтобы его изменить.',
|
'Ctrl+click on a value to modify it.' => 'Выполните Ctrl+Щелчок мышью по значению, чтобы его изменить.',
|
||||||
'Use edit link to modify this value.' => 'Изменить это значение можно с помощью ссылки «изменить».',
|
'Use edit link to modify this value.' => 'Изменить это значение можно с помощью ссылки «изменить».',
|
||||||
'last' => 'последняя',
|
'last' => 'последняя',
|
||||||
'From server' => 'С сервера',
|
'From server' => 'С сервера',
|
||||||
@@ -265,4 +265,29 @@ $translations = array(
|
|||||||
'Permanent link' => 'Постоянная ссылка',
|
'Permanent link' => 'Постоянная ссылка',
|
||||||
'Edit all' => 'Редактировать всё',
|
'Edit all' => 'Редактировать всё',
|
||||||
'HH:MM:SS' => 'ЧЧ:ММ:СС',
|
'HH:MM:SS' => 'ЧЧ:ММ:СС',
|
||||||
|
'Tables have been optimized.' => 'Таблицы оптимизированы.',
|
||||||
|
'Materialized view' => 'Материализованное представление',
|
||||||
|
'Vacuum' => 'Вакуум',
|
||||||
|
'Selected' => 'Выбранные',
|
||||||
|
'File must be in UTF-8 encoding.' => 'Файл должен быть в кодировке UTF-8.',
|
||||||
|
'Modify' => 'Изменить',
|
||||||
|
'Loading' => 'Загрузка',
|
||||||
|
'Load more data' => 'Загрузить ещё данные',
|
||||||
|
'ATTACH queries are not supported.' => 'ATTACH-запросы не поддерживаются.',
|
||||||
|
'%d / ' => '%d / ',
|
||||||
|
'Limit rows' => 'Лимит строк',
|
||||||
|
'<a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to use SQLite.' => '<a href="https://www.adminer.org/en/extension/"%s>Реализуйте</a> метод %s, чтобы использовать SQLite.',
|
||||||
|
'Default value' => 'Значение по умолчанию',
|
||||||
|
'Full table scan' => 'Анализ полной таблицы',
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array('Слишком много неудачных попыток входа. Попробуйте снова через %d минуту.', 'Слишком много неудачных попыток входа. Попробуйте снова через %d минуты.', 'Слишком много неудачных попыток входа. Попробуйте снова через %d минут.'),
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Мастер-пароль истёк. <a href="https://www.adminer.org/en/extension/"%s>Реализуйте</a> метод %s, чтобы сделать его постоянным.',
|
||||||
|
'If you did not send this request from Adminer then close this page.' => 'Если вы не посылали этот запрос из Adminer, закройте эту страницу.',
|
||||||
|
'You can upload a big SQL file via FTP and import it from server.' => 'Вы можете закачать большой SQL-файл по FTP и затем импортировать его с сервера.',
|
||||||
|
'Size' => 'Размер',
|
||||||
|
'Compute' => 'Вычислить',
|
||||||
|
'You are offline.' => 'Вы не выполнили вход.',
|
||||||
|
'You have no privileges to update this table.' => 'У вас нет прав на обновление этой таблицы.',
|
||||||
|
'Saving' => 'Сохранение',
|
||||||
|
'yes' => 'Да',
|
||||||
|
'no' => 'Нет',
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -187,7 +187,7 @@ $translations = array(
|
|||||||
'Move to other database' => 'Presunúť do inej databázy',
|
'Move to other database' => 'Presunúť do inej databázy',
|
||||||
'Move' => 'Presunúť',
|
'Move' => 'Presunúť',
|
||||||
'%d item(s) have been affected.' => '%d položiek bolo ovplyvnených.',
|
'%d item(s) have been affected.' => '%d položiek bolo ovplyvnených.',
|
||||||
'whole result' => 'celý výsledok',
|
'Whole result' => 'Celý výsledok',
|
||||||
'Clone' => 'Klonovať',
|
'Clone' => 'Klonovať',
|
||||||
'Partition by' => 'Rozdeliť podľa',
|
'Partition by' => 'Rozdeliť podľa',
|
||||||
'Partitions' => 'Oddiely',
|
'Partitions' => 'Oddiely',
|
||||||
|
|||||||
@@ -225,7 +225,7 @@ $translations = array(
|
|||||||
'%d row(s)' => array('%d vrstica', '%d vrstici', '%d vrstice', '%d vrstic'),
|
'%d row(s)' => array('%d vrstica', '%d vrstici', '%d vrstice', '%d vrstic'),
|
||||||
'Page' => 'Stran',
|
'Page' => 'Stran',
|
||||||
'last' => 'Zadnja',
|
'last' => 'Zadnja',
|
||||||
'whole result' => 'cel razultat',
|
'Whole result' => 'Cel razultat',
|
||||||
'%d byte(s)' => array('%d bajt', '%d bajta', '%d bajti', '%d bajtov'),
|
'%d byte(s)' => array('%d bajt', '%d bajta', '%d bajti', '%d bajtov'),
|
||||||
|
|
||||||
'Import' => 'Uvozi',
|
'Import' => 'Uvozi',
|
||||||
|
|||||||
@@ -231,9 +231,9 @@ $translations = array(
|
|||||||
'%d row(s)' => array('%d ред', '%d реда', '%d редова'),
|
'%d row(s)' => array('%d ред', '%d реда', '%d редова'),
|
||||||
'Page' => 'Страна',
|
'Page' => 'Страна',
|
||||||
'last' => 'последња',
|
'last' => 'последња',
|
||||||
'Loading' => 'Учитавам',
|
'Loading' => 'Учитавам',
|
||||||
'Load more data' => 'Учитавам још података',
|
'Load more data' => 'Учитавам још података',
|
||||||
'whole result' => 'цео резултат',
|
'Whole result' => 'Цео резултат',
|
||||||
'%d byte(s)' => array('%d бајт', '%d бајта', '%d бајтова'),
|
'%d byte(s)' => array('%d бајт', '%d бајта', '%d бајтова'),
|
||||||
|
|
||||||
'Import' => 'Увоз',
|
'Import' => 'Увоз',
|
||||||
|
|||||||
@@ -183,7 +183,7 @@ $translations = array(
|
|||||||
'original' => 'அசல்',
|
'original' => 'அசல்',
|
||||||
'Tables have been dropped.' => 'அட்டவணை நீக்கப்பட்டது.',
|
'Tables have been dropped.' => 'அட்டவணை நீக்கப்பட்டது.',
|
||||||
'%d item(s) have been affected.' => array('%d உருப்படி மாற்றமடைந்தது.', '%d உருப்படிகள் மாற்றமடைந்தன.'),
|
'%d item(s) have been affected.' => array('%d உருப்படி மாற்றமடைந்தது.', '%d உருப்படிகள் மாற்றமடைந்தன.'),
|
||||||
'whole result' => 'முழுமையான முடிவு',
|
'Whole result' => 'முழுமையான முடிவு',
|
||||||
'Clone' => 'நகலி (Clone)',
|
'Clone' => 'நகலி (Clone)',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'அனுமதிக்கப்பட்ட அதிகபட்ச கோப்புகளின் எண்ணிக்கை மீறப்பட்டது. தயவு செய்து %s மற்றும் %s யை அதிகரிக்கவும்.',
|
'Maximum number of allowed fields exceeded. Please increase %s.' => 'அனுமதிக்கப்பட்ட அதிகபட்ச கோப்புகளின் எண்ணிக்கை மீறப்பட்டது. தயவு செய்து %s மற்றும் %s யை அதிகரிக்கவும்.',
|
||||||
'Partition by' => 'பிரித்தது',
|
'Partition by' => 'பிரித்தது',
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ $translations = array(
|
|||||||
'original' => 'ต้นฉบับ',
|
'original' => 'ต้นฉบับ',
|
||||||
'Tables have been dropped.' => 'ตารางถูกลบแล้ว.',
|
'Tables have been dropped.' => 'ตารางถูกลบแล้ว.',
|
||||||
'%d item(s) have been affected.' => 'มี %d รายการถูกดำเนินการแล้ว.',
|
'%d item(s) have been affected.' => 'มี %d รายการถูกดำเนินการแล้ว.',
|
||||||
'whole result' => 'รวมผล',
|
'Whole result' => 'รวมผล',
|
||||||
'Clone' => 'ทำซ้ำ',
|
'Clone' => 'ทำซ้ำ',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'จำนวนสูงสุดของฟิลด์อนุญาตให้เกิน กรุณาเพิ่มอีก %s.',
|
'Maximum number of allowed fields exceeded. Please increase %s.' => 'จำนวนสูงสุดของฟิลด์อนุญาตให้เกิน กรุณาเพิ่มอีก %s.',
|
||||||
'Partition by' => 'พาร์ทิชันโดย',
|
'Partition by' => 'พาร์ทิชันโดย',
|
||||||
|
|||||||
@@ -9,14 +9,21 @@ $translations = array(
|
|||||||
'Login' => 'Giriş',
|
'Login' => 'Giriş',
|
||||||
'Logout' => 'Çıkış',
|
'Logout' => 'Çıkış',
|
||||||
'Logged as: %s' => '%s olarak giriş yapıldı.',
|
'Logged as: %s' => '%s olarak giriş yapıldı.',
|
||||||
'Logout successful.' => 'Başarıyla çıkış yapıldı.',
|
'Logout successful.' => 'Oturum başarıyla sonlandı.',
|
||||||
'Invalid credentials.' => 'Geçersiz kimlik.',
|
'Thanks for using Adminer, consider <a href="%s">donating</a>.' => 'Adminer kullandığınız için teşekkür ederiz <a href="%s">bağış yapmayı düşünün</a>.',
|
||||||
|
'Invalid credentials.' => 'Geçersiz kimlik bilgileri.',
|
||||||
|
'<a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to use SQLite.' => 'SQLite kullanmak için <a href="https://www.adminer.org/en/extension/"%s>%s metodunu</a> kullanın.',
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array('Çok fazla oturum açma denemesi yapıldı.', '%d Dakika sonra tekrar deneyiniz.'),
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Ana şifrenin süresi doldu. Kalıcı olması için <a href="https://www.adminer.org/en/extension/"%s>%s medodunu</a> kullanın.',
|
||||||
'Language' => 'Dil',
|
'Language' => 'Dil',
|
||||||
'Invalid CSRF token. Send the form again.' => 'Geçersiz (CSRF) jetonu. Formu tekrar yolla.',
|
'Invalid CSRF token. Send the form again.' => 'Geçersiz (CSRF) jetonu. Formu tekrar yolla.',
|
||||||
|
'If you did not send this request from Adminer then close this page.' => 'Bu isteği Adminer\'den göndermediyseniz bu sayfayı kapatın.',
|
||||||
'No extension' => 'Uzantı yok',
|
'No extension' => 'Uzantı yok',
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'Desteklenen PHP eklentilerinden (%s) hiçbiri mevcut değil.',
|
'None of the supported PHP extensions (%s) are available.' => 'Desteklenen PHP eklentilerinden (%s) hiçbiri mevcut değil.',
|
||||||
|
'Connecting to privileged ports is not allowed.' => 'Ayrıcalıklı bağlantı noktalarına bağlanmaya izin verilmiyor.',
|
||||||
'Session support must be enabled.' => 'Oturum desteği etkin olmalıdır.',
|
'Session support must be enabled.' => 'Oturum desteği etkin olmalıdır.',
|
||||||
'Session expired, please login again.' => 'Oturum süresi doldu, lütfen tekrar giriş yapın.',
|
'Session expired, please login again.' => 'Oturum süresi doldu, lütfen tekrar giriş yapın.',
|
||||||
|
'The action will be performed after successful login with the same credentials.' => 'İşlem, aynı kimlik bilgileriyle başarıyla oturum açıldıktan sonra gerçekleştirilecektir.',
|
||||||
'%s version: %s through PHP extension %s' => '%s sürüm: %s, %s PHP eklentisi ile',
|
'%s version: %s through PHP extension %s' => '%s sürüm: %s, %s PHP eklentisi ile',
|
||||||
'Refresh' => 'Tazele',
|
'Refresh' => 'Tazele',
|
||||||
|
|
||||||
@@ -46,6 +53,8 @@ $translations = array(
|
|||||||
'Query executed OK, %d row(s) affected.' => array('Sorgu başarıyla çalıştırıldı, %d adet kayıt etkilendi.', 'Sorgu başarıyla çalıştırıldı, %d adet kayıt etkilendi.'),
|
'Query executed OK, %d row(s) affected.' => array('Sorgu başarıyla çalıştırıldı, %d adet kayıt etkilendi.', 'Sorgu başarıyla çalıştırıldı, %d adet kayıt etkilendi.'),
|
||||||
'No commands to execute.' => 'Çalıştırılacak komut yok.',
|
'No commands to execute.' => 'Çalıştırılacak komut yok.',
|
||||||
'Error in query' => 'Sorguda hata',
|
'Error in query' => 'Sorguda hata',
|
||||||
|
'Warnings' => 'Uyarılar',
|
||||||
|
'ATTACH queries are not supported.' => 'ATTACH sorguları desteklenmiyor.',
|
||||||
'Execute' => 'Çalıştır',
|
'Execute' => 'Çalıştır',
|
||||||
'Stop on error' => 'Hata oluşursa dur',
|
'Stop on error' => 'Hata oluşursa dur',
|
||||||
'Show only errors' => 'Sadece hataları göster.',
|
'Show only errors' => 'Sadece hataları göster.',
|
||||||
@@ -64,16 +73,20 @@ $translations = array(
|
|||||||
'Unable to upload a file.' => 'Dosya gönderilemiyor.',
|
'Unable to upload a file.' => 'Dosya gönderilemiyor.',
|
||||||
'Maximum allowed file size is %sB.' => 'İzin verilen dosya boyutu sınırı %sB.',
|
'Maximum allowed file size is %sB.' => 'İzin verilen dosya boyutu sınırı %sB.',
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Çok büyük POST verisi, veriyi azaltın ya da %s ayar yönergesini uygun olarak yapılandırın.',
|
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Çok büyük POST verisi, veriyi azaltın ya da %s ayar yönergesini uygun olarak yapılandırın.',
|
||||||
|
'You can upload a big SQL file via FTP and import it from server.' => 'FTP yoluyla büyük bir SQL dosyası yükleyebilir ve sunucudan içe aktarabilirsiniz.',
|
||||||
|
'You are offline.' => 'Çevrimdışısınız.',
|
||||||
|
|
||||||
'Export' => 'Dışarı Aktar',
|
'Export' => 'Dışarı Aktar',
|
||||||
'Output' => 'Çıktı',
|
'Output' => 'Çıktı',
|
||||||
'open' => 'aç',
|
'open' => 'aç',
|
||||||
'save' => 'kaydet',
|
'save' => 'kaydet',
|
||||||
|
'Saving' => 'Saydediliyor',
|
||||||
'Format' => 'Biçim',
|
'Format' => 'Biçim',
|
||||||
'Data' => 'Veri',
|
'Data' => 'Veri',
|
||||||
|
|
||||||
'Database' => 'Veri Tabanı',
|
'Database' => 'Veri Tabanı',
|
||||||
'database' => 'veri tabanı',
|
'database' => 'veri tabanı',
|
||||||
|
'DB' => 'DB',
|
||||||
'Use' => 'Kullan',
|
'Use' => 'Kullan',
|
||||||
'Select database' => 'Veri tabanı seç',
|
'Select database' => 'Veri tabanı seç',
|
||||||
'Invalid database.' => 'Geçersiz veri tabanı.',
|
'Invalid database.' => 'Geçersiz veri tabanı.',
|
||||||
@@ -95,12 +108,13 @@ $translations = array(
|
|||||||
'Engine' => 'Motor',
|
'Engine' => 'Motor',
|
||||||
'Collation' => 'Karşılaştırma',
|
'Collation' => 'Karşılaştırma',
|
||||||
'Data Length' => 'Veri Uzunluğu',
|
'Data Length' => 'Veri Uzunluğu',
|
||||||
'Index Length' => 'Dizin Uzunluğu',
|
'Index Length' => 'İndex Uzunluğu',
|
||||||
'Data Free' => 'Boş Veri',
|
'Data Free' => 'Boş Veri',
|
||||||
'Rows' => 'Kayıtlar',
|
'Rows' => 'Kayıtlar',
|
||||||
'%d in total' => 'toplam %d',
|
'%d in total' => 'toplam %d',
|
||||||
'Analyze' => 'Çözümle',
|
'Analyze' => 'Çözümle',
|
||||||
'Optimize' => 'En uygun hale getir',
|
'Optimize' => 'Optimize Et',
|
||||||
|
'Vacuum' => 'Vakumla',
|
||||||
'Check' => 'Denetle',
|
'Check' => 'Denetle',
|
||||||
'Repair' => 'Tamir Et',
|
'Repair' => 'Tamir Et',
|
||||||
'Truncate' => 'Boşalt',
|
'Truncate' => 'Boşalt',
|
||||||
@@ -158,9 +172,13 @@ $translations = array(
|
|||||||
'Auto Increment' => 'Otomatik Artır',
|
'Auto Increment' => 'Otomatik Artır',
|
||||||
'Options' => 'Seçenekler',
|
'Options' => 'Seçenekler',
|
||||||
'Comment' => 'Yorum',
|
'Comment' => 'Yorum',
|
||||||
|
'Default value' => 'Varsayılan değer',
|
||||||
'Default values' => 'Varsayılan değerler',
|
'Default values' => 'Varsayılan değerler',
|
||||||
'Drop' => 'Sil',
|
'Drop' => 'Sil',
|
||||||
|
'Drop %s?' => 'Sil %s?',
|
||||||
'Are you sure?' => 'Emin misiniz?',
|
'Are you sure?' => 'Emin misiniz?',
|
||||||
|
'Size' => 'Boyut',
|
||||||
|
'Compute' => 'Hesapla',
|
||||||
'Move up' => 'Yukarı taşı',
|
'Move up' => 'Yukarı taşı',
|
||||||
'Move down' => 'Aşağı taşı',
|
'Move down' => 'Aşağı taşı',
|
||||||
'Remove' => 'Sil',
|
'Remove' => 'Sil',
|
||||||
@@ -172,17 +190,18 @@ $translations = array(
|
|||||||
'Values' => 'Değerler',
|
'Values' => 'Değerler',
|
||||||
|
|
||||||
'View' => 'Görünüm',
|
'View' => 'Görünüm',
|
||||||
|
'Materialized view' => 'Materialized Görünüm',
|
||||||
'View has been dropped.' => 'Görünüm silindi.',
|
'View has been dropped.' => 'Görünüm silindi.',
|
||||||
'View has been altered.' => 'Görünüm değiştirildi.',
|
'View has been altered.' => 'Görünüm değiştirildi.',
|
||||||
'View has been created.' => 'Görünüm oluşturuldu.',
|
'View has been created.' => 'Görünüm oluşturuldu.',
|
||||||
'Alter view' => 'Görünümü değiştir',
|
'Alter view' => 'Görünümü değiştir',
|
||||||
'Create view' => 'Görünüm oluştur',
|
'Create view' => 'Görünüm oluştur',
|
||||||
|
|
||||||
'Indexes' => 'Dizinler',
|
'Indexes' => 'İndeksler',
|
||||||
'Indexes have been altered.' => 'Dizinler değiştirildi.',
|
'Indexes have been altered.' => 'İndeksler değiştirildi.',
|
||||||
'Alter indexes' => 'Dizinleri değiştir',
|
'Alter indexes' => 'İndeksleri değiştir',
|
||||||
'Add next' => 'Bundan sonra ekle',
|
'Add next' => 'Bundan sonra ekle',
|
||||||
'Index Type' => 'Dizin Türü',
|
'Index Type' => 'İndex Türü',
|
||||||
'Column (length)' => 'Kolon (uzunluğu)',
|
'Column (length)' => 'Kolon (uzunluğu)',
|
||||||
|
|
||||||
'Foreign keys' => 'Dış anahtarlar',
|
'Foreign keys' => 'Dış anahtarlar',
|
||||||
@@ -221,25 +240,29 @@ $translations = array(
|
|||||||
'anywhere' => 'hiçbir yerde',
|
'anywhere' => 'hiçbir yerde',
|
||||||
'Search data in tables' => 'Tablolarda veri ara',
|
'Search data in tables' => 'Tablolarda veri ara',
|
||||||
'Sort' => 'Sırala',
|
'Sort' => 'Sırala',
|
||||||
'descending' => 'azalan',
|
'descending' => 'Azalan',
|
||||||
'Limit' => 'sınır',
|
'Limit' => 'Limit',
|
||||||
'Text length' => 'Yazı uzunluğu',
|
'Limit rows' => 'Satır Limiti',
|
||||||
'Action' => 'Eylem',
|
'Text length' => 'Metin Boyutu',
|
||||||
'Full table scan' => 'Tam tablo tarama',
|
'Action' => 'İşlem',
|
||||||
|
'Full table scan' => 'Tam tablo taraması',
|
||||||
'Unable to select the table' => 'Tablo seçilemedi',
|
'Unable to select the table' => 'Tablo seçilemedi',
|
||||||
'No rows.' => 'Kayıt yok.',
|
'No rows.' => 'Kayıt yok.',
|
||||||
|
'%d / ' => '%d / ',
|
||||||
'%d row(s)' => array('%d kayıt', '%d adet kayıt'),
|
'%d row(s)' => array('%d kayıt', '%d adet kayıt'),
|
||||||
'Page' => 'Sayfa',
|
'Page' => 'Sayfa',
|
||||||
'last' => 'son',
|
'last' => 'son',
|
||||||
'Load more data' => 'Daha fazla veri yükle',
|
'Load more data' => 'Daha fazla veri yükle',
|
||||||
'Loading' => 'Yükleniyor',
|
'Loading' => 'Yükleniyor',
|
||||||
'whole result' => 'tüm sonuç',
|
'Whole result' => 'Tüm sonuç',
|
||||||
'%d byte(s)' => array('%d bayt', '%d bayt'),
|
'%d byte(s)' => array('%d bayt', '%d bayt'),
|
||||||
|
|
||||||
'Import' => 'İçeri Aktar',
|
'Import' => 'İçeri Aktar',
|
||||||
'%d row(s) have been imported.' => array('%d kayıt içeri aktarıldı.', '%d adet kayıt içeri aktarıldı.'),
|
'%d row(s) have been imported.' => array('%d kayıt içeri aktarıldı.', '%d adet kayıt içeri aktarıldı.'),
|
||||||
|
'File must be in UTF-8 encoding.' => 'Dosya UTF-8 kodlamasında olmalıdır.',
|
||||||
|
|
||||||
// in-place editing in select
|
// in-place editing in select
|
||||||
|
'Modify' => 'Düzenle',
|
||||||
'Ctrl+click on a value to modify it.' => 'Bir değeri değiştirmek için üzerine Ctrl+tıklayın.',
|
'Ctrl+click on a value to modify it.' => 'Bir değeri değiştirmek için üzerine Ctrl+tıklayın.',
|
||||||
'Use edit link to modify this value.' => 'Değeri değiştirmek için düzenleme bağlantısını kullanın.',
|
'Use edit link to modify this value.' => 'Değeri değiştirmek için düzenleme bağlantısını kullanın.',
|
||||||
|
|
||||||
@@ -258,8 +281,10 @@ $translations = array(
|
|||||||
'Save' => 'Kaydet',
|
'Save' => 'Kaydet',
|
||||||
'Save and continue edit' => 'Kaydet ve düzenlemeye devam et',
|
'Save and continue edit' => 'Kaydet ve düzenlemeye devam et',
|
||||||
'Save and insert next' => 'Kaydet ve sonrakini ekle',
|
'Save and insert next' => 'Kaydet ve sonrakini ekle',
|
||||||
|
'Selected' => 'Seçildi',
|
||||||
'Clone' => 'Kopyala',
|
'Clone' => 'Kopyala',
|
||||||
'Delete' => 'Sil',
|
'Delete' => 'Sil',
|
||||||
|
'You have no privileges to update this table.' => 'Bu tabloyu güncellemek için yetkiniz yok.',
|
||||||
|
|
||||||
'E-mail' => 'E-posta',
|
'E-mail' => 'E-posta',
|
||||||
'From' => 'Gönderen',
|
'From' => 'Gönderen',
|
||||||
|
|||||||
@@ -230,7 +230,7 @@ $translations = array(
|
|||||||
'%d row(s)' => array('%d рядок', '%d рядки', '%d рядків'),
|
'%d row(s)' => array('%d рядок', '%d рядки', '%d рядків'),
|
||||||
'Page' => 'Сторінка',
|
'Page' => 'Сторінка',
|
||||||
'last' => 'остання',
|
'last' => 'остання',
|
||||||
'whole result' => 'весь результат',
|
'Whole result' => 'Весь результат',
|
||||||
'%d byte(s)' => array('%d байт', '%d байта', '%d байтів'),
|
'%d byte(s)' => array('%d байт', '%d байта', '%d байтів'),
|
||||||
|
|
||||||
'Import' => 'Імпортувати',
|
'Import' => 'Імпортувати',
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ $translations = array(
|
|||||||
'Logout successful.' => 'Đã thoát xong.',
|
'Logout successful.' => 'Đã thoát xong.',
|
||||||
'Invalid credentials.' => 'Tài khoản sai.',
|
'Invalid credentials.' => 'Tài khoản sai.',
|
||||||
'Too many unsuccessful logins, try again in %d minute(s).' => 'Bạn gõ sai tài khoản quá nhiều lần, hãy thử lại sau %d phút nữa.',
|
'Too many unsuccessful logins, try again in %d minute(s).' => 'Bạn gõ sai tài khoản quá nhiều lần, hãy thử lại sau %d phút nữa.',
|
||||||
'Master password expired. <a href="https://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.' => 'Mật khẩu đã hết hạn. <a href="https://www.adminer.org/en/extension/" target="_blank">Thử cách làm</a> để giữ cố định.',
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Mật khẩu đã hết hạn. <a href="https://www.adminer.org/en/extension/"%s>Thử cách làm</a> để giữ cố định.',
|
||||||
'Language' => 'Ngôn ngữ',
|
'Language' => 'Ngôn ngữ',
|
||||||
'Invalid CSRF token. Send the form again.' => 'Mã kiểm tra CSRF sai, hãy nhập lại biểu mẫu.',
|
'Invalid CSRF token. Send the form again.' => 'Mã kiểm tra CSRF sai, hãy nhập lại biểu mẫu.',
|
||||||
'No extension' => 'Không có phần mở rộng',
|
'No extension' => 'Không có phần mở rộng',
|
||||||
@@ -238,7 +238,7 @@ $translations = array(
|
|||||||
'last' => 'cuối',
|
'last' => 'cuối',
|
||||||
'Load more data' => 'Xem thêm dữ liệu',
|
'Load more data' => 'Xem thêm dữ liệu',
|
||||||
'Loading' => 'Đang nạp',
|
'Loading' => 'Đang nạp',
|
||||||
'whole result' => 'toàn bộ kết quả',
|
'Whole result' => 'Toàn bộ kết quả',
|
||||||
'%d byte(s)' => '%d byte(s)',
|
'%d byte(s)' => '%d byte(s)',
|
||||||
|
|
||||||
'Import' => 'Nhập khẩu',
|
'Import' => 'Nhập khẩu',
|
||||||
|
|||||||
@@ -8,20 +8,23 @@ $translations = array(
|
|||||||
'Permanent login' => 'Xx',
|
'Permanent login' => 'Xx',
|
||||||
'Login' => 'Xx',
|
'Login' => 'Xx',
|
||||||
'Logout' => 'Xx',
|
'Logout' => 'Xx',
|
||||||
'Logged as: %s' => 'Xx',
|
'Logged as: %s' => 'Xx: %s',
|
||||||
'Logout successful.' => 'Xx.',
|
'Logout successful.' => 'Xx.',
|
||||||
|
'Thanks for using Adminer, consider <a href="%s">donating</a>.' => 'Xx <a href="%s">xx</a>.',
|
||||||
'Invalid credentials.' => 'Xx.',
|
'Invalid credentials.' => 'Xx.',
|
||||||
'<a href="https://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to use SQLite.' => 'Xx.',
|
'<a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to use SQLite.' => '<a href="https://www.adminer.org/en/extension/"%s>Xx</a> %s xx.',
|
||||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Xx.', 'Xx.'),
|
'Too many unsuccessful logins, try again in %d minute(s).' => array('Xx %d.', 'Xx %d.'),
|
||||||
'Master password expired. <a href="https://www.adminer.org/en/extension/" target="_blank">Implement</a> %s method to make it permanent.' => 'Xx.',
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => '<a href="https://www.adminer.org/en/extension/"%s>Xx</a> %s xx.',
|
||||||
'Language' => 'Xx',
|
'Language' => 'Xx',
|
||||||
'Invalid CSRF token. Send the form again.' => 'Xx.',
|
'Invalid CSRF token. Send the form again.' => 'Xx.',
|
||||||
'If you did not send this request from Adminer then close this page.' => 'Xx.',
|
'If you did not send this request from Adminer then close this page.' => 'Xx.',
|
||||||
'No extension' => 'Xx',
|
'No extension' => 'Xx',
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'Xx.',
|
'None of the supported PHP extensions (%s) are available.' => 'Xx (%s).',
|
||||||
|
'Connecting to privileged ports is not allowed.' => 'Xx.',
|
||||||
'Session support must be enabled.' => 'Xx.',
|
'Session support must be enabled.' => 'Xx.',
|
||||||
'Session expired, please login again.' => 'Xx.',
|
'Session expired, please login again.' => 'Xx.',
|
||||||
'%s version: %s through PHP extension %s' => 'Xx',
|
'The action will be performed after successful login with the same credentials.' => 'Xx.',
|
||||||
|
'%s version: %s through PHP extension %s' => '%s xx: %s xx %s',
|
||||||
'Refresh' => 'Xx',
|
'Refresh' => 'Xx',
|
||||||
|
|
||||||
// text direction - 'ltr' or 'rtl'
|
// text direction - 'ltr' or 'rtl'
|
||||||
@@ -39,40 +42,37 @@ $translations = array(
|
|||||||
'Revoke' => 'Xx',
|
'Revoke' => 'Xx',
|
||||||
|
|
||||||
'Process list' => 'Xx',
|
'Process list' => 'Xx',
|
||||||
'%d process(es) have been killed.' => array('Xx.', 'Xx.'),
|
'%d process(es) have been killed.' => array('%d xx.', '%d xx.'),
|
||||||
'Kill' => 'Xx',
|
'Kill' => 'Xx',
|
||||||
|
|
||||||
'Variables' => 'Xx',
|
'Variables' => 'Xx',
|
||||||
'Status' => 'Xx',
|
'Status' => 'Xx',
|
||||||
|
|
||||||
'Replication' => 'Xx',
|
|
||||||
'Master status' => 'Xx',
|
|
||||||
'Slave status' => 'Xx',
|
|
||||||
|
|
||||||
'SQL command' => 'Xx',
|
'SQL command' => 'Xx',
|
||||||
'%d query(s) executed OK.' => array('Xx.', 'Xx.'),
|
'%d query(s) executed OK.' => array('%d xx.', '%d xx.'),
|
||||||
'Query executed OK, %d row(s) affected.' => array('Xx.', 'Xx.'),
|
'Query executed OK, %d row(s) affected.' => array('Xx, %d.', 'Xx, %d.'),
|
||||||
'No commands to execute.' => 'Xx.',
|
'No commands to execute.' => 'Xx.',
|
||||||
'Error in query' => 'Xx',
|
'Error in query' => 'Xx',
|
||||||
|
'Warnings' => 'Xx',
|
||||||
'ATTACH queries are not supported.' => 'Xx.',
|
'ATTACH queries are not supported.' => 'Xx.',
|
||||||
'Execute' => 'Xx',
|
'Execute' => 'Xx',
|
||||||
'Stop on error' => 'Xx',
|
'Stop on error' => 'Xx',
|
||||||
'Show only errors' => 'Xx',
|
'Show only errors' => 'Xx',
|
||||||
// sprintf() format for time of the command
|
// sprintf() format for time of the command
|
||||||
'%.3f s' => 'xx',
|
'%.3f s' => '%.3f xx',
|
||||||
'History' => 'Xx',
|
'History' => 'Xx',
|
||||||
'Clear' => 'Xx',
|
'Clear' => 'Xx',
|
||||||
'Edit all' => 'Xx',
|
'Edit all' => 'Xx',
|
||||||
|
|
||||||
'File upload' => 'Xx',
|
'File upload' => 'Xx',
|
||||||
'From server' => 'Xx',
|
'From server' => 'Xx',
|
||||||
'Webserver file %s' => 'Xx',
|
'Webserver file %s' => 'Xx %s',
|
||||||
'Run file' => 'Xx',
|
'Run file' => 'Xx',
|
||||||
'File does not exist.' => 'Xx.',
|
'File does not exist.' => 'Xx.',
|
||||||
'File uploads are disabled.' => 'Xx.',
|
'File uploads are disabled.' => 'Xx.',
|
||||||
'Unable to upload a file.' => 'Xx.',
|
'Unable to upload a file.' => 'Xx.',
|
||||||
'Maximum allowed file size is %sB.' => 'Xx.',
|
'Maximum allowed file size is %sB.' => 'Xx %sB.',
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Xx.',
|
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Xx %s.',
|
||||||
'You can upload a big SQL file via FTP and import it from server.' => 'Xx.',
|
'You can upload a big SQL file via FTP and import it from server.' => 'Xx.',
|
||||||
'You are offline.' => 'Xx.',
|
'You are offline.' => 'Xx.',
|
||||||
|
|
||||||
@@ -86,6 +86,7 @@ $translations = array(
|
|||||||
|
|
||||||
'Database' => 'Xx',
|
'Database' => 'Xx',
|
||||||
'database' => 'xx',
|
'database' => 'xx',
|
||||||
|
'DB' => 'XX',
|
||||||
'Use' => 'Xx',
|
'Use' => 'Xx',
|
||||||
'Select database' => 'Xx',
|
'Select database' => 'Xx',
|
||||||
'Invalid database.' => 'Xx.',
|
'Invalid database.' => 'Xx.',
|
||||||
@@ -110,7 +111,7 @@ $translations = array(
|
|||||||
'Index Length' => 'Xx',
|
'Index Length' => 'Xx',
|
||||||
'Data Free' => 'Xx',
|
'Data Free' => 'Xx',
|
||||||
'Rows' => 'Xx',
|
'Rows' => 'Xx',
|
||||||
'%d in total' => 'xx',
|
'%d in total' => '%d xx',
|
||||||
'Analyze' => 'Xx',
|
'Analyze' => 'Xx',
|
||||||
'Optimize' => 'Xx',
|
'Optimize' => 'Xx',
|
||||||
'Vacuum' => 'Xx',
|
'Vacuum' => 'Xx',
|
||||||
@@ -125,7 +126,7 @@ $translations = array(
|
|||||||
'Tables have been copied.' => 'Xx.',
|
'Tables have been copied.' => 'Xx.',
|
||||||
|
|
||||||
'Routines' => 'Xx',
|
'Routines' => 'Xx',
|
||||||
'Routine has been called, %d row(s) affected.' => array('Xx.', 'Xx.'),
|
'Routine has been called, %d row(s) affected.' => array('Xx, %d.', 'Xx, %d.'),
|
||||||
'Call' => 'Xx',
|
'Call' => 'Xx',
|
||||||
'Parameter name' => 'Xx',
|
'Parameter name' => 'Xx',
|
||||||
'Create procedure' => 'Xx',
|
'Create procedure' => 'Xx',
|
||||||
@@ -174,13 +175,14 @@ $translations = array(
|
|||||||
'Default value' => 'Xx',
|
'Default value' => 'Xx',
|
||||||
'Default values' => 'Xx',
|
'Default values' => 'Xx',
|
||||||
'Drop' => 'Xx',
|
'Drop' => 'Xx',
|
||||||
'Are you sure?' => 'Xx',
|
'Drop %s?' => 'Xx %s?',
|
||||||
|
'Are you sure?' => 'Xx?',
|
||||||
'Size' => 'Xx',
|
'Size' => 'Xx',
|
||||||
'Compute' => 'Xx',
|
'Compute' => 'Xx',
|
||||||
'Move up' => 'Xx',
|
'Move up' => 'Xx',
|
||||||
'Move down' => 'Xx',
|
'Move down' => 'Xx',
|
||||||
'Remove' => 'Xx',
|
'Remove' => 'Xx',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Xx.',
|
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Xx %s.',
|
||||||
|
|
||||||
'Partition by' => 'Xx',
|
'Partition by' => 'Xx',
|
||||||
'Partitions' => 'Xx',
|
'Partitions' => 'Xx',
|
||||||
@@ -246,17 +248,17 @@ $translations = array(
|
|||||||
'Full table scan' => 'Xx',
|
'Full table scan' => 'Xx',
|
||||||
'Unable to select the table' => 'Xx',
|
'Unable to select the table' => 'Xx',
|
||||||
'No rows.' => 'Xx.',
|
'No rows.' => 'Xx.',
|
||||||
'%d / ' => 'xx',
|
'%d / ' => '%d / ',
|
||||||
'%d row(s)' => array('xx', 'xx'),
|
'%d row(s)' => array('%d xx', '%d xx'),
|
||||||
'Page' => 'Xx',
|
'Page' => 'Xx',
|
||||||
'last' => 'xx',
|
'last' => 'xx',
|
||||||
'Load more data' => 'Xx',
|
'Load more data' => 'Xx',
|
||||||
'Loading' => 'Xx',
|
'Loading' => 'Xx',
|
||||||
'whole result' => 'xx',
|
'Whole result' => 'Xx',
|
||||||
'%d byte(s)' => array('xx', 'xx'),
|
'%d byte(s)' => array('%d xx', '%d xx'),
|
||||||
|
|
||||||
'Import' => 'Xx',
|
'Import' => 'Xx',
|
||||||
'%d row(s) have been imported.' => array('Xx.', 'Xx.'),
|
'%d row(s) have been imported.' => array('%d xx.', '%d xx.'),
|
||||||
'File must be in UTF-8 encoding.' => 'Xx.',
|
'File must be in UTF-8 encoding.' => 'Xx.',
|
||||||
|
|
||||||
// in-place editing in select
|
// in-place editing in select
|
||||||
@@ -265,10 +267,10 @@ $translations = array(
|
|||||||
'Use edit link to modify this value.' => 'Xx.',
|
'Use edit link to modify this value.' => 'Xx.',
|
||||||
|
|
||||||
// %s can contain auto-increment value
|
// %s can contain auto-increment value
|
||||||
'Item%s has been inserted.' => 'Xx.',
|
'Item%s has been inserted.' => 'Xx%s.',
|
||||||
'Item has been deleted.' => 'Xx.',
|
'Item has been deleted.' => 'Xx.',
|
||||||
'Item has been updated.' => 'Xx.',
|
'Item has been updated.' => 'Xx.',
|
||||||
'%d item(s) have been affected.' => array('Xx.', 'Xx.'),
|
'%d item(s) have been affected.' => array('%d xx.', '%d xx.'),
|
||||||
'New item' => 'Xx',
|
'New item' => 'Xx',
|
||||||
'original' => 'xx',
|
'original' => 'xx',
|
||||||
// label for value '' in enum data type
|
// label for value '' in enum data type
|
||||||
@@ -289,7 +291,7 @@ $translations = array(
|
|||||||
'Subject' => 'Xx',
|
'Subject' => 'Xx',
|
||||||
'Attachments' => 'Xx',
|
'Attachments' => 'Xx',
|
||||||
'Send' => 'Xx',
|
'Send' => 'Xx',
|
||||||
'%d e-mail(s) have been sent.' => array('Xx.', 'Xx.'),
|
'%d e-mail(s) have been sent.' => array('%d xx.', '%d xx.'),
|
||||||
|
|
||||||
// data type descriptions
|
// data type descriptions
|
||||||
'Numbers' => 'Xx',
|
'Numbers' => 'Xx',
|
||||||
@@ -314,7 +316,7 @@ $translations = array(
|
|||||||
|
|
||||||
// general SQLite error in create, drop or rename database
|
// general SQLite error in create, drop or rename database
|
||||||
'File exists.' => 'Xx.',
|
'File exists.' => 'Xx.',
|
||||||
'Please use one of the extensions %s.' => 'Xx.',
|
'Please use one of the extensions %s.' => 'Xx %s.',
|
||||||
|
|
||||||
// PostgreSQL and MS SQL schema support
|
// PostgreSQL and MS SQL schema support
|
||||||
'Alter schema' => 'Xx',
|
'Alter schema' => 'Xx',
|
||||||
|
|||||||
@@ -183,7 +183,7 @@ $translations = array(
|
|||||||
'Save and continue edit' => '儲存並繼續編輯',
|
'Save and continue edit' => '儲存並繼續編輯',
|
||||||
'original' => '原始',
|
'original' => '原始',
|
||||||
'%d item(s) have been affected.' => '%d個項目受到影響。',
|
'%d item(s) have been affected.' => '%d個項目受到影響。',
|
||||||
'whole result' => '所有結果',
|
'Whole result' => '所有結果',
|
||||||
'Tables have been dropped.' => '已經將資料表刪除。',
|
'Tables have been dropped.' => '已經將資料表刪除。',
|
||||||
'Clone' => '複製',
|
'Clone' => '複製',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => '超過允許的字段數量的最大值。請增加%s。',
|
'Maximum number of allowed fields exceeded. Please increase %s.' => '超過允許的字段數量的最大值。請增加%s。',
|
||||||
|
|||||||
@@ -185,7 +185,7 @@ $translations = array(
|
|||||||
'Save and continue edit' => '保存并继续编辑',
|
'Save and continue edit' => '保存并继续编辑',
|
||||||
'original' => '原始',
|
'original' => '原始',
|
||||||
'%d item(s) have been affected.' => '%d 个项目受到影响。',
|
'%d item(s) have been affected.' => '%d 个项目受到影响。',
|
||||||
'whole result' => '所有结果',
|
'Whole result' => '所有结果',
|
||||||
'Tables have been dropped.' => '已删除表。',
|
'Tables have been dropped.' => '已删除表。',
|
||||||
'Clone' => '复制',
|
'Clone' => '复制',
|
||||||
'Maximum number of allowed fields exceeded. Please increase %s.' => '超过最多允许的字段数量。请增加 %s。',
|
'Maximum number of allowed fields exceeded. Please increase %s.' => '超过最多允许的字段数量。请增加 %s。',
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ function adminer_object() {
|
|||||||
new AdminerDumpXml,
|
new AdminerDumpXml,
|
||||||
new AdminerDumpAlter,
|
new AdminerDumpAlter,
|
||||||
//~ new AdminerSqlLog("past-" . rtrim(`git describe --tags --abbrev=0`) . ".sql"),
|
//~ 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 AdminerEditCalendar(script_src("../externals/jquery-ui/jquery-1.4.4.js") . script_src("../externals/jquery-ui/ui/jquery.ui.core.js") . script_src("../externals/jquery-ui/ui/jquery.ui.widget.js") . script_src("../externals/jquery-ui/ui/jquery.ui.datepicker.js") . script_src("../externals/jquery-ui/ui/jquery.ui.mouse.js") . script_src("../externals/jquery-ui/ui/jquery.ui.slider.js") . script_src("../externals/jquery-timepicker/jquery-ui-timepicker-addon.js") . "<link rel='stylesheet' href='../externals/jquery-ui/themes/base/jquery.ui.all.css'>\n<style>\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 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 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 AdminerFileUpload(""),
|
||||||
|
|||||||
@@ -1,17 +1,18 @@
|
|||||||
<?php
|
<?php
|
||||||
$PROCEDURE = $_GET["procedure"];
|
$PROCEDURE = ($_GET["name"] ? $_GET["name"] : $_GET["procedure"]);
|
||||||
$routine = (isset($_GET["function"]) ? "FUNCTION" : "PROCEDURE");
|
$routine = (isset($_GET["function"]) ? "FUNCTION" : "PROCEDURE");
|
||||||
$row = $_POST;
|
$row = $_POST;
|
||||||
$row["fields"] = (array) $row["fields"];
|
$row["fields"] = (array) $row["fields"];
|
||||||
|
|
||||||
if ($_POST && !process_fields($row["fields"]) && !$error) {
|
if ($_POST && !process_fields($row["fields"]) && !$error) {
|
||||||
|
$orig = routine($_GET["procedure"], $routine);
|
||||||
$temp_name = "$row[name]_adminer_" . uniqid();
|
$temp_name = "$row[name]_adminer_" . uniqid();
|
||||||
drop_create(
|
drop_create(
|
||||||
"DROP $routine " . idf_escape($PROCEDURE),
|
"DROP $routine " . routine_id($PROCEDURE, $orig),
|
||||||
create_routine($routine, $row),
|
create_routine($routine, $row),
|
||||||
"DROP $routine " . idf_escape($row["name"]),
|
"DROP $routine " . routine_id($row["name"], $row),
|
||||||
create_routine($routine, array("name" => $temp_name) + $row),
|
create_routine($routine, array("name" => $temp_name) + $row),
|
||||||
"DROP $routine " . idf_escape($temp_name),
|
"DROP $routine " . routine_id($temp_name, $row),
|
||||||
substr(ME, 0, -1),
|
substr(ME, 0, -1),
|
||||||
lang('Routine has been dropped.'),
|
lang('Routine has been dropped.'),
|
||||||
lang('Routine has been altered.'),
|
lang('Routine has been altered.'),
|
||||||
@@ -24,7 +25,7 @@ if ($_POST && !process_fields($row["fields"]) && !$error) {
|
|||||||
page_header(($PROCEDURE != "" ? (isset($_GET["function"]) ? lang('Alter function') : lang('Alter procedure')) . ": " . h($PROCEDURE) : (isset($_GET["function"]) ? lang('Create function') : lang('Create procedure'))), $error);
|
page_header(($PROCEDURE != "" ? (isset($_GET["function"]) ? lang('Alter function') : lang('Alter procedure')) . ": " . h($PROCEDURE) : (isset($_GET["function"]) ? lang('Create function') : lang('Create procedure'))), $error);
|
||||||
|
|
||||||
if (!$_POST && $PROCEDURE != "") {
|
if (!$_POST && $PROCEDURE != "") {
|
||||||
$row = routine($PROCEDURE, $routine);
|
$row = routine($_GET["procedure"], $routine);
|
||||||
$row["name"] = $PROCEDURE;
|
$row["name"] = $PROCEDURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -35,20 +36,20 @@ $routine_languages = routine_languages();
|
|||||||
|
|
||||||
<form action="" method="post" id="form">
|
<form action="" method="post" id="form">
|
||||||
<p><?php echo lang('Name'); ?>: <input name="name" value="<?php echo h($row["name"]); ?>" maxlength="64" autocapitalize="off">
|
<p><?php echo lang('Name'); ?>: <input name="name" value="<?php echo h($row["name"]); ?>" maxlength="64" autocapitalize="off">
|
||||||
<?php echo ($routine_languages ? lang('Language') . ": " . html_select("language", $routine_languages, $row["language"]) : ""); ?>
|
<?php echo ($routine_languages ? lang('Language') . ": " . html_select("language", $routine_languages, $row["language"]) . "\n" : ""); ?>
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||||
<table cellspacing="0" class="nowrap">
|
<table cellspacing="0" class="nowrap">
|
||||||
<?php
|
<?php
|
||||||
edit_fields($row["fields"], $collations, $routine);
|
edit_fields($row["fields"], $collations, $routine);
|
||||||
if (isset($_GET["function"])) {
|
if (isset($_GET["function"])) {
|
||||||
echo "<tr><td>" . lang('Return type');
|
echo "<tr><td>" . lang('Return type');
|
||||||
edit_type("returns", $row["returns"], $collations);
|
edit_type("returns", $row["returns"], $collations, array(), ($jush == "pgsql" ? array("void", "trigger") : array()));
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
</table>
|
</table>
|
||||||
<p><?php textarea("definition", $row["definition"]); ?>
|
<p><?php textarea("definition", $row["definition"]); ?>
|
||||||
<p>
|
<p>
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
<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 ($PROCEDURE != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"><?php echo confirm(lang('Drop %s?', $PROCEDURE)); ?><?php } ?>
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -13,8 +13,9 @@ page_header(lang('Process list'), $error);
|
|||||||
?>
|
?>
|
||||||
|
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
<table cellspacing="0" onclick="tableClick(event);" ondblclick="tableClick(event, true);" class="nowrap checkable">
|
<table cellspacing="0" class="nowrap checkable">
|
||||||
<?php
|
<?php
|
||||||
|
echo script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});");
|
||||||
// HTML valid because there is always at least one process
|
// HTML valid because there is always at least one process
|
||||||
$i = -1;
|
$i = -1;
|
||||||
foreach (process_list() as $i => $row) {
|
foreach (process_list() as $i => $row) {
|
||||||
@@ -44,7 +45,6 @@ foreach (process_list() as $i => $row) {
|
|||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
</table>
|
</table>
|
||||||
<script type='text/javascript'>tableCheck();</script>
|
|
||||||
<p>
|
<p>
|
||||||
<?php
|
<?php
|
||||||
if (support("kill")) {
|
if (support("kill")) {
|
||||||
@@ -54,3 +54,4 @@ if (support("kill")) {
|
|||||||
?>
|
?>
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
</form>
|
</form>
|
||||||
|
<?php echo script("tableCheck();"); ?>
|
||||||
|
|||||||
@@ -1,30 +0,0 @@
|
|||||||
<?php
|
|
||||||
page_header(lang('Replication'));
|
|
||||||
|
|
||||||
echo "<h3>" . lang('Master status') . doc_link(array("sql" => "show-master-status.html")) . "</h3>\n";
|
|
||||||
$master_replication_status = replication_status("MASTER");
|
|
||||||
if (!$master_replication_status) {
|
|
||||||
echo "<p class='message'>" . lang('No rows.') . "\n";
|
|
||||||
} else {
|
|
||||||
echo "<table cellspacing='0'>\n";
|
|
||||||
foreach ($master_replication_status[0] as $key => $val) {
|
|
||||||
echo "<tr>";
|
|
||||||
echo "<th>" . h($key);
|
|
||||||
echo "<td>" . nbsp($val);
|
|
||||||
}
|
|
||||||
echo "</table>\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
$slave_replication_status = replication_status("SLAVE");
|
|
||||||
if ($slave_replication_status) {
|
|
||||||
echo "<h3>" . lang('Slave status') . doc_link(array("sql" => "show-slave-status.html")) . "</h3>\n";
|
|
||||||
foreach ($slave_replication_status[0] as $slave) {
|
|
||||||
echo "<table cellspacing='0'>\n";
|
|
||||||
foreach ($slave as $key => $val) {
|
|
||||||
echo "<tr>";
|
|
||||||
echo "<th>" . h($key);
|
|
||||||
echo "<td>" . nbsp($val);
|
|
||||||
}
|
|
||||||
echo "</table>\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -48,19 +48,19 @@ foreach (table_status('', true) as $table => $table_status) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
<div id="schema" style="height: <?php echo $top; ?>em;" onselectstart="return false;">
|
<div id="schema" style="height: <?php echo $top; ?>em;">
|
||||||
<script type="text/javascript">
|
<script<?php echo nonce(); ?>>
|
||||||
|
qs('#schema').onselectstart = function () { return false; };
|
||||||
var tablePos = {<?php echo implode(",", $table_pos_js) . "\n"; ?>};
|
var tablePos = {<?php echo implode(",", $table_pos_js) . "\n"; ?>};
|
||||||
var em = document.getElementById('schema').offsetHeight / <?php echo $top; ?>;
|
var em = qs('#schema').offsetHeight / <?php echo $top; ?>;
|
||||||
document.onmousemove = schemaMousemove;
|
document.onmousemove = schemaMousemove;
|
||||||
document.onmouseup = function (ev) {
|
document.onmouseup = partialArg(schemaMouseup, '<?php echo js_escape(DB); ?>');
|
||||||
schemaMouseup(ev, '<?php echo js_escape(DB); ?>');
|
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
<?php
|
<?php
|
||||||
foreach ($schema as $name => $table) {
|
foreach ($schema as $name => $table) {
|
||||||
echo "<div class='table' style='top: " . $table["pos"][0] . "em; left: " . $table["pos"][1] . "em;' onmousedown='schemaMousedown(this, event);'>";
|
echo "<div class='table' style='top: " . $table["pos"][0] . "em; left: " . $table["pos"][1] . "em;'>";
|
||||||
echo '<a href="' . h(ME) . 'table=' . urlencode($name) . '"><b>' . h($name) . "</b></a>";
|
echo '<a href="' . h(ME) . 'table=' . urlencode($name) . '"><b>' . h($name) . "</b></a>";
|
||||||
|
echo script("qsl('div').onmousedown = schemaMousedown;");
|
||||||
|
|
||||||
foreach ($table["fields"] as $field) {
|
foreach ($table["fields"] as $field) {
|
||||||
$val = '<span' . type_class($field["type"]) . ' title="' . h($field["full_type"] . ($field["null"] ? " NULL" : '')) . '">' . h($field["field"]) . '</span>';
|
$val = '<span' . type_class($field["type"]) . ' title="' . h($field["full_type"] . ($field["null"] ? " NULL" : '')) . '">' . h($field["field"]) . '</span>';
|
||||||
|
|||||||
@@ -27,11 +27,11 @@ if (!$row) {
|
|||||||
|
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
<p><input name="name" id="name" value="<?php echo h($row["name"]); ?>" autocapitalize="off">
|
<p><input name="name" id="name" value="<?php echo h($row["name"]); ?>" autocapitalize="off">
|
||||||
<script type='text/javascript'>focus(document.getElementById('name'));</script>
|
<?php echo script("focus(qs('#name'));"); ?>
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||||
<?php
|
<?php
|
||||||
if ($_GET["ns"] != "") {
|
if ($_GET["ns"] != "") {
|
||||||
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm() . ">\n";
|
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'>" . confirm(lang('Drop %s?', $_GET["ns"])) . "\n";
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
|
|||||||
@@ -4,11 +4,7 @@ $table_status = table_status1($TABLE);
|
|||||||
$indexes = indexes($TABLE);
|
$indexes = indexes($TABLE);
|
||||||
$fields = fields($TABLE);
|
$fields = fields($TABLE);
|
||||||
$foreign_keys = column_foreign_keys($TABLE);
|
$foreign_keys = column_foreign_keys($TABLE);
|
||||||
$oid = "";
|
$oid = $table_status["Oid"];
|
||||||
if ($table_status["Oid"]) {
|
|
||||||
$oid = ($jush == "sqlite" ? "rowid" : "oid");
|
|
||||||
$indexes[] = array("type" => "PRIMARY", "columns" => array($oid));
|
|
||||||
}
|
|
||||||
parse_str($_COOKIE["adminer_import"], $adminer_import);
|
parse_str($_COOKIE["adminer_import"], $adminer_import);
|
||||||
|
|
||||||
$rights = array(); // privilege => 0
|
$rights = array(); // privilege => 0
|
||||||
@@ -30,10 +26,6 @@ $is_group = count($group) < count($select);
|
|||||||
$where = $adminer->selectSearchProcess($fields, $indexes);
|
$where = $adminer->selectSearchProcess($fields, $indexes);
|
||||||
$order = $adminer->selectOrderProcess($fields, $indexes);
|
$order = $adminer->selectOrderProcess($fields, $indexes);
|
||||||
$limit = $adminer->selectLimitProcess();
|
$limit = $adminer->selectLimitProcess();
|
||||||
$from = ($select ? implode(", ", $select) : "*" . ($oid ? ", $oid" : ""))
|
|
||||||
. convert_fields($columns, $fields, $select)
|
|
||||||
. "\nFROM " . table($TABLE);
|
|
||||||
$group_by = ($group && $is_group ? "\nGROUP BY " . implode(", ", $group) : "") . ($order ? "\nORDER BY " . implode(", ", $order) : "");
|
|
||||||
|
|
||||||
if ($_GET["val"] && is_ajax()) {
|
if ($_GET["val"] && is_ajax()) {
|
||||||
header("Content-Type: text/plain; charset=utf-8");
|
header("Content-Type: text/plain; charset=utf-8");
|
||||||
@@ -49,6 +41,24 @@ if ($_GET["val"] && is_ajax()) {
|
|||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$primary = $unselected = null;
|
||||||
|
foreach ($indexes as $index) {
|
||||||
|
if ($index["type"] == "PRIMARY") {
|
||||||
|
$primary = array_flip($index["columns"]);
|
||||||
|
$unselected = ($select ? $primary : array());
|
||||||
|
foreach ($unselected as $key => $val) {
|
||||||
|
if (in_array(idf_escape($key), $select)) {
|
||||||
|
unset($unselected[$key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($oid && !$primary) {
|
||||||
|
$primary = $unselected = array($oid => 0);
|
||||||
|
$indexes[] = array("type" => "PRIMARY", "columns" => array($oid));
|
||||||
|
}
|
||||||
|
|
||||||
if ($_POST && !$error) {
|
if ($_POST && !$error) {
|
||||||
$where_check = $where;
|
$where_check = $where;
|
||||||
if (!$_POST["all"] && is_array($_POST["check"])) {
|
if (!$_POST["all"] && is_array($_POST["check"])) {
|
||||||
@@ -59,25 +69,15 @@ if ($_POST && !$error) {
|
|||||||
$where_check[] = "((" . implode(") OR (", $checks) . "))";
|
$where_check[] = "((" . implode(") OR (", $checks) . "))";
|
||||||
}
|
}
|
||||||
$where_check = ($where_check ? "\nWHERE " . implode(" AND ", $where_check) : "");
|
$where_check = ($where_check ? "\nWHERE " . implode(" AND ", $where_check) : "");
|
||||||
$primary = $unselected = null;
|
|
||||||
foreach ($indexes as $index) {
|
|
||||||
if ($index["type"] == "PRIMARY") {
|
|
||||||
$primary = array_flip($index["columns"]);
|
|
||||||
$unselected = ($select ? $primary : array());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
foreach ((array) $unselected as $key => $val) {
|
|
||||||
if (in_array(idf_escape($key), $select)) {
|
|
||||||
unset($unselected[$key]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($_POST["export"]) {
|
if ($_POST["export"]) {
|
||||||
cookie("adminer_import", "output=" . urlencode($_POST["output"]) . "&format=" . urlencode($_POST["format"]));
|
cookie("adminer_import", "output=" . urlencode($_POST["output"]) . "&format=" . urlencode($_POST["format"]));
|
||||||
dump_headers($TABLE);
|
dump_headers($TABLE);
|
||||||
$adminer->dumpTable($TABLE, "");
|
$adminer->dumpTable($TABLE, "");
|
||||||
if (!is_array($_POST["check"]) || $unselected === array()) {
|
$from = ($select ? implode(", ", $select) : "*")
|
||||||
|
. convert_fields($columns, $fields, $select)
|
||||||
|
. "\nFROM " . table($TABLE);
|
||||||
|
$group_by = ($group && $is_group ? "\nGROUP BY " . implode(", ", $group) : "") . ($order ? "\nORDER BY " . implode(", ", $order) : "");
|
||||||
|
if (!is_array($_POST["check"]) || $primary) {
|
||||||
$query = "SELECT $from$where_check$group_by";
|
$query = "SELECT $from$where_check$group_by";
|
||||||
} else {
|
} else {
|
||||||
$union = array();
|
$union = array();
|
||||||
@@ -108,7 +108,7 @@ if ($_POST && !$error) {
|
|||||||
if ($_POST["clone"]) {
|
if ($_POST["clone"]) {
|
||||||
$query = "INTO " . table($TABLE) . " (" . implode(", ", array_keys($set)) . ")\nSELECT " . implode(", ", $set) . "\nFROM " . table($TABLE);
|
$query = "INTO " . table($TABLE) . " (" . implode(", ", array_keys($set)) . ")\nSELECT " . implode(", ", $set) . "\nFROM " . table($TABLE);
|
||||||
}
|
}
|
||||||
if ($_POST["all"] || ($unselected === array() && is_array($_POST["check"])) || $is_group) {
|
if ($_POST["all"] || ($primary && is_array($_POST["check"])) || $is_group) {
|
||||||
$result = ($_POST["delete"]
|
$result = ($_POST["delete"]
|
||||||
? $driver->delete($TABLE, $where_check)
|
? $driver->delete($TABLE, $where_check)
|
||||||
: ($_POST["clone"]
|
: ($_POST["clone"]
|
||||||
@@ -124,8 +124,8 @@ if ($_POST && !$error) {
|
|||||||
$result = ($_POST["delete"]
|
$result = ($_POST["delete"]
|
||||||
? $driver->delete($TABLE, $where2, 1)
|
? $driver->delete($TABLE, $where2, 1)
|
||||||
: ($_POST["clone"]
|
: ($_POST["clone"]
|
||||||
? queries("INSERT" . limit1($query, $where2))
|
? queries("INSERT" . limit1($TABLE, $query, $where2))
|
||||||
: $driver->update($TABLE, $set, $where2)
|
: $driver->update($TABLE, $set, $where2, 1)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
@@ -165,7 +165,7 @@ if ($_POST && !$error) {
|
|||||||
$TABLE,
|
$TABLE,
|
||||||
$set,
|
$set,
|
||||||
" WHERE " . ($where ? implode(" AND ", $where) . " AND " : "") . where_check($unique_idf, $fields),
|
" WHERE " . ($where ? implode(" AND ", $where) . " AND " : "") . where_check($unique_idf, $fields),
|
||||||
!($is_group || $unselected === array()),
|
!$is_group && !$primary,
|
||||||
" "
|
" "
|
||||||
);
|
);
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
@@ -226,7 +226,7 @@ $set = null;
|
|||||||
if (isset($rights["insert"]) || !support("table")) {
|
if (isset($rights["insert"]) || !support("table")) {
|
||||||
$set = "";
|
$set = "";
|
||||||
foreach ((array) $_GET["where"] as $val) {
|
foreach ((array) $_GET["where"] as $val) {
|
||||||
if (count($foreign_keys[$val["col"]]) == 1 && ($val["op"] == "="
|
if ($foreign_keys[$val["col"]] && count($foreign_keys[$val["col"]]) == 1 && ($val["op"] == "="
|
||||||
|| (!$val["op"] && !preg_match('~[_%]~', $val["val"])) // LIKE in Editor
|
|| (!$val["op"] && !preg_match('~[_%]~', $val["val"])) // LIKE in Editor
|
||||||
)) {
|
)) {
|
||||||
$set .= "&set" . urlencode("[" . bracket_escape($val["col"]) . "]") . "=" . urlencode($val["val"]);
|
$set .= "&set" . urlencode("[" . bracket_escape($val["col"]) . "]") . "=" . urlencode($val["val"]);
|
||||||
@@ -259,17 +259,29 @@ if (!$columns && support("table")) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$select2 = $select;
|
$select2 = $select;
|
||||||
|
$group2 = $group;
|
||||||
if (!$select2) {
|
if (!$select2) {
|
||||||
$select2[] = "*";
|
$select2[] = "*";
|
||||||
if ($oid) {
|
$convert_fields = convert_fields($columns, $fields, $select);
|
||||||
$select2[] = $oid;
|
if ($convert_fields) {
|
||||||
|
$select2[] = substr($convert_fields, 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$convert_fields = convert_fields($columns, $fields, $select);
|
foreach ($select as $key => $val) {
|
||||||
if ($convert_fields) {
|
$field = $fields[idf_unescape($val)];
|
||||||
$select2[] = substr($convert_fields, 2);
|
if ($field && ($as = convert_field($field))) {
|
||||||
|
$select2[$key] = "$as AS $val";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$result = $driver->select($TABLE, $select2, $where, $group, $order, $limit, $page, true);
|
if (!$is_group && $unselected) {
|
||||||
|
foreach ($unselected as $key => $val) {
|
||||||
|
$select2[] = idf_escape($key);
|
||||||
|
if ($group2) {
|
||||||
|
$group2[] = idf_escape($key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$result = $driver->select($TABLE, $select2, $where, $group2, $order, $limit, $page, true);
|
||||||
|
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
echo "<p class='error'>" . error() . "\n";
|
echo "<p class='error'>" . error() . "\n";
|
||||||
@@ -288,7 +300,7 @@ if (!$columns && support("table")) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// use count($rows) without LIMIT, COUNT(*) without grouping, FOUND_ROWS otherwise (slowest)
|
// use count($rows) without LIMIT, COUNT(*) without grouping, FOUND_ROWS otherwise (slowest)
|
||||||
if ($_GET["page"] != "last" && +$limit && $group && $is_group && $jush == "sql") {
|
if ($_GET["page"] != "last" && $limit != "" && $group && $is_group && $jush == "sql") {
|
||||||
$found_rows = $connection->result(" SELECT FOUND_ROWS()"); // space to allow mysql.trace_mode
|
$found_rows = $connection->result(" SELECT FOUND_ROWS()"); // space to allow mysql.trace_mode
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -297,14 +309,18 @@ if (!$columns && support("table")) {
|
|||||||
} else {
|
} else {
|
||||||
$backward_keys = $adminer->backwardKeys($TABLE, $table_name);
|
$backward_keys = $adminer->backwardKeys($TABLE, $table_name);
|
||||||
|
|
||||||
echo "<table id='table' cellspacing='0' class='nowrap checkable' onclick='tableClick(event);' ondblclick='tableClick(event, true);' onkeydown='return editingKeydown(event);'>\n";
|
echo "<table id='table' cellspacing='0' class='nowrap checkable'>";
|
||||||
echo "<thead><tr>" . (!$group && $select ? "" : "<td><input type='checkbox' id='all-page' onclick='formCheck(this, /check/);' class='jsonly'> <a href='" . h($_GET["modify"] ? remove_from_uri("modify") : $_SERVER["REQUEST_URI"] . "&modify=1") . "'>" . lang('Modify') . "</a>");
|
echo script("mixin(qs('#table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true), onkeydown: editingKeydown});");
|
||||||
|
echo "<thead><tr>" . (!$group && $select
|
||||||
|
? ""
|
||||||
|
: "<td><input type='checkbox' id='all-page' class='jsonly'>" . script("qs('#all-page').onclick = partial(formCheck, /check/);", "")
|
||||||
|
. " <a href='" . h($_GET["modify"] ? remove_from_uri("modify") : $_SERVER["REQUEST_URI"] . "&modify=1") . "'>" . lang('Modify') . "</a>");
|
||||||
$names = array();
|
$names = array();
|
||||||
$functions = array();
|
$functions = array();
|
||||||
reset($select);
|
reset($select);
|
||||||
$rank = 1;
|
$rank = 1;
|
||||||
foreach ($rows[0] as $key => $val) {
|
foreach ($rows[0] as $key => $val) {
|
||||||
if ($key != $oid) {
|
if (!isset($unselected[$key])) {
|
||||||
$val = $_GET["columns"][key($select)];
|
$val = $_GET["columns"][key($select)];
|
||||||
$field = $fields[$select ? ($val ? $val["col"] : current($select)) : $key];
|
$field = $fields[$select ? ($val ? $val["col"] : current($select)) : $key];
|
||||||
$name = ($field ? $adminer->fieldName($field, $rank) : ($val["fun"] ? "*" : $key));
|
$name = ($field ? $adminer->fieldName($field, $rank) : ($val["fun"] ? "*" : $key));
|
||||||
@@ -314,13 +330,14 @@ if (!$columns && support("table")) {
|
|||||||
$column = idf_escape($key);
|
$column = idf_escape($key);
|
||||||
$href = remove_from_uri('(order|desc)[^=]*|page') . '&order%5B0%5D=' . urlencode($key);
|
$href = remove_from_uri('(order|desc)[^=]*|page') . '&order%5B0%5D=' . urlencode($key);
|
||||||
$desc = "&desc%5B0%5D=1";
|
$desc = "&desc%5B0%5D=1";
|
||||||
echo '<th onmouseover="columnMouse(this);" onmouseout="columnMouse(this, \' hidden\');">';
|
echo "<th>" . script("mixin(qsl('th'), {onmouseover: partial(columnMouse), onmouseout: partial(columnMouse, ' hidden')});", "");
|
||||||
echo '<a href="' . h($href . ($order[0] == $column || $order[0] == $key || (!$order && $is_group && $group[0] == $column) ? $desc : '')) . '">'; // $order[0] == $key - COUNT(*)
|
echo '<a href="' . h($href . ($order[0] == $column || $order[0] == $key || (!$order && $is_group && $group[0] == $column) ? $desc : '')) . '">'; // $order[0] == $key - COUNT(*)
|
||||||
echo apply_sql_function($val["fun"], $name) . "</a>"; //! columns looking like functions
|
echo apply_sql_function($val["fun"], $name) . "</a>"; //! columns looking like functions
|
||||||
echo "<span class='column hidden'>";
|
echo "<span class='column hidden'>";
|
||||||
echo "<a href='" . h($href . $desc) . "' title='" . lang('descending') . "' class='text'> ↓</a>";
|
echo "<a href='" . h($href . $desc) . "' title='" . lang('descending') . "' class='text'> ↓</a>";
|
||||||
if (!$val["fun"]) {
|
if (!$val["fun"]) {
|
||||||
echo '<a href="#fieldset-search" onclick="selectSearch(\'' . h(js_escape($key)) . '\'); return false;" title="' . lang('Search') . '" class="text jsonly"> =</a>';
|
echo '<a href="#fieldset-search" title="' . lang('Search') . '" class="text jsonly"> =</a>';
|
||||||
|
echo script("qsl('a').onclick = partial(selectSearch, '" . js_escape($key) . "');");
|
||||||
}
|
}
|
||||||
echo "</span>";
|
echo "</span>";
|
||||||
}
|
}
|
||||||
@@ -359,18 +376,22 @@ if (!$columns && support("table")) {
|
|||||||
}
|
}
|
||||||
$unique_idf = "";
|
$unique_idf = "";
|
||||||
foreach ($unique_array as $key => $val) {
|
foreach ($unique_array as $key => $val) {
|
||||||
if (($jush == "sql" || $jush == "pgsql") && strlen($val) > 64) {
|
if (($jush == "sql" || $jush == "pgsql") && preg_match('~char|text|enum|set~', $fields[$key]["type"]) && strlen($val) > 64) {
|
||||||
$key = (strpos($key, '(') ? $key : idf_escape($key)); //! columns looking like functions
|
$key = (strpos($key, '(') ? $key : idf_escape($key)); //! columns looking like functions
|
||||||
$key = "MD5(" . ($jush == 'sql' && preg_match("~^utf8_~", $fields[$key]["collation"]) ? $key : "CONVERT($key USING " . charset($connection) . ")") . ")";
|
$key = "MD5(" . ($jush != 'sql' || preg_match("~^utf8~", $fields[$key]["collation"]) ? $key : "CONVERT($key USING " . charset($connection) . ")") . ")";
|
||||||
$val = md5($val);
|
$val = md5($val);
|
||||||
}
|
}
|
||||||
$unique_idf .= "&" . ($val !== null ? urlencode("where[" . bracket_escape($key) . "]") . "=" . urlencode($val) : "null%5B%5D=" . urlencode($key));
|
$unique_idf .= "&" . ($val !== null ? urlencode("where[" . bracket_escape($key) . "]") . "=" . urlencode($val) : "null%5B%5D=" . urlencode($key));
|
||||||
}
|
}
|
||||||
echo "<tr" . odd() . ">" . (!$group && $select ? "" : "<td>" . checkbox("check[]", substr($unique_idf, 1), in_array(substr($unique_idf, 1), (array) $_POST["check"]), "", "this.form['all'].checked = false; formUncheck('all-page');") . ($is_group || information_schema(DB) ? "" : " <a href='" . h(ME . "edit=" . urlencode($TABLE) . $unique_idf) . "'>" . lang('edit') . "</a>"));
|
echo "<tr" . odd() . ">" . (!$group && $select ? "" : "<td>"
|
||||||
|
. checkbox("check[]", substr($unique_idf, 1), in_array(substr($unique_idf, 1), (array) $_POST["check"]))
|
||||||
|
. ($is_group || information_schema(DB) ? "" : " <a href='" . h(ME . "edit=" . urlencode($TABLE) . $unique_idf) . "' class='edit'>" . lang('edit') . "</a>")
|
||||||
|
);
|
||||||
|
|
||||||
foreach ($row as $key => $val) {
|
foreach ($row as $key => $val) {
|
||||||
if (isset($names[$key])) {
|
if (isset($names[$key])) {
|
||||||
$field = $fields[$key];
|
$field = $fields[$key];
|
||||||
|
$val = $driver->value($val, $field);
|
||||||
if ($val != "" && (!isset($email_fields[$key]) || $email_fields[$key] != "")) {
|
if ($val != "" && (!isset($email_fields[$key]) || $email_fields[$key] != "")) {
|
||||||
$email_fields[$key] = (is_mail($val) ? $names[$key] : ""); //! filled e-mails can be contained on other pages
|
$email_fields[$key] = (is_mail($val) ? $names[$key] : ""); //! filled e-mails can be contained on other pages
|
||||||
}
|
}
|
||||||
@@ -419,7 +440,10 @@ if (!$columns && support("table")) {
|
|||||||
echo "<td>" . ($text ? "<textarea name='$id' cols='30' rows='" . (substr_count($row[$key], "\n") + 1) . "'>$h_value</textarea>" : "<input name='$id' value='$h_value' size='$lengths[$key]'>");
|
echo "<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]'>");
|
||||||
} else {
|
} else {
|
||||||
$long = strpos($val, "<i>...</i>");
|
$long = strpos($val, "<i>...</i>");
|
||||||
echo "<td id='$id' onclick=\"selectClick(this, event, " . ($long ? 2 : ($text ? 1 : 0)) . ($editable ? "" : ", '" . h(lang('Use edit link to modify this value.')) . "'") . ");\">$val";
|
echo "<td id='$id' data-text='" . ($long ? 2 : ($text ? 1 : 0)) . "'"
|
||||||
|
. ($editable ? "" : " data-warning='" . h(lang('Use edit link to modify this value.')) . "'")
|
||||||
|
. ">$val</td>"
|
||||||
|
;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -437,103 +461,122 @@ if (!$columns && support("table")) {
|
|||||||
echo "</table>\n";
|
echo "</table>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (($rows || $page) && !is_ajax()) {
|
if (!is_ajax()) {
|
||||||
$exact_count = true;
|
if ($rows || $page) {
|
||||||
if ($_GET["page"] != "last") {
|
$exact_count = true;
|
||||||
if (!+$limit) {
|
if ($_GET["page"] != "last") {
|
||||||
$found_rows = count($rows);
|
if ($limit == "" || (count($rows) < $limit && ($rows || !$page))) {
|
||||||
} elseif ($jush != "sql" || !$is_group) {
|
$found_rows = ($page ? $page * $limit : 0) + count($rows);
|
||||||
$found_rows = ($is_group ? false : found_rows($table_status, $where));
|
} elseif ($jush != "sql" || !$is_group) {
|
||||||
if ($found_rows < max(1e4, 2 * ($page + 1) * $limit)) {
|
$found_rows = ($is_group ? false : found_rows($table_status, $where));
|
||||||
// slow with big tables
|
if ($found_rows < max(1e4, 2 * ($page + 1) * $limit)) {
|
||||||
$found_rows = reset(slow_query(count_rows($TABLE, $where, $is_group, $group)));
|
// slow with big tables
|
||||||
} else {
|
$found_rows = reset(slow_query(count_rows($TABLE, $where, $is_group, $group)));
|
||||||
$exact_count = false;
|
} else {
|
||||||
|
$exact_count = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (+$limit && ($found_rows === false || $found_rows > $limit || $page)) {
|
$pagination = ($limit != "" && ($found_rows === false || $found_rows > $limit || $page));
|
||||||
echo "<p class='pages'>";
|
if ($pagination) {
|
||||||
// display first, previous 4, next 4 and last page
|
|
||||||
$max_page = ($found_rows === false
|
|
||||||
? $page + (count($rows) >= $limit ? 2 : 1)
|
|
||||||
: floor(($found_rows - 1) / $limit)
|
|
||||||
);
|
|
||||||
if ($jush != "simpledb") {
|
|
||||||
echo '<a href="' . h(remove_from_uri("page")) . "\" onclick=\"pageClick(this.href, +prompt('" . lang('Page') . "', '" . ($page + 1) . "'), event); return false;\">" . lang('Page') . "</a>:";
|
|
||||||
echo pagination(0, $page) . ($page > 5 ? " ..." : "");
|
|
||||||
for ($i = max(1, $page - 4); $i < min($max_page, $page + 5); $i++) {
|
|
||||||
echo pagination($i, $page);
|
|
||||||
}
|
|
||||||
if ($max_page > 0) {
|
|
||||||
echo ($page + 5 < $max_page ? " ..." : "");
|
|
||||||
echo ($exact_count && $found_rows !== false
|
|
||||||
? pagination($max_page, $page)
|
|
||||||
: " <a href='" . h(remove_from_uri("page") . "&page=last") . "' title='~$max_page'>" . lang('last') . "</a>"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
echo (($found_rows === false ? count($rows) + 1 : $found_rows - $page * $limit) > $limit
|
echo (($found_rows === false ? count($rows) + 1 : $found_rows - $page * $limit) > $limit
|
||||||
? ' <a href="' . h(remove_from_uri("page") . "&page=" . ($page + 1)) . '" onclick="return !selectLoadMore(this, ' . (+$limit) . ', \'' . lang('Loading') . '...\');" class="loadmore">' . lang('Load more data') . '</a>'
|
? '<p><a href="' . h(remove_from_uri("page") . "&page=" . ($page + 1)) . '" class="loadmore">' . lang('Load more data') . '</a>'
|
||||||
|
. script("qsl('a').onclick = partial(selectLoadMore, " . (+$limit) . ", '" . lang('Loading') . "...');", "")
|
||||||
: ''
|
: ''
|
||||||
);
|
);
|
||||||
} else {
|
echo "\n";
|
||||||
echo lang('Page') . ":";
|
|
||||||
echo pagination(0, $page) . ($page > 1 ? " ..." : "");
|
|
||||||
echo ($page ? pagination($page, $page) : "");
|
|
||||||
echo ($max_page > $page ? pagination($page + 1, $page) . ($max_page > $page + 1 ? " ..." : "") : "");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
echo "<div class='footer'><div>\n";
|
||||||
|
if ($rows || $page) {
|
||||||
|
if ($pagination) {
|
||||||
|
// display first, previous 4, next 4 and last page
|
||||||
|
$max_page = ($found_rows === false
|
||||||
|
? $page + (count($rows) >= $limit ? 2 : 1)
|
||||||
|
: floor(($found_rows - 1) / $limit)
|
||||||
|
);
|
||||||
|
echo "<fieldset>";
|
||||||
|
if ($jush != "simpledb") {
|
||||||
|
echo "<legend><a href='" . h(remove_from_uri("page")) . "'>" . lang('Page') . "</a></legend>";
|
||||||
|
echo script("qsl('a').onclick = function () { pageClick(this.href, +prompt('" . lang('Page') . "', '" . ($page + 1) . "')); return false; };");
|
||||||
|
echo pagination(0, $page) . ($page > 5 ? " ..." : "");
|
||||||
|
for ($i = max(1, $page - 4); $i < min($max_page, $page + 5); $i++) {
|
||||||
|
echo pagination($i, $page);
|
||||||
|
}
|
||||||
|
if ($max_page > 0) {
|
||||||
|
echo ($page + 5 < $max_page ? " ..." : "");
|
||||||
|
echo ($exact_count && $found_rows !== false
|
||||||
|
? pagination($max_page, $page)
|
||||||
|
: " <a href='" . h(remove_from_uri("page") . "&page=last") . "' title='~$max_page'>" . lang('last') . "</a>"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
echo "<legend>" . lang('Page') . "</legend>";
|
||||||
|
echo pagination(0, $page) . ($page > 1 ? " ..." : "");
|
||||||
|
echo ($page ? pagination($page, $page) : "");
|
||||||
|
echo ($max_page > $page ? pagination($page + 1, $page) . ($max_page > $page + 1 ? " ..." : "") : "");
|
||||||
|
}
|
||||||
|
echo "</fieldset>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "<fieldset>";
|
||||||
|
echo "<legend>" . lang('Whole result') . "</legend>";
|
||||||
|
$display_rows = ($exact_count ? "" : "~ ") . $found_rows;
|
||||||
|
echo checkbox("all", 1, 0, ($found_rows !== false ? ($exact_count ? "" : "~ ") . lang('%d row(s)', $found_rows) : ""), "var checked = formChecked(this, /check/); selectCount('selected', this.checked ? '$display_rows' : checked); selectCount('selected2', this.checked || !checked ? '$display_rows' : checked);") . "\n";
|
||||||
|
echo "</fieldset>\n";
|
||||||
|
|
||||||
echo "<p class='count'>\n";
|
if ($adminer->selectCommandPrint()) {
|
||||||
echo ($found_rows !== false ? "(" . ($exact_count ? "" : "~ ") . lang('%d row(s)', $found_rows) . ") " : "");
|
?>
|
||||||
$display_rows = ($exact_count ? "" : "~ ") . $found_rows;
|
|
||||||
echo checkbox("all", 1, 0, lang('whole result'), "var checked = formChecked(this, /check/); selectCount('selected', this.checked ? '$display_rows' : checked); selectCount('selected2', this.checked || !checked ? '$display_rows' : checked);") . "\n";
|
|
||||||
|
|
||||||
if ($adminer->selectCommandPrint()) {
|
|
||||||
?>
|
|
||||||
<fieldset<?php echo ($_GET["modify"] ? '' : ' class="jsonly"'); ?>><legend><?php echo lang('Modify'); ?></legend><div>
|
<fieldset<?php echo ($_GET["modify"] ? '' : ' class="jsonly"'); ?>><legend><?php echo lang('Modify'); ?></legend><div>
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>"<?php echo ($_GET["modify"] ? '' : ' title="' . lang('Ctrl+click on a value to modify it.') . '"'); ?>>
|
<input type="submit" value="<?php echo lang('Save'); ?>"<?php echo ($_GET["modify"] ? '' : ' title="' . lang('Ctrl+click on a value to modify it.') . '"'); ?>>
|
||||||
</div></fieldset>
|
</div></fieldset>
|
||||||
<fieldset><legend><?php echo lang('Selected'); ?> <span id="selected"></span></legend><div>
|
<fieldset><legend><?php echo lang('Selected'); ?> <span id="selected"></span></legend><div>
|
||||||
<input type="submit" name="edit" value="<?php echo lang('Edit'); ?>">
|
<input type="submit" name="edit" value="<?php echo lang('Edit'); ?>">
|
||||||
<input type="submit" name="clone" value="<?php echo lang('Clone'); ?>">
|
<input type="submit" name="clone" value="<?php echo lang('Clone'); ?>">
|
||||||
<input type="submit" name="delete" value="<?php echo lang('Delete'); ?>"<?php echo confirm(); ?>>
|
<input type="submit" name="delete" value="<?php echo lang('Delete'); ?>"><?php echo confirm(); ?>
|
||||||
</div></fieldset>
|
</div></fieldset>
|
||||||
<?php
|
<?php
|
||||||
}
|
|
||||||
|
|
||||||
$format = $adminer->dumpFormat();
|
|
||||||
foreach ((array) $_GET["columns"] as $column) {
|
|
||||||
if ($column["fun"]) {
|
|
||||||
unset($format['sql']);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if ($format) {
|
$format = $adminer->dumpFormat();
|
||||||
print_fieldset("export", lang('Export') . " <span id='selected2'></span>");
|
foreach ((array) $_GET["columns"] as $column) {
|
||||||
$output = $adminer->dumpOutput();
|
if ($column["fun"]) {
|
||||||
echo ($output ? html_select("output", $output, $adminer_import["output"]) . " " : "");
|
unset($format['sql']);
|
||||||
echo html_select("format", $format, $adminer_import["format"]);
|
break;
|
||||||
echo " <input type='submit' name='export' value='" . lang('Export') . "'>\n";
|
}
|
||||||
echo "</div></fieldset>\n";
|
}
|
||||||
|
if ($format) {
|
||||||
|
print_fieldset("export", lang('Export') . " <span id='selected2'></span>");
|
||||||
|
$output = $adminer->dumpOutput();
|
||||||
|
echo ($output ? html_select("output", $output, $adminer_import["output"]) . " " : "");
|
||||||
|
echo html_select("format", $format, $adminer_import["format"]);
|
||||||
|
echo " <input type='submit' name='export' value='" . lang('Export') . "'>\n";
|
||||||
|
echo "</div></fieldset>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
$adminer->selectEmailPrint(array_filter($email_fields, 'strlen'), $columns);
|
||||||
}
|
}
|
||||||
|
|
||||||
echo (!$group && $select ? "" : "<script type='text/javascript'>tableCheck();</script>\n");
|
echo "</div></div>\n";
|
||||||
|
|
||||||
|
if ($adminer->selectImportPrint()) {
|
||||||
|
echo "<div>";
|
||||||
|
echo "<a href='#import'>" . lang('Import') . "</a>";
|
||||||
|
echo script("qsl('a').onclick = partial(toggle, 'import');", "");
|
||||||
|
echo "<span id='import' class='hidden'>: ";
|
||||||
|
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 "</span>";
|
||||||
|
echo "</div>";
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "<input type='hidden' name='token' value='$token'>\n";
|
||||||
|
echo "</form>\n";
|
||||||
|
echo (!$group && $select ? "" : script("tableCheck();"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($adminer->selectImportPrint()) {
|
|
||||||
print_fieldset("import", lang('Import'), !$rows);
|
|
||||||
echo "<input type='file' name='csv_file'> ";
|
|
||||||
echo html_select("separator", array("csv" => "CSV,", "csv;" => "CSV;", "tsv" => "TSV"), $adminer_import["format"], 1); // 1 - select
|
|
||||||
echo " <input type='submit' name='import' value='" . lang('Import') . "'>";
|
|
||||||
echo "</div></fieldset>\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
$adminer->selectEmailPrint(array_filter($email_fields, 'strlen'), $columns);
|
|
||||||
|
|
||||||
echo "<p><input type='hidden' name='token' value='$token'></p>\n";
|
|
||||||
echo "</form>\n";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ if (!$row) {
|
|||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||||
<?php
|
<?php
|
||||||
if ($SEQUENCE != "") {
|
if ($SEQUENCE != "") {
|
||||||
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm() . ">\n";
|
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'>" . confirm(lang('Drop %s?', $SEQUENCE)) . "\n";
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
|
|||||||
@@ -21,9 +21,10 @@ if (!$error && $_POST) {
|
|||||||
if (!isset($_GET["import"])) {
|
if (!isset($_GET["import"])) {
|
||||||
$query = $_POST["query"];
|
$query = $_POST["query"];
|
||||||
} elseif ($_POST["webfile"]) {
|
} elseif ($_POST["webfile"]) {
|
||||||
$fp = @fopen((file_exists("adminer.sql")
|
$sql_file_path = $adminer->importServerPath();
|
||||||
? "adminer.sql"
|
$fp = @fopen((file_exists($sql_file_path)
|
||||||
: "compress.zlib://adminer.sql.gz"
|
? $sql_file_path
|
||||||
|
: "compress.zlib://$sql_file_path.gz"
|
||||||
), "rb");
|
), "rb");
|
||||||
$query = ($fp ? fread($fp, 1e6) : false);
|
$query = ($fp ? fread($fp, 1e6) : false);
|
||||||
} else {
|
} else {
|
||||||
@@ -116,9 +117,6 @@ if (!$error && $_POST) {
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
$result = $connection->store_result();
|
$result = $connection->store_result();
|
||||||
$time = " <span class='time'>(" . format_time($start) . ")</span>"
|
|
||||||
. (strlen($q) < 1000 ? " <a href='" . h(ME) . "sql=" . urlencode(trim($q)) . "'>" . lang('Edit') . "</a>" : "") // 1000 - maximum length of encoded URL in IE is 2083 characters
|
|
||||||
;
|
|
||||||
|
|
||||||
if ($connection->error) {
|
if ($connection->error) {
|
||||||
echo ($_POST["only_errors"] ? $print : "");
|
echo ($_POST["only_errors"] ? $print : "");
|
||||||
@@ -128,41 +126,54 @@ if (!$error && $_POST) {
|
|||||||
break 2;
|
break 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
} elseif (is_object($result)) {
|
|
||||||
$limit = $_POST["limit"];
|
|
||||||
$orgtables = select($result, $connection2, array(), $limit);
|
|
||||||
if (!$_POST["only_errors"]) {
|
|
||||||
echo "<form action='' method='post'>\n";
|
|
||||||
$num_rows = $result->num_rows;
|
|
||||||
echo "<p>" . ($num_rows ? ($limit && $num_rows > $limit ? lang('%d / ', $limit) : "") . lang('%d row(s)', $num_rows) : "");
|
|
||||||
echo $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='submit' name='export' value='" . lang('Export') . "'><input type='hidden' name='token' value='$token'></span>\n"
|
|
||||||
;
|
|
||||||
if ($connection2 && preg_match("~^($space|\\()*+SELECT\\b~i", $q) && ($explain = explain($connection2, $q))) {
|
|
||||||
$id = "explain-$commands";
|
|
||||||
echo ", <a href='#$id' onclick=\"return !toggle('$id');\">EXPLAIN</a>$export";
|
|
||||||
echo "<div id='$id' class='hidden'>\n";
|
|
||||||
select($explain, $connection2, $orgtables);
|
|
||||||
echo "</div>\n";
|
|
||||||
} else {
|
|
||||||
echo $export;
|
|
||||||
}
|
|
||||||
echo "</form>\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (preg_match("~^$space*+(CREATE|DROP|ALTER)$space++(DATABASE|SCHEMA)\\b~i", $q)) {
|
$time = " <span class='time'>(" . format_time($start) . ")</span>"
|
||||||
restart_session();
|
. (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
|
||||||
set_session("dbs", null); // clear cache
|
;
|
||||||
stop_session();
|
$affected = $connection->affected_rows; // getting warnigns overwrites this
|
||||||
|
$warnings = ($_POST["only_errors"] ? "" : $driver->warnings());
|
||||||
|
$warnings_id = "warnings-$commands";
|
||||||
|
if ($warnings) {
|
||||||
|
$time .= ", <a href='#$warnings_id'>" . lang('Warnings') . "</a>" . script("qsl('a').onclick = partial(toggle, '$warnings_id');", "");
|
||||||
}
|
}
|
||||||
if (!$_POST["only_errors"]) {
|
$explain = null;
|
||||||
echo "<p class='message' title='" . h($connection->info) . "'>" . lang('Query executed OK, %d row(s) affected.', $connection->affected_rows) . "$time\n";
|
$explain_id = "explain-$commands";
|
||||||
|
if (is_object($result)) {
|
||||||
|
$limit = $_POST["limit"];
|
||||||
|
$orgtables = select($result, $connection2, array(), $limit);
|
||||||
|
if (!$_POST["only_errors"]) {
|
||||||
|
echo "<form action='' method='post'>\n";
|
||||||
|
$num_rows = $result->num_rows;
|
||||||
|
echo "<p>" . ($num_rows ? ($limit && $num_rows > $limit ? lang('%d / ', $limit) : "") . lang('%d row(s)', $num_rows) : "");
|
||||||
|
echo $time;
|
||||||
|
if ($connection2 && preg_match("~^($space|\\()*+SELECT\\b~i", $q) && ($explain = explain($connection2, $q))) {
|
||||||
|
echo ", <a href='#$explain_id'>Explain</a>" . script("qsl('a').onclick = partial(toggle, '$explain_id');", "");
|
||||||
|
}
|
||||||
|
$id = "export-$commands";
|
||||||
|
echo ", <a href='#$id'>" . lang('Export') . "</a>" . script("qsl('a').onclick = partial(toggle, '$id');", "") . "<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='submit' name='export' value='" . lang('Export') . "'><input type='hidden' name='token' value='$token'></span>\n"
|
||||||
|
. "</form>\n"
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (preg_match("~^$space*+(CREATE|DROP|ALTER)$space++(DATABASE|SCHEMA)\\b~i", $q)) {
|
||||||
|
restart_session();
|
||||||
|
set_session("dbs", null); // clear cache
|
||||||
|
stop_session();
|
||||||
|
}
|
||||||
|
if (!$_POST["only_errors"]) {
|
||||||
|
echo "<p class='message' title='" . h($connection->info) . "'>" . lang('Query executed OK, %d row(s) affected.', $affected) . "$time\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
echo ($warnings ? "<div id='$warnings_id' class='hidden'>\n$warnings</div>\n" : "");
|
||||||
|
if ($explain) {
|
||||||
|
echo "<div id='$explain_id' class='hidden'>\n";
|
||||||
|
select($explain, $connection2, $orgtables);
|
||||||
|
echo "</div>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -208,7 +219,7 @@ if (!isset($_GET["import"])) {
|
|||||||
}
|
}
|
||||||
echo "<p>";
|
echo "<p>";
|
||||||
textarea("query", $q, 20);
|
textarea("query", $q, 20);
|
||||||
echo ($_POST ? "" : "<script type='text/javascript'>focus(document.getElementsByTagName('textarea')[0]);</script>\n");
|
echo ($_POST ? "" : script("qs('textarea').focus();"));
|
||||||
echo "<p>$execute\n";
|
echo "<p>$execute\n";
|
||||||
echo lang('Limit rows') . ": <input type='number' name='limit' class='size' value='" . h($_POST ? $_POST["limit"] : $_GET["limit"]) . "'>\n";
|
echo lang('Limit rows') . ": <input type='number' name='limit' class='size' value='" . h($_POST ? $_POST["limit"] : $_GET["limit"]) . "'>\n";
|
||||||
|
|
||||||
@@ -220,7 +231,7 @@ if (!isset($_GET["import"])) {
|
|||||||
);
|
);
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
echo "<fieldset><legend>" . lang('From server') . "</legend><div>";
|
echo "<fieldset><legend>" . lang('From server') . "</legend><div>";
|
||||||
echo lang('Webserver file %s', "<code>adminer.sql" . (extension_loaded("zlib") ? "[.gz]" : "") . "</code>");
|
echo lang('Webserver file %s', "<code>" . h($adminer->importServerPath()) . (extension_loaded("zlib") ? "[.gz]" : "") . "</code>");
|
||||||
echo ' <input type="submit" name="webfile" value="' . lang('Run file') . '">';
|
echo ' <input type="submit" name="webfile" value="' . lang('Run file') . '">';
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
echo "<p>";
|
echo "<p>";
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
function adminer_object() {
|
function adminer_object() {
|
||||||
include_once "../plugins/plugin.php";
|
include_once "../plugins/plugin.php";
|
||||||
include_once "../plugins/login-sqlite.php";
|
include_once "../plugins/login-sqlite.php";
|
||||||
return new AdminerPlugin(array(new AdminerLoginSqlite));
|
return new AdminerPlugin(array(new AdminerLoginSqlite("admin", password_hash("", PASSWORD_DEFAULT))));
|
||||||
}
|
}
|
||||||
|
|
||||||
include "./index.php";
|
include "./index.php";
|
||||||
|
|||||||
@@ -10,11 +10,11 @@ h2 { font-size: 150%; margin: 0 0 20px -18px; padding: .8em 1em; border-bottom:
|
|||||||
h3 { font-weight: normal; font-size: 130%; margin: 1em 0 0; }
|
h3 { font-weight: normal; font-size: 130%; margin: 1em 0 0; }
|
||||||
form { margin: 0; }
|
form { margin: 0; }
|
||||||
td table { width: 100%; margin: 0; }
|
td table { width: 100%; margin: 0; }
|
||||||
table { margin: 1em 20px 0 0; border: 0; border-top: 1px solid #999; border-left: 1px solid #999; font-size: 90%; }
|
table { margin: 1em 20px 0 0; border-collapse: collapse; font-size: 90%; }
|
||||||
td, th { border: 0; border-right: 1px solid #999; border-bottom: 1px solid #999; padding: .2em .3em; }
|
td, th { border: 1px solid #999; padding: .2em .3em; }
|
||||||
th { background: #eee; text-align: left; }
|
th { background: #eee; text-align: left; }
|
||||||
thead th { text-align: center; padding: .2em .5em; }
|
thead th { text-align: center; padding: .2em .5em; }
|
||||||
thead td, thead th { background: #ddf; }
|
thead td, thead th { background: #ddf; } /* position: sticky; causes Firefox to lose borders */
|
||||||
fieldset { display: inline; vertical-align: top; padding: .5em .8em; margin: .8em .5em 0 0; border: 1px solid #999; }
|
fieldset { display: inline; vertical-align: top; padding: .5em .8em; margin: .8em .5em 0 0; border: 1px solid #999; }
|
||||||
p { margin: .8em 20px 0 0; }
|
p { margin: .8em 20px 0 0; }
|
||||||
img { vertical-align: middle; border: 0; }
|
img { vertical-align: middle; border: 0; }
|
||||||
@@ -23,7 +23,7 @@ code { background: #eee; }
|
|||||||
tbody tr:hover td, tbody tr:hover th { background: #eee; }
|
tbody tr:hover td, tbody tr:hover th { background: #eee; }
|
||||||
pre { margin: 1em 0 0; }
|
pre { margin: 1em 0 0; }
|
||||||
pre, textarea { font: 100%/1.25 monospace; }
|
pre, textarea { font: 100%/1.25 monospace; }
|
||||||
input[type=image] { vertical-align: middle; }
|
input { vertical-align: middle; }
|
||||||
input.default { box-shadow: 1px 1px 1px #777; }
|
input.default { box-shadow: 1px 1px 1px #777; }
|
||||||
input.required { box-shadow: 1px 1px 1px red; }
|
input.required { box-shadow: 1px 1px 1px red; }
|
||||||
input.maxlength { box-shadow: 1px 1px 1px red; }
|
input.maxlength { box-shadow: 1px 1px 1px red; }
|
||||||
@@ -32,11 +32,12 @@ input.wayoff { left: -1000px; position: absolute; }
|
|||||||
.version { color: #777; font-size: 67%; }
|
.version { color: #777; font-size: 67%; }
|
||||||
.js .hidden, .nojs .jsonly { display: none; }
|
.js .hidden, .nojs .jsonly { display: none; }
|
||||||
.js .column { position: absolute; background: #ddf; padding: .27em 1ex .3em 0; margin-top: -.27em; }
|
.js .column { position: absolute; background: #ddf; padding: .27em 1ex .3em 0; margin-top: -.27em; }
|
||||||
.nowrap td, .nowrap th, td.nowrap { white-space: pre; }
|
.nowrap td, .nowrap th, td.nowrap, p.nowrap { white-space: pre; }
|
||||||
.wrap td { white-space: normal; }
|
.wrap td { white-space: normal; }
|
||||||
.error { color: red; background: #fee; }
|
.error { color: red; background: #fee; }
|
||||||
.error b { background: #fff; font-weight: normal; }
|
.error b { background: #fff; font-weight: normal; }
|
||||||
.message { color: green; background: #efe; }
|
.message { color: green; background: #efe; }
|
||||||
|
.message table { color: #000; background: #fff; }
|
||||||
.error, .message { padding: .5em .8em; margin: 1em 20px 0 0; }
|
.error, .message { padding: .5em .8em; margin: 1em 20px 0 0; }
|
||||||
.char { color: #007F00; }
|
.char { color: #007F00; }
|
||||||
.date { color: #7F007F; }
|
.date { color: #7F007F; }
|
||||||
@@ -57,10 +58,13 @@ input.wayoff { left: -1000px; position: absolute; }
|
|||||||
.icon:hover { background-color: red; }
|
.icon:hover { background-color: red; }
|
||||||
.size { width: 6ex; }
|
.size { width: 6ex; }
|
||||||
.help { cursor: help; }
|
.help { cursor: help; }
|
||||||
.pages { position: fixed; bottom: 0; left: 21em; padding: 5px; background: #ddf; border: 1px solid #999; }
|
.footer { position: sticky; bottom: 0; margin-right: -20px; border-top: 20px solid rgba(255, 255, 255, .7); border-image: linear-gradient(rgba(255, 255, 255, .2), #fff) 100% 0; }
|
||||||
|
.footer > div { background: #fff; padding: 0 0 .5em; }
|
||||||
|
.footer fieldset { margin-top: 0; }
|
||||||
.links a { white-space: nowrap; margin-right: 20px; }
|
.links a { white-space: nowrap; margin-right: 20px; }
|
||||||
.logout { margin-top: .5em; position: absolute; top: 0; right: 0; }
|
.logout { margin-top: .5em; position: absolute; top: 0; right: 0; }
|
||||||
.loadmore { margin-left: 1ex; }
|
.loadmore { margin-left: 1ex; }
|
||||||
|
/* .edit used in designs */
|
||||||
#menu { position: absolute; margin: 10px 0 0; padding: 0 0 30px 0; top: 2em; left: 0; width: 19em; }
|
#menu { position: absolute; margin: 10px 0 0; padding: 0 0 30px 0; top: 2em; left: 0; width: 19em; }
|
||||||
#menu p, #tables { padding: .8em 1em; margin: 0; border-bottom: 1px solid #ccc; }
|
#menu p, #tables { padding: .8em 1em; margin: 0; border-bottom: 1px solid #ccc; }
|
||||||
#tables li{ list-style: none; }
|
#tables li{ list-style: none; }
|
||||||
|
|||||||
@@ -2,18 +2,25 @@
|
|||||||
|
|
||||||
/** Load syntax highlighting
|
/** Load syntax highlighting
|
||||||
* @param string first three characters of database system version
|
* @param string first three characters of database system version
|
||||||
|
* @param [boolean]
|
||||||
*/
|
*/
|
||||||
function bodyLoad(version) {
|
function bodyLoad(version, maria) {
|
||||||
if (window.jush) {
|
if (window.jush) {
|
||||||
jush.create_links = ' target="_blank" rel="noreferrer"';
|
jush.create_links = ' target="_blank" rel="noreferrer noopener"';
|
||||||
if (version) {
|
if (version) {
|
||||||
for (var key in jush.urls) {
|
for (var key in jush.urls) {
|
||||||
var obj = jush.urls;
|
var obj = jush.urls;
|
||||||
if (typeof obj[key] != 'string') {
|
if (typeof obj[key] != 'string') {
|
||||||
obj = obj[key];
|
obj = obj[key];
|
||||||
key = 0;
|
key = 0;
|
||||||
|
if (maria) {
|
||||||
|
for (var i = 1; i < obj.length; i++) {
|
||||||
|
obj[i] = obj[i].replace(/\.html/, '/');
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
obj[key] = obj[key]
|
obj[key] = obj[key]
|
||||||
|
.replace(/dev\.mysql\.com\/doc\/mysql\/en\//, (maria ? 'mariadb.com/kb/en/library/' : '$&')) // MariaDB
|
||||||
.replace(/\/doc\/mysql/, '/doc/refman/' + version) // MySQL
|
.replace(/\/doc\/mysql/, '/doc/refman/' + version) // MySQL
|
||||||
.replace(/\/docs\/current/, '/docs/' + version) // PostgreSQL
|
.replace(/\/docs\/current/, '/docs/' + version) // PostgreSQL
|
||||||
;
|
;
|
||||||
@@ -23,7 +30,7 @@ function bodyLoad(version) {
|
|||||||
jush.custom_links = jushLinks;
|
jush.custom_links = jushLinks;
|
||||||
}
|
}
|
||||||
jush.highlight_tag('code', 0);
|
jush.highlight_tag('code', 0);
|
||||||
var tags = document.getElementsByTagName('textarea');
|
var tags = qsa('textarea', document);
|
||||||
for (var i = 0; i < tags.length; i++) {
|
for (var i = 0; i < tags.length; i++) {
|
||||||
if (/(^|\s)jush-/.test(tags[i].className)) {
|
if (/(^|\s)jush-/.test(tags[i].className)) {
|
||||||
var pre = jush.textarea(tags[i]);
|
var pre = jush.textarea(tags[i]);
|
||||||
@@ -60,6 +67,15 @@ function typePassword(el, disable) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Install toggle handler
|
||||||
|
*/
|
||||||
|
function messagesPrint() {
|
||||||
|
var els = qsa('.toggle', document);
|
||||||
|
for (var i = 0; i < els.length; i++) {
|
||||||
|
els[i].onclick = partial(toggle, els[i].getAttribute('href').substr(1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var dbCtrl;
|
var dbCtrl;
|
||||||
@@ -67,45 +83,46 @@ var dbPrevious = {};
|
|||||||
|
|
||||||
/** Check if database should be opened to a new window
|
/** Check if database should be opened to a new window
|
||||||
* @param MouseEvent
|
* @param MouseEvent
|
||||||
* @param HTMLSelectElement
|
* @this HTMLSelectElement
|
||||||
*/
|
*/
|
||||||
function dbMouseDown(event, el) {
|
function dbMouseDown(event) {
|
||||||
dbCtrl = isCtrl(event);
|
dbCtrl = isCtrl(event);
|
||||||
if (dbPrevious[el.name] == undefined) {
|
if (dbPrevious[this.name] == undefined) {
|
||||||
dbPrevious[el.name] = el.value;
|
dbPrevious[this.name] = this.value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Load database after selecting it
|
/** Load database after selecting it
|
||||||
* @param HTMLSelectElement
|
* @this HTMLSelectElement
|
||||||
*/
|
*/
|
||||||
function dbChange(el) {
|
function dbChange() {
|
||||||
if (dbCtrl) {
|
if (dbCtrl) {
|
||||||
el.form.target = '_blank';
|
this.form.target = '_blank';
|
||||||
}
|
}
|
||||||
el.form.submit();
|
this.form.submit();
|
||||||
el.form.target = '';
|
this.form.target = '';
|
||||||
if (dbCtrl && dbPrevious[el.name] != undefined) {
|
if (dbCtrl && dbPrevious[this.name] != undefined) {
|
||||||
el.value = dbPrevious[el.name];
|
this.value = dbPrevious[this.name];
|
||||||
dbPrevious[el.name] = undefined;
|
dbPrevious[this.name] = undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Check whether the query will be executed with index
|
/** Check whether the query will be executed with index
|
||||||
* @param HTMLFormElement
|
* @this HTMLElement
|
||||||
*/
|
*/
|
||||||
function selectFieldChange(form) {
|
function selectFieldChange() {
|
||||||
|
var form = this.form;
|
||||||
var ok = (function () {
|
var ok = (function () {
|
||||||
var inputs = form.getElementsByTagName('input');
|
var inputs = qsa('input', form);
|
||||||
for (var i=0; i < inputs.length; i++) {
|
for (var i=0; i < inputs.length; i++) {
|
||||||
if (inputs[i].value && /^fulltext/.test(inputs[i].name)) {
|
if (inputs[i].value && /^fulltext/.test(inputs[i].name)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var ok = form.limit.value;
|
var ok = form.limit.value;
|
||||||
var selects = form.getElementsByTagName('select');
|
var selects = qsa('select', form);
|
||||||
var group = false;
|
var group = false;
|
||||||
var columns = {};
|
var columns = {};
|
||||||
for (var i=0; i < selects.length; i++) {
|
for (var i=0; i < selects.length; i++) {
|
||||||
@@ -171,15 +188,61 @@ function idfEscape(s) {
|
|||||||
return s.replace(/`/, '``');
|
return s.replace(/`/, '``');
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Detect foreign key
|
|
||||||
* @param HTMLInputElement
|
|
||||||
|
/** Handle clicks on fields editing
|
||||||
|
* @param MouseEvent
|
||||||
|
* @return boolean false to cancel action
|
||||||
*/
|
*/
|
||||||
function editingNameChange(field) {
|
function editingClick(event) {
|
||||||
var name = field.name.substr(0, field.name.length - 7);
|
var el = getTarget(event);
|
||||||
var type = formField(field.form, name + '[type]');
|
if (!isTag(el, 'input')) {
|
||||||
|
el = parentTag(target, 'label');
|
||||||
|
el = el && qs('input', el);
|
||||||
|
}
|
||||||
|
if (el) {
|
||||||
|
var name = el.name;
|
||||||
|
if (/^add\[/.test(name)) {
|
||||||
|
editingAddRow.call(el, 1);
|
||||||
|
} else if (/^up\[/.test(name)) {
|
||||||
|
editingMoveRow.call(el, 1);
|
||||||
|
} else if (/^down\[/.test(name)) {
|
||||||
|
editingMoveRow.call(el);
|
||||||
|
} else if (/^drop_col\[/.test(name)) {
|
||||||
|
editingRemoveRow.call(el, 'fields\$1[field]');
|
||||||
|
} else {
|
||||||
|
if (name == 'auto_increment_col') {
|
||||||
|
var field = el.form['fields[' + el.value + '][field]'];
|
||||||
|
if (!field.value) {
|
||||||
|
field.value = 'id';
|
||||||
|
field.oninput();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Handle input on fields editing
|
||||||
|
* @param InputEvent
|
||||||
|
*/
|
||||||
|
function editingInput(event) {
|
||||||
|
var el = getTarget(event);
|
||||||
|
if (/\[default\]$/.test(el.name)) {
|
||||||
|
el.previousSibling.checked = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Detect foreign key
|
||||||
|
* @this HTMLInputElement
|
||||||
|
*/
|
||||||
|
function editingNameChange() {
|
||||||
|
var name = this.name.substr(0, this.name.length - 7);
|
||||||
|
var type = formField(this.form, name + '[type]');
|
||||||
var opts = type.options;
|
var opts = type.options;
|
||||||
var candidate; // don't select anything with ambiguous match (like column `id`)
|
var candidate; // don't select anything with ambiguous match (like column `id`)
|
||||||
var val = field.value;
|
var val = this.value;
|
||||||
for (var i = opts.length; i--; ) {
|
for (var i = opts.length; i--; ) {
|
||||||
var match = /(.+)`(.+)/.exec(opts[i].value);
|
var match = /(.+)`(.+)/.exec(opts[i].value);
|
||||||
if (!match) { // common type
|
if (!match) { // common type
|
||||||
@@ -209,23 +272,23 @@ function editingNameChange(field) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Add table row for next field
|
/** Add table row for next field
|
||||||
* @param HTMLInputElement
|
|
||||||
* @param boolean
|
* @param boolean
|
||||||
* @return boolean
|
* @return boolean false
|
||||||
|
* @this HTMLInputElement
|
||||||
*/
|
*/
|
||||||
function editingAddRow(button, focus) {
|
function editingAddRow(focus) {
|
||||||
var match = /(\d+)(\.\d+)?/.exec(button.name);
|
var match = /(\d+)(\.\d+)?/.exec(this.name);
|
||||||
var x = match[0] + (match[2] ? added.substr(match[2].length) : added) + '1';
|
var x = match[0] + (match[2] ? added.substr(match[2].length) : added) + '1';
|
||||||
var row = parentTag(button, 'tr');
|
var row = parentTag(this, 'tr');
|
||||||
var row2 = cloneNode(row);
|
var row2 = cloneNode(row);
|
||||||
var tags = row.getElementsByTagName('select');
|
var tags = qsa('select', row);
|
||||||
var tags2 = row2.getElementsByTagName('select');
|
var tags2 = qsa('select', row2);
|
||||||
for (var i=0; i < tags.length; i++) {
|
for (var i=0; i < tags.length; i++) {
|
||||||
tags2[i].name = tags[i].name.replace(/[0-9.]+/, x);
|
tags2[i].name = tags[i].name.replace(/[0-9.]+/, x);
|
||||||
tags2[i].selectedIndex = tags[i].selectedIndex;
|
tags2[i].selectedIndex = tags[i].selectedIndex;
|
||||||
}
|
}
|
||||||
tags = row.getElementsByTagName('input');
|
tags = qsa('input', row);
|
||||||
tags2 = row2.getElementsByTagName('input');
|
tags2 = qsa('input', row2);
|
||||||
var input = tags2[0]; // IE loose tags2 after insertBefore()
|
var input = tags2[0]; // IE loose tags2 after insertBefore()
|
||||||
for (var i=0; i < tags.length; i++) {
|
for (var i=0; i < tags.length; i++) {
|
||||||
if (tags[i].name == 'auto_increment_col') {
|
if (tags[i].name == 'auto_increment_col') {
|
||||||
@@ -240,59 +303,52 @@ function editingAddRow(button, focus) {
|
|||||||
tags2[i].checked = false;
|
tags2[i].checked = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tags[0].onchange = function () {
|
tags[0].oninput = editingNameChange;
|
||||||
editingNameChange(tags[0]);
|
|
||||||
};
|
|
||||||
tags[0].onkeyup = function () {
|
|
||||||
};
|
|
||||||
row.parentNode.insertBefore(row2, row.nextSibling);
|
row.parentNode.insertBefore(row2, row.nextSibling);
|
||||||
if (focus) {
|
if (focus) {
|
||||||
input.onchange = function () {
|
input.oninput = editingNameChange;
|
||||||
editingNameChange(input);
|
|
||||||
};
|
|
||||||
input.onkeyup = function () {
|
|
||||||
};
|
|
||||||
input.focus();
|
input.focus();
|
||||||
}
|
}
|
||||||
added += '0';
|
added += '0';
|
||||||
rowCount++;
|
rowCount++;
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Remove table row for field
|
/** Remove table row for field
|
||||||
* @param HTMLInputElement
|
* @param string regular expression replacement
|
||||||
* @param string
|
* @return boolean false
|
||||||
* @return boolean
|
* @this HTMLInputElement
|
||||||
*/
|
*/
|
||||||
function editingRemoveRow(button, name) {
|
function editingRemoveRow(name) {
|
||||||
var field = formField(button.form, button.name.replace(/[^\[]+(.+)/, name));
|
var field = formField(this.form, this.name.replace(/[^\[]+(.+)/, name));
|
||||||
field.parentNode.removeChild(field);
|
field.parentNode.removeChild(field);
|
||||||
parentTag(button, 'tr').style.display = 'none';
|
parentTag(this, 'tr').style.display = 'none';
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Move table row for field
|
/** Move table row for field
|
||||||
* @param HTMLInputElement
|
* @param [boolean]
|
||||||
* @param boolean direction to move row, true for up or false for down
|
* @return boolean false for success
|
||||||
* @return boolean
|
* @this HTMLInputElement
|
||||||
*/
|
*/
|
||||||
function editingMoveRow(button, dir){
|
function editingMoveRow(up){
|
||||||
var row = parentTag(button, 'tr');
|
var row = parentTag(this, 'tr');
|
||||||
if (!('nextElementSibling' in row)) {
|
if (!('nextElementSibling' in row)) {
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
row.parentNode.insertBefore(row, dir
|
row.parentNode.insertBefore(row, up
|
||||||
? row.previousElementSibling
|
? row.previousElementSibling
|
||||||
: row.nextElementSibling ? row.nextElementSibling.nextElementSibling : row.parentNode.firstChild);
|
: row.nextElementSibling ? row.nextElementSibling.nextElementSibling : row.parentNode.firstChild);
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var lastType = '';
|
var lastType = '';
|
||||||
|
|
||||||
/** Clear length and hide collation or unsigned
|
/** Clear length and hide collation or unsigned
|
||||||
* @param HTMLSelectElement
|
* @this HTMLSelectElement
|
||||||
*/
|
*/
|
||||||
function editingTypeChange(type) {
|
function editingTypeChange() {
|
||||||
|
var type = this;
|
||||||
var name = type.name.substr(0, type.name.length - 6);
|
var name = type.name.substr(0, type.name.length - 6);
|
||||||
var text = selectValue(type);
|
var text = selectValue(type);
|
||||||
for (var i=0; i < type.form.elements.length; i++) {
|
for (var i=0; i < type.form.elements.length; i++) {
|
||||||
@@ -304,7 +360,7 @@ function editingTypeChange(type) {
|
|||||||
)) {
|
)) {
|
||||||
el.value = '';
|
el.value = '';
|
||||||
}
|
}
|
||||||
el.onchange.apply(el);
|
el.oninput.apply(el);
|
||||||
}
|
}
|
||||||
if (lastType == 'timestamp' && el.name == name + '[has_default]' && /timestamp/i.test(formField(type.form, name + '[default]').value)) {
|
if (lastType == 'timestamp' && el.name == name + '[has_default]' && /timestamp/i.test(formField(type.form, name + '[default]').value)) {
|
||||||
el.checked = false;
|
el.checked = false;
|
||||||
@@ -313,7 +369,7 @@ function editingTypeChange(type) {
|
|||||||
alterClass(el, 'hidden', !/(char|text|enum|set)$/.test(text));
|
alterClass(el, 'hidden', !/(char|text|enum|set)$/.test(text));
|
||||||
}
|
}
|
||||||
if (el.name == name + '[unsigned]') {
|
if (el.name == name + '[unsigned]') {
|
||||||
alterClass(el, 'hidden', !/((^|[^o])int|float|double|decimal)$/.test(text));
|
alterClass(el, 'hidden', !/(^|[^o])int(?!er)|numeric|real|float|double|decimal|money/.test(text));
|
||||||
}
|
}
|
||||||
if (el.name == name + '[on_update]') {
|
if (el.name == name + '[on_update]') {
|
||||||
alterClass(el, 'hidden', !/timestamp|datetime/.test(text)); // MySQL supports datetime since 5.6.5
|
alterClass(el, 'hidden', !/timestamp|datetime/.test(text)); // MySQL supports datetime since 5.6.5
|
||||||
@@ -326,37 +382,37 @@ function editingTypeChange(type) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Mark length as required
|
/** Mark length as required
|
||||||
* @param HTMLInputElement
|
* @this HTMLInputElement
|
||||||
*/
|
*/
|
||||||
function editingLengthChange(el) {
|
function editingLengthChange() {
|
||||||
alterClass(el, 'required', !el.value.length && /var(char|binary)$/.test(selectValue(el.parentNode.previousSibling.firstChild)));
|
alterClass(this, 'required', !this.value.length && /var(char|binary)$/.test(selectValue(this.parentNode.previousSibling.firstChild)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Edit enum or set
|
/** Edit enum or set
|
||||||
* @param HTMLInputElement
|
* @this HTMLInputElement
|
||||||
*/
|
*/
|
||||||
function editingLengthFocus(field) {
|
function editingLengthFocus() {
|
||||||
var td = field.parentNode;
|
var td = this.parentNode;
|
||||||
if (/(enum|set)$/.test(selectValue(td.previousSibling.firstChild))) {
|
if (/(enum|set)$/.test(selectValue(td.previousSibling.firstChild))) {
|
||||||
var edit = document.getElementById('enum-edit');
|
var edit = qs('#enum-edit');
|
||||||
var val = field.value;
|
var val = this.value;
|
||||||
edit.value = (/^'.+'$/.test(val) ? val.substr(1, val.length - 2).replace(/','/g, "\n").replace(/''/g, "'") : val); //! doesn't handle 'a'',''b' correctly
|
edit.value = (/^'.+'$/.test(val) ? val.substr(1, val.length - 2).replace(/','/g, "\n").replace(/''/g, "'") : val); //! doesn't handle 'a'',''b' correctly
|
||||||
td.appendChild(edit);
|
td.appendChild(edit);
|
||||||
field.style.display = 'none';
|
this.style.display = 'none';
|
||||||
edit.style.display = 'inline';
|
edit.style.display = 'inline';
|
||||||
edit.focus();
|
edit.focus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Finish editing of enum or set
|
/** Finish editing of enum or set
|
||||||
* @param HTMLTextAreaElement
|
* @this HTMLTextAreaElement
|
||||||
*/
|
*/
|
||||||
function editingLengthBlur(edit) {
|
function editingLengthBlur() {
|
||||||
var field = edit.parentNode.firstChild;
|
var field = this.parentNode.firstChild;
|
||||||
var val = edit.value;
|
var val = this.value;
|
||||||
field.value = (/^'[^\n]+'$/.test(val) ? val : "'" + val.replace(/\n+$/, '').replace(/'/g, "''").replace(/\n/g, "','") + "'");
|
field.value = (/^'[^\n]+'$/.test(val) ? val : val && "'" + val.replace(/\n+$/, '').replace(/'/g, "''").replace(/\n/g, "','") + "'");
|
||||||
field.style.display = 'inline';
|
field.style.display = 'inline';
|
||||||
edit.style.display = 'none';
|
this.style.display = 'none';
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Show or hide selected table column
|
/** Show or hide selected table column
|
||||||
@@ -364,9 +420,9 @@ function editingLengthBlur(edit) {
|
|||||||
* @param number
|
* @param number
|
||||||
*/
|
*/
|
||||||
function columnShow(checked, column) {
|
function columnShow(checked, column) {
|
||||||
var trs = document.getElementById('edit-fields').getElementsByTagName('tr');
|
var trs = qsa('tr', qs('#edit-fields'));
|
||||||
for (var i=0; i < trs.length; i++) {
|
for (var i=0; i < trs.length; i++) {
|
||||||
alterClass(trs[i].getElementsByTagName('td')[column], 'hidden', !checked);
|
alterClass(qsa('td', trs[i])[column], 'hidden', !checked);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -374,76 +430,106 @@ function columnShow(checked, column) {
|
|||||||
*/
|
*/
|
||||||
function editingHideDefaults() {
|
function editingHideDefaults() {
|
||||||
if (innerWidth < document.documentElement.scrollWidth) {
|
if (innerWidth < document.documentElement.scrollWidth) {
|
||||||
document.getElementById('form')['defaults'].checked = false;
|
qs('#form')['defaults'].checked = false;
|
||||||
columnShow(false, 5);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Display partition options
|
/** Display partition options
|
||||||
* @param HTMLSelectElement
|
* @this HTMLSelectElement
|
||||||
*/
|
*/
|
||||||
function partitionByChange(el) {
|
function partitionByChange() {
|
||||||
var partitionTable = /RANGE|LIST/.test(selectValue(el));
|
var partitionTable = /RANGE|LIST/.test(selectValue(this));
|
||||||
alterClass(el.form['partitions'], 'hidden', partitionTable || !el.selectedIndex);
|
alterClass(this.form['partitions'], 'hidden', partitionTable || !this.selectedIndex);
|
||||||
alterClass(document.getElementById('partition-table'), 'hidden', !partitionTable);
|
alterClass(qs('#partition-table'), 'hidden', !partitionTable);
|
||||||
helpClose();
|
helpClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Add next partition row
|
/** Add next partition row
|
||||||
* @param HTMLInputElement
|
* @this HTMLInputElement
|
||||||
*/
|
*/
|
||||||
function partitionNameChange(el) {
|
function partitionNameChange() {
|
||||||
var row = cloneNode(parentTag(el, 'tr'));
|
var row = cloneNode(parentTag(this, 'tr'));
|
||||||
row.firstChild.firstChild.value = '';
|
row.firstChild.firstChild.value = '';
|
||||||
parentTag(el, 'table').appendChild(row);
|
parentTag(this, 'table').appendChild(row);
|
||||||
el.onchange = function () {};
|
this.oninput = function () {};
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Show or hide comment fields
|
||||||
|
* @param [boolean] whether to focus Comment if checked
|
||||||
|
* @this HTMLInputElement
|
||||||
|
*/
|
||||||
|
function editingCommentsClick(focus) {
|
||||||
|
var comment = this.form['Comment'];
|
||||||
|
columnShow(this.checked, 6);
|
||||||
|
alterClass(comment, 'hidden', !this.checked);
|
||||||
|
if (focus && this.checked) {
|
||||||
|
comment.focus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** Uncheck 'all' checkbox
|
||||||
|
* @param MouseEvent
|
||||||
|
* @this HTMLTableElement
|
||||||
|
*/
|
||||||
|
function dumpClick(event) {
|
||||||
|
var el = parentTag(getTarget(event), 'label');
|
||||||
|
if (el) {
|
||||||
|
el = qs('input', el);
|
||||||
|
var match = /(.+)\[\]$/.exec(el.name);
|
||||||
|
if (match) {
|
||||||
|
checkboxClick.call(el, event);
|
||||||
|
formUncheck('check-' + match[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Add row for foreign key
|
/** Add row for foreign key
|
||||||
* @param HTMLSelectElement
|
* @this HTMLSelectElement
|
||||||
*/
|
*/
|
||||||
function foreignAddRow(field) {
|
function foreignAddRow() {
|
||||||
field.onchange = function () { };
|
this.onchange = function () { };
|
||||||
var row = cloneNode(parentTag(field, 'tr'));
|
var row = cloneNode(parentTag(this, 'tr'));
|
||||||
var selects = row.getElementsByTagName('select');
|
var selects = qsa('select', row);
|
||||||
for (var i=0; i < selects.length; i++) {
|
for (var i=0; i < selects.length; i++) {
|
||||||
selects[i].name = selects[i].name.replace(/\]/, '1$&');
|
selects[i].name = selects[i].name.replace(/\]/, '1$&');
|
||||||
selects[i].selectedIndex = 0;
|
selects[i].selectedIndex = 0;
|
||||||
}
|
}
|
||||||
parentTag(field, 'table').appendChild(row);
|
parentTag(this, 'table').appendChild(row);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Add row for indexes
|
/** Add row for indexes
|
||||||
* @param HTMLSelectElement
|
* @this HTMLSelectElement
|
||||||
*/
|
*/
|
||||||
function indexesAddRow(field) {
|
function indexesAddRow() {
|
||||||
field.onchange = function () { };
|
this.onchange = function () { };
|
||||||
var row = cloneNode(parentTag(field, 'tr'));
|
var row = cloneNode(parentTag(this, 'tr'));
|
||||||
var selects = row.getElementsByTagName('select');
|
var selects = qsa('select', row);
|
||||||
for (var i=0; i < selects.length; i++) {
|
for (var i=0; i < selects.length; i++) {
|
||||||
selects[i].name = selects[i].name.replace(/indexes\[\d+/, '$&1');
|
selects[i].name = selects[i].name.replace(/indexes\[\d+/, '$&1');
|
||||||
selects[i].selectedIndex = 0;
|
selects[i].selectedIndex = 0;
|
||||||
}
|
}
|
||||||
var inputs = row.getElementsByTagName('input');
|
var inputs = qsa('input', row);
|
||||||
for (var i=0; i < inputs.length; i++) {
|
for (var i=0; i < inputs.length; i++) {
|
||||||
inputs[i].name = inputs[i].name.replace(/indexes\[\d+/, '$&1');
|
inputs[i].name = inputs[i].name.replace(/indexes\[\d+/, '$&1');
|
||||||
inputs[i].value = '';
|
inputs[i].value = '';
|
||||||
}
|
}
|
||||||
parentTag(field, 'table').appendChild(row);
|
parentTag(this, 'table').appendChild(row);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Change column in index
|
/** Change column in index
|
||||||
* @param HTMLSelectElement
|
|
||||||
* @param string name prefix
|
* @param string name prefix
|
||||||
|
* @this HTMLSelectElement
|
||||||
*/
|
*/
|
||||||
function indexesChangeColumn(field, prefix) {
|
function indexesChangeColumn(prefix) {
|
||||||
var names = [];
|
var names = [];
|
||||||
for (var tag in { 'select': 1, 'input': 1 }) {
|
for (var tag in { 'select': 1, 'input': 1 }) {
|
||||||
var columns = parentTag(field, 'td').getElementsByTagName(tag);
|
var columns = qsa(tag, parentTag(this, 'td'));
|
||||||
for (var i=0; i < columns.length; i++) {
|
for (var i=0; i < columns.length; i++) {
|
||||||
if (/\[columns\]/.test(columns[i].name)) {
|
if (/\[columns\]/.test(columns[i].name)) {
|
||||||
var value = selectValue(columns[i]);
|
var value = selectValue(columns[i]);
|
||||||
@@ -453,17 +539,15 @@ function indexesChangeColumn(field, prefix) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
field.form[field.name.replace(/\].*/, '][name]')].value = prefix + names.join('_');
|
this.form[this.name.replace(/\].*/, '][name]')].value = prefix + names.join('_');
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Add column for index
|
/** Add column for index
|
||||||
* @param HTMLSelectElement
|
|
||||||
* @param string name prefix
|
* @param string name prefix
|
||||||
|
* @this HTMLSelectElement
|
||||||
*/
|
*/
|
||||||
function indexesAddColumn(field, prefix) {
|
function indexesAddColumn(prefix) {
|
||||||
field.onchange = function () {
|
var field = this;
|
||||||
indexesChangeColumn(field, prefix);
|
|
||||||
};
|
|
||||||
var select = field.form[field.name.replace(/\].*/, '][type]')];
|
var select = field.form[field.name.replace(/\].*/, '][type]')];
|
||||||
if (!select.selectedIndex) {
|
if (!select.selectedIndex) {
|
||||||
while (selectValue(select) != "INDEX" && select.selectedIndex < select.options.length) {
|
while (selectValue(select) != "INDEX" && select.selectedIndex < select.options.length) {
|
||||||
@@ -472,13 +556,14 @@ function indexesAddColumn(field, prefix) {
|
|||||||
select.onchange();
|
select.onchange();
|
||||||
}
|
}
|
||||||
var column = cloneNode(field.parentNode);
|
var column = cloneNode(field.parentNode);
|
||||||
var selects = column.getElementsByTagName('select');
|
var selects = qsa('select', column);
|
||||||
for (var i = 0; i < selects.length; i++) {
|
for (var i = 0; i < selects.length; i++) {
|
||||||
select = selects[i];
|
select = selects[i];
|
||||||
select.name = select.name.replace(/\]\[\d+/, '$&1');
|
select.name = select.name.replace(/\]\[\d+/, '$&1');
|
||||||
select.selectedIndex = 0;
|
select.selectedIndex = 0;
|
||||||
}
|
}
|
||||||
var inputs = column.getElementsByTagName('input');
|
field.onchange = partial(indexesChangeColumn, prefix);
|
||||||
|
var inputs = qsa('input', column);
|
||||||
for (var i = 0; i < inputs.length; i++) {
|
for (var i = 0; i < inputs.length; i++) {
|
||||||
var input = inputs[i];
|
var input = inputs[i];
|
||||||
input.name = input.name.replace(/\]\[\d+/, '$&1');
|
input.name = input.name.replace(/\]\[\d+/, '$&1');
|
||||||
@@ -510,48 +595,47 @@ function triggerChange(tableRe, table, form) {
|
|||||||
var that, x, y; // em and tablePos defined in schema.inc.php
|
var that, x, y; // em and tablePos defined in schema.inc.php
|
||||||
|
|
||||||
/** Get mouse position
|
/** Get mouse position
|
||||||
* @param HTMLElement
|
|
||||||
* @param MouseEvent
|
* @param MouseEvent
|
||||||
|
* @this HTMLElement
|
||||||
*/
|
*/
|
||||||
function schemaMousedown(el, event) {
|
function schemaMousedown(event) {
|
||||||
if ((event.which ? event.which : event.button) == 1) {
|
if ((event.which ? event.which : event.button) == 1) {
|
||||||
that = el;
|
that = this;
|
||||||
x = event.clientX - el.offsetLeft;
|
x = event.clientX - this.offsetLeft;
|
||||||
y = event.clientY - el.offsetTop;
|
y = event.clientY - this.offsetTop;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Move object
|
/** Move object
|
||||||
* @param MouseEvent
|
* @param MouseEvent
|
||||||
*/
|
*/
|
||||||
function schemaMousemove(ev) {
|
function schemaMousemove(event) {
|
||||||
if (that !== undefined) {
|
if (that !== undefined) {
|
||||||
ev = ev || event;
|
var left = (event.clientX - x) / em;
|
||||||
var left = (ev.clientX - x) / em;
|
var top = (event.clientY - y) / em;
|
||||||
var top = (ev.clientY - y) / em;
|
var divs = qsa('div', that);
|
||||||
var divs = that.getElementsByTagName('div');
|
|
||||||
var lineSet = { };
|
var lineSet = { };
|
||||||
for (var i=0; i < divs.length; i++) {
|
for (var i=0; i < divs.length; i++) {
|
||||||
if (divs[i].className == 'references') {
|
if (divs[i].className == 'references') {
|
||||||
var div2 = document.getElementById((/^refs/.test(divs[i].id) ? 'refd' : 'refs') + divs[i].id.substr(4));
|
var div2 = qs('[id="' + (/^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 ref = (tablePos[divs[i].title] ? tablePos[divs[i].title] : [ div2.parentNode.offsetTop / em, 0 ]);
|
||||||
var left1 = -1;
|
var left1 = -1;
|
||||||
var id = divs[i].id.replace(/^ref.(.+)-.+/, '$1');
|
var id = divs[i].id.replace(/^ref.(.+)-.+/, '$1');
|
||||||
if (divs[i].parentNode != div2.parentNode) {
|
if (divs[i].parentNode != div2.parentNode) {
|
||||||
left1 = Math.min(0, ref[1] - left) - 1;
|
left1 = Math.min(0, ref[1] - left) - 1;
|
||||||
divs[i].style.left = left1 + 'em';
|
divs[i].style.left = left1 + 'em';
|
||||||
divs[i].getElementsByTagName('div')[0].style.width = -left1 + 'em';
|
divs[i].querySelector('div').style.width = -left1 + 'em';
|
||||||
var left2 = Math.min(0, left - ref[1]) - 1;
|
var left2 = Math.min(0, left - ref[1]) - 1;
|
||||||
div2.style.left = left2 + 'em';
|
div2.style.left = left2 + 'em';
|
||||||
div2.getElementsByTagName('div')[0].style.width = -left2 + 'em';
|
div2.querySelector('div').style.width = -left2 + 'em';
|
||||||
}
|
}
|
||||||
if (!lineSet[id]) {
|
if (!lineSet[id]) {
|
||||||
var line = document.getElementById(divs[i].id.replace(/^....(.+)-.+$/, 'refl$1'));
|
var line = qs('[id="' + divs[i].id.replace(/^....(.+)-.+$/, 'refl$1') + '"]');
|
||||||
var top1 = top + divs[i].offsetTop / em;
|
var top1 = top + divs[i].offsetTop / em;
|
||||||
var top2 = top + div2.offsetTop / em;
|
var top2 = top + div2.offsetTop / em;
|
||||||
if (divs[i].parentNode != div2.parentNode) {
|
if (divs[i].parentNode != div2.parentNode) {
|
||||||
top2 += ref[0] - top;
|
top2 += ref[0] - top;
|
||||||
line.getElementsByTagName('div')[0].style.height = Math.abs(top1 - top2) + 'em';
|
line.querySelector('div').style.height = Math.abs(top1 - top2) + 'em';
|
||||||
}
|
}
|
||||||
line.style.left = (left + left1) + 'em';
|
line.style.left = (left + left1) + 'em';
|
||||||
line.style.top = Math.min(top1, top2) + 'em';
|
line.style.top = Math.min(top1, top2) + 'em';
|
||||||
@@ -568,17 +652,16 @@ function schemaMousemove(ev) {
|
|||||||
* @param MouseEvent
|
* @param MouseEvent
|
||||||
* @param string
|
* @param string
|
||||||
*/
|
*/
|
||||||
function schemaMouseup(ev, db) {
|
function schemaMouseup(event, db) {
|
||||||
if (that !== undefined) {
|
if (that !== undefined) {
|
||||||
ev = ev || event;
|
tablePos[that.firstChild.firstChild.firstChild.data] = [ (event.clientY - y) / em, (event.clientX - x) / em ];
|
||||||
tablePos[that.firstChild.firstChild.firstChild.data] = [ (ev.clientY - y) / em, (ev.clientX - x) / em ];
|
|
||||||
that = undefined;
|
that = undefined;
|
||||||
var s = '';
|
var s = '';
|
||||||
for (var key in tablePos) {
|
for (var key in tablePos) {
|
||||||
s += '_' + key + ':' + Math.round(tablePos[key][0] * 10000) / 10000 + 'x' + Math.round(tablePos[key][1] * 10000) / 10000;
|
s += '_' + key + ':' + Math.round(tablePos[key][0] * 10000) / 10000 + 'x' + Math.round(tablePos[key][1] * 10000) / 10000;
|
||||||
}
|
}
|
||||||
s = encodeURIComponent(s.substr(1));
|
s = encodeURIComponent(s.substr(1));
|
||||||
var link = document.getElementById('schema-link');
|
var link = qs('#schema-link');
|
||||||
link.href = link.href.replace(/[^=]+$/, '') + s;
|
link.href = link.href.replace(/[^=]+$/, '') + s;
|
||||||
cookie('adminer_schema-' + db + '=' + s, 30); //! special chars in db
|
cookie('adminer_schema-' + db + '=' + s, 30); //! special chars in db
|
||||||
}
|
}
|
||||||
@@ -589,18 +672,18 @@ function schemaMouseup(ev, db) {
|
|||||||
var helpOpen, helpIgnore; // when mouse outs <option> then it mouse overs border of <select> - ignore it
|
var helpOpen, helpIgnore; // when mouse outs <option> then it mouse overs border of <select> - ignore it
|
||||||
|
|
||||||
/** Display help
|
/** Display help
|
||||||
* @param HTMLElement
|
|
||||||
* @param MouseEvent
|
* @param MouseEvent
|
||||||
* @param string
|
* @param string
|
||||||
* @param bool display on left side (otherwise on top)
|
* @param bool display on left side (otherwise on top)
|
||||||
|
* @this HTMLElement
|
||||||
*/
|
*/
|
||||||
function helpMouseover(el, event, text, side) {
|
function helpMouseover(event, text, side) {
|
||||||
var target = getTarget(event);
|
var target = getTarget(event);
|
||||||
if (!text) {
|
if (!text) {
|
||||||
helpClose();
|
helpClose();
|
||||||
} else if (window.jush && (!helpIgnore || el != target)) {
|
} else if (window.jush && (!helpIgnore || this != target)) {
|
||||||
helpOpen = 1;
|
helpOpen = 1;
|
||||||
var help = document.getElementById('help');
|
var help = qs('#help');
|
||||||
help.innerHTML = text;
|
help.innerHTML = text;
|
||||||
jush.highlight_tag([ help ]);
|
jush.highlight_tag([ help ]);
|
||||||
alterClass(help, 'hidden');
|
alterClass(help, 'hidden');
|
||||||
@@ -612,12 +695,12 @@ function helpMouseover(el, event, text, side) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Close help after timeout
|
/** Close help after timeout
|
||||||
* @param HTMLElement
|
|
||||||
* @param MouseEvent
|
* @param MouseEvent
|
||||||
|
* @this HTMLElement
|
||||||
*/
|
*/
|
||||||
function helpMouseout(el, event) {
|
function helpMouseout(event) {
|
||||||
helpOpen = 0;
|
helpOpen = 0;
|
||||||
helpIgnore = (el != getTarget(event));
|
helpIgnore = (this != getTarget(event));
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
if (!helpOpen) {
|
if (!helpOpen) {
|
||||||
helpClose();
|
helpClose();
|
||||||
@@ -628,5 +711,5 @@ function helpMouseout(el, event) {
|
|||||||
/** Close help
|
/** Close help
|
||||||
*/
|
*/
|
||||||
function helpClose() {
|
function helpClose() {
|
||||||
alterClass(document.getElementById('help'), 'hidden', true);
|
alterClass(qs('#help'), 'hidden', true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,67 @@
|
|||||||
|
|
||||||
|
/** Get first element by selector
|
||||||
|
* @param string
|
||||||
|
* @param [HTMLElement] defaults to document
|
||||||
|
* @return HTMLElement
|
||||||
|
*/
|
||||||
|
function qs(selector, context) {
|
||||||
|
return (context || document).querySelector(selector);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get last element by selector
|
||||||
|
* @param string
|
||||||
|
* @param [HTMLElement] defaults to document
|
||||||
|
* @return HTMLElement
|
||||||
|
*/
|
||||||
|
function qsl(selector, context) {
|
||||||
|
var els = qsa(selector, context || document);
|
||||||
|
return els[els.length - 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get all elements by selector
|
||||||
|
* @param string
|
||||||
|
* @param HTMLElement
|
||||||
|
* @return NodeList
|
||||||
|
*/
|
||||||
|
function qsa(selector, context) {
|
||||||
|
return context.querySelectorAll(selector);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Return a function calling fn with the next arguments
|
||||||
|
* @param function
|
||||||
|
* @param ...
|
||||||
|
* @return function with preserved this
|
||||||
|
*/
|
||||||
|
function partial(fn) {
|
||||||
|
var args = Array.apply(null, arguments).slice(1);
|
||||||
|
return function () {
|
||||||
|
return fn.apply(this, args);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Return a function calling fn with the first parameter and then the next arguments
|
||||||
|
* @param function
|
||||||
|
* @param ...
|
||||||
|
* @return function with preserved this
|
||||||
|
*/
|
||||||
|
function partialArg(fn) {
|
||||||
|
var args = Array.apply(null, arguments);
|
||||||
|
return function (arg) {
|
||||||
|
args[0] = arg;
|
||||||
|
return fn.apply(this, args);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Assign values from source to target
|
||||||
|
* @param Object
|
||||||
|
* @param Object
|
||||||
|
*/
|
||||||
|
function mixin(target, source) {
|
||||||
|
for (var key in source) {
|
||||||
|
target[key] = source[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** Add or remove CSS class
|
/** Add or remove CSS class
|
||||||
* @param HTMLElement
|
* @param HTMLElement
|
||||||
* @param string
|
* @param string
|
||||||
@@ -12,12 +75,12 @@ function alterClass(el, className, enable) {
|
|||||||
|
|
||||||
/** Toggle visibility
|
/** Toggle visibility
|
||||||
* @param string
|
* @param string
|
||||||
* @return boolean
|
* @return boolean false
|
||||||
*/
|
*/
|
||||||
function toggle(id) {
|
function toggle(id) {
|
||||||
var el = document.getElementById(id);
|
var el = qs('#' + id);
|
||||||
el.className = (el.className == 'hidden' ? '' : 'hidden');
|
el.className = (el.className == 'hidden' ? '' : 'hidden');
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Set permanent cookie
|
/** Set permanent cookie
|
||||||
@@ -33,8 +96,10 @@ function cookie(assign, days) {
|
|||||||
|
|
||||||
/** Verify current Adminer version
|
/** Verify current Adminer version
|
||||||
* @param string
|
* @param string
|
||||||
|
* @param string own URL base
|
||||||
|
* @param string
|
||||||
*/
|
*/
|
||||||
function verifyVersion(current) {
|
function verifyVersion(current, url, token) {
|
||||||
cookie('adminer_version=0', 1);
|
cookie('adminer_version=0', 1);
|
||||||
var iframe = document.createElement('iframe');
|
var iframe = document.createElement('iframe');
|
||||||
iframe.src = 'https://www.adminer.org/version/?current=' + current;
|
iframe.src = 'https://www.adminer.org/version/?current=' + current;
|
||||||
@@ -50,11 +115,13 @@ function verifyVersion(current) {
|
|||||||
var match = /version=(.+)/.exec(event.data);
|
var match = /version=(.+)/.exec(event.data);
|
||||||
if (match) {
|
if (match) {
|
||||||
cookie('adminer_version=' + match[1], 1);
|
cookie('adminer_version=' + match[1], 1);
|
||||||
|
ajax(url + 'script=version', function () {
|
||||||
|
}, event.data + '&token=' + token);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, false);
|
}, false);
|
||||||
}
|
}
|
||||||
document.getElementById('version').appendChild(iframe);
|
qs('#version').appendChild(iframe);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get value of select
|
/** Get value of select
|
||||||
@@ -70,20 +137,20 @@ function selectValue(select) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Verify if element has a specified tag name
|
/** Verify if element has a specified tag name
|
||||||
* @param HTMLElement
|
* @param HTMLElement
|
||||||
* @param string regular expression
|
* @param string regular expression
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function isTag(el, tag) {
|
function isTag(el, tag) {
|
||||||
var re = new RegExp('^(' + tag + ')$', 'i');
|
var re = new RegExp('^(' + tag + ')$', 'i');
|
||||||
return re.test(el.tagName);
|
return re.test(el.tagName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get parent node with specified tag name
|
/** Get parent node with specified tag name
|
||||||
* @param HTMLElement
|
* @param HTMLElement
|
||||||
* @param string regular expression
|
* @param string regular expression
|
||||||
* @return HTMLElement
|
* @return HTMLElement
|
||||||
*/
|
*/
|
||||||
function parentTag(el, tag) {
|
function parentTag(el, tag) {
|
||||||
while (el && !isTag(el, tag)) {
|
while (el && !isTag(el, tag)) {
|
||||||
el = el.parentNode;
|
el = el.parentNode;
|
||||||
@@ -105,27 +172,31 @@ function trCheck(el) {
|
|||||||
/** Fill number of selected items
|
/** Fill number of selected items
|
||||||
* @param string
|
* @param string
|
||||||
* @param string
|
* @param string
|
||||||
|
* @uses thousandsSeparator
|
||||||
*/
|
*/
|
||||||
function selectCount(id, count) {
|
function selectCount(id, count) {
|
||||||
setHtml(id, (count === '' ? '' : '(' + (count + '').replace(/\B(?=(\d{3})+$)/g, ' ') + ')'));
|
setHtml(id, (count === '' ? '' : '(' + (count + '').replace(/\B(?=(\d{3})+$)/g, thousandsSeparator) + ')'));
|
||||||
var inputs = document.getElementById(id).parentNode.parentNode.getElementsByTagName('input');
|
var el = qs('#' + id);
|
||||||
for (var i = 0; i < inputs.length; i++) {
|
if (el) {
|
||||||
var input = inputs[i];
|
var inputs = qsa('input', el.parentNode.parentNode);
|
||||||
if (input.type == 'submit') {
|
for (var i = 0; i < inputs.length; i++) {
|
||||||
input.disabled = (count == '0');
|
var input = inputs[i];
|
||||||
|
if (input.type == 'submit') {
|
||||||
|
input.disabled = (count == '0');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Check all elements matching given name
|
/** Check all elements matching given name
|
||||||
* @param HTMLInputElement
|
|
||||||
* @param RegExp
|
* @param RegExp
|
||||||
|
* @this HTMLInputElement
|
||||||
*/
|
*/
|
||||||
function formCheck(el, name) {
|
function formCheck(name) {
|
||||||
var elems = el.form.elements;
|
var elems = this.form.elements;
|
||||||
for (var i=0; i < elems.length; i++) {
|
for (var i=0; i < elems.length; i++) {
|
||||||
if (name.test(elems[i].name)) {
|
if (name.test(elems[i].name)) {
|
||||||
elems[i].checked = el.checked;
|
elems[i].checked = this.checked;
|
||||||
trCheck(elems[i]);
|
trCheck(elems[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -134,10 +205,10 @@ function formCheck(el, name) {
|
|||||||
/** Check all rows in <table class="checkable">
|
/** Check all rows in <table class="checkable">
|
||||||
*/
|
*/
|
||||||
function tableCheck() {
|
function tableCheck() {
|
||||||
var tables = document.getElementsByTagName('table');
|
var tables = qsa('table', document);
|
||||||
for (var i=0; i < tables.length; i++) {
|
for (var i=0; i < tables.length; i++) {
|
||||||
if (/(^|\s)checkable(\s|$)/.test(tables[i].className)) {
|
if (/(^|\s)checkable(\s|$)/.test(tables[i].className)) {
|
||||||
var trs = tables[i].getElementsByTagName('tr');
|
var trs = qsa('tr', tables[i]);
|
||||||
for (var j=0; j < trs.length; j++) {
|
for (var j=0; j < trs.length; j++) {
|
||||||
trCheck(trs[j].firstChild.firstChild);
|
trCheck(trs[j].firstChild.firstChild);
|
||||||
}
|
}
|
||||||
@@ -149,7 +220,7 @@ function tableCheck() {
|
|||||||
* @param string
|
* @param string
|
||||||
*/
|
*/
|
||||||
function formUncheck(id) {
|
function formUncheck(id) {
|
||||||
var el = document.getElementById(id);
|
var el = qs('#' + id);
|
||||||
el.checked = false;
|
el.checked = false;
|
||||||
trCheck(el);
|
trCheck(el);
|
||||||
}
|
}
|
||||||
@@ -175,6 +246,13 @@ function formChecked(el, name) {
|
|||||||
* @param [boolean] force click
|
* @param [boolean] force click
|
||||||
*/
|
*/
|
||||||
function tableClick(event, click) {
|
function tableClick(event, click) {
|
||||||
|
var td = parentTag(getTarget(event), 'td');
|
||||||
|
var text;
|
||||||
|
if (td && (text = td.getAttribute('data-text'))) {
|
||||||
|
if (selectClick.call(td, event, +text, td.getAttribute('data-warning'))) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
click = (click || !window.getSelection || getSelection().isCollapsed);
|
click = (click || !window.getSelection || getSelection().isCollapsed);
|
||||||
var el = getTarget(event);
|
var el = getTarget(event);
|
||||||
while (!isTag(el, 'tr')) {
|
while (!isTag(el, 'tr')) {
|
||||||
@@ -182,7 +260,7 @@ function tableClick(event, click) {
|
|||||||
if (el.type != 'checkbox') {
|
if (el.type != 'checkbox') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
checkboxClick(event, el);
|
checkboxClick.call(el, event);
|
||||||
click = false;
|
click = false;
|
||||||
}
|
}
|
||||||
el = el.parentNode;
|
el = el.parentNode;
|
||||||
@@ -195,31 +273,38 @@ function tableClick(event, click) {
|
|||||||
el.checked = !el.checked;
|
el.checked = !el.checked;
|
||||||
el.onclick && el.onclick();
|
el.onclick && el.onclick();
|
||||||
}
|
}
|
||||||
|
if (el.name == 'check[]') {
|
||||||
|
el.form['all'].checked = false;
|
||||||
|
formUncheck('all-page');
|
||||||
|
}
|
||||||
|
if (/^(tables|views)\[\]$/.test(el.name)) {
|
||||||
|
formUncheck('check-all');
|
||||||
|
}
|
||||||
trCheck(el);
|
trCheck(el);
|
||||||
}
|
}
|
||||||
|
|
||||||
var lastChecked;
|
var lastChecked;
|
||||||
|
|
||||||
/** Shift-click on checkbox for multiple selection.
|
/** Shift-click on checkbox for multiple selection.
|
||||||
* @param MouseEvent
|
* @param MouseEvent
|
||||||
* @param HTMLInputElement
|
* @this HTMLInputElement
|
||||||
*/
|
*/
|
||||||
function checkboxClick(event, el) {
|
function checkboxClick(event) {
|
||||||
if (!el.name) {
|
if (!this.name) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (event.shiftKey && (!lastChecked || lastChecked.name == el.name)) {
|
if (event.shiftKey && (!lastChecked || lastChecked.name == this.name)) {
|
||||||
var checked = (lastChecked ? lastChecked.checked : true);
|
var checked = (lastChecked ? lastChecked.checked : true);
|
||||||
var inputs = parentTag(el, 'table').getElementsByTagName('input');
|
var inputs = qsa('input', parentTag(this, 'table'));
|
||||||
var checking = !lastChecked;
|
var checking = !lastChecked;
|
||||||
for (var i=0; i < inputs.length; i++) {
|
for (var i=0; i < inputs.length; i++) {
|
||||||
var input = inputs[i];
|
var input = inputs[i];
|
||||||
if (input.name === el.name) {
|
if (input.name === this.name) {
|
||||||
if (checking) {
|
if (checking) {
|
||||||
input.checked = checked;
|
input.checked = checked;
|
||||||
trCheck(input);
|
trCheck(input);
|
||||||
}
|
}
|
||||||
if (input === el || input === lastChecked) {
|
if (input === this || input === lastChecked) {
|
||||||
if (checking) {
|
if (checking) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -228,7 +313,7 @@ function checkboxClick(event, el) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
lastChecked = el;
|
lastChecked = this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -237,7 +322,7 @@ function checkboxClick(event, el) {
|
|||||||
* @param string undefined to set parentNode to
|
* @param string undefined to set parentNode to
|
||||||
*/
|
*/
|
||||||
function setHtml(id, html) {
|
function setHtml(id, html) {
|
||||||
var el = document.getElementById(id);
|
var el = qs('#' + id);
|
||||||
if (el) {
|
if (el) {
|
||||||
if (html == null) {
|
if (html == null) {
|
||||||
el.parentNode.innerHTML = ' ';
|
el.parentNode.innerHTML = ' ';
|
||||||
@@ -262,52 +347,49 @@ function nodePosition(el) {
|
|||||||
/** Go to the specified page
|
/** Go to the specified page
|
||||||
* @param string
|
* @param string
|
||||||
* @param string
|
* @param string
|
||||||
* @param [MouseEvent]
|
|
||||||
*/
|
*/
|
||||||
function pageClick(href, page, event) {
|
function pageClick(href, page) {
|
||||||
if (!isNaN(page) && page) {
|
if (!isNaN(page) && page) {
|
||||||
href += (page != 1 ? '&page=' + (page - 1) : '');
|
location.href = href + (page != 1 ? '&page=' + (page - 1) : '');
|
||||||
location.href = href;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Display items in menu
|
/** Display items in menu
|
||||||
* @param HTMLElement
|
|
||||||
* @param MouseEvent
|
* @param MouseEvent
|
||||||
|
* @this HTMLElement
|
||||||
*/
|
*/
|
||||||
function menuOver(el, event) {
|
function menuOver(event) {
|
||||||
var a = getTarget(event);
|
var a = getTarget(event);
|
||||||
if (isTag(a, 'a|span') && a.offsetLeft + a.offsetWidth > a.parentNode.offsetWidth - 15) { // 15 - ellipsis
|
if (isTag(a, 'a|span') && a.offsetLeft + a.offsetWidth > a.parentNode.offsetWidth - 15) { // 15 - ellipsis
|
||||||
el.style.overflow = 'visible';
|
this.style.overflow = 'visible';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Hide items in menu
|
/** Hide items in menu
|
||||||
* @param HTMLElement
|
* @this HTMLElement
|
||||||
*/
|
*/
|
||||||
function menuOut(el) {
|
function menuOut() {
|
||||||
el.style.overflow = 'auto';
|
this.style.overflow = 'auto';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Add row in select fieldset
|
/** Add row in select fieldset
|
||||||
* @param HTMLSelectElement
|
* @this HTMLSelectElement
|
||||||
*/
|
*/
|
||||||
function selectAddRow(field) {
|
function selectAddRow() {
|
||||||
field.onchange = function () {
|
var field = this;
|
||||||
selectFieldChange(field.form);
|
|
||||||
};
|
|
||||||
field.onchange();
|
|
||||||
var row = cloneNode(field.parentNode);
|
var row = cloneNode(field.parentNode);
|
||||||
var selects = row.getElementsByTagName('select');
|
field.onchange = selectFieldChange;
|
||||||
|
field.onchange();
|
||||||
|
var selects = qsa('select', row);
|
||||||
for (var i=0; i < selects.length; i++) {
|
for (var i=0; i < selects.length; i++) {
|
||||||
selects[i].name = selects[i].name.replace(/[a-z]\[\d+/, '$&1');
|
selects[i].name = selects[i].name.replace(/[a-z]\[\d+/, '$&1');
|
||||||
selects[i].selectedIndex = 0;
|
selects[i].selectedIndex = 0;
|
||||||
}
|
}
|
||||||
var inputs = row.getElementsByTagName('input');
|
var inputs = qsa('input', row);
|
||||||
for (var i=0; i < inputs.length; i++) {
|
for (var i=0; i < inputs.length; i++) {
|
||||||
inputs[i].name = inputs[i].name.replace(/[a-z]\[\d+/, '$&1');
|
inputs[i].name = inputs[i].name.replace(/[a-z]\[\d+/, '$&1');
|
||||||
inputs[i].className = '';
|
inputs[i].className = '';
|
||||||
@@ -321,33 +403,33 @@ function selectAddRow(field) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Prevent onsearch handler on Enter
|
/** Prevent onsearch handler on Enter
|
||||||
* @param HTMLInputElement
|
|
||||||
* @param KeyboardEvent
|
* @param KeyboardEvent
|
||||||
|
* @this HTMLInputElement
|
||||||
*/
|
*/
|
||||||
function selectSearchKeydown(el, event) {
|
function selectSearchKeydown(event) {
|
||||||
if (event.keyCode == 13 || event.keyCode == 10) {
|
if (event.keyCode == 13 || event.keyCode == 10) {
|
||||||
el.onsearch = function () {
|
this.onsearch = function () {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Clear column name after resetting search
|
/** Clear column name after resetting search
|
||||||
* @param HTMLInputElement
|
* @this HTMLInputElement
|
||||||
*/
|
*/
|
||||||
function selectSearchSearch(el) {
|
function selectSearchSearch() {
|
||||||
if (!el.value) {
|
if (!this.value) {
|
||||||
el.parentNode.firstChild.selectedIndex = 0;
|
this.parentNode.firstChild.selectedIndex = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Toggles column context menu
|
/** Toggles column context menu
|
||||||
* @param HTMLElement
|
* @param [string] extra class name
|
||||||
* @param [string] extra class name
|
* @this HTMLElement
|
||||||
*/
|
*/
|
||||||
function columnMouse(el, className) {
|
function columnMouse(className) {
|
||||||
var spans = el.getElementsByTagName('span');
|
var spans = qsa('span', this);
|
||||||
for (var i=0; i < spans.length; i++) {
|
for (var i=0; i < spans.length; i++) {
|
||||||
if (/column/.test(spans[i].className)) {
|
if (/column/.test(spans[i].className)) {
|
||||||
spans[i].className = 'column' + (className || '');
|
spans[i].className = 'column' + (className || '');
|
||||||
@@ -358,12 +440,13 @@ function columnMouse(el, className) {
|
|||||||
|
|
||||||
|
|
||||||
/** Fill column in search field
|
/** Fill column in search field
|
||||||
* @param string
|
* @param string
|
||||||
*/
|
* @return boolean false
|
||||||
|
*/
|
||||||
function selectSearch(name) {
|
function selectSearch(name) {
|
||||||
var el = document.getElementById('fieldset-search');
|
var el = qs('#fieldset-search');
|
||||||
el.className = '';
|
el.className = '';
|
||||||
var divs = el.getElementsByTagName('div');
|
var divs = qsa('div', el);
|
||||||
for (var i=0; i < divs.length; i++) {
|
for (var i=0; i < divs.length; i++) {
|
||||||
var div = divs[i];
|
var div = divs[i];
|
||||||
if (isTag(div.firstChild, 'select') && selectValue(div.firstChild) == name) {
|
if (isTag(div.firstChild, 'select') && selectValue(div.firstChild) == name) {
|
||||||
@@ -374,7 +457,8 @@ function selectSearch(name) {
|
|||||||
div.firstChild.value = name;
|
div.firstChild.value = name;
|
||||||
div.firstChild.onchange();
|
div.firstChild.onchange();
|
||||||
}
|
}
|
||||||
div.lastChild.focus();
|
qs('[name$="[val]"]', div).focus();
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -402,6 +486,7 @@ function getTarget(event) {
|
|||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
function bodyKeydown(event, button) {
|
function bodyKeydown(event, button) {
|
||||||
|
eventStop(event);
|
||||||
var target = getTarget(event);
|
var target = getTarget(event);
|
||||||
if (target.jushTextarea) {
|
if (target.jushTextarea) {
|
||||||
target = target.jushTextarea;
|
target = target.jushTextarea;
|
||||||
@@ -450,18 +535,17 @@ function editingKeydown(event) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (event.shiftKey && !bodyKeydown(event, 'insert')) {
|
if (event.shiftKey && !bodyKeydown(event, 'insert')) {
|
||||||
eventStop(event);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Disable maxlength for functions
|
/** Disable maxlength for functions
|
||||||
* @param HTMLSelectElement
|
* @this HTMLSelectElement
|
||||||
*/
|
*/
|
||||||
function functionChange(select) {
|
function functionChange() {
|
||||||
var input = select.form[select.name.replace(/^function/, 'fields')];
|
var input = this.form[this.name.replace(/^function/, 'fields')];
|
||||||
if (selectValue(select)) {
|
if (selectValue(this)) {
|
||||||
if (input.origType === undefined) {
|
if (input.origType === undefined) {
|
||||||
input.origType = input.type;
|
input.origType = input.type;
|
||||||
input.origMaxLength = input.getAttribute('data-maxlength');
|
input.origMaxLength = input.getAttribute('data-maxlength');
|
||||||
@@ -478,28 +562,29 @@ function functionChange(select) {
|
|||||||
helpClose();
|
helpClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Call this.onchange() if value changes
|
/** Skip 'original' when typing
|
||||||
* @this HTMLInputElement
|
* @param number
|
||||||
|
* @this HTMLTableCellElement
|
||||||
*/
|
*/
|
||||||
function keyupChange() {
|
function skipOriginal(first) {
|
||||||
if (this.value != this.getAttribute('value')) {
|
var fnSelect = this.previousSibling.firstChild;
|
||||||
this.onchange();
|
if (fnSelect.selectedIndex < first) {
|
||||||
this.setAttribute('value', this.value);
|
fnSelect.selectedIndex = first;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Add new field in schema-less edit
|
/** Add new field in schema-less edit
|
||||||
* @param HTMLInputElement
|
* @this HTMLInputElement
|
||||||
*/
|
*/
|
||||||
function fieldChange(field) {
|
function fieldChange() {
|
||||||
var row = cloneNode(parentTag(field, 'tr'));
|
var row = cloneNode(parentTag(this, 'tr'));
|
||||||
var inputs = row.getElementsByTagName('input');
|
var inputs = qsa('input', row);
|
||||||
for (var i = 0; i < inputs.length; i++) {
|
for (var i = 0; i < inputs.length; i++) {
|
||||||
inputs[i].value = '';
|
inputs[i].value = '';
|
||||||
}
|
}
|
||||||
// keep value in <select> (function)
|
// keep value in <select> (function)
|
||||||
parentTag(field, 'table').appendChild(row);
|
parentTag(this, 'table').appendChild(row);
|
||||||
field.onchange = function () { };
|
this.oninput = function () { };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -510,11 +595,12 @@ function fieldChange(field) {
|
|||||||
* @param [string]
|
* @param [string]
|
||||||
* @param [string]
|
* @param [string]
|
||||||
* @return XMLHttpRequest or false in case of an error
|
* @return XMLHttpRequest or false in case of an error
|
||||||
|
* @uses offlineMessage
|
||||||
*/
|
*/
|
||||||
function ajax(url, callback, data, message) {
|
function ajax(url, callback, data, message) {
|
||||||
var request = (window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : false));
|
var request = (window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : false));
|
||||||
if (request) {
|
if (request) {
|
||||||
var ajaxStatus = document.getElementById('ajaxstatus');
|
var ajaxStatus = qs('#ajaxstatus');
|
||||||
if (message) {
|
if (message) {
|
||||||
ajaxStatus.innerHTML = '<div class="message">' + message + '</div>';
|
ajaxStatus.innerHTML = '<div class="message">' + message + '</div>';
|
||||||
ajaxStatus.className = ajaxStatus.className.replace(/ hidden/g, '');
|
ajaxStatus.className = ajaxStatus.className.replace(/ hidden/g, '');
|
||||||
@@ -543,11 +629,11 @@ function ajax(url, callback, data, message) {
|
|||||||
|
|
||||||
/** Use setHtml(key, value) for JSON response
|
/** Use setHtml(key, value) for JSON response
|
||||||
* @param string
|
* @param string
|
||||||
* @return XMLHttpRequest or false in case of an error
|
* @return boolean false for success
|
||||||
*/
|
*/
|
||||||
function ajaxSetHtml(url) {
|
function ajaxSetHtml(url) {
|
||||||
return ajax(url, function (request) {
|
return !ajax(url, function (request) {
|
||||||
var data = eval('(' + request.responseText + ')');
|
var data = window.JSON ? JSON.parse(request.responseText) : eval('(' + request.responseText + ')');
|
||||||
for (var key in data) {
|
for (var key in data) {
|
||||||
setHtml(key, data[key]);
|
setHtml(key, data[key]);
|
||||||
}
|
}
|
||||||
@@ -584,7 +670,7 @@ function ajaxForm(form, message, button) {
|
|||||||
return ajax(url, function (request) {
|
return ajax(url, function (request) {
|
||||||
setHtml('ajaxstatus', request.responseText);
|
setHtml('ajaxstatus', request.responseText);
|
||||||
if (window.jush) {
|
if (window.jush) {
|
||||||
jush.highlight_tag(document.getElementById('ajaxstatus').getElementsByTagName('code'), 0);
|
jush.highlight_tag(qsa('code', qs('#ajaxstatus')), 0);
|
||||||
}
|
}
|
||||||
}, data, message);
|
}, data, message);
|
||||||
}
|
}
|
||||||
@@ -592,18 +678,21 @@ function ajaxForm(form, message, button) {
|
|||||||
|
|
||||||
|
|
||||||
/** Display edit field
|
/** Display edit field
|
||||||
* @param HTMLElement
|
|
||||||
* @param MouseEvent
|
* @param MouseEvent
|
||||||
* @param number display textarea instead of input, 2 - load long text
|
* @param number display textarea instead of input, 2 - load long text
|
||||||
* @param string warning to display
|
* @param [string] warning to display
|
||||||
|
* @return boolean
|
||||||
|
* @this HTMLElement
|
||||||
*/
|
*/
|
||||||
function selectClick(td, event, text, warning) {
|
function selectClick(event, text, warning) {
|
||||||
|
var td = this;
|
||||||
var target = getTarget(event);
|
var target = getTarget(event);
|
||||||
if (!isCtrl(event) || isTag(td.firstChild, 'input|textarea') || isTag(target, 'a')) {
|
if (!isCtrl(event) || isTag(td.firstChild, 'input|textarea') || isTag(target, 'a')) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (warning) {
|
if (warning) {
|
||||||
return alert(warning);
|
alert(warning);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
var original = td.innerHTML;
|
var original = td.innerHTML;
|
||||||
text = text || /\n/.test(original);
|
text = text || /\n/.test(original);
|
||||||
@@ -627,7 +716,7 @@ function selectClick(td, event, text, warning) {
|
|||||||
});
|
});
|
||||||
input.rows = rows;
|
input.rows = rows;
|
||||||
}
|
}
|
||||||
if (value == '\u00A0' || td.getElementsByTagName('i').length) { // or i - NULL
|
if (value == '\u00A0' || qsa('i', td).length) { // or i - NULL
|
||||||
value = '';
|
value = '';
|
||||||
}
|
}
|
||||||
if (document.selection) {
|
if (document.selection) {
|
||||||
@@ -659,26 +748,28 @@ function selectClick(td, event, text, warning) {
|
|||||||
range.moveEnd('character', -input.value.length + pos);
|
range.moveEnd('character', -input.value.length + pos);
|
||||||
range.select();
|
range.select();
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Load and display next page in select
|
/** Load and display next page in select
|
||||||
* @param HTMLLinkElement
|
|
||||||
* @param number
|
* @param number
|
||||||
* @param string
|
* @param string
|
||||||
* @return boolean
|
* @return boolean false for success
|
||||||
|
* @this HTMLLinkElement
|
||||||
*/
|
*/
|
||||||
function selectLoadMore(a, limit, loading) {
|
function selectLoadMore(limit, loading) {
|
||||||
|
var a = this;
|
||||||
var title = a.innerHTML;
|
var title = a.innerHTML;
|
||||||
var href = a.href;
|
var href = a.href;
|
||||||
a.innerHTML = loading;
|
a.innerHTML = loading;
|
||||||
if (href) {
|
if (href) {
|
||||||
a.removeAttribute('href');
|
a.removeAttribute('href');
|
||||||
return ajax(href, function (request) {
|
return !ajax(href, function (request) {
|
||||||
var tbody = document.createElement('tbody');
|
var tbody = document.createElement('tbody');
|
||||||
tbody.innerHTML = request.responseText;
|
tbody.innerHTML = request.responseText;
|
||||||
document.getElementById('table').appendChild(tbody);
|
qs('#table').appendChild(tbody);
|
||||||
if (tbody.children.length < limit) {
|
if (tbody.children.length < limit) {
|
||||||
a.parentNode.removeChild(a);
|
a.parentNode.removeChild(a);
|
||||||
} else {
|
} else {
|
||||||
@@ -711,7 +802,7 @@ function eventStop(event) {
|
|||||||
*/
|
*/
|
||||||
function setupSubmitHighlight(parent) {
|
function setupSubmitHighlight(parent) {
|
||||||
for (var key in { input: 1, select: 1, textarea: 1 }) {
|
for (var key in { input: 1, select: 1, textarea: 1 }) {
|
||||||
var inputs = parent.getElementsByTagName(key);
|
var inputs = qsa(key, parent);
|
||||||
for (var i = 0; i < inputs.length; i++) {
|
for (var i = 0; i < inputs.length; i++) {
|
||||||
setupSubmitHighlightInput(inputs[i])
|
setupSubmitHighlightInput(inputs[i])
|
||||||
}
|
}
|
||||||
@@ -756,7 +847,10 @@ function findDefaultSubmit(el) {
|
|||||||
if (el.jushTextarea) {
|
if (el.jushTextarea) {
|
||||||
el = el.jushTextarea;
|
el = el.jushTextarea;
|
||||||
}
|
}
|
||||||
var inputs = el.form.getElementsByTagName('input');
|
if (!el.form) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
var inputs = qsa('input', el.form);
|
||||||
for (var i = 0; i < inputs.length; i++) {
|
for (var i = 0; i < inputs.length; i++) {
|
||||||
var input = inputs[i];
|
var input = inputs[i];
|
||||||
if (input.type == 'submit' && !input.style.zIndex) {
|
if (input.type == 'submit' && !input.style.zIndex) {
|
||||||
@@ -795,6 +889,17 @@ function focus(el) {
|
|||||||
*/
|
*/
|
||||||
function cloneNode(el) {
|
function cloneNode(el) {
|
||||||
var el2 = el.cloneNode(true);
|
var el2 = el.cloneNode(true);
|
||||||
|
var selector = 'input, select';
|
||||||
|
var origEls = qsa(selector, el);
|
||||||
|
var cloneEls = qsa(selector, el2);
|
||||||
|
for (var i=0; i < origEls.length; i++) {
|
||||||
|
var origEl = origEls[i];
|
||||||
|
for (var key in origEl) {
|
||||||
|
if (/^on/.test(key) && origEl[key]) {
|
||||||
|
cloneEls[i][key] = origEl[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
setupSubmitHighlight(el2);
|
setupSubmitHighlight(el2);
|
||||||
return el2;
|
return el2;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,13 +5,14 @@ if (!$fields) {
|
|||||||
$error = error();
|
$error = error();
|
||||||
}
|
}
|
||||||
$table_status = table_status1($TABLE, true);
|
$table_status = table_status1($TABLE, true);
|
||||||
|
$name = $adminer->tableName($table_status);
|
||||||
|
|
||||||
page_header(($fields && is_view($table_status) ? $table_status['Engine'] == 'materialized view' ? lang('Materialized view') : lang('View') : lang('Table')) . ": " . h($TABLE), $error);
|
page_header(($fields && is_view($table_status) ? $table_status['Engine'] == 'materialized view' ? lang('Materialized view') : lang('View') : lang('Table')) . ": " . ($name != "" ? $name : h($TABLE)), $error);
|
||||||
|
|
||||||
$adminer->selectLinks($table_status);
|
$adminer->selectLinks($table_status);
|
||||||
$comment = $table_status["Comment"];
|
$comment = $table_status["Comment"];
|
||||||
if ($comment != "") {
|
if ($comment != "") {
|
||||||
echo "<p>" . lang('Comment') . ": " . h($comment) . "\n";
|
echo "<p class='nowrap'>" . lang('Comment') . ": " . h($comment) . "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($fields) {
|
if ($fields) {
|
||||||
|
|||||||
@@ -40,10 +40,10 @@ page_header(($name != "" ? lang('Alter trigger') . ": " . h($name) : lang('Creat
|
|||||||
<tr><th><?php echo lang('Type'); ?><td><?php echo html_select("Type", $trigger_options["Type"], $row["Type"]); ?>
|
<tr><th><?php echo lang('Type'); ?><td><?php echo html_select("Type", $trigger_options["Type"], $row["Type"]); ?>
|
||||||
</table>
|
</table>
|
||||||
<p><?php echo lang('Name'); ?>: <input name="Trigger" value="<?php echo h($row["Trigger"]); ?>" maxlength="64" autocapitalize="off">
|
<p><?php echo lang('Name'); ?>: <input name="Trigger" value="<?php echo h($row["Trigger"]); ?>" maxlength="64" autocapitalize="off">
|
||||||
<script type="text/javascript">document.getElementById('form')['Timing'].onchange();</script>
|
<?php echo script("qs('#form')['Timing'].onchange();"); ?>
|
||||||
<p><?php textarea("Statement", $row["Statement"]); ?>
|
<p><?php textarea("Statement", $row["Statement"]); ?>
|
||||||
<p>
|
<p>
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||||
<?php if ($name != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo confirm(); ?>><?php } ?>
|
<?php if ($name != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"><?php echo confirm(lang('Drop %s?', $name)); ?><?php } ?>
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ if (!$row) {
|
|||||||
<p>
|
<p>
|
||||||
<?php
|
<?php
|
||||||
if ($TYPE != "") {
|
if ($TYPE != "") {
|
||||||
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm() . ">\n";
|
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'>" . confirm(lang('Drop %s?', $TYPE)) . "\n";
|
||||||
} else {
|
} else {
|
||||||
echo "<input name='name' value='" . h($row['name']) . "' autocapitalize='off'>\n";
|
echo "<input name='name' value='" . h($row['name']) . "' autocapitalize='off'>\n";
|
||||||
textarea("as", $row["as"]);
|
textarea("as", $row["as"]);
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ if ($_POST && !$error) {
|
|||||||
$created = false;
|
$created = false;
|
||||||
if (!$error) {
|
if (!$error) {
|
||||||
if ($old_user != $new_user) {
|
if ($old_user != $new_user) {
|
||||||
$created = queries(($connection->server_info < 5 ? "GRANT USAGE ON *.* TO" : "CREATE USER") . " $new_user IDENTIFIED BY PASSWORD " . q($pass));
|
$created = queries((min_version(5) ? "CREATE USER" : "GRANT USAGE ON *.* TO") . " $new_user IDENTIFIED BY PASSWORD " . q($pass));
|
||||||
$error = !$created;
|
$error = !$created;
|
||||||
} elseif ($pass != $old_pass) {
|
} elseif ($pass != $old_pass) {
|
||||||
queries("SET PASSWORD FOR $new_user = " . q($pass));
|
queries("SET PASSWORD FOR $new_user = " . q($pass));
|
||||||
@@ -134,8 +134,8 @@ if ($_POST) {
|
|||||||
<table cellspacing="0">
|
<table cellspacing="0">
|
||||||
<tr><th><?php echo lang('Server'); ?><td><input name="host" maxlength="60" value="<?php echo h($row["host"]); ?>" autocapitalize="off">
|
<tr><th><?php echo lang('Server'); ?><td><input name="host" maxlength="60" value="<?php echo h($row["host"]); ?>" autocapitalize="off">
|
||||||
<tr><th><?php echo lang('Username'); ?><td><input name="user" maxlength="16" value="<?php echo h($row["user"]); ?>" autocapitalize="off">
|
<tr><th><?php echo lang('Username'); ?><td><input name="user" maxlength="16" value="<?php echo h($row["user"]); ?>" autocapitalize="off">
|
||||||
<tr><th><?php echo lang('Password'); ?><td><input name="pass" id="pass" value="<?php echo h($row["pass"]); ?>">
|
<tr><th><?php echo lang('Password'); ?><td><input name="pass" id="pass" value="<?php echo h($row["pass"]); ?>" autocomplete="new-password">
|
||||||
<?php if (!$row["hashed"]) { ?><script type="text/javascript">typePassword(document.getElementById('pass'));</script><?php } ?>
|
<?php if (!$row["hashed"]) { echo script("typePassword(qs('#pass'));"); } ?>
|
||||||
<?php echo checkbox("hashed", 1, $row["hashed"], lang('Hashed'), "typePassword(this.form['pass'], this.checked);"); ?>
|
<?php echo checkbox("hashed", 1, $row["hashed"], lang('Hashed'), "typePassword(this.form['pass'], this.checked);"); ?>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
@@ -169,7 +169,11 @@ foreach (array(
|
|||||||
} elseif (isset($_GET["grant"])) {
|
} elseif (isset($_GET["grant"])) {
|
||||||
echo "<td><select name=$name><option><option value='1'" . ($value ? " selected" : "") . ">" . lang('Grant') . "<option value='0'" . ($value == "0" ? " selected" : "") . ">" . lang('Revoke') . "</select>";
|
echo "<td><select name=$name><option><option value='1'" . ($value ? " selected" : "") . ">" . lang('Grant') . "<option value='0'" . ($value == "0" ? " selected" : "") . ">" . lang('Revoke') . "</select>";
|
||||||
} else {
|
} else {
|
||||||
echo "<td align='center'><label class='block'><input type='checkbox' name=$name value='1'" . ($value ? " checked" : "") . ($privilege == "All privileges" ? " id='grants-$i-all'" : ($privilege == "Grant option" ? "" : " onclick=\"if (this.checked) formUncheck('grants-$i-all');\"")) . "></label>"; //! uncheck all except grant if all is checked
|
echo "<td align='center'><label class='block'>";
|
||||||
|
echo "<input type='checkbox' name=$name value='1'" . ($value ? " checked" : "") . ($privilege == "All privileges"
|
||||||
|
? " id='grants-$i-all'>" //! uncheck all except grant if all is checked
|
||||||
|
: ">" . ($privilege == "Grant option" ? "" : script("qsl('input').onclick = function () { if (this.checked) formUncheck('grants-$i-all'); };")));
|
||||||
|
echo "</label>";
|
||||||
}
|
}
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
@@ -180,6 +184,6 @@ echo "</table>\n";
|
|||||||
?>
|
?>
|
||||||
<p>
|
<p>
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
<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 } ?>
|
<?php if (isset($_GET["host"])) { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"><?php echo confirm(lang('Drop %s?', "$USER@$_GET[host]")); ?><?php } ?>
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -53,6 +53,6 @@ page_header(($TABLE != "" ? lang('Alter view') : lang('Create view')), $error, a
|
|||||||
<p><?php textarea("select", $row["select"]); ?>
|
<p><?php textarea("select", $row["select"]); ?>
|
||||||
<p>
|
<p>
|
||||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
<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 } ?>
|
<?php if ($TABLE != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"><?php echo confirm(lang('Drop %s?', $TABLE)); ?><?php } ?>
|
||||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
95
changes.txt
95
changes.txt
@@ -1,3 +1,98 @@
|
|||||||
|
Adminer 4.6.2 (released 2018-02-20):
|
||||||
|
Semi-transparent border on table actions
|
||||||
|
Shorten JSON values in select (bug #594)
|
||||||
|
Speed up alter table (regression from 4.4.0)
|
||||||
|
Store current version without authentication and in Editor
|
||||||
|
PostgreSQL: Fix exporting string default values
|
||||||
|
PostgreSQL: Fix exporting sequences in PostgreSQL 10
|
||||||
|
PostgreSQL: Add IF EXISTS to DROP SEQUENCE in export (bug #595)
|
||||||
|
Editor: Fix displaying of true boolean values (regression from 4.5.0)
|
||||||
|
|
||||||
|
Adminer 4.6.1 (released 2018-02-09):
|
||||||
|
Sticky position of table actions
|
||||||
|
Speed up rendering of long tables (regression from 4.4.0)
|
||||||
|
Display notification about performing action after relogin
|
||||||
|
Add system tables help links
|
||||||
|
MySQL: Support non-utf8 charset in search in column
|
||||||
|
MySQL: Support geometry in MySQL 8 (bug #574)
|
||||||
|
MariaDB: Links to documentation
|
||||||
|
SQLite: Allow deleting PRIMARY KEY from tables with auto increment
|
||||||
|
PostgreSQL: Support binary files in bytea fields
|
||||||
|
PostgreSQL: Don't treat interval type as number (bug #474)
|
||||||
|
PostgreSQL: Cast to string when searching using LIKE (bug #325)
|
||||||
|
PostgreSQL: Fix condition for selecting no rows
|
||||||
|
PostgreSQL: Support TRUNCATE+INSERT export
|
||||||
|
Customization: Support connecting to MySQL via SSL
|
||||||
|
Customization: Allow specifying server name displayed in breadcrumbs
|
||||||
|
|
||||||
|
Adminer 4.6.0 (released 2018-02-05):
|
||||||
|
Fix counting selected rows after going back to select page
|
||||||
|
PHP <5.3 compatibility even with Elasticsearch enabled
|
||||||
|
Fully support functions in default values
|
||||||
|
Stop redirecting links via adminer.org
|
||||||
|
Support X-Forwarded-Prefix
|
||||||
|
Display options for timestamp columns when creating a new table
|
||||||
|
Disable autocompleting password on create user page
|
||||||
|
Use primary key to edit rows even if not selected
|
||||||
|
MySQL, PostgreSQL: Display warnings
|
||||||
|
MySQL: Add floor and ceil select functions
|
||||||
|
MySQL: Add FIND_IN_SET search operator
|
||||||
|
MariaDB: Support JSON since MariaDB 10.2
|
||||||
|
SQLite, PostgreSQL: Limit rows in data manipulation without unique key
|
||||||
|
PostgreSQL: Support routines
|
||||||
|
PostgreSQL: Allow editing views with uppercase letters (bug #467)
|
||||||
|
PostgreSQL: Allow now() as default value (bug #525)
|
||||||
|
SimpleDB: Document that allow_url_fopen is required
|
||||||
|
Malay translation
|
||||||
|
|
||||||
|
Adminer 4.5.0 (released 2018-01-24):
|
||||||
|
Display name of the object in confirmation when dropping it
|
||||||
|
Display newlines in column comments (bug #573)
|
||||||
|
Support current_timestamp() as default of time fields (bug #572)
|
||||||
|
Hide window.opener from pages opened in a new window (bug #561)
|
||||||
|
Display error when getting row to edit
|
||||||
|
Store current Adminer version server-side to avoid excessive requests
|
||||||
|
Adminer: Fix Search data in tables (regression from 4.4.0)
|
||||||
|
CSP: Allow any styles, images, media and fonts, disallow base-uri
|
||||||
|
MySQL: Support geometry in MySQL 8 (bug #574)
|
||||||
|
MySQL: Support routines with comments in parameters (bug #460)
|
||||||
|
MariaDB: Support fulltext and spatial indexes in InnoDB (bug #583)
|
||||||
|
SQLite: Enable foreign key checks
|
||||||
|
PostgreSQL: Respect NULL default value
|
||||||
|
PostgreSQL: Display foreign tables (bug #576)
|
||||||
|
PostgreSQL: Do not export triggers if not requested
|
||||||
|
PostgreSQL: Export DROP SEQUENCE if dropping table
|
||||||
|
PostgreSQL: Display boolean values as code (bug #562)
|
||||||
|
MS SQL: Support freetds
|
||||||
|
non-MySQL: Avoid CONVERT() (bug #509)
|
||||||
|
Elasticsearch: Insert, update, delete
|
||||||
|
MongoDB: Support mongodb PHP extension
|
||||||
|
Editor: Fix displaying of false values in PostgreSQL (bug #568)
|
||||||
|
|
||||||
|
Adminer 4.4.0 (released 2018-01-17):
|
||||||
|
Add Content Security Policy
|
||||||
|
Disallow scripts without nonce
|
||||||
|
Rate limit password-less login attempts from the same IP address
|
||||||
|
Disallow connecting to privileged ports
|
||||||
|
Add nosniff header
|
||||||
|
PHP 7.1: Prevent warning when using empty limit
|
||||||
|
PHP 7.2: Prevent warning when searching in select
|
||||||
|
MySQL: Remove dedicated view for replication status (added in 4.3.0)
|
||||||
|
PostgreSQL: Sort table names (regression from 4.3.1)
|
||||||
|
Editor: Don't set time zone from PHP, fixes DST
|
||||||
|
Editor: Display field comment's text inside [] only in edit form
|
||||||
|
Editor: Fix doubleclick on database page
|
||||||
|
Editor: Fix Search data in tables
|
||||||
|
Customization: Always send security headers
|
||||||
|
Hebrew translation
|
||||||
|
|
||||||
|
Adminer 4.3.1 (released 2017-04-14):
|
||||||
|
Fix permanent login after logout (bug #539)
|
||||||
|
Fix SQL command autofocus (regression from 4.0.0)
|
||||||
|
PostgreSQL: Support JSON and JSONB data types
|
||||||
|
PostgreSQL: Fix index size computation in PostgreSQL < 9.0 (regression from 4.3.0)
|
||||||
|
PostgreSQL: Fix nullable fields in export
|
||||||
|
|
||||||
Adminer 4.3.0 (released 2017-03-15):
|
Adminer 4.3.0 (released 2017-03-15):
|
||||||
Make maxlength in edit fields a soft limit
|
Make maxlength in edit fields a soft limit
|
||||||
Add accessibility labels
|
Add accessibility labels
|
||||||
|
|||||||
39
compile.php
39
compile.php
@@ -21,7 +21,7 @@ function remove_lang($match) {
|
|||||||
$idf = strtr($match[2], array("\\'" => "'", "\\\\" => "\\"));
|
$idf = strtr($match[2], array("\\'" => "'", "\\\\" => "\\"));
|
||||||
$s = ($translations[$idf] ? $translations[$idf] : $idf);
|
$s = ($translations[$idf] ? $translations[$idf] : $idf);
|
||||||
if ($match[3] == ",") { // lang() has parameters
|
if ($match[3] == ",") { // lang() has parameters
|
||||||
return "$match[1]" . (is_array($s) ? "lang(array('" . implode("', '", array_map('add_apo_slashes', $s)) . "')," : "sprintf('" . add_apo_slashes($s) . "',");
|
return $match[1] . (is_array($s) ? "lang(array('" . implode("', '", array_map('add_apo_slashes', $s)) . "')," : "sprintf('" . add_apo_slashes($s) . "',");
|
||||||
}
|
}
|
||||||
return ($match[1] && $match[4] ? $s : "$match[1]'" . add_apo_slashes($s) . "'$match[4]");
|
return ($match[1] && $match[4] ? $s : "$match[1]'" . add_apo_slashes($s) . "'$match[4]");
|
||||||
}
|
}
|
||||||
@@ -300,6 +300,14 @@ function compile_file($match) {
|
|||||||
return '"' . add_quo_slashes($file) . '"';
|
return '"' . add_quo_slashes($file) . '"';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function min_version() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function number_type() {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
$project = "adminer";
|
$project = "adminer";
|
||||||
if ($_SERVER["argv"][1] == "editor") {
|
if ($_SERVER["argv"][1] == "editor") {
|
||||||
$project = "editor";
|
$project = "editor";
|
||||||
@@ -327,10 +335,12 @@ if ($_SERVER["argv"][1]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check function definition in drivers
|
// check function definition in drivers
|
||||||
$filename = dirname(__FILE__) . "/adminer/drivers/mysql.inc.php";
|
$file = file_get_contents(dirname(__FILE__) . "/adminer/drivers/mysql.inc.php");
|
||||||
preg_match_all('~\\bfunction ([^(]+)~', file_get_contents($filename), $matches); //! respect context (extension, class)
|
$file = preg_replace('~class Min_Driver.*\n\t}~sU', '', $file);
|
||||||
|
preg_match_all('~\\bfunction ([^(]+)~', $file, $matches); //! respect context (extension, class)
|
||||||
$functions = array_combine($matches[1], $matches[0]);
|
$functions = array_combine($matches[1], $matches[0]);
|
||||||
unset($functions["__destruct"], $functions["Min_DB"], $functions["Min_Result"], $functions["Min_Driver"]);
|
//! do not warn about functions without declared support()
|
||||||
|
unset($functions["__construct"], $functions["__destruct"], $functions["set_charset"]);
|
||||||
foreach (glob(dirname(__FILE__) . "/adminer/drivers/" . ($driver ? $driver : "*") . ".inc.php") as $filename) {
|
foreach (glob(dirname(__FILE__) . "/adminer/drivers/" . ($driver ? $driver : "*") . ".inc.php") as $filename) {
|
||||||
if ($filename != "mysql.inc.php") {
|
if ($filename != "mysql.inc.php") {
|
||||||
$file = file_get_contents($filename);
|
$file = file_get_contents($filename);
|
||||||
@@ -344,11 +354,10 @@ foreach (glob(dirname(__FILE__) . "/adminer/drivers/" . ($driver ? $driver : "*"
|
|||||||
|
|
||||||
include dirname(__FILE__) . "/adminer/include/pdo.inc.php";
|
include dirname(__FILE__) . "/adminer/include/pdo.inc.php";
|
||||||
include dirname(__FILE__) . "/adminer/include/driver.inc.php";
|
include dirname(__FILE__) . "/adminer/include/driver.inc.php";
|
||||||
$features = array("call" => "routine", "dump", "event", "privileges", "procedure" => "routine", "processlist", "routine", "scheme", "sequence", "status", "trigger", "type", "user" => "privileges", "replication", "variables", "view");
|
$features = array("call" => "routine", "dump", "event", "privileges", "procedure" => "routine", "processlist", "routine", "scheme", "sequence", "status", "trigger", "type", "user" => "privileges", "variables", "view");
|
||||||
$lang_ids = array(); // global variable simplifies usage in a callback function
|
$lang_ids = array(); // global variable simplifies usage in a callback function
|
||||||
$file = file_get_contents(dirname(__FILE__) . "/$project/index.php");
|
$file = file_get_contents(dirname(__FILE__) . "/$project/index.php");
|
||||||
if ($driver) {
|
if ($driver) {
|
||||||
$connection = (object) array("server_info" => 5.1); // MySQL support is version specific
|
|
||||||
$_GET[$driver] = true; // to load the driver
|
$_GET[$driver] = true; // to load the driver
|
||||||
include_once dirname(__FILE__) . "/adminer/drivers/$driver.inc.php";
|
include_once dirname(__FILE__) . "/adminer/drivers/$driver.inc.php";
|
||||||
foreach ($features as $key => $feature) {
|
foreach ($features as $key => $feature) {
|
||||||
@@ -376,7 +385,7 @@ if ($driver) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (count($drivers) == 1) {
|
if (count($drivers) == 1) {
|
||||||
$file = str_replace('<?php echo html_select("auth[driver]", $drivers, DRIVER); ?>', "<input type='hidden' name='auth[driver]' value='" . ($driver == "mysql" ? "server" : $driver) . "'>" . reset($drivers), $file);
|
$file = str_replace('<?php echo html_select("auth[driver]", $drivers, DRIVER) . "\n"; ?>', "<input type='hidden' name='auth[driver]' value='" . ($driver == "mysql" ? "server" : $driver) . "'>" . reset($drivers), $file);
|
||||||
}
|
}
|
||||||
$file = preg_replace('(;../externals/jush/modules/jush-(?!textarea\.|txt\.|js\.|' . preg_quote($driver == "mysql" ? "sql" : $driver) . '\.)[^.]+.js)', '', $file);
|
$file = preg_replace('(;../externals/jush/modules/jush-(?!textarea\.|txt\.|js\.|' . preg_quote($driver == "mysql" ? "sql" : $driver) . '\.)[^.]+.js)', '', $file);
|
||||||
}
|
}
|
||||||
@@ -393,17 +402,15 @@ if ($_SESSION["lang"]) {
|
|||||||
$file = str_replace("<?php switch_lang(); ?>\n", "", $file);
|
$file = str_replace("<?php switch_lang(); ?>\n", "", $file);
|
||||||
$file = str_replace('<?php echo $LANG; ?>', $_SESSION["lang"], $file);
|
$file = str_replace('<?php echo $LANG; ?>', $_SESSION["lang"], $file);
|
||||||
}
|
}
|
||||||
$file = str_replace('<script type="text/javascript" src="static/editing.js"></script>' . "\n", "", $file);
|
$file = str_replace('<?php echo script_src("static/editing.js"); ?>' . "\n", "", $file);
|
||||||
$file = str_replace('<script type="text/javascript" src="../externals/jush/modules/jush-textarea.js"></script>' . "\n", "", $file);
|
$file = preg_replace('~\\s+echo script_src\\("\\.\\./externals/jush/modules/jush-(textarea|txt|js|\\$jush)\\.js"\\);~', '', $file);
|
||||||
$file = str_replace('<script type="text/javascript" src="../externals/jush/modules/jush-txt.js"></script>' . "\n", "", $file);
|
|
||||||
$file = str_replace('<script type="text/javascript" src="../externals/jush/modules/jush-js.js"></script>' . "\n", "", $file);
|
|
||||||
$file = str_replace('<script type="text/javascript" src="../externals/jush/modules/jush-<?php echo $jush; ?>.js"></script>' . "\n", "", $file);
|
|
||||||
$file = str_replace('<link rel="stylesheet" type="text/css" href="../externals/jush/jush.css">' . "\n", "", $file);
|
$file = str_replace('<link rel="stylesheet" type="text/css" href="../externals/jush/jush.css">' . "\n", "", $file);
|
||||||
$file = preg_replace_callback("~compile_file\\('([^']+)'(?:, '([^']*)')?\\)~", 'compile_file', $file); // integrate static files
|
$file = preg_replace_callback("~compile_file\\('([^']+)'(?:, '([^']*)')?\\)~", 'compile_file', $file); // integrate static files
|
||||||
$replace = 'h(preg_replace("~\\\\\\\\?.*~", "", ME)) . "?file=\\1&version=' . $VERSION . ($driver ? '&driver=' . $driver : '');
|
$replace = 'preg_replace("~\\\\\\\\?.*~", "", ME) . "?file=\\1&version=' . $VERSION . ($driver ? '&driver=' . $driver : '') . '"';
|
||||||
$file = preg_replace('~\\.\\./adminer/static/(default\\.css|functions\\.js|favicon\\.ico)~', '<?php echo ' . $replace . '"; ?>', $file);
|
$file = preg_replace('~\\.\\./adminer/static/(default\\.css|favicon\\.ico)~', '<?php echo h(' . $replace . '); ?>', $file);
|
||||||
$file = preg_replace('~\\.\\./adminer/static/([^\'"]*)~', '" . ' . $replace, $file);
|
$file = preg_replace('~"\\.\\./adminer/static/(functions\\.js)"~', $replace, $file);
|
||||||
$file = preg_replace('~\\.\\./externals/jush/modules/(jush\\.js)~', '<?php echo ' . $replace . '"; ?>', $file);
|
$file = preg_replace('~\\.\\./adminer/static/([^\'"]*)~', '" . h(' . $replace . ') . "', $file);
|
||||||
|
$file = preg_replace('~"\\.\\./externals/jush/modules/(jush\\.js)"~', $replace, $file);
|
||||||
$file = preg_replace("~<\\?php\\s*\\?>\n?|\\?>\n?<\\?php~", '', $file);
|
$file = preg_replace("~<\\?php\\s*\\?>\n?|\\?>\n?<\\?php~", '', $file);
|
||||||
$file = php_shrink($file);
|
$file = php_shrink($file);
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
},
|
},
|
||||||
"license": [
|
"license": [
|
||||||
"Apache-2.0",
|
"Apache-2.0",
|
||||||
"GPL-2.0"
|
"GPL-2.0-only"
|
||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"compile": "php compile.php"
|
"compile": "php compile.php"
|
||||||
|
|||||||
261
designs/esterka/adminer.css
Normal file
261
designs/esterka/adminer.css
Normal file
@@ -0,0 +1,261 @@
|
|||||||
|
* {
|
||||||
|
font: 11px/1.25 Verdana, 'Geneva CE', lucida, sans-serif;
|
||||||
|
color:#333333;
|
||||||
|
margin:0px;
|
||||||
|
padding:0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a,a:visited {
|
||||||
|
color:#0033ff;
|
||||||
|
text-decoration:none;
|
||||||
|
padding:3px 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content table thead span, #content table thead a {
|
||||||
|
font-weight:bold;
|
||||||
|
color:black;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content table thead a:hover {
|
||||||
|
background:none;
|
||||||
|
text-decoration:underline;
|
||||||
|
color:black;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color:white;
|
||||||
|
background:#0033ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size:1.5em;
|
||||||
|
line-height: 2em;
|
||||||
|
font-weight:bold;
|
||||||
|
background:white;
|
||||||
|
color:#1e5eb6;
|
||||||
|
border-bottom:1px solid #f4f4f4;
|
||||||
|
|
||||||
|
padding:20px;
|
||||||
|
margin:0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#menu h1 {
|
||||||
|
padding:0px 0px 5px 20px;
|
||||||
|
background:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2,h3 {
|
||||||
|
font-size:1.5em;
|
||||||
|
font-weight:normal;
|
||||||
|
background:white;
|
||||||
|
color:#A0522D;
|
||||||
|
border-bottom:1px solid #f4f4f4;
|
||||||
|
padding:5px 0px;
|
||||||
|
margin:0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
fieldset {
|
||||||
|
padding:5px;
|
||||||
|
border:1px solid #d0cdc4;
|
||||||
|
background:#fcfaf5;
|
||||||
|
}
|
||||||
|
|
||||||
|
input,select,textarea {
|
||||||
|
border:1px solid #e5e5e5;
|
||||||
|
margin:1px;
|
||||||
|
padding:3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type=submit] {
|
||||||
|
color:white;
|
||||||
|
background:#A0522D;
|
||||||
|
padding:3px 10px;
|
||||||
|
cursor:pointer;
|
||||||
|
border:0px solid;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type=submit]:hover{
|
||||||
|
background:blue;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type=checkbox]{
|
||||||
|
margin-right:5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type=image] {
|
||||||
|
border:1px solid #d0cdc4;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type=checkbox],input[type=radio]{
|
||||||
|
border:1px solid #e5e5e5;
|
||||||
|
padding:2px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
code{
|
||||||
|
background:#f0ffe1;
|
||||||
|
border:1px dashed #d5f1b9;
|
||||||
|
padding:2px 4px;
|
||||||
|
font-family:"Courier New";
|
||||||
|
}
|
||||||
|
code a:hover{background:transparent}
|
||||||
|
|
||||||
|
table{
|
||||||
|
margin:10px 0px;
|
||||||
|
border:1px solid #d0cdc4;
|
||||||
|
border-collapse:collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
tbody tr:hover td,tbody tr:hover th{
|
||||||
|
background:#edf4ff
|
||||||
|
}
|
||||||
|
|
||||||
|
thead th, thead td {
|
||||||
|
text-align:center;
|
||||||
|
vertical-align:middle;
|
||||||
|
font-weight:bold;
|
||||||
|
white-space:nowrap;
|
||||||
|
background:#f2eee1;
|
||||||
|
color:#808080;
|
||||||
|
}
|
||||||
|
|
||||||
|
th,td{
|
||||||
|
border:1px solid #d0cdc4;
|
||||||
|
padding:1px 4px;
|
||||||
|
vertical-align:middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
th a {
|
||||||
|
font-weight:bold;
|
||||||
|
padding-bottom:0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
background:white;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr.odd td {
|
||||||
|
background:#fcfaf5;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content tbody tr.checked td, tr.checked.odd td {
|
||||||
|
background:#fbe2e2;
|
||||||
|
color:red;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hidden{
|
||||||
|
display:none
|
||||||
|
}
|
||||||
|
|
||||||
|
.error,.message{
|
||||||
|
padding:0px;
|
||||||
|
background:transparent;
|
||||||
|
font-weight:bold
|
||||||
|
}
|
||||||
|
|
||||||
|
.error{
|
||||||
|
color:#c00
|
||||||
|
}
|
||||||
|
|
||||||
|
.message{
|
||||||
|
color:#090
|
||||||
|
}
|
||||||
|
|
||||||
|
#content{
|
||||||
|
margin:0px 0px 0px 255px;
|
||||||
|
padding:50px 20px 40px 0px;
|
||||||
|
height:100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#lang {
|
||||||
|
background:#f2eee1;
|
||||||
|
color:#808080;
|
||||||
|
position:fixed;
|
||||||
|
top:0px;
|
||||||
|
left:0px;
|
||||||
|
width:100%;
|
||||||
|
padding:10px 20px;
|
||||||
|
z-index:1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#breadcrumb {
|
||||||
|
position:fixed;
|
||||||
|
top:0px;
|
||||||
|
left:260px;
|
||||||
|
background:#f2eee1;
|
||||||
|
z-index:2;
|
||||||
|
width:100%;
|
||||||
|
padding:10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#menu {
|
||||||
|
background:#fcfaf5;
|
||||||
|
position:fixed;
|
||||||
|
top:-10px;
|
||||||
|
padding:0px;
|
||||||
|
padding-top:10px;
|
||||||
|
bottom:0px;
|
||||||
|
overflow:auto;
|
||||||
|
left:0px;
|
||||||
|
width:240px;
|
||||||
|
border-right:5px solid #f2eee1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#schema .table {
|
||||||
|
padding:5px;
|
||||||
|
background:#fcfaf5;
|
||||||
|
border:1px solid #d0cdc4;
|
||||||
|
}
|
||||||
|
|
||||||
|
#schema .table b {
|
||||||
|
color:#0033ff;
|
||||||
|
font-weight:bold;
|
||||||
|
text-decoration:underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
#schema .table b:hover {
|
||||||
|
color:white;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[name=logout] {
|
||||||
|
color:#fce2e2;
|
||||||
|
background:#d73e3e;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[name=logout]:hover {
|
||||||
|
background:#ea0202;
|
||||||
|
}
|
||||||
|
|
||||||
|
#logins a, #tables a {
|
||||||
|
background:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#logins a:hover, #tables a:hover {
|
||||||
|
background:#A0522D;
|
||||||
|
color:white;
|
||||||
|
}
|
||||||
|
|
||||||
|
#logout {
|
||||||
|
color:#0033ff;
|
||||||
|
text-decoration:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#logout:hover {
|
||||||
|
color:white;
|
||||||
|
background:#0033ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.js .column {
|
||||||
|
background:#f2eee1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content table thead a.text:hover {
|
||||||
|
text-decoration:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#version, .version {
|
||||||
|
font-size:50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#h1:hover {
|
||||||
|
color:white;
|
||||||
|
}
|
||||||
@@ -1,342 +1,514 @@
|
|||||||
/**
|
/**
|
||||||
* Alternative style for Adminer.
|
* Alternative style for Adminer.
|
||||||
*
|
*
|
||||||
* Klemens Häckel [http://clickdimension.wordpress.com/]
|
* Klemens Häckel [http://clickdimension.wordpress.com/]
|
||||||
*
|
*
|
||||||
* update 2014-01
|
* update 2018-02
|
||||||
*
|
* adapted for adminer 4.6.1
|
||||||
* new remaster based on style for WT-NMP 13.12
|
*
|
||||||
*
|
* new remaster based on style for WT-NMP 13.12
|
||||||
* Created by Miroslav Pokorný [http://fuch.cz].
|
*
|
||||||
* Icons by Yusuke Kamiyamane [http://p.yusukekamiyamane.com/] (some of them were modified).
|
* Created by Miroslav Pokorný [http://fuch.cz].
|
||||||
* Slightly inspired by themes created by Martin Hořínek and Klemens Häckel.
|
* 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 ***/
|
|
||||||
/*
|
/*** 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);
|
* @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 */
|
* {
|
||||||
/* font-family: Verdana; font name */
|
/* font-family: 'Ubuntu', sans-serif */
|
||||||
font-family: Verdana,Arial,Helvetica,sans-serif;
|
/* font-family: Verdana; font name */
|
||||||
}
|
font-family: Verdana,Arial,Helvetica,sans-serif;
|
||||||
textarea, pre, code, samp, kbd, var {
|
}
|
||||||
font-family: 'Ubuntu Mono', Consolas, 'Courier New', monospace
|
textarea, pre, code, samp, kbd, var {
|
||||||
}
|
font-family: 'Ubuntu Mono', Consolas, 'Courier New', monospace;
|
||||||
/*** Icons ***/
|
}
|
||||||
/* Error message */
|
/*** Icons ***/
|
||||||
html>/**/body .error {
|
/* Error message */
|
||||||
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;
|
html>/**/body .error {
|
||||||
padding-left: 38px;
|
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 {
|
/* Ok 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;
|
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;
|
/* Adminer logo */
|
||||||
padding-left: 22px;
|
html>/**/body h1 {
|
||||||
}
|
background: #eee url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAMFBMVEXAwMD/////AAAATmEAAAAA%0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5w%2BL8AAAAAXRSTlMAQObYZgAAAAlwSFlz%0AAAALEgAACxIB0t1%2B/AAAAEVJREFUCJljYEAGjIKCAmCGoKKSIFhASFBQEcgFkoJCggyMwsaGQiA1%0AjIaCwoKKQkCGsbGxIEwErJcoBtAcqEWCgiguAADa1AZzThzIfQAAAABJRU5ErkJggg%3D%3D%0A") no-repeat 14px 7px;
|
||||||
/* DB Dump */
|
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;
|
||||||
html>/**/body #dump {
|
font-size: 1em;
|
||||||
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: 7px 6px 5px 35px;
|
||||||
padding-left: 22px;
|
position:fixed;
|
||||||
}
|
width: 100%;
|
||||||
/* DB Import */
|
height: 22px;
|
||||||
html>/**/body a[href$="import="] {
|
line-height: 22px;
|
||||||
background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ%0AbWFnZVJlYWR5ccllPAAAAnRJREFUeNqMU72PElEQ/%2B1HWHZhgYPjkiMWxoLkaChMzgoJ0JhwlsTK%0AhsKQmFxjT4ImxL/AxOSKS/wPXAs7Q%2BEHqO0VXElAkc89BA7c3ee8PY5w5xVOMjvvzXszb%2BY3vxUK%0AhQJW8pB0F/8nP0gNvpAvPYvFYvfo6Oj1dDrFfD6HZdno9X7T2oHXq0LXdQQCAQSDAZRKj55KkuTG%0AyScnJ0gkEu7GsizU63VMJhOEwxHMZgznCwc%2Bnw7LtiBKIjSfeqUUkSeo1Wprx2AwQCaTgWmOKeES%0AjHxMcC4UF7opvIVCr9e7ZRgGstms6%2Bz3%2B9jfv4ePn%2BoU6KUgtgq2Xb2SQBCEO6enpy83nY7jYDQa%0AIbylo91u42e7Cb/fT/0H0Ww239OVb5d3BQLjMdnbfFOpVJ5zm8vlEIls4/OXr1D9W9AJOL/uQ5BA%0A5EAeloocxFcuBqRvotHoi3w%2B3y0Wi1gul6A9DOMtzmk9MIfoDroYkZ1Mz/DHWlwFcW9vD6lUau2I%0ARCI4Pj6mJDtQNW3duyPYN2PAE2xKOp12J8F50B2ONyZASVZ6fQqX8r1arb5LJpMHHMTZbLZKZBGR%0AvBgSiH0C0bgGoswvr5C/Wy6XDzaZ%2BIsqMOdTyIoIn18lAHXcz%2BcePHtyaND0Gm6CVquFUCjEwWP8%0ANdM01y93aZTmcgpF8yDEAhBlBk1TQI/YoihiPB5DbjQaiMfjUBRFvvm/Yf8wkR6QeJXEHxcDlcih%0Ax2IxTZZllywej8dtQVJUaOdnEBXBbUHTVEiyyJmqdjqdHYqdCPQJk8ZUVc0wxrZtm0bFmEsyriT8%0AA14yWcbXdN6jCj7QeeevAAMALZ84sPgoxOsAAAAASUVORK5CYII%3D%0A") no-repeat 2px bottom;
|
}
|
||||||
padding-left: 22px;
|
/* Logout */
|
||||||
}
|
html>/**/body input[name="logout"], #logout {
|
||||||
|
background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAkVJREFUeNqMU01rE1EUPZkMaGI+JEMkXyaNiKINzSJLBSEEaRbRVf6Ai1Jw68K9O3dCN3ZR/AUxC0UCwW4k4KKoGKVioGATg4kNY2aSTDqZifdOmmmKFr1weG/e3HPeue++59i4BTgceAogg3/H6+kUm+YUDdMEaIRICyBkvPeeZVwul5XlIEVBEGyMXz7C8vJ1HHz/ttT49C4/UPqvKG2T0BANcybNZEmSTpCdTqeFPcqp1Wr8X1q5eVtSep3w14/v8yoJCSwwF/kbmedsN5lMotlsol6vo6eMpBurd1OmgawwMQDGnCzLMkajkU3mkTeYUp2hUAjRaBStVgu6rmNC6yKTOex6x2MLPA8EAhBF0RIwyQaL8Oj1emEYBoF4X4SLIOwwiS3yj2KxiG63i06nYzngTRYFZmWZMwcfxgE2sLNRKNi9GgwGKNB3uVxGIpGwHbC4oihQVdWas7AY1/aZkymVSrZALpdDtVpFPB7/w8H+Txnp+1uYvHkyK+EqeiBkgsEgUqmUpVypVBCLxRCJRGaHuCDAF+fFwzvHDvSjQ+REPjCPx2PdBxbgNe7O5KgEjnjkAiT/udkZsMBYPxZgsIv5nMkM6pjVWo65EDvgzYXnbUBWcKLvi2SO/hDw+/3QNM3CXECldfHHIc7vKdh9vJo97QEJ7rP4PD1wp69cuxT2+XxSu922nPQHJEAJ2lsdDzjx1Dd4iNG6PJS2t+trZ1zu/Ep6KUxuJZWqcuA/Yz0O/KIdlSEuazrWqIIsNWT3twADAMZTN2W0KIqPAAAAAElFTkSuQmCC") no-repeat 8px 4px;
|
||||||
/* Adminer logo */
|
color: #555555;
|
||||||
html>/**/body h1 {
|
border: none;
|
||||||
background: #eee url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAMFBMVEXAwMD/////AAAATmEAAAAA%0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5w%2BL8AAAAAXRSTlMAQObYZgAAAAlwSFlz%0AAAALEgAACxIB0t1%2B/AAAAEVJREFUCJljYEAGjIKCAmCGoKKSIFhASFBQEcgFkoJCggyMwsaGQiA1%0AjIaCwoKKQkCGsbGxIEwErJcoBtAcqEWCgiguAADa1AZzThzIfQAAAABJRU5ErkJggg%3D%3D%0A") no-repeat 14px center;
|
cursor: pointer;
|
||||||
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;
|
height: 22px;
|
||||||
font-size: 1em;
|
position: absolute;
|
||||||
padding: 6px 6px 5px 35px;
|
right: 8px;
|
||||||
position:fixed;
|
text-indent: 0px;
|
||||||
width: 100%;
|
top: 6px;
|
||||||
height: 22px;
|
width: 120px;
|
||||||
}
|
position:fixed;
|
||||||
/* Logout */
|
z-index: 10;
|
||||||
html>/**/body input[name="logout"], #logout {
|
}
|
||||||
background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAkVJREFUeNqMU01rE1EUPZkMaGI+JEMkXyaNiKINzSJLBSEEaRbRVf6Ai1Jw68K9O3dCN3ZR/AUxC0UCwW4k4KKoGKVioGATg4kNY2aSTDqZifdOmmmKFr1weG/e3HPeue++59i4BTgceAogg3/H6+kUm+YUDdMEaIRICyBkvPeeZVwul5XlIEVBEGyMXz7C8vJ1HHz/ttT49C4/UPqvKG2T0BANcybNZEmSTpCdTqeFPcqp1Wr8X1q5eVtSep3w14/v8yoJCSwwF/kbmedsN5lMotlsol6vo6eMpBurd1OmgawwMQDGnCzLMkajkU3mkTeYUp2hUAjRaBStVgu6rmNC6yKTOex6x2MLPA8EAhBF0RIwyQaL8Oj1emEYBoF4X4SLIOwwiS3yj2KxiG63i06nYzngTRYFZmWZMwcfxgE2sLNRKNi9GgwGKNB3uVxGIpGwHbC4oihQVdWas7AY1/aZkymVSrZALpdDtVpFPB7/w8H+Txnp+1uYvHkyK+EqeiBkgsEgUqmUpVypVBCLxRCJRGaHuCDAF+fFwzvHDvSjQ+REPjCPx2PdBxbgNe7O5KgEjnjkAiT/udkZsMBYPxZgsIv5nMkM6pjVWo65EDvgzYXnbUBWcKLvi2SO/hDw+/3QNM3CXECldfHHIc7vKdh9vJo97QEJ7rP4PD1wp69cuxT2+XxSu922nPQHJEAJ2lsdDzjx1Dd4iNG6PJS2t+trZ1zu/Ep6KUxuJZWqcuA/Yz0O/KIdlSEuazrWqIIsNWT3twADAMZTN2W0KIqPAAAAAElFTkSuQmCC") no-repeat 2px bottom;
|
html>/**/body input[name="logout"]:hover, #logout:hover {
|
||||||
border: none;
|
color: #444444;
|
||||||
cursor: pointer;
|
text-shadow: 1px 1px 1px #888888;
|
||||||
height: 18px;
|
}
|
||||||
line-height: 18px;
|
|
||||||
overflow: hidden;
|
/*** "Alter table" picture ***/
|
||||||
padding: 0;
|
html>/**/body table a[href*="&create="],
|
||||||
position: absolute;
|
html>/**/body #content p.links a[href*="&create="] {
|
||||||
right: 8px;
|
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 0px 0px;
|
||||||
text-indent: 8px;
|
padding: 0px 0px 3px 22px;
|
||||||
top: 6px;
|
}
|
||||||
width: 80px;
|
/*** "Alter index" picture ***/
|
||||||
position:fixed;
|
html>/**/body #content table a[id|="Index_length"],
|
||||||
z-index: 10;
|
html>/**/body #content p.links a[href*="&indexes="] {
|
||||||
}
|
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKRSURBVDjLhZHfT1JhHMb9F7ptXXXR2lw/Llp3blnNZauLtmwtp15oWsu6oJZ5bKyFQiGIEIRIKoEsJtikWM1JmiQhtpieo3ISUoEINiJNE2SgT5x3ZiVZ3+15v3t/PJ89+755APJ4PJ64s7MzZDKZYDabYbFY0NvbSzq35867u7uh1WpjfD5fwXl+iixqtXoi2xfw/0ppNJrPOQC9Xp/O9vXTvCf4l7jKJkUOgIvH1bmGPlQ1D6Na+gY1Micut77FFcUoapVj5I4rnU6XCzAYDJuAmqz50hbzNdUvQJfu8d8BmUwGMzMz8Hq9oGkaHo8HbrcbTqcTDocDQ0ND+B62gzWeh8/ahPGOIkyo8ssJYCMWmXxLSwtYloXRaIRYLCag6I3rmKUKERmswyJtA5bDWKAtcElORAmgo4MMBqFQCIFAAH6/Hz6fj6RhGAasuw3xqTtIhZ4h8roZCeYpMvMjYLqqkwSgaW8nAKvVCrlcjmAwSNLIZDLM0ibEJ29jLTGCxMdaxMeuwmuoBK0t+zKmOLOHAFQqFQFEo1FEIhGEw2GSZp4x4ytTj7WkCyv+CiSDpViapjCnORJ9Lz1+cHOIcrmCAGw2G5RKJYHY9HxE3tVtmMuRDFzAt8kGsKoifJAcPvTHLzRLJAQQi8WI2FEjpvtvZmM7kJyrxGqwDIvZJH7NSTyUCnK/USgUpocdjnW73Y6+R3xMvaAw8bIVn9wlWJkrRXz8FrzqUxgZ6FsXikSJHABFUYxA0LgiFIrQc/8YsDQPtv0sBqmdcLYVY0BQgAfCetwVNK5m37pyAL9LcDE/nXIpkXLL4W4qRE/VruX++v0Htr7bFlBSsCMpqtibfnWvOG2XHh1+Xrdv93ZmTj8Aff0H4WdEl0kAAAAASUVORK5CYII=") no-repeat 0px 0px;
|
||||||
/* Alter table */
|
padding: 0px 0px 3px 22px;
|
||||||
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;
|
/*** "Create table" picture ***/
|
||||||
padding-left: 22px;
|
html>/**/body a[href$="&create="],
|
||||||
}
|
html>/**/body #content p.links a[href$="&create="] {
|
||||||
/* Create table */
|
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 0px 2px;
|
||||||
html>/**/body a[href$="&create="] {
|
padding: 4px 0px 0px 22px;
|
||||||
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;
|
|
||||||
}
|
/*** Menu Links ***/
|
||||||
/* Create new database */
|
/* Fix size */
|
||||||
html>/**/body #content a[href*="&database="] {
|
html>/**/body #menu .links {
|
||||||
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;
|
/* Sql command */
|
||||||
}
|
html>/**/body #menu p.links a[href$="&sql="] {
|
||||||
/* Privileges */
|
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 0px 0px;
|
||||||
html>/**/body #content a[href*="&privileges="] {
|
padding: 3px 0px 0px 22px;
|
||||||
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;
|
/* Import */
|
||||||
}
|
html>/**/body #menu p.links a[href$="&import="] {
|
||||||
/* Process list */
|
background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ%0AbWFnZVJlYWR5ccllPAAAAnRJREFUeNqMU72PElEQ/%2B1HWHZhgYPjkiMWxoLkaChMzgoJ0JhwlsTK%0AhsKQmFxjT4ImxL/AxOSKS/wPXAs7Q%2BEHqO0VXElAkc89BA7c3ee8PY5w5xVOMjvvzXszb%2BY3vxUK%0AhQJW8pB0F/8nP0gNvpAvPYvFYvfo6Oj1dDrFfD6HZdno9X7T2oHXq0LXdQQCAQSDAZRKj55KkuTG%0AyScnJ0gkEu7GsizU63VMJhOEwxHMZgznCwc%2Bnw7LtiBKIjSfeqUUkSeo1Wprx2AwQCaTgWmOKeES%0AjHxMcC4UF7opvIVCr9e7ZRgGstms6%2Bz3%2B9jfv4ePn%2BoU6KUgtgq2Xb2SQBCEO6enpy83nY7jYDQa%0AIbylo91u42e7Cb/fT/0H0Ww239OVb5d3BQLjMdnbfFOpVJ5zm8vlEIls4/OXr1D9W9AJOL/uQ5BA%0A5EAeloocxFcuBqRvotHoi3w%2B3y0Wi1gul6A9DOMtzmk9MIfoDroYkZ1Mz/DHWlwFcW9vD6lUau2I%0ARCI4Pj6mJDtQNW3duyPYN2PAE2xKOp12J8F50B2ONyZASVZ6fQqX8r1arb5LJpMHHMTZbLZKZBGR%0AvBgSiH0C0bgGoswvr5C/Wy6XDzaZ%2BIsqMOdTyIoIn18lAHXcz%2BcePHtyaND0Gm6CVquFUCjEwWP8%0ANdM01y93aZTmcgpF8yDEAhBlBk1TQI/YoihiPB5DbjQaiMfjUBRFvvm/Yf8wkR6QeJXEHxcDlcih%0Ax2IxTZZllywej8dtQVJUaOdnEBXBbUHTVEiyyJmqdjqdHYqdCPQJk8ZUVc0wxrZtm0bFmEsyriT8%0AA14yWcbXdN6jCj7QeeevAAMALZ84sPgoxOsAAAAASUVORK5CYII%3D%0A") no-repeat 0px 0px;
|
||||||
html>/**/body #content a[href*="&processlist="] {
|
padding: 0px 0px 2px 22px;
|
||||||
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;
|
/* Export */
|
||||||
}
|
html>/**/body #menu p.links a[href*="&dump="] {
|
||||||
/* Variables */
|
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 0px 0px;
|
||||||
html>/**/body #content a[href*="&variables="] {
|
padding: 2px 0px 0px 22px;
|
||||||
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;
|
/* Create table */
|
||||||
}
|
html>/**/body #menu p.links a[href$="&create="] {
|
||||||
/* Status */
|
display: none; /* 'Create table' is now available only when database is displayed, below the list of tables */
|
||||||
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;
|
/* Menu + Table - Select data */
|
||||||
padding-left: 22px;
|
html>/**/body .links a[href*="&select="],
|
||||||
}
|
html>/**/body #menu li a[href*="&select="],
|
||||||
/* Alter database */
|
html>/**/body #content form table thead>tr>td a[href*="&select="],
|
||||||
html>/**/body #content a[href*="&database="][href*="&db="] {
|
html>/**/body #content table a[id|="Rows"] {
|
||||||
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;
|
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 1px 0px;
|
||||||
padding-left: 22px;
|
}
|
||||||
}
|
html>/**/body #menu ul li {
|
||||||
/* Database schema */
|
height: 19px;
|
||||||
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;
|
html>/**/body #menu li a[href*="&select="] {
|
||||||
padding-left: 22px;
|
float: left;
|
||||||
}
|
width: 0px;
|
||||||
/* Refresh */
|
height: 18px;
|
||||||
html>/**/body #content a[href*="&refresh="] {
|
margin-left: -2px;
|
||||||
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;
|
margin-right: 2px;
|
||||||
padding-left: 22px;
|
overflow: hidden;
|
||||||
}
|
padding-left: 18px;
|
||||||
/* Show structure */
|
text-decoration: none;
|
||||||
html>/**/body .links a[href*="&table="] {
|
}
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAoJJREFUeNqkU01oE1EQnk02iTFQE7QihUKRkKTF1iU9+FdQCoWYgAcPegkIeiiIWiHgwUvpQXs1Ggo99OYlFwUhWAhYhZJWUmhMxJbYYk1LFDcmJraSv911vjQbevPgg9kZ5vu+eW9n3hM0TaP/WSI+gUCADAYDmUwmEgSBUNRoNJ5jaKjNSyuKsqRjjUaDVFWlWCy2X0BfDJ5nd5r9KxZI0Wh0BuRgMHibcznGrrD/wD6hawwHxBdcLte12dnZGYfDcYOFhkJBpnL5F3Y0IAcMHHB1nYAj+Xw+xHeZ8FSWf1BPTw+trqY2JElyAkilUhsej8dZKhWpu/s4jY+P3+P0s/n5+f0TVCoVqlarL0Oh0KTZbCZZlmlgoN+pqgrBEO/u/iZg4IALTecX+BQX6/X69Xw+v8e7bYqiSMvLy+t+f2AGhhg5YOCAC43+7+T1eh+srCS1hYU32tJSQkun09rg4NA0TwLTIMTIAQMHXGigbU2hVqsZq9UaNZsKKYrKoxRZKDYwKizEyAEDB1xoOk3kzo6xP4PExMT9WyMjl/q2t7+npqYevkBucvLx1d7eE9Li4tutcPjJXEsoCO+z2WxcP0GcC3zmDt8ZHj7bVyyWyO32SLHYOwl4ufyTdna+ELCuriN2nlSEC2x1mshdRZGbkchcSJaLfCOtFI+//prLbRIMMXLAwAEXmk4T+ZLALo+Ojj1PJtc1t7s/bLfbHyUSGQ2GGDlg4IALTesd6Y8JY7JarX6bzTZtsVhOwq+tfdMymZx2MAcOuPrmrSYKaDHRUbZjbIcA8sM6xQ9sADFP4xNf54/t21tnk9kKrG3qBdCLw20T//GCFbY9tj+sVf8KMAACOoVxz9PPRwAAAABJRU5ErkJggg==") no-repeat 2px bottom;
|
html>/**/body #menu li a[href*="&select="]:link:hover {
|
||||||
padding-left: 22px;
|
background-color: #83D0E9;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Menu - Show structure */
|
||||||
/* Edit row */
|
html>/**/body #menu li a[href*="&table="] {
|
||||||
html>/**/body table a[href*="&edit="][href*="&where"] {
|
width: 263px;
|
||||||
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;
|
float: left;
|
||||||
display: block;
|
}
|
||||||
float: left;
|
|
||||||
height: 16px;
|
|
||||||
overflow: hidden;
|
/*** Tables and views ***/
|
||||||
padding-left: 24px;
|
/* set default alignment to left */
|
||||||
}
|
html>/**/body #content td {
|
||||||
|
text-align: left;
|
||||||
/* Hide text in automatic selects */
|
}
|
||||||
html>/**/body form>table a[href*="&edit="][href*="&where"] {
|
/* header sorting popup onmouseover */
|
||||||
width: 0;
|
html> body #content form table thead span.column {
|
||||||
}
|
background: #ddd;
|
||||||
|
width: 60px;
|
||||||
/* Select data */
|
height: 30px;
|
||||||
html>/**/body #tables li a[href*="&select="], html>/**/body .links a[href*="&select="] {
|
margin-left: -60px;
|
||||||
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
|
margin-top: 30px;
|
||||||
}
|
padding: 0px 0px 0px 0px;
|
||||||
html>/**/body #tables li a[href*="&select="] {
|
box-shadow: 0px 0px 4px rgba(0,0,0,0.40) !important;
|
||||||
clear: left;
|
}
|
||||||
display: block;
|
html> body #content form table thead span.column > a.text {
|
||||||
float: left;
|
position: relative;
|
||||||
height: 18px;
|
width: 30px;
|
||||||
margin-right: 5px;
|
height: 30px;
|
||||||
overflow: hidden;
|
font-size: 150%;
|
||||||
padding-left: 16px;
|
float: left;
|
||||||
text-decoration: none;
|
margin-left: 0px;
|
||||||
width: 0;
|
padding: 4px 0px 0px 0px;
|
||||||
}
|
text-align: center;
|
||||||
html>/**/body .links a[href*="&select="] {
|
}
|
||||||
background-position: 2px bottom;
|
html>/**/body #content th a[href*="&db="], /* Databases and Table column */
|
||||||
padding-left: 22px;
|
html>/**/body #content td a[href*="&view="], /* Alter view */
|
||||||
}
|
html>/**/body #content td a[href*="&select="], /* Select view */
|
||||||
/* Edit Sql */
|
html>/**/body #content table a[href*="&table="] { /* Show structure */
|
||||||
html>/**/body #content a[href*="&sql="] {
|
float: left;
|
||||||
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;
|
width: 100%;
|
||||||
margin-left: 10px;
|
height: 17px;
|
||||||
padding-left: 22px;
|
padding: 5px 3px 0px 0px;
|
||||||
}
|
}
|
||||||
/* Inline plus */
|
html>/**/body #content table a[id|="Data_length"], /* Alter table (Data Length) */
|
||||||
html>/**/body #content input[src*="file=plus.gif"] {
|
html>/**/body #content table a[id|="Index_length"], /* Alter indexes (Index Length) */
|
||||||
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;
|
html>/**/body #content table a[id|="Data_free"], /* New item (Data Free) */
|
||||||
height: 16px;
|
html>/**/body #content table a[id|="Auto_increment"], /* Alter Table (Auto Increment) */
|
||||||
overflow: hidden;
|
html>/**/body #content table a[id|="Rows"] { /* Select data (Rows) */
|
||||||
padding-left: 16px;
|
float: left;
|
||||||
width: 0;
|
width: 100%;
|
||||||
}
|
height: 100%;
|
||||||
/* Inline up */
|
padding: 2px 0px 1px 22px;
|
||||||
html>/**/body #content input[src*="file=up.gif"] {
|
margin-right: 5px;
|
||||||
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;
|
/* Edit,modify row (pen icon) */
|
||||||
overflow: hidden;
|
html>/**/body #content form table thead>tr>td a[href$="&modify=1"],
|
||||||
padding-left: 16px;
|
html>/**/body #content form table a[href*="&edit="][href*="&where"] {
|
||||||
width: 0;
|
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 3px 3px;
|
||||||
}
|
}
|
||||||
/* Inline down */
|
/* Modify rows together (icon in table header) */
|
||||||
html>/**/body #content input[src*="file=down.gif"] {
|
html>/**/body #content form table thead>tr>td a[href$="&modify=1"],
|
||||||
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;
|
html>/**/body #content form table thead>tr>td a[href*="&select="] {
|
||||||
height: 16px;
|
display: inline-block;
|
||||||
overflow: hidden;
|
width: 0px;
|
||||||
padding-left: 16px;
|
height: 20px;
|
||||||
width: 0;
|
margin-top: 4px;
|
||||||
}
|
overflow: hidden;
|
||||||
/* Inline cross */
|
padding: 2px 0px 0px 24px;
|
||||||
html>/**/body #content input[src*="file=cross.gif"] {
|
float: none;
|
||||||
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;
|
/* Modify single rows (icon in each row) */
|
||||||
overflow: hidden;
|
html>/**/body #content table a[href*="&edit="][href*="&where"] {
|
||||||
padding-left: 16px;
|
display: inline-block;
|
||||||
width: 0;
|
width: 0px;
|
||||||
}
|
height: 19px;
|
||||||
/* Delete */
|
overflow: hidden;
|
||||||
html>/**/body input[name="delete"], html>/**/body input[name="drop"] {
|
padding: 2px 0px 0px 24px;
|
||||||
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;
|
float: none;
|
||||||
border: 0;
|
}
|
||||||
cursor: pointer;
|
/* Sort table by X when clicking on header */
|
||||||
font-size: .9em;
|
html>/**/body #content table a[href*="&order"] {
|
||||||
padding: 1px 5px 1px 18px;
|
float: left;
|
||||||
}
|
width: 100%;
|
||||||
html>/**/body input[name="delete"]:hover, html>/**/body input[name="drop"]:hover {
|
height: 20px;
|
||||||
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==");
|
padding-top: 8px;
|
||||||
color: red;
|
}
|
||||||
}
|
/** hide useless headers, they take too much space **/
|
||||||
/* New item */
|
/* hides: 'Tables and views', 'Routines', 'Events' */
|
||||||
html>/**/body #content p a[href*="&edit="] {
|
html>/**/body #content h3#tables-views,
|
||||||
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;
|
html>/**/body #content h3#routines,
|
||||||
}
|
html>/**/body #content h3#events {
|
||||||
/* Create view */
|
display: none;
|
||||||
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;
|
/** resize useful headers **/
|
||||||
}
|
html>/**/body #content h3#indexes,
|
||||||
/*** Messages ***/
|
html>/**/body #content h3#foreign-keys,
|
||||||
.error {
|
html>/**/body #content h3#triggers {
|
||||||
border: red 1px solid
|
font-size: 1em;
|
||||||
}
|
font-weight: bold;
|
||||||
.message {
|
}
|
||||||
border: green 1px solid
|
/* Create table */
|
||||||
}
|
html>/**/body #content a[href$="&create="] {
|
||||||
.error, .message {
|
position: relative;
|
||||||
margin: 1em 0 0 0
|
top: 2px;
|
||||||
}
|
}
|
||||||
/*** Content ***/
|
/* Create view */
|
||||||
#breadcrumb {
|
html>/**/body #content a[href$="&view="] {
|
||||||
/* background: #fbfbfb;
|
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;
|
||||||
border-radius: 2px !important;
|
padding: 2px 0px 0px 22px;
|
||||||
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important; */
|
position: relative;
|
||||||
background: transparent;
|
top: 2px;
|
||||||
font-size: 1em;
|
}
|
||||||
margin-left: 0em;
|
/* Create new database */
|
||||||
padding-top: 2px;
|
html>/**/body #content a[href*="&database="] {
|
||||||
position:fixed;
|
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 0px 0px;
|
||||||
z-index: 10;
|
padding: 3px 0px 0px 22px;
|
||||||
}
|
}
|
||||||
h2 {
|
/* Privileges */
|
||||||
display: none
|
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 0px;
|
||||||
#content {
|
padding: 3px 0px 0px 22px;
|
||||||
margin: 2em 0 0 21em
|
}
|
||||||
}
|
/* Process list */
|
||||||
.tabs {
|
html>/**/body #content a[href*="&processlist="] {
|
||||||
margin: 12px auto 10px auto
|
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 0px 0px;
|
||||||
}
|
padding: 3px 0px 0px 22px;
|
||||||
#form + p {
|
}
|
||||||
margin: 20px 0
|
/* Variables */
|
||||||
}
|
html>/**/body #content a[href*="&variables="] {
|
||||||
/*** Tables ***/
|
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 0px;
|
||||||
html>/**/body table tbody input[name*="check"] {
|
padding: 3px 0px 0px 22px;
|
||||||
display: block;
|
}
|
||||||
float: left;
|
/* Status */
|
||||||
}
|
html>/**/body #content a[href*="&status="] {
|
||||||
table {
|
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 0px;
|
||||||
border-radius: 2px !important;
|
padding: 2px 0px 0px 22px;
|
||||||
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;
|
}
|
||||||
}
|
/* Alter database */
|
||||||
thead td, thead th {
|
html>/**/body #content a[href*="&database="][href*="&db="] {
|
||||||
background: #eee;
|
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 0px 4px;
|
||||||
}
|
padding: 5px 0px 5px 22px;
|
||||||
table tbody td:first-child {
|
}
|
||||||
white-space: normal;
|
/* Database schema */
|
||||||
}
|
html>/**/body #content a[href*="&schema="] {
|
||||||
td, th {
|
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 left -2px;
|
||||||
border-color: #bbb;
|
float: left;
|
||||||
border-width: 0 1px 1px 0;
|
padding-left: 22px;
|
||||||
font-size: 0.8em; /* x-small; font size */
|
}
|
||||||
}
|
/* Refresh */
|
||||||
#tables a {
|
html>/**/body #content a[href*="&refresh="] {
|
||||||
height: 18px;
|
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 0px;
|
||||||
line-height: 18px;
|
padding: 2px 0px 4px 22px;
|
||||||
}
|
height: 18px;
|
||||||
/*** Links ***/
|
}
|
||||||
a:hover {
|
/* Show structure */
|
||||||
color: #3b82ca
|
html>/**/body .links a[href*="&table="] {
|
||||||
}
|
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAoJJREFUeNqkU01oE1EQnk02iTFQE7QihUKRkKTF1iU9+FdQCoWYgAcPegkIeiiIWiHgwUvpQXs1Ggo99OYlFwUhWAhYhZJWUmhMxJbYYk1LFDcmJraSv911vjQbevPgg9kZ5vu+eW9n3hM0TaP/WSI+gUCADAYDmUwmEgSBUNRoNJ5jaKjNSyuKsqRjjUaDVFWlWCy2X0BfDJ5nd5r9KxZI0Wh0BuRgMHibcznGrrD/wD6hawwHxBdcLte12dnZGYfDcYOFhkJBpnL5F3Y0IAcMHHB1nYAj+Xw+xHeZ8FSWf1BPTw+trqY2JElyAkilUhsej8dZKhWpu/s4jY+P3+P0s/n5+f0TVCoVqlarL0Oh0KTZbCZZlmlgoN+pqgrBEO/u/iZg4IALTecX+BQX6/X69Xw+v8e7bYqiSMvLy+t+f2AGhhg5YOCAC43+7+T1eh+srCS1hYU32tJSQkun09rg4NA0TwLTIMTIAQMHXGigbU2hVqsZq9UaNZsKKYrKoxRZKDYwKizEyAEDB1xoOk3kzo6xP4PExMT9WyMjl/q2t7+npqYevkBucvLx1d7eE9Li4tutcPjJXEsoCO+z2WxcP0GcC3zmDt8ZHj7bVyyWyO32SLHYOwl4ufyTdna+ELCuriN2nlSEC2x1mshdRZGbkchcSJaLfCOtFI+//prLbRIMMXLAwAEXmk4T+ZLALo+Ojj1PJtc1t7s/bLfbHyUSGQ2GGDlg4IALTesd6Y8JY7JarX6bzTZtsVhOwq+tfdMymZx2MAcOuPrmrSYKaDHRUbZjbIcA8sM6xQ9sADFP4xNf54/t21tnk9kKrG3qBdCLw20T//GCFbY9tj+sVf8KMAACOoVxz9PPRwAAAABJRU5ErkJggg==") no-repeat 0px 0px;
|
||||||
a, a:visited {
|
padding: 1px 0px 3px 22px;
|
||||||
color: #385a75
|
}
|
||||||
}
|
/* Select data */
|
||||||
/*** Sidebar ***/
|
html>/**/body .links a[href*="&select="] {
|
||||||
#h1 {
|
padding: 1px 0px 1px 22px;
|
||||||
color: #222;
|
}
|
||||||
font-style: normal;
|
/* Edit Sql */
|
||||||
}
|
html>/**/body #content a[href*="&sql="] {
|
||||||
#menu {
|
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 0px 0px;
|
||||||
background-color: #fafafa;
|
margin-left: 10px;
|
||||||
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;
|
padding-left: 22px;
|
||||||
margin: 0;
|
}
|
||||||
padding-bottom: 0;
|
/* Inline plus */
|
||||||
top: 0;
|
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;
|
||||||
/*** Forms ***/
|
height: 16px;
|
||||||
fieldset {
|
overflow: hidden;
|
||||||
border-radius: 1px !important
|
padding-left: 16px;
|
||||||
}
|
width: 0;
|
||||||
/*** Others ***/
|
}
|
||||||
#lang {
|
/* Inline up */
|
||||||
background: transparent;
|
html>/**/body #content input[src*="file=up.gif"] {
|
||||||
font-size: .9em;
|
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;
|
||||||
left: auto;
|
height: 16px;
|
||||||
right: 90px;
|
overflow: hidden;
|
||||||
position:fixed;
|
padding-left: 16px;
|
||||||
z-index: 10;
|
width: 0;
|
||||||
padding-top: 2px;
|
}
|
||||||
}
|
/* 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;
|
||||||
.sqlarea {
|
height: 16px;
|
||||||
width: 99%
|
overflow: hidden;
|
||||||
}
|
padding-left: 16px;
|
||||||
.jush-sql {
|
width: 0;
|
||||||
padding: 1px 2px
|
}
|
||||||
}
|
/* Inline cross */
|
||||||
p {
|
html>/**/body #content input[src*="file=cross.gif"] {
|
||||||
margin: 0.8em 0 0 0
|
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;
|
||||||
#menu form {
|
padding-left: 16px;
|
||||||
padding-top: 30px;
|
width: 0;
|
||||||
}
|
}
|
||||||
|
/* Delete */
|
||||||
.view {
|
html>/**/body input[name="delete"],
|
||||||
background-color: #FFFFAA !important;
|
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 0px 0px;
|
||||||
|
border: 0;
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 1px 5px 1px 22px;
|
||||||
|
margin-left: 20px;
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
text-shadow: 1px 1px 1px #ef7a7a;
|
||||||
|
}
|
||||||
|
html>/**/body #content p a[href*="&edit="], /* New item */
|
||||||
|
html>/**/body #content table a[id|="Data_free"] { /* New item (Table -> Data Free column) */
|
||||||
|
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 0px 0px;
|
||||||
|
}
|
||||||
|
/* New item */
|
||||||
|
html>/**/body #content p a[href*="&edit="] {
|
||||||
|
padding: 1px 0px 1px 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** Messages ***/
|
||||||
|
.error {
|
||||||
|
border: red 1px solid;
|
||||||
|
}
|
||||||
|
.message {
|
||||||
|
border: green 1px solid;
|
||||||
|
}
|
||||||
|
.error, .message {
|
||||||
|
margin: 1em 0 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** Content ***/
|
||||||
|
#breadcrumb {
|
||||||
|
background: transparent;
|
||||||
|
font-size: 1em;
|
||||||
|
margin-left: 0em;
|
||||||
|
padding-top: 5px;
|
||||||
|
position:fixed;
|
||||||
|
z-index: 10;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
#breadcrumb > a[href] {
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
#content {
|
||||||
|
margin-left: 325px;
|
||||||
|
}
|
||||||
|
.tabs {
|
||||||
|
margin: 12px auto 10px auto;
|
||||||
|
}
|
||||||
|
#form + p {
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
#content .jush-bac, .jush-php_bac, .jush-bra, .jush-mssql_bra, .jush-sqlite_quo {
|
||||||
|
color: #344a60;
|
||||||
|
}
|
||||||
|
#content .jush-num, .jush-clr {
|
||||||
|
color: #007000;
|
||||||
|
}
|
||||||
|
.sqlarea {
|
||||||
|
width: 99%;
|
||||||
|
}
|
||||||
|
.jush-sql {
|
||||||
|
padding: 1px 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** Tables ***/
|
||||||
|
html>/**/body table tbody input[name*="check"] {
|
||||||
|
display: block;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
table {
|
||||||
|
border-radius: 2px !important;
|
||||||
|
box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;
|
||||||
|
}
|
||||||
|
thead td, thead th {
|
||||||
|
background: #eee;
|
||||||
|
}
|
||||||
|
table tbody td:first-child {
|
||||||
|
white-space: normal;
|
||||||
|
}
|
||||||
|
td, th {
|
||||||
|
border-color: #bbb;
|
||||||
|
border-width: 0 1px 1px 0;
|
||||||
|
font-size: 0.83em; /* x-small; font size */
|
||||||
|
}
|
||||||
|
#tables a {
|
||||||
|
height: 18px;
|
||||||
|
line-height: 18px;
|
||||||
|
}
|
||||||
|
code{
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** Links ***/
|
||||||
|
a, a:link, a:visited {
|
||||||
|
color: #344a60;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
a:link:hover, a:visited:hover {
|
||||||
|
/*color: #384053;
|
||||||
|
text-shadow: 1px 1px 1px #485c7c;*/
|
||||||
|
color: #283043;
|
||||||
|
text-shadow: 1px 1px 1px #102030;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** Sidebar Menu ***/
|
||||||
|
#h1 {
|
||||||
|
color: #222;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
#menu {
|
||||||
|
background-color: #f8f8f8;
|
||||||
|
box-shadow: 0px 0px 3px rgba(0,0,0,0.50) !important;
|
||||||
|
width: 310px;
|
||||||
|
margin: 0;
|
||||||
|
top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
#menu a {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
#menu a:link:hover, a:visited:hover {
|
||||||
|
background-color: #e8e8e8;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** Forms ***/
|
||||||
|
fieldset {
|
||||||
|
background-color: transparent;
|
||||||
|
border: 1px solid #f0f0f0;
|
||||||
|
border-radius: 5px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** Others ***/
|
||||||
|
#lang {
|
||||||
|
background: transparent;
|
||||||
|
font-size: .9em;
|
||||||
|
left: auto;
|
||||||
|
right: 120px;
|
||||||
|
position:fixed;
|
||||||
|
z-index: 10;
|
||||||
|
padding-top: 2px;
|
||||||
|
}
|
||||||
|
.active{
|
||||||
|
font-weight: normal;
|
||||||
|
color: #283043;
|
||||||
|
text-shadow: 1px 1px 1px #102030;
|
||||||
|
}
|
||||||
|
p {
|
||||||
|
margin: 0.8em 0 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#menu form {
|
||||||
|
padding-top: 30px;
|
||||||
|
}
|
||||||
|
#menu #logins {
|
||||||
|
padding-top: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** Floating footer since v4.6.1 ***/
|
||||||
|
.footer {
|
||||||
|
width: 700px;
|
||||||
|
background-color: #f8f8f8;
|
||||||
|
box-shadow: 0px 0px 3px rgba(0,0,0,0.50) !important;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
.footer>p {
|
||||||
|
margin-left: 15px;
|
||||||
|
}
|
||||||
|
|||||||
@@ -73,9 +73,12 @@ input[type="button"] {
|
|||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
.error {
|
.error, .error b {
|
||||||
background: #ae1010;
|
background: #ae1010;
|
||||||
}
|
}
|
||||||
|
.error b {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
.message {
|
.message {
|
||||||
background: #379f17;
|
background: #379f17;
|
||||||
}
|
}
|
||||||
@@ -259,7 +262,7 @@ th {
|
|||||||
}
|
}
|
||||||
td:last-child,
|
td:last-child,
|
||||||
th:last-child {
|
th:last-child {
|
||||||
border-style: none;
|
border-right-style: none;
|
||||||
}
|
}
|
||||||
thead th,
|
thead th,
|
||||||
thead td {
|
thead td {
|
||||||
|
|||||||
1189
designs/mancave/adminer.css
Normal file
1189
designs/mancave/adminer.css
Normal file
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user