Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
ChangeTagsLogList
0.00% covered (danger)
0.00%
0 / 22
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 / 7
0.00% covered (danger)
0.00%
0 / 1
2
 newItem
0.00% covered (danger)
0.00%
0 / 6
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\Logging\DatabaseLogEntry;
10use MediaWiki\MediaWikiServices;
11use MediaWiki\Permissions\Authority;
12use MediaWiki\Status\Status;
13use Wikimedia\Rdbms\IResultWrapper;
14use Wikimedia\Rdbms\SelectQueryBuilder;
15
16/**
17 * Store a list of taggable log entries.
18 *
19 * @since 1.25
20 * @ingroup ChangeTags
21 */
22class ChangeTagsLogList extends ChangeTagsList {
23    /** @inheritDoc */
24    public function getType() {
25        return 'logentry';
26    }
27
28    /**
29     * @param \Wikimedia\Rdbms\IReadableDatabase $db
30     * @return IResultWrapper
31     */
32    public function doQuery( $db ) {
33        $ids = array_map( 'intval', $this->ids );
34        $queryBuilder = DatabaseLogEntry::newSelectQueryBuilder( $db )
35            ->where( [ 'log_id' => $ids ] )
36            ->orderBy( [ 'log_timestamp', 'log_id' ], SelectQueryBuilder::SORT_DESC );
37
38        MediaWikiServices::getInstance()->getChangeTagsStore()
39            ->addTagsToDisplayQuery( $queryBuilder, 'logging', $this->getAuthority() );
40        return $queryBuilder->caller( __METHOD__ )->fetchResultSet();
41    }
42
43    /** @inheritDoc */
44    public function newItem( $row ) {
45        $services = MediaWikiServices::getInstance();
46        return new ChangeTagsLogItem(
47            $this,
48            $row,
49            $services->getChangeTagsFormatter()
50        );
51    }
52
53    /**
54     * Add/remove change tags from all the log entries 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, null, $item->getId(), $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( ChangeTagsLogList::class, 'ChangeTagsLogList' );