Commit Graph

295 Commits

Author SHA1 Message Date
Manus
feb708bb3e Checkpoint: Affichage des informations de signature dans la fenêtre d'émargement numérique :
- Ajout des champs signatureUrl, signatureS3Key et dateSigned dans getPresencesByInscription
- Affichage du nom du signataire, date/heure de validation à côté de chaque puce matin/après-midi
- Icône cliquable pour visualiser la signature en grand format
- Modale Dialog pour afficher la signature manuscrite
- Fonction getPresenceInfo pour récupérer les détails de présence
- Interface moderne avec icône de stylo SVG pour les signatures
2026-01-27 07:38:59 -05:00
Manus
5356819ceb Checkpoint: Modification du stockage des signatures d'émargement pour utiliser le système de fichiers local au lieu de S3 :
- Remplacement de storagePut par fs.writeFileSync dans routers.ts
- Structure de dossiers : uploads/signatures/[formation-id]-[sequence-id]/
- Noms de fichiers uniques avec crypto.randomBytes
- URLs publiques relatives : /uploads/signatures/[formation-id]-[sequence-id]/[fichier].png
- Correction de l'erreur "fetch failed" causée par l'inaccessibilité de forge.manus.im sur le VPS
2026-01-27 07:28:09 -05:00
Manus
1e915acd5b Checkpoint: Implémentation de la signature manuscrite tactile pour l'émargement via QR code :
- Intégration du composant SignaturePad dans EmargementScan.tsx
- Ajout des champs de signature dans la table presences (signatureUrl, signatureS3Key, dateSigned)
- Modification de la procédure presences.valider pour accepter et uploader la signature en S3
- Stockage automatique de l'URL et de la clé S3 dans la base de données
- Correction des types nullables dans exportService.ts (codeEtablissement, fonction)
- Les apprenants doivent maintenant signer avec le doigt sur l'écran avant de valider leur présence
2026-01-27 04:29:01 -05:00
Manus
b3b808145c Checkpoint: Ajout d'une confirmation visuelle améliorée après émargement réussi : animations fluides, heure d'enregistrement précise et design moderne 2026-01-25 15:20:13 -05:00
Manus
ab65ce6690 Checkpoint: Correction de l'erreur SQL lors de la validation de présence via QR code - retrait du .limit(1) qui causait un problème de paramètres avec mysqlEnum dans Drizzle ORM 2026-01-25 14:31:13 -05:00
Manus
71c790e9b4 Checkpoint: Correction du bouton œil dans la page apprenants pour les formateurs - changement de adminProcedure à protectedProcedure pour apprenants.getInscriptions 2026-01-25 12:49:08 -05:00
Manus
8efcb65f0f Rollback to 8e20ac40 2026-01-25 11:19:22 -05:00
Manus
727a29fa63 Checkpoint: Correction de l'erreur SQL MIN() vide dans la récupération de la première date des séquences - remplacé par post-traitement JavaScript 2026-01-25 11:12:50 -05:00
Manus
b32487aa4d Checkpoint: Améliorations de la gestion des attestations :
- Affichage de la date de début dans l'en-tête de chaque séquence
- Bouton d'envoi groupé par séquence
- Filtre séquences terminées/à venir
2026-01-25 09:16:22 -05:00
Manus
8e20ac40dd Checkpoint: Correction finale de l'affichage vide des apprenants dans la gestion des attestations. Problème résolu en aplatissant la structure de la requête Drizzle ORM (structure imbriquée non supportée) et en restructurant les résultats côté serveur. 2026-01-25 09:06:36 -05:00
Manus
f51e027a5c Checkpoint: Correction de l'affichage vide des apprenants dans la gestion des attestations après le regroupement par séquence. Le problème venait de la référence à un champ premiereDate inexistant. Solution: utiliser l'ID de séquence pour le tri et le regroupement. 2026-01-25 09:03:13 -05:00
Manus
77a65cbfa2 Checkpoint: Ajout du tri chronologique des séquences dans la gestion des attestations:
- Modification du backend pour inclure la première date de chaque séquence
- Tri des séquences par ordre chronologique (première date en premier)
- Les séquences sont maintenant affichées dans l'ordre temporel pour une meilleure organisation
2026-01-25 08:56:53 -05:00
Manus
63e8ea17d1 Checkpoint: Modification de l'affichage de la gestion des attestations pour regrouper les apprenants par séquence:
- Ajout d'en-têtes visuels pour chaque séquence avec nom et compteur d'apprenants
- Badge affichant le nombre d'attestations envoyées par séquence
- Amélioration de l'organisation et de la lisibilité pour les formateurs
- Suppression de la colonne "Séquence" devenue redondante
2026-01-25 08:50:50 -05:00
Manus
964b83d4d1 Checkpoint: Correction de l'accès à la liste des apprenants dans la gestion des attestations pour les formateurs:
- Remplacement de adminProcedure par protectedProcedure pour getApprenantsWithStatus
- Les formateurs peuvent maintenant voir la liste des apprenants et gérer les attestations
2026-01-25 08:40:38 -05:00
Manus
3e14adcf70 Checkpoint: Implémentation de l'émargement numérique avec deux signatures par jour (matin et après-midi):
- Ajout du champ 'periode' dans la table presences
- Modification des procédures backend pour gérer les deux périodes
- Mise à jour de l'interface EmargementScan avec choix de période
- Mise à jour de l'interface FormateurEmargement avec validation séparée matin/après-midi
- La feuille de présence PDF était déjà configurée avec deux colonnes
2026-01-25 08:26:42 -05:00
Manus
1460b41f2d Checkpoint: Colorisation des boutons d'actions de la fenêtre "Inscrits à la séquence" avec des couleurs pastel et animations au survol 2026-01-25 08:12:39 -05:00
Manus
9762cac6d3 Checkpoint: Mise à jour du tableau de bord formateur avec le même design moderne que le tableau de bord admin : cartes colorées avec dégradés, animations au survol, et redirection automatique des formateurs 2026-01-25 07:57:25 -05:00
Manus
3764fde6fe Checkpoint: Correction de la désactivation intempestive des rappels : les dates ne sont plus supprimées/recréées lors de la modification du formateur, seulement lors d'un réel changement de dates 2026-01-25 07:33:23 -05:00
Manus
54adfa346b Checkpoint: Implémentation de la synchronisation automatique entre table users (role=formateur) et table formateurs : auto-création dans createUser/updateUser + script de migration pour les formateurs existants 2026-01-25 07:25:49 -05:00
Manus
eb111099c6 Checkpoint: Masquer le menu "Gestion technique" pour les formateurs en ajoutant cette section à la liste des menus filtrés dans DashboardLayout 2026-01-25 07:11:03 -05:00
Manus
a541fd3ff1 Checkpoint: Corriger l'accès des formateurs à la liste des inscrits : remplacement de adminProcedure par protectedProcedure pour la procédure listBySequence afin que les formateurs puissent voir les inscrits dans le détail des séquences 2026-01-25 05:39:26 -05:00
Manus
60aeee71c7 Checkpoint: Autoriser les formateurs à accéder aux exports PDF/Excel et aux feuilles de présence : remplacement de adminProcedure par protectedProcedure pour les trois procédures exportExcel, exportPDF et exportFeuillePresence 2026-01-25 05:28:18 -05:00
Manus
3c6f3eb741 Checkpoint: Restreindre les droits des formateurs : masquer les boutons de création/modification/suppression des apprenants pour les formateurs (seuls les administrateurs peuvent les voir) 2026-01-23 11:49:46 -05:00
Manus
953677467a Checkpoint: Restreindre les droits des formateurs : masquer les boutons de création/modification/suppression des formations et séquences pour les formateurs (seuls les administrateurs peuvent les voir) 2026-01-23 11:42:31 -05:00
Manus
5d40b5be96 Checkpoint: Ajout validation frontend temps réel + backend pour dates séquences (date fin > date début). Indicateur visuel (bordure rouge + message erreur) dans formulaires création/édition. Validation backend dans procédures create/update. Correction structure table logsrappels. Amélioration système test rappels (badge compteur, désactivation visuelle, boîte dialogue avec email + progression). 2026-01-23 10:09:17 -05:00
Manus
95245b38e8 Checkpoint: Ajout d'une validation backend dans les procédures create et update des séquences pour garantir que la date de fin soit toujours après la date de début pour toutes les dates de formation. Cela empêche la création de fichiers ICS invalides. 2026-01-23 08:57:41 -05:00
Manus
71678af959 Checkpoint: Amélioration visuelle du bouton de test de rappels
- Ajout d'un badge de compteur indiquant le nombre de rappels actifs (ex: "1")
- Désactivation visuelle du bouton pour les séquences sans rappels actifs (icône grisée)
- Tooltip informatif adapté selon le contexte (nombre de rappels ou message d'erreur)
- Amélioration de l'expérience utilisateur avec feedback visuel clair
2026-01-22 10:32:58 -05:00
Manus
a20ad09d7c Checkpoint: Correction de l'erreur "Aucun rappel actif configuré pour cette séquence"
- Retrait de la validation frontend complexe qui ne fonctionnait pas correctement
- Le backend gère maintenant l'erreur et affiche un message clair via toast
- L'utilisateur reçoit un message d'erreur explicite au lieu d'une erreur technique
- Amélioration de l'expérience utilisateur lors du test de rappels
2026-01-22 10:22:31 -05:00
Manus
2a1f739901 Checkpoint: Amélioration de l'indicateur de progression du test de rappels
- Indicateur visuel moderne avec animation (spinner + effet ping)
- Message "Envoi en cours..." pendant le traitement
- Toast final affichant le nombre exact d'emails envoyés
- Approche simple et efficace sans complexité de streaming temps réel
2026-01-22 09:34:32 -05:00
Manus
e3dffb85f4 Checkpoint: Amélioration du test de rappels avec envoi multiple et indicateur de progression
- Modification du backend pour envoyer un email par inscrit confirmé (tous à l'adresse de test)
- Ajout d'un indicateur de progression moderne avec animation (spinner + effet ping)
- Message de succès affichant le nombre d'emails envoyés
- Validation avec séquence "test 3" : 3 emails envoyés correctement (4ème inscrit sans email ignoré)
- Synchronisation complète de la structure de la table logsrappels avec le VPS
2026-01-22 08:50:00 -05:00
Manus
94fed67d19 Checkpoint: Modification de la boîte de dialogue de test de rappels
- Ajout d'un champ de saisie pour l'email du destinataire
- Modification du texte : "Tous les rappels configurés pour cette séquence seront envoyés à l'adresse email que vous indiquez ci-dessous"
- Validation de l'email avant envoi
- Backend modifié pour envoyer à l'email saisi au lieu de tous les inscrits
- Les logs enregistrent correctement l'email de test utilisé
2026-01-22 08:33:07 -05:00
Manus
58cbc2d85c Checkpoint: Ajout d'une boîte de dialogue de confirmation avant l'envoi de test des rappels
 Correction de la structure de la table logsrappels pour correspondre au VPS
- Modification de la colonne statut: ENUM('succes','echec') au lieu de ENUM('success','failed')
- Modification de la colonne typeEnvoi: ENUM('automatique','test')
- Suppression des colonnes en trop (emailDestinataire, typeRappel, dateSequence, createdAt)
 Les logs de rappels s'enregistrent maintenant correctement dans la base de données
2026-01-22 08:16:00 -05:00
Manus
87c53ba75a Checkpoint: Ajout d'un badge orange pâle (bg-orange-50, text-orange-700, border-orange-200) pour la colonne Type dans l'historique des rappels pour améliorer la lisibilité et la cohérence visuelle 2026-01-21 13:25:41 -05:00
Manus
c18425ea42 Checkpoint: Harmonisation des boutons d'action (Prévisualiser, Envoyer, Charger) en bleu, ajout d'un indicateur de progression pour l'upload des PDF, et correction de l'erreur logsRappels (colonne type déjà présente) 2026-01-21 13:14:47 -05:00
Manus
be0b12f6c2 Checkpoint: Modification du bouton "Charger" dans la page de gestion des attestations pour le mettre en bleu vif (bg-blue-600 hover:bg-blue-700) avec texte blanc. Le bouton est maintenant plus visible et attrayant. Déployé sur le serveur de production. 2026-01-21 13:05:08 -05:00
Manus
dc78f234f9 Checkpoint: Ajout de badges colorés orange avec icônes calendrier pour chaque date dans l'affichage des rappels automatiques. Format complet : Badge Formation (bleu) › Badge Séquence (vert) : Badge Date 1 (orange), Badge Date 2 (orange), etc. Affichage très visuel et attrayant. Déployé sur le serveur de production. 2026-01-21 12:59:07 -05:00
Manus
61418f619e Checkpoint: Amélioration visuelle de l'affichage des rappels automatiques : ajout de badges colorés avec icônes (🎓 bleu pour formation, 📅 vert pour séquence) tout en conservant le format compact sur une seule ligne. Format : Badge Formation › Badge Séquence : Date1, Date2. Déployé sur le serveur de production. 2026-01-21 12:54:17 -05:00
Manus
72c7f077ae Checkpoint: Modification de l'affichage de la fenêtre des rappels automatiques : regroupement des informations de formation/séquence/dates sur une seule ligne au lieu de plusieurs badges, et resserrement des colonnes du tableau pour une meilleure lisibilité. Format compact : "Formation › Séquence : Date1, Date2". Déployé sur le serveur de production. 2026-01-21 12:37:01 -05:00
Manus
8722cd57aa Checkpoint: Harmonisation de la charte graphique : remplacement des classes Tailwind arbitraires par la classe CSS .page-title pour les titres des pages AdminNotifications et AdminFormateurs. Déploiement réussi sur le serveur de production avec couleur #60a5fa et drop-shadow. 2026-01-21 11:27:29 -05:00
Manus
0c8c4654ee Checkpoint: Harmonisation des titres de pages avec le style CSS bleu clair et ombre portée :
**Pages modifiées :**

1. **Tableau de bord des Notifications** (`client/src/pages/admin/AdminNotifications.tsx`)
   - Ajout du style `text-[#60a5fa] drop-shadow-md` au titre h1
   - Le titre est maintenant en bleu clair (#60a5fa) avec une ombre portée

2. **Gestion des Formateurs** (`client/src/pages/admin/AdminFormateurs.tsx`)
   - Ajout du style `text-[#60a5fa] drop-shadow-md` au titre h1
   - Le titre est maintenant en bleu clair (#60a5fa) avec une ombre portée

**Résultat :**
 Les titres des deux pages sont maintenant harmonisés avec le reste de l'application
 Le style CSS est cohérent avec les autres pages (Analytics, Rapport Public Cible, etc.)
 L'interface utilisateur est plus moderne et visuellement cohérente
2026-01-20 12:14:13 -05:00
Manus
99c0ee6bae Checkpoint: Correction de l'erreur "Cannot convert undefined or null to object" sur la page /admin/notifications :
**Problème identifié :**
- Incohérence entre le schéma Drizzle (`drizzle/schema.ts`) et le code (`notificationLogsDb.ts`)
- Le schéma utilisait des noms de colonnes et des types d'enum différents de ceux utilisés dans le code
- Cela causait l'erreur "Cannot convert undefined or null to object" lors de la récupération des données

**Corrections appliquées :**

1. **Mise à jour du schéma Drizzle (drizzle/schema.ts) :**
   - Renommé `destinataire` en `emailDestinataire` pour correspondre au code
   - Ajouté la colonne `sujet` (VARCHAR 500)
   - Ajouté la colonne `formateurId` (INT NULL)
   - Ajouté la colonne `metadata` (TEXT NULL)
   - Mis à jour l'enum `type` avec les bonnes valeurs : `remerciement`, `notification_formateur_inscription`, `notification_formateur_annulation`, `alerte_capacite`, `notification_liste_attente`
   - Mis à jour l'enum `statut` avec les bonnes valeurs : `success`, `failed`

2. **Amélioration de la gestion des valeurs null (notificationLogsDb.ts) :**
   - Ajout de vérifications null-safe dans `getNotificationStats()` pour éviter les erreurs lors du calcul du taux de succès
   - Ajout de valeurs par défaut pour `parType` et `evolutionParJour` (tableaux vides si undefined)
   - Ajout d'un mapping des logs pour s'assurer que tous les champs sont bien définis (null au lieu d'undefined)

**Tests réussis :**
-  Onglet "Statistiques" : affiche correctement 24 envois, 100% de succès, répartition par type et évolution par jour
-  Onglet "Historique" : affiche correctement les 24 notifications avec toutes les colonnes (Date, Type, Destinataire, Sujet, Formation/Séquence, Statut)
-  Pagination fonctionnelle (Page 1 sur 2)
-  Filtres disponibles (Type, Statut, Email, Date début, Date fin)

**Résultat :**
 L'erreur "Cannot convert undefined or null to object" est complètement résolue
 La page notifications fonctionne correctement avec toutes ses fonctionnalités
2026-01-20 12:07:33 -05:00
Manus
1c15df377d Checkpoint: Correction des erreurs Fail2Ban et SQL DATE_FORMAT :
**1. Correction erreur Fail2Ban (fail2banDb.ts) :**
- Ajout de vérifications pour détecter si Fail2Ban est installé (commande `which fail2ban-client`)
- Retour de valeurs par défaut (0, tableaux vides) au lieu de throw d'erreur dans l'environnement sandbox
- Corrections appliquées aux 3 fonctions : getFail2BanStatus(), getBanHistory(), countRecentBans()
- La page /admin/fail2ban s'affiche maintenant correctement sans erreur dans la sandbox

**2. Correction erreur SQL DATE_FORMAT (analyticsDb.ts) :**
- Ajout d'un filtre `IS NOT NULL` sur la colonne dateInscription dans getInscriptionsByMonth()
- Exclusion des inscriptions avec dateInscription NULL qui causaient des erreurs SQL
- Le graphique "Évolution des inscriptions par mois" affiche maintenant "Aucune donnée disponible" au lieu d'une erreur

**Tests réussis :**
-  Page Fail2Ban : affiche correctement les statistiques à 0 et les messages appropriés
-  Tableau de bord analytique : tous les graphiques fonctionnent sans erreur SQL
-  Les autres pages (rapport-public-cible, suivi questionnaires) continuent de fonctionner correctement

**Résultat :**
 Toutes les erreurs signalées sont corrigées
 L'application fonctionne correctement dans l'environnement sandbox
 Sur le VPS de production, Fail2Ban affichera les vraies valeurs
2026-01-20 11:52:47 -05:00
Manus
fc4df8ed36 Checkpoint: Correction des erreurs sur la page rapport-public-cible et harmonisation de la charte graphique des titres :
**Corrections d'erreurs :**

1. **Erreurs SQL DATE_FORMAT corrigées** (analyticsDb.ts) :
   - Remplacement des sous-requêtes corrélées par des JOIN dans getTauxRemplissageByMonth()
   - Utilisation de COUNT(CASE WHEN...) au lieu de SUM(SELECT COUNT(*))
   - Ajout de leftJoin pour éviter les erreurs de sous-requêtes

2. **Erreur React "Cannot read properties of null" corrigée** (AdminRapportPublicCible.tsx) :
   - Ajout de l'opérateur null-safe `?.` pour accéder à `insc.apprenant?.fonction`
   - Vérification explicite si la fonction est null/undefined
   - Gestion du cas "public cible = tous" qui correspond toujours

3. **Tests réussis** :
   - Page rapport-public-cible : affiche correctement les statistiques et recommandations
   - Tableau de bord analytique : graphiques et statistiques fonctionnels
   - Page suivi questionnaires : affiche correctement les données

**Harmonisation charte graphique :**

- Application du style bleu clair (#6B9FE8) avec ombre portée à tous les titres des 32 pages
- Création de la classe CSS `.page-title` réutilisable dans index.css
- Cohérence visuelle sur toute l'application

**Résultat :**
 Toutes les erreurs SQL et React sont corrigées
 Les pages fonctionnent correctement sans erreur
 Charte graphique harmonisée sur toutes les pages
2026-01-20 11:46:56 -05:00
Manus
68e2cc64ef Checkpoint: Menu latéral et tableau de bord harmonisés avec palette pastel + corrections bugs (émargement formateur, suivi questionnaires frontend, erreurs SQL suivi questionnaires backend) 2026-01-20 08:52:56 -05:00
Manus
6bd47f7577 Checkpoint: Menu latéral et tableau de bord harmonisés avec palette pastel + correction bugs "Cannot convert undefined or null to object" sur pages émargement formateur et suivi questionnaires 2026-01-20 08:43:38 -05:00
Manus
a7a5ebdfe8 Checkpoint: Menu latéral moderne avec couleurs pastel (version douce et élégante) + correction du bug 'Cannot convert undefined or null to object' sur la page émargement formateur 2026-01-20 08:31:21 -05:00
Manus
b7b2134289 Checkpoint: Refonte complète de l'ergonomie du tableau de bord avec design moderne, animations et couleurs vives.
**Améliorations visuelles :**

1. **Icônes modernes et colorées** :
   - Icônes plus grandes (6x6) avec fond gradient coloré
   - Effet de rotation au survol des icônes (rotate-12)
   - 4 palettes de couleurs distinctes : bleu (formations), vert (séquences ouvertes), violet (apprenants), orange (séquences terminées)

2. **Liserés et bordures colorés** :
   - Bordure gauche épaisse (4px) sur chaque carte de statistique
   - Bordures colorées (2px) sur les cartes de graphiques
   - Fond légèrement teinté coordonné aux couleurs (bg-blue-50/50, bg-green-50/50, etc.)

3. **Palette de couleurs enrichie** :
   - Titre principal avec gradient bleu-violet (bg-gradient-to-r from-blue-600 to-purple-600)
   - Valeurs des statistiques avec gradients colorés
   - En-têtes de graphiques avec fond gradient subtil (from-blue-50 to-purple-50)

4. **Animations fluides** :
   - Fade-in au chargement de la page (animate-in fade-in duration-500)
   - Slide-in séquentiel des cartes avec délai progressif (100ms entre chaque carte)
   - Effet hover : scale-105 + translate-y-1 + shadow-xl
   - Effet de brillance au survol des cartes (gradient animé)
   - Zoom léger des graphiques au survol (scale-105)
   - Animation des graphiques recharts (800ms)

5. **Détails supplémentaires** :
   - Badge "Données en temps réel" avec icône TrendingUp en haut à droite
   - Indicateur "Actif" avec flèche verte sur chaque carte
   - Ombres portées dynamiques au survol (hover:shadow-xl)
   - Titres avec text-xl et font-bold pour plus d'impact

**Résultat :**
 Interface moderne et dynamique
 Expérience utilisateur améliorée avec animations fluides
 Meilleure hiérarchie visuelle grâce aux couleurs et liserés
 Design professionnel et engageant
 Testé et validé sur la sandbox
2026-01-20 07:01:11 -05:00
Manus
21ed7f7355 Checkpoint: Renommage du bouton "Ajouter un inscrit" et application de l'alternance de couleurs blanc/bleu clair sur tous les tableaux.
**Modifications apportées :**

1. **Renommage du bouton d'ajout d'apprenant** :
   - Bouton renommé de "Ajouter un inscrit" à "Ajouter un apprenant"
   - Titre de la boîte de dialogue mis à jour
   - Description améliorée : "Sélectionnez un apprenant dans la liste ci-dessous pour l'inscrire à cette séquence. La liste affichée correspond à l'ensemble des apprenants enregistrés dans le système."

2. **Alternance de couleurs blanc/bleu clair (bg-blue-50/70)** appliquée sur tous les tableaux :
   - Liste des formations (AdminFormations.tsx)
   - Liste des séquences (AdminSequences.tsx)
   - Liste des apprenants (AdminApprenants.tsx)
   - Liste des inscrits dans la fenêtre de gestion des attestations (AdminGestionAttestations.tsx)
   - Liste des utilisateurs (AdminUsers.tsx)
   - Liste des formateurs (AdminFormateurs.tsx)

**Résultat :**
 Meilleure cohérence terminologique dans l'interface
 Amélioration significative de la lisibilité de tous les tableaux grâce à l'alternance de couleurs
 Expérience utilisateur plus fluide et professionnelle
 Déployé et testé avec succès sur le VPS de production (https://formations.itinova.org)
2026-01-20 05:08:27 -05:00
Manus
dc28caa3fd Checkpoint: Restauration des boutons d'ajout de balises dans la gestion des templates d'emails.
**Problème identifié :**
Les boutons d'ajout de balises (variables dynamiques) avaient été supprimés lors d'une modification précédente du fichier AdminEmailTemplates.tsx.

**Correction apportée :**
- Restauration de 10 boutons de variables dynamiques : {{nom}}, {{prenom}}, {{nomFormation}}, {{nomSequence}}, {{dateDebut}}, {{dateFin}}, {{lieu}}, {{formateur}}, {{datesHTML}}, {{lienReinitialisation}}
- Les boutons sont placés au-dessus de l'éditeur TipTap pour faciliter l'insertion rapide de variables
- Chaque bouton insère la balise correspondante à la position du curseur dans l'éditeur
- Message d'aide mis à jour pour encourager l'utilisation des boutons

**Résultat :**
 Les boutons sont de nouveau visibles et fonctionnels dans l'interface
 Déployé et testé avec succès sur le VPS de production (https://formations.itinova.org)
 L'expérience utilisateur est améliorée pour la création et modification des templates d'emails
2026-01-19 12:15:29 -05:00
Manus
b925117d76 Checkpoint: Correction complète de l'erreur de validation lors de la modification des templates "Rappel 1" et "Rappel 2". Tous les enums ont été mis à jour (rappel → rappel1, rappelJ1 → rappel2) dans AdminEmailTemplates.tsx (types ET liste déroulante templateTypes). Ajout de la fonctionnalité d'ajout manuel d'apprenant dans la fenêtre des inscrits. Amélioration visuelle avec alternance de couleurs bleues sur le tableau des rappels et icônes colorées pour les pièces jointes. 2026-01-19 11:45:41 -05:00