Fixed bulk actions (return false if no items were selected)

- added missing check for WPUsers segment in case it does not exist
This commit is contained in:
Jonathan Labreuille
2016-05-20 18:20:58 +02:00
parent c4ddb38d18
commit 8c56c8da5e
4 changed files with 42 additions and 26 deletions

View File

@ -26,6 +26,5 @@ class BulkAction {
array($this->model_class, 'bulk'.ucfirst($this->action)),
array($this->listing->getSelection(), $this->data)
);
return $models->count();
}
}

View File

@ -122,12 +122,14 @@ class Model extends \Sudzy\ValidModel {
if(is_callable($callback)) {
$callback($ids);
}
}
$last_statement = $orm->get_last_statement();
return $last_statement->rowCount();
}
return false;
}
function duplicate($data = array()) {
$model = get_called_class();
$model_data = array_merge($this->asArray(), $data);

View File

@ -497,20 +497,19 @@ class Subscriber extends Model {
static function bulkMoveToList($orm, $data = array()) {
$segment_id = (isset($data['segment_id']) ? (int)$data['segment_id'] : 0);
$segment = Segment::findOne($segment_id);
if($segment !== false) {
$subscribers_count = 0;
$subscribers = $orm->findResultSet();
foreach($subscribers as $subscriber) {
// remove subscriber from all segments
SubscriberSegment::where('subscriber_id', $subscriber->id)->deleteMany();
// create relation with segment
$association = SubscriberSegment::create();
$association->subscriber_id = $subscriber->id;
$association->segment_id = $segment->id;
$association->save();
try {
SubscriberSegment::setSubscriptions($subscriber, array($segment->id));
$subscribers_count++;
} catch(Exception $e) {
}
}
return array(
'subscribers' => $subscribers->count(),
'subscribers' => $subscribers_count,
'segment' => $segment->name
);
}
@ -522,16 +521,20 @@ class Subscriber extends Model {
$segment = Segment::findOne($segment_id);
if($segment !== false) {
$subscribers_count = 0;
// delete relations with segment
$subscribers = $orm->findResultSet();
foreach($subscribers as $subscriber) {
SubscriberSegment::where('subscriber_id', $subscriber->id)
->where('segment_id', $segment->id)
->deleteMany();
try {
SubscriberSegment::removeSubscriptions($subscriber, array($segment->id));
$subscribers_count++;
} catch(Exception $e) {
}
}
return array(
'subscribers' => $subscribers->count(),
'subscribers' => $subscribers_count,
'segment' => $segment->name
);
}
@ -582,7 +585,6 @@ class Subscriber extends Model {
SubscriberSegment::addSubscriptions($subscriber, array($segment->id));
$subscribers_count++;
} catch(Exception $e) {
continue;
}
}
return array(
@ -607,13 +609,17 @@ class Subscriber extends Model {
}
static function bulkDelete($orm) {
return parent::bulkAction($orm, function($ids) {
$wp_users_segment = Segment::getWPUsers();
return parent::bulkAction($orm, function($ids) use ($wp_users_segment) {
// delete subscribers' relations to segments (except WP Users' segment)
SubscriberSegment::whereIn('subscriber_id', $ids)
->whereNotEqual('segment_id', $wp_users_segment->id)
->deleteMany();
$subscriptions = SubscriberSegment::whereIn('subscriber_id', $ids);
if($wp_users_segment !== false) {
$subscriptions = $subscriptions->whereNotEqual(
'segment_id', $wp_users_segment->id
);
}
$subscriptions->deleteMany();
// delete subscribers (except WP Users)
Subscriber::whereIn('id', $ids)

View File

@ -25,7 +25,10 @@ class SubscriberSegment extends Model {
foreach($segment_ids as $segment_id) {
// do not remove subscriptions to the WP Users segment
if($wp_users_segment->id === (int)$segment_id) {
if(
$wp_users_segment !== false
&& ($wp_users_segment->id === (int)$segment_id)
) {
continue;
}
@ -40,9 +43,15 @@ class SubscriberSegment extends Model {
return true;
} else {
// unsubscribe from all segments (except the WP users segment)
return SubscriberSegment::where('subscriber_id', $subscriber->id)
->whereNotEqual('segment_id', $wp_users_segment->id)
->findResultSet()
$subscritpions = SubscriberSegment::where('subscriber_id', $subscriber->id);
if($wp_users_segment !== false) {
$subscritpions = $subscritpions->whereNotEqual(
'segment_id', $wp_users_segment->id
);
}
$subscritpions->findResultSet()
->set('status', Subscriber::STATUS_UNSUBSCRIBED)
->save();
}