diff --git a/CHANGES.md b/CHANGES.md index 21e485f2..fb2be792 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -5,6 +5,7 @@ - Validation de la connexion au site grâce à l'envoi d'un code par email. L'option est activée depuis la configuration du site, onglet connexion. Elle s'active par groupe montant, exemple "éditeur" pour éditeurs et administrateurs. - Optimisation du chargement des variables de classe. - Suppression de redondance de déclaration des charset. +- Méthode de backup optimisée. **Corrections :** - Corrige un bug de changement de mot de passe pour les comptes non admin. diff --git a/core/class/helper.class.php b/core/class/helper.class.php index f8853c3c..a46a9e2e 100644 --- a/core/class/helper.class.php +++ b/core/class/helper.class.php @@ -197,14 +197,20 @@ class helper public static function autoBackup($folder, $filter = ['backup', 'tmp']) { - // Creation du ZIP + // Création du nom de fichier ZIP $baseName = str_replace('/', '', helper::baseUrl(false, false)); $baseName = empty($baseName) ? 'ZwiiCMS' : $baseName; - $fileName = $baseName . '-backup-' . date('Y-m-d-H-i-s', time()) . '.zip'; + $fileName = $baseName . '-backup-' . date('Y-m-d-H-i-s') . '.zip'; + + // Initialisation de l'archive ZIP $zip = new ZipArchive(); - $zip->open($folder . $fileName, ZipArchive::CREATE | ZipArchive::OVERWRITE); + if ($zip->open($folder . $fileName, ZipArchive::CREATE | ZipArchive::OVERWRITE) !== true) { + return false; // Retourne false si l'ouverture échoue + } + $directory = 'site/'; - //$filter = array('backup','tmp','file'); + + // Récupération des fichiers et des dossiers $files = new RecursiveIteratorIterator( new RecursiveCallbackFilterIterator( new RecursiveDirectoryIterator( @@ -212,20 +218,27 @@ class helper RecursiveDirectoryIterator::SKIP_DOTS ), function ($fileInfo, $key, $iterator) use ($filter) { - return $fileInfo->isFile() || !in_array($fileInfo->getBaseName(), $filter); + // Inclure les fichiers ou les répertoires non filtrés + return $fileInfo->isFile() || ($fileInfo->isDir() && !in_array($fileInfo->getBaseName(), $filter)); } ) ); - foreach ($files as $name => $file) { + + // Ajout des fichiers à l'archive + foreach ($files as $file) { if (!$file->isDir()) { $filePath = $file->getRealPath(); - $relativePath = substr($filePath, strlen(realpath($directory)) + 1); + $relativePath = str_replace(DIRECTORY_SEPARATOR, '/', substr($filePath, strlen(realpath($directory)) + 1)); $zip->addFile($filePath, $relativePath); } } + + // Fermeture de l'archive ZIP $zip->close(); - return ($fileName); + + return $fileName; } +