]> git.joonet.de Git - adminer.git/commitdiff
Move $drivers to SqlDriver
authorJakub Vrana <jakub@vrana.cz>
Fri, 28 Mar 2025 21:39:12 +0000 (22:39 +0100)
committerJakub Vrana <jakub@vrana.cz>
Fri, 28 Mar 2025 21:58:32 +0000 (22:58 +0100)
16 files changed:
adminer/drivers/mssql.inc.php
adminer/drivers/mysql.inc.php
adminer/drivers/oracle.inc.php
adminer/drivers/pgsql.inc.php
adminer/drivers/sqlite.inc.php
adminer/dump.inc.php
adminer/include/adminer.inc.php
adminer/include/auth.inc.php
adminer/include/bootstrap.inc.php
adminer/include/connect.inc.php
adminer/include/design.inc.php
adminer/include/driver.inc.php
adminer/include/functions.inc.php
compile.php
editor/index.php
phpstan.neon

index 8833583cb911296cbd95bb72a226fb38ac5353d0..c83c2ed8d7c2acde2aacc345bde3582a97ba9df4 100644 (file)
@@ -7,7 +7,7 @@
 
 namespace Adminer;
 
-$drivers["mssql"] = "MS SQL";
+add_driver("mssql", "MS SQL");
 
 if (isset($_GET["mssql"])) {
        define('Adminer\DRIVER', "mssql");
index c6545d9ea5b9c1432960f7c088d683a7ec3f1b26..726814f0154ead1f9ffec9f345bd06f9583e2224 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 namespace Adminer;
 
-$drivers = array("server" => "MySQL / MariaDB") + $drivers;
+SqlDriver::$drivers = array("server" => "MySQL / MariaDB") + SqlDriver::$drivers;
 
 if (!defined('Adminer\DRIVER')) {
        define('Adminer\DRIVER', "server"); // server - backwards compatibility
@@ -366,7 +366,6 @@ if (!defined('Adminer\DRIVER')) {
        * @return string|Db string for error
        */
        function connect(array $credentials) {
-               global $drivers;
                $connection = new Db;
                $error = $connection->attach($credentials[0], $credentials[1], $credentials[2]);
                if ($error) {
@@ -378,7 +377,7 @@ if (!defined('Adminer\DRIVER')) {
                $connection->set_charset(charset($connection));
                $connection->query("SET sql_quote_show_create = 1, autocommit = 1");
                $connection->flavor = (preg_match('~MariaDB~', $connection->server_info) ? 'maria' : 'mysql');
-               $drivers[DRIVER] = ($connection->flavor == 'maria' ? "MariaDB" : "MySQL");
+               add_driver(DRIVER, ($connection->flavor == 'maria' ? "MariaDB" : "MySQL"));
                return $connection;
        }
 
index 35841bfcfc33f08e34b14a72279a21d9c20cbcab..ccc413d9a15138d92fc32fbe6d730c54e74a051e 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 namespace Adminer;
 
-$drivers["oracle"] = "Oracle (beta)";
+add_driver("oracle", "Oracle (beta)");
 
 if (isset($_GET["oracle"])) {
        define('Adminer\DRIVER', "oracle");
index 03583da9ef6c98ac00dcc078d0297fa434d9cbf0..5c4e7f82235d432b23db10f9f06c62ad4e139af2 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 namespace Adminer;
 
-$drivers["pgsql"] = "PostgreSQL";
+add_driver("pgsql", "PostgreSQL");
 
 if (isset($_GET["pgsql"])) {
        define('Adminer\DRIVER', "pgsql");
@@ -301,7 +301,6 @@ if (isset($_GET["pgsql"])) {
        }
 
        function connect($credentials) {
-               global $drivers;
                $connection = new Db;
                $error = $connection->attach($credentials[0], $credentials[1], $credentials[2]);
                if ($error) {
@@ -314,7 +313,7 @@ if (isset($_GET["pgsql"])) {
                $connection->flavor = (preg_match('~CockroachDB~', $version) ? 'cockroach' : '');
                $connection->server_info = preg_replace('~^\D*([\d.]+[-\w]*).*~', '\1', $version);
                if ($connection->flavor == 'cockroach') { // we don't use "PostgreSQL / CockroachDB" by default because it's too long
-                       $drivers[DRIVER] = "CockroachDB";
+                       add_driver(DRIVER, "CockroachDB");
                }
                return $connection;
        }
index 67bbfb20917f6e590918a89909153e99f87b1586..e4f7324b38e1b79e34c3d4f6ae0f1ea048b910bc 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 namespace Adminer;
 
-$drivers["sqlite"] = "SQLite";
+add_driver("sqlite", "SQLite");
 
 if (isset($_GET["sqlite"])) {
        define('Adminer\DRIVER', "sqlite");
index dc9eae27b539af79f4493d1d5af6398523b60e44..6d472e6401cfe8b4f5d05fa0d43504f230a79bb6 100644 (file)
@@ -16,7 +16,7 @@ if ($_POST && !$error) {
        $is_sql = preg_match('~sql~', $_POST["format"]);
 
        if ($is_sql) {
-               echo "-- Adminer " . VERSION . " " . $drivers[DRIVER] . " " . str_replace("\n", " ", $connection->server_info) . " dump\n\n";
+               echo "-- Adminer " . VERSION . " " . get_driver(DRIVER) . " " . str_replace("\n", " ", $connection->server_info) . " dump\n\n";
                if (JUSH == "sql") {
                        echo "SET NAMES utf8;
 SET time_zone = '+00:00';
index 77083bdac0a8c404658e8dd394c70e398112fd76..b85c09784e7da2e39ffd9ee4d82f593d1b52246f 100644 (file)
@@ -118,10 +118,10 @@ class Adminer {
 
        /** Print login form */
        function loginForm(): void {
-               global $drivers, $adminer;
+               global $adminer;
                echo "<table class='layout'>\n";
                // this is matched by compile.php
-               echo $adminer->loginFormField('driver', '<tr><th>' . lang('System') . '<td>', html_select("auth[driver]", $drivers, DRIVER, "loginDriver(this);"));
+               echo $adminer->loginFormField('driver', '<tr><th>' . lang('System') . '<td>', html_select("auth[driver]", SqlDriver::$drivers, DRIVER, "loginDriver(this);"));
                echo $adminer->loginFormField('server', '<tr><th>' . lang('Server') . '<td>', '<input name="auth[server]" value="' . h(SERVER) . '" title="hostname[:port]" placeholder="localhost" autocapitalize="off">');
                // this is matched by compile.php
                echo $adminer->loginFormField('username', '<tr><th>' . lang('Username') . '<td>', '<input name="auth[username]" id="username" autofocus value="' . h($_GET["username"]) . '" autocomplete="username" autocapitalize="off">' . script("qs('#username').form['auth[driver]'].onchange();"));
@@ -946,7 +946,7 @@ 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 $drivers, $connection, $adminer;
+               global $connection, $adminer;
                echo "<h1>" . $adminer->name() . " <span class='version'>" . VERSION;
                $new_version = $_COOKIE["adminer_version"];
                echo " <a href='https://www.adminer.org/#download'" . target_blank() . " id='version'>" . (version_compare(VERSION, $new_version) < 0 ? h($new_version) : "") . "</a>";
@@ -957,7 +957,7 @@ class Adminer {
                        $output = "";
                        foreach ((array) $_SESSION["pwds"] as $vendor => $servers) {
                                foreach ($servers as $server => $usernames) {
-                                       $name = h(get_setting("vendor-$vendor-$server") ?: $drivers[$vendor]);
+                                       $name = h(get_setting("vendor-$vendor-$server") ?: get_driver($vendor));
                                        foreach ($usernames as $username => $password) {
                                                if ($password !== null) {
                                                        $dbs = $_SESSION["db"][$vendor][$server][$username];
index 3db0f94c5b2e082dce68398da12625d9c34f6b85..7f9c56caaf3c536f822b7e7e026957ff1742fff1 100644 (file)
@@ -182,7 +182,7 @@ if (isset($_GET["username"]) && is_string(get_password())) {
        if (is_object($connection)) {
                $driver = new Driver($connection);
                if ($connection->flavor) {
-                       save_settings(array("vendor-" . DRIVER . "-" . SERVER => $drivers[DRIVER]));
+                       save_settings(array("vendor-" . DRIVER . "-" . SERVER => get_driver(DRIVER)));
                }
        }
 }
index eee7e8fd15525cb0172bae941e1dc48f0635a445..3ab140c0f6c01ba6f230c1eb6917e0b7a8ce0ca3 100644 (file)
@@ -39,7 +39,7 @@ if ($_GET["script"] == "version") {
        exit;
 }
 
-global $adminer, $connection, $driver, $drivers, $translations; // allows including Adminer inside a function
+global $adminer, $connection, $driver, $translations; // allows including Adminer inside a function
 
 if (!$_SERVER["REQUEST_URI"]) { // IIS 5 compatibility
        $_SERVER["REQUEST_URI"] = $_SERVER["ORIG_PATH_INFO"];
index 7fd52fe026cf7768860ed5fa3f46ea2536028a39..cf1cd61a0ae051cc885605a6281ec5c9b4e435f5 100644 (file)
@@ -42,7 +42,7 @@ if (
                                echo "<a href='" . h(ME) . "$key='>$val</a>\n";
                        }
                }
-               echo "<p>" . lang('%s version: %s through PHP extension %s', $drivers[DRIVER], "<b>" . h($connection->server_info) . "</b>", "<b>$connection->extension</b>") . "\n";
+               echo "<p>" . lang('%s version: %s through PHP extension %s', get_driver(DRIVER), "<b>" . h($connection->server_info) . "</b>", "<b>$connection->extension</b>") . "\n";
                echo "<p>" . lang('Logged as: %s', "<b>" . h(logged_user()) . "</b>") . "\n";
                if (isset($adminer->plugins) && is_array($adminer->plugins)) {
                        echo "<p>" . lang('Loaded plugins') . ":\n<ul>\n";
index 8df772659a1128f8947630a9adf7d8933c93e9fc..ad28e3730df48319f07b7c1872c4f3ddc4a47b08 100644 (file)
@@ -7,7 +7,7 @@ namespace Adminer;
 * @param string $title2 used after colon in title and heading, should be HTML escaped
 */
 function page_header(string $title, string $error = "", $breadcrumb = array(), string $title2 = ""): void {
-       global $adminer, $drivers;
+       global $adminer;
        page_headers();
        if (is_ajax() && $error) {
                page_messages($error);
@@ -88,7 +88,7 @@ const thousandsSeparator = '" . js_escape(lang(',')) . "';")
        echo "<div id='content'>\n";
        if ($breadcrumb !== null) {
                $link = substr(preg_replace('~\b(username|db|ns)=[^&]*&~', '', ME), 0, -1);
-               echo '<p id="breadcrumb"><a href="' . h($link ?: ".") . '">' . $drivers[DRIVER] . '</a> » ';
+               echo '<p id="breadcrumb"><a href="' . h($link ?: ".") . '">' . get_driver(DRIVER) . '</a> » ';
                $link = substr(preg_replace('~\b(db|ns)=[^&]*&~', '', ME), 0, -1);
                $server = $adminer->serverName(SERVER);
                $server = ($server != "" ? $server : lang('Server'));
index 723cf7055b2f1790c4c3a4a2dafbcd306a78050f..d98c67947dc451fd0cf6e14ed9e5fce583c6ff14 100644 (file)
@@ -1,21 +1,18 @@
 <?php
 namespace Adminer;
 
-$drivers = array();
-
-/** Add a driver */
+/** Add or overwrite a driver */
 function add_driver(string $id, string $name): void {
-       global $drivers;
-       $drivers[$id] = $name;
+       SqlDriver::$drivers[$id] = $name;
 }
 
 /** Get driver name */
 function get_driver(string $id): string {
-       global $drivers;
-       return $drivers[$id];
+       return SqlDriver::$drivers[$id];
 }
 
 abstract class SqlDriver {
+       /** @var string[] */ static array $drivers = array();
        /** @var list<string> */ static array $extensions = array(); // possible extensions
        static string $jush; // JUSH identifier
 
index bfe548f20188a31a39ca1ce351f37f7fd3f69979..0fa8ef734dff0d98dc09747c621495458413dcef 100644 (file)
@@ -391,8 +391,7 @@ function set_session(string $key, $val) {
 
 /** Get authenticated URL */
 function auth_url(string $vendor, ?string $server, string $username, string $db = null): string {
-       global $drivers;
-       $uri = remove_from_uri(implode("|", array_keys($drivers))
+       $uri = remove_from_uri(implode("|", array_keys(SqlDriver::$drivers))
                . "|username|ext|"
                . ($db !== null ? "db|" : "")
                . ($vendor == 'mssql' || $vendor == 'pgsql' ? "" : "ns|") // we don't have access to support() here
index c8d27602fb18fa215177c0d02fe71b808236416c..56894d4ba40805ef4b02050d49e60e097711f09c 100755 (executable)
@@ -320,8 +320,8 @@ if ($vendor) {
                        $file = preg_replace("((\t*)" . preg_quote('if (support("' . $feature . '")') . ".*?\n\\1\\}( else)?)s", '', $file);
                }
        }
-       if ($project != "editor" && count($drivers) == 1) {
-               $file = str_replace('html_select("auth[driver]", $drivers, DRIVER, "loginDriver(this);")', 'input_hidden("auth[driver]", "' . ($vendor == "mysql" ? "server" : $vendor) . '") . "' . reset($drivers) . '"', $file, $count);
+       if ($project != "editor" && count(Adminer\SqlDriver::$drivers) == 1) {
+               $file = str_replace('html_select("auth[driver]", SqlDriver::$drivers, DRIVER, "loginDriver(this);")', 'input_hidden("auth[driver]", "' . ($vendor == "mysql" ? "server" : $vendor) . '") . "' . reset(Adminer\SqlDriver::$drivers) . '"', $file, $count);
                if (!$count) {
                        echo "auth[driver] form field not found\n";
                }
index 4cd8c3434d3337248564ad0378131af2a4bb2085..05aed6ba86d6e7525e6599d6cceab1a0daebd1f3 100644 (file)
@@ -10,7 +10,7 @@
 namespace Adminer;
 
 include "../adminer/include/bootstrap.inc.php";
-$drivers[DRIVER] = lang('Login');
+add_driver(DRIVER, lang('Login'));
 
 if (isset($_GET["select"]) && ($_POST["edit"] || $_POST["clone"]) && !$_POST["save"]) {
        $_GET["edit"] = $_GET["select"];
index d0fa8d8e6c2f2a7e4ab01dc542368ed5d7dbacc1..5b3051a47f13ff45cde8bd4486a1b87e862f99e3 100644 (file)
@@ -12,7 +12,7 @@ parameters:
                - identifier: includeOnce.fileNotFound # ./adminer-plugins.php
                - "~^Function (set_magic_quotes_runtime|mysql_)~" # PHP < 7 functions
                - "~an unknown class OCI-?Lob~" # this looks like PHPStan bug
-               - "~^Variable \\$(adminer|connection|driver|drivers|error|translations) might not be defined~" # declared in bootstrap.inc.php
+               - "~^Variable \\$(adminer|connection|driver|error|translations) might not be defined~" # declared in bootstrap.inc.php
                - "~^Constant LANG not found~" # defined in lang.inc.php
                - "~expects int, float given~" # this will work
                - "~expects bool~" # truthy values