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