From 965d467d7d8b1d0d53c03b8b8c191111bf262823 Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Fri, 12 Jan 2018 16:23:26 +0100 Subject: [PATCH] Miglioramento della documentazione del codice Miglioramento della documentazione del codice nelle classi dedicata alla generazione dell'input HTML. Aggiunto supporto agli array in formato JSON nel campo "values" dei select. Aggiunto redirect automatico nel file _controller.php_: se specificati $id_record e $id_module indirizza al file _editor.php_. --- api/index.php | 17 ++- controller.php | 25 +++-- modules/articoli/edit.php | 71 ++++++------- modules/fatture/add_intervento.php | 2 +- modules/fatture/crea_documento.php | 4 +- src/HTMLBuilder/HTMLBuilder.php | 8 +- src/HTMLBuilder/Handler/ChoicesHandler.php | 19 +++- src/HTMLBuilder/Handler/DateHandler.php | 63 ++++++++--- src/HTMLBuilder/Handler/DefaultHandler.php | 106 +++++++++++++++++-- src/HTMLBuilder/Handler/HandlerInterface.php | 9 ++ src/HTMLBuilder/Handler/MediaHandler.php | 26 ++++- src/HTMLBuilder/Handler/SelectHandler.php | 86 +++++++++++---- src/HTMLBuilder/Wrapper/HTMLWrapper.php | 2 +- 13 files changed, 335 insertions(+), 103 deletions(-) diff --git a/api/index.php b/api/index.php index fffa92e1f..ce90d7abf 100644 --- a/api/index.php +++ b/api/index.php @@ -21,7 +21,7 @@ session_write_close(); // Permesso di accesso all'API da ogni dispositivo header('Access-Control-Allow-Origin: *'); -// Attenzione: al momento l'API permette la lettura di tutte le tabelle rpesenti nel database (non limitate a quelle del progetto). +// Attenzione: al momento l'API permette la lettura di tutte le tabelle presenti nel database (non limitate a quelle del progetto) try { // Controlli sulla chiave di accesso @@ -30,21 +30,33 @@ try { // Lettura delle informazioni $request = API::getRequest(); + // Gestione della richiesta $method = $_SERVER['REQUEST_METHOD']; switch ($method) { + // Richiesta PUT (modifica elementi) case 'PUT': $result = $api->update($request); break; + + // Richiesta POST (creazione elementi) case 'POST': $result = $api->create($request); break; + + // Richiesta GET (ottenimento elementi) case 'GET': + // Risorsa specificata if (!empty($request)) { $result = $api->retrieve($request); - } else { + } + + // Risorsa non specificata (lista delle risorse disponibili) + else { $result = API::response(API::getResources()['retrieve']); } break; + + // Richiesta DELETE (eliminazione elementi) case 'DELETE': $result = $api->delete($request); break; @@ -55,4 +67,5 @@ try { $result = API::error('serverError'); } +// Stampa dei risultati echo $result; diff --git a/controller.php b/controller.php index 0d3adde8a..ca26a5299 100644 --- a/controller.php +++ b/controller.php @@ -2,6 +2,12 @@ include_once __DIR__.'/core.php'; +if (!empty($id_record) && !empty($id_module)) { + redirect(ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$id_record); +} elseif (empty($id_module)) { + redirect(ROOTDIR.'/index.php'); +} + if (file_exists($docroot.'/include/custom/top.php')) { include $docroot.'/include/custom/top.php'; } else { @@ -22,10 +28,10 @@ include $docroot.'/actions.php'; /* * Widget top */ - + //se non sono mobile nascondo i widget controller_top -if (!isMobile()){ - echo Widgets::addModuleWidgets($id_module, 'controller_top'); +if (!isMobile()) { + echo Widgets::addModuleWidgets($id_module, 'controller_top'); } // Lettura eventuali plugins modulo da inserire come tab @@ -87,20 +93,19 @@ echo ' redirectOperation($id_module, $id_record); -/** +/* * Widget laterali. */ // Controllo se ho widget per il lato destro dello schermo, altrimenti non creo la colonna di destra //se sono mobile pesco anche i widget di controller_top -if (isMobile()){ - $extra_where = " OR location = 'controller_top'"; -}else{ - $extra_where = ""; +if (isMobile()) { + $extra_where = " OR location = 'controller_top'"; +} else { + $extra_where = ''; } - -$result_widgets = $dbo->fetchArray('SELECT `id`, `location`, `class` FROM `zz_widgets` WHERE `id_module`='.prepare($id_module)." AND (`location`='controller_right' ".$extra_where." ) AND `enabled`=1 ORDER BY `order` ASC"); +$result_widgets = $dbo->fetchArray('SELECT `id`, `location`, `class` FROM `zz_widgets` WHERE `id_module`='.prepare($id_module)." AND (`location`='controller_right' ".$extra_where.' ) AND `enabled`=1 ORDER BY `order` ASC'); if (count($result_widgets) > 0) { echo '
'; diff --git a/modules/articoli/edit.php b/modules/articoli/edit.php index 4e937477c..15e9e5008 100644 --- a/modules/articoli/edit.php +++ b/modules/articoli/edit.php @@ -29,11 +29,11 @@ $_SESSION['superselect']['id_categoria'] = $records[0]['id_categoria'];
- + {[ "type": "text", "label": "", "name": "codice", "required": 1, "value": "$codice$" ]}
{[ "type": "checkbox", "label": "", "name": "attivo", "value": "$attivo$", "help": "", "placeholder": "" ]} - +
@@ -50,7 +50,7 @@ $_SESSION['superselect']['id_categoria'] = $records[0]['id_categoria'];
- {[ "type": "number", "label": "", "name": "qta", "required": 1, "value": "$qta$", "readonly": 1, "decimals": "qta|undefined" ]} + {[ "type": "number", "label": "", "name": "qta", "required": 1, "value": "$qta$", "readonly": 1, "decimals": "qta", "min-value": "undefined" ]}
{[ "type": "checkbox", "label": "", "name": "qta_manuale", "value": 0, "help": "", "placeholder": "" ]} @@ -68,34 +68,34 @@ $_SESSION['superselect']['id_categoria'] = $records[0]['id_categoria'];
{[ "type": "select", "label": "", "name": "um", "value": "$um$", "ajax-source": "misure", "icon-after": "add|" ]}
- +
- {[ "type": "number", "label": "", "name": "threshold_qta", "value": "$threshold_qta$", "decimals": "qta|undefined" ]} + {[ "type": "number", "label": "", "name": "threshold_qta", "value": "$threshold_qta$", "decimals": "qta", "min-value": "undefined" ]}
- + fetchArray("SELECT id FROM zz_plugins WHERE name='Serial'"); - echo ''; - } - ?> - + if (empty($records[0]['abilita_serial'])) { + $plugin = $dbo->fetchArray("SELECT id FROM zz_plugins WHERE name='Serial'"); + echo ''; + } + ?> +
{[ "type": "checkbox", "label": "", "name": "abilita_serial", "value": "$abilita_serial$", "help": "", "placeholder": "" ]}
- - + +
- +
{[ "type": "number", "label": "", "name": "prezzo_acquisto", "value": "$prezzo_acquisto$", "icon-after": "€" ]}
- - + +
{[ "type": "number", "label": "", "name": "prezzo_vendita", "value": "$prezzo_vendita$", "icon-after": "€" ]} @@ -104,18 +104,18 @@ $_SESSION['superselect']['id_categoria'] = $records[0]['id_categoria'];
{[ "type": "select", "label": "", "name": "idiva_vendita", "values": "query=SELECT * FROM co_iva ORDER BY descrizione ASC", "value": "$idiva_vendita$", "valore_predefinito": "Iva predefinita" ]}
- +
{[ "type": "number", "label": "", "name": "gg_garanzia", "decimals": 0, "value": "$gg_garanzia$", "icon-after": "GG" ]}
- +
- - + +
- +
{[ "type": "number", "label": "", "name": "peso_lordo", "value": "$peso_lordo$", "icon-after": "KG" ]}
@@ -298,13 +298,12 @@ $elementi = $dbo->fetchArray('SELECT `co_documenti`.`id`, `co_documenti`.`data`, SELECT `dt_ddt`.`id`, `dt_ddt`.`data`, `dt_ddt`.`numero`, `dt_ddt`.`numero_esterno`, `dt_tipiddt`.`descrizione` AS tipo_documento, `dt_tipiddt`.`dir` FROM `dt_ddt` JOIN `dt_tipiddt` ON `dt_tipiddt`.`id` = `dt_ddt`.`idtipoddt` WHERE `dt_ddt`.`id` IN (SELECT `idddt` FROM `dt_righe_ddt` WHERE `idarticolo` = '.prepare($id_record).') UNION SELECT `co_preventivi`.`id`, `co_preventivi`.`data_bozza`, `co_preventivi`.`numero`, 0 AS numero_esterno , "Preventivo" AS tipo_documento, 0 AS dir FROM `co_preventivi` WHERE `co_preventivi`.`id` IN (SELECT `idpreventivo` FROM `co_righe_preventivi` WHERE `idarticolo` = '.prepare($id_record).') ORDER BY `data`'); - if (!empty($elementi)) { echo '

'.tr('_NUM_ altr_I_ document_I_ collegat_I_', [ '_NUM_' => count($elementi), - '_I_' => (count($elementi)>1) ? tr('i') : tr('o') + '_I_' => (count($elementi) > 1) ? tr('i') : tr('o'), ]).':

    '; @@ -314,17 +313,17 @@ if (!empty($elementi)) { '_NUM_' => !empty($elemento['numero_esterno']) ? $elemento['numero_esterno'] : $elemento['numero'], '_DATE_' => Translator::dateToLocale($elemento['data']), ]); - - //se non è un preventivo è un ddt o una fattura - //se non è un ddt è una fattura. - if (in_array($elemento['tipo_documento'], ['Preventivo'])) { - $modulo ='Preventivi'; - } else if (!in_array($elemento['tipo_documento'], ['Ddt di vendita', 'Ddt di acquisto'])) { - $modulo = ($elemento['dir'] == 'entrata') ? 'Fatture di vendita' : 'Fatture di acquisto'; - } else { - $modulo = ($elemento['dir'] == 'entrata') ? 'Ddt di vendita' : 'Ddt di acquisto'; - } - + + //se non è un preventivo è un ddt o una fattura + //se non è un ddt è una fattura. + if (in_array($elemento['tipo_documento'], ['Preventivo'])) { + $modulo = 'Preventivi'; + } elseif (!in_array($elemento['tipo_documento'], ['Ddt di vendita', 'Ddt di acquisto'])) { + $modulo = ($elemento['dir'] == 'entrata') ? 'Fatture di vendita' : 'Fatture di acquisto'; + } else { + $modulo = ($elemento['dir'] == 'entrata') ? 'Ddt di vendita' : 'Ddt di acquisto'; + } + $id = $elemento['id']; echo ' @@ -341,4 +340,4 @@ if (!empty($elementi)) { - \ No newline at end of file + diff --git a/modules/fatture/add_intervento.php b/modules/fatture/add_intervento.php index 3aebd0f0d..5c8947225 100644 --- a/modules/fatture/add_intervento.php +++ b/modules/fatture/add_intervento.php @@ -41,7 +41,7 @@ foreach ($rs as $key => $value) { echo '
    - {[ "type": "select", "label": "'.tr('Intervento').'", "name": "idintervento", "required": 1, "values": "json='.substr(str_replace('"', '\"', json_encode($rs)), 2, -2).'", "extra": "onchange=\"$data = $(this).selectData(); $(\'#descrizione\').val($data.descrizione); $(\'#prezzo\').val($data.prezzo);\"" ]} + {[ "type": "select", "label": "'.tr('Intervento').'", "name": "idintervento", "required": 1, "values": '.json_encode($rs).', "extra": "onchange=\"$data = $(this).selectData(); $(\'#descrizione\').val($data.descrizione); $(\'#prezzo\').val($data.prezzo);\"" ]}
    '; diff --git a/modules/fatture/crea_documento.php b/modules/fatture/crea_documento.php index bc3d69724..fd5b002f3 100644 --- a/modules/fatture/crea_documento.php +++ b/modules/fatture/crea_documento.php @@ -119,7 +119,7 @@ if (!empty($rs)) { echo ' - + '; @@ -144,7 +144,7 @@ if (!empty($rs)) { // Q.tà da evadere echo ' - {[ "type": "number", "name": "qta_da_evadere['.$r['id'].']", "id": "qta_'.$i.'", "required": 1, "value": "'.$r['qta_rimanente'].'", "extra" : "onkeyup=\"ricalcola_subtotale_riga('.$i.');\"", "decimals": "qta|0" ]} + {[ "type": "number", "name": "qta_da_evadere['.$r['id'].']", "id": "qta_'.$i.'", "required": 1, "value": "'.$r['qta_rimanente'].'", "extra" : "onkeyup=\"ricalcola_subtotale_riga('.$i.');\"", "decimals": "qta", "min-value": "0" ]} '; // Subtotale diff --git a/src/HTMLBuilder/HTMLBuilder.php b/src/HTMLBuilder/HTMLBuilder.php index ae0ba9882..2575879ae 100644 --- a/src/HTMLBuilder/HTMLBuilder.php +++ b/src/HTMLBuilder/HTMLBuilder.php @@ -88,6 +88,7 @@ class HTMLBuilder */ public static function replace($html) { + // Gestione dei manager generici preg_match_all('/'.preg_quote(self::$open['manager']).'(.+?)'.preg_quote(self::$close['manager']).'/is', $html, $managers); foreach ($managers[0] as $value) { @@ -99,6 +100,7 @@ class HTMLBuilder $html = str_replace($value, !empty($result) ? $result : $value, $html); } + // Gestione del formato di input HTML semplificato preg_match_all('/'.preg_quote(self::$open['handler']).'(.+?)'.preg_quote(self::$close['handler']).'/is', $html, $handlers); foreach ($handlers[0] as $value) { @@ -155,10 +157,10 @@ class HTMLBuilder { $string = '{'.substr($string, strlen(self::$open[$type]), -strlen(self::$close[$type])).'}'; - // Fix per contenuti con newline integrate + // Fix per contenuti con newline integrati $string = str_replace(["\n", "\r"], ['\\n', '\\r'], $string); - $json = (array) json_decode($string, true, 2); + $json = (array) json_decode($string, true); return $json; } @@ -212,7 +214,7 @@ class HTMLBuilder // Attributi normali foreach ($json as $key => $value) { - $values[trim($key)] = trim($value); + $values[trim($key)] = is_string($value) ? trim($value) : $value; } // Valori particolari diff --git a/src/HTMLBuilder/Handler/ChoicesHandler.php b/src/HTMLBuilder/Handler/ChoicesHandler.php index 4fd008887..25649b2d8 100644 --- a/src/HTMLBuilder/Handler/ChoicesHandler.php +++ b/src/HTMLBuilder/Handler/ChoicesHandler.php @@ -3,33 +3,50 @@ namespace HTMLBuilder\Handler; /** + * Gestione dell'input di tipo "checkbox". + * * @since 2.3 */ class ChoicesHandler implements HandlerInterface { public function handle(&$values, &$extras) { + // Delega della gestione al metodo specifico per il tipo di input richiesto $result = $this->{$values['type']}($values, $extras); return $result; } + /** + * Gestione dell'input di tipo "checkbox". + * Esempio: {[ "type": "checkbox", "label": "Checkbox di test", "placeholder": "Test", "name": "checkbox", "value": "1" ]}. + * + * @param array $values + * @param array $extras + * + * @return string + */ protected function checkbox(&$values, &$extras) { unset($values['class'][0]); + // Restrizione dei valori permessi $values['value'] = (empty($values['value']) || $values['value'] == 'off') ? false : true; + // Gestione della proprietà "checked" if (!empty($values['value']) && !in_array('checked', $extras)) { $extras[] = 'checked'; } + // Gestione della proprietà "readonly" if (in_array('readonly', $extras)) { $extras[] = 'disabled'; } - $values['placeholder'] = (isset($values['placeholder'])) ? $values['placeholder'] : $values['label']; + // Gestione dei placeholder + $values['placeholder'] = isset($values['placeholder']) ? $values['placeholder'] : $values['label']; + // Generazione del codice HTML $result .= '
    diff --git a/src/HTMLBuilder/Handler/DateHandler.php b/src/HTMLBuilder/Handler/DateHandler.php index f27d03270..20f13aa6e 100644 --- a/src/HTMLBuilder/Handler/DateHandler.php +++ b/src/HTMLBuilder/Handler/DateHandler.php @@ -3,6 +3,8 @@ namespace HTMLBuilder\Handler; /** + * Gestione dell'input di tipo "timestamp", "date" e "time". + * * @since 2.3 */ class DateHandler implements HandlerInterface @@ -10,26 +12,34 @@ class DateHandler implements HandlerInterface public function handle(&$values, &$extras) { // Impostazione alla data corrente se il contenuto corrisponde a "now" - if ($values['value'] == '-now-') { - $values['value'] = date(\Translator::getFormatter()->getStandardFormats()['timestamp']); - } - - if ($values['max-date'] == '-now-') { - $values['max-date'] = date(\Translator::getFormatter()->getStandardFormats()['timestamp']); - } - - if ($values['min-date'] == '-now-') { - $values['min-date'] = date(\Translator::getFormatter()->getStandardFormats()['timestamp']); + $detect = [ + 'value', + 'max-date', + 'min-date', + ]; + foreach ($detect as $attr) { + if ($values[$attr] == '-now-') { + $values[$attr] = date(\Translator::getFormatter()->getStandardFormats()['timestamp']); + } } + // Restrizione dei valori permessi + // Timestamp if ($values['type'] == 'timestamp' && \Translator::getFormatter()->isStandardTimestamp($values['value'])) { $values['value'] = \Translator::timestampToLocale($values['value']); - } elseif ($values['type'] == 'date' && \Translator::getFormatter()->isStandardDate($values['value'])) { + } + + // Data + elseif ($values['type'] == 'date' && \Translator::getFormatter()->isStandardDate($values['value'])) { $values['value'] = \Translator::dateToLocale($values['value']); - } elseif ($values['type'] == 'time' && \Translator::getFormatter()->isStandardTime($values['value'])) { + } + + // Orario + elseif ($values['type'] == 'time' && \Translator::getFormatter()->isStandardTime($values['value'])) { $values['value'] = \Translator::timeToLocale($values['value']); } + // Controllo sulla correttezza sintattica del valore impostato if (!( ($values['type'] == 'timestamp' && \Translator::getFormatter()->isFormattedTimestamp($values['value'])) || ($values['type'] == 'date' && \Translator::getFormatter()->isFormattedDate($values['value'])) || @@ -38,10 +48,12 @@ class DateHandler implements HandlerInterface $values['value'] = ''; } + // Delega della gestione al metodo specifico per il tipo di input richiesto $result = $this->{$values['type']}($values, $extras); $values['type'] = 'text'; + // Generazione del codice HTML di default if (empty($result)) { $result = ' '; @@ -50,6 +62,15 @@ class DateHandler implements HandlerInterface return $result; } + /** + * Gestione dell'input di tipo "timestamp". + * Esempio: {[ "type": "timestamp", "label": "Timestamp di test", "name": "timestamp", "value": "2018-01-01 12:00:30" ]}. + * + * @param array $values + * @param array $extras + * + * @return string + */ protected function timestamp(&$values, &$extras) { $values['class'][] = 'text-center'; @@ -57,6 +78,15 @@ class DateHandler implements HandlerInterface $values['class'][] = 'timestamp-mask'; } + /** + * Gestione dell'input di tipo "date". + * Esempio: {[ "type": "date", "label": "Data di test", "name": "date", "value": "2018-01-01" ]}. + * + * @param array $values + * @param array $extras + * + * @return string + */ protected function date(&$values, &$extras) { $values['class'][] = 'text-center'; @@ -64,6 +94,15 @@ class DateHandler implements HandlerInterface $values['class'][] = 'date-mask'; } + /** + * Gestione dell'input di tipo "time". + * Esempio: {[ "type": "time", "label": "Orario di test", "name": "time", "value": "12:00:30" ]}. + * + * @param array $values + * @param array $extras + * + * @return string + */ protected function time(&$values, &$extras) { $values['class'][] = 'text-center'; diff --git a/src/HTMLBuilder/Handler/DefaultHandler.php b/src/HTMLBuilder/Handler/DefaultHandler.php index adcb9bc78..af19167e1 100644 --- a/src/HTMLBuilder/Handler/DefaultHandler.php +++ b/src/HTMLBuilder/Handler/DefaultHandler.php @@ -3,37 +3,98 @@ namespace HTMLBuilder\Handler; /** + * Gestione dell'input di tipo "text", "file", "password", "email", "number", "textarea" e "hidden". + * * @since 2.3 */ class DefaultHandler implements HandlerInterface { public function handle(&$values, &$extras) { + // Delega della gestione al metodo specifico per il tipo di input richiesto if (in_array($values['type'], get_class_methods($this))) { $result = $this->{$values['type']}($values, $extras); - } else { + } + + // Caso non previsto + else { $result = $this->custom($values, $extras); } return $result; } + /** + * 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 ' + |value|'; + } + + /** + * 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 + */ protected function text(&$values, &$extras) { + // Generazione del codice HTML return ' '; } + /** + * 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 + */ protected function file(&$values, &$extras) { + // Delega al metodo "text", per la generazione del codice HTML return $this->text($values, $extras); } + /** + * 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 + */ protected function password(&$values, &$extras) { + // Delega al metodo "text", per la generazione del codice HTML return $this->text($values, $extras); } + /** + * 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 + */ protected function hidden(&$values, &$extras) { $original = $values; @@ -44,54 +105,81 @@ class DefaultHandler implements HandlerInterface $values['name'] = $original['name']; $values['class'] = []; + // Delega al metodo "text", per la generazione del codice HTML return $this->text($values, $extras); } + /** + * 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 + */ protected function email(&$values, &$extras) { $values['class'][] = 'email-mask'; $values['type'] = 'text'; + // Delega al metodo "text", per la generazione del codice HTML return $this->text($values, $extras); } + /** + * 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 + */ protected function number(&$values, &$extras) { $values['class'][] = 'inputmask-decimal'; $values['value'] = !empty($values['value']) ? $values['value'] : 0; + // Gestione della precisione (numero specifico, oppure "qta" per il valore previsto nell'impostazione "Cifre decimali per quantità"). $decimals = null; if (isset($values['decimals'])) { if (is_numeric($values['decimals'])) { $decimals = $values['decimals']; } elseif (starts_with($values['decimals'], 'qta')) { - $parts = explode('|', $values['decimals']); - $values['min-value'] = isset($parts[1]) ? $parts[1] : 1; + // Se non è previsto un valore minimo, lo imposta a 1 + $values['min-value'] = isset($values['min-value']) ? $values['min-value'] : 1; $decimals = \Settings::get('Cifre decimali per quantità'); $values['decimals'] = $decimals; } } + // Controllo sulla correttezza sintattica del valore impostato $values['value'] = (\Translator::getFormatter()->isStandardNumber($values['value'])) ? \Translator::numberToLocale($values['value'], $decimals) : $values['value']; $values['type'] = 'text'; + // Delega al metodo "text", per la generazione del codice HTML return $this->text($values, $extras); } - protected function custom(&$values, &$extras) - { - return ' - |value|'; - } - + /** + * 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 + */ protected function textarea(&$values, &$extras) { $values['class'][] = 'autosize'; + // Generazione del codice HTML return ' '; } diff --git a/src/HTMLBuilder/Handler/HandlerInterface.php b/src/HTMLBuilder/Handler/HandlerInterface.php index 3efd229d6..af553072b 100644 --- a/src/HTMLBuilder/Handler/HandlerInterface.php +++ b/src/HTMLBuilder/Handler/HandlerInterface.php @@ -3,10 +3,19 @@ namespace HTMLBuilder\Handler; /** + * Intefaccia utilizzata per interagire con la classe HTMLBuilder. * * @since 2.3 */ interface HandlerInterface { + /** + * Gestore pubblico, liberamente implementabile per la creazione del codice HTML. + * + * @param array $values + * @param array $extras + * + * @return string + */ public function handle(&$values, &$extras); } diff --git a/src/HTMLBuilder/Handler/MediaHandler.php b/src/HTMLBuilder/Handler/MediaHandler.php index 1437a3f22..4eb0a9cb3 100644 --- a/src/HTMLBuilder/Handler/MediaHandler.php +++ b/src/HTMLBuilder/Handler/MediaHandler.php @@ -3,33 +3,49 @@ namespace HTMLBuilder\Handler; /** + * Gestione dell'input di tipo "image". + * * @since 2.3 */ class MediaHandler implements HandlerInterface { + public function handle(&$values, &$extras) + { + // Delega della gestione al metodo specifico per il tipo di input richiesto + $result = $this->{$values['type']}($values, $extras); + + return $result; + } + /** - * @since 2.3 + * Gestione dell'input di tipo "image". + * Esempio: {[ "type": "image", "label": "Immagine di test", "name": "image", "class": "img-thumbnail", "value": "image_path" ]}. * * @param array $values * @param array $extras * * @return string */ - public function handle(&$values, &$extras) + public function image(&$values, &$extras) { unset($values['class'][0]); - // Form upload + // Valore non imposato if (empty($values['value'])) { $values['type'] = 'file'; + // Generazione del codice HTML return ' '; - } else { - // Visualizzazione dell'immagine e della relativa spunta per la cancellazione + } + + // Valore presente + // Visualizzazione dell'immagine e della relativa spunta per la cancellazione + else { $values['class'][] = 'img-thumbnail'; $values['class'][] = 'img-responsive'; + // Generazione del codice HTML return '