Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 61
0.00% covered (danger)
0.00%
0 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
ConfiguredPages
0.00% covered (danger)
0.00%
0 / 61
0.00% covered (danger)
0.00%
0 / 6
182
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
 execute
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
2
 showForm
0.00% covered (danger)
0.00%
0 / 20
0.00% covered (danger)
0.00%
0 / 1
12
 showPageList
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
6
 formatRow
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 1
30
 getGroupName
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3use MediaWiki\Html\Html;
4use MediaWiki\MainConfigNames;
5use MediaWiki\SpecialPage\SpecialPage;
6use MediaWiki\Title\Title;
7
8// Assumes $wgFlaggedRevsProtection is off
9class ConfiguredPages extends SpecialPage {
10    /** @var ConfiguredPagesPager|null */
11    private $pager = null;
12
13    /** @var int|null */
14    private $namespace;
15
16    /** @var int|null */
17    private $override;
18
19    /** @var string|null */
20    private $autoreview;
21
22    public function __construct() {
23        parent::__construct( 'ConfiguredPages' );
24    }
25
26    /**
27     * @inheritDoc
28     */
29    public function execute( $par ) {
30        $request = $this->getRequest();
31
32        $this->setHeaders();
33        $this->addHelpLink( 'Help:Extension:FlaggedRevs' );
34
35        $this->namespace = $request->getIntOrNull( 'namespace' );
36        $this->override = $request->getIntOrNull( 'stable' );
37        $this->autoreview = $request->getVal( 'restriction', '' );
38
39        $this->pager = new ConfiguredPagesPager(
40            $this, [], $this->namespace, $this->override, $this->autoreview );
41
42        $this->showForm();
43        $this->showPageList();
44    }
45
46    private function showForm() {
47        # Explanatory text
48        $this->getOutput()->addWikiMsg( 'configuredpages-list',
49            $this->getLanguage()->formatNum( $this->pager->getNumRows() ) );
50
51        $fields = [];
52        # Namespace selector
53        if ( count( FlaggedRevs::getReviewNamespaces() ) > 1 ) {
54            $fields[] = FlaggedRevsXML::getNamespaceMenu( $this->namespace, '' );
55        }
56        # Default version selector
57        $fields[] = FlaggedRevsXML::getDefaultFilterMenu( $this->override );
58        # Restriction level selector
59        if ( FlaggedRevs::getRestrictionLevels() ) {
60            $fields[] = FlaggedRevsXML::getRestrictionFilterMenu( $this->autoreview );
61        }
62
63        $form = Html::openElement( 'form', [
64            'name' => 'configuredpages',
65            'action' => $this->getConfig()->get( MainConfigNames::Script ),
66            'method' => 'get',
67        ] );
68        $form .= Html::hidden( 'title', $this->getPageTitle()->getPrefixedDBkey() );
69        $form .= "<fieldset><legend>" . $this->msg( 'configuredpages' )->escaped() . "</legend>\n";
70        $form .= implode( '&#160;', $fields ) . '<br/>';
71        $form .= Xml::submitButton( $this->msg( 'go' )->text() );
72        $form .= "</fieldset>\n";
73        $form .= Html::closeElement( 'form' ) . "\n";
74
75        $this->getOutput()->addHTML( $form );
76    }
77
78    private function showPageList() {
79        if ( $this->pager->getNumRows() ) {
80            $this->getOutput()->addHTML( $this->pager->getNavigationBar() );
81            $this->getOutput()->addHTML( $this->pager->getBody() );
82            $this->getOutput()->addHTML( $this->pager->getNavigationBar() );
83        } else {
84            $this->getOutput()->addWikiMsg( 'configuredpages-none' );
85        }
86    }
87
88    /**
89     * @param stdClass $row
90     * @return string HTML
91     */
92    public function formatRow( $row ) {
93        $title = Title::newFromRow( $row );
94        # Link to page
95        $linkRenderer = $this->getLinkRenderer();
96        $link = $linkRenderer->makeLink( $title );
97        # Link to page configuration
98        $config = $linkRenderer->makeKnownLink(
99            SpecialPage::getTitleFor( 'Stabilization' ),
100            $this->msg( 'configuredpages-config' )->text(),
101            [],
102            [ 'page' => $title->getPrefixedDBkey() ]
103        );
104        # Show which version is the default (stable or draft)
105        $msg = $row->fpc_override ? 'configuredpages-def-stable' : 'configuredpages-def-draft';
106        $default = $this->msg( $msg )->escaped();
107        # Autoreview/review restriction level
108        $restr = '';
109        if ( $row->fpc_level != '' ) {
110            $restr = '[autoreview=' . htmlspecialchars( $row->fpc_level ) . ']';
111        }
112        # When these configuration settings expire
113        if ( $row->fpc_expiry != 'infinity' && strlen( $row->fpc_expiry ) ) {
114            $expiry_description = " (" . $this->msg(
115                'protect-expiring',
116                $this->getLanguage()->timeanddate( $row->fpc_expiry ),
117                $this->getLanguage()->date( $row->fpc_expiry ),
118                $this->getLanguage()->time( $row->fpc_expiry )
119            )->inContentLanguage()->text() . ")";
120        } else {
121            $expiry_description = "";
122        }
123        return "<li>{$link} ({$config}) <b>[$default]</b> " .
124            "{$restr}<i>{$expiry_description}</i></li>";
125    }
126
127    /**
128     * @return string
129     */
130    protected function getGroupName() {
131        return 'quality';
132    }
133}