Merge branch '10313' into 10400

This commit is contained in:
fredtempez 2020-12-25 20:18:55 +01:00
commit bb7481aabe
4 changed files with 86 additions and 69 deletions

11
.gitignore vendored
View File

@ -10,6 +10,8 @@ site/backup/*
site/data/*.json site/data/*.json
site/data/*.css site/data/*.css
site/data/fr/*.json site/data/fr/*.json
site/data/fr/*.back
site/data/*.back
# Fichiers uploadés # Fichiers uploadés
@ -36,12 +38,3 @@ site/data/journal.log
.DS_Store .DS_Store
site/.DS_Store site/.DS_Store
site/file/.DS_Store site/file/.DS_Store
site/data/es/locale.json
site/data/es/module.json
site/data/es/page.json
site/data/en/locale.json
site/data/en/module.json
site/data/en/page.json
site/data/de/locale.json
site/data/de/module.json
site/data/de/page.json

View File

@ -18,6 +18,14 @@
- Traduction automatique dans la langue du navigateur. - Traduction automatique dans la langue du navigateur.
- Amélioration de la structure du flux RSS. - Amélioration de la structure du flux RSS.
## Version 10.3.13
Modifications :
- Système de données (JsonDN) :
- Verrouillage des fichiers de données ouverts en écriture.
- Message d'erreur littéral.
- Sauvegarde des fichiers de données après un effacement et une écriture.
- Google Analytics, option d'anonymisation.
## Version 10.3.12 ## Version 10.3.12
Correction : Correction :
- Impossibilité de lister les commentaires des articles de blog dans la fenêtre de gestion. - Impossibilité de lister les commentaires des articles de blog dans la fenêtre de gestion.
@ -40,7 +48,7 @@ Modification :
Corrections : Corrections :
- Configuration : persistance de l'ouverture des blocs. - Configuration : persistance de l'ouverture des blocs.
- Réinitialisation du mot de passe : - Réinitialisation du mot de passe :
- Remise à zéro du timer après renouvellement du mot de passe. - Remise à zéro du timer après renouvèlement du mot de passe.
- Affichage de le fenêtre "Nouveau mot de passe" allégée. - Affichage de le fenêtre "Nouveau mot de passe" allégée.
- Redirection sur la page d'accueil. - Redirection sur la page d'accueil.
- Modules news et blog : transparence icône RSS. - Modules news et blog : transparence icône RSS.
@ -57,7 +65,7 @@ Corrections :
## version 10.3.06 ## version 10.3.06
- Correction : - Correction :
- Edition de page avec module, le changement de mise en page désactive le bouton d'option du module. - Édition de page avec module, le changement de mise en page désactive le bouton d'option du module.
- Modification : - Modification :
- Modules News et Blog : ajout de l'option flux RSS. L'option est activée par défaut. - Modules News et Blog : ajout de l'option flux RSS. L'option est activée par défaut.
@ -119,7 +127,7 @@ Corrections :
## version 10.3.00 ## version 10.3.00
- Corrections : - Corrections :
- Bloquage de l'incrémentation de l'id de page lorsque deux pages ont le même nom. - Incrémentation de l'id de page bloquée lorsque deux pages ont le même nom.
- Login : l'option "Se souvenir de moi" est fonctionnelle. - Login : l'option "Se souvenir de moi" est fonctionnelle.
- Menu : déplacement de la classe "active". - Menu : déplacement de la classe "active".
- Le titre dans la configuration du module non affiché si le titre de la page est masqué. - Le titre dans la configuration du module non affiché si le titre de la page est masqué.
@ -136,7 +144,7 @@ Corrections :
- Configuration du site : - Configuration du site :
- Pages 403 (accès interdit), 404 (page introuvable) et site en maintenance personnalisables - Pages 403 (accès interdit), 404 (page introuvable) et site en maintenance personnalisables
- Sauvegarde du site dans une archive : animation d'attente avec message de confirmation ou d'erreur ; le nom de l'archive prend le nom du sous-domaine s'il existe. - Sauvegarde du site dans une archive : animation d'attente avec message de confirmation ou d'erreur ; le nom de l'archive prend le nom du sous-domaine s'il existe.
- Captcha : addition présentée en lettres sous la forme d'images, réponse en chiffres ; correction du nom de la fonction (capcha en captcha). - Captcha : addition présentée en lettres sous la forme d'images, réponse en chiffres ; correction du nom de la fonction (captcha en captcha).
- Page : - Page :
- Duplication d'une page. - Duplication d'une page.
- Mise à jour : - Mise à jour :
@ -175,7 +183,7 @@ Corrections :
## version 10.2.03 ## version 10.2.03
- Corrections : - Corrections :
- Les entrées de menu disposent d'une classe par groupe de parent en lieu et place des ids. - Les entrées de menu disposent d'une classe par groupe de parent en lieu et place des ids.
- Edition du compte de l'utilisateur, empêcher le préremplissage de l'ancien mot de passe. - Édition du compte de l'utilisateur, empêcher le pré-remplissage de l'ancien mot de passe.
- Reformulation du mail de confirmation d'inscription. - Reformulation du mail de confirmation d'inscription.
- Champ de sélection de fichiers, suppression de la couleur des URL lors d'un survol - Champ de sélection de fichiers, suppression de la couleur des URL lors d'un survol
- Modifications : - Modifications :
@ -192,7 +200,7 @@ Corrections :
- Optimisation et correction de l'algorithme de contrôle d'accès. - Optimisation et correction de l'algorithme de contrôle d'accès.
- Erreur des noms de champ barre des membres dans le pied de page. - Erreur des noms de champ barre des membres dans le pied de page.
- Génération de l'image tag, amélioration du code et du message d'erreur. - Génération de l'image tag, amélioration du code et du message d'erreur.
- Edition de page, erreur lors de la sélection d'une icône de menu. - Édition de page, erreur lors de la sélection d'une icône de menu.
- Problème lors de l'installation, impossibilité d'obtenir l'écran de configuration. - Problème lors de l'installation, impossibilité d'obtenir l'écran de configuration.
## version 10.2.00 ## version 10.2.00
@ -200,11 +208,11 @@ Corrections :
- jQuery v3.5.1 - jQuery v3.5.1
- Nouveautés : - Nouveautés :
- Gestion des accès concurrents : - Gestion des accès concurrents :
- deux utilisateurs ne peuvent accèder en modification à la même page du site ou de configuration - deux utilisateurs ne peuvent accéder en modification à la même page du site ou de configuration
- la connexion d'un utilisateur sur un autre poste ou navigateur déconnecte la session précédente. - la connexion d'un utilisateur sur un autre poste ou navigateur déconnecte la session précédente.
- sécurisation du login - sécurisation du login
- journalisation de l'utilisation du site - journalisation de l'utilisation du site
- Ecran de configuration et d'édition des pages, les blocs sont pliables et dépliables afin d'alléger l'occupation sur l'écran. Le statut des blocs (fermés ; ouverts) est persistante au cours de la session. - Écran de configuration et d'édition des pages, les blocs sont pliables et dépliables afin d'alléger l'occupation sur l'écran. Le statut des blocs (fermés ; ouverts) est persistante au cours de la session.
- Modifications : - Modifications :
- Thème, les sélecteurs de couleur affiche la valeur RGBa d'une couleur différente de celle de la sélection. - Thème, les sélecteurs de couleur affiche la valeur RGBa d'une couleur différente de celle de la sélection.
- Thème de l'administration, amélioration du rendu. - Thème de l'administration, amélioration du rendu.
@ -278,16 +286,16 @@ Corrections :
- Améliorations : - Améliorations :
- Architecture de stockage des données. - Architecture de stockage des données.
- Les données sont désormais stockées dans des fichiers distincts (core, config, theme, user, page et module). - Les données sont désormais stockées dans des fichiers distincts (core, config, theme, user, page et module).
- Les données relatives aux pages et aux modules sont stockées dans un dossier localisé fr par défaut en préaration de la version multilangues. - Les données relatives aux pages et aux modules sont stockées dans un dossier localisé fr par défaut en préparation de la version multi-langues.
- Gestion des données : - Gestion des données :
- Le système ne conserve plus en mémoire l'intégralité des données de site comme dans les versions précédentes. - Le système ne conserve plus en mémoire l'intégralité des données de site comme dans les versions précédentes.
- Les données du site sont chargées à la demande au lieu d'être lues dans leur intégralité. - Les données du site sont chargées à la demande au lieu d'être lues dans leur intégralité.
- Les mises à jour et effacements sont appliquées en direct sur le disque. - Les mises à jour et effacements sont appliquées en direct sur le disque.
- Modifications : - Modifications :
- Module gallery optimisé, tri dynamique, choix du thème. - Module gallery optimisé, tri dynamique, choix du thème.
- Module blog présentation optimisée avec options de position de l'image, la métadescription est le contenu de l'article. - Module blog présentation optimisée avec options de position de l'image, la méta-description est le contenu de l'article.
- Chargement paresseux des images. - Chargement paresseux des images.
- Edition de page : suppression de l'option d'ouverture dans une lity. - Édition de page : suppression de l'option d'ouverture dans une lity.
- Protection des données des modules en cas de changement lors de l'édition d'une page. - Protection des données des modules en cas de changement lors de l'édition d'une page.
Corrections de bug : Corrections de bug :
- Mise à jour automatique : procédure modifiée, désactivée si allow_url_fopen = off sur le serveur - Mise à jour automatique : procédure modifiée, désactivée si allow_url_fopen = off sur le serveur
@ -412,7 +420,7 @@ Corrections de bug :
- L'effet de couleur de fond personnalisé d'une page sélectionnée dans le menu est limité aux pages parents. - L'effet de couleur de fond personnalisé d'une page sélectionnée dans le menu est limité aux pages parents.
- Améliorations : - Améliorations :
- Affichage du contenu seul d'une page du site dans une popup Lity sans menu, bannière et pied de page. - Affichage du contenu seul d'une page du site dans une popup Lity sans menu, bannière et pied de page.
- Editeur de texte ; effet accordéon, les accordéons peuvent être tous refermés. - Éditeur de texte ; effet accordéon, les accordéons peuvent être tous refermés.
- Thème ; menu : lorsque le menu est réduit, le titre du site peut être inséré à la gauche du menu burger. - Thème ; menu : lorsque le menu est réduit, le titre du site peut être inséré à la gauche du menu burger.
## version 9.2.14 ## version 9.2.14
@ -444,7 +452,7 @@ Corrections de bug :
- Supprimer le forçage de l'affichage des médias à 100% - Supprimer le forçage de l'affichage des médias à 100%
- Activer le dimensionnement des médias - Activer le dimensionnement des médias
- Module Form : - Module Form :
- Etiquette de séparation - Étiquette de séparation
- Checkbox retourne un astérisque plutôt que 1 - Checkbox retourne un astérisque plutôt que 1
- Thème - Menu : - Thème - Menu :
- Couleur de fond de la page sélectionnée - Couleur de fond de la page sélectionnée
@ -454,7 +462,7 @@ Corrections de bug :
- Corrections : - Corrections :
- Marge du pied de page par défaut 5px - Marge du pied de page par défaut 5px
- Installation sans site exemple : suppression des barres latérales - Installation sans site exemple : suppression des barres latérales
- Edition de page : - Édition de page :
- Affichage de l'option Fil d'ariane alors que le titre est masqué. - Affichage de l'option Fil d'ariane alors que le titre est masqué.
- Page parente, l'option "ne pas afficher les pages enfants dans le menu horizontal" est incompatible avec une page désactivée : désactivation et masquage lorsque la page est désactivée. - Page parente, l'option "ne pas afficher les pages enfants dans le menu horizontal" est incompatible avec une page désactivée : désactivation et masquage lorsque la page est désactivée.
- Mauvais encodage des titres de pages perturbant l'affichage des caractères spéciaux ( ex: apostrophes ). - Mauvais encodage des titres de pages perturbant l'affichage des caractères spéciaux ( ex: apostrophes ).
@ -484,7 +492,7 @@ Corrections de bug :
## Version 9.2.08 ## Version 9.2.08
- Correction : - Correction :
- Edition de page : bug empêchant le paramétrage d'un module après un changement de gabarit. - Édition de page : bug empêchant le paramétrage d'un module après un changement de gabarit.
- Modification : - Modification :
- Aide de l'édition des pages - Aide de l'édition des pages
@ -524,7 +532,7 @@ Corrections de bug :
## Version 9.2.01 ## Version 9.2.01
- Corrections : - Corrections :
- Sauvegarde du thème : prise en compte du fichier custom.css - Sauvegarde du thème : prise en compte du fichier custom.css
- Edition de page : libellés - Édition de page : libellés
- Thème ; footer : marges du pied de page placé hors du site - Thème ; footer : marges du pied de page placé hors du site
- Thème ; footer : aperçu du texte personnalisé - Thème ; footer : aperçu du texte personnalisé
@ -590,7 +598,7 @@ Corrections de bug :
- Réécriture activée après chaque mise à jour auto. - Réécriture activée après chaque mise à jour auto.
- Modifications : - Modifications :
- Thème 100% fluide sans marge - Thème 100% fluide sans marge
- Ecran de smartphone (ex : iPhone 6) : adaptation de la barre d'administration : le username est masqué et la taille des icônes est augmentée - Écran de smartphone (ex : iPhone 6) : adaptation de la barre d'administration : le username est masqué et la taille des icônes est augmentée
- Chemins vers les données dans des constantes - Chemins vers les données dans des constantes
- Modèles de bannières de plusieurs dimensions - Modèles de bannières de plusieurs dimensions
- Hauteur de police par défaut 13px - Hauteur de police par défaut 13px
@ -680,7 +688,7 @@ Corrections de bug :
## Version 9.0.18 ## Version 9.0.18
- Correction : - Correction :
- Etat par défaut du numéro de version mal récupéré - État par défaut du numéro de version mal récupéré
## Version 9.0.17 ## Version 9.0.17
- Mises à jour : - Mises à jour :
@ -695,7 +703,7 @@ Corrections de bug :
## Version 9.0.16 ## Version 9.0.16
- Correction : - Correction :
- Nom de page constitué de caractères filtrés empchant la création d'un Id valide. - Nom de page constitué de caractères filtrés empêchant la création d'un Id valide.
- Module Gallery : bouton de fermeture sous Edge - Module Gallery : bouton de fermeture sous Edge
## Version 9.0.15 ## Version 9.0.15
@ -720,7 +728,7 @@ Corrections de bug :
## Version 9.0.12 ## Version 9.0.12
- Corrections : - Corrections :
- Configuration de Tippy pour l'utilisation de l'argument title dans les balises a et img. Data-tippy-content reste un argument reconnu - Configuration de Tippy pour l'utilisation de l'argument title dans les balises a et img. Data-tippy-content reste un argument reconnu
- Bug de la redirection lorsqu'un dossier porte le nom d'une page, le contrôle de cohérence est déplacé dans page. - Bug de la redirection lorsque un dossier porte le nom d'une page, le contrôle de cohérence est déplacé dans page.
## Version 9.0.11 ## Version 9.0.11
- Corrections : - Corrections :
@ -770,7 +778,7 @@ Corrections de bug :
- Thème : - Thème :
- nouvelle position du menu dans le site quand la bannière est au-dessus. - nouvelle position du menu dans le site quand la bannière est au-dessus.
- Simplification et ordre des libellés position du menu par rapport à la bannière - Simplification et ordre des libellés position du menu par rapport à la bannière
- Editeur de texte, scrolle lorsque l'éditeur est ouvert, la barre d'outil se colle sous la barre d'administration. - Éditeur de texte, scrolle lorsque l'éditeur est ouvert, la barre d'outil se colle sous la barre d'administration.
- TinyMCE : - TinyMCE :
- liste des pages du site dans la fenêtre des liens - liste des pages du site dans la fenêtre des liens
- option lightbox pour l'affichage d'images ou de liens - option lightbox pour l'affichage d'images ou de liens

View File

@ -22,10 +22,10 @@ class JsonDb extends \Prowebcraft\Dot
public function __construct($config = []) public function __construct($config = [])
{ {
$this->config = array_merge([ $this->config = array_merge([
'name' => 'data.json', 'name' => 'data.json',
'backup' => 5, 'backup' => false,
'dir' => getcwd(), 'dir' => getcwd()
'template' => getcwd() . DIRECTORY_SEPARATOR . 'data.template.json' //'template' => getcwd() . DIRECTORY_SEPARATOR . 'data.template.json'
], $config); ], $config);
$this->loadData(); $this->loadData();
parent::__construct(); parent::__construct();
@ -106,10 +106,17 @@ class JsonDb extends \Prowebcraft\Dot
if (!file_exists($this->db)) { if (!file_exists($this->db)) {
return null; return null;
} else { } else {
$this->data = json_decode(file_get_contents($this->db), true); // 3 essais
for($i = 0; $i <3; $i++) {
if ($this->data = json_decode(@file_get_contents($this->db), true) ) {
break;
}
// Pause de 10 millisecondes
usleep(10000);
}
// Gestion de l'erreur
if (!$this->data === null) { if (!$this->data === null) {
throw new \InvalidArgumentException('Database file ' . $this->db exit ('JsonDB : Erreur de lecture du fichier de données ' . $this->db .'. Aucune donnée lisible, essayez dans quelques instants ou vérifiez le système de fichiers.');
. ' contains invalid json object. Please validate or remove file');
} }
} }
} }
@ -120,6 +127,25 @@ class JsonDb extends \Prowebcraft\Dot
* Saving to local database * Saving to local database
*/ */
public function save() { public function save() {
file_put_contents($this->db, json_encode($this->data, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT)); // Backup file
if ($this->config['backup']) {
copy ($this->db, $this->db . '.back');
}
if ( is_writable($this->db) ) {
// 3 essais
for($i = 0; $i < 3; $i++) {
if( @file_put_contents($this->db, json_encode($this->data, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT|LOCK_EX)) !== false) {
break;
}
// Pause de 10 millisecondes
usleep(10000);
}
if ($i === 2) {
exit ('Jsondb : Erreur d\'écriture dans le fichier de données ' . $this->db . '. Vérifiez le système de fichiers.' );
}
} else {
exit ('Jsondb : Écriture interdite dans le fichier de données ' . $this->db .'. Vérifiez les permissions.' );
}
} }
} }

