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
 handlePageRevisionUpdatedEvent
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
42
 handlePageDeletedEventAfterCommit
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\EventSubscriberBase;
6use MediaWiki\Page\Event\PageDeletedEvent;
7use MediaWiki\Page\Event\PageRevisionUpdatedEvent;
8use MediaWiki\Revision\RevisionRecord;
9use MediaWiki\Revision\SlotRecord;
10
11/**
12 * The ingress adapter for the search component. It updates search related state
13 * according to domain events coming from other components.
14 *
15 * @internal
16 */
17class SearchEventIngress extends EventSubscriberBase {
18
19    /** Object spec intended for use with {@link DomainEventSource::registerSubscriber()} */
20    public const OBJECT_SPEC = [
21        'class' => self::class,
22        'services' => [],
23        'events' => [
24            PageRevisionUpdatedEvent::TYPE,
25            PageDeletedEvent::TYPE,
26        ],
27    ];
28
29    /**
30     * Listener method for PageRevisionUpdatedEvent, to be registered with a DomainEventSource.
31     *
32     * @noinspection PhpUnused
33     */
34    public function handlePageRevisionUpdatedEvent( PageRevisionUpdatedEvent $event ) {
35        $newRevision = $event->getNewRevision();
36        $mainSlot = $newRevision->isDeleted( RevisionRecord::DELETED_TEXT )
37            ? null : $newRevision->getSlot( SlotRecord::MAIN );
38
39        if (
40            $event->isModifiedSlot( SlotRecord::MAIN ) ||
41            $event->hasCause( PageRevisionUpdatedEvent::CAUSE_MOVE ) ||
42            $event->isReconciliationRequest()
43        ) {
44            $update = new SearchUpdate(
45                $event->getPage()->getId(),
46                $event->getPage(),
47                $mainSlot ? $mainSlot->getContent() : null
48            );
49
50            $update->doUpdate();
51        }
52    }
53
54    /**
55     * Listener method for PageDeletedEvent, to be registered with a DomainEventSource.
56     *
57     * @noinspection PhpUnused
58     */
59    public function handlePageDeletedEventAfterCommit( PageDeletedEvent $event ) {
60        $update = new SearchUpdate(
61            $event->getPageStateBefore()->getId(),
62            $event->getPage(),
63            null
64        );
65
66        $update->doUpdate();
67    }
68
69}