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 ); $num = $dbr->numRows( $res ); print "$num new articles...\n"; $i = 0; while ( $row = $dbr->fetchObject( $res ) ) { if ( !( ++$i % REPORTING_INTERVAL ) ) { print "$i\n"; wfWaitForSlaves( $maxLag ); } fixLinksFromArticle( $row->page_id ); } } else { print "Refreshing link table.\n"; 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, $wgParser; $wgTitle = Title::newFromID( $id ); $dbw =& wfGetDB( DB_MASTER ); $linkCache =& LinkCache::singleton(); $linkCache->clear(); if ( is_null( $wgTitle ) ) { return; } $dbw->begin(); $revision = Revision::newFromTitle( $wgTitle ); if ( !$revision ) { return; } $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( 'pagelinks' => 'pl_from', 'imagelinks' => 'il_from', 'categorylinks' => 'cl_from', 'templatelinks' => 'tl_from', 'externallinks' => 'el_from', ); $page = $dbw->tableName( 'page' ); foreach ( $linksTables as $table => $field ) { if ( !$dbw->ping() ) { print "DB disconnected, reconnecting..."; while ( !$dbw->ping() ) { print "."; sleep(10); } print "\n"; } $pTable = $dbw->tableName( $table ); $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"; } } ?>