# Notes de mises à jour


## Version 3.7.00
### 🚀 Améliorations
- Nouvelle fonction de gestion de la structure des pages du site.
- Lors de l'installation d'une mise à jour automatique, les fichiers et les dossiers inutiles dans le dossier core sont effacés.

### 🛠️ Corrections
- Version PHP minimale requise portée à 7.3 (nécessaire pour `setcookie()` avec tableau d'options).
- Corrige le bug de `PharData::decompress()` dont la valeur de retour était ignorée, entraînant une extraction depuis l'archive `.gz` au lieu du `.tar`.
- Corrige le non-rétablissement du mode maintenance en cas d'erreur lors de l'installation (étape 3).
- Supprime des avertissements lors de la lecture des ficiers CSV.

## Version 3.6.01
### 🛠️ Corrections
- Corrige un problème empêchant l'écriture de la nouvelle feuille de style du thème.
- Corrige le positionnement des boutons sur les tablettes (tailles comprises entre 768 et 1097 pixels)
- Déplace le bouton Editer dans la gestion des espaces, à droite de la barre de boutons et avec une couleur verte.
- Mise à jour de : 
    - Jquery 3.6.0 → 3.7.1
    - Datatables 	2.2.2	vers 2.3.7
      - Buttons / Colvis / HTML5 / Print	3.2.2 →	3.2.6
      - DateTime	1.5.5 →	1.6.3
      - Responsive	3.0.4 →	3.0.8
    - Plotly 3.1.0 → 3.4.0
    - Tippy 3.3.0 → 6.3.7
    - Phpmailer sans changement de numéro de version.


## Version 3.6.00
**Compatible jusque php 8.4**
### 🚀 Améliorations 
- Ajoute un tableau de bord à la configuration du site.

## Version 3.5.00
### 🚀 Améliorations du noyau
- Namespaces PSR-4 :
  - Namespace `Zwii\Campus` pour toutes les classes core
  - Classes renommées en PascalCase (Asset, Helper, Template, Layout)
  - Compatibilité ascendante avec les anciens noms (helper::, template::, etc.)
  -  Factorisation des méthodes de core en traits.
- Optimisation du routeur, supprimer les appels redondants et les boucles inutiles.
### 🚀 Autres méliorations
- Ajoute une fonctionnalité de compression d'image dans le gestionnaire de fichiers, créé par https://github.com/artweavedigital/filemanager 
- Persistance des sélecteurs de participants (cases à cocher) lors de l'application d'un filtre (vues des isncriptions à un espace, dans les groupes et les tags).
- Amélioration du comportement des boutons Tout Sélectionner et Tout désélectionner dans les listes de participants. Les boutons agissent sur la totalité de la liste et non sur le filtrage du sélecteur de noms.
- La barre d'administration escamotable reste fixe lorsque la pointeur de la souris la survole.
- Petits écrans (smartphone) : 
  - Positionnement du titre du site dans l'image du header.
  - Barre d'administration qui ne masque plus l'image dans le header.

## Version 3.4.00
### 🚀 Améliorations
- Autoloader unifié moderne :
  - 1 seul fichier : core/class/autoloader.php
  - 6 classes essentielles au lieu de 13
  - Cache intégré anti-doublons
  - 69% de réduction des fichiers au démarrage
- Réorganisation structurelle du script router.class.php, les méthodes liées à la création des feuilles de style depuis le fichier json sont incluses dans une classe dédiée.

## Version 3.3.11
### 🛠️ Corrections
- **Corrige la disparition des titres des vues de gestion du LMS** 

## Version 3.3.10
### 🚀 Améliorations
- Méthode SMTP améliorée tenant compte du sender spécifié dans la configuration.
- **TinyMCE** : Synchronisation automatique des tailles de police avec le thème (lecture CSS, génération proportionnelle, tri alphabétique des polices).

### 🛠️ Corrections
- Corrige l'envoi d'email avec la méthode SMTP.

## Version 3.3.09
### 🚀 Améliorations
- Module Download en verison 5.6, envoi d'un email lors du dépôt d'un commentaire.
- Fonction testmail avec une adresse d'envoi non générique. 
- Méthode SMTP améliorée tenant compte du sender spécifié dans la configuration.

## Version 3.3.08
### 🚀 Améliorations
- Nouvelle méthode d'envoi d'email (sendmail)
- Augmente les hauteurs de police dans le thème. 
- Le module de recherche exclut les articles de blog et de news des pages dont la permission n'autorise pas l'accès.
 Compatibilité des boutons de retour des éditeurs jsEditor et cssEditor lors de l'appel depuis un module (ex: calendrier).
- Mise à jour des fichiers de documentation.
- Retrocompatibilité php 7.2 de la fonction sendMail.
### 🛠️ Corrections
- Corrige le changement de casse sur les inputs en mode Title lorsque la chaîne contient un caractère accentué.
- Hauteur de police définie dans le thème non appliquée. **Le thème doit être modifié pour que le correctif soit pris en compte.**

## Version 3.3.07
### 🚀 Améliorations
- Intéresse les développeurs : les méthodes input du template text et mail accueille un nouveau champ case qui peut prendre les valeurs suivantes ower|upper|sentence|title pour normaliser la saisie (optionnel).
- Simplication de la méthode sendmail, écriture des erreurs d'envoi dans le journal pour débogage.
- Fournit la version 3.4 du module suscribe.

## Version 3.3.06
### 🚀 Améliorations
- Le double tap sur une entrée de menu contenant des sous-pages ouvre la page correspondante dans le menu déplié des smartphones et des tablettes.
- TinyMCE applique désormais la police du thème et expose toutes les fontes installées dans la liste des polices de l'éditeur.
- Ajoute un guide complet sur JsonDb : méthodes clés, procédures lecture/écriture et bonnes pratiques.
- Amélioration de la gestion de l'expéditeur d'e-mail : alignement sur le compte SMTP authentifié pour éviter les rejets.
- Le module Galerie passe en version 6.0, le temps de chargement est optimisé.

### 🛠️ Corrections
- Evite les fuites de cache entre sous-domaines d'un même domaine.
- Supprime la substitution des fontes Google vers CdnFont devenue inutile et pouvant occasionner des erreurs avec le nouveau système de base de données.
- L'accès des bases depuis les méthodes file_get_contents et file_put_contents n'est maintenant plus prise en charge. Désormais, on utilise des méthodes intégrées qui permettent d'accèder aux données en tenant compte de la configuration des bases de données. Ces méthodes sont accessibles via l'objet JsonDb, et sont utilisées pour lire des bases non chargées dans le contexte par exemple, de la mise à jour d'une base de données :
  - Lecture des données harmonisée via fetchDataFile (pages, locales) pour respecter la configuration JsonDb et limiter les accès directs.
  - Refactor de la gestion des fichiers de données : ensureDataFileLoaded remplace loadDataFile et ajout de fetchDataFile pour des lectures ciblées sans cache partagé.

## Version 3.3.05
### 🚀 Améliorations
- Optimisation du module de recherche (search version 4.0) ; vérification des droits sur les sous-pages avec leur propre rôle et blocage, et prise en charge des correspondances en début de contenu.

### 🛠️ Corrections
- Corrige une erreur d'écriture des données d'identité d'un site localisé dans une langue étrangère.

## Version 3.3.04
### 🚀 Améliorations
- Après le changement des paramètres d'une base de données (minification, compression et cryptage), les modifications sont appliquées et visibles immédiatement.

### 🛠️ Corrections
- Corrige un problème empêchant la sélection du survol du sous-menu quand le menu est hors du site (en haut de la page).

## Version 3.3.03

### 🛠️ Corrections
- Corrige la mauvaise affichage du menu de navigation en mode mobile.
- Suscribe 3.01 :
  - corrige l'absence de l'envoi du mail de confirmation de validation par un administrateur.
  - Désactivation de l'option d'utilisation automatique de l'email comme identifiant.

### 🚀 Améliorations
- Nouvelles icônes favico.ico et favicoDark.ico

## Version 3.3.02

### 🛠️ Corrections
#### ⛽️ Gestion des plugins 
- Corrige le chargement des plugins depuis le store en ligne. 
- Corrige la méthode de récupération des données de pages dans la gestion des extensions pour la rendre compatible avec le cryptage des bases.

## Version 3.3.01

### 🛠️ Corrections

- **Déconnexion intempestive** : Corrige la déconnexion automatique causée par des liens vers des ressources inexistantes (images, CSS, JS, etc.)
  - Les ressources statiques 404 retournent maintenant une erreur Apache directe sans passer par le routeur PHP
- **Suppression d'utilisateurs** : Corrige le bouton de suppression qui ne fonctionnait pas dans la liste des utilisateurs
  - Gestion correcte de la confirmation de suppression avec DataTables via drawCallback


## Version 3.3.00

### 🚀 Améliorations
- **Navigation hiérarchique** : Support des sous-menus jusqu'à 4 niveaux de profondeur pour une organisation plus flexible du contenu
  - Icônes de sous-menus optimisées : flèche vers la droite (►) au lieu de vers le bas (▼) pour les niveaux 2+
  - Affichage hiérarchique amélioré dans le sélecteur de pages : espaces d'indentation + caractère coin (└) au lieu de tirets
  - Largeur du sélecteur de pages augmentée à 220px pour une meilleure lisibilité
- **Responsive design optimisé** :
  - Simplification des breakpoints : 3 breakpoints standards au lieu de 7+ fragmentés
    - Mobile : ≤767px
    - Tablette : 768px - 1097px  
    - Desktop : ≥1098px
  - Barre d'administration adaptative : mode fixe automatique sur mobile/tactile (pas de souris pour déclencher l'escamotable)
  - Gestion du changement d'orientation d'écran (portrait/paysage) avec réinitialisation automatique
  - Bannière header visible sur tous les écrans (suppression de la règle de masquage mobile)
