mirror of
https://github.com/vrana/adminer.git
synced 2025-09-04 19:55:28 +02:00
Compare commits
145 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
0797cb6a10 | ||
|
dd122a1056 | ||
|
96c0177422 | ||
|
7d6c7998d8 | ||
|
3df88d4a24 | ||
|
2d4b73653b | ||
|
a63fadd503 | ||
|
a494827dc5 | ||
|
8ac486a57c | ||
|
bfcc6d8297 | ||
|
29fd200ef5 | ||
|
b6058368d3 | ||
|
fd38c4261a | ||
|
507f335371 | ||
|
ea314b8103 | ||
|
e250470768 | ||
|
2fa42d50eb | ||
|
a366b7af09 | ||
|
b039a39e4d | ||
|
08e48c8641 | ||
|
78c2041cfd | ||
|
5d7c5fa268 | ||
|
8f1db4cf6f | ||
|
9daa88acca | ||
|
aa519b78ca | ||
|
aee800efed | ||
|
06d0f957d5 | ||
|
3f0bc24e01 | ||
|
4863f48d33 | ||
|
9ea8f44919 | ||
|
fa791b5461 | ||
|
203162b203 | ||
|
e4e76b6384 | ||
|
353cd452a3 | ||
|
5bc4ac6c18 | ||
|
aec8275502 | ||
|
7d5077e687 | ||
|
91d0d8538f | ||
|
2439369143 | ||
|
d5bce9b3e9 | ||
|
b42762e4dc | ||
|
695a720403 | ||
|
e6fdf2b400 | ||
|
b542b6613c | ||
|
374b8ed6a6 | ||
|
58cca3f951 | ||
|
5eecb8e6a3 | ||
|
0d0936550c | ||
|
c4ed9500a1 | ||
|
0863766970 | ||
|
146a24efad | ||
|
00b9fbda08 | ||
|
8ea329538f | ||
|
a3428cc7ff | ||
|
2a01969c96 | ||
|
9b8d14c3ee | ||
|
2ce88d9bdc | ||
|
593c8e5bcc | ||
|
a134193afa | ||
|
8a60243459 | ||
|
b94636f8a7 | ||
|
47ccfa2a2e | ||
|
949b39b191 | ||
|
09a946cb99 | ||
|
13258de188 | ||
|
5fe25fca67 | ||
|
a693e75e32 | ||
|
de7dd4b64f | ||
|
8a70474651 | ||
|
43a0305a23 | ||
|
bff6f8ca93 | ||
|
f38c0a1f13 | ||
|
835c10674b | ||
|
fc5a46549e | ||
|
898dc9e25e | ||
|
32160b48ae | ||
|
6beb07a181 | ||
|
ee42077e54 | ||
|
c3e2e6c58f | ||
|
49effeff09 | ||
|
857cbf03f2 | ||
|
e8c9164a77 | ||
|
01fe709b7a | ||
|
90addc5e78 | ||
|
b71a456514 | ||
|
4d7642a624 | ||
|
9f8dadbb40 | ||
|
9968851f1e | ||
|
a5780e58af | ||
|
e8b40e3b9d | ||
|
35afd4f88c | ||
|
38e4b51256 | ||
|
55a7d3864f | ||
|
e69583a800 | ||
|
338c81e2a3 | ||
|
9eb4d00564 | ||
|
1c5947de50 | ||
|
5cfd48bb68 | ||
|
20a0e4e113 | ||
|
bf80612b0d | ||
|
8e848bfde4 | ||
|
38f390ae5e | ||
|
367a1b979e | ||
|
5dddfbdf12 | ||
|
2928b7beb8 | ||
|
a940f85206 | ||
|
834380aae9 | ||
|
3e94299256 | ||
|
e99ed80ad8 | ||
|
61b84cecd8 | ||
|
acf168a6da | ||
|
2c8dbf49cc | ||
|
88647b93e4 | ||
|
b8c5eec46d | ||
|
dadbb37f00 | ||
|
ea1acfc8bc | ||
|
2dd65f0c0f | ||
|
473f7264f8 | ||
|
db01282e29 | ||
|
1f173e18bd | ||
|
4043092ec2 | ||
|
60ad161178 | ||
|
a12d31c5a8 | ||
|
f6880b59d6 | ||
|
72beecc0ab | ||
|
42de1051a6 | ||
|
af1a908f56 | ||
|
205305d6b5 | ||
|
0e5f39042a | ||
|
f94f29124a | ||
|
28996e2286 | ||
|
7f8c93a6f1 | ||
|
25dda09bce | ||
|
ff45b8f7a9 | ||
|
3a36112a10 | ||
|
e9e61fce26 | ||
|
5a1498d160 | ||
|
ccb7442d1b | ||
|
eebda8695b | ||
|
94d18d003e | ||
|
3881fc1680 | ||
|
9bd63a1326 | ||
|
92d5858b03 | ||
|
d506f1e241 | ||
|
cd7f06c8b2 |
20
.editorconfig
Normal file
20
.editorconfig
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# https://editorconfig.org/
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
|
[*.{php,css,js}]
|
||||||
|
indent_style = tab
|
||||||
|
|
||||||
|
[*.json]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 4
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
indent_style = space
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
max_line_length = 120
|
67
.github/workflows/codeql-analysis.yml
vendored
Normal file
67
.github/workflows/codeql-analysis.yml
vendored
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
# For most projects, this workflow file will not need changing; you simply need
|
||||||
|
# to commit it to your repository.
|
||||||
|
#
|
||||||
|
# You may wish to alter this file to override the set of languages analyzed,
|
||||||
|
# or to provide custom queries or build logic.
|
||||||
|
#
|
||||||
|
# ******** NOTE ********
|
||||||
|
# We have attempted to detect the languages in your repository. Please check
|
||||||
|
# the `language` matrix defined below to confirm you have the correct set of
|
||||||
|
# supported CodeQL languages.
|
||||||
|
#
|
||||||
|
name: "CodeQL"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ master ]
|
||||||
|
pull_request:
|
||||||
|
# The branches below must be a subset of the branches above
|
||||||
|
branches: [ master ]
|
||||||
|
schedule:
|
||||||
|
- cron: '20 16 * * 0'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
name: Analyze
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
language: [ 'javascript' ]
|
||||||
|
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
|
||||||
|
# Learn more:
|
||||||
|
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
# Initializes the CodeQL tools for scanning.
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@v1
|
||||||
|
with:
|
||||||
|
languages: ${{ matrix.language }}
|
||||||
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
|
# By default, queries listed here will override any specified in a config file.
|
||||||
|
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||||
|
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||||
|
|
||||||
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
|
- name: Autobuild
|
||||||
|
uses: github/codeql-action/autobuild@v1
|
||||||
|
|
||||||
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
|
# 📚 https://git.io/JvXDl
|
||||||
|
|
||||||
|
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||||
|
# and modify them (or add more) to build your code if your project
|
||||||
|
# uses a compiled language
|
||||||
|
|
||||||
|
#- run: |
|
||||||
|
# make bootstrap
|
||||||
|
# make release
|
||||||
|
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@v1
|
2
.gitignore
vendored
2
.gitignore
vendored
@@ -2,3 +2,5 @@
|
|||||||
/adminer*.php
|
/adminer*.php
|
||||||
/editor*.php
|
/editor*.php
|
||||||
/vendor/
|
/vendor/
|
||||||
|
/composer.lock
|
||||||
|
/temp
|
||||||
|
6
.gitmodules
vendored
6
.gitmodules
vendored
@@ -1,9 +1,3 @@
|
|||||||
[submodule "jush"]
|
|
||||||
path = externals/jush
|
|
||||||
url = git://github.com/vrana/jush
|
|
||||||
[submodule "JsShrink"]
|
|
||||||
path = externals/JsShrink
|
|
||||||
url = git://github.com/vrana/JsShrink
|
|
||||||
[submodule "designs/hydra"]
|
[submodule "designs/hydra"]
|
||||||
path = designs/hydra
|
path = designs/hydra
|
||||||
url = https://github.com/Niyko/Hydra-Dark-Theme-for-Adminer
|
url = https://github.com/Niyko/Hydra-Dark-Theme-for-Adminer
|
||||||
|
11
SECURITY.md
Normal file
11
SECURITY.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# Security Policy
|
||||||
|
|
||||||
|
## Supported Versions
|
||||||
|
|
||||||
|
I support only the last published version and the last development version (last commit).
|
||||||
|
|
||||||
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
To report a vulnerability, create a private bug at https://sourceforge.net/p/adminer/bugs-and-features/new/?private=1.
|
||||||
|
|
||||||
|
I handle security issues with top priority. If you don't hear from me in a week then please ping the bug. Once I accept the bug, the fix should be available and new version released within days. I will mark the bug as public after releasing a new version or declining the bug.
|
@@ -82,21 +82,40 @@ if ($_POST && !process_fields($row["fields"]) && !$error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$partitioning = "";
|
$partitioning = "";
|
||||||
if ($partition_by[$row["partition_by"]]) {
|
if (support("partitioning")) {
|
||||||
$partitions = array();
|
if (isset($partition_by[$row["partition_by"]])) {
|
||||||
if ($row["partition_by"] == 'RANGE' || $row["partition_by"] == 'LIST') {
|
$params = array_filter($row, function ($key) {
|
||||||
foreach (array_filter($row["partition_names"]) as $key => $val) {
|
return preg_match('~^partition~', $key);
|
||||||
$value = $row["partition_values"][$key];
|
}, ARRAY_FILTER_USE_KEY);
|
||||||
$partitions[] = "\n PARTITION " . idf_escape($val) . " VALUES " . ($row["partition_by"] == 'RANGE' ? "LESS THAN" : "IN") . ($value != "" ? " ($value)" : " MAXVALUE"); //! SQL injection
|
|
||||||
|
foreach ($params["partition_names"] as $key => $name) {
|
||||||
|
if ($name === "") {
|
||||||
|
unset($params["partition_names"][$key]);
|
||||||
|
unset($params["partition_values"][$key]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$partitioning .= "\nPARTITION BY $row[partition_by]($row[partition])" . ($partitions // $row["partition"] can be expression, not only column
|
|
||||||
? " (" . implode(",", $partitions) . "\n)"
|
if ($params != get_partitions_info($TABLE)) {
|
||||||
: ($row["partitions"] ? " PARTITIONS " . (+$row["partitions"]) : "")
|
$partitions = [];
|
||||||
);
|
if ($params["partition_by"] == 'RANGE' || $params["partition_by"] == 'LIST') {
|
||||||
} elseif (support("partitioning") && preg_match("~partitioned~", $table_status["Create_options"])) {
|
foreach ($params["partition_names"] as $key => $name) {
|
||||||
|
$value = $params["partition_values"][$key];
|
||||||
|
$partitions[] = "\n PARTITION " . idf_escape($name) . " VALUES " . ($params["partition_by"] == 'RANGE' ? "LESS THAN" : "IN") . ($value != "" ? " ($value)" : " MAXVALUE"); //! SQL injection
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// $params["partition"] can be expression, not only column
|
||||||
|
$partitioning .= "\nPARTITION BY {$params["partition_by"]}({$params["partition"]})";
|
||||||
|
if ($partitions) {
|
||||||
|
$partitioning .= " (" . implode(",", $partitions) . "\n)";
|
||||||
|
} elseif ($params["partitions"]) {
|
||||||
|
$partitioning .= " PARTITIONS " . (int)$params["partitions"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} elseif (preg_match("~partitioned~", $table_status["Create_options"])) {
|
||||||
$partitioning .= "\nREMOVE PARTITIONING";
|
$partitioning .= "\nREMOVE PARTITIONING";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$message = lang('Table has been altered.');
|
$message = lang('Table has been altered.');
|
||||||
if ($TABLE == "") {
|
if ($TABLE == "") {
|
||||||
@@ -141,13 +160,9 @@ if (!$_POST) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (support("partitioning")) {
|
if (support("partitioning")) {
|
||||||
$from = "FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = " . q(DB) . " AND TABLE_NAME = " . q($TABLE);
|
$row += get_partitions_info($TABLE);
|
||||||
$result = $connection->query("SELECT PARTITION_METHOD, PARTITION_ORDINAL_POSITION, PARTITION_EXPRESSION $from ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1");
|
$row["partition_names"][] = "";
|
||||||
list($row["partition_by"], $row["partitions"], $row["partition"]) = $result->fetch_row();
|
$row["partition_values"][] = "";
|
||||||
$partitions = get_key_vals("SELECT PARTITION_NAME, PARTITION_DESCRIPTION $from AND PARTITION_NAME != '' ORDER BY PARTITION_ORDINAL_POSITION");
|
|
||||||
$partitions[""] = "";
|
|
||||||
$row["partition_names"] = array_keys($partitions);
|
|
||||||
$row["partition_values"] = array_values($partitions);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -185,11 +200,17 @@ edit_fields($row["fields"], $collations, "TABLE", $foreign_keys);
|
|||||||
<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, ($_POST ? $_POST["defaults"] : adminer_setting("defaults")), lang('Default values'), "columnShow(this.checked, 5)", "jsonly"); ?>
|
<?php echo checkbox("defaults", 1, ($_POST ? $_POST["defaults"] : adminer_setting("defaults")), lang('Default values'), "columnShow(this.checked, 5)", "jsonly"); ?>
|
||||||
<?php echo (support("comment")
|
<?php
|
||||||
? checkbox("comments", 1, ($_POST ? $_POST["comments"] : adminer_setting("comments")), lang('Comment'), "editingCommentsClick(this, true);", "jsonly")
|
$comments = ($_POST ? $_POST["comments"] : adminer_setting("comments"));
|
||||||
. ' <input name="Comment" value="' . h($row["Comment"]) . '" data-maxlength="' . (min_version(5.5) ? 2048 : 60) . '">'
|
echo (support("comment")
|
||||||
|
? checkbox("comments", 1, $comments, lang('Comment'), "editingCommentsClick(this, true);", "jsonly")
|
||||||
|
. ' ' . (preg_match('~\n~', $row["Comment"])
|
||||||
|
? "<textarea name='Comment' rows='2' cols='20'" . ($comments ? "" : " class='hidden'") . ">" . h($row["Comment"]) . "</textarea>"
|
||||||
|
: '<input name="Comment" value="' . h($row["Comment"]) . '" data-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 } ?>
|
||||||
|
@@ -61,7 +61,7 @@ if ($adminer->homepage()) {
|
|||||||
echo " <input type='submit' name='search' value='" . lang('Search') . "'>\n";
|
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 %%";
|
$_GET["where"][0]["op"] = $driver->convertOperator("LIKE %%");
|
||||||
search_tables();
|
search_tables();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -83,7 +83,7 @@ if ($adminer->homepage()) {
|
|||||||
|
|
||||||
$tables = 0;
|
$tables = 0;
|
||||||
foreach ($tables_list as $name => $type) {
|
foreach ($tables_list as $name => $type) {
|
||||||
$view = ($type !== null && !preg_match('~table~i', $type));
|
$view = ($type !== null && !preg_match('~table|sequence~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), "", "", "", $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));
|
||||||
|
@@ -463,6 +463,8 @@ if (isset($_GET["mongo"])) {
|
|||||||
"insert" => 1,
|
"insert" => 1,
|
||||||
"select" => 1,
|
"select" => 1,
|
||||||
"update" => 1,
|
"update" => 1,
|
||||||
|
"where" => 1,
|
||||||
|
"order" => 1,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@@ -387,7 +387,7 @@ WHERE o.schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND o.type IN ('S', 'U',
|
|||||||
"null" => $row["is_nullable"],
|
"null" => $row["is_nullable"],
|
||||||
"auto_increment" => $row["is_identity"],
|
"auto_increment" => $row["is_identity"],
|
||||||
"collation" => $row["collation_name"],
|
"collation" => $row["collation_name"],
|
||||||
"privileges" => array("insert" => 1, "select" => 1, "update" => 1),
|
"privileges" => array("insert" => 1, "select" => 1, "update" => 1, "where" => 1, "order" => 1),
|
||||||
"primary" => $row["is_identity"], //! or indexes.is_primary_key
|
"primary" => $row["is_identity"], //! or indexes.is_primary_key
|
||||||
"comment" => $comments[$row["name"]],
|
"comment" => $comments[$row["name"]],
|
||||||
);
|
);
|
||||||
@@ -432,7 +432,7 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
|||||||
|
|
||||||
function error() {
|
function error() {
|
||||||
global $connection;
|
global $connection;
|
||||||
return nl_br(h(preg_replace('~^(\[[^]]*])+~m', '', $connection->error)));
|
return nl2br(h(preg_replace('~^(\[[^]]*])+~m', '', $connection->error)));
|
||||||
}
|
}
|
||||||
|
|
||||||
function create_database($db, $collation) {
|
function create_database($db, $collation) {
|
||||||
@@ -630,6 +630,17 @@ WHERE sys1.xtype = 'TR' AND sys2.name = " . q($table)
|
|||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
function is_strict_mode() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function is_c_style_escapes() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
function show_status() {
|
function show_status() {
|
||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
@@ -14,12 +14,19 @@ 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;
|
global $adminer;
|
||||||
mysqli_report(MYSQLI_REPORT_OFF); // stays between requests, not required since PHP 5.3.4
|
mysqli_report(MYSQLI_REPORT_OFF);
|
||||||
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();
|
$ssl = $adminer->connectSsl();
|
||||||
if ($ssl) {
|
if (isset($ssl['key']) || isset($ssl['cert']) || isset($ssl['ca'])) {
|
||||||
$this->ssl_set($ssl['key'], $ssl['cert'], $ssl['ca'], '', '');
|
$this->ssl_set(
|
||||||
|
isset($ssl['key']) ? $ssl['key'] : null,
|
||||||
|
isset($ssl['cert']) ? $ssl['cert'] : null,
|
||||||
|
isset($ssl['ca']) ? $ssl['ca'] : null,
|
||||||
|
null, null
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$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")),
|
||||||
@@ -27,7 +34,7 @@ if (!defined("DRIVER")) {
|
|||||||
$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)
|
($ssl ? MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT : 0)
|
||||||
);
|
);
|
||||||
$this->options(MYSQLI_OPT_LOCAL_INFILE, false);
|
$this->options(MYSQLI_OPT_LOCAL_INFILE, false);
|
||||||
return $return;
|
return $return;
|
||||||
@@ -234,30 +241,28 @@ if (!defined("DRIVER")) {
|
|||||||
|
|
||||||
function connect($server, $username, $password) {
|
function connect($server, $username, $password) {
|
||||||
global $adminer;
|
global $adminer;
|
||||||
$options = array(PDO::MYSQL_ATTR_LOCAL_INFILE => false);
|
|
||||||
|
$dsn = "mysql:charset=utf8;host=" . str_replace(":", ";unix_socket=", preg_replace('~:(\d)~', ';port=\1', $server));
|
||||||
|
|
||||||
|
$options = [PDO::MYSQL_ATTR_LOCAL_INFILE => false];
|
||||||
$ssl = $adminer->connectSsl();
|
$ssl = $adminer->connectSsl();
|
||||||
if ($ssl) {
|
if (isset($ssl['key'])) {
|
||||||
if (!empty($ssl['key'])) {
|
|
||||||
$options[PDO::MYSQL_ATTR_SSL_KEY] = $ssl['key'];
|
$options[PDO::MYSQL_ATTR_SSL_KEY] = $ssl['key'];
|
||||||
}
|
}
|
||||||
if (!empty($ssl['cert'])) {
|
if (isset($ssl['cert'])) {
|
||||||
$options[PDO::MYSQL_ATTR_SSL_CERT] = $ssl['cert'];
|
$options[PDO::MYSQL_ATTR_SSL_CERT] = $ssl['cert'];
|
||||||
}
|
}
|
||||||
if (!empty($ssl['ca'])) {
|
if (isset($ssl['ca'])) {
|
||||||
$options[PDO::MYSQL_ATTR_SSL_CA] = $ssl['ca'];
|
$options[PDO::MYSQL_ATTR_SSL_CA] = $ssl['ca'];
|
||||||
}
|
}
|
||||||
}
|
|
||||||
$this->dsn(
|
$this->dsn($dsn, $username, $password, $options);
|
||||||
"mysql:charset=utf8;host=" . str_replace(":", ";unix_socket=", preg_replace('~:(\d)~', ';port=\1', $server)),
|
|
||||||
$username,
|
|
||||||
$password,
|
|
||||||
$options
|
|
||||||
);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function set_charset($charset) {
|
function set_charset($charset) {
|
||||||
$this->query("SET NAMES $charset"); // charset in DSN is ignored before PHP 5.3.6
|
$this->query("SET NAMES $charset");
|
||||||
}
|
}
|
||||||
|
|
||||||
function select_db($database) {
|
function select_db($database) {
|
||||||
@@ -266,7 +271,7 @@ if (!defined("DRIVER")) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function query($query, $unbuffered = false) {
|
function query($query, $unbuffered = false) {
|
||||||
$this->pdo->setAttribute(1000, !$unbuffered); // 1000 - PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
|
$this->pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, !$unbuffered);
|
||||||
return parent::query($query, $unbuffered);
|
return parent::query($query, $unbuffered);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -316,8 +321,8 @@ if (!defined("DRIVER")) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function convertSearch($idf, $val, $field) {
|
function convertSearch($idf, array $where, array $field) {
|
||||||
return (preg_match('~char|text|enum|set~', $field["type"]) && !preg_match("~^utf8~", $field["collation"]) && preg_match('~[\x80-\xFF]~', $val['val'])
|
return (preg_match('~char|text|enum|set~', $field["type"]) && !preg_match("~^utf8~", $field["collation"]) && preg_match('~[\x80-\xFF]~', $where['val'])
|
||||||
? "CONVERT($idf USING " . charset($this->_conn) . ")"
|
? "CONVERT($idf USING " . charset($this->_conn) . ")"
|
||||||
: $idf
|
: $idf
|
||||||
);
|
);
|
||||||
@@ -370,7 +375,7 @@ if (!defined("DRIVER")) {
|
|||||||
$connection = new Min_DB;
|
$connection = new Min_DB;
|
||||||
$credentials = $adminer->credentials();
|
$credentials = $adminer->credentials();
|
||||||
if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) {
|
if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) {
|
||||||
$connection->set_charset(charset($connection)); // available in MySQLi since PHP 5.0.5
|
$connection->set_charset(charset($connection));
|
||||||
$connection->query("SET sql_quote_show_create = 1, autocommit = 1");
|
$connection->query("SET sql_quote_show_create = 1, autocommit = 1");
|
||||||
if (min_version('5.7.8', 10.2, $connection)) {
|
if (min_version('5.7.8', 10.2, $connection)) {
|
||||||
$structured_types[lang('Strings')][] = "json";
|
$structured_types[lang('Strings')][] = "json";
|
||||||
@@ -551,7 +556,7 @@ if (!defined("DRIVER")) {
|
|||||||
"auto_increment" => ($row["Extra"] == "auto_increment"),
|
"auto_increment" => ($row["Extra"] == "auto_increment"),
|
||||||
"on_update" => (preg_match('~^on update (.+)~i', $row["Extra"], $match) ? $match[1] : ""), //! available since MySQL 5.1.23
|
"on_update" => (preg_match('~^on update (.+)~i', $row["Extra"], $match) ? $match[1] : ""), //! available since MySQL 5.1.23
|
||||||
"collation" => $row["Collation"],
|
"collation" => $row["Collation"],
|
||||||
"privileges" => array_flip(preg_split('~, *~', $row["Privileges"])),
|
"privileges" => array_flip(preg_split('~, *~', $row["Privileges"])) + ["where" => 1, "order" => 1],
|
||||||
"comment" => $row["Comment"],
|
"comment" => $row["Comment"],
|
||||||
"primary" => ($row["Key"] == "PRI"),
|
"primary" => ($row["Key"] == "PRI"),
|
||||||
// https://mariadb.com/kb/en/library/show-columns/, https://github.com/vrana/adminer/pull/359#pullrequestreview-276677186
|
// https://mariadb.com/kb/en/library/show-columns/, https://github.com/vrana/adminer/pull/359#pullrequestreview-276677186
|
||||||
@@ -678,17 +683,17 @@ if (!defined("DRIVER")) {
|
|||||||
function rename_database($name, $collation) {
|
function rename_database($name, $collation) {
|
||||||
$return = false;
|
$return = false;
|
||||||
if (create_database($name, $collation)) {
|
if (create_database($name, $collation)) {
|
||||||
//! move triggers
|
$tables = array();
|
||||||
$rename = array();
|
$views = array();
|
||||||
foreach (tables_list() as $table => $type) {
|
foreach (tables_list() as $table => $type) {
|
||||||
$rename[] = table($table) . " TO " . idf_escape($name) . "." . table($table);
|
if ($type == 'VIEW') {
|
||||||
|
$views[] = $table;
|
||||||
|
} else {
|
||||||
|
$tables[] = $table;
|
||||||
}
|
}
|
||||||
$return = (!$rename || queries("RENAME TABLE " . implode(", ", $rename)));
|
|
||||||
if ($return) {
|
|
||||||
queries("DROP DATABASE " . idf_escape(DB));
|
|
||||||
}
|
}
|
||||||
restart_session();
|
$return = (!$tables && !$views) || move_tables($tables, $views, $name);
|
||||||
set_session("dbs", null);
|
drop_databases($return ? array(DB) : array());
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -797,12 +802,27 @@ if (!defined("DRIVER")) {
|
|||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function move_tables($tables, $views, $target) {
|
function move_tables($tables, $views, $target) {
|
||||||
|
global $connection;
|
||||||
$rename = array();
|
$rename = array();
|
||||||
foreach (array_merge($tables, $views) as $table) { // views will report SQL error
|
foreach ($tables as $table) {
|
||||||
$rename[] = table($table) . " TO " . idf_escape($target) . "." . table($table);
|
$rename[] = table($table) . " TO " . idf_escape($target) . "." . table($table);
|
||||||
}
|
}
|
||||||
return queries("RENAME TABLE " . implode(", ", $rename));
|
if (!$rename || queries("RENAME TABLE " . implode(", ", $rename))) {
|
||||||
|
$definitions = array();
|
||||||
|
foreach ($views as $table) {
|
||||||
|
$definitions[table($table)] = view($table);
|
||||||
|
}
|
||||||
|
$connection->select_db($target);
|
||||||
|
$db = idf_escape(DB);
|
||||||
|
foreach ($definitions as $name => $view) {
|
||||||
|
if (!queries("CREATE VIEW $name AS " . str_replace(" $db.", " ", $view["select"])) || !queries("DROP VIEW $db.$name")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
//! move triggers
|
//! move triggers
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Copy tables to other schema
|
/** Copy tables to other schema
|
||||||
@@ -1041,6 +1061,29 @@ if (!defined("DRIVER")) {
|
|||||||
return get_key_vals("SHOW VARIABLES");
|
return get_key_vals("SHOW VARIABLES");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
function is_strict_mode() {
|
||||||
|
static $strictMode = null;
|
||||||
|
|
||||||
|
if ($strictMode === null) {
|
||||||
|
$strictMode = (bool)preg_match('~STRICT_(TRANS|ALL)_TABLES~', get_key_vals("SHOW VARIABLES LIKE 'sql_mode'")["sql_mode"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $strictMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
function is_c_style_escapes() {
|
||||||
|
static $c_style = null;
|
||||||
|
|
||||||
|
if ($c_style === null) {
|
||||||
|
$c_style = strpos(get_key_vals("SHOW VARIABLES LIKE 'sql_mode'")["sql_mode"], 'NO_BACKSLASH_ESCAPES') === false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $c_style;
|
||||||
|
}
|
||||||
|
|
||||||
/** Get process list
|
/** Get process list
|
||||||
* @return array ($row)
|
* @return array ($row)
|
||||||
*/
|
*/
|
||||||
@@ -1084,7 +1127,8 @@ 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 = (min_version(8) ? "ST_" : "") . "GeomFromText($return, SRID($field[field]))";
|
$prefix = (min_version(8) ? "ST_" : "");
|
||||||
|
$return = $prefix . "GeomFromText($return, $prefix" . "SRID($field[field]))";
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -1144,7 +1188,7 @@ if (!defined("DRIVER")) {
|
|||||||
'structured_types' => $structured_types,
|
'structured_types' => $structured_types,
|
||||||
'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", "FIND_IN_SET", "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", "floor", "ceil", "sec_to_time", "time_to_sec", "upper"), ///< @var array functions used in select
|
'functions' => array("char_length", "date", "from_unixtime", "unix_timestamp", "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(
|
||||||
|
@@ -167,7 +167,14 @@ if (isset($_GET["oracle"])) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $hostPath
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
function is_server_host_valid($hostPath) {
|
||||||
|
// EasyConnect host+path format: host[/[service_name][:server_type][/instance_name]]
|
||||||
|
return (bool)preg_match('~^[^/]+(/([^/:]+)?(:[^/:]+)?(/[^/:]+)?)?$~', $hostPath);
|
||||||
|
}
|
||||||
|
|
||||||
function idf_escape($idf) {
|
function idf_escape($idf) {
|
||||||
return '"' . str_replace('"', '""', $idf) . '"';
|
return '"' . str_replace('"', '""', $idf) . '"';
|
||||||
@@ -297,7 +304,7 @@ ORDER BY 1"
|
|||||||
"null" => ($row["NULLABLE"] == "Y"),
|
"null" => ($row["NULLABLE"] == "Y"),
|
||||||
//! "auto_increment" => false,
|
//! "auto_increment" => false,
|
||||||
//! "collation" => $row["CHARACTER_SET_NAME"],
|
//! "collation" => $row["CHARACTER_SET_NAME"],
|
||||||
"privileges" => array("insert" => 1, "select" => 1, "update" => 1),
|
"privileges" => array("insert" => 1, "select" => 1, "update" => 1, "where" => 1, "order" => 1),
|
||||||
//! "comment" => $row["Comment"],
|
//! "comment" => $row["Comment"],
|
||||||
//! "primary" => ($row["Key"] == "PRI"),
|
//! "primary" => ($row["Key"] == "PRI"),
|
||||||
);
|
);
|
||||||
@@ -308,16 +315,19 @@ ORDER BY 1"
|
|||||||
function indexes($table, $connection2 = null) {
|
function indexes($table, $connection2 = null) {
|
||||||
$return = array();
|
$return = array();
|
||||||
$owner = where_owner(" AND ", "aic.table_owner");
|
$owner = where_owner(" AND ", "aic.table_owner");
|
||||||
foreach (get_rows("SELECT aic.*, ac.constraint_type
|
foreach (get_rows("SELECT aic.*, ac.constraint_type, atc.data_default
|
||||||
FROM all_ind_columns aic
|
FROM all_ind_columns aic
|
||||||
LEFT JOIN all_constraints ac ON aic.index_name = ac.constraint_name AND aic.table_name = ac.table_name AND aic.index_owner = ac.owner
|
LEFT JOIN all_constraints ac ON aic.index_name = ac.constraint_name AND aic.table_name = ac.table_name AND aic.index_owner = ac.owner
|
||||||
|
LEFT JOIN all_tab_cols atc ON aic.column_name = atc.column_name AND aic.table_name = atc.table_name AND aic.index_owner = atc.owner
|
||||||
WHERE aic.table_name = " . q($table) . "$owner
|
WHERE aic.table_name = " . q($table) . "$owner
|
||||||
ORDER BY ac.constraint_type, aic.column_position", $connection2) as $row) {
|
ORDER BY ac.constraint_type, aic.column_position", $connection2) as $row) {
|
||||||
$index_name = $row["INDEX_NAME"];
|
$index_name = $row["INDEX_NAME"];
|
||||||
|
$column_name = $row["DATA_DEFAULT"];
|
||||||
|
$column_name = ($column_name ? trim($column_name, '"') : $row["COLUMN_NAME"]); // trim - possibly wrapped in quotes but never contains quotes inside
|
||||||
$return[$index_name]["type"] = ($row["CONSTRAINT_TYPE"] == "P" ? "PRIMARY" : ($row["CONSTRAINT_TYPE"] == "U" ? "UNIQUE" : "INDEX"));
|
$return[$index_name]["type"] = ($row["CONSTRAINT_TYPE"] == "P" ? "PRIMARY" : ($row["CONSTRAINT_TYPE"] == "U" ? "UNIQUE" : "INDEX"));
|
||||||
$return[$index_name]["columns"][] = $row["COLUMN_NAME"];
|
$return[$index_name]["columns"][] = $column_name;
|
||||||
$return[$index_name]["lengths"][] = ($row["CHAR_LENGTH"] && $row["CHAR_LENGTH"] != $row["COLUMN_LENGTH"] ? $row["CHAR_LENGTH"] : null);
|
$return[$index_name]["lengths"][] = ($row["CHAR_LENGTH"] && $row["CHAR_LENGTH"] != $row["COLUMN_LENGTH"] ? $row["CHAR_LENGTH"] : null);
|
||||||
$return[$index_name]["descs"][] = ($row["DESCEND"] ? '1' : null);
|
$return[$index_name]["descs"][] = ($row["DESCEND"] && $row["DESCEND"] == "DESC" ? '1' : null);
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -384,26 +394,23 @@ ORDER BY ac.constraint_type, aic.column_position", $connection2) as $row) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function alter_indexes($table, $alter) {
|
function alter_indexes($table, $alter) {
|
||||||
$create = array();
|
|
||||||
$drop = array();
|
$drop = array();
|
||||||
$queries = array();
|
$queries = array();
|
||||||
foreach ($alter as $val) {
|
foreach ($alter as $val) {
|
||||||
$val[2] = preg_replace('~ DESC$~', '', $val[2]);
|
|
||||||
if ($val[0] != "INDEX") {
|
if ($val[0] != "INDEX") {
|
||||||
//! descending UNIQUE indexes results in syntax error
|
//! descending UNIQUE indexes results in syntax error
|
||||||
$create[] = ($val[2] == "DROP"
|
$val[2] = preg_replace('~ DESC$~', '', $val[2]);
|
||||||
|
$create = ($val[2] == "DROP"
|
||||||
? "\nDROP CONSTRAINT " . idf_escape($val[1])
|
? "\nDROP CONSTRAINT " . idf_escape($val[1])
|
||||||
: "\nADD" . ($val[1] != "" ? " CONSTRAINT " . idf_escape($val[1]) : "") . " $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "") . "(" . implode(", ", $val[2]) . ")"
|
: "\nADD" . ($val[1] != "" ? " CONSTRAINT " . idf_escape($val[1]) : "") . " $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "") . "(" . implode(", ", $val[2]) . ")"
|
||||||
);
|
);
|
||||||
|
array_unshift($queries, "ALTER TABLE " . table($table) . $create);
|
||||||
} elseif ($val[2] == "DROP") {
|
} elseif ($val[2] == "DROP") {
|
||||||
$drop[] = idf_escape($val[1]);
|
$drop[] = idf_escape($val[1]);
|
||||||
} else {
|
} else {
|
||||||
$queries[] = "CREATE INDEX " . idf_escape($val[1] != "" ? $val[1] : uniqid($table . "_")) . " ON " . table($table) . " (" . implode(", ", $val[2]) . ")";
|
$queries[] = "CREATE INDEX " . idf_escape($val[1] != "" ? $val[1] : uniqid($table . "_")) . " ON " . table($table) . " (" . implode(", ", $val[2]) . ")";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($create) {
|
|
||||||
array_unshift($queries, "ALTER TABLE " . table($table) . implode(",", $create));
|
|
||||||
}
|
|
||||||
if ($drop) {
|
if ($drop) {
|
||||||
array_unshift($queries, "DROP INDEX " . implode(", ", $drop));
|
array_unshift($queries, "DROP INDEX " . implode(", ", $drop));
|
||||||
}
|
}
|
||||||
@@ -479,6 +486,17 @@ AND c_src.TABLE_NAME = " . q($table);
|
|||||||
return get_key_vals('SELECT name, display_value FROM v$parameter');
|
return get_key_vals('SELECT name, display_value FROM v$parameter');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
function is_strict_mode() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function is_c_style_escapes() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
function process_list() {
|
function process_list() {
|
||||||
return get_rows('SELECT sess.process AS "process", sess.username AS "user", sess.schemaname AS "schema", sess.status AS "status", sess.wait_class AS "wait_class", sess.seconds_in_wait AS "seconds_in_wait", sql.sql_text AS "sql_text", sess.machine AS "machine", sess.port AS "port"
|
return get_rows('SELECT sess.process AS "process", sess.username AS "user", sess.schemaname AS "schema", sess.status AS "status", sess.wait_class AS "wait_class", sess.seconds_in_wait AS "seconds_in_wait", sql.sql_text AS "sql_text", sess.machine AS "machine", sess.port AS "port"
|
||||||
FROM v$session sess LEFT OUTER JOIN v$sql sql
|
FROM v$session sess LEFT OUTER JOIN v$sql sql
|
||||||
|
@@ -19,7 +19,14 @@ if (isset($_GET["pgsql"])) {
|
|||||||
global $adminer;
|
global $adminer;
|
||||||
$db = $adminer->database();
|
$db = $adminer->database();
|
||||||
set_error_handler(array($this, '_error'));
|
set_error_handler(array($this, '_error'));
|
||||||
|
|
||||||
$this->_string = "host='" . str_replace(":", "' port='", addcslashes($server, "'\\")) . "' user='" . addcslashes($username, "'\\") . "' password='" . addcslashes($password, "'\\") . "'";
|
$this->_string = "host='" . str_replace(":", "' port='", addcslashes($server, "'\\")) . "' user='" . addcslashes($username, "'\\") . "' password='" . addcslashes($password, "'\\") . "'";
|
||||||
|
|
||||||
|
$ssl = $adminer->connectSsl();
|
||||||
|
if (isset($ssl["mode"])) {
|
||||||
|
$this->_string .= " sslmode='" . $ssl["mode"] . "'";
|
||||||
|
}
|
||||||
|
|
||||||
$this->_link = @pg_connect("$this->_string dbname='" . ($db != "" ? addcslashes($db, "'\\") : "postgres") . "'", PGSQL_CONNECT_FORCE_NEW);
|
$this->_link = @pg_connect("$this->_string dbname='" . ($db != "" ? addcslashes($db, "'\\") : "postgres") . "'", PGSQL_CONNECT_FORCE_NEW);
|
||||||
if (!$this->_link && $db != "") {
|
if (!$this->_link && $db != "") {
|
||||||
// try to connect directly with database for performance
|
// try to connect directly with database for performance
|
||||||
@@ -36,7 +43,7 @@ if (isset($_GET["pgsql"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function quote($string) {
|
function quote($string) {
|
||||||
return "'" . pg_escape_string($this->_link, $string) . "'";
|
return pg_escape_literal($this->_link, $string);
|
||||||
}
|
}
|
||||||
|
|
||||||
function value($val, $field) {
|
function value($val, $field) {
|
||||||
@@ -148,9 +155,19 @@ if (isset($_GET["pgsql"])) {
|
|||||||
|
|
||||||
function connect($server, $username, $password) {
|
function connect($server, $username, $password) {
|
||||||
global $adminer;
|
global $adminer;
|
||||||
|
|
||||||
$db = $adminer->database();
|
$db = $adminer->database();
|
||||||
$this->dsn("pgsql:host='" . str_replace(":", "' port='", addcslashes($server, "'\\")) . "' client_encoding=utf8 dbname='" . ($db != "" ? addcslashes($db, "'\\") : "postgres") . "'", $username, $password); //! client_encoding is supported since 9.1 but we can't yet use min_version here
|
|
||||||
//! connect without DB in case of an error
|
//! client_encoding is supported since 9.1, but we can't yet use min_version here
|
||||||
|
$dsn = "pgsql:host='" . str_replace(":", "' port='", addcslashes($server, "'\\")) . "' client_encoding=utf8 dbname='" . ($db != "" ? addcslashes($db, "'\\") : "postgres") . "'";
|
||||||
|
|
||||||
|
$ssl = $adminer->connectSsl();
|
||||||
|
if (isset($ssl["mode"])) {
|
||||||
|
$dsn .= " sslmode='" . $ssl["mode"] . "'";
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->dsn($dsn, $username, $password);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -212,13 +229,13 @@ if (isset($_GET["pgsql"])) {
|
|||||||
return $query;
|
return $query;
|
||||||
}
|
}
|
||||||
|
|
||||||
function convertSearch($idf, $val, $field) {
|
function convertSearch($idf, array $where, array $field) {
|
||||||
return (preg_match('~char|text'
|
$textTypes = "char|text";
|
||||||
. (!preg_match('~LIKE~', $val["op"]) ? '|date|time(stamp)?|boolean|uuid|' . number_type() : '')
|
if (strpos($where["op"], "LIKE") === false) {
|
||||||
. '~', $field["type"])
|
$textTypes .= "|date|time(stamp)?|boolean|uuid|inet|cidr|macaddr|" . number_type();
|
||||||
? $idf
|
}
|
||||||
: "CAST($idf AS text)"
|
|
||||||
);
|
return (preg_match("~$textTypes~", $field["type"]) ? $idf : "CAST($idf AS text)");
|
||||||
}
|
}
|
||||||
|
|
||||||
function quoteBinary($s) {
|
function quoteBinary($s) {
|
||||||
@@ -274,7 +291,9 @@ if (isset($_GET["pgsql"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function get_databases() {
|
function get_databases() {
|
||||||
return get_vals("SELECT datname FROM pg_database WHERE has_database_privilege(datname, 'CONNECT') ORDER BY datname");
|
return get_vals("SELECT d.datname FROM pg_database d JOIN pg_roles r ON d.datdba = r.oid
|
||||||
|
WHERE d.datallowconn = TRUE AND has_database_privilege(d.datname, 'CONNECT') AND pg_has_role(r.rolname, 'USAGE')
|
||||||
|
ORDER BY d.datname");
|
||||||
}
|
}
|
||||||
|
|
||||||
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
|
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
|
||||||
@@ -284,7 +303,7 @@ if (isset($_GET["pgsql"])) {
|
|||||||
function limit1($table, $query, $where, $separator = "\n") {
|
function limit1($table, $query, $where, $separator = "\n") {
|
||||||
return (preg_match('~^INTO~', $query)
|
return (preg_match('~^INTO~', $query)
|
||||||
? limit($query, $where, 1, 0, $separator)
|
? limit($query, $where, 1, 0, $separator)
|
||||||
: " $query" . (is_view(table_status1($table)) ? $where : " WHERE ctid = (SELECT ctid FROM " . table($table) . $where . $separator . "LIMIT 1)")
|
: " $query" . (is_view(table_status1($table)) ? $where : $separator . "WHERE ctid = (SELECT ctid FROM " . table($table) . $where . $separator . "LIMIT 1)")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -304,7 +323,7 @@ if (isset($_GET["pgsql"])) {
|
|||||||
|
|
||||||
function tables_list() {
|
function tables_list() {
|
||||||
$query = "SELECT table_name, table_type FROM information_schema.tables WHERE table_schema = current_schema()";
|
$query = "SELECT table_name, table_type FROM information_schema.tables WHERE table_schema = current_schema()";
|
||||||
if (support('materializedview')) {
|
if (support('materializedview')) { // ' - support("materializedview") could be removed by compile.php
|
||||||
$query .= "
|
$query .= "
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT matviewname, 'MATERIALIZED VIEW'
|
SELECT matviewname, 'MATERIALIZED VIEW'
|
||||||
@@ -322,7 +341,7 @@ 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_total_relation_size(c.oid) - pg_relation_size(c.oid) AS \"Index_length\", obj_description(c.oid, 'pg_class') AS \"Comment\", " . (min_version(12) ? "''" : "CASE WHEN c.relhasoids THEN 'oid' ELSE '' END") . " 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_table_size(c.oid) AS \"Data_length\", pg_indexes_size(c.oid) AS \"Index_length\", obj_description(c.oid, 'pg_class') AS \"Comment\", " . (min_version(12) ? "''" : "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', 'f', 'p')
|
WHERE relkind IN ('r', 'm', 'v', 'f', 'p')
|
||||||
@@ -348,9 +367,7 @@ WHERE relkind IN ('r', 'm', 'v', 'f', 'p')
|
|||||||
'timestamp with time zone' => 'timestamptz',
|
'timestamp with time zone' => 'timestamptz',
|
||||||
);
|
);
|
||||||
|
|
||||||
$identity_column = min_version(10) ? 'a.attidentity' : '0';
|
foreach (get_rows("SELECT a.attname AS field, format_type(a.atttypid, a.atttypmod) AS full_type, pg_get_expr(d.adbin, d.adrelid) AS default, a.attnotnull::int, col_description(c.oid, a.attnum) AS comment" . (min_version(10) ? ", a.attidentity" : "") . "
|
||||||
|
|
||||||
foreach (get_rows("SELECT a.attname AS field, format_type(a.atttypid, a.atttypmod) AS full_type, pg_get_expr(d.adbin, d.adrelid) AS default, a.attnotnull::int, col_description(c.oid, a.attnum) AS comment, $identity_column AS identity
|
|
||||||
FROM pg_class c
|
FROM pg_class c
|
||||||
JOIN pg_namespace n ON c.relnamespace = n.oid
|
JOIN pg_namespace n ON c.relnamespace = n.oid
|
||||||
JOIN pg_attribute a ON c.oid = a.attrelid
|
JOIN pg_attribute a ON c.oid = a.attrelid
|
||||||
@@ -373,14 +390,14 @@ ORDER BY a.attnum"
|
|||||||
$row["type"] = $type;
|
$row["type"] = $type;
|
||||||
$row["full_type"] = $row["type"] . $length . $addon . $array;
|
$row["full_type"] = $row["type"] . $length . $addon . $array;
|
||||||
}
|
}
|
||||||
if (in_array($row['identity'], array('a', 'd'))) {
|
if (in_array($row['attidentity'], array('a', 'd'))) {
|
||||||
$row['default'] = 'GENERATED ' . ($row['identity'] == 'd' ? 'BY DEFAULT' : 'ALWAYS') . ' AS IDENTITY';
|
$row['default'] = 'GENERATED ' . ($row['attidentity'] == 'd' ? 'BY DEFAULT' : 'ALWAYS') . ' AS IDENTITY';
|
||||||
}
|
}
|
||||||
$row["null"] = !$row["attnotnull"];
|
$row["null"] = !$row["attnotnull"];
|
||||||
$row["auto_increment"] = $row['identity'] || preg_match('~^nextval\(~i', $row["default"]);
|
$row["auto_increment"] = $row['attidentity'] || preg_match('~^nextval\(~i', $row["default"]);
|
||||||
$row["privileges"] = array("insert" => 1, "select" => 1, "update" => 1);
|
$row["privileges"] = array("insert" => 1, "select" => 1, "update" => 1, "where" => 1, "order" => 1);
|
||||||
if (preg_match('~(.+)::[^,)]+(.*)~', $row["default"], $match)) {
|
if (preg_match('~(.+)::[^,)]+(.*)~', $row["default"], $match)) {
|
||||||
$row["default"] = ($match[1] == "NULL" ? null : (($match[1][0] == "'" ? idf_unescape($match[1]) : $match[1]) . $match[2]));
|
$row["default"] = ($match[1] == "NULL" ? null : idf_unescape($match[1]) . $match[2]);
|
||||||
}
|
}
|
||||||
$return[$row["field"]] = $row;
|
$return[$row["field"]] = $row;
|
||||||
}
|
}
|
||||||
@@ -420,12 +437,12 @@ WHERE conrelid = (SELECT pc.oid FROM pg_class AS pc INNER JOIN pg_namespace AS p
|
|||||||
AND contype = 'f'::char
|
AND contype = 'f'::char
|
||||||
ORDER BY conkey, conname") as $row) {
|
ORDER BY conkey, conname") as $row) {
|
||||||
if (preg_match('~FOREIGN KEY\s*\((.+)\)\s*REFERENCES (.+)\((.+)\)(.*)$~iA', $row['definition'], $match)) {
|
if (preg_match('~FOREIGN KEY\s*\((.+)\)\s*REFERENCES (.+)\((.+)\)(.*)$~iA', $row['definition'], $match)) {
|
||||||
$row['source'] = array_map('trim', explode(',', $match[1]));
|
$row['source'] = array_map('idf_unescape', array_map('trim', explode(',', $match[1])));
|
||||||
if (preg_match('~^(("([^"]|"")+"|[^"]+)\.)?"?("([^"]|"")+"|[^"]+)$~', $match[2], $match2)) {
|
if (preg_match('~^(("([^"]|"")+"|[^"]+)\.)?"?("([^"]|"")+"|[^"]+)$~', $match[2], $match2)) {
|
||||||
$row['ns'] = str_replace('""', '"', preg_replace('~^"(.+)"$~', '\1', $match2[2]));
|
$row['ns'] = idf_unescape($match2[2]);
|
||||||
$row['table'] = str_replace('""', '"', preg_replace('~^"(.+)"$~', '\1', $match2[4]));
|
$row['table'] = idf_unescape($match2[4]);
|
||||||
}
|
}
|
||||||
$row['target'] = array_map('trim', explode(',', $match[3]));
|
$row['target'] = array_map('idf_unescape', array_map('trim', explode(',', $match[3])));
|
||||||
$row['on_delete'] = (preg_match("~ON DELETE ($on_actions)~", $match[4], $match2) ? $match2[1] : 'NO ACTION');
|
$row['on_delete'] = (preg_match("~ON DELETE ($on_actions)~", $match[4], $match2) ? $match2[1] : 'NO ACTION');
|
||||||
$row['on_update'] = (preg_match("~ON UPDATE ($on_actions)~", $match[4], $match2) ? $match2[1] : 'NO ACTION');
|
$row['on_update'] = (preg_match("~ON UPDATE ($on_actions)~", $match[4], $match2) ? $match2[1] : 'NO ACTION');
|
||||||
$return[$row['conname']] = $row;
|
$return[$row['conname']] = $row;
|
||||||
@@ -471,7 +488,7 @@ ORDER BY connamespace, conname") as $row) {
|
|||||||
if (preg_match('~^(.*\n)?([^\n]*)\n( *)\^(\n.*)?$~s', $return, $match)) {
|
if (preg_match('~^(.*\n)?([^\n]*)\n( *)\^(\n.*)?$~s', $return, $match)) {
|
||||||
$return = $match[1] . preg_replace('~((?:[^&]|&[^;]*;){' . strlen($match[3]) . '})(.*)~', '\1<b>\2</b>', $match[2]) . $match[4];
|
$return = $match[1] . preg_replace('~((?:[^&]|&[^;]*;){' . strlen($match[3]) . '})(.*)~', '\1<b>\2</b>', $match[2]) . $match[4];
|
||||||
}
|
}
|
||||||
return nl_br($return);
|
return nl2br($return);
|
||||||
}
|
}
|
||||||
|
|
||||||
function create_database($db, $collation) {
|
function create_database($db, $collation) {
|
||||||
@@ -536,7 +553,7 @@ ORDER BY connamespace, conname") as $row) {
|
|||||||
} elseif ($alter) {
|
} elseif ($alter) {
|
||||||
array_unshift($queries, "ALTER TABLE " . table($table) . "\n" . implode(",\n", $alter));
|
array_unshift($queries, "ALTER TABLE " . table($table) . "\n" . implode(",\n", $alter));
|
||||||
}
|
}
|
||||||
if ($table != "" || $comment != "") {
|
if ($comment !== null) {
|
||||||
$queries[] = "COMMENT ON TABLE " . table($name) . " IS " . q($comment);
|
$queries[] = "COMMENT ON TABLE " . table($name) . " IS " . q($comment);
|
||||||
}
|
}
|
||||||
if ($auto_increment != "") {
|
if ($auto_increment != "") {
|
||||||
@@ -610,21 +627,34 @@ ORDER BY connamespace, conname") as $row) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function trigger($name, $table = null) {
|
function trigger($name, $table) {
|
||||||
if ($name == "") {
|
if ($name == "") {
|
||||||
return array("Statement" => "EXECUTE PROCEDURE ()");
|
return array("Statement" => "EXECUTE PROCEDURE ()");
|
||||||
}
|
}
|
||||||
if ($table === null) {
|
$columns = array();
|
||||||
$table = $_GET['trigger'];
|
$where = "WHERE trigger_schema = current_schema() AND event_object_table = " . q($table) . " AND trigger_name = " . q($name);
|
||||||
|
foreach (get_rows("SELECT * FROM information_schema.triggered_update_columns $where") as $row) {
|
||||||
|
$columns[] = $row["event_object_column"];
|
||||||
}
|
}
|
||||||
$rows = get_rows('SELECT t.trigger_name AS "Trigger", t.action_timing AS "Timing", (SELECT STRING_AGG(event_manipulation, \' OR \') FROM information_schema.triggers WHERE event_object_table = t.event_object_table AND trigger_name = t.trigger_name ) AS "Events", t.event_manipulation AS "Event", \'FOR EACH \' || t.action_orientation AS "Type", t.action_statement AS "Statement" FROM information_schema.triggers t WHERE t.event_object_table = ' . q($table) . ' AND t.trigger_name = ' . q($name));
|
$return = array();
|
||||||
return reset($rows);
|
foreach (get_rows('SELECT trigger_name AS "Trigger", action_timing AS "Timing", event_manipulation AS "Event", \'FOR EACH \' || action_orientation AS "Type", action_statement AS "Statement" FROM information_schema.triggers ' . "$where ORDER BY event_manipulation DESC") as $row) {
|
||||||
|
if ($columns && $row["Event"] == "UPDATE") {
|
||||||
|
$row["Event"] .= " OF";
|
||||||
|
}
|
||||||
|
$row["Of"] = implode(", ", $columns);
|
||||||
|
if ($return) {
|
||||||
|
$row["Event"] .= " OR $return[Event]";
|
||||||
|
}
|
||||||
|
$return = $row;
|
||||||
|
}
|
||||||
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function triggers($table) {
|
function triggers($table) {
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_rows("SELECT * FROM information_schema.triggers WHERE trigger_schema = current_schema() AND event_object_table = " . q($table)) as $row) {
|
foreach (get_rows("SELECT * FROM information_schema.triggers WHERE trigger_schema = current_schema() AND event_object_table = " . q($table)) as $row) {
|
||||||
$return[$row["trigger_name"]] = array($row["action_timing"], $row["event_manipulation"]);
|
$trigger = trigger($row["trigger_name"], $table);
|
||||||
|
$return[$trigger["Trigger"]] = array($trigger["Timing"], $trigger["Event"]);
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -632,7 +662,7 @@ ORDER BY connamespace, conname") as $row) {
|
|||||||
function trigger_options() {
|
function trigger_options() {
|
||||||
return array(
|
return array(
|
||||||
"Timing" => array("BEFORE", "AFTER"),
|
"Timing" => array("BEFORE", "AFTER"),
|
||||||
"Event" => array("INSERT", "UPDATE", "DELETE"),
|
"Event" => array("INSERT", "UPDATE", "UPDATE OF", "DELETE", "INSERT OR UPDATE", "INSERT OR UPDATE OF", "DELETE OR INSERT", "DELETE OR UPDATE", "DELETE OR UPDATE OF", "DELETE OR INSERT OR UPDATE", "DELETE OR INSERT OR UPDATE OF"),
|
||||||
"Type" => array("FOR EACH ROW", "FOR EACH STATEMENT"),
|
"Type" => array("FOR EACH ROW", "FOR EACH STATEMENT"),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -762,7 +792,7 @@ AND typelem = 0"
|
|||||||
$return = "CREATE TABLE " . idf_escape($status['nspname']) . "." . idf_escape($status['Name']) . " (\n ";
|
$return = "CREATE TABLE " . idf_escape($status['nspname']) . "." . idf_escape($status['Name']) . " (\n ";
|
||||||
|
|
||||||
// fields' definitions
|
// fields' definitions
|
||||||
foreach ($fields as $field_name => $field) {
|
foreach ($fields as $field) {
|
||||||
$part = idf_escape($field['field']) . ' ' . $field['full_type']
|
$part = idf_escape($field['field']) . ' ' . $field['full_type']
|
||||||
. default_value($field)
|
. default_value($field)
|
||||||
. ($field['attnotnull'] ? " NOT NULL" : "");
|
. ($field['attnotnull'] ? " NOT NULL" : "");
|
||||||
@@ -771,10 +801,11 @@ AND typelem = 0"
|
|||||||
// 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(min_version(10)
|
$rows = get_rows(min_version(10)
|
||||||
? "SELECT *, cache_size AS cache_value FROM pg_sequences WHERE schemaname = current_schema() AND sequencename = " . q($sequence_name)
|
? "SELECT *, cache_size AS cache_value FROM pg_sequences WHERE schemaname = current_schema() AND sequencename = " . q(idf_unescape($sequence_name))
|
||||||
: "SELECT * FROM $sequence_name"
|
: "SELECT * FROM $sequence_name"
|
||||||
));
|
);
|
||||||
|
$sq = reset($rows);
|
||||||
$sequences[] = ($style == "DROP+CREATE" ? "DROP SEQUENCE IF EXISTS $sequence_name;\n" : "")
|
$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]" . ($auto_increment && $sq['last_value'] ? " START $sq[last_value]" : "") . " CACHE $sq[cache_value];";
|
. "CREATE SEQUENCE $sequence_name INCREMENT $sq[increment_by] MINVALUE $sq[min_value] MAXVALUE $sq[max_value]" . ($auto_increment && $sq['last_value'] ? " START $sq[last_value]" : "") . " CACHE $sq[cache_value];";
|
||||||
}
|
}
|
||||||
@@ -833,7 +864,7 @@ AND typelem = 0"
|
|||||||
$return = "";
|
$return = "";
|
||||||
foreach (triggers($table) as $trg_id => $trg) {
|
foreach (triggers($table) as $trg_id => $trg) {
|
||||||
$trigger = trigger($trg_id, $status['Name']);
|
$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 .= "\nCREATE TRIGGER " . idf_escape($trigger['Trigger']) . " $trigger[Timing] $trigger[Event] ON " . idf_escape($status["nspname"]) . "." . idf_escape($status['Name']) . " $trigger[Type] $trigger[Statement];;\n";
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -847,6 +878,23 @@ AND typelem = 0"
|
|||||||
return get_key_vals("SHOW ALL");
|
return get_key_vals("SHOW ALL");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
function is_strict_mode() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function is_c_style_escapes() {
|
||||||
|
static $c_style = null;
|
||||||
|
|
||||||
|
if ($c_style === null) {
|
||||||
|
$c_style = get_vals("SHOW standard_conforming_strings")[0] == "off";
|
||||||
|
}
|
||||||
|
|
||||||
|
return $c_style;
|
||||||
|
}
|
||||||
|
|
||||||
function process_list() {
|
function process_list() {
|
||||||
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 " . (min_version(9.2) ? "pid" : "procpid"));
|
||||||
}
|
}
|
||||||
@@ -886,7 +934,7 @@ AND typelem = 0"
|
|||||||
lang('Date and time') => array("date" => 13, "time" => 17, "timestamp" => 20, "timestamptz" => 21, "interval" => 0),
|
lang('Date and time') => array("date" => 13, "time" => 17, "timestamp" => 20, "timestamptz" => 21, "interval" => 0),
|
||||||
lang('Strings') => array("character" => 0, "character varying" => 0, "text" => 0, "tsquery" => 0, "tsvector" => 0, "uuid" => 0, "xml" => 0),
|
lang('Strings') => array("character" => 0, "character varying" => 0, "text" => 0, "tsquery" => 0, "tsvector" => 0, "uuid" => 0, "xml" => 0),
|
||||||
lang('Binary') => array("bit" => 0, "bit varying" => 0, "bytea" => 0),
|
lang('Binary') => array("bit" => 0, "bit varying" => 0, "bytea" => 0),
|
||||||
lang('Network') => array("cidr" => 43, "inet" => 43, "macaddr" => 17, "txid_snapshot" => 0),
|
lang('Network') => array("cidr" => 43, "inet" => 43, "macaddr" => 17, "macaddr8" => 23, "txid_snapshot" => 0),
|
||||||
lang('Geometry') => array("box" => 0, "circle" => 0, "line" => 0, "lseg" => 0, "path" => 0, "point" => 0, "polygon" => 0),
|
lang('Geometry') => array("box" => 0, "circle" => 0, "line" => 0, "lseg" => 0, "path" => 0, "point" => 0, "polygon" => 0),
|
||||||
) as $key => $val) { //! can be retrieved from pg_type
|
) as $key => $val) { //! can be retrieved from pg_type
|
||||||
$types += $val;
|
$types += $val;
|
||||||
@@ -911,6 +959,7 @@ AND typelem = 0"
|
|||||||
"char|text" => "||",
|
"char|text" => "||",
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
'c_style_escapes' => true,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -140,7 +140,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
}
|
}
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach ($row as $key => $val) {
|
foreach ($row as $key => $val) {
|
||||||
$return[($key[0] == '"' ? idf_unescape($key) : $key)] = $val;
|
$return[idf_unescape($key)] = $val;
|
||||||
}
|
}
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -321,7 +321,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
"full_type" => $type,
|
"full_type" => $type,
|
||||||
"default" => (preg_match("~'(.*)'~", $default, $match) ? str_replace("''", "'", $match[1]) : ($default == "NULL" ? null : $default)),
|
"default" => (preg_match("~'(.*)'~", $default, $match) ? str_replace("''", "'", $match[1]) : ($default == "NULL" ? null : $default)),
|
||||||
"null" => !$row["notnull"],
|
"null" => !$row["notnull"],
|
||||||
"privileges" => array("select" => 1, "insert" => 1, "update" => 1),
|
"privileges" => array("select" => 1, "insert" => 1, "update" => 1, "where" => 1, "order" => 1),
|
||||||
"primary" => $row["pk"],
|
"primary" => $row["pk"],
|
||||||
);
|
);
|
||||||
if ($row["pk"]) {
|
if ($row["pk"]) {
|
||||||
@@ -676,7 +676,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
return array(
|
return array(
|
||||||
"Timing" => strtoupper($match[1]),
|
"Timing" => strtoupper($match[1]),
|
||||||
"Event" => strtoupper($match[2]) . ($of ? " OF" : ""),
|
"Event" => strtoupper($match[2]) . ($of ? " OF" : ""),
|
||||||
"Of" => ($of[0] == '`' || $of[0] == '"' ? idf_unescape($of) : $of),
|
"Of" => idf_unescape($of),
|
||||||
"Trigger" => $name,
|
"Trigger" => $name,
|
||||||
"Statement" => $match[4],
|
"Statement" => $match[4],
|
||||||
);
|
);
|
||||||
@@ -764,6 +764,17 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
function is_strict_mode() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function is_c_style_escapes() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
function show_status() {
|
function show_status() {
|
||||||
$return = array();
|
$return = array();
|
||||||
foreach (get_vals("PRAGMA compile_options") as $option) {
|
foreach (get_vals("PRAGMA compile_options") as $option) {
|
||||||
@@ -785,10 +796,11 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function driver_config() {
|
function driver_config() {
|
||||||
|
$types = array("integer" => 0, "real" => 0, "numeric" => 0, "text" => 0, "blob" => 0);
|
||||||
return array(
|
return array(
|
||||||
'possible_drivers' => array((isset($_GET["sqlite"]) ? "SQLite3" : "SQLite"), "PDO_SQLite"),
|
'possible_drivers' => array((isset($_GET["sqlite"]) ? "SQLite3" : "SQLite"), "PDO_SQLite"),
|
||||||
'jush' => "sqlite",
|
'jush' => "sqlite",
|
||||||
'types' => array("integer" => 0, "real" => 0, "numeric" => 0, "text" => 0, "blob" => 0),
|
'types' => $types,
|
||||||
'structured_types' => array_keys($types),
|
'structured_types' => array_keys($types),
|
||||||
'unsigned' => array(),
|
'unsigned' => array(),
|
||||||
'operators' => array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL", "SQL"), // REGEXP can be user defined function
|
'operators' => array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL", "SQL"), // REGEXP can be user defined function
|
||||||
|
@@ -147,16 +147,14 @@ if ($jush == "sql") { //! use insertUpdate() in all drivers
|
|||||||
}
|
}
|
||||||
parse_str($_COOKIE["adminer_export"], $row);
|
parse_str($_COOKIE["adminer_export"], $row);
|
||||||
if (!$row) {
|
if (!$row) {
|
||||||
$row = array("output" => "text", "format" => "sql", "db_style" => (DB != "" ? "" : "CREATE"), "table_style" => "DROP+CREATE", "data_style" => "INSERT");
|
$row = array("output" => "file", "format" => "sql", "db_style" => (DB != "" ? "" : "CREATE"), "table_style" => "DROP+CREATE", "data_style" => "INSERT");
|
||||||
}
|
}
|
||||||
if (!isset($row["events"])) { // backwards compatibility
|
if (!isset($row["events"])) { // backwards compatibility
|
||||||
$row["routines"] = $row["events"] = ($_GET["dump"] == "");
|
$row["routines"] = $row["events"] = ($_GET["dump"] == "");
|
||||||
$row["triggers"] = $row["table_style"];
|
$row["triggers"] = $row["table_style"];
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "<tr><th>" . lang('Output') . "<td>" . html_select("output", $adminer->dumpOutput(), $row["output"], 0) . "\n"; // 0 - radio
|
echo "<tr><th>" . lang('Format') . "<td>" . html_select("format", $adminer->dumpFormat(), $row["format"], false) . "\n"; // false = radio
|
||||||
|
|
||||||
echo "<tr><th>" . lang('Format') . "<td>" . html_select("format", $adminer->dumpFormat(), $row["format"], 0) . "\n"; // 0 - radio
|
|
||||||
|
|
||||||
echo ($jush == "sqlite" ? "" : "<tr><th>" . lang('Database') . "<td>" . html_select('db_style', $db_style, $row["db_style"])
|
echo ($jush == "sqlite" ? "" : "<tr><th>" . lang('Database') . "<td>" . html_select('db_style', $db_style, $row["db_style"])
|
||||||
. (support("routine") ? checkbox("routines", 1, $row["routines"], lang('Routines')) : "")
|
. (support("routine") ? checkbox("routines", 1, $row["routines"], lang('Routines')) : "")
|
||||||
@@ -169,6 +167,9 @@ echo "<tr><th>" . lang('Tables') . "<td>" . html_select('table_style', $table_st
|
|||||||
;
|
;
|
||||||
|
|
||||||
echo "<tr><th>" . lang('Data') . "<td>" . html_select('data_style', $data_style, $row["data_style"]);
|
echo "<tr><th>" . lang('Data') . "<td>" . html_select('data_style', $data_style, $row["data_style"]);
|
||||||
|
|
||||||
|
echo "<tr><th>" . lang('Output') . "<td>" . html_select("output", $adminer->dumpOutput(), $row["output"], false) . "\n"; // false = radio
|
||||||
|
|
||||||
?>
|
?>
|
||||||
</table>
|
</table>
|
||||||
<p><input type="submit" value="<?php echo lang('Export'); ?>">
|
<p><input type="submit" value="<?php echo lang('Export'); ?>">
|
||||||
|
13
adminer/elastic.php
Normal file
13
adminer/elastic.php
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
function adminer_object() {
|
||||||
|
include_once "../plugins/plugin.php";
|
||||||
|
include_once "../plugins/login-password-less.php";
|
||||||
|
include_once "../plugins/drivers/elastic.php";
|
||||||
|
include_once "../plugins/drivers/elastic5.php";
|
||||||
|
return new AdminerPlugin([
|
||||||
|
// TODO: inline the result of password_hash() so that the password is not visible in source codes
|
||||||
|
new AdminerLoginPasswordLess(password_hash("YOUR_PASSWORD_HERE", PASSWORD_DEFAULT)),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
include "./index.php";
|
@@ -6,13 +6,13 @@ if ($_GET["file"] == "favicon.ico") {
|
|||||||
echo lzw_decompress(compile_file('../adminer/static/favicon.ico', 'lzw_compress'));
|
echo lzw_decompress(compile_file('../adminer/static/favicon.ico', 'lzw_compress'));
|
||||||
} elseif ($_GET["file"] == "default.css") {
|
} elseif ($_GET["file"] == "default.css") {
|
||||||
header("Content-Type: text/css; charset=utf-8");
|
header("Content-Type: text/css; charset=utf-8");
|
||||||
echo lzw_decompress(compile_file('../adminer/static/default.css;../externals/jush/jush.css', 'minify_css'));
|
echo lzw_decompress(compile_file('../adminer/static/default.css;../vendor/vrana/jush/jush.css', 'minify_css'));
|
||||||
} elseif ($_GET["file"] == "functions.js") {
|
} elseif ($_GET["file"] == "functions.js") {
|
||||||
header("Content-Type: text/javascript; charset=utf-8");
|
header("Content-Type: text/javascript; charset=utf-8");
|
||||||
echo lzw_decompress(compile_file('../adminer/static/functions.js;static/editing.js', 'minify_js'));
|
echo lzw_decompress(compile_file('../adminer/static/functions.js;static/editing.js', 'minify_js'));
|
||||||
} elseif ($_GET["file"] == "jush.js") {
|
} elseif ($_GET["file"] == "jush.js") {
|
||||||
header("Content-Type: text/javascript; charset=utf-8");
|
header("Content-Type: text/javascript; charset=utf-8");
|
||||||
echo lzw_decompress(compile_file('../externals/jush/modules/jush.js;../externals/jush/modules/jush-textarea.js;../externals/jush/modules/jush-txt.js;../externals/jush/modules/jush-js.js;../externals/jush/modules/jush-sql.js;../externals/jush/modules/jush-pgsql.js;../externals/jush/modules/jush-sqlite.js;../externals/jush/modules/jush-mssql.js;../externals/jush/modules/jush-oracle.js;../externals/jush/modules/jush-simpledb.js', 'minify_js'));
|
echo lzw_decompress(compile_file('../vendor/vrana/jush/modules/jush.js;../vendor/vrana/jush/modules/jush-textarea.js;../vendor/vrana/jush/modules/jush-txt.js;../vendor/vrana/jush/modules/jush-js.js;../vendor/vrana/jush/modules/jush-sql.js;../vendor/vrana/jush/modules/jush-pgsql.js;../vendor/vrana/jush/modules/jush-sqlite.js;../vendor/vrana/jush/modules/jush-mssql.js;../vendor/vrana/jush/modules/jush-oracle.js;../vendor/vrana/jush/modules/jush-simpledb.js', 'minify_js'));
|
||||||
} else {
|
} else {
|
||||||
header("Content-Type: image/gif");
|
header("Content-Type: image/gif");
|
||||||
switch ($_GET["file"]) {
|
switch ($_GET["file"]) {
|
||||||
|
@@ -25,12 +25,16 @@ class Adminer {
|
|||||||
function connectSsl() {
|
function connectSsl() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get key used for permanent login
|
/**
|
||||||
* @param bool
|
* Gets a private key used for permanent login.
|
||||||
* @return string cryptic string which gets combined with password or false in case of an error
|
*
|
||||||
|
* @param bool $create
|
||||||
|
*
|
||||||
|
* @return string|false Cryptic string which gets combined with password or false in case of an error.
|
||||||
|
* @throws \Random\RandomException
|
||||||
*/
|
*/
|
||||||
function permanentLogin($create = false) {
|
function permanentLogin($create = false) {
|
||||||
return password_file($create);
|
return get_private_key($create);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Return key used to group brute force attacks; behind a reverse proxy, you want to return the last part of X-Forwarded-For
|
/** Return key used to group brute force attacks; behind a reverse proxy, you want to return the last part of X-Forwarded-For
|
||||||
@@ -96,7 +100,7 @@ class Adminer {
|
|||||||
*/
|
*/
|
||||||
function head() {
|
function head() {
|
||||||
?>
|
?>
|
||||||
<link rel="stylesheet" type="text/css" href="../externals/jush/jush.css">
|
<link rel="stylesheet" type="text/css" href="../vendor/vrana/jush/jush.css">
|
||||||
<?php
|
<?php
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -231,17 +235,25 @@ class Adminer {
|
|||||||
*/
|
*/
|
||||||
function selectQuery($query, $start, $failed = false) {
|
function selectQuery($query, $start, $failed = false) {
|
||||||
global $jush, $driver;
|
global $jush, $driver;
|
||||||
$return = "</p>\n"; // required for IE9 inline edit
|
|
||||||
|
$supportSql = support("sql");
|
||||||
|
|
||||||
|
$result = "<p>"
|
||||||
|
. "<code class='jush-$jush'>" . h(str_replace("\n", " ", $query)) . "</code> "
|
||||||
|
. "<span class='time'>(" . format_time($start) . ")</span>"
|
||||||
|
. ($supportSql ? " <a href='" . h(ME) . "sql=" . urlencode($query) . "'>" . lang('Edit') . "</a>" : "");
|
||||||
|
|
||||||
if (!$failed && ($warnings = $driver->warnings())) {
|
if (!$failed && ($warnings = $driver->warnings())) {
|
||||||
$id = "warnings";
|
$id = "warnings";
|
||||||
$return = ", <a href='#$id'>" . lang('Warnings') . "</a>" . script("qsl('a').onclick = partial(toggle, '$id');", "")
|
$result = ($supportSql ? "," : "")
|
||||||
. "$return<div id='$id' class='hidden'>\n$warnings</div>\n"
|
. " <a href='#$id'>" . lang('Warnings') . "</a>" . script("qsl('a').onclick = partial(toggle, '$id');", "")
|
||||||
;
|
. "</p>\n"
|
||||||
|
. "<div id='$id' class='hidden'>\n$warnings</div>\n";
|
||||||
|
} else {
|
||||||
|
$result .= "</p>\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>" : "")
|
return $result;
|
||||||
. $return
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Query printed in SQL command before execution
|
/** Query printed in SQL command before execution
|
||||||
@@ -293,7 +305,7 @@ class Adminer {
|
|||||||
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) ? target_blank() : "") . ">$return</a>" : $return);
|
return ($link ? "<a href='" . h($link) . "'" . (is_web_url($link) ? target_blank() : "") . ">$return</a>" : $return);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Value conversion used in select and edit
|
/** Value conversion used in select and edit
|
||||||
@@ -529,49 +541,60 @@ class Adminer {
|
|||||||
* @return array expressions to join by AND
|
* @return array expressions to join by AND
|
||||||
*/
|
*/
|
||||||
function selectSearchProcess($fields, $indexes) {
|
function selectSearchProcess($fields, $indexes) {
|
||||||
global $connection, $driver;
|
global $driver;
|
||||||
$return = array();
|
|
||||||
|
$return = [];
|
||||||
|
|
||||||
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 $key => $val) {
|
|
||||||
if ("$val[col]$val[val]" != "" && in_array($val["op"], $this->operators)) {
|
foreach ((array) $_GET["where"] as $where) {
|
||||||
|
$col = $where["col"];
|
||||||
|
$op = $where["op"];
|
||||||
|
$val = $where["val"];
|
||||||
|
|
||||||
|
if ("$col$val" != "" && in_array($op, $this->operators)) {
|
||||||
$prefix = "";
|
$prefix = "";
|
||||||
$cond = " $val[op]";
|
$cond = " $op";
|
||||||
if (preg_match('~IN$~', $val["op"])) {
|
|
||||||
$in = process_length($val["val"]);
|
if (preg_match('~IN$~', $op)) {
|
||||||
|
$in = process_length($val);
|
||||||
$cond .= " " . ($in != "" ? $in : "(NULL)");
|
$cond .= " " . ($in != "" ? $in : "(NULL)");
|
||||||
} elseif ($val["op"] == "SQL") {
|
} elseif ($op == "SQL") {
|
||||||
$cond = " $val[val]"; // SQL injection
|
$cond = " $val"; // SQL injection
|
||||||
} elseif ($val["op"] == "LIKE %%") {
|
} elseif ($op == "LIKE %%") {
|
||||||
$cond = " LIKE " . $this->processInput($fields[$val["col"]], "%$val[val]%");
|
$cond = " LIKE " . $this->processInput($fields[$col], "%$val%");
|
||||||
} elseif ($val["op"] == "ILIKE %%") {
|
} elseif ($op == "ILIKE %%") {
|
||||||
$cond = " ILIKE " . $this->processInput($fields[$val["col"]], "%$val[val]%");
|
$cond = " ILIKE " . $this->processInput($fields[$col], "%$val%");
|
||||||
} elseif ($val["op"] == "FIND_IN_SET") {
|
} elseif ($op == "FIND_IN_SET") {
|
||||||
$prefix = "$val[op](" . q($val["val"]) . ", ";
|
$prefix = "$op(" . q($val) . ", ";
|
||||||
$cond = ")";
|
$cond = ")";
|
||||||
} elseif (!preg_match('~NULL$~', $val["op"])) {
|
} elseif (!preg_match('~NULL$~', $op)) {
|
||||||
$cond .= " " . $this->processInput($fields[$val["col"]], $val["val"]);
|
$cond .= " " . $this->processInput($fields[$col], $val);
|
||||||
}
|
}
|
||||||
if ($val["col"] != "") {
|
|
||||||
$return[] = $prefix . $driver->convertSearch(idf_escape($val["col"]), $val, $fields[$val["col"]]) . $cond;
|
if ($col != "") {
|
||||||
|
$return[] = $prefix . $driver->convertSearch(idf_escape($col), $where, $fields[$col]) . $cond;
|
||||||
} else {
|
} else {
|
||||||
// find anywhere
|
// find anywhere
|
||||||
$cols = array();
|
$cols = array();
|
||||||
foreach ($fields as $name => $field) {
|
foreach ($fields as $name => $field) {
|
||||||
if ((preg_match('~^[-\d.' . (preg_match('~IN$~', $val["op"]) ? ',' : '') . ']+$~', $val["val"]) || !preg_match('~' . number_type() . '|bit~', $field["type"]))
|
if (isset($field["privileges"]["where"])
|
||||||
&& (!preg_match("~[\x80-\xFF]~", $val["val"]) || preg_match('~char|text|enum|set~', $field["type"]))
|
&& (preg_match('~^[-\d.' . (preg_match('~IN$~', $op) ? ',' : '') . ']+$~', $val) || !preg_match('~' . number_type() . '|bit~', $field["type"]))
|
||||||
&& (!preg_match('~date|timestamp~', $field["type"]) || preg_match('~^\d+-\d+-\d+~', $val["val"]))
|
&& (!preg_match("~[\x80-\xFF]~", $val) || preg_match('~char|text|enum|set~', $field["type"]))
|
||||||
|
&& (!preg_match('~date|timestamp~', $field["type"]) || preg_match('~^\d+-\d+-\d+~', $val))
|
||||||
) {
|
) {
|
||||||
$cols[] = $prefix . $driver->convertSearch(idf_escape($name), $val, $field) . $cond;
|
$cols[] = $prefix . $driver->convertSearch(idf_escape($name), $where, $field) . $cond;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$return[] = ($cols ? "(" . implode(" OR ", $cols) . ")" : "1 = 0");
|
$return[] = ($cols ? "(" . implode(" OR ", $cols) . ")" : "1 = 0");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -754,10 +777,11 @@ class Adminer {
|
|||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
function dumpOutput() {
|
function dumpOutput() {
|
||||||
$return = array('text' => lang('open'), 'file' => lang('save'));
|
$return = array('file' => lang('save'), 'text' => lang('open'));
|
||||||
if (function_exists('gzencode')) {
|
if (function_exists('gzencode')) {
|
||||||
$return['gz'] = 'gzip';
|
$return['gz'] = 'gzip';
|
||||||
}
|
}
|
||||||
|
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -831,6 +855,7 @@ class Adminer {
|
|||||||
$insert = "";
|
$insert = "";
|
||||||
$buffer = "";
|
$buffer = "";
|
||||||
$keys = array();
|
$keys = array();
|
||||||
|
$generatedKeys = array();
|
||||||
$suffix = "";
|
$suffix = "";
|
||||||
$fetch_function = ($table != '' ? 'fetch_assoc' : 'fetch_row');
|
$fetch_function = ($table != '' ? 'fetch_assoc' : 'fetch_row');
|
||||||
while ($row = $result->$fetch_function()) {
|
while ($row = $result->$fetch_function()) {
|
||||||
@@ -838,6 +863,10 @@ class Adminer {
|
|||||||
$values = array();
|
$values = array();
|
||||||
foreach ($row as $val) {
|
foreach ($row as $val) {
|
||||||
$field = $result->fetch_field();
|
$field = $result->fetch_field();
|
||||||
|
if (!empty($fields[$field->name]['generated'])) {
|
||||||
|
$generatedKeys[$field->name] = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
$keys[] = $field->name;
|
$keys[] = $field->name;
|
||||||
$key = idf_escape($field->name);
|
$key = idf_escape($field->name);
|
||||||
$values[] = "$key = VALUES($key)";
|
$values[] = "$key = VALUES($key)";
|
||||||
@@ -855,6 +884,10 @@ class Adminer {
|
|||||||
$insert = "INSERT INTO " . table($table) . " (" . implode(", ", array_map('idf_escape', $keys)) . ") VALUES";
|
$insert = "INSERT INTO " . table($table) . " (" . implode(", ", array_map('idf_escape', $keys)) . ") VALUES";
|
||||||
}
|
}
|
||||||
foreach ($row as $key => $val) {
|
foreach ($row as $key => $val) {
|
||||||
|
if (isset($generatedKeys[$key])) {
|
||||||
|
unset($row[$key]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
$field = $fields[$key];
|
$field = $fields[$key];
|
||||||
$row[$key] = ($val !== null
|
$row[$key] = ($val !== null
|
||||||
? unconvert_field($field, preg_match(number_type(), $field["type"]) && !preg_match('~\[~', $field["full_type"]) && is_numeric($val) ? $val : q(($val === false ? 0 : $val)))
|
? unconvert_field($field, preg_match(number_type(), $field["type"]) && !preg_match('~\[~', $field["full_type"]) && is_numeric($val) ? $val : q(($val === false ? 0 : $val)))
|
||||||
@@ -908,8 +941,10 @@ class Adminer {
|
|||||||
return $ext;
|
return $ext;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Set the path of the file for webserver load
|
/**
|
||||||
* @return string path of the sql dump file
|
* Gets the path of the file for webserver load.
|
||||||
|
*
|
||||||
|
* @return string Path of the sql import file.
|
||||||
*/
|
*/
|
||||||
function importServerPath() {
|
function importServerPath() {
|
||||||
return "adminer.sql";
|
return "adminer.sql";
|
||||||
@@ -934,8 +969,11 @@ class Adminer {
|
|||||||
global $VERSION, $jush, $drivers, $connection;
|
global $VERSION, $jush, $drivers, $connection;
|
||||||
?>
|
?>
|
||||||
<h1>
|
<h1>
|
||||||
<?php echo $this->name(); ?> <span class="version"><?php echo $VERSION; ?></span>
|
<?php echo $this->name(); ?>
|
||||||
|
<?php if ($missing != "auth"): ?>
|
||||||
|
<span class="version"><?php echo $VERSION; ?></span>
|
||||||
<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>
|
<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>
|
||||||
|
<?php endif; ?>
|
||||||
</h1>
|
</h1>
|
||||||
<?php
|
<?php
|
||||||
if ($missing == "auth") {
|
if ($missing == "auth") {
|
||||||
@@ -956,16 +994,17 @@ class Adminer {
|
|||||||
echo "<ul id='logins'>\n$output</ul>\n" . script("mixin(qs('#logins'), {onmouseover: menuOver, onmouseout: menuOut});");
|
echo "<ul id='logins'>\n$output</ul>\n" . script("mixin(qs('#logins'), {onmouseover: menuOver, onmouseout: menuOut});");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
$tables = array();
|
||||||
if ($_GET["ns"] !== "" && !$missing && DB != "") {
|
if ($_GET["ns"] !== "" && !$missing && DB != "") {
|
||||||
$connection->select_db(DB);
|
$connection->select_db(DB);
|
||||||
$tables = table_status('', true);
|
$tables = table_status('', true);
|
||||||
}
|
}
|
||||||
echo script_src("../externals/jush/modules/jush.js");
|
echo script_src("../vendor/vrana/jush/modules/jush.js");
|
||||||
echo script_src("../externals/jush/modules/jush-textarea.js");
|
echo script_src("../vendor/vrana/jush/modules/jush-textarea.js");
|
||||||
echo script_src("../externals/jush/modules/jush-txt.js");
|
echo script_src("../vendor/vrana/jush/modules/jush-txt.js");
|
||||||
echo script_src("../externals/jush/modules/jush-js.js");
|
echo script_src("../vendor/vrana/jush/modules/jush-js.js");
|
||||||
if (support("sql")) {
|
if (support("sql")) {
|
||||||
echo script_src("../externals/jush/modules/jush-$jush.js");
|
echo script_src("../vendor/vrana/jush/modules/jush-$jush.js");
|
||||||
?>
|
?>
|
||||||
<script<?php echo nonce(); ?>>
|
<script<?php echo nonce(); ?>>
|
||||||
<?php
|
<?php
|
||||||
@@ -1024,8 +1063,8 @@ bodyLoad('<?php echo (is_object($connection) ? preg_replace('~^(\d\.?\d).*~s', '
|
|||||||
: "<input name='db' value='" . h(DB) . "' autocapitalize='off'>\n"
|
: "<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 (support("scheme")) {
|
if (support("scheme")) {
|
||||||
|
if ($missing != "db" && DB != "" && $connection->select_db(DB)) {
|
||||||
echo "<br>" . lang('Schema') . ": <select name='ns'>" . optionlist(array("" => "") + $adminer->schemas(), $_GET["ns"]) . "</select>$db_events";
|
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"]);
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
$connection = '';
|
$connection = '';
|
||||||
|
|
||||||
$has_token = $_SESSION["token"];
|
$has_token = $_SESSION["token"];
|
||||||
@@ -15,13 +16,78 @@ if ($_COOKIE["adminer_permanent"]) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function add_invalid_login() {
|
function validate_server_input() {
|
||||||
global $adminer;
|
if (SERVER == "") {
|
||||||
$fp = file_open_lock(get_temp_dir() . "/adminer.invalid");
|
|
||||||
if (!$fp) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$invalids = unserialize(stream_get_contents($fp));
|
|
||||||
|
$parts = parse_url(SERVER);
|
||||||
|
if (!$parts) {
|
||||||
|
auth_error(lang('Invalid server or credentials.'));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check proper URL parts.
|
||||||
|
if (isset($parts['user']) || isset($parts['pass']) || isset($parts['query']) || isset($parts['fragment'])) {
|
||||||
|
auth_error(lang('Invalid server or credentials.'));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allow only HTTP/S scheme.
|
||||||
|
if (isset($parts['scheme']) && !preg_match('~^(https?)$~i', $parts['scheme'])) {
|
||||||
|
auth_error(lang('Invalid server or credentials.'));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Note that "localhost" and IP address without a scheme is parsed as a path.
|
||||||
|
$hostPath = (isset($parts['host']) ? $parts['host'] : '') . (isset($parts['path']) ? $parts['path'] : '');
|
||||||
|
|
||||||
|
// Validate host.
|
||||||
|
if (!is_server_host_valid($hostPath)) {
|
||||||
|
auth_error(lang('Invalid server or credentials.'));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check privileged ports.
|
||||||
|
if (isset($parts['port']) && ($parts['port'] < 1024 || $parts['port'] > 65535)) {
|
||||||
|
auth_error(lang('Connecting to privileged ports is not allowed.'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!function_exists('is_server_host_valid')) {
|
||||||
|
/**
|
||||||
|
* @param string $hostPath
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
function is_server_host_valid($hostPath)
|
||||||
|
{
|
||||||
|
return strpos($hostPath, '/') === false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $server
|
||||||
|
* @param string $username
|
||||||
|
* @param string $password
|
||||||
|
* @param string $defaultServer
|
||||||
|
* @param int|null $defaultPort
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function build_http_url($server, $username, $password, $defaultServer, $defaultPort = null) {
|
||||||
|
if (!preg_match('~^(https?://)?([^:]*)(:\d+)?$~', rtrim($server, '/'), $matches)) {
|
||||||
|
$this->error = lang('Invalid server or credentials.');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ($matches[1] ?: "http://") .
|
||||||
|
($username !== "" || $password !== "" ? "$username:$password@" : "") .
|
||||||
|
($matches[2] !== "" ? $matches[2] : $defaultServer) .
|
||||||
|
(isset($matches[3]) ? $matches[3] : ($defaultPort ? ":$defaultPort" : ""));
|
||||||
|
}
|
||||||
|
|
||||||
|
function add_invalid_login() {
|
||||||
|
global $adminer;
|
||||||
|
$file = open_file_with_lock(get_temp_dir() . "/adminer.invalid");
|
||||||
|
if (!$file) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$invalids = unserialize(stream_get_contents($file));
|
||||||
$time = time();
|
$time = time();
|
||||||
if ($invalids) {
|
if ($invalids) {
|
||||||
foreach ($invalids as $ip => $val) {
|
foreach ($invalids as $ip => $val) {
|
||||||
@@ -35,13 +101,16 @@ 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]++;
|
||||||
file_write_unlock($fp, serialize($invalids));
|
write_and_unlock_file($file, serialize($invalids));
|
||||||
}
|
}
|
||||||
|
|
||||||
function check_invalid_login() {
|
function check_invalid_login() {
|
||||||
global $adminer;
|
global $adminer;
|
||||||
$invalids = unserialize(@file_get_contents(get_temp_dir() . "/adminer.invalid")); // @ - may not exist
|
|
||||||
$invalid = $invalids[$adminer->bruteForceKey()];
|
$filename = get_temp_dir() . "/adminer.invalid";
|
||||||
|
$invalids = file_exists($filename) ? unserialize(file_get_contents($filename)) : [];
|
||||||
|
$invalid = ($invalids ? $invalids[$adminer->bruteForceKey()] : []);
|
||||||
|
|
||||||
$next_attempt = ($invalid[1] > 29 ? $invalid[0] - time() : 0); // allow 30 invalid attempts
|
$next_attempt = ($invalid[1] > 29 ? $invalid[0] - time() : 0); // allow 30 invalid attempts
|
||||||
if ($next_attempt > 0) { //! do the same with permanent login
|
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_error(lang('Too many unsuccessful logins, try again in %d minute(s).', ceil($next_attempt / 60)));
|
||||||
@@ -52,7 +121,7 @@ $auth = $_POST["auth"];
|
|||||||
if ($auth) {
|
if ($auth) {
|
||||||
session_regenerate_id(); // defense against session fixation
|
session_regenerate_id(); // defense against session fixation
|
||||||
$vendor = $auth["driver"];
|
$vendor = $auth["driver"];
|
||||||
$server = $auth["server"];
|
$server = trim($auth["server"]);
|
||||||
$username = $auth["username"];
|
$username = $auth["username"];
|
||||||
$password = (string) $auth["password"];
|
$password = (string) $auth["password"];
|
||||||
$db = $auth["db"];
|
$db = $auth["db"];
|
||||||
@@ -105,6 +174,7 @@ function unset_permanent() {
|
|||||||
/** Renders an error message and a login form
|
/** Renders an error message and a login form
|
||||||
* @param string plain text
|
* @param string plain text
|
||||||
* @return null exits
|
* @return null exits
|
||||||
|
* @throws \Random\RandomException
|
||||||
*/
|
*/
|
||||||
function auth_error($error) {
|
function auth_error($error) {
|
||||||
global $adminer, $has_token;
|
global $adminer, $has_token;
|
||||||
@@ -130,7 +200,7 @@ function auth_error($error) {
|
|||||||
$error = lang('Session support must be enabled.');
|
$error = lang('Session support must be enabled.');
|
||||||
}
|
}
|
||||||
$params = session_get_cookie_params();
|
$params = session_get_cookie_params();
|
||||||
cookie("adminer_key", ($_COOKIE["adminer_key"] ? $_COOKIE["adminer_key"] : rand_string()), $params["lifetime"]);
|
cookie("adminer_key", ($_COOKIE["adminer_key"] ?: get_random_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";
|
||||||
echo "<div>";
|
echo "<div>";
|
||||||
@@ -155,18 +225,16 @@ if (isset($_GET["username"]) && !class_exists("Min_DB")) {
|
|||||||
stop_session(true);
|
stop_session(true);
|
||||||
|
|
||||||
if (isset($_GET["username"]) && is_string(get_password())) {
|
if (isset($_GET["username"]) && is_string(get_password())) {
|
||||||
list($host, $port) = explode(":", SERVER, 2);
|
validate_server_input();
|
||||||
if (preg_match('~^\s*([-+]?\d+)~', $port, $match) && ($match[1] < 1024 || $match[1] > 65535)) { // is_numeric('80#') would still connect to port 80
|
|
||||||
auth_error(lang('Connecting to privileged ports is not allowed.'));
|
|
||||||
}
|
|
||||||
check_invalid_login();
|
check_invalid_login();
|
||||||
|
|
||||||
$connection = connect();
|
$connection = connect();
|
||||||
$driver = new Min_Driver($connection);
|
$driver = new Min_Driver($connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
$login = null;
|
$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) {
|
||||||
$error = (is_string($connection) ? h($connection) : (is_string($login) ? $login : lang('Invalid credentials.')));
|
$error = (is_string($connection) ? h($connection) : (is_string($login) ? $login : lang('Invalid server or credentials.')));
|
||||||
auth_error($error . (preg_match('~^ | $~', get_password()) ? '<br>' . lang('There is a space in the input password which might be the cause.') : ''));
|
auth_error($error . (preg_match('~^ | $~', get_password()) ? '<br>' . lang('There is a space in the input password which might be the cause.') : ''));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,11 +1,12 @@
|
|||||||
<?php
|
<?php
|
||||||
function adminer_errors($errno, $errstr) {
|
function adminer_errors($errno, $errstr) {
|
||||||
return !!preg_match('~^(Trying to access array offset on value of type null|Undefined array key)~', $errstr);
|
return (bool)preg_match('~^(Trying to access array offset on( value of type)? null|Undefined array key)~', $errstr);
|
||||||
}
|
}
|
||||||
|
|
||||||
error_reporting(6135); // errors and warnings
|
error_reporting(6135); // errors and warnings
|
||||||
set_error_handler('adminer_errors', 2); // 2 - E_WARNING
|
set_error_handler('adminer_errors', E_WARNING);
|
||||||
|
|
||||||
|
include "../adminer/include/debug.inc.php";
|
||||||
include "../adminer/include/coverage.inc.php";
|
include "../adminer/include/coverage.inc.php";
|
||||||
|
|
||||||
// disable filter.default
|
// disable filter.default
|
||||||
@@ -31,9 +32,9 @@ if (isset($_GET["file"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($_GET["script"] == "version") {
|
if ($_GET["script"] == "version") {
|
||||||
$fp = file_open_lock(get_temp_dir() . "/adminer.version");
|
$file = open_file_with_lock(get_temp_dir() . "/adminer.version");
|
||||||
if ($fp) {
|
if ($file) {
|
||||||
file_write_unlock($fp, serialize(array("signature" => $_POST["signature"], "version" => $_POST["version"])));
|
write_and_unlock_file($file, serialize(["signature" => $_POST["signature"], "version" => $_POST["version"]]));
|
||||||
}
|
}
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
@@ -81,7 +82,6 @@ include "../adminer/drivers/pgsql.inc.php";
|
|||||||
include "../adminer/drivers/oracle.inc.php";
|
include "../adminer/drivers/oracle.inc.php";
|
||||||
include "../adminer/drivers/mssql.inc.php";
|
include "../adminer/drivers/mssql.inc.php";
|
||||||
include "../adminer/drivers/mongo.inc.php";
|
include "../adminer/drivers/mongo.inc.php";
|
||||||
include "../adminer/drivers/elastic.inc.php";
|
|
||||||
include "./include/adminer.inc.php";
|
include "./include/adminer.inc.php";
|
||||||
$adminer = (function_exists('adminer_object') ? adminer_object() : new Adminer);
|
$adminer = (function_exists('adminer_object') ? adminer_object() : new Adminer);
|
||||||
include "../adminer/drivers/mysql.inc.php"; // must be included as last driver
|
include "../adminer/drivers/mysql.inc.php"; // must be included as last driver
|
||||||
|
@@ -89,7 +89,8 @@ if (!(DB != "" ? $connection->select_db(DB) : isset($_GET["sql"]) || isset($_GET
|
|||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (support("scheme") && DB != "" && $_GET["ns"] !== "") {
|
if (support("scheme")) {
|
||||||
|
if (DB != "" && $_GET["ns"] !== "") {
|
||||||
if (!isset($_GET["ns"])) {
|
if (!isset($_GET["ns"])) {
|
||||||
redirect(preg_replace('~ns=[^&]*&~', '', ME) . "ns=" . get_schema());
|
redirect(preg_replace('~ns=[^&]*&~', '', ME) . "ns=" . get_schema());
|
||||||
}
|
}
|
||||||
@@ -100,3 +101,4 @@ if (support("scheme") && DB != "" && $_GET["ns"] !== "") {
|
|||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
14
adminer/include/debug.inc.php
Normal file
14
adminer/include/debug.inc.php
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function dump($value)
|
||||||
|
{
|
||||||
|
echo "<pre>";
|
||||||
|
var_export($value);
|
||||||
|
echo "</pre>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
function dumpe($value)
|
||||||
|
{
|
||||||
|
dump($value);
|
||||||
|
exit;
|
||||||
|
}
|
@@ -142,14 +142,20 @@ function csp() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get a CSP nonce
|
/**
|
||||||
* @return string Base64 value
|
* Gets a CSP nonce.
|
||||||
|
*
|
||||||
|
* @return string Base64 value.
|
||||||
|
* @throws \Random\RandomException
|
||||||
*/
|
*/
|
||||||
function get_nonce() {
|
function get_nonce()
|
||||||
|
{
|
||||||
static $nonce;
|
static $nonce;
|
||||||
|
|
||||||
if (!$nonce) {
|
if (!$nonce) {
|
||||||
$nonce = base64_encode(rand_string());
|
$nonce = base64_encode(get_random_string(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $nonce;
|
return $nonce;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -11,6 +11,15 @@ function add_driver($id, $name) {
|
|||||||
$drivers[$id] = $name;
|
$drivers[$id] = $name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Get driver name
|
||||||
|
* @param string
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function get_driver($id) {
|
||||||
|
global $drivers;
|
||||||
|
return $drivers[$id];
|
||||||
|
}
|
||||||
|
|
||||||
/*abstract*/ class Min_SQL {
|
/*abstract*/ class Min_SQL {
|
||||||
var $_conn;
|
var $_conn;
|
||||||
|
|
||||||
@@ -138,10 +147,18 @@ function add_driver($id, $name) {
|
|||||||
* @param array
|
* @param array
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function convertSearch($idf, $val, $field) {
|
function convertSearch($idf, array $where, array $field) {
|
||||||
return $idf;
|
return $idf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Convert operator so it can be used in search
|
||||||
|
* @param string $operator
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function convertOperator($operator) {
|
||||||
|
return $operator;
|
||||||
|
}
|
||||||
|
|
||||||
/** Convert value returned by database to actual value
|
/** Convert value returned by database to actual value
|
||||||
* @param string
|
* @param string
|
||||||
* @param array
|
* @param array
|
||||||
|
@@ -21,11 +21,11 @@ function select($result, $connection2 = null, $orgtables = array(), $limit = 0)
|
|||||||
echo "<table cellspacing='0' class='nowrap'>\n";
|
echo "<table cellspacing='0' class='nowrap'>\n";
|
||||||
echo "<thead><tr>";
|
echo "<thead><tr>";
|
||||||
for ($j=0; $j < count($row); $j++) {
|
for ($j=0; $j < count($row); $j++) {
|
||||||
$field = $result->fetch_field();
|
$field = (array)$result->fetch_field();
|
||||||
$name = $field->name;
|
$name = $field["name"];
|
||||||
$orgtable = $field->orgtable;
|
$orgtable = $field["orgtable"];
|
||||||
$orgname = $field->orgname;
|
$orgname = $field["orgname"];
|
||||||
$return[$field->table] = $orgtable;
|
$return[$field["table"]] = $orgtable;
|
||||||
if ($orgtables && $jush == "sql") { // MySQL EXPLAIN
|
if ($orgtables && $jush == "sql") { // MySQL EXPLAIN
|
||||||
$links[$j] = ($name == "table" ? "table=" : ($name == "possible_keys" ? "indexes=" : null));
|
$links[$j] = ($name == "table" ? "table=" : ($name == "possible_keys" ? "indexes=" : null));
|
||||||
} elseif ($orgtable != "") {
|
} elseif ($orgtable != "") {
|
||||||
@@ -46,11 +46,11 @@ function select($result, $connection2 = null, $orgtables = array(), $limit = 0)
|
|||||||
$links[$j] = $orgtable;
|
$links[$j] = $orgtable;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($field->charsetnr == 63) { // 63 - binary
|
if ($field["charsetnr"] == 63) { // 63 - binary
|
||||||
$blobs[$j] = true;
|
$blobs[$j] = true;
|
||||||
}
|
}
|
||||||
$types[$j] = $field->type;
|
$types[$j] = $field["type"];
|
||||||
echo "<th" . ($orgtable != "" || $field->name != $orgname ? " title='" . h(($orgtable != "" ? "$orgtable." : "") . $orgname) . "'" : "") . ">" . h($name)
|
echo "<th" . ($orgtable != "" || $field["name"] != $orgname ? " title='" . h(($orgtable != "" ? "$orgtable." : "") . $orgname) . "'" : "") . ">" . h($name)
|
||||||
. ($orgtables ? doc_link(array(
|
. ($orgtables ? doc_link(array(
|
||||||
'sql' => "explain-output.html#explain_" . strtolower($name),
|
'sql' => "explain-output.html#explain_" . strtolower($name),
|
||||||
'mariadb' => "explain/#the-columns-in-explain-select",
|
'mariadb' => "explain/#the-columns-in-explain-select",
|
||||||
@@ -72,7 +72,7 @@ function select($result, $connection2 = null, $orgtables = array(), $limit = 0)
|
|||||||
$link .= "&where" . urlencode("[" . bracket_escape($col) . "]") . "=" . urlencode($row[$j]);
|
$link .= "&where" . urlencode("[" . bracket_escape($col) . "]") . "=" . urlencode($row[$j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} elseif (is_url($val)) {
|
} elseif (is_web_url($val)) {
|
||||||
$link = $val;
|
$link = $val;
|
||||||
}
|
}
|
||||||
if ($val === null) {
|
if ($val === null) {
|
||||||
@@ -86,7 +86,7 @@ function select($result, $connection2 = null, $orgtables = array(), $limit = 0)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($link) {
|
if ($link) {
|
||||||
$val = "<a href='" . h($link) . "'" . (is_url($link) ? target_blank() : '') . ">$val</a>";
|
$val = "<a href='" . h($link) . "'" . (is_web_url($link) ? target_blank() : '') . ">$val</a>";
|
||||||
}
|
}
|
||||||
echo "<td>$val";
|
echo "<td>$val";
|
||||||
}
|
}
|
||||||
@@ -151,7 +151,7 @@ function set_adminer_settings($settings) {
|
|||||||
*/
|
*/
|
||||||
function textarea($name, $value, $rows = 10, $cols = 80) {
|
function textarea($name, $value, $rows = 10, $cols = 80) {
|
||||||
global $jush;
|
global $jush;
|
||||||
echo "<textarea name='$name' rows='$rows' cols='$cols' class='sqlarea jush-$jush' spellcheck='false' wrap='off'>";
|
echo "<textarea name='" . h($name) . "' rows='$rows' cols='$cols' class='sqlarea jush-$jush' spellcheck='false' wrap='off'>";
|
||||||
if (is_array($value)) {
|
if (is_array($value)) {
|
||||||
foreach ($value as $val) { // not implode() to save memory
|
foreach ($value as $val) { // not implode() to save memory
|
||||||
echo h($val[0]) . "\n\n\n"; // $val == array($query, $time, $elapsed)
|
echo h($val[0]) . "\n\n\n"; // $val == array($query, $time, $elapsed)
|
||||||
@@ -221,12 +221,17 @@ 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) {
|
||||||
|
// MariaDB exports CURRENT_TIMESTAMP as a function.
|
||||||
|
if ($field["on_update"]) {
|
||||||
|
$field["on_update"] = str_ireplace("current_timestamp()", "CURRENT_TIMESTAMP", $field["on_update"]);
|
||||||
|
}
|
||||||
|
|
||||||
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
|
||||||
default_value($field),
|
default_value($field),
|
||||||
(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),
|
||||||
);
|
);
|
||||||
@@ -238,7 +243,18 @@ function process_field($field, $type_field) {
|
|||||||
*/
|
*/
|
||||||
function default_value($field) {
|
function default_value($field) {
|
||||||
$default = $field["default"];
|
$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));
|
if ($default === null) return "";
|
||||||
|
|
||||||
|
if (stripos($default, "GENERATED ") === 0) {
|
||||||
|
return " $default";
|
||||||
|
}
|
||||||
|
|
||||||
|
// MariaDB exports CURRENT_TIMESTAMP as a function.
|
||||||
|
$default = str_ireplace("current_timestamp()", "CURRENT_TIMESTAMP", $default);
|
||||||
|
|
||||||
|
$quote = preg_match('~char|binary|text|enum|set~', $field["type"]) || preg_match('~^(?![a-z])~i', $default);
|
||||||
|
|
||||||
|
return " DEFAULT " . ($quote ? q($default) : $default);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get type class to use in CSS
|
/** Get type class to use in CSS
|
||||||
@@ -279,11 +295,11 @@ function edit_fields($fields, $collations, $type = "TABLE", $foreign_keys = arra
|
|||||||
<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=""><abbr id="label-ai" title="<?php echo lang('Auto Increment'); ?>">AI</abbr><?php echo doc_link(array(
|
||||||
'sql' => "example-auto-increment.html",
|
'sql' => "example-auto-increment.html",
|
||||||
'mariadb' => "auto_increment/",
|
'mariadb' => "auto_increment/",
|
||||||
'sqlite' => "autoinc.html",
|
'sqlite' => "autoinc.html",
|
||||||
'pgsql' => "datatype.html#DATATYPE-SERIAL",
|
'pgsql' => "datatype-numeric.html#DATATYPE-SERIAL",
|
||||||
'mssql' => "ms186775.aspx",
|
'mssql' => "ms186775.aspx",
|
||||||
)); ?>
|
)); ?>
|
||||||
<td id="label-default"<?php echo $default_class; ?>><?php echo lang('Default value'); ?>
|
<td id="label-default"<?php echo $default_class; ?>><?php echo lang('Default value'); ?>
|
||||||
@@ -368,26 +384,44 @@ function normalize_enum($match) {
|
|||||||
return "'" . str_replace("'", "''", addcslashes(stripcslashes(str_replace($match[0][0] . $match[0][0], $match[0][0], substr($match[0], 1, -1))), '\\')) . "'";
|
return "'" . str_replace("'", "''", addcslashes(stripcslashes(str_replace($match[0][0] . $match[0][0], $match[0][0], substr($match[0], 1, -1))), '\\')) . "'";
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Issue grant or revoke commands
|
/**
|
||||||
* @param string GRANT or REVOKE
|
* Issue grant or revoke commands.
|
||||||
* @param array
|
*
|
||||||
* @param string
|
* @param bool $grant
|
||||||
* @param string
|
* @param array $privileges
|
||||||
|
* @param string $columns
|
||||||
|
* @param string $on
|
||||||
|
* @param string $user
|
||||||
|
*
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function grant($grant, $privileges, $columns, $on) {
|
function grant($grant, array $privileges, $columns, $on, $user) {
|
||||||
if (!$privileges) {
|
if (!$privileges) return true;
|
||||||
return true;
|
|
||||||
|
if ($privileges == ["ALL PRIVILEGES", "GRANT OPTION"]) {
|
||||||
|
if ($grant) {
|
||||||
|
return (bool) queries("GRANT ALL PRIVILEGES ON $on TO $user WITH GRANT OPTION");
|
||||||
|
} else {
|
||||||
|
return queries("REVOKE ALL PRIVILEGES ON $on FROM $user") &&
|
||||||
|
queries("REVOKE GRANT OPTION ON $on FROM $user");
|
||||||
}
|
}
|
||||||
if ($privileges == array("ALL PRIVILEGES", "GRANT OPTION")) {
|
}
|
||||||
// can't be granted or revoked together
|
|
||||||
return ($grant == "GRANT"
|
if ($privileges == ["GRANT OPTION", "PROXY"]) {
|
||||||
? queries("$grant ALL PRIVILEGES$on WITH GRANT OPTION")
|
if ($grant) {
|
||||||
: queries("$grant ALL PRIVILEGES$on") && queries("$grant GRANT OPTION$on")
|
return (bool) queries("GRANT PROXY ON $on TO $user WITH GRANT OPTION");
|
||||||
|
} else {
|
||||||
|
return (bool) queries("REVOKE PROXY ON $on FROM $user");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (bool) queries(
|
||||||
|
($grant ? "GRANT " : "REVOKE ") .
|
||||||
|
preg_replace('~(GRANT OPTION)\([^)]*\)~', '$1', implode("$columns, ", $privileges) . $columns) .
|
||||||
|
" ON $on " .
|
||||||
|
($grant ? "TO " : "FROM ") . $user
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return queries("$grant " . preg_replace('~(GRANT OPTION)\([^)]*\)~', '\1', implode("$columns, ", $privileges) . $columns) . $on);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Drop old object and create a new one
|
/** Drop old object and create a new one
|
||||||
* @param string drop old object query
|
* @param string drop old object query
|
||||||
@@ -430,7 +464,7 @@ function drop_create($drop, $create, $drop_created, $test, $drop_test, $location
|
|||||||
*/
|
*/
|
||||||
function create_trigger($on, $row) {
|
function create_trigger($on, $row) {
|
||||||
global $jush;
|
global $jush;
|
||||||
$timing_event = " $row[Timing] $row[Event]" . ($row["Event"] == "UPDATE OF" ? " " . idf_escape($row["Of"]) : "");
|
$timing_event = " $row[Timing] $row[Event]" . (preg_match('~ OF~', $row["Event"]) ? " $row[Of]" : ""); // SQL injection
|
||||||
return "CREATE TRIGGER "
|
return "CREATE TRIGGER "
|
||||||
. idf_escape($row["Trigger"])
|
. idf_escape($row["Trigger"])
|
||||||
. ($jush == "mssql" ? $on . $timing_event : $timing_event . $on)
|
. ($jush == "mssql" ? $on . $timing_event : $timing_event . $on)
|
||||||
@@ -515,9 +549,9 @@ function tar_file($filename, $tmp_file) {
|
|||||||
function ini_bytes($ini) {
|
function ini_bytes($ini) {
|
||||||
$val = ini_get($ini);
|
$val = ini_get($ini);
|
||||||
switch (strtolower(substr($val, -1))) {
|
switch (strtolower(substr($val, -1))) {
|
||||||
case 'g': $val *= 1024; // no break
|
case 'g': $val = (int)$val * 1024; // no break
|
||||||
case 'm': $val *= 1024; // no break
|
case 'm': $val = (int)$val * 1024; // no break
|
||||||
case 'k': $val *= 1024;
|
case 'k': $val = (int)$val * 1024;
|
||||||
}
|
}
|
||||||
return $val;
|
return $val;
|
||||||
}
|
}
|
||||||
@@ -542,7 +576,7 @@ function doc_link($paths, $text = "<sup>?</sup>") {
|
|||||||
$urls['sql'] = "https://mariadb.com/kb/en/library/";
|
$urls['sql'] = "https://mariadb.com/kb/en/library/";
|
||||||
$paths['sql'] = (isset($paths['mariadb']) ? $paths['mariadb'] : str_replace(".html", "/", $paths['sql']));
|
$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>" : "");
|
return ($paths[$jush] ? "<a href='" . h($urls[$jush] . $paths[$jush]) . "'" . target_blank() . ">$text</a>" : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Wrap gzencode() for usage in ob_start()
|
/** Wrap gzencode() for usage in ob_start()
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/** Get database connection
|
/** Get database connection
|
||||||
* @return Min_DB
|
* @return Min_DB
|
||||||
*/
|
*/
|
||||||
@@ -29,6 +30,9 @@ function version() {
|
|||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function idf_unescape($idf) {
|
function idf_unescape($idf) {
|
||||||
|
if (!preg_match('~^[`\'"[]~', $idf)) {
|
||||||
|
return $idf;
|
||||||
|
}
|
||||||
$last = substr($idf, -1);
|
$last = substr($idf, -1);
|
||||||
return str_replace($last . $last, $last, substr($idf, 1, -1));
|
return str_replace($last . $last, $last, substr($idf, 1, -1));
|
||||||
}
|
}
|
||||||
@@ -154,14 +158,6 @@ function h($string) {
|
|||||||
return str_replace("\0", "�", htmlspecialchars($string, ENT_QUOTES, 'utf-8'));
|
return str_replace("\0", "�", htmlspecialchars($string, ENT_QUOTES, 'utf-8'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Convert \n to <br>
|
|
||||||
* @param string
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function nl_br($string) {
|
|
||||||
return str_replace("\n", "<br>", $string); // nl2br() uses XHTML before PHP 5.3
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Generate HTML checkbox
|
/** Generate HTML checkbox
|
||||||
* @param string
|
* @param string
|
||||||
* @param string
|
* @param string
|
||||||
@@ -210,7 +206,7 @@ function optionlist($options, $selected = null, $use_keys = false) {
|
|||||||
* @param string
|
* @param string
|
||||||
* @param array
|
* @param array
|
||||||
* @param string
|
* @param string
|
||||||
* @param string true for no onchange, false for radio
|
* @param string|bool true for no onchange, false for radio
|
||||||
* @param string
|
* @param string
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
@@ -474,24 +470,36 @@ function escape_key($key) {
|
|||||||
*/
|
*/
|
||||||
function where($where, $fields = array()) {
|
function where($where, $fields = array()) {
|
||||||
global $connection, $jush;
|
global $connection, $jush;
|
||||||
$return = array();
|
|
||||||
|
$conditions = [];
|
||||||
|
|
||||||
foreach ((array) $where["where"] as $key => $val) {
|
foreach ((array) $where["where"] as $key => $val) {
|
||||||
$key = bracket_escape($key, 1); // 1 - back
|
$key = bracket_escape($key, 1); // 1 - back
|
||||||
$column = escape_key($key);
|
$column = escape_key($key);
|
||||||
$return[] = $column
|
|
||||||
. ($jush == "sql" && is_numeric($val) && preg_match('~\.~', $val) ? " LIKE " . q($val) // LIKE because of floats but slow with ints
|
if ($jush == "sql" && $fields[$key]["type"] == "json") {
|
||||||
: ($jush == "mssql" ? " LIKE " . q(preg_replace('~[_%[]~', '[\0]', $val)) // LIKE because of text
|
$conditions[] = "$column = CAST(" . q($val) . " AS JSON)";
|
||||||
: " = " . unconvert_field($fields[$key], q($val))
|
} elseif ($jush == "sql" && is_numeric($val) && strpos($val, ".") !== false) {
|
||||||
))
|
// LIKE because of floats but slow with ints.
|
||||||
; //! enum and set
|
$conditions[] = "$column LIKE " . q($val);
|
||||||
if ($jush == "sql" && preg_match('~char|text~', $fields[$key]["type"]) && preg_match("~[^ -@]~", $val)) { // not just [a-z] to catch non-ASCII characters
|
} elseif ($jush == "mssql") {
|
||||||
$return[] = "$column = " . q($val) . " COLLATE " . charset($connection) . "_bin";
|
// LIKE because of text.
|
||||||
|
$conditions[] = "$column LIKE " . q(preg_replace('~[_%[]~', '[\0]', $val));
|
||||||
|
} else {
|
||||||
|
$conditions[] = "$column = " . unconvert_field($fields[$key], q($val));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Not just [a-z] to catch non-ASCII characters.
|
||||||
|
if ($jush == "sql" && preg_match('~char|text~', $fields[$key]["type"]) && preg_match("~[^ -@]~", $val)) {
|
||||||
|
$conditions[] = "$column = " . q($val) . " COLLATE " . charset($connection) . "_bin";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ((array) $where["null"] as $key) {
|
foreach ((array) $where["null"] as $key) {
|
||||||
$return[] = escape_key($key) . " IS NULL";
|
$conditions[] = escape_key($key) . " IS NULL";
|
||||||
}
|
}
|
||||||
return implode(" AND ", $return);
|
|
||||||
|
return implode(" AND ", $conditions);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Create SQL condition from query string
|
/** Create SQL condition from query string
|
||||||
@@ -911,13 +919,16 @@ function column_foreign_keys($table) {
|
|||||||
*/
|
*/
|
||||||
function enum_input($type, $attrs, $field, $value, $empty = null) {
|
function enum_input($type, $attrs, $field, $value, $empty = null) {
|
||||||
global $adminer;
|
global $adminer;
|
||||||
|
|
||||||
|
$return = ($empty !== null && !is_strict_mode() ? "<label><input type='$type'$attrs value='$empty'" . ((is_array($value) ? in_array($empty, $value) : $value === 0) ? " checked" : "") . "><i>" . lang('empty') . "</i></label>" : "");
|
||||||
|
|
||||||
preg_match_all("~'((?:[^']|'')*)'~", $field["length"], $matches);
|
preg_match_all("~'((?:[^']|'')*)'~", $field["length"], $matches);
|
||||||
$return = ($empty !== null ? "<label><input type='$type'$attrs value='$empty'" . ((is_array($value) ? in_array($empty, $value) : $value === 0) ? " checked" : "") . "><i>" . lang('empty') . "</i></label>" : "");
|
|
||||||
foreach ($matches[1] as $i => $val) {
|
foreach ($matches[1] as $i => $val) {
|
||||||
$val = stripcslashes(str_replace("''", "'", $val));
|
$val = stripcslashes(str_replace("''", "'", $val));
|
||||||
$checked = (is_int($value) ? $value == $i+1 : (is_array($value) ? in_array($i+1, $value) : $value === $val));
|
$checked = (is_int($value) ? $value == $i+1 : (is_array($value) ? in_array($i+1, $value) : $value === $val));
|
||||||
$return .= " <label><input type='$type'$attrs value='" . ($i+1) . "'" . ($checked ? ' checked' : '') . '>' . h($adminer->editVal($val, $field)) . '</label>';
|
$return .= " <label><input type='$type'$attrs value='" . ($i+1) . "'" . ($checked ? ' checked' : '') . '>' . h($adminer->editVal($val, $field)) . '</label>';
|
||||||
}
|
}
|
||||||
|
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -929,14 +940,15 @@ function enum_input($type, $attrs, $field, $value, $empty = null) {
|
|||||||
*/
|
*/
|
||||||
function input($field, $value, $function) {
|
function input($field, $value, $function) {
|
||||||
global $types, $adminer, $jush;
|
global $types, $adminer, $jush;
|
||||||
|
|
||||||
$name = h(bracket_escape($field["field"]));
|
$name = h(bracket_escape($field["field"]));
|
||||||
echo "<td class='function'>";
|
|
||||||
if (is_array($value) && !$function) {
|
if (is_array($value) && !$function) {
|
||||||
$args = array($value);
|
$args = array($value);
|
||||||
if (version_compare(PHP_VERSION, 5.4) >= 0) {
|
if (version_compare(PHP_VERSION, 5.4) >= 0) {
|
||||||
$args[] = JSON_PRETTY_PRINT;
|
$args[] = JSON_PRETTY_PRINT;
|
||||||
}
|
}
|
||||||
$value = call_user_func_array('json_encode', $args); //! requires PHP 5.2
|
$value = call_user_func_array('json_encode', $args);
|
||||||
$function = "json";
|
$function = "json";
|
||||||
}
|
}
|
||||||
$reset = ($jush == "mssql" && $field["auto_increment"]);
|
$reset = ($jush == "mssql" && $field["auto_increment"]);
|
||||||
@@ -944,13 +956,18 @@ function input($field, $value, $function) {
|
|||||||
$function = null;
|
$function = null;
|
||||||
}
|
}
|
||||||
$functions = (isset($_GET["select"]) || $reset ? array("orig" => lang('original')) : array()) + $adminer->editFunctions($field);
|
$functions = (isset($_GET["select"]) || $reset ? array("orig" => lang('original')) : array()) + $adminer->editFunctions($field);
|
||||||
$attrs = " name='fields[$name]'";
|
|
||||||
|
$disabled = stripos($field["default"], "GENERATED ALWAYS AS ") === 0 ? " disabled=''" : "";
|
||||||
|
$attrs = " name='fields[$name]' $disabled";
|
||||||
|
|
||||||
|
echo "<td class='function'>";
|
||||||
|
|
||||||
if ($field["type"] == "enum") {
|
if ($field["type"] == "enum") {
|
||||||
echo h($functions[""]) . "<td>" . $adminer->editInput($_GET["edit"], $field, $attrs, $value);
|
echo h($functions[""]) . "<td>" . $adminer->editInput($_GET["edit"], $field, $attrs, $value);
|
||||||
} else {
|
} else {
|
||||||
$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]'>" . optionlist($functions, $function === null || $has_function ? $function : "") . "</select>"
|
? "<select name='function[$name]' $disabled>" . optionlist($functions, $function === null || $has_function ? $function : "") . "</select>"
|
||||||
. on_help("getTarget(event).value.replace(/^SQL\$/, '')", 1)
|
. on_help("getTarget(event).value.replace(/^SQL\$/, '')", 1)
|
||||||
. script("qsl('select').onchange = functionChange;", "")
|
. script("qsl('select').onchange = functionChange;", "")
|
||||||
: h(reset($functions))
|
: h(reset($functions))
|
||||||
@@ -975,7 +992,7 @@ function input($field, $value, $function) {
|
|||||||
$attrs .= " cols='50' rows='12'";
|
$attrs .= " cols='50' rows='12'";
|
||||||
} else {
|
} else {
|
||||||
$rows = min(12, substr_count($value, "\n") + 1);
|
$rows = min(12, substr_count($value, "\n") + 1);
|
||||||
$attrs .= " cols='30' rows='$rows'" . ($rows == 1 ? " style='height: 1.2em;'" : ""); // 1.2em - line-height
|
$attrs .= " cols='30' rows='$rows'";
|
||||||
}
|
}
|
||||||
echo "<textarea$attrs>" . h($value) . '</textarea>';
|
echo "<textarea$attrs>" . h($value) . '</textarea>';
|
||||||
} elseif ($function == "json" || preg_match('~^jsonb?$~', $field["type"])) {
|
} elseif ($function == "json" || preg_match('~^jsonb?$~', $field["type"])) {
|
||||||
@@ -1015,6 +1032,11 @@ function input($field, $value, $function) {
|
|||||||
*/
|
*/
|
||||||
function process_input($field) {
|
function process_input($field) {
|
||||||
global $adminer, $driver;
|
global $adminer, $driver;
|
||||||
|
|
||||||
|
if (stripos($field["default"], "GENERATED ALWAYS AS ") === 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
$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];
|
||||||
@@ -1074,7 +1096,7 @@ function fields_from_edit() {
|
|||||||
$name = bracket_escape($key, 1); // 1 - back
|
$name = bracket_escape($key, 1); // 1 - back
|
||||||
$return[$name] = array(
|
$return[$name] = array(
|
||||||
"field" => $name,
|
"field" => $name,
|
||||||
"privileges" => array("insert" => 1, "update" => 1),
|
"privileges" => array("insert" => 1, "update" => 1, "where" => 1, "order" => 1),
|
||||||
"null" => 1,
|
"null" => 1,
|
||||||
"auto_increment" => ($key == $driver->primary),
|
"auto_increment" => ($key == $driver->primary),
|
||||||
);
|
);
|
||||||
@@ -1105,6 +1127,27 @@ function search_tables() {
|
|||||||
echo ($sep ? "<p class='message'>" . lang('No tables.') : "</ul>") . "\n";
|
echo ($sep ? "<p class='message'>" . lang('No tables.') : "</ul>") . "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $table
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
function get_partitions_info($table) {
|
||||||
|
global $connection;
|
||||||
|
|
||||||
|
$from = "FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = " . q(DB) . " AND TABLE_NAME = " . q($table);
|
||||||
|
|
||||||
|
$result = $connection->query("SELECT PARTITION_METHOD, PARTITION_EXPRESSION, PARTITION_ORDINAL_POSITION $from ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1");
|
||||||
|
|
||||||
|
$info = [];
|
||||||
|
list($info["partition_by"], $info["partition"], $info["partitions"]) = $result->fetch_row();
|
||||||
|
|
||||||
|
$partitions = get_key_vals("SELECT PARTITION_NAME, PARTITION_DESCRIPTION $from AND PARTITION_NAME != '' ORDER BY PARTITION_ORDINAL_POSITION");
|
||||||
|
$info["partition_names"] = array_keys($partitions);
|
||||||
|
$info["partition_values"] = array_values($partitions);
|
||||||
|
|
||||||
|
return $info;
|
||||||
|
}
|
||||||
|
|
||||||
/** Send headers for export
|
/** Send headers for export
|
||||||
* @param string
|
* @param string
|
||||||
* @param bool
|
* @param bool
|
||||||
@@ -1165,60 +1208,98 @@ function get_temp_dir() {
|
|||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Open and exclusively lock a file
|
/**
|
||||||
* @param string
|
* Opens and exclusively lock a file.
|
||||||
* @return resource or null for error
|
*
|
||||||
|
* @param string $filename
|
||||||
|
* @return resource|null
|
||||||
*/
|
*/
|
||||||
function file_open_lock($filename) {
|
function open_file_with_lock($filename)
|
||||||
$fp = @fopen($filename, "r+"); // @ - may not exist
|
{
|
||||||
if (!$fp) { // c+ is available since PHP 5.2.6
|
$file = fopen($filename, "c+");
|
||||||
$fp = @fopen($filename, "w"); // @ - may not be writable
|
if (!$file) {
|
||||||
if (!$fp) {
|
return null;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
chmod($filename, 0660);
|
chmod($filename, 0660);
|
||||||
}
|
|
||||||
flock($fp, LOCK_EX);
|
if (!flock($file, LOCK_EX)) {
|
||||||
return $fp;
|
fclose($file);
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Write and unlock a file
|
return $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
|
/**
|
||||||
* @param bool
|
* Writes and unlocks a file.
|
||||||
* @return string or false if the file can not be created
|
*
|
||||||
|
* @param resource $file
|
||||||
|
* @param string $data
|
||||||
*/
|
*/
|
||||||
function password_file($create) {
|
function write_and_unlock_file($file, $data)
|
||||||
|
{
|
||||||
|
rewind($file);
|
||||||
|
fwrite($file, $data);
|
||||||
|
ftruncate($file, strlen($data));
|
||||||
|
|
||||||
|
unlock_file($file);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unlocks and closes the file.
|
||||||
|
*
|
||||||
|
* @param resource $file
|
||||||
|
*/
|
||||||
|
function unlock_file($file)
|
||||||
|
{
|
||||||
|
flock($file, LOCK_UN);
|
||||||
|
fclose($file);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads password from file adminer.key in temporary directory or create one.
|
||||||
|
*
|
||||||
|
* @param $create bool
|
||||||
|
* @return string|false Returns false if the file can not be created.
|
||||||
|
* @throws \Random\RandomException
|
||||||
|
*/
|
||||||
|
function get_private_key($create)
|
||||||
|
{
|
||||||
$filename = get_temp_dir() . "/adminer.key";
|
$filename = get_temp_dir() . "/adminer.key";
|
||||||
$return = @file_get_contents($filename); // @ - may not exist
|
|
||||||
if ($return || !$create) {
|
if (!$create && !file_exists($filename)) {
|
||||||
return $return;
|
return false;
|
||||||
}
|
|
||||||
$fp = @fopen($filename, "w"); // @ - can have insufficient rights //! is not atomic
|
|
||||||
if ($fp) {
|
|
||||||
chmod($filename, 0660);
|
|
||||||
$return = rand_string();
|
|
||||||
fwrite($fp, $return);
|
|
||||||
fclose($fp);
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get a random string
|
$file = open_file_with_lock($filename);
|
||||||
* @return string 32 hexadecimal characters
|
if (!$file) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$key = stream_get_contents($file);
|
||||||
|
if (!$key) {
|
||||||
|
$key = get_random_string();
|
||||||
|
write_and_unlock_file($file, $key);
|
||||||
|
} else {
|
||||||
|
unlock_file($file);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $key;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a random 32 characters long string.
|
||||||
|
*
|
||||||
|
* @param $binary bool
|
||||||
|
* @return string
|
||||||
|
* @throws \Random\RandomException
|
||||||
*/
|
*/
|
||||||
function rand_string() {
|
function get_random_string($binary = false)
|
||||||
return md5(uniqid(mt_rand(), true));
|
{
|
||||||
|
$bytes = function_exists('random_bytes') ? random_bytes(32) : uniqid(mt_rand(), true);
|
||||||
|
|
||||||
|
return $binary ? $bytes : md5($bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Format value to use in select
|
/** Format value to use in select
|
||||||
@@ -1247,7 +1328,7 @@ function select_value($val, $link, $field, $text_length) {
|
|||||||
if (is_mail($val)) {
|
if (is_mail($val)) {
|
||||||
$link = "mailto:$val";
|
$link = "mailto:$val";
|
||||||
}
|
}
|
||||||
if (is_url($val)) {
|
if (is_web_url($val)) {
|
||||||
$link = $val; // IE 11 and all modern browsers hide referrer
|
$link = $val; // IE 11 and all modern browsers hide referrer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1268,20 +1349,32 @@ function select_value($val, $link, $field, $text_length) {
|
|||||||
* @param string
|
* @param string
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function is_mail($email) {
|
function is_mail($value) {
|
||||||
$atom = '[-a-z0-9!#$%&\'*+/=?^_`{|}~]'; // characters of local-name
|
return is_string($value) && filter_var($value, FILTER_VALIDATE_EMAIL);
|
||||||
$domain = '[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])'; // one domain component
|
|
||||||
$pattern = "$atom+(\\.$atom+)*@($domain?\\.)+$domain";
|
|
||||||
return is_string($email) && preg_match("(^$pattern(,\\s*$pattern)*\$)i", $email);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Check whether the string is URL address
|
/** Check whether the string is web URL address
|
||||||
* @param string
|
* @param string
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function is_url($string) {
|
function is_web_url($value) {
|
||||||
$domain = '[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])'; // one domain component //! IDN
|
if (!is_string($value) || !preg_match('~^https?://~i', $value)) {
|
||||||
return preg_match("~^(https?)://($domain?\\.)+$domain(:\\d+)?(/.*)?(\\?.*)?(#.*)?\$~i", $string); //! restrict path, query and fragment characters
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$components = parse_url($value);
|
||||||
|
if (!$components) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Encode URL path. If path was encoded already, it will be encoded twice, but we are OK with that.
|
||||||
|
$encodedParts = array_map('urlencode', explode('/', $components['path']));
|
||||||
|
$url = str_replace($components['path'], implode('/', $encodedParts), $value);
|
||||||
|
|
||||||
|
parse_str($components['query'], $params);
|
||||||
|
$url = str_replace($components['query'], http_build_query($params), $url);
|
||||||
|
|
||||||
|
return (bool)filter_var($url, FILTER_VALIDATE_URL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Check if field should be shortened
|
/** Check if field should be shortened
|
||||||
@@ -1423,6 +1516,7 @@ function edit_form($table, $fields, $row, $update) {
|
|||||||
$adminer->editRowPrint($table, $fields, $row, $update);
|
$adminer->editRowPrint($table, $fields, $row, $update);
|
||||||
if ($row === false) {
|
if ($row === false) {
|
||||||
echo "<p class='error'>" . lang('No rows.') . "\n";
|
echo "<p class='error'>" . lang('No rows.') . "\n";
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
<form action="" method="post" enctype="multipart/form-data" id="form">
|
<form action="" method="post" enctype="multipart/form-data" id="form">
|
||||||
|
@@ -5,7 +5,7 @@ $langs = array(
|
|||||||
'en' => 'English', // Jakub Vrána - https://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 | Hossain Ahmed Saiman - hossain.ahmed@altscope.com
|
||||||
'bs' => 'Bosanski', // Emir Kurtovic
|
'bs' => 'Bosanski', // Emir Kurtovic
|
||||||
'ca' => 'Català', // Joan Llosas
|
'ca' => 'Català', // Joan Llosas
|
||||||
'cs' => 'Čeština', // Jakub Vrána - https://www.vrana.cz
|
'cs' => 'Čeština', // Jakub Vrána - https://www.vrana.cz
|
||||||
@@ -25,6 +25,7 @@ $langs = array(
|
|||||||
'ja' => '日本語', // Hitoshi Ozawa - http://sourceforge.jp/projects/oss-ja-jpn/releases/
|
'ja' => '日本語', // Hitoshi Ozawa - http://sourceforge.jp/projects/oss-ja-jpn/releases/
|
||||||
'ka' => 'ქართული', // Saba Khmaladze skhmaladze@uglt.org
|
'ka' => 'ქართული', // Saba Khmaladze skhmaladze@uglt.org
|
||||||
'ko' => '한국어', // dalli - skcha67@gmail.com
|
'ko' => '한국어', // dalli - skcha67@gmail.com
|
||||||
|
'lv' => 'Latviešu', // Kristaps Lediņš - https://krysits.com
|
||||||
'lt' => 'Lietuvių', // Paulius Leščinskas - http://www.lescinskas.lt
|
'lt' => 'Lietuvių', // Paulius Leščinskas - http://www.lescinskas.lt
|
||||||
'ms' => 'Bahasa Melayu', // Pisyek
|
'ms' => 'Bahasa Melayu', // Pisyek
|
||||||
'nl' => 'Nederlands', // Maarten Balliauw - http://blog.maartenballiauw.be
|
'nl' => 'Nederlands', // Maarten Balliauw - http://blog.maartenballiauw.be
|
||||||
|
@@ -13,14 +13,14 @@ if (extension_loaded('pdo')) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function dsn($dsn, $username, $password, $options = array()) {
|
function dsn($dsn, $username, $password, $options = array()) {
|
||||||
|
$options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_SILENT;
|
||||||
|
$options[PDO::ATTR_STATEMENT_CLASS] = array('Min_PDOStatement');
|
||||||
try {
|
try {
|
||||||
$this->pdo = new PDO($dsn, $username, $password, $options);
|
$this->pdo = new PDO($dsn, $username, $password, $options);
|
||||||
} catch (Exception $ex) {
|
} catch (Exception $ex) {
|
||||||
auth_error(h($ex->getMessage()));
|
auth_error(h($ex->getMessage()));
|
||||||
}
|
}
|
||||||
$this->pdo->setAttribute(3, 1); // 3 - PDO::ATTR_ERRMODE, 1 - PDO::ERRMODE_WARNING
|
$this->server_info = @$this->pdo->getAttribute(PDO::ATTR_SERVER_VERSION);
|
||||||
$this->pdo->setAttribute(13, array('Min_PDOStatement')); // 13 - PDO::ATTR_STATEMENT_CLASS
|
|
||||||
$this->server_info = @$this->pdo->getAttribute(4); // 4 - PDO::ATTR_SERVER_VERSION
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*abstract function select_db($database);*/
|
/*abstract function select_db($database);*/
|
||||||
@@ -84,11 +84,11 @@ if (extension_loaded('pdo')) {
|
|||||||
var $_offset = 0, $num_rows;
|
var $_offset = 0, $num_rows;
|
||||||
|
|
||||||
function fetch_assoc() {
|
function fetch_assoc() {
|
||||||
return $this->fetch(2); // PDO::FETCH_ASSOC
|
return $this->fetch(PDO::FETCH_ASSOC);
|
||||||
}
|
}
|
||||||
|
|
||||||
function fetch_row() {
|
function fetch_row() {
|
||||||
return $this->fetch(3); // PDO::FETCH_NUM
|
return $this->fetch(PDO::FETCH_NUM);
|
||||||
}
|
}
|
||||||
|
|
||||||
function fetch_field() {
|
function fetch_field() {
|
||||||
|
@@ -1,2 +1,2 @@
|
|||||||
<?php
|
<?php
|
||||||
$VERSION = "4.8.0";
|
$VERSION = "4.9.4";
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
$translations = array(
|
$translations = array(
|
||||||
'Login' => 'تسجيل الدخول',
|
'Login' => 'تسجيل الدخول',
|
||||||
'Logout successful.' => 'تم تسجيل الخروج بنجاح.',
|
'Logout successful.' => 'تم تسجيل الخروج بنجاح.',
|
||||||
'Invalid credentials.' => 'بيانات الدخول غير صالحة.',
|
'Invalid server or credentials.' => null,
|
||||||
'Server' => 'الخادم',
|
'Server' => 'الخادم',
|
||||||
'Username' => 'اسم المستخدم',
|
'Username' => 'اسم المستخدم',
|
||||||
'Password' => 'كلمة المرور',
|
'Password' => 'كلمة المرور',
|
||||||
@@ -264,4 +264,50 @@ $translations = array(
|
|||||||
'Permanent link' => 'رابط دائم',
|
'Permanent link' => 'رابط دائم',
|
||||||
'Edit all' => 'تعديل الكل',
|
'Edit all' => 'تعديل الكل',
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
'HH:MM:SS' => 'HH:MM:SS',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'Tables have been optimized.' => null,
|
||||||
|
'Materialized view' => null,
|
||||||
|
'Vacuum' => null,
|
||||||
|
'Selected' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'Ctrl+click on a value to modify it.' => null,
|
||||||
|
'File must be in UTF-8 encoding.' => null,
|
||||||
|
'Modify' => null,
|
||||||
|
'Load more data' => null,
|
||||||
|
'Loading' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'%d / ' => array(),
|
||||||
|
'Limit rows' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Default value' => null,
|
||||||
|
'Full table scan' => null,
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'If you did not send this request from Adminer then close this page.' => null,
|
||||||
|
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||||
|
'Size' => null,
|
||||||
|
'Compute' => null,
|
||||||
|
'You are offline.' => null,
|
||||||
|
'You have no privileges to update this table.' => null,
|
||||||
|
'Saving' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
'yes' => null,
|
||||||
|
'no' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => null,
|
||||||
|
'No' => null,
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -10,7 +10,7 @@ $translations = array(
|
|||||||
'Logout' => 'Изход',
|
'Logout' => 'Изход',
|
||||||
'Logged as: %s' => 'Текущ потребител: %s',
|
'Logged as: %s' => 'Текущ потребител: %s',
|
||||||
'Logout successful.' => 'Излизането е успешно.',
|
'Logout successful.' => 'Излизането е успешно.',
|
||||||
'Invalid credentials.' => 'Невалидни потребителски данни.',
|
'Invalid server or credentials.' => null,
|
||||||
'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/"%s>Implement</a> %s method to make it permanent.' => 'Главната парола вече е невалидна. <a href="https://www.adminer.org/en/extension/"%s>Изберете</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' => 'Език',
|
||||||
@@ -333,4 +333,26 @@ $translations = array(
|
|||||||
'Type has been dropped.' => 'Вида беше пермахнат.',
|
'Type has been dropped.' => 'Вида беше пермахнат.',
|
||||||
'Type has been created.' => 'Вида беше създаден.',
|
'Type has been created.' => 'Вида беше създаден.',
|
||||||
'Alter type' => 'Промяна на вид',
|
'Alter type' => 'Промяна на вид',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => 'Да',
|
||||||
|
'No' => 'Не',
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -1,53 +1,53 @@
|
|||||||
<?php
|
<?php
|
||||||
$translations = array(
|
$translations = array(
|
||||||
'Login' => 'লগইন',
|
'Login' => 'লগইন',
|
||||||
'Logout successful.' => 'লগআউট সম্পন্ন হয়েছে।',
|
'Logout successful.' => 'সফলভাবে লগআউট হয়েছে।',
|
||||||
'Invalid credentials.' => 'ভুল পাসওয়ার্ড।',
|
'Invalid server or credentials.' => null,
|
||||||
'Server' => 'সার্ভার',
|
'Server' => 'সার্ভার',
|
||||||
'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' => 'ধরণ',
|
||||||
'Length' => 'দৈর্ঘ্য',
|
'Length' => 'দৈর্ঘ্য',
|
||||||
'Auto Increment' => 'স্বয়ংক্রিয় বৃদ্ধি',
|
'Auto Increment' => 'স্বয়ংক্রিয় বৃদ্ধি',
|
||||||
'Options' => 'অপশন',
|
'Options' => 'বিকল্পসমূহ',
|
||||||
'Save' => 'সংরক্ষণ',
|
'Save' => 'সংরক্ষণ করুন',
|
||||||
'Drop' => 'মুছে ফেলো',
|
'Drop' => 'মুছে ফেলো',
|
||||||
'Database has been dropped.' => 'ডাটাবেজ মুছে ফেলা হয়েছে।',
|
'Database has been dropped.' => 'ডাটাবেজ মুছে ফেলা হয়েছে।',
|
||||||
'Database has been created.' => 'ডাটাবেজ তৈরী করা হয়েছে।',
|
'Database has been created.' => 'ডাটাবেজ তৈরী করা হয়েছে।',
|
||||||
'Database has been renamed.' => 'ডাটাবেজের নতুন নামকরণ করা হয়েছে।',
|
'Database has been renamed.' => 'ডাটাবেজের নতুন নামকরণ করা হয়েছে।',
|
||||||
'Database has been altered.' => 'ডাটাবেজ সম্পাদনা করা হয়েছে।',
|
'Database has been altered.' => 'ডাটাবেজ পরিবর্তন করা হয়েছে।',
|
||||||
'Alter database' => 'ডাটাবেজ সম্পাদনা',
|
'Alter database' => 'ডাটাবেজ পরিবর্তন করুন',
|
||||||
'Create database' => 'ডাটাবেজ তৈরী',
|
'Create database' => 'ডাটাবেজ তৈরী করুন',
|
||||||
'SQL command' => 'SQL-কোয়্যারী',
|
'SQL command' => 'SQL-কমান্ড',
|
||||||
'Logout' => 'লগআউট',
|
'Logout' => 'লগআউট',
|
||||||
'database' => 'ডাটাবেজ',
|
'database' => 'ডাটাবেজ',
|
||||||
'Use' => 'ব্যবহার',
|
'Use' => 'ব্যবহার',
|
||||||
'No tables.' => 'কোন টেবিল নাই।',
|
'No tables.' => 'কোন টেবিল নাই।',
|
||||||
'select' => 'নির্বাচন',
|
'select' => 'নির্বাচন',
|
||||||
'Item has been deleted.' => 'বিষয়বস্তু মুছে ফেলা হয়েছে।',
|
'Item has been deleted.' => 'বিষয়বস্তু মুছে ফেলা হয়েছে।',
|
||||||
'Item has been updated.' => 'বিষয়বস্তু আপডেট করা হয়েছে।',
|
'Item has been updated.' => 'বিষয়বস্তু হালনাগাদ করা হয়েছে।',
|
||||||
'Item%s has been inserted.' => 'বিষয়বস্তুসমূহ সংযোজন করা হয়েছে।',
|
'Item%s has been inserted.' => 'বিষয়বস্তুসমূহ সংযোজন করা হয়েছে।',
|
||||||
'Edit' => 'সম্পাদনা',
|
'Edit' => 'সম্পাদনা',
|
||||||
'Insert' => 'সংযোজন',
|
'Insert' => 'সংযোজন',
|
||||||
'Save and insert next' => 'সংরক্ষন ও পরবর্তী সংযোজন',
|
'Save and insert next' => 'সংরক্ষন ও পরবর্তী সংযোজন করুন',
|
||||||
'Delete' => 'মুছে ফেলো',
|
'Delete' => 'মুছে ফেলুন',
|
||||||
'Database' => 'ডাটাবেজ',
|
'Database' => 'ডাটাবেজ',
|
||||||
'Routines' => 'রুটিনসমূহ',
|
'Routines' => 'রুটিনসমূহ',
|
||||||
'Indexes have been altered.' => 'সূচীসমূহ সম্পাদনা করা হয়েছে।',
|
'Indexes have been altered.' => 'সূচীসমূহ সম্পাদনা করা হয়েছে।',
|
||||||
'Indexes' => 'সূচীসমূহ',
|
'Indexes' => 'সূচীসমূহ',
|
||||||
'Alter indexes' => 'সূচীসমূহ সম্পাদনা',
|
'Alter indexes' => 'সূচীসমূহ পরিবর্তন করুন',
|
||||||
'Add next' => 'সংযোজন',
|
'Add next' => 'পরবর্তী সংযোজন করুন',
|
||||||
'Language' => 'ভাষা',
|
'Language' => 'ভাষা',
|
||||||
'Select' => 'নির্বাচন',
|
'Select' => 'নির্বাচন',
|
||||||
'New item' => 'নতুন বিষয়বস্তু',
|
'New item' => 'নতুন বিষয়বস্তু',
|
||||||
@@ -60,18 +60,18 @@ $translations = array(
|
|||||||
'edit' => 'সম্পাদনা',
|
'edit' => 'সম্পাদনা',
|
||||||
'Page' => 'পৃষ্ঠা',
|
'Page' => 'পৃষ্ঠা',
|
||||||
'Query executed OK, %d row(s) affected.' => array('কোয়্যারী সম্পাদন হয়েছে, %d সারি প্রভাবিত হয়েছে।', 'কোয়্যারী সম্পাদন হয়েছে, %d সারি প্রভাবিত হয়েছে।'),
|
'Query executed OK, %d row(s) affected.' => array('কোয়্যারী সম্পাদন হয়েছে, %d সারি প্রভাবিত হয়েছে।', 'কোয়্যারী সম্পাদন হয়েছে, %d সারি প্রভাবিত হয়েছে।'),
|
||||||
'Error in query' => 'কোয়্যারীতে ভুল আছে।',
|
'Error in query' => 'অনুসন্ধানে ভুল আছে।',
|
||||||
'Execute' => 'সম্পাদন করো',
|
'Execute' => 'সম্পাদন করো',
|
||||||
'Table' => 'টেবিল',
|
'Table' => 'টেবিল',
|
||||||
'Foreign keys' => 'ফরেন কী',
|
'Foreign keys' => 'ফরেন কী',
|
||||||
'Triggers' => 'ট্রিগার',
|
'Triggers' => 'ট্রিগার',
|
||||||
'View' => 'ভিউ',
|
'View' => 'ভিউ',
|
||||||
'Unable to select the table' => 'টেবিল নির্বাচন করতে অক্ষম',
|
'Unable to select the table' => 'টেবিল নির্বাচন করতে অক্ষম',
|
||||||
'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 byte(s)' => array('%d বাইট', '%d বাইটসমূহ'),
|
||||||
'No commands to execute.' => 'সম্পাদন করার মত কোন নির্দেশ নাই।',
|
'No commands to execute.' => 'সম্পাদন করার মত কোন নির্দেশ নেই।',
|
||||||
'Unable to upload a file.' => 'ফাইল আপলোড করা সম্ভব হচ্ছে না।',
|
'Unable to upload a file.' => 'ফাইল আপলোড করা সম্ভব হচ্ছে না।',
|
||||||
'File upload' => 'ফাইল আপলোড',
|
'File upload' => 'ফাইল আপলোড',
|
||||||
'File uploads are disabled.' => 'ফাইল আপলোড নিষ্ক্রিয় করা আছে।',
|
'File uploads are disabled.' => 'ফাইল আপলোড নিষ্ক্রিয় করা আছে।',
|
||||||
@@ -80,70 +80,70 @@ $translations = array(
|
|||||||
'No extension' => 'কোন এক্সটেনশান নাই',
|
'No extension' => 'কোন এক্সটেনশান নাই',
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'কোন PHP সমর্থিত এক্সটেনশন (%s) পাওয়া যায় নাই।',
|
'None of the supported PHP extensions (%s) are available.' => 'কোন PHP সমর্থিত এক্সটেনশন (%s) পাওয়া যায় নাই।',
|
||||||
'Session support must be enabled.' => 'সেশন সমর্থন সক্রিয় করা আবশ্যক।',
|
'Session support must be enabled.' => 'সেশন সমর্থন সক্রিয় করা আবশ্যক।',
|
||||||
'Session expired, please login again.' => 'সেশানের মেয়াদ শেষ হয়েছে, আবার লগইন করুন।',
|
'Session expired, please login again.' => 'সেশনের মেয়াদ শেষ হয়েছে, আবার লগইন করুন।',
|
||||||
'Text length' => 'টেক্সট দৈর্ঘ্য',
|
'Text length' => 'টেক্সট দৈর্ঘ্য',
|
||||||
'Foreign key has been dropped.' => 'ফরেন কী মুছে ফেলা হয়েছে।',
|
'Foreign key has been dropped.' => 'ফরেন কী মুছে ফেলা হয়েছে।',
|
||||||
'Foreign key has been altered.' => 'ফরেন কী সম্পাদনা করা হয়েছে।',
|
'Foreign key has been altered.' => 'ফরেন কী পরিবর্তন করা হয়েছে।',
|
||||||
'Foreign key has been created.' => 'ফরেন কী তৈরী করা হয়েছে।',
|
'Foreign key has been created.' => 'ফরেন কী তৈরী করা হয়েছে।',
|
||||||
'Foreign key' => 'ফরেন কী ',
|
'Foreign key' => 'ফরেন কী ',
|
||||||
'Target table' => 'টার্গেট টেবিল',
|
'Target table' => 'টার্গেট টেবিল',
|
||||||
'Change' => 'পরিবর্তন',
|
'Change' => 'পরিবর্তন',
|
||||||
'Source' => 'উৎস',
|
'Source' => 'উৎস',
|
||||||
'Target' => 'লক্ষ্য',
|
'Target' => 'লক্ষ্য',
|
||||||
'Add column' => 'কলাম সংযোজন',
|
'Add column' => 'কলাম সংযোজন করুন',
|
||||||
'Alter' => 'সম্পাদনা',
|
'Alter' => 'পরিবর্তন',
|
||||||
'Add foreign key' => 'ফরেন কী সংযোজন করো',
|
'Add foreign key' => 'ফরেন কী সংযোজন করুন',
|
||||||
'ON DELETE' => 'অন ডিলিট',
|
'ON DELETE' => 'অন ডিলিট',
|
||||||
'ON UPDATE' => 'অন আপডেট',
|
'ON UPDATE' => 'অন আপডেট',
|
||||||
'Index Type' => 'সূচী-ধরণ',
|
'Index Type' => 'সূচী-ধরণ',
|
||||||
'Column (length)' => 'কলাম (দৈর্ঘ্য)',
|
'Column (length)' => 'কলাম (দৈর্ঘ্য)',
|
||||||
'View has been dropped.' => 'ভিউ মুছে ফেলা হয়েছে।',
|
'View has been dropped.' => 'ভিউ মুছে ফেলা হয়েছে।',
|
||||||
'View has been altered.' => 'ভিউ সম্পাদনা করা হয়েছে।',
|
'View has been altered.' => 'ভিউ পরিবর্তন করা হয়েছে।',
|
||||||
'View has been created.' => 'ভিউ তৈরী করা হয়েছে।',
|
'View has been created.' => 'ভিউ তৈরী করা হয়েছে।',
|
||||||
'Alter view' => 'ভিউ সম্পাদনা করো',
|
'Alter view' => 'ভিউ পরিবর্তন করুন',
|
||||||
'Create view' => 'ভিউ তৈরী করো',
|
'Create view' => 'ভিউ তৈরী করুন',
|
||||||
'Name' => 'নাম',
|
'Name' => 'নাম',
|
||||||
'Process list' => 'প্রসেস তালিকা',
|
'Process list' => 'প্রসেস তালিকা',
|
||||||
'%d process(es) have been killed.' => array('%d টি প্রসেস(সমূহ) বিনষ্ট করা হয়েছে।', '%d টি প্রসেস(সমূহ) বিনষ্ট করা হয়েছে।'),
|
'%d process(es) have been killed.' => array('%d টি প্রসেস(সমূহ) বিনষ্ট করা হয়েছে।', '%d টি প্রসেস(সমূহ) বিনষ্ট করা হয়েছে।'),
|
||||||
'Kill' => 'বিনষ্ট করো',
|
'Kill' => 'বিনষ্ট করো',
|
||||||
'Parameter name' => 'প্যারামিটারের নাম',
|
'Parameter name' => 'প্যারামিটারের নাম',
|
||||||
'Database schema' => 'ডাটাবেজ স্কিমা',
|
'Database schema' => 'ডাটাবেজ স্কিমা',
|
||||||
'Create procedure' => 'প্রসিডিওর তৈরী করো',
|
'Create procedure' => 'কার্যপ্রণালী তৈরী করুন',
|
||||||
'Create function' => 'ফাংশন তৈরী করো',
|
'Create function' => 'ফাংশন তৈরী করুন',
|
||||||
'Routine has been dropped.' => 'রুটিন মুছে ফেলা হয়েছে।',
|
'Routine has been dropped.' => 'রুটিন মুছে ফেলা হয়েছে।',
|
||||||
'Routine has been altered.' => 'রুটিন সম্পাদনা করা হয়েছে।',
|
'Routine has been altered.' => 'রুটিন পরিবর্তন করা হয়েছে।',
|
||||||
'Routine has been created.' => 'রুটিন তৈরী করা হয়েছে।',
|
'Routine has been created.' => 'রুটিন তৈরী করা হয়েছে।',
|
||||||
'Alter function' => 'ফাংশন সম্পাদনা করো',
|
'Alter function' => 'ফাংশন পরিবর্তন করুন',
|
||||||
'Alter procedure' => 'প্রসিডিওর সম্পাদনা করো',
|
'Alter procedure' => 'কার্যপ্রণালী পরিবর্তন করুন',
|
||||||
'Return type' => 'রিটার্ন টাইপ',
|
'Return type' => 'রিটার্ন টাইপ',
|
||||||
'Add trigger' => 'ট্রিগার সংযোজন করো',
|
'Add trigger' => 'ট্রিগার সংযোজন করুন',
|
||||||
'Trigger has been dropped.' => 'ট্রিগার মুছে ফেলা হয়েছে।',
|
'Trigger has been dropped.' => 'ট্রিগার মুছে ফেলা হয়েছে।',
|
||||||
'Trigger has been altered.' => 'ট্রিগার সম্পাদনা করা হয়েছে।',
|
'Trigger has been altered.' => 'ট্রিগার পরিবর্তন করা হয়েছে।',
|
||||||
'Trigger has been created.' => 'ট্রিগার তৈরী করা হয়েছে।',
|
'Trigger has been created.' => 'ট্রিগার তৈরী করা হয়েছে।',
|
||||||
'Alter trigger' => 'ট্রিগার সম্পাদনা করো',
|
'Alter trigger' => 'ট্রিগার পরিবর্তন করুন',
|
||||||
'Create trigger' => 'ট্রিগার তৈরী করো',
|
'Create trigger' => 'ট্রিগার তৈরী করুন',
|
||||||
'Time' => 'সময়',
|
'Time' => 'সময়',
|
||||||
'Event' => 'ইভেন্ট',
|
'Event' => 'ইভেন্ট',
|
||||||
'%s version: %s through PHP extension %s' => 'ভার্সন %s: %s, %s PHP এক্সটেনশনের মধ্য দিয়ে',
|
'%s version: %s through PHP extension %s' => 'ভার্সন %s: %s, %s PHP এক্সটেনশনের মধ্য দিয়ে',
|
||||||
'%d row(s)' => array('%d সারি', '%d সারি সমূহ'),
|
'%d row(s)' => array('%d সারি', '%d সারি সমূহ'),
|
||||||
'Remove' => 'অপসারণ',
|
'Remove' => 'মুছে ফেলুন',
|
||||||
'Are you sure?' => 'তুমি কি নিশ্চিত?',
|
'Are you sure?' => 'আপনি কি নিশ্চিত?',
|
||||||
'Privileges' => 'প্রিভিলেজেস',
|
'Privileges' => 'প্রিভিলেজেস',
|
||||||
'Create user' => 'ইউজার তৈরী করো',
|
'Create user' => 'ব্যবহারকারি তৈরী করুন',
|
||||||
'User has been dropped.' => 'ইউজার মুছে ফেলা হয়েছে।',
|
'User has been dropped.' => 'ব্যবহারকারি মুছে ফেলা হয়েছে।',
|
||||||
'User has been altered.' => 'ইউজার সম্পাদনা করা হয়েছে।',
|
'User has been altered.' => 'ব্যবহারকারি সম্পাদনা করা হয়েছে।',
|
||||||
'User has been created.' => 'ইউজার তৈরী করা হয়েছে।',
|
'User has been created.' => 'ব্যবহারকারি তৈরী করা হয়েছে।',
|
||||||
'Hashed' => 'হ্যাসড',
|
'Hashed' => 'হ্যাশড',
|
||||||
'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' => 'নীচে স্থানান্তর',
|
||||||
'Functions' => 'ফাংশন সমূহ',
|
'Functions' => 'ফাংশন সমূহ',
|
||||||
'Aggregation' => 'মোট পরিমাণ',
|
'Aggregation' => 'সমষ্টি',
|
||||||
'Export' => 'এক্সপোর্ট',
|
'Export' => 'এক্সপোর্ট',
|
||||||
'Output' => 'আউটপুট',
|
'Output' => 'আউটপুট',
|
||||||
'open' => 'খোলা',
|
'open' => 'খোলা',
|
||||||
@@ -162,8 +162,8 @@ $translations = array(
|
|||||||
'Schedule' => 'সময়সূচি',
|
'Schedule' => 'সময়সূচি',
|
||||||
'Start' => 'শুরু',
|
'Start' => 'শুরু',
|
||||||
'End' => 'সমাপ্তি',
|
'End' => 'সমাপ্তি',
|
||||||
'Status' => 'স্ট্যাটাস',
|
'Status' => 'অবস্থা',
|
||||||
'On completion preserve' => 'সমাপ্ত হওয়ার পর সংরক্ষন করো',
|
'On completion preserve' => 'সমাপ্ত হওয়ার পর সংরক্ষন করুন',
|
||||||
'Tables and views' => 'টেবিল এবং ভিউ সমূহ',
|
'Tables and views' => 'টেবিল এবং ভিউ সমূহ',
|
||||||
'Data Length' => 'ডাটার দৈর্ঘ্য',
|
'Data Length' => 'ডাটার দৈর্ঘ্য',
|
||||||
'Index Length' => 'ইনডেক্স এর দৈর্ঘ্য',
|
'Index Length' => 'ইনডেক্স এর দৈর্ঘ্য',
|
||||||
@@ -175,14 +175,14 @@ $translations = array(
|
|||||||
'Repair' => 'মেরামত',
|
'Repair' => 'মেরামত',
|
||||||
'Truncate' => 'ছাঁটাই',
|
'Truncate' => 'ছাঁটাই',
|
||||||
'Tables have been truncated.' => 'টেবিল ছাঁটাই করা হয়েছে',
|
'Tables have been truncated.' => 'টেবিল ছাঁটাই করা হয়েছে',
|
||||||
'Rows' => 'সারি',
|
'Rows' => 'সারিসমূহ',
|
||||||
',' => ',',
|
',' => ',',
|
||||||
'0123456789' => '০১২৩৪৫৬৭৮৯',
|
'0123456789' => '০১২৩৪৫৬৭৮৯',
|
||||||
'Tables have been moved.' => 'টেবিল স্থানান্তর করা হয়েছে।',
|
'Tables have been moved.' => 'টেবিল স্থানান্তর করা হয়েছে।',
|
||||||
'Move to other database' => 'অন্য ডাটাবেজে স্থানান্তর করো',
|
'Move to other database' => 'অন্য ডাটাবেজে স্থানান্তর করুন',
|
||||||
'Move' => 'স্থানান্তর করো',
|
'Move' => 'স্থানান্তর করুন',
|
||||||
'Engine' => 'ইঞ্জিন',
|
'Engine' => 'ইঞ্জিন',
|
||||||
'Save and continue edit' => 'সংরক্ষণ করো এবং সম্পাদনা চালিয়ে যাও',
|
'Save and continue edit' => 'সংরক্ষণ করুন এবং সম্পাদনা চালিয়ে যান',
|
||||||
'original' => 'প্রকৃত',
|
'original' => 'প্রকৃত',
|
||||||
'Tables have been dropped.' => 'টেবিলসমূহ মুছে ফেলা হয়েছে।',
|
'Tables have been dropped.' => 'টেবিলসমূহ মুছে ফেলা হয়েছে।',
|
||||||
'%d item(s) have been affected.' => '%d টি বিষয়বস্তু প্রভাবিত হয়েছে',
|
'%d item(s) have been affected.' => '%d টি বিষয়বস্তু প্রভাবিত হয়েছে',
|
||||||
@@ -196,7 +196,7 @@ $translations = array(
|
|||||||
'%d row(s) have been imported.' => array('%d টি সারি(সমূহ) ইমপোর্ট করা হয়েছে।', '%d টি সারি(সমূহ) ইমপোর্ট করা হয়েছে।'),
|
'%d row(s) have been imported.' => array('%d টি সারি(সমূহ) ইমপোর্ট করা হয়েছে।', '%d টি সারি(সমূহ) ইমপোর্ট করা হয়েছে।'),
|
||||||
'anywhere' => 'যে কোন স্থানে',
|
'anywhere' => 'যে কোন স্থানে',
|
||||||
'Import' => 'ইমপোর্ট',
|
'Import' => 'ইমপোর্ট',
|
||||||
'Stop on error' => 'ত্রুটি পেলে থেমে যাও',
|
'Stop on error' => 'ত্রুটি পেলে থেমে যান',
|
||||||
'%.3f s' => '%.3f s',
|
'%.3f s' => '%.3f s',
|
||||||
'$1-$3-$5' => '$6.$4.$1',
|
'$1-$3-$5' => '$6.$4.$1',
|
||||||
'[yyyy]-mm-dd' => 't.m.[jjjj]',
|
'[yyyy]-mm-dd' => 't.m.[jjjj]',
|
||||||
@@ -216,14 +216,14 @@ $translations = array(
|
|||||||
'E-mail' => 'ই-মেইল',
|
'E-mail' => 'ই-মেইল',
|
||||||
'From' => 'থেকে',
|
'From' => 'থেকে',
|
||||||
'Subject' => 'বিষয়',
|
'Subject' => 'বিষয়',
|
||||||
'Send' => 'পাঠাও',
|
'Send' => 'পাঠান',
|
||||||
'%d e-mail(s) have been sent.' => array('%d ইমেইল(গুলি) পাঠানো হয়েছে।', '%d ইমেইল(গুলি) পাঠানো হয়েছে।'),
|
'%d e-mail(s) have been sent.' => array('%d ইমেইল(গুলি) পাঠানো হয়েছে।', '%d ইমেইল(গুলি) পাঠানো হয়েছে।'),
|
||||||
'Webserver file %s' => 'ওয়েবসার্ভার ফাইল %s',
|
'Webserver file %s' => 'ওয়েবসার্ভার ফাইল %s',
|
||||||
'File does not exist.' => 'ফাইলের কোন অস্তিত্ব নেই।',
|
'File does not exist.' => 'ফাইলটির কোন অস্তিত্ব নেই।',
|
||||||
'%d in total' => 'সর্বমোটঃ %d টি',
|
'%d in total' => 'সর্বমোটঃ %d টি',
|
||||||
'Permanent login' => 'স্থায়ী লগইন',
|
'Permanent login' => 'স্থায়ী লগইন',
|
||||||
'Databases have been dropped.' => 'ডাটাবেজসমূহ মুছে ফেলা হয়েছে।',
|
'Databases have been dropped.' => 'ডাটাবেজসমূহ মুছে ফেলা হয়েছে।',
|
||||||
'Search data in tables' => 'টেবিলে খোঁজ করো',
|
'Search data in tables' => 'টেবিলে তথ্য খুঁজুন',
|
||||||
'Schema' => 'স্কিমা',
|
'Schema' => 'স্কিমা',
|
||||||
'Alter schema' => 'স্কিমা পরিবর্তন করো',
|
'Alter schema' => 'স্কিমা পরিবর্তন করো',
|
||||||
'Create schema' => 'স্কিমা তৈরী করো',
|
'Create schema' => 'স্কিমা তৈরী করো',
|
||||||
@@ -236,32 +236,78 @@ $translations = array(
|
|||||||
'Sequence has been dropped.' => 'অনুক্রম মুছে ফেলা হয়েছে।',
|
'Sequence has been dropped.' => 'অনুক্রম মুছে ফেলা হয়েছে।',
|
||||||
'Sequence has been created.' => 'অনুক্রম তৈরি করা হয়েছে।',
|
'Sequence has been created.' => 'অনুক্রম তৈরি করা হয়েছে।',
|
||||||
'Sequence has been altered.' => 'অনুক্রম সম্পাদনা করা হয়েছে।',
|
'Sequence has been altered.' => 'অনুক্রম সম্পাদনা করা হয়েছে।',
|
||||||
'User types' => 'ইউজারের টাইপ',
|
'User types' => 'ব্যবহারকারির ধরণ',
|
||||||
'Create type' => 'টাইপ তৈরী করো',
|
'Create type' => 'ধরণ তৈরী করুন',
|
||||||
'Alter type' => 'টাইপ পরিবর্তন করো',
|
'Alter type' => 'ধরণ পরিবর্তন করুন',
|
||||||
'Type has been dropped.' => 'টাইপ মুছে ফেলা হয়েছে।',
|
'Type has been dropped.' => 'ধরণ মুছে ফেলা হয়েছে।',
|
||||||
'Type has been created.' => 'টাইপ তৈরি করা হয়েছে।',
|
'Type has been created.' => 'ধরণ তৈরি করা হয়েছে।',
|
||||||
'Use edit link to modify this value.' => 'এই মান পরিবর্তনের জন্য সম্পাদনা লিঙ্ক ব্যবহার করো।',
|
'Use edit link to modify this value.' => 'এই মানটি পরিবর্তনের জন্য সম্পাদনা লিঙ্ক ব্যবহার করুন।',
|
||||||
'last' => 'সর্বশেষ',
|
'last' => 'সর্বশেষ',
|
||||||
'From server' => 'সার্ভার থেকে',
|
'From server' => 'সার্ভার থেকে',
|
||||||
'System' => 'সিস্টেম',
|
'System' => 'সিস্টেম',
|
||||||
'Select data' => 'তথ্য নির্বাচন করো',
|
'Select data' => 'তথ্য নির্বাচন করো',
|
||||||
'Show structure' => 'গঠন দেখাও',
|
'Show structure' => 'গঠন দেখান',
|
||||||
'empty' => 'খালি',
|
'empty' => 'খালি',
|
||||||
'Network' => 'নেটওয়ার্ক',
|
'Network' => 'নেটওয়ার্ক',
|
||||||
'Geometry' => 'জ্যামিতি',
|
'Geometry' => 'জ্যামিতি',
|
||||||
'File exists.' => 'ফাইল রয়েছে।',
|
'File exists.' => 'ফাইল রয়েছে।',
|
||||||
'Attachments' => 'সংযুক্তি',
|
'Attachments' => 'সংযুক্তিগুলো',
|
||||||
'%d query(s) executed OK.' => array('SQL-কোয়্যারী সফলভাবে সম্পন্ন হয়েছে', '%d SQL-কোয়্যারীসমূহ সফলভাবে সম্পন্ন হয়েছে'),
|
'%d query(s) executed OK.' => array('SQL-অনুসন্ধান সফলভাবে সম্পন্ন হয়েছে', '%d SQL-অনুসন্ধানসমূহ সফলভাবে সম্পন্ন হয়েছে'),
|
||||||
'Show only errors' => 'শুধুমাত্র ত্রুটি দেখাও',
|
'Show only errors' => 'শুধুমাত্র ত্রুটিগুলো দেখান',
|
||||||
'Refresh' => 'রিফ্রেশ',
|
'Refresh' => 'রিফ্রেশ',
|
||||||
'Invalid schema.' => 'অবৈধ স্কিমা।',
|
'Invalid schema.' => 'অবৈধ স্কিমা।',
|
||||||
'Please use one of the extensions %s.' => 'কোন একটা এক্সটেনশন %s ব্যবহার করো।',
|
'Please use one of the extensions %s.' => 'কোন একটা এক্সটেনশন %s ব্যবহার করুন।',
|
||||||
'now' => 'এখন',
|
'now' => 'এখন',
|
||||||
'ltr' => 'ltr',
|
'ltr' => 'ltr',
|
||||||
'Tables have been copied.' => 'টেবিল কপি করা হয়েছে।',
|
'Tables have been copied.' => 'টেবিলগুলো কপি করা হয়েছে।',
|
||||||
'Copy' => 'কপি',
|
'Copy' => 'কপি',
|
||||||
'Permanent link' => 'স্থায়ী লিংক',
|
'Permanent link' => 'স্থায়ী লিংক',
|
||||||
'Edit all' => 'সকল সম্পাদনা করো',
|
'Edit all' => 'সবগুলো সম্পাদনা করুন',
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
'HH:MM:SS' => 'HH:MM:SS',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'Tables have been optimized.' => null,
|
||||||
|
'Materialized view' => null,
|
||||||
|
'Vacuum' => null,
|
||||||
|
'Selected' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'Ctrl+click on a value to modify it.' => null,
|
||||||
|
'File must be in UTF-8 encoding.' => null,
|
||||||
|
'Modify' => null,
|
||||||
|
'Load more data' => null,
|
||||||
|
'Loading' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'%d / ' => array(),
|
||||||
|
'Limit rows' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Default value' => null,
|
||||||
|
'Full table scan' => null,
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'If you did not send this request from Adminer then close this page.' => null,
|
||||||
|
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||||
|
'Size' => null,
|
||||||
|
'Compute' => null,
|
||||||
|
'You are offline.' => null,
|
||||||
|
'You have no privileges to update this table.' => null,
|
||||||
|
'Saving' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
'yes' => null,
|
||||||
|
'no' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => null,
|
||||||
|
'No' => null,
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -10,7 +10,7 @@ $translations = array(
|
|||||||
'Logout' => 'Odjava',
|
'Logout' => 'Odjava',
|
||||||
'Logged as: %s' => 'Prijavi se kao: %s',
|
'Logged as: %s' => 'Prijavi se kao: %s',
|
||||||
'Logout successful.' => 'Uspešna odjava.',
|
'Logout successful.' => 'Uspešna odjava.',
|
||||||
'Invalid credentials.' => 'Nevažeće dozvole.',
|
'Invalid server or credentials.' => null,
|
||||||
'Language' => 'Jezik',
|
'Language' => 'Jezik',
|
||||||
'Invalid CSRF token. Send the form again.' => 'Nevažeći CSRF kod. Proslijedite ponovo formu.',
|
'Invalid CSRF token. Send the form again.' => 'Nevažeći CSRF kod. Proslijedite ponovo formu.',
|
||||||
'No extension' => 'Bez dodataka',
|
'No extension' => 'Bez dodataka',
|
||||||
@@ -318,4 +318,41 @@ $translations = array(
|
|||||||
'Type has been dropped.' => 'Tip je izbrisan.',
|
'Type has been dropped.' => 'Tip je izbrisan.',
|
||||||
'Type has been created.' => 'tip je spašen.',
|
'Type has been created.' => 'tip je spašen.',
|
||||||
'Alter type' => 'Ažuriraj tip',
|
'Alter type' => 'Ažuriraj tip',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'Materialized view' => null,
|
||||||
|
'Vacuum' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'File must be in UTF-8 encoding.' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'%d / ' => array(),
|
||||||
|
'Limit rows' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Default value' => null,
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'If you did not send this request from Adminer then close this page.' => null,
|
||||||
|
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||||
|
'Size' => null,
|
||||||
|
'Compute' => null,
|
||||||
|
'You are offline.' => null,
|
||||||
|
'You have no privileges to update this table.' => null,
|
||||||
|
'Saving' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => 'Da',
|
||||||
|
'No' => 'Ne',
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
$translations = array(
|
$translations = array(
|
||||||
'Login' => 'Inicia la sessió',
|
'Login' => 'Inicia la sessió',
|
||||||
'Logout successful.' => 'Desconnexió correcta.',
|
'Logout successful.' => 'Desconnexió correcta.',
|
||||||
'Invalid credentials.' => 'Credencials invàlids.',
|
'Invalid server or credentials.' => null,
|
||||||
'Server' => 'Servidor',
|
'Server' => 'Servidor',
|
||||||
'Username' => 'Nom d\'usuari',
|
'Username' => 'Nom d\'usuari',
|
||||||
'Password' => 'Contrasenya',
|
'Password' => 'Contrasenya',
|
||||||
@@ -35,7 +35,7 @@ $translations = array(
|
|||||||
'Use' => 'Utilitza',
|
'Use' => 'Utilitza',
|
||||||
'No tables.' => 'No hi ha cap taula.',
|
'No tables.' => 'No hi ha cap taula.',
|
||||||
'select' => 'registres',
|
'select' => 'registres',
|
||||||
'Item has been deleted.' => 'S\'ha suprmit l\'element.',
|
'Item has been deleted.' => 'S\'ha suprimit l\'element.',
|
||||||
'Item has been updated.' => 'S\'ha actualitzat l\'element.',
|
'Item has been updated.' => 'S\'ha actualitzat l\'element.',
|
||||||
'Item%s has been inserted.' => 'S\'ha insertat l\'element%s.',
|
'Item%s has been inserted.' => 'S\'ha insertat l\'element%s.',
|
||||||
'Edit' => 'Edita',
|
'Edit' => 'Edita',
|
||||||
@@ -44,9 +44,9 @@ $translations = array(
|
|||||||
'Delete' => 'Suprimeix',
|
'Delete' => 'Suprimeix',
|
||||||
'Database' => 'Base de dades',
|
'Database' => 'Base de dades',
|
||||||
'Routines' => 'Rutines',
|
'Routines' => 'Rutines',
|
||||||
'Indexes have been altered.' => 'S\'han modificat els índexs.',
|
'Indexes have been altered.' => 'S\'han modificat els índex.',
|
||||||
'Indexes' => 'Índexs',
|
'Indexes' => 'Índexs',
|
||||||
'Alter indexes' => 'Modifica els índexs',
|
'Alter indexes' => 'Modifica els índex',
|
||||||
'Add next' => 'Afegeix el següent',
|
'Add next' => 'Afegeix el següent',
|
||||||
'Language' => 'Idioma',
|
'Language' => 'Idioma',
|
||||||
'Select' => 'Selecciona',
|
'Select' => 'Selecciona',
|
||||||
@@ -74,11 +74,11 @@ $translations = array(
|
|||||||
'No commands to execute.' => 'Cap comanda per executar.',
|
'No commands to execute.' => 'Cap comanda per executar.',
|
||||||
'Unable to upload a file.' => 'Impossible adjuntar el fitxer.',
|
'Unable to upload a file.' => 'Impossible adjuntar el fitxer.',
|
||||||
'File upload' => 'Adjunta un fitxer',
|
'File upload' => 'Adjunta un fitxer',
|
||||||
'File uploads are disabled.' => 'L\'ddjunció de fitxers està desactivada.',
|
'File uploads are disabled.' => 'La pujada de fitxers està desactivada.',
|
||||||
'Routine has been called, %d row(s) affected.' => array('S\'ha cridat la rutina, %d registre modificat.', 'S\'ha cridat la rutina, %d registres modificats.'),
|
'Routine has been called, %d row(s) affected.' => array('S\'ha cridat la rutina, %d registre modificat.', 'S\'ha cridat la rutina, %d registres modificats.'),
|
||||||
'Call' => 'Crida',
|
'Call' => 'Crida',
|
||||||
'No extension' => 'Cap extensió',
|
'No extension' => 'Cap extensió',
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'No hi ha cap de les extensions PHP soporatades (%s) disponible.',
|
'None of the supported PHP extensions (%s) are available.' => 'No hi ha cap de les extensions PHP suportades (%s) disponible.',
|
||||||
'Session support must be enabled.' => 'Cal que estigui permès l\'us de sessions.',
|
'Session support must be enabled.' => 'Cal que estigui permès l\'us de sessions.',
|
||||||
'Session expired, please login again.' => 'La sessió ha expirat, torna a iniciar-ne una.',
|
'Session expired, please login again.' => 'La sessió ha expirat, torna a iniciar-ne una.',
|
||||||
'Text length' => 'Longitud del text',
|
'Text length' => 'Longitud del text',
|
||||||
@@ -86,7 +86,7 @@ $translations = array(
|
|||||||
'Foreign key has been altered.' => 'S\'ha modificat la clau forana.',
|
'Foreign key has been altered.' => 'S\'ha modificat la clau forana.',
|
||||||
'Foreign key has been created.' => 'S\'ha creat la clau forana.',
|
'Foreign key has been created.' => 'S\'ha creat la clau forana.',
|
||||||
'Foreign key' => 'Clau forana',
|
'Foreign key' => 'Clau forana',
|
||||||
'Target table' => 'Taula de destí',
|
'Target table' => 'Taula de destinació',
|
||||||
'Change' => 'Canvi',
|
'Change' => 'Canvi',
|
||||||
'Source' => 'Font',
|
'Source' => 'Font',
|
||||||
'Target' => 'Destí',
|
'Target' => 'Destí',
|
||||||
@@ -139,7 +139,7 @@ $translations = array(
|
|||||||
'Grant' => 'Grant',
|
'Grant' => 'Grant',
|
||||||
'Revoke' => 'Revoke',
|
'Revoke' => 'Revoke',
|
||||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Les dades POST són massa grans. Redueix les dades o incrementa la directiva de configuració %s.',
|
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Les dades POST són massa grans. Redueix les dades o incrementa la directiva de configuració %s.',
|
||||||
'Logged as: %s' => 'Connectat com: %s',
|
'Logged as: %s' => 'Connectat com a: %s',
|
||||||
'Move up' => 'Mou a dalt',
|
'Move up' => 'Mou a dalt',
|
||||||
'Move down' => 'Mou a baix',
|
'Move down' => 'Mou a baix',
|
||||||
'Functions' => 'Funcions',
|
'Functions' => 'Funcions',
|
||||||
@@ -204,7 +204,7 @@ $translations = array(
|
|||||||
'[yyyy]-mm-dd' => 'dd/mm/[aaaa]',
|
'[yyyy]-mm-dd' => 'dd/mm/[aaaa]',
|
||||||
'History' => 'Història',
|
'History' => 'Història',
|
||||||
'Variables' => 'Variables',
|
'Variables' => 'Variables',
|
||||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Les columnes origen i destí han de ser del mateix tipus, la columna destí ha d\'estar indexada i les dades referenciades han d\'existir.',
|
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Les columnes d\'origen i de destinació han de ser del mateix tipus, la columna de destinació ha d\'estar indexada i les dades referenciades han d\'existir.',
|
||||||
'E-mail' => 'Correu electrònic',
|
'E-mail' => 'Correu electrònic',
|
||||||
'From' => 'De',
|
'From' => 'De',
|
||||||
'Subject' => 'Assumpte',
|
'Subject' => 'Assumpte',
|
||||||
@@ -265,4 +265,49 @@ $translations = array(
|
|||||||
'Permanent link' => 'Enllaç permanent',
|
'Permanent link' => 'Enllaç permanent',
|
||||||
'Edit all' => 'Edita-ho tot',
|
'Edit all' => 'Edita-ho tot',
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
'HH:MM:SS' => 'HH:MM:SS',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'Tables have been optimized.' => null,
|
||||||
|
'Materialized view' => null,
|
||||||
|
'Vacuum' => null,
|
||||||
|
'Selected' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'File must be in UTF-8 encoding.' => null,
|
||||||
|
'Modify' => null,
|
||||||
|
'Load more data' => null,
|
||||||
|
'Loading' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'%d / ' => array(),
|
||||||
|
'Limit rows' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Default value' => null,
|
||||||
|
'Full table scan' => null,
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'If you did not send this request from Adminer then close this page.' => null,
|
||||||
|
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||||
|
'Size' => null,
|
||||||
|
'Compute' => null,
|
||||||
|
'You are offline.' => null,
|
||||||
|
'You have no privileges to update this table.' => null,
|
||||||
|
'Saving' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
'yes' => null,
|
||||||
|
'no' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => null,
|
||||||
|
'No' => null,
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -11,7 +11,7 @@ $translations = array(
|
|||||||
'Logged as: %s' => 'Přihlášen jako: %s',
|
'Logged as: %s' => 'Přihlášen jako: %s',
|
||||||
'Logout successful.' => 'Odhlášení proběhlo v pořádku.',
|
'Logout successful.' => 'Odhlášení proběhlo v pořádku.',
|
||||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Díky za použití Admineru, <a href="https://www.adminer.org/cs/donation/">přispějte</a> na vývoj.',
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Díky za použití Admineru, <a href="https://www.adminer.org/cs/donation/">přispějte</a> na vývoj.',
|
||||||
'Invalid credentials.' => 'Neplatné přihlašovací údaje.',
|
'Invalid server or credentials.' => 'Neplatný server nebo přihlašovací údaje.',
|
||||||
'There is a space in the input password which might be the cause.' => 'Problém může být, že je v zadaném hesle mezera.',
|
'There is a space in the input password which might be the cause.' => 'Problém může být, že je v zadaném hesle mezera.',
|
||||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer nepodporuje přístup k databázi bez hesla, <a href="https://www.adminer.org/cs/password/"%s>více informací</a>.',
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer nepodporuje přístup k databázi bez hesla, <a href="https://www.adminer.org/cs/password/"%s>více informací</a>.',
|
||||||
'Database does not support password.' => 'Databáze nepodporuje heslo.',
|
'Database does not support password.' => 'Databáze nepodporuje heslo.',
|
||||||
@@ -23,7 +23,7 @@ $translations = array(
|
|||||||
'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.',
|
'Connecting to privileged ports is not allowed.' => 'Připojování k privilegovaným portům není povoleno.',
|
||||||
'Disable %s or enable %s or %s extensions.' => 'Zakažte %s nebo povolte extenze %s nebo %s.',
|
'Disable %s or enable %s or %s extensions.' => 'Zakažte %s nebo povolte rozšíření %s nebo %s.',
|
||||||
'Session support must be enabled.' => 'Session proměnné musí být povolené.',
|
'Session support must be enabled.' => 'Session proměnné musí být povolené.',
|
||||||
'Session expired, please login again.' => 'Session vypršela, přihlašte se prosím znovu.',
|
'Session expired, please login again.' => 'Session vypršela, přihlašte se prosím znovu.',
|
||||||
'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.',
|
'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.',
|
||||||
@@ -346,4 +346,13 @@ $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',
|
||||||
|
|
||||||
|
// Plugins
|
||||||
|
'Columns' => 'Sloupce',
|
||||||
|
'Nullable' => 'Povoleno null',
|
||||||
|
'Default' => 'Výchozí',
|
||||||
|
'Yes' => 'Ano',
|
||||||
|
'No' => 'Ne',
|
||||||
|
'One Time Password' => 'Jednorázové heslo',
|
||||||
|
'Invalid OTP code.' => 'Neplatný kód OTP.',
|
||||||
);
|
);
|
||||||
|
@@ -9,7 +9,7 @@ $translations = array(
|
|||||||
'Logout' => 'Log ud',
|
'Logout' => 'Log ud',
|
||||||
'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 server or credentials.' => null,
|
||||||
'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.',
|
'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.',
|
||||||
@@ -279,4 +279,35 @@ $translations = array(
|
|||||||
'Type has been created.' => 'Typen er oprettet.',
|
'Type has been created.' => 'Typen er oprettet.',
|
||||||
'Alter type' => 'Ændre type',
|
'Alter type' => 'Ændre type',
|
||||||
'Saving' => 'Gemmer',
|
'Saving' => 'Gemmer',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'Materialized view' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'%d / ' => array(),
|
||||||
|
'Limit rows' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Default value' => null,
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'If you did not send this request from Adminer then close this page.' => null,
|
||||||
|
'Size' => null,
|
||||||
|
'Compute' => null,
|
||||||
|
'You are offline.' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => 'Ja',
|
||||||
|
'No' => 'Nej',
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -3,7 +3,7 @@ $translations = array(
|
|||||||
'Login' => 'Login',
|
'Login' => 'Login',
|
||||||
'Logout successful.' => 'Abmeldung erfolgreich.',
|
'Logout successful.' => 'Abmeldung erfolgreich.',
|
||||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Danke, dass Sie Adminer genutzt haben. <a href="https://www.adminer.org/de/donation/">Spenden willkommen!</a>',
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Danke, dass Sie Adminer genutzt haben. <a href="https://www.adminer.org/de/donation/">Spenden willkommen!</a>',
|
||||||
'Invalid credentials.' => 'Ungültige Anmelde-Informationen.',
|
'Invalid server or credentials.' => 'Ungültige Server oder Anmelde-Informationen.',
|
||||||
'Server' => 'Server',
|
'Server' => 'Server',
|
||||||
'Username' => 'Benutzer',
|
'Username' => 'Benutzer',
|
||||||
'Password' => 'Passwort',
|
'Password' => 'Passwort',
|
||||||
@@ -286,4 +286,28 @@ $translations = array(
|
|||||||
'no' => 'nein',
|
'no' => 'nein',
|
||||||
'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.',
|
'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 / ',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'Materialized view' => null,
|
||||||
|
'Vacuum' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Full table scan' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => 'Ja',
|
||||||
|
'No' => 'Nein',
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -10,13 +10,13 @@ $translations = array(
|
|||||||
'Logout' => 'Αποσύνδεση',
|
'Logout' => 'Αποσύνδεση',
|
||||||
'Logged as: %s' => 'Συνδεθήκατε ως %s',
|
'Logged as: %s' => 'Συνδεθήκατε ως %s',
|
||||||
'Logout successful.' => 'Αποσυνδεθήκατε με επιτυχία.',
|
'Logout successful.' => 'Αποσυνδεθήκατε με επιτυχία.',
|
||||||
'Invalid credentials.' => 'Εσφαλμένα Διαπιστευτήρια.',
|
'Invalid server or credentials.' => null,
|
||||||
'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/"%s>Implement</a> %s method to make it permanent.' => 'Έλειξε ο Κύριος Κωδικός. <a href="https://www.adminer.org/en/extension/"%s>Ενεργοποιήστε</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, τότε κλείστε αυτή τη σελίδα.',
|
||||||
'No extension' => 'Χωρίς Επεκτάσεις',
|
'No extension' => 'Καμία Επέκταση',
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'Καμία από τις υποστηριζόμενες επεκτάσεις PHP (%s) δεν είναι διαθέσιμη.',
|
'None of the supported PHP extensions (%s) are available.' => 'Καμία από τις υποστηριζόμενες επεκτάσεις PHP (%s) δεν είναι διαθέσιμη.',
|
||||||
'Session support must be enabled.' => 'Πρέπει να είναι ενεργοποιημένη η υποστήριξη συνεδριών.',
|
'Session support must be enabled.' => 'Πρέπει να είναι ενεργοποιημένη η υποστήριξη συνεδριών.',
|
||||||
'Session expired, please login again.' => 'Η συνεδρία έληξε, παρακαλώ συνδεθείτε ξανά.',
|
'Session expired, please login again.' => 'Η συνεδρία έληξε, παρακαλώ συνδεθείτε ξανά.',
|
||||||
@@ -26,7 +26,7 @@ $translations = array(
|
|||||||
// text direction - 'ltr' or 'rtl'
|
// text direction - 'ltr' or 'rtl'
|
||||||
'ltr' => 'ltr',
|
'ltr' => 'ltr',
|
||||||
|
|
||||||
'Privileges' => 'Προνόμια',
|
'Privileges' => 'Δικαιώματα',
|
||||||
'Create user' => 'Δημιουργία Χρήστη',
|
'Create user' => 'Δημιουργία Χρήστη',
|
||||||
'User has been dropped.' => 'Ο Χρήστης διαγράφηκε.',
|
'User has been dropped.' => 'Ο Χρήστης διαγράφηκε.',
|
||||||
'User has been altered.' => 'Ο Χρήστης τροποποιήθηκε.',
|
'User has been altered.' => 'Ο Χρήστης τροποποιήθηκε.',
|
||||||
@@ -38,7 +38,7 @@ $translations = array(
|
|||||||
'Revoke' => 'Ανάκληση',
|
'Revoke' => 'Ανάκληση',
|
||||||
|
|
||||||
'Process list' => 'Λίστα διεργασιών',
|
'Process list' => 'Λίστα διεργασιών',
|
||||||
'%d process(es) have been killed.' => array('Τερματίστηκαν %d διεργασία.', 'Τερματίστηκαν %d διεργασίες.'),
|
'%d process(es) have been killed.' => array('Τερματίστηκε %d διεργασία.', 'Τερματίστηκαν %d διεργασίες.'),
|
||||||
'Kill' => 'Τερματισμός',
|
'Kill' => 'Τερματισμός',
|
||||||
|
|
||||||
'Variables' => 'Μεταβλητές',
|
'Variables' => 'Μεταβλητές',
|
||||||
@@ -46,8 +46,8 @@ $translations = array(
|
|||||||
|
|
||||||
'SQL command' => 'Εντολή SQL',
|
'SQL command' => 'Εντολή SQL',
|
||||||
'%d query(s) executed OK.' => array('Το ερώτημα %d εκτελέστηκε ΟΚ.', 'Τα ερώτηματα %d εκτελέστηκαν ΟΚ.'),
|
'%d query(s) executed OK.' => array('Το ερώτημα %d εκτελέστηκε ΟΚ.', 'Τα ερώτηματα %d εκτελέστηκαν ΟΚ.'),
|
||||||
'Query executed OK, %d row(s) affected.' => array('Το ερώτημα εκτελέστηκε ΟΚ, επιρρεάστηκε %d σειρά.', 'Το ερώτημα εκτελέστηκε ΟΚ, επιρρεάστηκαν %d σειρές.'),
|
'Query executed OK, %d row(s) affected.' => array('Το ερώτημα εκτελέστηκε ΟΚ, επηρεάστηκε %d σειρά.', 'Το ερώτημα εκτελέστηκε ΟΚ, επηρεάστηκαν %d σειρές.'),
|
||||||
'No commands to execute.' => 'Δεν υπάρχει εντολή να εκτελεστεί.',
|
'No commands to execute.' => 'Δεν υπάρχουν εντολές να εκτελεστούν.',
|
||||||
'Error in query' => 'Σφάλμα στο ερώτημα',
|
'Error in query' => 'Σφάλμα στο ερώτημα',
|
||||||
'Execute' => 'Εκτέλεση',
|
'Execute' => 'Εκτέλεση',
|
||||||
'Stop on error' => 'Διακοπή όταν υπάρχει σφάλμα',
|
'Stop on error' => 'Διακοπή όταν υπάρχει σφάλμα',
|
||||||
@@ -58,16 +58,16 @@ $translations = array(
|
|||||||
'Clear' => 'Καθαρισμός',
|
'Clear' => 'Καθαρισμός',
|
||||||
'Edit all' => 'Επεξεργασία όλων',
|
'Edit all' => 'Επεξεργασία όλων',
|
||||||
|
|
||||||
'File upload' => 'Ανέβασμα αρχείου',
|
'File upload' => 'Μεταφόρτωση αρχείου',
|
||||||
'From server' => 'Από διακομιστή',
|
'From server' => 'Από διακομιστή',
|
||||||
'Webserver file %s' => 'Αρχείο %s από διακομιστή web',
|
'Webserver file %s' => 'Αρχείο %s από διακομιστή web',
|
||||||
'Run file' => 'Εκτέλεση αρχείου',
|
'Run file' => 'Εκτέλεση αρχείου',
|
||||||
'File does not exist.' => 'Το αρχείο δεν υπάρχει.',
|
'File does not exist.' => 'Το αρχείο δεν υπάρχει.',
|
||||||
'File uploads are disabled.' => 'Έχει απενεργοποιηθεί το ανέβασμα αρχείων.',
|
'File uploads are disabled.' => 'Έχει απενεργοποιηθεί η μεταφόρτωση αρχείων.',
|
||||||
'Unable to upload a file.' => 'Δεν είναι δυνατόν να ανεβεί το αρχείο.',
|
'Unable to upload a file.' => 'Αδυναμία μεταφόρτωσης αρχείου.',
|
||||||
'Maximum allowed file size is %sB.' => 'Το μέγιστο επιτρεπόμενο μέγεθος αρχείο για ανέβασμα είναι %sB.',
|
'Maximum allowed file size is %sB.' => 'Το μέγιστο επιτρεπόμενο μέγεθος αρχείου είναι %sB.',
|
||||||
'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.',
|
||||||
'You can upload a big SQL file via FTP and import it from server.' => 'Μπορείτε να ανεβάσετε ένα μεγάλο αρχείο SQL μέσω FTP και να το εισάγετε από το διακομιστή.',
|
'You can upload a big SQL file via FTP and import it from server.' => 'Μπορείτε να μεταφορτώσετε ένα μεγάλο αρχείο SQL μέσω FTP και να το εισάγετε από το διακομιστή.',
|
||||||
'You are offline.' => 'Βρίσκεστε εκτός σύνδεσης.',
|
'You are offline.' => 'Βρίσκεστε εκτός σύνδεσης.',
|
||||||
|
|
||||||
'Export' => 'Εξαγωγή',
|
'Export' => 'Εξαγωγή',
|
||||||
@@ -82,7 +82,7 @@ $translations = array(
|
|||||||
'database' => 'β. δεδομένων',
|
'database' => 'β. δεδομένων',
|
||||||
'Use' => 'χρήση',
|
'Use' => 'χρήση',
|
||||||
'Select database' => 'Επιλέξτε Β.Δ.',
|
'Select database' => 'Επιλέξτε Β.Δ.',
|
||||||
'Invalid database.' => 'Άκυρη Β.Δ.',
|
'Invalid database.' => 'Λανθασμένη Β.Δ.',
|
||||||
'Database has been dropped.' => 'Η Β.Δ. διαγράφηκε.',
|
'Database has been dropped.' => 'Η Β.Δ. διαγράφηκε.',
|
||||||
'Databases have been dropped.' => 'Οι Β.Δ. διαγράφηκαν.',
|
'Databases have been dropped.' => 'Οι Β.Δ. διαγράφηκαν.',
|
||||||
'Database has been created.' => 'Η Β.Δ. δημιουργήθηκε.',
|
'Database has been created.' => 'Η Β.Δ. δημιουργήθηκε.',
|
||||||
@@ -111,7 +111,7 @@ $translations = array(
|
|||||||
'Check' => 'Έλεγχος',
|
'Check' => 'Έλεγχος',
|
||||||
'Repair' => 'Επιδιόρθωση',
|
'Repair' => 'Επιδιόρθωση',
|
||||||
'Truncate' => 'Περικοπή',
|
'Truncate' => 'Περικοπή',
|
||||||
'Tables have been truncated.' => 'Οι πίνακες περικόπτηκαν.',
|
'Tables have been truncated.' => 'Οι πίνακες περικόπηκαν.',
|
||||||
'Move to other database' => 'Μεταφορά σε άλλη Β.Δ.',
|
'Move to other database' => 'Μεταφορά σε άλλη Β.Δ.',
|
||||||
'Move' => 'Μεταφορά',
|
'Move' => 'Μεταφορά',
|
||||||
'Tables have been moved.' => 'Οι πίνακες μεταφέρθηκαν.',
|
'Tables have been moved.' => 'Οι πίνακες μεταφέρθηκαν.',
|
||||||
@@ -119,11 +119,11 @@ $translations = array(
|
|||||||
'Tables have been copied.' => 'Οι πίνακες αντιγράφηκαν.',
|
'Tables have been copied.' => 'Οι πίνακες αντιγράφηκαν.',
|
||||||
|
|
||||||
'Routines' => 'Ρουτίνες',
|
'Routines' => 'Ρουτίνες',
|
||||||
'Routine has been called, %d row(s) affected.' => array('Η ρουτίνα εκτελέστηκε, επιρρεάστηκε %d σειρά.', 'Η ρουτίνα εκτελέστηκε, επιρρεάστηκαν %d σειρές.'),
|
'Routine has been called, %d row(s) affected.' => array('Η ρουτίνα εκτελέστηκε, επηρεάστηκε %d σειρά.', 'Η ρουτίνα εκτελέστηκε, επηρεάστηκαν %d σειρές.'),
|
||||||
'Call' => 'Εκτέλεση',
|
'Call' => 'Εκτέλεση',
|
||||||
'Parameter name' => 'Όνομα παραμέτρου',
|
'Parameter name' => 'Όνομα παραμέτρου',
|
||||||
'Create procedure' => 'Δημιουργία διαδικασίας',
|
'Create procedure' => 'Δημιουργία διαδικασίας',
|
||||||
'Create function' => 'Δημιουργία Λειτουργίας',
|
'Create function' => 'Δημιουργία Συνάρτησης',
|
||||||
'Routine has been dropped.' => 'Η ρουτίνα διαγράφηκε.',
|
'Routine has been dropped.' => 'Η ρουτίνα διαγράφηκε.',
|
||||||
'Routine has been altered.' => 'Η ρουτίνα τροποποιήθηκε.',
|
'Routine has been altered.' => 'Η ρουτίνα τροποποιήθηκε.',
|
||||||
'Routine has been created.' => 'Η ρουτίνα δημιουργήθηκε.',
|
'Routine has been created.' => 'Η ρουτίνα δημιουργήθηκε.',
|
||||||
@@ -151,7 +151,7 @@ $translations = array(
|
|||||||
'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.' => 'Οι πίνακες βελτιστοποιήθηκαν.',
|
||||||
'Table has been altered.' => 'Ο πίνακας τροποποιήθηκε.',
|
'Table has been altered.' => 'Ο πίνακας τροποποιήθηκε.',
|
||||||
'Table has been created.' => 'Ο πίνακας δημιουργήθηκε.',
|
'Table has been created.' => 'Ο πίνακας δημιουργήθηκε.',
|
||||||
@@ -210,7 +210,7 @@ $translations = array(
|
|||||||
'Add foreign key' => 'Προσθήκη εξαρτημένου κλειδιού',
|
'Add foreign key' => 'Προσθήκη εξαρτημένου κλειδιού',
|
||||||
'ON DELETE' => 'ΚΑΤΑ ΤΗ ΔΙΑΓΡΑΦΗ',
|
'ON DELETE' => 'ΚΑΤΑ ΤΗ ΔΙΑΓΡΑΦΗ',
|
||||||
'ON UPDATE' => 'ΚΑΤΑ ΤΗΝ ΑΛΛΑΓΗ',
|
'ON UPDATE' => 'ΚΑΤΑ ΤΗΝ ΑΛΛΑΓΗ',
|
||||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Οι στήλες στη πηγή και το στόχο πρέπει να έχουν τον ίδιο τύπο, πρέπει να υπάρχει δείκτης στη στήλη στόχο και να υπάρχουν εξαρτημένα δεδομένα.',
|
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Οι στήλες στην πηγή και το στόχο πρέπει να έχουν τον ίδιο τύπο, πρέπει να υπάρχει δείκτης στη στήλη στόχο και να υπάρχουν εξαρτημένα δεδομένα.',
|
||||||
|
|
||||||
'Triggers' => 'Εναύσματα',
|
'Triggers' => 'Εναύσματα',
|
||||||
'Add trigger' => 'Προσθήκη εναύσματος',
|
'Add trigger' => 'Προσθήκη εναύσματος',
|
||||||
@@ -262,7 +262,7 @@ $translations = array(
|
|||||||
'Item%s has been inserted.' => 'Η εγγραφή%s εισήχθη.',
|
'Item%s has been inserted.' => 'Η εγγραφή%s εισήχθη.',
|
||||||
'Item has been deleted.' => 'Η εγγραφή διαγράφηκε.',
|
'Item has been deleted.' => 'Η εγγραφή διαγράφηκε.',
|
||||||
'Item has been updated.' => 'Η εγγραφή ενημερώθηκε.',
|
'Item has been updated.' => 'Η εγγραφή ενημερώθηκε.',
|
||||||
'%d item(s) have been affected.' => array('Επιρρεάστηκε %d εγγραφή.', 'Επιρρεάστηκαν %d εγγραφές.'),
|
'%d item(s) have been affected.' => array('Επηρεάστηκε %d εγγραφή.', 'Επηρεάστηκαν %d εγγραφές.'),
|
||||||
'New item' => 'Νέα εγγραφή',
|
'New item' => 'Νέα εγγραφή',
|
||||||
'original' => 'πρωτότυπο',
|
'original' => 'πρωτότυπο',
|
||||||
// label for value '' in enum data type
|
// label for value '' in enum data type
|
||||||
@@ -274,7 +274,7 @@ $translations = array(
|
|||||||
'Save and continue edit' => 'Αποθήκευση και συνέχεια επεξεργασίας',
|
'Save and continue edit' => 'Αποθήκευση και συνέχεια επεξεργασίας',
|
||||||
'Save and insert next' => 'Αποθήκευση και εισαγωγή επόμενου',
|
'Save and insert next' => 'Αποθήκευση και εισαγωγή επόμενου',
|
||||||
'Selected' => 'Επιλεγμένα',
|
'Selected' => 'Επιλεγμένα',
|
||||||
'Clone' => 'Κλονοποίηση',
|
'Clone' => 'Κλωνοποίηση',
|
||||||
'Delete' => 'Διαγραφή',
|
'Delete' => 'Διαγραφή',
|
||||||
'You have no privileges to update this table.' => 'Δεν έχετε δικαίωμα να τροποποιήσετε αυτό τον πίνακα.',
|
'You have no privileges to update this table.' => 'Δεν έχετε δικαίωμα να τροποποιήσετε αυτό τον πίνακα.',
|
||||||
|
|
||||||
@@ -283,7 +283,7 @@ $translations = array(
|
|||||||
'Subject' => 'Θέμα',
|
'Subject' => 'Θέμα',
|
||||||
'Attachments' => 'Συνημμένα',
|
'Attachments' => 'Συνημμένα',
|
||||||
'Send' => 'Αποστολή',
|
'Send' => 'Αποστολή',
|
||||||
'%d e-mail(s) have been sent.' => array('%d e-mail απεστάλλει.', '%d e-mail απεστάλλησαν.'),
|
'%d e-mail(s) have been sent.' => array('%d e-mail απεστάλη.', '%d e-mail απεστάλησαν.'),
|
||||||
|
|
||||||
// data type descriptions
|
// data type descriptions
|
||||||
'Numbers' => 'Αριθμοί',
|
'Numbers' => 'Αριθμοί',
|
||||||
@@ -333,4 +333,26 @@ $translations = array(
|
|||||||
'Type has been dropped.' => 'Ο τύπος διαγράφηκε.',
|
'Type has been dropped.' => 'Ο τύπος διαγράφηκε.',
|
||||||
'Type has been created.' => 'Ο τύπος δημιουργήθηκε.',
|
'Type has been created.' => 'Ο τύπος δημιουργήθηκε.',
|
||||||
'Alter type' => 'Τροποποίηση τύπου',
|
'Alter type' => 'Τροποποίηση τύπου',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => null,
|
||||||
|
'No' => null,
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
$translations = array(
|
$translations = array(
|
||||||
'Login' => 'Login',
|
'Login' => 'Login',
|
||||||
'Logout successful.' => 'Sesión finalizada con éxito.',
|
'Logout successful.' => 'Sesión finalizada con éxito.',
|
||||||
'Invalid credentials.' => 'Usuario y/o clave de acceso incorrecta.',
|
'Invalid server or credentials.' => null,
|
||||||
'Server' => 'Servidor',
|
'Server' => 'Servidor',
|
||||||
'Username' => 'Usuario',
|
'Username' => 'Usuario',
|
||||||
'Password' => 'Contraseña',
|
'Password' => 'Contraseña',
|
||||||
@@ -265,4 +265,49 @@ $translations = array(
|
|||||||
'Permanent link' => 'Enlace permanente',
|
'Permanent link' => 'Enlace permanente',
|
||||||
'Edit all' => 'Editar todos',
|
'Edit all' => 'Editar todos',
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
'HH:MM:SS' => 'HH:MM:SS',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'Tables have been optimized.' => null,
|
||||||
|
'Materialized view' => null,
|
||||||
|
'Vacuum' => null,
|
||||||
|
'Selected' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'File must be in UTF-8 encoding.' => null,
|
||||||
|
'Modify' => null,
|
||||||
|
'Load more data' => null,
|
||||||
|
'Loading' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'%d / ' => array(),
|
||||||
|
'Limit rows' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Default value' => null,
|
||||||
|
'Full table scan' => null,
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'If you did not send this request from Adminer then close this page.' => null,
|
||||||
|
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||||
|
'Size' => null,
|
||||||
|
'Compute' => null,
|
||||||
|
'You are offline.' => null,
|
||||||
|
'You have no privileges to update this table.' => null,
|
||||||
|
'Saving' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
'yes' => null,
|
||||||
|
'no' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => null,
|
||||||
|
'No' => null,
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
$translations = array(
|
$translations = array(
|
||||||
'Login' => 'Logi sisse',
|
'Login' => 'Logi sisse',
|
||||||
'Logout successful.' => 'Väljalogimine õnnestus.',
|
'Logout successful.' => 'Väljalogimine õnnestus.',
|
||||||
'Invalid credentials.' => 'Ebakorrektsed andmed.',
|
'Invalid server or credentials.' => null,
|
||||||
'Server' => 'Server',
|
'Server' => 'Server',
|
||||||
'Username' => 'Kasutajanimi',
|
'Username' => 'Kasutajanimi',
|
||||||
'Password' => 'Parool',
|
'Password' => 'Parool',
|
||||||
@@ -265,4 +265,49 @@ $translations = array(
|
|||||||
'Permanent link' => 'Püsilink',
|
'Permanent link' => 'Püsilink',
|
||||||
'Edit all' => 'Muuda kõiki',
|
'Edit all' => 'Muuda kõiki',
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
'HH:MM:SS' => 'HH:MM:SS',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'Tables have been optimized.' => null,
|
||||||
|
'Materialized view' => null,
|
||||||
|
'Vacuum' => null,
|
||||||
|
'Selected' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'File must be in UTF-8 encoding.' => null,
|
||||||
|
'Modify' => null,
|
||||||
|
'Load more data' => null,
|
||||||
|
'Loading' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'%d / ' => array(),
|
||||||
|
'Limit rows' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Default value' => null,
|
||||||
|
'Full table scan' => null,
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'If you did not send this request from Adminer then close this page.' => null,
|
||||||
|
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||||
|
'Size' => null,
|
||||||
|
'Compute' => null,
|
||||||
|
'You are offline.' => null,
|
||||||
|
'You have no privileges to update this table.' => null,
|
||||||
|
'Saving' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
'yes' => null,
|
||||||
|
'no' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => null,
|
||||||
|
'No' => null,
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -10,7 +10,7 @@ $translations = array(
|
|||||||
'Logout' => 'خروج',
|
'Logout' => 'خروج',
|
||||||
'Logged as: %s' => 'ورود به عنوان: %s',
|
'Logged as: %s' => 'ورود به عنوان: %s',
|
||||||
'Logout successful.' => 'با موفقیت خارج شدید.',
|
'Logout successful.' => 'با موفقیت خارج شدید.',
|
||||||
'Invalid credentials.' => 'اعتبار سنجی نامعتبر.',
|
'Invalid server or credentials.' => null,
|
||||||
'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/"%s>Implement</a> %s method to make it permanent.' => 'رمز اصلی باطل شده است. روش %s را <a href="https://www.adminer.org/en/extension/"%s>پیاده سازی</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' => 'زبان',
|
||||||
@@ -331,4 +331,28 @@ $translations = array(
|
|||||||
'Type has been dropped.' => 'نوع حذف شد.',
|
'Type has been dropped.' => 'نوع حذف شد.',
|
||||||
'Type has been created.' => 'نوع ایجاد شد.',
|
'Type has been created.' => 'نوع ایجاد شد.',
|
||||||
'Alter type' => 'ویرایش نوع',
|
'Alter type' => 'ویرایش نوع',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'If you did not send this request from Adminer then close this page.' => null,
|
||||||
|
'Saving' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => null,
|
||||||
|
'No' => null,
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -10,7 +10,7 @@ $translations = array(
|
|||||||
'Logout' => 'Kirjaudu ulos',
|
'Logout' => 'Kirjaudu ulos',
|
||||||
'Logged as: %s' => 'Olet kirjautunut käyttäjänä: %s',
|
'Logged as: %s' => 'Olet kirjautunut käyttäjänä: %s',
|
||||||
'Logout successful.' => 'Uloskirjautuminen onnistui.',
|
'Logout successful.' => 'Uloskirjautuminen onnistui.',
|
||||||
'Invalid credentials.' => 'Virheelliset kirjautumistiedot.',
|
'Invalid server or credentials.' => null,
|
||||||
'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/"%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.',
|
'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',
|
||||||
@@ -347,4 +347,12 @@ $translations = array(
|
|||||||
'Unknown error.' => 'Tuntematon virhe.',
|
'Unknown error.' => 'Tuntematon virhe.',
|
||||||
'Database does not support password.' => 'Tietokanta ei tue salasanaa.',
|
'Database does not support password.' => 'Tietokanta ei tue salasanaa.',
|
||||||
'Disable %s or enable %s or %s extensions.' => 'Poista käytöstä %s tai ota käyttöön laajennus %s tai %s.',
|
'Disable %s or enable %s or %s extensions.' => 'Poista käytöstä %s tai ota käyttöön laajennus %s tai %s.',
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => 'Kyllä',
|
||||||
|
'No' => 'Ei',
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
$translations = array(
|
$translations = array(
|
||||||
'Login' => 'Authentification',
|
'Login' => 'Authentification',
|
||||||
'Logout successful.' => 'Au revoir !',
|
'Logout successful.' => 'Au revoir !',
|
||||||
'Invalid credentials.' => 'Authentification échouée.',
|
'Invalid server or credentials.' => null,
|
||||||
'Server' => 'Serveur',
|
'Server' => 'Serveur',
|
||||||
'Username' => 'Utilisateur',
|
'Username' => 'Utilisateur',
|
||||||
'Password' => 'Mot de passe',
|
'Password' => 'Mot de passe',
|
||||||
@@ -288,4 +288,26 @@ $translations = array(
|
|||||||
'Default value' => 'Valeur par défaut',
|
'Default value' => 'Valeur par défaut',
|
||||||
'If you did not send this request from Adminer then close this page.' => 'Si vous n\'avez pas envoyé cette requête depuis Adminer, alors fermez cette page.',
|
'If you did not send this request from Adminer then close this page.' => 'Si vous n\'avez pas envoyé cette requête depuis Adminer, alors fermez cette page.',
|
||||||
'You are offline.' => 'Vous êtes hors ligne.',
|
'You are offline.' => 'Vous êtes hors ligne.',
|
||||||
|
|
||||||
|
'Drop %s?' => 'Supprimer %s?',
|
||||||
|
'overwrite' => 'écraser',
|
||||||
|
'DB' => 'BD',
|
||||||
|
'ATTACH queries are not supported.' => 'Requêtes ATTACH ne sont pas supportées.',
|
||||||
|
'Warnings' => 'Avertissements',
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer ne supporte pas l\'accès aux bases de données sans mot de passe, <a href="https://www.adminer.org/en/password/"%s>plus d\'information</a>.',
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => 'Cette action sera exécutée après s\'être connecté avec les mêmes données de connexion.',
|
||||||
|
'Connecting to privileged ports is not allowed.' => 'La connexion aux ports privilégiés n\'est pas autorisée.',
|
||||||
|
'There is a space in the input password which might be the cause.' => 'Il y a un espace dans le mot de passe entré qui pourrait en être la cause.',
|
||||||
|
'Unknown error.' => 'Erreur inconnue',
|
||||||
|
'Database does not support password.' => 'La base de données ne support pas les mots de passe',
|
||||||
|
'Disable %s or enable %s or %s extensions.' => 'Désactiver %s ou activer %s or %s extensions.',
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => 'Oui',
|
||||||
|
'No' => 'Non',
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
$translations = array(
|
$translations = array(
|
||||||
'Login' => 'Conectar',
|
'Login' => 'Conectar',
|
||||||
'Logout successful.' => 'Pechouse a sesión con éxito.',
|
'Logout successful.' => 'Pechouse a sesión con éxito.',
|
||||||
'Invalid credentials.' => 'Credenciais (usuario e/ou contrasinal) inválidos.',
|
'Invalid server or credentials.' => null,
|
||||||
'Server' => 'Servidor',
|
'Server' => 'Servidor',
|
||||||
'Username' => 'Usuario',
|
'Username' => 'Usuario',
|
||||||
'Password' => 'Contrasinal',
|
'Password' => 'Contrasinal',
|
||||||
@@ -288,4 +288,26 @@ $translations = array(
|
|||||||
'Saving' => 'Gardando',
|
'Saving' => 'Gardando',
|
||||||
'yes' => 'si',
|
'yes' => 'si',
|
||||||
'no' => 'non',
|
'no' => 'non',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => 'Si',
|
||||||
|
'No' => 'Non',
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
$translations = array(
|
$translations = array(
|
||||||
'Login' => 'התחברות',
|
'Login' => 'התחברות',
|
||||||
'Logout successful.' => 'ההתחברות הצליחה',
|
'Logout successful.' => 'ההתחברות הצליחה',
|
||||||
'Invalid credentials.' => 'פרטי התחברות שגויים',
|
'Invalid server or credentials.' => null,
|
||||||
'Server' => 'שרת',
|
'Server' => 'שרת',
|
||||||
'Username' => 'שם משתמש',
|
'Username' => 'שם משתמש',
|
||||||
'Password' => 'סיסמה',
|
'Password' => 'סיסמה',
|
||||||
@@ -290,4 +290,24 @@ $translations = array(
|
|||||||
'Saving' => 'שומר',
|
'Saving' => 'שומר',
|
||||||
'yes' => 'כן',
|
'yes' => 'כן',
|
||||||
'no' => 'לא',
|
'no' => 'לא',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => null,
|
||||||
|
'No' => null,
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
$translations = array(
|
$translations = array(
|
||||||
'Login' => 'Belépés',
|
'Login' => 'Belépés',
|
||||||
'Logout successful.' => 'Sikeres kilépés.',
|
'Logout successful.' => 'Sikeres kilépés.',
|
||||||
'Invalid credentials.' => 'Érvénytelen adatok.',
|
'Invalid server or credentials.' => null,
|
||||||
'Server' => 'Szerver',
|
'Server' => 'Szerver',
|
||||||
'Username' => 'Felhasználó',
|
'Username' => 'Felhasználó',
|
||||||
'Password' => 'Jelszó',
|
'Password' => 'Jelszó',
|
||||||
@@ -264,4 +264,50 @@ $translations = array(
|
|||||||
'Permanent link' => 'Hivatkozás',
|
'Permanent link' => 'Hivatkozás',
|
||||||
'Edit all' => 'Összes szerkesztése',
|
'Edit all' => 'Összes szerkesztése',
|
||||||
'HH:MM:SS' => 'óó:pp:mm',
|
'HH:MM:SS' => 'óó:pp:mm',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'Tables have been optimized.' => null,
|
||||||
|
'Materialized view' => null,
|
||||||
|
'Vacuum' => null,
|
||||||
|
'Selected' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'Ctrl+click on a value to modify it.' => null,
|
||||||
|
'File must be in UTF-8 encoding.' => null,
|
||||||
|
'Modify' => null,
|
||||||
|
'Load more data' => null,
|
||||||
|
'Loading' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'%d / ' => array(),
|
||||||
|
'Limit rows' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Default value' => null,
|
||||||
|
'Full table scan' => null,
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'If you did not send this request from Adminer then close this page.' => null,
|
||||||
|
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||||
|
'Size' => null,
|
||||||
|
'Compute' => null,
|
||||||
|
'You are offline.' => null,
|
||||||
|
'You have no privileges to update this table.' => null,
|
||||||
|
'Saving' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
'yes' => null,
|
||||||
|
'no' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => null,
|
||||||
|
'No' => null,
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -10,7 +10,7 @@ $translations = array(
|
|||||||
'Logout' => 'Keluar',
|
'Logout' => 'Keluar',
|
||||||
'Logged as: %s' => 'Masuk sebagai: %s',
|
'Logged as: %s' => 'Masuk sebagai: %s',
|
||||||
'Logout successful.' => 'Berhasil keluar.',
|
'Logout successful.' => 'Berhasil keluar.',
|
||||||
'Invalid credentials.' => 'Akses tidak sah.',
|
'Invalid server or credentials.' => null,
|
||||||
'Language' => 'Bahasa',
|
'Language' => 'Bahasa',
|
||||||
'Invalid CSRF token. Send the form again.' => 'Token CSRF tidak sah. Kirim ulang formulir.',
|
'Invalid CSRF token. Send the form again.' => 'Token CSRF tidak sah. Kirim ulang formulir.',
|
||||||
'No extension' => 'Ekstensi tidak ada',
|
'No extension' => 'Ekstensi tidak ada',
|
||||||
@@ -313,4 +313,46 @@ $translations = array(
|
|||||||
'Type has been dropped.' => 'Jenis berhasil dihapus.',
|
'Type has been dropped.' => 'Jenis berhasil dihapus.',
|
||||||
'Type has been created.' => 'Jenis berhasil dibuat.',
|
'Type has been created.' => 'Jenis berhasil dibuat.',
|
||||||
'Alter type' => 'Ubah jenis',
|
'Alter type' => 'Ubah jenis',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'Materialized view' => null,
|
||||||
|
'Vacuum' => null,
|
||||||
|
'Selected' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'Ctrl+click on a value to modify it.' => null,
|
||||||
|
'File must be in UTF-8 encoding.' => null,
|
||||||
|
'Modify' => null,
|
||||||
|
'Load more data' => null,
|
||||||
|
'Loading' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'%d / ' => array(),
|
||||||
|
'Limit rows' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Default value' => null,
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'If you did not send this request from Adminer then close this page.' => null,
|
||||||
|
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||||
|
'Size' => null,
|
||||||
|
'Compute' => null,
|
||||||
|
'You are offline.' => null,
|
||||||
|
'You have no privileges to update this table.' => null,
|
||||||
|
'Saving' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => null,
|
||||||
|
'No' => null,
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
$translations = array(
|
$translations = array(
|
||||||
'Login' => 'Autenticazione',
|
'Login' => 'Autenticazione',
|
||||||
'Logout successful.' => 'Uscita effettuata con successo.',
|
'Logout successful.' => 'Uscita effettuata con successo.',
|
||||||
'Invalid credentials.' => 'Credenziali non valide.',
|
'Invalid server or credentials.' => 'Server o credenziali non valide.',
|
||||||
'Server' => 'Server',
|
'Server' => 'Server',
|
||||||
'Username' => 'Utente',
|
'Username' => 'Utente',
|
||||||
'Password' => 'Password',
|
'Password' => 'Password',
|
||||||
@@ -265,4 +265,49 @@ $translations = array(
|
|||||||
'Permanent link' => 'Link permanente',
|
'Permanent link' => 'Link permanente',
|
||||||
'Edit all' => 'Modifica tutto',
|
'Edit all' => 'Modifica tutto',
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
'HH:MM:SS' => 'HH:MM:SS',
|
||||||
|
|
||||||
|
'Drop %s?' => 'Scartare %s?',
|
||||||
|
'Tables have been optimized.' => 'Le tabelle sono state ottimizzate',
|
||||||
|
'Materialized view' => 'Vista materializzata',
|
||||||
|
'Vacuum' => 'Aspira',
|
||||||
|
'Selected' => 'Selezionato',
|
||||||
|
'overwrite' => 'sovrascrivi',
|
||||||
|
'DB' => 'DB',
|
||||||
|
'File must be in UTF-8 encoding.' => 'Il file deve avere codifica UTF-8.',
|
||||||
|
'Modify' => 'Modifica',
|
||||||
|
'Load more data' => 'Carica piú dati',
|
||||||
|
'Loading' => 'Caricamento',
|
||||||
|
'ATTACH queries are not supported.' => 'ATTACH queries non sono supportate.',
|
||||||
|
'Warnings' => 'Attenzione',
|
||||||
|
'%d / ' => array('%d / '),
|
||||||
|
'Limit rows' => 'Limite righe',
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer non supporta accesso a databse senza password, <a href="https://www.adminer.org/it/password/"%s>piú informazioni</a>.',
|
||||||
|
'Default value' => 'Valore predefinito',
|
||||||
|
'Full table scan' => 'Analizza intera tabella',
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array('Troppi tentativi infruttuosi di login, si prega di riprovare in %d minuto.', 'Troppi tentativi infruttuosi di login, si prega di riprovare in %d minuti.'),
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'La password principale é scaduta. <a href="https://www.adminer.org/it/extension/"%s>Implementare</a> %s come metodo per renderla permanente.',
|
||||||
|
'The action will be performed after successful login with the same credentials.' => 'La azione verrá eseguita dopo un login valido con le stesse credenziali.',
|
||||||
|
'Connecting to privileged ports is not allowed.' => 'LA connessione a porte privilegiate non é permessa.',
|
||||||
|
'There is a space in the input password which might be the cause.' => 'Esiste uno spazio nella passoword inserita che potrebbe essere la causa.',
|
||||||
|
'If you did not send this request from Adminer then close this page.' => 'Se non hai inviato tu la richiesta tramite Adminer puoi chiudere la pagina.',
|
||||||
|
'You can upload a big SQL file via FTP and import it from server.' => 'Puoi caricare un grande file SQL tramite FTP ed impirtarlo dal server.',
|
||||||
|
'Size' => 'Taglia',
|
||||||
|
'Compute' => 'Elabora',
|
||||||
|
'You are offline.' => 'Sei disconnesso.',
|
||||||
|
'You have no privileges to update this table.' => 'Non hai i privilegi per aggiornare questa tabella.',
|
||||||
|
'Saving' => 'Salvataggio',
|
||||||
|
'Unknown error.' => 'Errore sconosciuto',
|
||||||
|
'Database does not support password.' => 'Il database non supporta password.',
|
||||||
|
'Disable %s or enable %s or %s extensions.' => 'Disabilita %s o abilita %s oppure %s estensioni.',
|
||||||
|
'yes' => 'si',
|
||||||
|
'no' => 'no',
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => 'Si',
|
||||||
|
'No' => 'No',
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
$translations = array(
|
$translations = array(
|
||||||
'Login' => 'ログイン',
|
'Login' => 'ログイン',
|
||||||
'Logout successful.' => 'ログアウト',
|
'Logout successful.' => 'ログアウト',
|
||||||
'Invalid credentials.' => '不正なログイン',
|
'Invalid server or credentials.' => null,
|
||||||
'Server' => 'サーバ',
|
'Server' => 'サーバ',
|
||||||
'Username' => 'ユーザ名',
|
'Username' => 'ユーザ名',
|
||||||
'Password' => 'パスワード',
|
'Password' => 'パスワード',
|
||||||
@@ -274,4 +274,40 @@ $translations = array(
|
|||||||
'yes' => 'はい',
|
'yes' => 'はい',
|
||||||
'no' => 'いいえ',
|
'no' => 'いいえ',
|
||||||
'Default value' => '既定値',
|
'Default value' => '既定値',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'Tables have been optimized.' => null,
|
||||||
|
'Materialized view' => null,
|
||||||
|
'Vacuum' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'Ctrl+click on a value to modify it.' => null,
|
||||||
|
'File must be in UTF-8 encoding.' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'%d / ' => array(),
|
||||||
|
'Limit rows' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Full table scan' => null,
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'If you did not send this request from Adminer then close this page.' => null,
|
||||||
|
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||||
|
'You are offline.' => null,
|
||||||
|
'You have no privileges to update this table.' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => null,
|
||||||
|
'No' => null,
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
$translations = array(
|
$translations = array(
|
||||||
'Login' => 'შესვლა',
|
'Login' => 'შესვლა',
|
||||||
'Logout successful.' => 'გამოხვედით სისტემიდან.',
|
'Logout successful.' => 'გამოხვედით სისტემიდან.',
|
||||||
'Invalid credentials.' => 'არასწორი მომხმარებელი ან პაროლი.',
|
'Invalid server or credentials.' => null,
|
||||||
'Server' => 'სერვერი',
|
'Server' => 'სერვერი',
|
||||||
'Username' => 'მომხმარებელი',
|
'Username' => 'მომხმარებელი',
|
||||||
'Password' => 'პაროლი',
|
'Password' => 'პაროლი',
|
||||||
@@ -300,4 +300,14 @@ $translations = array(
|
|||||||
'Unknown error.' => 'უცნობი შეცდომა.',
|
'Unknown error.' => 'უცნობი შეცდომა.',
|
||||||
'Database does not support password.' => 'ბაზაში არაა მხარდაჭერილი პაროლი.',
|
'Database does not support password.' => 'ბაზაში არაა მხარდაჭერილი პაროლი.',
|
||||||
'Disable %s or enable %s or %s extensions.' => 'გათიშეთ %s ან ჩართეთ %s ან %s გაფართოება.',
|
'Disable %s or enable %s or %s extensions.' => 'გათიშეთ %s ან ჩართეთ %s ან %s გაფართოება.',
|
||||||
|
|
||||||
|
'overwrite' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => null,
|
||||||
|
'No' => null,
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -121,7 +121,7 @@ $translations = array(
|
|||||||
'Indexes have been altered.' => '색인을 변경했습니다.',
|
'Indexes have been altered.' => '색인을 변경했습니다.',
|
||||||
'Indexes' => '색인',
|
'Indexes' => '색인',
|
||||||
'Insert' => '삽입',
|
'Insert' => '삽입',
|
||||||
'Invalid credentials.' => '잘못된 로그인',
|
'Invalid server or credentials.' => null,
|
||||||
'Invalid CSRF token. Send the form again.' => '잘못된 CSRF 토큰입니다. 다시 보내주십시오.',
|
'Invalid CSRF token. Send the form again.' => '잘못된 CSRF 토큰입니다. 다시 보내주십시오.',
|
||||||
'Invalid database.' => '잘못된 데이터베이스입니다.',
|
'Invalid database.' => '잘못된 데이터베이스입니다.',
|
||||||
'Invalid schema.' => '잘못된 스키마입니다.',
|
'Invalid schema.' => '잘못된 스키마입니다.',
|
||||||
@@ -277,4 +277,37 @@ $translations = array(
|
|||||||
'You are offline.' => '오프라인입니다.',
|
'You are offline.' => '오프라인입니다.',
|
||||||
'You can upload a big SQL file via FTP and import it from server.' => '큰 SQL 파일은 FTP를 통하여 업로드하여 서버에서 가져올 수 있습니다.',
|
'You can upload a big SQL file via FTP and import it from server.' => '큰 SQL 파일은 FTP를 통하여 업로드하여 서버에서 가져올 수 있습니다.',
|
||||||
'You have no privileges to update this table.' => '이 테이블을 업데이트할 권한이 없습니다.',
|
'You have no privileges to update this table.' => '이 테이블을 업데이트할 권한이 없습니다.',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'Tables have been optimized.' => null,
|
||||||
|
'Materialized view' => null,
|
||||||
|
'User types' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'Ctrl+click on a value to modify it.' => null,
|
||||||
|
'File must be in UTF-8 encoding.' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'%d / ' => array(),
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Default value' => null,
|
||||||
|
'Full table scan' => null,
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'If you did not send this request from Adminer then close this page.' => null,
|
||||||
|
'Saving' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
'no' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => null,
|
||||||
|
'No' => null,
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -10,7 +10,7 @@ $translations = array(
|
|||||||
'Logout' => 'Atsijungti',
|
'Logout' => 'Atsijungti',
|
||||||
'Logged as: %s' => 'Prisijungęs kaip: %s',
|
'Logged as: %s' => 'Prisijungęs kaip: %s',
|
||||||
'Logout successful.' => 'Jūs atsijungėte nuo sistemos.',
|
'Logout successful.' => 'Jūs atsijungėte nuo sistemos.',
|
||||||
'Invalid credentials.' => 'Neteisingi prisijungimo duomenys.',
|
'Invalid server or credentials.' => null,
|
||||||
'Language' => 'Kalba',
|
'Language' => 'Kalba',
|
||||||
'Invalid CSRF token. Send the form again.' => 'Neteisingas CSRF tokenas. Bandykite siųsti formos duomenis dar kartą.',
|
'Invalid CSRF token. Send the form again.' => 'Neteisingas CSRF tokenas. Bandykite siųsti formos duomenis dar kartą.',
|
||||||
'No extension' => 'Nėra plėtiio',
|
'No extension' => 'Nėra plėtiio',
|
||||||
@@ -309,4 +309,50 @@ $translations = array(
|
|||||||
'Type has been dropped.' => 'Tipas pašalintas.',
|
'Type has been dropped.' => 'Tipas pašalintas.',
|
||||||
'Type has been created.' => 'Tipas sukurtas.',
|
'Type has been created.' => 'Tipas sukurtas.',
|
||||||
'Alter type' => 'Keisti tipą',
|
'Alter type' => 'Keisti tipą',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'Tables have been optimized.' => null,
|
||||||
|
'Materialized view' => null,
|
||||||
|
'Vacuum' => null,
|
||||||
|
'Selected' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'Ctrl+click on a value to modify it.' => null,
|
||||||
|
'File must be in UTF-8 encoding.' => null,
|
||||||
|
'Modify' => null,
|
||||||
|
'Load more data' => null,
|
||||||
|
'Loading' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'%d / ' => array(),
|
||||||
|
'Limit rows' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Default value' => null,
|
||||||
|
'Full table scan' => null,
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'If you did not send this request from Adminer then close this page.' => null,
|
||||||
|
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||||
|
'Size' => null,
|
||||||
|
'Compute' => null,
|
||||||
|
'You are offline.' => null,
|
||||||
|
'You have no privileges to update this table.' => null,
|
||||||
|
'Saving' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
'yes' => null,
|
||||||
|
'no' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => null,
|
||||||
|
'No' => null,
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
313
adminer/lang/lv.inc.php
Normal file
313
adminer/lang/lv.inc.php
Normal file
@@ -0,0 +1,313 @@
|
|||||||
|
<?php
|
||||||
|
$translations = array(
|
||||||
|
'Login' => 'Ieiet',
|
||||||
|
'Logout successful.' => 'Jūs veiksmīgi izgājāt no sistēmas.',
|
||||||
|
'Invalid server or credentials.' => null,
|
||||||
|
'Server' => 'Serveris',
|
||||||
|
'Username' => 'Lietotājs',
|
||||||
|
'Password' => 'Parole',
|
||||||
|
'Select database' => 'Izvēlēties datubāzi',
|
||||||
|
'Invalid database.' => 'Nederīga datubāze.',
|
||||||
|
'Table has been dropped.' => 'Tabula dzēsta.',
|
||||||
|
'Table has been altered.' => 'Tabula mainīta.',
|
||||||
|
'Table has been created.' => 'Tabula izveidota.',
|
||||||
|
'Alter table' => 'Mainīt tabulu',
|
||||||
|
'Create table' => 'Izveidot tabulu',
|
||||||
|
'Table name' => 'Tabulas nosaukums',
|
||||||
|
'engine' => 'Tabulas tips',
|
||||||
|
'collation' => 'Kolācija',
|
||||||
|
'Column name' => 'Lauka nosaukums',
|
||||||
|
'Type' => 'Tips',
|
||||||
|
'Length' => 'Garums',
|
||||||
|
'Auto Increment' => 'Auto inkrements',
|
||||||
|
'Options' => 'Opcijas',
|
||||||
|
'Save' => 'Saglabāt',
|
||||||
|
'Drop' => 'Dzēst',
|
||||||
|
'Database has been dropped.' => 'Datubāze tika nodzēsta.',
|
||||||
|
'Database has been created.' => 'Datubāze tika izveidota.',
|
||||||
|
'Database has been renamed.' => 'Datubāze tika pārsaukta.',
|
||||||
|
'Database has been altered.' => 'Datubāze tika mainīta.',
|
||||||
|
'Alter database' => 'Mainīt datubāzi',
|
||||||
|
'Create database' => 'Izveidot datubāzi',
|
||||||
|
'SQL command' => 'SQL pieprasījums',
|
||||||
|
'Logout' => 'Iziet',
|
||||||
|
'database' => 'datubāze',
|
||||||
|
'Use' => 'Lietot',
|
||||||
|
'No tables.' => 'Datubāzē nav tabulu.',
|
||||||
|
'select' => 'izvēlēties',
|
||||||
|
'Item has been deleted.' => 'Ieraksts dzests.',
|
||||||
|
'Item has been updated.' => 'Ieraksts atjaunots.',
|
||||||
|
'Item%s has been inserted.' => 'Ieraksti tika ievietoti.',
|
||||||
|
'Edit' => 'Rediģēt',
|
||||||
|
'Insert' => 'Ievietot',
|
||||||
|
'Save and insert next' => 'Saglabāt un ievietot nākamo',
|
||||||
|
'Delete' => 'Dzēst',
|
||||||
|
'Database' => 'Datubāze',
|
||||||
|
'Routines' => 'Procedūras un funkcijas',
|
||||||
|
'Indexes have been altered.' => 'Indeksi mainīti.',
|
||||||
|
'Indexes' => 'Indeksi',
|
||||||
|
'Alter indexes' => 'Izmainīt indeksus',
|
||||||
|
'Add next' => 'Pievienot vēl',
|
||||||
|
'Language' => 'Valoda',
|
||||||
|
'Select' => 'Izvēlēties',
|
||||||
|
'New item' => 'Jauns ieraksts',
|
||||||
|
'Search' => 'Meklēšana',
|
||||||
|
'Sort' => 'Kārtošana',
|
||||||
|
'descending' => 'dilstoši',
|
||||||
|
'Limit' => 'Limits',
|
||||||
|
'No rows.' => 'Nav rindu.',
|
||||||
|
'Action' => 'Darbība',
|
||||||
|
'edit' => 'rediģēt',
|
||||||
|
'Page' => 'Lapa',
|
||||||
|
'Query executed OK, %d row(s) affected.' => array('Pieprasījums pabeigts, izmainīts %d ieraksts.', 'Pieprasījums pabeigts, izmainīti %d ieraksti.', 'Pieprasījums pabeigts, izmainīti %d ieraksti.'),
|
||||||
|
'Error in query' => 'Kļūda pieprasījumā',
|
||||||
|
'Execute' => 'Izpidīt',
|
||||||
|
'Table' => 'Tabula',
|
||||||
|
'Foreign keys' => 'Ārejā atslēgas',
|
||||||
|
'Triggers' => 'Trigeri',
|
||||||
|
'View' => 'Skats',
|
||||||
|
'Unable to select the table' => 'Tabula nav pieejama',
|
||||||
|
'Invalid CSRF token. Send the form again.' => 'Nederīgs CSRF žetons. Nosūtiet formu vēl vienu reizi.',
|
||||||
|
'Comment' => 'Komentārs',
|
||||||
|
'Default values' => 'Noklusētā vērtība',
|
||||||
|
'%d byte(s)' => array('%d baits', '%d baiti', '%d baiti'),
|
||||||
|
'No commands to execute.' => 'Nav izpildāmu komandu.',
|
||||||
|
'Unable to upload a file.' => 'Neizdevās ielādēt failu uz servera.',
|
||||||
|
'File upload' => 'Augšupielāde',
|
||||||
|
'File uploads are disabled.' => 'Augšupielādes aizliegtas.',
|
||||||
|
'Routine has been called, %d row(s) affected.' => array('Procedūra izsaukta, izmainīts %d ieraksts.', 'Procedūra izsaukta, izmainīti %d ieraksti.', 'Procedūra izsaukta, izmainīti %d ieraksti.'),
|
||||||
|
'Call' => 'Izsaukt',
|
||||||
|
'No extension' => 'Nav paplašinājuma',
|
||||||
|
'None of the supported PHP extensions (%s) are available.' => 'Neviens PHP no atbalstītajiem paplašinājumiem (%s) nav pieejams.',
|
||||||
|
'Session support must be enabled.' => 'Sesiju atbalstam jābūt ieslēgtam.',
|
||||||
|
'Session expired, please login again.' => 'Sesijas laiks ir beidzies, piesakies no jauna sistēmā.',
|
||||||
|
'Text length' => 'Teksta garums',
|
||||||
|
'Foreign key has been dropped.' => 'Ārejā atslēga dzēsta.',
|
||||||
|
'Foreign key has been altered.' => 'Ārejā atslēga izmainīta.',
|
||||||
|
'Foreign key has been created.' => 'Ārejā atslēga izveidota.',
|
||||||
|
'Foreign key' => 'Ārejā atslēga',
|
||||||
|
'Target table' => 'Mērķa tabula',
|
||||||
|
'Change' => 'Mainīt',
|
||||||
|
'Source' => 'Avots',
|
||||||
|
'Target' => 'Mērķis',
|
||||||
|
'Add column' => 'Pievienot lauku',
|
||||||
|
'Alter' => 'Izmainīt',
|
||||||
|
'Add foreign key' => 'Pievienot ārējo atslēgu',
|
||||||
|
'ON DELETE' => 'Pie dzēšanas',
|
||||||
|
'ON UPDATE' => 'Pie atjaunošanas',
|
||||||
|
'Index Type' => 'Indeksa tips',
|
||||||
|
'Column (length)' => 'Lauks (garums)',
|
||||||
|
'View has been dropped.' => 'Skats dzēsts.',
|
||||||
|
'View has been altered.' => 'Skats izmainīts.',
|
||||||
|
'View has been created.' => 'Skats izveidots.',
|
||||||
|
'Alter view' => 'Izmainīt skatu',
|
||||||
|
'Create view' => 'Izveidot skatu',
|
||||||
|
'Name' => 'Nosaukums',
|
||||||
|
'Process list' => 'Procesu saraksts',
|
||||||
|
'%d process(es) have been killed.' => array('Pabeigts %d process.', 'Pabeigti %d procesi.', 'Pabeigti %d procesi.'),
|
||||||
|
'Kill' => 'Nobeigt',
|
||||||
|
'Parameter name' => 'Parametra nosaukums',
|
||||||
|
'Database schema' => 'Datubāzes shēma',
|
||||||
|
'Create procedure' => 'Izveidot procedūru',
|
||||||
|
'Create function' => 'Izveidot funkciju',
|
||||||
|
'Routine has been dropped.' => 'Procedūru dzēsta.',
|
||||||
|
'Routine has been altered.' => 'Procedūru izmainīta.',
|
||||||
|
'Routine has been created.' => 'Procedūru izveidota.',
|
||||||
|
'Alter function' => 'Mainīt funkciju',
|
||||||
|
'Alter procedure' => 'Mainīt procedūru',
|
||||||
|
'Return type' => 'Atgriezt tips',
|
||||||
|
'Add trigger' => 'Pievienot trigeri',
|
||||||
|
'Trigger has been dropped.' => 'Trigeris dzēsts.',
|
||||||
|
'Trigger has been altered.' => 'Trigeris izmainīts.',
|
||||||
|
'Trigger has been created.' => 'Trigeris izveidots.',
|
||||||
|
'Alter trigger' => 'Izmainīt trigeri',
|
||||||
|
'Create trigger' => 'Izveidot trigeri',
|
||||||
|
'Time' => 'Laiks',
|
||||||
|
'Event' => 'Notikums',
|
||||||
|
'%s version: %s through PHP extension %s' => 'Versija %s: %s ar PHP paplašinājumu %s',
|
||||||
|
'%d row(s)' => array('%d rinda', '%d rindas', '%d rindu'),
|
||||||
|
'Remove' => 'Noņemt',
|
||||||
|
'Are you sure?' => 'Vai Tu esi pārliecināts?',
|
||||||
|
'Privileges' => 'Tiesības',
|
||||||
|
'Create user' => 'Izveidot lietotāju',
|
||||||
|
'User has been dropped.' => 'Lietotājs dzests.',
|
||||||
|
'User has been altered.' => 'Lietotājs izmainīts.',
|
||||||
|
'User has been created.' => 'Lietotājs izveidots.',
|
||||||
|
'Hashed' => 'Sajaukts',
|
||||||
|
'Column' => 'Lauks',
|
||||||
|
'Routine' => 'Procedūra',
|
||||||
|
'Grant' => 'Atļaut',
|
||||||
|
'Revoke' => 'Aizliegt',
|
||||||
|
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST metodes pieprasījums apjoms par lielu. Atsūtiet mazāka apjoma pieprasījumu kā konfigurācijas %s.',
|
||||||
|
'Logged as: %s' => 'Ielogojies kā: %s',
|
||||||
|
'Move up' => 'Pārvietot uz augšu',
|
||||||
|
'Move down' => 'Pārvietot uz leju',
|
||||||
|
'Functions' => 'Funkcijas',
|
||||||
|
'Aggregation' => 'Agregācija',
|
||||||
|
'Export' => 'Eksports',
|
||||||
|
'Output' => 'Izejas dati',
|
||||||
|
'open' => 'atvērt',
|
||||||
|
'save' => 'saglabāt',
|
||||||
|
'Format' => 'Formāts',
|
||||||
|
'Tables' => 'Tabulas',
|
||||||
|
'Data' => 'Dati',
|
||||||
|
'Event has been dropped.' => 'Notikums dzēsts.',
|
||||||
|
'Event has been altered.' => 'Notikums izmainīts.',
|
||||||
|
'Event has been created.' => 'Notikums izveidots.',
|
||||||
|
'Alter event' => 'Izmainīt notikumu',
|
||||||
|
'Create event' => 'Izveidot notikumu',
|
||||||
|
'At given time' => 'Norāditā laikā',
|
||||||
|
'Every' => 'Katru',
|
||||||
|
'Events' => 'Notikumi',
|
||||||
|
'Schedule' => 'Grafiks',
|
||||||
|
'Start' => 'Sākums',
|
||||||
|
'End' => 'Beigas',
|
||||||
|
'Status' => 'Statuss',
|
||||||
|
'On completion preserve' => 'Beigās saglabāt',
|
||||||
|
'Tables and views' => 'Tabulas un skati',
|
||||||
|
'Data Length' => 'Datu apjoms',
|
||||||
|
'Index Length' => 'Indeksu izmērs',
|
||||||
|
'Data Free' => 'Brīvā vieta',
|
||||||
|
'Collation' => 'Kolācija',
|
||||||
|
'Analyze' => 'Analizēt',
|
||||||
|
'Optimize' => 'Optimizēt',
|
||||||
|
'Check' => 'Pārbaudīt',
|
||||||
|
'Repair' => 'Salabot',
|
||||||
|
'Truncate' => 'Iztīrīt',
|
||||||
|
'Tables have been truncated.' => 'Tabulas iztīrītas.',
|
||||||
|
'Rows' => 'Rindas',
|
||||||
|
',' => ' ',
|
||||||
|
'0123456789' => '0123456789',
|
||||||
|
'Tables have been moved.' => 'Tabulas pārvietotas.',
|
||||||
|
'Move to other database' => 'Pārvietot uz citu datubāzi',
|
||||||
|
'Move' => 'Pārvietot',
|
||||||
|
'Engine' => 'Dzinējs',
|
||||||
|
'Save and continue edit' => 'Saglabāt un turpināt rediģēt',
|
||||||
|
'original' => 'oriģināls',
|
||||||
|
'%d item(s) have been affected.' => array('Izmainīts %d ieraksts.', 'Izmainīti %d ieraksti.', 'Izmainīti %d ieraksti.'),
|
||||||
|
'Whole result' => 'Viss rezultāts',
|
||||||
|
'Tables have been dropped.' => 'Tabulas dzēstas.',
|
||||||
|
'Clone' => 'Klonēt',
|
||||||
|
'Partition by' => 'Sadalīt pēc',
|
||||||
|
'Partitions' => 'Partīcijas',
|
||||||
|
'Partition name' => 'Partīcijas nosaukums',
|
||||||
|
'Values' => 'Vērtības',
|
||||||
|
'%d row(s) have been imported.' => array('Importēta %d rinda.', 'Importētas %d rindas.', 'Importētas %d rindas.'),
|
||||||
|
'Import' => 'Imports',
|
||||||
|
'Stop on error' => 'Astāties kļūdas gadījumā',
|
||||||
|
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Sasniegts maksimālais lauku skaita ierobežojums. Palieliniet %s.',
|
||||||
|
'anywhere' => 'jebkurā vietā',
|
||||||
|
'%.3f s' => '%.3f s',
|
||||||
|
'$1-$3-$5' => '$5.$3.$1',
|
||||||
|
'[yyyy]-mm-dd' => 'dd.mm.[gggg]',
|
||||||
|
'History' => 'Vēsture',
|
||||||
|
'Variables' => 'Mainīgie',
|
||||||
|
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Lauku tipiem jābūt vienādiem, rezultējošā laukā jābut indeksa datiem.',
|
||||||
|
'Relations' => 'Relācijas',
|
||||||
|
'Run file' => 'Izpildīt failu',
|
||||||
|
'Clear' => 'Notīrīt',
|
||||||
|
'Maximum allowed file size is %sB.' => 'Faila maksimālais izmērs — %sB.',
|
||||||
|
'Numbers' => 'Skaitļi',
|
||||||
|
'Date and time' => 'Datums un laiks',
|
||||||
|
'Strings' => 'Virknes',
|
||||||
|
'Binary' => 'Binārie',
|
||||||
|
'Lists' => 'Saraksti',
|
||||||
|
'Editor' => 'Redaktors',
|
||||||
|
'E-mail' => 'Epasts',
|
||||||
|
'From' => 'No',
|
||||||
|
'Subject' => 'Tēma',
|
||||||
|
'Send' => 'Sūtīt',
|
||||||
|
'%d e-mail(s) have been sent.' => array('Nosūtīts %d epasts.', 'Nosūtīti %d epasti.', 'Nosūtīti %d epasti.'),
|
||||||
|
'Webserver file %s' => 'Fails %s uz servera',
|
||||||
|
'File does not exist.' => 'Fails neeksistē.',
|
||||||
|
'%d in total' => 'Kopā %d',
|
||||||
|
'Permanent login' => 'Atcerēties mani',
|
||||||
|
'Databases have been dropped.' => 'Datubāzes dzēstas.',
|
||||||
|
'Search data in tables' => 'Meklēt tabulās',
|
||||||
|
'Schema' => 'Shēma',
|
||||||
|
'Alter schema' => 'Izmainīt shēmu',
|
||||||
|
'Create schema' => 'Jauna shēma',
|
||||||
|
'Schema has been dropped.' => 'Shēma dzēsta.',
|
||||||
|
'Schema has been created.' => 'Izveidota jauna shēma.',
|
||||||
|
'Schema has been altered.' => 'Shēma izmainīta.',
|
||||||
|
'Sequences' => 'Virknes',
|
||||||
|
'Create sequence' => 'Izveidot virkni',
|
||||||
|
'Alter sequence' => 'Izmainīt virkni',
|
||||||
|
'Sequence has been dropped.' => 'Virkne dzēsta.',
|
||||||
|
'Sequence has been created.' => 'Izveidota virkne.',
|
||||||
|
'Sequence has been altered.' => 'Virkne izmainīta.',
|
||||||
|
'User types' => 'Lietotāju tipi',
|
||||||
|
'Create type' => 'Izveidot tipu',
|
||||||
|
'Alter type' => 'Izmainīt tipu',
|
||||||
|
'Type has been dropped.' => 'Tips dzēsts.',
|
||||||
|
'Type has been created.' => 'Tips izveidots.',
|
||||||
|
'Ctrl+click on a value to modify it.' => 'Lai izmainītu vērtību, izmanto Ctrl + peles klikšķi.',
|
||||||
|
'Use edit link to modify this value.' => 'Izmainīt vērtību var tikai ar saiti "Izmainīt".',
|
||||||
|
'last' => 'pēdējā',
|
||||||
|
'From server' => 'No servera',
|
||||||
|
'System' => 'Sistēma',
|
||||||
|
'Select data' => 'Izvēlēties datus',
|
||||||
|
'Show structure' => 'Parādīt struktūru',
|
||||||
|
'empty' => 'tukšs',
|
||||||
|
'Network' => 'Tīkls',
|
||||||
|
'Geometry' => 'Ģeometrija',
|
||||||
|
'File exists.' => 'Fails eksistē.',
|
||||||
|
'Attachments' => 'Pielikumi',
|
||||||
|
'%d query(s) executed OK.' => array('%d pieprasījums veiksmīgs.', '%d pieprasījumi veiksmīgi.', '%d pieprasījumi veiksmīgi.'),
|
||||||
|
'Show only errors' => 'Rādīt tikai kļūdas',
|
||||||
|
'Refresh' => 'Atjaunot',
|
||||||
|
'Invalid schema.' => 'Nederīga shēma.',
|
||||||
|
'Please use one of the extensions %s.' => 'Izmainojiet kādu no paplašinājumiem %s.',
|
||||||
|
'now' => 'tagad',
|
||||||
|
'ltr' => 'ltr',
|
||||||
|
'Tables have been copied.' => 'Tabulas nokopētas.',
|
||||||
|
'Copy' => 'kopēt',
|
||||||
|
'Permanent link' => 'Pastāvīga saite',
|
||||||
|
'Edit all' => 'Rediģēt visus',
|
||||||
|
'HH:MM:SS' => 'HH:MM:SS',
|
||||||
|
'Tables have been optimized.' => 'Tabulas optimizētas.',
|
||||||
|
'Materialized view' => 'Matrializēts skats',
|
||||||
|
'Vacuum' => 'Vakums',
|
||||||
|
'Selected' => 'Izvēlētie',
|
||||||
|
'File must be in UTF-8 encoding.' => 'Failam jābūt UTF-8 kodējumam.',
|
||||||
|
'Modify' => 'Izmainīt',
|
||||||
|
'Loading' => 'Ielāde',
|
||||||
|
'Load more data' => 'Ielādēt vēl datus',
|
||||||
|
'ATTACH queries are not supported.' => 'ATTACH-pieprasījumi nav atbalstīti.',
|
||||||
|
'%d / ' => '%d / ',
|
||||||
|
'Limit rows' => 'Rindu limits',
|
||||||
|
'Default value' => 'Noklusētā vērtība',
|
||||||
|
'Full table scan' => 'Pilna tabulas analīze',
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array('Pieteikšanās mēģinājumu skaits par lielu. Mēginiet pēc %d minūtes.', 'Pieteikšanās mēģinājumu skaits par lielu. Mēginiet pēc %d minūtēm.', 'Pieteikšanās mēģinājumu skaits par lielu. Mēginiet pēc %d minūtēm.'),
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Master-parole nav derīga. <a href="https://www.adminer.org/en/extension/"%s>Implementējiet</a> metodi %s, lai padarīgu šo par ierastu metodi.',
|
||||||
|
'If you did not send this request from Adminer then close this page.' => 'Ja nesūtījāt šo pieprasījumu no Adminer, tad aizveriet pārlūka logu.',
|
||||||
|
'You can upload a big SQL file via FTP and import it from server.' => 'Varat ielādēt lielu SQL failu uz servera un tad importēt to.',
|
||||||
|
'Size' => 'Izmērs',
|
||||||
|
'Compute' => 'Izskaitļot',
|
||||||
|
'You are offline.' => 'Jūs est bezsasaistē.',
|
||||||
|
'You have no privileges to update this table.' => 'Jums nav pieejas labot šo tabulu.',
|
||||||
|
'Saving' => 'Saglabāšana',
|
||||||
|
'yes' => 'jā',
|
||||||
|
'no' => 'nē',
|
||||||
|
'Drop %s?' => 'Dzēst %s?',
|
||||||
|
'overwrite' => 'pārrakstīt',
|
||||||
|
'DB' => 'DB',
|
||||||
|
'Warnings' => 'Brīdinājumi',
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer neatbalsta pieeju bez paroles, <a href="https://www.adminer.org/en/password/"%s>vairāk informācijas šeit</a>.',
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Paldies, ka izmantoji Adminer, vai vēlies veikt <a href="https://www.adminer.org/en/donation/">ziedojumu</a>.',
|
||||||
|
'The action will be performed after successful login with the same credentials.' => 'Darbība tiks pabeigta pēc derīgas pieteikšanās sistēmā.',
|
||||||
|
'Connecting to privileged ports is not allowed.' => 'Pieeja priviliģētiem portiem nav atļauta.',
|
||||||
|
'There is a space in the input password which might be the cause.' => 'Parole satur atstarpi, kas varētu būt lieka.',
|
||||||
|
'Unknown error.' => 'Nezināma kļūda.',
|
||||||
|
'Database does not support password.' => 'Datubāze neatbalsta paroli.',
|
||||||
|
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => 'Jā',
|
||||||
|
'No' => 'Nē',
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
|
);
|
@@ -11,7 +11,7 @@ $translations = array(
|
|||||||
'Logged as: %s' => 'Log masuk sebagai: %s',
|
'Logged as: %s' => 'Log masuk sebagai: %s',
|
||||||
'Logout successful.' => 'Log keluar berjaya.',
|
'Logout successful.' => 'Log keluar berjaya.',
|
||||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Terima kasih kerana menggunakan Adminer, pertimbangkan untuk <a href="https://www.adminer.org/en/donation/">menderma</a>.',
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Terima kasih kerana menggunakan Adminer, pertimbangkan untuk <a href="https://www.adminer.org/en/donation/">menderma</a>.',
|
||||||
'Invalid credentials.' => 'Akses tidak sah.',
|
'Invalid server or credentials.' => null,
|
||||||
'Too many unsuccessful logins, try again in %d minute(s).' => 'Terlalu banyak percubaan log masuk yang gagal, sila cuba lagi dalam masa %d minit.',
|
'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.',
|
'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',
|
'Language' => 'Bahasa',
|
||||||
@@ -337,4 +337,22 @@ $translations = array(
|
|||||||
'Type has been dropped.' => 'Jenis telah dijatuhkan.',
|
'Type has been dropped.' => 'Jenis telah dijatuhkan.',
|
||||||
'Type has been created.' => 'Jenis telah dibuat.',
|
'Type has been created.' => 'Jenis telah dibuat.',
|
||||||
'Alter type' => 'Ubah jenis',
|
'Alter type' => 'Ubah jenis',
|
||||||
|
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => 'Ya',
|
||||||
|
'No' => 'Tidak',
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
$translations = array(
|
$translations = array(
|
||||||
'Login' => 'Inloggen',
|
'Login' => 'Aanmelden',
|
||||||
'Logout successful.' => 'Uitloggen geslaagd.',
|
'Logout successful.' => 'Successvol afgemeld.',
|
||||||
'Invalid credentials.' => 'Ongeldige logingegevens.',
|
'Invalid server or credentials.' => null,
|
||||||
'Server' => 'Server',
|
'Server' => 'Server',
|
||||||
'Username' => 'Gebruikersnaam',
|
'Username' => 'Gebruikersnaam',
|
||||||
'Password' => 'Wachtwoord',
|
'Password' => 'Wachtwoord',
|
||||||
@@ -31,7 +31,7 @@ $translations = array(
|
|||||||
'Alter database' => 'Database aanpassen',
|
'Alter database' => 'Database aanpassen',
|
||||||
'Create database' => 'Database aanmaken',
|
'Create database' => 'Database aanmaken',
|
||||||
'SQL command' => 'SQL opdracht',
|
'SQL command' => 'SQL opdracht',
|
||||||
'Logout' => 'Uitloggen',
|
'Logout' => 'Afmelden',
|
||||||
'database' => 'database',
|
'database' => 'database',
|
||||||
'Use' => 'Gebruik',
|
'Use' => 'Gebruik',
|
||||||
'No tables.' => 'Geen tabellen.',
|
'No tables.' => 'Geen tabellen.',
|
||||||
@@ -41,7 +41,7 @@ $translations = array(
|
|||||||
'Item%s has been inserted.' => 'Item%s toegevoegd.',
|
'Item%s has been inserted.' => 'Item%s toegevoegd.',
|
||||||
'Edit' => 'Bewerk',
|
'Edit' => 'Bewerk',
|
||||||
'Insert' => 'Toevoegen',
|
'Insert' => 'Toevoegen',
|
||||||
'Save and insert next' => 'Opslaan, daarna toevoegen',
|
'Save and insert next' => 'Opslaan en volgende toevoegen',
|
||||||
'Delete' => 'Verwijderen',
|
'Delete' => 'Verwijderen',
|
||||||
'Database' => 'Database',
|
'Database' => 'Database',
|
||||||
'Routines' => 'Procedures',
|
'Routines' => 'Procedures',
|
||||||
@@ -60,7 +60,7 @@ $translations = array(
|
|||||||
'Action' => 'Acties',
|
'Action' => 'Acties',
|
||||||
'edit' => 'bewerk',
|
'edit' => 'bewerk',
|
||||||
'Page' => 'Pagina',
|
'Page' => 'Pagina',
|
||||||
'Query executed OK, %d row(s) affected.' => array('Query uitgevoerd, %d rij geraakt.', 'Query uitgevoerd, %d rijen beïnvloed.'),
|
'Query executed OK, %d row(s) affected.' => array('Query uitgevoerd, %d rij aangepast.', 'Query uitgevoerd, %d rijen aangepast.'),
|
||||||
'Error in query' => 'Fout in query',
|
'Error in query' => 'Fout in query',
|
||||||
'Execute' => 'Uitvoeren',
|
'Execute' => 'Uitvoeren',
|
||||||
'Table' => 'Tabel',
|
'Table' => 'Tabel',
|
||||||
@@ -81,7 +81,7 @@ $translations = array(
|
|||||||
'No extension' => 'Geen extensie',
|
'No extension' => 'Geen extensie',
|
||||||
'None of the supported PHP extensions (%s) are available.' => 'Geen geldige PHP extensies beschikbaar (%s).',
|
'None of the supported PHP extensions (%s) are available.' => 'Geen geldige PHP extensies beschikbaar (%s).',
|
||||||
'Session support must be enabled.' => 'Sessies moeten geactiveerd zijn.',
|
'Session support must be enabled.' => 'Sessies moeten geactiveerd zijn.',
|
||||||
'Session expired, please login again.' => 'Uw sessie is verlopen. Gelieve opnieuw in te loggen.',
|
'Session expired, please login again.' => 'Uw sessie is verlopen. Gelieve opnieuw aan te melden.',
|
||||||
'Text length' => 'Tekst lengte',
|
'Text length' => 'Tekst lengte',
|
||||||
'Foreign key has been dropped.' => 'Foreign key verwijderd.',
|
'Foreign key has been dropped.' => 'Foreign key verwijderd.',
|
||||||
'Foreign key has been altered.' => 'Foreign key aangepast.',
|
'Foreign key has been altered.' => 'Foreign key aangepast.',
|
||||||
@@ -265,4 +265,49 @@ $translations = array(
|
|||||||
'Permanent link' => 'Permanente link',
|
'Permanent link' => 'Permanente link',
|
||||||
'Edit all' => 'Alles bewerken',
|
'Edit all' => 'Alles bewerken',
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
'HH:MM:SS' => 'HH:MM:SS',
|
||||||
|
|
||||||
|
'Drop %s?' => 'Verwijder %s?',
|
||||||
|
'Tables have been optimized.' => 'Tabellen zijn geoptimaliseerd.',
|
||||||
|
'Materialized view' => 'Materialized view',
|
||||||
|
'Vacuum' => 'Vacuum',
|
||||||
|
'Selected' => 'Geselecteerd',
|
||||||
|
'overwrite' => 'overschrijven',
|
||||||
|
'DB' => 'DB',
|
||||||
|
'File must be in UTF-8 encoding.' => 'Het bestand moet met UTF-8 encodering zijn opgeslagen.',
|
||||||
|
'Modify' => 'Aanpassen',
|
||||||
|
'Load more data' => 'Meer data inladen',
|
||||||
|
'Loading' => 'Aan het laden',
|
||||||
|
'ATTACH queries are not supported.' => 'ATTACH queries worden niet ondersteund',
|
||||||
|
'Warnings' => 'Waarschuwingen',
|
||||||
|
'%d / ' => '%d / ',
|
||||||
|
'Limit rows' => 'Rijen beperken',
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer ondersteunt geen toegang tot databases zonder wachtwoord, <a href="https://www.adminer.org/en/password/"%s>meer informatie</a>.',
|
||||||
|
'Default value' => 'Standaardwaarde',
|
||||||
|
'Full table scan' => 'Full table scan',
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array('Teveel foutieve aanmeldpogingen, probeer opnieuw binnen %d minuut.', 'Teveel foutieve aanmeldpogingen, probeer opnieuw binnen %d minuten.'),
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Master wachtwoord verlopen. <a href="https://www.adminer.org/en/extension/"%s>Implementeer</a> de %s methode om het permanent te maken.',
|
||||||
|
'The action will be performed after successful login with the same credentials.' => 'Deze actie zal uitgevoerd worden na het succesvol aanmelden met dezelfde gebruikersgegevens',
|
||||||
|
'Connecting to privileged ports is not allowed.' => 'Verbindingen naar geprivilegieerde poorten is niet toegestaan.',
|
||||||
|
'There is a space in the input password which might be the cause.' => 'Er staat een spatie in het wachtwoord, wat misschien de oorzaak is.',
|
||||||
|
'If you did not send this request from Adminer then close this page.' => 'Als u deze actie niet via Adminer hebt gedaan, gelieve deze pagina dan te sluiten.',
|
||||||
|
'You can upload a big SQL file via FTP and import it from server.' => 'U kan een groot SQL-bestand uploaden via FTP en het importeren via de server.',
|
||||||
|
'Size' => 'Grootte',
|
||||||
|
'Compute' => 'Bereken',
|
||||||
|
'You are offline.' => 'U bent offline.',
|
||||||
|
'You have no privileges to update this table.' => 'U bent niet gemachtigd om deze tabel aan te passen.',
|
||||||
|
'Saving' => 'Opslaan',
|
||||||
|
'Unknown error.' => 'Onbekende fout',
|
||||||
|
'Database does not support password.' => 'Database ondersteunt het wachtwoord niet.',
|
||||||
|
'Disable %s or enable %s or %s extensions.' => 'Schakel %s uit or schakel extensies %s of %s in.',
|
||||||
|
'yes' => 'ja',
|
||||||
|
'no' => 'neen',
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => 'Ja',
|
||||||
|
'No' => 'Neen',
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -9,7 +9,7 @@ $translations = array(
|
|||||||
'Logout' => 'Logg ut',
|
'Logout' => 'Logg ut',
|
||||||
'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 server or credentials.' => null,
|
||||||
'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.',
|
'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.',
|
||||||
@@ -279,4 +279,35 @@ $translations = array(
|
|||||||
'Type has been created.' => 'Type er opprettet.',
|
'Type has been created.' => 'Type er opprettet.',
|
||||||
'Alter type' => 'Endre type',
|
'Alter type' => 'Endre type',
|
||||||
'Saving' => 'Lagrer',
|
'Saving' => 'Lagrer',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'Materialized view' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'%d / ' => array(),
|
||||||
|
'Limit rows' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Default value' => null,
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'If you did not send this request from Adminer then close this page.' => null,
|
||||||
|
'Size' => null,
|
||||||
|
'Compute' => null,
|
||||||
|
'You are offline.' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => 'Ja',
|
||||||
|
'No' => 'Nei',
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -11,7 +11,7 @@ $translations = array(
|
|||||||
'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="https://www.adminer.org/en/donation/">donating</a>.' => 'Dziękujemy za używanie Adminera, rozważ proszę <a href="https://www.adminer.org/pl/donation/">dotację</a>.',
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Dziękujemy za używanie Adminera, rozważ proszę <a href="https://www.adminer.org/pl/donation/">dotację</a>.',
|
||||||
'Invalid credentials.' => 'Nieprawidłowe dane logowania.',
|
'Invalid server or credentials.' => 'Nieprawidłowy serwer lub dane logowania.',
|
||||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Za dużo nieudanych prób logowania, spróbuj ponownie za %d minutę.', 'Za dużo nieudanych prób logowania, spróbuj ponownie za %d minuty.', 'Za dużo nieudanych prób logowania, spróbuj ponownie za %d minut.'),
|
'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/"%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.',
|
'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',
|
||||||
@@ -337,4 +337,22 @@ $translations = array(
|
|||||||
'Type has been dropped.' => 'Typ został usunięty.',
|
'Type has been dropped.' => 'Typ został usunięty.',
|
||||||
'Type has been created.' => 'Typ został utworzony.',
|
'Type has been created.' => 'Typ został utworzony.',
|
||||||
'Alter type' => 'Zmień typ',
|
'Alter type' => 'Zmień typ',
|
||||||
|
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => 'Tak',
|
||||||
|
'No' => 'Nie',
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
$translations = array(
|
$translations = array(
|
||||||
'Login' => 'Entrar',
|
'Login' => 'Entrar',
|
||||||
'Logout successful.' => 'Saída bem sucedida.',
|
'Logout successful.' => 'Saída bem sucedida.',
|
||||||
'Invalid credentials.' => 'Identificação inválida.',
|
'Invalid server or credentials.' => null,
|
||||||
'Server' => 'Servidor',
|
'Server' => 'Servidor',
|
||||||
'Username' => 'Usuário',
|
'Username' => 'Usuário',
|
||||||
'Password' => 'Senha',
|
'Password' => 'Senha',
|
||||||
@@ -260,4 +260,54 @@ $translations = array(
|
|||||||
'Please use one of the extensions %s.' => 'Por favor use uma das extensões %s.',
|
'Please use one of the extensions %s.' => 'Por favor use uma das extensões %s.',
|
||||||
'now' => 'agora',
|
'now' => 'agora',
|
||||||
'ltr' => 'ltr',
|
'ltr' => 'ltr',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'Tables have been copied.' => null,
|
||||||
|
'Tables have been optimized.' => null,
|
||||||
|
'Materialized view' => null,
|
||||||
|
'Vacuum' => null,
|
||||||
|
'Selected' => null,
|
||||||
|
'Copy' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'Permanent link' => null,
|
||||||
|
'File must be in UTF-8 encoding.' => null,
|
||||||
|
'Modify' => null,
|
||||||
|
'Load more data' => null,
|
||||||
|
'Loading' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'%d / ' => array(),
|
||||||
|
'Limit rows' => null,
|
||||||
|
'Edit all' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Default value' => null,
|
||||||
|
'Full table scan' => null,
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'If you did not send this request from Adminer then close this page.' => null,
|
||||||
|
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||||
|
'Size' => null,
|
||||||
|
'Compute' => null,
|
||||||
|
'You are offline.' => null,
|
||||||
|
'You have no privileges to update this table.' => null,
|
||||||
|
'Saving' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
'yes' => null,
|
||||||
|
'no' => null,
|
||||||
|
'HH:MM:SS' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => null,
|
||||||
|
'No' => null,
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
$translations = array(
|
$translations = array(
|
||||||
'Login' => 'Entrar',
|
'Login' => 'Entrar',
|
||||||
'Logout successful.' => 'Sessão terminada com sucesso.',
|
'Logout successful.' => 'Sessão terminada com sucesso.',
|
||||||
'Invalid credentials.' => 'Identificação inválida.',
|
'Invalid server or credentials.' => null,
|
||||||
'Server' => 'Servidor',
|
'Server' => 'Servidor',
|
||||||
'Username' => 'Nome de utilizador',
|
'Username' => 'Nome de utilizador',
|
||||||
'Password' => 'Senha',
|
'Password' => 'Senha',
|
||||||
@@ -260,4 +260,54 @@ $translations = array(
|
|||||||
'Please use one of the extensions %s.' => 'Por favor use uma das extensões %s.',
|
'Please use one of the extensions %s.' => 'Por favor use uma das extensões %s.',
|
||||||
'now' => 'agora',
|
'now' => 'agora',
|
||||||
'ltr' => 'ltr',
|
'ltr' => 'ltr',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'Tables have been copied.' => null,
|
||||||
|
'Tables have been optimized.' => null,
|
||||||
|
'Materialized view' => null,
|
||||||
|
'Vacuum' => null,
|
||||||
|
'Selected' => null,
|
||||||
|
'Copy' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'Permanent link' => null,
|
||||||
|
'File must be in UTF-8 encoding.' => null,
|
||||||
|
'Modify' => null,
|
||||||
|
'Load more data' => null,
|
||||||
|
'Loading' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'%d / ' => array(),
|
||||||
|
'Limit rows' => null,
|
||||||
|
'Edit all' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Default value' => null,
|
||||||
|
'Full table scan' => null,
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'If you did not send this request from Adminer then close this page.' => null,
|
||||||
|
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||||
|
'Size' => null,
|
||||||
|
'Compute' => null,
|
||||||
|
'You are offline.' => null,
|
||||||
|
'You have no privileges to update this table.' => null,
|
||||||
|
'Saving' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
'yes' => null,
|
||||||
|
'no' => null,
|
||||||
|
'HH:MM:SS' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => null,
|
||||||
|
'No' => null,
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
$translations = array(
|
$translations = array(
|
||||||
'Login' => 'Intră',
|
'Login' => 'Intră',
|
||||||
'Logout successful.' => 'Ați ieșit cu succes.',
|
'Logout successful.' => 'Ați ieșit cu succes.',
|
||||||
'Invalid credentials.' => 'Numele de utilizator sau parola este greșită.',
|
'Invalid server or credentials.' => null,
|
||||||
'Server' => 'Server',
|
'Server' => 'Server',
|
||||||
'Username' => 'Nume de utilizator',
|
'Username' => 'Nume de utilizator',
|
||||||
'Password' => 'Parola',
|
'Password' => 'Parola',
|
||||||
@@ -265,4 +265,49 @@ $translations = array(
|
|||||||
'Permanent link' => 'Adresă permanentă',
|
'Permanent link' => 'Adresă permanentă',
|
||||||
'Edit all' => 'Editează tot',
|
'Edit all' => 'Editează tot',
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
'HH:MM:SS' => 'HH:MM:SS',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'Tables have been optimized.' => null,
|
||||||
|
'Materialized view' => null,
|
||||||
|
'Vacuum' => null,
|
||||||
|
'Selected' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'File must be in UTF-8 encoding.' => null,
|
||||||
|
'Modify' => null,
|
||||||
|
'Load more data' => null,
|
||||||
|
'Loading' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'%d / ' => array(),
|
||||||
|
'Limit rows' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Default value' => null,
|
||||||
|
'Full table scan' => null,
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'If you did not send this request from Adminer then close this page.' => null,
|
||||||
|
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||||
|
'Size' => null,
|
||||||
|
'Compute' => null,
|
||||||
|
'You are offline.' => null,
|
||||||
|
'You have no privileges to update this table.' => null,
|
||||||
|
'Saving' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
'yes' => null,
|
||||||
|
'no' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => null,
|
||||||
|
'No' => null,
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
$translations = array(
|
$translations = array(
|
||||||
'Login' => 'Войти',
|
'Login' => 'Войти',
|
||||||
'Logout successful.' => 'Вы успешно покинули систему.',
|
'Logout successful.' => 'Вы успешно покинули систему.',
|
||||||
'Invalid credentials.' => 'Неправильное имя пользователя или пароль.',
|
'Invalid server or credentials.' => null,
|
||||||
'Server' => 'Сервер',
|
'Server' => 'Сервер',
|
||||||
'Username' => 'Имя пользователя',
|
'Username' => 'Имя пользователя',
|
||||||
'Password' => 'Пароль',
|
'Password' => 'Пароль',
|
||||||
@@ -287,8 +287,8 @@ $translations = array(
|
|||||||
'You are offline.' => 'Вы не выполнили вход.',
|
'You are offline.' => 'Вы не выполнили вход.',
|
||||||
'You have no privileges to update this table.' => 'У вас нет прав на обновление этой таблицы.',
|
'You have no privileges to update this table.' => 'У вас нет прав на обновление этой таблицы.',
|
||||||
'Saving' => 'Сохранение',
|
'Saving' => 'Сохранение',
|
||||||
'yes' => 'Да',
|
'yes' => 'да',
|
||||||
'no' => 'Нет',
|
'no' => 'нет',
|
||||||
'Drop %s?' => 'Удалить %s?',
|
'Drop %s?' => 'Удалить %s?',
|
||||||
'overwrite' => 'перезаписать',
|
'overwrite' => 'перезаписать',
|
||||||
'DB' => 'DB',
|
'DB' => 'DB',
|
||||||
@@ -300,4 +300,14 @@ $translations = array(
|
|||||||
'There is a space in the input password which might be the cause.' => 'В введеном пароле есть пробел, это может быть причиною.',
|
'There is a space in the input password which might be the cause.' => 'В введеном пароле есть пробел, это может быть причиною.',
|
||||||
'Unknown error.' => 'Неизвестная ошибка.',
|
'Unknown error.' => 'Неизвестная ошибка.',
|
||||||
'Database does not support password.' => 'База данных не поддерживает пароль.',
|
'Database does not support password.' => 'База данных не поддерживает пароль.',
|
||||||
|
|
||||||
|
'Disable %s or enable %s or %s extensions.' => 'Отключите %s или включите расширения %s или %s.',
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => 'Да',
|
||||||
|
'No' => 'Нет',
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
$translations = array(
|
$translations = array(
|
||||||
'Login' => 'Prihlásiť sa',
|
'Login' => 'Prihlásiť sa',
|
||||||
'Logout successful.' => 'Odhlásenie prebehlo v poriadku.',
|
'Logout successful.' => 'Odhlásenie prebehlo v poriadku.',
|
||||||
'Invalid credentials.' => 'Neplatné prihlasovacie údaje.',
|
'Invalid server or credentials.' => 'Neplatný server alebo prihlasovacie údaje.',
|
||||||
'Server' => 'Server',
|
'Server' => 'Server',
|
||||||
'Username' => 'Používateľ',
|
'Username' => 'Používateľ',
|
||||||
'Password' => 'Heslo',
|
'Password' => 'Heslo',
|
||||||
@@ -70,7 +70,7 @@ $translations = array(
|
|||||||
'Unable to select the table' => 'Tabuľku sa nepodarilo vypísať',
|
'Unable to select the table' => 'Tabuľku sa nepodarilo vypísať',
|
||||||
'Invalid CSRF token. Send the form again.' => 'Neplatný token CSRF. Odošlite formulár znova.',
|
'Invalid CSRF token. Send the form again.' => 'Neplatný token CSRF. Odošlite formulár znova.',
|
||||||
'Comment' => 'Komentár',
|
'Comment' => 'Komentár',
|
||||||
'Default values' => 'Východzie hodnoty',
|
'Default values' => 'Predvolené hodnoty',
|
||||||
'%d byte(s)' => array('%d bajt', '%d bajty', '%d bajtov'),
|
'%d byte(s)' => array('%d bajt', '%d bajty', '%d bajtov'),
|
||||||
'No commands to execute.' => 'Žiadne príkazy na vykonanie.',
|
'No commands to execute.' => 'Žiadne príkazy na vykonanie.',
|
||||||
'Unable to upload a file.' => 'Súbor sa nepodarilo nahrať.',
|
'Unable to upload a file.' => 'Súbor sa nepodarilo nahrať.',
|
||||||
@@ -94,8 +94,8 @@ $translations = array(
|
|||||||
'Add column' => 'Pridať stĺpec',
|
'Add column' => 'Pridať stĺpec',
|
||||||
'Alter' => 'Zmeniť',
|
'Alter' => 'Zmeniť',
|
||||||
'Add foreign key' => 'Pridať cudzí kľúč',
|
'Add foreign key' => 'Pridať cudzí kľúč',
|
||||||
'ON DELETE' => 'ON DELETE',
|
'ON DELETE' => 'Pri zmazaní',
|
||||||
'ON UPDATE' => 'ON UPDATE',
|
'ON UPDATE' => 'Pri aktualizácii',
|
||||||
'Index Type' => 'Typ indexu',
|
'Index Type' => 'Typ indexu',
|
||||||
'Column (length)' => 'Stĺpec (dĺžka)',
|
'Column (length)' => 'Stĺpec (dĺžka)',
|
||||||
'View has been dropped.' => 'Pohľad bol odstránený.',
|
'View has been dropped.' => 'Pohľad bol odstránený.',
|
||||||
@@ -265,4 +265,47 @@ $translations = array(
|
|||||||
'Permanent link' => 'Permanentný odkaz',
|
'Permanent link' => 'Permanentný odkaz',
|
||||||
'Edit all' => 'Upraviť všetko',
|
'Edit all' => 'Upraviť všetko',
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
'HH:MM:SS' => 'HH:MM:SS',
|
||||||
|
'Drop %s?' => 'Odstrániť %s?',
|
||||||
|
'Tables have been optimized.' => 'Tabuľky boli optimalizované.',
|
||||||
|
'Materialized view' => 'Materializovaný pohľad',
|
||||||
|
'Vacuum' => 'Vyčistiť',
|
||||||
|
'Selected' => 'Označené',
|
||||||
|
'overwrite' => 'prepísať',
|
||||||
|
'DB' => 'DB',
|
||||||
|
'File must be in UTF-8 encoding.' => 'Súbor musí byť v kódovaní UTF-8.',
|
||||||
|
'Modify' => 'Zmeniť',
|
||||||
|
'Load more data' => 'Nahráť ďalšie dáta',
|
||||||
|
'Loading' => 'Nahráva sa',
|
||||||
|
'ATTACH queries are not supported.' => 'Dotazy ATTACH nie sú podporované.',
|
||||||
|
'Warnings' => 'Varovania',
|
||||||
|
'%d / ' => '%d / ',
|
||||||
|
'Limit rows' => 'Limit riadkov',
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer nepodporuje prístup k databáze bez hesla, <a href="https://www.adminer.org/cs/password/"%s>viac informácií</a>.',
|
||||||
|
'Default value' => 'Predvolená hodnota',
|
||||||
|
'Full table scan' => 'Prechod celej tabuľky',
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array('Príliš veľa pokusov o prihlásenie, skúste to znova za %d minutu.', 'Príliš veľa pokusov o prihlásenie, skúste to znova za %d minuty.', 'Príliš veľa pokusov o prihlásenie, skúste to znova za %d minút.'),
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Vďaka za používanie Admineru, <a href="https://www.adminer.org/cs/donation/">prispejte</a> na vývoj.',
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Platnosť hlavného hesla vypršala. <a href="https://www.adminer.org/cs/extension/"%s>Implementujte</a> metodu %s, aby platilo natrvalo.',
|
||||||
|
'The action will be performed after successful login with the same credentials.' => 'Akcia sa vykoná po úspešnom prihlásení s rovnakými prihlasovacími údajmi.',
|
||||||
|
'Connecting to privileged ports is not allowed.' => 'Pripojenie k privilegovaným portom nie je povolené.',
|
||||||
|
'There is a space in the input password which might be the cause.' => 'V zadanom hesle je medzera, ktorá môže byť príčinou.',
|
||||||
|
'If you did not send this request from Adminer then close this page.' => 'Pokiaľ ste tento požiadavok neodoslali z Adminera, zatvorte túto stránku.',
|
||||||
|
'You can upload a big SQL file via FTP and import it from server.' => 'Veľký SQL soubor môžete nahrať pomocou FTP a importovať ho zo servera.',
|
||||||
|
'Size' => 'Veľkosť',
|
||||||
|
'Compute' => 'Spočítať',
|
||||||
|
'You are offline.' => 'Ste offline.',
|
||||||
|
'You have no privileges to update this table.' => 'Nemáte oprávnenie na aktualizáciu tejto tabuľky.',
|
||||||
|
'Saving' => 'Ukladá sa',
|
||||||
|
'Unknown error.' => 'Neznáma chyba.',
|
||||||
|
'Database does not support password.' => 'Databáza nepodporuje heslo.',
|
||||||
|
'Disable %s or enable %s or %s extensions.' => 'Zakážte %s alebo povoľte rozšírenie %s alebo %s.',
|
||||||
|
'yes' => 'áno',
|
||||||
|
'no' => 'nie',
|
||||||
|
'Yes' => 'Áno',
|
||||||
|
'No' => 'Nie',
|
||||||
|
'Columns' => 'Stĺpce',
|
||||||
|
'Nullable' => 'Povolené null',
|
||||||
|
'Default' => 'Predvolené',
|
||||||
|
'One Time Password' => 'Jednorázové heslo',
|
||||||
|
'Invalid OTP code.' => 'Neplatný kód OTP.',
|
||||||
);
|
);
|
||||||
|
@@ -10,7 +10,7 @@ $translations = array(
|
|||||||
'Logout' => 'Odjavi se',
|
'Logout' => 'Odjavi se',
|
||||||
'Logged as: %s' => 'Prijavljen kot: %s',
|
'Logged as: %s' => 'Prijavljen kot: %s',
|
||||||
'Logout successful.' => 'Prijava uspešna.',
|
'Logout successful.' => 'Prijava uspešna.',
|
||||||
'Invalid credentials.' => 'Neveljavne pravice.',
|
'Invalid server or credentials.' => 'Neveljaven strežnik ali pravice.',
|
||||||
'Language' => 'Jezik',
|
'Language' => 'Jezik',
|
||||||
'Invalid CSRF token. Send the form again.' => 'Neveljaven token CSRF. Pošljite formular še enkrat.',
|
'Invalid CSRF token. Send the form again.' => 'Neveljaven token CSRF. Pošljite formular še enkrat.',
|
||||||
'No extension' => 'Brez dodatkov',
|
'No extension' => 'Brez dodatkov',
|
||||||
@@ -304,4 +304,52 @@ $translations = array(
|
|||||||
'Type has been dropped.' => 'Tip je zavržen.',
|
'Type has been dropped.' => 'Tip je zavržen.',
|
||||||
'Type has been created.' => 'Tip je ustvarjen.',
|
'Type has been created.' => 'Tip je ustvarjen.',
|
||||||
'Alter type' => 'Spremeni tip',
|
'Alter type' => 'Spremeni tip',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'Tables have been optimized.' => null,
|
||||||
|
'Materialized view' => null,
|
||||||
|
'Vacuum' => null,
|
||||||
|
'Selected' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'Permanent link' => null,
|
||||||
|
'File must be in UTF-8 encoding.' => null,
|
||||||
|
'Modify' => null,
|
||||||
|
'Load more data' => null,
|
||||||
|
'Loading' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'%d / ' => array(),
|
||||||
|
'Limit rows' => null,
|
||||||
|
'Edit all' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Default value' => null,
|
||||||
|
'Full table scan' => null,
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'If you did not send this request from Adminer then close this page.' => null,
|
||||||
|
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||||
|
'Size' => null,
|
||||||
|
'Compute' => null,
|
||||||
|
'You are offline.' => null,
|
||||||
|
'You have no privileges to update this table.' => null,
|
||||||
|
'Saving' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
'yes' => null,
|
||||||
|
'no' => null,
|
||||||
|
'HH:MM:SS' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => null,
|
||||||
|
'No' => null,
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -10,7 +10,7 @@ $translations = array(
|
|||||||
'Logout' => 'Одјава',
|
'Logout' => 'Одјава',
|
||||||
'Logged as: %s' => 'Пријави се као: %s',
|
'Logged as: %s' => 'Пријави се као: %s',
|
||||||
'Logout successful.' => 'Успешна одјава.',
|
'Logout successful.' => 'Успешна одјава.',
|
||||||
'Invalid credentials.' => 'Неважеће дозволе.',
|
'Invalid server or credentials.' => null,
|
||||||
'Language' => 'Језик',
|
'Language' => 'Језик',
|
||||||
'Invalid CSRF token. Send the form again.' => 'Неважећи CSRF код. Проследите поново форму.',
|
'Invalid CSRF token. Send the form again.' => 'Неважећи CSRF код. Проследите поново форму.',
|
||||||
'No extension' => 'Без додатака',
|
'No extension' => 'Без додатака',
|
||||||
@@ -316,4 +316,43 @@ $translations = array(
|
|||||||
'Type has been dropped.' => 'Тип је избрисан.',
|
'Type has been dropped.' => 'Тип је избрисан.',
|
||||||
'Type has been created.' => 'тип је креиран.',
|
'Type has been created.' => 'тип је креиран.',
|
||||||
'Alter type' => 'Уреди тип',
|
'Alter type' => 'Уреди тип',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'Materialized view' => null,
|
||||||
|
'Vacuum' => null,
|
||||||
|
'Selected' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'File must be in UTF-8 encoding.' => null,
|
||||||
|
'Modify' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'%d / ' => array(),
|
||||||
|
'Limit rows' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Default value' => null,
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'If you did not send this request from Adminer then close this page.' => null,
|
||||||
|
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||||
|
'Size' => null,
|
||||||
|
'Compute' => null,
|
||||||
|
'You are offline.' => null,
|
||||||
|
'You have no privileges to update this table.' => null,
|
||||||
|
'Saving' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => 'Да',
|
||||||
|
'No' => 'Не',
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -11,10 +11,10 @@ $translations = array(
|
|||||||
'Logged as: %s' => 'Inloggad som: %s',
|
'Logged as: %s' => 'Inloggad som: %s',
|
||||||
'Logout successful.' => 'Du är nu utloggad.',
|
'Logout successful.' => 'Du är nu utloggad.',
|
||||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Tack för att du använder Adminer, vänligen fundera över att <a href="https://www.adminer.org/en/donation/">donera</a>.',
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Tack för att du använder Adminer, vänligen fundera över att <a href="https://www.adminer.org/en/donation/">donera</a>.',
|
||||||
'Invalid credentials.' => 'Ogiltiga inloggningsuppgifter.',
|
'Invalid server or credentials.' => null,
|
||||||
'There is a space in the input password which might be the cause.' => 'Det finns ett mellanslag i lösenordet, vilket kan vara anledningen.',
|
'There is a space in the input password which might be the cause.' => 'Det finns ett mellanslag i lösenordet, vilket kan vara anledningen.',
|
||||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer tillåter inte att ansluta till en databas utan lösenord. <a href="https://www.adminer.org/en/password/"%s>Mer information</a>.',
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer tillåter inte att ansluta till en databas utan lösenord. <a href="https://www.adminer.org/en/password/"%s>Mer information</a>.',
|
||||||
'Database does not support password.' => 'Databasen stöder inte lösenord.',
|
'Database does not support password.' => 'Databasen stödjer inte lösenord.',
|
||||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('För många misslyckade inloggningar, försök igen om %d minut.', 'För många misslyckade inloggningar, försök igen om %d minuter.'),
|
'Too many unsuccessful logins, try again in %d minute(s).' => array('För många misslyckade inloggningar, försök igen om %d minut.', 'För många misslyckade inloggningar, försök igen om %d minuter.'),
|
||||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Huvudlösenordet har löpt ut. <a href="https://www.adminer.org/en/extension/"%s>Implementera</a> %s en metod för att göra det permanent.',
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Huvudlösenordet har löpt ut. <a href="https://www.adminer.org/en/extension/"%s>Implementera</a> %s en metod för att göra det permanent.',
|
||||||
'Language' => 'Språk',
|
'Language' => 'Språk',
|
||||||
@@ -25,7 +25,7 @@ $translations = array(
|
|||||||
'Connecting to privileged ports is not allowed.' => 'Anslutning till privilegierade portar är inte tillåtet.',
|
'Connecting to privileged ports is not allowed.' => 'Anslutning till privilegierade portar är inte tillåtet.',
|
||||||
'Disable %s or enable %s or %s extensions.' => 'Stäng av %s eller sätt på %s eller %s tilläggen.',
|
'Disable %s or enable %s or %s extensions.' => 'Stäng av %s eller sätt på %s eller %s tilläggen.',
|
||||||
'Session support must be enabled.' => 'Support för sessioner måste vara på.',
|
'Session support must be enabled.' => 'Support för sessioner måste vara på.',
|
||||||
'Session expired, please login again.' => 'Session har löpt ur, vänligen logga in igen.',
|
'Session expired, please login again.' => 'Session har löpt ut, vänligen logga in igen.',
|
||||||
'The action will be performed after successful login with the same credentials.' => 'Åtgärden kommer att utföras efter en lyckad inloggning med samma inloggningsuppgifter.',
|
'The action will be performed after successful login with the same credentials.' => 'Åtgärden kommer att utföras efter en lyckad inloggning med samma inloggningsuppgifter.',
|
||||||
'%s version: %s through PHP extension %s' => '%s version: %s genom PHP-tillägg %s',
|
'%s version: %s through PHP extension %s' => '%s version: %s genom PHP-tillägg %s',
|
||||||
'Refresh' => 'Ladda om',
|
'Refresh' => 'Ladda om',
|
||||||
@@ -346,4 +346,12 @@ $translations = array(
|
|||||||
'Type has been dropped.' => 'Typ har, typ, tagits bort.',
|
'Type has been dropped.' => 'Typ har, typ, tagits bort.',
|
||||||
'Type has been created.' => 'Typ har skapats.',
|
'Type has been created.' => 'Typ har skapats.',
|
||||||
'Alter type' => 'Ändra typ',
|
'Alter type' => 'Ändra typ',
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => 'Ja',
|
||||||
|
'No' => 'Nej',
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
$translations = array(
|
$translations = array(
|
||||||
'Login' => 'நுழை',
|
'Login' => 'நுழை',
|
||||||
'Logout successful.' => 'வெற்றிகரமாய் வெளியேறியாயிற்று.',
|
'Logout successful.' => 'வெற்றிகரமாய் வெளியேறியாயிற்று.',
|
||||||
'Invalid credentials.' => 'சரியான விபரங்கள் இல்லை.',
|
'Invalid server or credentials.' => null,
|
||||||
'Server' => 'வழங்கி (Server)',
|
'Server' => 'வழங்கி (Server)',
|
||||||
'Username' => 'பயனாளர் (User)',
|
'Username' => 'பயனாளர் (User)',
|
||||||
'Password' => 'கடவுச்சொல்',
|
'Password' => 'கடவுச்சொல்',
|
||||||
@@ -264,4 +264,50 @@ $translations = array(
|
|||||||
'Permanent link' => 'நிரந்தர இணைப்பு',
|
'Permanent link' => 'நிரந்தர இணைப்பு',
|
||||||
'Edit all' => 'அனைத்தையும் தொகு',
|
'Edit all' => 'அனைத்தையும் தொகு',
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
'HH:MM:SS' => 'HH:MM:SS',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'Tables have been optimized.' => null,
|
||||||
|
'Materialized view' => null,
|
||||||
|
'Vacuum' => null,
|
||||||
|
'Selected' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'Ctrl+click on a value to modify it.' => null,
|
||||||
|
'File must be in UTF-8 encoding.' => null,
|
||||||
|
'Modify' => null,
|
||||||
|
'Load more data' => null,
|
||||||
|
'Loading' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'%d / ' => array(),
|
||||||
|
'Limit rows' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Default value' => null,
|
||||||
|
'Full table scan' => null,
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'If you did not send this request from Adminer then close this page.' => null,
|
||||||
|
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||||
|
'Size' => null,
|
||||||
|
'Compute' => null,
|
||||||
|
'You are offline.' => null,
|
||||||
|
'You have no privileges to update this table.' => null,
|
||||||
|
'Saving' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
'yes' => null,
|
||||||
|
'no' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => null,
|
||||||
|
'No' => null,
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
$translations = array(
|
$translations = array(
|
||||||
'Login' => 'เข้าสู่ระบบ',
|
'Login' => 'เข้าสู่ระบบ',
|
||||||
'Logout successful.' => 'ออกจากระบบเรียบร้อยแล้ว.',
|
'Logout successful.' => 'ออกจากระบบเรียบร้อยแล้ว.',
|
||||||
'Invalid credentials.' => 'ข้อมูลไม่ถูกต้อง.',
|
'Invalid server or credentials.' => null,
|
||||||
'Server' => 'เซอเวอร์',
|
'Server' => 'เซอเวอร์',
|
||||||
'Username' => 'ชื่อผู้ใช้งาน',
|
'Username' => 'ชื่อผู้ใช้งาน',
|
||||||
'Password' => 'รหัสผ่าน',
|
'Password' => 'รหัสผ่าน',
|
||||||
@@ -265,4 +265,49 @@ $translations = array(
|
|||||||
'Permanent link' => 'ลิงค์ถาวร',
|
'Permanent link' => 'ลิงค์ถาวร',
|
||||||
'Edit all' => 'แก้ไขทั้งหมด',
|
'Edit all' => 'แก้ไขทั้งหมด',
|
||||||
'HH:MM:SS' => 'HH:MM:SS',
|
'HH:MM:SS' => 'HH:MM:SS',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'Tables have been optimized.' => null,
|
||||||
|
'Materialized view' => null,
|
||||||
|
'Vacuum' => null,
|
||||||
|
'Selected' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'File must be in UTF-8 encoding.' => null,
|
||||||
|
'Modify' => null,
|
||||||
|
'Load more data' => null,
|
||||||
|
'Loading' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'%d / ' => array(),
|
||||||
|
'Limit rows' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Default value' => null,
|
||||||
|
'Full table scan' => null,
|
||||||
|
'Too many unsuccessful logins, try again in %d minute(s).' => array(),
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'If you did not send this request from Adminer then close this page.' => null,
|
||||||
|
'You can upload a big SQL file via FTP and import it from server.' => null,
|
||||||
|
'Size' => null,
|
||||||
|
'Compute' => null,
|
||||||
|
'You are offline.' => null,
|
||||||
|
'You have no privileges to update this table.' => null,
|
||||||
|
'Saving' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
'yes' => null,
|
||||||
|
'no' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => null,
|
||||||
|
'No' => null,
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -11,7 +11,7 @@ $translations = array(
|
|||||||
'Logged as: %s' => '%s olarak giriş yapıldı.',
|
'Logged as: %s' => '%s olarak giriş yapıldı.',
|
||||||
'Logout successful.' => 'Oturum başarıyla sonlandı.',
|
'Logout successful.' => 'Oturum başarıyla sonlandı.',
|
||||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Adminer kullandığınız için teşekkür ederiz <a href="https://www.adminer.org/en/donation/">bağış yapmayı düşünün</a>.',
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Adminer kullandığınız için teşekkür ederiz <a href="https://www.adminer.org/en/donation/">bağış yapmayı düşünün</a>.',
|
||||||
'Invalid credentials.' => 'Geçersiz kimlik bilgileri.',
|
'Invalid server or credentials.' => null,
|
||||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Çok fazla oturum açma denemesi yapıldı.', '%d Dakika sonra tekrar deneyiniz.'),
|
'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.',
|
'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',
|
||||||
@@ -340,4 +340,19 @@ $translations = array(
|
|||||||
'Type has been dropped.' => 'Tür silindi.',
|
'Type has been dropped.' => 'Tür silindi.',
|
||||||
'Type has been created.' => 'Tür oluşturuldu.',
|
'Type has been created.' => 'Tür oluşturuldu.',
|
||||||
'Alter type' => 'Türü değiştir',
|
'Alter type' => 'Türü değiştir',
|
||||||
|
|
||||||
|
'overwrite' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => 'Evet',
|
||||||
|
'No' => 'Hayır',
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -10,7 +10,7 @@ $translations = array(
|
|||||||
'Logout' => 'Вийти',
|
'Logout' => 'Вийти',
|
||||||
'Logged as: %s' => 'Ви увійшли як: %s',
|
'Logged as: %s' => 'Ви увійшли як: %s',
|
||||||
'Logout successful.' => 'Ви вдало вийшли з системи.',
|
'Logout successful.' => 'Ви вдало вийшли з системи.',
|
||||||
'Invalid credentials.' => 'Неправильні дані входу.',
|
'Invalid server or credentials.' => null,
|
||||||
'Language' => 'Мова',
|
'Language' => 'Мова',
|
||||||
'Invalid CSRF token. Send the form again.' => 'Недійсний CSRF токен. Надішліть форму ще раз.',
|
'Invalid CSRF token. Send the form again.' => 'Недійсний CSRF токен. Надішліть форму ще раз.',
|
||||||
'No extension' => 'Нема розширень',
|
'No extension' => 'Нема розширень',
|
||||||
@@ -343,4 +343,16 @@ $translations = array(
|
|||||||
'Saving' => 'Збереження',
|
'Saving' => 'Збереження',
|
||||||
'Unknown error.' => 'Невідома помилка.',
|
'Unknown error.' => 'Невідома помилка.',
|
||||||
'Database does not support password.' => 'База даних не підтримує пароль.',
|
'Database does not support password.' => 'База даних не підтримує пароль.',
|
||||||
|
|
||||||
|
'Vacuum' => null,
|
||||||
|
'%d / ' => array(),
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => 'Так',
|
||||||
|
'No' => 'Ні',
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -10,7 +10,7 @@ $translations = array(
|
|||||||
'Logout' => 'Thoát',
|
'Logout' => 'Thoát',
|
||||||
'Logged as: %s' => 'Vào dưới tên: %s',
|
'Logged as: %s' => 'Vào dưới tên: %s',
|
||||||
'Logout successful.' => 'Đã thoát xong.',
|
'Logout successful.' => 'Đã thoát xong.',
|
||||||
'Invalid credentials.' => 'Tài khoản sai.',
|
'Invalid server or credentials.' => null,
|
||||||
'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/"%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.',
|
'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ữ',
|
||||||
@@ -325,4 +325,33 @@ $translations = array(
|
|||||||
'Type has been dropped.' => 'Đã xoá kiểu.',
|
'Type has been dropped.' => 'Đã xoá kiểu.',
|
||||||
'Type has been created.' => 'Đã tạo kiểu.',
|
'Type has been created.' => 'Đã tạo kiểu.',
|
||||||
'Alter type' => 'Sửa kiểu dữ liệu',
|
'Alter type' => 'Sửa kiểu dữ liệu',
|
||||||
|
|
||||||
|
'Drop %s?' => null,
|
||||||
|
'Materialized view' => null,
|
||||||
|
'overwrite' => null,
|
||||||
|
'DB' => null,
|
||||||
|
'ATTACH queries are not supported.' => null,
|
||||||
|
'Warnings' => null,
|
||||||
|
'%d / ' => array(),
|
||||||
|
'Limit rows' => null,
|
||||||
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
|
||||||
|
'Default value' => null,
|
||||||
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
|
||||||
|
'The action will be performed after successful login with the same credentials.' => null,
|
||||||
|
'Connecting to privileged ports is not allowed.' => null,
|
||||||
|
'There is a space in the input password which might be the cause.' => null,
|
||||||
|
'If you did not send this request from Adminer then close this page.' => null,
|
||||||
|
'You are offline.' => null,
|
||||||
|
'Saving' => null,
|
||||||
|
'Unknown error.' => null,
|
||||||
|
'Database does not support password.' => null,
|
||||||
|
'Disable %s or enable %s or %s extensions.' => null,
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => 'Có',
|
||||||
|
'No' => 'Không',
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -11,7 +11,7 @@ $translations = array(
|
|||||||
'Logged as: %s' => 'Xx: %s',
|
'Logged as: %s' => 'Xx: %s',
|
||||||
'Logout successful.' => 'Xx.',
|
'Logout successful.' => 'Xx.',
|
||||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Xx <a href="https://www.adminer.org/en/donation/">xx</a>.',
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Xx <a href="https://www.adminer.org/en/donation/">xx</a>.',
|
||||||
'Invalid credentials.' => 'Xx.',
|
'Invalid server or credentials.' => 'Xx.',
|
||||||
'There is a space in the input password which might be the cause.' => 'Xx.',
|
'There is a space in the input password which might be the cause.' => 'Xx.',
|
||||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Xx, <a href="https://www.adminer.org/en/password/"%s>xx</a>.',
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Xx, <a href="https://www.adminer.org/en/password/"%s>xx</a>.',
|
||||||
'Database does not support password.' => 'Xx.',
|
'Database does not support password.' => 'Xx.',
|
||||||
@@ -346,4 +346,13 @@ $translations = array(
|
|||||||
'Type has been dropped.' => 'Xx.',
|
'Type has been dropped.' => 'Xx.',
|
||||||
'Type has been created.' => 'Xx.',
|
'Type has been created.' => 'Xx.',
|
||||||
'Alter type' => 'Xx',
|
'Alter type' => 'Xx',
|
||||||
|
|
||||||
|
// Plugins
|
||||||
|
'Columns' => 'Xx',
|
||||||
|
'Nullable' => 'Xx',
|
||||||
|
'Default' => 'Xx',
|
||||||
|
'Yes' => 'Xx',
|
||||||
|
'No' => 'Xx',
|
||||||
|
'One Time Password' => 'Xx',
|
||||||
|
'Invalid OTP code.' => 'Xx.',
|
||||||
);
|
);
|
||||||
|
@@ -11,7 +11,7 @@ $translations = array(
|
|||||||
'Logged as: %s' => '登錄為: %s',
|
'Logged as: %s' => '登錄為: %s',
|
||||||
'Logout successful.' => '成功登出。',
|
'Logout successful.' => '成功登出。',
|
||||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => '感謝使用Adminer,請考慮為我們<a href="https://www.adminer.org/en/donation/">捐款(英文網頁)</a>.',
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => '感謝使用Adminer,請考慮為我們<a href="https://www.adminer.org/en/donation/">捐款(英文網頁)</a>.',
|
||||||
'Invalid credentials.' => '無效的憑證。',
|
'Invalid server or credentials.' => null,
|
||||||
'There is a space in the input password which might be the cause.' => '您輸入的密碼中有一個空格,這可能是導致問題的原因。',
|
'There is a space in the input password which might be the cause.' => '您輸入的密碼中有一個空格,這可能是導致問題的原因。',
|
||||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer預設不支援訪問沒有密碼的資料庫,<a href="https://www.adminer.org/en/password/"%s>詳情見這裡</a>.',
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer預設不支援訪問沒有密碼的資料庫,<a href="https://www.adminer.org/en/password/"%s>詳情見這裡</a>.',
|
||||||
'Database does not support password.' => '資料庫不支援密碼。',
|
'Database does not support password.' => '資料庫不支援密碼。',
|
||||||
@@ -346,4 +346,13 @@ $translations = array(
|
|||||||
'Type has been dropped.' => '已刪除類型。',
|
'Type has been dropped.' => '已刪除類型。',
|
||||||
'Type has been created.' => '已建立類型。',
|
'Type has been created.' => '已建立類型。',
|
||||||
'Alter type' => '修改類型',
|
'Alter type' => '修改類型',
|
||||||
|
|
||||||
|
// Plugins
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => null,
|
||||||
|
'No' => null,
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -11,7 +11,7 @@ $translations = array(
|
|||||||
'Logged as: %s' => '登录用户:%s',
|
'Logged as: %s' => '登录用户:%s',
|
||||||
'Logout successful.' => '成功登出。',
|
'Logout successful.' => '成功登出。',
|
||||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => '感谢使用Adminer,请考虑为我们<a href="https://www.adminer.org/en/donation/">捐款(英文页面)</a>.',
|
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => '感谢使用Adminer,请考虑为我们<a href="https://www.adminer.org/en/donation/">捐款(英文页面)</a>.',
|
||||||
'Invalid credentials.' => '无效凭据。',
|
'Invalid server or credentials.' => null,
|
||||||
'There is a space in the input password which might be the cause.' => '您输入的密码中有一个空格,这可能是导致问题的原因。',
|
'There is a space in the input password which might be the cause.' => '您输入的密码中有一个空格,这可能是导致问题的原因。',
|
||||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer默认不支持访问没有密码的数据库,<a href="https://www.adminer.org/en/password/"%s>详情见这里</a>.',
|
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer默认不支持访问没有密码的数据库,<a href="https://www.adminer.org/en/password/"%s>详情见这里</a>.',
|
||||||
'Database does not support password.' => '数据库不支持密码。',
|
'Database does not support password.' => '数据库不支持密码。',
|
||||||
@@ -346,4 +346,12 @@ $translations = array(
|
|||||||
'Type has been dropped.' => '已删除类型。',
|
'Type has been dropped.' => '已删除类型。',
|
||||||
'Type has been created.' => '已创建类型。',
|
'Type has been created.' => '已创建类型。',
|
||||||
'Alter type' => '修改类型',
|
'Alter type' => '修改类型',
|
||||||
|
|
||||||
|
'Columns' => null,
|
||||||
|
'Nullable' => null,
|
||||||
|
'Default' => null,
|
||||||
|
'Yes' => null,
|
||||||
|
'No' => null,
|
||||||
|
'One Time Password' => null,
|
||||||
|
'Invalid OTP code.' => null,
|
||||||
);
|
);
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
if (support("kill") && $_POST && !$error) {
|
if (support("kill")) {
|
||||||
|
if ($_POST && !$error) {
|
||||||
$killed = 0;
|
$killed = 0;
|
||||||
foreach ((array) $_POST["kill"] as $val) {
|
foreach ((array) $_POST["kill"] as $val) {
|
||||||
if (kill_process($val)) {
|
if (kill_process($val)) {
|
||||||
@@ -8,6 +9,7 @@ if (support("kill") && $_POST && !$error) {
|
|||||||
}
|
}
|
||||||
queries_redirect(ME . "processlist=", lang('%d process(es) have been killed.', $killed), $killed || !$_POST["kill"]);
|
queries_redirect(ME . "processlist=", lang('%d process(es) have been killed.', $killed), $killed || !$_POST["kill"]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
page_header(lang('Process list'), $error);
|
page_header(lang('Process list'), $error);
|
||||||
?>
|
?>
|
||||||
|
@@ -12,7 +12,7 @@ if ($_GET["script"] == "db") {
|
|||||||
foreach ($sums + array("Auto_increment" => 0, "Rows" => 0) as $key => $val) {
|
foreach ($sums + array("Auto_increment" => 0, "Rows" => 0) as $key => $val) {
|
||||||
if ($table_status[$key] != "") {
|
if ($table_status[$key] != "") {
|
||||||
$val = format_number($table_status[$key]);
|
$val = format_number($table_status[$key]);
|
||||||
json_row("$key-$name", ($key == "Rows" && $val && $table_status["Engine"] == ($sql == "pgsql" ? "table" : "InnoDB")
|
json_row("$key-$name", ($key == "Rows" && $val && $table_status["Engine"] == ($jush == "pgsql" ? "table" : "InnoDB")
|
||||||
? "~ $val"
|
? "~ $val"
|
||||||
: $val
|
: $val
|
||||||
));
|
));
|
||||||
|
@@ -9,6 +9,8 @@ parse_str($_COOKIE["adminer_import"], $adminer_import);
|
|||||||
|
|
||||||
$rights = array(); // privilege => 0
|
$rights = array(); // privilege => 0
|
||||||
$columns = array(); // selectable columns
|
$columns = array(); // selectable columns
|
||||||
|
$search_columns = array(); // searchable columns
|
||||||
|
$order_columns = array(); // searchable columns
|
||||||
$text_length = null;
|
$text_length = null;
|
||||||
foreach ($fields as $key => $field) {
|
foreach ($fields as $key => $field) {
|
||||||
$name = $adminer->fieldName($field);
|
$name = $adminer->fieldName($field);
|
||||||
@@ -18,6 +20,12 @@ foreach ($fields as $key => $field) {
|
|||||||
$text_length = $adminer->selectLengthProcess();
|
$text_length = $adminer->selectLengthProcess();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (isset($field["privileges"]["where"]) && $name != "") {
|
||||||
|
$search_columns[$key] = html_entity_decode(strip_tags($name), ENT_QUOTES);
|
||||||
|
}
|
||||||
|
if (isset($field["privileges"]["order"]) && $name != "") {
|
||||||
|
$order_columns[$key] = html_entity_decode(strip_tags($name), ENT_QUOTES);
|
||||||
|
}
|
||||||
$rights += $field["privileges"];
|
$rights += $field["privileges"];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,14 +232,16 @@ if (is_ajax()) {
|
|||||||
|
|
||||||
$set = null;
|
$set = null;
|
||||||
if (isset($rights["insert"]) || !support("table")) {
|
if (isset($rights["insert"]) || !support("table")) {
|
||||||
$set = "";
|
$params = [];
|
||||||
foreach ((array) $_GET["where"] as $val) {
|
foreach ((array) $_GET["where"] as $val) {
|
||||||
if ($foreign_keys[$val["col"]] && count($foreign_keys[$val["col"]]) == 1 && ($val["op"] == "="
|
if (isset($foreign_keys[$val["col"]]) && count($foreign_keys[$val["col"]]) == 1
|
||||||
|| (!$val["op"] && !preg_match('~[_%]~', $val["val"])) // LIKE in Editor
|
&& ($val["op"] == "=" || (!$val["op"] && (is_array($val["val"]) || !preg_match('~[_%]~', $val["val"]))) // LIKE in Editor
|
||||||
)) {
|
)) {
|
||||||
$set .= "&set" . urlencode("[" . bracket_escape($val["col"]) . "]") . "=" . urlencode($val["val"]);
|
$params["set" . "[" . bracket_escape($val["col"]) . "]"] = $val["val"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$set = $params ? "&" . http_build_query($params) : "";
|
||||||
}
|
}
|
||||||
$adminer->selectLinks($table_status, $set);
|
$adminer->selectLinks($table_status, $set);
|
||||||
|
|
||||||
@@ -245,8 +255,8 @@ if (!$columns && support("table")) {
|
|||||||
echo '<input type="hidden" name="select" value="' . h($TABLE) . '">';
|
echo '<input type="hidden" name="select" value="' . h($TABLE) . '">';
|
||||||
echo "</div>\n";
|
echo "</div>\n";
|
||||||
$adminer->selectColumnsPrint($select, $columns);
|
$adminer->selectColumnsPrint($select, $columns);
|
||||||
$adminer->selectSearchPrint($where, $columns, $indexes);
|
$adminer->selectSearchPrint($where, $search_columns, $indexes);
|
||||||
$adminer->selectOrderPrint($order, $columns, $indexes);
|
$adminer->selectOrderPrint($order, $order_columns, $indexes);
|
||||||
$adminer->selectLimitPrint($limit);
|
$adminer->selectLimitPrint($limit);
|
||||||
$adminer->selectLengthPrint($text_length);
|
$adminer->selectLengthPrint($text_length);
|
||||||
$adminer->selectActionPrint($indexes);
|
$adminer->selectActionPrint($indexes);
|
||||||
@@ -331,12 +341,20 @@ 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";
|
||||||
|
$sortable = isset($field["privileges"]["order"]);
|
||||||
echo "<th id='th[" . h(bracket_escape($key)) . "]'>" . script("mixin(qsl('th'), {onmouseover: partial(columnMouse), onmouseout: partial(columnMouse, ' hidden')});", "");
|
echo "<th id='th[" . h(bracket_escape($key)) . "]'>" . script("mixin(qsl('th'), {onmouseover: partial(columnMouse), onmouseout: partial(columnMouse, ' hidden')});", "");
|
||||||
|
if ($sortable) {
|
||||||
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); //! columns looking like functions
|
||||||
|
if ($sortable) {
|
||||||
|
echo "</a>";
|
||||||
|
}
|
||||||
echo "<span class='column hidden'>";
|
echo "<span class='column hidden'>";
|
||||||
|
if ($sortable) {
|
||||||
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"] && isset($field["privileges"]["where"])) {
|
||||||
echo '<a href="#fieldset-search" 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 script("qsl('a').onclick = partial(selectSearch, '" . js_escape($key) . "');");
|
||||||
}
|
}
|
||||||
@@ -382,7 +400,7 @@ if (!$columns && support("table")) {
|
|||||||
$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 === false ? "f" : $val) : "null%5B%5D=" . urlencode($key));
|
||||||
}
|
}
|
||||||
echo "<tr" . odd() . ">" . (!$group && $select ? "" : "<td>"
|
echo "<tr" . odd() . ">" . (!$group && $select ? "" : "<td>"
|
||||||
. checkbox("check[]", substr($unique_idf, 1), in_array(substr($unique_idf, 1), (array) $_POST["check"]))
|
. checkbox("check[]", substr($unique_idf, 1), in_array(substr($unique_idf, 1), (array) $_POST["check"]))
|
||||||
@@ -552,9 +570,9 @@ if (!$columns && support("table")) {
|
|||||||
}
|
}
|
||||||
if ($format) {
|
if ($format) {
|
||||||
print_fieldset("export", lang('Export') . " <span id='selected2'></span>");
|
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 html_select("format", $format, $adminer_import["format"]);
|
||||||
|
$output = $adminer->dumpOutput();
|
||||||
|
echo ($output ? " " . html_select("output", $output, $adminer_import["output"]) : "");
|
||||||
echo " <input type='submit' name='export' value='" . lang('Export') . "'>\n";
|
echo " <input type='submit' name='export' value='" . lang('Export') . "'>\n";
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
}
|
}
|
||||||
@@ -570,7 +588,7 @@ if (!$columns && support("table")) {
|
|||||||
echo script("qsl('a').onclick = partial(toggle, 'import');", "");
|
echo script("qsl('a').onclick = partial(toggle, 'import');", "");
|
||||||
echo "<span id='import' class='hidden'>: ";
|
echo "<span id='import' class='hidden'>: ";
|
||||||
echo "<input type='file' name='csv_file'> ";
|
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 html_select("separator", array("csv" => "CSV,", "csv;" => "CSV;", "tsv" => "TSV"), $adminer_import["format"]);
|
||||||
echo " <input type='submit' name='import' value='" . lang('Import') . "'>";
|
echo " <input type='submit' name='import' value='" . lang('Import') . "'>";
|
||||||
echo "</span>";
|
echo "</span>";
|
||||||
echo "</div>";
|
echo "</div>";
|
||||||
|
@@ -21,19 +21,25 @@ if (!$error && $_POST) {
|
|||||||
if (!isset($_GET["import"])) {
|
if (!isset($_GET["import"])) {
|
||||||
$query = $_POST["query"];
|
$query = $_POST["query"];
|
||||||
} elseif ($_POST["webfile"]) {
|
} elseif ($_POST["webfile"]) {
|
||||||
$sql_file_path = $adminer->importServerPath();
|
$import_file_path = $adminer->importServerPath();
|
||||||
$fp = @fopen((file_exists($sql_file_path)
|
if (!$import_file_path) {
|
||||||
? $sql_file_path
|
$fp = false;
|
||||||
: "compress.zlib://$sql_file_path.gz"
|
} elseif (file_exists($import_file_path)) {
|
||||||
), "rb");
|
$fp = fopen($import_file_path, "rb");
|
||||||
$query = ($fp ? fread($fp, 1e6) : false);
|
} elseif (file_exists("$import_file_path.gz")) {
|
||||||
|
$fp = fopen("compress.zlib://$import_file_path.gz", "rb");
|
||||||
|
} else {
|
||||||
|
$fp = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$query = $fp ? fread($fp, 1e6) : false;
|
||||||
} else {
|
} else {
|
||||||
$query = get_file("sql_file", true);
|
$query = get_file("sql_file", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_string($query)) { // get_file() returns error as number, fread() as false
|
if (is_string($query)) { // get_file() returns error as number, fread() as false
|
||||||
if (function_exists('memory_get_usage')) {
|
if (function_exists('memory_get_usage') && ($memory_limit = ini_bytes("memory_limit")) != "-1") {
|
||||||
@ini_set("memory_limit", max(ini_bytes("memory_limit"), 2 * strlen($query) + memory_get_usage() + 8e6)); // @ - may be disabled, 2 - substr and trim, 8e6 - other variables
|
@ini_set("memory_limit", max($memory_limit, 2 * strlen($query) + memory_get_usage() + 8e6)); // @ - may be disabled, 2 - substr and trim, 8e6 - other variables
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($query != "" && strlen($query) < 1e6) { // don't add big queries
|
if ($query != "" && strlen($query) < 1e6) { // don't add big queries
|
||||||
@@ -81,13 +87,27 @@ if (!$error && $_POST) {
|
|||||||
$offset = $pos + strlen($found);
|
$offset = $pos + strlen($found);
|
||||||
|
|
||||||
if ($found && rtrim($found) != $delimiter) { // find matching quote or comment end
|
if ($found && rtrim($found) != $delimiter) { // find matching quote or comment end
|
||||||
while (preg_match('(' . ($found == '/*' ? '\*/' : ($found == '[' ? ']' : (preg_match('~^-- |^#~', $found) ? "\n" : preg_quote($found) . "|\\\\."))) . '|$)s', $query, $match, PREG_OFFSET_CAPTURE, $offset)) { //! respect sql_mode NO_BACKSLASH_ESCAPES
|
$c_style_escapes = is_c_style_escapes() || ($jush == "pgsql" && ($pos > 0 && strtolower($query[$pos - 1]) == "e"));
|
||||||
|
|
||||||
|
$pattern = '(';
|
||||||
|
if ($found == '/*') {
|
||||||
|
$pattern .= '\*/';
|
||||||
|
} elseif ($found == '[') {
|
||||||
|
$pattern .= ']';
|
||||||
|
} elseif (preg_match('~^-- |^#~', $found)) {
|
||||||
|
$pattern .= "\n";
|
||||||
|
} else {
|
||||||
|
$pattern .= preg_quote($found) . ($c_style_escapes ? "|\\\\." : "");
|
||||||
|
}
|
||||||
|
$pattern .= '|$)s';
|
||||||
|
|
||||||
|
while (preg_match($pattern, $query, $match, PREG_OFFSET_CAPTURE, $offset)) {
|
||||||
$s = $match[0][0];
|
$s = $match[0][0];
|
||||||
if (!$s && $fp && !feof($fp)) {
|
if (!$s && $fp && !feof($fp)) {
|
||||||
$query .= fread($fp, 1e5);
|
$query .= fread($fp, 1e5);
|
||||||
} else {
|
} else {
|
||||||
$offset = $match[0][1] + strlen($s);
|
$offset = $match[0][1] + strlen($s);
|
||||||
if ($s[0] != "\\") {
|
if (!isset($s[0]) || $s[0] != "\\") {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -123,7 +143,7 @@ if (!$error && $_POST) {
|
|||||||
|
|
||||||
if ($connection->error) {
|
if ($connection->error) {
|
||||||
echo ($_POST["only_errors"] ? $print : "");
|
echo ($_POST["only_errors"] ? $print : "");
|
||||||
echo "<p class='error'>" . lang('Error in query') . ($connection->errno ? " ($connection->errno)" : "") . ": " . error() . "\n";
|
echo "<p class='error'>" . lang('Error in query') . (!empty($connection->errno) ? " ($connection->errno)" : "") . ": " . error() . "\n";
|
||||||
$errors[] = " <a href='#sql-$commands'>$commands</a>";
|
$errors[] = " <a href='#sql-$commands'>$commands</a>";
|
||||||
if ($_POST["error_stops"]) {
|
if ($_POST["error_stops"]) {
|
||||||
break 2;
|
break 2;
|
||||||
@@ -169,7 +189,8 @@ if (!$error && $_POST) {
|
|||||||
stop_session();
|
stop_session();
|
||||||
}
|
}
|
||||||
if (!$_POST["only_errors"]) {
|
if (!$_POST["only_errors"]) {
|
||||||
echo "<p class='message' title='" . h($connection->info) . "'>" . lang('Query executed OK, %d row(s) affected.', $affected) . "$time\n";
|
$title = isset($connection->info) ? "title='" . h($connection->info) . "'" : "";
|
||||||
|
echo "<p class='message' $title>" . lang('Query executed OK, %d row(s) affected.', $affected) . "$time\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
echo ($warnings ? "<div id='$warnings_id' class='hidden'>\n$warnings</div>\n" : "");
|
echo ($warnings ? "<div id='$warnings_id' class='hidden'>\n$warnings</div>\n" : "");
|
||||||
@@ -234,10 +255,10 @@ if (!isset($_GET["import"])) {
|
|||||||
: lang('File uploads are disabled.')
|
: lang('File uploads are disabled.')
|
||||||
);
|
);
|
||||||
echo "</div></fieldset>\n";
|
echo "</div></fieldset>\n";
|
||||||
$importServerPath = $adminer->importServerPath();
|
$import_file_path = $adminer->importServerPath();
|
||||||
if ($importServerPath) {
|
if ($import_file_path) {
|
||||||
echo "<fieldset><legend>" . lang('From server') . "</legend><div>";
|
echo "<fieldset><legend>" . lang('From server') . "</legend><div>";
|
||||||
echo lang('Webserver file %s', "<code>" . h($importServerPath) . "$gz</code>");
|
echo lang('Webserver file %s', "<code>" . h($import_file_path) . "$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";
|
||||||
}
|
}
|
||||||
|
@@ -19,15 +19,19 @@ fieldset { display: inline; vertical-align: top; padding: .5em .8em; margin: .8e
|
|||||||
p { margin: .8em 20px 0 0; }
|
p { margin: .8em 20px 0 0; }
|
||||||
img { vertical-align: middle; border: 0; }
|
img { vertical-align: middle; border: 0; }
|
||||||
td img { max-width: 200px; max-height: 200px; }
|
td img { max-width: 200px; max-height: 200px; }
|
||||||
code { background: #eee; }
|
|
||||||
tbody tr:hover td, tbody tr:hover th { background: #eee; }
|
tbody tr:hover td, tbody tr:hover th { background: #eee; }
|
||||||
|
code { font-size: 110%; padding: 1px 2px; background: #eee; }
|
||||||
pre { margin: 1em 0 0; }
|
pre { margin: 1em 0 0; }
|
||||||
pre, textarea { font: 100%/1.25 monospace; }
|
pre code { display: block; font-size: 100%; }
|
||||||
input { vertical-align: middle; }
|
pre, textarea { font: 110%/1.25 monospace; }
|
||||||
|
pre.jush { background: #fff; }
|
||||||
|
input, textarea { box-sizing: border-box; }
|
||||||
|
input, select { 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; }
|
||||||
input.wayoff { left: -1000px; position: absolute; }
|
input.wayoff { left: -1000px; position: absolute; }
|
||||||
|
.center { text-align: center; }
|
||||||
.block { display: block; }
|
.block { display: block; }
|
||||||
.version { color: #777; font-size: 67%; }
|
.version { color: #777; font-size: 67%; }
|
||||||
.js .hidden, .nojs .jsonly { display: none; }
|
.js .hidden, .nojs .jsonly { display: none; }
|
||||||
@@ -69,7 +73,7 @@ input.wayoff { left: -1000px; position: absolute; }
|
|||||||
#menu p, #logins, #tables { padding: .8em 1em; margin: 0; border-bottom: 1px solid #ccc; }
|
#menu p, #logins, #tables { padding: .8em 1em; margin: 0; border-bottom: 1px solid #ccc; }
|
||||||
#logins li, #tables li { list-style: none; }
|
#logins li, #tables li { list-style: none; }
|
||||||
#dbs { overflow: hidden; }
|
#dbs { overflow: hidden; }
|
||||||
#logins, #tables { white-space: nowrap; overflow: auto; }
|
#logins, #tables { white-space: nowrap; overflow: hidden; }
|
||||||
#logins a, #tables a, #tables span { background: #fff; }
|
#logins a, #tables a, #tables span { background: #fff; }
|
||||||
#content { margin: 2em 0 0 21em; padding: 10px 20px 20px 0; }
|
#content { margin: 2em 0 0 21em; padding: 10px 20px 20px 0; }
|
||||||
#lang { position: absolute; top: 0; left: 0; line-height: 1.8em; padding: .3em 1em; }
|
#lang { position: absolute; top: 0; left: 0; line-height: 1.8em; padding: .3em 1em; }
|
||||||
@@ -90,7 +94,7 @@ input.wayoff { left: -1000px; position: absolute; }
|
|||||||
.rtl input.wayoff { left: auto; right: -1000px; }
|
.rtl input.wayoff { left: auto; right: -1000px; }
|
||||||
.rtl #lang, .rtl #menu { left: auto; right: 0; }
|
.rtl #lang, .rtl #menu { left: auto; right: 0; }
|
||||||
|
|
||||||
@media all and (max-device-width: 880px) {
|
@media all and (max-width: 880px) {
|
||||||
.pages { left: auto; }
|
.pages { left: auto; }
|
||||||
#menu { position: static; width: auto; }
|
#menu { position: static; width: auto; }
|
||||||
#content { margin-left: 10px; }
|
#content { margin-left: 10px; }
|
||||||
|
@@ -54,7 +54,7 @@ function bodyLoad(version, maria) {
|
|||||||
function formField(form, name) {
|
function formField(form, name) {
|
||||||
// required in IE < 8, form.elements[name] doesn't work
|
// required in IE < 8, form.elements[name] doesn't work
|
||||||
for (var i=0; i < form.length; i++) {
|
for (var i=0; i < form.length; i++) {
|
||||||
if (form[i].name == name) {
|
if (form[i].name === name) {
|
||||||
return form[i];
|
return form[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -103,8 +103,13 @@ var dbPrevious = {};
|
|||||||
* @this HTMLSelectElement
|
* @this HTMLSelectElement
|
||||||
*/
|
*/
|
||||||
function dbMouseDown(event) {
|
function dbMouseDown(event) {
|
||||||
|
// Firefox: mouse-down event does not contain pressed key information for OPTION.
|
||||||
|
// Chrome: mouse-down event has inherited key information from SELECT.
|
||||||
|
// So we ignore the event for OPTION to work Ctrl+click correctly everywhere.
|
||||||
|
if (event.target.tagName === "OPTION") return;
|
||||||
|
|
||||||
dbCtrl = isCtrl(event);
|
dbCtrl = isCtrl(event);
|
||||||
if (dbPrevious[this.name] == undefined) {
|
if (dbPrevious[this.name] === undefined) {
|
||||||
dbPrevious[this.name] = this.value;
|
dbPrevious[this.name] = this.value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -118,7 +123,7 @@ function dbChange() {
|
|||||||
}
|
}
|
||||||
this.form.submit();
|
this.form.submit();
|
||||||
this.form.target = '';
|
this.form.target = '';
|
||||||
if (dbCtrl && dbPrevious[this.name] != undefined) {
|
if (dbCtrl && dbPrevious[this.name] !== undefined) {
|
||||||
this.value = dbPrevious[this.name];
|
this.value = dbPrevious[this.name];
|
||||||
dbPrevious[this.name] = undefined;
|
dbPrevious[this.name] = undefined;
|
||||||
}
|
}
|
||||||
@@ -145,23 +150,23 @@ function selectFieldChange() {
|
|||||||
for (var i=0; i < selects.length; i++) {
|
for (var i=0; i < selects.length; i++) {
|
||||||
var select = selects[i];
|
var select = selects[i];
|
||||||
var col = selectValue(select);
|
var col = selectValue(select);
|
||||||
var match = /^(where.+)col\]/.exec(select.name);
|
var match = /^(where.+)col]/.exec(select.name);
|
||||||
if (match) {
|
if (match) {
|
||||||
var op = selectValue(form[match[1] + 'op]']);
|
var op = selectValue(form[match[1] + 'op]']);
|
||||||
var val = form[match[1] + 'val]'].value;
|
var val = form[match[1] + 'val]'].value;
|
||||||
if (col in indexColumns && (!/LIKE|REGEXP/.test(op) || (op == 'LIKE' && val.charAt(0) != '%'))) {
|
if (col in indexColumns && (!/LIKE|REGEXP/.test(op) || (op === 'LIKE' && val.charAt(0) !== '%'))) {
|
||||||
return true;
|
return true;
|
||||||
} else if (col || val) {
|
} else if (col || val) {
|
||||||
ok = false;
|
ok = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((match = /^(columns.+)fun\]/.exec(select.name))) {
|
if ((match = /^(columns.+)fun]/.exec(select.name))) {
|
||||||
if (/^(avg|count|count distinct|group_concat|max|min|sum)$/.test(col)) {
|
if (/^(avg|count|count distinct|group_concat|max|min|sum)$/.test(col)) {
|
||||||
group = true;
|
group = true;
|
||||||
}
|
}
|
||||||
var val = selectValue(form[match[1] + 'col]']);
|
var val = selectValue(form[match[1] + 'col]']);
|
||||||
if (val) {
|
if (val) {
|
||||||
columns[col && col != 'count' ? '' : val] = 1;
|
columns[col && col !== 'count' ? '' : val] = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (col && /^order/.test(select.name)) {
|
if (col && /^order/.test(select.name)) {
|
||||||
@@ -194,7 +199,7 @@ var added = '.', rowCount;
|
|||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
function delimiterEqual(val, a, b) {
|
function delimiterEqual(val, a, b) {
|
||||||
return (val == a + '_' + b || val == a + b || val == a + b.charAt(0).toUpperCase() + b.substr(1));
|
return (val === a + '_' + b || val === a + b || val === a + b.charAt(0).toUpperCase() + b.substr(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Escape string to use as identifier
|
/** Escape string to use as identifier
|
||||||
@@ -255,7 +260,7 @@ function editingClick(event) {
|
|||||||
} else if (/^drop_col\[/.test(name)) {
|
} else if (/^drop_col\[/.test(name)) {
|
||||||
editingRemoveRow.call(el, 'fields\$1[field]');
|
editingRemoveRow.call(el, 'fields\$1[field]');
|
||||||
} else {
|
} else {
|
||||||
if (name == 'auto_increment_col') {
|
if (name === 'auto_increment_col') {
|
||||||
var field = el.form['fields[' + el.value + '][field]'];
|
var field = el.form['fields[' + el.value + '][field]'];
|
||||||
if (!field.value) {
|
if (!field.value) {
|
||||||
field.value = 'id';
|
field.value = 'id';
|
||||||
@@ -273,7 +278,7 @@ function editingClick(event) {
|
|||||||
*/
|
*/
|
||||||
function editingInput(event) {
|
function editingInput(event) {
|
||||||
var el = getTarget(event);
|
var el = getTarget(event);
|
||||||
if (/\[default\]$/.test(el.name)) {
|
if (/\[default]$/.test(el.name)) {
|
||||||
el.previousSibling.checked = true;
|
el.previousSibling.checked = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -290,7 +295,7 @@ function editingNameChange() {
|
|||||||
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
|
||||||
if (candidate && i == opts.length - 2 && val == opts[candidate].value.replace(/.+`/, '') && name == 'fields[1]') { // single target table, link to column, first field - probably `id`
|
if (candidate && i === opts.length - 2 && val === opts[candidate].value.replace(/.+`/, '') && name === 'fields[1]') { // single target table, link to column, first field - probably `id`
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -300,7 +305,7 @@ function editingNameChange() {
|
|||||||
var tables = [ table, table.replace(/s$/, ''), table.replace(/es$/, '') ];
|
var tables = [ table, table.replace(/s$/, ''), table.replace(/es$/, '') ];
|
||||||
for (var j=0; j < tables.length; j++) {
|
for (var j=0; j < tables.length; j++) {
|
||||||
table = tables[j];
|
table = tables[j];
|
||||||
if (val == column || val == table || delimiterEqual(val, table, column) || delimiterEqual(val, column, table)) {
|
if (val === column || val === table || delimiterEqual(val, table, column) || delimiterEqual(val, column, table)) {
|
||||||
if (candidate) {
|
if (candidate) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -335,7 +340,7 @@ function editingAddRow(focus) {
|
|||||||
tags2 = qsa('input', row2);
|
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') {
|
||||||
tags2[i].value = x;
|
tags2[i].value = x;
|
||||||
tags2[i].checked = false;
|
tags2[i].checked = false;
|
||||||
}
|
}
|
||||||
@@ -397,7 +402,7 @@ function editingTypeChange() {
|
|||||||
var text = selectValue(type);
|
var text = selectValue(type);
|
||||||
for (var i=0; i < type.form.elements.length; i++) {
|
for (var i=0; i < type.form.elements.length; i++) {
|
||||||
var el = type.form.elements[i];
|
var el = type.form.elements[i];
|
||||||
if (el.name == name + '[length]') {
|
if (el.name === name + '[length]') {
|
||||||
if (!(
|
if (!(
|
||||||
(/(char|binary)$/.test(lastType) && /(char|binary)$/.test(text))
|
(/(char|binary)$/.test(lastType) && /(char|binary)$/.test(text))
|
||||||
|| (/(enum|set)$/.test(lastType) && /(enum|set)$/.test(text))
|
|| (/(enum|set)$/.test(lastType) && /(enum|set)$/.test(text))
|
||||||
@@ -406,19 +411,19 @@ function editingTypeChange() {
|
|||||||
}
|
}
|
||||||
el.oninput.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;
|
||||||
}
|
}
|
||||||
if (el.name == name + '[collation]') {
|
if (el.name === name + '[collation]') {
|
||||||
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(?!er)|numeric|real|float|double|decimal|money/.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
|
||||||
}
|
}
|
||||||
if (el.name == name + '[on_delete]') {
|
if (el.name === name + '[on_delete]') {
|
||||||
alterClass(el, 'hidden', !/`/.test(text));
|
alterClass(el, 'hidden', !/`/.test(text));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -457,13 +462,13 @@ function enumValues(s) {
|
|||||||
var offset = 0;
|
var offset = 0;
|
||||||
var match;
|
var match;
|
||||||
while (match = re.exec(s)) {
|
while (match = re.exec(s)) {
|
||||||
if (offset != match.index) {
|
if (offset !== match.index) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
result.push(match[2].replace(/'(')|\\(.)/g, '$1$2'));
|
result.push(match[2].replace(/'(')|\\(.)/g, '$1$2'));
|
||||||
offset += match[0].length;
|
offset += match[0].length;
|
||||||
}
|
}
|
||||||
return (offset == s.length ? result.join('\n') : s);
|
return (offset === s.length ? result.join('\n') : s);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Finish editing of enum or set
|
/** Finish editing of enum or set
|
||||||
@@ -531,7 +536,7 @@ function dumpClick(event) {
|
|||||||
var el = parentTag(getTarget(event), 'label');
|
var el = parentTag(getTarget(event), 'label');
|
||||||
if (el) {
|
if (el) {
|
||||||
el = qs('input', el);
|
el = qs('input', el);
|
||||||
var match = /(.+)\[\]$/.exec(el.name);
|
var match = /(.+)\[]$/.exec(el.name);
|
||||||
if (match) {
|
if (match) {
|
||||||
checkboxClick.call(el, event);
|
checkboxClick.call(el, event);
|
||||||
formUncheck('check-' + match[1]);
|
formUncheck('check-' + match[1]);
|
||||||
@@ -549,7 +554,7 @@ function foreignAddRow() {
|
|||||||
this.onchange = function () { };
|
this.onchange = function () { };
|
||||||
var selects = qsa('select', row);
|
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(this, 'table').appendChild(row);
|
parentTag(this, 'table').appendChild(row);
|
||||||
@@ -585,7 +590,7 @@ function indexesChangeColumn(prefix) {
|
|||||||
for (var tag in { 'select': 1, 'input': 1 }) {
|
for (var tag in { 'select': 1, 'input': 1 }) {
|
||||||
var columns = qsa(tag, parentTag(this, 'td'));
|
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]);
|
||||||
if (value) {
|
if (value) {
|
||||||
names.push(value);
|
names.push(value);
|
||||||
@@ -593,7 +598,7 @@ function indexesChangeColumn(prefix) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.form[this.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
|
||||||
@@ -602,9 +607,9 @@ function indexesChangeColumn(prefix) {
|
|||||||
*/
|
*/
|
||||||
function indexesAddColumn(prefix) {
|
function indexesAddColumn(prefix) {
|
||||||
var field = this;
|
var field = this;
|
||||||
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) {
|
||||||
select.selectedIndex++;
|
select.selectedIndex++;
|
||||||
}
|
}
|
||||||
select.onchange();
|
select.onchange();
|
||||||
@@ -613,15 +618,15 @@ function indexesAddColumn(prefix) {
|
|||||||
var selects = qsa('select', column);
|
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;
|
||||||
}
|
}
|
||||||
field.onchange = partial(indexesChangeColumn, prefix);
|
field.onchange = partial(indexesChangeColumn, prefix);
|
||||||
var inputs = qsa('input', column);
|
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');
|
||||||
if (input.type != 'checkbox') {
|
if (input.type !== 'checkbox') {
|
||||||
input.value = '';
|
input.value = '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -658,7 +663,7 @@ function triggerChange(tableRe, table, form) {
|
|||||||
if (tableRe.test(form['Trigger'].value)) {
|
if (tableRe.test(form['Trigger'].value)) {
|
||||||
form['Trigger'].value = table + '_' + (selectValue(form['Timing']).charAt(0) + formEvent.charAt(0)).toLowerCase();
|
form['Trigger'].value = table + '_' + (selectValue(form['Timing']).charAt(0) + formEvent.charAt(0)).toLowerCase();
|
||||||
}
|
}
|
||||||
alterClass(form['Of'], 'hidden', formEvent != 'UPDATE OF');
|
alterClass(form['Of'], 'hidden', !/ OF/.test(formEvent));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -670,7 +675,7 @@ var that, x, y; // em and tablePos defined in schema.inc.php
|
|||||||
* @this HTMLElement
|
* @this HTMLElement
|
||||||
*/
|
*/
|
||||||
function schemaMousedown(event) {
|
function schemaMousedown(event) {
|
||||||
if ((event.which ? event.which : event.button) == 1) {
|
if ((event.which ? event.which : event.button) === 1) {
|
||||||
that = this;
|
that = this;
|
||||||
x = event.clientX - this.offsetLeft;
|
x = event.clientX - this.offsetLeft;
|
||||||
y = event.clientY - this.offsetTop;
|
y = event.clientY - this.offsetTop;
|
||||||
@@ -687,12 +692,12 @@ function schemaMousemove(event) {
|
|||||||
var divs = qsa('div', that);
|
var divs = qsa('div', that);
|
||||||
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 = qs('[id="' + (/^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].querySelector('div').style.width = -left1 + 'em';
|
divs[i].querySelector('div').style.width = -left1 + 'em';
|
||||||
@@ -704,7 +709,7 @@ function schemaMousemove(event) {
|
|||||||
var line = qs('[id="' + 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.querySelector('div').style.height = Math.abs(top1 - top2) + 'em';
|
line.querySelector('div').style.height = Math.abs(top1 - top2) + 'em';
|
||||||
}
|
}
|
||||||
@@ -752,7 +757,7 @@ function helpMouseover(event, text, side) {
|
|||||||
var target = getTarget(event);
|
var target = getTarget(event);
|
||||||
if (!text) {
|
if (!text) {
|
||||||
helpClose();
|
helpClose();
|
||||||
} else if (window.jush && (!helpIgnore || this != target)) {
|
} else if (window.jush && (!helpIgnore || this !== target)) {
|
||||||
helpOpen = 1;
|
helpOpen = 1;
|
||||||
var help = qs('#help');
|
var help = qs('#help');
|
||||||
help.innerHTML = text;
|
help.innerHTML = text;
|
||||||
@@ -771,7 +776,7 @@ function helpMouseover(event, text, side) {
|
|||||||
*/
|
*/
|
||||||
function helpMouseout(event) {
|
function helpMouseout(event) {
|
||||||
helpOpen = 0;
|
helpOpen = 0;
|
||||||
helpIgnore = (this != getTarget(event));
|
helpIgnore = (this !== getTarget(event));
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
if (!helpOpen) {
|
if (!helpOpen) {
|
||||||
helpClose();
|
helpClose();
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
* @param [HTMLElement] defaults to document
|
* @param [HTMLElement] defaults to document
|
||||||
* @return HTMLElement
|
* @return HTMLElement
|
||||||
*/
|
*/
|
||||||
function qs(selector, context) {
|
function qs(selector, context = null) {
|
||||||
return (context || document).querySelector(selector);
|
return (context || document).querySelector(selector);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13,7 +13,7 @@ function qs(selector, context) {
|
|||||||
* @param [HTMLElement] defaults to document
|
* @param [HTMLElement] defaults to document
|
||||||
* @return HTMLElement
|
* @return HTMLElement
|
||||||
*/
|
*/
|
||||||
function qsl(selector, context) {
|
function qsl(selector, context = null) {
|
||||||
var els = qsa(selector, context);
|
var els = qsa(selector, context);
|
||||||
return els[els.length - 1];
|
return els[els.length - 1];
|
||||||
}
|
}
|
||||||
@@ -23,7 +23,7 @@ function qsl(selector, context) {
|
|||||||
* @param [HTMLElement] defaults to document
|
* @param [HTMLElement] defaults to document
|
||||||
* @return NodeList
|
* @return NodeList
|
||||||
*/
|
*/
|
||||||
function qsa(selector, context) {
|
function qsa(selector, context = null) {
|
||||||
return (context || document).querySelectorAll(selector);
|
return (context || document).querySelectorAll(selector);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,7 +79,7 @@ function alterClass(el, className, enable) {
|
|||||||
*/
|
*/
|
||||||
function toggle(id) {
|
function toggle(id) {
|
||||||
var el = qs('#' + id);
|
var el = qs('#' + id);
|
||||||
el.className = (el.className == 'hidden' ? '' : 'hidden');
|
el.className = (el.className === 'hidden' ? '' : 'hidden');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,7 +111,7 @@ function verifyVersion(current, url, token) {
|
|||||||
if (window.postMessage && window.addEventListener) {
|
if (window.postMessage && window.addEventListener) {
|
||||||
iframe.style.display = 'none';
|
iframe.style.display = 'none';
|
||||||
addEventListener('message', function (event) {
|
addEventListener('message', function (event) {
|
||||||
if (event.origin == 'https://www.adminer.org') {
|
if (event.origin === 'https://www.adminer.org') {
|
||||||
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);
|
||||||
@@ -139,7 +139,7 @@ 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 boolean
|
||||||
*/
|
*/
|
||||||
function isTag(el, tag) {
|
function isTag(el, tag) {
|
||||||
var re = new RegExp('^(' + tag + ')$', 'i');
|
var re = new RegExp('^(' + tag + ')$', 'i');
|
||||||
@@ -181,8 +181,8 @@ function selectCount(id, count) {
|
|||||||
var inputs = qsa('input', el.parentNode.parentNode);
|
var inputs = qsa('input', el.parentNode.parentNode);
|
||||||
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') {
|
if (input.type === 'submit') {
|
||||||
input.disabled = (count == '0');
|
input.disabled = (count === '0');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -211,13 +211,21 @@ function tableCheck() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Uncheck single element
|
/**
|
||||||
* @param string
|
* Uncheck single element.
|
||||||
*/
|
*/
|
||||||
function formUncheck(id) {
|
function formUncheck(id) {
|
||||||
var el = qs('#' + id);
|
formUncheckAll("#" + id);
|
||||||
el.checked = false;
|
}
|
||||||
trCheck(el);
|
|
||||||
|
/**
|
||||||
|
* Uncheck elements matched by selector.
|
||||||
|
*/
|
||||||
|
function formUncheckAll(selector) {
|
||||||
|
for (const element of qsa(selector)) {
|
||||||
|
element.checked = false;
|
||||||
|
trCheck(element);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get number of checked elements matching given name
|
/** Get number of checked elements matching given name
|
||||||
@@ -252,7 +260,7 @@ function tableClick(event, click) {
|
|||||||
var el = getTarget(event);
|
var el = getTarget(event);
|
||||||
while (!isTag(el, 'tr')) {
|
while (!isTag(el, 'tr')) {
|
||||||
if (isTag(el, 'table|a|input|textarea')) {
|
if (isTag(el, 'table|a|input|textarea')) {
|
||||||
if (el.type != 'checkbox') {
|
if (el.type !== 'checkbox') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
checkboxClick.call(el, event);
|
checkboxClick.call(el, event);
|
||||||
@@ -268,7 +276,7 @@ function tableClick(event, click) {
|
|||||||
el.checked = !el.checked;
|
el.checked = !el.checked;
|
||||||
el.onclick && el.onclick();
|
el.onclick && el.onclick();
|
||||||
}
|
}
|
||||||
if (el.name == 'check[]') {
|
if (el.name === 'check[]') {
|
||||||
el.form['all'].checked = false;
|
el.form['all'].checked = false;
|
||||||
formUncheck('all-page');
|
formUncheck('all-page');
|
||||||
}
|
}
|
||||||
@@ -288,7 +296,7 @@ function checkboxClick(event) {
|
|||||||
if (!this.name) {
|
if (!this.name) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (event.shiftKey && (!lastChecked || lastChecked.name == this.name)) {
|
if (event.shiftKey && (!lastChecked || lastChecked.name === this.name)) {
|
||||||
var checked = (lastChecked ? lastChecked.checked : true);
|
var checked = (lastChecked ? lastChecked.checked : true);
|
||||||
var inputs = qsa('input', parentTag(this, 'table'));
|
var inputs = qsa('input', parentTag(this, 'table'));
|
||||||
var checking = !lastChecked;
|
var checking = !lastChecked;
|
||||||
@@ -333,7 +341,7 @@ function setHtml(id, html) {
|
|||||||
*/
|
*/
|
||||||
function nodePosition(el) {
|
function nodePosition(el) {
|
||||||
var pos = 0;
|
var pos = 0;
|
||||||
while (el = el.previousSibling) {
|
while ((el = el.previousSibling)) {
|
||||||
pos++;
|
pos++;
|
||||||
}
|
}
|
||||||
return pos;
|
return pos;
|
||||||
@@ -345,7 +353,7 @@ function nodePosition(el) {
|
|||||||
*/
|
*/
|
||||||
function pageClick(href, page) {
|
function pageClick(href, page) {
|
||||||
if (!isNaN(page) && page) {
|
if (!isNaN(page) && page) {
|
||||||
location.href = href + (page != 1 ? '&page=' + (page - 1) : '');
|
location.href = href + (page !== 1 ? '&page=' + (page - 1) : '');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -366,7 +374,7 @@ function menuOver(event) {
|
|||||||
* @this HTMLElement
|
* @this HTMLElement
|
||||||
*/
|
*/
|
||||||
function menuOut() {
|
function menuOut() {
|
||||||
this.style.overflow = 'auto';
|
this.style.overflow = 'hidden';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -388,7 +396,7 @@ function selectAddRow() {
|
|||||||
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 = '';
|
||||||
if (inputs[i].type == 'checkbox') {
|
if (inputs[i].type === 'checkbox') {
|
||||||
inputs[i].checked = false;
|
inputs[i].checked = false;
|
||||||
} else {
|
} else {
|
||||||
inputs[i].value = '';
|
inputs[i].value = '';
|
||||||
@@ -402,7 +410,7 @@ function selectAddRow() {
|
|||||||
* @this HTMLInputElement
|
* @this HTMLInputElement
|
||||||
*/
|
*/
|
||||||
function selectSearchKeydown(event) {
|
function selectSearchKeydown(event) {
|
||||||
if (event.keyCode == 13 || event.keyCode == 10) {
|
if (event.keyCode === 13 || event.keyCode === 10) {
|
||||||
this.onsearch = function () {
|
this.onsearch = function () {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -445,11 +453,11 @@ function selectSearch(name) {
|
|||||||
for (var i=0; i < divs.length; i++) {
|
for (var i=0; i < divs.length; i++) {
|
||||||
var div = divs[i];
|
var div = divs[i];
|
||||||
var el = qs('[name$="[col]"]', div);
|
var el = qs('[name$="[col]"]', div);
|
||||||
if (el && selectValue(el) == name) {
|
if (el && selectValue(el) === name) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (i == divs.length) {
|
if (i === divs.length) {
|
||||||
div.firstChild.value = name;
|
div.firstChild.value = name;
|
||||||
div.firstChild.onchange();
|
div.firstChild.onchange();
|
||||||
}
|
}
|
||||||
@@ -487,7 +495,7 @@ function bodyKeydown(event, button) {
|
|||||||
if (target.jushTextarea) {
|
if (target.jushTextarea) {
|
||||||
target = target.jushTextarea;
|
target = target.jushTextarea;
|
||||||
}
|
}
|
||||||
if (isCtrl(event) && (event.keyCode == 13 || event.keyCode == 10) && isTag(target, 'select|textarea|input')) { // 13|10 - Enter
|
if (isCtrl(event) && (event.keyCode === 13 || event.keyCode === 10) && isTag(target, 'select|textarea|input')) { // 13|10 - Enter
|
||||||
target.blur();
|
target.blur();
|
||||||
if (button) {
|
if (button) {
|
||||||
target.form[button].click();
|
target.form[button].click();
|
||||||
@@ -508,7 +516,7 @@ function bodyKeydown(event, button) {
|
|||||||
*/
|
*/
|
||||||
function bodyClick(event) {
|
function bodyClick(event) {
|
||||||
var target = getTarget(event);
|
var target = getTarget(event);
|
||||||
if ((isCtrl(event) || event.shiftKey) && target.type == 'submit' && isTag(target, 'input')) {
|
if ((isCtrl(event) || event.shiftKey) && target.type === 'submit' && isTag(target, 'input')) {
|
||||||
target.form.target = '_blank';
|
target.form.target = '_blank';
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
// if (isCtrl(event)) { focus(); } doesn't work
|
// if (isCtrl(event)) { focus(); } doesn't work
|
||||||
@@ -524,9 +532,9 @@ function bodyClick(event) {
|
|||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
function editingKeydown(event) {
|
function editingKeydown(event) {
|
||||||
if ((event.keyCode == 40 || event.keyCode == 38) && isCtrl(event)) { // 40 - Down, 38 - Up
|
if ((event.keyCode === 40 || event.keyCode === 38) && isCtrl(event)) { // 40 - Down, 38 - Up
|
||||||
var target = getTarget(event);
|
var target = getTarget(event);
|
||||||
var sibling = (event.keyCode == 40 ? 'nextSibling' : 'previousSibling');
|
var sibling = (event.keyCode === 40 ? 'nextSibling' : 'previousSibling');
|
||||||
var el = target.parentNode.parentNode[sibling];
|
var el = target.parentNode.parentNode[sibling];
|
||||||
if (el && (isTag(el, 'tr') || (el = el[sibling])) && isTag(el, 'tr') && (el = el.childNodes[nodePosition(target.parentNode)]) && (el = el.childNodes[nodePosition(target)])) {
|
if (el && (isTag(el, 'tr') || (el = el[sibling])) && isTag(el, 'tr') && (el = el.childNodes[nodePosition(target.parentNode)]) && (el = el.childNodes[nodePosition(target)])) {
|
||||||
el.focus();
|
el.focus();
|
||||||
@@ -614,7 +622,7 @@ function ajax(url, callback, data, message) {
|
|||||||
}
|
}
|
||||||
request.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
|
request.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
|
||||||
request.onreadystatechange = function () {
|
request.onreadystatechange = function () {
|
||||||
if (request.readyState == 4) {
|
if (request.readyState === 4) {
|
||||||
if (/^2/.test(request.status)) {
|
if (/^2/.test(request.status)) {
|
||||||
callback(request);
|
callback(request);
|
||||||
} else {
|
} else {
|
||||||
@@ -656,7 +664,7 @@ function ajaxForm(form, message, button) {
|
|||||||
if (/^file$/i.test(el.type) && el.value) {
|
if (/^file$/i.test(el.type) && el.value) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!/^(checkbox|radio|submit|file)$/i.test(el.type) || el.checked || el == button) {
|
if (!/^(checkbox|radio|submit|file)$/i.test(el.type) || el.checked || el === button) {
|
||||||
data.push(encodeURIComponent(el.name) + '=' + encodeURIComponent(isTag(el, 'select') ? selectValue(el) : el.value));
|
data.push(encodeURIComponent(el.name) + '=' + encodeURIComponent(isTag(el, 'select') ? selectValue(el) : el.value));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -703,14 +711,18 @@ function selectClick(event, text, warning) {
|
|||||||
if (!event) {
|
if (!event) {
|
||||||
event = window.event;
|
event = window.event;
|
||||||
}
|
}
|
||||||
if (event.keyCode == 27 && !event.shiftKey && !event.altKey && !isCtrl(event)) { // 27 - Esc
|
if (event.keyCode === 27 && !event.shiftKey && !event.altKey && !isCtrl(event)) { // 27 - Esc
|
||||||
inputBlur.apply(input);
|
inputBlur.apply(input);
|
||||||
td.innerHTML = original;
|
td.innerHTML = original;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
var pos = event.rangeOffset;
|
|
||||||
var value = (td.firstChild && td.firstChild.alt) || td.textContent || td.innerText;
|
let pos = event.rangeOffset;
|
||||||
input.style.width = Math.max(td.clientWidth - 14, 20) + 'px'; // 14 = 2 * (td.border + td.padding + input.border)
|
let value = (td.firstChild && td.firstChild.alt) || td.textContent || td.innerText;
|
||||||
|
const tdStyle = window.getComputedStyle(td, null);
|
||||||
|
|
||||||
|
input.style.width = Math.max(td.clientWidth - parseFloat(tdStyle.paddingLeft) - parseFloat(tdStyle.paddingRight), 20) + 'px';
|
||||||
|
|
||||||
if (text) {
|
if (text) {
|
||||||
var rows = 1;
|
var rows = 1;
|
||||||
value.replace(/\n/g, function () {
|
value.replace(/\n/g, function () {
|
||||||
@@ -733,7 +745,7 @@ function selectClick(event, text, warning) {
|
|||||||
td.appendChild(input);
|
td.appendChild(input);
|
||||||
setupSubmitHighlight(td);
|
setupSubmitHighlight(td);
|
||||||
input.focus();
|
input.focus();
|
||||||
if (text == 2) { // long text
|
if (text === 2) { // long text
|
||||||
return ajax(location.href + '&' + encodeURIComponent(td.id) + '=', function (request) {
|
return ajax(location.href + '&' + encodeURIComponent(td.id) + '=', function (request) {
|
||||||
if (request.responseText) {
|
if (request.responseText) {
|
||||||
input.value = request.responseText;
|
input.value = request.responseText;
|
||||||
@@ -855,7 +867,7 @@ function findDefaultSubmit(el) {
|
|||||||
var inputs = qsa('input', el.form);
|
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) {
|
||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -7,9 +7,19 @@ if (!$fields) {
|
|||||||
$table_status = table_status1($TABLE, true);
|
$table_status = table_status1($TABLE, true);
|
||||||
$name = $adminer->tableName($table_status);
|
$name = $adminer->tableName($table_status);
|
||||||
|
|
||||||
|
$rights = [];
|
||||||
|
foreach ($fields as $key => $field) {
|
||||||
|
$rights += $field["privileges"];
|
||||||
|
}
|
||||||
|
|
||||||
page_header(($fields && is_view($table_status) ? $table_status['Engine'] == 'materialized view' ? lang('Materialized view') : lang('View') : lang('Table')) . ": " . ($name != "" ? $name : 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);
|
$set = null;
|
||||||
|
if (isset($rights["insert"]) || !support("table")) {
|
||||||
|
$set = "";
|
||||||
|
}
|
||||||
|
$adminer->selectLinks($table_status, $set);
|
||||||
|
|
||||||
$comment = $table_status["Comment"];
|
$comment = $table_status["Comment"];
|
||||||
if ($comment != "") {
|
if ($comment != "") {
|
||||||
echo "<p class='nowrap'>" . lang('Comment') . ": " . h($comment) . "\n";
|
echo "<p class='nowrap'>" . lang('Comment') . ": " . h($comment) . "\n";
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
$TABLE = $_GET["trigger"];
|
$TABLE = $_GET["trigger"];
|
||||||
$name = $_GET["name"];
|
$name = $_GET["name"];
|
||||||
$trigger_options = trigger_options();
|
$trigger_options = trigger_options();
|
||||||
$row = (array) trigger($name) + array("Trigger" => $TABLE . "_bi");
|
$row = (array) trigger($name, $TABLE) + array("Trigger" => $TABLE . "_bi");
|
||||||
|
|
||||||
if ($_POST) {
|
if ($_POST) {
|
||||||
if (!$error && in_array($_POST["Timing"], $trigger_options["Timing"]) && in_array($_POST["Event"], $trigger_options["Event"]) && in_array($_POST["Type"], $trigger_options["Type"])) {
|
if (!$error && in_array($_POST["Timing"], $trigger_options["Timing"]) && in_array($_POST["Event"], $trigger_options["Event"]) && in_array($_POST["Type"], $trigger_options["Type"])) {
|
||||||
|
@@ -85,8 +85,8 @@ if ($_POST && !$error) {
|
|||||||
unset($grants[$object]);
|
unset($grants[$object]);
|
||||||
}
|
}
|
||||||
if (preg_match('~^(.+)\s*(\(.*\))?$~U', $object, $match) && (
|
if (preg_match('~^(.+)\s*(\(.*\))?$~U', $object, $match) && (
|
||||||
!grant("REVOKE", $revoke, $match[2], " ON $match[1] FROM $new_user") //! SQL injection
|
!grant(false, $revoke, $match[2], $match[1], $new_user) //! SQL injection
|
||||||
|| !grant("GRANT", $grant, $match[2], " ON $match[1] TO $new_user")
|
|| !grant(true, $grant, $match[2], $match[1], $new_user)
|
||||||
)) {
|
)) {
|
||||||
$error = true;
|
$error = true;
|
||||||
break;
|
break;
|
||||||
@@ -100,7 +100,7 @@ if ($_POST && !$error) {
|
|||||||
} elseif (!isset($_GET["grant"])) {
|
} elseif (!isset($_GET["grant"])) {
|
||||||
foreach ($grants as $object => $revoke) {
|
foreach ($grants as $object => $revoke) {
|
||||||
if (preg_match('~^(.+)(\(.*\))?$~U', $object, $match)) {
|
if (preg_match('~^(.+)(\(.*\))?$~U', $object, $match)) {
|
||||||
grant("REVOKE", array_keys($revoke), $match[2], " ON $match[1] FROM $new_user");
|
grant(false, array_keys($revoke), $match[2], $match[1], $new_user);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -126,7 +126,14 @@ if ($_POST) {
|
|||||||
if ($old_pass != "") {
|
if ($old_pass != "") {
|
||||||
$row["hashed"] = true;
|
$row["hashed"] = true;
|
||||||
}
|
}
|
||||||
$grants[(DB == "" || $grants ? "" : idf_escape(addcslashes(DB, "%_\\"))) . ".*"] = array();
|
|
||||||
|
if ($grants) {
|
||||||
|
$grants[".*"] = [];
|
||||||
|
} elseif (DB != "") {
|
||||||
|
$grants[idf_escape(addcslashes(DB, "%_\\")) . ".*"] = [];
|
||||||
|
} else {
|
||||||
|
$grants["*.* "] = []; // Space is added to force editing mode.
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
@@ -142,41 +149,79 @@ if ($_POST) {
|
|||||||
<?php
|
<?php
|
||||||
//! MAX_* limits, REQUIRE
|
//! MAX_* limits, REQUIRE
|
||||||
echo "<table cellspacing='0'>\n";
|
echo "<table cellspacing='0'>\n";
|
||||||
echo "<thead><tr><th colspan='2'>" . lang('Privileges') . doc_link(array('sql' => "grant.html#priv_level"));
|
|
||||||
|
echo "<thead><tr><th colspan='2'>" . lang('Privileges') . doc_link(array('sql' => "grant.html#priv_level")) . "</th>";
|
||||||
$i = 0;
|
$i = 0;
|
||||||
foreach ($grants as $object => $grant) {
|
foreach ($grants as $object => $grant) {
|
||||||
echo '<th>' . ($object != "*.*" ? "<input name='objects[$i]' value='" . h($object) . "' size='10' autocapitalize='off'>" : "<input type='hidden' name='objects[$i]' value='*.*' size='10'>*.*"); //! separate db, table, columns, PROCEDURE|FUNCTION, routine
|
echo "<th>";
|
||||||
|
//! separate db, table, columns, PROCEDURE|FUNCTION, routine
|
||||||
|
if ($object == "*.*") {
|
||||||
|
echo "<input type='hidden' name='objects[$i]' value='*.*' size='10'>*.*";
|
||||||
|
} else {
|
||||||
|
echo "<input name='objects[$i]' value='" . h(trim($object)) . "' size='10' autocapitalize='off'>";
|
||||||
|
}
|
||||||
|
echo "</th>";
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
echo "</thead>\n";
|
echo "</tr></thead>\n";
|
||||||
|
|
||||||
foreach (array(
|
foreach ([
|
||||||
"" => "",
|
"" => "",
|
||||||
"Server Admin" => lang('Server'),
|
"Server Admin" => lang('Server'),
|
||||||
"Databases" => lang('Database'),
|
"Databases" => lang('Database'),
|
||||||
"Tables" => lang('Table'),
|
"Tables" => lang('Table'),
|
||||||
"Columns" => lang('Column'),
|
"Columns" => lang('Column'),
|
||||||
"Procedures" => lang('Routine'),
|
"Procedures" => lang('Routine'),
|
||||||
) as $context => $desc) {
|
] as $context => $desc) {
|
||||||
foreach ((array) $privileges[$context] as $privilege => $comment) {
|
foreach ((array) $privileges[$context] as $privilege => $comment) {
|
||||||
echo "<tr" . odd() . "><td" . ($desc ? ">$desc<td" : " colspan='2'") . ' lang="en" title="' . h($comment) . '">' . h($privilege);
|
echo "<tr" . odd() . ">";
|
||||||
|
if ($desc) {
|
||||||
|
echo "<td>$desc</td>";
|
||||||
|
}
|
||||||
|
echo "<td" . (!$desc ? " colspan='2'" : "") . ' lang="en" title="' . h($comment) . '">' . h($privilege) . "</td>";
|
||||||
|
|
||||||
$i = 0;
|
$i = 0;
|
||||||
|
|
||||||
foreach ($grants as $object => $grant) {
|
foreach ($grants as $object => $grant) {
|
||||||
$name = "'grants[$i][" . h(strtoupper($privilege)) . "]'";
|
$name = "'grants[$i][" . h(strtoupper($privilege)) . "]'";
|
||||||
$value = $grant[strtoupper($privilege)];
|
$value = $grant[strtoupper($privilege)];
|
||||||
if ($context == "Server Admin" && $object != (isset($grants["*.*"]) ? "*.*" : ".*")) {
|
|
||||||
echo "<td>";
|
$proxiedUser = strpos($object, "@") !== false;
|
||||||
|
$newObject = $object == ".*";
|
||||||
|
$allPrivileges = $privilege == "All privileges";
|
||||||
|
$grantOption = $privilege == "Grant option";
|
||||||
|
|
||||||
|
if ($object == "*.*" && $privilege == "Proxy") {
|
||||||
|
echo "<td></td>";
|
||||||
|
} elseif ($proxiedUser && $privilege != "Proxy" && !$grantOption) {
|
||||||
|
echo "<td></td>";
|
||||||
|
} elseif ($context == "Server Admin" && $object != (isset($grants["*.*"]) ? "*.*" : ".*") && !(($proxiedUser || $newObject) && $privilege == "Proxy")) {
|
||||||
|
echo "<td></td>";
|
||||||
} elseif (isset($_GET["grant"])) {
|
} elseif (isset($_GET["grant"])) {
|
||||||
echo "<td><select name=$name><option><option value='1'" . ($value ? " selected" : "") . ">" . lang('Grant') . "<option value='0'" . ($value == "0" ? " selected" : "") . ">" . lang('Revoke') . "</select>";
|
echo "<td><select name=$name>" .
|
||||||
|
"<option></option>" .
|
||||||
|
"<option value='1'" . ($value ? " selected" : "") . ">" . lang('Grant') . "</option>" .
|
||||||
|
"<option value='0'" . ($value == "0" ? " selected" : "") . ">" . lang('Revoke') . "</option>" .
|
||||||
|
"</select></td>";
|
||||||
} else {
|
} else {
|
||||||
echo "<td align='center'><label class='block'>";
|
echo "<td class='center'><label class='block'>";
|
||||||
echo "<input type='checkbox' name=$name value='1'" . ($value ? " checked" : "") . ($privilege == "All privileges"
|
echo "<input type='checkbox' name=$name value='1'" .
|
||||||
? " id='grants-$i-all'>" //! uncheck all except grant if all is checked
|
($value ? " checked" : "") .
|
||||||
: ">" . ($privilege == "Grant option" ? "" : script("qsl('input').onclick = function () { if (this.checked) formUncheck('grants-$i-all'); };")));
|
($allPrivileges ? " id='grants-$i-all'" : (!$grantOption ? " class='grants-$i'" : "")) .
|
||||||
|
">";
|
||||||
|
|
||||||
|
if ($allPrivileges) {
|
||||||
|
echo script("qsl('input').onclick = function () { if (this.checked) formUncheckAll('.grants-$i'); };");
|
||||||
|
} elseif (!$grantOption) {
|
||||||
|
echo script("qsl('input').onclick = function () { if (this.checked) formUncheck('grants-$i-all'); };");
|
||||||
|
}
|
||||||
echo "</label>";
|
echo "</label>";
|
||||||
}
|
}
|
||||||
|
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
echo "</tr>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
24
bin/export.sh
Normal file
24
bin/export.sh
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Root directory.
|
||||||
|
BASEDIR=$( cd `dirname $0`/.. ; pwd )
|
||||||
|
cd "$BASEDIR"
|
||||||
|
|
||||||
|
php compile.php
|
||||||
|
php compile.php en
|
||||||
|
php compile.php de
|
||||||
|
php compile.php cs
|
||||||
|
php compile.php sk
|
||||||
|
|
||||||
|
php compile.php mysql
|
||||||
|
php compile.php mysql en
|
||||||
|
php compile.php mysql de
|
||||||
|
php compile.php mysql cs
|
||||||
|
php compile.php mysql sk
|
||||||
|
|
||||||
|
php compile.php editor
|
||||||
|
php compile.php editor en
|
||||||
|
php compile.php editor mysql
|
||||||
|
php compile.php editor mysql en
|
92
changes.txt
92
changes.txt
@@ -1,3 +1,91 @@
|
|||||||
|
Adminer 4.9.4 (released 2024-10-09):
|
||||||
|
- Fix the width of inline edit field.
|
||||||
|
- Unify displaying of 'New item' action based on privileges.
|
||||||
|
- Better default value for object definition (*.*) while creating new database user.
|
||||||
|
- Firefox: Fix opening a database to the new browser's tab with Ctrl+click.
|
||||||
|
- Remove suppressing errors while reading local files.
|
||||||
|
- More secure random strings on PHP 7+.
|
||||||
|
- Editor: Fix array conversion to string (issue #3).
|
||||||
|
- Editor: Fix building links with array parameters.
|
||||||
|
- Clean up the code for PHP < 5.6.
|
||||||
|
|
||||||
|
Adminer 4.9.3 (released 2024-10-02):
|
||||||
|
- MySQL, PostgreSQL: Fix queries splitting and string constants.
|
||||||
|
- MySQL: Fix where clause for JSON column.
|
||||||
|
- MySQL: Fix editing user's proxy privilege, refactoring.
|
||||||
|
- MariaDB: Fix comparing CURRENT_TIMESTAMP definition while altering a table.
|
||||||
|
- PostgreSQL: Fix editing record that contains a field with GENERATED ALWAYS default value.
|
||||||
|
- Fix using undefined Min_DB::info property.
|
||||||
|
- Do not include unchanged PARTITION BY definition into ALTER TABLE query.
|
||||||
|
- Do not limit unlimited memory while executing queries.
|
||||||
|
- Fix number conversion warning while reading INI settings.
|
||||||
|
- Hide invalid edit form if table record is not found.
|
||||||
|
- CSS: Fix background color of <pre> used as edit field.
|
||||||
|
- CSS: Bigger font size for code blocks.
|
||||||
|
|
||||||
|
Adminer 4.9.2 (released 2024-09-18):
|
||||||
|
- Fix textarea height for single-line inputs (used typically for SQLite text field).
|
||||||
|
- Fix undefined property in error message if driver does not support error number (e.g. PostgreSQL).
|
||||||
|
- PostgreSQL: Fix search fields configuration (regression from 4.9).
|
||||||
|
- PostgreSQL: Fix search condition for network address types, add macaddr8 type.
|
||||||
|
- PostgreSQL: Fix exporting CREATE TABLE query with GENERATED default values.
|
||||||
|
- PostgreSQL: Fix exporting CREATE TABLE query with sequence default value.
|
||||||
|
- PostgreSQL: Allow to set connection's sslmode with AdminerLoginSsl plugin.
|
||||||
|
- MySQL: Do not show 'empty' enum value in strict mode.
|
||||||
|
- Editor: Fix searching in tables.
|
||||||
|
- Function to retrieve driver name that can be used in plugins.
|
||||||
|
|
||||||
|
Adminer 4.9.1 (released 2024-09-09):
|
||||||
|
- Compatibility with PHP 8.3.
|
||||||
|
- Fix compiling jush external files.
|
||||||
|
- Improved displaying of long table names in menu.
|
||||||
|
- Replace deprecated <acronym> with <abbr>.
|
||||||
|
- Add support for translations in plugins.
|
||||||
|
- Add .editorconfig file.
|
||||||
|
- MySQL: Add unix_timestamp to functions.
|
||||||
|
- PostgreSQL: Show only accessible databases.
|
||||||
|
- PostgreSQL: Make data length calculation more accurate.
|
||||||
|
- PostgreSQL: Fix documentation link for SERIAL type.
|
||||||
|
- PostgreSQL: Fix undefined properties on PHP 8.
|
||||||
|
- Elasticsearch: Fix field selection.
|
||||||
|
- AdminerEditForeign: Refactor and fix the plugin.
|
||||||
|
- AdminerLoginOtp: Autocomplete hints for OTP input field, code refactoring.
|
||||||
|
|
||||||
|
Adminer 4.9 (released 2024-08-19):
|
||||||
|
- Validate server input in login form.
|
||||||
|
- Validate connection to server in HTTP based drivers.
|
||||||
|
- Move dependencies from submodules to Composer.
|
||||||
|
- Update hydra and pepa-lintha-dark themes.
|
||||||
|
- Elasticsearch 5: Make unusable driver usable again, move it to plugins.
|
||||||
|
- Add new Elasticsearch 7 driver.
|
||||||
|
- Set saving to file as a default export option.
|
||||||
|
- Improve URL and email detection.
|
||||||
|
- Fix AdminerVersionNoverify plugin blocking other plugins to modify HTML head.
|
||||||
|
- Fix several bugs and security issues in AdminerFileUpload plugin.
|
||||||
|
- Skip dump of generated columns.
|
||||||
|
- Update composer.json.
|
||||||
|
- Add script for exporting compiled adminer variants.
|
||||||
|
|
||||||
|
Adminer 4.8.2 (released 2024-03-16):
|
||||||
|
Support multi-line table comments
|
||||||
|
MySQL: Use ST_SRID() instead of SRID() for MySQL 8 (PR #418)
|
||||||
|
PostgreSQL: Don't reset table comments (regression from 4.2.0)
|
||||||
|
PostgreSQL PDO: Allow editing rows identified by boolean column (PR #380)
|
||||||
|
Update several translations: lv, bn, fr, it, nl, ru, cs, sk
|
||||||
|
Allow responsive styles on larger devices
|
||||||
|
|
||||||
|
Adminer 4.8.1 (released 2021-05-14):
|
||||||
|
Internet Explorer or PDO in Adminer 4.7.8-4.8.0: Fix XSS in doc_link (bug #797)
|
||||||
|
Fix more PHP 8 warnings (bug #781)
|
||||||
|
Avoid PHP warnings with PDO drivers (bug #786, regression from 4.7.8)
|
||||||
|
MySQL: Allow moving views to other DB and renaming DB with views (bug #783)
|
||||||
|
MariaDB: Do not treat sequences as views (PR #416)
|
||||||
|
PostgreSQL: Support UPDATE OF triggers (bug #789)
|
||||||
|
PostgreSQL: Support triggers with more events (OR)
|
||||||
|
PostgreSQL: Fix parsing of foreign keys with non-ASCII column names
|
||||||
|
PostgreSQL < 10 PDO: Avoid displaying GENERATED ALWAYS BY IDENTITY everywhere (bug #785, regression from 4.7.9)
|
||||||
|
SQLite: Fix displayed types (bug #784, regression from 4.8.0)
|
||||||
|
|
||||||
Adminer 4.8.0 (released 2021-02-10):
|
Adminer 4.8.0 (released 2021-02-10):
|
||||||
Support function default values in insert (bug #713)
|
Support function default values in insert (bug #713)
|
||||||
Allow SQL pseudo-function in insert
|
Allow SQL pseudo-function in insert
|
||||||
@@ -798,7 +886,7 @@ Use \n in SQL commands
|
|||||||
|
|
||||||
phpMinAdmin 1.10.1 (released 2009-05-07):
|
phpMinAdmin 1.10.1 (released 2009-05-07):
|
||||||
Highlight odd and hover rows
|
Highlight odd and hover rows
|
||||||
Partition editing comfort (bug #2783446)
|
Partition editing comfort (bug #12)
|
||||||
Allow full length in limited int
|
Allow full length in limited int
|
||||||
|
|
||||||
phpMinAdmin 1.10.0 (released 2009-04-28):
|
phpMinAdmin 1.10.0 (released 2009-04-28):
|
||||||
@@ -885,7 +973,7 @@ phpMinAdmin 1.4.0 (released 2007-08-15):
|
|||||||
Privileges
|
Privileges
|
||||||
New design
|
New design
|
||||||
Dutch translation
|
Dutch translation
|
||||||
Use NULL for auto_increment (bug #1768966)
|
Use NULL for auto_increment (bug #1)
|
||||||
Fix dropping procedure parameters
|
Fix dropping procedure parameters
|
||||||
|
|
||||||
phpMinAdmin 1.3.2 (released 2007-08-06):
|
phpMinAdmin 1.3.2 (released 2007-08-06):
|
||||||
|
21
compile.php
21
compile.php
@@ -5,9 +5,9 @@ function adminer_errors($errno, $errstr) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
error_reporting(6135); // errors and warnings
|
error_reporting(6135); // errors and warnings
|
||||||
set_error_handler('adminer_errors', 2); // 2 - E_WARNING
|
set_error_handler('adminer_errors', E_WARNING);
|
||||||
include dirname(__FILE__) . "/adminer/include/version.inc.php";
|
include dirname(__FILE__) . "/adminer/include/version.inc.php";
|
||||||
include dirname(__FILE__) . "/externals/JsShrink/jsShrink.php";
|
include dirname(__FILE__) . "/vendor/vrana/jsshrink/jsShrink.php";
|
||||||
|
|
||||||
function add_apo_slashes($s) {
|
function add_apo_slashes($s) {
|
||||||
return addcslashes($s, "\\'");
|
return addcslashes($s, "\\'");
|
||||||
@@ -418,7 +418,7 @@ if ($driver) {
|
|||||||
if (count($drivers) == 1) {
|
if (count($drivers) == 1) {
|
||||||
$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 = 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('(;\.\./vendor/vrana/jush/modules/jush-(?!textarea\.|txt\.|js\.|' . preg_quote($driver == "mysql" ? "sql" : $driver) . '\.)[^.]+.js)', '', $file);
|
||||||
$file = preg_replace_callback('~doc_link\(array\((.*)\)\)~sU', function ($match) use ($driver) {
|
$file = preg_replace_callback('~doc_link\(array\((.*)\)\)~sU', function ($match) use ($driver) {
|
||||||
list(, $links) = $match;
|
list(, $links) = $match;
|
||||||
$links = preg_replace("~'(?!(" . ($driver == "mysql" ? "sql|mariadb" : $driver) . ")')[^']*' => [^,]*,?~", '', $links);
|
$links = preg_replace("~'(?!(" . ($driver == "mysql" ? "sql|mariadb" : $driver) . ")')[^']*' => [^,]*,?~", '', $links);
|
||||||
@@ -427,8 +427,8 @@ if ($driver) {
|
|||||||
//! strip doc_link() definition
|
//! strip doc_link() definition
|
||||||
}
|
}
|
||||||
if ($project == "editor") {
|
if ($project == "editor") {
|
||||||
$file = preg_replace('~;.\.\/externals/jush/jush\.css~', '', $file);
|
$file = preg_replace('~;\.\./vendor/vrana/jush/jush\.css~', '', $file);
|
||||||
$file = preg_replace('~compile_file\(\'\.\./(externals/jush/modules/jush\.js|adminer/static/[^.]+\.gif)[^)]+\)~', "''", $file);
|
$file = preg_replace('~compile_file\(\'\.\./(vendor/vrana/jush/modules/jush\.js|adminer/static/[^.]+\.gif)[^)]+\)~', "''", $file);
|
||||||
}
|
}
|
||||||
$file = preg_replace_callback("~lang\\('((?:[^\\\\']+|\\\\.)*)'([,)])~s", 'lang_ids', $file);
|
$file = preg_replace_callback("~lang\\('((?:[^\\\\']+|\\\\.)*)'([,)])~s", 'lang_ids', $file);
|
||||||
$file = preg_replace_callback('~\b(include|require) "([^"]*\$LANG.inc.php)";~', 'put_file_lang', $file);
|
$file = preg_replace_callback('~\b(include|require) "([^"]*\$LANG.inc.php)";~', 'put_file_lang', $file);
|
||||||
@@ -440,17 +440,18 @@ if ($_SESSION["lang"]) {
|
|||||||
$file = str_replace('<?php echo $LANG; ?>', $_SESSION["lang"], $file);
|
$file = str_replace('<?php echo $LANG; ?>', $_SESSION["lang"], $file);
|
||||||
}
|
}
|
||||||
$file = str_replace('<?php echo script_src("static/editing.js"); ?>' . "\n", "", $file);
|
$file = str_replace('<?php echo script_src("static/editing.js"); ?>' . "\n", "", $file);
|
||||||
$file = preg_replace('~\s+echo script_src\("\.\./externals/jush/modules/jush-(textarea|txt|js|\$jush)\.js"\);~', '', $file);
|
$file = preg_replace('~\s+echo script_src\("\.\./vendor/vrana/jush/modules/jush-(textarea|txt|js|\$jush)\.js"\);~', '', $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="../vendor/vrana/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 = 'preg_replace("~\\\\\\\\?.*~", "", ME) . "?file=\1&version=' . $VERSION . '"';
|
$replace = 'preg_replace("~\\\\\\\\?.*~", "", ME) . "?file=\1&version=' . substr(md5(microtime()), 0, 8) . '"';
|
||||||
$file = preg_replace('~\.\./adminer/static/(default\.css|favicon\.ico)~', '<?php echo h(' . $replace . '); ?>', $file);
|
$file = preg_replace('~\.\./adminer/static/(default\.css|favicon\.ico)~', '<?php echo h(' . $replace . '); ?>', $file);
|
||||||
$file = preg_replace('~"\.\./adminer/static/(functions\.js)"~', $replace, $file);
|
$file = preg_replace('~"\.\./adminer/static/(functions\.js)"~', $replace, $file);
|
||||||
$file = preg_replace('~\.\./adminer/static/([^\'"]*)~', '" . h(' . $replace . ') . "', $file);
|
$file = preg_replace('~\.\./adminer/static/([^\'"]*)~', '" . h(' . $replace . ') . "', $file);
|
||||||
$file = preg_replace('~"\.\./externals/jush/modules/(jush\.js)"~', $replace, $file);
|
$file = preg_replace('~"\.\./vendor/vrana/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);
|
||||||
|
|
||||||
$filename = $project . (preg_match('~-dev$~', $VERSION) ? "" : "-$VERSION") . ($driver ? "-$driver" : "") . ($_SESSION["lang"] ? "-$_SESSION[lang]" : "") . ".php";
|
@mkdir("temp/export", 0777, true);
|
||||||
|
$filename = "temp/export/$project" . (preg_match('~-dev$~', $VERSION) ? "" : "-$VERSION") . ($driver ? "-$driver" : "") . ($_SESSION["lang"] ? "-$_SESSION[lang]" : "") . ".php";
|
||||||
file_put_contents($filename, $file);
|
file_put_contents($filename, $file);
|
||||||
echo "$filename created (" . strlen($file) . " B).\n";
|
echo "$filename created (" . strlen($file) . " B).\n";
|
||||||
|
@@ -25,7 +25,43 @@
|
|||||||
"Apache-2.0",
|
"Apache-2.0",
|
||||||
"GPL-2.0-only"
|
"GPL-2.0-only"
|
||||||
],
|
],
|
||||||
|
"require": {
|
||||||
|
"php": "5.6 - 8.3",
|
||||||
|
"ext-pdo": "*",
|
||||||
|
"ext-json": "*",
|
||||||
|
"vrana/jush": "@dev",
|
||||||
|
"vrana/jsshrink": "@dev"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext-zlib": "*",
|
||||||
|
"ext-suhosin": "*",
|
||||||
|
"ext-mysqli": "*",
|
||||||
|
"ext-mysql": "*",
|
||||||
|
"ext-pgsql": "*",
|
||||||
|
"ext-mongo": "*",
|
||||||
|
"ext-sqlsrv": "*",
|
||||||
|
"ext-mssql": "*",
|
||||||
|
"ext-oci8": "*",
|
||||||
|
"ext-interbase": "*",
|
||||||
|
"ext-pdo_pgsql": "*",
|
||||||
|
"ext-pdo_dblib": "*",
|
||||||
|
"ext-pdo_sqlite": "*",
|
||||||
|
"ext-pdo_oci": "*"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"ext-xdebug": "*"
|
||||||
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"compile": "php compile.php"
|
"compile": "php compile.php"
|
||||||
|
},
|
||||||
|
"repositories": [
|
||||||
|
{
|
||||||
|
"type": "vcs",
|
||||||
|
"url": "https://github.com/vrana/jush.git"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "vcs",
|
||||||
|
"url": "https://github.com/vrana/jsshrink.git"
|
||||||
}
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
@@ -393,7 +393,7 @@
|
|||||||
float: none;
|
float: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
#tables a[title] {
|
#tables .structure, #tables .view {
|
||||||
float: none;
|
float: none;
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
@@ -752,7 +752,7 @@ legend{
|
|||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#tables a[title] {
|
#tables .structure, #tables .view {
|
||||||
float: none;
|
float: none;
|
||||||
display: block;
|
display: block;
|
||||||
color: inherit;
|
color: inherit;
|
||||||
|
@@ -18,7 +18,7 @@ a[href$="&dump="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA
|
|||||||
a[href*="&import="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gEJFDQPlDJUDwAAAiNJREFUOMutk0tI1FEUh7//Y9TJghyc1KQ20lMthRAlgoKgVkWte6wid0EICUHUQjdBErRqHYmQghgU5KLQGB8FKVEMCi0G1JmRbPLJ/O89p8XYOAMZBB24HM5dfL/fOfdcB6Aj1j6kqm2qWv/o5NMk/xBOR6z9dVVpzbmQEyKxPMcBc5svbheHs91YK1hRjJWCY7FGsSKT3VcPtviquqaqVJVVY6xlZu0hYpRrpyJ/Vb7fN3sMwAG4965Hw+ElKrzdlPphPqTHaYw0EdiAQEwuW4MRg7GGzrYu7j6L8/hGg+MD7DNXmF7tpDpSg6MOYpWbzbe2VV/dMATGAuADTLt3UFEmU+OICCpK72hqW8CFExGymwAAnrya15X1QJ+PJFVVtW90QQvjRay4TmfW9XrPpOYdBFYQVXwP+mMpPM9lYCyF44K7KTI4kQJVQj4cqd1BNihowVpBAd9zuNQSZXAizcWWPXmH/WPJonp27ifGCEUOVMB34eXHNJ6Xy5C7+w3xHRDg6N4ylEKAEVSVkAfnm6MMTy1y9nhlXvHNpzSthyrYFfYBiCcylJf6WwAjOZrnOgxPLQLks+tAIDDydSkPrIuWYG2BA2NMbgYunGms5O3nRU43bDkYGEtzuTWar+OJDN5ma1szUKVh/07mv69TVxXm28JK/i/U15YQT2SKdkFEpeAV9P2D3pmmrJXywFgCY7FGCKxgrPnjMv1Y3hjif8QvwdlGGi2XXTgAAAAASUVORK5CYII=") no-repeat scroll 2px bottom; padding-left:22px;}
|
a[href*="&import="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gEJFDQPlDJUDwAAAiNJREFUOMutk0tI1FEUh7//Y9TJghyc1KQ20lMthRAlgoKgVkWte6wid0EICUHUQjdBErRqHYmQghgU5KLQGB8FKVEMCi0G1JmRbPLJ/O89p8XYOAMZBB24HM5dfL/fOfdcB6Aj1j6kqm2qWv/o5NMk/xBOR6z9dVVpzbmQEyKxPMcBc5svbheHs91YK1hRjJWCY7FGsSKT3VcPtviquqaqVJVVY6xlZu0hYpRrpyJ/Vb7fN3sMwAG4965Hw+ElKrzdlPphPqTHaYw0EdiAQEwuW4MRg7GGzrYu7j6L8/hGg+MD7DNXmF7tpDpSg6MOYpWbzbe2VV/dMATGAuADTLt3UFEmU+OICCpK72hqW8CFExGymwAAnrya15X1QJ+PJFVVtW90QQvjRay4TmfW9XrPpOYdBFYQVXwP+mMpPM9lYCyF44K7KTI4kQJVQj4cqd1BNihowVpBAd9zuNQSZXAizcWWPXmH/WPJonp27ifGCEUOVMB34eXHNJ6Xy5C7+w3xHRDg6N4ylEKAEVSVkAfnm6MMTy1y9nhlXvHNpzSthyrYFfYBiCcylJf6WwAjOZrnOgxPLQLks+tAIDDydSkPrIuWYG2BA2NMbgYunGms5O3nRU43bDkYGEtzuTWar+OJDN5ma1szUKVh/07mv69TVxXm28JK/i/U15YQT2SKdkFEpeAV9P2D3pmmrJXywFgCY7FGCKxgrPnjMv1Y3hjif8QvwdlGGi2XXTgAAAAASUVORK5CYII=") no-repeat scroll 2px bottom; padding-left:22px;}
|
||||||
a[href$="&import="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gEJFDMETKEbQAAAAjZJREFUOMuVkjFoU2EUhc//3gsvptFCIdRHh2CrQ1AcmsUYHTKJDkJrFUdx6uJkpuLspCI4xaJLNik4SMGlOKgEdekQ0EEwFhJqCw+a16RJ//+/x0Heo6XN4B0v537nHLgKAKqNxXckSyTPPyu//IP/GFVtLL6f9INrKZXC791f3UvDysPP3tryjcHt7yTPkRQRaZL8KSKvRGRtbm7OxgCPZJ8kJtOnYaw99ZUfl8UQ5XK5kMlkQBI7OzuzURTNbmxs3Nne3v60srJyd2FhoQ0AztPLtflOv/22tdtCVo3hwvhFUATZbBaO48B1XUxMTCCfz6NUKmF6evqKtfZxnMABgOdXl+c7vTZ87wQUFcRyZOepqSmIyPWkAgA8+HCfFMG3rS8QEVCIvb09pFIpkES/30cYhmi325iZmYGI4BDgReW1Wl1d3apUKrler4coitBqtUASxhh0u10Mh0N4ngeSRwEAQBIk4bou0uk0PM+D53nQWsMYA/JfLRGBtfYoQEQSx/hIKQVrbbJzHGd0ghgQHxhj4LourLXQWkNrDdd1E81IQCy21iaAOEFcU2t9PEBEEvcYeDBZrNvf38ehPwAAay3CMEQul4Pv+4f/XSkEQYBisYhOpzMywb1Go/GmUCiM5fN5+L4PpRRIIggCRFGEZrOJ9fX1TWPMzQR+0Kler58RkUcicstxnPFMJgNjDMIwxGAw2DTG1K21T5aWlraOBRycWq120hhz1hgjWusf1Wp1eJzuL3uxkTGLHB98AAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
|
a[href$="&import="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gEJFDMETKEbQAAAAjZJREFUOMuVkjFoU2EUhc//3gsvptFCIdRHh2CrQ1AcmsUYHTKJDkJrFUdx6uJkpuLspCI4xaJLNik4SMGlOKgEdekQ0EEwFhJqCw+a16RJ//+/x0Heo6XN4B0v537nHLgKAKqNxXckSyTPPyu//IP/GFVtLL6f9INrKZXC791f3UvDysPP3tryjcHt7yTPkRQRaZL8KSKvRGRtbm7OxgCPZJ8kJtOnYaw99ZUfl8UQ5XK5kMlkQBI7OzuzURTNbmxs3Nne3v60srJyd2FhoQ0AztPLtflOv/22tdtCVo3hwvhFUATZbBaO48B1XUxMTCCfz6NUKmF6evqKtfZxnMABgOdXl+c7vTZ87wQUFcRyZOepqSmIyPWkAgA8+HCfFMG3rS8QEVCIvb09pFIpkES/30cYhmi325iZmYGI4BDgReW1Wl1d3apUKrler4coitBqtUASxhh0u10Mh0N4ngeSRwEAQBIk4bou0uk0PM+D53nQWsMYA/JfLRGBtfYoQEQSx/hIKQVrbbJzHGd0ghgQHxhj4LourLXQWkNrDdd1E81IQCy21iaAOEFcU2t9PEBEEvcYeDBZrNvf38ehPwAAay3CMEQul4Pv+4f/XSkEQYBisYhOpzMywb1Go/GmUCiM5fN5+L4PpRRIIggCRFGEZrOJ9fX1TWPMzQR+0Kler58RkUcicstxnPFMJgNjDMIwxGAw2DTG1K21T5aWlraOBRycWq120hhz1hgjWusf1Wp1eJzuL3uxkTGLHB98AAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
|
||||||
|
|
||||||
@media all and (min-device-width: 881px) {
|
@media all and (min-width: 881px) {
|
||||||
#menu .links {height:22px; transition:.2s;}
|
#menu .links {height:22px; transition:.2s;}
|
||||||
#menu .links:hover {height:5em;}
|
#menu .links:hover {height:5em;}
|
||||||
#menu .links a {color:transparent; transition:.2s; display:block; margin-bottom:-1.25em;}
|
#menu .links a {color:transparent; transition:.2s; display:block; margin-bottom:-1.25em;}
|
||||||
|
Submodule designs/hydra updated: afcef61f66...f8aa49777e
@@ -708,7 +708,7 @@ input[type="file"]:disabled::-moz-file-upload-button {
|
|||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media all and (max-device-width: 880px) {
|
@media all and (max-width: 880px) {
|
||||||
body {
|
body {
|
||||||
padding-bottom: 2em;
|
padding-bottom: 2em;
|
||||||
}
|
}
|
||||||
|
@@ -819,7 +819,7 @@ legend{
|
|||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#tables a[title] {
|
#tables .structure, #tables .view {
|
||||||
float: none;
|
float: none;
|
||||||
display: block;
|
display: block;
|
||||||
color: #F1E5B3;
|
color: #F1E5B3;
|
||||||
|
@@ -374,7 +374,7 @@ thead td, thead th {
|
|||||||
padding: 7px 2px;
|
padding: 7px 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
thead td acronym, thead td sup, thead th acronym, thead th sup {
|
thead td abbr, thead td sup, thead th acronym, thead th sup {
|
||||||
color: #cdf
|
color: #cdf
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -368,7 +368,7 @@ td.nowrap {
|
|||||||
right: 0;
|
right: 0;
|
||||||
left: auto;
|
left: auto;
|
||||||
}
|
}
|
||||||
@media all and (max-device-width:880px) {
|
@media all and (max-width: 880px) {
|
||||||
.pages {
|
.pages {
|
||||||
left: auto;
|
left: auto;
|
||||||
}
|
}
|
||||||
|
@@ -136,7 +136,7 @@ thead th, thead td {
|
|||||||
color:#FFFFFF;
|
color:#FFFFFF;
|
||||||
padding-right:10px;
|
padding-right:10px;
|
||||||
}
|
}
|
||||||
thead th acronym, thead td acronym, thead th sup, thead td sup{
|
thead th abbr, thead td acronym, thead th sup, thead td sup{
|
||||||
color:#CCDDFF;
|
color:#CCDDFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Submodule designs/pepa-linha-dark updated: 81eb3c4870...0f4f3789af
@@ -1,7 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Theme by Pepa Linha [http://webdream.cz]
|
* Theme by Pepa Linha [http://webdream.cz]
|
||||||
* JUSH color syntax inspired by NetBeans
|
* JUSH color syntax inspired by NetBeans
|
||||||
* @version 0.2 (February 2014)
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
html,
|
html,
|
||||||
@@ -360,7 +359,7 @@ p code + a:visited:hover {
|
|||||||
float: none;
|
float: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
#tables a[title] {
|
#tables .structure, #tables .view {
|
||||||
float: none;
|
float: none;
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
@@ -16,8 +16,11 @@ class Adminer {
|
|||||||
function connectSsl() {
|
function connectSsl() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws \Random\RandomException
|
||||||
|
*/
|
||||||
function permanentLogin($create = false) {
|
function permanentLogin($create = false) {
|
||||||
return password_file($create);
|
return get_private_key($create);
|
||||||
}
|
}
|
||||||
|
|
||||||
function bruteForceKey() {
|
function bruteForceKey() {
|
||||||
@@ -202,7 +205,7 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
$return = (preg_match('~^(1|t|true|y|yes|on)$~i', $val) ? lang('yes') : lang('no'));
|
$return = (preg_match('~^(1|t|true|y|yes|on)$~i', $val) ? lang('yes') : lang('no'));
|
||||||
}
|
}
|
||||||
if ($link) {
|
if ($link) {
|
||||||
$return = "<a href='$link'" . (is_url($link) ? target_blank() : "") . ">$return</a>";
|
$return = "<a href='$link'" . (is_web_url($link) ? target_blank() : "") . ">$return</a>";
|
||||||
}
|
}
|
||||||
if (!$link && !like_bool($field) && preg_match(number_type(), $field["type"])) {
|
if (!$link && !like_bool($field) && preg_match(number_type(), $field["type"])) {
|
||||||
$return = "<div class='number'>$return</div>"; // Firefox doesn't support <colgroup>
|
$return = "<div class='number'>$return</div>"; // Firefox doesn't support <colgroup>
|
||||||
@@ -342,35 +345,44 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
|
|||||||
|
|
||||||
function selectSearchProcess($fields, $indexes) {
|
function selectSearchProcess($fields, $indexes) {
|
||||||
global $driver;
|
global $driver;
|
||||||
$return = array();
|
|
||||||
|
$return = [];
|
||||||
|
|
||||||
foreach ((array) $_GET["where"] as $key => $where) {
|
foreach ((array) $_GET["where"] as $key => $where) {
|
||||||
$col = $where["col"];
|
$col = $where["col"];
|
||||||
$op = $where["op"];
|
$op = $where["op"];
|
||||||
$val = $where["val"];
|
$val = $where["val"];
|
||||||
if (($key < 0 ? "" : $col) . $val != "") {
|
|
||||||
$conds = array();
|
if (($key >= 0 && $col != "") || $val != "") {
|
||||||
foreach (($col != "" ? array($col => $fields[$col]) : $fields) as $name => $field) {
|
$conds = [];
|
||||||
|
|
||||||
|
foreach (($col != "" ? [$col => $fields[$col]] : $fields) as $name => $field) {
|
||||||
if ($col != "" || is_numeric($val) || !preg_match(number_type(), $field["type"])) {
|
if ($col != "" || is_numeric($val) || !preg_match(number_type(), $field["type"])) {
|
||||||
$name = idf_escape($name);
|
$name = idf_escape($name);
|
||||||
|
|
||||||
if ($col != "" && $field["type"] == "enum") {
|
if ($col != "" && $field["type"] == "enum") {
|
||||||
$conds[] = (in_array(0, $val) ? "$name IS NULL OR " : "") . "$name IN (" . implode(", ", array_map('intval', $val)) . ")";
|
$conds[] = (in_array(0, $val) ? "$name IS NULL OR " : "") . "$name IN (" . implode(", ", array_map('intval', $val)) . ")";
|
||||||
} else {
|
} else {
|
||||||
$text_type = preg_match('~char|text|enum|set~', $field["type"]);
|
$text_type = preg_match('~char|text|enum|set~', $field["type"]);
|
||||||
$value = $this->processInput($field, (!$op && $text_type && preg_match('~^[^%]+$~', $val) ? "%$val%" : $val));
|
$value = $this->processInput($field, (!$op && $text_type && preg_match('~^[^%]+$~', $val) ? "%$val%" : $val));
|
||||||
$conds[] = $driver->convertSearch($name, $val, $field) . ($value == "NULL" ? " IS" . ($op == ">=" ? " NOT" : "") . " $value"
|
|
||||||
|
$conds[] = $driver->convertSearch($name, $where, $field) . ($value == "NULL" ? " IS" . ($op == ">=" ? " NOT" : "") . " $value"
|
||||||
: (in_array($op, $this->operators) || $op == "=" ? " $op $value"
|
: (in_array($op, $this->operators) || $op == "=" ? " $op $value"
|
||||||
: ($text_type ? " LIKE $value"
|
: ($text_type ? " LIKE $value"
|
||||||
: " IN (" . str_replace(",", "', '", $value) . ")"
|
: " IN (" . str_replace(",", "', '", $value) . ")"
|
||||||
)));
|
)));
|
||||||
|
|
||||||
if ($key < 0 && $val == "0") {
|
if ($key < 0 && $val == "0") {
|
||||||
$conds[] = "$name IS NULL";
|
$conds[] = "$name IS NULL";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$return[] = ($conds ? "(" . implode(" OR ", $conds) . ")" : "1 = 0");
|
$return[] = ($conds ? "(" . implode(" OR ", $conds) . ")" : "1 = 0");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -570,6 +582,7 @@ qsl('div').onclick = whisperClick;", "")
|
|||||||
}
|
}
|
||||||
|
|
||||||
function importServerPath() {
|
function importServerPath() {
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
function homepage() {
|
function homepage() {
|
||||||
@@ -580,8 +593,11 @@ qsl('div').onclick = whisperClick;", "")
|
|||||||
global $VERSION;
|
global $VERSION;
|
||||||
?>
|
?>
|
||||||
<h1>
|
<h1>
|
||||||
<?php echo $this->name(); ?> <span class="version"><?php echo $VERSION; ?></span>
|
<?php echo $this->name(); ?>
|
||||||
|
<?php if ($missing != "auth"): ?>
|
||||||
|
<span class="version"><?php echo $VERSION; ?></span>
|
||||||
<a href="https://www.adminer.org/editor/#download"<?php echo target_blank(); ?> id="version"><?php echo (version_compare($VERSION, $_COOKIE["adminer_version"]) < 0 ? h($_COOKIE["adminer_version"]) : ""); ?></a>
|
<a href="https://www.adminer.org/editor/#download"<?php echo target_blank(); ?> id="version"><?php echo (version_compare($VERSION, $_COOKIE["adminer_version"]) < 0 ? h($_COOKIE["adminer_version"]) : ""); ?></a>
|
||||||
|
<?php endif; ?>
|
||||||
</h1>
|
</h1>
|
||||||
<?php
|
<?php
|
||||||
if ($missing == "auth") {
|
if ($missing == "auth") {
|
||||||
|
@@ -17,7 +17,7 @@ function email_header($header) {
|
|||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function send_mail($email, $subject, $message, $from = "", $files = array()) {
|
function send_mail($email, $subject, $message, $from = "", $files = array()) {
|
||||||
$eol = (DIRECTORY_SEPARATOR == "/" ? "\n" : "\r\n"); // PHP_EOL available since PHP 5.0.2
|
$eol = "\r\n";
|
||||||
$message = str_replace("\n", $eol, wordwrap(str_replace("\r", "", "$message\n")));
|
$message = str_replace("\n", $eol, wordwrap(str_replace("\r", "", "$message\n")));
|
||||||
$boundary = uniqid("boundary");
|
$boundary = uniqid("boundary");
|
||||||
$attachments = "";
|
$attachments = "";
|
||||||
|
1
externals/JsShrink
vendored
1
externals/JsShrink
vendored
Submodule externals/JsShrink deleted from 17cbfacae6
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user