X-Git-Url: http://git.cyclocoop.org/%7B%24admin_url%7Dmembres/cotisations/gestion/rappel_supprimer.php?a=blobdiff_plain;f=maintenance%2FrebuildFileCache.php;h=aa1bbbb044d0855c502627163d55661bd7d62872;hb=3e11266ae5e5a33498abb7f028bbc79b5ca93515;hp=7c47c08d121ee9329d6c6539f298cbb115a2b0f7;hpb=8b65abe19bf5dcf350a4b0607b7ee9f6b0ca4f22;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/rebuildFileCache.php b/maintenance/rebuildFileCache.php index 7c47c08d12..aa1bbbb044 100644 --- a/maintenance/rebuildFileCache.php +++ b/maintenance/rebuildFileCache.php @@ -20,82 +20,88 @@ * @ingroup Maintenance */ -require_once( dirname(__FILE__) . '/Maintenance.php' ); +require_once( dirname( __FILE__ ) . '/Maintenance.php' ); class RebuildFileCache extends Maintenance { public function __construct() { parent::__construct(); $this->mDescription = "Build file cache for content pages"; - $this->addArgs( array( 'start' ) ); - $this->addOption( 'overwrite', 'Refresh page cache', false ); + $this->addArg( 'start', 'Page_id to start from', true ); + $this->addArg( 'overwrite', 'Refresh page cache', false ); $this->setBatchSize( 100 ); } + /** + * @todo MAKE $wgArticle GO AWAY! This is the absolute LAST use in core + */ public function execute() { - global $wgUseFileCache, $wgContentNamespaces, $wgDisableCounters, $wgTitle, $wgArticle, $wgOut; - if( !$wgUseFileCache ) { + global $wgUseFileCache, $wgDisableCounters, $wgContentNamespaces, $wgRequestTime; + global $wgTitle, $wgArticle, $wgOut; + if ( !$wgUseFileCache ) { $this->error( "Nothing to do -- \$wgUseFileCache is disabled.", true ); } $wgDisableCounters = false; - $start = $this->getArg( 0, 0 ); - if( !ctype_digit($start) ) { + $start = $this->getArg( 0, "0" ); + if ( !ctype_digit( $start ) ) { $this->error( "Invalid value for start parameter.", true ); } - $start = intval($start); - $overwrite = $this->hasArg(1) && $this->getArg(1) === 'overwrite'; + $start = intval( $start ); + $overwrite = $this->hasArg( 1 ) && $this->getArg( 1 ) === 'overwrite'; $this->output( "Building content page file cache from page {$start}!\n" ); $dbr = wfGetDB( DB_SLAVE ); $start = $start > 0 ? $start : $dbr->selectField( 'page', 'MIN(page_id)', false, __FUNCTION__ ); $end = $dbr->selectField( 'page', 'MAX(page_id)', false, __FUNCTION__ ); - if( !$start ) { + if ( !$start ) { $this->error( "Nothing to do.", true ); } $_SERVER['HTTP_ACCEPT_ENCODING'] = 'bgzip'; // hack, no real client - OutputPage::setEncodings(); # Not really used yet # Do remaining chunk $end += $this->mBatchSize - 1; $blockStart = $start; $blockEnd = $start + $this->mBatchSize - 1; - + $dbw = wfGetDB( DB_MASTER ); // Go through each page and save the output - while( $blockEnd <= $end ) { + while ( $blockEnd <= $end ) { // Get the pages - $res = $dbr->select( 'page', array('page_namespace','page_title','page_id'), - array('page_namespace' => $wgContentNamespaces, + $res = $dbr->select( 'page', array( 'page_namespace', 'page_title', 'page_id' ), + array( 'page_namespace' => $wgContentNamespaces, "page_id BETWEEN $blockStart AND $blockEnd" ), - array('ORDER BY' => 'page_id ASC','USE INDEX' => 'PRIMARY') + array( 'ORDER BY' => 'page_id ASC', 'USE INDEX' => 'PRIMARY' ) ); - while( $row = $dbr->fetchObject( $res ) ) { + foreach ( $res as $row ) { $rebuilt = false; + $wgRequestTime = wfTime(); # bug 22852 + $context = new RequestContext; $wgTitle = Title::makeTitleSafe( $row->page_namespace, $row->page_title ); - if( null == $wgTitle ) { - $this->output( "Page {$row->page_id} bad title\n" ); + $context->setTitle( $wgTitle ); + if ( null == $wgTitle ) { + $this->output( "Page {$row->page_id} has bad title\n" ); continue; // broken title? } + $wgOut = $context->output; // set display title $wgArticle = new Article( $wgTitle ); // If the article is cacheable, then load it - if( $wgArticle->isFileCacheable() ) { + if ( $wgArticle->isFileCacheable() ) { $cache = new HTMLFileCache( $wgTitle ); - if( $cache->isFileCacheGood() ) { - if( $overwrite ) { + if ( $cache->isFileCacheGood() ) { + if ( $overwrite ) { $rebuilt = true; } else { $this->output( "Page {$row->page_id} already cached\n" ); continue; // done already! } } - ob_start( array(&$cache, 'saveToFileCache' ) ); // save on ob_end_clean() + ob_start( array( &$cache, 'saveToFileCache' ) ); // save on ob_end_clean() $wgUseFileCache = false; // hack, we don't want $wgArticle fiddling with filecache $wgArticle->view(); @$wgOut->output(); // header notices $wgUseFileCache = true; ob_end_clean(); // clear buffer - $wgOut = new OutputPage(); // empty out any output page garbage - if( $rebuilt ) + if ( $rebuilt ) $this->output( "Re-cached page {$row->page_id}\n" ); else $this->output( "Cached page {$row->page_id}\n" ); @@ -106,17 +112,17 @@ class RebuildFileCache extends Maintenance { } $blockStart += $this->mBatchSize; $blockEnd += $this->mBatchSize; - wfWaitForSlaves( 5 ); + wfWaitForSlaves(); } $this->output( "Done!\n" ); - + // Remove these to be safe - if( isset($wgTitle) ) - unset($wgTitle); - if( isset($wgArticle) ) - unset($wgArticle); + if ( isset( $wgTitle ) ) + unset( $wgTitle ); + if ( isset( $wgArticle ) ) + unset( $wgArticle ); } } $maintClass = "RebuildFileCache"; -require_once( DO_MAINTENANCE ); +require_once( RUN_MAINTENANCE_IF_MAIN );