Move getWooCommerceSegmentSubscriber() from helper to model
[MAILPOET-2382]
This commit is contained in:
committed by
Jack Kitterhing
parent
dd45a96b94
commit
25d9ffa656
@ -160,7 +160,7 @@ class FirstPurchase {
|
|||||||
'order_id' => $order_details->get_id(),
|
'order_id' => $order_details->get_id(),
|
||||||
];
|
];
|
||||||
|
|
||||||
$subscriber = $this->premium_helper->getWooCommerceSegmentSubscriber($customer_email);
|
$subscriber = Subscriber::getWooCommerceSegmentSubscriber($customer_email);
|
||||||
|
|
||||||
if (!$subscriber instanceof Subscriber) {
|
if (!$subscriber instanceof Subscriber) {
|
||||||
Logger::getLogger(self::SLUG)->addInfo(
|
Logger::getLogger(self::SLUG)->addInfo(
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
namespace MailPoet\AutomaticEmails\WooCommerce\Events;
|
namespace MailPoet\AutomaticEmails\WooCommerce\Events;
|
||||||
|
|
||||||
use MailPoet\AutomaticEmails\WooCommerce\Helper as WCPremiumHelper;
|
|
||||||
use MailPoet\AutomaticEmails\WooCommerce\WooCommerce;
|
use MailPoet\AutomaticEmails\WooCommerce\WooCommerce;
|
||||||
use MailPoet\Logging\Logger;
|
use MailPoet\Logging\Logger;
|
||||||
use MailPoet\Models\Subscriber;
|
use MailPoet\Models\Subscriber;
|
||||||
@ -18,21 +17,14 @@ class PurchasedInCategory {
|
|||||||
/** @var WCHelper */
|
/** @var WCHelper */
|
||||||
private $woocommerce_helper;
|
private $woocommerce_helper;
|
||||||
|
|
||||||
/** @var WCPremiumHelper */
|
|
||||||
private $premium_helper;
|
|
||||||
|
|
||||||
/** @var AutomaticEmailScheduler */
|
/** @var AutomaticEmailScheduler */
|
||||||
private $scheduler;
|
private $scheduler;
|
||||||
|
|
||||||
function __construct(WCHelper $woocommerce_helper = null, WCPremiumHelper $premium_helper = null) {
|
function __construct(WCHelper $woocommerce_helper = null) {
|
||||||
if ($woocommerce_helper === null) {
|
if ($woocommerce_helper === null) {
|
||||||
$woocommerce_helper = new WCHelper();
|
$woocommerce_helper = new WCHelper();
|
||||||
}
|
}
|
||||||
if ($premium_helper === null) {
|
|
||||||
$premium_helper = new WCPremiumHelper;
|
|
||||||
}
|
|
||||||
$this->woocommerce_helper = $woocommerce_helper;
|
$this->woocommerce_helper = $woocommerce_helper;
|
||||||
$this->premium_helper = $premium_helper;
|
|
||||||
$this->scheduler = new AutomaticEmailScheduler();
|
$this->scheduler = new AutomaticEmailScheduler();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,7 +93,7 @@ class PurchasedInCategory {
|
|||||||
}
|
}
|
||||||
$customer_email = $order_details->get_billing_email();
|
$customer_email = $order_details->get_billing_email();
|
||||||
|
|
||||||
$subscriber = $this->premium_helper->getWooCommerceSegmentSubscriber($customer_email);
|
$subscriber = Subscriber::getWooCommerceSegmentSubscriber($customer_email);
|
||||||
|
|
||||||
if (!$subscriber instanceof Subscriber) {
|
if (!$subscriber instanceof Subscriber) {
|
||||||
Logger::getLogger(self::SLUG)->addInfo(
|
Logger::getLogger(self::SLUG)->addInfo(
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
namespace MailPoet\AutomaticEmails\WooCommerce\Events;
|
namespace MailPoet\AutomaticEmails\WooCommerce\Events;
|
||||||
|
|
||||||
use MailPoet\AutomaticEmails\WooCommerce\Helper as WCPremiumHelper;
|
|
||||||
use MailPoet\AutomaticEmails\WooCommerce\WooCommerce;
|
use MailPoet\AutomaticEmails\WooCommerce\WooCommerce;
|
||||||
use MailPoet\Logging\Logger;
|
use MailPoet\Logging\Logger;
|
||||||
use MailPoet\Models\Subscriber;
|
use MailPoet\Models\Subscriber;
|
||||||
@ -19,23 +18,14 @@ class PurchasedProduct {
|
|||||||
*/
|
*/
|
||||||
private $helper;
|
private $helper;
|
||||||
|
|
||||||
/**
|
|
||||||
* @var WCPremiumHelper
|
|
||||||
*/
|
|
||||||
private $premium_helper;
|
|
||||||
|
|
||||||
/** @var AutomaticEmailScheduler */
|
/** @var AutomaticEmailScheduler */
|
||||||
private $scheduler;
|
private $scheduler;
|
||||||
|
|
||||||
function __construct(WCHelper $helper = null, WCPremiumHelper $premium_helper = null) {
|
function __construct(WCHelper $helper = null) {
|
||||||
if ($helper === null) {
|
if ($helper === null) {
|
||||||
$helper = new WCHelper();
|
$helper = new WCHelper();
|
||||||
}
|
}
|
||||||
if ($premium_helper === null) {
|
|
||||||
$premium_helper = new WCPremiumHelper;
|
|
||||||
}
|
|
||||||
$this->helper = $helper;
|
$this->helper = $helper;
|
||||||
$this->premium_helper = $premium_helper;
|
|
||||||
$this->scheduler = new AutomaticEmailScheduler();
|
$this->scheduler = new AutomaticEmailScheduler();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,7 +103,7 @@ class PurchasedProduct {
|
|||||||
}
|
}
|
||||||
$customer_email = $order_details->get_billing_email();
|
$customer_email = $order_details->get_billing_email();
|
||||||
|
|
||||||
$subscriber = $this->premium_helper->getWooCommerceSegmentSubscriber($customer_email);
|
$subscriber = Subscriber::getWooCommerceSegmentSubscriber($customer_email);
|
||||||
|
|
||||||
if (!$subscriber instanceof Subscriber) {
|
if (!$subscriber instanceof Subscriber) {
|
||||||
Logger::getLogger(self::SLUG)->addInfo(
|
Logger::getLogger(self::SLUG)->addInfo(
|
||||||
|
@ -29,27 +29,6 @@ class Helper {
|
|||||||
$this->helper = $helper;
|
$this->helper = $helper;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $customer_email
|
|
||||||
* @return bool|Subscriber
|
|
||||||
*/
|
|
||||||
function getWooCommerceSegmentSubscriber($customer_email) {
|
|
||||||
$wc_segment = Segment::getWooCommerceSegment();
|
|
||||||
return Subscriber::tableAlias('subscribers')
|
|
||||||
->select('subscribers.*')
|
|
||||||
->where('subscribers.email', $customer_email)
|
|
||||||
->join(
|
|
||||||
MP_SUBSCRIBER_SEGMENT_TABLE,
|
|
||||||
'relation.subscriber_id = subscribers.id',
|
|
||||||
'relation'
|
|
||||||
)
|
|
||||||
->where('relation.segment_id', $wc_segment->id)
|
|
||||||
->where('relation.status', Subscriber::STATUS_SUBSCRIBED)
|
|
||||||
->where('subscribers.status', Subscriber::STATUS_SUBSCRIBED)
|
|
||||||
->where('subscribers.is_woocommerce_user', 1)
|
|
||||||
->findOne();
|
|
||||||
}
|
|
||||||
|
|
||||||
function getCustomerOrderCount($customer_email) {
|
function getCustomerOrderCount($customer_email) {
|
||||||
// registered user
|
// registered user
|
||||||
$user = $this->wp->getUserBy('email', $customer_email);
|
$user = $this->wp->getUserBy('email', $customer_email);
|
||||||
|
@ -344,6 +344,27 @@ class Subscriber extends Model {
|
|||||||
return $subscribers;
|
return $subscribers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $customer_email
|
||||||
|
* @return bool|Subscriber
|
||||||
|
*/
|
||||||
|
static function getWooCommerceSegmentSubscriber($customer_email) {
|
||||||
|
$wc_segment = Segment::getWooCommerceSegment();
|
||||||
|
return Subscriber::tableAlias('subscribers')
|
||||||
|
->select('subscribers.*')
|
||||||
|
->where('subscribers.email', $customer_email)
|
||||||
|
->join(
|
||||||
|
MP_SUBSCRIBER_SEGMENT_TABLE,
|
||||||
|
'relation.subscriber_id = subscribers.id',
|
||||||
|
'relation'
|
||||||
|
)
|
||||||
|
->where('relation.segment_id', $wc_segment->id)
|
||||||
|
->where('relation.status', Subscriber::STATUS_SUBSCRIBED)
|
||||||
|
->where('subscribers.status', Subscriber::STATUS_SUBSCRIBED)
|
||||||
|
->where('subscribers.is_woocommerce_user', 1)
|
||||||
|
->findOne();
|
||||||
|
}
|
||||||
|
|
||||||
function customFields() {
|
function customFields() {
|
||||||
return $this->hasManyThrough(
|
return $this->hasManyThrough(
|
||||||
__NAMESPACE__ . '\CustomField',
|
__NAMESPACE__ . '\CustomField',
|
||||||
|
@ -13,8 +13,10 @@ use MailPoet\Models\NewsletterOption;
|
|||||||
use MailPoet\Models\NewsletterOptionField;
|
use MailPoet\Models\NewsletterOptionField;
|
||||||
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\Subscriber;
|
use MailPoet\Models\Subscriber;
|
||||||
|
use MailPoet\Models\SubscriberSegment;
|
||||||
use MailPoet\Tasks\Sending;
|
use MailPoet\Tasks\Sending;
|
||||||
use MailPoet\WooCommerce\Helper as WCHelper;
|
use MailPoet\WooCommerce\Helper as WCHelper;
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
@ -229,7 +231,17 @@ class FirstPurchaseTest extends \MailPoetTest {
|
|||||||
$subscriber = Subscriber::createOrUpdate(Fixtures::get('subscriber_template'));
|
$subscriber = Subscriber::createOrUpdate(Fixtures::get('subscriber_template'));
|
||||||
$subscriber->email = $customer_email;
|
$subscriber->email = $customer_email;
|
||||||
$subscriber->is_woocommerce_user = 1;
|
$subscriber->is_woocommerce_user = 1;
|
||||||
|
$subscriber->status = Subscriber::STATUS_SUBSCRIBED;
|
||||||
$subscriber->save();
|
$subscriber->save();
|
||||||
|
|
||||||
|
$subscriber_segment = SubscriberSegment::create();
|
||||||
|
$subscriber_segment->hydrate([
|
||||||
|
'subscriber_id' => $subscriber->id,
|
||||||
|
'segment_id' => Segment::getWooCommerceSegment()->id,
|
||||||
|
'status' => Subscriber::STATUS_SUBSCRIBED,
|
||||||
|
]);
|
||||||
|
$subscriber_segment->save();
|
||||||
|
|
||||||
$date_created = new \DateTime('2018-12-12');
|
$date_created = new \DateTime('2018-12-12');
|
||||||
$helper = Stub::make(WCHelper::class, [
|
$helper = Stub::make(WCHelper::class, [
|
||||||
'wcGetOrder' => function($order_id) use ($customer_email, $date_created) {
|
'wcGetOrder' => function($order_id) use ($customer_email, $date_created) {
|
||||||
@ -245,13 +257,8 @@ class FirstPurchaseTest extends \MailPoetTest {
|
|||||||
return $order_details;
|
return $order_details;
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
$premium_helper = Stub::make(new WCPremiumHelper, [
|
|
||||||
'getCustomerOrderCount' => 1,
|
$event = new FirstPurchase($helper);
|
||||||
'getWooCommerceSegmentSubscriber' => function () use ($subscriber) {
|
|
||||||
return $subscriber;
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
$event = new FirstPurchase($helper, $premium_helper);
|
|
||||||
$event->init();
|
$event->init();
|
||||||
$order_id = 12;
|
$order_id = 12;
|
||||||
|
|
||||||
|
@ -3,15 +3,16 @@
|
|||||||
namespace MailPoet\AutomaticEmails\WooCommerce\Events;
|
namespace MailPoet\AutomaticEmails\WooCommerce\Events;
|
||||||
|
|
||||||
use Codeception\Util\Fixtures;
|
use Codeception\Util\Fixtures;
|
||||||
use MailPoet\AutomaticEmails\WooCommerce\Helper as WCPremiumHelper;
|
|
||||||
use MailPoet\AutomaticEmails\WooCommerce\WooCommerce;
|
use MailPoet\AutomaticEmails\WooCommerce\WooCommerce;
|
||||||
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\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\Subscriber;
|
use MailPoet\Models\Subscriber;
|
||||||
|
use MailPoet\Models\SubscriberSegment;
|
||||||
use MailPoet\Tasks\Sending;
|
use MailPoet\Tasks\Sending;
|
||||||
use MailPoet\WooCommerce\Helper as WCHelper;
|
use MailPoet\WooCommerce\Helper as WCHelper;
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
@ -21,9 +22,6 @@ class PurchasedInCategoryTest extends \MailPoetTest {
|
|||||||
/** @var WCHelper */
|
/** @var WCHelper */
|
||||||
private $woocommerce_helper;
|
private $woocommerce_helper;
|
||||||
|
|
||||||
/** @var WCPremiumHelper */
|
|
||||||
private $premium_helper;
|
|
||||||
|
|
||||||
/** @var PurchasedInCategory */
|
/** @var PurchasedInCategory */
|
||||||
private $event;
|
private $event;
|
||||||
|
|
||||||
@ -38,8 +36,7 @@ class PurchasedInCategoryTest extends \MailPoetTest {
|
|||||||
WPFunctions::set(new WPFunctions);
|
WPFunctions::set(new WPFunctions);
|
||||||
WPFunctions::get()->removeAllFilters('woocommerce_payment_complete');
|
WPFunctions::get()->removeAllFilters('woocommerce_payment_complete');
|
||||||
$this->woocommerce_helper = $this->makeEmpty(WCHelper::class, []);
|
$this->woocommerce_helper = $this->makeEmpty(WCHelper::class, []);
|
||||||
$this->premium_helper = $this->makeEmpty(WCPremiumHelper::class, []);
|
$this->event = new PurchasedInCategory($this->woocommerce_helper);
|
||||||
$this->event = new PurchasedInCategory($this->woocommerce_helper, $this->premium_helper);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItGetsEventDetails() {
|
function testItGetsEventDetails() {
|
||||||
@ -66,11 +63,6 @@ class PurchasedInCategoryTest extends \MailPoetTest {
|
|||||||
->expects($this->atLeastOnce())
|
->expects($this->atLeastOnce())
|
||||||
->method('get_billing_email')
|
->method('get_billing_email')
|
||||||
->will($this->returnValue('email@example.com'));
|
->will($this->returnValue('email@example.com'));
|
||||||
$this->premium_helper
|
|
||||||
->expects($this->once())
|
|
||||||
->method('getWooCommerceSegmentSubscriber')
|
|
||||||
->with($this->equalTo('email@example.com'))
|
|
||||||
->will($this->returnValue(false));
|
|
||||||
$this->event->scheduleEmail(2);
|
$this->event->scheduleEmail(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,6 +90,8 @@ class PurchasedInCategoryTest extends \MailPoetTest {
|
|||||||
],
|
],
|
||||||
$newsletter->id
|
$newsletter->id
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$customer_email = 'email@example.com';
|
||||||
$order = $this->getOrderMock(['15', '16']);
|
$order = $this->getOrderMock(['15', '16']);
|
||||||
$this->woocommerce_helper
|
$this->woocommerce_helper
|
||||||
->expects($this->once())
|
->expects($this->once())
|
||||||
@ -106,13 +100,22 @@ class PurchasedInCategoryTest extends \MailPoetTest {
|
|||||||
$order
|
$order
|
||||||
->expects($this->atLeastOnce())
|
->expects($this->atLeastOnce())
|
||||||
->method('get_billing_email')
|
->method('get_billing_email')
|
||||||
->will($this->returnValue('email@example.com'));
|
->will($this->returnValue($customer_email));
|
||||||
|
|
||||||
$subscriber = Subscriber::createOrUpdate(Fixtures::get('subscriber_template'));
|
$subscriber = Subscriber::createOrUpdate(Fixtures::get('subscriber_template'));
|
||||||
$this->premium_helper
|
$subscriber->email = $customer_email;
|
||||||
->expects($this->once())
|
$subscriber->is_woocommerce_user = 1;
|
||||||
->method('getWooCommerceSegmentSubscriber')
|
$subscriber->status = Subscriber::STATUS_SUBSCRIBED;
|
||||||
->with($this->equalTo('email@example.com'))
|
$subscriber->save();
|
||||||
->will($this->returnValue($subscriber));
|
|
||||||
|
$subscriber_segment = SubscriberSegment::create();
|
||||||
|
$subscriber_segment->hydrate([
|
||||||
|
'subscriber_id' => $subscriber->id,
|
||||||
|
'segment_id' => Segment::getWooCommerceSegment()->id,
|
||||||
|
'status' => Subscriber::STATUS_SUBSCRIBED,
|
||||||
|
]);
|
||||||
|
$subscriber_segment->save();
|
||||||
|
|
||||||
$this->event->scheduleEmail(3);
|
$this->event->scheduleEmail(3);
|
||||||
$scheduled_task = Sending::getByNewsletterId($newsletter->id);
|
$scheduled_task = Sending::getByNewsletterId($newsletter->id);
|
||||||
expect($scheduled_task)->notEmpty();
|
expect($scheduled_task)->notEmpty();
|
||||||
|
@ -5,7 +5,6 @@ namespace MailPoet\AutomaticEmails\WooCommerce\Events;
|
|||||||
use Codeception\Stub;
|
use Codeception\Stub;
|
||||||
use Codeception\Stub\Expected;
|
use Codeception\Stub\Expected;
|
||||||
use Codeception\Util\Fixtures;
|
use Codeception\Util\Fixtures;
|
||||||
use MailPoet\AutomaticEmails\WooCommerce\Helper as WCPremiumHelper;
|
|
||||||
use MailPoet\AutomaticEmails\WooCommerce\WooCommerce;
|
use MailPoet\AutomaticEmails\WooCommerce\WooCommerce;
|
||||||
use MailPoet\AutomaticEmails\WooCommerce\WooCommerceStubs\ItemDetails;
|
use MailPoet\AutomaticEmails\WooCommerce\WooCommerceStubs\ItemDetails;
|
||||||
use MailPoet\AutomaticEmails\WooCommerce\WooCommerceStubs\OrderDetails;
|
use MailPoet\AutomaticEmails\WooCommerce\WooCommerceStubs\OrderDetails;
|
||||||
@ -14,13 +13,16 @@ use MailPoet\Models\NewsletterOption;
|
|||||||
use MailPoet\Models\NewsletterOptionField;
|
use MailPoet\Models\NewsletterOptionField;
|
||||||
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\Subscriber;
|
use MailPoet\Models\Subscriber;
|
||||||
|
use MailPoet\Models\SubscriberSegment;
|
||||||
use MailPoet\Tasks\Sending;
|
use MailPoet\Tasks\Sending;
|
||||||
use MailPoet\WooCommerce\Helper as WCHelper;
|
use MailPoet\WooCommerce\Helper as WCHelper;
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
|
|
||||||
require_once __DIR__ . '/../WooCommerceStubs/ItemDetails.php';
|
require_once __DIR__ . '/../WooCommerceStubs/ItemDetails.php';
|
||||||
|
require_once __DIR__ . '/../WooCommerceStubs/OrderDetails.php';
|
||||||
|
|
||||||
class PurchasedProductTest extends \MailPoetTest {
|
class PurchasedProductTest extends \MailPoetTest {
|
||||||
function _before() {
|
function _before() {
|
||||||
@ -200,8 +202,17 @@ class PurchasedProductTest extends \MailPoetTest {
|
|||||||
$subscriber = Subscriber::createOrUpdate(Fixtures::get('subscriber_template'));
|
$subscriber = Subscriber::createOrUpdate(Fixtures::get('subscriber_template'));
|
||||||
$subscriber->email = $customer_email;
|
$subscriber->email = $customer_email;
|
||||||
$subscriber->is_woocommerce_user = 1;
|
$subscriber->is_woocommerce_user = 1;
|
||||||
|
$subscriber->status = Subscriber::STATUS_SUBSCRIBED;
|
||||||
$subscriber->save();
|
$subscriber->save();
|
||||||
|
|
||||||
|
$subscriber_segment = SubscriberSegment::create();
|
||||||
|
$subscriber_segment->hydrate([
|
||||||
|
'subscriber_id' => $subscriber->id,
|
||||||
|
'segment_id' => Segment::getWooCommerceSegment()->id,
|
||||||
|
'status' => Subscriber::STATUS_SUBSCRIBED,
|
||||||
|
]);
|
||||||
|
$subscriber_segment->save();
|
||||||
|
|
||||||
$order_details = Stub::make(
|
$order_details = Stub::make(
|
||||||
new OrderDetails(),
|
new OrderDetails(),
|
||||||
[
|
[
|
||||||
@ -229,13 +240,8 @@ class PurchasedProductTest extends \MailPoetTest {
|
|||||||
$helper = Stub::make(WCHelper::class, [
|
$helper = Stub::make(WCHelper::class, [
|
||||||
'wcGetOrder' => $order_details,
|
'wcGetOrder' => $order_details,
|
||||||
]);
|
]);
|
||||||
$premium_helper = Stub::make(new WCPremiumHelper, [
|
|
||||||
'getCustomerOrderCount' => 1,
|
$event = new PurchasedProduct($helper);
|
||||||
'getWooCommerceSegmentSubscriber' => function () use ($subscriber) {
|
|
||||||
return $subscriber;
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
$event = new PurchasedProduct($helper, $premium_helper);
|
|
||||||
|
|
||||||
// ensure there are no existing scheduled tasks
|
// ensure there are no existing scheduled tasks
|
||||||
$scheduled_task = Sending::getByNewsletterId($newsletter->id);
|
$scheduled_task = Sending::getByNewsletterId($newsletter->id);
|
||||||
|
Reference in New Issue
Block a user