X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=maintenance%2FrefreshLinks.inc;h=34ea6294d09b121d1bdf56b9f6875e9d8dddab4b;hb=8d66c4d82b00dc84eddd51beecb62499253979c0;hp=355cf520024b639d07d0c7ffaf4ebaf0ba277f57;hpb=d5e212999a16c7f89e24902846290e948abadb2e;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/refreshLinks.inc b/maintenance/refreshLinks.inc index 355cf52002..34ea6294d0 100644 --- a/maintenance/refreshLinks.inc +++ b/maintenance/refreshLinks.inc @@ -7,31 +7,37 @@ /** */ define( "REPORTING_INTERVAL", 100 ); +#define( "REPORTING_INTERVAL", 1 ); -function refreshLinks( $start, $newOnly = false, $maxLag = false ) { - global $wgUser, $wgParser, $wgUseImageResize; +function refreshLinks( $start, $newOnly = false, $maxLag = false, $end = 0 ) { + global $wgUser, $wgParser, $wgUseImageResize, $wgUseTidy; $fname = 'refreshLinks'; $dbr =& wfGetDB( DB_SLAVE ); - $dbw =& wfGetDB( DB_MASTER ); $start = intval( $start ); - + # Don't generate TeX PNGs (lack of a sensible current directory causes errors anyway) - $wgUser->setOption("math", 3); + $wgUser->setOption('math', MW_MATH_SOURCE); # Don't generate extension images (e.g. Timeline) $wgParser->mTagHooks = array(); - + # Don't generate thumbnail images $wgUseImageResize = false; + $wgUseTidy = false; if ( $newOnly ) { print "Refreshing links from "; - $res = $dbr->select( 'page', array( 'page_id' ), - array( 'page_is_new' => 1, "page_id > $start" ), $fname ); + $res = $dbr->select( 'page', + array( 'page_id' ), + array( + 'page_is_new' => 1, + "page_id > $start" ), + $fname + ); $num = $dbr->numRows( $res ); print "$num new articles...\n"; - + $i = 0; while ( $row = $dbr->fetchObject( $res ) ) { if ( !( ++$i % REPORTING_INTERVAL ) ) { @@ -43,71 +49,61 @@ function refreshLinks( $start, $newOnly = false, $maxLag = false ) { } } else { print "Refreshing link table.\n"; - $end = $dbr->selectField( 'page', 'max(page_id)', false ); + if ( !$end ) { + $end = $dbr->selectField( 'page', 'max(page_id)', false ); + } print("Starting from page_id $start of $end.\n"); for ($id = $start; $id <= $end; $id++) { - + if ( !($id % REPORTING_INTERVAL) ) { print "$id\n"; wfWaitForSlaves( $maxLag ); } fixLinksFromArticle( $id ); } - - } } function fixLinksFromArticle( $id ) { - global $wgTitle, $wgArticle, $wgLinkCache, $wgOut; + global $wgTitle, $wgParser; $wgTitle = Title::newFromID( $id ); $dbw =& wfGetDB( DB_MASTER ); + + $linkCache =& LinkCache::singleton(); + $linkCache->clear(); if ( is_null( $wgTitle ) ) { return; } $dbw->begin(); - $wgArticle = new Article( $wgTitle ); - $text = $wgArticle->getContent( true ); - $wgLinkCache = new LinkCache; - $wgLinkCache->forUpdate( true ); - - global $wgLinkHolders; - $wgLinkHolders = array( - 'namespaces' => array(), - 'dbkeys' => array(), - 'queries' => array(), - 'texts' => array(), - 'titles' => array() - ); - - - # Parse the text and replace links with placeholders - $wgOut->addWikiText( $text ); - - # Look up the links in the DB and add them to the link cache - $wgOut->transformBuffer(); - $wgOut->clearHTML(); + $revision = Revision::newFromTitle( $wgTitle ); + if ( !$revision ) { + return; + } - $linksUpdate = new LinksUpdate( $id, $wgTitle->getPrefixedDBkey() ); - $linksUpdate->doDumbUpdate(); + $options = new ParserOptions; + $parserOutput = $wgParser->parse( $revision->getText(), $wgTitle, $options, true, true, $revision->getId() ); + $update = new LinksUpdate( $wgTitle, $parserOutput, false ); + $update->doUpdate(); $dbw->immediateCommit(); } function deleteLinksFromNonexistent( $maxLag = 0 ) { $fname = 'deleteLinksFromNonexistent'; - + wfWaitForSlaves( $maxLag ); $dbw =& wfGetDB( DB_WRITE ); - - $linksTables = array( + + $linksTables = array( 'pagelinks' => 'pl_from', 'imagelinks' => 'il_from', 'categorylinks' => 'cl_from', + 'templatelinks' => 'tl_from', + 'externallinks' => 'el_from', ); $page = $dbw->tableName( 'page' ); @@ -124,30 +120,8 @@ function deleteLinksFromNonexistent( $maxLag = 0 ) { } $pTable = $dbw->tableName( $table ); - global $wgDBmysql4, $wgDBtype; - if( $wgDBmysql4 || $wgDBtype != 'mysql' ) { - $sql = "DELETE $pTable FROM $pTable LEFT JOIN $page ON page_id=$field WHERE page_id IS NULL"; - } else { - # Hack-around for MySQL 3.x, which lacks support - # for multi-table deletes. - - $sql = "SELECT DISTINCT $field AS id FROM $pTable LEFT JOIN $page ON page_id=$field WHERE page_id IS NULL"; - echo "Looking in $table from non-existent articles..."; - $result = $dbw->query( $sql ); - $ids = array(); - while( $row = $dbw->fetchObject( $result ) ) { - $ids[] = $row->id; - } - $dbw->freeResult( $result ); - - if( empty( $ids ) ) { - echo " none.\n"; - continue; - } - echo " found.\n"; - $sql = "DELETE FROM $pTable WHERE $field IN (" . implode( ",", $ids ) . ")"; - } - + $sql = "DELETE $pTable FROM $pTable LEFT JOIN $page ON page_id=$field WHERE page_id IS NULL"; + print "Deleting $table from non-existent articles..."; $dbw->query( $sql, $fname ); print " fixed " .$dbw->affectedRows() . " row(s)\n";