Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 27
0.00% covered (danger)
0.00%
0 / 5
CRAP
0.00% covered (danger)
0.00%
0 / 1
SpecialPagesWithoutScans
0.00% covered (danger)
0.00%
0 / 27
0.00% covered (danger)
0.00%
0 / 5
30
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 isExpensive
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 isSyndicated
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getQueryInfo
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 1
2
 getGroupName
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace ProofreadPage\Special;
4
5use MediaWiki\SpecialPage\PageQueryPage;
6use ProofreadPage\Context;
7
8/**
9 * @license GPL-2.0-or-later
10 *
11 * Special page that lists the texts that have no transclusions
12 */
13class 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', null, [ 'page_id = pp_page', 'pp_propname' => 'disambiguation' ] )
45            ->where( [
46                'pp_page' => null,
47                'page_namespace' => NS_MAIN,
48                'page_is_redirect' => 0,
49                ] );
50        $subQuery = $queryBuilder->newSubquery()
51            ->select( 'page_id' )
52            ->from( 'page' )
53            ->join( 'templatelinks', null, 'page_id = tl_from' )
54            ->join( 'linktarget', null, 'tl_target_id = lt_id' )
55            ->where( [ 'lt_namespace' => $context->getPageNamespaceId(), 'page_namespace' => NS_MAIN,
56                'page_is_redirect' => 0, ] );
57        $queryBuilder->where( 'page_id NOT IN (' . $subQuery->getSQL() . ')' );
58
59        return $queryBuilder->getQueryInfo();
60    }
61
62    /**
63     * @return string
64     */
65    protected function getGroupName() {
66        return 'maintenance';
67    }
68}