Craft\AmForms_SubmissionsController::actionSaveSubmission PHP Method

actionSaveSubmission() public method

Save a form submission.
    public function actionSaveSubmission()
    {
        $this->requirePostRequest();
        // Get the form
        $handle = craft()->request->getRequiredPost('handle');
        $form = craft()->amForms_forms->getFormByHandle($handle);
        if (!$form) {
            throw new Exception(Craft::t('No form exists with the handle “{handle}”.', array('handle' => $handle)));
        }
        // Get namespace
        $namespace = craft()->request->getPost('namespace');
        // Get the submission? Are we editing one?
        $submissionId = craft()->request->getPost('submissionId');
        // Get the submission
        if ($submissionId) {
            $submission = craft()->amForms_submissions->getSubmissionById($submissionId);
            if (!$submission) {
                throw new Exception(Craft::t('No submission exists with the ID “{id}”.', array('id' => $submissionId)));
            }
        } else {
            $submission = new AmForms_SubmissionModel();
        }
        // Front-end submission, trigger AntiSpam or reCAPTCHA?
        if (!craft()->request->isCpRequest()) {
            // Where was this submission submitted?
            $submission->submittedFrom = urldecode(craft()->request->getUrlReferrer());
            // Validate AntiSpam settings
            $submission->spamFree = craft()->amForms_antispam->verify($form->handle);
            // Redirect our spammers before reCAPTCHA can be triggered
            if (!$submission->spamFree) {
                $this->_doRedirect($submission, false);
            } else {
                craft()->amForms_antispam->setMarkedAsNoSpam($form->handle);
            }
            // Validate reCAPTCHA
            if (craft()->amForms_settings->isSettingValueEnabled('googleRecaptchaEnabled', AmFormsModel::SettingRecaptcha)) {
                $submission->spamFree = craft()->amForms_recaptcha->verify();
                // Was it verified?
                if (!$submission->spamFree) {
                    $submission->addError('spamFree', Craft::t('reCAPTCHA was not verified.'));
                    // Don't upload files now
                    if (count($_FILES)) {
                        foreach ($_FILES as $key => $file) {
                            unset($_FILES[$key]);
                        }
                    }
                }
            }
        }
        // Add the form to the submission
        $submission->form = $form;
        $submission->formId = $form->id;
        // Set attributes
        $fieldsLocation = craft()->request->getPost('fieldsLocation', 'fields');
        $submission->ipAddress = craft()->request->getUserHostAddress();
        $submission->userAgent = craft()->request->getUserAgent();
        if ($namespace) {
            $namespaceAttributes = craft()->request->getPost($namespace);
            if (isset($namespaceAttributes[$fieldsLocation])) {
                $submission->setContentPostLocation($namespace . '.' . $fieldsLocation);
                $submission->setContentFromPost($namespaceAttributes[$fieldsLocation]);
            }
        } else {
            $submission->setContentPostLocation($fieldsLocation);
            $submission->setContentFromPost($fieldsLocation);
        }
        // Save submission
        if (craft()->amForms_submissions->saveSubmission($submission)) {
            // Remove spam free token
            craft()->amForms_antispam->verify($form->handle);
            // Notification for new submissions
            if (!craft()->request->isCpRequest() && !$submissionId) {
                craft()->amForms_submissions->emailSubmission($submission);
            }
            // Redirect
            if (craft()->request->isAjaxRequest()) {
                $afterSubmitText = $form->afterSubmitText ? $form->afterSubmitText : Craft::t('Thanks for your submission.');
                $this->returnJson(array('success' => true, 'afterSubmitText' => $afterSubmitText));
            } elseif (craft()->request->isCpRequest()) {
                craft()->userSession->setNotice(Craft::t('Submission saved.'));
                $this->redirectToPostedUrl($submission);
            } else {
                $this->_doRedirect($submission, true);
            }
        } else {
            if (craft()->request->isAjaxRequest()) {
                $return = array('success' => false, 'errors' => $submission->getErrors());
                $this->returnJson($return);
            } elseif (craft()->request->isCpRequest()) {
                craft()->userSession->setError(Craft::t('Couldn’t save submission.'));
                // Send the submission back to the template
                craft()->urlManager->setRouteVariables(array('submission' => $submission));
            } else {
                // Remember active submissions
                craft()->amForms_submissions->setActiveSubmission($submission);
                // Return the submission by the form's handle, for custom HTML possibilities
                craft()->urlManager->setRouteVariables(array($form->handle => $submission));
            }
        }
    }