/** * 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; }