From d42cc357fd5a621cb25ea06acbb75b35f1baf6e6 Mon Sep 17 00:00:00 2001 From: Fred Tempez Date: Thu, 6 Feb 2020 21:04:56 +0100 Subject: [PATCH] =?UTF-8?q?[10.0.028.dev]=20Backup=20revu=20et=20corrig?= =?UTF-8?q?=C3=A9,=20reste=20option=20dossier=20data=20inclus=20ou=20pas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/class/helper.class.php | 37 +++++++++++++++++++++++ core/core.php | 8 +++-- core/module/config/config.php | 32 ++++---------------- core/module/config/view/manage/manage.php | 13 ++++++-- 4 files changed, 59 insertions(+), 31 deletions(-) diff --git a/core/class/helper.class.php b/core/class/helper.class.php index c3ff8a3a..392a2c28 100644 --- a/core/class/helper.class.php +++ b/core/class/helper.class.php @@ -42,6 +42,43 @@ class helper { return $newArray; } + + /** + * Génére un backup des données de site + * @param string $folder dossier de sauvegarde + * @param array $exclude dossier exclus + * @return string nom du fichier de sauvegarde + */ + + public static function autoBackup($folder, $filter = ['backup','tmp'] ) { + // Creation du ZIP + $fileName = str_replace('/','',helper::baseUrl(false,false)) . '-'. date('Y-m-d-h-i-s', time()) . '.zip'; + $zip = new ZipArchive(); + $zip->open($folder . $fileName, ZipArchive::CREATE | ZipArchive::OVERWRITE); + $directory = 'site/'; + //$filter = array('backup','tmp','file'); + $files = new RecursiveIteratorIterator( + new RecursiveCallbackFilterIterator( + new RecursiveDirectoryIterator( + $directory, + RecursiveDirectoryIterator::SKIP_DOTS + ), + function ($fileInfo, $key, $iterator) use ($filter) { + return $fileInfo->isFile() || !in_array($fileInfo->getBaseName(), $filter); + } + ) + ); + foreach ($files as $name => $file) { + if (!$file->isDir()) { + $filePath = $file->getRealPath(); + $relativePath = substr($filePath, strlen(realpath($directory)) + 1); + $zip->addFile($filePath, $relativePath); + } + } + $zip->close(); + return ($fileName); + } + /** * Retourne l'URL de base du site * @param bool $queryString Affiche ou non le point d'interrogation diff --git a/core/core.php b/core/core.php index b03d47e2..3861733e 100644 --- a/core/core.php +++ b/core/core.php @@ -34,7 +34,7 @@ class common { const TEMP_DIR = 'site/tmp/'; // Numéro de version - const ZWII_VERSION = '10.0.027.dev'; + const ZWII_VERSION = '10.0.028.dev'; public static $actions = []; public static $coreModuleIds = [ @@ -888,6 +888,7 @@ class common { $db->save; } + /** * Mises à jour */ @@ -1103,8 +1104,9 @@ class core extends common { AND $lastBackup > $this->getData(['core', 'lastBackup']) + 86400 AND $this->getData(['user']) // Pas de backup pendant l'installation ) { - // Copie du fichier de données - copy(self::DATA_DIR.'core.json', self::BACKUP_DIR . date('Y-m-d', $lastBackup) . '.json'); + // Copie des fichier de données + //copy(self::DATA_DIR.'core.json', self::BACKUP_DIR . date('Y-m-d', $lastBackup) . '.json'); + helper::autoBackup(self::BACKUP_DIR,['backup','tmp','file']); // Date du dernier backup $this->setData(['core', 'lastBackup', $lastBackup]); // Enregistre les données diff --git a/core/module/config/config.php b/core/module/config/config.php index a4475734..a294f006 100755 --- a/core/module/config/config.php +++ b/core/module/config/config.php @@ -200,32 +200,11 @@ class config extends common { * Sauvegarde des données */ public function backup() { - // Creation du ZIP - $fileName = str_replace('/','',helper::baseUrl(false,false)) . '-'. date('Y-m-d-h-i-s', time()) . '.zip'; - $zip = new ZipArchive(); - $zip->open(self::TEMP_DIR . $fileName, ZipArchive::CREATE | ZipArchive::OVERWRITE); - $directory = 'site/'; - $filter = array('backup','tmp'); - $files = new RecursiveIteratorIterator( - new RecursiveCallbackFilterIterator( - new RecursiveDirectoryIterator( - $directory, - RecursiveDirectoryIterator::SKIP_DOTS - ), - function ($fileInfo, $key, $iterator) use ($filter) { - return $fileInfo->isFile() || !in_array($fileInfo->getBaseName(), $filter); - } - ) - ); - foreach ($files as $name => $file) { - if (!$file->isDir()) { - $filePath = $file->getRealPath(); - $relativePath = substr($filePath, strlen(realpath($directory)) + 1); - $zip->addFile($filePath, $relativePath); - } - } - $zip->close(); - // Téléchargement du ZIP + // Creation du ZIP + $filter = $this->getInput('configBackupOption',helper::FILTER_BOOLEAN) === true ? ['backup','tmp'] : ['backup','tmp','file']; + $fileName = helper::autoBackup(self::TEMP_DIR,$filter); + + // Téléchargement du ZIP header('Content-Type: application/zip'); header('Content-Disposition: attachment; filename="' . $fileName . '"'); header('Content-Length: ' . filesize(self::TEMP_DIR . $fileName)); @@ -235,6 +214,7 @@ class config extends common { 'display' => self::DISPLAY_RAW ]); unlink(self::TEMP_DIR . $fileName); + exit(); } /** diff --git a/core/module/config/view/manage/manage.php b/core/module/config/view/manage/manage.php index 40d28564..89560dc5 100644 --- a/core/module/config/view/manage/manage.php +++ b/core/module/config/view/manage/manage.php @@ -15,12 +15,21 @@

Sauvegarde totale du site

- helper::baseUrl() . 'config/backup', - 'value' => 'Générer et télécharger
une archive des données de site', + 'value' => 'Générer et télécharger
les données de site', ]); ?>
+
+
+ true, + 'disabled' => true, + 'help' => 'Cette option n\'est pas recommandée lorsque le contenu du gestionnaire de fichier est très volumineux.' + ]); ?> +
+