From 998eb3b8a1a55b517a6a0fe8f945530caf2de835 Mon Sep 17 00:00:00 2001 From: Fred Tempez Date: Wed, 21 Aug 2024 10:20:33 +0200 Subject: [PATCH 01/60] typo changes --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index ac43abd2..d76fa0a3 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -6,7 +6,7 @@ - Corrige le filtre FLOAT du helper qui supprimait la virgule flottante. - Corrige des bugs dans le module Slider qui passe en version 7.0, ajout d'une option d'étiquette sous les images. -** Modifications: ** +** Modifications : ** - Mise à jour du module News 5.9, taille d'un bouton. - Mise à jour du module Blog 7.10, bloque la soumission d'un commentaire vide. - Ajoute les filtres DATE et TIME pour l'affichage correct des champs de formulaire. From bc70f39ba5ca32ccf013282a77f3994885519fa6 Mon Sep 17 00:00:00 2001 From: Fred Tempez Date: Thu, 22 Aug 2024 05:31:27 +0200 Subject: [PATCH 02/60] 13.3.06 couleurs des balises h1, h3 et A dans le slider --- CHANGES.md | 3 +++ core/core.php | 2 +- module/slider/changes.md | 2 ++ module/slider/view/index/index.css | 7 ++++--- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index d76fa0a3..49ef70c8 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,8 @@ # Notes de mises à jour +## Versions 13.3.06 +Corrige la feuille de style du slider les balises H1, H3 et A. + ## Versions 13.3.05 ** Corrections : ** - Corrige la génération des miniatures au format avif et webp. diff --git a/core/core.php b/core/core.php index ef28d336..7451a1db 100644 --- a/core/core.php +++ b/core/core.php @@ -51,7 +51,7 @@ class common const ACCESS_TIMER = 1800; // Numéro de version - const ZWII_VERSION = '13.3.05'; + const ZWII_VERSION = '13.3.06'; // URL autoupdate const ZWII_UPDATE_URL = 'https://forge.chapril.org/ZwiiCMS-Team/cms-update/raw/branch/master/'; diff --git a/module/slider/changes.md b/module/slider/changes.md index 3beebf2e..051ea442 100644 --- a/module/slider/changes.md +++ b/module/slider/changes.md @@ -1,3 +1,5 @@ +# Version 7.1 + # Version 7.0 - Ajoute un affichage de la légende sous l'image - Corrige un tri inversé diff --git a/module/slider/view/index/index.css b/module/slider/view/index/index.css index da8bfe5f..a4891cd1 100644 --- a/module/slider/view/index/index.css +++ b/module/slider/view/index/index.css @@ -52,21 +52,22 @@ margin-bottom: 50px; } - h1 { + .rslides h1 { font: 600 28px/36px sans-serif; margin: 50px 0; } - h3 { + .rslides h3 { font: 600 18px/24px sans-serif; color: #999; margin: 0 0 20px; } - a { + .rslides a { color: #222; } + .rslides { margin: 0 auto; } From 3e3781bc28b4a836688a8756495359d80ecfc585 Mon Sep 17 00:00:00 2001 From: Fred Tempez Date: Thu, 22 Aug 2024 05:33:10 +0200 Subject: [PATCH 03/60] slider 7.1 --- module/slider/slider.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/slider/slider.php b/module/slider/slider.php index fc05844d..125d7f73 100644 --- a/module/slider/slider.php +++ b/module/slider/slider.php @@ -27,7 +27,7 @@ class slider extends common 'index' => self::GROUP_VISITOR ]; - const VERSION = '7.0'; + const VERSION = '7.1'; const REALNAME = 'Carrousel'; const DELETE = true; const UPDATE = '0.0'; From fa158effc33a3524751cc37460f1fb1c6e1d5809 Mon Sep 17 00:00:00 2001 From: Fred Tempez Date: Fri, 23 Aug 2024 21:18:37 +0200 Subject: [PATCH 04/60] 13.3.10 Bug bouton effacement --- CHANGES.md | 3 ++- core/module/page/view/edit/edit.php | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 49ef70c8..2c84c15d 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,7 +1,8 @@ # Notes de mises à jour ## Versions 13.3.06 -Corrige la feuille de style du slider les balises H1, H3 et A. +- Répare le bouton d'effacement en mode édition d'une page. +- Corrige la feuille de style du slider les balises H1, H3 et A. ## Versions 13.3.05 ** Corrections : ** diff --git a/core/module/page/view/edit/edit.php b/core/module/page/view/edit/edit.php index b597d59e..4bdd76af 100644 --- a/core/module/page/view/edit/edit.php +++ b/core/module/page/view/edit/edit.php @@ -19,7 +19,7 @@
'buttonRed', - 'href' => helper::baseUrl() . 'page/edit/' . $this->getUrl(2) . '/' . self::$siteContent, + 'href' => helper::baseUrl() . 'page/delete/' . $this->getUrl(2) . '/' . self::$siteContent, 'value' => template::ico('trash'), 'help' => 'Effacer la page' ]); ?> From 67d94bce6147d9f8720355920ff55b3694c3026c Mon Sep 17 00:00:00 2001 From: Fred Tempez Date: Sat, 24 Aug 2024 07:18:32 +0200 Subject: [PATCH 05/60] =?UTF-8?q?13.3.06=20fix=20bug=20mot=20cl=C3=A9=20[M?= =?UTF-8?q?ODULE]=20absent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 2 ++ core/class/router.class.php | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 2c84c15d..78fb425d 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,8 +1,10 @@ # Notes de mises à jour ## Versions 13.3.06 +** Corrections : ** - Répare le bouton d'effacement en mode édition d'une page. - Corrige la feuille de style du slider les balises H1, H3 et A. +- Corrige l'absence de contenu de page lorsque le module est en position libre et que le mot clé [MODULE] n'a pas été inséré. ## Versions 13.3.05 ** Corrections : ** diff --git a/core/class/router.class.php b/core/class/router.class.php index 83f462da..dddfdda6 100644 --- a/core/class/router.class.php +++ b/core/class/router.class.php @@ -723,7 +723,7 @@ class core extends common $this->addOutput([ 'content' => ob_get_clean() . ($output['showPageContent'] ? $pageContent : '') ]); - } else if ($modpos === 'free') { + } elseif ($modpos === 'free' && strstr($pageContent, '[MODULE]')) { if (strstr($pageContent, '[MODULE]', true) === false) { $begin = strstr($pageContent, '[]', true); } else { From 3598ab2954ce7d4e64d86dfe792803bc7eff41f9 Mon Sep 17 00:00:00 2001 From: Fred Tempez Date: Sat, 24 Aug 2024 15:04:29 +0200 Subject: [PATCH 06/60] disable save to json pretty print --- core/class/jsondb/JsonDb.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/class/jsondb/JsonDb.class.php b/core/class/jsondb/JsonDb.class.php index 760e4445..d96f8b99 100644 --- a/core/class/jsondb/JsonDb.class.php +++ b/core/class/jsondb/JsonDb.class.php @@ -149,7 +149,8 @@ class JsonDb extends \Prowebcraft\Dot public function save() { // Encode les données au format JSON avec les options spécifiées - $encoded_data = json_encode($this->data, JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT | JSON_PRETTY_PRINT); + //$encoded_data = json_encode($this->data, JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT | JSON_PRETTY_PRINT); + $encoded_data = json_encode($this->data, JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT); // Vérifie la longueur de la chaîne JSON encodée $encoded_length = strlen($encoded_data); From de0749b51b2e03bafa35f8d683e2f8ef4e99b0c2 Mon Sep 17 00:00:00 2001 From: Fred Tempez Date: Sat, 24 Aug 2024 17:29:17 +0200 Subject: [PATCH 07/60] 13.3.06 Login, connexion persistante --- CHANGES.md | 1 + core/class/helper.class.php | 4 ++-- core/module/user/user.php | 33 +++++++++++++++++++++++---------- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 78fb425d..206c1635 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -5,6 +5,7 @@ - Répare le bouton d'effacement en mode édition d'une page. - Corrige la feuille de style du slider les balises H1, H3 et A. - Corrige l'absence de contenu de page lorsque le module est en position libre et que le mot clé [MODULE] n'a pas été inséré. +- Corrige l'option "REster connecter sur ce navigateur' dont la connexion est désormais réellement persistente. ## Versions 13.3.05 ** Corrections : ** diff --git a/core/class/helper.class.php b/core/class/helper.class.php index da8c3a57..1753918e 100644 --- a/core/class/helper.class.php +++ b/core/class/helper.class.php @@ -407,9 +407,9 @@ class helper * @param string $cookieKey Clé du cookie à supprimer */ public static function deleteCookie($cookieKey) - { - unset($_COOKIE[$cookieKey]); + { setcookie($cookieKey, '', time() - 3600, helper::baseUrl(false, false), '', false, true); + unset($_COOKIE[$cookieKey]); } /** diff --git a/core/module/user/user.php b/core/module/user/user.php index 48a212c6..4e5ebe26 100644 --- a/core/module/user/user.php +++ b/core/module/user/user.php @@ -574,7 +574,7 @@ class user extends common // Stoppe si le profil est affecté foreach ($groups as $userId) { if ((string) $this->getData(['user', $userId, 'profil']) === $this->getUrl(3)) { - $profilUsed= false; + $profilUsed = false; } } foreach ($this->getData(['profil']) as $groupId => $groupData) { @@ -935,11 +935,11 @@ class user extends common // recherche les membres du groupe $groups = helper::arrayColumn($this->getData(['user']), 'group'); $groups = array_keys($groups, $this->getUrl(2)); - $flag= true; + $flag = true; // Stoppe si le profil est affecté foreach ($groups as $userId) { if ((string) $this->getData(['user', $userId, 'profil']) === $this->getUrl(3)) { - $flag= false; + $flag = false; } } if ( @@ -956,7 +956,7 @@ class user extends common if ($flag) { $this->deleteData(['profil', $this->getUrl(2), $this->getUrl(3)]); } - + // Valeurs en sortie $this->addOutput([ 'redirect' => helper::baseUrl() . $this->getUrl(0) . '/profil', @@ -1045,10 +1045,22 @@ class user extends common // RAZ $this->setData(['user', $userId, 'connectFail', 0]); $this->setData(['user', $userId, 'connectTimeout', 0]); - // Expiration + + // Validité du cookie $expire = $this->getInput('userLoginLongTime', helper::FILTER_BOOLEAN) === true ? strtotime("+1 year") : 0; - setcookie('ZWII_USER_ID', $userId, $expire, helper::baseUrl(false, false), '', helper::isHttps(), true); - setcookie('ZWII_USER_PASSWORD', $this->getData(['user', $userId, 'password']), $expire, helper::baseUrl(false, false), '', helper::isHttps(), true); + switch ($this->getInput('userLoginLongTime', helper::FILTER_BOOLEAN)) { + case false: + // Cookie de session + setcookie('ZWII_USER_ID', $userId, $expire, helper::baseUrl(false, false), '', helper::isHttps(), true); + setcookie('ZWII_USER_PASSWORD', $this->getData(['user', $userId, 'password']), $expire, helper::baseUrl(false, false), '', helper::isHttps(), true); + break; + default: + // Cookie persistant + setcookie('ZWII_USER_ID', $userId, $expire, helper::baseUrl(false, false)); + setcookie('ZWII_USER_PASSWORD', $this->getData(['user', $userId, 'password']), $expire, helper::baseUrl(false, false)); + break; + } + // Accès multiples avec le même compte $this->setData(['user', $userId, 'accessCsrf', $_SESSION['csrf']]); // Valeurs en sortie lorsque le site est en maintenance et que l'utilisateur n'est pas administrateur @@ -1064,8 +1076,9 @@ class user extends common } else { $logStatus = 'Connexion réussie'; $pageId = $this->getUrl(2); - if ($this->getData(['config', 'page404']) === $pageId - || $this->getData(['config', 'page403']) === $pageId + if ( + $this->getData(['config', 'page404']) === $pageId + || $this->getData(['config', 'page403']) === $pageId ) { $pageId = ''; } @@ -1391,7 +1404,7 @@ class user extends common // Ignorer les entrées de répertoire parent et actuel if ($file == '.' || $file == '..') { continue; - } + } // Construisez le chemin complet du fichier ou du répertoire $path = $dir . '/' . $file; // Vérifiez si c'est un répertoire From 72655e667313129a38dff0da8e48b18cb2116d7e Mon Sep 17 00:00:00 2001 From: Fred Tempez Date: Wed, 28 Aug 2024 20:56:16 +0200 Subject: [PATCH 08/60] correction url catalogue --- CHANGES.md | 1 + core/module/plugin/plugin.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 206c1635..61ebcf56 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -6,6 +6,7 @@ - Corrige la feuille de style du slider les balises H1, H3 et A. - Corrige l'absence de contenu de page lorsque le module est en position libre et que le mot clé [MODULE] n'a pas été inséré. - Corrige l'option "REster connecter sur ce navigateur' dont la connexion est désormais réellement persistente. +- Supprime un slash à la fin de l'URL du catalogue. ## Versions 13.3.05 ** Corrections : ** diff --git a/core/module/plugin/plugin.php b/core/module/plugin/plugin.php index 19199914..131f5b9d 100644 --- a/core/module/plugin/plugin.php +++ b/core/module/plugin/plugin.php @@ -31,7 +31,7 @@ class plugin extends common // URL des modules const BASEURL_STORE = 'https://store.zwiicms.fr/'; - const MODULE_STORE = '?modules/'; + const MODULE_STORE = '?modules'; // Gestion des modules From 2d3b999d2757c81395e6e46198eb6867e5033573 Mon Sep 17 00:00:00 2001 From: Fred Tempez Date: Wed, 28 Aug 2024 21:17:12 +0200 Subject: [PATCH 09/60] Revert plugin --- core/module/plugin/plugin.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/module/plugin/plugin.php b/core/module/plugin/plugin.php index 131f5b9d..19199914 100644 --- a/core/module/plugin/plugin.php +++ b/core/module/plugin/plugin.php @@ -31,7 +31,7 @@ class plugin extends common // URL des modules const BASEURL_STORE = 'https://store.zwiicms.fr/'; - const MODULE_STORE = '?modules'; + const MODULE_STORE = '?modules/'; // Gestion des modules From 62437c8fac916ed09c9a17495d6d60469a9b740a Mon Sep 17 00:00:00 2001 From: Fred Tempez Date: Thu, 29 Aug 2024 06:45:40 +0200 Subject: [PATCH 10/60] =?UTF-8?q?Warning=20=C3=A0=20la=20cr=C3=A9ation=20d?= =?UTF-8?q?'une=20nouvelle=20page?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 1 + core/module/page/page.php | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 61ebcf56..570d621e 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -7,6 +7,7 @@ - Corrige l'absence de contenu de page lorsque le module est en position libre et que le mot clé [MODULE] n'a pas été inséré. - Corrige l'option "REster connecter sur ce navigateur' dont la connexion est désormais réellement persistente. - Supprime un slash à la fin de l'URL du catalogue. +- Eviter un warning lors de la création d'une nouvelle page. ## Versions 13.3.05 ** Corrections : ** diff --git a/core/module/page/page.php b/core/module/page/page.php index 198bb432..91993043 100644 --- a/core/module/page/page.php +++ b/core/module/page/page.php @@ -201,8 +201,8 @@ class page extends common //$this->secure_file_put_contents(self::DATA_DIR . self::$siteContent . '/content/' . $pageId . '.html', '

Contenu de votre nouvelle page.

'); $this->setPage($pageId, '

Contenu de votre nouvelle page.

