.. _releases-14-0: ============= Releases 14.0 ============= Release 14.0.0 ============== This is a new major release for TYPO3 14 LTS. New in this release ------------------- .. note:: This section will be extended as features are finalized. Breaking Changes ---------------- Unified Site Hash Strategy ~~~~~~~~~~~~~~~~~~~~~~~~~~ Introduced in solr v13.1, and now implemented as default, the site hash strategy is now based on the site identifier and not on the domain anymore, making the site hash calculation more robust across sites with multiple domains. The extension configuration setting: `siteHashStrategy` has been removed without substitution. The PSR-14 event :php:`AfterDomainHasBeenDeterminedForSiteEvent` has been removed, as it has been superseded by :php:`AfterSiteHashHasBeenDeterminedForSiteEvent`. If you upgrade from < 13.1, it is recommended to re-index all solr cores completely. !!! QueueInitializationServiceAwareInterface and related Queue methods removed ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The interface :php:`ApacheSolrForTypo3\Solr\IndexQueue\QueueInitializationServiceAwareInterface` and its implementation in :php:`ApacheSolrForTypo3\Solr\IndexQueue\Queue` have been removed entirely. The following public API is gone: * :php:`Queue::setQueueInitializationService(QueueInitializationService $service): void` * :php:`Queue::getQueueInitializationService(): QueueInitializationService` * :php:`Queue::getInitializationService(): QueueInitializationService` (was already deprecated since v12) The :php:`QueueInitializationService` itself is not affected and continues to exist. Background """""""""" The interface was introduced as a workaround for a circular dependency: the :php:`QueueInitializationService` created :php:`Queue` instances and then injected itself back via :php:`setQueueInitializationService()`. In practice, the injected service was never used by :php:`Queue` internally, and :php:`getQueueInitializationService()` was only called in tests – never in production code. The pattern was obsolete. >>>>>>> ee5cc83d7 ([!!!][TASK] Remove QueueInitializationServiceAwareInterface and related Queue API) !!! DataUpdateHandler::removeFromIndexAndQueueWhenItemInQueue() removed ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The deprecated method :php:`DataUpdateHandler::removeFromIndexAndQueueWhenItemInQueue(string $recordTable, int $recordUid): void` has been removed. Use :php:`DataUpdateHandler::removeFromIndexAndQueue()` directly instead. Impact """""" **Code overriding** :php:`removeFromIndexAndQueueWhenItemInQueue()` or calling it from a subclass Replace every call to :php:`removeFromIndexAndQueueWhenItemInQueue()` with a direct call to :php:`removeFromIndexAndQueue()`. The queue-containment check that was part of the old method is not needed: :php:`removeFromIndexAndQueue()` / :php:`GarbageHandler::collectGarbage()` handle that case gracefully. !!! PageIndexer::isPageIndexable() removed ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The deprecated method :php:`PageIndexer::isPageIndexable(Item $item): bool` has been removed. Use :php:`PageIndexer::isPageEnabled(array $record): bool` instead. Impact """""" **Code overriding** :php:`isPageIndexable()` in a custom :php:`PageIndexer` subclass Rename method :php:`isPageIndexable` to :php:`isPageEnabled()` and adjust the signature to accept an array (the page record) instead of an :php:`Item` object: !!! RecordUpdatedEvent no longer covers record insertions – use RecordInsertedEvent ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A dedicated :php:`RecordInsertedEvent` has been introduced for record creations. The :php:`RecordUpdatedEvent` now only fires for updates; the deprecated :php:`$isNewRecord` property, its constructor parameter, and the :php:`isNewRecord()` method have been removed from :php:`RecordUpdatedEvent`. Previously :php:`RecordUpdatedEvent` was dispatched for both new records and updates, with :php:`isNewRecord()` acting as a flag to distinguish the two cases. In v14 these are two distinct events. Impact """""" **Listeners checking** :php:`$event->isNewRecord()` Register your listener for :php:`RecordInsertedEvent` to handle creations, and for :php:`RecordUpdatedEvent` to handle updates. Remove any :php:`isNewRecord()` checks: .. code-block:: yaml # Before – one listener covering both cases tags: - name: event.listener event: ApacheSolrForTypo3\Solr\Domain\Index\Queue\UpdateHandler\Events\RecordUpdatedEvent # After – separate registrations tags: - name: event.listener event: ApacheSolrForTypo3\Solr\Domain\Index\Queue\UpdateHandler\Events\RecordInsertedEvent - name: event.listener event: ApacheSolrForTypo3\Solr\Domain\Index\Queue\UpdateHandler\Events\RecordUpdatedEvent **Code instantiating** :php:`new RecordUpdatedEvent(..., isNewRecord: true)` Replace with :php:`new RecordInsertedEvent($uid, $table, $fields)`. All Changes ----------- Contributors ============ Like always this release would not have been possible without the help from our awesome community. Here are the contributors to this release. (patches, comments, bug reports, reviews, ... in alphabetical order) .. note:: Contributors will be listed here once the release is finalized. Also a big thank you to our partners who have already concluded one of our new development participation packages such as Apache Solr EB for TYPO3 14 LTS (Feature). How to Get Involved =================== There are many ways to get involved with Apache Solr for TYPO3: * Submit bug reports and feature requests on `GitHub `__ * Ask or help or answer questions in our `Slack channel `__ * Provide patches through Pull Request or review and comment on existing `Pull Requests `__ * Go to `www.typo3-solr.com `__ or call `dkd `__ to sponsor the ongoing development of Apache Solr for TYPO3 Support us by becoming an EB partner: https://shop.dkd.de/Produkte/Apache-Solr-fuer-TYPO3/ or call: +49 (0)69 - 2475218 0