mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Echo
synced 2024-11-25 00:05:29 +00:00
6157c1e7bb
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
79 lines
1.9 KiB
PHP
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 );
|