MediaWiki  master
fixUserRegistration.php
Go to the documentation of this file.
1 <?php
25 require_once __DIR__ . '/Maintenance.php';
26 
33  public function __construct() {
34  parent::__construct();
35  $this->addDescription( 'Fix the user_registration field' );
36  $this->setBatchSize( 1000 );
37  }
38 
39  public function execute() {
40  $dbw = $this->getDB( DB_MASTER );
41 
42  $lastId = 0;
43  do {
44  // Get user IDs which need fixing
45  $res = $dbw->select(
46  'user',
47  'user_id',
48  [
49  'user_id > ' . $dbw->addQuotes( $lastId ),
50  'user_registration IS NULL'
51  ],
52  __METHOD__,
53  [
54  'LIMIT' => $this->getBatchSize(),
55  'ORDER BY' => 'user_id',
56  ]
57  );
58  foreach ( $res as $row ) {
59  $id = $row->user_id;
60  $lastId = $id;
61  // Get first edit time
62  $actorQuery = ActorMigration::newMigration()
63  ->getWhere( $dbw, 'rev_user', User::newFromId( $id ) );
64  $timestamp = $dbw->selectField(
65  [ 'revision' ] + $actorQuery['tables'],
66  'MIN(rev_timestamp)',
67  $actorQuery['conds'],
68  __METHOD__,
69  [],
70  $actorQuery['joins']
71  );
72  // Update
73  if ( $timestamp !== null ) {
74  $dbw->update(
75  'user',
76  [ 'user_registration' => $timestamp ],
77  [ 'user_id' => $id ],
78  __METHOD__
79  );
80  $user = User::newFromId( $id );
81  $user->invalidateCache();
82  $this->output( "Set registration for #$id to $timestamp\n" );
83  } else {
84  $this->output( "Could not find registration for #$id NULL\n" );
85  }
86  }
87  $this->output( "Waiting for replica DBs..." );
89  $this->output( " done.\n" );
90  } while ( $res->numRows() >= $this->getBatchSize() );
91  }
92 }
93 
94 $maintClass = FixUserRegistration::class;
95 require_once RUN_MAINTENANCE_IF_MAIN;
RUN_MAINTENANCE_IF_MAIN
const RUN_MAINTENANCE_IF_MAIN
Definition: Maintenance.php:39
User\newFromId
static newFromId( $id)
Static factory method for creation from a given user ID.
Definition: User.php:560
$maintClass
$maintClass
Definition: fixUserRegistration.php:94
Maintenance\addDescription
addDescription( $text)
Set the description text.
Definition: Maintenance.php:352
Maintenance
Abstract maintenance class for quickly writing and churning out maintenance scripts with minimal effo...
Definition: Maintenance.php:86
$res
$res
Definition: testCompression.php:54
wfWaitForSlaves
wfWaitForSlaves( $ifWritesSince=null, $wiki=false, $cluster=false, $timeout=null)
Waits for the replica DBs to catch up to the master position.
Definition: GlobalFunctions.php:2722
ActorMigration\newMigration
static newMigration()
Static constructor.
Definition: ActorMigration.php:139
FixUserRegistration\__construct
__construct()
Default constructor.
Definition: fixUserRegistration.php:33
DB_MASTER
const DB_MASTER
Definition: defines.php:26
FixUserRegistration
Maintenance script that fixes the user_registration field.
Definition: fixUserRegistration.php:32
FixUserRegistration\execute
execute()
Do the actual work.
Definition: fixUserRegistration.php:39
Maintenance\getDB
getDB( $db, $groups=[], $dbDomain=false)
Returns a database to be used by current maintenance script.
Definition: Maintenance.php:1407
Maintenance\getBatchSize
getBatchSize()
Returns batch size.
Definition: Maintenance.php:390
Maintenance\output
output( $out, $channel=null)
Throw some output to the user.
Definition: Maintenance.php:457
Maintenance\setBatchSize
setBatchSize( $s=0)
Set the batch size.
Definition: Maintenance.php:398