From d6b04a0bb2bf09490674b00c074dfc8c2cc5e70d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Wed, 4 Dec 2024 22:13:25 +0100 Subject: [PATCH] =?UTF-8?q?Bug=20install=20module=20donn=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 1 + core/core.php | 249 ++++++++++++++++---------------- core/module/install/install.php | 2 + 3 files changed, 128 insertions(+), 124 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index d421e9c6..21e485f2 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,6 +11,7 @@ - Blog 7.12, corrige un bug d'affichage des articles lorsque le thème Moderne est sélectionné. - Corrige un dysfonctionnement de la fonction de tronquage subword qui perturbait l'affichage des articles de blog. - Activation de la mémorisation de l'onglet actif dans la configuration après validation du formulaire ou visite d'une autre page du site. +- Corrige un bug d'initialisation des données des modules du site de test. ## Versions 13.4.00 ** Améliorations :** diff --git a/core/core.php b/core/core.php index e17c673f..26c04f66 100644 --- a/core/core.php +++ b/core/core.php @@ -61,14 +61,14 @@ class common * Pour les versions supérieures à 13.4 et inférieure à 14, la branche reste sur v134 * La branche v13 est maintenue afin de télécharger un correctif permettant d'installer * les version supérieures. - */ + */ const ZWII_UPDATE_CHANNEL = 'v134'; // Valeurs possibles multiple de 10, 10 autorise 9 profils, 100 autorise 99 profils const MAX_PROFILS = 10; const MAX_FILE_WRITE_ATTEMPTS = 5; - + /** * Nombre maximal de tentatives d'encodage JSON */ @@ -102,13 +102,13 @@ class common "user" ]; /* - Cette variable est supprimée du test dans le routeur. - public static $accessExclude = [ - 'login', - 'logout', - "maintenance", - ]; - */ + Cette variable est supprimée du test dans le routeur. + public static $accessExclude = [ + 'login', + 'logout', + "maintenance", + ]; + */ private $data = []; private $hierarchy = [ 'all' => [], @@ -319,19 +319,19 @@ class common // Boutons de navigation dans la page public static $navIconTemplate = [ - 'open' => [ - 'left' => 'left-open', - 'right' => 'right-open', - ], - 'dir' => [ - 'left' => 'left', - 'right' => 'right-dir', - ], - 'big' => [ - 'left' => 'left-big', - 'right' => 'right-big', - ], - ]; + 'open' => [ + 'left' => 'left-open', + 'right' => 'right-open', + ], + 'dir' => [ + 'left' => 'left', + 'right' => 'right-dir', + ], + 'big' => [ + 'left' => 'left-big', + 'right' => 'right-big', + ], + ]; /** * Constructeur commun @@ -339,7 +339,7 @@ class common public function __construct() { // Récupération du cache des propriétés - if(isset($GLOBALS['common_cache'])) { + if (isset($GLOBALS['common_cache'])) { $this->input['_POST'] = $GLOBALS['common_cache']['input']['_POST']; $this->input['_COOKIE'] = $GLOBALS['common_cache']['input']['_COOKIE']; self::$siteContent = $GLOBALS['common_cache']['siteContent']; @@ -667,7 +667,7 @@ class common $write_result = file_put_contents($filename, $data, LOCK_EX | $flags); //$now = \DateTime::createFromFormat('U.u', microtime(true)); - //file_put_contents("tmplog.txt", '[SecurePut][' . $now->format('H:i:s.u') . ']--' . $filename . "\r\n", FILE_APPEND); + //file_put_contents("tmplog.txt", '[SecurePut][' . $now->format('H:i:s.u') . ']--' . $filename . "\r\n", FILE_APPEND); // Vérifie si l'écriture a réussi if ($write_result !== false && $write_result === $data_length) { @@ -685,7 +685,7 @@ class common return ($attempts < 5); } - + /** * Effacer les données de la page @@ -729,41 +729,41 @@ class common mkdir(self::DATA_DIR . $lang, 0755); } - // Localisation - if ( - $module === 'page' || - $module === 'module' || - $module === 'locale' - ) { - // Création des sous-dossiers localisés - if (!file_exists(self::DATA_DIR . $lang)) { - mkdir(self::DATA_DIR . $lang, 0755); - } - if (!file_exists(self::DATA_DIR . $lang . '/content')) { - mkdir(self::DATA_DIR . $lang . '/content', 0755); - } - // Site en français avec site exemple - if ($lang == 'fr_FR' && $sampleSite === true && $module === 'page') { - $this->setData([$module, init::$siteTemplate[$module]]); - // Création des pages - foreach (init::$siteContent as $key => $value) { - $this->setPage($key, $value['content'], 'fr_FR'); + switch ($module) { + case 'page': + case 'module': + case 'locale': + // Création des sous-dossiers localisés + if (!file_exists(self::DATA_DIR . $lang)) { + mkdir(self::DATA_DIR . $lang, 0755); } - // Version en langue étrangère ou fr_FR sans site de test - } else { - // En_EN par défaut si le contenu localisé n'est pas traduit - $langDefault = array_key_exists($lang, init::$defaultDataI18n) === true ? $lang : 'default'; - // Charger les données de cette langue - $this->setData([$module, init::$defaultDataI18n[$langDefault][$module]]); - // Créer la page d'accueil, une seule page dans cette configuration - $pageId = init::$defaultDataI18n[$langDefault]['locale']['homePageId']; - $content = init::$defaultDataI18n[$langDefault]['html']; - $this->setPage($pageId, $content, $lang); - //file_put_contents(self::DATA_DIR . $lang . '/content/' . init::$defaultDataI18n[$langDefault]['page'][$pageId]['content'], $content); - } - } else { - // Installation des données des autres modules cad theme profil font config, admin et core - $this->setData([$module, init::$defaultData[$module]]); + if (!file_exists(self::DATA_DIR . $lang . '/content')) { + mkdir(self::DATA_DIR . $lang . '/content', 0755); + } + // Site en français avec site exemple + if ($lang == 'fr_FR' && $sampleSite === true && $module !== 'locale') { + $this->setData([$module, init::$siteTemplate[$module]]); + // Création des pages + foreach (init::$siteContent as $key => $value) { + $this->setPage($key, $value['content'], 'fr_FR'); + } + // Version en langue étrangère ou fr_FR sans site de test + } else { + // En_EN par défaut si le contenu localisé n'est pas traduit + $langDefault = array_key_exists($lang, init::$defaultDataI18n) === true ? $lang : 'default'; + // Charger les données de cette langue + $this->setData([$module, init::$defaultDataI18n[$langDefault][$module]]); + // Créer la page d'accueil, une seule page dans cette configuration + $pageId = init::$defaultDataI18n[$langDefault]['locale']['homePageId']; + $content = init::$defaultDataI18n[$langDefault]['html']; + $this->setPage($pageId, $content, $lang); + + } + break; + default: + // Installation des données des autres modules cad theme profil font config, admin et core + $this->setData([$module, init::$defaultData[$module]]); + break; } } @@ -775,7 +775,7 @@ class common */ public function saveDB($module): void { - $db = $this->dataFiles[$module]; + $db = $this->dataFiles[$module]; $db->save(); } @@ -810,65 +810,65 @@ class common * Appelée par le core uniquement */ - private function buildHierarchy() - { - - $pages = helper::arrayColumn($this->getData(['page']), 'position', 'SORT_ASC'); - // Parents - foreach ($pages as $pageId => $pagePosition) { - if ( - // Page parent - $this->getData(['page', $pageId, 'parentPageId']) === "" - // Ignore les pages dont l'utilisateur n'a pas accès - and ($this->getData(['page', $pageId, 'group']) === self::GROUP_VISITOR - or ($this->isConnected() === true - //and $this->getUser('group') >= $this->getData(['page', $pageId, 'group']) - // Modification qui tient compte du profil de la page - and ($this->getUser('group') * self::MAX_PROFILS + $this->getUser('profil')) >= ($this->getData(['page', $pageId, 'group']) * self::MAX_PROFILS + $this->getData(['page', $pageId, 'profil'])) - - ) - ) - ) { - if ($pagePosition !== 0) { - $this->hierarchy['visible'][$pageId] = []; - } - if ($this->getData(['page', $pageId, 'block']) === 'bar') { - $this->hierarchy['bar'][$pageId] = []; - } - $this->hierarchy['all'][$pageId] = []; - } - } - // Enfants - foreach ($pages as $pageId => $pagePosition) { - - if ( - // Page parent - $parentId = $this->getData(['page', $pageId, 'parentPageId']) - // Ignore les pages dont l'utilisateur n'a pas accès - and ( - ( - $this->getData(['page', $pageId, 'group']) === self::GROUP_VISITOR - and - $this->getData(['page', $parentId, 'group']) === self::GROUP_VISITOR - ) - or ( - $this->isConnected() === true - and - $this->getUser('group') * self::MAX_PROFILS + $this->getUser('profil')) >= ($this->getData(['page', $pageId, 'group']) * self::MAX_PROFILS + $this->getData(['page', $pageId, 'profil']) - - ) - ) - ) { - if ($pagePosition !== 0) { - $this->hierarchy['visible'][$parentId][] = $pageId; - } - if ($this->getData(['page', $pageId, 'block']) === 'bar') { - $this->hierarchy['bar'][$pageId] = []; - } - $this->hierarchy['all'][$parentId][] = $pageId; - } - } - } + private function buildHierarchy() + { + + $pages = helper::arrayColumn($this->getData(['page']), 'position', 'SORT_ASC'); + // Parents + foreach ($pages as $pageId => $pagePosition) { + if ( + // Page parent + $this->getData(['page', $pageId, 'parentPageId']) === "" + // Ignore les pages dont l'utilisateur n'a pas accès + and ($this->getData(['page', $pageId, 'group']) === self::GROUP_VISITOR + or ($this->isConnected() === true + //and $this->getUser('group') >= $this->getData(['page', $pageId, 'group']) + // Modification qui tient compte du profil de la page + and ($this->getUser('group') * self::MAX_PROFILS + $this->getUser('profil')) >= ($this->getData(['page', $pageId, 'group']) * self::MAX_PROFILS + $this->getData(['page', $pageId, 'profil'])) + + ) + ) + ) { + if ($pagePosition !== 0) { + $this->hierarchy['visible'][$pageId] = []; + } + if ($this->getData(['page', $pageId, 'block']) === 'bar') { + $this->hierarchy['bar'][$pageId] = []; + } + $this->hierarchy['all'][$pageId] = []; + } + } + // Enfants + foreach ($pages as $pageId => $pagePosition) { + + if ( + // Page parent + $parentId = $this->getData(['page', $pageId, 'parentPageId']) + // Ignore les pages dont l'utilisateur n'a pas accès + and ( + ( + $this->getData(['page', $pageId, 'group']) === self::GROUP_VISITOR + and + $this->getData(['page', $parentId, 'group']) === self::GROUP_VISITOR + ) + or ( + $this->isConnected() === true + and + $this->getUser('group') * self::MAX_PROFILS + $this->getUser('profil')) >= ($this->getData(['page', $pageId, 'group']) * self::MAX_PROFILS + $this->getData(['page', $pageId, 'profil']) + + ) + ) + ) { + if ($pagePosition !== 0) { + $this->hierarchy['visible'][$parentId][] = $pageId; + } + if ($this->getData(['page', $pageId, 'block']) === 'bar') { + $this->hierarchy['bar'][$pageId] = []; + } + $this->hierarchy['all'][$parentId][] = $pageId; + } + } + } /** * Génère un fichier json avec la liste des pages @@ -1083,9 +1083,10 @@ class common /** * @return bool l'utilisateur est connecté true sinon false - */ - public function isConnected() { - return ( + */ + public function isConnected() + { + return ( !empty($this->getUser('authKey')) && $this->getUser('authKey') === $this->getInput('ZWII_AUTH_KEY')); @@ -1280,7 +1281,7 @@ class common $source_image = imagecreatefromwebp($src); break; case 'avif': - $source_image = imagecreatefromavif($src); + $source_image = imagecreatefromavif($src); } // Image valide if (is_object($source_image)) { @@ -1506,7 +1507,7 @@ class common public function saveLog($message = '') { // Journalisation - $dataLog = helper::dateUTF8('%Y%m%d', time(), self::$i18nUI) . ';' . helper::dateUTF8('%H:%M', time(), self::$i18nUI). ';'; + $dataLog = helper::dateUTF8('%Y%m%d', time(), self::$i18nUI) . ';' . helper::dateUTF8('%H:%M', time(), self::$i18nUI) . ';'; $dataLog .= helper::getIp($this->getData(['config', 'connect', 'anonymousIp'])) . ';'; $dataLog .= empty($this->getUser('id')) ? 'visitor;' : $this->getUser('id') . ';'; $dataLog .= $message ? $this->getUrl() . ';' . $message : $this->getUrl(); diff --git a/core/module/install/install.php b/core/module/install/install.php index d32008e7..47ed7b4a 100644 --- a/core/module/install/install.php +++ b/core/module/install/install.php @@ -128,12 +128,14 @@ class install extends common } // Installation du site de test + $sample = false; if ( $this->getInput('installDefaultData', helper::FILTER_BOOLEAN) === false && $_SESSION['ZWII_SITE_CONTENT'] === 'fr_FR' ) { $sample = true; } + $this->initData('page', $_SESSION['ZWII_SITE_CONTENT'], $sample); $this->initData('module', $_SESSION['ZWII_SITE_CONTENT'], $sample); $this->initData('locale', $_SESSION['ZWII_SITE_CONTENT'], $sample);