aboutsummaryrefslogtreecommitdiffstats
path: root/includes/search
diff options
context:
space:
mode:
authordaniel <dkinzler@wikimedia.org>2024-09-01 13:49:27 +0200
committerdaniel <dkinzler@wikimedia.org>2024-11-22 12:39:25 +0100
commitd1e7660f1c62cccfddd4ec211fed5ed1d12bc624 (patch)
treef0875bad9429671b45f5f8e3c255335a4cd8605c /includes/search
parent84af03ba741dea4152c070dc7ad6812001b92d08 (diff)
downloadmediawikicore-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.php54
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();
+ }
+ }
+
+}