X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fspecials%2FSpecialWantedpages.php;h=8878d27397c2587b34149b7b670f222e8964621d;hb=128f33aa5edc924db3249ccfcb8246bbc40b692a;hp=101334099542a03d63224765e2672cc17086a9de;hpb=8f92ba9b29379f1b2764cebf153996bacded62bc;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/specials/SpecialWantedpages.php b/includes/specials/SpecialWantedpages.php index 1013340995..8878d27397 100644 --- a/includes/specials/SpecialWantedpages.php +++ b/includes/specials/SpecialWantedpages.php @@ -1,131 +1,79 @@ setListoutput( $inc ); - $this->nlinks = $nlinks; - } - - function getName() { - return 'Wantedpages'; - } - - function isExpensive() { - return true; - } - function isSyndicated() { return false; } - - function getSQL() { - global $wgWantedPagesThreshold; - $count = $wgWantedPagesThreshold - 1; - $dbr = wfGetDB( DB_SLAVE ); - $pagelinks = $dbr->tableName( 'pagelinks' ); - $page = $dbr->tableName( 'page' ); - return - "SELECT 'Wantedpages' AS type, - pl_namespace AS namespace, - pl_title AS title, - COUNT(*) AS value - FROM $pagelinks - LEFT JOIN $page AS pg1 - ON pl_namespace = pg1.page_namespace AND pl_title = pg1.page_title - LEFT JOIN $page AS pg2 - ON pl_from = pg2.page_id - WHERE pg1.page_namespace IS NULL - AND pl_namespace NOT IN ( 2, 3 ) - AND pg2.page_namespace != 8 - GROUP BY pl_namespace, pl_title - HAVING COUNT(*) > $count"; - } - - /** - * Cache page existence for performance - */ - function preprocessResults( $db, $res ) { - $batch = new LinkBatch; - while ( $row = $db->fetchObject( $res ) ) - $batch->add( $row->namespace, $row->title ); - $batch->execute(); - - // Back to start for display - if ( $db->numRows( $res ) > 0 ) - // If there are no rows we get an error seeking. - $db->dataSeek( $res, 0 ); +class WantedPagesPage extends WantedQueryPage { + function __construct( $name = 'Wantedpages' ) { + parent::__construct( $name ); } - /** - * Format an individual result - * - * @param $skin Skin to use for UI elements - * @param $result Result row - * @return string - */ - public function formatResult( $skin, $result ) { - $title = Title::makeTitleSafe( $result->namespace, $result->title ); - if( $title instanceof Title ) { - if( $this->isCached() ) { - $pageLink = $title->exists() - ? '' . $skin->makeLinkObj( $title ) . '' - : $skin->makeBrokenLinkObj( $title ); - } else { - $pageLink = $skin->makeBrokenLinkObj( $title ); - } - return wfSpecialList( $pageLink, $this->makeWlhLink( $title, $skin, $result ) ); - } else { - $tsafe = htmlspecialchars( $result->title ); - return "Invalid title in result set; {$tsafe}"; - } - } + function execute( $par ) { + $inc = $this->including(); - /** - * Make a "what links here" link for a specified result if required - * - * @param $title Title to make the link for - * @param $skin Skin to use - * @param $result Result row - * @return string - */ - private function makeWlhLink( $title, $skin, $result ) { - global $wgLang; - if( $this->nlinks ) { - $wlh = SpecialPage::getTitleFor( 'Whatlinkshere' ); - $label = wfMsgExt( 'nlinks', array( 'parsemag', 'escape' ), - $wgLang->formatNum( $result->value ) ); - return $skin->makeKnownLinkObj( $wlh, $label, 'target=' . $title->getPrefixedUrl() ); + if ( $inc ) { + @list( $limit, $nlinks ) = explode( '/', $par, 2 ); + $this->limit = (int)$limit; + // FIXME: nlinks is ignored + $nlinks = $nlinks === 'nlinks'; + $this->offset = 0; } else { - return null; + $nlinks = true; } + $this->setListOutput( $inc ); + $this->shownavigation = !$inc; + parent::execute( $par ); } -} - -/** - * constructor - */ -function wfSpecialWantedpages( $par = null, $specialPage ) { - $inc = $specialPage->including(); - - if ( $inc ) { - @list( $limit, $nlinks ) = explode( '/', $par, 2 ); - $limit = (int)$limit; - $nlinks = $nlinks === 'nlinks'; - $offset = 0; - } else { - list( $limit, $offset ) = wfCheckLimits(); - $nlinks = true; + function getQueryInfo() { + global $wgWantedPagesThreshold; + $count = $wgWantedPagesThreshold - 1; + $query = array ( + 'tables' => array ( 'pagelinks', 'pg1' => 'page', + 'pg2' => 'page' ), + 'fields' => array ( 'pl_namespace AS namespace', + 'pl_title AS title', + 'COUNT(*) AS value' ), + 'conds' => array ( 'pg1.page_namespace IS NULL', + "pl_namespace NOT IN ( '" . NS_USER . + "', '" . NS_USER_TALK . "' )", + "pg2.page_namespace != '" . + NS_MEDIAWIKI . "'" ), + 'options' => array ( 'HAVING' => "COUNT(*) > $count", + 'GROUP BY' => 'pl_namespace, pl_title' ), + 'join_conds' => array ( 'pg1' => array ( + 'LEFT JOIN', array ( + 'pg1.page_namespace = pl_namespace', + 'pg1.page_title = pl_title' ) ), + 'pg2' => array ( 'LEFT JOIN', + 'pg2.page_id = pl_from' ) ) + ); + // Replacement WantedPages::getSQL + wfRunHooks( 'WantedPages::getQueryInfo', + array( &$this, &$query ) ); + return $query; } - - $wpp = new WantedPagesPage( $inc, $nlinks ); - - $wpp->doQuery( $offset, $limit, !$inc ); }