diff --git a/lib/Listing/BulkAction.php b/lib/Listing/BulkAction.php index ebf87bb23a..17cae71cf1 100644 --- a/lib/Listing/BulkAction.php +++ b/lib/Listing/BulkAction.php @@ -26,6 +26,5 @@ class BulkAction { array($this->model_class, 'bulk'.ucfirst($this->action)), array($this->listing->getSelection(), $this->data) ); - return $models->count(); } } \ No newline at end of file diff --git a/lib/Models/Model.php b/lib/Models/Model.php index 9d484277e7..ca283a469c 100644 --- a/lib/Models/Model.php +++ b/lib/Models/Model.php @@ -122,10 +122,12 @@ class Model extends \Sudzy\ValidModel { if(is_callable($callback)) { $callback($ids); } + + $last_statement = $orm->get_last_statement(); + return $last_statement->rowCount(); } - $last_statement = $orm->get_last_statement(); - return $last_statement->rowCount(); + return false; } function duplicate($data = array()) { diff --git a/lib/Models/Subscriber.php b/lib/Models/Subscriber.php index 80551eb0ab..431fdb4625 100644 --- a/lib/Models/Subscriber.php +++ b/lib/Models/Subscriber.php @@ -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) { - $wp_users_segment = Segment::getWPUsers(); + 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) diff --git a/lib/Models/SubscriberSegment.php b/lib/Models/SubscriberSegment.php index 342e6702b4..3d2aa62f4d 100644 --- a/lib/Models/SubscriberSegment.php +++ b/lib/Models/SubscriberSegment.php @@ -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(); }