← Retour

🥋 Changelog — Nakama

Historique des évolutions de l'application
Version 1.6
en cours

🎙️ Annonces

  • Modifié : les poules pas encore récompensées sont désormais triées par ancienneté de validation (la plus ancienne en premier) plutôt que par ordre alphabétique de catégorie, pour qu'une poule tout juste validée ne double jamais une plus ancienne encore en attente.

🏛️ Clubs — simplification & correctif email

  • Bug corrigé : la fiche club promettait un repli mailto: si l'envoi direct n'est pas configuré, mais ce repli n'existait pas réellement — le bouton échouait silencieusement sans jamais ouvrir de logiciel de messagerie. Corrigé.
  • Simplifié : dans l'onglet Clubs de l'admin, chaque club est désormais un simple lien direct vers sa fiche — plus d'édition en ligne, plus de boutons individuels dans la liste.
  • Enrichi : club.php gagne le renommage, le statut "Invitation envoyée", l'impression de l'affiche, et la suppression du club (avec ses athlètes rattachés).

🐛 Navigation

  • Corrigé : recharger la page (F5) sur un onglet précis ramenait systématiquement à Accueil. L'URL contient désormais l'onglet actif (#clubs, #athletes...), repris au chargement.

📋 Résultats (impression)

  • Modifié : le palmarès par club regroupe désormais chaque club par catégorie (triées alphabétiquement), et à l'intérieur de chaque catégorie, les athlètes sont triés par ordre alphabétique.

🔐 HTTPS

  • Nouveau : redirection automatique http:// → https:// fournie dans .htaccess (Apache) et documentée dans nginx.conf.example (Nginx) — nécessite un certificat SSL déjà installé sur le domaine.

🏛️ Clubs

  • Corrigé : club.php empêchait de supprimer le dernier membre d'un club — le bouton de suppression du dernier membre restant est désormais désactivé, avec un message explicite.

🔒 Confidentialité / RGPD

  • Nouveau : les sections « À personnaliser » de confidentialite.php sont désormais remplissables depuis Configuration → « Vie privée / RGPD » — plus besoin d'éditer le fichier PHP. Un champ vide continue d'afficher l'avertissement d'origine.
Version 1.5
13/09/2026

⚡ Performance (lecture groupée)

  • Nouveau : api.php propose une lecture groupée (plusieurs clés en une seule requête) en plus de la lecture par clé existante.
  • Optimisé : suivi.php, suivi-club.php, marque.php et annonces.php faisaient une requête HTTP séparée par combat à chaque rafraîchissement (5s) — remplacé par des lots de 100 clés max. 250 combats chargés en 7 requêtes au lieu de 250+.

🏛️ Clubs (fiche dédiée)

  • Nouveau : « club.php », une vraie page par club — logo, fiche membres (nom/prénom/email/téléphone), remplace l'ancien contact unique.
  • Nouveau : chaque membre reçoit ses emails d'invitation/relance séparément des autres, avec une salutation personnalisée à son propre prénom.
  • Nouveau : migration à la demande de l'ancien contact vers la fiche membres — jamais automatique.

🏠 Accueil

  • Nouveau : encart « Vérifications avant de démarrer » — repère automatiquement les oublis fréquents (athlètes sans catégorie, poids hors catégorie, clubs sans email, catégories sans athlète, catégories sans poule générée, tapis non défini). Chaque point cliquable amène à l'onglet concerné.

🥋 Table de marque (résilience réseau)

  • Nouveau : marque.php résiste désormais aux coupures wifi — chaque sauvegarde retente automatiquement en cas d'échec (délai croissant), aucune saisie n'est perdue.
  • Corrigé : le rafraîchissement automatique pouvait silencieusement écraser un combat dont la sauvegarde était en attente — il ne le fait plus.
  • Badge « 🔄 En attente… » visible tant qu'une sauvegarde n'est pas confirmée.

🔍 Suivi public

  • Nouveau : notifications navigateur — bouton « 🔔 Me notifier des changements » sur suivi.php et suivi-club.php, se déclenche dès qu'une poule change de statut, tant que l'onglet reste ouvert.
  • Nouveau : « suivi-club.php », variante de suivi.php montrant tous les athlètes d'un club d'un coup, sans recherche à faire. Lien copiable depuis l'onglet Clubs de l'admin.
  • Nouveau : ouvrir suivi-club.php sans club précisé affiche un écran de sélection (une tuile par club) au lieu d'une erreur.
  • Nouveau : recherche + pagination (25 par page) sur l'écran de sélection et sur la liste des athlètes de chaque club — la détection de changement continue de fonctionner pour tous les athlètes, même masqués.
  • Nouveau : filtre par catégorie sur suivi-club.php, combinable avec la recherche par nom.
  • Retiré : le badge de classement a été retiré de suivi-club.php.
  • Nouveau : bouton « 🖨️ Imprimer l'affiche » (Accueil et onglet Clubs) — affiche imprimable avec QR code, prête à coller au mur ou donner à un coach.

🛠️ Administration

  • Nouveau : « status.php », page de statut réservée à l'admin — instance/base accessibles (avec temps de réponse), version de l'appli, compteurs de données, espace disque.
  • Nouveau : la section « Dépannage » (onglet Configuration) devient « 🛠️ Administration », regroupant statut et diagnostic serveur.
  • Enrichi : « diagnostic.php » détecte désormais les fichiers oubliés sur le serveur (anciennes versions .html non protégées, scripts à usage unique), teste réellement si « .htaccess » est pris en compte par le serveur, et indique si l'envoi d'emails SMTP est configuré.

🧑‍🤝‍🧑 Athlètes & Pesée

  • Nouveau : pagination (25 par page) sur l'onglet Athlètes de l'admin et sur la page de pesée — évite de faire défiler une liste de plusieurs centaines d'athlètes d'un bloc. Masquée automatiquement quand tout tient sur une seule page.

📋 Résultats (impression)

  • Nouveau : bouton « 🏆 Imprimer le palmarès » — podium (1er/2e/3e) de toutes les poules validées, toutes catégories confondues, en un seul document.
  • Nouveau : bouton « 🖨️ Imprimer par club » — position finale de chaque athlète, regroupée par club. Menu déroulant « Tous les clubs » / un club précis pour un document limité à un seul club.
Version 1.4
12/09/2026

🔍 Suivi public

  • Nouveau : page publique « suivi.php », sans authentification — recherche par nom pour retrouver sur quel tapis et quelle poule se trouve un athlète. Pensée pour être partagée via un QR code.
  • Onglet Accueil : nouvelle carte avec le lien et un QR code prêt à afficher/imprimer, plus un bouton pour copier le lien.
  • Classement affiché une fois la poule validée dans Résultats — jamais un résultat provisoire.
  • Bug corrigé : « Valider cette poule » ne sauvegardait jamais les valeurs affichées dans pool-results tant que personne n'avait manuellement retapé un champ — corrigé, la validation fige désormais les valeurs réellement affichées.
  • Statut affiné : avant validation, « À venir »/« En cours » se base sur l'impression de la feuille de poule (pas sur la table de marque, que tout le monde n'utilise pas forcément) — créée non imprimée → « À venir », imprimée → « En cours », validée → « Terminé ».

