- 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) {
|
||||
$next_run_date = $this->getQueueNextRunDate($newsletter->schedule);
|
||||
$segments = unserialize($newsletter->segments);
|
||||
$subscribers = SubscriberSegment::whereIn('segment_id', $segments)
|
||||
->findArray();
|
||||
if((boolean) Setting::getValue('signup_confirmation.enabled')) {
|
||||
$subscribers = Subscriber::getSubscribedInSegments($segments)
|
||||
->findArray();
|
||||
}
|
||||
else {
|
||||
$subscribers = SubscriberSegment::whereIn('segment_id', $segments)
|
||||
->where('status', 'subscribed')
|
||||
->findArray();
|
||||
}
|
||||
$subscribers = Helpers::arrayColumn($subscribers, 'subscriber_id');
|
||||
$subscribers = array_unique($subscribers);
|
||||
if(!count($subscribers) || !$this->checkIfNewsletterChanged($newsletter)) {
|
||||
|
@ -316,6 +316,19 @@ class Subscriber extends Model {
|
||||
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() {
|
||||
return $this->hasManyThrough(
|
||||
__NAMESPACE__.'\CustomField',
|
||||
|
@ -5,6 +5,8 @@ use MailPoet\Mailer\Mailer;
|
||||
use MailPoet\Models\Newsletter;
|
||||
use MailPoet\Models\NewsletterOption;
|
||||
use MailPoet\Models\NewsletterOptionField;
|
||||
use MailPoet\Models\Setting;
|
||||
use MailPoet\Models\Subscriber;
|
||||
use MailPoet\Models\SubscriberSegment;
|
||||
use MailPoet\Util\Helpers;
|
||||
use Cron\CronExpression as Cron;
|
||||
@ -81,9 +83,18 @@ class SendingQueue {
|
||||
|
||||
$queue = \MailPoet\Models\SendingQueue::create();
|
||||
$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 = array_unique($subscribers);
|
||||
if(!count($subscribers)) {
|
||||
return array(
|
||||
|
@ -389,16 +389,45 @@ class SubscriberTest extends MailPoetTest {
|
||||
->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() {
|
||||
ORM::forTable(Subscriber::$_table)
|
||||
->deleteMany();
|
||||
ORM::forTable(Segment::$_table)
|
||||
->deleteMany();
|
||||
ORM::forTable(SubscriberSegment::$_table)
|
||||
->deleteMany();
|
||||
ORM::forTable(CustomField::$_table)
|
||||
->deleteMany();
|
||||
ORM::forTable(SubscriberCustomField::$_table)
|
||||
->deleteMany();
|
||||
ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
|
||||
ORM::raw_execute('TRUNCATE ' . Segment::$_table);
|
||||
ORM::raw_execute('TRUNCATE ' . SubscriberSegment::$_table);
|
||||
ORM::raw_execute('TRUNCATE ' . CustomField::$_table);
|
||||
ORM::raw_execute('TRUNCATE ' . SubscriberCustomField::$_table);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user