12009 fix plugin install from store

This commit is contained in:
Fred Tempez 2022-12-20 12:19:42 +01:00
parent f6600201fe
commit cacc9e50eb
2 changed files with 34 additions and 39 deletions

View File

@ -263,6 +263,7 @@ class helper
} }
// Affection // Affection
$modules[$value] = [ $modules[$value] = [
'name' => $value,
'realName' => $realName, 'realName' => $realName,
'version' => $version, 'version' => $version,
'update' => $update, 'update' => $update,

View File

@ -32,7 +32,7 @@ class plugin extends common
// URL des modules // URL des modules
const BASEURL_STORE = 'https://store.zwiicms.fr/'; const BASEURL_STORE = 'https://store.zwiicms.fr/';
const MODULE_STORE = 'modules-pour-zwii-v115/'; const MODULE_STORE = 'modules/';
// Gestion des modules // Gestion des modules
public static $modulesData = []; public static $modulesData = [];
@ -103,14 +103,12 @@ class plugin extends common
// Dossier temporaire // Dossier temporaire
$tempFolder = uniqid() . '/'; $tempFolder = uniqid() . '/';
//$tempFolder = 'truc/';
/** /**
* Désarchivage * Désarchivage
*/ */
$zip = new ZipArchive(); $zip = new ZipArchive();
if ($zip->open($moduleFileName) === TRUE) { if ($zip->open($moduleFileName) === true) {
//Création du dossier temporaire et extraction //Création du dossier temporaire et extraction
if (!is_dir(self::TEMP_DIR . $tempFolder)) { if (!is_dir(self::TEMP_DIR . $tempFolder)) {
@ -128,8 +126,8 @@ class plugin extends common
* 'download" => 'module/download' * 'download" => 'module/download'
*/ */
if (file_exists(self::TEMP_DIR . $tempFolder . 'desc.json')) { if (file_exists(self::TEMP_DIR . $tempFolder . 'enum.json')) {
$module = json_decode(file_get_contents(self::TEMP_DIR . $tempFolder . 'desc.json'), true); $module = json_decode(file_get_contents(self::TEMP_DIR . $tempFolder . 'enum.json'), true);
} else { } else {
// Message de retour // Message de retour
$this->removeDir(self::TEMP_DIR . $tempFolder); $this->removeDir(self::TEMP_DIR . $tempFolder);
@ -139,37 +137,38 @@ class plugin extends common
'notification' => helper::translate('Archive invalide, le descripteur est absent') 'notification' => helper::translate('Archive invalide, le descripteur est absent')
]); ]);
} }
/** /**
* Validation des informations du descripteur * Validation des informations du descripteur
*/ */
foreach ($module['dirs'] as $src => $dest) { if (isset($module['dirs'])) {
// Vérification de la présence des dossier décrits foreach ($module['dirs'] as $src => $dest) {
if (!is_dir(self::TEMP_DIR . $tempFolder . $src)) { // Vérification de la présence des dossier décrits
// Message de retour if (!is_dir(self::TEMP_DIR . $tempFolder . $src)) {
$this->removeDir(self::TEMP_DIR . $tempFolder); // Message de retour
$zip->close(); $this->removeDir(self::TEMP_DIR . $tempFolder);
return ([ $zip->close();
'success' => false, return ([
'notification' => helper::translate('Archive invalide, les dossiers ne correspondent pas au descripteur') '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) { // Interdire l'écriture dans le dossier core
// Message de retour if (strstr($dest, 'core') !== false) {
$this->removeDir(self::TEMP_DIR . $tempFolder); // Message de retour
$zip->close(); $this->removeDir(self::TEMP_DIR . $tempFolder);
return ([ $zip->close();
'success' => false, return ([
'notification' => helper::translate('Archive invalide, l\'écriture dans le dossier core est interdite') '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 * 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 // Message de retour
$this->removeDir(self::TEMP_DIR . $tempFolder); $this->removeDir(self::TEMP_DIR . $tempFolder);
$zip->close(); $zip->close();
@ -216,12 +215,14 @@ class plugin extends common
// Installation ou mise à jour du module valides // Installation ou mise à jour du module valides
if ($installOk) { 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) { foreach ($module['dirs'] as $src => $dest) {
if (!is_dir(self::TEMP_DIR . $tempFolder . $src)) { if (!is_dir(self::TEMP_DIR . $tempFolder . $src)) {
mkdir(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 // Message de retour
$t = isset($versionInstalled) ? helper::translate('actualisé') : helper::translate('installé'); $t = isset($versionInstalled) ? helper::translate('actualisé') : helper::translate('installé');
@ -261,10 +262,6 @@ class plugin extends common
$checkValidMaj = $this->getInput('configModulesCheck', helper::FILTER_BOOLEAN); $checkValidMaj = $this->getInput('configModulesCheck', helper::FILTER_BOOLEAN);
$zipFilename = $this->getInput('configModulesInstallation', helper::FILTER_STRING_SHORT); $zipFilename = $this->getInput('configModulesInstallation', helper::FILTER_STRING_SHORT);
if ($zipFilename !== '') { if ($zipFilename !== '') {
$success = [
'success' => false,
'notification' => ''
];
$state = $this->install(self::FILE_DIR . 'source/' . $zipFilename, $checkValidMaj); $state = $this->install(self::FILE_DIR . 'source/' . $zipFilename, $checkValidMaj);
} }
$this->addOutput([ $this->addOutput([
@ -574,14 +571,11 @@ class plugin extends common
// Descripteur de l'archive // Descripteur de l'archive
$infoModule = helper::getModules(); $infoModule = helper::getModules();
//Nom de l'archive //Nom de l'archive
$fileName = $moduleId . $infoModule[$moduleId]['version'] . '.zip'; $fileName = $moduleId . $infoModule[$moduleId]['version'] . '.zip';
// Création du descripteur si absent // Régénération du module
if (!file_exists(self::MODULE_DIR . $moduleId . '/enum.json')) { $success = file_put_contents(self::MODULE_DIR . $moduleId . '/enum.json', json_encode($infoModule[$moduleId]));
$success = file_put_contents(self::MODULE_DIR . $moduleId . '/enum.json', json_encode([$moduleId => $infoModule[$moduleId]]));
}
// Construire l'archive // Construire l'archive
$this->makeZip(self::TEMP_DIR . $fileName, self::MODULE_DIR . $moduleId); $this->makeZip(self::TEMP_DIR . $fileName, self::MODULE_DIR . $moduleId);