Merge "Improve sorting on SpecialWanted*-Pages"
[mediawiki.git] / maintenance / initUserPreference.php
blobf4da570fbb5ffee070552f2519243370e742fa41
1 <?php
2 /**
3 * Initialize a user preference based on the value
4 * of another preference.
6 * @ingroup Maintenance
7 */
9 require_once __DIR__ . '/Maintenance.php';
11 /**
12 * Maintenance script that initializes a user preference
13 * based on the value of another preference.
15 * @ingroup Maintenance
17 class InitUserPreference extends Maintenance {
18 public function __construct() {
19 parent::__construct();
20 $this->addOption(
21 'target',
22 'Name of the user preference to initialize',
23 true,
24 true,
25 't'
27 $this->addOption(
28 'source',
29 'Name of the user preference to take the value from',
30 true,
31 true,
32 's'
34 $this->setBatchSize( 300 );
37 public function execute() {
38 $target = $this->getOption( 'target' );
39 $source = $this->getOption( 'source' );
40 $this->output( "Initializing '$target' based on the value of '$source'\n" );
42 $dbr = $this->getDB( DB_REPLICA );
43 $dbw = $this->getDB( DB_MASTER );
45 $iterator = new BatchRowIterator(
46 $dbr,
47 'user_properties',
48 [ 'up_user', 'up_property' ],
49 $this->mBatchSize
51 $iterator->setFetchColumns( [ 'up_user', 'up_value' ] );
52 $iterator->addConditions( [
53 'up_property' => $source,
54 'up_value IS NOT NULL',
55 'up_value != 0',
56 ] );
58 $processed = 0;
59 foreach ( $iterator as $batch ) {
60 foreach ( $batch as $row ) {
61 $values = [
62 'up_user' => $row->up_user,
63 'up_property' => $target,
64 'up_value' => $row->up_value,
66 $dbw->upsert(
67 'user_properties',
68 $values,
69 [ 'up_user', 'up_property' ],
70 $values,
71 __METHOD__
74 $processed += $dbw->affectedRows();
78 $this->output( "Processed $processed user(s)\n" );
79 $this->output( "Finished!\n" );
83 $maintClass = 'InitUserPreference'; // Tells it to run the class
84 require_once RUN_MAINTENANCE_IF_MAIN;