From f5daa01475fd90ed0093c86f79aae52a180c0f31 Mon Sep 17 00:00:00 2001 From: Stefan Neufeind <typo3.neufeind@speedpartner.de> Date: Fri, 1 Dec 2017 09:00:52 +0100 Subject: [PATCH] [CLEANUP] Add class-imports in Extbase Persistence classes This cleanup should ease backporting future patches in that area. Releases: master, 8.7, 7.6 Resolves: #83189 Change-Id: I42b700d2fd17beadc4a9b8e64e500f3d3b93fd1f Reviewed-on: https://review.typo3.org/54896 Reviewed-by: Markus Klein <markus.klein@typo3.org> Tested-by: Markus Klein <markus.klein@typo3.org> Tested-by: TYPO3com <no-reply@typo3.com> Reviewed-by: Benni Mack <benni@typo3.org> Tested-by: Benni Mack <benni@typo3.org> --- .../Generic/Storage/Typo3DbBackend.php | 89 ++++++++++++------- .../Generic/Storage/Typo3DbQueryParser.php | 47 ++++++---- .../Generic/Typo3QuerySettings.php | 10 ++- 3 files changed, 93 insertions(+), 53 deletions(-) diff --git a/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php b/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php index c7a77f2154ef..cc2166d6172a 100644 --- a/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php +++ b/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php @@ -17,6 +17,7 @@ namespace TYPO3\CMS\Extbase\Persistence\Generic\Storage; use Doctrine\DBAL\DBALException; use Doctrine\DBAL\Platforms\SQLServerPlatform; use TYPO3\CMS\Backend\Utility\BackendUtility; +use TYPO3\CMS\Core\Authentication\BackendUserAuthentication; use TYPO3\CMS\Core\Database\ConnectionPool; use TYPO3\CMS\Core\Database\Query\QueryBuilder; use TYPO3\CMS\Core\Database\Query\Restriction\FrontendRestrictionContainer; @@ -25,9 +26,17 @@ use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\Utility\MathUtility; use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; use TYPO3\CMS\Extbase\DomainObject\AbstractValueObject; +use TYPO3\CMS\Extbase\Object\ObjectManagerInterface; +use TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper; use TYPO3\CMS\Extbase\Persistence\Generic\Qom; +use TYPO3\CMS\Extbase\Persistence\Generic\QuerySettingsInterface; +use TYPO3\CMS\Extbase\Persistence\Generic\Storage\Exception\BadConstraintException; use TYPO3\CMS\Extbase\Persistence\Generic\Storage\Exception\SqlErrorException; use TYPO3\CMS\Extbase\Persistence\QueryInterface; +use TYPO3\CMS\Extbase\Service\CacheService; +use TYPO3\CMS\Extbase\Service\EnvironmentService; +use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController; +use TYPO3\CMS\Frontend\Page\PageRepository; /** * A Storage backend @@ -40,34 +49,34 @@ class Typo3DbBackend implements BackendInterface, SingletonInterface protected $connectionPool; /** - * @var \TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper + * @var DataMapper */ protected $dataMapper; /** * The TYPO3 page repository. Used for language and workspace overlay * - * @var \TYPO3\CMS\Frontend\Page\PageRepository + * @var PageRepository */ protected $pageRepository; /** - * @var \TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface + * @var ConfigurationManagerInterface */ protected $configurationManager; /** - * @var \TYPO3\CMS\Extbase\Service\CacheService + * @var CacheService */ protected $cacheService; /** - * @var \TYPO3\CMS\Extbase\Service\EnvironmentService + * @var EnvironmentService */ protected $environmentService; /** - * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface + * @var ObjectManagerInterface */ protected $objectManager; @@ -80,15 +89,15 @@ class Typo3DbBackend implements BackendInterface, SingletonInterface protected $hasPidColumn = []; /** - * @param \TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper $dataMapper + * @param DataMapper $dataMapper */ - public function injectDataMapper(\TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper $dataMapper) + public function injectDataMapper(DataMapper $dataMapper) { $this->dataMapper = $dataMapper; } /** - * @param \TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface $configurationManager + * @param ConfigurationManagerInterface $configurationManager */ public function injectConfigurationManager(ConfigurationManagerInterface $configurationManager) { @@ -96,25 +105,25 @@ class Typo3DbBackend implements BackendInterface, SingletonInterface } /** - * @param \TYPO3\CMS\Extbase\Service\CacheService $cacheService + * @param CacheService $cacheService */ - public function injectCacheService(\TYPO3\CMS\Extbase\Service\CacheService $cacheService) + public function injectCacheService(CacheService $cacheService) { $this->cacheService = $cacheService; } /** - * @param \TYPO3\CMS\Extbase\Service\EnvironmentService $environmentService + * @param EnvironmentService $environmentService */ - public function injectEnvironmentService(\TYPO3\CMS\Extbase\Service\EnvironmentService $environmentService) + public function injectEnvironmentService(EnvironmentService $environmentService) { $this->environmentService = $environmentService; } /** - * @param \TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager + * @param ObjectManagerInterface $objectManager */ - public function injectObjectManager(\TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager) + public function injectObjectManager(ObjectManagerInterface $objectManager) { $this->objectManager = $objectManager; } @@ -174,9 +183,9 @@ class Typo3DbBackend implements BackendInterface, SingletonInterface * @param string $tableName The database table name * @param array $fieldValues The row to be updated * @param bool $isRelation TRUE if we are currently inserting into a relation table, FALSE by default + * @return bool * @throws \InvalidArgumentException * @throws SqlErrorException - * @return bool */ public function updateRow($tableName, array $fieldValues, $isRelation = false) { @@ -218,9 +227,9 @@ class Typo3DbBackend implements BackendInterface, SingletonInterface * * @param string $tableName The database relation table name * @param array $fieldValues The row to be updated - * @throws \InvalidArgumentException * @return bool * @throws SqlErrorException + * @throws \InvalidArgumentException */ public function updateRelationTableRow($tableName, array $fieldValues) { @@ -246,8 +255,7 @@ class Typo3DbBackend implements BackendInterface, SingletonInterface } try { - $this->connectionPool->getConnectionForTable($tableName) - ->update($tableName, $fieldValues, $where); + $this->connectionPool->getConnectionForTable($tableName)->update($tableName, $fieldValues, $where); } catch (DBALException $e) { throw new SqlErrorException($e->getPrevious()->getMessage(), 1470230768); } @@ -438,14 +446,14 @@ class Typo3DbBackend implements BackendInterface, SingletonInterface * Returns the number of tuples matching the query. * * @param QueryInterface $query - * @throws Exception\BadConstraintException * @return int The number of matching tuples + * @throws BadConstraintException * @throws SqlErrorException */ public function getObjectCountByQuery(QueryInterface $query) { if ($query->getConstraint() instanceof Qom\Statement) { - throw new \TYPO3\CMS\Extbase\Persistence\Generic\Storage\Exception\BadConstraintException('Could not execute count on queries with a constraint of type TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Qom\\Statement', 1256661045); + throw new BadConstraintException('Could not execute count on queries with a constraint of type TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Qom\\Statement', 1256661045); } $queryParser = $this->objectManager->get(Typo3DbQueryParser::class); @@ -531,11 +539,11 @@ class Typo3DbBackend implements BackendInterface, SingletonInterface * * @param Qom\SourceInterface $source The source (selector od join) * @param array $rows - * @param \TYPO3\CMS\Extbase\Persistence\Generic\QuerySettingsInterface $querySettings The TYPO3 CMS specific query settings + * @param QuerySettingsInterface $querySettings The TYPO3 CMS specific query settings * @param int|null $workspaceUid * @return array */ - protected function doLanguageAndWorkspaceOverlay(Qom\SourceInterface $source, array $rows, \TYPO3\CMS\Extbase\Persistence\Generic\QuerySettingsInterface $querySettings, $workspaceUid = null) + protected function doLanguageAndWorkspaceOverlay(Qom\SourceInterface $source, array $rows, QuerySettingsInterface $querySettings, $workspaceUid = null) { if ($source instanceof Qom\SelectorInterface) { $tableName = $source->getSelectorName(); @@ -548,13 +556,13 @@ class Typo3DbBackend implements BackendInterface, SingletonInterface } $pageRepository = $this->getPageRepository(); - if (is_object($GLOBALS['TSFE'])) { + if (is_object($this->getTSFE())) { if ($workspaceUid !== null) { $pageRepository->versioningWorkspaceId = $workspaceUid; } } else { if ($workspaceUid === null) { - $workspaceUid = $GLOBALS['BE_USER']->workspace; + $workspaceUid = $this->getBeUser()->workspace; } $pageRepository->versioningWorkspaceId = $workspaceUid; } @@ -636,15 +644,15 @@ class Typo3DbBackend implements BackendInterface, SingletonInterface } /** - * @return \TYPO3\CMS\Frontend\Page\PageRepository + * @return PageRepository */ protected function getPageRepository() { - if (!$this->pageRepository instanceof \TYPO3\CMS\Frontend\Page\PageRepository) { - if ($this->environmentService->isEnvironmentInFrontendMode() && is_object($GLOBALS['TSFE'])) { - $this->pageRepository = $GLOBALS['TSFE']->sys_page; + if (!$this->pageRepository instanceof PageRepository) { + if ($this->environmentService->isEnvironmentInFrontendMode() && is_object($this->getTSFE())) { + $this->pageRepository = $this->getTSFE()->sys_page; } else { - $this->pageRepository = GeneralUtility::makeInstance(\TYPO3\CMS\Frontend\Page\PageRepository::class); + $this->pageRepository = GeneralUtility::makeInstance(PageRepository::class); } } @@ -681,6 +689,7 @@ class Typo3DbBackend implements BackendInterface, SingletonInterface $this->hasPidColumn[$tableName] = array_key_exists('pid', $columns); } + $tsfe = $this->getTSFE(); if ($this->hasPidColumn[$tableName]) { $queryBuilder = $this->connectionPool->getQueryBuilderForTable($tableName); $queryBuilder->getRestrictions()->removeAll(); @@ -698,9 +707,9 @@ class Typo3DbBackend implements BackendInterface, SingletonInterface $storagePage = $row['pid']; $pageIdsToClear[] = $storagePage; } - } elseif (isset($GLOBALS['TSFE'])) { + } elseif (isset($tsfe)) { // No PID column - we can do a best-effort to clear the cache of the current page if in FE - $storagePage = $GLOBALS['TSFE']->id; + $storagePage = $tsfe->id; $pageIdsToClear[] = $storagePage; } if ($storagePage === null) { @@ -722,4 +731,20 @@ class Typo3DbBackend implements BackendInterface, SingletonInterface $this->cacheService->getPageIdStack()->push($pageIdToClear); } } + + /** + * @return TypoScriptFrontendController|null + */ + protected function getTSFE() + { + return $GLOBALS['TSFE'] ?? null; + } + + /** + * @return BackendUserAuthentication|null + */ + protected function getBeUser() + { + return $GLOBALS['BE_USER'] ?? null; + } } diff --git a/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbQueryParser.php b/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbQueryParser.php index 6a101c6dce81..99fcb76483d8 100644 --- a/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbQueryParser.php +++ b/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbQueryParser.php @@ -22,15 +22,20 @@ use TYPO3\CMS\Core\Database\Query\Expression\ExpressionBuilder; use TYPO3\CMS\Core\Database\Query\QueryBuilder; use TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction; use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Persistence\Generic\Exception; use TYPO3\CMS\Extbase\Persistence\Generic\Exception\InconsistentQuerySettingsException; use TYPO3\CMS\Extbase\Persistence\Generic\Exception\InvalidRelationConfigurationException; use TYPO3\CMS\Extbase\Persistence\Generic\Exception\MissingColumnMapException; use TYPO3\CMS\Extbase\Persistence\Generic\Exception\RepositoryException; use TYPO3\CMS\Extbase\Persistence\Generic\Exception\UnsupportedOrderException; use TYPO3\CMS\Extbase\Persistence\Generic\Mapper\ColumnMap; +use TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper; use TYPO3\CMS\Extbase\Persistence\Generic\Qom; use TYPO3\CMS\Extbase\Persistence\Generic\QuerySettingsInterface; +use TYPO3\CMS\Extbase\Persistence\Generic\Storage\Exception\BadConstraintException; use TYPO3\CMS\Extbase\Persistence\QueryInterface; +use TYPO3\CMS\Extbase\Service\EnvironmentService; +use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController; use TYPO3\CMS\Frontend\Page\PageRepository; /** @@ -39,7 +44,7 @@ use TYPO3\CMS\Frontend\Page\PageRepository; class Typo3DbQueryParser { /** - * @var \TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper + * @var DataMapper */ protected $dataMapper; @@ -51,7 +56,7 @@ class Typo3DbQueryParser protected $pageRepository; /** - * @var \TYPO3\CMS\Extbase\Service\EnvironmentService + * @var EnvironmentService */ protected $environmentService; @@ -98,17 +103,17 @@ class Typo3DbQueryParser protected $suggestDistinctQuery = false; /** - * @param \TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper $dataMapper + * @param DataMapper $dataMapper */ - public function injectDataMapper(\TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper $dataMapper) + public function injectDataMapper(DataMapper $dataMapper) { $this->dataMapper = $dataMapper; } /** - * @param \TYPO3\CMS\Extbase\Service\EnvironmentService $environmentService + * @param EnvironmentService $environmentService */ - public function injectEnvironmentService(\TYPO3\CMS\Extbase\Service\EnvironmentService $environmentService) + public function injectEnvironmentService(EnvironmentService $environmentService) { $this->environmentService = $environmentService; } @@ -316,13 +321,13 @@ class Typo3DbQueryParser * @return string * @throws \RuntimeException * @throws RepositoryException - * @throws Exception\BadConstraintException + * @throws BadConstraintException */ protected function parseComparison(Qom\ComparisonInterface $comparison, Qom\SourceInterface $source) { if ($comparison->getOperator() === QueryInterface::OPERATOR_CONTAINS) { if ($comparison->getOperand2() === null) { - throw new Exception\BadConstraintException('The value for the CONTAINS operator must not be null.', 1484828468); + throw new BadConstraintException('The value for the CONTAINS operator must not be null.', 1484828468); } $value = $this->dataMapper->getPlainValue($comparison->getOperand2()); if (!$source instanceof Qom\SelectorInterface) { @@ -402,8 +407,8 @@ class Typo3DbQueryParser * @param Qom\ComparisonInterface $comparison * @param Qom\SourceInterface $source The source * @return string - * @throws \TYPO3\CMS\Extbase\Persistence\Generic\Exception - * @throws Exception\BadConstraintException + * @throws Exception + * @throws BadConstraintException */ protected function parseDynamicOperand(Qom\ComparisonInterface $comparison, Qom\SourceInterface $source) { @@ -423,7 +428,7 @@ class Typo3DbQueryParser } } if (!$hasValue) { - throw new Exception\BadConstraintException( + throw new BadConstraintException( 'The IN operator needs a non-empty value list to compare against. ' . 'The given value list is empty.', 1484828466 @@ -474,7 +479,7 @@ class Typo3DbQueryParser $expr = $exprBuilder->comparison($fieldName, 'LIKE', $placeHolder); break; default: - throw new \TYPO3\CMS\Extbase\Persistence\Generic\Exception( + throw new Exception( 'Unsupported operator encountered.', 1242816073 ); @@ -822,8 +827,8 @@ class Typo3DbQueryParser * @param string $tableName The database table name * @param string $tableAlias The table alias used in the query. * @param array $storagePageIds list of storage page ids - * @throws InconsistentQuerySettingsException * @return string + * @throws InconsistentQuerySettingsException */ protected function getPageIdStatement($tableName, $tableAlias, array $storagePageIds) { @@ -941,7 +946,7 @@ class Typo3DbQueryParser * @param string &$tableName The name of the parent table, will be set to the table alias that is used in the union statement. * @param string &$propertyPath The remaining property path, will be cut of by one part during the process. * @param string $fullPropertyPath The full path the the current property, will be used to make table names unique. - * @throws \TYPO3\CMS\Extbase\Persistence\Generic\Exception + * @throws Exception * @throws InvalidRelationConfigurationException * @throws MissingColumnMapException */ @@ -1036,7 +1041,7 @@ class Typo3DbQueryParser $this->unionTableAliasCache[] = $childTableAlias; $this->suggestDistinctQuery = true; } else { - throw new \TYPO3\CMS\Extbase\Persistence\Generic\Exception('Could not determine type of relation.', 1252502725); + throw new Exception('Could not determine type of relation.', 1252502725); } $propertyPath = $explodedPropertyPath[1]; $tableName = $childTableAlias; @@ -1075,8 +1080,8 @@ class Typo3DbQueryParser protected function getPageRepository() { if (!$this->pageRepository instanceof PageRepository) { - if ($this->environmentService->isEnvironmentInFrontendMode() && is_object($GLOBALS['TSFE'])) { - $this->pageRepository = $GLOBALS['TSFE']->sys_page; + if ($this->environmentService->isEnvironmentInFrontendMode() && is_object($this->getTSFE())) { + $this->pageRepository = $this->getTSFE()->sys_page; } else { $this->pageRepository = GeneralUtility::makeInstance(PageRepository::class); } @@ -1084,4 +1089,12 @@ class Typo3DbQueryParser return $this->pageRepository; } + + /** + * @return TypoScriptFrontendController|null + */ + protected function getTSFE() + { + return $GLOBALS['TSFE'] ?? null; + } } diff --git a/typo3/sysext/extbase/Classes/Persistence/Generic/Typo3QuerySettings.php b/typo3/sysext/extbase/Classes/Persistence/Generic/Typo3QuerySettings.php index 6fac09807103..bce03c19dc61 100644 --- a/typo3/sysext/extbase/Classes/Persistence/Generic/Typo3QuerySettings.php +++ b/typo3/sysext/extbase/Classes/Persistence/Generic/Typo3QuerySettings.php @@ -15,6 +15,8 @@ namespace TYPO3\CMS\Extbase\Persistence\Generic; */ use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; +use TYPO3\CMS\Extbase\Object\ObjectManager; /** * Query settings. This class is NOT part of the TYPO3.Flow API. @@ -96,10 +98,10 @@ class Typo3QuerySettings implements QuerySettingsInterface */ public function initializeObject() { - /** @var $objectManager \TYPO3\CMS\Extbase\Object\ObjectManager */ - $objectManager = GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Object\ObjectManager::class); - /** @var $configurationManager \TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface */ - $configurationManager = $objectManager->get(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::class); + /** @var $objectManager ObjectManager */ + $objectManager = GeneralUtility::makeInstance(ObjectManager::class); + /** @var $configurationManager ConfigurationManagerInterface */ + $configurationManager = $objectManager->get(ConfigurationManagerInterface::class); if (TYPO3_MODE === 'BE' && $configurationManager->isFeatureEnabled('ignoreAllEnableFieldsInBe')) { $this->setIgnoreEnableFields(true); } -- GitLab