From: Stephane Bisson Date: Thu, 2 Mar 2017 21:21:43 +0000 (-0500) Subject: Maintenance: init a user preference based on another preference X-Git-Tag: 1.31.0-rc.0~3909^2 X-Git-Url: http://git.cyclocoop.org/%22%20.%20generer_url_ecrire%28%22upgrade%22%2C%22reinstall=non%22%29%20.%20%22?a=commitdiff_plain;h=3db26d8d8b28e733a8880e8bd3993d2161a28987;p=lhc%2Fweb%2Fwiklou.git Maintenance: init a user preference based on another preference For the ERI beta feature, we want the feature to be enabled by default for the users who have the ORES beta feature enabled at the time of the release. Bug: T159007 Change-Id: Ibf0f9095c7a611a513711badf00f937ac8dc1b63 --- diff --git a/autoload.php b/autoload.php index 62500e46a4..793b973e85 100644 --- a/autoload.php +++ b/autoload.php @@ -628,6 +628,7 @@ $wgAutoloadLocalClasses = [ 'InfoAction' => __DIR__ . '/includes/actions/InfoAction.php', 'InitEditCount' => __DIR__ . '/maintenance/initEditCount.php', 'InitSiteStats' => __DIR__ . '/maintenance/initSiteStats.php', + 'InitUserPreference' => __DIR__ . '/maintenance/initUserPreference.php', 'InstallDocFormatter' => __DIR__ . '/includes/installer/InstallDocFormatter.php', 'Installer' => __DIR__ . '/includes/installer/Installer.php', 'InstallerOverrides' => __DIR__ . '/includes/installer/InstallerOverrides.php', diff --git a/maintenance/initUserPreference.php b/maintenance/initUserPreference.php new file mode 100644 index 0000000000..f4da570fbb --- /dev/null +++ b/maintenance/initUserPreference.php @@ -0,0 +1,84 @@ +addOption( + 'target', + 'Name of the user preference to initialize', + true, + true, + 't' + ); + $this->addOption( + 'source', + 'Name of the user preference to take the value from', + true, + true, + 's' + ); + $this->setBatchSize( 300 ); + } + + public function execute() { + $target = $this->getOption( 'target' ); + $source = $this->getOption( 'source' ); + $this->output( "Initializing '$target' based on the value of '$source'\n" ); + + $dbr = $this->getDB( DB_REPLICA ); + $dbw = $this->getDB( DB_MASTER ); + + $iterator = new BatchRowIterator( + $dbr, + 'user_properties', + [ 'up_user', 'up_property' ], + $this->mBatchSize + ); + $iterator->setFetchColumns( [ 'up_user', 'up_value' ] ); + $iterator->addConditions( [ + 'up_property' => $source, + 'up_value IS NOT NULL', + 'up_value != 0', + ] ); + + $processed = 0; + foreach ( $iterator as $batch ) { + foreach ( $batch as $row ) { + $values = [ + 'up_user' => $row->up_user, + 'up_property' => $target, + 'up_value' => $row->up_value, + ]; + $dbw->upsert( + 'user_properties', + $values, + [ 'up_user', 'up_property' ], + $values, + __METHOD__ + ); + + $processed += $dbw->affectedRows(); + } + } + + $this->output( "Processed $processed user(s)\n" ); + $this->output( "Finished!\n" ); + } +} + +$maintClass = 'InitUserPreference'; // Tells it to run the class +require_once RUN_MAINTENANCE_IF_MAIN;