From cf14306c2b3f82a81f8d56669a71633b4d4b5fce Mon Sep 17 00:00:00 2001 From: marvin-borner@live.com Date: Mon, 16 Apr 2018 21:09:05 +0200 Subject: Main merge to user management system - files are now at /main/public/ --- .../src/Controller/FormGeneratorController.php | 26 +++ .../sprinkles/FormGenerator/src/Element/Alert.php | 33 ++++ .../FormGenerator/src/Element/BaseInput.php | 111 ++++++++++++ .../FormGenerator/src/Element/Checkbox.php | 38 +++++ .../sprinkles/FormGenerator/src/Element/Hidden.php | 32 ++++ .../FormGenerator/src/Element/InputInterface.php | 19 +++ .../sprinkles/FormGenerator/src/Element/Select.php | 41 +++++ .../sprinkles/FormGenerator/src/Element/Text.php | 37 ++++ .../FormGenerator/src/Element/Textarea.php | 38 +++++ main/app/sprinkles/FormGenerator/src/Form.php | 188 +++++++++++++++++++++ 10 files changed, 563 insertions(+) create mode 100755 main/app/sprinkles/FormGenerator/src/Controller/FormGeneratorController.php create mode 100755 main/app/sprinkles/FormGenerator/src/Element/Alert.php create mode 100755 main/app/sprinkles/FormGenerator/src/Element/BaseInput.php create mode 100755 main/app/sprinkles/FormGenerator/src/Element/Checkbox.php create mode 100755 main/app/sprinkles/FormGenerator/src/Element/Hidden.php create mode 100755 main/app/sprinkles/FormGenerator/src/Element/InputInterface.php create mode 100755 main/app/sprinkles/FormGenerator/src/Element/Select.php create mode 100755 main/app/sprinkles/FormGenerator/src/Element/Text.php create mode 100755 main/app/sprinkles/FormGenerator/src/Element/Textarea.php create mode 100755 main/app/sprinkles/FormGenerator/src/Form.php (limited to 'main/app/sprinkles/FormGenerator/src') diff --git a/main/app/sprinkles/FormGenerator/src/Controller/FormGeneratorController.php b/main/app/sprinkles/FormGenerator/src/Controller/FormGeneratorController.php new file mode 100755 index 0000000..e731011 --- /dev/null +++ b/main/app/sprinkles/FormGenerator/src/Controller/FormGeneratorController.php @@ -0,0 +1,26 @@ +ci->view->render($response, 'FormGenerator/confirm.html.twig', $request->getQueryParams()); + } +} diff --git a/main/app/sprinkles/FormGenerator/src/Element/Alert.php b/main/app/sprinkles/FormGenerator/src/Element/Alert.php new file mode 100755 index 0000000..f848b5c --- /dev/null +++ b/main/app/sprinkles/FormGenerator/src/Element/Alert.php @@ -0,0 +1,33 @@ +element = array_merge([ + "class" => "alert-danger", + "icon" => "fa-ban", + "value" => $this->value, + "name" => $this->name + ], $this->element); + } +} diff --git a/main/app/sprinkles/FormGenerator/src/Element/BaseInput.php b/main/app/sprinkles/FormGenerator/src/Element/BaseInput.php new file mode 100755 index 0000000..d892001 --- /dev/null +++ b/main/app/sprinkles/FormGenerator/src/Element/BaseInput.php @@ -0,0 +1,111 @@ +name = $name; + $this->element = $element; + $this->value = $value; + } + + /** + * parse function. + * + * Return the parsed input attributes + * @access public + * @return void + */ + public function parse() + { + $this->applyTransformations(); + return $this->element; + } + + /** + * translateArgValue function. + * + * Translate the value of passed argument using the Translator Facade + * @access public + * @param String $argument + * @return void + */ + public function translateArgValue($argument) { + if (isset($this->element[$argument])) { + $this->element[$argument] = Translator::translate($this->element[$argument]); + } + } + + /** + * getValue function. + * + * Return the value of the current input element. If not value is set in + * `$this->value`, return the default value (from the schema data), if any. + * @access public + * @return string The input current value + */ + public function getValue() { + if (isset($this->value) && $this->value !== null) { + return $this->value; + } else if (isset($this->element['default'])) { + return $this->element['default']; + } else { + return ""; + } + } + + /** + * applyTransformations function. + * + * Add defaut attributes to the current input element. Also transform + * attributes values passed from the schema + * @access protected + * @abstract + * @return void + */ + abstract protected function applyTransformations(); +} diff --git a/main/app/sprinkles/FormGenerator/src/Element/Checkbox.php b/main/app/sprinkles/FormGenerator/src/Element/Checkbox.php new file mode 100755 index 0000000..59e6eaf --- /dev/null +++ b/main/app/sprinkles/FormGenerator/src/Element/Checkbox.php @@ -0,0 +1,38 @@ +element = array_merge([ + "class" => "js-icheck", + "name" => $this->name, + "id" => "field_" . $this->name, + "binary" => true + ], $this->element); + + // We add the check status instead of the value + if ($this->element["binary"] !== false && $this->getValue() == 1) { + $this->element["checked"] = "checked"; + } + } +} diff --git a/main/app/sprinkles/FormGenerator/src/Element/Hidden.php b/main/app/sprinkles/FormGenerator/src/Element/Hidden.php new file mode 100755 index 0000000..08c22f7 --- /dev/null +++ b/main/app/sprinkles/FormGenerator/src/Element/Hidden.php @@ -0,0 +1,32 @@ +element = array_merge([ + "value" => $this->getValue(), + "name" => $this->name, + "id" => "field_" . $this->name + ], $this->element); + } +} diff --git a/main/app/sprinkles/FormGenerator/src/Element/InputInterface.php b/main/app/sprinkles/FormGenerator/src/Element/InputInterface.php new file mode 100755 index 0000000..7405109 --- /dev/null +++ b/main/app/sprinkles/FormGenerator/src/Element/InputInterface.php @@ -0,0 +1,19 @@ +element = array_merge([ + "class" => "form-control js-select2", + "value" => $this->getValue(), + "name" => $this->name, + "id" => "field_" . $this->name + ], $this->element); + + // Placeholder is required to be in `data-*` for select 2 + // Plus we translate the placeholder + if (isset($this->element["placeholder"])) { + $this->element["data-placeholder"] = $this->element["placeholder"]; + unset($this->element["placeholder"]); + $this->translateArgValue('data-placeholder'); + } + } +} diff --git a/main/app/sprinkles/FormGenerator/src/Element/Text.php b/main/app/sprinkles/FormGenerator/src/Element/Text.php new file mode 100755 index 0000000..b936fe2 --- /dev/null +++ b/main/app/sprinkles/FormGenerator/src/Element/Text.php @@ -0,0 +1,37 @@ +element = array_merge([ + "autocomplete" => "off", + "class" => "form-control", + "value" => $this->getValue(), + "name" => $this->name, + "id" => "field_" . $this->name + ], $this->element); + + // Translate placeholder + $this->translateArgValue('placeholder'); + } +} diff --git a/main/app/sprinkles/FormGenerator/src/Element/Textarea.php b/main/app/sprinkles/FormGenerator/src/Element/Textarea.php new file mode 100755 index 0000000..bec3a6c --- /dev/null +++ b/main/app/sprinkles/FormGenerator/src/Element/Textarea.php @@ -0,0 +1,38 @@ +element = array_merge([ + "autocomplete" => "off", + "class" => "form-control", + "value" => $this->getValue(), + "name" => $this->name, + "rows" => 3, + "id" => "field_" . $this->name + ], $this->element); + + // Translate placeholder + $this->translateArgValue('placeholder'); + } +} diff --git a/main/app/sprinkles/FormGenerator/src/Form.php b/main/app/sprinkles/FormGenerator/src/Form.php new file mode 100755 index 0000000..e845e3e --- /dev/null +++ b/main/app/sprinkles/FormGenerator/src/Form.php @@ -0,0 +1,188 @@ +setSchema($schema); + $this->setData($data); + } + + /** + * Set the form current values + * + * @param array|object $data The form values + */ + public function setData($data) + { + if ($data instanceof Collection || $data instanceof Model) { + $this->data = $data->toArray(); + } else if (is_array($data) || $data instanceof Repository) { + $this->data = $data; + } else { + throw new \InvalidArgumentException("Data must be an array, a Collection, a Model or a Repository"); + } + } + + /** + * Set the schema for this validator. + * + * @param RequestSchemaInterface $schema A RequestSchemaInterface object, containing the form definition. + */ + public function setSchema(RequestSchemaInterface $schema) + { + $this->schema = $schema; + } + + /** + * Use to define the value of a form input when `setData` is already set + * + * @param mixed $inputName + * @param mixed $value + * @return void + */ + public function setValue($inputName, $value) + { + $this->data[$inputName] = $value; + } + + /** + * Function used to overwrite the input argument from a schema file + * Can also be used to overwrite an argument hardcoded in the Twig file. + * Use `setCustomFormData` to set any other tag. + * + * @param string $inputName The input name where the argument will be added + * @param string $property The argument name. Example "data-color" + * @param string $data The value of the argument + * @return void + */ + public function setInputArgument($inputName, $property, $data) + { + if ($this->schema->has($inputName)) { + // Get the element and force set the property + $element = $this->schema->get($inputName); + $element['form'][$property] = $data; + + // Push back the modifyed element in the schema + $this->schema->set($inputName, $element); + } + } + + /** + * Function used to set options of a select element. Shortcut for using + * `setInputArgument` and `setValue`. + * + * @param string $inputName The select name to add options to + * @param array $data An array of `value => label` options + * @param string $selected The selected key + * @return void + */ + public function setOptions($inputName, $data = [], $selected = null) + { + // Set opdations + $this->setInputArgument($inputName, 'options', $data); + + // Set the value + if (!is_null($selected)) { + $this->setValue($inputName, $selected); + } + } + + /** + * Function to set the form namespace. + * Use the form namespace to wrap the fields name in a top level array. + * Useful when using multiple schemas at once or if the names are using dot syntaxt. + * See : http://stackoverflow.com/a/20365198/445757 + * + * @param string $namespace + * @return void + */ + public function setFormNamespace($namespace) + { + $this->formNamespace = $namespace; + } + + /** + * Generate an array contining all nececerry value to generate a form + * with Twig. + * + * @return array The form fields data + */ + public function generate() + { + $form = collect([]); + + // Loop all the the fields in the schema + foreach ($this->schema->all() as $name => $input) { + + // Skip the one that don't have a `form` definition + if (isset($input['form'])) { + + // Get the value from the data + $value = isset($this->data[$name]) ? $this->data[$name] : null; + + // Add the namespace to the name if it's defined + $name = ($this->formNamespace != "") ? $this->formNamespace."[".$name."]" : $name; + + // Get the element class and make sure it exist + $type = (isset($input['form']['type'])) ? $input['form']['type'] : "text"; + $type = "UserFrosting\\Sprinkle\\FormGenerator\\Element\\" . Str::studly($type); + + // If class doesn't esist, default to Text element + if (!class_exists($type)) { + $type = "UserFrosting\\Sprinkle\\FormGenerator\\Element\\Text"; + } + + // Create a new instance + $element = new $type($name, $input['form'], $value); + + // Push data to `$form` + $form->put($name, $element->parse()); + } + } + + return $form->toArray(); + } +} -- cgit v1.2.3