Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 14
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
AbuseFilterExaminePager
0.00% covered (danger)
0.00%
0 / 14
0.00% covered (danger)
0.00%
0 / 4
42
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 getQueryInfo
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
2
 formatRow
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 getIndexField
n/a
0 / 0
n/a
0 / 0
1
 getTitle
n/a
0 / 0
n/a
0 / 0
1
 getEmptyBody
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace MediaWiki\Extension\AbuseFilter\Pager;
4
5use MediaWiki\Extension\AbuseFilter\AbuseFilterChangesList;
6use MediaWiki\Linker\LinkRenderer;
7use MediaWiki\Pager\ReverseChronologicalPager;
8use MediaWiki\RecentChanges\RecentChange;
9use MediaWiki\RecentChanges\RecentChangeFactory;
10use MediaWiki\Title\Title;
11use stdClass;
12use Wikimedia\Rdbms\IReadableDatabase;
13
14class AbuseFilterExaminePager extends ReverseChronologicalPager {
15    /**
16     * @var int Line number of the row, see RecentChange::$counter
17     */
18    private $rcCounter;
19
20    public function __construct(
21        private readonly AbuseFilterChangesList $changesList,
22        LinkRenderer $linkRenderer,
23        private readonly RecentChangeFactory $recentChangeFactory,
24        IReadableDatabase $dbr,
25        private readonly Title $title,
26        private readonly array $conds
27    ) {
28        // Set database before parent constructor to avoid setting it there
29        $this->mDb = $dbr;
30        parent::__construct( $changesList, $linkRenderer );
31        $this->rcCounter = 1;
32    }
33
34    /**
35     * @return array
36     */
37    public function getQueryInfo() {
38        $rcQuery = RecentChange::getQueryInfo();
39        return [
40            'tables' => $rcQuery['tables'],
41            'fields' => $rcQuery['fields'],
42            'conds' => $this->conds,
43            'join_conds' => $rcQuery['joins'],
44        ];
45    }
46
47    /**
48     * @param stdClass $row
49     * @return string
50     */
51    public function formatRow( $row ) {
52        $rc = $this->recentChangeFactory->newRecentChangeFromRow( $row );
53        $rc->counter = $this->rcCounter++;
54        return $this->changesList->recentChangesLine( $rc, false );
55    }
56
57    /**
58     * @codeCoverageIgnore Merely declarative
59     * @inheritDoc
60     */
61    public function getIndexField() {
62        return 'rc_id';
63    }
64
65    /**
66     * @codeCoverageIgnore Merely declarative
67     * @return Title
68     */
69    public function getTitle() {
70        return $this->title;
71    }
72
73    /**
74     * @return string
75     */
76    public function getEmptyBody() {
77        return $this->msg( 'abusefilter-examine-noresults' )->parseAsBlock();
78    }
79}