Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
0.00% |
0 / 61 |
|
0.00% |
0 / 1 |
CRAP | |
0.00% |
0 / 1 |
| ArticleCompileUserData | |
0.00% |
0 / 61 |
|
0.00% |
0 / 1 |
90 | |
0.00% |
0 / 1 |
| compile | |
0.00% |
0 / 61 |
|
0.00% |
0 / 1 |
90 | |||
| 1 | <?php |
| 2 | |
| 3 | namespace MediaWiki\Extension\PageTriage\ArticleCompile; |
| 4 | |
| 5 | use MediaWiki\User\User; |
| 6 | |
| 7 | /** |
| 8 | * Article User data |
| 9 | */ |
| 10 | class 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 | } |