Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 18
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
SearchEventIngress
0.00% covered (danger)
0.00%
0 / 18
0.00% covered (danger)
0.00%
0 / 2
56
0.00% covered (danger)
0.00%
0 / 1
 handlePageLatestRevisionChangedEvent
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
42
 handlePageDeletedEvent
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace MediaWiki\Search;
4
5use MediaWiki\DomainEvent\DomainEventIngress;
6use MediaWiki\Page\Event\PageDeletedEvent;
7use MediaWiki\Page\Event\PageDeletedListener;
8use MediaWiki\Page\Event\PageLatestRevisionChangedEvent;
9use MediaWiki\Page\Event\PageLatestRevisionChangedListener;
10use MediaWiki\Revision\RevisionRecord;
11use MediaWiki\Revision\SlotRecord;
12
13/**
14 * The ingress adapter for the search component. It updates search related state
15 * according to domain events coming from other components.
16 *
17 * @internal
18 */
19class SearchEventIngress
20    extends DomainEventIngress
21    implements PageDeletedListener, PageLatestRevisionChangedListener
22{
23
24    /** Object spec intended for use with {@link DomainEventSource::registerSubscriber()} */
25    public const OBJECT_SPEC = [
26        'class' => self::class,
27        'services' => [],
28        'events' => [
29            PageLatestRevisionChangedEvent::TYPE,
30            PageDeletedEvent::TYPE,
31        ],
32    ];
33
34    /**
35     * Listener method for PageLatestRevisionChangedEvent, to be registered with a DomainEventSource.
36     *
37     * @noinspection PhpUnused
38     */
39    public function handlePageLatestRevisionChangedEvent( PageLatestRevisionChangedEvent $event ): void {
40        $newRevision = $event->getLatestRevisionAfter();
41        $mainSlot = $newRevision->isDeleted( RevisionRecord::DELETED_TEXT )
42            ? null : $newRevision->getSlot( SlotRecord::MAIN );
43
44        if (
45            $event->isModifiedSlot( SlotRecord::MAIN ) ||
46            $event->hasCause( PageLatestRevisionChangedEvent::CAUSE_MOVE ) ||
47            $event->isReconciliationRequest()
48        ) {
49            $update = new SearchUpdate(
50                $event->getPageId(),
51                $event->getPageRecordAfter(),
52                $mainSlot ? $mainSlot->getContent() : null
53            );
54
55            $update->doUpdate();
56        }
57    }
58
59    /**
60     * Listener method for PageDeletedEvent, to be registered with a DomainEventSource.
61     *
62     * @noinspection PhpUnused
63     */
64    public function handlePageDeletedEvent( PageDeletedEvent $event ): void {
65        $update = new SearchUpdate(
66            $event->getPageId(),
67            $event->getDeletedPage(),
68            null
69        );
70
71        $update->doUpdate();
72    }
73
74}