db->driverName, ['mysql', 'pgsql'])) { throw new UnsupportedDBMSException(); } } public static function CheckEnvironment() { if (self::NeedToCheckEnvironment()) { self::CheckPHP(); self::CheckDBMS(); } } public static function NeedToCheckEnvironment() { return getenv('ENABLE_ENVIRONMENT_CHECK') === 'true' || empty(getenv('ENABLE_ENVIRONMENT_CHECK')); } public static function NeedToCheckMigrations() { if (defined('PORTAL_CONSOLE_INSTALLATION')) { return false; } return getenv('ENABLE_MIGRATIONS_CHECK') === 'true' || empty(getenv('ENABLE_MIGRATIONS_CHECK')); } public static function GetDatabaseVersion() { return (new \yii\db\Query) ->select('version') ->from(static::$portalDatabaseVersionTable) ->orderBy(static::GetOrderByString()) ->limit(1) ->scalar(); } private static function GetOrderByString() { $initial = "updated_at DESC, "; for ($i = 0; $i < EnvironmentManager::SUBVERSION_COUNT; $i++) { $initial .= 'subversion' . ($i + 1) . ' DESC, '; } $initial .= 'version DESC'; return $initial; } public static function GetMigrationsApplyingStatus() { $dbVersion = null; try { $dbVersion = self::GetDatabaseVersion(); } catch (\yii\db\Exception $e) { Yii::error($e->getMessage()); } return [$dbVersion == Yii::$app->version, empty($dbVersion) ? 'не определено' : $dbVersion, Yii::$app->version]; } public static function EnsureMigrationsApplied() { [$state, $system_version, $portal_version] = EnvironmentManager::GetMigrationsApplyingStatus(); if (!$state) { throw new MigrationsNotAppliedException( Yii::t("backend", "Обратитесь к администратору. Различаются версии базы данных ({$system_version}) и портала ({$portal_version})") ); } } }