summaryrefslogtreecommitdiff
path: root/www/wiki/includes/specials/SpecialProtectedpages.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/includes/specials/SpecialProtectedpages.php')
-rw-r--r--www/wiki/includes/specials/SpecialProtectedpages.php207
1 files changed, 207 insertions, 0 deletions
diff --git a/www/wiki/includes/specials/SpecialProtectedpages.php b/www/wiki/includes/specials/SpecialProtectedpages.php
new file mode 100644
index 00000000..d693b990
--- /dev/null
+++ b/www/wiki/includes/specials/SpecialProtectedpages.php
@@ -0,0 +1,207 @@
+<?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' );
+
+ $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' );
+ $indefOnly = $request->getBool( 'indefonly' ) ? 1 : 0;
+ $cascadeOnly = $request->getBool( 'cascadeonly' ) ? 1 : 0;
+ $noRedirect = $request->getBool( 'noredirect' ) ? 1 : 0;
+
+ $pager = new ProtectedPagesPager(
+ $this,
+ [],
+ $type,
+ $level,
+ $ns,
+ $sizetype,
+ $size,
+ $indefOnly,
+ $cascadeOnly,
+ $noRedirect,
+ $this->getLinkRenderer()
+ );
+
+ $this->getOutput()->addHTML( $this->showOptions(
+ $ns,
+ $type,
+ $level,
+ $sizetype,
+ $size,
+ $indefOnly,
+ $cascadeOnly,
+ $noRedirect
+ ) );
+
+ 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 bool $indefOnly Only indefinite protection
+ * @param bool $cascadeOnly Only cascading protection
+ * @param bool $noRedirect Don't show redirects
+ * @return string Input form
+ */
+ protected function showOptions( $namespace, $type = 'edit', $level, $sizetype,
+ $size, $indefOnly, $cascadeOnly, $noRedirect
+ ) {
+ $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 ),
+ 'expirycheck' => [
+ 'type' => 'check',
+ 'label' => $this->msg( 'protectedpages-indef' )->text(),
+ 'name' => 'indefonly',
+ 'id' => 'indefonly',
+ ],
+ 'cascadecheck' => [
+ 'type' => 'check',
+ 'label' => $this->msg( 'protectedpages-cascade' )->text(),
+ 'name' => 'cascadeonly',
+ 'id' => 'cascadeonly',
+ ],
+ 'redirectcheck' => [
+ 'type' => 'check',
+ 'label' => $this->msg( 'protectedpages-noredirect' )->text(),
+ 'name' => 'noredirect',
+ 'id' => 'noredirect',
+ ],
+ 'sizelimit' => [
+ 'class' => HTMLSizeFilterField::class,
+ 'name' => 'size',
+ ]
+ ];
+ $htmlForm = new HTMLForm( $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';
+ }
+}