- **CSS optimisé** :
  - Factorisation des propriétés CSS communes pour les sous-menus (réduction de la taille du fichier généré)
  - Media queries consolidées et cohérentes
- **Module d'auto inscription (suscribe) passe en version 3.00**
  - Ajout d'une documentation.
  - Option autorisant d'utiliser le champ email comme identifiant. Adaptation du layout en conséquence (3 champs au lieu de 4 champs).
  - Ajout de l'option inputRowContainer3 pour l'affichage de 3 éléments par ligne.
  - Adaptation dynamique des options de disposition selon le nombre de champs (JavaScript).
  - Ajout d'une option de marge à gauche du formulaire (offset de 0 à 4 colonnes).
  - Ajout d'une option de largeur du formulaire (de 4 à 12 colonnes).
  - Contrôle automatique de la largeur maximale selon la marge (total ≤ 12 colonnes).
  - Alignement vertical en bas des champs du formulaire pour une meilleure cohérence visuelle.


### 🛠️ Corrections
- **Restauration de mot de passe** : Corrige un problème de compatibilité avec certains webmails lors de la réinitialisation du mot de passe
- **Validation des dates** : Ajout d'une validation robuste du format de date dans le filtre FILTER_DATETIME
  - Correction automatique des années avec plus de 4 chiffres (ex: 20026 → 2026)
  - Validation du format ISO 8601 (YYYY-MM-DDTHH:MM)
  - Gestion des exceptions pour éviter les erreurs fatales lors du parsing de dates invalides
  - Retour cohérent (null) en cas de format invalide
