From 3db26d8d8b28e733a8880e8bd3993d2161a28987 Mon Sep 17 00:00:00 2001 From: Stephane Bisson Date: Thu, 2 Mar 2017 16:21:43 -0500 Subject: [PATCH] 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 --- autoload.php | 1 + maintenance/initUserPreference.php | 84 ++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 maintenance/initUserPreference.php 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; -- 2.20.1