From 058e6c4974ebf64c2c7e0cce5d2da6d27b6bf346 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Mon, 4 Apr 2022 20:05:13 +0200 Subject: [PATCH 1/5] install nettoyage pb de droit ? --- core/module/addon/addon.php | 99 ++----------------------------------- 1 file changed, 4 insertions(+), 95 deletions(-) diff --git a/core/module/addon/addon.php b/core/module/addon/addon.php index 7cb5792d..b436d932 100644 --- a/core/module/addon/addon.php +++ b/core/module/addon/addon.php @@ -93,104 +93,13 @@ class addon extends common { * Fonction utilisée par upload et storeUpload */ private function install ($moduleName, $checkValid){ - $tempFolder = 'datamodules';//uniqid(); $zip = new ZipArchive(); if ($zip->open($moduleName) === TRUE) { - $notification = 'Archive ouverte'; - mkdir (self::TEMP_DIR . $tempFolder, 0755); - $zip->extractTo(self::TEMP_DIR . $tempFolder ); - // Archive de module ? - $success = false; - $notification = 'Ce n\'est pas l\'archive d\'un module !'; - $moduleDir = self::TEMP_DIR . $tempFolder . '/module'; - $moduleName = ''; - if ( is_dir( $moduleDir )) { - // Lire le nom du module - if ($dh = opendir( $moduleDir )) { - while ( false !== ($file = readdir($dh)) ) { - if ($file != "." && $file != "..") { - $moduleName = $file; - } - } - closedir($dh); - } - // Module normalisé ? - if( is_file( $moduleDir.'/'.$moduleName.'/'.$moduleName.'.php' ) AND is_file( $moduleDir.'/'.$moduleName.'/view/index/index.php' ) ){ - - // Lecture de la version et de la validation d'update du module pour validation de la mise à jour - // Pour une version <= version installée l'utilisateur doit cocher 'Mise à jour forcée' - $version = '0.0'; - $update = '0.0'; - $valUpdate = false; - $file = file_get_contents( $moduleDir.'/'.$moduleName.'/'.$moduleName.'.php'); - $file = str_replace(' ','',$file); - $file = str_replace("\t",'',$file); - $pos1 = strpos($file, 'constVERSION'); - if( $pos1 !== false){ - $posdeb = strpos($file, "'", $pos1); - $posend = strpos($file, "'", $posdeb + 1); - $version = substr($file, $posdeb + 1, $posend - $posdeb - 1); - } - $pos1 = strpos($file, 'constUPDATE'); - if( $pos1 !== false){ - $posdeb = strpos($file, "'", $pos1); - $posend = strpos($file, "'", $posdeb + 1); - $update = substr($file, $posdeb + 1, $posend - $posdeb - 1); - } - // Si version actuelle >= version indiquée dans UPDATE la mise à jour est validée - $infoModules = helper::getModules(); - if( $infoModules[$moduleName]['update'] >= $update ) $valUpdate = true; - - // Module déjà installé ? - $moduleInstal = false; - foreach($infoModules as $key=>$value ){ - if($moduleName === $key){ - $moduleInstal = true; - } - } - - // Validation de la maj si autorisation du concepteur du module ET - // ( Version plus récente OU Check de forçage ) - $valNewVersion = floatval($version); - $valInstalVersion = floatval( $infoModules[$moduleName]['version'] ); - $newVersion = false; - if( $valNewVersion > $valInstalVersion ) $newVersion = true; - $validMaj = $valUpdate && ( $newVersion || $checkValid); - - // Nouvelle installation ou mise à jour du module - if( ! $moduleInstal || $validMaj ){ - // Copie récursive des dossiers - $this->copyDir( self::TEMP_DIR . $tempFolder, './' ); - $success = true; - if( ! $moduleInstal ){ - $notification = 'Module '.$moduleName.' installé'; - } - else{ - $notification = 'Module '.$moduleName.' mis à jour'; - } - } - else{ - $success = false; - if( $valNewVersion == $valInstalVersion){ - $notification = ' Version détectée '.$version.' = à celle installée '.$infoModules[$moduleName]['version']; - } - else{ - $notification = ' Version détectée '.$version.' < à celle installée '.$infoModules[$moduleName]['version']; - } - if( $valUpdate === false){ - if( $infoModules[$moduleName]['update'] === $update ){ - $notification = ' Mise à jour par ce procédé interdite par le concepteur du module'; - } - else{ - $notification = ' Mise à jour par ce procédé interdite, votre version est trop ancienne'; - } - } - } - } - } - // Supprimer le dossier temporaire même si le module est invalide - $this->removeDir(self::TEMP_DIR . $tempFolder); + $u = uniqid(); + $zip->extractTo( self::TEMP_DIR . $u ); + $success = $this->copyDir(self::TEMP_DIR . $u, '/'); $zip->close(); + } else { // erreur à l'ouverture $success = false; From 4ab22842316e30c16cf5f0bb86f808c178635ffd Mon Sep 17 00:00:00 2001 From: fredtempez Date: Tue, 5 Apr 2022 11:04:56 +0200 Subject: [PATCH 2/5] Revert "install nettoyage pb de droit ?" This reverts commit 058e6c4974ebf64c2c7e0cce5d2da6d27b6bf346. --- core/module/addon/addon.php | 99 +++++++++++++++++++++++++++++++++++-- 1 file changed, 95 insertions(+), 4 deletions(-) diff --git a/core/module/addon/addon.php b/core/module/addon/addon.php index b436d932..7cb5792d 100644 --- a/core/module/addon/addon.php +++ b/core/module/addon/addon.php @@ -93,13 +93,104 @@ class addon extends common { * Fonction utilisée par upload et storeUpload */ private function install ($moduleName, $checkValid){ + $tempFolder = 'datamodules';//uniqid(); $zip = new ZipArchive(); if ($zip->open($moduleName) === TRUE) { - $u = uniqid(); - $zip->extractTo( self::TEMP_DIR . $u ); - $success = $this->copyDir(self::TEMP_DIR . $u, '/'); - $zip->close(); + $notification = 'Archive ouverte'; + mkdir (self::TEMP_DIR . $tempFolder, 0755); + $zip->extractTo(self::TEMP_DIR . $tempFolder ); + // Archive de module ? + $success = false; + $notification = 'Ce n\'est pas l\'archive d\'un module !'; + $moduleDir = self::TEMP_DIR . $tempFolder . '/module'; + $moduleName = ''; + if ( is_dir( $moduleDir )) { + // Lire le nom du module + if ($dh = opendir( $moduleDir )) { + while ( false !== ($file = readdir($dh)) ) { + if ($file != "." && $file != "..") { + $moduleName = $file; + } + } + closedir($dh); + } + // Module normalisé ? + if( is_file( $moduleDir.'/'.$moduleName.'/'.$moduleName.'.php' ) AND is_file( $moduleDir.'/'.$moduleName.'/view/index/index.php' ) ){ + // Lecture de la version et de la validation d'update du module pour validation de la mise à jour + // Pour une version <= version installée l'utilisateur doit cocher 'Mise à jour forcée' + $version = '0.0'; + $update = '0.0'; + $valUpdate = false; + $file = file_get_contents( $moduleDir.'/'.$moduleName.'/'.$moduleName.'.php'); + $file = str_replace(' ','',$file); + $file = str_replace("\t",'',$file); + $pos1 = strpos($file, 'constVERSION'); + if( $pos1 !== false){ + $posdeb = strpos($file, "'", $pos1); + $posend = strpos($file, "'", $posdeb + 1); + $version = substr($file, $posdeb + 1, $posend - $posdeb - 1); + } + $pos1 = strpos($file, 'constUPDATE'); + if( $pos1 !== false){ + $posdeb = strpos($file, "'", $pos1); + $posend = strpos($file, "'", $posdeb + 1); + $update = substr($file, $posdeb + 1, $posend - $posdeb - 1); + } + // Si version actuelle >= version indiquée dans UPDATE la mise à jour est validée + $infoModules = helper::getModules(); + if( $infoModules[$moduleName]['update'] >= $update ) $valUpdate = true; + + // Module déjà installé ? + $moduleInstal = false; + foreach($infoModules as $key=>$value ){ + if($moduleName === $key){ + $moduleInstal = true; + } + } + + // Validation de la maj si autorisation du concepteur du module ET + // ( Version plus récente OU Check de forçage ) + $valNewVersion = floatval($version); + $valInstalVersion = floatval( $infoModules[$moduleName]['version'] ); + $newVersion = false; + if( $valNewVersion > $valInstalVersion ) $newVersion = true; + $validMaj = $valUpdate && ( $newVersion || $checkValid); + + // Nouvelle installation ou mise à jour du module + if( ! $moduleInstal || $validMaj ){ + // Copie récursive des dossiers + $this->copyDir( self::TEMP_DIR . $tempFolder, './' ); + $success = true; + if( ! $moduleInstal ){ + $notification = 'Module '.$moduleName.' installé'; + } + else{ + $notification = 'Module '.$moduleName.' mis à jour'; + } + } + else{ + $success = false; + if( $valNewVersion == $valInstalVersion){ + $notification = ' Version détectée '.$version.' = à celle installée '.$infoModules[$moduleName]['version']; + } + else{ + $notification = ' Version détectée '.$version.' < à celle installée '.$infoModules[$moduleName]['version']; + } + if( $valUpdate === false){ + if( $infoModules[$moduleName]['update'] === $update ){ + $notification = ' Mise à jour par ce procédé interdite par le concepteur du module'; + } + else{ + $notification = ' Mise à jour par ce procédé interdite, votre version est trop ancienne'; + } + } + } + } + } + // Supprimer le dossier temporaire même si le module est invalide + $this->removeDir(self::TEMP_DIR . $tempFolder); + $zip->close(); } else { // erreur à l'ouverture $success = false; From 81ed0a5cacd405ff3051d8233ae4e808a74deb23 Mon Sep 17 00:00:00 2001 From: fredtempez Date: Tue, 5 Apr 2022 11:10:39 +0200 Subject: [PATCH 3/5] suspension l'option d'installation d'un module --- CHANGES.md | 1 + core/module/addon/view/index/index.help.html | 8 -------- core/module/addon/view/index/index.php | 8 +------- 3 files changed, 2 insertions(+), 15 deletions(-) delete mode 100644 core/module/addon/view/index/index.help.html diff --git a/CHANGES.md b/CHANGES.md index 7bbf7bde..93f41a6b 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -5,6 +5,7 @@ - Prise en charge des fontes Web Safe. Les fontes initiales sont transférées dans les fontes optionnelles, donc effaçables. - Toutes les fontes en ligne sont désormais acceptées quel que soit le CDN, Google Fonte (avec preconnect), CDN Fontes ou autre. - Désormais, les URL internes sont relatives, cela signifie qu'elles ne contiendront plus le domaine et le chemin d'accès au site. Cela permettra le déplacement d'un site d'un hébergement à un autre, d'un dossier d'hébergement à un autre, sans avoir à convertir les adresses internes. Les données d'un site mis à jour et importées d'une version antérieures sont automatiquement converties. En conséquence, le bloc de conversion de la fenêtre d'import est supprimé. +- Suppression temporaire de l'option d'installation d'un module, il faudra passer par une connexion FTP pour cela. Cette fonctionnalité a été réécriter dans 11.2 à venir. ### Améliorations : - Configuration de la bannière, modalité d'affichage de la taille d'image recommandée et affichage des dimensions de l'image. - Edition d'une page, le nom court se complète automatiquement. diff --git a/core/module/addon/view/index/index.help.html b/core/module/addon/view/index/index.help.html deleted file mode 100644 index 8af49c96..00000000 --- a/core/module/addon/view/index/index.help.html +++ /dev/null @@ -1,8 +0,0 @@ -

MODULES INSTALLES

-Les modules installés sont listés dans le tableau avec leur nom usuel (alias) et leur numéro de version. -Si le module est utilisé le nom de la page ou des pages apparaît, dans le cas contraire une icône permet de le supprimer. -

EXPORTER IMPORTER

-

Exporter produit une archive au nom du module contenant les pages concernées ainsi que les données et ressources utilisées par le module dans ces pages.

-

Vous pouvez vous en servir comme d'une sauvegarde partielle ou pour transférer les pages et les données du module vers un autre site.

-

Une fois le module installé l'import permet de restaurer les pages et les données sauvegardées. Vous devrez avoir au préalable transféré le fichier zip d'un export sur votre serveur par 'Gérer les fichiers'. -Si une page de même nom existe sur votre site vous serez invité à modifier son nom.

diff --git a/core/module/addon/view/index/index.php b/core/module/addon/view/index/index.php index e1e9c61f..1c4475c1 100644 --- a/core/module/addon/view/index/index.php +++ b/core/module/addon/view/index/index.php @@ -16,18 +16,12 @@ 'class' => 'buttonHelp' ]); ?> -
+
helper::baseUrl() . 'addon/store', 'value' => 'Catalogue en ligne' ]); ?>
-
- helper::baseUrl() . 'addon/upload', - 'value' => 'Installer' - ]); ?> -
From a263ebc2a4fb0ca3e9e4e6929ac06ee6aaa45ea0 Mon Sep 17 00:00:00 2001 From: fredtempez Date: Tue, 5 Apr 2022 11:11:30 +0200 Subject: [PATCH 4/5] sotre renvoie vers addon et non install --- core/module/addon/view/store/store.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/module/addon/view/store/store.php b/core/module/addon/view/store/store.php index e1324a6a..ae029aff 100644 --- a/core/module/addon/view/store/store.php +++ b/core/module/addon/view/store/store.php @@ -2,7 +2,7 @@
'buttonGrey', - 'href' => helper::baseUrl() . 'addon/upload', + 'href' => helper::baseUrl() . 'addon', 'ico' => 'left', 'value' => 'Retour' ]); ?> From c10149eb422ddd39bcb4aef3120c3533d6ce4a66 Mon Sep 17 00:00:00 2001 From: fredtempez Date: Wed, 6 Apr 2022 09:38:58 +0200 Subject: [PATCH 5/5] =?UTF-8?q?Compatibilit=C3=A9=20arrayColumn=20et=20arr?= =?UTF-8?q?ayCollumn?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/class/helper.class.php | 8 ++++++++ core/core.php | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/core/class/helper.class.php b/core/class/helper.class.php index fc623eab..43bb9a53 100644 --- a/core/class/helper.class.php +++ b/core/class/helper.class.php @@ -104,6 +104,14 @@ class helper { return $newArray; } + /** + * Compatibilité avec les anciens modules + */ + public static function arrayCollumn($array, $column, $sort = null) { + return (helper::arrayColumn($array, $column, $sort)); + } + + /** * Génère un backup des données de site diff --git a/core/core.php b/core/core.php index 86d53c7b..1a5dc92f 100644 --- a/core/core.php +++ b/core/core.php @@ -346,7 +346,7 @@ class common { // Construit la liste des pages parents/enfants if($this->hierarchy['all'] === []) { - $pages = helper::arrayColumn($this->getData(['page']), 'position', 'SORT_ASC'); + $pages = helper::arrayCollumn($this->getData(['page']), 'position', 'SORT_ASC'); // Parents foreach($pages as $pageId => $pagePosition) { if(