Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 60
InitUserPreference
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 2
20
0.00% covered (danger)
0.00%
0 / 57
 __construct
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 17
 execute
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 40
<?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',
        ] );
        $iterator->setCaller( __METHOD__ );
        $processed = 0;
        foreach ( $iterator as $batch ) {
            foreach ( $batch as $row ) {
                $dbw->upsert(
                    'user_properties',
                    [
                        'up_user' => $row->up_user,
                        'up_property' => $target,
                        'up_value' => $row->up_value,
                    ],
                    [ [ 'up_user', 'up_property' ] ],
                    [
                        'up_value' => $row->up_value,
                    ],
                    __METHOD__
                );
                $processed += $dbw->affectedRows();
            }
        }
        $this->output( "Processed $processed user(s)\n" );
        $this->output( "Finished!\n" );
    }
}
$maintClass = InitUserPreference::class;
require_once RUN_MAINTENANCE_IF_MAIN;