Make cron triggers non-static

[MAILPOET-2538]
This commit is contained in:
Jan Jakeš
2019-11-18 09:46:35 +01:00
committed by Jack Kitterhing
parent b1aed487be
commit 7a91641d11
3 changed files with 39 additions and 39 deletions

View File

@@ -31,7 +31,7 @@ class CronTrigger {
try { try {
$trigger_class = __NAMESPACE__ . '\Triggers\\' . $current_method; $trigger_class = __NAMESPACE__ . '\Triggers\\' . $current_method;
return (class_exists($trigger_class)) ? return (class_exists($trigger_class)) ?
$trigger_class::run() : (new $trigger_class)->run() :
false; false;
} catch (\Exception $e) { } catch (\Exception $e) {
// cron exceptions should not prevent the rest of the site from loading // cron exceptions should not prevent the rest of the site from loading

View File

@@ -6,7 +6,7 @@ use MailPoet\Cron\Supervisor;
use MailPoet\DI\ContainerWrapper; use MailPoet\DI\ContainerWrapper;
class MailPoet { class MailPoet {
static function run() { function run() {
$supervisor = ContainerWrapper::getInstance()->get(Supervisor::class); $supervisor = ContainerWrapper::getInstance()->get(Supervisor::class);
$supervisor->init(); $supervisor->init();
return $supervisor->checkDaemon(); return $supervisor->checkDaemon();

View File

@@ -32,18 +32,18 @@ class WordPress {
const RUN_INTERVAL = -1; // seconds const RUN_INTERVAL = -1; // seconds
const LAST_RUN_AT_SETTING = 'cron_trigger_wordpress.last_run_at'; const LAST_RUN_AT_SETTING = 'cron_trigger_wordpress.last_run_at';
static private $tasks_counts; private $tasks_counts;
static function run() { function run() {
if (!self::checkRunInterval()) { if (!$this->checkRunInterval()) {
return false; return false;
} }
return (self::checkExecutionRequirements()) ? return ($this->checkExecutionRequirements()) ?
MailPoet::run() : (new MailPoet)->run() :
self::stop(); self::stop();
} }
private static function checkRunInterval() { private function checkRunInterval() {
$settings = SettingsController::getInstance(); $settings = SettingsController::getInstance();
$last_run_at = (int)$settings->get(self::LAST_RUN_AT_SETTING, 0); $last_run_at = (int)$settings->get(self::LAST_RUN_AT_SETTING, 0);
$run_interval = WPFunctions::get()->applyFilters('mailpoet_cron_trigger_wordpress_run_interval', self::RUN_INTERVAL); $run_interval = WPFunctions::get()->applyFilters('mailpoet_cron_trigger_wordpress_run_interval', self::RUN_INTERVAL);
@@ -60,23 +60,23 @@ class WordPress {
$settings->set(self::LAST_RUN_AT_SETTING, 0); $settings->set(self::LAST_RUN_AT_SETTING, 0);
} }
static function checkExecutionRequirements(WPFunctions $wp = null) { function checkExecutionRequirements(WPFunctions $wp = null) {
self::loadTasksCounts($wp ?: new WPFunctions); $this->loadTasksCounts($wp ?: new WPFunctions);
// migration // migration
$settings = SettingsController::getInstance(); $settings = SettingsController::getInstance();
$migration_disabled = $settings->get('cron_trigger.method') === 'none'; $migration_disabled = $settings->get('cron_trigger.method') === 'none';
$migration_due_tasks = self::getTasksCount([ $migration_due_tasks = $this->getTasksCount([
'type' => MigrationWorker::TASK_TYPE, 'type' => MigrationWorker::TASK_TYPE,
'scheduled_in' => [self::SCHEDULED_IN_THE_PAST], 'scheduled_in' => [self::SCHEDULED_IN_THE_PAST],
'status' => ['null', ScheduledTask::STATUS_SCHEDULED], 'status' => ['null', ScheduledTask::STATUS_SCHEDULED],
]); ]);
$migration_completed_tasks = self::getTasksCount([ $migration_completed_tasks = $this->getTasksCount([
'type' => MigrationWorker::TASK_TYPE, 'type' => MigrationWorker::TASK_TYPE,
'scheduled_in' => [self::SCHEDULED_IN_THE_PAST, self::SCHEDULED_IN_THE_FUTURE], 'scheduled_in' => [self::SCHEDULED_IN_THE_PAST, self::SCHEDULED_IN_THE_FUTURE],
'status' => [ScheduledTask::STATUS_COMPLETED], 'status' => [ScheduledTask::STATUS_COMPLETED],
]); ]);
$migration_future_tasks = self::getTasksCount([ $migration_future_tasks = $this->getTasksCount([
'type' => MigrationWorker::TASK_TYPE, 'type' => MigrationWorker::TASK_TYPE,
'scheduled_in' => [self::SCHEDULED_IN_THE_FUTURE], 'scheduled_in' => [self::SCHEDULED_IN_THE_FUTURE],
'status' => [ScheduledTask::STATUS_SCHEDULED], 'status' => [ScheduledTask::STATUS_SCHEDULED],
@@ -89,96 +89,96 @@ class WordPress {
// sending service // sending service
$mp_sending_enabled = Bridge::isMPSendingServiceEnabled(); $mp_sending_enabled = Bridge::isMPSendingServiceEnabled();
// bounce sync // bounce sync
$bounce_due_tasks = self::getTasksCount([ $bounce_due_tasks = $this->getTasksCount([
'type' => BounceWorker::TASK_TYPE, 'type' => BounceWorker::TASK_TYPE,
'scheduled_in' => [self::SCHEDULED_IN_THE_PAST], 'scheduled_in' => [self::SCHEDULED_IN_THE_PAST],
'status' => ['null', ScheduledTask::STATUS_SCHEDULED], 'status' => ['null', ScheduledTask::STATUS_SCHEDULED],
]); ]);
$bounce_future_tasks = self::getTasksCount([ $bounce_future_tasks = $this->getTasksCount([
'type' => BounceWorker::TASK_TYPE, 'type' => BounceWorker::TASK_TYPE,
'scheduled_in' => [self::SCHEDULED_IN_THE_FUTURE], 'scheduled_in' => [self::SCHEDULED_IN_THE_FUTURE],
'status' => [ScheduledTask::STATUS_SCHEDULED], 'status' => [ScheduledTask::STATUS_SCHEDULED],
]); ]);
// sending service key check // sending service key check
$msskeycheck_due_tasks = self::getTasksCount([ $msskeycheck_due_tasks = $this->getTasksCount([
'type' => SendingServiceKeyCheckWorker::TASK_TYPE, 'type' => SendingServiceKeyCheckWorker::TASK_TYPE,
'scheduled_in' => [self::SCHEDULED_IN_THE_PAST], 'scheduled_in' => [self::SCHEDULED_IN_THE_PAST],
'status' => ['null', ScheduledTask::STATUS_SCHEDULED], 'status' => ['null', ScheduledTask::STATUS_SCHEDULED],
]); ]);
$msskeycheck_future_tasks = self::getTasksCount([ $msskeycheck_future_tasks = $this->getTasksCount([
'type' => SendingServiceKeyCheckWorker::TASK_TYPE, 'type' => SendingServiceKeyCheckWorker::TASK_TYPE,
'scheduled_in' => [self::SCHEDULED_IN_THE_FUTURE], 'scheduled_in' => [self::SCHEDULED_IN_THE_FUTURE],
'status' => [ScheduledTask::STATUS_SCHEDULED], 'status' => [ScheduledTask::STATUS_SCHEDULED],
]); ]);
// premium key check // premium key check
$premium_key_specified = Bridge::isPremiumKeySpecified(); $premium_key_specified = Bridge::isPremiumKeySpecified();
$premium_keycheck_due_tasks = self::getTasksCount([ $premium_keycheck_due_tasks = $this->getTasksCount([
'type' => PremiumKeyCheckWorker::TASK_TYPE, 'type' => PremiumKeyCheckWorker::TASK_TYPE,
'scheduled_in' => [self::SCHEDULED_IN_THE_PAST], 'scheduled_in' => [self::SCHEDULED_IN_THE_PAST],
'status' => ['null', ScheduledTask::STATUS_SCHEDULED], 'status' => ['null', ScheduledTask::STATUS_SCHEDULED],
]); ]);
$premium_keycheck_future_tasks = self::getTasksCount([ $premium_keycheck_future_tasks = $this->getTasksCount([
'type' => PremiumKeyCheckWorker::TASK_TYPE, 'type' => PremiumKeyCheckWorker::TASK_TYPE,
'scheduled_in' => [self::SCHEDULED_IN_THE_FUTURE], 'scheduled_in' => [self::SCHEDULED_IN_THE_FUTURE],
'status' => [ScheduledTask::STATUS_SCHEDULED], 'status' => [ScheduledTask::STATUS_SCHEDULED],
]); ]);
// stats notifications // stats notifications
$stats_notifications_tasks = self::getTasksCount([ $stats_notifications_tasks = $this->getTasksCount([
'type' => StatsNotificationsWorker::TASK_TYPE, 'type' => StatsNotificationsWorker::TASK_TYPE,
'scheduled_in' => [self::SCHEDULED_IN_THE_PAST], 'scheduled_in' => [self::SCHEDULED_IN_THE_PAST],
'status' => ['null', ScheduledTask::STATUS_SCHEDULED], 'status' => ['null', ScheduledTask::STATUS_SCHEDULED],
]); ]);
// stats notifications for auto emails // stats notifications for auto emails
$auto_stats_notifications_tasks = self::getTasksCount([ $auto_stats_notifications_tasks = $this->getTasksCount([
'type' => AutomatedEmails::TASK_TYPE, 'type' => AutomatedEmails::TASK_TYPE,
'scheduled_in' => [self::SCHEDULED_IN_THE_PAST], 'scheduled_in' => [self::SCHEDULED_IN_THE_PAST],
'status' => ['null', ScheduledTask::STATUS_SCHEDULED], 'status' => ['null', ScheduledTask::STATUS_SCHEDULED],
]); ]);
// inactive subscribers check // inactive subscribers check
$inactive_subscribers_tasks = self::getTasksCount([ $inactive_subscribers_tasks = $this->getTasksCount([
'type' => InactiveSubscribers::TASK_TYPE, 'type' => InactiveSubscribers::TASK_TYPE,
'scheduled_in' => [self::SCHEDULED_IN_THE_PAST], 'scheduled_in' => [self::SCHEDULED_IN_THE_PAST],
'status' => ['null', ScheduledTask::STATUS_SCHEDULED], 'status' => ['null', ScheduledTask::STATUS_SCHEDULED],
]); ]);
// unsubscribe tokens check // unsubscribe tokens check
$unsubscribe_tokens_tasks = self::getTasksCount([ $unsubscribe_tokens_tasks = $this->getTasksCount([
'type' => UnsubscribeTokens::TASK_TYPE, 'type' => UnsubscribeTokens::TASK_TYPE,
'scheduled_in' => [self::SCHEDULED_IN_THE_PAST], 'scheduled_in' => [self::SCHEDULED_IN_THE_PAST],
'status' => ['null', ScheduledTask::STATUS_SCHEDULED], 'status' => ['null', ScheduledTask::STATUS_SCHEDULED],
]); ]);
// subscriber link tokens check // subscriber link tokens check
$subscriber_link_tokens_tasks = self::getTasksCount([ $subscriber_link_tokens_tasks = $this->getTasksCount([
'type' => SubscriberLinkTokens::TASK_TYPE, 'type' => SubscriberLinkTokens::TASK_TYPE,
'scheduled_in' => [self::SCHEDULED_IN_THE_PAST], 'scheduled_in' => [self::SCHEDULED_IN_THE_PAST],
'status' => ['null', ScheduledTask::STATUS_SCHEDULED], 'status' => ['null', ScheduledTask::STATUS_SCHEDULED],
]); ]);
// WooCommerce sync // WooCommerce sync
$woo_commerce_sync_tasks = self::getTasksCount([ $woo_commerce_sync_tasks = $this->getTasksCount([
'type' => WooCommerceSyncWorker::TASK_TYPE, 'type' => WooCommerceSyncWorker::TASK_TYPE,
'scheduled_in' => [self::SCHEDULED_IN_THE_PAST], 'scheduled_in' => [self::SCHEDULED_IN_THE_PAST],
'status' => ['null', ScheduledTask::STATUS_SCHEDULED], 'status' => ['null', ScheduledTask::STATUS_SCHEDULED],
]); ]);
// Beamer // Beamer
$beamer_due_checks = self::getTasksCount([ $beamer_due_checks = $this->getTasksCount([
'type' => BeamerWorker::TASK_TYPE, 'type' => BeamerWorker::TASK_TYPE,
'scheduled_in' => [self::SCHEDULED_IN_THE_PAST], 'scheduled_in' => [self::SCHEDULED_IN_THE_PAST],
'status' => ['null', ScheduledTask::STATUS_SCHEDULED], 'status' => ['null', ScheduledTask::STATUS_SCHEDULED],
]); ]);
$beamer_future_checks = self::getTasksCount([ $beamer_future_checks = $this->getTasksCount([
'type' => BeamerWorker::TASK_TYPE, 'type' => BeamerWorker::TASK_TYPE,
'scheduled_in' => [self::SCHEDULED_IN_THE_FUTURE], 'scheduled_in' => [self::SCHEDULED_IN_THE_FUTURE],
'status' => [ScheduledTask::STATUS_SCHEDULED], 'status' => [ScheduledTask::STATUS_SCHEDULED],
]); ]);
// Authorized email addresses check // Authorized email addresses check
$authorized_email_addresses_tasks = self::getTasksCount([ $authorized_email_addresses_tasks = $this->getTasksCount([
'type' => AuthorizedSendingEmailsCheck::TASK_TYPE, 'type' => AuthorizedSendingEmailsCheck::TASK_TYPE,
'scheduled_in' => [self::SCHEDULED_IN_THE_PAST], 'scheduled_in' => [self::SCHEDULED_IN_THE_PAST],
'status' => ['null', ScheduledTask::STATUS_SCHEDULED], 'status' => ['null', ScheduledTask::STATUS_SCHEDULED],
]); ]);
// WooCommerce past orders revenues sync // WooCommerce past orders revenues sync
$woo_commerce_past_orders_tasks = self::getTasksCount([ $woo_commerce_past_orders_tasks = $this->getTasksCount([
'type' => WooCommercePastOrders::TASK_TYPE, 'type' => WooCommercePastOrders::TASK_TYPE,
'scheduled_in' => [self::SCHEDULED_IN_THE_PAST], 'scheduled_in' => [self::SCHEDULED_IN_THE_PAST],
'status' => ['null', ScheduledTask::STATUS_SCHEDULED], 'status' => ['null', ScheduledTask::STATUS_SCHEDULED],
@@ -218,7 +218,7 @@ class WordPress {
} }
} }
static private function loadTasksCounts(WPFunctions $wp) { private function loadTasksCounts(WPFunctions $wp) {
$query = sprintf( $query = sprintf(
"select "select
type, type,
@@ -235,25 +235,25 @@ class WordPress {
ScheduledTask::$_table ScheduledTask::$_table
); );
$rows = ScheduledTask::rawQuery($query)->findMany(); $rows = ScheduledTask::rawQuery($query)->findMany();
self::$tasks_counts = []; $this->tasks_counts = [];
foreach ($rows as $r) { foreach ($rows as $r) {
if (empty(self::$tasks_counts[$r->type])) { if (empty($this->tasks_counts[$r->type])) {
self::$tasks_counts[$r->type] = []; $this->tasks_counts[$r->type] = [];
} }
if (empty(self::$tasks_counts[$r->type][$r->scheduled_in])) { if (empty($this->tasks_counts[$r->type][$r->scheduled_in])) {
self::$tasks_counts[$r->type][$r->scheduled_in] = []; $this->tasks_counts[$r->type][$r->scheduled_in] = [];
} }
self::$tasks_counts[$r->type][$r->scheduled_in][$r->status ?: 'null'] = $r->count; $this->tasks_counts[$r->type][$r->scheduled_in][$r->status ?: 'null'] = $r->count;
} }
} }
static private function getTasksCount(array $options) { private function getTasksCount(array $options) {
$count = 0; $count = 0;
$type = $options['type']; $type = $options['type'];
foreach ($options['scheduled_in'] as $scheduled_in) { foreach ($options['scheduled_in'] as $scheduled_in) {
foreach ($options['status'] as $status) { foreach ($options['status'] as $status) {
if (! empty(self::$tasks_counts[$type][$scheduled_in][$status])) { if (! empty($this->tasks_counts[$type][$scheduled_in][$status])) {
$count += self::$tasks_counts[$type][$scheduled_in][$status]; $count += $this->tasks_counts[$type][$scheduled_in][$status];
} }
} }
} }