Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 61
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
ArticleCompileUserData
0.00% covered (danger)
0.00%
0 / 61
0.00% covered (danger)
0.00%
0 / 1
90
0.00% covered (danger)
0.00%
0 / 1
 compile
0.00% covered (danger)
0.00%
0 / 61
0.00% covered (danger)
0.00%
0 / 1
90
1<?php
2
3namespace MediaWiki\Extension\PageTriage\ArticleCompile;
4
5use MediaWiki\User\User;
6
7/**
8 * Article User data
9 */
10class ArticleCompileUserData extends ArticleCompile {
11
12    /** @inheritDoc */
13    public function compile() {
14        // Grab the earliest revision based on rev_timestamp and rev_id
15        $revId = [];
16        foreach ( $this->mPageId as $pageId ) {
17            $res = $this->db->newSelectQueryBuilder()
18                ->select( 'rev_id' )
19                ->from( 'revision' )
20                ->where( [ 'rev_page' => $pageId ] )
21                ->limit( 1 )
22                ->orderBy( [ 'rev_timestamp', 'rev_id' ] )
23                ->caller( __METHOD__ )
24                ->fetchRow();
25
26            if ( $res ) {
27                $revId[] = $res->rev_id;
28            }
29        }
30
31        if ( count( $revId ) === 0 ) {
32            return true;
33        }
34
35        $blockQuery = $this->db->newSelectQueryBuilder()
36            ->select( '1' )
37            ->from( 'block' )
38            ->join( 'block_target', null, 'bt_id=bl_target' )
39            ->where( [
40                'bt_user=actor_user',
41                $this->db->expr( 'bl_expiry', '>', $this->db->timestamp() ),
42                'bl_sitewide' => 1
43            ] )
44            ->getSQL();
45        $res = $this->db->newSelectQueryBuilder()
46            ->select( [
47                'rev_page', 'actor_name',
48                'user_id', 'user_name', 'user_real_name', 'user_registration', 'user_editcount',
49                'blocked' => 'EXISTS (' . $blockQuery . ')'
50            ] )
51            ->from( 'revision' )
52            ->join( 'actor', null, 'actor_id=rev_actor' )
53            ->leftJoin( 'user', null, 'user_id=actor_user' )
54            ->where( [ 'rev_id' => $revId ] )
55            ->caller( __METHOD__ )
56            ->fetchResultSet();
57
58        foreach ( $res as $row ) {
59            $data = [];
60            // User exists
61            if ( $row->user_id ) {
62                $user = User::newFromRow( $row );
63                $data['user_id'] = $row->user_id;
64                $data['user_name'] = $user->getName();
65                $data['user_editcount'] = $user->getEditCount();
66                $data['user_creation_date'] = wfTimestamp(
67                    TS_MW,
68                    $user->getRegistration()
69                );
70                $data['user_autoconfirmed'] =
71                    $user->isAllowed( 'autoconfirmed' ) ? '1' : '0';
72                $data['user_experience'] = $user->getExperienceLevel();
73                $data['user_bot'] = $user->isAllowed( 'bot' ) ? '1' : '0';
74            } else {
75                // User doesn't exist, etc IP
76                $data['user_id'] = 0;
77                $data['user_name'] = $row->actor_name;
78                $data['user_editcount'] = 0;
79                $data['user_creation_date'] = '';
80                $data['user_autoconfirmed'] = '0';
81                $data['user_experience'] = 'anonymous';
82                $data['user_bot'] = '0';
83            }
84            $data['user_block_status'] = $row->blocked ? '1' : '0';
85            $this->metadata[$row->rev_page] = $data;
86        }
87
88        return true;
89    }
90
91}