/** * Binds all subscribers from the campaign groups to the message. */ public function bindGroupSubscribers($campaign) { $groups = $campaign->groups; if (!is_array($groups)) { return; } /* * Get all group subscriber emails and info */ $groupSubscribers = []; foreach ($groups as $groupType) { $groupSubscribers = $groupSubscribers + $this->getGroupRecipientsData($groupType); } /* * Pair them to existing subscribers, or create them */ $allSubscribers = Subscriber::lists('id', 'email'); $ids = []; foreach ($groupSubscribers as $email => $info) { /* * New subscriber */ if (!isset($allSubscribers[$email])) { $info['email'] = $email; $subscriber = new Subscriber(); $subscriber->forceFill($info); $subscriber->confirmed_at = Carbon::now(); $subscriber->save(); $ids[] = $subscriber->id; } else { $ids[] = $allSubscribers[$email]; } } /* * Sync to the campaign */ if (count($ids) > 0) { $campaign->subscribers()->sync($ids, false); } }