Fix user being unsubscribed from non default lists
[MAILPOET-2292]
This commit is contained in:
committed by
Jack Kitterhing
parent
925e9ce15c
commit
644e0caeeb
@@ -9,6 +9,7 @@ use MailPoet\Config\AccessControl;
|
|||||||
use MailPoet\Form\Util\FieldNameObfuscator;
|
use MailPoet\Form\Util\FieldNameObfuscator;
|
||||||
use MailPoet\Listing;
|
use MailPoet\Listing;
|
||||||
use MailPoet\Models\Form;
|
use MailPoet\Models\Form;
|
||||||
|
use MailPoet\Models\Segment;
|
||||||
use MailPoet\Models\StatisticsForms;
|
use MailPoet\Models\StatisticsForms;
|
||||||
use MailPoet\Models\Subscriber;
|
use MailPoet\Models\Subscriber;
|
||||||
use MailPoet\Models\SubscriberSegment;
|
use MailPoet\Models\SubscriberSegment;
|
||||||
@@ -333,6 +334,7 @@ class Subscribers extends APIEndpoint {
|
|||||||
if (empty($data['segments'])) {
|
if (empty($data['segments'])) {
|
||||||
$data['segments'] = [];
|
$data['segments'] = [];
|
||||||
}
|
}
|
||||||
|
$data['segments'] = array_merge($data['segments'], $this->getNonDefaultSubscribedSegments($data));
|
||||||
$new_segments = $this->findNewSegments($data);
|
$new_segments = $this->findNewSegments($data);
|
||||||
$subscriber = Subscriber::createOrUpdate($data);
|
$subscriber = Subscriber::createOrUpdate($data);
|
||||||
$errors = $subscriber->getErrors();
|
$errors = $subscriber->getErrors();
|
||||||
@@ -356,6 +358,31 @@ class Subscribers extends APIEndpoint {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getNonDefaultSubscribedSegments(array $data) {
|
||||||
|
if (!isset($data['id']) || (int)$data['id'] <= 0) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
$subscribed_segment_ids = [];
|
||||||
|
$non_default_segment = Segment::select('id')
|
||||||
|
->whereNotEqual('type', Segment::TYPE_DEFAULT)
|
||||||
|
->findArray();
|
||||||
|
$non_default_segment_ids = array_map(function($segment) {
|
||||||
|
return $segment['id'];
|
||||||
|
}, $non_default_segment);
|
||||||
|
|
||||||
|
$subscribed_segments = SubscriberSegment::select('segment_id')
|
||||||
|
->where('subscriber_id', $data['id'])
|
||||||
|
->where('status', Subscriber::STATUS_SUBSCRIBED)
|
||||||
|
->whereIn('segment_id', $non_default_segment_ids)
|
||||||
|
->findArray();
|
||||||
|
$subscribed_segment_ids = array_map(function($segment) {
|
||||||
|
return $segment['segment_id'];
|
||||||
|
}, $subscribed_segments);
|
||||||
|
|
||||||
|
return $subscribed_segment_ids;
|
||||||
|
}
|
||||||
|
|
||||||
private function findNewSegments(array $data) {
|
private function findNewSegments(array $data) {
|
||||||
$old_segment_ids = [];
|
$old_segment_ids = [];
|
||||||
if (isset($data['id']) && (int)$data['id'] > 0) {
|
if (isset($data['id']) && (int)$data['id'] > 0) {
|
||||||
|
Reference in New Issue
Block a user