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\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 {

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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',

View File

@ -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);

View File

@ -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' => '* * * * *',
]
);

View File

@ -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);

View File

@ -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,
]