From 0fb11194fa42f8026d976b66bda80334cf255891 Mon Sep 17 00:00:00 2001 From: Tobias Adolph <mail@tobiasadolph.de> Date: Mon, 22 Aug 2016 13:45:00 +0200 Subject: [PATCH] [TASK] Migrate ConfigurationStatus Resolves: #77578 Releases: master Change-Id: I34b678c2d23fe118a6d6f8b3dc50976b3e1b5fe6 Reviewed-on: https://review.typo3.org/49536 Reviewed-by: Morton Jonuschat <m.jonuschat@mojocode.de> Tested-by: Morton Jonuschat <m.jonuschat@mojocode.de> Tested-by: Bamboo TYPO3com <info@typo3.com> Reviewed-by: Georg Ringer <georg.ringer@gmail.com> Tested-by: Georg Ringer <georg.ringer@gmail.com> --- .../Report/Status/ConfigurationStatus.php | 54 +++++++++---------- .../Private/Language/locallang_reports.xlf | 4 +- 2 files changed, 28 insertions(+), 30 deletions(-) diff --git a/typo3/sysext/reports/Classes/Report/Status/ConfigurationStatus.php b/typo3/sysext/reports/Classes/Report/Status/ConfigurationStatus.php index 3800943d0802..eb669582df17 100644 --- a/typo3/sysext/reports/Classes/Report/Status/ConfigurationStatus.php +++ b/typo3/sysext/reports/Classes/Report/Status/ConfigurationStatus.php @@ -16,12 +16,12 @@ namespace TYPO3\CMS\Reports\Report\Status; use TYPO3\CMS\Backend\Utility\BackendUtility; use TYPO3\CMS\Core\Database\ConnectionPool; -use TYPO3\CMS\Core\Database\DatabaseConnection; use TYPO3\CMS\Core\Messaging\FlashMessage; use TYPO3\CMS\Core\Messaging\FlashMessageService; use TYPO3\CMS\Core\Registry; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\Utility\PathUtility; +use TYPO3\CMS\Core\Utility\StringUtility; use TYPO3\CMS\Lang\LanguageService; use TYPO3\CMS\Reports\Status as ReportStatus; use TYPO3\CMS\Reports\StatusProviderInterface; @@ -267,49 +267,55 @@ class ConfigurationStatus implements StatusProviderInterface } /** - * Verifies that MySQL is used. + * Checks if the default connection is a MySQL compatible database instance. * * @return bool */ protected function isMysqlUsed() { - return get_class($this->getDatabaseConnection()) == DatabaseConnection::class; + $connection = GeneralUtility::makeInstance(ConnectionPool::class) + ->getConnectionByName(ConnectionPool::DEFAULT_CONNECTION_NAME); + + return StringUtility::beginsWith($connection->getServerVersion(), 'MySQL'); } /** - * Checks the character set of the database and reports an error if it is not utf-8. + * Checks the character set of the default database and reports an error if it is not utf-8. * * @return ReportStatus */ protected function getMysqlDatabaseUtf8Status() { - $result = $this->getDatabaseConnection()->admin_query('SHOW VARIABLES LIKE "character_set_database"'); - $row = $this->getDatabaseConnection()->sql_fetch_assoc($result); - - $key = $row['Variable_name']; - $value = $row['Value']; + $connection = GeneralUtility::makeInstance(ConnectionPool::class) + ->getConnectionByName(ConnectionPool::DEFAULT_CONNECTION_NAME); + $queryBuilder = $connection->createQueryBuilder(); + $defaultDatabaseCharset = (string)$queryBuilder->select('DEFAULT_CHARACTER_SET_NAME') + ->from('information_schema.SCHEMATA') + ->where( + $queryBuilder->expr()->eq('SCHEMA_NAME', $queryBuilder->quote($connection->getDatabase())) + ) + ->setMaxResults(1) + ->execute() + ->fetchColumn(); - $message = ''; $severity = ReportStatus::OK; $statusValue = $this->getLanguageService()->getLL('status_ok'); - - if ($key !== 'character_set_database') { - $message = sprintf($this->getLanguageService()->getLL('status_MysqlDatabaseCharacterSet_CheckFailed'), $key); - $severity = ReportStatus::WARNING; - $statusValue = $this->getLanguageService()->getLL('status_checkFailed'); - } // also allow utf8mb4 - if (substr($value, 0, 4) !== 'utf8') { - $message = sprintf($this->getLanguageService()->getLL('status_MysqlDatabaseCharacterSet_Unsupported'), $value); + if (!StringUtility::beginsWith($defaultDatabaseCharset, 'utf8')) { + $message = sprintf($this->getLanguageService() + ->getLL('status_MysqlDatabaseCharacterSet_Unsupported'), $defaultDatabaseCharset); $severity = ReportStatus::ERROR; $statusValue = $this->getLanguageService()->getLL('status_wrongValue'); } else { $message = $this->getLanguageService()->getLL('status_MysqlDatabaseCharacterSet_Ok'); } - return GeneralUtility::makeInstance(ReportStatus::class, + return GeneralUtility::makeInstance( + ReportStatus::class, $this->getLanguageService()->getLL('status_MysqlDatabaseCharacterSet'), - $statusValue, $message, $severity + $statusValue, + $message, + $severity ); } @@ -362,12 +368,4 @@ class ConfigurationStatus implements StatusProviderInterface { return $GLOBALS['LANG']; } - - /** - * @return DatabaseConnection - */ - protected function getDatabaseConnection() - { - return $GLOBALS['TYPO3_DB']; - } } diff --git a/typo3/sysext/reports/Resources/Private/Language/locallang_reports.xlf b/typo3/sysext/reports/Resources/Private/Language/locallang_reports.xlf index ed3a68951fa5..10b5ea6a645e 100644 --- a/typo3/sysext/reports/Resources/Private/Language/locallang_reports.xlf +++ b/typo3/sysext/reports/Resources/Private/Language/locallang_reports.xlf @@ -109,10 +109,10 @@ <source>Checking database character set failed, got key "%1$s" instead of "character_set_database"</source> </trans-unit> <trans-unit id="status_MysqlDatabaseCharacterSet_Unsupported"> - <source>Your database uses character set "%1$s", but only "utf8" is supported with TYPO3.</source> + <source>Your default database uses character set "%1$s", but only "utf8" or "utf8mb4" is supported with TYPO3.</source> </trans-unit> <trans-unit id="status_MysqlDatabaseCharacterSet_Ok"> - <source>Your database uses utf-8. All good.</source> + <source>Your default database uses utf-8. All good.</source> </trans-unit> <trans-unit id="status_trustedHostsPattern"> <source>Trusted Hosts Pattern</source> -- GitLab