mDescription = "Purge squids pages for a given namespace"; $this->addOption( "namespace", "Namespace number", true, true ); $this->setBatchSize( 100 ); parent::__construct(); } public function execute() { $dbr = wfGetDB( DB_SLAVE ); $ns = $dbr->addQuotes( $this->getOption( 'namespace') ); $result = $dbr->select( array( 'page' ), array( 'page_namespace', 'page_title' ), array( "page_namespace = $ns" ), __METHOD__, array( 'ORDER BY' => 'page_id' ) ); $start = 0; $end = $dbr->numRows( $result ); $this->output( "Will purge $end pages from namespace $ns\n" ); # Do remaining chunk $end += $this->mBatchSize - 1; $blockStart = $start; $blockEnd = $start + $this->mBatchSize - 1; while( $blockEnd <= $end ) { # Select pages we will purge: $result = $dbr->select( array( 'page' ), array( 'page_namespace', 'page_title' ), array( "page_namespace = $ns" ), __METHOD__, array( # conditions 'ORDER BY' => 'page_id', 'LIMIT' => $this->mBatchSize, 'OFFSET' => $blockStart, ) ); # Initialize/reset URLs to be purged $urls = array(); foreach( $result as $row ) { $title = Title::makeTitle( $row->page_namespace, $row->page_title ); $url = $title->getFullUrl(); $urls[] = $url; } $this->sendPurgeRequest( $urls ); $blockStart += $this->mBatchSize; $blockEnd += $this->mBatchSize; } $this->output( "Done!\n" ); } private function sendPurgeRequest( $urls ) { $this->output( "Purging " . count( $urls ). " urls\n" ); $u = new SquidUpdate( $urls ); $u->doUpdate(); } } $maintClass = "PurgeNamespace"; require_once( RUN_MAINTENANCE_IF_MAIN );