From 711f702c7c534fe5f106acddea8e038367ba4e20 Mon Sep 17 00:00:00 2001 From: Fred Tempez Date: Mon, 15 Nov 2021 21:44:12 +0100 Subject: [PATCH] bug restauration d'un fichier vide --- CHANGES.md | 4 +- core/module/config/config.php | 161 ++++++++++--------- core/module/config/view/backup/backup.js.php | 21 +-- 3 files changed, 98 insertions(+), 88 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index cf402123..fada740f 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,8 +1,10 @@ # Changelog ## Version 11.2.00 +- Correction : + Configuration, restauration d'une archive : La validation du formulaire sans avoir sélectionné de fichier de sauvegarde provoque le crash du site. - Modifications : - Thème : + - Thème : - Disposition des options de configuration du site. - Bannière : le contenu peut être personnalisé à l'aide d'un éditeur. La bannière au-dessus du site peut s'étendre sur la largeur de la page. - Pages : il est désormais possible de donner un nom de page court qui sera utilisé dans le menu du site, dans les abrres latérales et dans les sélecteurs de page (éditeur / lien). En revanche le nom de la page affiché en haut de celle-ci est inchangé. Dans la plupart des cas le titre court sera identique au titre. diff --git a/core/module/config/config.php b/core/module/config/config.php index fc5b4ba2..7547a112 100644 --- a/core/module/config/config.php +++ b/core/module/config/config.php @@ -283,91 +283,96 @@ class config extends common { */ public function restore() { // Soumission du formulaire - if($this->isPost()) { - //if ($this->getInput('configRestoreImportFile')) - $fileZip = $this->getInput('configRestoreImportFile'); - $file_parts = pathinfo($fileZip); - $folder = date('Y-m-d-h-i-s', time()); - $zip = new ZipArchive(); - if ($file_parts['extension'] !== 'zip') { - // Valeurs en sortie erreur - $this->addOutput([ - 'notification' => 'Le fichier n\'est pas une archive valide', - 'redirect' => helper::baseUrl() . 'config/restore', - 'state' => false - ]); - } - $successOpen = $zip->open(self::FILE_DIR . 'source/' . $fileZip); - if ($successOpen === FALSE) { - // Valeurs en sortie erreur - $this->addOutput([ - 'notification' => 'Impossible de lire l\'archive', - 'redirect' => helper::baseUrl() . 'config/restore', - 'state' => false - ]); - } - // Lire le contenu de l'archive dans le tableau files - for( $i = 0; $i < $zip->numFiles; $i++ ){ - $stat = $zip->statIndex( $i ); - $files [] = ( basename( $stat['name'] )); - } + if($this->isPost() ) { + + $success = false; - // Lire la dataversion - $tmpDir = uniqid(4); - $success = $zip->extractTo( self::TEMP_DIR . $tmpDir ); - $data = file_get_contents( self::TEMP_DIR . $tmpDir . '/data/core.json'); - $obj = json_decode($data); - $dataVersion = strval ($obj->core->dataVersion); - switch (strlen($dataVersion)) { - case 4: - if (substr($dataVersion,0,1) === '9' ) { - $version = 9; - } else { - $version = 0; - } - break; - case 5: - $version = substr($dataVersion,0,2); - break; - default: - $version = 0; - break; - } - $this->removeDir(self::TEMP_DIR . $tmpDir ); + if ($this->getInput('configRestoreImportFile', null, true) ) { - if ($version >= 10 ) { - // Option active, les users sont stockées - if ($this->getInput('configRestoreImportUser', helper::FILTER_BOOLEAN) === true ) { - $users = $this->getData(['user']); + $fileZip = $this->getInput('configRestoreImportFile'); + $file_parts = pathinfo($fileZip); + $folder = date('Y-m-d-h-i-s', time()); + $zip = new ZipArchive(); + if ($file_parts['extension'] !== 'zip') { + // Valeurs en sortie erreur + $this->addOutput([ + 'notification' => 'Le fichier n\'est pas une archive valide', + 'redirect' => helper::baseUrl() . 'config/restore', + 'state' => false + ]); } - } elseif ($version === 0) { // Version invalide - // Valeurs en sortie erreur - $this->addOutput([ - 'notification' => 'Cette archive n\'est pas une sauvegarde valide', - 'redirect' => helper::baseUrl() . 'config/restore', - 'state' => false - ]); - } - // Préserver les comptes des utilisateurs d'une version 9 si option cochée - // Positionnement d'une variable de session lue au constructeurs - if ($version === 9) { - $_SESSION['KEEP_USERS'] = $this->getInput('configRestoreImportUser', helper::FILTER_BOOLEAN); - } - // Extraire le zip ou 'site/' - $this->removeDir(self::DATA_DIR); - $success = $zip->extractTo( 'site/' ); - // Fermer l'archive - $zip->close(); + $successOpen = $zip->open(self::FILE_DIR . 'source/' . $fileZip); + if ($successOpen === FALSE) { + // Valeurs en sortie erreur + $this->addOutput([ + 'notification' => 'Impossible de lire l\'archive', + 'redirect' => helper::baseUrl() . 'config/restore', + 'state' => false + ]); + } + // Lire le contenu de l'archive dans le tableau files + for( $i = 0; $i < $zip->numFiles; $i++ ){ + $stat = $zip->statIndex( $i ); + $files [] = ( basename( $stat['name'] )); + } + + // Lire la dataversion + $tmpDir = uniqid(4); + $success = $zip->extractTo( self::TEMP_DIR . $tmpDir ); + $data = file_get_contents( self::TEMP_DIR . $tmpDir . '/data/core.json'); + $obj = json_decode($data); + $dataVersion = strval ($obj->core->dataVersion); + switch (strlen($dataVersion)) { + case 4: + if (substr($dataVersion,0,1) === '9' ) { + $version = 9; + } else { + $version = 0; + } + break; + case 5: + $version = substr($dataVersion,0,2); + break; + default: + $version = 0; + break; + } + $this->removeDir(self::TEMP_DIR . $tmpDir ); + + if ($version >= 10 ) { + // Option active, les users sont stockées + if ($this->getInput('configRestoreImportUser', helper::FILTER_BOOLEAN) === true ) { + $users = $this->getData(['user']); + } + } elseif ($version === 0) { // Version invalide + // Valeurs en sortie erreur + $this->addOutput([ + 'notification' => 'Cette archive n\'est pas une sauvegarde valide', + 'redirect' => helper::baseUrl() . 'config/restore', + 'state' => false + ]); + } + // Préserver les comptes des utilisateurs d'une version 9 si option cochée + // Positionnement d'une variable de session lue au constructeurs + if ($version === 9) { + $_SESSION['KEEP_USERS'] = $this->getInput('configRestoreImportUser', helper::FILTER_BOOLEAN); + } + // Extraire le zip ou 'site/' + $this->removeDir(self::DATA_DIR); + $success = $zip->extractTo( 'site/' ); + // Fermer l'archive + $zip->close(); - // Restaurer les users originaux d'une v10 si option cochée - if (!empty($users) && - $version >= 10 && - $this->getInput('configRestoreImportUser', helper::FILTER_BOOLEAN) === true) { - $this->setData(['user',$users]); + // Restaurer les users originaux d'une v10 si option cochée + if (!empty($users) && + $version >= 10 && + $this->getInput('configRestoreImportUser', helper::FILTER_BOOLEAN) === true) { + $this->setData(['user',$users]); + } } // Message de notification - $notification = $success === true ? 'Restauration réalisée avec succès' : 'Erreur inconnue'; + $notification = $success === true ? 'Restauration effectuée avec succès' : 'Erreur inconnue'; $redirect = $this->getInput('configRestoreImportUser', helper::FILTER_BOOLEAN) === true ? helper::baseUrl() . 'config/restore' : helper::baseUrl() . 'user/login/'; // Valeurs en sortie erreur $this->addOutput([ diff --git a/core/module/config/view/backup/backup.js.php b/core/module/config/view/backup/backup.js.php index 4305fd59..ee965554 100644 --- a/core/module/config/view/backup/backup.js.php +++ b/core/module/config/view/backup/backup.js.php @@ -14,11 +14,6 @@ $( document).ready(function() { $("#configBackupForm").submit( function(e){ $("#configBackupSubmit").addClass("disabled").prop("disabled", true); e.preventDefault(); - /** - if ($("input[name=configBackupOption]").is(':checked')) { - $('body').css('cursor', 'wait'); - } - */ var url = "getUrl(0); ?>/backup"; $.ajax({ type: "POST", @@ -38,11 +33,19 @@ $( document).ready(function() { }); }); + /** - * Aspect de la souris - */ - $("#configBackupSubmit").click(function(event) { - $('body').css('cursor', 'wait'); + * Confirmation de sauvegarde complète + */ + $("#configBackupSubmit").on("click", function() { + if ($("input[name=configBackupOption]").is(':checked')) { + return core.confirm("Une sauvegarde avec le contenu du gestionnaire de fichier peut prendre du temps à générer. Confirmez-vous ?", function() { + //$(location).attr("href", _this.attr("href")); + $('body').css('cursor', 'wait'); + $('form#configBackupForm').submit(); + }); + } }); + });