added segment stats in listing
This commit is contained in:
@@ -160,7 +160,7 @@ define(
|
||||
<Listing
|
||||
messages={ messages }
|
||||
search={ false }
|
||||
limit={ 0 }
|
||||
limit={ 1000 }
|
||||
endpoint="segments"
|
||||
onRenderItem={ this.renderItem }
|
||||
columns={ columns }
|
||||
|
@@ -71,10 +71,6 @@ class Handler {
|
||||
return $this->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
|
||||
$count = $this->model->count();
|
||||
|
||||
$items = $this->model
|
||||
->offset($this->data['offset'])
|
||||
->limit($this->data['limit'])
|
||||
->findArray();
|
||||
} else {
|
||||
$items = $items->findArray();
|
||||
}
|
||||
|
||||
return array(
|
||||
'count' => $this->model->count(),
|
||||
'count' => $count,
|
||||
'filters' => $this->model->filter('filters'),
|
||||
'groups' => $this->model->filter('groups'),
|
||||
'items' => $items
|
||||
|
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
namespace MailPoet\Router;
|
||||
use \MailPoet\Models\Segment;
|
||||
use \MailPoet\Models\SubscriberSegment;
|
||||
use \MailPoet\Listing;
|
||||
|
||||
if(!defined('ABSPATH')) exit;
|
||||
@@ -25,7 +26,39 @@ class Segments {
|
||||
'\MailPoet\Models\Segment',
|
||||
$data
|
||||
);
|
||||
wp_send_json($listing->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() {
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user