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:
@ -26,6 +26,5 @@ class BulkAction {
|
||||
array($this->model_class, 'bulk'.ucfirst($this->action)),
|
||||
array($this->listing->getSelection(), $this->data)
|
||||
);
|
||||
return $models->count();
|
||||
}
|
||||
}
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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();
|
||||
}
|
||||
|
Reference in New Issue
Block a user