diff options
author | Pierre Schmitz <pierre@archlinux.de> | 2011-12-03 13:29:22 +0100 |
---|---|---|
committer | Pierre Schmitz <pierre@archlinux.de> | 2011-12-03 13:29:22 +0100 |
commit | ca32f08966f1b51fcb19460f0996bb0c4048e6fe (patch) | |
tree | ec04cc15b867bc21eedca904cea9af0254531a11 /includes/specials/SpecialRandompage.php | |
parent | a22fbfc60f36f5f7ee10d5ae6fe347340c2ee67c (diff) |
Update to MediaWiki 1.18.0
* also update ArchLinux skin to chagnes in MonoBook
* Use only css to hide our menu bar when printing
Diffstat (limited to 'includes/specials/SpecialRandompage.php')
-rw-r--r-- | includes/specials/SpecialRandompage.php | 90 |
1 files changed, 45 insertions, 45 deletions
diff --git a/includes/specials/SpecialRandompage.php b/includes/specials/SpecialRandompage.php index 6299f384..e299dc77 100644 --- a/includes/specials/SpecialRandompage.php +++ b/includes/specials/SpecialRandompage.php @@ -43,7 +43,9 @@ class RandomPage extends SpecialPage { } public function setNamespace ( $ns ) { - if( !$ns || $ns < NS_MAIN ) $ns = NS_MAIN; + if( !$ns || $ns < NS_MAIN ) { + $ns = NS_MAIN; + } $this->namespaces = array( $ns ); } @@ -63,7 +65,7 @@ class RandomPage extends SpecialPage { if( is_null( $title ) ) { $this->setHeaders(); - $wgOut->addWikiMsg( strtolower( $this->mName ) . '-nopages', + $wgOut->addWikiMsg( strtolower( $this->mName ) . '-nopages', $this->getNsList(), count( $this->namespaces ) ); return; } @@ -83,15 +85,15 @@ class RandomPage extends SpecialPage { global $wgContLang; $nsNames = array(); foreach( $this->namespaces as $n ) { - if( $n === NS_MAIN ) - $nsNames[] = wfMsgForContent( 'blanknamespace' ); - else + if( $n === NS_MAIN ) { + $nsNames[] = wfMsgNoTrans( 'blanknamespace' ); + } else { $nsNames[] = $wgContLang->getNsText( $n ); + } } return $wgContLang->commaList( $nsNames ); } - /** * Choose a random title. * @return Title object (or null if nothing to choose from) @@ -99,7 +101,8 @@ class RandomPage extends SpecialPage { public function getRandomTitle() { $randstr = wfRandom(); $title = null; - if ( !wfRunHooks( 'SpecialRandomGetRandomTitle', array( &$randstr, &$this->isRedir, &$this->namespaces, &$this->extra, &$title ) ) ) { + if ( !wfRunHooks( 'SpecialRandomGetRandomTitle', array( &$randstr, &$this->isRedir, &$this->namespaces, + &$this->extra, &$title ) ) ) { return $title; } $row = $this->selectRandomPageFromDB( $randstr ); @@ -111,53 +114,50 @@ class RandomPage extends SpecialPage { * any more bias than what the page_random scheme * causes anyway. Trust me, I'm a mathematician. :) */ - if( !$row ) + if( !$row ) { $row = $this->selectRandomPageFromDB( "0" ); + } - if( $row ) + if( $row ) { return Title::makeTitleSafe( $row->page_namespace, $row->page_title ); - else + } else { return null; + } + } + + protected function getQueryInfo( $randstr ) { + $redirect = $this->isRedirect() ? 1 : 0; + + return array( + 'tables' => array( 'page' ), + 'fields' => array( 'page_title', 'page_namespace' ), + 'conds' => array_merge( array( + 'page_namespace' => $this->namespaces, + 'page_is_redirect' => $redirect, + 'page_random >= ' . $randstr + ), $this->extra ), + 'options' => array( + 'ORDER BY' => 'page_random', + 'USE INDEX' => 'page_random', + 'LIMIT' => 1, + ), + 'join_conds' => array() + ); } - private function selectRandomPageFromDB( $randstr ) { - global $wgExtraRandompageSQL; + private function selectRandomPageFromDB( $randstr, $fname = __METHOD__ ) { $dbr = wfGetDB( DB_SLAVE ); - $use_index = $dbr->useIndexClause( 'page_random' ); - $page = $dbr->tableName( 'page' ); + $query = $this->getQueryInfo( $randstr ); + $res = $dbr->select( + $query['tables'], + $query['fields'], + $query['conds'], + $fname, + $query['options'], + $query['join_conds'] + ); - $ns = implode( ",", $this->namespaces ); - $redirect = $this->isRedirect() ? 1 : 0; - - if ( $wgExtraRandompageSQL ) { - $this->extra[] = $wgExtraRandompageSQL; - } - if ( $this->addExtraSQL() ) { - $this->extra[] = $this->addExtraSQL(); - } - $extra = ''; - if ( $this->extra ) { - $extra = 'AND (' . implode( ') AND (', $this->extra ) . ')'; - } - $sql = "SELECT page_title, page_namespace - FROM $page $use_index - WHERE page_namespace IN ( $ns ) - AND page_is_redirect = $redirect - AND page_random >= $randstr - $extra - ORDER BY page_random"; - - $sql = $dbr->limitResult( $sql, 1, 0 ); - $res = $dbr->query( $sql, __METHOD__ ); return $dbr->fetchObject( $res ); } - - /* an alternative to $wgExtraRandompageSQL so subclasses - * can add their own SQL by overriding this function - * @deprecated, append to $this->extra instead - */ - public function addExtraSQL() { - return ''; - } } |