Move constans to their classes

[MAILPOET-2348]
This commit is contained in:
Pavel Dohnal
2019-09-09 12:57:47 +02:00
committed by Jack Kitterhing
parent 3d750c5bb8
commit 493e16606c
9 changed files with 45 additions and 50 deletions

View File

@ -10,9 +10,11 @@ use MailPoet\Models\ScheduledTask;
use MailPoet\Models\Segment; use MailPoet\Models\Segment;
use MailPoet\Models\Subscriber; use MailPoet\Models\Subscriber;
use MailPoet\Models\SubscriberSegment; 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\Segments\SubscribersFinder;
use MailPoet\Tasks\Sending as SendingTask; use MailPoet\Tasks\Sending as SendingTask;
use MailPoet\Newsletter\Scheduler\Scheduler as NewsletterScheduler;
if (!defined('ABSPATH')) exit; if (!defined('ABSPATH')) exit;
@ -188,7 +190,7 @@ class Scheduler {
return false; return false;
} }
$wp_user = (array)get_userdata($subscriber->wp_user_id); $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']) && !in_array($newsletter->role, $wp_user['roles'])
) { ) {
$queue->delete(); $queue->delete();
@ -198,7 +200,7 @@ class Scheduler {
} }
function deleteQueueOrUpdateNextRunDate($queue, $newsletter) { function deleteQueueOrUpdateNextRunDate($queue, $newsletter) {
if ($newsletter->intervalType === NewsletterScheduler::INTERVAL_IMMEDIATELY) { if ($newsletter->intervalType === PostNotificationScheduler::INTERVAL_IMMEDIATELY) {
$queue->delete(); $queue->delete();
return; return;
} else { } else {

View File

@ -14,6 +14,15 @@ use MailPoet\WP\Posts;
class PostNotificationScheduler { 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) { function transitionHook($new_status, $old_status, $post) {
Logger::getLogger('post-notifications')->addInfo( Logger::getLogger('post-notifications')->addInfo(
'transition post notification hook initiated', 'transition post notification hook initiated',
@ -88,27 +97,27 @@ class PostNotificationScheduler {
function processPostNotificationSchedule($newsletter) { function processPostNotificationSchedule($newsletter) {
$interval_type = $newsletter->intervalType; $interval_type = $newsletter->intervalType;
$hour = (int)$newsletter->timeOfDay / Scheduler::SECONDS_IN_HOUR; $hour = (int)$newsletter->timeOfDay / self::SECONDS_IN_HOUR;
$week_day = $newsletter->weekDay; $week_day = $newsletter->weekDay;
$month_day = $newsletter->monthDay; $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 :
'#' . $newsletter->nthWeekDay; '#' . $newsletter->nthWeekDay;
switch ($interval_type) { switch ($interval_type) {
case Scheduler::INTERVAL_IMMEDIATE: case self::INTERVAL_IMMEDIATE:
case Scheduler::INTERVAL_DAILY: case self::INTERVAL_DAILY:
$schedule = sprintf('0 %s * * *', $hour); $schedule = sprintf('0 %s * * *', $hour);
break; break;
case Scheduler::INTERVAL_WEEKLY: case self::INTERVAL_WEEKLY:
$schedule = sprintf('0 %s * * %s', $hour, $week_day); $schedule = sprintf('0 %s * * %s', $hour, $week_day);
break; break;
case Scheduler::INTERVAL_NTHWEEKDAY: case self::INTERVAL_NTHWEEKDAY:
$schedule = sprintf('0 %s ? * %s%s', $hour, $week_day, $nth_week_day); $schedule = sprintf('0 %s ? * %s%s', $hour, $week_day, $nth_week_day);
break; break;
case Scheduler::INTERVAL_MONTHLY: case self::INTERVAL_MONTHLY:
$schedule = sprintf('0 %s %s * *', $hour, $month_day); $schedule = sprintf('0 %s %s * *', $hour, $month_day);
break; break;
case Scheduler::INTERVAL_IMMEDIATELY: case self::INTERVAL_IMMEDIATELY:
default: default:
$schedule = '* * * * *'; $schedule = '* * * * *';
break; break;

View File

@ -11,15 +11,6 @@ use MailPoet\Tasks\Sending as SendingTask;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
class Scheduler { 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) { static function scheduleAutomaticEmail($group, $event, $scheduling_condition = false, $subscriber_id = false, $meta = false) {
$newsletters = self::getNewsletters(Newsletter::TYPE_AUTOMATIC, $group); $newsletters = self::getNewsletters(Newsletter::TYPE_AUTOMATIC, $group);

View File

@ -8,6 +8,8 @@ use MailPoet\Tasks\Sending as SendingTask;
class WelcomeScheduler { class WelcomeScheduler {
const WORDPRESS_ALL_ROLES = 'mailpoet_all';
function scheduleSubscriberWelcomeNotification($subscriber_id, $segments) { function scheduleSubscriberWelcomeNotification($subscriber_id, $segments) {
$newsletters = Scheduler::getNewsletters(Newsletter::TYPE_WELCOME); $newsletters = Scheduler::getNewsletters(Newsletter::TYPE_WELCOME);
if (empty($newsletters)) return false; if (empty($newsletters)) return false;
@ -35,13 +37,13 @@ class WelcomeScheduler {
// do not schedule welcome newsletter if roles have not changed // do not schedule welcome newsletter if roles have not changed
$old_role = $old_user_data['roles']; $old_role = $old_user_data['roles'];
$new_role = $wp_user['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) !array_diff($old_role, $new_role)
) { ) {
continue; continue;
} }
} }
if ($newsletter->role === Scheduler::WORDPRESS_ALL_ROLES || if ($newsletter->role === self::WORDPRESS_ALL_ROLES ||
in_array($newsletter->role, $wp_user['roles']) in_array($newsletter->role, $wp_user['roles'])
) { ) {
$this->createWelcomeNotificationSendingTask($newsletter, $subscriber_id); $this->createWelcomeNotificationSendingTask($newsletter, $subscriber_id);

View File

@ -9,18 +9,18 @@ use Codeception\Util\Stub;
use Helper\WordPressHooks as WPHooksHelper; use Helper\WordPressHooks as WPHooksHelper;
use MailPoet\API\JSON\Response as APIResponse; use MailPoet\API\JSON\Response as APIResponse;
use MailPoet\API\JSON\ResponseBuilders\NewslettersResponseBuilder; use MailPoet\API\JSON\ResponseBuilders\NewslettersResponseBuilder;
use MailPoet\Listing\BulkActionController;
use MailPoet\Listing\Handler;
use MailPoet\API\JSON\v1\Newsletters; use MailPoet\API\JSON\v1\Newsletters;
use MailPoet\DI\ContainerWrapper; use MailPoet\DI\ContainerWrapper;
use MailPoet\Listing\BulkActionController;
use MailPoet\Listing\Handler;
use MailPoet\Models\Newsletter; use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterOption; use MailPoet\Models\NewsletterOption;
use MailPoet\Models\NewsletterOptionField; use MailPoet\Models\NewsletterOptionField;
use MailPoet\Models\NewsletterSegment; use MailPoet\Models\NewsletterSegment;
use MailPoet\Models\ScheduledTask; use MailPoet\Models\ScheduledTask;
use MailPoet\Models\Segment; use MailPoet\Models\Segment;
use MailPoet\Models\SubscriberSegment;
use MailPoet\Models\SendingQueue; use MailPoet\Models\SendingQueue;
use MailPoet\Models\SubscriberSegment;
use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\Scheduler\PostNotificationScheduler; use MailPoet\Newsletter\Scheduler\PostNotificationScheduler;
use MailPoet\Newsletter\Scheduler\Scheduler; use MailPoet\Newsletter\Scheduler\Scheduler;
@ -30,8 +30,8 @@ use MailPoet\Services\AuthorizedEmailsController;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
use MailPoet\Subscription\Url as SubscriptionUrl; use MailPoet\Subscription\Url as SubscriptionUrl;
use MailPoet\Tasks\Sending as SendingTask; use MailPoet\Tasks\Sending as SendingTask;
use MailPoet\WP\Functions as WPFunctions;
use MailPoet\WooCommerce\Helper as WCHelper; use MailPoet\WooCommerce\Helper as WCHelper;
use MailPoet\WP\Functions as WPFunctions;
class NewslettersTest extends \MailPoetTest { class NewslettersTest extends \MailPoetTest {
/** @var Newsletters */ /** @var Newsletters */
@ -288,7 +288,7 @@ class NewslettersTest extends \MailPoetTest {
'type' => Newsletter::TYPE_NOTIFICATION, 'type' => Newsletter::TYPE_NOTIFICATION,
'subject' => 'Newsletter', 'subject' => 'Newsletter',
'options' => [ 'options' => [
'intervalType' => Scheduler::INTERVAL_WEEKLY, 'intervalType' => PostNotificationScheduler::INTERVAL_WEEKLY,
'timeOfDay' => '50400', 'timeOfDay' => '50400',
'weekDay' => '1', 'weekDay' => '1',
'monthDay' => '0', 'monthDay' => '0',
@ -303,7 +303,7 @@ class NewslettersTest extends \MailPoetTest {
expect($response->data)->equals($saved_newsletter->asArray()); expect($response->data)->equals($saved_newsletter->asArray());
// schedule should be recalculated when options change // 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); $response = $this->endpoint->save($newsletter_data);
$saved_newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_NOTIFICATION) $saved_newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_NOTIFICATION)
->findOne($response->data['id']); ->findOne($response->data['id']);
@ -347,7 +347,7 @@ class NewslettersTest extends \MailPoetTest {
'subject' => 'Newsletter', 'subject' => 'Newsletter',
'options' => [ 'options' => [
// weekly on Monday @ 7am // weekly on Monday @ 7am
'intervalType' => Scheduler::INTERVAL_WEEKLY, 'intervalType' => PostNotificationScheduler::INTERVAL_WEEKLY,
'timeOfDay' => '25200', 'timeOfDay' => '25200',
'weekDay' => '1', 'weekDay' => '1',
'monthDay' => '0', 'monthDay' => '0',

View File

@ -10,13 +10,14 @@ use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterOption; use MailPoet\Models\NewsletterOption;
use MailPoet\Models\NewsletterOptionField; use MailPoet\Models\NewsletterOptionField;
use MailPoet\Models\NewsletterSegment; use MailPoet\Models\NewsletterSegment;
use MailPoet\Models\Segment;
use MailPoet\Models\ScheduledTask; use MailPoet\Models\ScheduledTask;
use MailPoet\Models\ScheduledTaskSubscriber; use MailPoet\Models\ScheduledTaskSubscriber;
use MailPoet\Models\Segment;
use MailPoet\Models\SendingQueue; use MailPoet\Models\SendingQueue;
use MailPoet\Models\Setting; use MailPoet\Models\Setting;
use MailPoet\Models\Subscriber; use MailPoet\Models\Subscriber;
use MailPoet\Models\SubscriberSegment; use MailPoet\Models\SubscriberSegment;
use MailPoet\Newsletter\Scheduler\WelcomeScheduler;
use MailPoet\Segments\SubscribersFinder; use MailPoet\Segments\SubscribersFinder;
use MailPoet\Tasks\Sending as SendingTask; use MailPoet\Tasks\Sending as SendingTask;
@ -183,7 +184,8 @@ class SchedulerTest extends \MailPoetTest {
$this->_createNewsletterOptionField('role', Newsletter::TYPE_WELCOME); $this->_createNewsletterOptionField('role', Newsletter::TYPE_WELCOME);
$newsletter_option = $this->_createNewsletterOption( $newsletter_option = $this->_createNewsletterOption(
$newsletter_option_field->id, $newsletter->id, $newsletter_option_field->id, $newsletter->id,
\MailPoet\Newsletter\Scheduler\Scheduler::WORDPRESS_ALL_ROLES); WelcomeScheduler::WORDPRESS_ALL_ROLES
);
$newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_WELCOME) $newsletter = Newsletter::filter('filterWithOptions', Newsletter::TYPE_WELCOME)
->findOne($newsletter->id); ->findOne($newsletter->id);
$queue = $this->_createQueue($newsletter->id); $queue = $this->_createQueue($newsletter->id);

View File

@ -109,7 +109,7 @@ class PostNotificationTest extends \MailPoetTest {
// daily notification is scheduled at 14:00 // daily notification is scheduled at 14:00
$newsletter = (object)[ $newsletter = (object)[
'id' => 1, 'id' => 1,
'intervalType' => Scheduler::INTERVAL_DAILY, 'intervalType' => PostNotificationScheduler::INTERVAL_DAILY,
'monthDay' => null, 'monthDay' => null,
'nthWeekDay' => null, 'nthWeekDay' => null,
'weekDay' => null, 'weekDay' => null,
@ -133,7 +133,7 @@ class PostNotificationTest extends \MailPoetTest {
// weekly notification is scheduled every Tuesday at 14:00 // weekly notification is scheduled every Tuesday at 14:00
$newsletter = (object)[ $newsletter = (object)[
'id' => 1, 'id' => 1,
'intervalType' => Scheduler::INTERVAL_WEEKLY, 'intervalType' => PostNotificationScheduler::INTERVAL_WEEKLY,
'monthDay' => null, 'monthDay' => null,
'nthWeekDay' => null, 'nthWeekDay' => null,
'weekDay' => Carbon::TUESDAY, 'weekDay' => Carbon::TUESDAY,
@ -157,7 +157,7 @@ class PostNotificationTest extends \MailPoetTest {
// monthly notification is scheduled every 20th day at 14:00 // monthly notification is scheduled every 20th day at 14:00
$newsletter = (object)[ $newsletter = (object)[
'id' => 1, 'id' => 1,
'intervalType' => Scheduler::INTERVAL_MONTHLY, 'intervalType' => PostNotificationScheduler::INTERVAL_MONTHLY,
'monthDay' => 19, // 20th (count starts from 0) 'monthDay' => 19, // 20th (count starts from 0)
'nthWeekDay' => null, 'nthWeekDay' => null,
'weekDay' => null, 'weekDay' => null,
@ -181,7 +181,7 @@ class PostNotificationTest extends \MailPoetTest {
// monthly notification is scheduled every last Saturday at 14:00 // monthly notification is scheduled every last Saturday at 14:00
$newsletter = (object)[ $newsletter = (object)[
'id' => 1, 'id' => 1,
'intervalType' => Scheduler::INTERVAL_NTHWEEKDAY, 'intervalType' => PostNotificationScheduler::INTERVAL_NTHWEEKDAY,
'monthDay' => null, 'monthDay' => null,
'nthWeekDay' => 'L', // L = last 'nthWeekDay' => 'L', // L = last
'weekDay' => Carbon::SATURDAY, 'weekDay' => Carbon::SATURDAY,
@ -205,7 +205,7 @@ class PostNotificationTest extends \MailPoetTest {
// notification is scheduled immediately (next minute) // notification is scheduled immediately (next minute)
$newsletter = (object)[ $newsletter = (object)[
'id' => 1, 'id' => 1,
'intervalType' => Scheduler::INTERVAL_IMMEDIATELY, 'intervalType' => PostNotificationScheduler::INTERVAL_IMMEDIATELY,
'monthDay' => null, 'monthDay' => null,
'nthWeekDay' => null, 'nthWeekDay' => null,
'weekDay' => null, 'weekDay' => null,
@ -229,7 +229,7 @@ class PostNotificationTest extends \MailPoetTest {
$this->_createNewsletterOptions( $this->_createNewsletterOptions(
$newsletter->id, $newsletter->id,
[ [
'intervalType' => Scheduler::INTERVAL_IMMEDIATELY, 'intervalType' => PostNotificationScheduler::INTERVAL_IMMEDIATELY,
'schedule' => '* * * * *', 'schedule' => '* * * * *',
] ]
); );
@ -263,7 +263,7 @@ class PostNotificationTest extends \MailPoetTest {
$this->_createNewsletterOptions( $this->_createNewsletterOptions(
$newsletter->id, $newsletter->id,
[ [
'intervalType' => Scheduler::INTERVAL_IMMEDIATELY, 'intervalType' => PostNotificationScheduler::INTERVAL_IMMEDIATELY,
'schedule' => '* * * * *', 'schedule' => '* * * * *',
] ]
); );

View File

@ -18,17 +18,6 @@ use MailPoet\Tasks\Sending as SendingTask;
use MailPoet\WP\Posts as WPPosts; use MailPoet\WP\Posts as WPPosts;
class SchedulerTest extends \MailPoetTest { 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() { function testItGetsActiveNewslettersFilteredByTypeAndGroup() {
$this->_createNewsletter($type = Newsletter::TYPE_WELCOME); $this->_createNewsletter($type = Newsletter::TYPE_WELCOME);

View File

@ -256,7 +256,7 @@ class WelcomeTest extends \MailPoetTest {
$newsletter->id, $newsletter->id,
[ [
'event' => 'user', 'event' => 'user',
'role' => Scheduler::WORDPRESS_ALL_ROLES, 'role' => WelcomeScheduler::WORDPRESS_ALL_ROLES,
'afterTimeType' => 'days', 'afterTimeType' => 'days',
'afterTimeNumber' => 1, 'afterTimeNumber' => 1,
] ]