addOption( 'commit', 'Whether to actually update the database', false, false ); $this->setBatchSize( 500 ); } public function execute() { $this->commit = $this->hasOption( 'commit' ); $dbr = $this->getDB( DB_SLAVE ); $dbw = $this->getDB( DB_MASTER ); $lastId = 0; do { $rows = $dbr->select( 'user', array( 'user_id', 'user_email' ), array( 'user_id > ' . $dbr->addQuotes( $lastId ), 'user_email != ""', 'user_email_authenticated IS NULL' ), __METHOD__, array( 'LIMIT' => $this->mBatchSize ) ); $count = $rows->numRows(); $badIds = array(); foreach ( $rows as $row ) { if ( !Sanitizer::validateEmail( trim( $row->user_email ) ) ) { $this->output( "Found bad email: {$row->user_email} for user #{$row->user_id}\n" ); $badIds[] = $row->user_id; } if ( $row->user_id > $lastId ) { $lastId = $row->user_id; } } if ( $badIds ) { $badCount = count( $badIds ); if ( $this->commit ) { $this->output( "Removing $badCount emails from the database.\n" ); $dbw->update( 'user', array( 'user_email' => '' ), array( 'user_id' => $badIds ), __METHOD__ ); foreach ( $badIds as $badId ) { User::newFromId( $badId )->invalidateCache(); } wfWaitForSlaves(); } else { $this->output( "Would have removed $badCount emails from the database.\n" ); } } } while ( $count !== 0 ); $this->output( "Done.\n" ); } } $maintClass = 'RemoveInvalidEmails'; require_once RUN_MAINTENANCE_IF_MAIN;