added segment stats in listing

This commit is contained in:
Jonathan Labreuille
2015-10-22 20:40:46 +02:00
parent 056e79eeac
commit 3b4c5c83e1
4 changed files with 44 additions and 18 deletions

View File

@@ -160,7 +160,7 @@ define(
<Listing <Listing
messages={ messages } messages={ messages }
search={ false } search={ false }
limit={ 0 } limit={ 1000 }
endpoint="segments" endpoint="segments"
onRenderItem={ this.renderItem } onRenderItem={ this.renderItem }
columns={ columns } columns={ columns }

View File

@@ -71,10 +71,6 @@ class Handler {
return $this->model; return $this->model;
} }
function count() {
return (int)$this->model->count();
}
function getSelectionIds() { function getSelectionIds() {
$models = $this->getSelection() $models = $this->getSelection()
->select('id') ->select('id')
@@ -86,18 +82,15 @@ class Handler {
} }
function get() { function get() {
$items = $this->model; $count = $this->model->count();
if($this->data['limit'] > 0) {
$items = $items $items = $this->model
->offset($this->data['offset']) ->offset($this->data['offset'])
->limit($this->data['limit']) ->limit($this->data['limit'])
->findArray(); ->findArray();
} else {
$items = $items->findArray();
}
return array( return array(
'count' => $this->model->count(), 'count' => $count,
'filters' => $this->model->filter('filters'), 'filters' => $this->model->filter('filters'),
'groups' => $this->model->filter('groups'), 'groups' => $this->model->filter('groups'),
'items' => $items 'items' => $items

View File

@@ -1,6 +1,7 @@
<?php <?php
namespace MailPoet\Router; namespace MailPoet\Router;
use \MailPoet\Models\Segment; use \MailPoet\Models\Segment;
use \MailPoet\Models\SubscriberSegment;
use \MailPoet\Listing; use \MailPoet\Listing;
if(!defined('ABSPATH')) exit; if(!defined('ABSPATH')) exit;
@@ -25,7 +26,39 @@ class Segments {
'\MailPoet\Models\Segment', '\MailPoet\Models\Segment',
$data $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() { function getAll() {

View File

@@ -32,12 +32,12 @@ class Subscribers {
// fetch segments relations for each returned item // fetch segments relations for each returned item
foreach($listing_data['items'] as &$item) { foreach($listing_data['items'] as &$item) {
$segments = SubscriberSegment::select('segment_id') $relations = SubscriberSegment::select('segment_id')
->where('subscriber_id', $item['id']) ->where('subscriber_id', $item['id'])
->findMany(); ->findMany();
$item['segments'] = array_map(function($relation) { $item['segments'] = array_map(function($relation) {
return $relation->segment_id; return $relation->segment_id;
}, $segments); }, $relations);
} }
wp_send_json($listing_data); wp_send_json($listing_data);