Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 40
0.00% covered (danger)
0.00%
0 / 9
CRAP
0.00% covered (danger)
0.00%
0 / 1
UsersToRenameDatabaseUpdates
0.00% covered (danger)
0.00%
0 / 40
0.00% covered (danger)
0.00%
0 / 9
132
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
 updateStatus
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
2
 markNotified
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 markRenamed
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 markRedirectSkipped
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 remove
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 insert
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 batchInsert
0.00% covered (danger)
0.00%
0 / 14
0.00% covered (danger)
0.00%
0 / 1
12
 findUsers
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace MediaWiki\Extension\CentralAuth\UsersToRename;
4
5use Wikimedia\Rdbms\IDatabase;
6use Wikimedia\Rdbms\IResultWrapper;
7
8class UsersToRenameDatabaseUpdates {
9
10    /**
11     * Notified via talk page
12     */
13    public const NOTIFIED = 4;
14    /**
15     * A redirect, temporarily skipped
16     */
17    private const REDIRECT = 5;
18    /**
19     * Renamed!
20     */
21    private const RENAMED = 8;
22
23    /**
24     * @var IDatabase
25     */
26    private $db;
27
28    public function __construct( IDatabase $db ) {
29        $this->db = $db;
30    }
31
32    /**
33     * @param string $name
34     * @param string $wiki
35     * @param int $status
36     */
37    protected function updateStatus( $name, $wiki, $status ) {
38        $this->db->newUpdateQueryBuilder()
39            ->update( 'users_to_rename' )
40            ->set( [ 'utr_status' => $status ] )
41            ->where( [ 'utr_wiki' => $wiki, 'utr_name' => $name ] )
42            ->caller( __METHOD__ )
43            ->execute();
44    }
45
46    /**
47     * @param string $name
48     * @param string $wiki
49     */
50    public function markNotified( $name, $wiki ) {
51        $this->updateStatus( $name, $wiki, self::NOTIFIED );
52    }
53
54    /**
55     * @param string $name
56     * @param string $wiki
57     */
58    public function markRenamed( $name, $wiki ) {
59        $this->updateStatus( $name, $wiki, self::RENAMED );
60    }
61
62    /**
63     * @param string $name
64     * @param string $wiki
65     */
66    public function markRedirectSkipped( $name, $wiki ) {
67        $this->updateStatus( $name, $wiki, self::REDIRECT );
68    }
69
70    /**
71     * @param string $name
72     * @param string $wiki
73     */
74    public function remove( $name, $wiki ) {
75        $this->db->newDeleteQueryBuilder()
76            ->deleteFrom( 'users_to_rename' )
77            ->where( [ 'utr_wiki' => $wiki, 'utr_name' => $name ] )
78            ->caller( __METHOD__ )
79            ->execute();
80    }
81
82    /**
83     * @param string $name
84     * @param string $wiki
85     */
86    public function insert( $name, $wiki ) {
87        $this->batchInsert( [ [
88            'name' => $name,
89            'wiki' => $wiki
90        ] ] );
91    }
92
93    /**
94     * Batch insert rows
95     *
96     * @param array[] $info Array with array members that have 'name' and 'wiki' keys
97     */
98    public function batchInsert( array $info ) {
99        if ( !$info ) {
100            return;
101        }
102
103        $rows = [];
104        foreach ( $info as $row ) {
105            $rows[] = [
106                'utr_name' => $row['name'],
107                'utr_wiki' => $row['wiki'],
108            ];
109        }
110
111        $this->db->newInsertQueryBuilder()
112            ->insertInto( 'users_to_rename' )
113            ->ignore()
114            ->rows( $rows )
115            ->caller( __METHOD__ )
116            ->execute();
117    }
118
119    /**
120     * @param string $wiki
121     * @param int $status
122     * @param int $limit
123     *
124     * @return IResultWrapper
125     */
126    public function findUsers( $wiki, $status, $limit ) {
127        // @todo this shouldn't return prefixed field names
128        return $this->db->select(
129            'users_to_rename',
130            [ 'utr_name', 'utr_wiki' ],
131            [ 'utr_status' => $status, 'utr_wiki' => $wiki ],
132            __METHOD__,
133            [ 'LIMIT' => $limit ]
134        );
135    }
136}