Commit graph

927 commits

Author SHA1 Message Date
isUnknown
cd1b374d10 fix: corriger les erreurs sur la route /login
All checks were successful
Deploy Preprod / Build and Deploy to Preprod (push) Successful in 34s
- Échapper le @ dans les placeholders email (vue-i18n v9 interprète @ comme message linking)
- Gérer l'erreur silencieusement quand projects.json est inaccessible (user non connecté)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-04 13:48:33 +01:00
isUnknown
2d3be6d140 i18n: traduire les chaînes hardcodées restantes en anglais/français
- DateTime & Project : locale dayjs dynamique selon la langue active
- Images : bouton "Ajouter une ou plusieurs images" via t()
- ImagesEditPanel : placeholder, legend tags et bouton ajout via t()
- DynamicView : clé PHP "Autres pistes" traduite via t()
- Nouvelles clés : forms.selectTags, buttons.addSelectedImages, virtualSample.otherTracks

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-04 13:40:42 +01:00
isUnknown
059fb0e5b0 fix: guard contre les projets avec un mauvais template Kirby
All checks were successful
Deploy Preprod / Build and Deploy to Preprod (push) Successful in 32s
Projets utilisant default.txt au lieu de project.txt retournent
des Field objects au lieu de tableaux pour steps et notifications.
Ajout de Array.isArray() pour éviter que ces projets cassent
l'ensemble des notifications, avec console.error pour les identifier.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-03 17:18:50 +01:00
isUnknown
6896e558ab fix track.json route
All checks were successful
Deploy Preprod / Build and Deploy to Preprod (push) Successful in 31s
2026-03-03 15:52:20 +01:00
isUnknown
ea90f512cf feat: inversion relation User→Projects, les projets pointent vers les utilisateurs
All checks were successful
Deploy Preprod / Build and Deploy to Preprod (push) Successful in 31s
Le champ `users` est désormais sur le blueprint projet. Les blueprints
pochet/client perdent leur champ `projects`. La logique PHP (user-projects,
managers, controller, template, mark-all-read) lit project.users au lieu
de user.projects. Script de migration inclus.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 14:01:27 +01:00
isUnknown
075e511a6a plugin > analytics > chart > caption : sort alpahetically
All checks were successful
Deploy Preprod / Build and Deploy to Preprod (push) Successful in 31s
2026-03-03 13:29:02 +01:00
isUnknown
bcead4e694 analytics blueprint : disabled change title
All checks were successful
Deploy Preprod / Build and Deploy to Preprod (push) Successful in 37s
2026-03-03 13:27:23 +01:00
isUnknown
17bf3f83c4 analytics blueprint : disable panel view buttons
All checks were successful
Deploy Preprod / Build and Deploy to Preprod (push) Successful in 37s
2026-03-03 13:26:01 +01:00
isUnknown
f0652c12cd feat: toggle moyenne / pages les plus visitées sur le chart
- Ajout toggle Kirby natif au-dessus du graphique
- Moyenne : courbe agrégée unique pour toutes les pages
- Pages les + visitées : multi-courbes pour le top 10
- Toggle masqué quand un filtre par page est actif
- PHP : visitsByDayByPage inclut toutes les pages

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 13:21:22 +01:00
isUnknown
084bb46379 feat: filtre par page, multi-courbes chart, tri alphabétique options
- Ajout filtre multiselect par page(s) dans le dashboard analytics
- Chart multi-courbes par page quand aucun filtre page sélectionné
- Options de pages indépendantes du filtre page (persistent à la sélection)
- Options de pages dépendantes du filtre utilisateur
- Tracking modal-file avec format "Projet / Label" dans dialog.js
- Tri alphabétique des options du filtre par page
- Fix user list 500 error (email string, client field check)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 11:53:50 +01:00
isUnknown
de104dc7dd feat: filtre utilisateurs analytics, améliorations dashboard + autres modifs
All checks were successful
Deploy Preprod / Build and Deploy to Preprod (push) Successful in 34s
- Multiselect Kirby pour filtrer par utilisateur(s)
- Données de test alignées sur les vrais comptes
- Suppression bloc utilisateurs les plus actifs
- Route get-data supporte le filtre emails
- Améliorations UI filtres (layout dates + users)
- Autres modifs : menu, router, dialog, deploy workflow

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 11:27:27 +01:00
isUnknown
8a73da920f feat: plugin analytics avec custom field kirbyup + Chart.js
Refactoring complet du plugin analytics : remplacement de la section
avec template Vue inline par un custom field compilé avec kirbyup.
Dashboard avec KPIs, line chart Chart.js et filtres par date.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 10:33:15 +01:00
isUnknown
7371e66ec1 CI trigger
All checks were successful
Deploy Preprod / Build and Deploy to Preprod (push) Successful in 36s
2026-02-02 18:54:55 +01:00
isUnknown
de718cfd65 chore: trigger CI 2 2026-02-02 18:44:16 +01:00
isUnknown
0d49c1c185 chore: trigger CI 2026-02-02 18:41:12 +01:00
isUnknown
4bc5a95571 Style : ajustements visuels Menu.vue
- Hauteur fixe pour toggle langue
- Espacement réduit dans header

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 18:31:37 +01:00
isUnknown
82eb8d88cc Implémentation complète du multilingue FR/EN
- Installation vue-i18n v11 et création des fichiers de traduction (fr.json, en.json)
- Création store locale avec détection hiérarchique (URL > localStorage > navigator)
- Modification des routes avec préfixe /:locale? optionnel
- Toggle FR/EN dans Menu.vue avec synchronisation immédiate
- Traduction de ~200 textes dans 27 composants Vue
- Suppression des labels hardcodés en français côté backend
- Ajout route Kirby catch-all en/(:all?) pour /en/ URLs
- Helper addLocalePrefix() pour préserver locale dans liens dialogs
- Traduction pseudo-élément CSS via data attribute

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 18:31:37 +01:00
isUnknown
3af95b1d20 Refactor : renommage ClientBrief en Brief (plus générique)
- Brief.vue masque les boutons d'ajout pour extended-brief
- Éditable uniquement en back-office pour cette étape
- ClientBrief → Brief dans ProjectStep.vue

