2017-08-04 16:28:16 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace HTMLBuilder\Handler;
|
|
|
|
|
|
|
|
/**
|
2018-09-20 09:21:34 +02:00
|
|
|
* Gestione dell'input di tipo "text", "file", "password", "email", "number", "textarea" e "hidden".
|
2018-01-12 16:23:26 +01:00
|
|
|
*
|
2017-08-04 16:28:16 +02:00
|
|
|
* @since 2.3
|
|
|
|
*/
|
|
|
|
class DefaultHandler implements HandlerInterface
|
|
|
|
{
|
|
|
|
public function handle(&$values, &$extras)
|
|
|
|
{
|
2018-01-12 16:23:26 +01:00
|
|
|
// Delega della gestione al metodo specifico per il tipo di input richiesto
|
2017-08-04 16:28:16 +02:00
|
|
|
if (in_array($values['type'], get_class_methods($this))) {
|
|
|
|
$result = $this->{$values['type']}($values, $extras);
|
2018-01-12 16:23:26 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// Caso non previsto
|
|
|
|
else {
|
2017-08-04 16:28:16 +02:00
|
|
|
$result = $this->custom($values, $extras);
|
|
|
|
}
|
|
|
|
|
|
|
|
return $result;
|
|
|
|
}
|
|
|
|
|
2018-01-12 16:23:26 +01:00
|
|
|
/**
|
|
|
|
* Gestione dell'input di tipo non altrimenti previsto.
|
|
|
|
* Esempio: {[ "type": "undefined", "label": "Custom di test", "placeholder": "Test", "name": "custom", "value": "custom" ]}.
|
|
|
|
*
|
|
|
|
* @param array $values
|
|
|
|
* @param array $extras
|
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
protected function custom(&$values, &$extras)
|
|
|
|
{
|
|
|
|
// Generazione del codice HTML
|
|
|
|
return '
|
|
|
|
<span |attr|>|value|</span>';
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gestione dell'input di tipo "text".
|
|
|
|
* Esempio: {[ "type": "text", "label": "Text di test", "placeholder": "Test", "name": "text" ]}.
|
|
|
|
*
|
|
|
|
* @param array $values
|
|
|
|
* @param array $extras
|
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
*/
|
2017-08-04 16:28:16 +02:00
|
|
|
protected function text(&$values, &$extras)
|
|
|
|
{
|
2018-01-12 16:23:26 +01:00
|
|
|
// Generazione del codice HTML
|
2017-08-04 16:28:16 +02:00
|
|
|
return '
|
|
|
|
<input |attr|>';
|
|
|
|
}
|
|
|
|
|
2018-01-12 16:23:26 +01:00
|
|
|
/**
|
|
|
|
* Gestione dell'input di tipo "file".
|
|
|
|
* Esempio: {[ "type": "file", "label": "File di test", "placeholder": "Test", "name": "file" ]}.
|
|
|
|
*
|
|
|
|
* @param array $values
|
|
|
|
* @param array $extras
|
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
*/
|
2017-08-04 16:28:16 +02:00
|
|
|
protected function file(&$values, &$extras)
|
|
|
|
{
|
2018-01-12 16:23:26 +01:00
|
|
|
// Delega al metodo "text", per la generazione del codice HTML
|
2017-08-04 16:28:16 +02:00
|
|
|
return $this->text($values, $extras);
|
|
|
|
}
|
|
|
|
|
2018-01-12 16:23:26 +01:00
|
|
|
/**
|
|
|
|
* Gestione dell'input di tipo "password".
|
|
|
|
* Esempio: {[ "type": "password", "label": "Password di test", "placeholder": "Test", "name": "password" ]}.
|
|
|
|
*
|
|
|
|
* @param array $values
|
|
|
|
* @param array $extras
|
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
*/
|
2017-08-04 16:28:16 +02:00
|
|
|
protected function password(&$values, &$extras)
|
|
|
|
{
|
2018-01-12 16:23:26 +01:00
|
|
|
// Delega al metodo "text", per la generazione del codice HTML
|
2017-08-04 16:28:16 +02:00
|
|
|
return $this->text($values, $extras);
|
|
|
|
}
|
|
|
|
|
2018-01-12 16:23:26 +01:00
|
|
|
/**
|
|
|
|
* Gestione dell'input di tipo "hidden".
|
|
|
|
* Esempio: {[ "type": "hidden", "label": "Hidden di test", "placeholder": "Test", "name": "hidden" ]}.
|
|
|
|
*
|
|
|
|
* @param array $values
|
|
|
|
* @param array $extras
|
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
*/
|
2017-08-04 16:28:16 +02:00
|
|
|
protected function hidden(&$values, &$extras)
|
|
|
|
{
|
|
|
|
$original = $values;
|
|
|
|
|
|
|
|
$values = [];
|
|
|
|
$values['type'] = $original['type'];
|
|
|
|
$values['value'] = $original['value'];
|
|
|
|
$values['name'] = $original['name'];
|
2018-06-26 10:25:50 +02:00
|
|
|
$values['id'] = $original['id'];
|
2017-08-04 16:28:16 +02:00
|
|
|
$values['class'] = [];
|
|
|
|
|
2018-01-12 16:23:26 +01:00
|
|
|
// Delega al metodo "text", per la generazione del codice HTML
|
2017-08-04 16:28:16 +02:00
|
|
|
return $this->text($values, $extras);
|
|
|
|
}
|
|
|
|
|
2018-01-12 16:23:26 +01:00
|
|
|
/**
|
|
|
|
* Gestione dell'input di tipo "email".
|
|
|
|
* Esempio: {[ "type": "email", "label": "Email di test", "placeholder": "Test", "name": "email" ]}.
|
|
|
|
*
|
|
|
|
* @param array $values
|
|
|
|
* @param array $extras
|
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
*/
|
2017-08-04 16:28:16 +02:00
|
|
|
protected function email(&$values, &$extras)
|
|
|
|
{
|
|
|
|
$values['class'][] = 'email-mask';
|
|
|
|
|
|
|
|
$values['type'] = 'text';
|
|
|
|
|
2018-01-12 16:23:26 +01:00
|
|
|
// Delega al metodo "text", per la generazione del codice HTML
|
2017-08-04 16:28:16 +02:00
|
|
|
return $this->text($values, $extras);
|
|
|
|
}
|
|
|
|
|
2018-01-12 16:23:26 +01:00
|
|
|
/**
|
|
|
|
* Gestione dell'input di tipo "number".
|
|
|
|
* Esempio: {[ "type": "number", "label": "Number di test", "placeholder": "Test", "name": "number" ]}.
|
|
|
|
*
|
|
|
|
* @param array $values
|
|
|
|
* @param array $extras
|
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
*/
|
2017-08-04 16:28:16 +02:00
|
|
|
protected function number(&$values, &$extras)
|
|
|
|
{
|
|
|
|
$values['class'][] = 'inputmask-decimal';
|
|
|
|
|
|
|
|
$values['value'] = !empty($values['value']) ? $values['value'] : 0;
|
|
|
|
|
2018-01-12 16:23:26 +01:00
|
|
|
// Gestione della precisione (numero specifico, oppure "qta" per il valore previsto nell'impostazione "Cifre decimali per quantità").
|
2017-09-22 16:36:43 +02:00
|
|
|
$decimals = null;
|
2017-08-04 16:28:16 +02:00
|
|
|
if (isset($values['decimals'])) {
|
|
|
|
if (is_numeric($values['decimals'])) {
|
|
|
|
$decimals = $values['decimals'];
|
|
|
|
} elseif (starts_with($values['decimals'], 'qta')) {
|
2018-01-12 16:23:26 +01:00
|
|
|
// Se non è previsto un valore minimo, lo imposta a 1
|
2018-01-23 17:36:22 +01:00
|
|
|
$values['min-value'] = isset($values['min-value']) ? $values['min-value'] : 0;
|
2017-08-04 16:28:16 +02:00
|
|
|
|
2018-07-09 10:44:54 +02:00
|
|
|
$decimals = setting('Cifre decimali per quantità');
|
2017-08-04 16:28:16 +02:00
|
|
|
$values['decimals'] = $decimals;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-01-12 16:23:26 +01:00
|
|
|
// Controllo sulla correttezza sintattica del valore impostato
|
2018-09-20 12:05:22 +02:00
|
|
|
$values['value'] = (formatter()->isStandardNumber($values['value'])) ? \Translator::numberToLocale($values['value'], $decimals) : $values['value'];
|
2017-08-04 16:28:16 +02:00
|
|
|
|
|
|
|
$values['type'] = 'text';
|
|
|
|
|
2018-01-12 16:23:26 +01:00
|
|
|
// Delega al metodo "text", per la generazione del codice HTML
|
2017-08-04 16:28:16 +02:00
|
|
|
return $this->text($values, $extras);
|
|
|
|
}
|
|
|
|
|
2018-01-12 16:23:26 +01:00
|
|
|
/**
|
|
|
|
* Gestione dell'input di tipo "textarea".
|
|
|
|
* Esempio: {[ "type": "textarea", "label": "Textarea di test", "placeholder": "Test", "name": "textarea" ]}.
|
|
|
|
*
|
|
|
|
* @param array $values
|
|
|
|
* @param array $extras
|
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
*/
|
2017-08-04 16:28:16 +02:00
|
|
|
protected function textarea(&$values, &$extras)
|
|
|
|
{
|
|
|
|
$values['class'][] = 'autosize';
|
|
|
|
|
2018-01-12 16:23:26 +01:00
|
|
|
// Generazione del codice HTML
|
2017-08-04 16:28:16 +02:00
|
|
|
return '
|
|
|
|
<textarea |attr|>|value|</textarea>';
|
|
|
|
}
|
|
|
|
}
|