From cacc9e50eb9aaaf883377a7a694530dd437278a4 Mon Sep 17 00:00:00 2001 From: Fred Tempez Date: Tue, 20 Dec 2022 12:19:42 +0100 Subject: [PATCH] 12009 fix plugin install from store --- core/class/helper.class.php | 1 + core/module/plugin/plugin.php | 72 ++++++++++++++++------------------- 2 files changed, 34 insertions(+), 39 deletions(-) diff --git a/core/class/helper.class.php b/core/class/helper.class.php index dd766095..ce56c5c0 100644 --- a/core/class/helper.class.php +++ b/core/class/helper.class.php @@ -263,6 +263,7 @@ class helper } // Affection $modules[$value] = [ + 'name' => $value, 'realName' => $realName, 'version' => $version, 'update' => $update, diff --git a/core/module/plugin/plugin.php b/core/module/plugin/plugin.php index f9aff35e..c5f3da8d 100644 --- a/core/module/plugin/plugin.php +++ b/core/module/plugin/plugin.php @@ -32,7 +32,7 @@ class plugin extends common // URL des modules const BASEURL_STORE = 'https://store.zwiicms.fr/'; - const MODULE_STORE = 'modules-pour-zwii-v115/'; + const MODULE_STORE = 'modules/'; // Gestion des modules public static $modulesData = []; @@ -103,14 +103,12 @@ class plugin extends common // Dossier temporaire $tempFolder = uniqid() . '/'; - //$tempFolder = 'truc/'; /** * Désarchivage */ $zip = new ZipArchive(); - if ($zip->open($moduleFileName) === TRUE) { - + if ($zip->open($moduleFileName) === true) { //Création du dossier temporaire et extraction if (!is_dir(self::TEMP_DIR . $tempFolder)) { @@ -128,8 +126,8 @@ class plugin extends common * 'download" => 'module/download' */ - if (file_exists(self::TEMP_DIR . $tempFolder . 'desc.json')) { - $module = json_decode(file_get_contents(self::TEMP_DIR . $tempFolder . 'desc.json'), true); + if (file_exists(self::TEMP_DIR . $tempFolder . 'enum.json')) { + $module = json_decode(file_get_contents(self::TEMP_DIR . $tempFolder . 'enum.json'), true); } else { // Message de retour $this->removeDir(self::TEMP_DIR . $tempFolder); @@ -139,37 +137,38 @@ class plugin extends common 'notification' => helper::translate('Archive invalide, le descripteur est absent') ]); } - /** * Validation des informations du descripteur */ - foreach ($module['dirs'] as $src => $dest) { - // Vérification de la présence des dossier décrits - if (!is_dir(self::TEMP_DIR . $tempFolder . $src)) { - // Message de retour - $this->removeDir(self::TEMP_DIR . $tempFolder); - $zip->close(); - return ([ - 'success' => false, - 'notification' => helper::translate('Archive invalide, les dossiers ne correspondent pas au descripteur') - ]); - } - // Interdire l'écriture dans le dossier core - if (strstr($dest, 'core') !== false) { - // Message de retour - $this->removeDir(self::TEMP_DIR . $tempFolder); - $zip->close(); - return ([ - 'success' => false, - 'notification' => helper::translate('Archive invalide, l\'écriture dans le dossier core est interdite') - ]); + if (isset($module['dirs'])) { + foreach ($module['dirs'] as $src => $dest) { + // Vérification de la présence des dossier décrits + if (!is_dir(self::TEMP_DIR . $tempFolder . $src)) { + // Message de retour + $this->removeDir(self::TEMP_DIR . $tempFolder); + $zip->close(); + return ([ + 'success' => false, + 'notification' => helper::translate('Archive invalide, les dossiers ne correspondent pas au descripteur') + ]); + } + // Interdire l'écriture dans le dossier core + if (strstr($dest, 'core') !== false) { + // Message de retour + $this->removeDir(self::TEMP_DIR . $tempFolder); + $zip->close(); + return ([ + 'success' => false, + 'notification' => helper::translate('Archive invalide, l\'écriture dans le dossier core est interdite') + ]); + } } } /** * Validation de la présence du fichier de base du module */ - if (!file_exists(self::TEMP_DIR . $tempFolder . $module['name'] . '/' . $module['name'] . '.php')) { + if (!file_exists(self::TEMP_DIR . $tempFolder . $module['name'] . '.php')) { // Message de retour $this->removeDir(self::TEMP_DIR . $tempFolder); $zip->close(); @@ -216,12 +215,14 @@ class plugin extends common // Installation ou mise à jour du module valides if ($installOk) { - // Copie récursive des dossiers + // Copie du module + $success = $this->copyDir(self::TEMP_DIR . $tempFolder, self::MODULE_DIR . $module['name']); + // Copie récursive des dossiers externes foreach ($module['dirs'] as $src => $dest) { if (!is_dir(self::TEMP_DIR . $tempFolder . $src)) { mkdir(self::TEMP_DIR . $tempFolder . $src); } - $success = $this->copyDir(self::TEMP_DIR . $tempFolder . $src, $dest); + $success = $success && $this->copyDir(self::TEMP_DIR . $tempFolder . $src, $dest); } // Message de retour $t = isset($versionInstalled) ? helper::translate('actualisé') : helper::translate('installé'); @@ -261,10 +262,6 @@ class plugin extends common $checkValidMaj = $this->getInput('configModulesCheck', helper::FILTER_BOOLEAN); $zipFilename = $this->getInput('configModulesInstallation', helper::FILTER_STRING_SHORT); if ($zipFilename !== '') { - $success = [ - 'success' => false, - 'notification' => '' - ]; $state = $this->install(self::FILE_DIR . 'source/' . $zipFilename, $checkValidMaj); } $this->addOutput([ @@ -574,14 +571,11 @@ class plugin extends common // Descripteur de l'archive $infoModule = helper::getModules(); - //Nom de l'archive $fileName = $moduleId . $infoModule[$moduleId]['version'] . '.zip'; - // Création du descripteur si absent - if (!file_exists(self::MODULE_DIR . $moduleId . '/enum.json')) { - $success = file_put_contents(self::MODULE_DIR . $moduleId . '/enum.json', json_encode([$moduleId => $infoModule[$moduleId]])); - } + // Régénération du module + $success = file_put_contents(self::MODULE_DIR . $moduleId . '/enum.json', json_encode($infoModule[$moduleId])); // Construire l'archive $this->makeZip(self::TEMP_DIR . $fileName, self::MODULE_DIR . $moduleId);