diff --git a/assets/js/src/cron.jsx b/assets/js/src/cron.jsx
index 0691489352..c778ba9c36 100644
--- a/assets/js/src/cron.jsx
+++ b/assets/js/src/cron.jsx
@@ -53,10 +53,13 @@ define(
}.bind(this));
},
render: function() {
- if(this.state.status === 'loading') {
- return(
{MailPoet.I18n.t('loadingDaemonStatus')}
);
- }
switch(this.state.status) {
+ case 'loading':
+ return(
+
+ {MailPoet.I18n.t('loadingDaemonStatus')}
+
+ );
case 'started':
return(
@@ -85,6 +88,20 @@ define(
);
break;
+ case 'wordpress_task_scheduler_enabled':
+ return(
+
+ {MailPoet.I18n.t('wordpressTaskSchedulerEnabled')}
+
+ );
+ break;
+ case false:
+ return(
+
+ {MailPoet.I18n.t('daemonNotRunning')}
+
+ );
+ break;
}
}
});
diff --git a/lib/API/Endpoints/Cron.php b/lib/API/Endpoints/Cron.php
index a2ee3941b4..aa7ef6a146 100644
--- a/lib/API/Endpoints/Cron.php
+++ b/lib/API/Endpoints/Cron.php
@@ -1,6 +1,7 @@
findOne();
- return ($daemon) ?
- unserialize($daemon->value) :
+ $task_scheduler = TaskScheduler::getCurrentMethod();
+ $daemon = Setting::getSetting(CronHelper::DAEMON_SETTING);
+ if($daemon) {
+ return $daemon;
+ }
+ $status = ($task_scheduler === TaskScheduler::METHOD_WORDPRESS) ?
+ 'wordpress_task_scheduler_enabled' :
false;
+ return array('status' => $status);
}
}
\ No newline at end of file
diff --git a/lib/Cron/CronHelper.php b/lib/Cron/CronHelper.php
index d78d5b122c..afcbc6116c 100644
--- a/lib/Cron/CronHelper.php
+++ b/lib/Cron/CronHelper.php
@@ -12,6 +12,7 @@ class CronHelper {
const DAEMON_EXECUTION_LIMIT = 20;
const DAEMON_EXECUTION_TIMEOUT = 35;
const DAEMON_REQUEST_TIMEOUT = 2;
+ const DAEMON_SETTING = 'cron_daemon';
static function createDaemon($token) {
$daemon = array(
@@ -23,17 +24,27 @@ class CronHelper {
}
static function getDaemon() {
- return Setting::getValue('cron_daemon');
+ return Setting::getValue(self::DAEMON_SETTING);
}
static function saveDaemon($daemon) {
$daemon['updated_at'] = time();
return Setting::setValue(
- 'cron_daemon',
+ self::DAEMON_SETTING,
$daemon
);
}
+ static function stopDaemon() {
+ $daemon = self::getDaemon();
+ $daemon['status'] = Daemon::STATUS_STOPPED;
+ return self::saveDaemon($daemon);
+ }
+
+ static function deleteDaemon() {
+ return Setting::deleteSetting(self::DAEMON_SETTING);
+ }
+
static function createToken() {
return Security::generateRandomString();
}
diff --git a/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php b/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php
index 6944812bf5..624179c2b0 100644
--- a/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php
+++ b/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php
@@ -62,7 +62,7 @@ class Newsletter {
return $newsletter;
}
- function render($newsletter) {
+ function render(array $newsletter) {
$renderer = new Renderer($newsletter);
$newsletter['rendered_body'] = $renderer->render();
return $newsletter;
@@ -103,4 +103,12 @@ class Newsletter {
)
);
}
-}
+
+ function markNewsletterAsSent($queue_id) {
+ $newsletter = NewsletterModel::findOne($queue_id);
+ // if it's a standard newsletter, update its status
+ if($newsletter->type === NewsletterModel::TYPE_STANDARD) {
+ $newsletter->setStatus(NewsletterModel::STATUS_SENT);
+ }
+ }
+}
\ No newline at end of file
diff --git a/lib/Models/Setting.php b/lib/Models/Setting.php
index e94f084149..145c0a21c2 100644
--- a/lib/Models/Setting.php
+++ b/lib/Models/Setting.php
@@ -160,4 +160,13 @@ class Setting extends Model {
return $setting->save();
}
-}
+
+ public static function getSetting($setting) {
+ return self::where('name', $setting)->findOne();
+ }
+
+ public static function deleteSetting($setting) {
+ $setting = self::where('name', $setting)->findOne();
+ return ($setting) ? $setting->delete() : false;
+ }
+}
\ No newline at end of file
diff --git a/views/cron.html b/views/cron.html
index 22660da728..2e0a1ce5c7 100644
--- a/views/cron.html
+++ b/views/cron.html
@@ -6,9 +6,11 @@
<% block translations %>
<%= localize({
+ 'daemonNotRunning': __('Daemon is not running'),
+ 'wordpressTaskSchedulerEnabled': __('Daemon is not running because WordPress task scheduler is enabled and there are no scheduled or in-progress jobs'),
'daemonControlError': __('Cron daemon error'),
'loadingDaemonStatus': __('Loading daemon status...'),
- 'cronDaemonIsRunning': __('Cron daemon is running.'),
+ 'cronDaemonIsRunning': __('Cron daemon is running'),
'stop': __('Stop'),
'start': __('Start'),
'cronDaemonState': __('Cron is %$1s')