Craft\AmForms_FormsService::saveForm PHP Method

saveForm() public method

Save a form.
public saveForm ( AmForms_FormModel $form ) : boolean
$form AmForms_FormModel
return boolean
    public function saveForm(AmForms_FormModel $form)
    {
        $isNewForm = !$form->id;
        // Get the Form record
        if ($form->id) {
            $formRecord = AmForms_FormRecord::model()->findById($form->id);
            if (!$formRecord) {
                throw new Exception(Craft::t('No form exists with the ID “{id}”.', array('id' => $form->id)));
            }
            $oldForm = AmForms_FormModel::populateModel($formRecord);
        } else {
            $formRecord = new AmForms_FormRecord();
        }
        // Form attributes
        $formRecord->setAttributes($form->getAttributes(), false);
        // Validate the attributes
        $formRecord->validate();
        $form->addErrors($formRecord->getErrors());
        // Is submissions or notifications enabled?
        if (!$form->submissionEnabled && !$form->notificationEnabled) {
            $form->addError('submissionEnabled', Craft::t('Submissions or notifications must be enabled, otherwise you will lose the submission.'));
            $form->addError('notificationEnabled', Craft::t('Notifications or submissions must be enabled, otherwise you will lose the submission.'));
        }
        if (!$form->hasErrors()) {
            $transaction = craft()->db->getCurrentTransaction() === null ? craft()->db->beginTransaction() : null;
            try {
                // Set field context otherwise the layout could fail
                craft()->content->fieldContext = AmFormsModel::FieldContext;
                craft()->content->contentTable = AmFormsModel::FieldContent;
                // Do we need to delete an old field layout?
                if (!$isNewForm) {
                    $oldLayout = $oldForm->getFieldLayout();
                    if ($oldLayout) {
                        craft()->fields->deleteLayoutById($oldLayout->id);
                    }
                }
                // Do we have a new field layout?
                if (count($form->getFieldLayout()->getFields()) > 0) {
                    $fieldLayout = $form->getFieldLayout();
                    // Save the field layout
                    craft()->fields->saveLayout($fieldLayout);
                    // Assign layout to our form
                    $formRecord->fieldLayoutId = $fieldLayout->id;
                } else {
                    // No field layout given
                    $formRecord->fieldLayoutId = null;
                }
                // Save the element!
                if (craft()->elements->saveElement($form)) {
                    // Now that we have an element ID, save it on the other stuff
                    if ($isNewForm) {
                        $formRecord->id = $form->id;
                    }
                    // Save the form!
                    $formRecord->save(false);
                    // Skip validation now
                    if ($transaction !== null) {
                        $transaction->commit();
                    }
                    return true;
                }
            } catch (\Exception $e) {
                if ($transaction !== null) {
                    $transaction->rollback();
                }
                throw $e;
            }
        }
        return false;
    }