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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -34,27 +34,6 @@ class SubscriberSegment extends Model {
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) {
return $orm->where('status', 'subscribed');
}