private function processEventForEye(CController $controller, array $template_data, $eye_id, User $notify_user = null)
{
$eye_name = $this->getEyeNameById($eye_id);
$template_data += $this->getSideSpecificTemplateData($eye_name);
$attachments = array();
$attach_size = 0;
if ($app_file = $this->createAndSavePdfForSide($controller, $template_data, $eye_name)) {
$attachments[] = $app_file;
$attach_size += $app_file->size;
}
if ($ec = $this->getElement('Element_OphCoTherapyapplication_ExceptionalCircumstances')) {
foreach ($ec->{"{$eye_name}_filecollections"} as $fc) {
$attachments[] = $fc->getZipFile();
$attach_size += $fc->getZipFile()->size;
}
}
$service_info = $this->getServiceInfo();
$link_to_attachments = $attach_size > Helper::convertToBytes(Yii::app()->params['OphCoTherapyapplication_email_size_limit']);
$template_data['link_to_attachments'] = $link_to_attachments;
$email_text = $this->generateEmailForSide($controller, $template_data, $eye_name);
$message = Yii::app()->mailer->newMessage();
if ($template_data['compliant']) {
$recipient_type = 'Compliant';
$message->setSubject(Yii::app()->params['OphCoTherapyapplication_compliant_email_subject']);
} else {
$recipient_type = 'Non-compliant';
$message->setSubject(Yii::app()->params['OphCoTherapyapplication_noncompliant_email_subject']);
}
$recipient_type = $template_data['compliant'] ? 'Compliant' : 'Non-compliant';
try {
$recipients = $this->getEmailRecipients($service_info, $recipient_type);
} catch (Exception $e) {
Yii::app()->user->setFlash('error', $e->getMessage());
$controller->redirect('/OphCoTherapyapplication/default/view/' . $this->event->id);
}
$email_recipients = array();
foreach ($recipients as $recipient) {
if (!$recipient->isAllowed()) {
throw new Exception("Recipient email address {$recipient->recipient_email} is not in the list of allowed domains");
}
$email_recipients[$recipient->recipient_email] = $recipient->recipient_name;
}
$message->setFrom(Yii::app()->params['OphCoTherapyapplication_sender_email']);
$message->setTo($email_recipients);
if ($notify_user && $notify_user->email) {
$cc = true;
if (Yii::app()->params['restrict_email_domains']) {
$domain = preg_replace('/^.*?@/', '', $notify_user->email);
if (!in_array($domain, Yii::app()->params['restrict_email_domains'])) {
Yii::app()->user->setFlash('warning.warning', 'You will not receive a copy of the submission because your email address ' . $notify_user->email . ' is not on a secure domain');
$cc = false;
}
}
if ($cc) {
$message->setCc($notify_user->email);
}
}
$message->setBody($email_text);
if (!$link_to_attachments) {
foreach ($attachments as $att) {
$message->attach(Swift_Attachment::fromPath($att->getPath())->setFilename($att->name));
}
}
if (Yii::app()->mailer->sendMessage($message)) {
$email = new OphCoTherapyapplication_Email();
$email->event_id = $this->event->id;
$email->eye_id = $eye_id;
$email->email_text = $email_text;
if (!$email->save()) {
throw new Exception('Unable to save email: ' . print_r($email->getErrors(), true));
}
$email->addAttachments($attachments);
$this->event->audit('therapy-application', 'submit');
$this->event->info = self::STATUS_SENT;
if (!$this->event->save()) {
throw new Exception('Unable to save event: ' . print_r($this->event->getErrors(), true));
}
return true;
} else {
OELog::log("Failed to send email for therapy application event_id '{$this->event->id}', eye_id '{$eye_id}'");
// clean up
if ($app_file) {
$app_file->delete();
}
return false;
}
}