diff options
author | daniel <dkinzler@wikimedia.org> | 2024-09-01 13:49:27 +0200 |
---|---|---|
committer | daniel <dkinzler@wikimedia.org> | 2024-11-22 12:39:25 +0100 |
commit | d1e7660f1c62cccfddd4ec211fed5ed1d12bc624 (patch) | |
tree | f0875bad9429671b45f5f8e3c255335a4cd8605c /includes/search | |
parent | 84af03ba741dea4152c070dc7ad6812001b92d08 (diff) | |
download | mediawikicore-d1e7660f1c62cccfddd4ec211fed5ed1d12bc624.tar.gz mediawikicore-d1e7660f1c62cccfddd4ec211fed5ed1d12bc624.zip |
DomainEventEmitter: migrate logic from DerivedDataUpdater
Migrates the following updates from DerivedDataUpdater to ServiceWiring:
- SearchUpdate
- MessageCache
Bug: T378936
Change-Id: Ice7651900423e25f8c907c9f4c5e47085ef9edf0
Diffstat (limited to 'includes/search')
-rw-r--r-- | includes/search/SearchEventIngress.php | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/includes/search/SearchEventIngress.php b/includes/search/SearchEventIngress.php new file mode 100644 index 000000000000..fb275299c0c4 --- /dev/null +++ b/includes/search/SearchEventIngress.php @@ -0,0 +1,54 @@ +<?php + +namespace MediaWiki\Search; + +use MediaWiki\Deferred\SearchUpdate; +use MediaWiki\DomainEvent\EventSubscriberBase; +use MediaWiki\Revision\RevisionRecord; +use MediaWiki\Revision\SlotRecord; +use MediaWiki\Storage\PageUpdatedEvent; + +/** + * The ingres adapter for the search component. It updates search related state + * according to domain events coming from other components. + * + * @internal + */ +class SearchEventIngress extends EventSubscriberBase { + + /** Object spec intented for use with {@link DomainEventSource::registerSubscriber()} */ + public const OBJECT_SPEC = [ + 'class' => self::class, + 'services' => [], + 'events' => [ + PageUpdatedEvent::TYPE + ], + ]; + + /** + * Listener method for PageUpdatedEvent, to be registered with a DomainEventSource. + * + * @noinspection PhpUnused + */ + public function handlePageUpdatedEventAfterCommit( PageUpdatedEvent $event ) { + $newRevision = $event->getNewRevision(); + $mainSlot = $newRevision->getSlot( SlotRecord::MAIN ); + if ( + !$mainSlot->isInherited() && + !$newRevision->isDeleted( RevisionRecord::DELETED_TEXT ) + ) { + // NOTE: no need to go through DeferredUpdates, + // we are already deferred. + $update = new SearchUpdate( + $event->getPage()->getId(), + $event->getPage(), + $mainSlot->getContent() + ); + + // No need to schedule a DeferredUpdate, listeners use deferred + // delivery anyway. + $update->doUpdate(); + } + } + +} |