- **Barre d'administration** : Correction du positionnement à 768px (padding-top appliqué correctement dans tous les breakpoints)

## Version 3.02.01

### 🛠️ Corrections 

- **Gestion des modules améliorée** : Corrige le téléchargement depuis le store (URL, validation ZIP, nettoyage temporaire, messages d'erreur détaillés)

## Version 3.02.00

### 🚀 Améliorations
- **Activation du cache APCu** : Implémentation complète du cache système avec APCu pour optimiser les performances
  - Cache transparent en lecture dans getData() 
  - Buffer d'écriture pour les opérations batch
  - Invalidation intelligente du cache par module
  - Métriques de performance intégrées
  - Support OPcache pour les scripts PHP
  - Gestion automatique du TTL (config: 1h, data: 5min, metadata: 1min, bulk: 10min)

- **Suppression de méthodes orphelines** : Nettoyage du code core en supprimant 8 méthodes JsonDB non utilisées
  - configureJsonDb(), getJsonDbConfig(), enableJsonDbCompression(), enableJsonDbEncryption()
  - configureDataFile(), configureDataFilesGroup(), setDataFileCompression(), loadAllDataFiles()

- **Refactoring configuration JsonDB** : Centralisation de la configuration par défaut en constante
  - Ajout de JSONDB_DEFAULT_CONFIG avec minification, compression, encryption et encryptionKey
  - Remplacement des doublons dans initDB() et getDataFileConfig()
  - Amélioration de la maintenabilité et réduction de la redondance

- **Optimisation JsonDb.class.php** : Amélioration de la classe de base de données
  - Cache APCu intégré avec validation de cohérence (mtime)
  - Sauvegarde atomique sécurisée contre les corruptions
  - Gestion avancée de la compression et du chiffrement
  - Support des écritures batch avec setAutoSave()
  - Invalidation automatique du cache lors des modifications


## Version 3.0.00

### 🚀 Améliorations

- Optimisation Batch Save : Ajout de setAutoSave(false) pour permettre les modifications de masse sans écrire sur le disque à chaque fois.

- Optimisation Clés de Cache : Génération de clés plus rapide (évite le hachage MD5 inutile sur les clés simples).

- Optimisation Sécurité : Suppression du correctif "hacky" sur les doubles guillemets qui pouvait corrompre les données.

- Suppression des options de cache interne en lecture.

## Version 3.00.02

### 🚀 Amélioration

- Largeur de l'écran par défaut, site et administration 1400px. 

### 🛠️ Corrections 

- Corrige une erreur de duplication de page contenant un module.
- Corrige une erreur de déchiffrement des données.


## Version 3.00.01

### 🚀 Améliorations

- Désactivation des caches par défaut
- Application des stratégies sur les bases lors de l'installation.
- Uniformisation des options de longueurs dans les tables Datatables.

### 🛠️ Corrections 

- Corrige un problème de décompte des utilisateurs inscrits dans un groupe.
- Corrige un bug générant un profil à 0 pour des rôles 1 ou 2.
- Empêche l'enregistrement des données de participation alors que le télémétrie n'est pas active.
- Corrige la lecture des pages dans les statistiques des espaces lorsque le fichier crypté ou compressé.
- Désactive l'icône de participation de taux à l'espace lorsque la télémétrie est désactivée.


## Version 3.00.00

### 🚀 Base de données JsonDB améliorée

- **Minification JSON** : Nouvelle fonctionnalité réduisant la taille des fichiers de 20-40% en supprimant les espaces inutiles
- **Cache intelligent avec tags** : Système de cache performant avec invalidation sélective, 3-5x plus rapide pour les lectures fréquentes
- **Compression gzip** : Réduction de 50-70% de l'espace disque avec compression automatique des données
- **Chiffrement AES-256-CBC** : Protection des données sensibles avec chiffrement optionnel
- **Configuration par base** : Interface d'administration pour configurer individuellement chaque base de données (cache, compression, chiffrement, minification)
- **Protection des bases critiques** : config.json et core.json limitées à la minification uniquement pour des raisons de sécurité
- **Interface utilisateur** : Nouvelle section "Configuration > Bases de données" avec affichage par carte (3 par ligne) et tri alphabétique
- **Sauvegardes améliorées** : Gestion automatique des versions et détection des corruptions
- **Documentation complète** : Livraison d'une documentation détaillée (JsonDb_Complete_Documentation.md et ZwiiCampus_JsonDb_Integration.md)

### 🛠️ Améliorations du système

- **Méthode de rotation des journaux améliorée** : Gestion optimisée des logs avec rotation automatique
- **Optimisation du routeur** : Réorganisation du code pour de meilleures performances
- **Génération des feuilles de style** : Optimisation du processus de compilation CSS
- **Amélioration de l'animation de la barre d'administration** : Transitions plus fluides et modernes
- **Configuration du mailer par défaut** : Mise en place automatique si SMTP n'est pas activé

### 🎨 Interface utilisateur

- **Configuration des bases de données** : Nouvelle interface responsive avec cartes modernes
- **Tri alphabétique** : Bases de données ordonnées automatiquement
- **Options groupées** : Minification + compression, cache + TTL, chiffrement + clé sur les mêmes lignes
- **Protection visuelle** : Options désactivées grises pour les bases critiques
- **Disposition optimisée** : 3 cartes par ligne avec mise en page responsive

### 🔧 Corrections et optimisations

- **Configuration par défaut** : Valeurs optimisées dans defaultdata.php pour chaque type de base
- **Compatibilité 100%** : Tous les modules existants fonctionnent sans modification
- **Migration automatique** : Processus transparent de mise à jour des configurations
- **Corrige un problème** de décompte des utilisateurs inscrits dans un groupe.
- **Corrige un bug** générant un profil à 0 pour des rôles 1 ou 2.

### 📄 Documentation

- **JsonDb_Complete_Documentation.md** : Documentation technique complète avec exemples
- **ZwiiCampus_JsonDb_Integration.md** : Guide d'intégration spécifique à ZwiiCampus
- **Exemples pratiques** : Code prêt à l'emploi pour toutes les fonctionnalités
- **Benchmarks** : Mesures de performance et bénéfices attendus

### 📜 Licence

- **Changement de licence CC vers GPL 3** : ZwiiCampus passe de Creative Commons à GNU General Public License version 3
  - **Liberté d'utilisation** : Usage commercial, personnel, éducatif autorisé
  - **Modification autorisée** : Toute personne peut modifier le logiciel
  - **Distribution autorisée** : Redistribution possible sous mêmes conditions
  - **Copyleft** : Les œuvres dérivées doivent être sous la même licence
  - **Protection des auteurs** : Attribution requise et préservation du copyright
  - **Garantie légale** : Aucune garantie n'est fournie par la licence

### 📊 Bénéfices

- **Performance** : Démarrage 20-30% plus rapide, administration 40-50% plus réactive
- **Espace disque** : Réduction de 50-70% avec compression, 20-40% avec minification
- **Sécurité** : Chiffrement optionnel et protection des bases critiques
- **Fiabilité** : Détection automatique des corruptions et sauvegardes améliorées
- **Évolutivité** : Cache configurable et optimisation par type de données