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->model_class, 'bulk'.ucfirst($this->action)),
|
||||||
array($this->listing->getSelection(), $this->data)
|
array($this->listing->getSelection(), $this->data)
|
||||||
);
|
);
|
||||||
return $models->count();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -122,12 +122,14 @@ class Model extends \Sudzy\ValidModel {
|
|||||||
if(is_callable($callback)) {
|
if(is_callable($callback)) {
|
||||||
$callback($ids);
|
$callback($ids);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
$last_statement = $orm->get_last_statement();
|
$last_statement = $orm->get_last_statement();
|
||||||
return $last_statement->rowCount();
|
return $last_statement->rowCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
function duplicate($data = array()) {
|
function duplicate($data = array()) {
|
||||||
$model = get_called_class();
|
$model = get_called_class();
|
||||||
$model_data = array_merge($this->asArray(), $data);
|
$model_data = array_merge($this->asArray(), $data);
|
||||||
|
@ -497,20 +497,19 @@ class Subscriber extends Model {
|
|||||||
static function bulkMoveToList($orm, $data = array()) {
|
static function bulkMoveToList($orm, $data = array()) {
|
||||||
$segment_id = (isset($data['segment_id']) ? (int)$data['segment_id'] : 0);
|
$segment_id = (isset($data['segment_id']) ? (int)$data['segment_id'] : 0);
|
||||||
$segment = Segment::findOne($segment_id);
|
$segment = Segment::findOne($segment_id);
|
||||||
|
|
||||||
if($segment !== false) {
|
if($segment !== false) {
|
||||||
|
$subscribers_count = 0;
|
||||||
$subscribers = $orm->findResultSet();
|
$subscribers = $orm->findResultSet();
|
||||||
foreach($subscribers as $subscriber) {
|
foreach($subscribers as $subscriber) {
|
||||||
// remove subscriber from all segments
|
try {
|
||||||
SubscriberSegment::where('subscriber_id', $subscriber->id)->deleteMany();
|
SubscriberSegment::setSubscriptions($subscriber, array($segment->id));
|
||||||
|
$subscribers_count++;
|
||||||
// create relation with segment
|
} catch(Exception $e) {
|
||||||
$association = SubscriberSegment::create();
|
}
|
||||||
$association->subscriber_id = $subscriber->id;
|
|
||||||
$association->segment_id = $segment->id;
|
|
||||||
$association->save();
|
|
||||||
}
|
}
|
||||||
return array(
|
return array(
|
||||||
'subscribers' => $subscribers->count(),
|
'subscribers' => $subscribers_count,
|
||||||
'segment' => $segment->name
|
'segment' => $segment->name
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -522,16 +521,20 @@ class Subscriber extends Model {
|
|||||||
$segment = Segment::findOne($segment_id);
|
$segment = Segment::findOne($segment_id);
|
||||||
|
|
||||||
if($segment !== false) {
|
if($segment !== false) {
|
||||||
|
$subscribers_count = 0;
|
||||||
|
|
||||||
// delete relations with segment
|
// delete relations with segment
|
||||||
$subscribers = $orm->findResultSet();
|
$subscribers = $orm->findResultSet();
|
||||||
foreach($subscribers as $subscriber) {
|
foreach($subscribers as $subscriber) {
|
||||||
SubscriberSegment::where('subscriber_id', $subscriber->id)
|
try {
|
||||||
->where('segment_id', $segment->id)
|
SubscriberSegment::removeSubscriptions($subscriber, array($segment->id));
|
||||||
->deleteMany();
|
$subscribers_count++;
|
||||||
|
} catch(Exception $e) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
'subscribers' => $subscribers->count(),
|
'subscribers' => $subscribers_count,
|
||||||
'segment' => $segment->name
|
'segment' => $segment->name
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -582,7 +585,6 @@ class Subscriber extends Model {
|
|||||||
SubscriberSegment::addSubscriptions($subscriber, array($segment->id));
|
SubscriberSegment::addSubscriptions($subscriber, array($segment->id));
|
||||||
$subscribers_count++;
|
$subscribers_count++;
|
||||||
} catch(Exception $e) {
|
} catch(Exception $e) {
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return array(
|
return array(
|
||||||
@ -607,13 +609,17 @@ class Subscriber extends Model {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static function bulkDelete($orm) {
|
static function bulkDelete($orm) {
|
||||||
|
return parent::bulkAction($orm, function($ids) {
|
||||||
$wp_users_segment = Segment::getWPUsers();
|
$wp_users_segment = Segment::getWPUsers();
|
||||||
|
|
||||||
return parent::bulkAction($orm, function($ids) use ($wp_users_segment) {
|
|
||||||
// delete subscribers' relations to segments (except WP Users' segment)
|
// delete subscribers' relations to segments (except WP Users' segment)
|
||||||
SubscriberSegment::whereIn('subscriber_id', $ids)
|
$subscriptions = SubscriberSegment::whereIn('subscriber_id', $ids);
|
||||||
->whereNotEqual('segment_id', $wp_users_segment->id)
|
if($wp_users_segment !== false) {
|
||||||
->deleteMany();
|
$subscriptions = $subscriptions->whereNotEqual(
|
||||||
|
'segment_id', $wp_users_segment->id
|
||||||
|
);
|
||||||
|
}
|
||||||
|
$subscriptions->deleteMany();
|
||||||
|
|
||||||
// delete subscribers (except WP Users)
|
// delete subscribers (except WP Users)
|
||||||
Subscriber::whereIn('id', $ids)
|
Subscriber::whereIn('id', $ids)
|
||||||
|
@ -25,7 +25,10 @@ class SubscriberSegment extends Model {
|
|||||||
foreach($segment_ids as $segment_id) {
|
foreach($segment_ids as $segment_id) {
|
||||||
|
|
||||||
// do not remove subscriptions to the WP Users segment
|
// 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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,9 +43,15 @@ class SubscriberSegment extends Model {
|
|||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
// unsubscribe from all segments (except the WP users segment)
|
// unsubscribe from all segments (except the WP users segment)
|
||||||
return SubscriberSegment::where('subscriber_id', $subscriber->id)
|
$subscritpions = SubscriberSegment::where('subscriber_id', $subscriber->id);
|
||||||
->whereNotEqual('segment_id', $wp_users_segment->id)
|
|
||||||
->findResultSet()
|
if($wp_users_segment !== false) {
|
||||||
|
$subscritpions = $subscritpions->whereNotEqual(
|
||||||
|
'segment_id', $wp_users_segment->id
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$subscritpions->findResultSet()
|
||||||
->set('status', Subscriber::STATUS_UNSUBSCRIBED)
|
->set('status', Subscriber::STATUS_UNSUBSCRIBED)
|
||||||
->save();
|
->save();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user