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;
}