Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 22
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
RecentChangeNotifyJob
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 2
42
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 run
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 1
30
1<?php
2/**
3 * @license GPL-2.0-or-later
4 * @file
5 */
6
7namespace MediaWiki\RecentChanges;
8
9use MediaWiki\JobQueue\Job;
10use MediaWiki\Title\Title;
11use MediaWiki\User\User;
12
13/**
14 * Send an email notification.
15 *
16 * @internal For use by RecentChangeNotifier
17 * @ingroup RecentChanges
18 * @ingroup JobQueue
19 * @ingroup Mail
20 */
21class RecentChangeNotifyJob extends Job {
22    private RecentChangeLookup $recentChangeLookup;
23
24    public function __construct(
25        Title $title,
26        array $params,
27        RecentChangeLookup $recentChangeLookup
28    ) {
29        parent::__construct( 'enotifNotify', $title, $params );
30
31        $this->recentChangeLookup = $recentChangeLookup;
32    }
33
34    /** @inheritDoc */
35    public function run() {
36        $notifier = new RecentChangeNotifier();
37        // Get the user from ID (rename safe). Anons are 0, so defer to name.
38        if ( isset( $this->params['editorID'] ) && $this->params['editorID'] ) {
39            $editor = User::newFromId( $this->params['editorID'] );
40        // B/C, only the name might be given.
41        } else {
42            # @todo FIXME: newFromName could return false on a badly configured wiki.
43            $editor = User::newFromName( $this->params['editor'], false );
44        }
45        if ( !array_key_exists( 'rc_id', $this->params ) ) {
46            $this->setLastError(
47                'Cannot execute RecentChangeNotifyJob without `rc_id`. This has to be an old job'
48            );
49            return true;
50        }
51        $recentChange = $this->recentChangeLookup->getRecentChangeById( $this->params['rc_id'] );
52        if ( $recentChange ) {
53            $notifier->actuallyNotifyOnPageChange(
54                $editor,
55                $this->title,
56                $recentChange,
57                $this->params['watchers'],
58                $this->params['pageStatus']
59            );
60        }
61        return true;
62    }
63}
64
65/** @deprecated class alias since 1.45 */
66class_alias( RecentChangeNotifyJob::class, 'EnotifNotifyJob' );