diff --git a/Classes/Service/SlugService.php b/Classes/Service/SlugService.php index a90a3defd7..ccbaaedcfc 100644 --- a/Classes/Service/SlugService.php +++ b/Classes/Service/SlugService.php @@ -124,168 +124,4 @@ protected function getUniqueCountStatement(int $uid, int $languageId, string $sl $queryBuilder->expr()->neq('uid', $queryBuilder->createPositionalParameter($uid, Connection::PARAM_INT)) ); } - - /** - * Count valid entries from EXT:realurl table tx_realurl_uniqalias which can be migrated - * Checks also for existance of third party extension table 'tx_realurl_uniqalias' - * EXT:realurl requires not to be installed - */ - public function countOfRealurlAliasMigrations(): int - { - $elementCount = 0; - // Check if table 'tx_realurl_uniqalias' exists - $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class) - ->getQueryBuilderForTable('tx_realurl_uniqalias'); - - if ((new (Typo3Version::class))->getVersion() >= 13) { - $schemaManager = $queryBuilder->getConnection()->createSchemaManager(); - } else { - $schemaManager = $queryBuilder->getConnection()->getSchemaManager(); - } - if ($schemaManager && $schemaManager->tablesExist(['tx_realurl_uniqalias']) === true) { - // Count valid aliases for news - $queryBuilder->getRestrictions()->removeAll(); - $elementCount = $queryBuilder->selectLiteral('COUNT(DISTINCT tx_news_domain_model_news.uid)') - ->from('tx_realurl_uniqalias') - ->join( - 'tx_realurl_uniqalias', - 'tx_news_domain_model_news', - 'tx_news_domain_model_news', - $queryBuilder->expr()->eq( - 'tx_realurl_uniqalias.value_id', - $queryBuilder->quoteIdentifier('tx_news_domain_model_news.uid') - ) - ) - ->where( - $queryBuilder->expr()->and( - $queryBuilder->expr()->or( - $queryBuilder->expr()->eq( - 'tx_news_domain_model_news.path_segment', - $queryBuilder->createNamedParameter('', Connection::PARAM_STR) - ), - $queryBuilder->expr()->isNull('tx_news_domain_model_news.path_segment') - ), - $queryBuilder->expr()->eq( - 'tx_news_domain_model_news.sys_language_uid', - 'tx_realurl_uniqalias.lang' - ), - $queryBuilder->expr()->eq( - 'tx_realurl_uniqalias.tablename', - $queryBuilder->createNamedParameter('tx_news_domain_model_news', Connection::PARAM_STR) - ), - $queryBuilder->expr()->or( - $queryBuilder->expr()->eq( - 'tx_realurl_uniqalias.expire', - $queryBuilder->createNamedParameter(0, Connection::PARAM_INT) - ), - $queryBuilder->expr()->gte( - 'tx_realurl_uniqalias.expire', - $queryBuilder->createNamedParameter(GeneralUtility::makeInstance(Context::class)->getPropertyFromAspect('date', 'timestamp'), Connection::PARAM_INT) - ) - ) - ) - ) - ->executeQuery()->fetchOne(); - } - return $elementCount; - } - - /** - * Perform migration of EXT:realurl unique alias into empty news slugs - */ - public function performRealurlAliasMigration(): array - { - $databaseQueries = []; - - // Check if table 'tx_realurl_uniqalias' exists - $queryBuilderForRealurl = GeneralUtility::makeInstance(ConnectionPool::class) - ->getQueryBuilderForTable('tx_realurl_uniqalias'); - if ((new (Typo3Version::class))->getVersion() >= 13) { - $schemaManager = $queryBuilderForRealurl->getConnection()->createSchemaManager(); - } else { - $schemaManager = $queryBuilderForRealurl->getConnection()->getSchemaManager(); - } - if ($schemaManager && $schemaManager->tablesExist(['tx_realurl_uniqalias']) === true) { - /** @var Connection $connection */ - $connection = GeneralUtility::makeInstance(ConnectionPool::class) - ->getConnectionForTable('tx_news_domain_model_news'); - $queryBuilder = $connection->createQueryBuilder(); - - // Get entries to update - $statement = $queryBuilder - ->selectLiteral( - 'DISTINCT tx_news_domain_model_news.uid, tx_realurl_uniqalias.value_alias, tx_news_domain_model_news.uid, tx_news_domain_model_news.l10n_parent,tx_news_domain_model_news.sys_language_uid' - ) - ->from('tx_news_domain_model_news') - ->join( - 'tx_news_domain_model_news', - 'tx_realurl_uniqalias', - 'tx_realurl_uniqalias', - $queryBuilder->expr()->or( - $queryBuilder->expr()->eq( - 'tx_news_domain_model_news.uid', - $queryBuilder->quoteIdentifier('tx_realurl_uniqalias.value_id') - ), - $queryBuilder->expr()->and( - $queryBuilder->expr()->eq( - 'tx_news_domain_model_news.l10n_parent', - $queryBuilder->quoteIdentifier('tx_realurl_uniqalias.value_id') - ), - $queryBuilder->expr()->eq( - 'tx_news_domain_model_news.sys_language_uid', - $queryBuilder->quoteIdentifier('tx_realurl_uniqalias.lang') - ) - ) - ) - ) - ->where( - $queryBuilder->expr()->and( - $queryBuilder->expr()->or( - $queryBuilder->expr()->eq( - 'tx_news_domain_model_news.path_segment', - $queryBuilder->createNamedParameter('', Connection::PARAM_STR) - ), - $queryBuilder->expr()->isNull('tx_news_domain_model_news.path_segment') - ), - $queryBuilder->expr()->eq( - 'tx_news_domain_model_news.sys_language_uid', - 'tx_realurl_uniqalias.lang' - ), - $queryBuilder->expr()->eq( - 'tx_realurl_uniqalias.tablename', - $queryBuilder->createNamedParameter('tx_news_domain_model_news', Connection::PARAM_STR) - ), - $queryBuilder->expr()->or( - $queryBuilder->expr()->eq( - 'tx_realurl_uniqalias.expire', - $queryBuilder->createNamedParameter(0, Connection::PARAM_INT) - ), - $queryBuilder->expr()->gte( - 'tx_realurl_uniqalias.expire', - $queryBuilder->createNamedParameter(GeneralUtility::makeInstance(Context::class)->getPropertyFromAspect('date', 'timestamp'), Connection::PARAM_INT) - ) - ) - ) - ) - ->executeQuery(); - - // Update entries - while ($record = $statement->fetchAssociative()) { - $slug = $this->slugService->sanitize((string)$record['value_alias']); - $queryBuilder = $connection->createQueryBuilder(); - $queryBuilder->update('tx_news_domain_model_news') - ->where( - $queryBuilder->expr()->eq( - 'uid', - $queryBuilder->createNamedParameter($record['uid'], Connection::PARAM_INT) - ) - ) - ->set('path_segment', $this->getUniqueValue($record['uid'], $record['sys_language_uid'], $slug)); - $databaseQueries[] = $queryBuilder->getSQL(); - $queryBuilder->executeStatement(); - } - } - - return $databaseQueries; - } } diff --git a/Classes/Updates/RealurlAliasNewsSlugUpdater.php b/Classes/Updates/RealurlAliasNewsSlugUpdater.php deleted file mode 100644 index 91d700bcf3..0000000000 --- a/Classes/Updates/RealurlAliasNewsSlugUpdater.php +++ /dev/null @@ -1,136 +0,0 @@ -slugService = $slugService; - } - - public function executeUpdate(): bool - { - // user decided to migrate, migrate and mark wizard as done - $this->slugService->performRealurlAliasMigration(); - - return true; - } - - public function updateNecessary(): bool - { - $updateNeeded = false; - $elementCount = $this->slugService->countOfRealurlAliasMigrations(); - if ($elementCount > 0) { - $updateNeeded = true; - } - return $updateNeeded; - } - - /** - * @return string[] All new fields and tables must exist - */ - public function getPrerequisites(): array - { - return [ - DatabaseUpdatedPrerequisite::class, - ]; - } - - public function getTitle(): string - { - return '[Optional] Migrate realurl alias to slug field "path_segment" of EXT:news records'; - } - - /** - * @return string Longer description of this updater - */ - public function getDescription(): string - { - return 'Migrates EXT:realurl unique alias values into empty slug field "path_segment" of EXT:news records.'; - } - - /** - * Second step: Ask user to install the extensions - * - * @param string $inputPrefix input prefix, all names of form fields have to start with this. Append custom name in [ ... ] - * @return string HTML output - */ - public function getUserInput($inputPrefix): string - { - return ' -
- You can migrate EXT:realurl unique alias into news slugs, - to ensure that the same alias is used if similar news titles are used. -
-- This wizard migrates only matching realurl alias for news entries, where path_segment is empty. - Requires database table "tx_realurl_uniqalias" from EXT:realurl, but EXT:realurl requires not to be installed. -
-- Cause only empty news slugs will be generated within this migration, - you may decide to empty all news slugs before. -
-- The result of this migration can still left empty slugs fields for news entries. - Therfore you should generate these slugs afterwards using the news slug upater wizard. -
-