/** * Execute the action */ public function execute() { parent::execute(); // get parameters $formId = trim(\SpoonFilter::getPostValue('form_id', null, '', 'int')); $fieldId = trim(\SpoonFilter::getPostValue('field_id', null, '', 'int')); // invalid form id if (!BackendFormBuilderModel::exists($formId)) { $this->output(self::BAD_REQUEST, null, 'form does not exist'); } else { // invalid fieldId if (!BackendFormBuilderModel::existsField($fieldId, $formId)) { $this->output(self::BAD_REQUEST, null, 'field does not exist'); } else { // get field $field = BackendFormBuilderModel::getField($fieldId); if ($field['type'] == 'radiobutton') { $values = array(); foreach ($field['settings']['values'] as $value) { $values[] = $value['label']; } $field['settings']['values'] = $values; } // success output $this->output(self::OK, array('field' => $field)); } } }
/** * Execute the action */ public function execute() { parent::execute(); // get parameters $formId = trim(\SpoonFilter::getPostValue('form_id', null, '', 'int')); $fieldId = trim(\SpoonFilter::getPostValue('field_id', null, '', 'int')); // invalid form id if (!BackendFormBuilderModel::exists($formId)) { $this->output(self::BAD_REQUEST, null, 'form does not exist'); } else { // invalid fieldId if (!BackendFormBuilderModel::existsField($fieldId, $formId)) { $this->output(self::BAD_REQUEST, null, 'field does not exist'); } else { // get field $field = BackendFormBuilderModel::getField($fieldId); // submit button cannot be deleted if ($field['type'] == 'submit') { $this->output(self::BAD_REQUEST, null, 'submit button cannot be deleted'); } else { // delete field BackendFormBuilderModel::deleteField($fieldId); // success output $this->output(self::OK, null, 'field deleted'); } } } }
/** * 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'); } } } } }