Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 50 |
|
0.00% |
0 / 1 |
CRAP | |
0.00% |
0 / 1 |
ArticleCompileBasicData | |
0.00% |
0 / 50 |
|
0.00% |
0 / 1 |
56 | |
0.00% |
0 / 1 |
compile | |
0.00% |
0 / 50 |
|
0.00% |
0 / 1 |
56 |
1 | <?php |
2 | |
3 | namespace MediaWiki\Extension\PageTriage\ArticleCompile; |
4 | |
5 | use MediaWiki\Title\Title; |
6 | |
7 | /** |
8 | * Article page length, creation date, number of edit, title, article triage status |
9 | */ |
10 | class 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 | } |