Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
ChangeTagsRevisionList
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 4
42
0.00% covered (danger)
0.00%
0 / 1
 getType
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 doQuery
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
2
 newItem
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 updateChangeTagsOnAll
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2/**
3 * @license GPL-2.0-or-later
4 * @file
5 */
6
7namespace MediaWiki\ChangeTags;
8
9use MediaWiki\MediaWikiServices;
10use MediaWiki\Permissions\Authority;
11use MediaWiki\Status\Status;
12use Wikimedia\Rdbms\IResultWrapper;
13use Wikimedia\Rdbms\SelectQueryBuilder;
14
15/**
16 * Store a list of taggable revisions.
17 *
18 * @since 1.25
19 * @ingroup ChangeTags
20 */
21class ChangeTagsRevisionList extends ChangeTagsList {
22    /** @inheritDoc */
23    public function getType() {
24        return 'revision';
25    }
26
27    /**
28     * @param \Wikimedia\Rdbms\IReadableDatabase $db
29     * @return IResultWrapper
30     */
31    public function doQuery( $db ) {
32        $ids = array_map( 'intval', $this->ids );
33        $queryBuilder = MediaWikiServices::getInstance()->getRevisionStore()->newSelectQueryBuilder( $db )
34            ->joinComment()
35            ->joinUser()
36            ->where( [ 'rev_page' => $this->page->getId(), 'rev_id' => $ids ] )
37            ->orderBy( 'rev_id', SelectQueryBuilder::SORT_DESC );
38
39        MediaWikiServices::getInstance()->getChangeTagsStore()
40            ->addTagsToDisplayQuery( $queryBuilder, 'revision', $this->getAuthority() );
41        return $queryBuilder->caller( __METHOD__ )->fetchResultSet();
42    }
43
44    /** @inheritDoc */
45    public function newItem( $row ) {
46        return new ChangeTagsRevisionItem(
47            $this,
48            $row,
49            MediaWikiServices::getInstance()->getChangeTagsFormatter()
50        );
51    }
52
53    /**
54     * Add/remove change tags from all the revisions in the list.
55     *
56     * @param string[] $tagsToAdd
57     * @param string[] $tagsToRemove
58     * @param string|null $params
59     * @param string $reason
60     * @param Authority $performer
61     * @return Status
62     */
63    public function updateChangeTagsOnAll(
64        array $tagsToAdd,
65        array $tagsToRemove,
66        ?string $params,
67        string $reason,
68        Authority $performer
69    ) {
70        $status = Status::newGood();
71        for ( $this->reset(); $this->current(); $this->next() ) {
72            $item = $this->current();
73            $status = ChangeTags::updateTagsWithChecks( $tagsToAdd, $tagsToRemove,
74                null, $item->getId(), null, $params, $reason, $performer );
75            // Should only fail on second and subsequent times if the user trips
76            // the rate limiter
77            if ( !$status->isOK() ) {
78                break;
79            }
80        }
81
82        return $status;
83    }
84}
85
86/** @deprecated class alias since 1.44 */
87class_alias( ChangeTagsRevisionList::class, 'ChangeTagsRevisionList' );