Frontend\Modules\FormBuilder\Widgets\Form::validateForm PHP Method

validateForm() private method

Validate the form.
private validateForm ( )
    private function validateForm()
    {
        // submitted
        if ($this->frm->isSubmitted()) {
            // does the key exists?
            if (\SpoonSession::exists('formbuilder_' . $this->item['id'])) {
                // calculate difference
                $diff = time() - (int) \SpoonSession::get('formbuilder_' . $this->item['id']);
                // calculate difference, it it isn't 10 seconds the we tell the user to slow down
                if ($diff < 10 && $diff != 0) {
                    $this->frm->addError(FL::err('FormTimeout'));
                }
            }
            // validate fields
            foreach ($this->item['fields'] as $field) {
                // field name
                $fieldName = 'field' . $field['id'];
                // skip
                if ($field['type'] == 'submit' || $field['type'] == 'paragraph' || $field['type'] == 'heading') {
                    continue;
                }
                // loop other validations
                foreach ($field['validations'] as $rule => $settings) {
                    // already has an error so skip
                    if ($this->frm->getField($fieldName)->getErrors() !== null) {
                        continue;
                    }
                    // required
                    if ($rule == 'required') {
                        $this->frm->getField($fieldName)->isFilled($settings['error_message']);
                    } elseif ($rule == 'email') {
                        // only check this if the field is filled, if the field is required it will be validated before
                        if ($this->frm->getField($fieldName)->isFilled()) {
                            $this->frm->getField($fieldName)->isEmail($settings['error_message']);
                        }
                    } elseif ($rule == 'numeric') {
                        // only check this if the field is filled, if the field is required it will be validated before
                        if ($this->frm->getField($fieldName)->isFilled()) {
                            $this->frm->getField($fieldName)->isNumeric($settings['error_message']);
                        }
                    } elseif ($rule == 'time') {
                        $regexTime = '/^(([0-1][0-9]|2[0-3]|[0-9])|([0-1][0-9]|2[0-3]|[0-9])(:|h)[0-5]?[0-9]?)$/';
                        if (!\SpoonFilter::isValidAgainstRegexp($regexTime, $this->frm->getField($fieldName)->getValue())) {
                            $this->frm->getField($fieldName)->setError($settings['error_message']);
                        }
                    }
                }
            }
            // valid form
            if ($this->frm->isCorrect()) {
                // item
                $data['form_id'] = $this->item['id'];
                $data['session_id'] = \SpoonSession::getSessionId();
                $data['sent_on'] = FrontendModel::getUTCDate();
                $data['data'] = serialize(array('server' => $_SERVER));
                // insert data
                $dataId = FrontendFormBuilderModel::insertData($data);
                // init fields array
                $fields = array();
                // loop all fields
                foreach ($this->item['fields'] as $field) {
                    // skip
                    if ($field['type'] == 'submit' || $field['type'] == 'paragraph' || $field['type'] == 'heading') {
                        continue;
                    }
                    // field data
                    $fieldData['data_id'] = $dataId;
                    $fieldData['label'] = $field['settings']['label'];
                    $fieldData['value'] = $this->frm->getField('field' . $field['id'])->getValue();
                    if ($field['type'] == 'radiobutton') {
                        $values = array();
                        foreach ($field['settings']['values'] as $value) {
                            $values[$value['value']] = $value['label'];
                        }
                        $fieldData['value'] = $values[$fieldData['value']];
                    }
                    // clean up
                    if (is_array($fieldData['value']) && empty($fieldData['value'])) {
                        $fieldData['value'] = null;
                    }
                    // serialize
                    if ($fieldData['value'] !== null) {
                        $fieldData['value'] = serialize($fieldData['value']);
                    }
                    // save fields data
                    $fields[$field['id']] = $fieldData;
                    // insert
                    FrontendFormBuilderModel::insertDataField($fieldData);
                }
                $this->get('event_dispatcher')->dispatch(FormBuilderEvents::FORM_SUBMITTED, new FormBuilderSubmittedEvent($this->item, $fields, $dataId));
                // trigger event
                FrontendModel::triggerEvent('FormBuilder', 'after_submission', array('form_id' => $this->item['id'], 'data_id' => $dataId, 'data' => $data, 'fields' => $fields, 'visitorId' => FrontendModel::getVisitorId()));
                // store timestamp in session so we can block excessive usage
                \SpoonSession::set('formbuilder_' . $this->item['id'], time());
                // redirect
                $redirect = SITE_URL . $this->URL->getQueryString();
                $redirect .= stripos($redirect, '?') === false ? '?' : '&';
                $redirect .= 'identifier=' . $this->item['identifier'];
                $redirect .= '#' . $this->formName;
                throw new RedirectException('Redirect', new RedirectResponse($redirect));
            } else {
                // not correct, show errors
                // global form errors set
                if ($this->frm->getErrors() != '') {
                    $this->tpl->assign('formBuilderError', $this->frm->getErrors());
                } else {
                    // general error
                    $this->tpl->assign('formBuilderError', FL::err('FormError'));
                }
            }
        }
    }