-function migrate_page_restrictions( $db ) {
-
- $start = $db->selectField( 'page', 'MIN(page_id)', false, __FUNCTION__ );
- $end = $db->selectField( 'page', 'MAX(page_id)', false, __FUNCTION__ );
-
- if( !$start ) {
- die("Nothing to do.\n");
- }
-
- # Do remaining chunk
- $end += BATCH_SIZE - 1;
- $blockStart = $start;
- $blockEnd = $start + BATCH_SIZE - 1;
- $encodedExpiry = 'infinity';
- while ( $blockEnd <= $end ) {
- echo "...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_restrictions'), $cond, __FUNCTION__ );
- $batch = array();
- while ( $row = $db->fetchObject( $res ) ) {
- $oldRestrictions = array();
- foreach( explode( ':', trim( $row->page_restrictions ) ) as $restrict ) {
- $temp = explode( '=', trim( $restrict ) );
- // Make sure we are not settings restrictions to ""
- if( count($temp) == 1 && $temp[0] ) {
- // old old format should be treated as edit/move restriction
- $oldRestrictions["edit"] = trim( $temp[0] );
- $oldRestrictions["move"] = trim( $temp[0] );
- } else if( $temp[1] ) {
- $oldRestrictions[$temp[0]] = trim( $temp[1] );
+ $start = $db->selectField( 'page', 'MIN(page_id)', false, __METHOD__ );
+ if ( !$start ) {
+ $this->error( "Nothing to do.", true );
+ }
+ $end = $db->selectField( 'page', 'MAX(page_id)', false, __METHOD__ );
+
+ # Do remaining chunk
+ $end += $this->mBatchSize - 1;
+ $blockStart = $start;
+ $blockEnd = $start + $this->mBatchSize - 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();
+ foreach ( $res as $row ) {
+ $oldRestrictions = array();
+ foreach ( explode( ':', trim( $row->page_restrictions ) ) as $restrict ) {
+ $temp = explode( '=', trim( $restrict ) );
+ // Make sure we are not settings restrictions to ""
+ if ( count( $temp ) == 1 && $temp[0] ) {
+ // old old format should be treated as edit/move restriction
+ $oldRestrictions["edit"] = trim( $temp[0] );
+ $oldRestrictions["move"] = trim( $temp[0] );
+ } elseif ( $temp[1] ) {
+ $oldRestrictions[$temp[0]] = trim( $temp[1] );
+ }
+ }
+ # Clear invalid columns
+ if ( $row->page_namespace == NS_MEDIAWIKI ) {
+ $db->update( 'page', array( 'page_restrictions' => '' ),
+ array( '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(
+ 'pr_page' => $row->page_id,
+ 'pr_type' => $action,
+ 'pr_level' => $restrictions,
+ 'pr_cascade' => 0,
+ 'pr_expiry' => $encodedExpiry
+ );