Ref #3

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 17:04:09 +01:00
isUnknown
0fb933326f Style : ajustements visuels Account.vue
All checks were successful
Deploy Preprod / Build and Deploy to Preprod (push) Successful in 30s
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-30 12:01:06 +01:00
isUnknown
89c1cb24c0 Fix persistance et format des projets masqués
All checks were successful
Deploy Preprod / Build and Deploy to Preprod (push) Successful in 29s
- Route toggle-hidden-project : utilisation collection Pages avec add/remove
  puis toArray() + encode YAML (pattern de toggle-favorite)
- Controller site.php : ->values() au lieu de ->data pour retourner
  un vrai tableau au lieu d'un objet

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-30 11:48:53 +01:00
isUnknown
30b7697c64 Ajout masquage de projets pour utilisateurs Pochet
All checks were successful
Deploy Preprod / Build and Deploy to Preprod (push) Successful in 28s
Backend :
- Blueprint pochet : champ hiddenProjects
- Route API toggle-hidden-project.php
- Controller site.php : retourne hiddenProjects + uuid dans projects

Frontend :
- Store user : hiddenProjects, visibleProjects, toggleHiddenProject()
- Store projects : filtrage automatique des projets masqués
- Store api : fonction toggleHiddenProject()
- Account.vue : section projets avec cartes horizontales + boutons toggle
  - Affichage pour Pochet (avec toggle) et Client (sans toggle)
  - Section client masquée pour Pochet

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-30 11:27:27 +01:00
isUnknown
7ca72c6d82 Extended-brief supporte maintenant images + PDF comme client-brief
All checks were successful
Deploy Preprod / Build and Deploy to Preprod (push) Successful in 28s
- Blueprint : ajout champs moodboard et description
- Kanban : utilise ClientBrief au lieu de SimpleDocument
- Validation : support extended-brief depuis PDF et page images
- Navigation : paths dynamiques basés sur step.slug

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-30 09:13:31 +01:00
isUnknown
2b5175900c Fix ordre des pistes dans virtual sample
All checks were successful
Deploy Preprod / Build and Deploy to Preprod (push) Successful in 30s
Respect de l'ordre des groupes défini dans le champ groups du panel.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-30 08:29:25 +01:00
isUnknown
f9be7fa025 fix CI
All checks were successful
Deploy Preprod / Build and Deploy to Preprod (push) Successful in 30s
2026-01-30 08:10:23 +01:00
isUnknown
78ac0940d0 config : enable panel install on production
Some checks failed
Deploy Preprod / Build and Deploy to Preprod (push) Failing after 28s
2026-01-30 08:02:50 +01:00
isUnknown
f994b1c982 Fix Forgejo CI workflows and add .gitkeep files
- Fix rsync exclusions to properly preserve accounts, cache, and sessions
- Remove tiles exclusion (not used in this project)
- Add .gitkeep files to track empty directories structure
- Update .gitignore to allow .gitkeep files

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-15 15:39:50 +01:00
isUnknown
5f214629ef CI : update
All checks were successful
Deploy Preprod / Build and Deploy to Preprod (push) Successful in 31s
2026-01-15 15:10:50 +01:00
isUnknown
2186e33b29 fix forgejo ci
All checks were successful
Deploy Preprod / Build and Deploy to Preprod (push) Successful in 31s
2026-01-15 14:59:54 +01:00
isUnknown
c2a5bd7a85 Migrate to Forgejo
Some checks failed
Deploy Preprod / Build and Deploy to Preprod (push) Failing after 1m43s
2026-01-15 14:55:27 +01:00
isUnknown
9ce8135a3b Rename to CLAUDE.md and add code preferences section
Renamed from CLAUDE_PROJECT_OVERVIEW.md to follow standard naming convention
for automatic recognition. Added section documenting code standards and
work preferences.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-15 14:10:20 +01:00
isUnknown
6b80e242b8 Fix virtual sample routing and refactor for clarity
Virtual sample variations now display correctly when loading from URL hash.
Old URLs with underscores are normalized to hyphens on load. URL hash
updates automatically when navigating between variations.

