123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- <?php
- /**
- * Implements Special:Protectedpages
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup SpecialPage
- */
- /**
- * A special page that lists protected pages
- *
- * @ingroup SpecialPage
- */
- class SpecialProtectedpages extends SpecialPage {
- protected $IdLevel = 'level';
- protected $IdType = 'type';
- public function __construct() {
- parent::__construct( 'Protectedpages' );
- }
- public function execute( $par ) {
- $this->setHeaders();
- $this->outputHeader();
- $this->getOutput()->addModuleStyles( 'mediawiki.special' );
- $this->addHelpLink( 'Help:Protected_pages' );
- $request = $this->getRequest();
- $type = $request->getVal( $this->IdType );
- $level = $request->getVal( $this->IdLevel );
- $sizetype = $request->getVal( 'size-mode' );
- $size = $request->getIntOrNull( 'size' );
- $ns = $request->getIntOrNull( 'namespace' );
- $filters = $request->getArray( 'wpfilters', [] );
- $indefOnly = in_array( 'indefonly', $filters );
- $cascadeOnly = in_array( 'cascadeonly', $filters );
- $noRedirect = in_array( 'noredirect', $filters );
- $pager = new ProtectedPagesPager(
- $this,
- [],
- $type,
- $level,
- $ns,
- $sizetype,
- $size,
- $indefOnly,
- $cascadeOnly,
- $noRedirect,
- $this->getLinkRenderer()
- );
- $this->getOutput()->addHTML( $this->showOptions(
- $ns,
- $type,
- $level,
- $sizetype,
- $size,
- $filters
- ) );
- if ( $pager->getNumRows() ) {
- $this->getOutput()->addParserOutputContent( $pager->getFullOutput() );
- } else {
- $this->getOutput()->addWikiMsg( 'protectedpagesempty' );
- }
- }
- /**
- * @param int $namespace
- * @param string $type Restriction type
- * @param string $level Restriction level
- * @param string $sizetype "min" or "max"
- * @param int $size
- * @param array $filters Filters set for the pager: indefOnly,
- * cascadeOnly, noRedirect
- * @return string Input form
- */
- protected function showOptions( $namespace, $type, $level, $sizetype,
- $size, $filters
- ) {
- $formDescriptor = [
- 'namespace' => [
- 'class' => HTMLSelectNamespace::class,
- 'name' => 'namespace',
- 'id' => 'namespace',
- 'cssclass' => 'namespaceselector',
- 'all' => '',
- 'label' => $this->msg( 'namespace' )->text(),
- ],
- 'typemenu' => $this->getTypeMenu( $type ),
- 'levelmenu' => $this->getLevelMenu( $level ),
- 'filters' => [
- 'class' => 'HTMLMultiSelectField',
- 'label' => $this->msg( 'protectedpages-filters' )->text(),
- 'flatlist' => true,
- 'options-messages' => [
- 'protectedpages-indef' => 'indefonly',
- 'protectedpages-cascade' => 'cascadeonly',
- 'protectedpages-noredirect' => 'noredirect',
- ],
- 'default' => $filters,
- ],
- 'sizelimit' => [
- 'class' => HTMLSizeFilterField::class,
- 'name' => 'size',
- ]
- ];
- $htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() );
- $htmlForm
- ->setMethod( 'get' )
- ->setWrapperLegendMsg( 'protectedpages' )
- ->setSubmitText( $this->msg( 'protectedpages-submit' )->text() );
- return $htmlForm->prepareForm()->getHTML( false );
- }
- /**
- * Creates the input label of the restriction type
- * @param string $pr_type Protection type
- * @return array
- */
- protected function getTypeMenu( $pr_type ) {
- $m = []; // Temporary array
- $options = [];
- // First pass to load the log names
- foreach ( Title::getFilteredRestrictionTypes( true ) as $type ) {
- // Messages: restriction-edit, restriction-move, restriction-create, restriction-upload
- $text = $this->msg( "restriction-$type" )->text();
- $m[$text] = $type;
- }
- // Third pass generates sorted XHTML content
- foreach ( $m as $text => $type ) {
- $options[$text] = $type;
- }
- return [
- 'type' => 'select',
- 'options' => $options,
- 'label' => $this->msg( 'restriction-type' )->text(),
- 'name' => $this->IdType,
- 'id' => $this->IdType,
- ];
- }
- /**
- * Creates the input label of the restriction level
- * @param string $pr_level Protection level
- * @return array
- */
- protected function getLevelMenu( $pr_level ) {
- // Temporary array
- $m = [ $this->msg( 'restriction-level-all' )->text() => 0 ];
- $options = [];
- // First pass to load the log names
- foreach ( $this->getConfig()->get( 'RestrictionLevels' ) as $type ) {
- // Messages used can be 'restriction-level-sysop' and 'restriction-level-autoconfirmed'
- if ( $type != '' && $type != '*' ) {
- $text = $this->msg( "restriction-level-$type" )->text();
- $m[$text] = $type;
- }
- }
- // Third pass generates sorted XHTML content
- foreach ( $m as $text => $type ) {
- $options[$text] = $type;
- }
- return [
- 'type' => 'select',
- 'options' => $options,
- 'label' => $this->msg( 'restriction-level' )->text(),
- 'name' => $this->IdLevel,
- 'id' => $this->IdLevel
- ];
- }
- protected function getGroupName() {
- return 'maintenance';
- }
- }
|