From d8c6f731cecfa132b47057cb522db7934f0da7bb Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Wed, 19 Sep 2018 16:02:15 +0200 Subject: [PATCH] Aggiunto ripristino da backup --- .gitignore | 2 + modules/aggiornamenti/upload_modules.php | 2 +- modules/backup/actions.php | 61 ++++++++++++++++++ modules/backup/edit.php | 78 ++++++++++++++++-------- modules/interventi/add.php | 2 +- 5 files changed, 119 insertions(+), 26 deletions(-) diff --git a/.gitignore b/.gitignore index 0d111c167..a5e50bc5c 100644 --- a/.gitignore +++ b/.gitignore @@ -81,7 +81,9 @@ files/* !files/my_impianti/ files/my_impianti/* !files/my_impianti/componente.ini +tmp/ config.inc.php +database.sql REVISION .php_cs.cache diff --git a/modules/aggiornamenti/upload_modules.php b/modules/aggiornamenti/upload_modules.php index 04de021d0..8dc9d4a90 100644 --- a/modules/aggiornamenti/upload_modules.php +++ b/modules/aggiornamenti/upload_modules.php @@ -32,6 +32,7 @@ directory($extraction_dir); // Estrazione dell'archivio $zip->extractTo($extraction_dir); +$zip->close(); // Aggiornamento del progetto if (file_exists($extraction_dir.'/VERSION')) { @@ -105,7 +106,6 @@ if (file_exists($extraction_dir.'/VERSION')) { // Rimozione delle risorse inutilizzate delete($extraction_dir); -$zip->close(); // Redirect redirect(ROOTDIR.'/editor.php?id_module='.$id_module); diff --git a/modules/backup/actions.php b/modules/backup/actions.php index 61ac464f0..02d6164ca 100644 --- a/modules/backup/actions.php +++ b/modules/backup/actions.php @@ -36,3 +36,64 @@ switch (filter('op')) { break; } + +if (filter('op') == 'restore') { + if (!extension_loaded('zip')) { + flash()->error(tr('Estensione zip non supportata!').'
'.tr('Verifica e attivala sul tuo file _FILE_', [ + '_FILE_' => 'php.ini', + ])); + + return; + } + + if (post('folder') == null) { + $file = $_FILES['blob']['tmp_name'] ?: post('zip'); + + // Lettura dell'archivio + $zip = new ZipArchive(); + if (!$zip->open($file)) { + flash()->error(tr('File di installazione non valido!')); + flash()->error(checkZip($file)); + + return; + } + + // Percorso di estrazione + $extraction_dir = $docroot.'/tmp'; + directory($extraction_dir); + + // Estrazione dell'archivio + $zip->extractTo($extraction_dir); + $zip->close(); + } else { + $extraction_dir = $backup_dir.'/'.post('folder'); + } + + // Rimozione del database + $tables = include $docroot.'/update/tables.php'; + + $database->query('SET foreign_key_checks = 0'); + foreach ($tables as $tables) { + $database->query('DROP TABLE `'.$tables.'`'); + } + $database->query('DROP TABLE `updates`'); + + // Ripristino del database + $database->multiQuery($extraction_dir.'/database.sql'); + $database->query('SET foreign_key_checks = 1'); + + // 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); + + // Pulizia + if (post('folder') == null) { + delete($extraction_dir); + } + delete($docroot.'/database.sql'); +} diff --git a/modules/backup/edit.php b/modules/backup/edit.php index e13193029..0d8f5603f 100644 --- a/modules/backup/edit.php +++ b/modules/backup/edit.php @@ -27,33 +27,48 @@ if (!is_writable($backup_dir)) { '; } -echo ' -
-

'; - if (!empty($backup_dir)) { - echo tr('Il percorso di backup è attualmente in').': '.slashes($backup_dir).''; + $message = tr('Il percorso di backup è attualmente in').': '.slashes($backup_dir).''; } else { - echo tr('Sembra che tu non abbia ancora specificato un percorso per il backup').'.'; + $message = tr('Sembra che tu non abbia ancora specificato un percorso per il backup').'.'; } echo ' -

-

'.tr('Puoi modificare il percorso di backup dal tuo file _FILE_', [ - '_FILE_' => 'config.inc.php', - ]).'

'; +
+
+
+

'.$message.'

+

'.tr('Puoi modificare il percorso di backup dal tuo file _FILE_', [ + '_FILE_' => 'config.inc.php', + ]).'

+
+
'; +// Ripristino backup echo ' -
+
+
+
+

+ '.tr('Ripristina backup').' +

+
+
+
+ - -'; +
'; -//Lettura file di backup +// Lettura file di backup if (file_exists($backup_dir)) { $backups_zip = []; $backups_file = []; @@ -100,9 +115,15 @@ if (file_exists($backup_dir)) { '.tr('Scarica').' - - - +
+ + + + + + + +
'; } } else { @@ -140,9 +161,15 @@ if (file_exists($backup_dir)) { '.tr('Non scaricabile').' - - - +
+ + + + + + + +
'; } } else { @@ -162,8 +189,11 @@ if (file_exists($backup_dir)) { } if (!empty($backup_dir)) { + // Creazione backup echo ' -
+ + +