Fixed Subscribers' bulk actions when filtering by a segment

- filter by segment is now affected by the selected group (all, trash,...)
- updated relationship methods between subscribers & segments (to account for subsegment status)
This commit is contained in:
Jonathan Labreuille
2016-02-23 13:14:14 +01:00
parent f56bee76f2
commit cf6466197a
8 changed files with 17 additions and 34 deletions

View File

@ -135,7 +135,7 @@ define(
}); });
}, },
renderStatus: function(item) { renderStatus: function(item) {
if(item.queue === null) { if(item.queue === false) {
return ( return (
<span>Not sent yet.</span> <span>Not sent yet.</span>
); );
@ -208,10 +208,8 @@ define(
'has-row-actions' 'has-row-actions'
); );
var segments = mailpoet_segments.filter(function(segment) { var segments = newsletter.segments.map(function(segment) {
return (jQuery.inArray(segment.id, newsletter.segments) !== -1); return segment.name
}).map(function(segment) {
return segment.name;
}).join(', '); }).join(', ');
return ( return (

View File

@ -56,6 +56,9 @@ class Initializer {
\ORM::configure('username', Env::$db_username); \ORM::configure('username', Env::$db_username);
\ORM::configure('password', Env::$db_password); \ORM::configure('password', Env::$db_password);
\ORM::configure('logging', WP_DEBUG); \ORM::configure('logging', WP_DEBUG);
\ORM::configure('logger', function($query, $time) {
// error_log("\n".$query."\n");
});
\ORM::configure('driver_options', array( \ORM::configure('driver_options', array(
\PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', \PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',

View File

@ -93,7 +93,7 @@ class Handler {
return array( return array(
'count' => $count, 'count' => $count,
'filters' => $this->model->filter('filters'), 'filters' => $this->model->filter('filters', $this->data['group']),
'groups' => $this->model->filter('groups'), 'groups' => $this->model->filter('groups'),
'items' => $items 'items' => $items
); );

View File

@ -110,7 +110,7 @@ class Model extends \Sudzy\ValidModel {
$total = $orm->count(); $total = $orm->count();
if($total > 0) { if($total > 0) {
$models = $orm->select('id') $models = $orm->select(static::$_table.'.id')
->offset(null) ->offset(null)
->limit(null) ->limit(null)
->findArray(); ->findArray();

View File

@ -82,7 +82,7 @@ class Newsletter extends Model {
return $orm->where_like('subject', '%' . $search . '%'); return $orm->where_like('subject', '%' . $search . '%');
} }
static function filters() { static function filters($orm, $group = 'all') {
$segments = Segment::orderByAsc('name')->findMany(); $segments = Segment::orderByAsc('name')->findMany();
$segment_list = array(); $segment_list = array();
$segment_list[] = array( $segment_list[] = array(
@ -91,7 +91,9 @@ class Newsletter extends Model {
); );
foreach($segments as $segment) { foreach($segments as $segment) {
$newsletters_count = $segment->newsletters()->count(); $newsletters_count = $segment->newsletters()
->filter('groupBy', $group)
->count();
if($newsletters_count > 0) { if($newsletters_count > 0) {
$segment_list[] = array( $segment_list[] = array(
'label' => sprintf('%s (%d)', $segment->name, $newsletters_count), 'label' => sprintf('%s (%d)', $segment->name, $newsletters_count),

View File

@ -35,7 +35,7 @@ class Segment extends Model {
__NAMESPACE__.'\SubscriberSegment', __NAMESPACE__.'\SubscriberSegment',
'segment_id', 'segment_id',
'subscriber_id' 'subscriber_id'
); )->where(MP_SUBSCRIBER_SEGMENT_TABLE.'.status', 'subscribed');
} }
function duplicate($data = array()) { function duplicate($data = array()) {

View File

@ -22,7 +22,7 @@ class Subscriber extends Model {
__NAMESPACE__.'\SubscriberSegment', __NAMESPACE__.'\SubscriberSegment',
'subscriber_id', 'subscriber_id',
'segment_id' 'segment_id'
); )->where(MP_SUBSCRIBER_SEGMENT_TABLE.'.status', 'subscribed');
} }
function delete() { function delete() {
@ -102,7 +102,7 @@ class Subscriber extends Model {
); );
} }
static function filters() { static function filters($orm, $group = 'all') {
$segments = Segment::orderByAsc('name')->findMany(); $segments = Segment::orderByAsc('name')->findMany();
$segment_list = array(); $segment_list = array();
$segment_list[] = array( $segment_list[] = array(
@ -119,8 +119,9 @@ class Subscriber extends Model {
foreach($segments as $segment) { foreach($segments as $segment) {
$subscribers_count = $segment->subscribers() $subscribers_count = $segment->subscribers()
->whereNull('deleted_at') ->filter('groupBy', $group)
->count(); ->count();
$segment_list[] = array( $segment_list[] = array(
'label' => sprintf('%s (%d)', $segment->name, $subscribers_count), 'label' => sprintf('%s (%d)', $segment->name, $subscribers_count),
'value' => $segment->id() 'value' => $segment->id()

View File

@ -34,27 +34,6 @@ class SubscriberSegment extends Model {
return $subscriber; return $subscriber;
} }
static function filterWithCustomFields($orm) {
$orm = $orm->select(MP_SUBSCRIBERS_TABLE.'.*');
$customFields = CustomField::findArray();
foreach ($customFields as $customField) {
$orm = $orm->select_expr(
'CASE WHEN ' .
MP_CUSTOM_FIELDS_TABLE . '.id=' . $customField['id'] . ' THEN ' .
MP_SUBSCRIBER_CUSTOM_FIELD_TABLE . '.value END as "' . $customField['name'].'"');
}
$orm = $orm
->left_outer_join(
MP_SUBSCRIBER_CUSTOM_FIELD_TABLE,
array(MP_SUBSCRIBERS_TABLE.'.id', '=',
MP_SUBSCRIBER_CUSTOM_FIELD_TABLE.'.subscriber_id'))
->left_outer_join(
MP_CUSTOM_FIELDS_TABLE,
array(MP_CUSTOM_FIELDS_TABLE.'.id','=',
MP_SUBSCRIBER_CUSTOM_FIELD_TABLE.'.custom_field_id'));
return $orm;
}
static function subscribed($orm) { static function subscribed($orm) {
return $orm->where('status', 'subscribed'); return $orm->where('status', 'subscribed');
} }