getRequest(); $out = $this->getOutput(); $this->setHeaders(); $this->outputHeader(); $out->allowClickjacking(); # GET values $from = $request->getVal( 'from', null ); $to = $request->getVal( 'to', null ); $namespace = $request->getInt( 'namespace' ); $miserMode = (bool)$this->getConfig()->get( 'MiserMode' ); // Redirects filter is disabled in MiserMode $hideredirects = $request->getBool( 'hideredirects', false ) && !$miserMode; $namespaces = $this->getLanguage()->getNamespaces(); $out->setPageTitle( ( $namespace > 0 && array_key_exists( $namespace, $namespaces ) ) ? $this->msg( 'allinnamespace', str_replace( '_', ' ', $namespaces[$namespace] ) ) : $this->msg( 'allarticles' ) ); $out->addModuleStyles( 'mediawiki.special' ); if ( $par !== null ) { $this->showChunk( $namespace, $par, $to, $hideredirects ); } elseif ( $from !== null && $to === null ) { $this->showChunk( $namespace, $from, $to, $hideredirects ); } else { $this->showToplevel( $namespace, $from, $to, $hideredirects ); } } /** * Outputs the HTMLForm used on this page * * @param int $namespace A namespace constant (default NS_MAIN). * @param string $from DbKey we are starting listing at. * @param string $to DbKey we are ending listing at. * @param bool $hideRedirects Don't show redirects (default false) */ protected function outputHTMLForm( $namespace = NS_MAIN, $from = '', $to = '', $hideRedirects = false ) { $miserMode = (bool)$this->getConfig()->get( 'MiserMode' ); $formDescriptor = [ 'from' => [ 'type' => 'text', 'name' => 'from', 'id' => 'nsfrom', 'size' => 30, 'label-message' => 'allpagesfrom', 'default' => str_replace( '_', ' ', $from ), ], 'to' => [ 'type' => 'text', 'name' => 'to', 'id' => 'nsto', 'size' => 30, 'label-message' => 'allpagesto', 'default' => str_replace( '_', ' ', $to ), ], 'namespace' => [ 'type' => 'namespaceselect', 'name' => 'namespace', 'id' => 'namespace', 'label-message' => 'namespace', 'all' => null, 'default' => $namespace, ], 'hideredirects' => [ 'type' => 'check', 'name' => 'hideredirects', 'id' => 'hidredirects', 'label-message' => 'allpages-hide-redirects', 'value' => $hideRedirects, ], ]; if ( $miserMode ) { unset( $formDescriptor['hideredirects'] ); } $context = new DerivativeContext( $this->getContext() ); $context->setTitle( $this->getPageTitle() ); // Remove subpage $htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $context ); $htmlForm ->setMethod( 'get' ) ->setWrapperLegendMsg( 'allpages' ) ->setSubmitTextMsg( 'allpagessubmit' ) ->prepareForm() ->displayForm( false ); } /** * @param int $namespace (default NS_MAIN) * @param string $from List all pages from this name * @param string $to List all pages to this name * @param bool $hideredirects Don't show redirects (default false) */ private function showToplevel( $namespace = NS_MAIN, $from = '', $to = '', $hideredirects = false ) { $from = Title::makeTitleSafe( $namespace, $from ); $to = Title::makeTitleSafe( $namespace, $to ); $from = ( $from && $from->isLocal() ) ? $from->getDBkey() : null; $to = ( $to && $to->isLocal() ) ? $to->getDBkey() : null; $this->showChunk( $namespace, $from, $to, $hideredirects ); } /** * @param int $namespace Namespace (Default NS_MAIN) * @param string|false $from List all pages from this name (default false) * @param string|false $to List all pages to this name (default false) * @param bool $hideredirects Don't show redirects (default false) */ private function showChunk( $namespace = NS_MAIN, $from = false, $to = false, $hideredirects = false ) { $output = $this->getOutput(); $fromList = $this->getNamespaceKeyAndText( $namespace, $from ); $toList = $this->getNamespaceKeyAndText( $namespace, $to ); $namespaces = $this->getContext()->getLanguage()->getNamespaces(); $n = 0; $prevTitle = null; if ( !$fromList || !$toList ) { $out = $this->msg( 'allpagesbadtitle' )->parseAsBlock(); } elseif ( !array_key_exists( $namespace, $namespaces ) ) { // Show errormessage and reset to NS_MAIN $out = $this->msg( 'allpages-bad-ns', $namespace )->parse(); $namespace = NS_MAIN; } else { list( $namespace, $fromKey, $from ) = $fromList; list( , $toKey, $to ) = $toList; $dbr = wfGetDB( DB_REPLICA ); $filterConds = [ 'page_namespace' => $namespace ]; if ( $hideredirects ) { $filterConds['page_is_redirect'] = 0; } $conds = $filterConds; $conds[] = 'page_title >= ' . $dbr->addQuotes( $fromKey ); if ( $toKey !== "" ) { $conds[] = 'page_title <= ' . $dbr->addQuotes( $toKey ); } $res = $dbr->select( 'page', [ 'page_namespace', 'page_title', 'page_is_redirect', 'page_id' ], $conds, __METHOD__, [ 'ORDER BY' => 'page_title', 'LIMIT' => $this->maxPerPage + 1, 'USE INDEX' => 'name_title', ] ); $linkRenderer = $this->getLinkRenderer(); if ( $res->numRows() > 0 ) { $out = Html::openElement( 'ul', [ 'class' => 'mw-allpages-chunk' ] ); while ( ( $n < $this->maxPerPage ) && ( $s = $res->fetchObject() ) ) { $t = Title::newFromRow( $s ); if ( $t ) { $out .= '