X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FSpecialWantedpages.php;h=5fc45a8834dd152b107d20e5fd4489d3e560562b;hb=c78f424cf68adc7bd5807355473f1e698162d4ad;hp=3f84ce333af5a943d6264829b35c39b7d0a62307;hpb=d82c14fb4fbac288b42ca5918b0a72f33ecb1e69;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/SpecialWantedpages.php b/includes/SpecialWantedpages.php index 3f84ce333a..5fc45a8834 100644 --- a/includes/SpecialWantedpages.php +++ b/includes/SpecialWantedpages.php @@ -1,74 +1,133 @@ -getValidSpecialPages() ; - $mw = $vsp["Wantedpages"] ; - $mw = str_replace ( " " , "_" , $mw ) ; # DBKEY - $log = new LogPage ( $mw ) ; - $log->mUpdateRecentChanges = false ; - - $wgOut->setRobotpolicy( "noindex,nofollow" ); - global $wgMiserMode; - if ( $wgMiserMode ) { - $s = "=== " . wfMsg( "perfdisabled" ) . " ===\n" ; - $s .= $log->getContent() ; - $wgOut->addWikiText ( $s ) ; - return; + function WantedPagesPage( $inc = false, $nlinks = true ) { + $this->setListoutput( $inc ); + $this->nlinks = $nlinks; } - if ( ! $limit ) { - $limit = $wgUser->getOption( "rclimit" ); - if ( ! $limit ) { $limit = 50; } + function getName() { + return 'Wantedpages'; } - if ( ! $offset ) { $offset = 0; } - - $cache = "" ; # To be saved, eventually - - $sql = "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}"; - $res = wfQuery( $sql, $fname ); - $sk = $wgUser->getSkin(); + function isExpensive() { + return true; + } + function isSyndicated() { return false; } - $top = wfShowingResults( $offset, $limit ); - $wgOut->addHTML( "

{$top}\n" ); + 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"; + } - $sl = wfViewPrevNext( $offset, $limit, - $wgLang->specialpage( "Wantedpages" ) ); - $wgOut->addHTML( "
{$sl}\n" ); + /** + * 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(); - $s = "

    "; - while ( $obj = wfFetchObject( $res ) ) { - $nt = Title::newFromDBkey( $obj->bl_to ); + // Back to start for display + if ( $db->numRows( $res ) > 0 ) + // If there are no rows we get an error seeking. + $db->dataSeek( $res, 0 ); + } - $plink = $sk->makeBrokenLink( $nt->getPrefixedText(), "" ); - $nl = str_replace( "$1", $obj->nlinks, wfMsg( "nlinks" ) ); - $nlink = $sk->makeKnownLink( $wgLang->specialPage( - "Whatlinkshere" ), $nl, "target=" . $nt->getPrefixedURL() ); + /** + * 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 ) { + $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; + } + } + +} - $cache .= "* [[".$nt->getPrefixedText()."]] ({$nl})\n" ; +/** + * constructor + */ +function wfSpecialWantedpages( $par = null, $specialPage ) { + $inc = $specialPage->including(); - $s .= "
  1. {$plink} ({$nlink})
  2. \n"; + if ( $inc ) { + @list( $limit, $nlinks ) = explode( '/', $par, 2 ); + $limit = (int)$limit; + $nlinks = $nlinks === 'nlinks'; + $offset = 0; + } else { + list( $limit, $offset ) = wfCheckLimits(); + $nlinks = true; } - wfFreeResult( $res ); - $s .= "
"; - $wgOut->addHTML( $s ); - $wgOut->addHTML( "

{$sl}\n" ); - # Saving cache - if ( $offset > 0 OR $limit < 50 ) return ; #Not suitable - $log->mContent = $cache ; - $log->mContentLoaded = true ; - $log->saveContent() ; + $wpp = new WantedPagesPage( $inc, $nlinks ); + + $wpp->doQuery( $offset, $limit, !$inc ); } -?> +