mediawiki-extensions-Echo/maintenance/processEchoEmailBatch.php
Alex Monk 6157c1e7bb Make processEchoEmailBatch check that Echo is actually enabled before doing anything
Like CentralAuth does in createLocalAccount.php. In large wiki clusters where
you want Echo on for some wikis and not others, but don't want to keep a list
of Echo wikis (say, you want to make it on by default), this makes it possible
to safely run the script even on wikis where Echo is not enabled, where it will
just do nothing.

See also Ibde4c0c1, I741d2485

Bug: T59375
Change-Id: I3537206fccb459eb80de9fd61d2213dfb525c5f0
2015-05-31 13:25:37 +01:00

79 lines
1.9 KiB
PHP

<?php
$IP = getenv( 'MW_INSTALL_PATH' );
if ( $IP === false ) {
$IP = dirname( __FILE__ ) . '/../../..';
}
require_once( "$IP/maintenance/Maintenance.php" );
/**
* A maintenance script that processes email digest
*/
class ProcessEchoEmailBatch extends Maintenance {
/**
* Max number of records to process at a time
* @var int
*/
protected $batchSize = 300;
public function __construct() {
parent::__construct();
$this->mDescription = "Process email digest";
$this->addOption(
"ignoreConfiguredSchedule",
"Send all pending notifications immediately even if configured to be weekly or daily.",
false, false, "i" );
}
public function execute() {
global $wgEchoCluster;
if ( !class_exists( 'EchoHooks' ) ) {
$this->error( "Echo isn't enabled on this wiki\n", 1 );
}
$ignoreConfiguredSchedule = $this->getOption( "ignoreConfiguredSchedule", 0 );
$this->output( "Started processing... \n" );
$startUserId = 0;
$count = $this->batchSize;
while ( $count === $this->batchSize ) {
$count = 0;
$res = MWEchoEmailBatch::getUsersToNotify( $startUserId, $this->batchSize );
$updated = false;
foreach ( $res as $row ) {
$userId = intval( $row->eeb_user_id );
if ( $userId && $userId > $startUserId ) {
$emailBatch = MWEchoEmailBatch::newFromUserId( $userId, !$ignoreConfiguredSchedule );
if ( $emailBatch ) {
$this->output( "processing user_Id " . $userId . " \n" );
$emailBatch->process();
}
$startUserId = $userId;
$updated = true;
}
$count++;
}
wfWaitForSlaves( false, false, $wgEchoCluster );
// This is required since we are updating user properties in main wikidb
wfWaitForSlaves();
// double check to make sure that the id is updated
if ( !$updated ) {
break;
}
}
$this->output( "Completed \n" );
}
}
$maintClass = "ProcessEchoEmailBatch";
require_once( DO_MAINTENANCE );