Commit graph

314 commits

Author SHA1 Message Date
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
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
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
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
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
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
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
d7e96541a0 remove cache busting based on query string 2025-10-08 15:50:25 +02:00
isUnknown
c6d973e126 CI : create specific build for preprod 2025-10-08 14:34:22 +02:00
isUnknown
3fc9d925e5 add js/css cache busting by query string 2025-10-08 12:41:07 +02:00
isUnknown
33ec908a23 merge main -> preprod 2025-10-05 17:31:53 +02:00
isUnknown
5deb07f09d #170 2025-10-02 12:42:15 +02:00
isUnknown
c11a85e7f8 vite config : ignore /local and /public/** to improve perf 2025-10-02 09:53:59 +02:00
isUnknown
ec1acc7671 CI : fix dep conflict 2025-09-24 09:32:30 +02:00
isUnknown
e185d15815 node : update vite plugin-vue 2025-09-24 09:17:59 +02:00
isUnknown
b1f7854510 refresh cache button plugin : add last cache update date and time on button title 2025-09-24 09:13:04 +02:00
isUnknown
3c9eed7804 remove refresh cache button plugin 2025-09-23 08:20:50 +02:00
isUnknown
2e0f28a13f #164 fix comment update 2025-09-23 08:20:17 +02:00
isUnknown
9a86d41254 update kirby to v5 and add refresh cache panel view button 2025-09-10 14:28:38 +02:00
isUnknown
28b99017fd update page after programmatic file remove (routes/remove-file.php) 2025-09-09 17:58:20 +02:00
isUnknown
58fbacaa52 merge dev branch 2025-09-09 17:28:45 +02:00
isUnknown
0f911a7a93 custom login : long sessions 2025-09-09 08:21:11 +02:00
isUnknown
0d8821f3a0 #156 - virtual samples : preserve views files original quality (only convert to webp) 2025-09-03 18:32:59 +02:00
isUnknown
b999d46ac6 update page after programmatic file remove (routes/remove-file.php) 2025-09-03 18:25:25 +02:00
isUnknown
603700cd98 routing : remove panel.js and its redirections 2025-09-03 17:44:23 +02:00
isUnknown
de2678d79c routing : remove panel.js and its redirections 2025-09-03 17:43:56 +02:00
isUnknown
d8fe9ad13a Merge branch 'account' into preprod 2025-09-03 11:01:27 +02:00
isUnknown
f373e4e89d custom client brief : unlock description length limit 2025-07-09 16:37:33 +02:00
isUnknown
4e2757ae3a panel : add project type 2025-06-18 18:41:42 +02:00
isUnknown
8580fead7a panel : fix hooks that refresh cache by mutualizing require 2025-06-17 12:24:17 +02:00