Craft\AmForms_SubmissionsService::emailSubmission PHP Метод

emailSubmission() публичный Метод

Email a submission.
public emailSubmission ( craft\AmForms_SubmissionModel $submission, mixed $overrideRecipients = false ) : boolean
$submission craft\AmForms_SubmissionModel
$overrideRecipients mixed [Optional] Override recipients from form settings.
Результат boolean
    public function emailSubmission(AmForms_SubmissionModel $submission, $overrideRecipients = false)
    {
        // Do we even have a form ID?
        if (!$submission->formId) {
            return false;
        }
        // Get form if not already set
        $submission->getForm();
        $form = $submission->form;
        $submission->formName = $form->name;
        if (!$form->notificationEnabled) {
            return false;
        }
        // Get our recipients
        $recipients = ArrayHelper::stringToArray($form->notificationRecipients);
        if ($overrideRecipients !== false) {
            if (is_array($overrideRecipients) && count($overrideRecipients)) {
                $recipients = $overrideRecipients;
            } elseif (is_string($overrideRecipients)) {
                $recipients = ArrayHelper::stringToArray($overrideRecipients);
            }
        }
        $recipients = array_unique($recipients);
        if (!count($recipients)) {
            return false;
        }
        // Other email attributes
        if ($form->notificationReplyToEmail) {
            $replyTo = $this->_translatedObjectPlusEnvironment($form->notificationReplyToEmail, $submission);
            if (!filter_var($replyTo, FILTER_VALIDATE_EMAIL)) {
                $replyTo = null;
            }
        }
        // Start mailing!
        $success = false;
        // Notification email
        $notificationEmail = new EmailModel();
        $notificationEmail->htmlBody = $this->getSubmissionEmailBody($submission);
        $notificationEmail->fromEmail = $this->_translatedObjectPlusEnvironment($form->notificationSenderEmail, $submission);
        $notificationEmail->fromName = $this->_translatedObjectPlusEnvironment($form->notificationSenderName, $submission);
        if (trim($form->notificationSubject) != '') {
            $notificationEmail->subject = $this->_translatedObjectPlusEnvironment($form->notificationSubject, $submission);
        } else {
            $notificationEmail->subject = $this->_translatedObjectPlusEnvironment('{formName} form was submitted', $submission);
        }
        if ($replyTo) {
            $notificationEmail->replyTo = $replyTo;
        }
        // Confirmation email
        $confirmationEmail = new EmailModel();
        $confirmationEmail->htmlBody = $this->getConfirmationEmailBody($submission);
        $confirmationEmail->fromEmail = $this->_translatedObjectPlusEnvironment($form->confirmationSenderEmail, $submission);
        $confirmationEmail->fromName = $this->_translatedObjectPlusEnvironment($form->confirmationSenderName, $submission);
        if (trim($form->confirmationSubject) != '') {
            $confirmationEmail->subject = $this->_translatedObjectPlusEnvironment($form->confirmationSubject, $submission);
        } else {
            $confirmationEmail->subject = $this->_translatedObjectPlusEnvironment('Thanks for your submission.', $submission);
        }
        // Add Bcc?
        $bccEmailAddress = craft()->amForms_settings->getSettingsByHandleAndType('bccEmailAddress', AmFormsModel::SettingGeneral);
        if ($bccEmailAddress && $bccEmailAddress->value) {
            $bccAddresses = ArrayHelper::stringToArray($bccEmailAddress->value);
            $bccAddresses = array_unique($bccAddresses);
            if (count($bccAddresses)) {
                $properBccAddresses = array();
                foreach ($bccAddresses as $bccAddress) {
                    $bccAddress = $this->_translatedObjectPlusEnvironment($bccAddress, $submission);
                    if (filter_var($bccAddress, FILTER_VALIDATE_EMAIL)) {
                        $properBccAddresses[] = array('email' => $bccAddress);
                    }
                }
                if (count($properBccAddresses)) {
                    $notificationEmail->bcc = $properBccAddresses;
                    $confirmationEmail->bcc = $properBccAddresses;
                }
            }
        }
        // Add files to the notification?
        if ($form->notificationFilesEnabled) {
            foreach ($submission->getFieldLayout()->getTabs() as $tab) {
                // Tab fields
                $fields = $tab->getFields();
                foreach ($fields as $layoutField) {
                    // Get actual field
                    $field = $layoutField->getField();
                    // Find assets
                    if ($field->type == 'Assets') {
                        foreach ($submission->{$field->handle}->find() as $asset) {
                            if ($asset->source->type == 'S3') {
                                $file = @file_get_contents($asset->url);
                                // Add asset as attachment
                                if ($file) {
                                    $notificationEmail->addStringAttachment($file, $asset->filename);
                                }
                            } else {
                                $assetPath = craft()->amForms->getPathForAsset($asset);
                                // Add asset as attachment
                                if (IOHelper::fileExists($assetPath . $asset->filename)) {
                                    $notificationEmail->addAttachment($assetPath . $asset->filename);
                                }
                            }
                        }
                    }
                }
            }
        }
        // Fire an 'onBeforeEmailSubmission' event
        $event = new Event($this, array('email' => $notificationEmail, 'submission' => $submission));
        $this->onBeforeEmailSubmission($event);
        // Is the event giving us the go-ahead?
        if ($event->performAction) {
            // Send emails
            foreach ($recipients as $recipient) {
                $notificationEmail->toEmail = $this->_translatedObjectPlusEnvironment($recipient, $submission);
                if (filter_var($notificationEmail->toEmail, FILTER_VALIDATE_EMAIL)) {
                    if (craft()->email->sendEmail($notificationEmail, array('amFormsSubmission' => $submission))) {
                        $success = true;
                    }
                }
            }
            // Send copy?
            if ($form->sendCopy) {
                $sendCopyTo = $submission->{$form->sendCopyTo};
                if (filter_var($sendCopyTo, FILTER_VALIDATE_EMAIL)) {
                    $confirmationEmail->toEmail = $this->_translatedObjectPlusEnvironment($sendCopyTo, $submission);
                    if (craft()->email->sendEmail($confirmationEmail, array('amFormsSubmission' => $submission))) {
                        $success = true;
                    }
                }
            }
            // Fire an 'onEmailSubmission' event
            $this->onEmailSubmission(new Event($this, array('success' => $success, 'email' => $notificationEmail, 'submission' => $submission)));
        }
        return $success;
    }