diff --git a/actions.php b/actions.php index 3c8290a62..cc5af7de8 100644 --- a/actions.php +++ b/actions.php @@ -10,7 +10,7 @@ $upload_dir = DOCROOT.'/'.Uploads::getDirectory($id_module, $id_plugin); $database->beginTransaction(); -// GESTIONE UPLOAD +// Upload allegati e rimozione if (filter('op') == 'link_file' || filter('op') == 'unlink_file') { // Controllo sui permessi di scrittura per il modulo if (Modules::getPermission($id_module) != 'rw') { @@ -65,11 +65,36 @@ if (filter('op') == 'link_file' || filter('op') == 'unlink_file') { redirect(ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$id_record.((!empty($options['id_plugin'])) ? '#tab_'.$options['id_plugin'] : '')); } -} elseif (filter('op') == 'download_file') { +} + +// Download allegati +elseif (filter('op') == 'download_file') { $rs = $dbo->fetchArray('SELECT * FROM zz_files WHERE id_module='.prepare($id_module).' AND id='.prepare(filter('id')).' AND filename='.prepare(filter('filename'))); download($upload_dir.'/'.$rs[0]['filename'], $rs[0]['original']); -} elseif (post('op') == 'send-email') { +} + +// Validazione dati +elseif (filter('op') == 'validate') { + // Lettura informazioni di base + $init = $structure->filepath('init.php'); + if (!empty($init)) { + include_once $init; + } + + // Validazione del campo + $validation = $structure->filepath('validation.php'); + if (!empty($validation)) { + include_once $validation; + } + + echo json_encode($response); + + return; +} + +// Invio email +elseif (post('op') == 'send-email') { $id_template = post('template'); // Inizializzazione diff --git a/lib/functions.php b/lib/functions.php index 5d1bda6e3..3d7c91f32 100644 --- a/lib/functions.php +++ b/lib/functions.php @@ -201,12 +201,12 @@ function translateTemplate() $template = ob_get_clean(); + $template = \HTMLBuilder\HTMLBuilder::replace($template); + $template = str_replace('$id_module$', $id_module, $template); $template = str_replace('$id_plugin$', $id_plugin, $template); $template = str_replace('$id_record$', $id_record, $template); - $template = \HTMLBuilder\HTMLBuilder::replace($template); - // Informazioni estese sulle azioni dell'utente if (!empty(post('op')) && post('op') != 'send-email') { operationLog(post('op')); diff --git a/modules/anagrafiche/add.php b/modules/anagrafiche/add.php index b04418e08..9a27b563f 100644 --- a/modules/anagrafiche/add.php +++ b/modules/anagrafiche/add.php @@ -48,11 +48,11 @@ echo '
- {[ "type": "text", "label": "'.tr('Partita IVA').'", "maxlength": 13, "name": "piva", "class": "text-center alphanumeric-mask" ]} + {[ "type": "text", "label": "'.tr('Partita IVA').'", "maxlength": 13, "name": "piva", "class": "text-center alphanumeric-mask", "validation": "partita_iva"]}
- {[ "type": "text", "label": "'.tr('Codice fiscale').'", "maxlength": 16, "name": "codice_fiscale", "class": "text-center alphanumeric-mask" ]} + {[ "type": "text", "label": "'.tr('Codice fiscale').'", "maxlength": 16, "name": "codice_fiscale", "class": "text-center alphanumeric-mask", "validation": "codice_fiscale" ]}
diff --git a/modules/anagrafiche/edit.php b/modules/anagrafiche/edit.php index 25b3f1465..0f814eb5a 100644 --- a/modules/anagrafiche/edit.php +++ b/modules/anagrafiche/edit.php @@ -43,7 +43,7 @@ if (!$cliente) {
- {[ "type": "text", "label": "", "maxlength": 13, "name": "piva", "class": "text-center alphanumeric-mask text-uppercase", "value": "$piva$" ]} + {[ "type": "text", "label": "", "maxlength": 13, "name": "piva", "class": "text-center alphanumeric-mask text-uppercase", "value": "$piva$", "validation": "partita_iva" ]}
@@ -62,7 +62,7 @@ if (!$cliente) {
- {[ "type": "text", "label": "", "maxlength": 16, "name": "codice_fiscale", "class": "text-center alphanumeric-mask text-uppercase", "value": "$codice_fiscale$" ]} + {[ "type": "text", "label": "", "maxlength": 16, "name": "codice_fiscale", "class": "text-center alphanumeric-mask text-uppercase", "value": "$codice_fiscale$", "validation": "codice_fiscale" ]}
@@ -90,7 +90,7 @@ if (!$cliente) {
- {[ "type": "text", "label": "", "name": "codice", "required": 1, "class": "text-center alphanumeric-mask", "value": "$codice$", "maxlength": 20 ]} + {[ "type": "text", "label": "", "name": "codice", "required": 1, "class": "text-center alphanumeric-mask", "value": "$codice$", "maxlength": 20, "validation": "codice" ]}
diff --git a/modules/anagrafiche/validation.php b/modules/anagrafiche/validation.php new file mode 100644 index 000000000..ff04f1a8a --- /dev/null +++ b/modules/anagrafiche/validation.php @@ -0,0 +1,73 @@ +', $id_record], + ])->count() == 0; + + $message = $disponibile ? tr('Il codice è disponbile') : tr("Il codice è già utilizzato in un'altra anagrafica"); + + $response = [ + 'result' => $disponibile, + 'message' => $message, + ]; + + break; + + case 'codice_fiscale': + $disponibile = Anagrafica::where([ + ['codice_fiscale', $value], + ['idanagrafica', '<>', $id_record], + ])->count() == 0; + + $message = $disponibile ? tr('Il codice fiscale non è già inserito in una anagrafica') : tr("Il codice fiscale è già utilizzato in un'altra anagrafica"); + + // Validazione del Codice Fiscale, solo per anagrafiche Private e Aziende, ignoro controllo se codice fiscale e settato uguale alla p.iva + if (empty($anagrafica) || ($anagrafica->tipo != 'Ente pubblico' && $value != $anagrafica->partita_iva)) { + $check = Validate::isValidTaxCode($value); + if (empty($check)) { + $message .= '. '.tr('Attenzione: il codice fiscale _COD_ potrebbe non essere valido', [ + '_COD_' => $value, + ]); + } + } + + $response = [ + 'result' => $disponibile, + 'message' => $message, + ]; + + break; + + case 'partita_iva': + $disponibile = Anagrafica::where([ + ['piva', $value], + ['idanagrafica', '<>', $id_record], + ])->count() == 0; + + $message = $disponibile ? tr('La partita iva non è già inserita in una anagrafica') : tr('La partita iva è già utilizzata in un altro articolo'); + + $partita_iva = !empty($anagrafica) && is_numeric($value) ? $anagrafica->nazione->iso2.$value : $value; + + $check = Validate::isValidVatNumber($partita_iva); + if (empty($check)) { + $message .= '. '.tr('Attenzione: la partita IVA _IVA_ potrebbe non essere valida', [ + '_IVA_' => $partita_iva, + ]); + } + + $response = [ + 'result' => $disponibile, + 'message' => $message, + ]; + + break; +} diff --git a/modules/articoli/edit.php b/modules/articoli/edit.php index 701009b8e..8ec7a560d 100644 --- a/modules/articoli/edit.php +++ b/modules/articoli/edit.php @@ -30,7 +30,7 @@ if (!empty($record['immagine'])) {
- {[ "type": "text", "label": "", "name": "codice", "required": 1, "value": "$codice$" ]} + {[ "type": "text", "label": "", "name": "codice", "required": 1, "value": "$codice$", "validation": "codice" ]}
{[ "type": "select", "label": "", "name": "categoria", "required": 1, "value": "$id_categoria$", "ajax-source": "categorie" ]}
@@ -451,4 +451,4 @@ if (!empty($elementi)) { \ No newline at end of file +?> diff --git a/modules/articoli/validation.php b/modules/articoli/validation.php new file mode 100644 index 000000000..597bf6570 --- /dev/null +++ b/modules/articoli/validation.php @@ -0,0 +1,25 @@ +', $id_record], + ])->count() == 0; + + $message = $disponibile ? tr('Il codice è disponbile') : tr('Il codice è già utilizzato in un altro articolo'); + + $response = [ + 'result' => $disponibile, + 'message' => $message, + ]; + + break; +} diff --git a/src/HTMLBuilder/Wrapper/HTMLWrapper.php b/src/HTMLBuilder/Wrapper/HTMLWrapper.php index 1ae28f1f8..893966d50 100644 --- a/src/HTMLBuilder/Wrapper/HTMLWrapper.php +++ b/src/HTMLBuilder/Wrapper/HTMLWrapper.php @@ -24,7 +24,7 @@ class HTMLWrapper implements WrapperInterface '; } - if (!empty($values['icon-before']) || !empty($values['icon-after'])) { + if (!empty($values['icon-before']) || !empty($values['icon-after']) || !empty($values['validation'])) { $result .= '
'; @@ -39,14 +39,24 @@ class HTMLWrapper implements WrapperInterface public function after(&$values, &$extras) { + $rand = rand(0, 99); + $pseudo_id = $values['id'].$rand; + $result = ''; - if (!empty($values['icon-before']) || !empty($values['icon-after'])) { + if (!empty($values['icon-before']) || !empty($values['icon-after']) || !empty($values['validation'])) { if (!empty($values['icon-after'])) { $result .= ' '.$values['icon-after'].''; } + if (!empty($values['validation'])) { + $result .= ' + + + '; + } + $result .= '
'; @@ -63,9 +73,7 @@ class HTMLWrapper implements WrapperInterface unset($values['show-help']); } - $rand = rand(0, 99); - - $values['data-parsley-errors-container'] = '#'.$values['id'].$rand.'-errors'; + $values['data-parsley-errors-container'] = '#'.$pseudo_id.'-errors'; $result .= '
'; @@ -76,6 +84,57 @@ class HTMLWrapper implements WrapperInterface unset($values['label']); } + if (!empty($values['validation'])) { + $result .= ' + '; + } + return $result; }