X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/mediawiki.git/blobdiff_plain/19e297c21b10b1b8a3acad5e73fc71dcb35db44a..6932310fd58ebef145fa01eb76edf7150284d8ea:/includes/specials/SpecialWithoutinterwiki.php diff --git a/includes/specials/SpecialWithoutinterwiki.php b/includes/specials/SpecialWithoutinterwiki.php index 90c1f441..a1e51563 100644 --- a/includes/specials/SpecialWithoutinterwiki.php +++ b/includes/specials/SpecialWithoutinterwiki.php @@ -30,35 +30,49 @@ class WithoutInterwikiPage extends PageQueryPage { private $prefix = ''; - function getName() { - return 'Withoutinterwiki'; + function __construct( $name = 'Withoutinterwiki' ) { + parent::__construct( $name ); } - function getPageHeader() { - global $wgScript, $wgMiserMode; + function execute( $par ) { + $this->prefix = Title::capitalize( + $this->getRequest()->getVal( 'prefix', $par ), NS_MAIN ); + parent::execute( $par ); + } - # Do not show useless input form if wiki is running in misermode - if( $wgMiserMode ) { + function getPageHeader() { + # Do not show useless input form if special page is cached + if ( $this->isCached() ) { return ''; } - $prefix = $this->prefix; - $t = SpecialPage::getTitleFor( $this->getName() ); + $formDescriptor = [ + 'prefix' => [ + 'label-message' => 'allpagesprefix', + 'name' => 'prefix', + 'id' => 'wiprefix', + 'type' => 'text', + 'size' => 20, + 'default' => $this->prefix + ] + ]; - return Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) ) . - Xml::openElement( 'fieldset' ) . - Xml::element( 'legend', null, wfMsg( 'withoutinterwiki-legend' ) ) . - Html::hidden( 'title', $t->getPrefixedText() ) . - Xml::inputLabel( wfMsg( 'allpagesprefix' ), 'prefix', 'wiprefix', 20, $prefix ) . ' ' . - Xml::submitButton( wfMsg( 'withoutinterwiki-submit' ) ) . - Xml::closeElement( 'fieldset' ) . - Xml::closeElement( 'form' ); + $htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() ); + $htmlForm->setWrapperLegend( '' ) + ->setSubmitTextMsg( 'withoutinterwiki-submit' ) + ->setMethod( 'get' ) + ->prepareForm() + ->displayForm( false ); } function sortDescending() { return false; } + function getOrderFields() { + return [ 'page_namespace', 'page_title' ]; + } + function isExpensive() { return true; } @@ -67,36 +81,30 @@ class WithoutInterwikiPage extends PageQueryPage { return false; } - function getSQL() { - $dbr = wfGetDB( DB_SLAVE ); - list( $page, $langlinks ) = $dbr->tableNamesN( 'page', 'langlinks' ); - $prefix = $this->prefix ? 'AND page_title' . $dbr->buildLike( $this->prefix , $dbr->anyString() ) : ''; - return - "SELECT 'Withoutinterwiki' AS type, - page_namespace AS namespace, - page_title AS title, - page_title AS value - FROM $page - LEFT JOIN $langlinks - ON ll_from = page_id - WHERE ll_title IS NULL - AND page_namespace=" . NS_MAIN . " - AND page_is_redirect = 0 - {$prefix}"; - } + function getQueryInfo() { + $query = [ + 'tables' => [ 'page', 'langlinks' ], + 'fields' => [ + 'namespace' => 'page_namespace', + 'title' => 'page_title', + 'value' => 'page_title' + ], + 'conds' => [ + 'll_title IS NULL', + 'page_namespace' => MWNamespace::getContentNamespaces(), + 'page_is_redirect' => 0 + ], + 'join_conds' => [ 'langlinks' => [ 'LEFT JOIN', 'll_from = page_id' ] ] + ]; + if ( $this->prefix ) { + $dbr = wfGetDB( DB_REPLICA ); + $query['conds'][] = 'page_title ' . $dbr->buildLike( $this->prefix, $dbr->anyString() ); + } - function setPrefix( $prefix = '' ) { - $this->prefix = $prefix; + return $query; } -} - -function wfSpecialWithoutinterwiki() { - global $wgRequest; - list( $limit, $offset ) = wfCheckLimits(); - // Only searching the mainspace anyway - $prefix = Title::capitalize( $wgRequest->getVal( 'prefix' ), NS_MAIN ); - $wip = new WithoutInterwikiPage(); - $wip->setPrefix( $prefix ); - $wip->doQuery( $offset, $limit ); + protected function getGroupName() { + return 'maintenance'; + } }