- Enables check for subscribers who has "subscribed" status during
newsletter sending - Enforces "signup_confirmation" option when selecting subscribers for newsletter sending - Updates unit tests
This commit is contained in:
committed by
Tautvidas Sipavičius
parent
d4abaa7150
commit
91076580ef
@ -65,8 +65,15 @@ class Scheduler {
|
|||||||
function processPostNotificationNewsletter($newsletter, $queue) {
|
function processPostNotificationNewsletter($newsletter, $queue) {
|
||||||
$next_run_date = $this->getQueueNextRunDate($newsletter->schedule);
|
$next_run_date = $this->getQueueNextRunDate($newsletter->schedule);
|
||||||
$segments = unserialize($newsletter->segments);
|
$segments = unserialize($newsletter->segments);
|
||||||
$subscribers = SubscriberSegment::whereIn('segment_id', $segments)
|
if((boolean) Setting::getValue('signup_confirmation.enabled')) {
|
||||||
->findArray();
|
$subscribers = Subscriber::getSubscribedInSegments($segments)
|
||||||
|
->findArray();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$subscribers = SubscriberSegment::whereIn('segment_id', $segments)
|
||||||
|
->where('status', 'subscribed')
|
||||||
|
->findArray();
|
||||||
|
}
|
||||||
$subscribers = Helpers::arrayColumn($subscribers, 'subscriber_id');
|
$subscribers = Helpers::arrayColumn($subscribers, 'subscriber_id');
|
||||||
$subscribers = array_unique($subscribers);
|
$subscribers = array_unique($subscribers);
|
||||||
if(!count($subscribers) || !$this->checkIfNewsletterChanged($newsletter)) {
|
if(!count($subscribers) || !$this->checkIfNewsletterChanged($newsletter)) {
|
||||||
|
@ -316,6 +316,19 @@ class Subscriber extends Model {
|
|||||||
return $orm;
|
return $orm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static function getSubscribedInSegments($segment_ids) {
|
||||||
|
$subscribers = SubscriberSegment::table_alias('relation')
|
||||||
|
->whereIn('relation.segment_id', $segment_ids)
|
||||||
|
->where('relation.status', 'subscribed')
|
||||||
|
->join(
|
||||||
|
MP_SUBSCRIBERS_TABLE,
|
||||||
|
'subscribers.id = relation.subscriber_id',
|
||||||
|
'subscribers'
|
||||||
|
)
|
||||||
|
->where('subscribers.status', 'subscribed');
|
||||||
|
return $subscribers;
|
||||||
|
}
|
||||||
|
|
||||||
function customFields() {
|
function customFields() {
|
||||||
return $this->hasManyThrough(
|
return $this->hasManyThrough(
|
||||||
__NAMESPACE__.'\CustomField',
|
__NAMESPACE__.'\CustomField',
|
||||||
|
@ -5,6 +5,8 @@ use MailPoet\Mailer\Mailer;
|
|||||||
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\Setting;
|
||||||
|
use MailPoet\Models\Subscriber;
|
||||||
use MailPoet\Models\SubscriberSegment;
|
use MailPoet\Models\SubscriberSegment;
|
||||||
use MailPoet\Util\Helpers;
|
use MailPoet\Util\Helpers;
|
||||||
use Cron\CronExpression as Cron;
|
use Cron\CronExpression as Cron;
|
||||||
@ -81,9 +83,18 @@ class SendingQueue {
|
|||||||
|
|
||||||
$queue = \MailPoet\Models\SendingQueue::create();
|
$queue = \MailPoet\Models\SendingQueue::create();
|
||||||
$queue->newsletter_id = $newsletter->id;
|
$queue->newsletter_id = $newsletter->id;
|
||||||
$subscribers = SubscriberSegment::whereIn('segment_id', $data['segments'])
|
|
||||||
->findArray();
|
if((boolean) Setting::getValue('signup_confirmation.enabled')) {
|
||||||
|
$subscribers = Subscriber::getSubscribedInSegments($data['segments'])
|
||||||
|
->findArray();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$subscribers = SubscriberSegment::whereIn('segment_id', $data['segments'])
|
||||||
|
->where('status', 'subscribed')
|
||||||
|
->findArray();
|
||||||
|
}
|
||||||
$subscribers = Helpers::arrayColumn($subscribers, 'subscriber_id');
|
$subscribers = Helpers::arrayColumn($subscribers, 'subscriber_id');
|
||||||
|
|
||||||
$subscribers = array_unique($subscribers);
|
$subscribers = array_unique($subscribers);
|
||||||
if(!count($subscribers)) {
|
if(!count($subscribers)) {
|
||||||
return array(
|
return array(
|
||||||
|
@ -389,16 +389,45 @@ class SubscriberTest extends MailPoetTest {
|
|||||||
->equals('non_default_value');
|
->equals('non_default_value');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testItCanGetOnlySubscribedSubscribersInSegments() {
|
||||||
|
ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
|
||||||
|
$columns = array(
|
||||||
|
'first_name',
|
||||||
|
'last_name',
|
||||||
|
'email',
|
||||||
|
'status'
|
||||||
|
);
|
||||||
|
$values = array(
|
||||||
|
array(
|
||||||
|
'first_name' => 'Adam',
|
||||||
|
'last_name' => 'Smith',
|
||||||
|
'email' => 'adam@smith.com',
|
||||||
|
'status' => 'unconfirmed'
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'first_name' => 'Mary',
|
||||||
|
'last_name' => 'Jane',
|
||||||
|
'email' => 'mary@jane.com',
|
||||||
|
'status' => 'subscribed'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
Subscriber::createMultiple($columns, $values);
|
||||||
|
SubscriberSegment::createMultiple(array(1), array(1,2));
|
||||||
|
$subscribed_subscribers_in_segment =
|
||||||
|
Subscriber::getSubscribedInSegments(array(1))->findArray();
|
||||||
|
expect(count($subscribed_subscribers_in_segment))->equals(1);
|
||||||
|
$subscriber = Subscriber::findOne(1);
|
||||||
|
$subscriber->status = 'subscribed';
|
||||||
|
$subscriber->save();
|
||||||
|
$subscribed_subscribers_in_segment =
|
||||||
|
Subscriber::getSubscribedInSegments(array(1))->findArray();
|
||||||
|
expect(count($subscribed_subscribers_in_segment))->equals(2);
|
||||||
|
}
|
||||||
function _after() {
|
function _after() {
|
||||||
ORM::forTable(Subscriber::$_table)
|
ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
|
||||||
->deleteMany();
|
ORM::raw_execute('TRUNCATE ' . Segment::$_table);
|
||||||
ORM::forTable(Segment::$_table)
|
ORM::raw_execute('TRUNCATE ' . SubscriberSegment::$_table);
|
||||||
->deleteMany();
|
ORM::raw_execute('TRUNCATE ' . CustomField::$_table);
|
||||||
ORM::forTable(SubscriberSegment::$_table)
|
ORM::raw_execute('TRUNCATE ' . SubscriberCustomField::$_table);
|
||||||
->deleteMany();
|
|
||||||
ORM::forTable(CustomField::$_table)
|
|
||||||
->deleteMany();
|
|
||||||
ORM::forTable(SubscriberCustomField::$_table)
|
|
||||||
->deleteMany();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user