diff --git a/assets/js/src/segments/list.jsx b/assets/js/src/segments/list.jsx index 8b992af7ec..01d9a378dd 100644 --- a/assets/js/src/segments/list.jsx +++ b/assets/js/src/segments/list.jsx @@ -160,7 +160,7 @@ define( model; } - function count() { - return (int)$this->model->count(); - } - function getSelectionIds() { $models = $this->getSelection() ->select('id') @@ -86,18 +82,15 @@ class Handler { } function get() { - $items = $this->model; - if($this->data['limit'] > 0) { - $items = $items - ->offset($this->data['offset']) - ->limit($this->data['limit']) - ->findArray(); - } else { - $items = $items->findArray(); - } + $count = $this->model->count(); + + $items = $this->model + ->offset($this->data['offset']) + ->limit($this->data['limit']) + ->findArray(); return array( - 'count' => $this->model->count(), + 'count' => $count, 'filters' => $this->model->filter('filters'), 'groups' => $this->model->filter('groups'), 'items' => $items diff --git a/lib/Router/Segments.php b/lib/Router/Segments.php index b5720af2f9..6c07354dc9 100644 --- a/lib/Router/Segments.php +++ b/lib/Router/Segments.php @@ -1,6 +1,7 @@ get()); + + $listing_data = $listing->get(); + + // fetch segments relations for each returned item + foreach($listing_data['items'] as &$item) { + $stats = SubscriberSegment::table_alias('relation') + ->where( + 'relation.segment_id', + $item['id'] + ) + ->join( + MP_SUBSCRIBERS_TABLE, + 'subscribers.id = relation.subscriber_id', + 'subscribers' + ) + ->select_expr( + 'SUM(CASE status WHEN "subscribed" THEN 1 ELSE 0 END)', + 'subscribed' + ) + ->select_expr( + 'SUM(CASE status WHEN "unsubscribed" THEN 1 ELSE 0 END)', + 'unsubscribed' + ) + ->select_expr( + 'SUM(CASE status WHEN "unconfirmed" THEN 1 ELSE 0 END)', + 'unconfirmed' + ) + ->findOne()->asArray(); + + $item = array_merge($item, $stats); + } + + wp_send_json($listing_data); } function getAll() { diff --git a/lib/Router/Subscribers.php b/lib/Router/Subscribers.php index 1649e77a61..e047924967 100644 --- a/lib/Router/Subscribers.php +++ b/lib/Router/Subscribers.php @@ -32,12 +32,12 @@ class Subscribers { // fetch segments relations for each returned item foreach($listing_data['items'] as &$item) { - $segments = SubscriberSegment::select('segment_id') + $relations = SubscriberSegment::select('segment_id') ->where('subscriber_id', $item['id']) ->findMany(); $item['segments'] = array_map(function($relation) { return $relation->segment_id; - }, $segments); + }, $relations); } wp_send_json($listing_data);