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 ' -
-
Are you really sure?
-
-

- 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. -

-
- - -
-
-
- '; - } -} diff --git a/Configuration/Services.php b/Configuration/Services.php index 1df7cb1163..12d879dd42 100644 --- a/Configuration/Services.php +++ b/Configuration/Services.php @@ -5,7 +5,6 @@ use GeorgRinger\News\Hooks\ItemsProcFunc; use GeorgRinger\News\Hooks\PluginPreviewRenderer; use GeorgRinger\News\Updates\NewsSlugUpdater; -use GeorgRinger\News\Updates\RealurlAliasNewsSlugUpdater; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; use TYPO3\CMS\Core\DependencyInjection\SingletonPass; @@ -14,12 +13,10 @@ $containerBuilder->registerForAutoconfiguration(ItemsProcFunc::class)->addTag('news.ItemsProcFunc'); $containerBuilder->registerForAutoconfiguration(PluginPreviewRenderer::class)->addTag('news.PageLayoutView'); $containerBuilder->registerForAutoconfiguration(NewsSlugUpdater::class)->addTag('news.NewsSlugUpdater'); - $containerBuilder->registerForAutoconfiguration(RealurlAliasNewsSlugUpdater::class)->addTag('news.RealurlAliasNewsSlugUpdater'); $containerBuilder->addCompilerPass(new SingletonPass('news.NewsFlexFormManipulation')); $containerBuilder->addCompilerPass(new SingletonPass('news.RecordListQueryHook')); $containerBuilder->addCompilerPass(new SingletonPass('news.ItemsProcFunc')); $containerBuilder->addCompilerPass(new SingletonPass('news.PageLayoutView')); $containerBuilder->addCompilerPass(new SingletonPass('news.NewsSlugUpdater')); - $containerBuilder->addCompilerPass(new SingletonPass('news.RealurlAliasNewsSlugUpdater')); }; diff --git a/Documentation/Administration/Migration/Index.rst b/Documentation/Administration/Migration/Index.rst index aba3dbbbd4..df796a5a0c 100644 --- a/Documentation/Administration/Migration/Index.rst +++ b/Documentation/Administration/Migration/Index.rst @@ -8,4 +8,3 @@ EXT:news provides a powerful import module which can be used to add news and cat :titlesonly: MigrationFromTtNews/Index - MigrationFromRealurl/Index diff --git a/Documentation/Administration/Migration/MigrationFromRealurl/Index.rst b/Documentation/Administration/Migration/MigrationFromRealurl/Index.rst deleted file mode 100644 index ed012e4ad6..0000000000 --- a/Documentation/Administration/Migration/MigrationFromRealurl/Index.rst +++ /dev/null @@ -1,37 +0,0 @@ -.. _migration_realurl_routing: - -=========================================== -Migration from realurl to news with routing -=========================================== - -This tutorial will describe to migrate realurl aliases to news path_segment. - -Requirements -============ - -- Installed extension news -- DB table tx_realurl_uniqalias (EXT:realurl not required to be installed) - -Migration -========= - -Migration of aliases --------------------- - -If a lot of similar titles are used it might be a good a idea to migrate the unique aliases from realurl to news path_segment to ensure that the same alias are used. - -Use Installtool Upgrade Wizard, where a wizard only appears, if missing slugs found between realurl and news. -Requires database table "tx_realurl_uniqalias" from EXT:realurl, but EXT:realurl requires not to be installed. - -This wizard migrates only matching realurl alias for news entries, where path_segment is empty, respecting language and expire date from realurl. - -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. -Therefore you should generate these slugs afterwards using the news slug updater wizard. - -Configure routing ------------------ - -Read the following chapter on :ref:`How to rewrite URLs with news parameters -`. diff --git a/Documentation/Index.rst b/Documentation/Index.rst index d737059524..4bebf34487 100755 --- a/Documentation/Index.rst +++ b/Documentation/Index.rst @@ -60,7 +60,7 @@ uses the latest technologies provided by TYPO3 CMS. .. card:: :ref:`Administration ` Install or upgrade EXT:news, learn how to migrate from EXT:tt_news - to news or from RealURL to Routes etc. + to news. .. card:: :ref:`Reference ` diff --git a/Documentation/Tutorials/BestPractice/Realurl/Index.rst b/Documentation/Tutorials/BestPractice/Realurl/Index.rst deleted file mode 100644 index c811af8b74..0000000000 --- a/Documentation/Tutorials/BestPractice/Realurl/Index.rst +++ /dev/null @@ -1,14 +0,0 @@ -:orphan: - -.. TODO: remove this section with the next major release of news - -.. _realurl: - -============================ -Replace RealURL with routing -============================ - -The extension EXT:realurl is outdated. Use the build-in -:ref:`TYPO3 routing ` to rewrite the urls instead. Read more about -:ref:`Migration from realurl to news with routing `. -