Repository navigation
Develop - #342
Merged
Merged
Develop#342
Conversation
Met en place l'internationalisation : - Fichiers de langue Laravel (lang/fr, lang/en : menu, common, settings) partagés à React via Inertia (langue active + repli FR). - Hook t() maison (resources/js/helpers/i18n.ts). - Langue liée au profil (colonne users.locale) + middleware SetLocale. - Sélecteur de langue dans Paramètres → Apparence (PATCH /settings/language). - Catalogue des langues (App\Constants\Locales), défaut FR. - Coquille traduite : menu latéral et fil d'ariane. Tests : bascule de langue (persistance, langue invalide rejetée, partage).
feat(i18n): support multilingue FR/EN (infra + coquille)
…gin) - Dropdown utilisateur (Paramètres, Déconnexion) via t(). - Sous-navigation des Paramètres (onglets Profil / Mot de passe / 2FA / Apparence + en-tête « Mon compte ») via t(). - Page de connexion (titres, libellés, boutons) via t(). - Ajout des fichiers lang auth (fr/en) et de settings.account_desc.
- Fichiers lang dashboard (fr/en) : en-tête, alertes, cartes KPI, sections, graphes, moyens de paiement, tableau impayés, section enseignant et état vide. - dashboard.tsx : tous les libellés via t(), maps de libellés (méthodes, statuts, motifs) déplacées dans le composant, fil d'Ariane et titre de page traduits.
- Fichiers lang students (fr/en) : liste (stats, recherche, filtres, tri, tableau, actions groupées, suppression) et fiche détaillée (identité, contact, dossier administratif, parents & médical, pièces jointes, documents délivrés, portail, dialogues). - Students/Index.tsx et Students/Show.tsx : libellés via t(), badges genre/statut et libellés d'admission dans le composant, dates localisées selon la langue active. - Réutilise common.actions / common.status pour les actions génériques.
- Groupe lang students.form (fr/en) : titres create/edit, libellés d'étapes, sections, champs, placeholders, photo, et récapitulatif. - student-form-steps.tsx : tous les libellés, étapes, sections, boutons et récapitulatif via t() ; genre/admission/statut traduits. - Create.tsx / Edit.tsx : en-têtes et titres de page via t().
- students.php (fr/en) : groupes history, import_page et stats_page. - History.tsx : parcours, cartes, tableau et statuts de paiement via t() ; dates localisées. - Import.tsx : étapes, modèle CSV, résultats et erreurs via t(). - Stats.tsx : KPI, graphes (sexe, âge, effectifs par classe), filtres cycle/tri et infobulle via t().
…FR/EN) - Nouveaux fichiers lang roster et promotion (fr/en). - Roster/Index.tsx : filtres, cartes, tableau, statuts de paiement, actions groupées et dialogue de statut via t(). - Promotion/Index.tsx : sélecteurs source/cible, stats, barre d'action et tableau via t().
- Nouveau fichier lang scholarships (fr/en) : groupes index, form et show. - StudentScholarships Index/Create/Edit/Show : liste, filtres, pagination, formulaire d'attribution (recherche élève, bourse, année, dates, notes) et fiche détaillée via t() ; dates localisées selon la langue.
feat(i18n): coquille, tableau de bord et module Élèves (FR/EN)
- Nouveau fichier lang calendar (fr/en). - Calendar/Index.tsx : en-tête, barre d'outils (navigation, vues, filtres), astuce drag & drop, dialogue création/édition et dialogue de suppression via t(). - Composants agenda/month/time-grid : libellés (jours, « journée », poignée de redimensionnement, état vide) via t(). - Dates et noms de jours/mois localisés selon la langue active (date-fns fr/enUS, toLocaleDateString fr-FR/en-GB).
feat(i18n): module calendrier (FR/EN)
… création (FR/EN) - Nouveau fichier lang enrollments (fr/en) : groupes index, form, edit, show et create. - Index : cartes financières, filtres, tableau, badges statut/paiement, pagination et suppression via t(). - Edit / Show : formulaire et fiche détaillée (dont résumé facture) via t(). - Create : assistant 3 étapes (inscription, récapitulatif des frais, premier paiement) — recherche élève, modes de paiement, libellés et boutons via t(). - Dates localisées selon la langue active.
- enrollments.php (fr/en) : groupes invoice, invoice_doc et receipt. - Invoice.tsx : suivi financier (récap, progression, détail, historique des paiements, formulaire d'ajout de paiement) via t(). - InvoicePrint.tsx : facture imprimable (en-tête officielle, lignes, totaux, montant en lettres, paiements reçus, signatures) via t(). - Receipt.tsx : confirmation d'inscription (mention conditionnelle de règlement, signatures) via t(). - Dates localisées selon la langue active.
feat(i18n): module inscriptions & paiements (FR/EN)
…sses (FR/EN) - Nouveau fichier lang comptabilite (fr/en) : groupes verify, expense, receipt_doc, cash. - Payments/Verify : vérification d'authenticité de reçu via t(). - Expenses/Create : formulaire de dépense, aperçu du solde, dernières dépenses via t(). - Payments/Receipt : reçu de paiement officiel (2 volets, montant en lettres, code de vérification) via t(). - Accounting/CashAccounts : gestion des caisses (formulaire, cartes, suppression) via t(). - Dates localisées selon la langue active.
…FR/EN) - comptabilite.php (fr/en) : groupes dashboard, situation, tx. - Accounting/Dashboard : KPI, graphe mensuel, situation par classe, élèves impayés, alerte renvoi via t(). - Accounting/Situation : filtres, résumé par classe, détail élèves, exports via t(). - Accounting/Transactions : journal, filtres, dates rapides, tableau, pagination, suppression de dépense via t(). - Dates localisées selon la langue active. Module Comptabilité désormais entièrement traduit (7 écrans).
… détail) (FR/EN) - Nouveau fichier lang examens (fr/en) : groupe templates (index, form, create, edit, show). - EvaluationTemplates Index/Create/Edit/Show : liste filtrable, formulaire (période, type, coeff, barème), détail + déploiement par classe/matière, liste des évaluations générées via t(). - Dates localisées selon la langue active.
feat(i18n): comptabilité + examens (modèles) (FR/EN)
- examens.php (fr/en) : groupe evaluations (index, show). - Evaluations/Index : filtres, tableau, clôture, progression via t(). - Evaluations/Show : stats, min/max/moyenne, tableau des notes via t().
- examens.php (fr/en) : groupe marks. - Marks/Index : en-tête, stats, bannière de clôture, grille de saisie, absences, réclamations et pied récap via t() ; dates localisées.
- examens.php (fr/en) : groupes official (index, show) et planning. - OfficialExams Index/Show : liste filtrable, création, inscriptions, saisie des résultats via t(). - Planning/Index : filtres classe/période, grille de planification des dates, édition inline, suppression via t(). - Dates localisées. Module Examens entièrement traduit (10 écrans).
- Nouveau fichier lang notes (fr/en) : groupe bulletins (index, edit). - Bulletins/Index : filtres, validation/dévalidation, dialogues, tableau via t(). - Bulletins/Edit : appréciations par matière, discipline, décision via t().
…on, détail) (FR/EN)
…n, en-tête) (FR/EN)
…n, édition, détail) (FR/EN)
…n, détail) (FR/EN)
feat(i18n): paramètres — vagues 2 à 4 (matières → structures de frais) (FR/EN)
…ons d'erreur (FR/EN)
feat(i18n): composants partagés — éditeur de texte riche & illustrati…
chore(phpstan): analyse statique Larastan (niveau 5 + baseline + CI)
… baseline PHPStan (463 → 250)
…tration_number vers matricule élève
…— 82 erreurs (246 → 162)
…iqueMatricule (162 → 124)
…pe & create (87 → 81)
- CashAccountController: la contrainte INCOME du withSum était ignorée (closure passée en 3e arg positionnel) → syntaxe tableau, total_income ne compte plus que les transactions INCOME. - BackupService: garde l'échec de tempnam() (string|false) et retire le `! empty($chunk)` mort sur array_chunk. - BulletinRenderer / PayrollService: retire le `!== null` redondant après isset(). - FrenchNumberSpeller: remplace le fallback hors-plage UNITS[$n] par une LogicException explicite. - StudentTestSeeder: resolveAcademicYear() ne retourne jamais null, type de retour non-nullable + condition d'inscription simplifiée. - HasMatricule / ArchiveController: type `self` sur la closure creating, retrait de la constante TYPES morte. - Baseline régénérée : 47 faux positifs résiduels (alias de requêtes selectRaw/withCount, relations Spatie, auth multi-modèle Sanctum).
…line (47 → 0)
Niveau 5 désormais vert SANS baseline : le fichier phpstan-baseline.neon est
supprimé et son include retiré de phpstan.neon.
Typage honnête (pas de suppression) :
- Portail API (ApiController, AuthController, ChildrenController) : le principal
authentifié est Student|Guardian (gardes Sanctum), annoté comme tel → instanceof,
collect() et currentAccessToken() se résolvent.
- Lignes d'agrégat (Enrollment/StudentStats/Dashboard/Payroll) : résultats
selectRaw/jointures typés via variables intermédiaires (object{...}).
- OfficialExam : @property-read pour les alias withCount.
- User / Student : relation Spatie roles et pivot guardian_student typés.
- TimetableController : closure $range et forme de la grille typées.
Vrais bugs corrigés au passage :
- ArchiveController : le libellé d'archive d'un élève affichait un nom vide
(Student n'a pas de colonne « name ») → compose prénom + nom.
- Migration evaluations : ->after() était chaîné sur la définition de clé
étrangère (ignoré) → réordonné pour positionner la colonne.
- Migration matricules : retrait d'un ->unique()->index() sans effet.
Code mort retiré (enums/colonnes NOT NULL → arms inatteignables) :
CashAccount::typeLabel, HasMatricule::method_exists.
DocumentRenderer : genre/date de naissance lus via getAttribute() (mixed) car
$student peut être un modèle NON persisté (aperçu/test) dont les colonnes NOT
NULL sont nulles — les gardes défensives sont conservées.
StatisticsService : unique suppression inline documentée (count() sur GROUP BY
+ HAVING ; un count() SQL compterait par groupe, pas les groupes).
…ederHardeningTest) Un commit précédent avait retiré les `?->` sur $this->command, jugés superflus par PHPStan (Seeder::$command est typé non-nul par le framework). Mais la propriété vaut null quand run() est appelé directement, hors `db:seed` — ce que font les seeders invoqués programmatiquement et SeederHardeningTest, d'où un « Call to a member function warn()/info() on null » en CI. - Rétablit `$this->command?->` dans les 5 seeders (comportement identique quand la commande console est présente, sûr quand elle est absente). - phpstan.neon : règle ignoreErrors ciblée et documentée pour le faux positif nullsafe.neverNull sur Illuminate\Console\Command dans database/seeders. Suite complète : 505 passants, 0 échec. PHPStan niveau 5 : vert.
chore(phpstan): analyse statique niveau 5 sans baseline (463 → 0)
…rité `composer update` : résorbe l'intégralité des avis `composer audit` (1 critique + ~10 high), désormais « No security vulnerability advisories found ». Mises à jour notables : - laravel/framework v12.54.1 → v12.72.0 (corrige CVE-2026-114509, bypass d'auth TokenGuard — critique pour le portail Sanctum) - symfony/* 7.4.7 → 7.4.23, guzzle 7.10 → 7.16.1, commonmark 2.8.1 → 2.10.7, dompdf 3.1.5 → 3.1.6 - maatwebsite/excel 3.1.69 → 4.0.6 (majeur) et phpoffice/phpspreadsheet 1.30.5 → 5.11.0 (majeur) Adaptation à Excel 4 : StatisticsExport implémente désormais l'interface marqueur Export (requise par Excel::download()). Validation : composer audit vierge, PHPStan niveau 5 vert, suite complète 505 passants / 0 échec (dont l'I/O Excel).
Évite un futur saut de version majeur involontaire (la contrainte « * » avait permis le passage silencieux de 3.x à 4.x). Versions inchangées (4.0.6 satisfait ^4.0), composer audit toujours vierge.
chore(deps): mise à jour sécurité — résout 67 avis (dont CVE-2026-114509 critique)
docs(changelog): entrée v1.0.2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📋 Description
🔗 Issue liée
Closes #
🧩 Type de changement
feat— Nouvelle fonctionnalitéfix— Correction de bugrefactor— Refactorisation (sans changement de comportement)style— Mise en forme / UI (sans logique)test— Ajout ou correction de testsdocs— Documentationchore— Maintenance, configuration, dépendances✅ Checklist
php artisan testpasse au vert)npm run build)resources/js/helpers/route.tssi une route a été crééephp artisan migrate)w-full) et respecte le design existant🧪 Tests effectués
📸 Captures d'écran (si UI)
📝 Notes pour la relecture