Refactored both DynamicView and Selector components with explicit function
names, removed unnecessary comments, and improved code organization.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-15 13:54:36 +01:00
isUnknown
dfb8d1038b Fix routing vers une piste spécifique avec hash
Problème : L'URL avec hash (#serumwc_lasertone_empty) n'ouvrait pas la bonne
piste/variation mais toujours la première.

Cause : Incohérence entre les underscores du hash et les tirets du slug backend.
slugify convertit les underscores en tirets, mais les slugs Kirby peuvent
varier.

Solution : Comparer le hash de 3 façons :
1. Comparaison directe
2. Hash avec underscores → tirets
3. Slug avec tirets → underscores

Cela gère tous les cas de figure.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-15 12:29:49 +01:00
isUnknown
95a8bf99cb build plugin refresh cache 2026-01-15 12:19:35 +01:00
isUnknown
378af9ac96 Fix : affichage progression dans le texte du bouton
La div en dessous ne s'affichait pas dans le panel Kirby.
La progression s'affiche maintenant directement dans le bouton :
"En cours 0%" → "En cours 20%" → "En cours 100%" → "Terminé"

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-15 12:18:33 +01:00
isUnknown
4669f03f16 Amélioration affichage progression du refresh cache
Ajout d'une ligne de texte sous le bouton pour afficher la progression :
- "Traitement : 10/50 projets (20%)" pendant le traitement
- "50 projets mis à jour avec succès" à la fin
- Tooltip aussi mis à jour avec la progression

Le bouton affiche "En cours…" et la progression détaillée est en dessous.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-15 12:13:26 +01:00
isUnknown
a57b0c203a Optimisation du refresh cache avec batch processing
Problème : Le refresh cache de tous les projets timeout côté serveur à cause
du trop grand nombre de projets à traiter en une seule requête.

Solution : Batch processing avec indicateur de progression
- Backend : traite 10 projets par batch avec offset/limit
- Frontend : fait plusieurs requêtes successives et affiche la progression
- Timeout réduit à 60s par batch au lieu de illimité
- Bouton désactivé pendant le traitement
- Ajout invalidateNotificationsCache() pour vider aussi ce cache

Affichage : "15/50 (30%)" pendant le traitement, puis "Terminé (50)"

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-15 12:08:13 +01:00
isUnknown
86db1f5a0c Fix collectLight() : inclure author, text, location pour l'affichage
Problème : collectLight() ne retournait que id/type/isRead/date, causant
notification.author undefined dans le frontend.

Solution : Inclure tous les champs nécessaires à l'affichage (author, text,
location) mais toujours alléger en excluant les gros détails inutiles.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-15 11:55:17 +01:00
isUnknown
2791bc4462 Ajout invalidation cache notifications dans hook file-update
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-15 11:42:40 +01:00
isUnknown
bb71da081b Ajout du système de cache pour les notifications
Problème : Les notifications étaient collectées à chaque requête sur
projects.json, causant des problèmes de performance et de mémoire.

