X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fspecials%2FSpecialWantedpages.php;h=4624b3550d42695d530e9eb21d63f6e013d56ef2;hb=553b2964e26a100950736059a0b0fd1605985112;hp=4e1611bce4a7c3cdfce9cc6b4da639de27a4287b;hpb=9e6c7cc8efda090a5fa292b37eb20ba7c2ad0c87;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/specials/SpecialWantedpages.php b/includes/specials/SpecialWantedpages.php index 4e1611bce4..4624b3550d 100644 --- a/includes/specials/SpecialWantedpages.php +++ b/includes/specials/SpecialWantedpages.php @@ -27,60 +27,65 @@ * @ingroup SpecialPage */ class WantedPagesPage extends WantedQueryPage { - var $nlinks; - - function __construct( $inc = false, $nlinks = true ) { - $this->setListoutput( $inc ); - $this->nlinks = $nlinks; + + function __construct( $name = 'Wantedpages' ) { + parent::__construct( $name ); + $this->mIncludable = true; } - function getName() { - return 'Wantedpages'; + function execute( $par ) { + $inc = $this->including(); + + if ( $inc ) { + $parts = explode( '/', $par, 2 ); + $this->limit = (int)$parts[0]; + // @todo FIXME: nlinks is ignored + //$nlinks = isset( $parts[1] ) && $parts[1] === 'nlinks'; + $this->offset = 0; + } else { + //$nlinks = true; + } + $this->setListoutput( $inc ); + $this->shownavigation = !$inc; + parent::execute( $par ); } - function getSQL() { + function getQueryInfo() { global $wgWantedPagesThreshold; $count = $wgWantedPagesThreshold - 1; - $dbr = wfGetDB( DB_SLAVE ); - $pagelinks = $dbr->tableName( 'pagelinks' ); - $page = $dbr->tableName( 'page' ); - $sql = "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 ( " . NS_USER . ", ". NS_USER_TALK . ") - AND pg2.page_namespace != " . NS_MEDIAWIKI . " - GROUP BY pl_namespace, pl_title - HAVING COUNT(*) > $count"; - - wfRunHooks( 'WantedPages::getSQL', array( &$this, &$sql ) ); - return $sql; + $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 for the WantedPages::getSQL hook + wfRunHooks( 'WantedPages::getQueryInfo', array( &$this, &$query ) ); + return $query; } } - -/** - * 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; - } - - $wpp = new WantedPagesPage( $inc, $nlinks ); - - $wpp->doQuery( $offset, $limit, !$inc ); -}