⚖️ Pesée & Inscription club

  • Modifié : le champ « Poids (kg) » a été retiré du formulaire d'inscription club — un athlète s'inscrit désormais sans poids déclaré, celui-ci ne provient plus que de la pesée sur place. Modifier un athlète existant ne touche plus jamais à son poids.
  • Modifié : sur la table de pesée, le poids ne se valide plus qu'avec la touche Entrée — taper un chiffre puis cliquer ailleurs sans Entrée n'enregistre plus rien.
  • Supprimé : la case « Présent » a disparu — un athlète est considéré pesé dès que son poids est confirmé par Entrée. Champ Poids aussi retiré du formulaire d'ajout de la pesée elle-même.
  • Répercussions mises à jour dans l'admin : compteur « pesé(s) », badge « ✓ pesé », filtre Athlètes, et la génération de poules (n'inclut que les athlètes avec un poids confirmé).
  • Nouveau : quand le poids ne correspond pas à la catégorie, une vraie fenêtre à trois choix remplace le simple message forcer/annuler — changer de catégorie et valider, forcer sans changer, ou annuler.
  • Modifié : dans l'onglet Athlètes, l'avertissement de poids hors catégorie est désormais un badge « ⚠️ Hors catégorie » juste à côté du nom, plutôt qu'un texte en dessous.

🏛️ Clubs

  • Nouveau : un club peut désormais renseigner plusieurs emails de contact, séparés par une virgule — les invitations/relances leur sont envoyées à tous, en SMTP comme en mailto:. Rétrocompatible avec les clubs n'ayant qu'une seule adresse.
  • Bug corrigé : quand la protection par mot de passe de la page d'inscription est désactivée, les emails d'invitation/relance mentionnaient quand même un lien de définition de mot de passe — trompeur. Corrigé côté SMTP et mailto:.

🏷️ Catégories

  • Nouveau : le champ « Tapis » d'une catégorie devient des pastilles à cocher, une par tapis disponible — l'admin choisit précisément lesquels cette catégorie peut utiliser (ex : tapis 2 et 4 seulement). Présentation compacte, au moins un tapis doit rester coché. Rétrocompatible avec les catégories déjà configurées.

🥋 Tapis (impression)

  • Modifié : le bouton « 🖨️ Imprimer » demande désormais « Par tapis » ou « Par club » via une fenêtre. Dans les deux cas, plus aucun saut de page forcé — tient sur le minimum de feuilles.
  • Renommé : le bouton « Par club » devient « 🖨️ Pour les coachs » — comportement inchangé (un club par page), distinct du nouveau choix « Par club » de la fenêtre.
Version 1.3
11/09/2026

📋 Résultats

  • Nouveau : le score judo de chaque athlète s'affiche à côté de son nom, calculé depuis les combats notés sur la table de marque.
  • Nouveau : ordre de départage complet en cas d'égalité de victoires — ippons, waza-ari, yuko, shido reçus, puis confrontation directe (le vainqueur du combat entre les deux athlètes passe devant).
  • Modifié : la colonne « Points » affiche le score de combat cumulé (ippon = 100, waza-ari = 10, yuko = 1), plutôt que les points de classement/barème.
  • Bug corrigé : la colonne « Victoires » pouvait afficher une valeur figée enregistrée précédemment au lieu du résultat réel une fois le combat tranché sur la table de marque. Corrigé : dès qu'un combat de la poule est tranché via la table de marque, le compte en direct devient la seule source de vérité — la saisie 100% manuelle (sans table de marque) continue de fonctionner normalement.

