addValidations('email', array( 'required' => __('You need to enter your email address.'), 'isEmail' => __('Your email address is invalid.') )); } function delete() { // delete all relations to segments SubscriberSegment::where('subscriber_id', $this->id)->deleteMany(); parent::delete(); } static function search($orm, $search = '') { if(strlen(trim($search) === 0)) { return $orm; } return $orm->where_raw( '(`email` LIKE ? OR `first_name` LIKE ? OR `last_name` LIKE ?)', array('%'.$search.'%', '%'.$search.'%', '%'.$search.'%') ); } static function groups() { return array( array( 'name' => 'all', 'label' => __('All'), 'count' => Subscriber::count() ), array( 'name' => 'subscribed', 'label' => __('Subscribed'), 'count' => Subscriber::where('status', 'subscribed')->count() ), array( 'name' => 'unconfirmed', 'label' => __('Unconfirmed'), 'count' => Subscriber::where('status', 'unconfirmed')->count() ), array( 'name' => 'unsubscribed', 'label' => __('Unsubscribed'), 'count' => Subscriber::where('status', 'unsubscribed')->count() ) ); } static function group($orm, $group = null) { if($group === null or !in_array( $group, array('subscribed', 'unconfirmed', 'unsubscribed') )) { return $orm; } return $orm->where('status', $group); } function segments() { return $this->has_many_through( __NAMESPACE__.'\Segment', __NAMESPACE__.'\SubscriberSegment', 'subscriber_id', 'segment_id' ); } static function createOrUpdate($data = array()) { $subscriber = false; if(isset($data['id']) && (int)$data['id'] > 0) { $subscriber = self::findOne((int)$data['id']); } if($subscriber === false) { $subscriber = self::create(); $subscriber->hydrate($data); } else { unset($data['id']); $subscriber->set($data); } $saved = $subscriber->save(); if($saved === true) { return true; } else { $errors = $subscriber->getValidationErrors(); if(!empty($errors)) { return $errors; } } return false; } static function moveToList($listing, $data = array()) { $segment_id = (isset($data['segment_id']) ? (int)$data['segment_id'] : 0); $segment = Segment::findOne($segment_id); if($segment !== false) { $subscribers = $listing->getSelection()->findMany(); 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(); } return true; } return false; } static function removeFromList($listing, $data = array()) { $segment_id = (isset($data['segment_id']) ? (int)$data['segment_id'] : 0); $segment = Segment::findOne($segment_id); if($segment !== false) { // delete relations with segment $subscriber_ids = $listing->getSelectionIds(); SubscriberSegment::whereIn('subscriber_id', $subscriber_ids) ->where('segment_id', $segment->id) ->deleteMany(); return true; } return false; } static function addToList($listing, $data = array()) { $segment_id = (isset($data['segment_id']) ? (int)$data['segment_id'] : 0); $segment = Segment::findOne($segment_id); if($segment !== false) { $subscribers = $listing->getSelection()->findMany(); foreach($subscribers as $subscriber) { // create relation with segment $association = \MailPoet\Models\SubscriberSegment::create(); $association->subscriber_id = $subscriber->id; $association->segment_id = $segment->id; $association->save(); } return true; } return false; } static function trash($listing) { // delete relations with all segments $subscriber_ids = $listing->getSelectionIds(); \MailPoet\Models\SubscriberSegment::whereIn('subscriber_id', $subscriber_ids)->deleteMany(); return $listing->getSelection()->deleteMany(); } }