class UpdateRestrictions extends Maintenance {
public function __construct() {
parent::__construct();
- $this->mDescription = "Updates page_restrictions table from old page_restriction column";
- $this->setBatchSize( 100 );
+ $this->addDescription( 'Updates page_restrictions table from old page_restriction column' );
+ $this->setBatchSize( 1000 );
}
public function execute() {
- $db = wfGetDB( DB_MASTER );
+ $db = $this->getDB( DB_MASTER );
+ $batchSize = $this->getBatchSize();
if ( !$db->tableExists( 'page_restrictions' ) ) {
- $this->error( "page_restrictions table does not exist", true );
+ $this->fatalError( "page_restrictions table does not exist" );
}
- $start = $db->selectField( 'page', 'MIN(page_id)', false, __METHOD__ );
+ $start = $db->selectField( 'page', 'MIN(page_id)', '', __METHOD__ );
if ( !$start ) {
- $this->error( "Nothing to do.", true );
+ $this->fatalError( "Nothing to do." );
}
- $end = $db->selectField( 'page', 'MAX(page_id)', false, __METHOD__ );
+ $end = $db->selectField( 'page', 'MAX(page_id)', '', __METHOD__ );
# Do remaining chunk
- $end += $this->mBatchSize - 1;
+ $end += $batchSize - 1;
$blockStart = $start;
- $blockEnd = $start + $this->mBatchSize - 1;
+ $blockEnd = $start + $batchSize - 1;
$encodedExpiry = 'infinity';
while ( $blockEnd <= $end ) {
- $this->output( "...doing page_id from $blockStart to $blockEnd\n" );
- $cond = "page_id BETWEEN $blockStart AND $blockEnd AND page_restrictions !=''";
- $res = $db->select( 'page', array( 'page_id', 'page_namespace', 'page_restrictions' ), $cond, __METHOD__ );
- $batch = array();
+ $this->output( "...doing page_id from $blockStart to $blockEnd out of $end\n" );
+ $cond = "page_id BETWEEN " . (int)$blockStart . " AND " . (int)$blockEnd .
+ " AND page_restrictions !=''";
+ $res = $db->select(
+ 'page',
+ [ 'page_id', 'page_namespace', 'page_restrictions' ],
+ $cond,
+ __METHOD__
+ );
+ $batch = [];
foreach ( $res as $row ) {
- $oldRestrictions = array();
+ $oldRestrictions = [];
foreach ( explode( ':', trim( $row->page_restrictions ) ) as $restrict ) {
$temp = explode( '=', trim( $restrict ) );
// Make sure we are not settings restrictions to ""
}
# Clear invalid columns
if ( $row->page_namespace == NS_MEDIAWIKI ) {
- $db->update( 'page', array( 'page_restrictions' => '' ),
- array( 'page_id' => $row->page_id ), __FUNCTION__ );
+ $db->update( 'page', [ 'page_restrictions' => '' ],
+ [ 'page_id' => $row->page_id ], __FUNCTION__ );
$this->output( "...removed dead page_restrictions column for page {$row->page_id}\n" );
}
# Update restrictions table
foreach ( $oldRestrictions as $action => $restrictions ) {
- $batch[] = array(
+ $batch[] = [
'pr_page' => $row->page_id,
'pr_type' => $action,
'pr_level' => $restrictions,
'pr_cascade' => 0,
'pr_expiry' => $encodedExpiry
- );
+ ];
}
}
# We use insert() and not replace() as Article.php replaces
# page_restrictions with '' when protected in the restrictions table
if ( count( $batch ) ) {
- $ok = $db->deadlockLoop( array( $db, 'insert' ), 'page_restrictions',
- $batch, __FUNCTION__, array( 'IGNORE' ) );
+ $ok = $db->deadlockLoop( [ $db, 'insert' ], 'page_restrictions',
+ $batch, __FUNCTION__, [ 'IGNORE' ] );
if ( !$ok ) {
throw new MWException( "Deadlock loop failed wtf :(" );
}
}
- $blockStart += $this->mBatchSize - 1;
- $blockEnd += $this->mBatchSize - 1;
+ $blockStart += $batchSize - 1;
+ $blockEnd += $batchSize - 1;
wfWaitForSlaves();
}
$this->output( "...removing dead rows from page_restrictions\n" );
// Kill any broken rows from previous imports
- $db->delete( 'page_restrictions', array( 'pr_level' => '' ) );
+ $db->delete( 'page_restrictions', [ 'pr_level' => '' ] );
// Kill other invalid rows
- $db->deleteJoin( 'page_restrictions', 'page', 'pr_page', 'page_id', array( 'page_namespace' => NS_MEDIAWIKI ) );
+ $db->deleteJoin(
+ 'page_restrictions',
+ 'page',
+ 'pr_page',
+ 'page_id',
+ [ 'page_namespace' => NS_MEDIAWIKI ]
+ );
$this->output( "...Done!\n" );
}
}
-$maintClass = "UpdateRestrictions";
+$maintClass = UpdateRestrictions::class;
require_once RUN_MAINTENANCE_IF_MAIN;