Display subscribers with correct status
[MAILPOET-1944]
This commit is contained in:
@ -95,24 +95,46 @@ class Subscribers extends APIEndpoint {
|
|||||||
$listing_data = $this->subscribers_listings->getListingsInSegment($data);
|
$listing_data = $this->subscribers_listings->getListingsInSegment($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = array();
|
$result = array();
|
||||||
foreach ($listing_data['items'] as $subscriber) {
|
foreach ($listing_data['items'] as $subscriber) {
|
||||||
$data[] = $subscriber
|
$subscriber_result = $subscriber
|
||||||
->withSubscriptions()
|
->withSubscriptions()
|
||||||
->asArray();
|
->asArray();
|
||||||
|
if (isset($data['filter']['segment'])) {
|
||||||
|
$subscriber_result = $this->preferUnsubscribedStatusFromSegment($subscriber_result, $data['filter']['segment']);
|
||||||
|
}
|
||||||
|
$result[] = $subscriber_result;
|
||||||
}
|
}
|
||||||
|
|
||||||
$listing_data['filters']['segment'] = $this->wp->applyFilters(
|
$listing_data['filters']['segment'] = $this->wp->applyFilters(
|
||||||
'mailpoet_subscribers_listings_filters_segments',
|
'mailpoet_subscribers_listings_filters_segments',
|
||||||
$listing_data['filters']['segment']
|
$listing_data['filters']['segment']
|
||||||
);
|
);
|
||||||
return $this->successResponse($data, array(
|
|
||||||
|
return $this->successResponse($result, array(
|
||||||
'count' => $listing_data['count'],
|
'count' => $listing_data['count'],
|
||||||
'filters' => $listing_data['filters'],
|
'filters' => $listing_data['filters'],
|
||||||
'groups' => $listing_data['groups']
|
'groups' => $listing_data['groups']
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function preferUnsubscribedStatusFromSegment(array $subscriber, $segment_id) {
|
||||||
|
$segment_status = $this->findSegmentStatus($subscriber, $segment_id);
|
||||||
|
|
||||||
|
if ($segment_status === Subscriber::STATUS_UNSUBSCRIBED) {
|
||||||
|
$subscriber['status'] = $segment_status;
|
||||||
|
}
|
||||||
|
return $subscriber;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function findSegmentStatus(array $subscriber, $segment_id) {
|
||||||
|
foreach ($subscriber['subscriptions'] as $segment) {
|
||||||
|
if ($segment['segment_id'] === $segment_id) {
|
||||||
|
return $segment['status'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function subscribe($data = array()) {
|
function subscribe($data = array()) {
|
||||||
$form_id = (isset($data['form_id']) ? (int)$data['form_id'] : false);
|
$form_id = (isset($data['form_id']) ? (int)$data['form_id'] : false);
|
||||||
$form = Form::findOne($form_id);
|
$form = Form::findOne($form_id);
|
||||||
|
@ -47,7 +47,7 @@ class Segment extends Model {
|
|||||||
__NAMESPACE__.'\SubscriberSegment',
|
__NAMESPACE__.'\SubscriberSegment',
|
||||||
'segment_id',
|
'segment_id',
|
||||||
'subscriber_id'
|
'subscriber_id'
|
||||||
)->where(MP_SUBSCRIBER_SEGMENT_TABLE.'.status', Subscriber::STATUS_SUBSCRIBED);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function duplicate($data = array()) {
|
function duplicate($data = array()) {
|
||||||
|
@ -322,6 +322,30 @@ class SubscribersTest extends \MailPoetTest {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testItCorrectSubscriptionStatus() {
|
||||||
|
$segment = Segment::createOrUpdate(array('name' => 'Segment185245'));
|
||||||
|
$subscriber = Subscriber::createOrUpdate([
|
||||||
|
'email' => 'third@example.com',
|
||||||
|
'status' => Subscriber::STATUS_SUBSCRIBED,
|
||||||
|
'segments' => array(
|
||||||
|
$segment->id,
|
||||||
|
),
|
||||||
|
'source' => Source::API,
|
||||||
|
]);
|
||||||
|
SubscriberSegment::createOrUpdate([
|
||||||
|
'subscriber_id' => $subscriber->id,
|
||||||
|
'segment_id' => $segment->id,
|
||||||
|
'status' => Subscriber::STATUS_UNSUBSCRIBED,
|
||||||
|
]);
|
||||||
|
$response = $this->endpoint->listing([
|
||||||
|
'filter' => [
|
||||||
|
'segment' => $segment->id,
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
|
expect($response->data[0]['status'])->equals(Subscriber::STATUS_UNSUBSCRIBED);
|
||||||
|
}
|
||||||
|
|
||||||
function testItCanSortAndLimitListing() {
|
function testItCanSortAndLimitListing() {
|
||||||
// get 1st page (limit items per page to 1)
|
// get 1st page (limit items per page to 1)
|
||||||
$response = $this->endpoint->listing(array(
|
$response = $this->endpoint->listing(array(
|
||||||
|
@ -241,9 +241,6 @@ class SubscriberTest extends \MailPoetTest {
|
|||||||
$subscribers = Subscriber::filter('filterBy', array('segment' => 'none'))
|
$subscribers = Subscriber::filter('filterBy', array('segment' => 'none'))
|
||||||
->findMany();
|
->findMany();
|
||||||
expect($subscribers)->count(1);
|
expect($subscribers)->count(1);
|
||||||
$subscribers = Subscriber::filter('filterBy', array('segment' => $segment->id))
|
|
||||||
->findMany();
|
|
||||||
expect($subscribers)->count(0);
|
|
||||||
|
|
||||||
// subscribed to trashed segments
|
// subscribed to trashed segments
|
||||||
SubscriberSegment::subscribeToSegments(
|
SubscriberSegment::subscribeToSegments(
|
||||||
|
Reference in New Issue
Block a user