', self::$siteContent); - // Met à jour le sitemap - $this->updateSitemap(); + // Ne met à jour le sitemap pour éviter un warning, de toute manière la nouvelle page doit être éditée. + // $this->updateSitemap(); // Valeurs en sortie $this->addOutput([ From 7f6d010b9c7715f00a856a10f407cb1b146c5330 Mon Sep 17 00:00:00 2001 From: Fred Tempez Date: Thu, 5 Sep 2024 11:02:01 +0200 Subject: [PATCH 11/60] =?UTF-8?q?13.4.00=20s=C3=A9lecteur=20de=20fichier?= =?UTF-8?q?=20am=C3=A9lior=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 4 + core/class/template.class.php | 3 + core/module/config/view/setup/setup.php | 54 ++--- core/module/config/view/social/social.php | 40 ++-- core/module/page/view/edit/edit.php | 43 +--- core/module/theme/view/body/body.php | 15 +- core/module/theme/view/header/header.php | 20 +- core/module/theme/view/menu/menu.php | 27 +-- module/blog/blog.php | 2 +- module/blog/changes.md | 3 +- module/blog/view/edit/edit.php | 271 +++++++++++----------- module/form/changes.md | 2 + module/form/form.php | 2 +- module/form/view/option/option.php | 11 +- 14 files changed, 217 insertions(+), 280 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 570d621e..4f971c5c 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,9 @@ # Notes de mises à jour +## Versions 13.4.00 +** Amélioration ** +- Le sélecteur de fichier affiche le chemin d'accès du fichier présent dans le champ dans le gestionnaire de fichier. + ## Versions 13.3.06 ** Corrections : ** - Répare le bouton d'effacement en mode édition d'une page. diff --git a/core/class/template.class.php b/core/class/template.class.php index 5cbfda6e..fae10763 100644 --- a/core/class/template.class.php +++ b/core/class/template.class.php @@ -325,6 +325,7 @@ class template 'name' => $nameId, 'type' => 2, 'value' => '', + 'folder' => '', 'language' => 'fr_FR' ], $attributes); // Traduction de l'aide et de l'étiquette @@ -367,6 +368,8 @@ class template '&field_id=' . $attributes['id'] . '&type=' . $attributes['type'] . '&akey=' . md5_file(core::DATA_DIR . 'core.json') . + // Ajoute le nom du dossier si la variable est passée + (!empty($attributes['folder']) ? '&fldr=' . $attributes['folder'] : '') . ($attributes['extensions'] ? '&extensions=' . $attributes['extensions'] : '') . '" class="inputFile %s %s" diff --git a/core/module/config/view/setup/setup.php b/core/module/config/view/setup/setup.php index 08ca40e3..e400b866 100644 --- a/core/module/config/view/setup/setup.php +++ b/core/module/config/view/setup/setup.php @@ -3,12 +3,6 @@

- -

@@ -17,7 +11,8 @@ 'language' => $this->getData(['user', $this->getUser('id'), 'language']), 'help' => 'Pensez à supprimer le cache de votre navigateur si la favicon ne change pas.', 'label' => 'Favicon', - 'value' => $this->getData(['config', 'favicon']) + 'value' => $this->getData(['config', 'favicon']), + 'folder' => $this->getData(['config', 'favicon']) ? dirname($this->getData(['config', 'favicon'])) : '' ]); ?>
@@ -26,7 +21,8 @@ 'language' => $this->getData(['user', $this->getUser('id'), 'language']), 'help' => 'Sélectionnez une icône adaptée à un thème sombre.
Pensez à supprimer le cache de votre navigateur si la favicon ne change pas.', 'label' => 'Favicon thème sombre', - 'value' => $this->getData(['config', 'faviconDark']) + 'value' => $this->getData(['config', 'faviconDark']), + 'folder' => $this->getData(['config', 'faviconDark']) ? dirname($this->getData(['config', 'faviconDark'])) : '' ]); ?>
@@ -47,8 +43,8 @@
helper::checkRewrite(), - 'help' => 'Supprime le point d\'interrogation dans les URL, l\'option est indisponible avec les autres serveurs Web', - 'disabled' => stripos($_SERVER["SERVER_SOFTWARE"], 'Apache') === false and $module->isModRewriteEnabled() + 'help' => 'Supprime le point d\'interrogation dans les URL, l\'option est indisponible avec les autres serveurs Web', + 'disabled' => stripos($_SERVER["SERVER_SOFTWARE"], 'Apache') === false and $module->isModRewriteEnabled() ]); ?>
@@ -59,12 +55,6 @@

-

@@ -90,8 +80,8 @@ ]); ?>
-
Version installée : 
-
Version en ligne  : 
+
Version installée : 
+
Version en ligne  : 

-

@@ -169,12 +153,6 @@

-

@@ -198,13 +176,21 @@
-

ZwiiCMS Site Web - Forum +

ZwiiCMS Site Web - Forum

- Licence Creative Commons -

Cette œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Pas de Modification 4.0 International.

-

Pour voir une copie de cette licence, visitez http://creativecommons.org/licenses/by-nc-nd/4.0/ ou écrivez à Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.

+ Licence Creative Commons +

Cette œuvre est mise à disposition selon les termes de la Licence Creative Commons + Attribution - Pas d'Utilisation Commerciale - Pas de Modification 4.0 + International.

+

Pour voir une copie de cette licence, visitez + http://creativecommons.org/licenses/by-nc-nd/4.0/ ou écrivez à Creative Commons, PO Box + 1866, Mountain View, CA 94042, USA.

diff --git a/core/module/config/view/social/social.php b/core/module/config/view/social/social.php index 0430d856..fefea7c6 100644 --- a/core/module/config/view/social/social.php +++ b/core/module/config/view/social/social.php @@ -4,11 +4,6 @@

-

@@ -18,29 +13,30 @@ 'language' => $this->getData(['user', $this->getUser('id'), 'language']), 'label' => 'Image Open Graph', 'value' => $this->getData(['config', 'seo', 'openGraphImage']), + 'folder' => $this->getData(['config', 'seo', 'openGraphImage']) ? dirname($this->getData(['config', 'seo', 'openGraphImage'])) : '', 'type' => 1, - 'help' => sprintf('%s : JPG - PNG
', helper::translate('Format')) . - sprintf('%s : 1200 x 630 pixels
', helper::translate('Dimensions minimales')) . - sprintf('%s : 1.91:1
', helper::translate('Ratio')) . - sprintf('%s : %s, %s
', helper::translate('Taille maximale du fichier'), helper::translate('5 Mo pour les images JPEG'), helper::translate('1 Mo pour les images PNG')) + 'help' => sprintf('%s : JPG - PNG
', helper::translate('Format')) . + sprintf('%s : 1200 x 630 pixels
', helper::translate('Dimensions minimales')) . + sprintf('%s : 1.91:1
', helper::translate('Ratio')) . + sprintf('%s : %s, %s
', helper::translate('Taille maximale du fichier'), helper::translate('5 Mo pour les images JPEG'), helper::translate('1 Mo pour les images PNG')) ]); ?>
-

- %s', helper::translate('Format'), $module::$imageOpenGraph['type']); ?> -

-

+

+ %s', helper::translate('Format'), $module::$imageOpenGraph['type']); ?> +

+

%s x %s pixels', helper::translate('Dimensions minimales'), $module::$imageOpenGraph['wide'], $module::$imageOpenGraph['height'] ); ?> -

-

+

+

%s:1' , helper::translate('Ratio'), round($module::$imageOpenGraph['ratio'], 2)); ?> -

-

- %s', helper::translate('Poids'), $module::$imageOpenGraph['size']); ?> -

+

+

+ %s', helper::translate('Poids'), $module::$imageOpenGraph['size']); ?> +

@@ -84,12 +80,6 @@

- -

diff --git a/core/module/page/view/edit/edit.php b/core/module/page/view/edit/edit.php index 4bdd76af..edb2adb3 100644 --- a/core/module/page/view/edit/edit.php +++ b/core/module/page/view/edit/edit.php @@ -7,16 +7,7 @@ 'value' => template::ico('left') ]); ?>
-
- 'https://doc.zwiicms.fr/edition-des-pages', - 'target' => '_blank', - 'value' => template::ico('help'), - 'class' => 'buttonHelp', - 'help' => 'Consulter l\'aide en ligne' - ]); */?> -
-
+
'buttonRed', 'href' => helper::baseUrl() . 'page/delete/' . $this->getUrl(2) . '/' . self::$siteContent, @@ -26,7 +17,7 @@
helper::baseUrl() . 'page/edit/' . $this->getUrl(2) . '/' . self::$siteContent, + 'href' => helper::baseUrl() . 'page/duplicate/' . $this->getUrl(2) . '/' . self::$siteContent, 'value' => template::ico('clone'), 'help' => 'Dupliquer la page' ]); ?> @@ -37,7 +28,6 @@ ]); ?>
-
'Contenu', @@ -67,11 +57,6 @@

-

@@ -120,11 +105,6 @@

-

@@ -176,11 +156,6 @@

-

@@ -195,7 +170,8 @@ 'help' => 'Sélectionnez une image ou une icône de petite dimension', 'language' => $this->getData(['user', $this->getUser('id'), 'language']), 'label' => 'Icône', - 'value' => $this->getData(['page', $this->getUrl(2), 'iconUrl']) + 'value' => $this->getData(['page', $this->getUrl(2), 'iconUrl']), + 'folder' => $this->getData(['page', $this->getUrl(2), 'iconUrl']) ? dirname($this->getData(['page', $this->getUrl(2), 'iconUrl'])) : '', ]); ?>
@@ -292,11 +268,6 @@

-

@@ -372,11 +343,6 @@

-

@@ -424,5 +390,4 @@
- \ No newline at end of file diff --git a/core/module/theme/view/body/body.php b/core/module/theme/view/body/body.php index 1030c0b8..4067b491 100644 --- a/core/module/theme/view/body/body.php +++ b/core/module/theme/view/body/body.php @@ -7,15 +7,7 @@ 'value' => template::ico('left') ]); ?>
-
- 'https://doc.zwiicms.fr/arriere-plan', - 'target' => '_blank', - 'value' => template::ico('help'), - 'class' => 'buttonHelp' - ]); */ ?> -
-
+
@@ -35,7 +27,7 @@
- 'colorPicker', 'help' => 'Le curseur horizontal règle le niveau de transparence.', 'label' => 'Couleur icône haut de page', @@ -68,7 +60,8 @@ 'language' => $this->getData(['user', $this->getUser('id'), 'language']), 'label' => 'Arrière plan', 'type' => 1, - 'value' => $imageFile + 'value' => $imageFile, + 'folder' => $imageFile ? dirname($imageFile) : '' ]); ?>
diff --git a/core/module/theme/view/header/header.php b/core/module/theme/view/header/header.php index d5981137..afc5d210 100644 --- a/core/module/theme/view/header/header.php +++ b/core/module/theme/view/header/header.php @@ -7,15 +7,7 @@ 'value' => template::ico('left') ]); ?>
-
- 'https://doc.zwiicms.fr/banniere', - 'target' => '_blank', - 'value' => template::ico('help'), - 'class' => 'buttonHelp' - ]); */?> -
-
+
@@ -158,13 +150,17 @@ 'label' => 'Image', 'language' => $this->getData(['user', $this->getUser('id'), 'language']), 'type' => 1, - 'value' => $imageFile + 'value' => $imageFile, + 'folder' => $imageFile ? dirname($imageFile) : '' ]); ?> - ; getData(['theme', 'site', 'width']); ?> + + ; + getData(['theme', 'site', 'width']); ?> | - + | diff --git a/core/module/theme/view/menu/menu.php b/core/module/theme/view/menu/menu.php index c4d4e308..49f9c75e 100644 --- a/core/module/theme/view/menu/menu.php +++ b/core/module/theme/view/menu/menu.php @@ -7,22 +7,15 @@ 'value' => template::ico('left') ]); ?>
-
- 'https://doc.zwiicms.fr/menu', - 'target' => '_blank', - 'value' => template::ico('help'), - 'class' => 'buttonHelp' - ]); */?> -
-
+
-

+

+

@@ -84,7 +77,8 @@
-

+

+

@@ -112,7 +106,8 @@ 'language' => $this->getData(['user', $this->getUser('id'), 'language']), 'label' => 'Logo du menu burger', 'type' => 1, - 'value' => $imageFile + 'value' => $imageFile, + 'folder' => $imageFile ? dirname($imageFile) : '' ]); ?>
@@ -123,7 +118,8 @@
-

+

+

@@ -164,7 +160,7 @@ $this->getData(['theme', 'menu', 'activeColorAuto']), - ]); ?> + ]); ?>
-

+

+

diff --git a/module/blog/blog.php b/module/blog/blog.php index 010a5d58..4417a92e 100755 --- a/module/blog/blog.php +++ b/module/blog/blog.php @@ -16,7 +16,7 @@ class blog extends common { - const VERSION = '7.10'; + const VERSION = '7.11'; const REALNAME = 'Blog'; const DELETE = true; const UPDATE = '0.0'; diff --git a/module/blog/changes.md b/module/blog/changes.md index 2b12fb5b..de53c9b3 100755 --- a/module/blog/changes.md +++ b/module/blog/changes.md @@ -1,4 +1,5 @@ - +# Versions 7.11 +- Le sélecteur de fichier affiche par défaut le chemin vers le fichier présent dans le champ. # Versions 7.10 - Empêche la validation d'un commentaire lorsque le contenu est vide. # Versions 7.8 - 7.9 diff --git a/module/blog/view/edit/edit.php b/module/blog/view/edit/edit.php index 41f3c7a7..9ea26fba 100755 --- a/module/blog/view/edit/edit.php +++ b/module/blog/view/edit/edit.php @@ -1,153 +1,154 @@ -
-
- 'buttonGrey', - 'href' => helper::baseUrl() . $this->getUrl(0) . '/config', - 'value' => template::ico('left') - ]); ?> -
-
- true, - 'value' => 'Brouillon' - ]); ?> - true - ]); ?> -
-
- 'Publier', - 'uniqueSubmission' => true - ]); ?> -
+
+
+ 'buttonGrey', + 'href' => helper::baseUrl() . $this->getUrl(0) . '/config', + 'value' => template::ico('left') + ]); ?>
-
-
-
-

-
-
- 'Titre', - 'value' => $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'title']) - ]); ?> -
-
- 'Permalink', - 'value' => $this->getUrl(2) - ]); ?> -
+
+ true, + 'value' => 'Brouillon' + ]); ?> + true + ]); ?> +
+
+ 'Publier', + 'uniqueSubmission' => true + ]); ?> +
+
+
+
+
+

+
+
+ 'Titre', + 'value' => $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'title']) + ]); ?>
-
-
- $this->getData(['user', $this->getUser('id'), 'language']), - 'help' => $this->getData(['theme', 'site', 'width']) !== '100%' ? 'Taille optimale de l\'image de couverture : ' . ((int) substr($this->getData(['theme', 'site', 'width']), 0, -2) - (20 * 2)) . ' x 350 pixels.' : '', - 'label' => 'Image de couverture', - 'type' => 1, - 'value' => $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'picture']) - ]); ?> -
-
- 'Largeur de l\'image', - 'selected' => $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'pictureSize']) - ]); ?> -
-
- 'Position', - 'selected' => $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'picturePosition']), - 'help' => 'Le texte de l\'article est adapté autour de l\'image' - ]); ?> -
+
+ 'Permalink', + 'value' => $this->getUrl(2) + ]); ?>
-
-
- $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'hidePicture']) - ]); ?> -
+
+
+
+ $this->getData(['user', $this->getUser('id'), 'language']), + 'help' => $this->getData(['theme', 'site', 'width']) !== '100%' ? 'Taille optimale de l\'image de couverture : ' . ((int) substr($this->getData(['theme', 'site', 'width']), 0, -2) - (20 * 2)) . ' x 350 pixels.' : '', + 'label' => 'Image de couverture', + 'type' => 1, + 'value' => $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'picture']), + 'folder' => $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'picture']) ? dirname($this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'picture'])) : '' + ]); ?> +
+
+ 'Largeur de l\'image', + 'selected' => $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'pictureSize']) + ]); ?> +
+
+ 'Position', + 'selected' => $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'picturePosition']), + 'help' => 'Le texte de l\'article est adapté autour de l\'image' + ]); ?> +
+
+
+
+ $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'hidePicture']) + ]); ?>
- 'editorWysiwyg', - 'value' => $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'content']) - ]); ?> -
-
-
-