Solution : Mise en cache des notifications par projet et par utilisateur
- Nouvelle méthode getNotificationsLight() dans ProjectPage avec cache
- Cache invalidé automatiquement via les hooks existants (page/file update)
- Cache par utilisateur pour inclure le isRead spécifique

Performance : Les notifications sont calculées une fois puis servies depuis
le cache jusqu'à ce qu'un changement survienne (commentaire, brief, etc.)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-15 11:42:20 +01:00
isUnknown
e73e25b1da Ajout .user.ini : augmentation limite mémoire PHP à 512M
Temporaire pour gérer le chargement des notifications de tous les projets.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-15 11:19:14 +01:00
isUnknown
0a980603a4 Ajout de collectLight() pour optimiser le chargement du listing des projets
Problème : projects.json.php causait un dépassement mémoire en collectant
toutes les notifications complètes (avec author, location, text, etc.) pour
tous les projets.

Solution : Nouvelle méthode collectLight() qui ne retourne que les données
minimales nécessaires au frontend pour afficher les indicateurs :
- id, type, isRead, date
- location.project.uri (pour le filtrage)

Les détails complets sont toujours chargés dans project.json.php individuel.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-15 11:18:59 +01:00
isUnknown
0250dc1487 Fix : problème de mémoire lors du chargement des projets
Problème : projects.json.php collectait les notifications dérivées pour TOUS
les projets d'un coup, ce qui causait un dépassement de mémoire (HTTP 500).

Solution :
- projects.json.php : Ne collecte plus les notifications (retourne [])
- project.json.php : Collecte les notifications uniquement pour le projet affiché

Les notifications seront chargées à la demande quand on ouvre un projet,
pas lors du listing initial.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-15 11:16:17 +01:00
isUnknown
f614884da0 update project overview 2026-01-15 11:03:50 +01:00
isUnknown
9d12ccb209 Fix : ne compter que les commentaires des images, pas ceux du PDF
Problème : Dans le kanban, la carte du brief client custom (Images) affichait
aussi le nombre de commentaires du PDF, alors qu'il n'y a pas de système de
commentaires pour les images du brief custom.

Solution : Filtrer pour ne compter que les commentaires des fichiers de type
'image', et non tous les fichiers du step.

Bonus : Suppression du paramètre obsolète ?step=images dans ClientBrief.vue

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-15 10:58:41 +01:00
isUnknown
cfd679bc15 Suppression des composants obsolètes Intro et ModeSelection
Ces composants faisaient partie de l'ancien système de steps du Brief
qui a été supprimé. Ils ne sont plus utilisés.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-15 10:53:50 +01:00
isUnknown
04d8da39fd Simplification : Brief.vue affiche toujours Images directement
Suppression du système de steps obsolète (Intro → ModeSelection → Images).
/client-brief affiche maintenant toujours le composant Images, sans conditions
ni paramètres d'URL (?step=images).

Les briefs avec PDF sont gérés via les dialogues uniquement.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-15 10:52:12 +01:00
isUnknown
6ff59e9b07 Fix : URL correcte pour notifications de brief validé depuis PDF + redirect briefs vides
Problème 1 : Les notifications de brief validé depuis un PDF renvoyaient vers
/projects/xxx/client-brief au lieu de l'URL complète avec dialog et fileIndex.

Problème 2 : Les URL /projects/xxx/client-brief pour des briefs non créés
affichaient une page vide au lieu de rediriger vers le kanban.

Solutions :
- Stocker validationDialogUri lors de la validation du brief
- Utiliser ce dialogUri dans ContentProvider et Notifications.vue
- Rediriger vers le projet parent si brief vide et non validé

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-15 10:44:30 +01:00
isUnknown
a7d315942a Refonte du système de notifications : passage aux notifications dérivées
Remplace le système de notifications stockées par un système de providers
qui dérivent les notifications des données existantes (commentaires, réponses,
demandes de projet, demandes de rendez-vous, validations de brief).

- Ajout du NotificationCollector et de l'interface NotificationProvider
- Création de 5 providers : Comment, Reply, ProjectRequest, AppointmentRequest, Content
- Métadonnées de notifications stockées directement sur les entités source
- Nouvelles routes mark-as-read et mark-all-read
- Mise à jour du frontend pour le nouveau système
- Route de migration pour les données existantes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 10:31:31 +01:00
isUnknown
c68b51f639 git : ignore claude settings 2026-01-14 14:55:12 +01:00
isUnknown
d7e96541a0 remove cache busting based on query string 2025-10-08 15:50:25 +02:00