Example #1
0
 /**
  * Execute the action
  */
 public function execute()
 {
     parent::execute();
     // get parameters
     $formId = \SpoonFilter::getPostValue('form_id', null, '', 'int');
     $fieldId = \SpoonFilter::getPostValue('field_id', null, '', 'int');
     $type = \SpoonFilter::getPostValue('type', array('checkbox', 'dropdown', 'datetime', 'heading', 'paragraph', 'radiobutton', 'submit', 'textarea', 'textbox'), '', 'string');
     $label = trim(\SpoonFilter::getPostValue('label', null, '', 'string'));
     $values = trim(\SpoonFilter::getPostValue('values', null, '', 'string'));
     // this is somewhat a nasty hack, but it makes special chars work.
     $values = \SpoonFilter::htmlspecialcharsDecode($values);
     $defaultValues = trim(\SpoonFilter::getPostValue('default_values', null, '', 'string'));
     $placeholder = trim(\SpoonFilter::getPostValue('placeholder', null, '', 'string'));
     $required = \SpoonFilter::getPostValue('required', array('Y', 'N'), 'N', 'string');
     $requiredErrorMessage = trim(\SpoonFilter::getPostValue('required_error_message', null, '', 'string'));
     $validation = \SpoonFilter::getPostValue('validation', array('email', 'numeric', 'time'), '', 'string');
     $validationParameter = trim(\SpoonFilter::getPostValue('validation_parameter', null, '', 'string'));
     $errorMessage = trim(\SpoonFilter::getPostValue('error_message', null, '', 'string'));
     // special field for textbox: reply to
     $replyTo = \SpoonFilter::getPostValue('reply_to', array('Y', 'N'), 'N', 'string');
     // special fields for datetime
     $inputType = \SpoonFilter::getPostValue('input_type', array('date', 'time'), 'date', 'string');
     $valueAmount = trim(\SpoonFilter::getPostValue('value_amount', null, '', 'string'));
     $valueType = trim(\SpoonFilter::getPostValue('value_type', null, '', 'string'));
     // invalid form id
     if (!BackendFormBuilderModel::exists($formId)) {
         $this->output(self::BAD_REQUEST, null, 'form does not exist');
     } else {
         // invalid fieldId
         if ($fieldId !== 0 && !BackendFormBuilderModel::existsField($fieldId, $formId)) {
             $this->output(self::BAD_REQUEST, null, 'field does not exist');
         } else {
             // invalid type
             if ($type == '') {
                 $this->output(self::BAD_REQUEST, null, 'invalid type provided');
             } else {
                 // extra validation is only possible for textfields & datetime fields
                 if ($type != 'textbox' && $type != 'datetime') {
                     $validation = '';
                     $validationParameter = '';
                     $errorMessage = '';
                 }
                 // init
                 $errors = array();
                 // validate textbox
                 if ($type == 'textbox') {
                     if ($label == '') {
                         $errors['label'] = BL::getError('LabelIsRequired');
                     }
                     if ($required == 'Y' && $requiredErrorMessage == '') {
                         $errors['required_error_message'] = BL::getError('ErrorMessageIsRequired');
                     }
                     if ($validation != '' && $errorMessage == '') {
                         $errors['error_message'] = BL::getError('ErrorMessageIsRequired');
                     }
                     if ($replyTo == 'Y' && $validation != 'email') {
                         $errors['reply_to_error_message'] = BL::getError('EmailValidationIsRequired');
                     }
                 } elseif ($type == 'textarea') {
                     // validate textarea
                     if ($label == '') {
                         $errors['label'] = BL::getError('LabelIsRequired');
                     }
                     if ($required == 'Y' && $requiredErrorMessage == '') {
                         $errors['required_error_message'] = BL::getError('ErrorMessageIsRequired');
                     }
                     if ($validation != '' && $errorMessage == '') {
                         $errors['error_message'] = BL::getError('ErrorMessageIsRequired');
                     }
                 } elseif ($type == 'datetime') {
                     // validate datetime
                     if ($label == '') {
                         $errors['label'] = BL::getError('LabelIsRequired');
                     }
                     if (in_array($valueType, array('day', 'week', 'month', 'year')) && $valueAmount == '') {
                         $errors['default_value_error_message'] = BL::getError('ValueIsRequired');
                     }
                     if ($required == 'Y' && $requiredErrorMessage == '') {
                         $errors['required_error_message'] = BL::getError('ErrorMessageIsRequired');
                     }
                     if ($validation != '' && $errorMessage == '') {
                         $errors['error_message'] = BL::getError('ErrorMessageIsRequired');
                     }
                 } elseif ($type == 'heading' && $values == '') {
                     // validate heading
                     $errors['values'] = BL::getError('ValueIsRequired');
                 } elseif ($type == 'paragraph' && $values == '') {
                     // validate paragraphs
                     $errors['values'] = BL::getError('ValueIsRequired');
                 } elseif ($type == 'submit' && $values == '') {
                     // validate submitbuttons
                     $errors['values'] = BL::getError('ValueIsRequired');
                 } elseif ($type == 'dropdown') {
                     // validate dropdown
                     $values = trim($values, ',');
                     // validate
                     if ($label == '') {
                         $errors['label'] = BL::getError('LabelIsRequired');
                     }
                     if ($required == 'Y' && $requiredErrorMessage == '') {
                         $errors['required_error_message'] = BL::getError('ErrorMessageIsRequired');
                     }
                     if ($values == '') {
                         $errors['values'] = BL::getError('ValueIsRequired');
                     }
                 } elseif ($type == 'radiobutton') {
                     // validate radiobutton
                     if ($label == '') {
                         $errors['label'] = BL::getError('LabelIsRequired');
                     }
                     if ($required == 'Y' && $requiredErrorMessage == '') {
                         $errors['required_error_message'] = BL::getError('ErrorMessageIsRequired');
                     }
                     if ($values == '') {
                         $errors['values'] = BL::getError('ValueIsRequired');
                     }
                 } elseif ($type == 'checkbox') {
                     // validate checkbox
                     if ($label == '') {
                         $errors['label'] = BL::getError('LabelIsRequired');
                     }
                     if ($required == 'Y' && $requiredErrorMessage == '') {
                         $errors['required_error_message'] = BL::getError('ErrorMessageIsRequired');
                     }
                 }
                 // got errors
                 if (!empty($errors)) {
                     $this->output(self::OK, array('errors' => $errors), 'form contains errors');
                 } else {
                     // htmlspecialchars except for paragraphs
                     if ($type != 'paragraph') {
                         if ($values != '') {
                             $values = \SpoonFilter::htmlspecialchars($values);
                         }
                         if ($defaultValues != '') {
                             $defaultValues = \SpoonFilter::htmlspecialchars($defaultValues);
                         }
                     }
                     // split
                     if ($type == 'dropdown' || $type == 'checkbox') {
                         $values = (array) explode('|', $values);
                     } elseif ($type == 'radiobutton') {
                         $postedValues = (array) explode('|', $values);
                         $values = array();
                         foreach ($postedValues as $postedValue) {
                             $values[] = array('value' => CommonUri::getUrl($postedValue), 'label' => $postedValue);
                         }
                     }
                     /**
                      * Save!
                      */
                     // settings
                     $settings = array();
                     if ($label != '') {
                         $settings['label'] = \SpoonFilter::htmlspecialchars($label);
                     }
                     if (isset($values)) {
                         $settings['values'] = $values;
                     }
                     if ($defaultValues != '') {
                         $settings['default_values'] = $defaultValues;
                     }
                     if ($placeholder != '') {
                         $settings['placeholder'] = \SpoonFilter::htmlspecialchars($placeholder);
                     }
                     // reply-to, only for textboxes
                     if ($type == 'textbox') {
                         $settings['reply_to'] = $replyTo == 'Y';
                     }
                     // only for datetime input
                     if ($type == 'datetime') {
                         $settings['input_type'] = $inputType;
                         if ($inputType == 'date') {
                             $settings['value_amount'] = $valueAmount;
                             $settings['value_type'] = $valueType;
                         }
                     }
                     // build array
                     $field = array();
                     $field['form_id'] = $formId;
                     $field['type'] = $type;
                     $field['settings'] = !empty($settings) ? serialize($settings) : null;
                     // existing field
                     if ($fieldId !== 0) {
                         // update field
                         BackendFormBuilderModel::updateField($fieldId, $field);
                         // delete all validation (added again later)
                         BackendFormBuilderModel::deleteFieldValidation($fieldId);
                     } else {
                         // sequence
                         $field['sequence'] = BackendFormBuilderModel::getMaximumSequence($formId) + 1;
                         // insert
                         $fieldId = BackendFormBuilderModel::insertField($field);
                     }
                     // required
                     if ($required == 'Y') {
                         // build array
                         $validate['field_id'] = $fieldId;
                         $validate['type'] = 'required';
                         $validate['error_message'] = \SpoonFilter::htmlspecialchars($requiredErrorMessage);
                         // add validation
                         BackendFormBuilderModel::insertFieldValidation($validate);
                         // add to field (for parsing)
                         $field['validations']['required'] = $validate;
                     }
                     // other validation
                     if ($validation != '') {
                         // build array
                         $validate['field_id'] = $fieldId;
                         $validate['type'] = $validation;
                         $validate['error_message'] = \SpoonFilter::htmlspecialchars($errorMessage);
                         $validate['parameter'] = $validationParameter != '' ? \SpoonFilter::htmlspecialchars($validationParameter) : null;
                         // add validation
                         BackendFormBuilderModel::insertFieldValidation($validate);
                         // add to field (for parsing)
                         $field['validations'][$type] = $validate;
                     }
                     // get item from database (i do this call again to keep the pof as low as possible)
                     $field = BackendFormBuilderModel::getField($fieldId);
                     // submit button isnt parsed but handled directly via javascript
                     if ($type == 'submit') {
                         $fieldHTML = '';
                     } else {
                         // parse field to html
                         $fieldHTML = FormBuilderHelper::parseField($field);
                     }
                     // success output
                     $this->output(self::OK, array('field_id' => $fieldId, 'field_html' => $fieldHTML), 'field saved');
                 }
             }
         }
     }
 }
Example #2
0
 /**
  * Parse the fields
  */
 private function parseFields()
 {
     $fieldsHTML = array();
     // get fields
     $fields = BackendFormBuilderModel::getFields($this->id);
     // loop fields
     foreach ($fields as $field) {
         // submit button
         if ($field['type'] == 'submit') {
             // assign
             $this->tpl->assign('submitId', $field['id']);
             // add field
             $btn = $this->frm->addButton('submit_field', \SpoonFilter::htmlspecialcharsDecode($field['settings']['values']), 'button');
             $btn->setAttribute('disabled', 'disabled');
             // skip
             continue;
         }
         // parse field to html
         $fieldsHTML[]['field'] = FormBuilderHelper::parseField($field);
     }
     // assign iteration
     $this->tpl->assign('fields', $fieldsHTML);
 }