X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FSpecialWantedpages.php;h=02cd11277f63e1512ef6c48ff08a2e494a55fa61;hb=07aeee4da8cbb4569c48a45f167e75d55401adc1;hp=1a6e8a579914c1881ca26cbb834bf41573c5fecb;hpb=0332f4c59809e5a89f626e8969cd76261819f432;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/SpecialWantedpages.php b/includes/SpecialWantedpages.php index 1a6e8a5799..02cd11277f 100644 --- a/includes/SpecialWantedpages.php +++ b/includes/SpecialWantedpages.php @@ -1,44 +1,134 @@ setListoutput( $inc ); + $this->nlinks = $nlinks; + } function getName() { - return "Wantedpages"; + return 'Wantedpages'; } function isExpensive() { - return 1; + return true; } + function isSyndicated() { return false; } - function getSQL( $offset, $limit ) { - return "SELECT bl_to, COUNT( DISTINCT bl_from ) as nlinks " . - "FROM brokenlinks GROUP BY bl_to HAVING nlinks > 1 " . - "ORDER BY nlinks DESC LIMIT {$offset}, {$limit}"; + 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 1,2,3 + HAVING COUNT(*) > $count"; } - function formatResult( $skin, $result ) { - global $wgLang; - - $nt = Title::newFromDBkey( $result->bl_to ); + /** + * 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(); - $plink = $skin->makeBrokenLink( $nt->getPrefixedText(), "" ); - $nl = wfMsg( "nlinks", $result->nlinks ); - $nlink = $skin->makeKnownLink( $wgLang->specialPage( "Whatlinkshere" ), $nl, - "target=" . $nt->getPrefixedURL() ); + // Back to start for display + if ( $db->numRows( $res ) > 0 ) + // If there are no rows we get an error seeking. + $db->dataSeek( $res, 0 ); + } - return "{$plink} ({$nlink})"; + /** + * 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}"; + } + } + + /** + * 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; + } } + } -function wfSpecialWantedpages() -{ - list( $limit, $offset ) = wfCheckLimits(); +/** + * constructor + */ +function wfSpecialWantedpages( $par = null, $specialPage ) { + $inc = $specialPage->including(); - $wpp = new WantedPagesPage(); + 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 ); + $wpp->doQuery( $offset, $limit, !$inc ); } -?> +