Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 35 |
|
0.00% |
0 / 5 |
CRAP | |
0.00% |
0 / 1 |
SpecialPagesWithoutScans | |
0.00% |
0 / 35 |
|
0.00% |
0 / 5 |
30 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
isExpensive | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
isSyndicated | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
getQueryInfo | |
0.00% |
0 / 31 |
|
0.00% |
0 / 1 |
2 | |||
getGroupName | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 |
1 | <?php |
2 | |
3 | namespace ProofreadPage\Special; |
4 | |
5 | use MediaWiki\SpecialPage\PageQueryPage; |
6 | use ProofreadPage\Context; |
7 | |
8 | /** |
9 | * @license GPL-2.0-or-later |
10 | * |
11 | * Special page that lists the texts that have no transclusions |
12 | */ |
13 | class SpecialPagesWithoutScans extends PageQueryPage { |
14 | |
15 | /** |
16 | * @param string $name |
17 | */ |
18 | public function __construct( $name = 'PagesWithoutScans' ) { |
19 | parent::__construct( $name ); |
20 | } |
21 | |
22 | /** @inheritDoc */ |
23 | public function isExpensive() { |
24 | return true; |
25 | } |
26 | |
27 | /** @inheritDoc */ |
28 | public function isSyndicated() { |
29 | return false; |
30 | } |
31 | |
32 | /** |
33 | * @return mixed[] |
34 | */ |
35 | public function getQueryInfo() { |
36 | $context = Context::getDefaultContext(); |
37 | $queryBuilder = $this->getRecacheDB()->newSelectQueryBuilder() |
38 | ->select( [ |
39 | 'namespace' => 'page_namespace', |
40 | 'title' => 'page_title', |
41 | 'value' => 'page_len' |
42 | ] ) |
43 | ->from( 'page' ) |
44 | ->leftJoin( 'page_props', 'pp_disambig', [ |
45 | 'page_id = pp_disambig.pp_page', |
46 | 'pp_disambig.pp_propname' => 'disambiguation' |
47 | ] ) |
48 | ->leftJoin( 'page_props', 'pp_withoutscans', [ |
49 | 'page_id = pp_withoutscans.pp_page', |
50 | 'pp_withoutscans.pp_propname' => 'expectwithoutscans' |
51 | ] ) |
52 | ->where( [ |
53 | 'pp_disambig.pp_page' => null, |
54 | 'pp_withoutscans.pp_page' => null, |
55 | 'page_namespace' => NS_MAIN, |
56 | 'page_is_redirect' => 0, |
57 | ] ); |
58 | $subQuery = $queryBuilder->newSubquery() |
59 | ->select( 'page_id' ) |
60 | ->from( 'page' ) |
61 | ->join( 'templatelinks', null, 'page_id = tl_from' ) |
62 | ->join( 'linktarget', null, 'tl_target_id = lt_id' ) |
63 | ->where( [ 'lt_namespace' => $context->getPageNamespaceId(), 'page_namespace' => NS_MAIN, |
64 | 'page_is_redirect' => 0, ] ); |
65 | $queryBuilder->where( 'page_id NOT IN (' . $subQuery->getSQL() . ')' ); |
66 | |
67 | return $queryBuilder->getQueryInfo(); |
68 | } |
69 | |
70 | /** |
71 | * @return string |
72 | */ |
73 | protected function getGroupName() { |
74 | return 'maintenance'; |
75 | } |
76 | } |