Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 50
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
ArticleCompileBasicData
0.00% covered (danger)
0.00%
0 / 50
0.00% covered (danger)
0.00%
0 / 1
56
0.00% covered (danger)
0.00%
0 / 1
 compile
0.00% covered (danger)
0.00%
0 / 50
0.00% covered (danger)
0.00%
0 / 1
56
1<?php
2
3namespace MediaWiki\Extension\PageTriage\ArticleCompile;
4
5use MediaWiki\Title\Title;
6
7/**
8 * Article page length, creation date, number of edit, title, article triage status
9 */
10class ArticleCompileBasicData extends ArticleCompile {
11
12    public function compile() {
13        $count = 0;
14        // Process page individually because MIN() GROUP BY is slow
15        foreach ( $this->mPageId as $pageId ) {
16            $row = $this->db->newSelectQueryBuilder()
17                ->select( [ 'creation_date' => 'MIN(rev_timestamp)' ] )
18                ->from( 'revision' )
19                ->join( 'page', 'page', 'page_id = rev_page' )
20                ->where( [ 'rev_page' => $pageId ] )
21                ->caller( __METHOD__ )
22                ->fetchRow();
23
24            if ( $row ) {
25                $this->metadata[$pageId]['creation_date'] = wfTimestamp( TS_MW, $row->creation_date );
26                $res = $this->db->newSelectQueryBuilder()
27                    ->select( '1' )
28                    ->from( 'revision' )
29                    ->join( 'page', null, [ 'page_id = rev_page' ] )
30                    ->where( [ 'rev_page' => $pageId ] )
31                    ->limit( 101 )
32                    ->caller( __METHOD__ )->fetchResultSet()->numRows();
33                $this->processEstimatedCount( $pageId, $res, 100, 'rev_count' );
34                $count++;
35            }
36        }
37
38        // no record in page table
39        if ( $count === 0 ) {
40            return false;
41        }
42        $res = $this->db->newSelectQueryBuilder()
43            ->select( [
44                'page_id', 'page_namespace', 'page_title', 'page_len',
45                'ptrp_reviewed', 'page_is_redirect', 'ptrp_last_reviewed_by',
46                'ptrp_reviewed_updated', 'reviewer' => 'user_name'
47            ] )
48            ->from( 'page' )
49            ->join( 'pagetriage_page', null, 'page_id = ptrp_page_id' )
50            ->leftJoin( 'user', 'user', 'user_id = ptrp_last_reviewed_by' )
51            ->where( [ 'page_id' => $this->mPageId ] )
52            ->caller( __METHOD__ )
53            ->fetchResultSet();
54
55        foreach ( $res as $row ) {
56            if ( isset( $this->articles[$row->page_id] ) ) {
57                $title = $this->articles[$row->page_id]->getTitle();
58            } else {
59                $title = Title::makeTitle( $row->page_namespace, $row->page_title );
60            }
61            $this->metadata[$row->page_id]['page_len'] = $row->page_len;
62            // The following data won't be saved into metadata since they are not metadata tags
63            // just for saving into cache later
64            $this->metadata[$row->page_id]['patrol_status'] = $row->ptrp_reviewed;
65            $this->metadata[$row->page_id]['is_redirect'] = $row->page_is_redirect;
66            $this->metadata[$row->page_id]['ptrp_last_reviewed_by'] = $row->ptrp_last_reviewed_by;
67            $this->metadata[$row->page_id]['ptrp_reviewed_updated'] = wfTimestamp(
68                TS_MW,
69                $row->ptrp_reviewed_updated
70            );
71            $this->metadata[$row->page_id]['reviewer'] = $row->reviewer;
72            if ( $title ) {
73                $this->metadata[$row->page_id]['title'] = $title->getPrefixedText();
74            }
75        }
76
77        return true;
78    }
79
80}