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);