X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FSpecialWantedpages.php;h=02cd11277f63e1512ef6c48ff08a2e494a55fa61;hb=d466cf6e86b929b17e3a9938e16a4e97d9448cdb;hp=7fd09db4e4413c89697f36574a7b337096d5ea71;hpb=e7e9f1dbc7441f6119ff598f9cb7061e64b65d60;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/SpecialWantedpages.php b/includes/SpecialWantedpages.php index 7fd09db4e4..02cd11277f 100644 --- a/includes/SpecialWantedpages.php +++ b/includes/SpecialWantedpages.php @@ -1,21 +1,20 @@ setListoutput( $inc ); + $this->nlinks = $nlinks; + } function getName() { return 'Wantedpages'; @@ -24,55 +23,112 @@ class WantedPagesPage extends QueryPage { function isExpensive() { return true; } + function isSyndicated() { return false; } function getSQL() { - $dbr =& wfGetDB( DB_SLAVE ); - $brokenlinks = $dbr->tableName( 'brokenlinks' ); - - # We cheat and return the full-text from bl_to in the title. - # In the future, a pre-parsed name will be available. - $agrvalue=$dbr->aggregateValue('COUNT(DISTINCT bl_from)'); + global $wgWantedPagesThreshold; + $count = $wgWantedPagesThreshold - 1; + $dbr = wfGetDB( DB_SLAVE ); + $pagelinks = $dbr->tableName( 'pagelinks' ); + $page = $dbr->tableName( 'page' ); return - "SELECT 'Wantedpages' as type, - 0 as namespace, - bl_to as title, - COUNT(DISTINCT bl_from) as value - FROM $brokenlinks - GROUP BY bl_to - HAVING $agrvalue > 1 - ORDER BY $agrvalue ". - ($this->sortDescending() ? 'DESC' : ''); + "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 1,2,3 + HAVING COUNT(*) > $count"; } - function getOrder() { - return ''; - } + /** + * Cache page existence for performance + */ + function preprocessResults( &$db, &$res ) { + $batch = new LinkBatch; + while ( $row = $db->fetchObject( $res ) ) + $batch->addObj( Title::makeTitleSafe( $row->namespace, $row->title ) ); + $batch->execute(); - function formatResult( $skin, $result ) { - global $wgLang; + // Back to start for display + if ( $db->numRows( $res ) > 0 ) + // If there are no rows we get an error seeking. + $db->dataSeek( $res, 0 ); + } - $nt = Title::newFromDBkey( $result->title ); - if( is_null( $nt ) ) { - return ""; + /** + * Format an individual result + * + * @param Skin $skin Skin to use for UI elements + * @param object $result Result row + * @return string + */ + public function formatResult( $skin, $result ) { + global $wgLang; + $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}"; } - $plink = $skin->makeBrokenLink( $nt->getPrefixedText(), "" ); - $nl = wfMsg( "nlinks", $result->value ); - $nlink = $skin->makeKnownLink( $wgLang->specialPage( "Whatlinkshere" ), $nl, - "target=" . $nt->getPrefixedURL() ); - - return "{$plink} ({$nlink})"; } + + /** + * Make a "what links here" link for a specified result if required + * + * @param Title $title Title to make the link for + * @param Skin $skin Skin to use + * @param object $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() ); + } else { + return null; + } + } + } /** * constructor */ -function wfSpecialWantedpages() { - list( $limit, $offset ) = wfCheckLimits(); +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(); + $wpp = new WantedPagesPage( $inc, $nlinks ); - $wpp->doQuery( $offset, $limit ); + $wpp->doQuery( $offset, $limit, !$inc ); } -?> +