]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - maintenance/initUserPreference.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / maintenance / initUserPreference.php
1 <?php
2 /**
3  * Initialize a user preference based on the value
4  * of another preference.
5  *
6  * @ingroup Maintenance
7  */
8
9 require_once __DIR__ . '/Maintenance.php';
10
11 /**
12  * Maintenance script that initializes a user preference
13  * based on the value of another preference.
14  *
15  * @ingroup Maintenance
16  */
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'
26                 );
27                 $this->addOption(
28                         'source',
29                         'Name of the user preference to take the value from',
30                         true,
31                         true,
32                         's'
33                 );
34                 $this->setBatchSize( 300 );
35         }
36
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" );
41
42                 $dbr = $this->getDB( DB_REPLICA );
43                 $dbw = $this->getDB( DB_MASTER );
44
45                 $iterator = new BatchRowIterator(
46                         $dbr,
47                         'user_properties',
48                         [ 'up_user', 'up_property' ],
49                         $this->mBatchSize
50                 );
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                 ] );
57
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,
65                                 ];
66                                 $dbw->upsert(
67                                         'user_properties',
68                                         $values,
69                                         [ 'up_user', 'up_property' ],
70                                         $values,
71                                         __METHOD__
72                                 );
73
74                                 $processed += $dbw->affectedRows();
75                         }
76                 }
77
78                 $this->output( "Processed $processed user(s)\n" );
79                 $this->output( "Finished!\n" );
80         }
81 }
82
83 $maintClass = 'InitUserPreference'; // Tells it to run the class
84 require_once RUN_MAINTENANCE_IF_MAIN;