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    /** @inheritDoc */
13    public function compile() {
14        $count = 0;
15        // Process page individually because MIN() GROUP BY is slow
16        foreach ( $this->mPageId as $pageId ) {
17            $row = $this->db->newSelectQueryBuilder()
18                ->select( [ 'creation_date' => 'MIN(rev_timestamp)' ] )
19                ->from( 'revision' )
20                ->join( 'page', 'page', 'page_id = rev_page' )
21                ->where( [ 'rev_page' => $pageId ] )
22                ->caller( __METHOD__ )
23                ->fetchRow();
24
25            if ( $row ) {
26                $this->metadata[$pageId]['creation_date'] = wfTimestamp( TS_MW, $row->creation_date );
27                $res = $this->db->newSelectQueryBuilder()
28                    ->select( '1' )
29                    ->from( 'revision' )
30                    ->join( 'page', null, [ 'page_id = rev_page' ] )
31                    ->where( [ 'rev_page' => $pageId ] )
32                    ->limit( 101 )
33                    ->caller( __METHOD__ )->fetchResultSet()->numRows();
34                $this->processEstimatedCount( $pageId, $res, 100, 'rev_count' );
35                $count++;
36            }
37        }
38
39        // no record in page table
40        if ( $count === 0 ) {
41            return false;
42        }
43        $res = $this->db->newSelectQueryBuilder()
44            ->select( [
45                'page_id', 'page_namespace', 'page_title', 'page_len',
46                'ptrp_reviewed', 'page_is_redirect', 'ptrp_last_reviewed_by',
47                'ptrp_reviewed_updated', 'reviewer' => 'user_name'
48            ] )
49            ->from( 'page' )
50            ->join( 'pagetriage_page', null, 'page_id = ptrp_page_id' )
51            ->leftJoin( 'user', 'user', 'user_id = ptrp_last_reviewed_by' )
52            ->where( [ 'page_id' => $this->mPageId ] )
53            ->caller( __METHOD__ )
54            ->fetchResultSet();
55
56        foreach ( $res as $row ) {
57            if ( isset( $this->articles[$row->page_id] ) ) {
58                $title = $this->articles[$row->page_id]->getTitle();
59            } else {
60                $title = Title::makeTitle( $row->page_namespace, $row->page_title );
61            }
62            $this->metadata[$row->page_id]['page_len'] = $row->page_len;
63            // The following data won't be saved into metadata since they are not metadata tags
64            // just for saving into cache later
65            $this->metadata[$row->page_id]['patrol_status'] = $row->ptrp_reviewed;
66            $this->metadata[$row->page_id]['is_redirect'] = $row->page_is_redirect;
67            $this->metadata[$row->page_id]['ptrp_last_reviewed_by'] = $row->ptrp_last_reviewed_by;
68            $this->metadata[$row->page_id]['ptrp_reviewed_updated'] = wfTimestamp(
69                TS_MW,
70                $row->ptrp_reviewed_updated
71            );
72            $this->metadata[$row->page_id]['reviewer'] = $row->reviewer;
73            if ( $title ) {
74                $this->metadata[$row->page_id]['title'] = $title->getPrefixedText();
75            }
76        }
77
78        return true;
79    }
80
81}