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