Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 54 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 1 |
InitUserPreference | |
0.00% |
0 / 51 |
|
0.00% |
0 / 2 |
20 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 16 |
|
0.00% |
0 / 1 |
2 | |||
execute | |
0.00% |
0 / 35 |
|
0.00% |
0 / 1 |
12 |
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->getReplicaDB(); |
43 | $dbw = $this->getPrimaryDB(); |
44 | |
45 | $iterator = new BatchRowIterator( |
46 | $dbr, |
47 | 'user_properties', |
48 | [ 'up_user', 'up_property' ], |
49 | $this->getBatchSize() |
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 | $iterator->setCaller( __METHOD__ ); |
58 | |
59 | $processed = 0; |
60 | foreach ( $iterator as $batch ) { |
61 | foreach ( $batch as $row ) { |
62 | $dbw->newInsertQueryBuilder() |
63 | ->insertInto( 'user_properties' ) |
64 | ->row( [ |
65 | 'up_user' => $row->up_user, |
66 | 'up_property' => $target, |
67 | 'up_value' => $row->up_value, |
68 | ] ) |
69 | ->onDuplicateKeyUpdate() |
70 | ->uniqueIndexFields( [ 'up_user', 'up_property' ] ) |
71 | ->set( [ 'up_value' => $row->up_value ] ) |
72 | ->caller( __METHOD__ )->execute(); |
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::class; |
84 | require_once RUN_MAINTENANCE_IF_MAIN; |