-
-
- 'Auteur', - 'selected' => $this->getUser('id'), - 'disabled' => $this->getUser('group') !== self::GROUP_ADMIN ? true : false - ]); ?> -
-
- 'L\'article n\'est visible qu\'après la date de publication prévue.', - 'type' => 'datetime-local', - 'label' => 'Publication', - 'value' => floor($this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'publishedOn']) / 60) * 60 - ]); ?> -
-
- 'Édition - Suppression', - 'selected' => is_numeric($this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'editConsent'])) ? $module::EDIT_GROUP : $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'editConsent']), - 'help' => 'Les utilisateurs des groupes supérieurs accèdent à l\'article sans restriction' - ]); ?> -
+
+ 'editorWysiwyg', + 'value' => $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'content']) +]); ?> +
+
+
+

+
+
+ 'Auteur', + 'selected' => $this->getUser('id'), + 'disabled' => $this->getUser('group') !== self::GROUP_ADMIN ? true : false + ]); ?> +
+
+ 'L\'article n\'est visible qu\'après la date de publication prévue.', + 'type' => 'datetime-local', + 'label' => 'Publication', + 'value' => floor($this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'publishedOn']) / 60) * 60 + ]); ?> +
+
+ 'Édition - Suppression', + 'selected' => is_numeric($this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'editConsent'])) ? $module::EDIT_GROUP : $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'editConsent']), + 'help' => 'Les utilisateurs des groupes supérieurs accèdent à l\'article sans restriction' + ]); ?>
-
-
-
-

-
-
- $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'commentClose']) - ]); ?> -
-
- $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'commentApproved']), - '' - ]); ?> -
-
- 'Choix du nombre maximum de caractères pour chaque commentaire de l\'article, mise en forme html comprise.', - 'label' => 'Caractères par commentaire', - 'selected' => $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'commentMaxlength']) - ]); ?> -
+
+
+
+
+

+
+
+ $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'commentClose']) + ]); ?> +
+
+ $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'commentApproved']), + '' + ]); ?> +
+
+ 'Choix du nombre maximum de caractères pour chaque commentaire de l\'article, mise en forme html comprise.', + 'label' => 'Caractères par commentaire', + 'selected' => $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'commentMaxlength']) + ]); ?> +
+
+
+
+ $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'commentNotification']), + ]); ?>
-
-
- $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'commentNotification']), - ]); ?> -
-
- $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'commentGroupNotification']), - ]); ?> -
+
+ $this->getData(['module', $this->getUrl(0), 'posts', $this->getUrl(2), 'commentGroupNotification']), + ]); ?>
- +
+ \ No newline at end of file diff --git a/module/form/changes.md b/module/form/changes.md index 11c7f513..8536f3ed 100644 --- a/module/form/changes.md +++ b/module/form/changes.md @@ -1,3 +1,5 @@ +# Versions 4.4 +- Le sélecteur de fichier affiche par défaut le chemin vers le fichier présent dans le champ. # Version 4.3 - Contrôle de la variable de session liée au contenu. Evite des erreurs lorsque plusieurs onglets sont ouverts. # Version 4.2 diff --git a/module/form/form.php b/module/form/form.php index 46a0e410..2a26c524 100644 --- a/module/form/form.php +++ b/module/form/form.php @@ -17,7 +17,7 @@ class form extends common { - const VERSION = '4.3'; + const VERSION = '4.4'; const REALNAME = 'Formulaire'; const DATADIRECTORY = ''; // Contenu localisé inclus par défaut (page.json et module.json) diff --git a/module/form/view/option/option.php b/module/form/view/option/option.php index 715bbf2d..45392989 100644 --- a/module/form/view/option/option.php +++ b/module/form/view/option/option.php @@ -14,7 +14,7 @@
-

+

-

+

-

+

(bool) $this->getData(['module', $this->getUrl(0), 'config', 'group']) || !empty($this->getData(['module', $this->getUrl(0), 'config', 'user'])) || @@ -128,10 +128,10 @@
$this->getData(['user', $this->getUser('id'), 'language']), 'label' => 'Logo du site', - 'value' => $this->getData(['module', $this->getUrl(0), 'config', 'logoUrl']) + 'value' => $this->getData(['module', $this->getUrl(0), 'config', 'logoUrl']), + 'folder' => $this->getData(['module', $this->getUrl(0), 'config', 'logoUrl']) ? dirname($this->getData(['module', $this->getUrl(0), 'config', 'logoUrl'])) : '' ]); ?>
@@ -152,5 +152,4 @@
-
\ No newline at end of file From be87e4c740dabec7a8cf6c48726e20765719796f Mon Sep 17 00:00:00 2001 From: Fred Tempez Date: Thu, 5 Sep 2024 11:24:23 +0200 Subject: [PATCH 12/60] 13400 changes --- CHANGES.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 4f971c5c..2fcb41db 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,8 +1,15 @@ # Notes de mises à jour ## Versions 13.4.00 -** Amélioration ** +** Améliorations :** - Le sélecteur de fichier affiche le chemin d'accès du fichier présent dans le champ dans le gestionnaire de fichier. +- Slider en version 7.1, corrections diverses. +- Connexion persisante renforcée. +- +**Corrections : ** +- Edition de page, delete et duplicate renvoyant vers une mauvaise page. +- Supprime un warning à la créatio d'une page. + ## Versions 13.3.06 ** Corrections : ** From 48ee5c5e1bae5097f747d4c55e2417d3ec64aee5 Mon Sep 17 00:00:00 2001 From: Fred Tempez Date: Fri, 6 Sep 2024 08:35:35 +0200 Subject: [PATCH 13/60] =?UTF-8?q?datables.net=20filtrage=20des=20=C3=A9l?= =?UTF-8?q?=C3=A9ments,=20nombre=20d'=C3=A9l=C3=A9ments=20et=20position=20?= =?UTF-8?q?sur=20l'=C3=A9cran?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/module/theme/view/font/font.js.php | 1 + core/module/user/view/index/index.css | 3 ++- core/module/user/view/index/index.js.php | 1 + core/vendor/datatables/datatables.custom.css | 13 +++++++++++++ core/vendor/datatables/french.json | 2 +- core/vendor/datatables/inc.json | 3 ++- 6 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 core/vendor/datatables/datatables.custom.css diff --git a/core/module/theme/view/font/font.js.php b/core/module/theme/view/font/font.js.php index dd47dae6..376fc6ca 100644 --- a/core/module/theme/view/font/font.js.php +++ b/core/module/theme/view/font/font.js.php @@ -20,6 +20,7 @@ $('#dataTables').DataTable({ }, locale: 'fr', stateSave: true, + "lengthMenu": [[10, 25, 50, -1], [10, 25, 50, "Tout"]], "columnDefs": [{ target: 5, orderable: false, diff --git a/core/module/user/view/index/index.css b/core/module/user/view/index/index.css index b6eeb0e0..742a8ae1 100755 --- a/core/module/user/view/index/index.css +++ b/core/module/user/view/index/index.css @@ -15,4 +15,5 @@ /** NE PAS EFFACER * admin.css -*/ \ No newline at end of file +*/ + diff --git a/core/module/user/view/index/index.js.php b/core/module/user/view/index/index.js.php index 09190ab4..cea710b4 100644 --- a/core/module/user/view/index/index.js.php +++ b/core/module/user/view/index/index.js.php @@ -29,6 +29,7 @@ $(document).ready((function () { }, locale: 'fr', stateSave: true, + "lengthMenu": [[10, 25, 50, -1], [10, 25, 50, "Tout"]], "columnDefs": [ { target: 5, diff --git a/core/vendor/datatables/datatables.custom.css b/core/vendor/datatables/datatables.custom.css new file mode 100644 index 00000000..0777e6b4 --- /dev/null +++ b/core/vendor/datatables/datatables.custom.css @@ -0,0 +1,13 @@ +.dataTables_length { + margin-bottom: 10px; + width: 250px; +} + +.dataTables_length label { + float: left; +} + +.dataTables_length select { + margin-left: 5px; + width: 80px; +} \ No newline at end of file diff --git a/core/vendor/datatables/french.json b/core/vendor/datatables/french.json index 52f6508b..e8aaa24d 100644 --- a/core/vendor/datatables/french.json +++ b/core/vendor/datatables/french.json @@ -1,7 +1,7 @@ { "processing": "Traitement en cours...", "search": "Rechercher :", - "lengthMenu": "Éléments par page _MENU_", + "lengthMenu": "Éléments par page : _MENU_", "info": "Affichage de l'élement _START_ à _END_ sur _TOTAL_ éléments", "infoEmpty": "Affichage de l'élement 0 à 0 sur 0 éléments", "infoFiltered": "(filtré de _MAX_ éléments au total)", diff --git a/core/vendor/datatables/inc.json b/core/vendor/datatables/inc.json index 007920f0..83e2412b 100644 --- a/core/vendor/datatables/inc.json +++ b/core/vendor/datatables/inc.json @@ -1,4 +1,5 @@ [ "datatables.min.js", - "datatables.min.css" + "datatables.min.css", + "datatables.custom.css" ] \ No newline at end of file From 27d7b07239905e97f7faa1d762811a12ab736d91 Mon Sep 17 00:00:00 2001 From: Fred Tempez Date: Fri, 6 Sep 2024 08:37:17 +0200 Subject: [PATCH 14/60] changes --- CHANGES.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 2fcb41db..c5ba625b 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -5,7 +5,8 @@ - Le sélecteur de fichier affiche le chemin d'accès du fichier présent dans le champ dans le gestionnaire de fichier. - Slider en version 7.1, corrections diverses. - Connexion persisante renforcée. -- +- Script Datatables.net filtrage des éléments, nombre d'éléments et position sur l'écran. + **Corrections : ** - Edition de page, delete et duplicate renvoyant vers une mauvaise page. - Supprime un warning à la créatio d'une page. From 49ab83efd3a1c70af0d26b122cc412e11e159852 Mon Sep 17 00:00:00 2001 From: Fred Tempez Date: Fri, 6 Sep 2024 09:34:15 +0200 Subject: [PATCH 15/60] changes --- CHANGES.md | 1 + index.php | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index c5ba625b..a0e0bac9 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -8,6 +8,7 @@ - Script Datatables.net filtrage des éléments, nombre d'éléments et position sur l'écran. **Corrections : ** +- Isole la session dans l'onglet actif. - Edition de page, delete et duplicate renvoyant vers une mauvaise page. - Supprime un warning à la créatio d'une page. diff --git a/index.php b/index.php index a77ae868..02d17e1d 100644 --- a/index.php +++ b/index.php @@ -19,6 +19,10 @@ */ // Remplace la directive htaccess ini_set('session.use_trans_sid', FALSE); +// Crée un identifiant unique pour chaque site en fonction du nom de domaine ou autre +$siteId = md5($_SERVER['SERVER_NAME']); // Ou utilise un autre identifiant unique pour chaque site +// Change le nom de la session en fonction de cet identifiant +session_name('zwii_session_' . $siteId); // Démarre la session session_start(); From 6864132afc34e5bd6c83036c01490650ef0faebc Mon Sep 17 00:00:00 2001 From: Fred Tempez Date: Fri, 6 Sep 2024 16:17:10 +0200 Subject: [PATCH 16/60] slider 7.2 voir changelog --- CHANGES.md | 3 +- module/slider/changes.md | 4 ++- module/slider/slider.php | 2 +- module/slider/view/update/update.php | 52 ++++++++++++++-------------- 4 files changed, 32 insertions(+), 29 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index a0e0bac9..74675004 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -6,6 +6,7 @@ - Slider en version 7.1, corrections diverses. - Connexion persisante renforcée. - Script Datatables.net filtrage des éléments, nombre d'éléments et position sur l'écran. +- Slider 7.2, le dossier sélectionné est affiché par défaut dans la page update. **Corrections : ** - Isole la session dans l'onglet actif. @@ -18,7 +19,7 @@ - Répare le bouton d'effacement en mode édition d'une page. - Corrige la feuille de style du slider les balises H1, H3 et A. - Corrige l'absence de contenu de page lorsque le module est en position libre et que le mot clé [MODULE] n'a pas été inséré. -- Corrige l'option "REster connecter sur ce navigateur' dont la connexion est désormais réellement persistente. +- Corrige l'option "Rester connecter sur ce navigateur' dont la connexion est désormais réellement persistente. - Supprime un slash à la fin de l'URL du catalogue. - Eviter un warning lors de la création d'une nouvelle page. diff --git a/module/slider/changes.md b/module/slider/changes.md index 051ea442..57d20130 100644 --- a/module/slider/changes.md +++ b/module/slider/changes.md @@ -1,5 +1,7 @@ +# Version 7.2 +- Le dossier sélectionné est affiché par défaut dans la page update. # Version 7.1 - +- Améliore le desgin du module # Version 7.0 - Ajoute un affichage de la légende sous l'image - Corrige un tri inversé diff --git a/module/slider/slider.php b/module/slider/slider.php index 125d7f73..37542eb9 100644 --- a/module/slider/slider.php +++ b/module/slider/slider.php @@ -27,7 +27,7 @@ class slider extends common 'index' => self::GROUP_VISITOR ]; - const VERSION = '7.1'; + const VERSION = '7.2'; const REALNAME = 'Carrousel'; const DELETE = true; const UPDATE = '0.0'; diff --git a/module/slider/view/update/update.php b/module/slider/view/update/update.php index 94c0291b..77884adf 100644 --- a/module/slider/view/update/update.php +++ b/module/slider/view/update/update.php @@ -1,35 +1,35 @@ - -
-
- 'buttonGrey', - 'href' => helper::baseUrl() . $this->getUrl(0) . '/config', - 'value' => template::ico('left') - ]); ?> -
-
- -
+
+
+ 'buttonGrey', + 'href' => helper::baseUrl() . $this->getUrl(0) . '/config', + 'value' => template::ico('left') + ]); ?>
-
-
-
-

Dossier de la galerie

-
-
- true, // Désactivé à cause des modifications en ajax - ]); ?> - 'Dossier cible', - 'noDirty' => true, // Désactivé à cause des modifications en ajax, - ]); ?> -
+
+ +
+
+
+
+
+

Dossier de la galerie

