summaryrefslogtreecommitdiff
path: root/www/wiki/maintenance/initUserPreference.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/maintenance/initUserPreference.php')
-rw-r--r--www/wiki/maintenance/initUserPreference.php84
1 files changed, 84 insertions, 0 deletions
diff --git a/www/wiki/maintenance/initUserPreference.php b/www/wiki/maintenance/initUserPreference.php
new file mode 100644
index 00000000..1ab880ce
--- /dev/null
+++ b/www/wiki/maintenance/initUserPreference.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * Initialize a user preference based on the value
+ * of another preference.
+ *
+ * @ingroup Maintenance
+ */
+
+require_once __DIR__ . '/Maintenance.php';
+
+/**
+ * Maintenance script that initializes a user preference
+ * based on the value of another preference.
+ *
+ * @ingroup Maintenance
+ */
+class InitUserPreference extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->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->getBatchSize()
+ );
+ $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::class; // Tells it to run the class
+require_once RUN_MAINTENANCE_IF_MAIN;