Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
LanguageEventIngress
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 3
72
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 handlePageLatestRevisionChangedEvent
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
30
 handlePageDeletedEvent
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3namespace MediaWiki\Language;
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\SlotRecord;
11
12/**
13 * The ingress adapter for the language component. It updates language related
14 * state according to domain events coming from other components.
15 *
16 * @internal
17 */
18class LanguageEventIngress
19    extends DomainEventIngress
20    implements PageDeletedListener, PageLatestRevisionChangedListener
21{
22    /** Object spec intended for use with {@link DomainEventSource::registerSubscriber()} */
23    public const OBJECT_SPEC = [
24        'class' => self::class,
25        'services' => [
26            'MessageCache'
27        ],
28        'events' => [
29            PageLatestRevisionChangedEvent::TYPE,
30            PageDeletedEvent::TYPE
31        ],
32    ];
33
34    public function __construct( private readonly MessageCache $messageCache ) {
35    }
36
37    /**
38     * Listener method for PageLatestRevisionChangedEvent, to be registered with a DomainEventSource.
39     *
40     * @noinspection PhpUnused
41     */
42    public function handlePageLatestRevisionChangedEvent( PageLatestRevisionChangedEvent $event ): void {
43        if ( $event->getPage()->getNamespace() === NS_MEDIAWIKI    &&
44            ( $event->isModifiedSlot( SlotRecord::MAIN )
45                || $event->hasCause( PageLatestRevisionChangedEvent::CAUSE_MOVE )
46                || $event->isReconciliationRequest()
47            )
48        ) {
49            $content = $event->getLatestRevisionAfter()->getMainContentRaw();
50            $this->messageCache->updateMessageOverride( $event->getPage(), $content );
51        }
52    }
53
54    /**
55     * Listener method for PageDeletedEvent, to be registered with a DomainEventSource.
56     *
57     * @noinspection PhpUnused
58     */
59    public function handlePageDeletedEvent( PageDeletedEvent $event ): void {
60        if ( $event->getDeletedPage()->getNamespace() === NS_MEDIAWIKI ) {
61            $this->messageCache->updateMessageOverride( $event->getDeletedPage(), null );
62        }
63    }
64
65}
66
67/** @deprecated class alias since 1.45 */
68class_alias( LanguageEventIngress::class, 'MediaWiki\\Languages\\LanguageEventIngress' );