protected function saveCampaignInfo(SproutEmail_CampaignModel &$campaign)
 {
     $oldCampaignMailer = null;
     if (isset($campaign->id) && is_numeric($campaign->id)) {
         $campaignRecord = SproutEmail_CampaignRecord::model()->findById($campaign->id);
         if (!$campaignRecord) {
             throw new Exception(Craft::t('No campaign exists with the ID “{id}”', array('id' => $campaign->id)));
         }
         $oldCampaignMailer = $campaignRecord->mailer;
     } else {
         $campaignRecord = new SproutEmail_CampaignRecord();
     }
     // Set common attributes
     $campaignRecord->fieldLayoutId = $campaign->fieldLayoutId;
     $campaignRecord->name = $campaign->name;
     $campaignRecord->handle = $campaign->handle;
     $campaignRecord->type = $campaign->type;
     $campaignRecord->titleFormat = $campaign->titleFormat;
     $campaignRecord->hasUrls = $campaign->hasUrls;
     $campaignRecord->hasAdvancedTitles = $campaign->hasAdvancedTitles;
     $campaignRecord->mailer = $campaign->mailer;
     $campaignRecord->urlFormat = $campaign->urlFormat;
     $campaignRecord->template = $campaign->template;
     $campaignRecord->templateCopyPaste = $campaign->templateCopyPaste;
     $campaignRecord->validate();
     $campaign->addErrors($campaignRecord->getErrors());
     if (!$campaignRecord->hasErrors()) {
         $campaignRecord->save(false);
     }
     return $campaignRecord;
 }
 /**
  * @param SproutEmail_CampaignModel $campaign
  * @param mixed                     $element Will be an element model most of the time
  *
  * @throws Exception
  * @throws \Exception
  * @return mixed
  */
 protected function relayNotificationThroughAssignedMailer(SproutEmail_CampaignModel $campaign, $element)
 {
     if (!isset($campaign->mailer)) {
         throw new Exception(Craft::t('An email provider is required to send the notification.'));
     }
     $mailer = sproutEmail()->mailers->getMailerByName($campaign->mailer);
     if (!$mailer) {
         throw new Exception(Craft::t('The email provider {mailer} is not available.', array('mailer' => $campaign->mailer)));
     }
     if (!method_exists($mailer, 'sendNotification')) {
         throw new Exception(Craft::t('The {mailer} does not have a sendNotification() method.', array('mailer' => get_class($mailer))));
     }
     // Forces campaign.entries to be populated with live entries only
     $campaign->setLiveEntries();
     try {
         return $mailer->sendNotification($campaign, $element);
     } catch (\Exception $e) {
         throw $e;
     }
 }
 /**
  * @param SproutEmail_EntryModel    $entry
  * @param SproutEmail_CampaignModel $campaign
  *
  * @throws \Exception
  *
  * @return bool
  */
 public function exportEntry(SproutEmail_EntryModel $entry, SproutEmail_CampaignModel $campaign)
 {
     if ($campaign->isNotification()) {
         try {
             return $this->sendMockNotification($entry, $campaign);
         } catch (\Exception $e) {
             throw $e;
         }
     }
     $params = array('entry' => $entry, 'campaign' => $campaign);
     $email = array('fromEmail' => $entry->fromEmail, 'fromName' => $entry->fromName, 'subject' => $entry->subjectLine);
     if ($entry->replyTo && filter_var($entry->replyTo, FILTER_VALIDATE_EMAIL)) {
         $email['replyTo'] = $entry->replyTo;
     }
     $recipients = array();
     if ($entryRecipientLists = SproutEmail_EntryRecipientListRecord::model()->findAllByAttributes(array('entryId' => $entry->id))) {
         foreach ($entryRecipientLists as $entryRecipientList) {
             if ($recipientList = $this->getRecipientListById($entryRecipientList->list)) {
                 $recipients = array_merge($recipients, $recipientList->recipients);
             }
         }
     }
     $email = EmailModel::populateModel($email);
     foreach ($recipients as $recipient) {
         try {
             $params['recipient'] = $recipient;
             $email->body = sproutEmail()->renderSiteTemplateIfExists($campaign->template . '.txt', $params);
             $email->htmlBody = sproutEmail()->renderSiteTemplateIfExists($campaign->template, $params);
             $email->setAttribute('toEmail', $recipient->email);
             $email->setAttribute('toFirstName', $recipient->firstName);
             $email->setAttribute('toLastName', $recipient->lastName);
             craft()->email->sendEmail($email);
         } catch (\Exception $e) {
             throw $e;
         }
     }
 }