From 493e16606ccf5cd6acbce48c6d54057aacdf9726 Mon Sep 17 00:00:00 2001 From: Pavel Dohnal Date: Mon, 9 Sep 2019 12:57:47 +0200 Subject: [PATCH] Move constans to their classes [MAILPOET-2348] --- lib/Cron/Workers/Scheduler.php | 8 +++--- .../Scheduler/PostNotificationScheduler.php | 25 +++++++++++++------ lib/Newsletter/Scheduler/Scheduler.php | 9 ------- lib/Newsletter/Scheduler/WelcomeScheduler.php | 6 +++-- .../API/JSON/v1/NewslettersTest.php | 14 +++++------ .../Cron/Workers/SchedulerTest.php | 6 +++-- .../Scheduler/PostNotificationTest.php | 14 +++++------ .../Newsletter/Scheduler/SchedulerTest.php | 11 -------- .../Newsletter/Scheduler/WelcomeTest.php | 2 +- 9 files changed, 45 insertions(+), 50 deletions(-) diff --git a/lib/Cron/Workers/Scheduler.php b/lib/Cron/Workers/Scheduler.php index 08ec81438d..9d12d67410 100644 --- a/lib/Cron/Workers/Scheduler.php +++ b/lib/Cron/Workers/Scheduler.php @@ -10,9 +10,11 @@ use MailPoet\Models\ScheduledTask; use MailPoet\Models\Segment; use MailPoet\Models\Subscriber; use MailPoet\Models\SubscriberSegment; +use MailPoet\Newsletter\Scheduler\PostNotificationScheduler; +use MailPoet\Newsletter\Scheduler\Scheduler as NewsletterScheduler; +use MailPoet\Newsletter\Scheduler\WelcomeScheduler; use MailPoet\Segments\SubscribersFinder; use MailPoet\Tasks\Sending as SendingTask; -use MailPoet\Newsletter\Scheduler\Scheduler as NewsletterScheduler; if (!defined('ABSPATH')) exit; @@ -188,7 +190,7 @@ class Scheduler { return false; } $wp_user = (array)get_userdata($subscriber->wp_user_id); - if ($newsletter->role !== \MailPoet\Newsletter\Scheduler\Scheduler::WORDPRESS_ALL_ROLES + if ($newsletter->role !== WelcomeScheduler::WORDPRESS_ALL_ROLES && !in_array($newsletter->role, $wp_user['roles']) ) { $queue->delete(); @@ -198,7 +200,7 @@ class Scheduler { } function deleteQueueOrUpdateNextRunDate($queue, $newsletter) { - if ($newsletter->intervalType === NewsletterScheduler::INTERVAL_IMMEDIATELY) { + if ($newsletter->intervalType === PostNotificationScheduler::INTERVAL_IMMEDIATELY) { $queue->delete(); return; } else { diff --git a/lib/Newsletter/Scheduler/PostNotificationScheduler.php b/lib/Newsletter/Scheduler/PostNotificationScheduler.php index a8b6c986a0..5b8be4ccf6 100644 --- a/lib/Newsletter/Scheduler/PostNotificationScheduler.php +++ b/lib/Newsletter/Scheduler/PostNotificationScheduler.php @@ -14,6 +14,15 @@ use MailPoet\WP\Posts; class PostNotificationScheduler { + const SECONDS_IN_HOUR = 3600; + const LAST_WEEKDAY_FORMAT = 'L'; + const INTERVAL_DAILY = 'daily'; + const INTERVAL_IMMEDIATELY = 'immediately'; + const INTERVAL_NTHWEEKDAY = 'nthWeekDay'; + const INTERVAL_WEEKLY = 'weekly'; + const INTERVAL_IMMEDIATE = 'immediate'; + const INTERVAL_MONTHLY = 'monthly'; + function transitionHook($new_status, $old_status, $post) { Logger::getLogger('post-notifications')->addInfo( 'transition post notification hook initiated', @@ -88,27 +97,27 @@ class PostNotificationScheduler { function processPostNotificationSchedule($newsletter) { $interval_type = $newsletter->intervalType; - $hour = (int)$newsletter->timeOfDay / Scheduler::SECONDS_IN_HOUR; + $hour = (int)$newsletter->timeOfDay / self::SECONDS_IN_HOUR; $week_day = $newsletter->weekDay; $month_day = $newsletter->monthDay; - $nth_week_day = ($newsletter->nthWeekDay === Scheduler::LAST_WEEKDAY_FORMAT) ? + $nth_week_day = ($newsletter->nthWeekDay === self::LAST_WEEKDAY_FORMAT) ? $newsletter->nthWeekDay : '#' . $newsletter->nthWeekDay; switch ($interval_type) { - case Scheduler::INTERVAL_IMMEDIATE: - case Scheduler::INTERVAL_DAILY: + case self::INTERVAL_IMMEDIATE: + case self::INTERVAL_DAILY: $schedule = sprintf('0 %s * * *', $hour); break; - case Scheduler::INTERVAL_WEEKLY: + case self::INTERVAL_WEEKLY: $schedule = sprintf('0 %s * * %s', $hour, $week_day); break; - case Scheduler::INTERVAL_NTHWEEKDAY: + case self::INTERVAL_NTHWEEKDAY: $schedule = sprintf('0 %s ? * %s%s', $hour, $week_day, $nth_week_day); break; - case Scheduler::INTERVAL_MONTHLY: + case self::INTERVAL_MONTHLY: $schedule = sprintf('0 %s %s * *', $hour, $month_day); break; - case Scheduler::INTERVAL_IMMEDIATELY: + case self::INTERVAL_IMMEDIATELY: default: $schedule = '* * * * *'; break; diff --git a/lib/Newsletter/Scheduler/Scheduler.php b/lib/Newsletter/Scheduler/Scheduler.php index cef497a8d8..5ba0369f32 100644 --- a/lib/Newsletter/Scheduler/Scheduler.php +++ b/lib/Newsletter/Scheduler/Scheduler.php @@ -11,15 +11,6 @@ use MailPoet\Tasks\Sending as SendingTask; use MailPoet\WP\Functions as WPFunctions; class Scheduler { - const SECONDS_IN_HOUR = 3600; - const LAST_WEEKDAY_FORMAT = 'L'; - const WORDPRESS_ALL_ROLES = 'mailpoet_all'; - const INTERVAL_IMMEDIATELY = 'immediately'; - const INTERVAL_IMMEDIATE = 'immediate'; - const INTERVAL_DAILY = 'daily'; - const INTERVAL_WEEKLY = 'weekly'; - const INTERVAL_MONTHLY = 'monthly'; - const INTERVAL_NTHWEEKDAY = 'nthWeekDay'; static function scheduleAutomaticEmail($group, $event, $scheduling_condition = false, $subscriber_id = false, $meta = false) { $newsletters = self::getNewsletters(Newsletter::TYPE_AUTOMATIC, $group); diff --git a/lib/Newsletter/Scheduler/WelcomeScheduler.php b/lib/Newsletter/Scheduler/WelcomeScheduler.php index ac6a313a92..2fb896a602 100644 --- a/lib/Newsletter/Scheduler/WelcomeScheduler.php +++ b/lib/Newsletter/Scheduler/WelcomeScheduler.php @@ -8,6 +8,8 @@ use MailPoet\Tasks\Sending as SendingTask; class WelcomeScheduler { + const WORDPRESS_ALL_ROLES = 'mailpoet_all'; + function scheduleSubscriberWelcomeNotification($subscriber_id, $segments) { $newsletters = Scheduler::getNewsletters(Newsletter::TYPE_WELCOME); if (empty($newsletters)) return false; @@ -35,13 +37,13 @@ class WelcomeScheduler { // do not schedule welcome newsletter if roles have not changed $old_role = $old_user_data['roles']; $new_role = $wp_user['roles']; - if ($newsletter->role === Scheduler::WORDPRESS_ALL_ROLES || + if ($newsletter->role === self::WORDPRESS_ALL_ROLES || !array_diff($old_role, $new_role) ) { continue; } } - if ($newsletter->role === Scheduler::WORDPRESS_ALL_ROLES || + if ($newsletter->role === self::WORDPRESS_ALL_ROLES || in_array($newsletter->role, $wp_user['roles']) ) { $this->createWelcomeNotificationSendingTask($newsletter, $subscriber_id); diff --git a/tests/integration/API/JSON/v1/NewslettersTest.php b/tests/integration/API/JSON/v1/NewslettersTest.php index 7329fbe502..0b4778742a 100644 --- a/tests/integration/API/JSON/v1/NewslettersTest.php +++ b/tests/integration/API/JSON/v1/NewslettersTest.php @@ -9,18 +9,18 @@ use Codeception\Util\Stub; use Helper\WordPressHooks as WPHooksHelper; use MailPoet\API\JSON\Response as APIResponse; use MailPoet\API\JSON\ResponseBuilders\NewslettersResponseBuilder; -use MailPoet\Listing\BulkActionController; -use MailPoet\Listing\Handler; use MailPoet\API\JSON\v1\Newsletters; use MailPoet\DI\ContainerWrapper; +use MailPoet\Listing\BulkActionController; +use MailPoet\Listing\Handler; use MailPoet\Models\Newsletter; use MailPoet\Models\NewsletterOption; use MailPoet\Models\NewsletterOptionField; use MailPoet\Models\NewsletterSegment; use MailPoet\Models\ScheduledTask; use MailPoet\Models\Segment; -use MailPoet\Models\SubscriberSegment; use MailPoet\Models\SendingQueue; +use MailPoet\Models\SubscriberSegment; use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\Scheduler\PostNotificationScheduler; use MailPoet\Newsletter\Scheduler\Scheduler; @@ -30,8 +30,8 @@ use MailPoet\Services\AuthorizedEmailsController; use MailPoet\Settings\SettingsController; use MailPoet\Subscription\Url as SubscriptionUrl; use MailPoet\Tasks\Sending as SendingTask; -use MailPoet\WP\Functions as WPFunctions; use MailPoet\WooCommerce\Helper as WCHelper; +use MailPoet\WP\Functions as WPFunctions; class NewslettersTest extends \MailPoetTest { /** @var Newsletters */ @@ -288,7 +288,7 @@ class NewslettersTest extends \MailPoetTest { 'type' => Newsletter::TYPE_NOTIFICATION, 'subject' => 'Newsletter', 'options' => [ - 'intervalType' => Scheduler::INTERVAL_WEEKLY, + 'intervalType' => PostNotificationScheduler::INTERVAL_WEEKLY, 'timeOfDay' => '50400', 'weekDay' => '1', 'monthDay' => '0', @@ -303,7 +303,7 @@ class NewslettersTest extends \MailPoetTest { expect($response->data)->equals($saved_newsletter->asArray()); // schedule should be recalculated when options change - $newsletter_data['options']['intervalType'] = Scheduler::INTERVAL_IMMEDIATELY; + $newsletter_data['options']['intervalType'] = PostNotificationScheduler::INTERVAL_IMMEDIATELY; $response = $this->endpoint->save($newsletter_data); $saved_newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_NOTIFICATION) ->findOne($response->data['id']); @@ -347,7 +347,7 @@ class NewslettersTest extends \MailPoetTest { 'subject' => 'Newsletter', 'options' => [ // weekly on Monday @ 7am - 'intervalType' => Scheduler::INTERVAL_WEEKLY, + 'intervalType' => PostNotificationScheduler::INTERVAL_WEEKLY, 'timeOfDay' => '25200', 'weekDay' => '1', 'monthDay' => '0', diff --git a/tests/integration/Cron/Workers/SchedulerTest.php b/tests/integration/Cron/Workers/SchedulerTest.php index 981586a23e..347a717308 100644 --- a/tests/integration/Cron/Workers/SchedulerTest.php +++ b/tests/integration/Cron/Workers/SchedulerTest.php @@ -10,13 +10,14 @@ use MailPoet\Models\Newsletter; use MailPoet\Models\NewsletterOption; use MailPoet\Models\NewsletterOptionField; use MailPoet\Models\NewsletterSegment; -use MailPoet\Models\Segment; use MailPoet\Models\ScheduledTask; use MailPoet\Models\ScheduledTaskSubscriber; +use MailPoet\Models\Segment; use MailPoet\Models\SendingQueue; use MailPoet\Models\Setting; use MailPoet\Models\Subscriber; use MailPoet\Models\SubscriberSegment; +use MailPoet\Newsletter\Scheduler\WelcomeScheduler; use MailPoet\Segments\SubscribersFinder; use MailPoet\Tasks\Sending as SendingTask; @@ -183,7 +184,8 @@ class SchedulerTest extends \MailPoetTest { $this->_createNewsletterOptionField('role', Newsletter::TYPE_WELCOME); $newsletter_option = $this->_createNewsletterOption( $newsletter_option_field->id, $newsletter->id, - \MailPoet\Newsletter\Scheduler\Scheduler::WORDPRESS_ALL_ROLES); + WelcomeScheduler::WORDPRESS_ALL_ROLES + ); $newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_WELCOME) ->findOne($newsletter->id); $queue = $this->_createQueue($newsletter->id); diff --git a/tests/integration/Newsletter/Scheduler/PostNotificationTest.php b/tests/integration/Newsletter/Scheduler/PostNotificationTest.php index e882263afd..236455d8ec 100644 --- a/tests/integration/Newsletter/Scheduler/PostNotificationTest.php +++ b/tests/integration/Newsletter/Scheduler/PostNotificationTest.php @@ -109,7 +109,7 @@ class PostNotificationTest extends \MailPoetTest { // daily notification is scheduled at 14:00 $newsletter = (object)[ 'id' => 1, - 'intervalType' => Scheduler::INTERVAL_DAILY, + 'intervalType' => PostNotificationScheduler::INTERVAL_DAILY, 'monthDay' => null, 'nthWeekDay' => null, 'weekDay' => null, @@ -133,7 +133,7 @@ class PostNotificationTest extends \MailPoetTest { // weekly notification is scheduled every Tuesday at 14:00 $newsletter = (object)[ 'id' => 1, - 'intervalType' => Scheduler::INTERVAL_WEEKLY, + 'intervalType' => PostNotificationScheduler::INTERVAL_WEEKLY, 'monthDay' => null, 'nthWeekDay' => null, 'weekDay' => Carbon::TUESDAY, @@ -157,7 +157,7 @@ class PostNotificationTest extends \MailPoetTest { // monthly notification is scheduled every 20th day at 14:00 $newsletter = (object)[ 'id' => 1, - 'intervalType' => Scheduler::INTERVAL_MONTHLY, + 'intervalType' => PostNotificationScheduler::INTERVAL_MONTHLY, 'monthDay' => 19, // 20th (count starts from 0) 'nthWeekDay' => null, 'weekDay' => null, @@ -181,7 +181,7 @@ class PostNotificationTest extends \MailPoetTest { // monthly notification is scheduled every last Saturday at 14:00 $newsletter = (object)[ 'id' => 1, - 'intervalType' => Scheduler::INTERVAL_NTHWEEKDAY, + 'intervalType' => PostNotificationScheduler::INTERVAL_NTHWEEKDAY, 'monthDay' => null, 'nthWeekDay' => 'L', // L = last 'weekDay' => Carbon::SATURDAY, @@ -205,7 +205,7 @@ class PostNotificationTest extends \MailPoetTest { // notification is scheduled immediately (next minute) $newsletter = (object)[ 'id' => 1, - 'intervalType' => Scheduler::INTERVAL_IMMEDIATELY, + 'intervalType' => PostNotificationScheduler::INTERVAL_IMMEDIATELY, 'monthDay' => null, 'nthWeekDay' => null, 'weekDay' => null, @@ -229,7 +229,7 @@ class PostNotificationTest extends \MailPoetTest { $this->_createNewsletterOptions( $newsletter->id, [ - 'intervalType' => Scheduler::INTERVAL_IMMEDIATELY, + 'intervalType' => PostNotificationScheduler::INTERVAL_IMMEDIATELY, 'schedule' => '* * * * *', ] ); @@ -263,7 +263,7 @@ class PostNotificationTest extends \MailPoetTest { $this->_createNewsletterOptions( $newsletter->id, [ - 'intervalType' => Scheduler::INTERVAL_IMMEDIATELY, + 'intervalType' => PostNotificationScheduler::INTERVAL_IMMEDIATELY, 'schedule' => '* * * * *', ] ); diff --git a/tests/integration/Newsletter/Scheduler/SchedulerTest.php b/tests/integration/Newsletter/Scheduler/SchedulerTest.php index 6ce3047cc3..95c21987ce 100644 --- a/tests/integration/Newsletter/Scheduler/SchedulerTest.php +++ b/tests/integration/Newsletter/Scheduler/SchedulerTest.php @@ -18,17 +18,6 @@ use MailPoet\Tasks\Sending as SendingTask; use MailPoet\WP\Posts as WPPosts; class SchedulerTest extends \MailPoetTest { - function testItSetsConstants() { - expect(Scheduler::SECONDS_IN_HOUR)->notEmpty(); - expect(Scheduler::LAST_WEEKDAY_FORMAT)->notEmpty(); - expect(Scheduler::WORDPRESS_ALL_ROLES)->notEmpty(); - expect(Scheduler::INTERVAL_IMMEDIATELY)->notEmpty(); - expect(Scheduler::INTERVAL_IMMEDIATE)->notEmpty(); - expect(Scheduler::INTERVAL_DAILY)->notEmpty(); - expect(Scheduler::INTERVAL_WEEKLY)->notEmpty(); - expect(Scheduler::INTERVAL_MONTHLY)->notEmpty(); - expect(Scheduler::INTERVAL_NTHWEEKDAY)->notEmpty(); - } function testItGetsActiveNewslettersFilteredByTypeAndGroup() { $this->_createNewsletter($type = Newsletter::TYPE_WELCOME); diff --git a/tests/integration/Newsletter/Scheduler/WelcomeTest.php b/tests/integration/Newsletter/Scheduler/WelcomeTest.php index 1d459dbbf2..51e3ceb640 100644 --- a/tests/integration/Newsletter/Scheduler/WelcomeTest.php +++ b/tests/integration/Newsletter/Scheduler/WelcomeTest.php @@ -256,7 +256,7 @@ class WelcomeTest extends \MailPoetTest { $newsletter->id, [ 'event' => 'user', - 'role' => Scheduler::WORDPRESS_ALL_ROLES, + 'role' => WelcomeScheduler::WORDPRESS_ALL_ROLES, 'afterTimeType' => 'days', 'afterTimeNumber' => 1, ]