mirror of
https://github.com/vrana/adminer.git
synced 2025-09-03 11:22:35 +02:00
Compare commits
26 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
fd1691cb1d | ||
|
d5bf51b2a7 | ||
|
b7b4157bcb | ||
|
10b00e13b1 | ||
|
45caae1660 | ||
|
36e9a4d6e1 | ||
|
9b58ecf925 | ||
|
36ade4e197 | ||
|
6a5b0abbb4 | ||
|
33234fef19 | ||
|
4b6833ba65 | ||
|
d846eac97e | ||
|
0eab60c338 | ||
|
7f32e26759 | ||
|
327041874e | ||
|
37a3dd6c6b | ||
|
02f5cbdc4d | ||
|
deea21dd2d | ||
|
f00f7a0e19 | ||
|
48292b70e8 | ||
|
15900301ee | ||
|
0e6f1972e9 | ||
|
4e91550b14 | ||
|
333da64cdb | ||
|
a2ec51e948 | ||
|
d114535911 |
@@ -1,5 +1,7 @@
|
||||
language: php
|
||||
php:
|
||||
- '5.6'
|
||||
- '7.1'
|
||||
- 5.6
|
||||
- 7.1
|
||||
- 7.2
|
||||
- 7.3
|
||||
script: git diff --name-only $TRAVIS_COMMIT_RANGE | grep '\.php$' | xargs -n1 -P8 php -l | grep -v 'No syntax errors'; test $? -eq 1
|
||||
|
@@ -140,7 +140,7 @@ if ($adminer->homepage()) {
|
||||
echo "<p>" . lang('Move to other database') . ": ";
|
||||
echo ($databases ? html_select("target", $databases, $db) : '<input name="target" value="' . h($db) . '" autocapitalize="off">');
|
||||
echo " <input type='submit' name='move' value='" . lang('Move') . "'>";
|
||||
echo (support("copy") ? " <input type='submit' name='copy' value='" . lang('Copy') . "'>" : "");
|
||||
echo (support("copy") ? " <input type='submit' name='copy' value='" . lang('Copy') . "'> " . checkbox("overwrite", 1, $_POST["overwrite"], lang('overwrite')) : "");
|
||||
echo "\n";
|
||||
}
|
||||
echo "<input type='hidden' name='all' value=''>"; // used by trCheck()
|
||||
|
@@ -84,7 +84,7 @@ if (isset($_GET["elastic"])) {
|
||||
var $num_rows, $_rows;
|
||||
|
||||
function __construct($rows) {
|
||||
$this->num_rows = count($this->_rows);
|
||||
$this->num_rows = count($rows);
|
||||
$this->_rows = $rows;
|
||||
reset($this->_rows);
|
||||
}
|
||||
@@ -148,7 +148,7 @@ if (isset($_GET["elastic"])) {
|
||||
$start = microtime(true);
|
||||
$search = $this->_conn->query($query, $data);
|
||||
if ($print) {
|
||||
echo $adminer->selectQuery("$query: " . print_r($data, true), $start, !$search);
|
||||
echo $adminer->selectQuery("$query: " . json_encode($data), $start, !$search);
|
||||
}
|
||||
if (!$search) {
|
||||
return false;
|
||||
|
@@ -350,7 +350,7 @@ if (isset($_GET["mssql"])) {
|
||||
|
||||
function table_status($name = "") {
|
||||
$return = array();
|
||||
foreach (get_rows("SELECT name AS Name, type_desc AS Engine FROM sys.all_objects WHERE schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND type IN ('S', 'U', 'V') " . ($name != "" ? "AND name = " . q($name) : "ORDER BY name")) as $row) {
|
||||
foreach (get_rows("SELECT ao.name AS Name, ao.type_desc AS Engine, (SELECT value FROM fn_listextendedproperty(default, 'SCHEMA', schema_name(schema_id), 'TABLE', ao.name, null, null)) AS Comment FROM sys.all_objects AS ao WHERE schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND type IN ('S', 'U', 'V') " . ($name != "" ? "AND name = " . q($name) : "ORDER BY name")) as $row) {
|
||||
if ($name != "") {
|
||||
return $row;
|
||||
}
|
||||
@@ -368,6 +368,7 @@ if (isset($_GET["mssql"])) {
|
||||
}
|
||||
|
||||
function fields($table) {
|
||||
$comments = get_key_vals("SELECT objname, cast(value as varchar) FROM fn_listextendedproperty('MS_DESCRIPTION', 'schema', " . q(get_schema()) . ", 'table', " . q($table) . ", 'column', NULL)");
|
||||
$return = array();
|
||||
foreach (get_rows("SELECT c.max_length, c.precision, c.scale, c.name, c.is_nullable, c.is_identity, c.collation_name, t.name type, CAST(d.definition as text) [default]
|
||||
FROM sys.all_columns c
|
||||
@@ -389,6 +390,7 @@ WHERE o.schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND o.type IN ('S', 'U',
|
||||
"collation" => $row["collation_name"],
|
||||
"privileges" => array("insert" => 1, "select" => 1, "update" => 1),
|
||||
"primary" => $row["is_identity"], //! or indexes.is_primary_key
|
||||
"comment" => $comments[$row["name"]],
|
||||
);
|
||||
}
|
||||
return $return;
|
||||
@@ -456,6 +458,7 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
||||
|
||||
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
|
||||
$alter = array();
|
||||
$comments = array();
|
||||
foreach ($fields as $field) {
|
||||
$column = idf_escape($field[0]);
|
||||
$val = $field[1];
|
||||
@@ -463,6 +466,8 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
||||
$alter["DROP"][] = " COLUMN $column";
|
||||
} else {
|
||||
$val[1] = preg_replace("~( COLLATE )'(\\w+)'~", '\1\2', $val[1]);
|
||||
$comments[$field[0]] = $val[5];
|
||||
unset($val[5]);
|
||||
if ($field[0] == "") {
|
||||
$alter["ADD"][] = "\n " . implode("", $val) . ($table == "" ? substr($foreign[$val[0]], 16 + strlen($val[0])) : ""); // 16 - strlen(" FOREIGN KEY ()")
|
||||
} else {
|
||||
@@ -488,6 +493,11 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
foreach ($comments as $key => $val) {
|
||||
$comment = substr($val, 9); // 9 - strlen(" COMMENT ")
|
||||
queries("EXEC sp_dropextendedproperty @name = N'MS_Description', @level0type = N'Schema', @level0name = " . q(get_schema()) . ", @level1type = N'Table', @level1name = " . q($name) . ", @level2type = N'Column', @level2name = " . q($key));
|
||||
queries("EXEC sp_addextendedproperty @name = N'MS_Description', @value = " . $comment . ", @level0type = N'Schema', @level0name = " . q(get_schema()) . ", @level1type = N'Table', @level1name = " . q($name) . ", @level2type = N'Column', @level2name = " . q($key));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -632,7 +642,7 @@ WHERE sys1.xtype = 'TR' AND sys2.name = " . q($table)
|
||||
}
|
||||
|
||||
function support($feature) {
|
||||
return preg_match('~^(columns|database|drop_col|indexes|descidx|scheme|sql|table|trigger|view|view_trigger)$~', $feature); //! routine|
|
||||
return preg_match('~^(comment|columns|database|drop_col|indexes|descidx|scheme|sql|table|trigger|view|view_trigger)$~', $feature); //! routine|
|
||||
}
|
||||
|
||||
$jush = "mssql";
|
||||
|
@@ -238,11 +238,15 @@ if (!defined("DRIVER")) {
|
||||
$options = array(PDO::MYSQL_ATTR_LOCAL_INFILE => false);
|
||||
$ssl = $adminer->connectSsl();
|
||||
if ($ssl) {
|
||||
$options += array(
|
||||
PDO::MYSQL_ATTR_SSL_KEY => $ssl['key'],
|
||||
PDO::MYSQL_ATTR_SSL_CERT => $ssl['cert'],
|
||||
PDO::MYSQL_ATTR_SSL_CA => $ssl['ca'],
|
||||
);
|
||||
if (!empty($ssl['key'])) {
|
||||
$options[PDO::MYSQL_ATTR_SSL_KEY] = $ssl['key'];
|
||||
}
|
||||
if (!empty($ssl['cert'])) {
|
||||
$options[PDO::MYSQL_ATTR_SSL_CERT] = $ssl['cert'];
|
||||
}
|
||||
if (!empty($ssl['ca'])) {
|
||||
$options[PDO::MYSQL_ATTR_SSL_CA] = $ssl['ca'];
|
||||
}
|
||||
}
|
||||
$this->dsn(
|
||||
"mysql:charset=utf8;host=" . str_replace(":", ";unix_socket=", preg_replace('~:(\d)~', ';port=\1', $server)),
|
||||
@@ -578,24 +582,18 @@ if (!defined("DRIVER")) {
|
||||
* @return array array($name => array("db" => , "ns" => , "table" => , "source" => array(), "target" => array(), "on_delete" => , "on_update" => ))
|
||||
*/
|
||||
function foreign_keys($table) {
|
||||
global $connection, $on_actions;
|
||||
static $pattern = '(?:`(?:[^`]|``)+`)|(?:"(?:[^"]|"")+")';
|
||||
$return = array();
|
||||
$create_table = $connection->result("SHOW CREATE TABLE " . table($table), 1);
|
||||
if ($create_table) {
|
||||
preg_match_all("~CONSTRAINT ($pattern) FOREIGN KEY ?\\(((?:$pattern,? ?)+)\\) REFERENCES ($pattern)(?:\\.($pattern))? \\(((?:$pattern,? ?)+)\\)(?: ON DELETE ($on_actions))?(?: ON UPDATE ($on_actions))?~", $create_table, $matches, PREG_SET_ORDER);
|
||||
foreach ($matches as $match) {
|
||||
preg_match_all("~$pattern~", $match[2], $source);
|
||||
preg_match_all("~$pattern~", $match[5], $target);
|
||||
$return[idf_unescape($match[1])] = array(
|
||||
"db" => idf_unescape($match[4] != "" ? $match[3] : $match[4]),
|
||||
"table" => idf_unescape($match[4] != "" ? $match[4] : $match[3]),
|
||||
"source" => array_map('idf_unescape', $source[0]),
|
||||
"target" => array_map('idf_unescape', $target[0]),
|
||||
"on_delete" => ($match[6] ? $match[6] : "RESTRICT"),
|
||||
"on_update" => ($match[7] ? $match[7] : "RESTRICT"),
|
||||
);
|
||||
}
|
||||
foreach (get_rows("SELECT * FROM information_schema.REFERENTIAL_CONSTRAINTS WHERE CONSTRAINT_SCHEMA = DATABASE() AND TABLE_NAME = " . q($table)) as $row) {
|
||||
$columns = get_key_vals("SELECT COLUMN_NAME, REFERENCED_COLUMN_NAME FROM information_schema.KEY_COLUMN_USAGE WHERE CONSTRAINT_SCHEMA = DATABASE() AND CONSTRAINT_NAME = " . q($row["CONSTRAINT_NAME"]) . " ORDER BY ORDINAL_POSITION");
|
||||
$db = $row["UNIQUE_CONSTRAINT_SCHEMA"];
|
||||
$return[$row["CONSTRAINT_NAME"]] = array(
|
||||
"db" => ($db == DB ? "" : $db),
|
||||
"table" => $row["REFERENCED_TABLE_NAME"],
|
||||
"source" => array_keys($columns),
|
||||
"target" => array_values($columns),
|
||||
"on_delete" => $row["DELETE_RULE"],
|
||||
"on_update" => $row["UPDATE_RULE"],
|
||||
);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
@@ -810,7 +808,8 @@ if (!defined("DRIVER")) {
|
||||
queries("SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'");
|
||||
foreach ($tables as $table) {
|
||||
$name = ($target == DB ? table("copy_$table") : idf_escape($target) . "." . table($table));
|
||||
if (!queries("CREATE TABLE $name LIKE " . table($table))
|
||||
if (($_POST["overwrite"] && !queries("\nDROP TABLE IF EXISTS $name"))
|
||||
|| !queries("CREATE TABLE $name LIKE " . table($table))
|
||||
|| !queries("INSERT INTO $name SELECT * FROM " . table($table))
|
||||
) {
|
||||
return false;
|
||||
@@ -825,7 +824,8 @@ if (!defined("DRIVER")) {
|
||||
foreach ($views as $table) {
|
||||
$name = ($target == DB ? table("copy_$table") : idf_escape($target) . "." . table($table));
|
||||
$view = view($table);
|
||||
if (!queries("CREATE VIEW $name AS $view[select]")) { //! USE to avoid db.table
|
||||
if (($_POST["overwrite"] && !queries("DROP VIEW IF EXISTS $name"))
|
||||
|| !queries("CREATE VIEW $name AS $view[select]")) { //! USE to avoid db.table
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -1077,7 +1077,7 @@ if (!defined("DRIVER")) {
|
||||
$return = "CONV($return, 2, 10) + 0";
|
||||
}
|
||||
if (preg_match("~geometry|point|linestring|polygon~", $field["type"])) {
|
||||
$return = (min_version(8) ? "ST_" : "") . "GeomFromText($return)";
|
||||
$return = (min_version(8) ? "ST_" : "") . "GeomFromText($return, SRID($field[field]))";
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
@@ -324,7 +324,7 @@ ORDER BY 1";
|
||||
|
||||
function table_status($name = "") {
|
||||
$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\", 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_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
|
||||
FROM pg_class c
|
||||
JOIN pg_namespace n ON(n.nspname = current_schema() AND n.oid = c.relnamespace)
|
||||
WHERE relkind IN ('r', 'm', 'v', 'f')
|
||||
@@ -438,9 +438,7 @@ ORDER BY conkey, conname") as $row) {
|
||||
|
||||
function view($name) {
|
||||
global $connection;
|
||||
return array("select" => trim($connection->result("SELECT view_definition
|
||||
FROM information_schema.views
|
||||
WHERE table_schema = current_schema() AND table_name = " . q($name))));
|
||||
return array("select" => trim($connection->result("SELECT pg_get_viewdef(" . $connection->result("SELECT oid FROM pg_class WHERE relname = " . q($name)) . ")")));
|
||||
}
|
||||
|
||||
function collations() {
|
||||
@@ -483,6 +481,9 @@ WHERE table_schema = current_schema() AND table_name = " . q($name))));
|
||||
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
|
||||
$alter = array();
|
||||
$queries = array();
|
||||
if ($table != "" && $table != $name) {
|
||||
$queries[] = "ALTER TABLE " . table($table) . " RENAME TO " . table($name);
|
||||
}
|
||||
foreach ($fields as $field) {
|
||||
$column = idf_escape($field[0]);
|
||||
$val = $field[1];
|
||||
@@ -498,7 +499,7 @@ WHERE table_schema = current_schema() AND table_name = " . q($name))));
|
||||
$alter[] = ($table != "" ? "ADD " : " ") . implode($val);
|
||||
} else {
|
||||
if ($column != $val[0]) {
|
||||
$queries[] = "ALTER TABLE " . table($table) . " RENAME $column TO $val[0]";
|
||||
$queries[] = "ALTER TABLE " . table($name) . " RENAME $column TO $val[0]";
|
||||
}
|
||||
$alter[] = "ALTER $column TYPE$val[1]";
|
||||
if (!$val[6]) {
|
||||
@@ -507,7 +508,7 @@ WHERE table_schema = current_schema() AND table_name = " . q($name))));
|
||||
}
|
||||
}
|
||||
if ($field[0] != "" || $val5 != "") {
|
||||
$queries[] = "COMMENT ON COLUMN " . table($table) . ".$val[0] IS " . ($val5 != "" ? substr($val5, 9) : "''");
|
||||
$queries[] = "COMMENT ON COLUMN " . table($name) . ".$val[0] IS " . ($val5 != "" ? substr($val5, 9) : "''");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -517,9 +518,6 @@ WHERE table_schema = current_schema() AND table_name = " . q($name))));
|
||||
} elseif ($alter) {
|
||||
array_unshift($queries, "ALTER TABLE " . table($table) . "\n" . implode(",\n", $alter));
|
||||
}
|
||||
if ($table != "" && $table != $name) {
|
||||
$queries[] = "ALTER TABLE " . table($table) . " RENAME TO " . table($name);
|
||||
}
|
||||
if ($table != "" || $comment != "") {
|
||||
$queries[] = "COMMENT ON TABLE " . table($name) . " IS " . q($comment);
|
||||
}
|
||||
|
@@ -108,7 +108,7 @@ class Adminer {
|
||||
$return = array();
|
||||
$filename = "adminer.css";
|
||||
if (file_exists($filename)) {
|
||||
$return[] = $filename;
|
||||
$return[] = "$filename?v=" . crc32(file_get_contents($filename));
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
@@ -160,7 +160,7 @@ if (isset($_GET["username"]) && !class_exists("Min_DB")) {
|
||||
|
||||
stop_session(true);
|
||||
|
||||
if (isset($_GET["username"])) {
|
||||
if (isset($_GET["username"]) && is_string(get_password())) {
|
||||
list($host, $port) = explode(":", SERVER, 2);
|
||||
if (is_numeric($port) && $port < 1024) {
|
||||
auth_error(lang('Connecting to privileged ports is not allowed.'));
|
||||
|
@@ -351,7 +351,7 @@ function set_password($vendor, $server, $username, $password) {
|
||||
}
|
||||
|
||||
/** Get password from session
|
||||
* @return string
|
||||
* @return string or null for missing password or false for expired password
|
||||
*/
|
||||
function get_password() {
|
||||
$return = get_session("pwds");
|
||||
|
@@ -1,2 +1,2 @@
|
||||
<?php
|
||||
$VERSION = "4.7.1";
|
||||
$VERSION = "4.7.2";
|
||||
|
@@ -127,6 +127,7 @@ $translations = array(
|
||||
'Tables have been moved.' => 'Tabulky byly přesunuty.',
|
||||
'Copy' => 'Zkopírovat',
|
||||
'Tables have been copied.' => 'Tabulky byly zkopírovány.',
|
||||
'overwrite' => 'přepsat',
|
||||
|
||||
'Routines' => 'Procedury a funkce',
|
||||
'Routine has been called, %d row(s) affected.' => array('Procedura byla zavolána, byl změněn %d záznam.', 'Procedura byla zavolána, byly změněny %d záznamy.', 'Procedura byla zavolána, bylo změněno %d záznamů.'),
|
||||
|
@@ -2,6 +2,7 @@
|
||||
$translations = array(
|
||||
'Login' => 'Login',
|
||||
'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>',
|
||||
'Invalid credentials.' => 'Ungültige Anmelde-Informationen.',
|
||||
'Server' => 'Server',
|
||||
'Username' => 'Benutzer',
|
||||
|
@@ -268,7 +268,7 @@ $translations = array(
|
||||
// data type descriptions
|
||||
'Numbers' => 'Числа',
|
||||
'Date and time' => 'Дата і час',
|
||||
'Strings' => 'Радки',
|
||||
'Strings' => 'Рядки',
|
||||
'Binary' => 'Двійкові',
|
||||
'Lists' => 'Списки',
|
||||
'Network' => 'Мережа',
|
||||
|
@@ -128,6 +128,7 @@ $translations = array(
|
||||
'Tables have been moved.' => 'Xx.',
|
||||
'Copy' => 'Xx',
|
||||
'Tables have been copied.' => 'Xx.',
|
||||
'overwrite' => 'xx',
|
||||
|
||||
'Routines' => 'Xx',
|
||||
'Routine has been called, %d row(s) affected.' => array('Xx, %d.', 'Xx, %d.'),
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/** @author Ondrej Valka, http://valka.info */
|
||||
body { color: #000; background: #fff; font: 90%/1.25 Verdana, Arial, Helvetica, sans-serif; margin: 0; }
|
||||
body { color: #000; background: #fff; font: 90%/1.25 Verdana, Arial, Helvetica, sans-serif; margin: 0; width: -moz-fit-content; width: fit-content; }
|
||||
a { color: blue; text-decoration: none; }
|
||||
a:visited { color: navy; }
|
||||
a:link:hover, a:visited:hover { color: red; text-decoration: underline; }
|
||||
|
@@ -72,9 +72,10 @@ function typePassword(el, disable) {
|
||||
}
|
||||
|
||||
/** Install toggle handler
|
||||
* @param [HTMLElement]
|
||||
*/
|
||||
function messagesPrint() {
|
||||
var els = qsa('.toggle', document);
|
||||
function messagesPrint(el) {
|
||||
var els = qsa('.toggle', el || document);
|
||||
for (var i = 0; i < els.length; i++) {
|
||||
els[i].onclick = partial(toggle, els[i].getAttribute('href').substr(1));
|
||||
}
|
||||
|
@@ -672,6 +672,7 @@ function ajaxForm(form, message, button) {
|
||||
if (window.jush) {
|
||||
jush.highlight_tag(qsa('code', qs('#ajaxstatus')), 0);
|
||||
}
|
||||
messagesPrint(qs('#ajaxstatus'));
|
||||
}, data, message);
|
||||
}
|
||||
|
||||
|
@@ -52,7 +52,7 @@ if ($_POST && !$error) {
|
||||
} else {
|
||||
$new_user = q($_POST["user"]) . "@" . q($_POST["host"]); // if $_GET["host"] is not set then $new_user is always different
|
||||
$pass = $_POST["pass"];
|
||||
if ($pass != '' && !$_POST["hashed"]) {
|
||||
if ($pass != '' && !$_POST["hashed"] && !min_version(8)) {
|
||||
// compute hash in a separate query so that plain text password is not saved to history
|
||||
$pass = $connection->result("SELECT PASSWORD(" . q($pass) . ")");
|
||||
$error = !$pass;
|
||||
@@ -61,7 +61,7 @@ if ($_POST && !$error) {
|
||||
$created = false;
|
||||
if (!$error) {
|
||||
if ($old_user != $new_user) {
|
||||
$created = queries((min_version(5) ? "CREATE USER" : "GRANT USAGE ON *.* TO") . " $new_user IDENTIFIED BY PASSWORD " . q($pass));
|
||||
$created = queries((min_version(5) ? "CREATE USER" : "GRANT USAGE ON *.* TO") . " $new_user IDENTIFIED BY " . (min_version(8) ? "" : "PASSWORD ") . q($pass));
|
||||
$error = !$created;
|
||||
} elseif ($pass != $old_pass) {
|
||||
queries("SET PASSWORD FOR $new_user = " . q($pass));
|
||||
@@ -136,7 +136,7 @@ if ($_POST) {
|
||||
<tr><th><?php echo lang('Username'); ?><td><input name="user" data-maxlength="80" value="<?php echo h($row["user"]); ?>" autocapitalize="off">
|
||||
<tr><th><?php echo lang('Password'); ?><td><input name="pass" id="pass" value="<?php echo h($row["pass"]); ?>" autocomplete="new-password">
|
||||
<?php if (!$row["hashed"]) { echo script("typePassword(qs('#pass'));"); } ?>
|
||||
<?php echo checkbox("hashed", 1, $row["hashed"], lang('Hashed'), "typePassword(this.form['pass'], this.checked);"); ?>
|
||||
<?php echo (min_version(8) ? "" : checkbox("hashed", 1, $row["hashed"], lang('Hashed'), "typePassword(this.form['pass'], this.checked);")); ?>
|
||||
</table>
|
||||
|
||||
<?php
|
||||
|
15
changes.txt
15
changes.txt
@@ -1,3 +1,18 @@
|
||||
Adminer 4.7.2 (released 2019-07-18):
|
||||
Do not attempt logging in without password (bug #676)
|
||||
Stretch footer over the whole table width (bug #624)
|
||||
Allow overwriting tables when copying them
|
||||
Fix displaying SQL command after Save and continue edit
|
||||
Cache busting for adminer.css
|
||||
MySQL: Fix displaying multi-columns foreign keys (bug #675)
|
||||
MySQL: Fix creating users and changing password in MySQL 8 (bug #663)
|
||||
MySQL: Pass SRID to GeomFromText
|
||||
PostgreSQL: Fix setting column comments on new table
|
||||
PostgreSQL: Display definitions of materialized views (bug #682)
|
||||
PostgreSQL: Fix table status in PostgreSQL 12 (bug #683)
|
||||
MS SQL: Support comments
|
||||
Elasticsearch: Fix setting number of rows
|
||||
|
||||
Adminer 4.7.1 (released 2019-01-24):
|
||||
Display the tables scrollbar (bug #647)
|
||||
Remember visible columns in Create Table form (bug #493)
|
||||
|
@@ -336,7 +336,7 @@ p code + a:visited:hover {
|
||||
|
||||
#tables {
|
||||
max-height: 100%;
|
||||
margin: 0 -15px !important;
|
||||
margin: 32px -15px !important;
|
||||
position: absolute;
|
||||
left: 15px;
|
||||
right: 15px;
|
||||
@@ -575,7 +575,7 @@ label {
|
||||
top: 55px;
|
||||
right: 100%;
|
||||
z-index: 10;
|
||||
margin-right: -331px;
|
||||
margin-right: -340px;
|
||||
line-height: normal;
|
||||
padding: 0;
|
||||
left: auto;
|
||||
|
File diff suppressed because one or more lines are too long
36
designs/rmsoft_blue/adminer.css
Normal file
36
designs/rmsoft_blue/adminer.css
Normal file
File diff suppressed because one or more lines are too long
@@ -16,7 +16,7 @@ class AdminerJsonColumn {
|
||||
}
|
||||
|
||||
private function _buildTable($json) {
|
||||
echo '<table cellspacing="0" style="margin:2px">';
|
||||
echo '<table cellspacing="0" style="margin:2px; font-size:100%;">';
|
||||
foreach ($json as $key => $val) {
|
||||
echo '<tr>';
|
||||
echo '<th>' . h($key) . '</th>';
|
||||
|
@@ -110,6 +110,11 @@ class AdminerPlugin extends Adminer {
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function bruteForceKey() {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
}
|
||||
|
||||
function serverName($server) {
|
||||
$args = func_get_args();
|
||||
return $this->_applyPlugin(__FUNCTION__, $args);
|
||||
|
Reference in New Issue
Block a user