Procedura di aggiornamento

This commit is contained in:
Thomas Zilio 2018-07-04 15:38:10 +02:00
parent f533383a02
commit 475b3af96c
3 changed files with 121 additions and 169 deletions

View File

@ -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

View File

@ -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!').'<br>'.tr('Verifica e attivala sul tuo file _FILE_', [
'_FILE_' => '<b>php.ini</b>',
]);
} 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/<nomemodulo>/"
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/<nomemodulo>/"
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/<directory>/"
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/<directory>/"
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();

View File

@ -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 '
<form action="" method="post" role="form">
@ -38,90 +34,53 @@ echo '
</div>
</div>';
/*
// Lotto
echo '
<div class="row form-group">
<label class="col-md-2 control-label" for="lotto_start">'.tr('Lotto da').':</label>
<div class="col-md-2">
<input type="text" class="form-control input-md" name="lotto_start" onkeyup="$(\'input[name=lotto_end]\').val( $(\'input[name=lotto_start]\').val() ); $(\'#warn_lotto\').hide(); ricalcola_totale_prodotti();" value="'.$next_lotto.'">
</div>
<label class="col-md-1 control-label text-center" for="lotto_end"> <i class="fa fa-arrow-circle-right fa-2x"></i> </label>
<div class="col-md-2">
<input type="text" class="form-control input-md" name="lotto_end" onkeyup="check_progressivo( $(\'input[name=lotto_start]\'), $(\'input[name=lotto_end]\'), $(\'#warn_lotto\'), $(\'#inserisci\') );" value="'.$next_lotto.'">
</div>';
if (!empty($max_lotto)) {
echo '
<div class="col-md-3">
<p id="warn_lotto" class="text-danger"><b>'.tr('Ultimo lotto inserito').': </b> '.$max_lotto.'</p>
</div>';
}
echo '
</div>';
*/
// Serial
echo '
<div class="row form-group">
<label class="col-md-2 control-label" for="serial_start">'.tr('Serial number da').':</label>
<div class="col-md-2">
<input type="text" class="form-control input-md" name="serial_start" onkeyup="$(\'input[name=serial_end]\').val( $(\'input[name=serial_start]\').val() ); $(\'#warn_serial\').hide(); ricalcola_totale_prodotti();" value="'.$next_serial.'" />
</div>
<label class="col-md-1 control-label text-center" for="serial_end"> <i class="fa fa-arrow-circle-right fa-2x"></i> </label>
<label class="col-md-1 control-label text-center" for="serial_end">
<i class="fa fa-arrow-circle-right fa-2x"></i>
</label>
<div class="col-md-2">
<input type="text" class="form-control input-md" name="serial_end" onkeyup="check_progressivo( $(\'input[name=serial_start]\'), $(\'input[name=serial_end]\'), $(\'#warn_serial\'), $(\'#inserisci\') );" value="'.$next_serial.'" />
</div>';
if (!empty($max_serial)) {
echo '
<div class="col-md-3">
<div class="col-md-5">
<p id="warn_serial" class="text-danger"><b>'.tr('Ultimo serial number inserito').': </b> '.$max_serial.'</p>
</div>';
}
echo '
</div>';
/*
// Altro
echo '
<div class="row form-group">
<label class="col-md-2 control-label" for="altro_start">'.tr('Altro codice da').':</label>
<div class="col-md-2">
<input type="text" class="form-control input-md" name="altro_start" onkeyup="$(\'input[name=altro_end]\').val( $(\'input[name=altro_start]\').val() ); $(\'#warn_altro\').hide(); ricalcola_totale_prodotti();" value="'.$next_altro.'" />
</div>
<label class="col-md-1 control-label text-center" for="altro_end"> <i class="fa fa-arrow-circle-right fa-2x"></i> </label>
<div class="col-md-2">
<input type="text" class="form-control input-md" name="altro_end" onkeyup="check_progressivo( $(\'input[name=altro_start]\'), $(\'input[name=altro_end]\'), $(\'#warn_altro\'), $(\'#inserisci\') );" value="'.$next_altro.'" />
</div>';
if (!empty($max_altro)) {
echo '
<div class="col-md-3">
<p id="warn_altro" class="text-danger"><b>'.tr('Ultimo codice aggiuntivo inserito').': </b> '.$max_altro.'</p>
</div>';
}
echo '
</div>';
*/
// Totale prodotti da inserire
echo '
<div class="row">
<div class="col-md-12">
<p class="text-danger text-center">'.tr('Totale prodotti da inserire').': <span id="totale_prodotti">0</span></p>
<button type="submit" id="inserisci" class="btn btn-success" onclick="if( confirm(\'Confermi l\\\'inserimento di \' + globalsp.n_prodotti + \' prodotti?\') ){ $(\'#insert_form\').submit(); }"><i class="fa fa-check"></i> '.tr('Salva modifiche').'</button>';
<p class="text-danger">'.tr('Totale prodotti da inserire').': <span id="totale_prodotti">0</span></p>
<button type="submit" id="inserisci" class="btn btn-success pull-right" onclick="if( confirm(\'Confermi l\\\'inserimento di \' + globalsp.n_prodotti + \' prodotti?\') ){ $(\'#insert_form\').submit(); }"><i class="fa fa-check"></i> '.tr('Salva modifiche').'</button>
<div class="clearfix"></div>
<div class="alert alert-info">';
// 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 '
<small>'.tr("L'inserimento incrementerà la quantità dell'articolo!").'</small>';
<small>'.tr("L'inserimento incrementerà la quantità dell'articolo!").'</small>';
} else {
echo '
<small>'.tr("L'inserimento non movimenterà la quantità dell'articolo!").'</small>';
<small>'.tr("L'inserimento non movimenterà la quantità dell'articolo!").'</small>';
}
echo '
</div>
</div>
</div>
</form>