View File

@ -44,7 +44,7 @@ class common {
const ACCESS_TIMER = 1800; const ACCESS_TIMER = 1800;
// Numéro de version // Numéro de version
const ZWII_VERSION = '10.4.00.010'; const ZWII_VERSION = '10.4.00.011';
const ZWII_UPDATE_CHANNEL = "v10"; const ZWII_UPDATE_CHANNEL = "v10";
public static $actions = []; public static $actions = [];
@ -202,7 +202,8 @@ class common {
// Constructeur JsonDB // Constructeur JsonDB
$this->dataFiles[$keys] = new \Prowebcraft\JsonDb([ $this->dataFiles[$keys] = new \Prowebcraft\JsonDb([
'name' => $keys . '.json', 'name' => $keys . '.json',
'dir' => $this->dataPath ($keys,self::$i18nCurrent) 'dir' => $this->dataPath ($keys,self::$i18nCurrent),
'backup' => true
]);; ]);;
} }
@ -389,32 +390,25 @@ class common {
// Aiguillage // Aiguillage
switch(count($keys)) { switch(count($keys)) {
case 1: case 1:
$db->delete($keys[0]); $db->delete($keys[0], true);
$db->save();
break; break;
case 2: case 2:
$db->delete($keys[0].'.'.$keys[1]); $db->delete($keys[0].'.'.$keys[1],true);
$db->save();
break; break;
case 3: case 3:
$db->delete($keys[0].'.'.$keys[1].'.'.$keys[2]); $db->delete($keys[0].'.'.$keys[1].'.'.$keys[2], true);
$db->save();
break; break;
case 4: case 4:
$db->delete($keys[0].'.'.$keys[1].'.'.$keys[2].'.'.$keys[3]); $db->delete($keys[0].'.'.$keys[1].'.'.$keys[2].'.'.$keys[3], true);
$db->save();
break; break;
case 5: case 5:
$db->delete($keys[0].'.'.$keys[1].'.'.$keys[2].'.'.$keys[3].'.'.$keys[4]); $db->delete($keys[0].'.'.$keys[1].'.'.$keys[2].'.'.$keys[3].'.'.$keys[4], true);
$db->save();
break; break;
case 6: case 6:
$db->delete($keys[0].'.'.$keys[1].'.'.$keys[2].'.'.$keys[3].'.'.$keys[4].'.'.$keys[5]); $db->delete($keys[0].'.'.$keys[1].'.'.$keys[2].'.'.$keys[3].'.'.$keys[4].'.'.$keys[5], true);
$db->save();
break; break;
case 7: case 7:
$db->delete($keys[0].'.'.$keys[1].'.'.$keys[2].'.'.$keys[3].'.'.$keys[4].'.'.$keys[5].'.'.$keys[6]); $db->delete($keys[0].'.'.$keys[1].'.'.$keys[2].'.'.$keys[3].'.'.$keys[4].'.'.$keys[5].'.'.$keys[6], true);
$db->save();
break; break;
} }
} }
@ -636,7 +630,8 @@ class common {
$this->setData(['theme',$tempData['theme']]); $this->setData(['theme',$tempData['theme']]);
// Import des users sauvegardés si option active // Import des users sauvegardés si option active
if ($keepUsers === false) { if ($keepUsers === false
AND $tempData['user'] !== NULL) {
$this->setData(['user',$tempData['user']]); $this->setData(['user',$tempData['user']]);
} }
@ -986,28 +981,22 @@ class common {
// Aiguillage // Aiguillage
switch(count($keys)) { switch(count($keys)) {
case 2: case 2:
$db->set($keys[0],$keys[1]); $db->set($keys[0],$keys[1], true);
$db->save();
break; break;
case 3: case 3:
$db->set($keys[0].'.'.$keys[1],$keys[2]); $db->set($keys[0].'.'.$keys[1],$keys[2], true);
$db->save();
break; break;
case 4: case 4:
$db->set($keys[0].'.'.$keys[1].'.'.$keys[2],$keys[3]); $db->set($keys[0].'.'.$keys[1].'.'.$keys[2],$keys[3], true);
$db->save();
break; break;
case 5: case 5:
$db->set($keys[0].'.'.$keys[1].'.'.$keys[2].'.'.$keys[3],$keys[4]); $db->set($keys[0].'.'.$keys[1].'.'.$keys[2].'.'.$keys[3],$keys[4], true);
$db->save();
break; break;
case 6: case 6:
$db->set($keys[0].'.'.$keys[1].'.'.$keys[2].'.'.$keys[3].'.'.$keys[4],$keys[5]); $db->set($keys[0].'.'.$keys[1].'.'.$keys[2].'.'.$keys[3].'.'.$keys[4],$keys[5], true);
$db->save();
break; break;
case 7: case 7:
$db->set($keys[0].'.'.$keys[1].'.'.$keys[2].'.'.$keys[3].'.'.$keys[4].'.'.$keys[5],$keys[6]); $db->set($keys[0].'.'.$keys[1].'.'.$keys[2].'.'.$keys[3].'.'.$keys[4].'.'.$keys[5],$keys[6], true);
$db->save();
break; break;
case 8: case 8:
$db->set($keys[0].'.'.$keys[1].'.'.$keys[2].'.'.$keys[3].'.'.$keys[4].'.'.$keys[5].'.'.$keys[6],$keys[7] ); $db->set($keys[0].'.'.$keys[1].'.'.$keys[2].'.'.$keys[3].'.'.$keys[4].'.'.$keys[5].'.'.$keys[6],$keys[7] );
@ -1962,7 +1951,8 @@ class core extends common {
} }
} }
// Accès concurrent stocke la page visitée // Accès concurrent stocke la page visitée
if ($this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')) { if ($this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
AND $this->getUser('id') ) {
$this->setData(['user',$this->getUser('id'),'accessUrl',$this->getUrl()]); $this->setData(['user',$this->getUser('id'),'accessUrl',$this->getUrl()]);
$this->setData(['user',$this->getUser('id'),'accessTimer',time()]); $this->setData(['user',$this->getUser('id'),'accessTimer',time()]);
} }
@ -2304,7 +2294,7 @@ class layout extends common {
window.dataLayer = window.dataLayer || []; window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);} function gtag(){dataLayer.push(arguments);}
gtag("js", new Date()); gtag("js", new Date());
gtag("config","'. $code .'"); gtag("config","'. $code .'",{ "anonymize_ip": true });
</script>'; </script>';
} }
} }