From 89ab9708062bf76621b742d8c67d598ba66201ac Mon Sep 17 00:00:00 2001 From: Fred Tempez Date: Sat, 26 Sep 2020 18:27:46 +0200 Subject: [PATCH] =?UTF-8?q?v=C3=A9rification=20de=20l'archive=20de=20th?= =?UTF-8?q?=C3=A8me=20import=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 4 +++- core/module/theme/theme.php | 47 ++++++++++++++++++++++++++----------- 2 files changed, 36 insertions(+), 15 deletions(-) mode change 100644 => 100755 core/module/theme/theme.php diff --git a/CHANGES.md b/CHANGES.md index c7b7d0dd..f52956df 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -6,7 +6,9 @@ - Filtrage des pages affichées dans la configuration et initialisation après une mise à jour. - Pages de recherche et des mentions vides, modification de la valeur en l'absence de choix. - Libellé des pages d'erreur non sélectionnées "Page par défaut" - - Erreur de position du menu fixe en haut de page, recharge la classe après la perte de la session. + - Erreur de position du menu fixe en haut de page des membres simples et dans après une déconnexion automatique +- Modification : + - Extraction d'une archive : vérification du contenu avant import. ## version 10.3.00 - Corrections : diff --git a/core/module/theme/theme.php b/core/module/theme/theme.php old mode 100644 new mode 100755 index a226d3f9..177800cb --- a/core/module/theme/theme.php +++ b/core/module/theme/theme.php @@ -610,32 +610,50 @@ class theme extends common { public function manage() { if($this->isPost() ) { $zipFilename = $this->getInput('themeManageImport', helper::FILTER_STRING_SHORT, true); - + $tempFolder = uniqid(); $zip = new ZipArchive(); if ($zip->open(self::FILE_DIR.'source/'.$zipFilename) === TRUE) { - $zip->extractTo('.'); + mkdir (self::TEMP_DIR . $tempFolder); + $zip->extractTo(self::TEMP_DIR . $tempFolder ); + // Archive de thème ? + if ( file_exists(self::TEMP_DIR . $tempFolder . '/site/data/custom.css') + AND file_exists(self::TEMP_DIR . $tempFolder . '/site/data/theme.css') + AND file_exists(self::TEMP_DIR . $tempFolder . '/site/data/theme.json') ) { + // traiter l'archive + $success = $zip->extractTo('.'); + // traitement de l'erreur + $notification = $success ? 'Le thème a été importé' : 'Erreur lors de l\'extraction, vérifiez les permissions.'; + // Supprimmer le dossier temporaire + $install = new install; + $install->removeAll(self::TEMP_DIR . $tempFolder); + } else { + // pas une archive de thème + $success = false; + $notification = 'Ce n\'est pas l\'archive d\'un thème !'; + } $zip->close(); + } else { + // erreur à l'ouverture + $success = false; + $notification = 'Impossible d\'ouvrir l\'archive'; + } // Valeurs en sortie $this->addOutput([ - 'redirect' => helper::baseUrl() . 'theme' - ]); - } else { - $this->addOutput([ - 'notification' => 'Erreur avec le thème '.$zipFilename.'', - 'redirect' => helper::baseUrl() . 'theme/manage' - ]); - } + 'notification' => $notification, + 'state' => $success, + 'title' => 'Gestion des thèmes', + 'view' => 'manage' + ]);; } - // Valeurs en sortie $this->addOutput([ 'title' => 'Gestion des thèmes', 'view' => 'manage' ]); - } + /** * Export du thème */ @@ -651,7 +669,7 @@ class theme extends common { readfile(self::TEMP_DIR . $zipFilename); // Nettoyage du dossier unlink (self::TEMP_DIR . $zipFilename); - die(); + exit(); } /** @@ -679,7 +697,7 @@ class theme extends common { * construction du zip * @param string $modele theme ou admin */ - public function makezip($modele) { + private function makezip($modele) { // Creation du dossier $zipFilename = $modele . ' ' .date('d m Y').' '.date('H i s ').'.zip'; $zip = new ZipArchive(); @@ -709,4 +727,5 @@ class theme extends common { } return ($zipFilename); } + }