SECURITY: Add permission check for user is permitted to view the log type
[lhc/web/wiklou.git] / maintenance / populateLogUsertext.php
index ec3c472..3c0bba9 100644 (file)
@@ -48,34 +48,43 @@ class PopulateLogUsertext extends LoggedUpdateMaintenance {
        }
 
        protected function doDBUpdates() {
+               $batchSize = $this->getBatchSize();
                $db = $this->getDB( DB_MASTER );
-               $start = $db->selectField( 'logging', 'MIN(log_id)', false, __METHOD__ );
+               $start = $db->selectField( 'logging', 'MIN(log_id)', '', __METHOD__ );
                if ( !$start ) {
                        $this->output( "Nothing to do.\n" );
 
                        return true;
                }
-               $end = $db->selectField( 'logging', 'MAX(log_id)', false, __METHOD__ );
+               $end = $db->selectField( 'logging', 'MAX(log_id)', '', __METHOD__ );
+
+               // If this is being run during an upgrade from 1.16 or earlier, this
+               // will be run before the actor table change and should continue. But
+               // if it's being run on a new installation, the field won't exist to be populated.
+               if ( !$db->fieldInfo( 'logging', 'log_user_text' ) ) {
+                       $this->output( "No log_user_text field, nothing to do.\n" );
+                       return true;
+               }
 
                # Do remaining chunk
-               $end += $this->mBatchSize - 1;
+               $end += $batchSize - 1;
                $blockStart = $start;
-               $blockEnd = $start + $this->mBatchSize - 1;
+               $blockEnd = $start + $batchSize - 1;
                while ( $blockEnd <= $end ) {
                        $this->output( "...doing log_id from $blockStart to $blockEnd\n" );
-                       $cond = "log_id BETWEEN $blockStart AND $blockEnd AND log_user = user_id";
-                       $res = $db->select( array( 'logging', 'user' ),
-                               array( 'log_id', 'user_name' ), $cond, __METHOD__ );
+                       $cond = "log_id BETWEEN " . (int)$blockStart . " AND " . (int)$blockEnd .
+                               " AND log_user = user_id";
+                       $res = $db->select( [ 'logging', 'user' ],
+                               [ 'log_id', 'user_name' ], $cond, __METHOD__ );
 
                        $this->beginTransaction( $db, __METHOD__ );
                        foreach ( $res as $row ) {
-                               $db->update( 'logging', array( 'log_user_text' => $row->user_name ),
-                                       array( 'log_id' => $row->log_id ), __METHOD__ );
+                               $db->update( 'logging', [ 'log_user_text' => $row->user_name ],
+                                       [ 'log_id' => $row->log_id ], __METHOD__ );
                        }
                        $this->commitTransaction( $db, __METHOD__ );
-                       $blockStart += $this->mBatchSize;
-                       $blockEnd += $this->mBatchSize;
-                       wfWaitForSlaves();
+                       $blockStart += $batchSize;
+                       $blockEnd += $batchSize;
                }
                $this->output( "Done populating log_user_text field.\n" );
 
@@ -83,5 +92,5 @@ class PopulateLogUsertext extends LoggedUpdateMaintenance {
        }
 }
 
-$maintClass = "PopulateLogUsertext";
+$maintClass = PopulateLogUsertext::class;
 require_once RUN_MAINTENANCE_IF_MAIN;