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