diff --git a/lib/Config/Menu.php b/lib/Config/Menu.php index 38b4b1fc12..5009bd7983 100644 --- a/lib/Config/Menu.php +++ b/lib/Config/Menu.php @@ -706,10 +706,11 @@ class Menu { $user_id = $data['current_wp_user']['ID']; + $last_announcement_date = $this->settings->get('last_announcement_date'); $last_announcement_seen = $this->user_flags->get('last_announcement_seen'); $data['feature_announcement_has_news'] = ( empty($last_announcement_seen) || - $last_announcement_seen < strtotime(self::LAST_ANNOUNCEMENT_DATE) + $last_announcement_seen < $last_announcement_date ); $data['last_announcement_seen'] = $last_announcement_seen; diff --git a/lib/Config/Populator.php b/lib/Config/Populator.php index 616f666715..cdb8f136da 100644 --- a/lib/Config/Populator.php +++ b/lib/Config/Populator.php @@ -5,6 +5,7 @@ use Carbon\Carbon; use MailPoet\Config\PopulatorData\DefaultForm; use MailPoet\Cron\CronTrigger; use MailPoet\Cron\Workers\AuthorizedSendingEmailsCheck; +use MailPoet\Cron\Workers\Beamer; use MailPoet\Cron\Workers\InactiveSubscribers; use MailPoet\Mailer\MailerLog; use MailPoet\Models\NewsletterTemplate; @@ -139,6 +140,7 @@ class Populator { $this->updateMetaFields(); $this->scheduleInitialInactiveSubscribersCheck(); $this->scheduleAuthorizedSendingEmailsCheck(); + $this->initLastAnnouncementDate(); // Will be uncommented on task [MAILPOET-1998] // $this->updateFormsSuccessMessages(); } @@ -549,6 +551,13 @@ class Populator { ); } + private function initLastAnnouncementDate() { + if (!$this->settings->get('last_announcement_date')) { + $beamer = new Beamer($this->settings); + $beamer->setLastAnnouncementDate(); + } + } + private function scheduleTask($type, $datetime) { $task = ScheduledTask::where('type', $type) ->whereRaw('status = ? OR status IS NULL', [ScheduledTask::STATUS_SCHEDULED]) diff --git a/lib/Cron/Triggers/WordPress.php b/lib/Cron/Triggers/WordPress.php index 312464482a..083dcb8e7a 100644 --- a/lib/Cron/Triggers/WordPress.php +++ b/lib/Cron/Triggers/WordPress.php @@ -17,6 +17,7 @@ use MailPoet\Cron\Workers\KeyCheck\PremiumKeyCheck as PremiumKeyCheckWorker; use MailPoet\Cron\Workers\StatsNotifications\Worker as StatsNotificationsWorker; use MailPoet\Cron\Workers\KeyCheck\SendingServiceKeyCheck as SendingServiceKeyCheckWorker; use MailPoet\Cron\Workers\WooCommerceSync as WooCommerceSyncWorker; +use MailPoet\Cron\Workers\Beamer as BeamerWorker; if (!defined('ABSPATH')) exit; @@ -111,6 +112,17 @@ class WordPress { 'scheduled_in' => [self::SCHEDULED_IN_THE_PAST], 'status' => ['null', ScheduledTask::STATUS_SCHEDULED], ]); + // Beamer + $beamer_due_checks = self::getTasksCount([ + 'type' => BeamerWorker::TASK_TYPE, + 'scheduled_in' => [self::SCHEDULED_IN_THE_PAST], + 'status' => ['null', ScheduledTask::STATUS_SCHEDULED], + ]); + $beamer_future_checks = self::getTasksCount([ + 'type' => BeamerWorker::TASK_TYPE, + 'scheduled_in' => [self::SCHEDULED_IN_THE_FUTURE], + 'status' => [ScheduledTask::STATUS_SCHEDULED], + ]); // Authorized email addresses check $authorized_email_addresses_tasks = self::getTasksCount([ @@ -125,6 +137,7 @@ class WordPress { $sending_service_key_check_active = ($mp_sending_enabled && ($msskeycheck_due_tasks || !$msskeycheck_future_tasks)); $premium_key_check_active = ($premium_key_specified && ($premium_keycheck_due_tasks || !$premium_keycheck_future_tasks)); $migration_active = !$migration_disabled && ($migration_due_tasks || (!$migration_completed_tasks && !$migration_future_tasks)); + $beamer_active = $beamer_due_checks || !$beamer_future_checks; return ( $migration_active @@ -136,6 +149,7 @@ class WordPress { || $inactive_subscribers_tasks || $woo_commerce_sync_tasks || $authorized_email_addresses_tasks + || $beamer_active ); } @@ -148,12 +162,12 @@ class WordPress { static private function loadTasksCounts(WPFunctions $wp) { $query = sprintf( - "select - type, - status, - count(*) as count, - case when scheduled_at <= '%s' then '%s' else '%s' end as scheduled_in - from %s + "select + type, + status, + count(*) as count, + case when scheduled_at <= '%s' then '%s' else '%s' end as scheduled_in + from %s where deleted_at is null group by type, status, scheduled_in ", diff --git a/lib/Cron/Workers/Beamer.php b/lib/Cron/Workers/Beamer.php index 8baba8d370..e2e2b7f38c 100644 --- a/lib/Cron/Workers/Beamer.php +++ b/lib/Cron/Workers/Beamer.php @@ -6,11 +6,13 @@ use MailPoet\Models\ScheduledTask; use MailPoet\Cron\Workers\SimpleWorker; use MailPoet\Settings\SettingsController; use MailPoet\WP\Functions as WPFunctions; +use function GuzzleHttp\json_decode; if (!defined('ABSPATH')) exit; class Beamer extends SimpleWorker { const TASK_TYPE = 'beamer'; + const API_KEY = 'b_neUUX8kIYVEYZqQzSnwhmVggVLA6lT+GzDQOW7hrP38='; /** @var SettingsController */ private $settings; @@ -21,14 +23,26 @@ class Beamer extends SimpleWorker { } function processTaskStrategy(ScheduledTask $task) { - $this->settings->set('last_announcement_date', 'timestamp'); + return $this->setLastAnnouncementDate(); + } + + function setLastAnnouncementDate() { + $wp = new WPFunctions(); + $response = $wp->wpRemoteGet('https://api.getbeamer.com/v0/posts?published=true&maxResults=1', [ + 'headers' => [ + 'Beamer-Api-Key' => self::API_KEY, + ], + ]); + $posts = $wp->wpRemoteRetrieveBody($response); + if (empty($posts)) return false; + $posts = json_decode($posts); + $this->settings->set('last_announcement_date', Carbon::createFromTimeString($posts[0]->date)->getTimestamp()); return true; } - // static function getNextRunDate() { - // $wp = new WPFunctions(); - // $date = Carbon::createFromTimestamp($wp->currentTime('timestamp')); - // return $date->addMinute(); - // // return $date->hour(11)->minute(00)->second(00)->addDay(); - // } + static function getNextRunDate() { + $wp = new WPFunctions(); + $date = Carbon::createFromTimestamp($wp->currentTime('timestamp')); + return $date->hour(11)->minute(00)->second(00)->addDay(); + } } diff --git a/lib/Cron/Workers/WorkersFactory.php b/lib/Cron/Workers/WorkersFactory.php index 970d2ea4ef..4c3a7865fa 100644 --- a/lib/Cron/Workers/WorkersFactory.php +++ b/lib/Cron/Workers/WorkersFactory.php @@ -136,7 +136,7 @@ class WorkersFactory { } /** @return Beamer */ - function createBeamerWorker($timer) { + function createBeamerkWorker($timer) { return new Beamer($this->settings, $timer); }