Example #1
0
 /**
  * Signs up a user as a subscriber, adds them to supplied list code.
  */
 public static function signup($details, $addToList = null, $isConfirmed = true)
 {
     if (is_string($details)) {
         $details = ['email' => $details];
     }
     if (!($email = array_get($details, 'email'))) {
         throw new ApplicationException('Missing email for subscriber!');
     }
     $subscriber = self::firstOrNew(['email' => $email]);
     $subscriber->first_name = array_get($details, 'first_name');
     $subscriber->last_name = array_get($details, 'last_name');
     $subscriber->created_ip_address = array_get($details, 'created_ip_address');
     if ($isConfirmed) {
         $subscriber->confirmed_ip_address = array_get($details, 'created_ip_address');
         $subscriber->confirmed_at = $subscriber->freshTimestamp();
         $subscriber->unsubscribed_at = null;
     }
     // Already subscribed and opted-in
     if ($subscriber->exists && !$subscriber->unsubscribed_at) {
         $subscriber->unsubscribed_at = null;
     }
     $subscriber->save();
     if ($addToList) {
         if (!($list = SubscriberList::where('code', $addToList)->first())) {
             throw new ApplicationException('Unable to find a list with code: ' . $addToList);
         }
         if (!$list->subscribers()->where('id', $subscriber->id)->count()) {
             $list->subscribers()->add($subscriber);
         }
     }
     return $subscriber;
 }
 protected function getListIdsForSubscriber($data)
 {
     $ids = [];
     if ($this->auto_create_lists) {
         $listNames = $this->decodeArrayValue(array_get($data, 'lists'));
         foreach ($listNames as $name) {
             if (!($name = trim($name))) {
                 continue;
             }
             if (isset($this->listNameCache[$name])) {
                 $ids[] = $this->listNameCache[$name];
             } else {
                 $newList = SubscriberList::firstOrCreate(['name' => $name]);
                 $ids[] = $this->listNameCache[$name] = $newList->id;
             }
         }
     } elseif ($this->subscriber_lists) {
         $ids = (array) $this->subscriber_lists;
     }
     return $ids;
 }