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', + ]).'
+