Make cron triggers non-static
[MAILPOET-2538]
This commit is contained in:
committed by
Jack Kitterhing
parent
b1aed487be
commit
7a91641d11
@@ -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
|
||||||
|
@@ -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();
|
||||||
|
@@ -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];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user