🥋 Table de marque

  • Nouveau : page dédiée (« marque.php ») pour la personne qui note les résultats sur un tapis — lien verrouillé par tapis, protégée par un compte bénévole à rôle limité.
  • Score détaillé façon judo : compteurs séparés par combattant (Ippon, Waza-ari, Yuko, Shido), pas un simple champ numérique.
  • Le 3e shido attribue automatiquement un ippon à l'adversaire (hansoku-make), avec retrait automatique si corrigé.
  • Un seul ippon possible par combat — l'activer pour l'un retire automatiquement celui de l'autre.
  • Validation explicite obligatoire : le score ne finalise plus jamais un combat tout seul — une bannière suggère un vainqueur (score au format « 013.0 / 004.0 »), à confirmer via « ✅ Valider ce résultat ». « ↩️ Annuler la validation » pour corriger une erreur.
  • « Décision de l'arbitre » en repli permanent — fonctionne désormais comme le score : un clic sélectionne juste, sans plus jamais valider directement. Confirmation requise via « ✅ Valider ce résultat ».
  • Plusieurs poules sur un même tapis alternent désormais leurs combats entre elles, au lieu de les enchaîner poule par poule.

🔒 Sécurité

  • Faille corrigée : les actions serveur utilisées par « inscription-club.php » n'avaient aucune vérification d'appartenance au club — n'importe qui avec le lien d'un seul club pouvait, via un appel direct à l'API, modifier ou supprimer les athlètes de n'importe quel autre club. Corrigé : chaque écriture vérifie désormais que l'athlète concerné appartient bien au club du lien utilisé, avec blocage aussi de toute tentative de réassignation vers un autre club. pesee.php et l'admin restent non concernés (légitime pour eux).
  • Nouveau : « inscription-club.php » est désormais protégée par un compte propre à chaque club (en plus de l'isolation ci-dessus, qui reste active dans tous les cas) — compte créé automatiquement, mot de passe défini par le club lui-même via un lien reçu par email (SMTP et mailto:), ajouté automatiquement tant qu'il ne s'est jamais connecté. Nouvelle section « 🏛️ Comptes club » dans l'onglet Comptes, avec un réglage pour désactiver cette exigence de connexion si besoin (l'isolation entre clubs reste protégée dans tous les cas).
Version 1.2
11/09/2026

👥 Comptes

  • Nouveau : onglet dédié « 👥 Comptes », regroupant le compte administrateur et les comptes bénévoles (pesée/annonces), auparavant dans l'onglet Configuration devenu trop chargé.

🏠 Accueil

  • Nouveau : l'onglet Accueil rejoint le rafraîchissement automatique toutes les 5 secondes (comme Tapis/Classement/Résultats) — les compteurs des tuiles se mettent à jour tout seuls.

⚖️ Pesée

  • Bug : un raté réseau transitoire pendant le rafraîchissement automatique pouvait casser le verrouillage d'un lien dédié (« ?cat=... ») — le champ « Catégorie » du formulaire se retrouvait vide et bloqué. Corrigé avec une nouvelle tentative automatique en cas d'échec, et les catégories ne sont plus écrasées par une réponse vide une fois déjà chargées correctement.

📋 Résultats

  • Les champs Victoires et Classement n'acceptent désormais plus que des chiffres — tout autre caractère est retiré au fur et à mesure de la frappe.
  • Nouveau : bouton « ✅ Valider cette poule » — verrouille ses champs, détermine désormais si elle apparaît sur la page Annonces. Les poules pas encore validées remontent en haut de la liste.

🏷️ Catégories

  • Nettoyage : retrait des champs « Pesée » et « Combats » (formulaire d'ajout et ligne de chaque catégorie) — c'étaient deux champs orphelins, jamais exploités ailleurs dans l'appli.
  • Le libellé « Poule n°1 = » a perdu son signe « = » superflu.

🔒 RGPD

  • Nouveau : page publique d'information légale (« confidentialite.php ») couvrant les obligations du RGPD — modèle avec sections « à personnaliser » clairement marquées, à compléter par l'organisateur.
  • Nouveau : case de consentement obligatoire sur le formulaire d'inscription club, avec lien vers la politique de confidentialité.

🎙️ Annonces

  • Nouveau : page dédiée (« annonces.php ») pour l'annonceur des résultats — liste les poules explicitement validées dans Résultats (pas simplement « tous les combats terminés »), avec leur classement validé (jamais différent de celui de l'admin), podium visuel, case « Médailles remises » par poule. Se rafraîchit automatiquement.
  • Bug critique corrigé : cocher « Médailles remises » échouait systématiquement pour un compte staff (rôle « annonces ») — 401 affiché à tort comme un problème de connexion. Nouvelle action dédiée, avec verrouillage en base pour éviter qu'un deuxième appareil n'écrase le changement.

🔒 Sécurité

  • Nouveau : « pesee.php » et « annonces.php » (anciennement publiques) sont désormais protégées par des comptes bénévoles nommés, à rôle limité, distincts du mot de passe admin — gérés depuis l'onglet Configuration (« 👥 Comptes bénévoles »). Identifiants stockés en base (inclus dans les sauvegardes SQL), mais explicitement bloqués en lecture/écriture publique.
Version 1.1
10/09/2026

🏠 Accueil

  • Nouveau : la tuile « Athlètes » de la page d'accueil affiche aussi le nombre de pesés, juste en dessous du nombre d'inscrits.

🗂️ Poules / Tableaux

  • Nouveau : possibilité de créer une poule vide, pour composer une répartition entièrement à la main — depuis zéro ou en complément d'une répartition déjà en place. Les poules restées vides sont ignorées lors de la génération des combats, et peuvent être supprimées d'un clic (« 🗑️ Supprimer cette poule »).
  • Le résumé « Génération par catégorie » affiche désormais aussi le nombre d'athlètes concernés, pas seulement le nombre de combats générés.
  • Nouveau : possibilité de replier/déplier une catégorie en cliquant sur son nom — utile pour les longues listes, seul le résumé reste visible une fois repliée.
  • Bug critique : avec une grosse catégorie (beaucoup de poules), une écriture « match:<id> » pouvait ponctuellement échouer sous la charge lors de la génération — ce combat n'était alors jamais réellement créé en base malgré matchIndex qui le référençait quand même (« combat fantôme », invisible partout). Corrigé : nouvelle tentative automatique sur chaque écriture en échec, avec un message clair si l'échec persiste malgré tout. Même correctif côté lecture (12 endroits : Résultats, Classement, Tapis, impression). Testé de bout en bout avec des échecs aléatoires simulés sur un cas réel (21 poules).

🏛️ Clubs

  • Nouveau : fiche club enrichie (onglet Clubs) — contact (nom, email, téléphone), case « Invitation envoyée », et nombre d'athlètes déjà inscrits calculé en direct. Renommer un club fait suivre automatiquement ses athlètes déjà inscrits.
  • Nouveau : boutons « 📧 Inviter » et « 🔔 Relancer » par club — ouvrent un email pré-rempli via le logiciel de messagerie de l'admin, et notent automatiquement l'invitation/la date de relance.
  • Nouveau : envoi direct des invitations/relances depuis Nakama (sans passer par le logiciel de messagerie), en configurant les identifiants SMTP d'une boîte mail existante (onglet Configuration → « 📧 Envoi d'emails »). Client SMTP interne sans dépendance externe, avec test de connexion immédiat. Optionnel — sans configuration, les boutons continuent d'utiliser mailto:.
  • Nouveau : bouton « 📧 Inviter tous les clubs en attente » — envoie l'invitation en une fois à tous les clubs ayant un email de contact et pas encore marqués invités (nécessite le SMTP configuré), avec suivi de progression et résumé final.
  • Nouveau : bouton « 🔔 Relancer tous les clubs sans inscription » — même principe, pour les clubs sans aucun athlète inscrit pour l'instant.
  • Nouveau : textes d'invitation/relance personnalisables (onglet Configuration → « ✏️ Textes des emails ») — sujet et corps modifiables, avec variables {salutation}, {club}, {lien}, {organisateur}. S'applique au mailto: comme à l'envoi SMTP direct.
  • Nouveau : refonte de l'affichage — une tuile compacte par club (nom, nombre d'athlètes, statut d'invitation), qui se déploie au clic pour afficher le détail complet, au lieu d'une longue liste tout affichant en permanence. Le formulaire « Créer un club » est désormais replié par défaut.

🏆 Classement

  • Nouveau : l'onglet Classement se rafraîchit désormais automatiquement toutes les 5 secondes, comme l'onglet Tapis.
  • Nouveau : chaque titre de classement (Général, Masculin, Féminin, chaque catégorie) affiche le nombre de combattants déjà comptabilisés — le nombre avec résultats effectivement saisis, pas le total des inscrits.

📋 Résultats

  • Bug : une poule (re)générée pendant qu'on consultait l'onglet Résultats pour cette catégorie n'apparaissait pas tant qu'on ne resélectionnait pas la catégorie — l'onglet ne se rafraîchissait jamais automatiquement. Corrigé, avec une protection pour ne pas écraser une saisie en cours pendant le rafraîchissement.
  • Précision : un signalement complémentaire a permis de trouver une cause plus profonde (écritures manquantes lors de la génération sur une grosse catégorie) — voir le bug critique corrigé dans « 🗂️ Poules / Tableaux » ci-dessus.

⚖️ Pesée

  • Nouveau : écran d'accueil par tuiles (une par catégorie, avec compteur mis à jour en direct) quand la page de pesée est ouverte sans lien dédié — plus besoin du lien exact d'une catégorie. Lien « ◀ Changer de catégorie » ajouté sur la vue verrouillée pour y revenir.
  • Sous-titre de l'en-tête mis à jour : « Sélectionnez la catégorie à peser — tout se sauvegarde automatiquement, en direct. »

📜 Historique

  • Bug critique corrigé : le bouton « Archiver cette saison » ne faisait littéralement rien la toute première fois qu'on ouvrait l'onglet Historique (aucune saison encore archivée) — privé de tout gestionnaire de clic dans ce cas précis. Corrigé et testé de bout en bout.
  • Nouveau : après avoir archivé une saison, confirmation proposée pour vider la liste des combattants — catégories et clubs conservés (souvent réutilisés d'une saison à l'autre).
  • Nouveau : possibilité de supprimer une archive (« ✕ » à côté de « Voir »), avec confirmation.
  • Correction d'espacement entre les boutons « Voir » et « ✕ » de chaque archive.
Version 1.0 (Finale)
07/09/2026

🌐 Général

  • Nouveau : page 404 personnalisée (404.html), dans le même esprit visuel que « Club introuvable »/« Catégorie introuvable », plutôt que le message par défaut du serveur.
  • Nouveau : support Nginx en plus d'Apache — .htaccess ne fonctionne que sous Apache. Nouveau fichier nginx.conf.example reproduisant les mêmes protections, testé de bout en bout avec un vrai Nginx + PHP-FPM.
  • Nouveau : sauvegarde SQL en un clic depuis l'onglet Configuration — génère et télécharge un export SQL complet de la base, réimportable tel quel via mysql ou phpMyAdmin.
  • Nouveau : restauration graphique d'une sauvegarde depuis la même carte — fusionne avec les données actuelles par défaut, avec une case à cocher optionnelle pour vider la base avant de restaurer.
  • Correction CSS : les boutons sous forme de lien n'affichaient jamais leur vrai style. Corrigé.

🧑‍🤝‍🧑 Athlètes

  • Nouveau : filtre « Pesée » dans l'onglet Athlètes (Tous / Pesés seulement / Non pesés seulement), à côté du filtre par catégorie.

🏛️ Inscription en ligne

  • Nouveau : filtre par catégorie sur la liste « Athlètes déjà inscrits » (menu déroulant simple, côté client) — aide les clubs à retrouver leurs athlètes dans une longue liste.
  • Nouveau : page « Club introuvable » repensée, avec un bouton « Contacter l'organisateur » (visible si un email de contact est renseigné — onglet Configuration → nouveau champ « Email de contact »).

⚖️ Pesée

  • Toilettage visuel, dans le même esprit que la nouvelle page « Club introuvable » : ombres douces sur les cartes, page « Catégorie introuvable » repensée. Purement visuel.
  • Rafraîchissement automatique accéléré : 6 secondes → 2 secondes. Les mises à jour faites depuis un autre appareil apparaissent donc plus vite.
  • Nouveau : ce délai est désormais réglable depuis l'onglet Configuration de l'admin (entre 1 et 30 secondes, 2 par défaut).
  • Bug important : si un rafraîchissement automatique arrivait pendant la saisie d'un poids, ce qui n'avait pas encore été validé pouvait être effacé. Corrigé : le rafraîchissement n'affecte plus le champ en cours de frappe, et rattrape les mises à jour manquées dès qu'on le quitte.

🔐 Sécurité

  • Nouveau : changement de l'identifiant et du mot de passe admin directement depuis l'onglet Configuration — plus besoin d'éditer auth-config.php à la main. Le mot de passe actuel est revérifié côté serveur avant tout changement.
  • Nouveau : le mot de passe admin est désormais stocké haché plutôt qu'en clair. Migration automatique et transparente au prochain login réussi.
  • Nouveau : limitation des tentatives de connexion — blocage 5 minutes après 5 échecs consécutifs pour un identifiant donné.
  • Nouveau : protection contre le CSRF sur les écritures admin — un jeton unique par session est vérifié à chaque écriture.

🧪 Outils de test

  • Nouveau : jeu de données de test « réel » (858 athlètes, les 11 catégories prédéfinies), reconstitué à partir de vraies feuilles de pesée d'une édition précédente. Bouton dédié pour l'importer en un clic.

⚖️ Corrections

  • Bug critique (récidive) : les catégories prédéfinies pouvaient encore être recréées automatiquement avec de nouveaux identifiants si categories et athletes échouaient tous les deux à charger en même temps (typiquement lors d'un redéploiement ou redémarrage serveur). La recréation automatique et silencieuse est désormais entièrement supprimée : le bouton « Créer les catégories prédéfinies » (onglet Catégories) reste l'unique moyen de les (re)créer, sans jamais écraser celles déjà en place.
  • Bug important : un accroc réseau au tout premier chargement (fréquent sur mobile, ex : au réveil du téléphone) pouvait laisser l'appli bloquée sur « 0 athlète / 0 catégorie » indéfiniment, sans bandeau visible, jusqu'à fermer et rouvrir le navigateur. La reconnexion automatique relance désormais un chargement complet plutôt que de juste faire disparaître le bandeau — la récupération est maintenant automatique.
  • Bug : le lien d'inscription généré dans l'onglet Clubs était cassé — il gardait index.php dans le chemin (reste d'avant l'ajout de l'authentification), donnant un lien du type .../index.php/inscription-club.php?club=... au lieu de .../inscription-club.php?club=.... Corrigé.
Version 0.9 (Bêta 2)
06/09/2026

🏷️ Catégories

  • Nouvelles catégories prédéfinies pour les Poussinets/Poussins : Poussinets -23kgs, Poussinets -27kgs, Poussinets +27kgs (ajout d'un palier -23kgs), et Poussins -28kgs / Poussins +28kgs (remplacent les anciens paliers -30kgs/+30kgs). Poussinettes et Poussines inchangées.
  • Jeux de données de test mis à jour en conséquence : 1100 athlètes désormais (100 par catégorie, sur les 11 catégories prédéfinies).

🖨️ Feuilles de poules imprimées

  • Impression désormais en format paysage (la feuille « Répartition par tapis » reste en portrait).
  • Polices, espacements et hauteurs de lignes agrandis pour remplir correctement la page A4.
  • Format des poules de 2 revu en profondeur : « Poule n° » à côté du titre, ligne méta réduite, colonne « Cla » en tête sans colonne Classement séparée, nouveau barème dédié (Ippon 100 pts / Waza-Ari 10 pts / Yuko ou décision 1 pt / Décision 0 pt).
  • Poules de 3 et plus : les cases correspondant à un combat auquel l'athlète ne participe pas sont maintenant noircies (au lieu d'un simple fond grisé). Motif vérifié exact contre une vraie feuille de référence pour des poules de 3, 4 et 5.
  • Les cases noircies s'impriment désormais correctement même sans l'option « Graphiques d'arrière-plan » cochée dans le navigateur (réglage par défaut le plus courant) — jusqu'ici elles restaient blanches à l'impression réelle malgré un aperçu correct à l'écran.
  • Nouveau : feuille de poule vierge, sans athlètes réels — pratique pour avoir des feuilles de secours toutes prêtes ou une poule improvisée le jour J. Choix du nombre d'athlètes (2 à 6) et, en option, d'une catégorie à préremplir.
  • Bug important : les poules de 5 et 6 athlètes débordaient sur une 2e page après l'agrandissement des polices. Taille adaptée automatiquement selon le nombre d'athlètes — toutes les tailles (2 à 6) tiennent désormais sur une seule page A4.
  • Bug important : l'impression pouvait générer plusieurs pages blanches en trop selon le contenu présent sur l'onglet ouvert au moment d'imprimer (ex : une feuille vierge donnait 7 pages au lieu d'1). Corrigé.
  • Titre par défaut des feuilles imprimées (« Compétition Amicale ») : inclut désormais automatiquement le nom du club s'il est renseigné, ex. « Compétition Amicale Kaizen Saint Sébastien ». Sans effet si un nom d'événement personnalisé est déjà saisi.
  • Nouveau : réimpression d'une poule précise — choix de la catégorie puis du numéro de poule exact, avec les vraies données déjà générées. Pratique en cas de feuille perdue ou abîmée sur le terrain.
  • Éditeur manuel de poules : déplacer un athlète vers une poule qui en compte déjà 6 est désormais bloqué (avec message explicatif).
  • Éditeur manuel de poules : après « Générer les poules », « Régénérer les combats » ou « Réinitialiser la répartition », une sélection d'athlète en cours pouvait rester affichée à tort, même si les données étaient déjà correctes. Corrigé.
  • Bug important : l'API ne renvoyait aucun en-tête anti-cache. Le navigateur pouvait mettre en cache une réponse et la resservir après une modification, donnant l'impression que l'affichage ne se mettait pas à jour jusqu'à un rechargement complet. Corrigé.
  • Génération automatique des poules : nouvelle règle de répartition par défaut, poules de 4 en priorité — reste 0 → que des poules de 4 ; reste 1 → une poule de 5 ; reste 2 → deux poules de 3 ; reste 3 → une poule de 3 (le reste toujours en poules de 4).
  • Nouveau : la saisie du poids est désormais bloquée (ajout, édition, pesée) quand il ne correspond plus à la catégorie à limite de poids de l'athlète (Poussinets/Poussins), avec 1 kg de marge. Un bouton « Continuer quand même » reste disponible pour les cas exceptionnels. L'avertissement reste aussi affiché dans l'onglet Athlètes.
  • Nouveau : règle fédérale des 10% d'écart de poids maximum entre deux combattants d'une poule — l'avertissement existant dans l'onglet Poules/Tableaux apparaît désormais aussi directement sur les feuilles imprimées (bandeau rouge, « prévenir les parents »), visible sur le terrain.
  • Note d'aide ajoutée près du bouton d'impression des poules, pour penser à décocher « En-têtes et pieds de page » dans la fenêtre d'impression (sinon le nom de la page et l'URL s'ajoutent en haut de chaque feuille).
  • Champ « Poids » (vide, jamais rempli) retiré de l'en-tête des feuilles de poules de 3 athlètes et plus — la poule de 2 ne l'avait déjà plus.
  • Nouveau : temps de combat par défaut selon la tranche d'âge, appliqué automatiquement sur les feuilles imprimées — Poussinets 1min, Poussins 1min30, Benjamins 2min, Minimes 3min. Le champ « Temps de combat » de la Configuration ne sert plus que de repli pour une catégorie personnalisée.
  • Nouveau : impression « par club » dans l'onglet Tapis (une par catégorie) — une page par club, avec Nom/Prénom/Catégorie/Poule/Tapis et un rappel du contexte sur chaque page, à remettre aux entraîneurs.
  • Onglet Tapis : retrait des deux boutons d'impression globaux en haut de page, jugés inutiles.
  • Sur mobile, le sous-titre de l'en-tête pouvait passer sous le bouton « Déconnexion » quand il retournait à la ligne. Corrigé.

⚙️ Configuration

  • Logo du club affiché partout où c'est pertinent : en-tête de l'admin, feuilles de poules imprimées (en haut à gauche), feuille « Répartition par tapis », pesée multi-appareils, page d'inscription en ligne par club.
  • Numéro de version affiché sur la page de connexion, avec un lien direct vers le changelog.
  • Site internet du club : si renseigné, le nom du club dans l'en-tête devient un lien cliquable vers ce site ; sans site renseigné, texte simple comme avant.

🗑️ Suppressions

  • Retrait de la page d'inscription 100 % autonome (hors-ligne) — l'inscription en ligne par club couvre le besoin.

🗄️ Base de données

  • Changement majeur : passage de SQLite à MariaDB pour le stockage des données, afin de mieux supporter les écritures concurrentes. Nécessite désormais une base MariaDB/MySQL accessible depuis l'hébergement.
  • Nouveau : db-config.php.dist, modèle des identifiants de connexion à la base (protégé, comme auth-config.php). Le vrai db-config.php se crée une seule fois via setup.php ou à la main, et n'est jamais écrasé par un redéploiement ultérieur.
  • Nouveau : setup.php, assistant d'installation web — un formulaire teste la connexion, crée la table et écrit db-config.php automatiquement, avec un message « Configuration terminée » et un bouton direct vers l'admin une fois fait.
  • Nouveau : migrate-sqlite-to-mariadb.php, script à usage unique pour récupérer les données d'une installation existante encore sous SQLite.
  • diagnostic.php teste désormais la connexion MariaDB au lieu de SQLite, et signale un ancien fichier .sqlite pas encore migré — avec un bouton « 🗑️ Supprimer ce fichier » (avec confirmation) directement sur la page.
  • Sécurité : diagnostic.php n'est plus accessible publiquement — connexion admin requise. Accessible depuis l'onglet Configuration, section « 🔧 Dépannage ».

🧑‍🤝‍🧑 Athlètes

  • Nouveau : le tapis assigné (dès qu'un combat est généré) s'affiche désormais à côté du nom de chaque athlète dans l'onglet Athlètes (« 🥋 Tapis X »).

🗂️ Poules / Tableaux

  • Nouveau : seuls les athlètes pesés (case « Présent » cochée) peuvent désormais être mis en poule, que ce soit à la génération automatique ou lors de l'ajout d'un athlète « orphelin » à une poule déjà générée.

⚖️ Corrections

  • Bug critique : dans db.php, l'ordre de deux lignes faisait que les identifiants de db-config.php étaient systématiquement écrasés par des valeurs vides au moment de la connexion — l'API échouait avec une erreur MariaDB quel que soit le contenu réel du fichier. Corrigé.
  • Pesée : le compteur « au total » affichait le nombre total d'athlètes de la compétition même avec un filtre actif, au lieu du nombre correspondant au filtre. Corrigé.
  • Pesée : un lien pointant vers une catégorie renommée ou supprimée affichait la page normale avec le filtre simplement déverrouillé, sans explication. Affiche maintenant une page d'erreur dédiée (« Catégorie introuvable »), cohérente avec la page « Club introuvable » des inscriptions en ligne.
  • Tapis (vue par catégorie) : les colonnes Nom/Prénom/Club des tableaux de poule n'étaient pas alignées entre elles. Largeurs de colonnes désormais fixes et identiques sur toutes les poules.
  • Pesée : le bandeau « Connexion au serveur impossible » restait affiché indéfiniment une fois apparu, même après le retour de la connexion — une coupure réseau de quelques secondes (fréquente sur mobile) donnait l'impression d'un problème persistant. Il se referme maintenant automatiquement dès qu'une requête réussit à nouveau.
  • Admin : le même bandeau, affiché en superposition fixe en haut de l'écran, recouvrait et rendait inaccessible le bouton « Déconnexion ». Il pousse maintenant le contenu vers le bas au lieu de le survoler, avec une vérification automatique toutes les 3 secondes tant qu'il est affiché.
  • Import CSV / texte collé : un athlète dont la catégorie indiquée ne correspondait à aucune catégorie déjà créée se retrouvait sans catégorie, silencieusement. Le comportement reste le même (l'import n'utilise que des catégories déjà existantes), mais un message liste maintenant clairement les catégories introuvables en fin d'import.
  • Bug important : supprimer une catégorie ne touchait jamais aux athlètes qui y étaient rattachés — ils gardaient une référence vers une catégorie qui n'existe plus, les rendant invisibles/cassés partout sans explication. La suppression prévient désormais du nombre d'athlètes concernés et les fait repasser en « sans catégorie » (visibles et corrigibles). Nouveau filtre « — Sans catégorie — » dans l'onglet Athlètes pour les retrouver facilement, y compris ceux déjà touchés avant le correctif.
  • Nouveau : possibilité de modifier un athlète existant (bouton ✏️) — prénom, nom, club, poids, catégorie, grade. Jusqu'ici, la seule façon de corriger un athlète était de le supprimer et de le recréer.
  • Bug important : les boutons de la liste d'athlètes (✕, et maintenant ✏️) ne répondaient jamais au tout premier affichage de l'onglet Athlètes — seulement après avoir touché le filtre ou la recherche une première fois. Corrigé.
  • Édition d'un athlète : le club actuel n'était jamais présélectionné dans le menu déroulant, au risque de le perdre par erreur en enregistrant. Corrigé.
  • Bug critique : si la récupération des catégories échouait au chargement (souci réseau passager, notamment juste après un redéploiement), l'appli pouvait croire à tort que la base était vierge et recréait les catégories prédéfinies avec de nouveaux identifiants — cassant le lien avec les athlètes déjà rattachés. Les catégories ne sont désormais recréées automatiquement que si la base est vraiment vierge (aucune catégorie et aucun athlète).
  • Liste des athlètes : un athlète dont la catégorie pointait vers un identifiant qui n'existe plus s'affichait avec un nom de catégorie vide au lieu du message « sans catégorie » en rouge. Corrigé.
Version 0.1 (Bêta 1)
04/09/2026
Première version bêta complète de l'application de gestion de compétition.

🥋 Athlètes

  • Fiche athlète complète : prénom, nom, club, sexe (déduit automatiquement de la catégorie choisie), poids, catégorie, grade.
  • Import en masse par fichier CSV ou par texte collé.
  • Recherche et filtre par catégorie dans la liste (pensé pour de gros effectifs — testé jusqu'à 1000 athlètes).
  • Club en menu déroulant (clubs déjà connus + option « + Nouveau club »).
  • Catégorie obligatoire à la création.

🏷️ Catégories

  • 10 catégories prédéfinies du club, créées en un clic (et automatiquement au tout premier lancement).
  • Catégories personnalisées possibles en plus.
  • Par catégorie : heure de pesée, heure des combats, nombre de tapis dédiés, et numéro de départ pour la numérotation des poules.
  • Lien de pesée dédié généré automatiquement pour chaque catégorie.

🗂️ Poules / Tableaux

  • Génération automatique des poules qui priorise le rapprochement de poids, avec évitement des clubs en second plan.
  • Alerte visuelle si l'écart de poids dans une poule dépasse 10 %.
  • Éditeur manuel : toucher un athlète pour le sélectionner, toucher une autre poule pour l'y déplacer.
  • Un combattant ne se retrouve jamais sur deux tapis différents : chaque poule entière est assignée à un seul tapis.
  • Impression des feuilles de poules fidèle à une feuille de compétition réelle (barème, ordre des combats, tapis et numéro de poule pré-remplis).
  • Format spécial pour les poules de 2 athlètes (catégorie Poussinets) : barème par points, bloc « Classement final » séparé.

🥋 Tapis

  • Vue de consultation « qui est sur quel tapis », organisée par catégorie puis par tapis — pas de saisie de score dans l'appli.
  • Feuille imprimable récapitulative « Répartition par tapis », filtrable par catégorie ou toutes en une fois.

📋 Résultats

  • Tableau éditable par poule : Victoires et Classement saisis à la main, Points calculés automatiquement à partir du barème.
  • Pré-remplissage automatique à partir des combats déjà notés en direct, si disponibles.
  • Les points ne sont attribués à un club que lorsque la poule est entièrement terminée.

🏆 Classement

  • Nouvel onglet séparé de « Clubs », avec podium visuel (top 4) du classement général.
  • Classements détaillés : général, masculin/féminin, par catégorie.
  • Barème de points basé uniquement sur le classement en poule (1er / 2e / 3e / 4e et plus), configurable.

🏛️ Clubs & inscriptions en ligne

  • Onglet Clubs recentré sur la gestion des clubs participants et l'export des données.
  • Lien d'inscription hébergé généré automatiquement pour chaque club, nom déjà intégré — inscriptions directes dans l'onglet Athlètes.
  • Un club peut corriger ses propres inscriptions.
  • Synchronisation automatique des clubs détectés chez les athlètes (import, ancienne saisie...).
  • Suppression d'un club : prévient du nombre d'athlètes rattachés et les supprime avec lui si confirmé.
  • Page d'inscription autonome, 100 % hors-ligne, en secours.

⚖️ Pesée

  • Page dédiée multi-appareils, connectée en direct : plusieurs bénévoles peuvent peser en même temps sans se marcher dessus.
  • Cocher « Présent », ajuster le poids réel, ajouter un athlète de dernière minute.
  • Lien dédié par catégorie qui verrouille le filtre et le formulaire d'ajout.

📜 Historique

  • Archivage d'un instantané complet en fin de saison, consultable et comparable d'une édition à l'autre.

⚙️ Configuration

  • Nouvel onglet Configuration : nom et logo du club (image redimensionnée automatiquement à 300×300px max avant enregistrement). Prévu pour accueillir d'autres réglages généraux par la suite.

🏠 Accueil & navigation

  • Nouvel onglet Accueil (par défaut à l'ouverture) : cartes cliquables avec icône vers chaque section.

🔒 Sécurité

  • Authentification de l'admin (identifiant/mot de passe, session), protection de l'accès direct au contenu de l'admin.
  • Les pages publiques restent sans compte, mais ne peuvent qu'ajouter/modifier des athlètes.
  • Écritures atomiques côté serveur : deux appareils utilisés en même temps ne s'écrasent jamais mutuellement.

🧪 Outils de test

  • Section dédiée (hors navigation principale), qui peut être masquée via une case à cocher.
  • Import en un clic d'un jeu de données de test (1000 athlètes fictifs).
  • Réinitialisation complète de la base de données (avec confirmation, action irréversible).

🛠️ Divers

  • Export SQLite complet et exports CSV (athlètes, combats, classement clubs).
  • Page de diagnostic serveur pour vérifier PHP/SQLite/droits d'écriture.
  • Documentation technique complète dans le code.
  • Page de crédits, avec lien de retour.
  • Mise en page corrigée pour ne plus déborder horizontalement sur mobile.
  • Renommage de l'application : « Kaizen Judo » (nom du club, source de confusion) devient Nakama. Migration automatique et transparente du fichier de base de données au premier chargement, sans perte de données.
  • Page de changelog (celle-ci), accessible depuis un lien en pied de page.

Corrections de bugs notables

  • Chargement parfois bloqué sur « Chargement… » au premier affichage d'un onglet.
  • Athlètes/clubs disparaissant du classement dès qu'une seule valeur était saisie manuellement dans une poule.
  • Erreur 500 sur les pages d'inscription en ligne (extension PHP mbstring).
  • Regroupement automatique de catégories par poids (fonctionnalité retirée, remplacée par des catégories fixes).
Le détail complet et le suivi des bugs restants sont dans KNOWISSUES.md, sur le serveur.