Skip to content
Merged
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 88 additions & 0 deletions installation/src/Model/SetupModel.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,33 @@
*/
class SetupModel extends BaseInstallationModel
{
/**
* The minimum database server version for MariaDB databases as required by the CMS.
* This is not necessarily equal to what the database driver requires.
*
* @var string
* @since 4.0.0
*/
protected static $dbMinimumMariaDb = '10.1';

/**
* The minimum database server version for MySQL databases as required by the CMS.
* This is not necessarily equal to what the database driver requires.
*
* @var string
* @since 4.0.0
*/
protected static $dbMinimumMySql = '5.6';

/**
* The minimum database server version for PostgreSQL databases as required by the CMS.
* This is not necessarily equal to what the database driver requires.
*
* @var string
* @since 4.0.0
*/
protected static $dbMinimumPostgreSql = '11.0';

/**
* Get the current setup options from the session.
*
Expand Down Expand Up @@ -527,6 +554,67 @@ public function validateDbConnection()
return false;
}

$dbVersion = $db->getVersion();

// Get minimum database version required by the database driver
$minDbVersionRequired = $db->getMinimum();

// Get minimum database version required by the CMS
if (in_array($options->db_type, ['mysql', 'mysqli']))
{
if ($db->isMariaDb())
{
$minDbVersionCms = self::$dbMinimumMariaDb;
}
else
{
$minDbVersionCms = self::$dbMinimumMySql;
}
}
else
{
$minDbVersionCms = self::$dbMinimumPostgreSql;
}

// Use most restrictive minimum database version requirement
if (version_compare($minDbVersionCms, $minDbVersionRequired) > 0)
{
$minDbVersionRequired = $minDbVersionCms;
}

// Check minimum database version as required by the CMS
if (in_array($options->db_type, ['mysql', 'mysqli']) && $db->isMariaDb())
{
// MariaDB: Check with sanitized version string
if (version_compare(preg_replace('/^5\.5\.5-/', '', $dbVersion), $minDbVersionRequired) < 0)
Comment thread
richard67 marked this conversation as resolved.
Outdated
{
Factory::getApplication()->enqueueMessage(
Text::sprintf(
'INSTL_DATABASE_INVALID_MARIADB_VERSION',
$minDbVersionRequired,
$dbVersion
),
'error'
);

return false;
}
}
elseif (version_compare($dbVersion, $minDbVersionRequired) < 0)
{
Factory::getApplication()->enqueueMessage(
Text::sprintf(
'INSTL_DATABASE_INVALID_' . strtoupper($options->db_type) . '_VERSION',
$minDbVersionRequired,
$dbVersion
),
'error'
);

return false;
}

// Check database connection encryption
if ($options->db_encryption !== 0 && empty($db->getConnectionEncryption()))
{
if ($db->isConnectionEncryptionSupported())
Expand Down