OphCoTherapyapplication_Processor::processEventForEye PHP Method

processEventForEye() private method

private processEventForEye ( CController $controller, array $template_data, integer $eye_id, User $notify_user = null ) : boolean
$controller CController
$template_data array
$eye_id integer
$notify_user User
return boolean
    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;
        }
    }