diff --git a/phpBB/composer.json b/phpBB/composer.json index c75912664b..5d22124815 100644 --- a/phpBB/composer.json +++ b/phpBB/composer.json @@ -37,7 +37,7 @@ "composer/composer": "^2.0", "composer/installers": "^1.9", "composer/package-versions-deprecated": "^1.11", - "doctrine/dbal": "~3.3.6", + "doctrine/dbal": "^3.9", "google/recaptcha": "~1.1", "guzzlehttp/guzzle": " ^7.0", "marc1706/fast-image-size": "^1.1", diff --git a/phpBB/composer.lock b/phpBB/composer.lock index a353e9409b..82f7b03717 100644 --- a/phpBB/composer.lock +++ b/phpBB/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "5ed4369e5ba29297443f428dd3001fae", + "content-hash": "39f3a7c03ba85a8c7892e5c076372eb0", "packages": [ { "name": "bantu/ini-get-wrapper", @@ -1171,38 +1171,38 @@ }, { "name": "doctrine/dbal", - "version": "3.3.8", + "version": "3.9.4", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "f873a820227bc352d023791775a01f078a30dfe1" + "reference": "ec16c82f20be1a7224e65ac67144a29199f87959" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/f873a820227bc352d023791775a01f078a30dfe1", - "reference": "f873a820227bc352d023791775a01f078a30dfe1", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/ec16c82f20be1a7224e65ac67144a29199f87959", + "reference": "ec16c82f20be1a7224e65ac67144a29199f87959", "shasum": "" }, "require": { "composer-runtime-api": "^2", "doctrine/cache": "^1.11|^2.0", "doctrine/deprecations": "^0.5.3|^1", - "doctrine/event-manager": "^1.0", - "php": "^7.3 || ^8.0", + "doctrine/event-manager": "^1|^2", + "php": "^7.4 || ^8.0", "psr/cache": "^1|^2|^3", "psr/log": "^1|^2|^3" }, "require-dev": { - "doctrine/coding-standard": "9.0.0", - "jetbrains/phpstorm-stubs": "2022.1", - "phpstan/phpstan": "1.8.2", - "phpstan/phpstan-strict-rules": "^1.3", - "phpunit/phpunit": "9.5.21", - "psalm/plugin-phpunit": "0.17.0", - "squizlabs/php_codesniffer": "3.7.1", - "symfony/cache": "^5.2|^6.0", - "symfony/console": "^2.7|^3.0|^4.0|^5.0|^6.0", - "vimeo/psalm": "4.24.0" + "doctrine/coding-standard": "12.0.0", + "fig/log-test": "^1", + "jetbrains/phpstorm-stubs": "2023.1", + "phpstan/phpstan": "2.1.1", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "9.6.22", + "slevomat/coding-standard": "8.13.1", + "squizlabs/php_codesniffer": "3.10.2", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/console": "^4.4|^5.4|^6.0|^7.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -1262,7 +1262,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.3.8" + "source": "https://github.com/doctrine/dbal/tree/3.9.4" }, "funding": [ { @@ -1278,7 +1278,7 @@ "type": "tidelift" } ], - "time": "2022-08-05T15:35:35+00:00" + "time": "2025-01-16T08:28:55+00:00" }, { "name": "doctrine/deprecations", diff --git a/phpBB/language/en/install.php b/phpBB/language/en/install.php index 9a73b76c42..0d37cf5bb4 100644 --- a/phpBB/language/en/install.php +++ b/phpBB/language/en/install.php @@ -70,11 +70,11 @@ $lang = array_merge($lang, array(

phpBB3 supports the following databases:

@@ -184,9 +184,9 @@ $lang = array_merge($lang, array( 'TABLE_PREFIX_EXPLAIN' => 'The prefix must start with a letter and must only contain letters, numbers and underscores.', // Database options - 'DB_OPTION_MSSQL_ODBC' => 'MSSQL Server 2000+ via ODBC', - 'DB_OPTION_MSSQLNATIVE' => 'MSSQL Server 2005+ [ Native ]', - 'DB_OPTION_MYSQLI' => 'MySQL with MySQLi Extension', + 'DB_OPTION_MSSQL_ODBC' => 'MSSQL Server via ODBC', + 'DB_OPTION_MSSQLNATIVE' => 'MSSQL Server [ Native ]', + 'DB_OPTION_MYSQLI' => 'MySQL', 'DB_OPTION_ORACLE' => 'Oracle', 'DB_OPTION_POSTGRES' => 'PostgreSQL', 'DB_OPTION_SQLITE3' => 'SQLite 3', @@ -202,10 +202,12 @@ $lang = array_merge($lang, array( 'INST_ERR_DB_NO_WRITABLE' => 'Both the database and the directory containing it must be writable.', 'INST_ERR_DB_NO_ERROR' => 'No error message given.', 'INST_ERR_PREFIX' => 'Tables with the specified prefix already exist, please choose an alternative.', - 'INST_ERR_DB_NO_MYSQLI' => 'The version of MySQL installed on this machine is incompatible with the “MySQL with MySQLi Extension” option you have selected. Please try the “MySQL” option instead.', - 'INST_ERR_DB_NO_SQLITE3' => 'The version of the SQLite extension you have installed is too old, it must be upgraded to at least 3.6.15.', - 'INST_ERR_DB_NO_ORACLE' => 'The version of Oracle installed on this machine requires you to set the NLS_CHARACTERSET parameter to UTF8. Either upgrade your installation to 9.2+ or change the parameter.', - 'INST_ERR_DB_NO_POSTGRES' => 'The database you have selected was not created in UNICODE or UTF8 encoding. Try installing with a database in UNICODE or UTF8 encoding.', + 'INST_ERR_DB_NO_MYSQLI' => 'The version of MySQL installed on this machine is too old, it must be upgraded to at least 5.6.', + 'INST_ERR_DB_NO_MSSQL' => 'The version of Microsoft SQL Server installed on this machine is too old, it must be upgraded to at least SQL Server 2012 (11.0.2100.60)', + 'INST_ERR_DB_NO_SQLITE3' => 'The version of the SQLite extension you have installed is too old, it must be upgraded to at least 3.8.3.', + 'INST_ERR_DB_NO_ORACLE' => 'The version of Oracle installed is too old, it must be upgraded to at least 12.1.0.2.', + 'INST_ERR_DB_NO_POSTGRES' => 'The version of the PostgreSQL you have installed is too old, it must be upgraded to at least 9.4.', + 'INST_ERR_DB_NO_POSTGRES_UTF8' => 'The database you have selected was not created in UNICODE or UTF8 encoding. Try installing with a database in UNICODE or UTF8 encoding.', 'INST_SCHEMA_FILE_NOT_WRITABLE' => 'The schema file is not writable', // diff --git a/phpBB/phpbb/db/doctrine/connection_parameter_factory.php b/phpBB/phpbb/db/doctrine/connection_parameter_factory.php index 95aa0c189c..740c4b82b7 100644 --- a/phpBB/phpbb/db/doctrine/connection_parameter_factory.php +++ b/phpBB/phpbb/db/doctrine/connection_parameter_factory.php @@ -79,7 +79,7 @@ class connection_parameter_factory string|null $name = null, string|null $port = null) : array { - if ($params['driver'] === 'pdo_sqlite') + if (in_array($params['driver'], ['pdo_sqlite', 'sqlite3'])) { return self::enrich_parameters( self::build_sqlite_parameters($params, $host, $user, $password) diff --git a/phpBB/phpbb/db/driver/sqlite3.php b/phpBB/phpbb/db/driver/sqlite3.php index b2db70852b..2c74666d26 100644 --- a/phpBB/phpbb/db/driver/sqlite3.php +++ b/phpBB/phpbb/db/driver/sqlite3.php @@ -15,7 +15,7 @@ namespace phpbb\db\driver; /** * SQLite3 Database Abstraction Layer -* Minimum Requirement: 3.6.15+ +* Minimum Requirement: 3.8.3+ */ class sqlite3 extends \phpbb\db\driver\driver { diff --git a/phpBB/phpbb/db/tools/doctrine.php b/phpBB/phpbb/db/tools/doctrine.php index bd3f71f83a..63de0c8832 100644 --- a/phpBB/phpbb/db/tools/doctrine.php +++ b/phpBB/phpbb/db/tools/doctrine.php @@ -478,7 +478,7 @@ class doctrine implements tools_interface catch (Exception $e) { // @todo: check if it makes sense to properly handle the exception - return false; + return $e->getMessage(); } } diff --git a/phpBB/phpbb/install/helper/database.php b/phpBB/phpbb/install/helper/database.php index 55a938de9e..5b1e74a807 100644 --- a/phpBB/phpbb/install/helper/database.php +++ b/phpBB/phpbb/install/helper/database.php @@ -39,7 +39,7 @@ class database // Note: php 5.5 alpha 2 deprecated mysql. // Keep mysqli before mysql in this list. 'mysqli' => array( - 'LABEL' => 'MySQL with MySQLi Extension', + 'LABEL' => 'MySQL', 'SCHEMA' => 'mysql_41', 'MODULE' => 'mysqli', 'DOCTRINE' => ['pdo_mysql'], @@ -59,7 +59,7 @@ class database '2.0.x' => true, ), 'mssqlnative' => array( - 'LABEL' => 'MS SQL Server 2005+ [ Native ]', + 'LABEL' => 'MS SQL Server [ Native ]', 'SCHEMA' => 'mssql', 'MODULE' => 'sqlsrv', 'DOCTRINE' => ['pdo_sqlsrv'], @@ -78,7 +78,7 @@ class database '2.0.x' => false, ), 'postgres' => array( - 'LABEL' => 'PostgreSQL 8.3+', + 'LABEL' => 'PostgreSQL', 'SCHEMA' => 'postgres', 'MODULE' => 'pgsql', 'DOCTRINE' => ['pdo_pgsql'], @@ -405,10 +405,20 @@ class database } // Check if database version is supported + /** @psalm-suppress UndefinedInterfaceMethod */ + $db_server_version = $doctrine_db->getWrappedConnection()->getServerVersion(); switch ($dbms) { + case 'mysqli': + if (version_compare($db_server_version, '5.6', '<')) + { + $errors[] = array( + 'title' => 'INST_ERR_DB_NO_MYSQLI', + ); + } + break; case 'sqlite3': - if (version_compare($db->sql_server_info(true), '3.6.15', '<')) + if (version_compare($db_server_version, '3.8.3', '<')) { $errors[] = array( 'title' => 'INST_ERR_DB_NO_SQLITE3', @@ -416,20 +426,7 @@ class database } break; case 'oracle': - $sql = "SELECT * - FROM NLS_DATABASE_PARAMETERS - WHERE PARAMETER = 'NLS_RDBMS_VERSION' - OR PARAMETER = 'NLS_CHARACTERSET'"; - $result = $db->sql_query($sql); - - $stats = []; - while ($row = $db->sql_fetchrow($result)) - { - $stats[$row['parameter']] = $row['value']; - } - $db->sql_freeresult($result); - - if (version_compare($stats['NLS_RDBMS_VERSION'], '9.2', '<') && $stats['NLS_CHARACTERSET'] !== 'UTF8') + if (version_compare($db_server_version, '12.1.0.2', '<')) { $errors[] = array( 'title' => 'INST_ERR_DB_NO_ORACLE', @@ -437,17 +434,35 @@ class database } break; case 'postgres': - $sql = "SHOW server_encoding;"; - $result = $db->sql_query($sql); - $row = $db->sql_fetchrow($result); - $db->sql_freeresult($result); - - if ($row['server_encoding'] !== 'UNICODE' && $row['server_encoding'] !== 'UTF8') + if (version_compare($db_server_version, '9.4', '<')) { $errors[] = array( 'title' => 'INST_ERR_DB_NO_POSTGRES', ); } + else + { + $sql = "SHOW server_encoding;"; + $result = $db->sql_query($sql); + $row = $db->sql_fetchrow($result); + $db->sql_freeresult($result); + + if ($row['server_encoding'] !== 'UNICODE' && $row['server_encoding'] !== 'UTF8') + { + $errors[] = array( + 'title' => 'INST_ERR_DB_NO_POSTGRES_UTF8', + ); + } + } + break; + case 'mssqlnative': + case 'mssql_odbc': + if (version_compare($db_server_version, '11.0.2100.60', '<')) + { + $errors[] = array( + 'title' => 'INST_ERR_DB_NO_MSSQL', + ); + } break; } }