From 012af61fb006d2915286ee0aab1a41ba3e777a60 Mon Sep 17 00:00:00 2001 From: Quentin Date: Mon, 27 Apr 2026 00:57:03 +0200 Subject: [PATCH] =?UTF-8?q?v2026.5.40=20=E2=80=94=20S=C3=A9lection=20group?= =?UTF-8?q?e=20EV=20+=20=C3=A9dition=20domaines=20+=20tri=20=C3=A9quipe=20?= =?UTF-8?q?+=20vue=20horizontale=20enrichie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Onglet Équipe : - Sélecteur de groupe EasyVista (SI-CSS, SI-EXT, …) en tête de section, détecté automatiquement à l'ouverture du panel via le ` de la page Planning EV → + source autoritative, robuste aux ajouts/renommages côté EV (un + nouveau groupe apparaît tout seul). +- ID groupe affiché en italique à côté du sélecteur (ex: + `ID groupe : 191`). +- Quand on change de groupe, la **liste d'équipe se rafraîchit + automatiquement** avec les membres du nouveau groupe (fetch live). +- **Plus de bouton "Détecter"** : tout est auto à l'ouverture de + l'onglet — détection groupes + détection membres. +- **Tri double** des techniciens : d'abord les inclus (cases cochées), + puis les exclus, et alphabétique dans chaque sous-groupe (insensible + casse/accents). Le tri se rafraîchit uniquement aux render() pour + éviter que les lignes sautent quand on coche/décoche. + +### Onglet EasyVista (panel admin) +- Refonte complète : **édition manuelle des deux domaines** EV + (interne DGNSI = `https://itsma.etat-de-vaud.ch`, externe Internet = + `https://itsma.vd.ch`). +- Bouton **💾 Enregistrer** (normalise : ajoute `https://`, retire le + trailing slash) + bouton **↺ Réinitialiser** pour revenir aux + valeurs par défaut. +- Les domaines par défaut restent codés en dur en fallback ; le + branchement effectif côté `background.js` (utiliser `cfg.evOrigins`) + sera fait dans une prochaine version après validation. + +### Onglet Statuts retiré +- Section "Statuts" supprimée du panel admin (placeholder lecture + seule, jamais utile). + +### Vue horizontale enrichie +- Chaque segment timeline d'intervention contient désormais : + - Une **barre verticale couleur catégorie** à gauche (mêmes teintes + que les `intervention-dot` de la vue classique : livraison/recup/ + remplacement/incident/rollout/réservation/autre). + - La **référence** (ex: `SYYMMDD_NNNNN`) en gras. + - La **ville** en gris muted. +- Hauteur de la timeline horizontale passée de 22px à 32px pour + laisser la place au texte. +- Fond des segments d'intervention : `--bg-elevated` neutre + bordure + 1px pour que le texte reste lisible (la couleur catégorie n'est + plus en fond plein, juste en barre gauche). +- Vue classique inchangée. + +### Coulisses (`background.js`) +- Nouveau message `detectGroups` + fonction `detectGroupsFromEV()` + qui fetche `/index.php?eventName=HelpDesk_PlanningItem` et extrait + les paires `(id, nom)` via le `` de la page Planning EV. Robuste aux ajouts/renommages côté EV. +- ID groupe affiché en italique (ex: `ID groupe : 191`). +- Refresh auto de la liste d'équipe au changement de groupe. +- Plus de bouton "Détecter" (tout est auto à l'ouverture). +- Tri double : inclus d'abord, puis exclus, alphabétique dans chaque sous-groupe. +- **Onglet EasyVista** : édition manuelle des deux domaines (interne / externe), bouton Réinitialiser, normalisation auto des URLs. +- **Onglet Statuts retiré** (placeholder lecture seule). +- **Vue horizontale enrichie** : barre verticale couleur catégorie, référence en gras, ville en gris muted, hauteur 22→32px. +- Coulisses : nouveau message `detectGroups`, fonction `detectGroupsFromEV()` côté `background.js`. `detectTeamFromEV()` accepte un groupId en argument. + +### `v2026.5.39` — Séparation Matin / Après-midi + Apparence +- Pills "MATIN" / "APRÈS-MIDI" entre les interventions +- Section Apparence (thème, taille du texte, cache, heures de la journée) +- Section À propos (version, auteur, licence) + +### `v2026.5.38` — Attribution auteur + nettoyage + observabilité +- Module `LOG` unifié + handlers globaux d'erreur +- Toggle "Logs verbeux (debug)" dans le panel admin + +### `v2026.5.37` — Refonte vue horizontale - Topbar supprimée en vue horizontale, tout passe en sidebar - User-badge + titre + bouton "Aujourd'hui" + date/heure + sélecteur + flèches + stats dans sidebar - Banderole pompier masquée (badge + barre rouge gauche conservés) diff --git a/src/background.js b/src/background.js index 2259984..e6e2eee 100644 --- a/src/background.js +++ b/src/background.js @@ -587,17 +587,26 @@ function watchReconnectTabForIamLogin(tabId) { */ async function fetchCurrentUser(origin, phpsessid) { const url = `${origin}/index.php?PHPSESSID=${encodeURIComponent(phpsessid)}`; - const resp = await fetch(url, { + // v2026.5.40 : on passe par evFetch() qui ajoute les headers Referer + + // X-Requested-With attendus par EV. Sans ça, /index.php renvoyait une + // page intermédiaire SSO sans le bloc .profile-info → user_null perpétuel. + const resp = await evFetch(url, origin, { method: "GET", - credentials: "include", headers: { "Accept": "text/html,*/*" } }); // v4.2 : cette fonction est lancée en tâche de fond au démarrage. Si la // session est expirée ou EV inaccessible, on retourne juste null — le // planning lui-même déclenchera l'écran d'erreur approprié. - if (!resp.ok) return null; + if (!resp.ok) { + LOG.warn("currentUser", "fetch /index.php non-OK", { status: resp.status }); + return null; + } const html = await resp.text(); - if (looksLikeLoginPage(html)) return null; + if (looksLikeLoginPage(html)) { + LOG.warn("currentUser", "page de login detectee — session probablement intermediaire SSO"); + return null; + } + LOG.info("currentUser", "HTML index.php recu", { taille: html.length, hasProfileInfo: /class=["']profile-info["']/.test(html) }); // v4.2.2 : patterns spécifiques à la structure EasyVista réelle du Canton // de Vaud (identifiés à partir du HTML de la page d'accueil). L'user est @@ -669,7 +678,18 @@ async function fetchCurrentUser(origin, phpsessid) { } } - if (!name && !login && !service) return null; + if (!name && !login && !service) { + // v2026.5.40 : log diagnostic pour comprendre pourquoi l'extraction echoue + LOG.warn("currentUser", "aucun nom/service/login extrait du HTML", + { + taille: html.length, + hasH5: /class=["']h5["']/.test(html), + hasProfileInfo: /class=["']profile-info["']/.test(html), + hasEvDropdown: /class=["'][^"']*ev-employee-dropdown/.test(html), + snippet: html.substring(0, 200).replace(/\s+/g, " ") + }); + return null; + } return { name, login, service }; } @@ -925,9 +945,80 @@ async function deletePlanningItem(origin, phpsessid, actionId, kind) { } // ============================================================================ -// v5.0.0 : Détection de la liste des techniciens depuis la page planning EV +// v2026.5.41 : Détection des GROUPES EasyVista (SI-CSS, SI-EXT, …) // ============================================================================ +/** + * Fetch le HTML de la page planning et extrait la liste des groupes depuis + * `… et ses