diff options
author | Pierre Schmitz <pierre@archlinux.de> | 2011-12-03 13:29:22 +0100 |
---|---|---|
committer | Pierre Schmitz <pierre@archlinux.de> | 2011-12-03 13:29:22 +0100 |
commit | ca32f08966f1b51fcb19460f0996bb0c4048e6fe (patch) | |
tree | ec04cc15b867bc21eedca904cea9af0254531a11 /maintenance/refreshLinks.php | |
parent | a22fbfc60f36f5f7ee10d5ae6fe347340c2ee67c (diff) |
Update to MediaWiki 1.18.0
* also update ArchLinux skin to chagnes in MonoBook
* Use only css to hide our menu bar when printing
Diffstat (limited to 'maintenance/refreshLinks.php')
-rw-r--r-- | maintenance/refreshLinks.php | 88 |
1 files changed, 51 insertions, 37 deletions
diff --git a/maintenance/refreshLinks.php b/maintenance/refreshLinks.php index 144e96c5..0515ef1b 100644 --- a/maintenance/refreshLinks.php +++ b/maintenance/refreshLinks.php @@ -1,5 +1,7 @@ <?php /** + * Refresh link tables. + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -58,19 +60,17 @@ class RefreshLinks extends Maintenance { */ private function doRefreshLinks( $start, $newOnly = false, $maxLag = false, $end = 0, $redirectsOnly = false, $oldRedirectsOnly = false ) { - global $wgUser, $wgParser, $wgUseTidy; + global $wgParser, $wgUseTidy; $reportingInterval = 100; $dbr = wfGetDB( DB_SLAVE ); $start = intval( $start ); - # Don't generate TeX PNGs (lack of a sensible current directory causes errors anyway) - $wgUser->setOption( 'math', MW_MATH_SOURCE ); + // Give extensions a chance to optimize settings + wfRunHooks( 'MaintenanceRefreshLinksInit', array( $this ) ); # Don't generate extension images (e.g. Timeline) - if ( method_exists( $wgParser, "clearTagHooks" ) ) { - $wgParser->clearTagHooks(); - } + $wgParser->clearTagHooks(); # Don't use HTML tidy $wgUseTidy = false; @@ -79,23 +79,35 @@ class RefreshLinks extends Maintenance { if ( $oldRedirectsOnly ) { # This entire code path is cut-and-pasted from below. Hurrah. - $res = $dbr->query( - "SELECT page_id " . - "FROM page " . - "LEFT JOIN redirect ON page_id=rd_from " . - "WHERE page_is_redirect=1 AND rd_from IS NULL AND " . - ( $end == 0 ? "page_id >= $start" - : "page_id BETWEEN $start AND $end" ), - __METHOD__ + + $conds = array( + "page_is_redirect=1", + "rd_from IS NULL" + ); + + if ( $end == 0 ) { + $conds[] = "page_id >= $start"; + } else { + $conds[] = "page_id BETWEEN $start AND $end"; + } + + $res = $dbr->select( + array( 'page', 'redirect' ), + 'page_id', + $conds, + __METHOD__, + array(), + array( 'redirect' => array( "LEFT JOIN", "page_id=rd_from" ) ) ); $num = $dbr->numRows( $res ); $this->output( "Refreshing $num old redirects from $start...\n" ); $i = 0; + foreach ( $res as $row ) { if ( !( ++$i % $reportingInterval ) ) { $this->output( "$i\n" ); - wfWaitForSlaves( $maxLag ); + wfWaitForSlaves(); } $this->fixRedirect( $row->page_id ); } @@ -115,12 +127,13 @@ class RefreshLinks extends Maintenance { foreach ( $res as $row ) { if ( !( ++$i % $reportingInterval ) ) { $this->output( "$i\n" ); - wfWaitForSlaves( $maxLag ); + wfWaitForSlaves(); } - if ( $redirectsOnly ) + if ( $redirectsOnly ) { $this->fixRedirect( $row->page_id ); - else + } else { self::fixLinksFromArticle( $row->page_id ); + } } } else { if ( !$end ) { @@ -135,7 +148,7 @@ class RefreshLinks extends Maintenance { if ( !( $id % $reportingInterval ) ) { $this->output( "$id\n" ); - wfWaitForSlaves( $maxLag ); + wfWaitForSlaves(); } $this->fixRedirect( $id ); } @@ -148,7 +161,7 @@ class RefreshLinks extends Maintenance { if ( !( $id % $reportingInterval ) ) { $this->output( "$id\n" ); - wfWaitForSlaves( $maxLag ); + wfWaitForSlaves(); } self::fixLinksFromArticle( $id ); } @@ -161,29 +174,27 @@ class RefreshLinks extends Maintenance { * @param $id int The page_id of the redirect */ private function fixRedirect( $id ) { - global $wgTitle, $wgArticle; - - $wgTitle = Title::newFromID( $id ); + $title = Title::newFromID( $id ); $dbw = wfGetDB( DB_MASTER ); - if ( is_null( $wgTitle ) ) { + if ( is_null( $title ) ) { // This page doesn't exist (any more) // Delete any redirect table entry for it $dbw->delete( 'redirect', array( 'rd_from' => $id ), __METHOD__ ); return; } - $wgArticle = new Article( $wgTitle ); + $article = new Article( $title ); - $rt = $wgArticle->followRedirect(); + $rt = $article->followRedirect(); if ( !$rt || !is_object( $rt ) ) { - // $wgTitle is not a redirect + // $title is not a redirect // Delete any redirect table entry for it $dbw->delete( 'redirect', array( 'rd_from' => $id ), __METHOD__ ); } else { - $wgArticle->updateRedirectOn( $dbw, $rt ); + $article->updateRedirectOn( $dbw, $rt ); } } @@ -192,31 +203,31 @@ class RefreshLinks extends Maintenance { * @param $id int The page_id */ public static function fixLinksFromArticle( $id ) { - global $wgTitle, $wgParser; + global $wgParser; - $wgTitle = Title::newFromID( $id ); + $title = Title::newFromID( $id ); $dbw = wfGetDB( DB_MASTER ); LinkCache::singleton()->clear(); - if ( is_null( $wgTitle ) ) { + if ( is_null( $title ) ) { return; } $dbw->begin(); - $revision = Revision::newFromTitle( $wgTitle ); + $revision = Revision::newFromTitle( $title ); if ( !$revision ) { return; } $options = new ParserOptions; - $parserOutput = $wgParser->parse( $revision->getText(), $wgTitle, $options, true, true, $revision->getId() ); - $update = new LinksUpdate( $wgTitle, $parserOutput, false ); + $parserOutput = $wgParser->parse( $revision->getText(), $title, $options, true, true, $revision->getId() ); + $update = new LinksUpdate( $title, $parserOutput, false ); $update->doUpdate(); $dbw->commit(); } - /* + /** * Removes non-existing links from pages from pagelinks, imagelinks, * categorylinks, templatelinks and externallinks tables. * @@ -226,7 +237,7 @@ class RefreshLinks extends Maintenance { * @author Merlijn van Deen <valhallasw@arctus.nl> */ private function deleteLinksFromNonexistent( $maxLag = 0, $batchSize = 100 ) { - wfWaitForSlaves( $maxLag ); + wfWaitForSlaves(); $dbw = wfGetDB( DB_MASTER ); @@ -240,6 +251,9 @@ class RefreshLinks extends Maintenance { 'categorylinks' => 'cl_from', 'templatelinks' => 'tl_from', 'externallinks' => 'el_from', + 'iwlinks' => 'iwl_from', + 'langlinks' => 'll_from', + 'redirect' => 'rd_from', ); foreach ( $linksTables as $table => $field ) { @@ -262,7 +276,7 @@ class RefreshLinks extends Maintenance { $counter++; $list[] = $row->$field; if ( ( $counter % $batchSize ) == 0 ) { - wfWaitForSlaves( 5 ); + wfWaitForSlaves(); $dbw->delete( $table, array( $field => $list ), __METHOD__ ); $this->output( $counter . ".." ); |