+
+
+ true, // Désactivé à cause des modifications en ajax + 'value' => $this->getData(['module', $this->getUrl(0), 'directory']), + ]); ?> + 'Dossier cible', + 'noDirty' => true, // Désactivé à cause des modifications en ajax, + ]); ?>
+
Module Slider version n° From 86afa350fab159ade03db43630198a8c9c97be25 Mon Sep 17 00:00:00 2001 From: Fred Tempez Date: Fri, 6 Sep 2024 17:17:34 +0200 Subject: [PATCH 17/60] csrf key sur 64 octets --- core/class/router.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/class/router.class.php b/core/class/router.class.php index dddfdda6..cb22a9b7 100644 --- a/core/class/router.class.php +++ b/core/class/router.class.php @@ -11,7 +11,7 @@ class core extends common parent::__construct(); // Token CSRF if (empty($_SESSION['csrf'])) { - $_SESSION['csrf'] = bin2hex(openssl_random_pseudo_bytes(128)); + $_SESSION['csrf'] = bin2hex(openssl_random_pseudo_bytes(64)); } // Fuseau horaire From eb28a76636e5b8f7a90f390cbc3ea6ec14b69cc1 Mon Sep 17 00:00:00 2001 From: Fred Tempez Date: Fri, 6 Sep 2024 17:32:29 +0200 Subject: [PATCH 18/60] =?UTF-8?q?m=C3=A9thode=20authentification?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/class/layout.class.php | 20 ++++++++++---------- core/class/router.class.php | 16 ++++++++-------- core/core.php | 11 +++++++++-- core/layout/main.php | 2 +- core/module/user/user.php | 20 ++++++++++++++++---- module/blog/blog.php | 4 ++-- module/blog/view/article/article.php | 6 +++--- module/blog/view/index/index.php | 2 +- module/news/view/article/article.php | 2 +- module/news/view/index/index.php | 2 +- module/redirection/redirection.php | 2 +- 11 files changed, 53 insertions(+), 34 deletions(-) diff --git a/core/class/layout.class.php b/core/class/layout.class.php index 721967c7..db2d044d 100644 --- a/core/class/layout.class.php +++ b/core/class/layout.class.php @@ -330,7 +330,7 @@ class layout extends common // Affichage du lien de connexion if ( ($this->getData(['theme', 'footer', 'loginLink']) - and $this->getUser('password') !== $this->getInput('ZWII_USER_PASSWORD') + and $this->isConnected() === false ) or $this->getUrl(0) === 'theme' ) { @@ -493,7 +493,7 @@ class layout extends common // Lien de connexion if ( ($this->getData(['theme', 'menu', 'loginLink']) - and $this->getUser('password') !== $this->getInput('ZWII_USER_PASSWORD') + and $this->isConnected() === false ) or $this->getUrl(0) === 'theme' ) { @@ -580,9 +580,9 @@ class layout extends common if ( ($this->getData(['page', $parentPageId, 'disable']) === true - and $this->getUser('password') !== $this->getInput('ZWII_USER_PASSWORD') + and $this->isConnected() === false ) or ($this->getData(['page', $parentPageId, 'disable']) === true - and $this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD') + and $this->isConnected() === true and $this->getUser('group') < self::GROUP_EDITOR ) ) { @@ -646,9 +646,9 @@ class layout extends common $items .= '
  • '; if ( ($this->getData(['page', $childKey, 'disable']) === true - and $this->getUser('password') !== $this->getInput('ZWII_USER_PASSWORD') + and $this->isConnected() === false ) or ($this->getData(['page', $childKey, 'disable']) === true - and $this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD') + and $this->isConnected() === true and $this->getUser('group') < self::GROUP_EDITOR ) ) { @@ -742,7 +742,7 @@ class layout extends common $items .= '
  • '; - $rightItems .= '
  • ' . template::ico('puzzle', [ - 'help' => 'Modules', - 'href' => helper::baseUrl() . 'plugin' - ]) . '
  • '; $rightItems .= '
  • ' . template::ico('cog-alt', [ 'help' => 'Configuration', 'href' => helper::baseUrl() . 'config' @@ -1092,15 +1088,45 @@ class layout extends common ) { $this->setData(['core', 'updateAvailable', true]); } + + // Recherche de mise à jour des modules + $store = plugin::getStore(); + if (is_array($store)) { + // Modules installés + $infoModules = helper::getModules(); + // Clés moduleIds dans les pages + $inPages = helper::arrayColumn($this->getData(['page']), 'moduleId', 'SORT_DESC'); + // Parcourir les données des modules + foreach ($store as $key => $value) { + if (empty($key)) { + continue; + } + // Mise à jour d'un module + if (array_key_exists($key, $infoModules) === true) { + $this->setData(['core', 'updateModuleAvailable', true]); + } + } + } + } } - - // Afficher le bouton : Mise à jour détectée + activée if ($this->getData(['core', 'updateAvailable'])) { $rightItems .= '
  • ' . template::ico('update colorRed') . '
  • '; } } + if ($this->getData(['core', 'updateModuleAvailable'])) { + $rightItems .= '
  • ' . template::ico('puzzle colorRed', [ + 'help' => 'Modules', + 'href' => helper::baseUrl() . 'plugin' + ]) . '
  • '; + } else { + $rightItems .= '
  • ' . template::ico('puzzle', [ + 'help' => 'Modules', + 'href' => helper::baseUrl() . 'plugin' + ]) . '
  • '; + } + // Boutons depuis le groupe éditeur if ( $this->getUser('group') >= self::GROUP_EDITOR && $this->getUser('permission', 'user', 'edit') @@ -1175,7 +1201,7 @@ class layout extends common { // Import des fontes liées au thème if (file_exists(self::DATA_DIR . 'font/font.html')) { - include_once (self::DATA_DIR . 'font/font.html'); + include_once(self::DATA_DIR . 'font/font.html'); } } diff --git a/core/core.php b/core/core.php index 9c97672f..301697c1 100644 --- a/core/core.php +++ b/core/core.php @@ -51,7 +51,7 @@ class common const ACCESS_TIMER = 1800; // Numéro de version - const ZWII_VERSION = '13.4.00'; + const ZWII_VERSION = '13.4.00.test1'; // URL autoupdate const ZWII_UPDATE_URL = 'https://forge.chapril.org/ZwiiCMS-Team/cms-update/raw/branch/master/'; diff --git a/core/module/plugin/plugin.php b/core/module/plugin/plugin.php index 19199914..5d053995 100644 --- a/core/module/plugin/plugin.php +++ b/core/module/plugin/plugin.php @@ -22,7 +22,7 @@ class plugin extends common 'delete' => self::GROUP_ADMIN, 'save' => self::GROUP_ADMIN, 'store' => self::GROUP_ADMIN, - 'item' => self::GROUP_ADMIN, + //'item' => self::GROUP_ADMIN, // détail d'un objet 'upload' => self::GROUP_ADMIN, // Téléverser catalogue @@ -330,6 +330,7 @@ class plugin extends common 'state' => $r['success'] ]); } + // Valeurs en sortie $this->addOutput([ 'title' => helper::translate('Catalogue de modules'), @@ -411,6 +412,15 @@ class plugin extends common ]); } + /** + * Retourne le contenu du store en ligne + * @return mixed + */ + public static function getStore() { + $store = json_decode(helper::getUrlContents(self::BASEURL_STORE . self::MODULE_STORE . 'list'), true); + return $store; + } + /** * Gestion des modules */ @@ -556,6 +566,9 @@ class plugin extends common } } + // Désactive l'icône rouge + $this->setData(['core', 'updateModuleAvailable', false]); + // Valeurs en sortie $this->addOutput([ 'title' => helper::translate('Gestion des modules'), From 7da12be242d33e09717e6d01fbf3a6cedd5a17ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Sun, 15 Sep 2024 19:00:53 +0200 Subject: [PATCH 38/60] modification du cookie de consentement --- core/core.js.php | 8 +++++--- core/module/config/view/index/index.js.php | 1 - 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/core/core.js.php b/core/core.js.php index 90e354a3..ee063b9f 100644 --- a/core/core.js.php +++ b/core/core.js.php @@ -216,12 +216,14 @@ core.start = function () { // Variables des cookies var getUrl = window.location; var domain = "domain=" + getUrl.hostname + ";"; + var basePath = getUrl.pathname.substring(0, getUrl.pathname.lastIndexOf('/') + 1); + var path = "path=" + basePath + ";"; var e = new Date(); e.setFullYear(e.getFullYear() + 1); - var expires = "expires=" + e.toUTCString(); - + var expires = "expires=" + e.toUTCString() + ";"; + // Stocke le cookie d'acceptation - document.cookie = "ZWII_COOKIE_CONSENT=true;samesite=strict;" + domain + expires; + document.cookie = "ZWII_COOKIE_CONSENT=true; samesite=lax; " + domain + path + expires; }); diff --git a/core/module/config/view/index/index.js.php b/core/module/config/view/index/index.js.php index 3beb568c..603a59a3 100644 --- a/core/module/config/view/index/index.js.php +++ b/core/module/config/view/index/index.js.php @@ -265,7 +265,6 @@ $(document).ready(function () { $('span#screenWeight').each(function(index){ var weight = parseFloat($(this).text()); var fileType = $('span#screenType').eq(index).text(); -console.log(weight); if ((fileType === "jpg" || fileType === "jpeg") && weight < 5000000) { $(this).css("color", "green"); } else { From 0e564a24c98052c86cecf84433654cba0c5ae5a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Mon, 16 Sep 2024 21:20:52 +0200 Subject: [PATCH 39/60] Chemin du cookie de session --- CHANGES.md | 1 + core/core.php | 2 +- index.php | 15 +++++++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 3d14183c..0dc6f668 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -13,6 +13,7 @@ - Modification du contenu de robots.txt afin de n'autoriser que les moteurs de recherche et d'interdire les bots. **Corrections : ** +- Change les paramètres du cookie de consentement. - Isole la session dans l'onglet actif. - Edition de page, delete et duplicate renvoyant vers une mauvaise page. - Supprime un warning à la création d'une page. diff --git a/core/core.php b/core/core.php index 301697c1..8afbb1b4 100644 --- a/core/core.php +++ b/core/core.php @@ -51,7 +51,7 @@ class common const ACCESS_TIMER = 1800; // Numéro de version - const ZWII_VERSION = '13.4.00.test1'; + const ZWII_VERSION = '13.4.00.test2'; // URL autoupdate const ZWII_UPDATE_URL = 'https://forge.chapril.org/ZwiiCMS-Team/cms-update/raw/branch/master/'; diff --git a/index.php b/index.php index 92851420..a526c48b 100644 --- a/index.php +++ b/index.php @@ -19,10 +19,25 @@ */ // Remplace la directive htaccess ini_set('session.use_trans_sid', FALSE); + // Crée un identifiant unique pour chaque site en fonction du nom de domaine ou autre $siteId = md5($_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_FILENAME']); // Ou utilise un autre identifiant unique pour chaque site // Change le nom de la session en fonction de cet identifiant session_name('zwii_session_' . $siteId); + +// Récupère dynamiquement le chemin du dossier dans lequel le script est exécuté +$scriptPath = dirname($_SERVER['SCRIPT_NAME']) . '/'; + +// Définissez le chemin du cookie de session dynamiquement +session_set_cookie_params([ + 'lifetime' => 0, + 'path' => $scriptPath, // Utilise le chemin du script pour restreindre la session à ce répertoire + 'domain' => $_SERVER['SERVER_NAME'], // Domain par défaut + 'secure' => isset($_SERVER['HTTPS']), // Pour HTTPS, si nécessaire + 'httponly' => true, + 'samesite' => 'Lax' // Ou 'Strict' ou 'None' selon tes besoins +]); + // Démarre la session session_start(); From cc0b6edb341af8c17cab29d6c5545ceb208182fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Mon, 16 Sep 2024 22:57:04 +0200 Subject: [PATCH 40/60] =?UTF-8?q?13.4.00.test3=20la=20cl=C3=A9=20auth=20n'?= =?UTF-8?q?a=20pas=20=C3=A9t=C3=A9=20d=C3=A9clar=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/core.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/core/core.php b/core/core.php index 8afbb1b4..7e5b9785 100644 --- a/core/core.php +++ b/core/core.php @@ -51,7 +51,7 @@ class common const ACCESS_TIMER = 1800; // Numéro de version - const ZWII_VERSION = '13.4.00.test2'; + const ZWII_VERSION = '13.4.00.test3'; // URL autoupdate const ZWII_UPDATE_URL = 'https://forge.chapril.org/ZwiiCMS-Team/cms-update/raw/branch/master/'; @@ -1028,11 +1028,14 @@ class common } - /** + /** * @return bool l'utilisateur est connecté true sinon false */ public function isConnected() { - return ($this->getUser('authKey') === $this->getInput('ZWII_AUTH_KEY')); + return ( + !empty($this->getUser('authKey')) + && + $this->getUser('authKey') === $this->getInput('ZWII_AUTH_KEY')); } /** From 826e6264ebda9ba8dec68e85915e99c8baf49b1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Tue, 17 Sep 2024 18:27:02 +0200 Subject: [PATCH 41/60] Corrige l'affichage des boutons de navigation dans les vues des modules --- CHANGES.md | 1 + core/class/layout.class.php | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 0dc6f668..ba717bae 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -18,6 +18,7 @@ - Edition de page, delete et duplicate renvoyant vers une mauvaise page. - Supprime un warning à la création d'une page. - Bouton de génération du site inopérant. +- Affichage intempestif des boutons de navigation de pages dans les vues des modules. ## Versions 13.3.06 diff --git a/core/class/layout.class.php b/core/class/layout.class.php index 9a7ef9f6..7883f44b 100644 --- a/core/class/layout.class.php +++ b/core/class/layout.class.php @@ -82,17 +82,25 @@ class layout extends common $content = 'col' . $blocks[1]; $blockright = 'col' . $blocks[2]; } - // Page pleine pour la configuration des modules et l'édition des pages sauf l'affichage d'un article de blog - $pattern = ['config', 'edit', 'add', 'comment', 'data']; + // Toujours en pleine page pour la configuration des modules et l'édition des pages sauf l'affichage d'un article de blog + $pattern = ['config', 'edit', 'add', 'comment', 'data', 'option', 'theme', 'comment', 'article', 'data', 'gallery', 'update', 'users', 'validate']; if ( (sizeof($blocks) === 1 || in_array($this->getUrl(1), $pattern)) ) { // Pleine page en mode configuration - if ($this->getData(['page', $this->getUrl(0), 'navLeft']) === 'top' || $this->getData(['page', $this->getUrl(0), 'navRight']) === 'top') { + if ( + ($this->getData(['page', $this->getUrl(0), 'navLeft']) === 'top' + || $this->getData(['page', $this->getUrl(0), 'navRight']) === 'top') + && in_array($this->getUrl(1), $pattern) === false + ) { $this->showNavButtons('top'); } $this->showContent(); - if ($this->getData(['page', $this->getUrl(0), 'navLeft']) === 'bottom' || $this->getData(['page', $this->getUrl(0), 'navRight']) === 'bottom') { + if ( + ($this->getData(['page', $this->getUrl(0), 'navLeft']) === 'bottom' + || $this->getData(['page', $this->getUrl(0), 'navRight']) === 'bottom') + && in_array($this->getUrl(1), $pattern) === false + ) { $this->showNavButtons('bottom'); } } else { From c8be7f84a4e2c9d57dd0dc3e23399ce52a2ac84b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Tue, 17 Sep 2024 19:18:26 +0200 Subject: [PATCH 42/60] =?UTF-8?q?Corrige=20un=20bug=20de=20d=C3=A9co=20apr?= =?UTF-8?q?=C3=A8s=20=C3=A9dition=20du=20compte?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/module/user/user.php | 1 + 1 file changed, 1 insertion(+) diff --git a/core/module/user/user.php b/core/module/user/user.php index 7c8fd109..d1d0ac2b 100644 --- a/core/module/user/user.php +++ b/core/module/user/user.php @@ -345,6 +345,7 @@ class user extends common 'files' => $this->getInput('userEditFiles', helper::FILTER_BOOLEAN), 'language' => $this->getInput('userEditLanguage', helper::FILTER_STRING_SHORT), 'tags' => $this->getInput('userEditTags', helper::FILTER_STRING_SHORT), + 'authKey' => $this->getData(['user', $this->getUrl(2), 'authKey']), ] ]); // Redirection spécifique si l'utilisateur change son mot de passe From ecd0f5827a2c386b2991f19b5fe14b43917d6375 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Wed, 18 Sep 2024 19:01:47 +0200 Subject: [PATCH 43/60] Suppression du cookie pageLayouts --- CHANGES.md | 1 + LISEZMOI.md | 2 +- README.md | 2 +- core/module/page/page.php | 23 ++++++++++++++- core/module/page/view/edit/edit.js.php | 41 +++++--------------------- core/module/page/view/edit/edit.php | 17 +++++++---- 6 files changed, 43 insertions(+), 43 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index ba717bae..1e507e33 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,6 +11,7 @@ - Augmente la dimension des miniatures après le transfert dans RFM. - Search 3.3 n'effectue qu'une seule lecture du fichier module.json en prévention des bots agressifs. - Modification du contenu de robots.txt afin de n'autoriser que les moteurs de recherche et d'interdire les bots. +- Suppression des cookies mémorisant le dernier onglet affiché dans l'édition de la page et dans la configuration du site. Cette information est désormais stockée dans la fiche de l'utilisateur connecté. **Corrections : ** - Change les paramètres du cookie de consentement. diff --git a/LISEZMOI.md b/LISEZMOI.md index f44d2035..6ab2a4ab 100644 --- a/LISEZMOI.md +++ b/LISEZMOI.md @@ -1,4 +1,4 @@ -# ZwiiCMS 13.3.05 +# ZwiiCMS 13.4.00 version de test Zwii est un CMS sans base de données (flat-file) qui permet de créer et gérer facilement un site web sans aucune connaissance en programmation. diff --git a/README.md b/README.md index 8ecbc1a6..0da81115 100755 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# ZwiiCMS 13.4.00 version de test +# ZwiiCMS 13.4.00 test version Zwii is a database-less (flat-file) CMS that allows you to easily create and manage a web site without any programming knowledge. diff --git a/core/module/page/page.php b/core/module/page/page.php index 91993043..b5181e3f 100644 --- a/core/module/page/page.php +++ b/core/module/page/page.php @@ -23,7 +23,8 @@ class page extends common 'edit' => self::GROUP_EDITOR, 'duplicate' => self::GROUP_EDITOR, 'jsEditor' => self::GROUP_EDITOR, - 'cssEditor' => self::GROUP_EDITOR + 'cssEditor' => self::GROUP_EDITOR, + 'register' => self::GROUP_EDITOR, ]; public static $pagesNoParentId = [ '' => 'Aucune' @@ -714,4 +715,24 @@ class page extends common }, $p); return json_encode($d); } + + /** + * Stocke la variable dans les paramètres de l'utilisateur pour activer la tab à sa prochaine visite + * @return never + */ + public function register(): void + { + $this->setData([ + 'user', + $this->getUser('id'), + 'view', + [ + 'page' => $this->getUrl(2) + ] + ]); + // Valeurs en sortie + $this->addOutput([ + 'redirect' => helper::baseUrl() . 'page/edit/' . $this->getUrl(3) . '/' . self::$siteContent, + ]); + } } \ No newline at end of file diff --git a/core/module/page/view/edit/edit.js.php b/core/module/page/view/edit/edit.js.php index 319c857e..f865d034 100644 --- a/core/module/page/view/edit/edit.js.php +++ b/core/module/page/view/edit/edit.js.php @@ -15,7 +15,7 @@ /** * Confirmation de suppression */ - $("#pageEditDelete").on("click", function() { +$("#pageEditDelete").on("click", function() { var _this = $(this); var message_delete = ""; return core.confirm(message_delete, function() { @@ -67,16 +67,18 @@ $( document ).ready(function() { /** * Sélection des onglets */ - var pageLayout = getCookie("pageLayout"); - if (pageLayout == null) { - pageLayout = "content"; - setCookie("pageLayout", "content"); + var pageLayout = "getData(['user', $this->getUser('id'), 'view', 'page']);?>"; + // Non défini, valeur par défaut + if (pageLayout == null) { + pageLayout = "content"; } + // Tout cacher $("#pageEditContentContainer").hide(); $("#pageEditExtensionContainer").hide(); $("#pageEditPositionContainer").hide(); $("#pageEditLayoutContainer").hide(); $("#pageEditPermissionContainer").hide(); + // Afficher la bonne tab $("#pageEdit" + capitalizeFirstLetter(pageLayout) + "Container").show(); $("#pageEdit" + capitalizeFirstLetter(pageLayout) + "Button").addClass("activeButton"); @@ -295,7 +297,6 @@ $( document ).ready(function() { $("#PageEditPositionButton").removeClass("activeButton"); $("#pageEditLayoutButton").removeClass("activeButton"); $("#pageEditPermissionButton").removeClass("activeButton"); - setCookie("pageLayout", "content"); }); $("#pageEditExtensionButton").on("click", function () { $("#pageEditContentContainer").hide(); @@ -308,7 +309,6 @@ $( document ).ready(function() { $("#PageEditPositionButton").removeClass("activeButton"); $("#pageEditLayoutButton").removeClass("activeButton"); $("#pageEditPermissionButton").removeClass("activeButton"); - setCookie("pageLayout", "extension"); }); $("#PageEditPositionButton").on("click", function () { $("#pageEditContentContainer").hide(); @@ -321,7 +321,6 @@ $( document ).ready(function() { $("#PageEditPositionButton").addClass("activeButton"); $("#pageEditLayoutButton").removeClass("activeButton"); $("#pageEditPermissionButton").removeClass("activeButton"); - setCookie("pageLayout", "position"); }); $("#pageEditLayoutButton").on("click", function () { $("#pageEditContentContainer").hide(); @@ -334,7 +333,6 @@ $( document ).ready(function() { $("#PageEditPositionButton").removeClass("activeButton"); $("#pageEditLayoutButton").addClass("activeButton"); $("#pageEditPermissionButton").removeClass("activeButton"); - setCookie("pageLayout", "layout"); }); $("#pageEditPermissionButton").on("click", function () { $("#pageEditContentContainer").hide(); @@ -347,7 +345,6 @@ $( document ).ready(function() { $("#pageEditPositionButton").removeClass("activeButton"); $("#pageEditLayoutButton").removeClass("activeButton"); $("#pageEditPermissionButton").addClass("activeButton"); - setCookie("pageLayout", "permission"); }); /** @@ -722,30 +719,6 @@ function buildPagesList(extraPosition) { positionDOM.val(positionSelected); }; -/** - * Cookies - */ -function setCookie(name, value, days) { - var expires = ""; - if (days) { - var date = new Date(); - date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); - expires = "; expires=" + date.toUTCString(); - } - document.cookie = name + "=" + (value || "") + expires + "; path=/; samesite=lax"; -} - -function getCookie(name) { - var nameEQ = name + "="; - var ca = document.cookie.split(';'); - for (var i = 0; i < ca.length; i++) { - var c = ca[i]; - while (c.charAt(0) == ' ') c = c.substring(1, c.length); - if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); - } - return null; -} - // Define function to capitalize the first letter of a string function capitalizeFirstLetter(string) { return string.charAt(0).toUpperCase() + string.slice(1); diff --git a/core/module/page/view/edit/edit.php b/core/module/page/view/edit/edit.php index edb2adb3..83a5e4b8 100644 --- a/core/module/page/view/edit/edit.php +++ b/core/module/page/view/edit/edit.php @@ -31,23 +31,28 @@
    'Contenu', - 'class' => 'buttonTab' + 'class' => 'buttonTab', + 'href' => helper::baseUrl() . 'page/register/content/' . $this->geturl(2) ]); ?> - 'Menu', - 'class' => 'buttonTab' + 'class' => 'buttonTab', + 'href' => helper::baseUrl() . 'page/register/position/' . $this->geturl(2) ]); ?> 'Extension', - 'class' => 'buttonTab' + 'class' => 'buttonTab', + 'href' => helper::baseUrl() . 'page/register/extension/' . $this->geturl(2) ]); ?> 'Mise en page', - 'class' => 'buttonTab' + 'class' => 'buttonTab', + 'href' => helper::baseUrl() . 'page/register/layout/' . $this->geturl(2) ]); ?> 'Permission', - 'class' => 'buttonTab' + 'class' => 'buttonTab', + 'href' => helper::baseUrl() . 'page/register/permission/' . $this->geturl(2) ]); ?>
    From e3bc6ce1d3ad8b2067384534e3f66683aa597c87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Wed, 18 Sep 2024 19:34:04 +0200 Subject: [PATCH 44/60] Suppression du cookie configLayout --- core/module/config/config.php | 31 ++++++++++++++++--- core/module/config/view/index/index.js.php | 36 +++------------------- core/module/config/view/index/index.php | 21 +++++-------- core/module/page/page.php | 3 +- 4 files changed, 42 insertions(+), 49 deletions(-) diff --git a/core/module/config/config.php b/core/module/config/config.php index 2f56d8d2..674daa7b 100644 --- a/core/module/config/config.php +++ b/core/module/config/config.php @@ -30,7 +30,8 @@ class config extends common 'logReset' => self::GROUP_ADMIN, 'logDownload' => self::GROUP_ADMIN, 'blacklistReset' => self::GROUP_ADMIN, - 'blacklistDownload' => self::GROUP_ADMIN + 'blacklistDownload' => self::GROUP_ADMIN, + 'register' => self::GROUP_ADMIN, ]; public static $timezones = [ @@ -523,7 +524,7 @@ class config extends common ) { // Ajout des lignes dans le .htaccess $fileContent = file_get_contents('.htaccess'); - $rewriteData = + $rewriteData = '# URL rewriting' . PHP_EOL . '' . PHP_EOL . "\tRewriteEngine on" . PHP_EOL . @@ -902,12 +903,13 @@ class config extends common ]); } } - + /** * Fonction pour vérifier la présence du module de réécriture * @return bool */ - public function isModRewriteEnabled() { + public function isModRewriteEnabled() + { // Check if Apache and mod_rewrite is loaded if (function_exists('apache_get_modules')) { $modules = apache_get_modules(); @@ -917,4 +919,25 @@ class config extends common return getenv('HTTP_MOD_REWRITE') == 'On' || getenv('REDIRECT_STATUS') == '200'; } } + + /** + * Stocke la variable dans les paramètres de l'utilisateur pour activer la tab à sa prochaine visite + * @return never + */ + public function register(): void + { + $this->setData([ + 'user', + $this->getUser('id'), + 'view', + [ + 'config' => $this->getUrl(2), + 'page' => $this->getData(['user', $this->getUser('id'), 'view', 'page']), + ] + ]); + // Valeurs en sortie + $this->addOutput([ + 'redirect' => helper::baseUrl() . 'config/' . $this->getUrl(2), + ]); + } } \ No newline at end of file diff --git a/core/module/config/view/index/index.js.php b/core/module/config/view/index/index.js.php index 603a59a3..24112631 100644 --- a/core/module/config/view/index/index.js.php +++ b/core/module/config/view/index/index.js.php @@ -66,11 +66,11 @@ $(document).ready(function () { $("#connectCaptchaStrong").prop("checked", false); } - var configLayout = getCookie("configLayout"); - if (configLayout == null) { - configLayout = "setup"; - setCookie("configLayout", "setup"); - } + var configLayout = "getData(['user', $this->getUser('id'), 'view', 'config']);?>"; + // Non défini, valeur par défaut + if (configLayout == null) { + configLayout = "setup"; + } $("#socialContainer").hide(); $("#connectContainer").hide(); @@ -166,7 +166,6 @@ $(document).ready(function () { $("#configSocialButton").removeClass("activeButton"); $("#configConnectButton").removeClass("activeButton"); $("#configNetworkButton").removeClass("activeButton"); - setCookie("configLayout", "setup"); }); $("#configSocialButton").on("click", function () { $("#connectContainer").hide(); @@ -177,7 +176,6 @@ $(document).ready(function () { $("#configSocialButton").addClass("activeButton"); $("#configConnectButton").removeClass("activeButton"); $("#configNetworkButton").removeClass("activeButton"); - setCookie("configLayout", "social"); }); $("#configConnectButton").on("click", function () { $("#setupContainer").hide(); @@ -188,7 +186,6 @@ $(document).ready(function () { $("#configSocialButton").removeClass("activeButton"); $("#configConnectButton").addClass("activeButton"); $("#configNetworkButton").removeClass("activeButton"); - setCookie("configLayout", "connect"); }); $("#configNetworkButton").on("click", function () { $("#setupContainer").hide(); @@ -199,7 +196,6 @@ $(document).ready(function () { $("#configSocialButton").removeClass("activeButton"); $("#configConnectButton").removeClass("activeButton"); $("#configNetworkButton").addClass("activeButton"); - setCookie("configLayout", "network"); }); @@ -285,28 +281,6 @@ $(document).ready(function () { }); - -function setCookie(name, value, days) { - var expires = ""; - if (days) { - var date = new Date(); - date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); - expires = "; expires=" + date.toUTCString(); - } - document.cookie = name + "=" + (value || "") + expires + "; path=/; samesite=lax"; -} - -function getCookie(name) { - var nameEQ = name + "="; - var ca = document.cookie.split(';'); - for (var i = 0; i < ca.length; i++) { - var c = ca[i]; - while (c.charAt(0) == ' ') c = c.substring(1, c.length); - if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); - } - return null; -} - // Define function to capitalize the first letter of a string function capitalizeFirstLetter(string) { return string.charAt(0).toUpperCase() + string.slice(1); diff --git a/core/module/config/view/index/index.php b/core/module/config/view/index/index.php index e0f61913..a46e1272 100644 --- a/core/module/config/view/index/index.php +++ b/core/module/config/view/index/index.php @@ -7,15 +7,6 @@ 'value' => template::ico('home') ]); ?>
    -
    - 'buttonHelp', - 'href' => 'https://doc.zwiicms.fr/configuration-du-site', - 'target' => '_blank', - 'value' => template::ico('help'), - 'help' => 'Consulter l\'aide en ligne' - ]); */?> -
    'Identité', @@ -30,20 +21,24 @@
    'Configuration', - 'class' => 'buttonTab' + 'class' => 'buttonTab', + 'href' => helper::baseUrl() . 'config/register/setup' ]); ?> 'Référencement', - 'class' => 'buttonTab' + 'class' => 'buttonTab', + 'href' => helper::baseUrl() . 'config/register/social' ]); ?> 'Connexion', - 'class' => 'buttonTab' + 'class' => 'buttonTab', + 'href' => helper::baseUrl() . 'config/register/connect' ]); ?> 'Réseau', - 'class' => 'buttonTab' + 'class' => 'buttonTab', + 'href' => helper::baseUrl() . 'config/register/network' ]); ?>
    diff --git a/core/module/page/page.php b/core/module/page/page.php index b5181e3f..2790fda1 100644 --- a/core/module/page/page.php +++ b/core/module/page/page.php @@ -727,7 +727,8 @@ class page extends common $this->getUser('id'), 'view', [ - 'page' => $this->getUrl(2) + 'page' => $this->getUrl(2), + 'config' => $this->getData(['user', $this->getUser('id'), 'view', 'config']), ] ]); // Valeurs en sortie From da9d8d9d6298d7ec626a5e064e48ca3251cfde64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Thu, 19 Sep 2024 09:53:52 +0200 Subject: [PATCH 45/60] =?UTF-8?q?Fix=20layouts=20non=20initialis=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/module/config/view/index/index.js.php | 2 +- core/module/page/view/edit/edit.js.php | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/core/module/config/view/index/index.js.php b/core/module/config/view/index/index.js.php index 24112631..c4a6501a 100644 --- a/core/module/config/view/index/index.js.php +++ b/core/module/config/view/index/index.js.php @@ -68,7 +68,7 @@ $(document).ready(function () { var configLayout = "getData(['user', $this->getUser('id'), 'view', 'config']);?>"; // Non défini, valeur par défaut - if (configLayout == null) { + if (configLayout == "") { configLayout = "setup"; } diff --git a/core/module/page/view/edit/edit.js.php b/core/module/page/view/edit/edit.js.php index f865d034..bf249fea 100644 --- a/core/module/page/view/edit/edit.js.php +++ b/core/module/page/view/edit/edit.js.php @@ -68,8 +68,9 @@ $( document ).ready(function() { * Sélection des onglets */ var pageLayout = "getData(['user', $this->getUser('id'), 'view', 'page']);?>"; + console.log(pageLayout); // Non défini, valeur par défaut - if (pageLayout == null) { + if (pageLayout == "") { pageLayout = "content"; } // Tout cacher From 7a4b1589afeead3f197e70eb9cebc9a7da813ec5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Thu, 19 Sep 2024 10:52:11 +0200 Subject: [PATCH 46/60] 13.4.00.test4 inverse la position des icones users et config --- core/class/layout.class.php | 8 ++++---- core/core.php | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/core/class/layout.class.php b/core/class/layout.class.php index 7883f44b..da737c64 100644 --- a/core/class/layout.class.php +++ b/core/class/layout.class.php @@ -1071,14 +1071,14 @@ class layout extends common 'help' => 'Thème', 'href' => helper::baseUrl() . 'theme' ]) . ''; - $rightItems .= '
  • ' . template::ico('cog-alt', [ - 'help' => 'Configuration', - 'href' => helper::baseUrl() . 'config' - ]) . '
  • '; $rightItems .= '
  • ' . template::ico('users', [ 'help' => 'Utilisateurs', 'href' => helper::baseUrl() . 'user' ]) . '
  • '; + $rightItems .= '
  • ' . template::ico('cog-alt', [ + 'help' => 'Configuration', + 'href' => helper::baseUrl() . 'config' + ]) . '
  • '; // Mise à jour automatique $today = mktime(0, 0, 0); $checkUpdate = $this->getData(['core', 'lastAutoUpdate']); diff --git a/core/core.php b/core/core.php index 7e5b9785..944555b3 100644 --- a/core/core.php +++ b/core/core.php @@ -51,7 +51,7 @@ class common const ACCESS_TIMER = 1800; // Numéro de version - const ZWII_VERSION = '13.4.00.test3'; + const ZWII_VERSION = '13.4.00.test4'; // URL autoupdate const ZWII_UPDATE_URL = 'https://forge.chapril.org/ZwiiCMS-Team/cms-update/raw/branch/master/'; From dfd0f1ad2a0d20a49bc977ffcdd14faaf20327d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Wed, 25 Sep 2024 17:01:25 +0200 Subject: [PATCH 47/60] 13.4.00.test5 modification install en test --- core/core.php | 2 +- core/module/install/install.php | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/core/core.php b/core/core.php index 944555b3..d24a963d 100644 --- a/core/core.php +++ b/core/core.php @@ -51,7 +51,7 @@ class common const ACCESS_TIMER = 1800; // Numéro de version - const ZWII_VERSION = '13.4.00.test4'; + const ZWII_VERSION = '13.4.00.test5'; // URL autoupdate const ZWII_UPDATE_URL = 'https://forge.chapril.org/ZwiiCMS-Team/cms-update/raw/branch/master/'; diff --git a/core/module/install/install.php b/core/module/install/install.php index e5a677aa..1f60a37d 100644 --- a/core/module/install/install.php +++ b/core/module/install/install.php @@ -284,7 +284,7 @@ class install extends common 'display' => self::DISPLAY_JSON, 'content' => [ 'success' => $success, - 'data' => $success ? null : json_encode($message, JSON_UNESCAPED_UNICODE) + 'data' => $message ] ]); break; @@ -317,7 +317,7 @@ class install extends common 'display' => self::DISPLAY_JSON, 'content' => [ 'success' => $success, - 'data' => json_encode($message, JSON_UNESCAPED_UNICODE) + 'data' => $message ] ]); break; @@ -360,7 +360,7 @@ class install extends common 'display' => self::DISPLAY_JSON, 'content' => [ 'success' => $success, - 'data' => json_encode($message, JSON_UNESCAPED_UNICODE) + 'data' => $message, ] ]); break; @@ -437,7 +437,7 @@ class install extends common 'display' => self::DISPLAY_JSON, 'content' => [ 'success' => $success, - 'data' => json_encode($message, JSON_UNESCAPED_UNICODE) + 'data' => $message ] ]); } From 75bb94b9a7a8b885bddb1b087425ea75dad5b1f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Wed, 25 Sep 2024 21:13:04 +0200 Subject: [PATCH 48/60] =?UTF-8?q?Traitement=20de=20l'erreur=20=C3=A9tape?= =?UTF-8?q?=204?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/module/install/view/update/update.js.php | 38 +++++++++++-------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/core/module/install/view/update/update.js.php b/core/module/install/view/update/update.js.php index f15f9d30..e7e0a714 100644 --- a/core/module/install/view/update/update.js.php +++ b/core/module/install/view/update/update.js.php @@ -41,33 +41,39 @@ function showError(step, message, errors) { $("#installUpdateEnd").removeClass("disabled"); $("#installUpdateProgress").hide(); - // Vérifier si l'accolade ouvrante est trouvée et qu'elle n'est pas en première position if (typeof message !== 'object') { - - // Trouver la position du premier "{" pour repérer le début du tableau const startOfArray = message.indexOf('{'); - // Extraire le message du warning jusqu'au début du tableau - const warningMessage = message.substring(0, startOfArray).trim(); + // Vérifier que l'accolade existe et n'est pas en première position + if (startOfArray !== -1 && startOfArray > 0) { + const warningMessage = message.substring(0, startOfArray).trim(); + const jsonString = message.substring(startOfArray); - // Extraire le tableau JSON entre les accolades - const jsonString = message.substring(startOfArray); - const jsonData = JSON.parse(jsonString); + try { + const jsonData = JSON.parse(jsonString); - // Afficher les résultats - if (jsonData) { - $("#installUpdateErrorMessage").html("Détails de l'erreur :
    " + - jsonData.data.replace(/^"(.*)"$/, '$1') + - "
    " + - warningMessage.replace(/<[^p].*?>/g, "")); + // Afficher les résultats si le parsing JSON est réussi + if (jsonData) { + $("#installUpdateErrorMessage").html("Détails de l'erreur :
    " + + jsonData.data.replace(/^"(.*)"$/, '$1') + + "
    " + + warningMessage.replace(/<[^p].*?>/g, "")); + } + } catch (e) { + // En cas d'erreur de parsing, afficher un message générique + console.error("Erreur de parsing JSON : ", e); + $("#installUpdateErrorMessage").html("Une erreur inattendue est survenue lors du traitement des détails de l'erreur."); + } + } else { + // Si pas de JSON détecté, afficher le message brut + $("#installUpdateErrorMessage").html("Message d'erreur : " + message); } - } else { - // Vous pouvez également faire quelque chose d'autre ici, par exemple, afficher un message à l'utilisateur, etc. $("#installUpdateErrorMessage").html(message); } } + $(window).on("load", function () { step(1, null); }); \ No newline at end of file From 06bbeb0d2ef752f4c5ab56fe2339d6ad58e1be91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Wed, 25 Sep 2024 21:25:40 +0200 Subject: [PATCH 49/60] ajoute un die --- core/module/install/install.php | 1 + 1 file changed, 1 insertion(+) diff --git a/core/module/install/install.php b/core/module/install/install.php index 1f60a37d..c6964a7a 100644 --- a/core/module/install/install.php +++ b/core/module/install/install.php @@ -432,6 +432,7 @@ class install extends common if (!empty($message)) { $this->saveLog($message); } + die($message); // Valeurs en sortie $this->addOutput([ 'display' => self::DISPLAY_JSON, From 568b79e854f35f917f30b9bd00c404cfe9b07336 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Wed, 25 Sep 2024 21:34:26 +0200 Subject: [PATCH 50/60] vide le tampon --- core/module/install/install.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/module/install/install.php b/core/module/install/install.php index c6964a7a..a25e5707 100644 --- a/core/module/install/install.php +++ b/core/module/install/install.php @@ -432,7 +432,8 @@ class install extends common if (!empty($message)) { $this->saveLog($message); } - die($message); + // Nettoyage de tout contenu indésirable ajouté au tampon + ob_clean(); // Valeurs en sortie $this->addOutput([ 'display' => self::DISPLAY_JSON, From d0f779bb9bf2ca16ba1b1465c2f025e3928d9a2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Wed, 25 Sep 2024 21:38:01 +0200 Subject: [PATCH 51/60] Revert "vide le tampon" This reverts commit 568b79e854f35f917f30b9bd00c404cfe9b07336. --- core/module/install/install.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/module/install/install.php b/core/module/install/install.php index a25e5707..c6964a7a 100644 --- a/core/module/install/install.php +++ b/core/module/install/install.php @@ -432,8 +432,7 @@ class install extends common if (!empty($message)) { $this->saveLog($message); } - // Nettoyage de tout contenu indésirable ajouté au tampon - ob_clean(); + die($message); // Valeurs en sortie $this->addOutput([ 'display' => self::DISPLAY_JSON, From 47a5ddb4427d3c98093e1e420542e86a03770320 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Wed, 25 Sep 2024 21:41:08 +0200 Subject: [PATCH 52/60] =?UTF-8?q?gestion=20erreur=20simplifi=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/module/install/view/update/update.js.php | 61 ++++++------------- 1 file changed, 19 insertions(+), 42 deletions(-) diff --git a/core/module/install/view/update/update.js.php b/core/module/install/view/update/update.js.php index e7e0a714..e4aea36a 100644 --- a/core/module/install/view/update/update.js.php +++ b/core/module/install/view/update/update.js.php @@ -1,6 +1,12 @@ function step(i, data) { - var errors = ["", "", "", ""]; - $(".installUpdateProgressText").hide(), $(".installUpdateProgressText[data-id=" + i + "]").show(); + var errors = [ + "", + "", + "", + "" + ]; + $(".installUpdateProgressText").hide(); + $(".installUpdateProgressText[data-id=" + i + "]").show(); $("body").css("cursor", "wait"); @@ -12,7 +18,7 @@ function step(i, data) { data: data }, success: function (result) { - setTimeout((function () { + setTimeout(function () { if (4 === i) { $("#installUpdateSuccess").show(); $("body").css("cursor", "default"); @@ -21,59 +27,30 @@ function step(i, data) { } else { step(i + 1, result.data); } - }), 2e3) + }, 2000); }, error: function (xhr) { // Balance tout dans la console - console.log(i); - console.log(xhr.responseText); - console.log(errors); - // Appel de la fonction de gestion d'erreur - showError(i, xhr.responseText, errors); + console.log("Erreur à l'étape :", i); + console.log("Détails de l'erreur :", xhr.responseText); + console.log("Messages d'erreurs :", errors); + // Appel de la nouvelle fonction d'erreur + showError(i, errors); } }); } -function showError(step, message, errors) { +function showError(step, errors) { $("body").css("cursor", "default"); $("#installUpdateErrorStep").text(errors[step] + " (étape n°" + step + ")"); $("#installUpdateError").show(); $("#installUpdateEnd").removeClass("disabled"); $("#installUpdateProgress").hide(); - if (typeof message !== 'object') { - const startOfArray = message.indexOf('{'); - - // Vérifier que l'accolade existe et n'est pas en première position - if (startOfArray !== -1 && startOfArray > 0) { - const warningMessage = message.substring(0, startOfArray).trim(); - const jsonString = message.substring(startOfArray); - - try { - const jsonData = JSON.parse(jsonString); - - // Afficher les résultats si le parsing JSON est réussi - if (jsonData) { - $("#installUpdateErrorMessage").html("Détails de l'erreur :
    " + - jsonData.data.replace(/^"(.*)"$/, '$1') + - "
    " + - warningMessage.replace(/<[^p].*?>/g, "")); - } - } catch (e) { - // En cas d'erreur de parsing, afficher un message générique - console.error("Erreur de parsing JSON : ", e); - $("#installUpdateErrorMessage").html("Une erreur inattendue est survenue lors du traitement des détails de l'erreur."); - } - } else { - // Si pas de JSON détecté, afficher le message brut - $("#installUpdateErrorMessage").html("Message d'erreur : " + message); - } - } else { - $("#installUpdateErrorMessage").html(message); - } + // Affiche un message générique demandant de consulter la console + $("#installUpdateErrorMessage").html("Une erreur est survenue. Veuillez consulter la console du navigateur pour plus de détails."); } - $(window).on("load", function () { step(1, null); -}); \ No newline at end of file +}); From 75b230b2ed7abfcf37f2cab03d49e44d8af967b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Wed, 25 Sep 2024 21:57:08 +0200 Subject: [PATCH 53/60] =?UTF-8?q?13.4.00.test6=20prend=20en=20compte=20la?= =?UTF-8?q?=20d=C3=A9connexion=20=C3=A0=20la=20mise=20=C3=A0=20jour?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/core.php | 2 +- core/module/install/view/update/update.js.php | 57 ++++++++++++++++--- 2 files changed, 49 insertions(+), 10 deletions(-) diff --git a/core/core.php b/core/core.php index d24a963d..513577cf 100644 --- a/core/core.php +++ b/core/core.php @@ -51,7 +51,7 @@ class common const ACCESS_TIMER = 1800; // Numéro de version - const ZWII_VERSION = '13.4.00.test5'; + const ZWII_VERSION = '13.4.00.test6'; // URL autoupdate const ZWII_UPDATE_URL = 'https://forge.chapril.org/ZwiiCMS-Team/cms-update/raw/branch/master/'; diff --git a/core/module/install/view/update/update.js.php b/core/module/install/view/update/update.js.php index e4aea36a..0ed17c18 100644 --- a/core/module/install/view/update/update.js.php +++ b/core/module/install/view/update/update.js.php @@ -30,25 +30,64 @@ function step(i, data) { }, 2000); }, error: function (xhr) { - // Balance tout dans la console - console.log("Erreur à l'étape :", i); - console.log("Détails de l'erreur :", xhr.responseText); - console.log("Messages d'erreurs :", errors); - // Appel de la nouvelle fonction d'erreur - showError(i, errors); + console.log(i); + console.log(xhr.responseText); + console.log(errors); + + // Vérification du code d'erreur HTTP pour gérer la déconnexion + if (xhr.status === 401) { + alert("Votre session a expiré. Veuillez vous reconnecter."); + window.location.href = "/login"; // Redirige vers la page de connexion + } else { + // Appel de la fonction de gestion d'erreur + showError(i, xhr.responseText, errors); + } } }); } -function showError(step, errors) { +function showError(step, message, errors) { $("body").css("cursor", "default"); $("#installUpdateErrorStep").text(errors[step] + " (étape n°" + step + ")"); $("#installUpdateError").show(); $("#installUpdateEnd").removeClass("disabled"); $("#installUpdateProgress").hide(); - // Affiche un message générique demandant de consulter la console - $("#installUpdateErrorMessage").html("Une erreur est survenue. Veuillez consulter la console du navigateur pour plus de détails."); + // Vérifier si l'accolade ouvrante est trouvée et qu'elle n'est pas en première position + if (typeof message !== 'object') { + + // Trouver la position du premier "{" pour repérer le début du tableau + const startOfArray = message.indexOf('{'); + + if (startOfArray !== -1 && startOfArray > 0) { + // Extraire le message du warning jusqu'au début du tableau + const warningMessage = message.substring(0, startOfArray).trim(); + + // Extraire le tableau JSON entre les accolades + const jsonString = message.substring(startOfArray); + + try { + const jsonData = JSON.parse(jsonString); + + // Afficher les résultats si le parsing JSON est réussi + if (jsonData) { + $("#installUpdateErrorMessage").html("Détails de l'erreur :
    " + + jsonData.data.replace(/^"(.*)"$/, '$1') + + "
    " + + warningMessage.replace(/<[^p].*?>/g, "")); + } + } catch (e) { + // Afficher un message générique en cas d'erreur de parsing + console.error("Erreur de parsing JSON : ", e); + $("#installUpdateErrorMessage").html("Une erreur inattendue est survenue lors du traitement des détails de l'erreur."); + } + } else { + // Si pas de JSON détecté, afficher le message brut + $("#installUpdateErrorMessage").html("Message d'erreur : " + message); + } + } else { + $("#installUpdateErrorMessage").html(message); + } } $(window).on("load", function () { From 58118362388a734905f93e9ec8e7575d52ec508e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Wed, 25 Sep 2024 22:08:25 +0200 Subject: [PATCH 54/60] changes 13307 --- CHANGES.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 1e507e33..df107ada 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -21,6 +21,8 @@ - Bouton de génération du site inopérant. - Affichage intempestif des boutons de navigation de pages dans les vues des modules. +## Version 13.3.07 +- Anticipe la déconnexion de la version 13.4 ## Versions 13.3.06 ** Corrections : ** From e0748c2eb685f32c5b07593807640856d0809963 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Thu, 26 Sep 2024 19:59:39 +0200 Subject: [PATCH 55/60] =?UTF-8?q?13.4.00.test7=20=C3=A9vite=20la=20cr?= =?UTF-8?q?=C3=A9ation=20d'un=20user=20vide=20au=20logout?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/core.php | 2 +- core/module/user/user.php | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/core/core.php b/core/core.php index 513577cf..31bd2308 100644 --- a/core/core.php +++ b/core/core.php @@ -51,7 +51,7 @@ class common const ACCESS_TIMER = 1800; // Numéro de version - const ZWII_VERSION = '13.4.00.test6'; + const ZWII_VERSION = '13.4.00.test7'; // URL autoupdate const ZWII_UPDATE_URL = 'https://forge.chapril.org/ZwiiCMS-Team/cms-update/raw/branch/master/'; diff --git a/core/module/user/user.php b/core/module/user/user.php index d1d0ac2b..728e7510 100644 --- a/core/module/user/user.php +++ b/core/module/user/user.php @@ -1149,7 +1149,6 @@ class user extends common helper::deleteCookie('ZWII_USER_ID'); //helper::deleteCookie('ZWII_USER_PASSWORD'); helper::deleteCookie('ZWII_AUTH_KEY'); - $this->setData(['user', $this->getUser('id'), 'authKey', '']); // Détruit la session session_destroy(); From 9532be0cdc1f09ac09b2cba9f773541475355f7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Sat, 28 Sep 2024 18:02:47 +0200 Subject: [PATCH 56/60] =?UTF-8?q?Corrections=20R=C3=A9mi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/class/router.class.php | 1 + core/core.php | 11 +++++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/core/class/router.class.php b/core/class/router.class.php index 27d4dc55..8b5a618c 100644 --- a/core/class/router.class.php +++ b/core/class/router.class.php @@ -517,6 +517,7 @@ class core extends common if ( $this->isConnected() === true && $this->getUser('id') + && !$this->isPost() ) { $this->setData(['user', $this->getUser('id'), 'accessUrl', $this->getUrl()]); $this->setData(['user', $this->getUser('id'), 'accessTimer', time()]); diff --git a/core/core.php b/core/core.php index 31bd2308..5cc3fc9a 100644 --- a/core/core.php +++ b/core/core.php @@ -619,11 +619,8 @@ class common // Initialise le compteur de tentatives $attempts = 0; - // Convertit les données en chaîne de caractères - $serialized_data = serialize($data); - // Vérifie la longueur des données - $data_length = strlen($serialized_data); + $data_length = strlen($data); // Effectue jusqu'à 5 tentatives d'écriture while ($attempts < 5) { @@ -633,15 +630,17 @@ class common // Vérifie si l'écriture a réussi if ($write_result !== false && $write_result === $data_length) { // Sort de la boucle si l'écriture a réussi - return true; + break; } // Incrémente le compteur de tentatives $attempts++; + sleep(1); } // Échec de l'écriture après plusieurs tentatives - return false; + // Etat de l'écriture + return ($attempts < 5); } From c5af0fb37c8a05dc2262495d1b50c59c40c05098 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Sat, 28 Sep 2024 18:42:41 +0200 Subject: [PATCH 57/60] Supprime les save excessifs --- core/class/layout.class.php | 9 +++++---- core/class/router.class.php | 4 +--- core/core.php | 15 ++++++++++++-- core/module/page/page.php | 40 ++++++++++++++++++++++--------------- core/module/theme/theme.php | 30 ++++++++++++++++------------ core/module/user/user.php | 30 ++++++++++++++++------------ 6 files changed, 77 insertions(+), 51 deletions(-) diff --git a/core/class/layout.class.php b/core/class/layout.class.php index da737c64..d9dd813e 100644 --- a/core/class/layout.class.php +++ b/core/class/layout.class.php @@ -1090,11 +1090,11 @@ class layout extends common $today > $checkUpdate + $this->getData(['config', 'autoUpdateDelay', 86400]) ) { // Dernier auto controle - $this->setData(['core', 'lastAutoUpdate', $today]); + $this->setData(['core', 'lastAutoUpdate', $today], false); if ( helper::checkNewVersion(common::ZWII_UPDATE_CHANNEL) ) { - $this->setData(['core', 'updateAvailable', true]); + $this->setData(['core', 'updateAvailable', true], false); } // Recherche de mise à jour des modules @@ -1111,11 +1111,12 @@ class layout extends common } // Mise à jour d'un module if (array_key_exists($key, $infoModules) === true) { - $this->setData(['core', 'updateModuleAvailable', true]); + $this->setData(['core', 'updateModuleAvailable', true], false); } } } - + // Force la sauvegarde + $this->saveDB('core'); } } // Afficher le bouton : Mise à jour détectée + activée diff --git a/core/class/router.class.php b/core/class/router.class.php index 8b5a618c..40a0cc45 100644 --- a/core/class/router.class.php +++ b/core/class/router.class.php @@ -32,8 +32,6 @@ class core extends common } // Date de la dernière suppression $this->setData(['core', 'lastClearTmp', $lastClearTmp]); - // Enregistre les données - //$this->SaveData(); } // Backup automatique des données $lastBackup = mktime(0, 0, 0); @@ -519,7 +517,7 @@ class core extends common && $this->getUser('id') && !$this->isPost() ) { - $this->setData(['user', $this->getUser('id'), 'accessUrl', $this->getUrl()]); + $this->setData(['user', $this->getUser('id'), 'accessUrl', $this->getUrl()], false); $this->setData(['user', $this->getUser('id'), 'accessTimer', time()]); } // Breadcrumb diff --git a/core/core.php b/core/core.php index 5cc3fc9a..727fdb64 100644 --- a/core/core.php +++ b/core/core.php @@ -520,7 +520,7 @@ class common * Sauvegarde des données * @param array $keys Clé(s) des données */ - public function setData($keys = []) + public function setData($keys = [], $save = true) { // Pas d'enregistrement lorsqu'une notice est présente ou tableau transmis vide if ( @@ -548,7 +548,7 @@ class common $query .= '.' . $keys[$i]; } // Appliquer la modification, le dernier élément étant la donnée à sauvegarder - $success = is_object($db->set($query, $keys[count($keys) - 1], true)); + $success = is_object($db->set($query, $keys[count($keys) - 1], $save)); } return $success; } @@ -725,6 +725,17 @@ class common } + /** + * Forçage de l'enregistrement + * @param mixed $module + * @return void + */ + public function saveDB($module): void + { + $db = $this->dataFiles[$module]; + $db->save(); + } + /** * Accède à la liste des pages parents et de leurs enfants diff --git a/core/module/page/page.php b/core/module/page/page.php index 2790fda1..f24c41bc 100644 --- a/core/module/page/page.php +++ b/core/module/page/page.php @@ -382,11 +382,13 @@ class page extends common $pageId = helper::increment($pageId, self::$moduleIds); // Met à jour les enfants foreach ($this->getHierarchy($this->getUrl(2), null) as $childrenPageId) { - $this->setData(['page', $childrenPageId, 'parentPageId', $pageId]); + $this->setData(['page', $childrenPageId, 'parentPageId', $pageId], false); } + // Force la sauvegarde + $this->saveDB('page'); // Change l'id de page dans les données des modules if ($this->getData(['module', $this->getUrl(2)]) !== null) { - $this->setData(['module', $pageId, $this->getData(['module', $this->getUrl(2)])]); + $this->setData(['module', $pageId, $this->getData(['module', $this->getUrl(2)])], false); $this->deleteData(['module', $this->getUrl(2)]); // Renommer le dossier du module $moduleId = $this->getData(['page', $this->getUrl(2), 'moduleId']); @@ -397,8 +399,10 @@ class page extends common copy($modulesData[$moduleId]['dataDirectory'] . $this->getUrl(2), $modulesData[$moduleId]['dataDirectory'] . $pageId); $this->deleteDir($modulesData[$moduleId]['dataDirectory'] . $this->getUrl(2)); // Mettre à jour le nom de la feuille de style - $this->setData(['module', $pageId, 'theme', 'style', $modulesData[$moduleId]['dataDirectory'] . $pageId]); + $this->setData(['module', $pageId, 'theme', 'style', $modulesData[$moduleId]['dataDirectory'] . $pageId], false); } + // Force la sauvegarde + $this->saveDB('module'); } // Si la page correspond à la page d'accueil, change l'id dans la configuration du site if ($this->getData(['locale', 'homePageId']) === $this->getUrl(2)) { @@ -418,20 +422,22 @@ class page extends common } // Traitement des pages spéciales affectées dans la config : if ($this->getUrl(2) === $this->getData(['locale', 'legalPageId'])) { - $this->setData(['locale', 'legalPageId', $pageId]); + $this->setData(['locale', 'legalPageId', $pageId], false); } if ($this->getUrl(2) === $this->getData(['locale', 'searchPageId'])) { - $this->setData(['locale', 'searchPageId', $pageId]); + $this->setData(['locale', 'searchPageId', $pageId], false); } if ($this->getUrl(2) === $this->getData(['locale', 'page404'])) { - $this->setData(['locale', 'page404', $pageId]); + $this->setData(['locale', 'page404', $pageId], false); } if ($this->getUrl(2) === $this->getData(['locale', 'page403'])) { - $this->setData(['locale', 'page403', $pageId]); + $this->setData(['locale', 'page403', $pageId], false); } if ($this->getUrl(2) === $this->getData(['locale', 'page302'])) { - $this->setData(['locale', 'page302', $pageId]); + $this->setData(['locale', 'page302', $pageId], false); } + // Force la sauvegarde + $this->saveDB('locale'); // Si la page est une page enfant, actualise les positions des autres enfants du parent, sinon actualise les pages sans parents $lastPosition = 1; $hierarchy = $this->getInput('pageEditParentPageId') ? $this->getHierarchy($this->getInput('pageEditParentPageId')) : array_keys($this->getHierarchy()); @@ -450,7 +456,7 @@ class page extends common $lastPosition++; } // Change la position - $this->setData(['page', $hierarchyPageId, 'position', $lastPosition]); + $this->setData(['page', $hierarchyPageId, 'position', $lastPosition], false); // Incrémente pour la prochaine position $lastPosition++; } @@ -475,26 +481,28 @@ class page extends common ) { foreach ($this->getHierarchy($pageId) as $parentId => $childId) { if ($this->getData(['page', $childId, 'parentPageId']) === $pageId) { - $this->setData(['page', $childId, 'position', 0]); + $this->setData(['page', $childId, 'position', 0], false); } } + // Force la sauvegarde + $this->saveDB('page'); } // La page est une barre latérale qui a été renommée : changer le nom de la barre dans les pages qui l'utilisent if ($this->getinput('pageEditBlock') === 'bar') { foreach ($this->getHierarchy() as $eachPageId => $parentId) { if ($this->getData(['page', $eachPageId, 'barRight']) === $this->getUrl(2)) { - $this->setData(['page', $eachPageId, 'barRight', $pageId]); + $this->setData(['page', $eachPageId, 'barRight', $pageId], false); } if ($this->getData(['page', $eachPageId, 'barLeft']) === $this->getUrl(2)) { - $this->setData(['page', $eachPageId, 'barLeft', $pageId]); + $this->setData(['page', $eachPageId, 'barLeft', $pageId], false); } foreach ($parentId as $childId) { if ($this->getData(['page', $childId, 'barRight']) === $this->getUrl(2)) { - $this->setData(['page', $childId, 'barRight', $pageId]); + $this->setData(['page', $childId, 'barRight', $pageId], false); } if ($this->getData(['page', $childId, 'barLeft']) === $this->getUrl(2)) { - $this->setData(['page', $childId, 'barLeft', $pageId]); + $this->setData(['page', $childId, 'barLeft', $pageId], false); } } } @@ -710,13 +718,13 @@ class page extends common { $p = $this->getData(['page']); $d = array_map(function ($d) { - unset ($d["css"], $d["js"]); + unset($d["css"], $d["js"]); return $d; }, $p); return json_encode($d); } - /** + /** * Stocke la variable dans les paramètres de l'utilisateur pour activer la tab à sa prochaine visite * @return never */ diff --git a/core/module/theme/theme.php b/core/module/theme/theme.php index 795f811e..59c17741 100644 --- a/core/module/theme/theme.php +++ b/core/module/theme/theme.php @@ -419,7 +419,7 @@ class theme extends common ]); // Sauvegarder la configuration localisée - $this->setData(['locale', 'legalPageId', $this->getInput('configLegalPageId')]); + $this->setData(['locale', 'legalPageId', $this->getInput('configLegalPageId')], false); $this->setData(['locale', 'searchPageId', $this->getInput('configSearchPageId')]); // Valeurs en sortie @@ -507,21 +507,23 @@ class theme extends common 'featureContent' => $featureContent, 'featureFiles' => $files ] - ]); + ], false); // Modification de la position du menu selon la position de la bannière if ($this->getData(['theme', 'header', 'position']) == 'site') { - $this->setData(['theme', 'menu', 'position', str_replace('body-', 'site-', $this->getData(['theme', 'menu', 'position']))]); + $this->setData(['theme', 'menu', 'position', str_replace('body-', 'site-', $this->getData(['theme', 'menu', 'position']))], false); } if ($this->getData(['theme', 'header', 'position']) == 'body') { - $this->setData(['theme', 'menu', 'position', str_replace('site-', 'body-', $this->getData(['theme', 'menu', 'position']))]); + $this->setData(['theme', 'menu', 'position', str_replace('site-', 'body-', $this->getData(['theme', 'menu', 'position']))], false); } // Menu accroché à la bannière qui devient cachée if ( $this->getData(['theme', 'header', 'position']) == 'hide' && in_array($this->getData(['theme', 'menu', 'position']), ['body-first', 'site-first', 'body-first', 'site-second']) ) { - $this->setData(['theme', 'menu', 'position', 'site']); + $this->setData(['theme', 'menu', 'position', 'site'], false); } + // Force la sauvegarde + $this->saveDB('theme'); // Valeurs en sortie $this->addOutput([ 'notification' => helper::translate('Modifications enregistrées'), @@ -631,7 +633,7 @@ class theme extends common // Polices liées au thème admin $fonts['Titre (admin)'] = $this->getData(['admin', 'fontTitle']); $fonts['Texte (admin)'] = $this->getData(['admin', 'fontText']); - + // Polices liées au thème $fonts['Bannière'] = $this->getData(['theme', 'header', 'font']); $fonts['Menu'] = $this->getData(['theme', 'menu', 'font']); @@ -650,7 +652,7 @@ class theme extends common if (is_array($typeValue)) { foreach ($typeValue as $fontId => $fontValue) { // Recherche les correspondances - $result = array_filter($fonts, function($value) use ($fontId) { + $result = array_filter($fonts, function ($value) use ($fontId) { return $value == $fontId; }); $keyResults = array_keys($result); @@ -846,7 +848,7 @@ class theme extends common file_exists($this->getData(['font', 'files', $this->getUrl(3), 'resource'])) ) { - unlink($this->getData(['font', 'files', $this->getUrl(3), 'resource'])); + unlink($this->getData(['font', 'files', $this->getUrl(3), 'resource'])); } // Valeurs en sortie @@ -921,7 +923,7 @@ class theme extends common 'fontWeight' => $this->getInput('themeTitleFontWeight'), 'textTransform' => $this->getInput('themeTitleTextTransform') ] - ]); + ], false); $this->setData([ 'theme', 'text', @@ -931,7 +933,7 @@ class theme extends common 'textColor' => $this->getInput('themeTextTextColor'), 'linkColor' => $this->getInput('themeTextLinkColor') ] - ]); + ], false); $this->setData([ 'theme', 'site', @@ -942,14 +944,14 @@ class theme extends common 'width' => $this->getInput('themeSiteWidth'), 'margin' => $this->getInput('themeSiteMargin', helper::FILTER_BOOLEAN) ] - ]); + ], false); $this->setData([ 'theme', 'button', [ 'backgroundColor' => $this->getInput('themeButtonBackgroundColor') ] - ]); + ], false); $this->setData([ 'theme', 'block', @@ -957,7 +959,9 @@ class theme extends common 'backgroundColor' => $this->getInput('themeBlockBackgroundColor'), 'borderColor' => $this->getInput('themeBlockBorderColor') ] - ]); + ], false); + // Force la sauvegarde + $this->saveDB('theme'); // Valeurs en sortie $this->addOutput([ 'notification' => helper::translate('Modifications enregistrées'), diff --git a/core/module/user/user.php b/core/module/user/user.php index 728e7510..453a04cc 100644 --- a/core/module/user/user.php +++ b/core/module/user/user.php @@ -345,7 +345,7 @@ class user extends common 'files' => $this->getInput('userEditFiles', helper::FILTER_BOOLEAN), 'language' => $this->getInput('userEditLanguage', helper::FILTER_STRING_SHORT), 'tags' => $this->getInput('userEditTags', helper::FILTER_STRING_SHORT), - 'authKey' => $this->getData(['user', $this->getUrl(2), 'authKey']), + 'authKey' => $this->getData(['user', $this->getUrl(2), 'authKey']), ] ]); // Redirection spécifique si l'utilisateur change son mot de passe @@ -1031,8 +1031,8 @@ class user extends common $this->getData(['user', $userId, 'connectTimeout']) + $this->getData(['config', 'connect', 'timeout']) < time() and $this->getData(['user', $userId, 'connectFail']) === $this->getData(['config', 'connect', 'attempt']) ) { - $this->setData(['user', $userId, 'connectFail', 0]); - $this->setData(['user', $userId, 'connectTimeout', 0]); + $this->setData(['user', $userId, 'connectFail', 0], false); + $this->setData(['user', $userId, 'connectTimeout', 0], false); } // Check la présence des variables et contrôle du blocage du compte si valeurs dépassées // Vérification du mot de passe et du groupe @@ -1044,8 +1044,8 @@ class user extends common and $captcha === true ) { // RAZ - $this->setData(['user', $userId, 'connectFail', 0]); - $this->setData(['user', $userId, 'connectTimeout', 0]); + $this->setData(['user', $userId, 'connectFail', 0], false); + $this->setData(['user', $userId, 'connectTimeout', 0], false); // Clé d'authenfication $authKey = uniqid('', true) . bin2hex(random_bytes(8)); @@ -1073,7 +1073,7 @@ class user extends common } // Accès multiples avec le même compte - $this->setData(['user', $userId, 'accessCsrf', $_SESSION['csrf']]); + $this->setData(['user', $userId, 'accessCsrf', $_SESSION['csrf']], false); // Valeurs en sortie lorsque le site est en maintenance et que l'utilisateur n'est pas administrateur if ( $this->getData(['config', 'maintenance']) @@ -1106,12 +1106,12 @@ class user extends common $notification = helper::translate('Captcha, identifiant ou mot de passe incorrects'); $logStatus = $captcha === true ? 'Erreur de mot de passe' : 'Erreur de captcha'; // Cas 1 le nombre de connexions est inférieur aux tentatives autorisées : incrément compteur d'échec - if ($this->getData(['user', $userId, 'connectFail']) < $this->getData(['config', 'connect', 'attempt'])) { - $this->setData(['user', $userId, 'connectFail', $this->getdata(['user', $userId, 'connectFail']) + 1]); + if ($this->getData(['user', $userId, 'connectFail']) < $this->getData(['config', 'connect', 'attempt'], false)) { + $this->setData(['user', $userId, 'connectFail', $this->getdata(['user', $userId, 'connectFail']) + 1], false); } // Cas 2 la limite du nombre de connexion est atteinte : placer le timer if ($this->getdata(['user', $userId, 'connectFail']) == $this->getData(['config', 'connect', 'attempt'])) { - $this->setData(['user', $userId, 'connectTimeout', time()]); + $this->setData(['user', $userId, 'connectTimeout', time()], false); } // Cas 3 le délai de bloquage court if ($this->getData(['user', $userId, 'connectTimeout']) + $this->getData(['config', 'connect', 'timeout']) > time()) { @@ -1124,6 +1124,8 @@ class user extends common ]); } } + // Force la sauvegarde + $this->saveDB('user'); } // Journalisation $this->saveLog($logStatus); @@ -1202,11 +1204,11 @@ class user extends common $newPassword = $this->getInput('userResetNewPassword', helper::FILTER_PASSWORD, true); } // Modifie le mot de passe - $this->setData(['user', $this->getUrl(2), 'password', $newPassword]); + $this->setData(['user', $this->getUrl(2), 'password', $newPassword], false); // Réinitialise la date de la demande - $this->setData(['user', $this->getUrl(2), 'forgot', 0]); + $this->setData(['user', $this->getUrl(2), 'forgot', 0], false); // Réinitialise le blocage - $this->setData(['user', $this->getUrl(2), 'connectFail', 0]); + $this->setData(['user', $this->getUrl(2), 'connectFail', 0], false); $this->setData(['user', $this->getUrl(2), 'connectTimeout', 0]); // Valeurs en sortie $this->addOutput([ @@ -1321,7 +1323,7 @@ class user extends common "accessCsrf" => null, 'tags' => $item['tags'] ] - ]); + ], false); // Icône de notification $item['notification'] = $create ? template::ico('check') : template::ico('cancel'); // Envoi du mail @@ -1362,6 +1364,8 @@ class user extends common } } + // Force la sauvegarde + $this->saveDB('user'); if (empty(self::$users)) { $notification = helper::translate('Rien à importer, erreur de format ou fichier incorrect'); $success = false; From d3f247f6fb4b6652efcab1986f447c6dba23bb85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Sat, 28 Sep 2024 18:45:48 +0200 Subject: [PATCH 58/60] ajoute les traceurs --- core/class/jsondb/JsonDb.class.php | 3 +++ core/core.php | 3 +++ 2 files changed, 6 insertions(+) diff --git a/core/class/jsondb/JsonDb.class.php b/core/class/jsondb/JsonDb.class.php index d96f8b99..69dc326d 100644 --- a/core/class/jsondb/JsonDb.class.php +++ b/core/class/jsondb/JsonDb.class.php @@ -163,6 +163,9 @@ class JsonDb extends \Prowebcraft\Dot // Essaye d'écrire les données encodées dans le fichier de base de données $write_result = file_put_contents($this->db, $encoded_data, LOCK_EX); // Les utilisateurs multiples obtiennent un verrou + $now = \DateTime::createFromFormat('U.u', microtime(true)); + file_put_contents("tmplog.txt", '[JsonDb][' . $now->format('H:i:s.u') . ']--' . $this->db . "\r\n", FILE_APPEND); + // Vérifie si l'écriture a réussi if ($write_result === $encoded_length) { // Sort de la boucle si l'écriture a réussi diff --git a/core/core.php b/core/core.php index 727fdb64..cd05ccb0 100644 --- a/core/core.php +++ b/core/core.php @@ -627,6 +627,9 @@ class common // Essaye d'écrire les données dans le fichier avec verrouillage exclusif $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') . ']' . "\r\n", FILE_APPEND); + // Vérifie si l'écriture a réussi if ($write_result !== false && $write_result === $data_length) { // Sort de la boucle si l'écriture a réussi From 03932db20d849a5e4ef1a22cb29c4beec53af6b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Sat, 28 Sep 2024 18:49:29 +0200 Subject: [PATCH 59/60] =?UTF-8?q?Config,=20double=20rafraissement,=20rien?= =?UTF-8?q?=20=C3=A0=20voir=20avec=20les=20process?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/core.php | 2 +- core/module/config/view/index/index.php | 8 ++-- tmplog.txt | 55 +++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 tmplog.txt diff --git a/core/core.php b/core/core.php index cd05ccb0..8f8b2162 100644 --- a/core/core.php +++ b/core/core.php @@ -51,7 +51,7 @@ class common const ACCESS_TIMER = 1800; // Numéro de version - const ZWII_VERSION = '13.4.00.test7'; + const ZWII_VERSION = '13.4.00.test8'; // URL autoupdate const ZWII_UPDATE_URL = 'https://forge.chapril.org/ZwiiCMS-Team/cms-update/raw/branch/master/'; diff --git a/core/module/config/view/index/index.php b/core/module/config/view/index/index.php index a46e1272..203315f3 100644 --- a/core/module/config/view/index/index.php +++ b/core/module/config/view/index/index.php @@ -22,23 +22,23 @@ 'Configuration', 'class' => 'buttonTab', - 'href' => helper::baseUrl() . 'config/register/setup' + //'href' => helper::baseUrl() . 'config/register/setup' ]); ?> 'Référencement', 'class' => 'buttonTab', - 'href' => helper::baseUrl() . 'config/register/social' + //'href' => helper::baseUrl() . 'config/register/social' ]); ?> 'Connexion', 'class' => 'buttonTab', - 'href' => helper::baseUrl() . 'config/register/connect' + //'href' => helper::baseUrl() . 'config/register/connect' ]); ?> 'Réseau', 'class' => 'buttonTab', - 'href' => helper::baseUrl() . 'config/register/network' + //'href' => helper::baseUrl() . 'config/register/network' ]); ?>
    diff --git a/tmplog.txt b/tmplog.txt new file mode 100644 index 00000000..7c66d674 --- /dev/null +++ b/tmplog.txt @@ -0,0 +1,55 @@ +[JsonDb][16:45:59.468800]--site/data/core.json +[JsonDb][16:45:59.792600]--site/data/core.json +[SecurePut][16:45:59.832800] +[SecurePut][16:46:02.984400] +[SecurePut][16:46:06.197000] +[SecurePut][16:46:06.213100] +[SecurePut][16:46:49.939800] +[JsonDb][16:46:50.130600]--site/data/user.json +[JsonDb][16:46:50.141100]--site/data/user.json +[SecurePut][16:46:50.142500] +[SecurePut][16:46:50.196200] +[JsonDb][16:46:50.197300]--site/data/user.json +[JsonDb][16:46:50.800100]--site/data/core.json +[SecurePut][16:47:37.046500] +[JsonDb][16:47:37.047600]--site/data/user.json +[SecurePut][16:47:45.039000] +[JsonDb][16:47:45.040400]--site/data/user.json +[SecurePut][16:47:50.844600] +[JsonDb][16:47:50.850400]--site/data/user.json +[JsonDb][16:47:50.910900]--site/data/user.json +[SecurePut][16:47:51.031300] +[JsonDb][16:47:51.034700]--site/data/user.json +[SecurePut][16:47:52.635300] +[JsonDb][16:47:52.641900]--site/data/user.json +[JsonDb][16:47:52.676000]--site/data/user.json +[SecurePut][16:47:52.758300] +[JsonDb][16:47:52.759300]--site/data/user.json +[SecurePut][16:47:57.979900] +[JsonDb][16:47:57.989300]--site/data/config.json +[SecurePut][16:47:58.627800] +[JsonDb][16:47:58.629000]--site/data/user.json +[SecurePut][16:48:01.217400] +[JsonDb][16:48:01.236600]--site/data/config.json +[SecurePut][16:48:01.898900] +[JsonDb][16:48:01.900600]--site/data/user.json +[SecurePut][16:48:05.415000] +[JsonDb][16:48:05.420000]--site/data/user.json +[SecurePut][16:48:09.079400] +[JsonDb][16:48:09.080500]--site/data/user.json +[JsonDb][16:48:09.093300]--site/data/fr_FR/module.json +[JsonDb][16:48:09.095000]--site/data/fr_FR/module.json +[JsonDb][16:48:09.132700]--site/data/fr_FR/module.json +[JsonDb][16:48:09.153400]--site/data/fr_FR/module.json +[JsonDb][16:48:09.155000]--site/data/fr_FR/module.json +[JsonDb][16:48:09.171700]--site/data/fr_FR/module.json +[JsonDb][16:48:09.193500]--site/data/fr_FR/module.json +[JsonDb][16:48:09.211400]--site/data/fr_FR/module.json +[JsonDb][16:48:09.228900]--site/data/fr_FR/module.json +[JsonDb][16:48:09.242600]--site/data/fr_FR/module.json +[JsonDb][16:48:09.262900]--site/data/fr_FR/module.json +[JsonDb][16:48:09.282600]--site/data/fr_FR/module.json +[SecurePut][16:48:11.255300] +[JsonDb][16:48:11.258100]--site/data/user.json +[SecurePut][16:48:59.942200] +[JsonDb][16:48:59.943400]--site/data/user.json From 86ce4a75b494e479e1474910950a4b2fc17c1d57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tempez?= Date: Sat, 28 Sep 2024 19:04:40 +0200 Subject: [PATCH 60/60] =?UTF-8?q?Position=20des=20boutons=20dans=20la=20co?= =?UTF-8?q?nfig=20et=20pr=C3=A9cise=20la=20cible=20de=20trace=20secure.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/core.php | 2 +- core/module/config/view/index/index.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/core.php b/core/core.php index 8f8b2162..e9755af2 100644 --- a/core/core.php +++ b/core/core.php @@ -628,7 +628,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') . ']' . "\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) { diff --git a/core/module/config/view/index/index.php b/core/module/config/view/index/index.php index 203315f3..e17d4ae0 100644 --- a/core/module/config/view/index/index.php +++ b/core/module/config/view/index/index.php @@ -7,7 +7,7 @@ 'value' => template::ico('home') ]); ?>
    -
    +
    'Identité', 'href' => helper::baseUrl() . 'language/site'