From 845445baad887a07a9bcbf52a18e7e8ad85455c8 Mon Sep 17 00:00:00 2001 From: Jakub Vrana Date: Sat, 29 Mar 2025 20:56:19 +0100 Subject: [PATCH] Use adminer() instead of $adminer --- adminer/call.inc.php | 6 ++-- adminer/db.inc.php | 4 +-- adminer/drivers/mssql.inc.php | 5 ++- adminer/drivers/mysql.inc.php | 6 ++-- adminer/drivers/pgsql.inc.php | 16 ++++----- adminer/dump.inc.php | 16 ++++----- adminer/edit.inc.php | 2 +- adminer/foreign.inc.php | 4 +-- adminer/include/adminer.inc.php | 50 +++++++++++++-------------- adminer/include/auth.inc.php | 17 ++++------ adminer/include/bootstrap.inc.php | 8 ++--- adminer/include/connect.inc.php | 6 ++-- adminer/include/design.inc.php | 22 +++++------- adminer/include/driver.inc.php | 15 ++++----- adminer/include/functions.inc.php | 32 ++++++++---------- adminer/include/html.inc.php | 36 ++++++++++---------- adminer/schema.inc.php | 2 +- adminer/script.inc.php | 2 +- adminer/select.inc.php | 56 +++++++++++++++---------------- adminer/sql.inc.php | 20 +++++------ adminer/table.inc.php | 8 ++--- editor/db.inc.php | 4 +-- editor/include/adminer.inc.php | 46 +++++++++++-------------- editor/include/connect.inc.php | 2 +- editor/script.inc.php | 2 +- plugins/drivers/clickhouse.php | 3 +- plugins/drivers/firebird.php | 3 +- plugins/drivers/simpledb.php | 6 ++-- plugins/sql-log.php | 3 +- 29 files changed, 184 insertions(+), 218 deletions(-) diff --git a/adminer/call.inc.php b/adminer/call.inc.php index 36c9e333..c409fd7e 100644 --- a/adminer/call.inc.php +++ b/adminer/call.inc.php @@ -36,12 +36,12 @@ if (!$error && $_POST) { $start = microtime(true); $result = $connection->multi_query($query); $affected = $connection->affected_rows; // getting warnings overwrites this - echo $adminer->selectQuery($query, $start, !$result); + echo adminer()->selectQuery($query, $start, !$result); if (!$result) { echo "

" . error() . "\n"; } else { - $connection2 = connect($adminer->credentials()); + $connection2 = connect(adminer()->credentials()); if (is_object($connection2)) { $connection2->select_db(DB); } @@ -71,7 +71,7 @@ if ($in) { foreach ($in as $key) { $field = $routine["fields"][$key]; $name = $field["field"]; - echo "" . $adminer->fieldName($field); + echo "" . adminer()->fieldName($field); $value = idx($_POST["fields"], $name); if ($value != "") { if ($field["type"] == "set") { diff --git a/adminer/db.inc.php b/adminer/db.inc.php index 3494d700..93554519 100644 --- a/adminer/db.inc.php +++ b/adminer/db.inc.php @@ -54,7 +54,7 @@ if ($tables_views && !$error && !$_POST["search"]) { page_header(($_GET["ns"] == "" ? lang('Database') . ": " . h(DB) : lang('Schema') . ": " . h($_GET["ns"])), $error, true); -if ($adminer->homepage()) { +if (adminer()->homepage()) { if ($_GET["ns"] !== "") { echo "

" . lang('Tables and views') . "

\n"; $tables_list = tables_list(); @@ -146,7 +146,7 @@ if ($adminer->homepage()) { : ""))) . " " . on_help(JUSH == "sqlite" ? "'DELETE'" : "'TRUNCATE" . (JUSH == "pgsql" ? "'" : " TABLE'")) . confirm() . "" . on_help("'DROP TABLE'") . confirm() . "\n"; - $databases = (support("scheme") ? $adminer->schemas() : $adminer->databases()); + $databases = (support("scheme") ? adminer()->schemas() : adminer()->databases()); if (count($databases) != 1 && JUSH != "sqlite") { $db = (isset($_POST["target"]) ? $_POST["target"] : (support("scheme") ? $_GET["ns"] : DB)); echo "

" . lang('Move to other database') . ": "; diff --git a/adminer/drivers/mssql.inc.php b/adminer/drivers/mssql.inc.php index c83c2ed8..63adc3b6 100644 --- a/adminer/drivers/mssql.inc.php +++ b/adminer/drivers/mssql.inc.php @@ -26,16 +26,15 @@ if (isset($_GET["mssql"])) { } function attach(?string $server, string $username, string $password): string { - global $adminer; $connection_info = array("UID" => $username, "PWD" => $password, "CharacterSet" => "UTF-8"); - $ssl = $adminer->connectSsl(); + $ssl = adminer()->connectSsl(); if (isset($ssl["Encrypt"])) { $connection_info["Encrypt"] = $ssl["Encrypt"]; } if (isset($ssl["TrustServerCertificate"])) { $connection_info["TrustServerCertificate"] = $ssl["TrustServerCertificate"]; } - $db = $adminer->database(); + $db = adminer()->database(); if ($db != "") { $connection_info["Database"] = $db; } diff --git a/adminer/drivers/mysql.inc.php b/adminer/drivers/mysql.inc.php index ea92f131..0b252fdf 100644 --- a/adminer/drivers/mysql.inc.php +++ b/adminer/drivers/mysql.inc.php @@ -15,10 +15,9 @@ if (!defined('Adminer\DRIVER')) { } function attach(?string $server, string $username, string $password): string { - global $adminer; mysqli_report(MYSQLI_REPORT_OFF); // stays between requests, not required since PHP 5.3.4 list($host, $port) = explode(":", $server, 2); // part after : is used for port or socket - $ssl = $adminer->connectSsl(); + $ssl = adminer()->connectSsl(); if ($ssl) { $this->ssl_set($ssl['key'], $ssl['cert'], $ssl['ca'], '', ''); } @@ -158,9 +157,8 @@ if (!defined('Adminer\DRIVER')) { public string $extension = "PDO_MySQL"; function attach(?string $server, string $username, string $password): string { - global $adminer; $options = array(\PDO::MYSQL_ATTR_LOCAL_INFILE => false); - $ssl = $adminer->connectSsl(); + $ssl = adminer()->connectSsl(); if ($ssl) { if ($ssl['key']) { $options[\PDO::MYSQL_ATTR_SSL_KEY] = $ssl['key']; diff --git a/adminer/drivers/pgsql.inc.php b/adminer/drivers/pgsql.inc.php index 5c4e7f82..d4d0ff42 100644 --- a/adminer/drivers/pgsql.inc.php +++ b/adminer/drivers/pgsql.inc.php @@ -20,11 +20,10 @@ if (isset($_GET["pgsql"])) { } function attach(?string $server, string $username, string $password): string { - global $adminer; - $db = $adminer->database(); + $db = adminer()->database(); set_error_handler(array($this, '_error')); $this->string = "host='" . str_replace(":", "' port='", addcslashes($server, "'\\")) . "' user='" . addcslashes($username, "'\\") . "' password='" . addcslashes($password, "'\\") . "'"; - $ssl = $adminer->connectSsl(); + $ssl = adminer()->connectSsl(); if (isset($ssl["mode"])) { $this->string .= " sslmode='" . $ssl["mode"] . "'"; } @@ -53,8 +52,7 @@ if (isset($_GET["pgsql"])) { } function select_db(string $database): bool { - global $adminer; - if ($database == $adminer->database()) { + if ($database == adminer()->database()) { return $this->database; } $return = @pg_connect("$this->string dbname='" . addcslashes($database, "'\\") . "'", PGSQL_CONNECT_FORCE_NEW); @@ -130,11 +128,10 @@ if (isset($_GET["pgsql"])) { public int $timeout; function attach(?string $server, string $username, string $password): string { - global $adminer; - $db = $adminer->database(); + $db = adminer()->database(); //! 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(); + $ssl = adminer()->connectSsl(); if (isset($ssl["mode"])) { $dsn .= " sslmode='" . $ssl["mode"] . "'"; } @@ -142,8 +139,7 @@ if (isset($_GET["pgsql"])) { } function select_db(string $database): bool { - global $adminer; - return ($adminer->database() == $database); + return (adminer()->database() == $database); } function query(string $query, bool $unbuffered = false) { diff --git a/adminer/dump.inc.php b/adminer/dump.inc.php index 6d472e64..09a8eea3 100644 --- a/adminer/dump.inc.php +++ b/adminer/dump.inc.php @@ -39,7 +39,7 @@ SET foreign_key_checks = 0; } foreach ((array) $databases as $db) { - $adminer->dumpDatabase($db); + adminer()->dumpDatabase($db); if ($connection->select_db($db)) { if ($is_sql && preg_match('~CREATE~', $style) && ($create = get_val("SHOW CREATE DATABASE " . idf_escape($db), 1))) { set_utf8mb4($create); @@ -99,12 +99,12 @@ SET foreign_key_checks = 0; ob_start(array($tmp_file, 'write'), 1e5); } - $adminer->dumpTable($name, ($table ? $_POST["table_style"] : ""), (is_view($table_status) ? 2 : 0)); + adminer()->dumpTable($name, ($table ? $_POST["table_style"] : ""), (is_view($table_status) ? 2 : 0)); if (is_view($table_status)) { $views[] = $name; } elseif ($data) { $fields = fields($name); - $adminer->dumpData($name, $_POST["data_style"], "SELECT *" . convert_fields($fields, $fields) . " FROM " . table($name)); + adminer()->dumpData($name, $_POST["data_style"], "SELECT *" . convert_fields($fields, $fields) . " FROM " . table($name)); } if ($is_sql && $_POST["triggers"] && $table && ($triggers = trigger_sql($name))) { echo "\nDELIMITER ;;\n$triggers\nDELIMITER ;\n"; @@ -130,7 +130,7 @@ SET foreign_key_checks = 0; } foreach ($views as $view) { - $adminer->dumpTable($view, $_POST["table_style"], 1); + adminer()->dumpTable($view, $_POST["table_style"], 1); } if ($ext == "tar") { @@ -140,7 +140,7 @@ SET foreign_key_checks = 0; } } - $adminer->dumpFooter(); + adminer()->dumpFooter(); exit; } @@ -165,9 +165,9 @@ if (!isset($row["events"])) { // backwards compatibility $row["triggers"] = $row["table_style"]; } -echo "" . lang('Output') . "" . html_radios("output", $adminer->dumpOutput(), $row["output"]) . "\n"; +echo "" . lang('Output') . "" . html_radios("output", adminer()->dumpOutput(), $row["output"]) . "\n"; -echo "" . lang('Format') . "" . html_radios("format", $adminer->dumpFormat(), $row["format"]) . "\n"; +echo "" . lang('Format') . "" . html_radios("format", adminer()->dumpFormat(), $row["format"]) . "\n"; echo (JUSH == "sqlite" ? "" : "" . lang('Database') . "" . html_select('db_style', $db_style, $row["db_style"]) . (support("type") ? checkbox("types", 1, $row["types"], lang('User types')) : "") @@ -221,7 +221,7 @@ if (DB != "") { echo ""; echo script("qs('#check-databases').onclick = partial(formCheck, /^databases\\[/);", ""); echo "\n"; - $databases = $adminer->databases(); + $databases = adminer()->databases(); if ($databases) { foreach ($databases as $db) { if (!information_schema($db)) { diff --git a/adminer/edit.inc.php b/adminer/edit.inc.php index 5f12f824..247066d6 100644 --- a/adminer/edit.inc.php +++ b/adminer/edit.inc.php @@ -6,7 +6,7 @@ $fields = fields($TABLE); $where = (isset($_GET["select"]) ? ($_POST["check"] && count($_POST["check"]) == 1 ? where_check($_POST["check"][0], $fields) : "") : where($_GET, $fields)); $update = (isset($_GET["select"]) ? $_POST["edit"] : $where); foreach ($fields as $name => $field) { - if (!isset($field["privileges"][$update ? "update" : "insert"]) || $adminer->fieldName($field) == "" || $field["generated"]) { + if (!isset($field["privileges"][$update ? "update" : "insert"]) || adminer()->fieldName($field) == "" || $field["generated"]) { unset($fields[$name]); } } diff --git a/adminer/foreign.inc.php b/adminer/foreign.inc.php index 3ce59fb9..d0a55445 100644 --- a/adminer/foreign.inc.php +++ b/adminer/foreign.inc.php @@ -69,7 +69,7 @@ $target = array_keys(fields(in_array($row["table"], $referencable) ? $row["table $onchange = "this.form['change-js'].value = '1'; this.form.submit();"; echo "

" . lang('Target table') . ": " . html_select("table", $referencable, $row["table"], $onchange) . "\n"; if (support("scheme")) { - $schemas = array_filter($adminer->schemas(), function ($schema) { + $schemas = array_filter(adminer()->schemas(), function ($schema) { return !preg_match('~^information_schema$~i', $schema); }); echo lang('Schema') . ": " . html_select("ns", $schemas, $row["ns"] != "" ? $row["ns"] : $_GET["ns"], $onchange); @@ -78,7 +78,7 @@ if (support("scheme")) { } } elseif (JUSH != "sqlite") { $dbs = array(); - foreach ($adminer->databases() as $db) { + foreach (adminer()->databases() as $db) { if (!information_schema($db)) { $dbs[] = $db; } diff --git a/adminer/include/adminer.inc.php b/adminer/include/adminer.inc.php index 321be6bf..a87900d8 100644 --- a/adminer/include/adminer.inc.php +++ b/adminer/include/adminer.inc.php @@ -3,8 +3,9 @@ namespace Adminer; // any method change in this file should be transferred to editor/include/adminer.inc.php -/** Default Adminer plugin; it should call methods via $adminer->f() instead of $this->f() to give chance to other plugins */ +/** Default Adminer plugin; it should call methods via adminer()->f() instead of $this->f() to give chance to other plugins */ class Adminer { + /** @var Adminer|Plugins */ static $instance; /** @visibility protected(set) */ public string $error = ''; // HTML /** Name in title and navigation @@ -119,15 +120,14 @@ class Adminer { /** Print login form */ function loginForm(): void { - global $adminer; echo "\n"; // this is matched by compile.php - echo $adminer->loginFormField('driver', '
' . lang('System') . '', html_select("auth[driver]", SqlDriver::$drivers, DRIVER, "loginDriver(this);")); - echo $adminer->loginFormField('server', '
' . lang('Server') . '', ''); + echo adminer()->loginFormField('driver', '
' . lang('System') . '', html_select("auth[driver]", SqlDriver::$drivers, DRIVER, "loginDriver(this);")); + echo adminer()->loginFormField('server', '
' . lang('Server') . '', ''); // this is matched by compile.php - echo $adminer->loginFormField('username', '
' . lang('Username') . '', '' . script("qs('#username').form['auth[driver]'].onchange();")); - echo $adminer->loginFormField('password', '
' . lang('Password') . '', ''); - echo $adminer->loginFormField('db', '
' . lang('Database') . '', ''); + echo adminer()->loginFormField('username', '
' . lang('Username') . '', '' . script("qs('#username').form['auth[driver]'].onchange();")); + echo adminer()->loginFormField('password', '
' . lang('Password') . '', ''); + echo adminer()->loginFormField('db', '
' . lang('Database') . '', ''); echo "
\n"; echo "

\n"; echo checkbox("auth[permanent]", 1, $_COOKIE["adminer_permanent"], lang('Permanent login')) . "\n"; @@ -384,7 +384,6 @@ class Adminer { * @param Index[] $indexes */ function selectSearchPrint(array $where, array $columns, array $indexes): void { - global $adminer; print_fieldset("search", lang('Search'), $where); foreach ($indexes as $i => $index) { if ($index["type"] == "FULLTEXT") { @@ -397,7 +396,7 @@ class Adminer { } $change_next = "this.parentNode.firstChild.onchange();"; foreach (array_merge((array) $_GET["where"], array(array())) as $i => $val) { - if (!$val || ("$val[col]$val[val]" != "" && in_array($val["op"], $adminer->operators()))) { + if (!$val || ("$val[col]$val[val]" != "" && in_array($val["op"], adminer()->operators()))) { echo "

" . select_input( " name='where[$i][col]'", $columns, @@ -405,7 +404,7 @@ class Adminer { ($val ? "selectFieldChange" : "selectAddRow"), "(" . lang('anywhere') . ")" ); - echo html_select("where[$i][op]", $adminer->operators(), $val["op"], $change_next); + echo html_select("where[$i][op]", adminer()->operators(), $val["op"], $change_next); echo ""; echo script("mixin(qsl('input'), {oninput: function () { $change_next }, onkeydown: selectSearchKeydown, onsearch: selectSearchSearch});", ""); echo "
\n"; @@ -528,7 +527,7 @@ class Adminer { * @return list expressions to join by AND */ function selectSearchProcess(array $fields, array $indexes): array { - global $connection, $driver, $adminer; + global $connection, $driver; $return = array(); foreach ($indexes as $i => $index) { if ($index["type"] == "FULLTEXT" && $_GET["fulltext"][$i] != "") { @@ -536,7 +535,7 @@ class Adminer { } } foreach ((array) $_GET["where"] as $key => $val) { - if ("$val[col]$val[val]" != "" && in_array($val["op"], $adminer->operators())) { + if ("$val[col]$val[val]" != "" && in_array($val["op"], adminer()->operators())) { $prefix = ""; $cond = " $val[op]"; if (preg_match('~IN$~', $val["op"])) { @@ -545,14 +544,14 @@ class Adminer { } elseif ($val["op"] == "SQL") { $cond = " $val[val]"; // SQL injection } elseif ($val["op"] == "LIKE %%") { - $cond = " LIKE " . $adminer->processInput($fields[$val["col"]], "%$val[val]%"); + $cond = " LIKE " . adminer()->processInput($fields[$val["col"]], "%$val[val]%"); } elseif ($val["op"] == "ILIKE %%") { - $cond = " ILIKE " . $adminer->processInput($fields[$val["col"]], "%$val[val]%"); + $cond = " ILIKE " . adminer()->processInput($fields[$val["col"]], "%$val[val]%"); } elseif ($val["op"] == "FIND_IN_SET") { $prefix = "$val[op](" . q($val["val"]) . ", "; $cond = ")"; } elseif (!preg_match('~NULL$~', $val["op"])) { - $cond .= " " . $adminer->processInput($fields[$val["col"]], $val["val"]); + $cond .= " " . adminer()->processInput($fields[$val["col"]], $val["val"]); } if ($val["col"] != "") { $return[] = $prefix . $driver->convertSearch(idf_escape($val["col"]), $val, $fields[$val["col"]]) . $cond; @@ -947,8 +946,8 @@ class Adminer { * @param string $missing can be "auth" if there is no database connection, "db" if there is no database selected, "ns" with invalid schema */ function navigation(string $missing): void { - global $connection, $adminer; - echo "

" . $adminer->name() . " " . VERSION; + global $connection; + echo "

" . adminer()->name() . " " . VERSION; $new_version = $_COOKIE["adminer_version"]; echo " " . (version_compare(VERSION, $new_version) < 0 ? h($new_version) : "") . ""; echo "

\n"; @@ -963,7 +962,7 @@ class Adminer { if ($password !== null) { $dbs = $_SESSION["db"][$vendor][$server][$username]; foreach (($dbs ? array_keys($dbs) : array("")) as $db) { - $output .= "
  • ($name) " . h($username . ($server != "" ? "@" . $adminer->serverName($server) : "") . ($db != "" ? " - $db" : "")) . "\n"; + $output .= "
  • ($name) " . h($username . ($server != "" ? "@" . adminer()->serverName($server) : "") . ($db != "" ? " - $db" : "")) . "\n"; } } } @@ -978,8 +977,8 @@ class Adminer { $connection->select_db(DB); $tables = table_status('', true); } - $adminer->syntaxHighlighting($tables); - $adminer->databasesPrint($missing); + adminer()->syntaxHighlighting($tables); + adminer()->databasesPrint($missing); $actions = array(); if (DB == "" || !$missing) { if (support("sql")) { @@ -995,7 +994,7 @@ class Adminer { echo ($actions ? "

    " . lang('No tables.') . "

    \n"; } @@ -1035,8 +1034,8 @@ class Adminer { /** Print databases list in menu */ function databasesPrint(string $missing): void { - global $adminer, $connection; - $databases = $adminer->databases(); + global $connection; + $databases = adminer()->databases(); if (DB && $databases && !in_array(DB, $databases)) { array_unshift($databases, DB); } @@ -1050,7 +1049,7 @@ class Adminer { echo "\n"; if (support("scheme")) { if ($missing != "db" && DB != "" && $connection->select_db(DB)) { - echo "
    " . lang('Schema') . ": " . html_select("ns", array("" => "") + $adminer->schemas(), $_GET["ns"]) . $db_events; + echo "
    " . lang('Schema') . ": " . html_select("ns", array("" => "") + adminer()->schemas(), $_GET["ns"]) . $db_events; if ($_GET["ns"] != "") { set_schema($_GET["ns"]); } @@ -1069,10 +1068,9 @@ class Adminer { * @param TableStatus[] $tables */ function tablesPrint(array $tables): void { - global $adminer; echo "