diff --git a/docs/Moduli.md b/docs/Moduli.md index eb3624b98..d692d9de2 100644 --- a/docs/Moduli.md +++ b/docs/Moduli.md @@ -221,13 +221,13 @@ $dbo->query("DROP TABLE `tabella`"); Il file `MODULE` è infine il diretto responsabile dell'installazione del modulo poiché definisce tutti i valori caratteristici dello stesso; in caso di sua assenza la cartella compressa viene considerata non corretta. ```ini -module_name = "Nome del modulo" -module_version = "Versione del modulo" -module_directory = "Cartella di installazione del modulo" -module_options = "Operazione da eseguire all'apertura del modulo" -module_icon = "Icona del modulo (Font-Awesome)" -module_compatibility = "Compatibilità del modulo" -module_parent = "Genitore del modulo" +name = "Nome del modulo" +version = "Versione del modulo" +directory = "Cartella di installazione del modulo" +options = "Operazione da eseguire all'apertura del modulo" +icon = "Icona del modulo (Font-Awesome)" +compatibility = "Compatibilità del modulo" +parent = "Genitore del modulo" ``` ## Moduli di base diff --git a/modules/aggiornamenti/upload_modules.php b/modules/aggiornamenti/upload_modules.php index b801cb19a..631d385a7 100644 --- a/modules/aggiornamenti/upload_modules.php +++ b/modules/aggiornamenti/upload_modules.php @@ -6,113 +6,106 @@ if (!get_var('Attiva aggiornamenti')) { die(tr('Accesso negato')); } -$tmp = $_FILES['blob']['tmp_name']; -$filename = $_FILES['blob']['name']; -$filetype = $_FILES['blob']['type']; -$size = $_FILES['blob']['size']; -$type = $_POST['type']; - if (!extension_loaded('zip')) { $_SESSION['errors'][] = tr('Estensione zip non supportata!').'
'.tr('Verifica e attivala sul tuo file _FILE_', [ '_FILE_' => 'php.ini', ]); -} elseif (!ends_with($filename, '.zip')) { - $_SESSION['errors'][] = tr('Il file non è un archivio zip!'); -} elseif (!empty($tmp) && is_file($tmp)) { - $zip = new ZipArchive(); - if ($zip->open($tmp)) { - $tmp_dir = $docroot.'/tmp'; - - // Controllo sulla cartella - directory($tmp_dir); - - $zip->extractTo($tmp_dir); - - // AGGIORNAMENTO - if ('update' == $type) { - // Salvo i file di configurazione e versione attuale - $old_config = file_get_contents($docroot.'/config.inc.php'); - - // Aggiornamento del CORE - if (file_exists($tmp_dir.'/VERSION')) { - //rename($docroot.'/VERSION', $docroot.'/VERSION.old'); - - // Copia i file dalla cartella temporanea alla root - copyr($tmp_dir, $docroot); - - // Scollego l'utente per eventuali aggiornamenti del db - Auth::logout(); - } - - // Aggiornamento di un MODULO - elseif (file_exists($tmp_dir.'/MODULE')) { - $module_info = parse_ini_file($tmp_dir.'/MODULE', true); - $module_name = $module_info['module_name']; - $module_dir = $module_info['module_directory']; - - // Copio i file nella cartella "modules//" - copyr($tmp_dir, $docroot.'/modules/'.$module_dir.'/'); - - // Rinomino il file di versione per forzare l'aggiornamento - //rename($docroot.'/VERSION_'.$module, $docroot.'/VERSION_'.$module.'.old'); - - // Scollego l'utente per eventuali aggiornamenti del db - Auth::logout(); - } else { - $_SESSION['errors'][] = tr('File di aggiornamento non riconosciuto!'); - } - - // Ripristino il file di configurazione dell'utente - file_put_contents($docroot.'/config.inc.php', $old_config); - } - - // NUOVO MODULO - elseif ('new' == $type) { - // Se non c'è il file MODULE non é un modulo - if (is_file($tmp_dir.'/MODULE')) { - // Leggo le info dal file di configurazione del modulo - $module_info = parse_ini_file($tmp_dir.'/MODULE', true); - $module_name = $module_info['module_name']; - $module_version = $module_info['module_version']; - $module_dir = $module_info['module_directory']; - - // Copio i file nella cartella "modules//" - copyr($tmp_dir, $docroot.'/modules/'.$module_dir.'/'); - - // Scollego l'utente per eventuali aggiornamenti del db - Auth::logout(); - - // Sposto i file della cartella "files/" nella root - $files_dir = $docroot.'/modules/'.$module_dir.'/files/'; - if (is_dir($files_dir)) { - copyr($files_dir, $docroot.'/files'); - delete($files_dir); - } - - // Inserimento delle voci del modulo nel db per ogni sezione [sezione] - // Verifico che il modulo non esista già - $n = $dbo->fetchNum('SELECT name FROM zz_modules WHERE name='.prepare($module_name)); - - if (0 == $n) { - $module_info['module_parent'] = $dbo->fetchNum('SELECT name FROM zz_modules WHERE id='.prepare($module_info['module_parent'])) ? prepare($module_info['module_parent']) : 'NULL'; - - $query = 'INSERT INTO zz_modules(`name`, `title`, `directory`, `options`, `icon`, `version`, `compatibility`, `order`, `parent`, `default`, `enabled`) VALUES('.prepare($module_name).', '.prepare($module_name).', '.prepare($module_dir).', '.prepare($module_info['module_options']).', '.prepare($module_info['module_icon']).', '.prepare($module_version).', '.prepare($module_info['module_compatibility']).', "100", '.$module_info['module_parent'].', 0, 1)'; - $dbo->query($query); - } - } - - // File zip non contiene il file MODULE - else { - $_SESSION['errors'][] = tr('File di installazione non valido!'); - } - } - - delete($tmp_dir); - redirect($rootdir); - } else { - $_SESSION['errors'][] = checkZip($tmp); - } - - $zip->close(); + return; } + +$file = $_FILES['blob']; +$type = $_POST['type']; + +// Lettura dell'archivio +$zip = new ZipArchive(); +if (!$zip->open($file['tmp_name'])) { + $_SESSION['errors'][] = checkZip($file['tmp_name']); + + return; +} + +// Percorso di estrazione +$extraction_dir = $docroot.'/tmp'; +directory($extraction_dir); + +// Estrazione dell'archivio +$zip->extractTo($extraction_dir); + +// Aggiornamento del progetto +if (file_exists($extraction_dir.'/VERSION')) { + // Salva il file di configurazione + $config = file_get_contents($docroot.'/config.inc.php'); + + // Copia i file dalla cartella temporanea alla root + copyr($extraction_dir, $docroot); + + // Ripristina il file di configurazione dell'installazione + file_put_contents($docroot.'/config.inc.php', $config); +} + +// Installazione/aggiornamento di un modulo +elseif (file_exists($extraction_dir.'/MODULE')) { + // Leggo le info dal file di configurazione del modulo + $info = Util\Ini::readFile($extraction_dir.'/MODULE'); + + // Copio i file nella cartella "modules//" + copyr($extraction_dir, $docroot.'/modules/'.$info['directory']); + + // Verifico se il modulo non esista già + $installed = Modules::get($info['name']); + if (empty($installed)) { + $info['parent'] = Modules::get($info['parent']) ? $info['parent'] : null; + + $dbo->insert('zz_modules', [ + 'name' => $info['name'], + 'title' => !empty($info['title']) ? $info['title'] : $info['name'], + 'directory' => $info['directory'], + 'options' => $info['options'], + 'version' => $info['version'], + 'compatibility' => $info['compatibility'], + 'order' => 100, + 'parent' => $info['parent'], + 'default' => 0, + 'enabled' => 1, + ]); + } +} + +// Installazione/aggiornamento di un plugin +elseif (file_exists($extraction_dir.'/PLUGIN')) { + // Leggo le info dal file di configurazione del modulo + $info = Util\Ini::readFile($extraction_dir.'/PLUGIN'); + + // Copio i file nella cartella "modules//" + copyr($extraction_dir, $docroot.'/plugins/'.$info['directory']); + + // Verifico se il modulo non esista già + $installed = Plugins::get($info['name']); + if (empty($installed)) { + $info['parent'] = Plugins::get($info['parent']) ? $info['parent'] : null; + + $dbo->insert('zz_plugins', [ + 'name' => $info['name'], + 'title' => !empty($info['title']) ? $info['title'] : $info['name'], + 'directory' => $info['directory'], + 'options' => $info['options'], + 'version' => $info['version'], + 'compatibility' => $info['compatibility'], + 'order' => 100, + 'parent' => $info['parent'], + 'default' => 0, + 'enabled' => 1, + ]); + } +} + +// File di installazione non valido +else { + $_SESSION['errors'][] = tr('File di installazione non valido!'); +} + +delete($extraction_dir); +redirect($rootdir); + +$zip->close(); diff --git a/modules/articoli/plugins/articoli.lotti.php b/modules/articoli/plugins/articoli.lotti.php index 6a5024f9a..fa1dada24 100644 --- a/modules/articoli/plugins/articoli.lotti.php +++ b/modules/articoli/plugins/articoli.lotti.php @@ -16,14 +16,10 @@ $search_serial = get('search_serial'); $search_altro = get('search_altro'); // Calcolo prossimo lotto e serial number -$rs = $dbo->fetchArray('SELECT MAX(lotto) AS max_lotto, MAX(serial) AS max_serial, MAX(altro) AS max_altro FROM mg_prodotti WHERE id_articolo='.prepare($id_record)); -//$max_lotto = $rs[0]['max_lotto']; -$max_serial = $rs[0]['max_serial']; -//$max_altro = $rs[0]['max_altro']; +$rs = $dbo->fetchArray('SELECT serial FROM mg_prodotti WHERE id_articolo='.prepare($id_record).' ORDER BY id DESC LIMIT 0,1'); +$max_serial = $rs[0]['serial']; -//$next_lotto = get_next_code($max_lotto); $next_serial = get_next_code($max_serial); -//$next_altro = get_next_code($max_altro); echo '
@@ -38,90 +34,53 @@ echo ' '; -/* -// Lotto -echo ' -
- -
- -
- - -
- -
'; -if (!empty($max_lotto)) { - echo ' -
-

'.tr('Ultimo lotto inserito').': '.$max_lotto.'

-
'; -} -echo ' -
'; -*/ // Serial echo '
+
- + +
'; if (!empty($max_serial)) { echo ' -
+

'.tr('Ultimo serial number inserito').': '.$max_serial.'

'; } echo '
'; -/* -// Altro -echo ' -
- -
- -
- - -
- -
'; -if (!empty($max_altro)) { - echo ' -
-

'.tr('Ultimo codice aggiuntivo inserito').': '.$max_altro.'

-
'; -} -echo ' -
'; -*/ - // Totale prodotti da inserire echo '
-

'.tr('Totale prodotti da inserire').': 0

- '; +

'.tr('Totale prodotti da inserire').': 0

+ + +
+
'; // Visualizzo, in base alle impostazioni scelte, se il magazzino verrà movimentato -if (get_var("Movimenta il magazzino durante l'inserimento o eliminazione dei lotti/serial number") == true) { +if (get_var("Movimenta il magazzino durante l'inserimento o eliminazione dei lotti/serial number")) { echo ' - '.tr("L'inserimento incrementerà la quantità dell'articolo!").''; + '.tr("L'inserimento incrementerà la quantità dell'articolo!").''; } else { echo ' - '.tr("L'inserimento non movimenterà la quantità dell'articolo!").''; + '.tr("L'inserimento non movimenterà la quantità dell'articolo!").''; } echo ' +