Craft\AmForms_SubmissionsService::saveSubmission PHP Method

saveSubmission() public method

Save a submission.
public saveSubmission ( craft\AmForms_SubmissionModel $submission ) : boolean
$submission craft\AmForms_SubmissionModel
return boolean
    public function saveSubmission(AmForms_SubmissionModel $submission)
    {
        $isNewSubmission = !$submission->id;
        // If we don't need to save it, return a success for other events
        if ($isNewSubmission && !$submission->form->submissionEnabled) {
            return true;
        }
        // Get the submission record
        if ($submission->id) {
            $submissionRecord = AmForms_SubmissionRecord::model()->findById($submission->id);
            if (!$submissionRecord) {
                throw new Exception(Craft::t('No submission exists with the ID “{id}”.', array('id' => $submission->id)));
            }
        } else {
            $submissionRecord = new AmForms_SubmissionRecord();
        }
        // Submission attributes
        $submissionRecord->setAttributes($submission->getAttributes(), false);
        // Validate the attributes
        $submissionRecord->validate();
        $submission->addErrors($submissionRecord->getErrors());
        if (!$submission->hasErrors()) {
            // Fire an 'onBeforeSaveSubmission' event
            $event = new Event($this, array('submission' => $submission, 'isNewSubmission' => $isNewSubmission));
            $this->onBeforeSaveSubmission($event);
            // Is the event giving us the go-ahead?
            if ($event->performAction) {
                $transaction = craft()->db->getCurrentTransaction() === null ? craft()->db->beginTransaction() : null;
                try {
                    // Submission title based on form's title format
                    $submission->getContent()->title = craft()->templates->renderObjectTemplate($submission->form->titleFormat, $submission);
                    // Set field context and content
                    $oldFieldContext = craft()->content->fieldContext;
                    $oldContentTable = craft()->content->contentTable;
                    craft()->content->fieldContext = $submission->getFieldContext();
                    craft()->content->contentTable = $submission->getContentTable();
                    // Save the element!
                    if (craft()->elements->saveElement($submission)) {
                        // Reset field context and content
                        craft()->content->fieldContext = $oldFieldContext;
                        craft()->content->contentTable = $oldContentTable;
                        // Now that we have an element ID, save it on the other stuff
                        if ($isNewSubmission) {
                            $submissionRecord->id = $submission->id;
                        }
                        // Save the submission!
                        $submissionRecord->save(false);
                        // Skip validation now
                        if ($transaction !== null) {
                            $transaction->commit();
                        }
                        // Fire an 'onSaveSubmission' event
                        $this->onSaveSubmission(new Event($this, array('submission' => $submission, 'isNewSubmission' => $isNewSubmission)));
                        return true;
                    }
                    // Reset field context and content
                    craft()->content->fieldContext = $oldFieldContext;
                    craft()->content->contentTable = $oldContentTable;
                } catch (\Exception $e) {
                    if ($transaction !== null) {
                        $transaction->rollback();
                    }
                    throw $e;
                }
            }
        }
        return false;
    }