From 1136adbb2b814351f3654b13697e1708375a54cc Mon Sep 17 00:00:00 2001 From: Dasc3er Date: Fri, 17 Sep 2021 12:18:21 +0200 Subject: [PATCH] Aggiunto controllo sullo spazio disponibile prima del Backup Stile del codice --- include/common/importa.php | 8 ++-- .../src/Controlli/ColonneDuplicateViste.php | 4 +- modules/articoli/src/Articolo.php | 2 +- modules/backups/actions.php | 14 +++++-- modules/backups/edit.php | 38 +++++++++++++++---- modules/fatture/actions.php | 1 - modules/fatture/src/Fattura.php | 2 +- plugins/listino_clienti/actions.php | 4 +- src/Backup.php | 37 ++++++++++++++++++ src/Common/Document.php | 4 ++ templates/fatture/body.php | 4 +- 11 files changed, 93 insertions(+), 25 deletions(-) diff --git a/include/common/importa.php b/include/common/importa.php index 1bf0f361a..96805aa77 100755 --- a/include/common/importa.php +++ b/include/common/importa.php @@ -89,17 +89,17 @@ if (!empty($options['create_document'])) { $stato_predefinito = $database->fetchOne("SELECT id FROM co_statidocumento WHERE descrizione = 'Bozza'"); - if(!empty($options['reversed'])){ + if (!empty($options['reversed'])) { $idtipodocumento = $dbo->selectOne('co_tipidocumento', ['id'], [ 'dir' => $dir, 'descrizione' => 'Nota di credito', ])['id']; - } elseif(in_array($original_module['name'], ['Ddt di vendita', 'Ddt di acquisto'])){ + } elseif (in_array($original_module['name'], ['Ddt di vendita', 'Ddt di acquisto'])) { $idtipodocumento = $dbo->selectOne('co_tipidocumento', ['id'], [ 'dir' => $dir, - 'descrizione' => ($dir=='uscita' ? 'Fattura differita di acquisto' : 'Fattura differita di vendita'), + 'descrizione' => ($dir == 'uscita' ? 'Fattura differita di acquisto' : 'Fattura differita di vendita'), ])['id']; - } else{ + } else { $idtipodocumento = $dbo->selectOne('co_tipidocumento', ['id'], [ 'predefined' => 1, 'dir' => $dir, diff --git a/modules/aggiornamenti/src/Controlli/ColonneDuplicateViste.php b/modules/aggiornamenti/src/Controlli/ColonneDuplicateViste.php index 7b7b34438..611aabff9 100644 --- a/modules/aggiornamenti/src/Controlli/ColonneDuplicateViste.php +++ b/modules/aggiornamenti/src/Controlli/ColonneDuplicateViste.php @@ -20,8 +20,6 @@ namespace Modules\Aggiornamenti\Controlli; use Models\Module; -use Modules\Fatture\Fattura; -use Util\XML; class ColonneDuplicateViste extends Controllo { @@ -39,7 +37,7 @@ class ColonneDuplicateViste extends Controllo { $duplicati = database()->fetchArray('SELECT `id_module`, `name` FROM `zz_views` GROUP BY `id_module`, `name` HAVING COUNT(`name`) > 1'); - foreach ($duplicati as $colonna){ + foreach ($duplicati as $colonna) { $modulo = Module::pool($colonna['id_module']); $this->addResult([ diff --git a/modules/articoli/src/Articolo.php b/modules/articoli/src/Articolo.php index 223a3d9e9..1e5ae00aa 100755 --- a/modules/articoli/src/Articolo.php +++ b/modules/articoli/src/Articolo.php @@ -263,7 +263,7 @@ class Articolo extends Model ->selectRaw('*, mg_movimenti.created_at AS data_movimento, SUM(mg_movimenti.qta) as qta_documento, IFNULL(mg_movimenti.reference_type, mg_movimenti.id) as tipo_gruppo') ->groupBy(['tipo_gruppo', 'mg_movimenti.reference_id']); - if (!empty($mostra_vuoti)){ + if (!empty($mostra_vuoti)) { return $movimenti; } diff --git a/modules/backups/actions.php b/modules/backups/actions.php index 20214bf8d..1240a8995 100755 --- a/modules/backups/actions.php +++ b/modules/backups/actions.php @@ -55,10 +55,16 @@ switch (filter('op')) { break; case 'backup': - if (Backup::create()) { - flash()->info(tr('Nuovo backup creato correttamente!')); - } else { - flash()->error(tr('Errore durante la creazione del backup!').' '.str_replace('_DIR_', '"'.$backup_dir.'"', tr('Verifica che la cartella _DIR_ abbia i permessi di scrittura!'))); + try { + $result = Backup::create(); + + if ($result) { + flash()->info(tr('Nuovo backup creato correttamente!')); + } else { + flash()->error(tr('Errore durante la creazione del backup!').' '.str_replace('_DIR_', '"'.$backup_dir.'"', tr('Verifica che la cartella _DIR_ abbia i permessi di scrittura!'))); + } + } catch (\Exception $e) { + flash()->error(tr('Errore durante la creazione del backup!').' '.$e->getMessage()); } break; diff --git a/modules/backups/edit.php b/modules/backups/edit.php index 4ae31b93a..6812a5ebd 100755 --- a/modules/backups/edit.php +++ b/modules/backups/edit.php @@ -80,7 +80,7 @@ function restore() { } // Creazione backup -function backup(){ +function creaBackup(button){ swal({ title: "'.tr('Nuovo backup').'", text: "'.tr('Sei sicuro di voler creare un nuovo backup?').'", @@ -88,10 +88,32 @@ function backup(){ showCancelButton: true, confirmButtonClass: "btn btn-lg btn-success", confirmButtonText: "'.tr('Crea').'", - }).then( - function() { - location.href = globals.rootdir + "/editor.php?id_module='.$id_module.'&op=backup"; - }, function() {}); + }).then(function() { + let restore = buttonLoading(button); + $("#main_loading").show(); + + $.ajax({ + url: globals.rootdir + "/actions.php", + type: "GET", + data: { + id_module: globals.id_module, + op: "backup", + }, + success: function(data) { + $("#main_loading").fadeOut(); + buttonRestore(button, restore); + + // Ricaricamento della pagina corrente + window.location.reload(); + }, + error: function() { + swal("'.tr('Errore').'", "'.tr('Errore durante la creazione del backup').'", "error"); + renderMessages(); + + buttonRestore(button, restore); + } + }); + }).catch(swal.noop); } // Caricamento @@ -100,7 +122,7 @@ function loadSize(number, id){ $.ajax({ url: globals.rootdir + "/actions.php", - type: "get", + type: "GET", data: { id_module: globals.id_module, op: "size", @@ -294,7 +316,9 @@ if (file_exists($backup_dir)) { // Creazione backup if (!empty($backup_dir)) { echo ' - +
'; } diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index 9a70e0fc1..719db1762 100755 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -21,7 +21,6 @@ include_once __DIR__.'/../../core.php'; use Modules\Anagrafiche\Anagrafica; use Modules\Articoli\Articolo as ArticoloOriginale; -use Modules\DDT\DDT; use Modules\Fatture\Components\Articolo; use Modules\Fatture\Components\Descrizione; use Modules\Fatture\Components\Riga; diff --git a/modules/fatture/src/Fattura.php b/modules/fatture/src/Fattura.php index 152ba287b..063f10224 100755 --- a/modules/fatture/src/Fattura.php +++ b/modules/fatture/src/Fattura.php @@ -464,7 +464,7 @@ class Fattura extends Document $file = $this->uploads()->where('name', '=', 'Fattura Elettronica')->first(); if (empty($file)) { - throw new InvalidArgumentException("Fattura Elettronica non trovata"); + throw new InvalidArgumentException('Fattura Elettronica non trovata'); } return $file->getContent(); diff --git a/plugins/listino_clienti/actions.php b/plugins/listino_clienti/actions.php index f1216724b..2ba96b90f 100644 --- a/plugins/listino_clienti/actions.php +++ b/plugins/listino_clienti/actions.php @@ -46,7 +46,7 @@ switch (filter('op')) { $dettaglio_predefinito = DettaglioPrezzo::build($articolo, $anagrafica, $direzione); } - if($dettaglio_predefinito->sconto_percentuale != $sconto || $dettaglio_predefinito->prezzo_unitario!= $prezzo_unitario){ + if ($dettaglio_predefinito->sconto_percentuale != $sconto || $dettaglio_predefinito->prezzo_unitario != $prezzo_unitario) { $dettaglio_predefinito->sconto_percentuale = $sconto; $dettaglio_predefinito->setPrezzoUnitario($prezzo_unitario); $dettaglio_predefinito->save(); @@ -79,7 +79,7 @@ switch (filter('op')) { $dettaglio = DettaglioPrezzo::build($articolo, $anagrafica, $direzione); } - if($dettaglio->minimo != $minimi[$key] || $dettaglio->massimo != $massimi[$key] || $dettaglio->sconto_percentuale != $sconti[$key] || $dettaglio->prezzo_unitario != $prezzo_unitario){ + if ($dettaglio->minimo != $minimi[$key] || $dettaglio->massimo != $massimi[$key] || $dettaglio->sconto_percentuale != $sconti[$key] || $dettaglio->prezzo_unitario != $prezzo_unitario) { $dettaglio->minimo = $minimi[$key]; $dettaglio->massimo = $massimi[$key]; $dettaglio->sconto_percentuale = $sconti[$key]; diff --git a/src/Backup.php b/src/Backup.php index f3543acba..f9579d044 100755 --- a/src/Backup.php +++ b/src/Backup.php @@ -18,6 +18,7 @@ */ use Ifsnop\Mysqldump\Mysqldump; +use Util\FileSystem; use Util\Generator; use Util\Zip; @@ -148,6 +149,8 @@ class Backup */ public static function create() { + self::checkSpace(); + $backup_dir = self::getDirectory(); $backup_name = self::getNextName(); @@ -276,6 +279,40 @@ class Backup delete(base_dir().'/database.sql'); } + /** + * Effettua i controlli relativi allo spazio disponibile per l'esecuzione del backup;. + */ + public static function checkSpace() + { + $scarto = 1.1; + + // Informazioni di base sui limiti di spazio + $spazio_libero = disk_free_space('.'); + if (!empty(setting('Soft quota'))) { + $soft_quota = (float) setting('Soft quota'); // Impostazione in GB + $soft_quota = $soft_quota * (1024 ** 3); // Trasformazione in GB + } + + // Informazioni sullo spazio occupato + $spazio_occupato = $spazio_necessario = FileSystem::folderSize(base_dir(), ['htaccess']); + $cartelle_ignorate = [ + self::getDirectory(), + 'node_modules', + 'tests', + 'tmp', + ]; + foreach ($cartelle_ignorate as $path) { + $spazio_necessario -= FileSystem::folderSize($path); + } + + // Errori visualizzati + if (isset($soft_quota) && $soft_quota < ($spazio_necessario + $spazio_occupato) * $scarto) { + throw new InvalidArgumentException('Spazio disponibile in esaurimento'); + } elseif ($spazio_libero < ($spazio_necessario) * $scarto) { + throw new InvalidArgumentException('Spazio del server in esaurimento'); + } + } + /** * Restituisce il percorso su cui salvare temporaneamente il dump del database. * diff --git a/src/Common/Document.php b/src/Common/Document.php index 97eadcc4e..5f1ec5bd8 100755 --- a/src/Common/Document.php +++ b/src/Common/Document.php @@ -78,6 +78,7 @@ abstract class Document extends Model implements ReferenceInterface, DocumentInt /** * Restituisce tutte le righe collegate al documento. + * * @return \Illuminate\Support\Collection|iterable */ public function getRighe() @@ -91,8 +92,10 @@ abstract class Document extends Model implements ReferenceInterface, DocumentInt /** * Restituisce la riga con tipo e identificativo corrispondente. + * * @param $type * @param $id + * * @return mixed */ public function getRiga($type, $id) @@ -106,6 +109,7 @@ abstract class Document extends Model implements ReferenceInterface, DocumentInt /** * Restituisce le righe del documento raggruppate per documento di origine. + * * @return \Illuminate\Support\Collection|iterable */ public function getRigheRaggruppate() diff --git a/templates/fatture/body.php b/templates/fatture/body.php index 9517007dd..5b3450d52 100755 --- a/templates/fatture/body.php +++ b/templates/fatture/body.php @@ -64,10 +64,10 @@ foreach ($righe as $riga) { $descrizione = $riga->descrizione; // Aggiunta riferimento piĆ¹ profondo per DDT attraverso Interventi - if ($riga->hasOriginalComponent() && $riga->original_document_type == Intervento::class){ + if ($riga->hasOriginalComponent() && $riga->original_document_type == Intervento::class) { $riga_origine = $riga->getOriginalComponent(); - if ($riga_origine->hasOriginalComponent()){ + if ($riga_origine->hasOriginalComponent()) { $riferimento = $riga_origine->getOriginalComponent() ->getDocument()->getReference();