mirror of
https://github.com/JMP-MS/ASPIC.git
synced 2026-10-27 16:07:10 +00:00
V1.007 Premiers paramétrages de l'écran de fond
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 2.2 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.2 MiB |
+396
@@ -0,0 +1,396 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="fr">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>ASPIC — Écran de fond (essai)</title>
|
||||||
|
<style>
|
||||||
|
/* ecran_fond.html — 2 septembre 2026
|
||||||
|
Premier essai de l'écran de fond "bureau à l'ancienne" (voir journal de
|
||||||
|
développement, section 28, et réflexions stratégiques, section 11).
|
||||||
|
Volontairement minimal pour ce test : affichage plein écran de l'image
|
||||||
|
de référence, sans aucun objet cliquable/fonctionnel — juste de quoi
|
||||||
|
voir le rendu réel après identification, avant d'aller plus loin.
|
||||||
|
Image mise à jour le 2 septembre 2026 (soir) — nouvelle version sans
|
||||||
|
tableau en liège, recadrée par Jean-Marc lui-même après un premier essai
|
||||||
|
où le "cover" rognait le bas de l'image sur son écran (proportions
|
||||||
|
d'écran différentes du 16:9 de l'image). Passage de background-size
|
||||||
|
"cover" à "contain" à cette occasion : l'image entière reste désormais
|
||||||
|
toujours visible, quelle que soit la proportion de l'écran, quitte à
|
||||||
|
laisser une bande de la couleur du mur de part et d'autre plutôt que de
|
||||||
|
rogner — plus robuste qu'un recadrage qui ne marche que pour une
|
||||||
|
proportion d'écran précise.
|
||||||
|
Image recadrée une 2ᵉ fois (toujours le 2 septembre 2026) : Jean-Marc a
|
||||||
|
utilisé une lecture de fenêtre temporaire (affichée le temps du recadrage
|
||||||
|
puis retirée) pour recadrer directement à ses proportions d'écran
|
||||||
|
réelles — les bandes "contain" restent le filet de sécurité pour tout
|
||||||
|
autre écran, mais ne devraient plus apparaître chez lui. Nouvelle image
|
||||||
|
1024×457 : toutes les coordonnées ci-dessous ont été remesurées sur
|
||||||
|
cette version (celles mesurées sur la précédente, 1280×650, ne
|
||||||
|
s'appliquent plus). */
|
||||||
|
@font-face{
|
||||||
|
font-family:"Metro DF";
|
||||||
|
src:url('MetroDF.woff2') format('woff2'),url('MetroDF.ttf') format('truetype');
|
||||||
|
font-weight:normal;font-style:normal;font-display:swap;
|
||||||
|
}
|
||||||
|
*{box-sizing:border-box;}
|
||||||
|
html,body{
|
||||||
|
margin:0;padding:0;border:0;width:100%;height:100%;overflow:hidden;
|
||||||
|
font-family:"Segoe UI","Arial",sans-serif;
|
||||||
|
}
|
||||||
|
body{
|
||||||
|
/* Couleur échantillonnée sur le mur de la photo, pour que les bandes
|
||||||
|
laissées par "contain" (si la proportion de l'écran diffère de celle
|
||||||
|
de l'image) se fondent avec la scène plutôt que de créer un bord net. */
|
||||||
|
background:#ad580d url('ecran_fond.jpg') center center / contain no-repeat;
|
||||||
|
position:relative;
|
||||||
|
}
|
||||||
|
/* Étiquette "Contacts" sur la tranche du 1er classeur (2 septembre 2026,
|
||||||
|
essai). Positionnée en JS plutôt qu'en CSS pur : comme l'image est en
|
||||||
|
"contain", sa taille et sa position réelles à l'écran changent avec la
|
||||||
|
proportion de la fenêtre — même calcul que "background-size:contain"
|
||||||
|
refait à la main pour caler ce texte sur l'étiquette blanche, quelle
|
||||||
|
que soit la fenêtre. Coordonnées mesurées sur ecran_fond.jpg (image de
|
||||||
|
référence 1280×650) : rectangle d'étiquette à peu près x:[54,91],
|
||||||
|
y:[376,481] sur cette image. rotate(-90deg) : lecture bas → haut,
|
||||||
|
comme demandé (on tourne la tête pour lire), plutôt que haut → bas. */
|
||||||
|
#etiquette-contacts{
|
||||||
|
position:fixed;
|
||||||
|
transform:translate(-50%,-50%) rotate(-90deg);
|
||||||
|
transform-origin:center;
|
||||||
|
white-space:nowrap;
|
||||||
|
color:#2a2a2a;
|
||||||
|
font-family:"Segoe UI","Arial",sans-serif;
|
||||||
|
font-weight:600;
|
||||||
|
letter-spacing:0.03em;
|
||||||
|
pointer-events:none;
|
||||||
|
user-select:none;
|
||||||
|
}
|
||||||
|
/* Zone cliquable calée sur la tranche visible (face plate, sans le
|
||||||
|
dessus incliné) du 1er classeur — même principe de positionnement en
|
||||||
|
JS que l'étiquette ci-dessus. Pas d'habillage visuel par défaut (le
|
||||||
|
classeur photographié suffit), juste un léger éclaircissement au survol
|
||||||
|
pour signaler que c'est cliquable, en plus du curseur et de l'infobulle. */
|
||||||
|
#classeur-contacts{
|
||||||
|
position:fixed;
|
||||||
|
display:block;
|
||||||
|
box-shadow:inset 0 0 0 0 rgba(255,255,255,0);
|
||||||
|
transition:box-shadow .12s ease;
|
||||||
|
}
|
||||||
|
#classeur-contacts:hover{
|
||||||
|
box-shadow:inset 0 0 0 2px rgba(255,255,255,.7);
|
||||||
|
}
|
||||||
|
/* Chevalet en bas à droite (2 septembre 2026, essai — simplifié le même
|
||||||
|
jour à la demande de Jean-Marc) : plus que le prénom de l'utilisateur
|
||||||
|
connecté (USR_Prenom), la société retirée ("l'utilisateur la connaît
|
||||||
|
déjà"). Une seule ligne, donc plus de place pour une police nettement
|
||||||
|
plus grande — c'était le point d'origine du problème de lisibilité.
|
||||||
|
Donnée réelle de la session (preferences.php, voir script), jamais de
|
||||||
|
texte figé. Ellipsis de sécurité si un prénom venait à être long. */
|
||||||
|
#chevalet{
|
||||||
|
position:fixed;
|
||||||
|
display:flex;align-items:center;justify-content:center;
|
||||||
|
text-align:center;
|
||||||
|
color:#333;
|
||||||
|
font-family:"Segoe UI","Arial",sans-serif;
|
||||||
|
font-weight:700;
|
||||||
|
pointer-events:none;
|
||||||
|
user-select:none;
|
||||||
|
overflow:hidden;
|
||||||
|
}
|
||||||
|
#chevalet-nom{
|
||||||
|
white-space:nowrap;
|
||||||
|
max-width:100%;
|
||||||
|
overflow:hidden;
|
||||||
|
text-overflow:ellipsis;
|
||||||
|
}
|
||||||
|
/* Micro cliquable (2 septembre 2026, essai — retouché le même jour après
|
||||||
|
retour de Jean-Marc). Deux éléments distincts, superposés mais avec des
|
||||||
|
rôles différents :
|
||||||
|
- #micro-desk : la zone cliquable/survolable RÉELLE, calée sur tout le
|
||||||
|
silhouette du micro (pied, tige, corps, tête) — pas seulement la
|
||||||
|
petite tête. Corrige le souci remonté : l'infobulle ne se déclenchait
|
||||||
|
qu'en survolant précisément la petite grille du haut, zone trop
|
||||||
|
étroite pour être fiable à la souris. Invisible (pas de fond), juste
|
||||||
|
le curseur + l'infobulle (title) + le clic.
|
||||||
|
- #micro-icone : uniquement l'icône elle-même, petite, calée sur le
|
||||||
|
rond noir de la tête (voir positionner()). pointer-events:none pour
|
||||||
|
laisser passer le clic/survol vers #micro-desk en dessous. Le léger
|
||||||
|
liseré au survol (auparavant sur le bouton) est maintenant affiché
|
||||||
|
ici via le sélecteur de fratrie ~ quand #micro-desk est survolé, pour
|
||||||
|
rester visuellement au niveau de la tête plutôt qu'engober tout le
|
||||||
|
micro d'un cadre. Icônes redessinées en SVG à partir de
|
||||||
|
mic_repos.png / mic_ecoute.png (déjà utilisées pour le bouton micro
|
||||||
|
du bandeau, voir micro.js) — recolorées, sans le disque rouge
|
||||||
|
d'origine, pour se fondre dans la grille plutôt que ressortir comme
|
||||||
|
un autocollant. Fermé = glyphe micro en gris clair ; ouvert = barres
|
||||||
|
façon vu-mètre en --rouge-micro, animées (voir @keyframes) — "les
|
||||||
|
barres qui bougent" demandé par Jean-Marc. Toggle en pur JS pour ce
|
||||||
|
test : ne déclenche pas encore la reconnaissance vocale de micro.js. */
|
||||||
|
#micro-desk{
|
||||||
|
position:fixed;
|
||||||
|
border:none;background:transparent;padding:0;margin:0;
|
||||||
|
cursor:pointer;
|
||||||
|
}
|
||||||
|
#micro-icone{
|
||||||
|
position:fixed;
|
||||||
|
display:flex;align-items:center;justify-content:center;
|
||||||
|
border-radius:50%;
|
||||||
|
pointer-events:none;
|
||||||
|
box-shadow:0 0 0 0 rgba(255,255,255,0);
|
||||||
|
transition:box-shadow .12s ease;
|
||||||
|
}
|
||||||
|
#micro-desk:hover ~ #micro-icone{
|
||||||
|
box-shadow:0 0 0 3px rgba(255,255,255,.3);
|
||||||
|
}
|
||||||
|
#micro-icone svg{
|
||||||
|
width:70%;height:70%;display:block;
|
||||||
|
}
|
||||||
|
#micro-icone svg[hidden]{display:none;}
|
||||||
|
#glyphe-repos{
|
||||||
|
fill:#d9d9d3;
|
||||||
|
opacity:.92;
|
||||||
|
}
|
||||||
|
#glyphe-ecoute{
|
||||||
|
fill:#e14a5c; /* proche de --rouge-micro (#D9364B) de liste_contacts.html */
|
||||||
|
}
|
||||||
|
#glyphe-ecoute .barre{
|
||||||
|
transform-box:fill-box;
|
||||||
|
transform-origin:50% 100%;
|
||||||
|
animation:pulse-barre 1s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
#glyphe-ecoute .barre:nth-child(1){ animation-delay:-.6s; }
|
||||||
|
#glyphe-ecoute .barre:nth-child(2){ animation-delay:-.3s; }
|
||||||
|
#glyphe-ecoute .barre:nth-child(3){ animation-delay:0s; }
|
||||||
|
#glyphe-ecoute .barre:nth-child(4){ animation-delay:-.45s; }
|
||||||
|
@keyframes pulse-barre{
|
||||||
|
0%,100%{ transform:scaleY(.55); }
|
||||||
|
50%{ transform:scaleY(1); }
|
||||||
|
}
|
||||||
|
/* Numéro de version, sur le bureau. Même source que #statut-version dans
|
||||||
|
liste_contacts.html (version.php, voir commentaire de chargerVersion()
|
||||||
|
ci-dessous) : jamais de numéro figé en dur, pour rester juste même si
|
||||||
|
la version évolue sans repasser par cet écran. Repositionné le
|
||||||
|
2 septembre 2026 : plus à droite (bord droit de l'écran plutôt que
|
||||||
|
calé sur le chevalet) et plus bas, juste au-dessus de la bande claire
|
||||||
|
qui marque la tranche avant du bureau. Couleur assombrie et rendue
|
||||||
|
opaque (au lieu d'une transparence à 62%) à la demande de Jean-Marc —
|
||||||
|
reste plus sobre que les objets fonctionnels, mais plus affirmée
|
||||||
|
qu'avant. */
|
||||||
|
#version-desk{
|
||||||
|
position:fixed;
|
||||||
|
color:#3a2712;
|
||||||
|
font-family:"Segoe UI","Arial",sans-serif;
|
||||||
|
font-weight:700;
|
||||||
|
letter-spacing:0.02em;
|
||||||
|
text-align:right;
|
||||||
|
white-space:nowrap;
|
||||||
|
pointer-events:none;
|
||||||
|
user-select:none;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<a id="classeur-contacts" href="liste_contacts.html" title="Ouvrir le classeur des contacts"></a>
|
||||||
|
<div id="etiquette-contacts">Contacts</div>
|
||||||
|
<div id="chevalet">
|
||||||
|
<div id="chevalet-nom"></div>
|
||||||
|
</div>
|
||||||
|
<button id="micro-desk" type="button"></button>
|
||||||
|
<div id="micro-icone">
|
||||||
|
<svg id="glyphe-repos" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M12 14c1.66 0 3-1.34 3-3V5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3z"/>
|
||||||
|
<path d="M17 11c0 2.76-2.24 5-5 5s-5-2.24-5-5H5c0 3.53 2.61 6.43 6 6.92V21h2v-3.08c3.39-.49 6-3.39 6-6.92h-2z"/>
|
||||||
|
</svg>
|
||||||
|
<svg id="glyphe-ecoute" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" hidden>
|
||||||
|
<rect class="barre" x="2" y="14" width="3.5" height="7" rx="1"/>
|
||||||
|
<rect class="barre" x="8" y="9" width="3.5" height="12" rx="1"/>
|
||||||
|
<rect class="barre" x="14" y="4" width="3.5" height="17" rx="1"/>
|
||||||
|
<rect class="barre" x="20" y="11" width="3.5" height="10" rx="1"/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<div id="version-desk"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// Référence de l'image : 1024×457 (voir ecran_fond.jpg — 2ᵉ recadrage du
|
||||||
|
// 2 septembre 2026). Toutes les coordonnées ci-dessous sont exprimées en
|
||||||
|
// pixels de CETTE image de référence, puis converties en fraction pour
|
||||||
|
// rester calées quelle que soit la taille réelle d'affichage (voir calcul
|
||||||
|
// dans positionner()).
|
||||||
|
const IMG_W = 1024, IMG_H = 457;
|
||||||
|
// Centre de l'étiquette du 1er classeur, remesuré une 3ᵉ fois le
|
||||||
|
// 2 septembre 2026 : la mesure précédente (69) incluait par erreur
|
||||||
|
// l'étiquette du classeur bleu voisin dans le calcul du centre ligne par
|
||||||
|
// ligne (les deux étiquettes, blanches toutes les deux, se touchent
|
||||||
|
// presque et le seuil de luminosité ne les distinguait pas) — d'où un
|
||||||
|
// texte qui débordait vers la droite, dans le classeur bleu, au lieu de
|
||||||
|
// rester dans le classeur bleu-vert. Remesuré en isolant la seule
|
||||||
|
// première plage claire (x<80) sur plusieurs lignes : rectangle
|
||||||
|
// d'étiquette réel x:[44,71], y:[240,324], centre (57.5, 282).
|
||||||
|
const ETIQ_CENTRE_X_FRAC = 57.5 / IMG_W;
|
||||||
|
const ETIQ_CENTRE_Y_FRAC = 282 / IMG_H;
|
||||||
|
const ETIQ_POLICE_FRAC = 19 / IMG_W;
|
||||||
|
// Rectangle de la tranche visible du 1er classeur (face plate, sans le
|
||||||
|
// dessus incliné), mesuré sur ecran_fond.jpg : x:[37,78], y:[224,397].
|
||||||
|
const CLASSEUR_X1 = 37, CLASSEUR_X2 = 78;
|
||||||
|
const CLASSEUR_Y1 = 224, CLASSEUR_Y2 = 397;
|
||||||
|
// Rectangle de la partie blanche du chevalet, mesuré sur ecran_fond.jpg :
|
||||||
|
// x:[860,982], y:[359,394] — léger retrait (marge intérieure) pour ne pas
|
||||||
|
// coller le texte au cadre en bois.
|
||||||
|
const CHEVALET_X1 = 866, CHEVALET_X2 = 976;
|
||||||
|
const CHEVALET_Y1 = 362, CHEVALET_Y2 = 391;
|
||||||
|
// Une seule ligne désormais (prénom seul) : le chevalet est bas et
|
||||||
|
// large, la police peut être nettement plus grande qu'avant.
|
||||||
|
const CHEVALET_POLICE_FRAC = 18 / IMG_W;
|
||||||
|
// Zone cliquable/survolable du micro : tout le silhouette du micro, du
|
||||||
|
// pied à la tête (bras de la nacelle inclus), mesurée sur ecran_fond.jpg :
|
||||||
|
// x:[465,543], y:[236,406].
|
||||||
|
const MICRO_ZONE_X1 = 465, MICRO_ZONE_X2 = 543;
|
||||||
|
const MICRO_ZONE_Y1 = 236, MICRO_ZONE_Y2 = 406;
|
||||||
|
// Centre du rond noir en haut du micro (grille), pour l'icône seule —
|
||||||
|
// remonté le 2 septembre 2026 (icône perçue trop basse avec 268) : la
|
||||||
|
// pointe du dôme est à y≈242, sa partie courbe se termine vers y≈260
|
||||||
|
// avant de devenir un cylindre à largeur quasi constante (mesh) jusqu'à
|
||||||
|
// y≈308. Centre replacé dans le haut du dôme, pas dans le cylindre :
|
||||||
|
// (512, 255), diamètre réduit à ~22px pour ne pas déborder au-dessus de
|
||||||
|
// la pointe (y=242).
|
||||||
|
const ICONE_CENTRE_X = 512, ICONE_CENTRE_Y = 255;
|
||||||
|
const ICONE_TAILLE_FRAC = 22 / IMG_W;
|
||||||
|
// Coin haut-droit du texte de version (2 septembre 2026, repositionné) :
|
||||||
|
// plus près du bord droit de l'écran (1024 de large) qu'aligné sur le
|
||||||
|
// chevalet, et juste au-dessus de la bande claire de la tranche avant du
|
||||||
|
// bureau — mesurée sur ecran_fond.jpg vers y:[442,450] ; le texte est
|
||||||
|
// calé pour se terminer avant, vers y=436.
|
||||||
|
const VERSION_X = 1012, VERSION_Y = 424;
|
||||||
|
const VERSION_POLICE_FRAC = 11 / IMG_W;
|
||||||
|
|
||||||
|
function positionner() {
|
||||||
|
const vw = window.innerWidth, vh = window.innerHeight;
|
||||||
|
const ratioImg = IMG_W / IMG_H;
|
||||||
|
const ratioVp = vw / vh;
|
||||||
|
let dispW, dispH, offX, offY;
|
||||||
|
if (ratioVp > ratioImg) {
|
||||||
|
dispH = vh; dispW = dispH * ratioImg;
|
||||||
|
offX = (vw - dispW) / 2; offY = 0;
|
||||||
|
} else {
|
||||||
|
dispW = vw; dispH = dispW / ratioImg;
|
||||||
|
offX = 0; offY = (vh - dispH) / 2;
|
||||||
|
}
|
||||||
|
const etiquette = document.getElementById('etiquette-contacts');
|
||||||
|
etiquette.style.left = (offX + ETIQ_CENTRE_X_FRAC * dispW) + 'px';
|
||||||
|
etiquette.style.top = (offY + ETIQ_CENTRE_Y_FRAC * dispH) + 'px';
|
||||||
|
etiquette.style.fontSize = (ETIQ_POLICE_FRAC * dispW) + 'px';
|
||||||
|
|
||||||
|
const classeur = document.getElementById('classeur-contacts');
|
||||||
|
classeur.style.left = (offX + (CLASSEUR_X1 / IMG_W) * dispW) + 'px';
|
||||||
|
classeur.style.top = (offY + (CLASSEUR_Y1 / IMG_H) * dispH) + 'px';
|
||||||
|
classeur.style.width = (((CLASSEUR_X2 - CLASSEUR_X1) / IMG_W) * dispW) + 'px';
|
||||||
|
classeur.style.height = (((CLASSEUR_Y2 - CLASSEUR_Y1) / IMG_H) * dispH) + 'px';
|
||||||
|
|
||||||
|
const chevalet = document.getElementById('chevalet');
|
||||||
|
chevalet.style.left = (offX + (CHEVALET_X1 / IMG_W) * dispW) + 'px';
|
||||||
|
chevalet.style.top = (offY + (CHEVALET_Y1 / IMG_H) * dispH) + 'px';
|
||||||
|
chevalet.style.width = (((CHEVALET_X2 - CHEVALET_X1) / IMG_W) * dispW) + 'px';
|
||||||
|
chevalet.style.height = (((CHEVALET_Y2 - CHEVALET_Y1) / IMG_H) * dispH) + 'px';
|
||||||
|
chevalet.style.fontSize = (CHEVALET_POLICE_FRAC * dispW) + 'px';
|
||||||
|
|
||||||
|
const microDesk = document.getElementById('micro-desk');
|
||||||
|
microDesk.style.left = (offX + (MICRO_ZONE_X1 / IMG_W) * dispW) + 'px';
|
||||||
|
microDesk.style.top = (offY + (MICRO_ZONE_Y1 / IMG_H) * dispH) + 'px';
|
||||||
|
microDesk.style.width = (((MICRO_ZONE_X2 - MICRO_ZONE_X1) / IMG_W) * dispW) + 'px';
|
||||||
|
microDesk.style.height = (((MICRO_ZONE_Y2 - MICRO_ZONE_Y1) / IMG_H) * dispH) + 'px';
|
||||||
|
|
||||||
|
const microIcone = document.getElementById('micro-icone');
|
||||||
|
const iconeTaille = ICONE_TAILLE_FRAC * dispW;
|
||||||
|
microIcone.style.left = (offX + (ICONE_CENTRE_X / IMG_W) * dispW - iconeTaille / 2) + 'px';
|
||||||
|
microIcone.style.top = (offY + (ICONE_CENTRE_Y / IMG_H) * dispH - iconeTaille / 2) + 'px';
|
||||||
|
microIcone.style.width = iconeTaille + 'px';
|
||||||
|
microIcone.style.height = iconeTaille + 'px';
|
||||||
|
|
||||||
|
const versionDesk = document.getElementById('version-desk');
|
||||||
|
versionDesk.style.left = (offX + (VERSION_X / IMG_W) * dispW - 200) + 'px';
|
||||||
|
versionDesk.style.width = '200px';
|
||||||
|
versionDesk.style.top = (offY + (VERSION_Y / IMG_H) * dispH) + 'px';
|
||||||
|
versionDesk.style.fontSize = (VERSION_POLICE_FRAC * dispW) + 'px';
|
||||||
|
}
|
||||||
|
window.addEventListener('resize', positionner);
|
||||||
|
positionner();
|
||||||
|
|
||||||
|
// Bascule ouvert/fermé du micro du bureau — pur affichage pour ce test
|
||||||
|
// (icône + infobulle), ne démarre pas encore la reconnaissance vocale
|
||||||
|
// réelle de micro.js. Fermé par défaut à l'arrivée sur l'écran.
|
||||||
|
let microOuvert = false;
|
||||||
|
function appliquerEtatMicroDesk() {
|
||||||
|
const bouton = document.getElementById('micro-desk');
|
||||||
|
const glyphRepos = document.getElementById('glyphe-repos');
|
||||||
|
const glyphEcoute = document.getElementById('glyphe-ecoute');
|
||||||
|
// setAttribute/removeAttribute plutôt que la propriété .hidden : sur un
|
||||||
|
// <svg> inline, la réflexion de .hidden s'est révélée peu fiable au test
|
||||||
|
// (attribut inchangé malgré l'affectation) — passage par l'attribut DOM
|
||||||
|
// directement pour un résultat garanti.
|
||||||
|
if (microOuvert) {
|
||||||
|
glyphRepos.setAttribute('hidden', '');
|
||||||
|
glyphEcoute.removeAttribute('hidden');
|
||||||
|
bouton.title = 'Le micro est ouvert, cliquez pour le fermer';
|
||||||
|
} else {
|
||||||
|
glyphRepos.removeAttribute('hidden');
|
||||||
|
glyphEcoute.setAttribute('hidden', '');
|
||||||
|
bouton.title = 'Le micro est fermé, cliquez pour l\'ouvrir';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
document.getElementById('micro-desk').addEventListener('click', () => {
|
||||||
|
microOuvert = !microOuvert;
|
||||||
|
appliquerEtatMicroDesk();
|
||||||
|
});
|
||||||
|
appliquerEtatMicroDesk();
|
||||||
|
|
||||||
|
// Identité affichée sur le chevalet : preferences.php (voir journal
|
||||||
|
// section 22), qui renvoie USR_Prenom (ajouté le 2 septembre 2026 dans
|
||||||
|
// ASP_Users à la demande de Jean-Marc). Société retirée de l'affichage
|
||||||
|
// le même jour ("l'utilisateur la connaît déjà") — plus besoin d'aller
|
||||||
|
// chercher USR_Societe ici. Repli silencieux (mêmes principes que
|
||||||
|
// chargerPreferences()) si la session n'est pas active.
|
||||||
|
async function chargerIdentiteChevalet() {
|
||||||
|
const elNom = document.getElementById('chevalet-nom');
|
||||||
|
try {
|
||||||
|
const reponsePrefs = await fetch('preferences.php');
|
||||||
|
if (!reponsePrefs.ok) throw new Error('HTTP ' + reponsePrefs.status);
|
||||||
|
const prefs = await reponsePrefs.json();
|
||||||
|
elNom.textContent = prefs.USR_Prenom || prefs.USR_Code || '—';
|
||||||
|
} catch (erreur) {
|
||||||
|
console.error('Erreur de chargement de preferences.php (chevalet) :', erreur);
|
||||||
|
elNom.textContent = 'Prénom';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
chargerIdentiteChevalet();
|
||||||
|
|
||||||
|
// Numéro de version affiché sur le bureau : même endpoint que
|
||||||
|
// #statut-version dans liste_contacts.html (chargerVersion(), voir
|
||||||
|
// journal). Repli silencieux si non joignable (fichier hors serveur, ou
|
||||||
|
// version.php absent de ce dossier) : l'écran reste utilisable sans.
|
||||||
|
async function chargerVersionDesk() {
|
||||||
|
try {
|
||||||
|
const reponse = await fetch('version.php');
|
||||||
|
if (!reponse.ok) throw new Error('HTTP ' + reponse.status);
|
||||||
|
const data = await reponse.json();
|
||||||
|
if (data.version) document.getElementById('version-desk').textContent = data.version;
|
||||||
|
} catch (erreur) {
|
||||||
|
console.error('Erreur de chargement de version.php (bureau) :', erreur);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
chargerVersionDesk();
|
||||||
|
|
||||||
|
// Lien visible "→ Liste des tâches" retiré le 2 septembre 2026 à la
|
||||||
|
// demande de Jean-Marc. Échap conservé comme échappatoire silencieuse
|
||||||
|
// (même logique que le reste de l'appli), pour ne pas rester bloqué sur
|
||||||
|
// cet écran tant qu'il ne porte aucun objet fonctionnel.
|
||||||
|
document.addEventListener('keydown', (e) => {
|
||||||
|
if (e.key === 'Escape') {
|
||||||
|
window.location.href = 'liste_todolist.html';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 89 KiB |
+7
-6
@@ -550,12 +550,13 @@
|
|||||||
if (identifiantsValides) {
|
if (identifiantsValides) {
|
||||||
tentativesEchouees = 0;
|
tentativesEchouees = 0;
|
||||||
masquerErreur();
|
masquerErreur();
|
||||||
// Écran d'entrée post-identification : la ToDoList (nouveau, voir
|
// Écran d'entrée post-identification : essai du 2 septembre 2026,
|
||||||
// journal de développement) plutôt que la liste des contacts —
|
// écran de fond "bureau à l'ancienne" (voir journal de développement,
|
||||||
// "Gestion des contacts" reste accessible depuis le menu hamburger de
|
// section 28) à la place de la ToDoList, le temps du test. La
|
||||||
// la ToDoList. Fichier attendu dans le même dossier que celui-ci (voir
|
// ToDoList reste à un clic (lien "→ Liste des tâches" ou touche Échap
|
||||||
// journal, section 6 — continuité des fichiers entre sessions).
|
// sur ecran_fond.html) — rien n'est supprimé, juste court-circuité
|
||||||
window.location.href = 'liste_todolist.html';
|
// pour ce test. Fichier attendu dans le même dossier que celui-ci.
|
||||||
|
window.location.href = 'ecran_fond.html';
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
Décision actée en cours de session : le futur écran d'accueil d'ASPIC n'ouvrira plus directement sur la ToDoList ni sur la liste des contacts (comportement actuel depuis la V1.004), mais sur un écran de fond visuel reprenant la métaphore du "bureau à l'ancienne" — un tableau en liège avec un post-it par agent IA nommé, et un bureau sur lequel sont posés les objets/raccourcis fonctionnels de l'application.
|
Décision actée en cours de session : le futur écran d'accueil d'ASPIC n'ouvrira plus directement sur la ToDoList ni sur la liste des contacts (comportement actuel depuis la V1.004), mais sur un écran de fond visuel reprenant la métaphore du "bureau à l'ancienne" — un tableau en liège avec un post-it par agent IA nommé, et un bureau sur lequel sont posés les objets/raccourcis fonctionnels de l'application.
|
||||||
|
|
||||||
## Démarche suivie
|
## Démarche suivie (maquette graphique, Claude Design)
|
||||||
|
|
||||||
Faute de pouvoir décrire précisément la composition attendue par écrit, Jean-Marc a fourni deux croquis papier photographiés, puis plusieurs photos trouvées sur le web comme références de style (texture de liège et punaises colorées, classeurs à levier avec trou de préhension, ambiance de bureau photographiée). Une première maquette a été construite avec l'outil de canevas de design de Claude (Claude Design), publiée sous forme d'Artifact éditable — ce n'est pas un livrable de code, seulement un support visuel de travail.
|
Faute de pouvoir décrire précisément la composition attendue par écrit, Jean-Marc a fourni deux croquis papier photographiés, puis plusieurs photos trouvées sur le web comme références de style (texture de liège et punaises colorées, classeurs à levier avec trou de préhension, ambiance de bureau photographiée). Une première maquette a été construite avec l'outil de canevas de design de Claude (Claude Design), publiée sous forme d'Artifact éditable — ce n'est pas un livrable de code, seulement un support visuel de travail.
|
||||||
|
|
||||||
@@ -14,22 +14,48 @@ Une deuxième itération a corrigé la composition générale (liège en arrièr
|
|||||||
|
|
||||||
Une troisième itération, dans la même session, s'appuie sur une image trouvée par Jean-Marc (générée par l'outil DeeVid AI) qu'il a jugée très proche de ce qu'il avait en tête ("voilà ce à quoi je pensais"). Claude a reconstruit la maquette à partir de cette référence : liège et bureau réunifiés en une seule composition (le bureau occupe le premier plan sur toute la largeur, les objets hauts — classeurs, micro, boîte à archives — dépassant visuellement au-dessus de la ligne du bureau, devant le mur en liège), classeurs remis à **hauteur uniforme** (la version précédente avait des hauteurs différentes sans raison fonctionnelle, remarqué à juste titre par Jean-Marc), boîte à archives redessinée en gris avec coins métalliques et porte-étiquette, micro redessiné dans un style "micro de podcast sur pied" plus réaliste. Le logo de l'outil ayant généré l'image de référence (DeeVid AI, visible en haut à droite de la photo) n'a bien sûr pas été repris dans la maquette — utilisé uniquement comme inspiration de style, pas comme contenu.
|
Une troisième itération, dans la même session, s'appuie sur une image trouvée par Jean-Marc (générée par l'outil DeeVid AI) qu'il a jugée très proche de ce qu'il avait en tête ("voilà ce à quoi je pensais"). Claude a reconstruit la maquette à partir de cette référence : liège et bureau réunifiés en une seule composition (le bureau occupe le premier plan sur toute la largeur, les objets hauts — classeurs, micro, boîte à archives — dépassant visuellement au-dessus de la ligne du bureau, devant le mur en liège), classeurs remis à **hauteur uniforme** (la version précédente avait des hauteurs différentes sans raison fonctionnelle, remarqué à juste titre par Jean-Marc), boîte à archives redessinée en gris avec coins métalliques et porte-étiquette, micro redessiné dans un style "micro de podcast sur pied" plus réaliste. Le logo de l'outil ayant généré l'image de référence (DeeVid AI, visible en haut à droite de la photo) n'a bien sûr pas été repris dans la maquette — utilisé uniquement comme inspiration de style, pas comme contenu.
|
||||||
|
|
||||||
## Composition retenue (état à la pause du 2 septembre 2026)
|
**Composition envisagée à ce stade (maquette Claude Design, jamais codée telle quelle — voir plus bas le changement de cap) :** arrière-plan liège sur toute la largeur avec un post-it par agent actif (Viktor, Matilda, Léon, Nikita) ; bande basse bureau en bois clair avec 4 classeurs à levier ("Contacts", "Catalogue", "Affaires en cours", et un 4ᵉ "À faire" proposé par Claude, jamais confirmé), une pile d'enveloppes surmontée du logo Gmail, un agenda fermé surmonté du logo Google Agenda, un téléphone écran éteint, un micro physique à voyant pulsé, une boîte à archives. Point resté ouvert à l'issue de cette phase : garder ou non les enveloppes/Gmail, absentes de la dernière image de référence DeeVid AI mais demandées explicitement plus tôt par Jean-Marc.
|
||||||
|
|
||||||
- **Arrière-plan, sur toute la largeur** : un panneau en liège (texture générée, pas une photo), avec un post-it par agent actif (Viktor, Matilda, Léon, Nikita), couleur de fond calquée sur ce que sera le champ couleur d'`ASP_Agents` une fois la table modifiée par Jean-Marc, punaise colorée par-dessus.
|
## Changement de cap : d'une maquette stylisée à un essai fonctionnel sur photo réelle (2 septembre 2026, reprise en soirée)
|
||||||
- **Premier plan, bande basse (bureau en bois clair)** : de gauche à droite — une rangée de 4 classeurs à levier à hauteur uniforme, un par grande section fonctionnelle de l'application (étiquettes actuelles : "Contacts", "Catalogue", "Affaires en cours", et un 4ᵉ "À faire" ajouté par Claude à titre d'hypothèse, **à confirmer**), avec infobulle au survol de chaque classeur ; une pile d'enveloppes surmontée du logo Gmail ; un agenda fermé (façon carnet en cuir) surmonté du logo Google Agenda ; un téléphone portable posé écran éteint (explicitement demandé : **pas d'écran d'ordinateur/laptop représenté**) ; un micro **physique** sur pied (pas une icône plate), avec un voyant rouge qui pulse en continu pour signifier qu'il est actif — clic prévu pour ouvrir la fonctionnalité déjà existante de pilotage vocal ; une boîte à archives grise avec coins métalliques et porte-étiquette.
|
|
||||||
|
À la reprise, Jean-Marc a mis de côté la maquette liège/post-its ci-dessus (non tranchée, non codée) au profit d'une approche plus directe pour un premier essai réel : une **photo** de scène de bureau (classeurs à levier colorés, micro de studio sur pied, carnet, téléphone, chevalet nominatif), qu'il a lui-même fournie, recadrée puis re-recadrée à deux reprises à ses propres proportions d'écran (image finale **1024×457**, `ecran_fond.jpg`). Ce choix remplace, pour ce premier essai, la voie "maquette Claude Design + post-its par agent" — cette dernière n'est pas abandonnée sur le fond (elle reste une piste pour une version plus élaborée), mais l'essai en cours ne s'appuie plus dessus.
|
||||||
|
|
||||||
|
**Objectif de ce test, explicitement cadré par Jean-Marc dès le départ : "c'est juste un test"** — comprendre le rendu réel après identification, avant d'aller plus loin, pas un livrable final. Nouvel écran `ecran_fond.html`, affiché en plein écran juste après l'identification (redirection modifiée dans `identification.html`, qui pointait auparavant vers `liste_todolist.html`).
|
||||||
|
|
||||||
|
### Choix techniques retenus
|
||||||
|
|
||||||
|
- **`background-size:contain`, pas `cover`.** Premier essai en `cover` : sur l'écran réel de Jean-Marc (proportions différentes de l'image), le bas de l'image était rogné. Passage à `contain` : l'image entière reste toujours visible quelle que soit la proportion d'écran, quitte à laisser une bande de la couleur du mur (échantillonnée sur la photo) de part et d'autre plutôt que de rogner.
|
||||||
|
- **Système de coordonnées calé sur l'image de référence.** Chaque élément cliquable/affiché est positionné en pixels de l'image de référence (`IMG_W`/`IMG_H`, constantes en tête de script), puis converti en position/taille réelle à l'écran par une fonction `positionner()` qui refait à la main le calcul de `background-size:contain` (comparaison du ratio image/fenêtre, calcul de la zone réellement affichée et des bandes vides). Appelée au chargement et à chaque redimensionnement. Ce pattern est appelé à être réutilisé pour tout futur objet ajouté sur ce bureau.
|
||||||
|
- **Zone cliquable large, séparée de l'icône visuelle précisément positionnée** (cas du micro, voir plus bas) : un premier essai avec une seule zone cliquable de la taille de l'icône s'est révélé trop étroit à l'usage réel (infobulle qui ne se déclenchait qu'en survolant précisément quelques pixels) — le pattern retenu sépare un grand bouton invisible (toute la silhouette de l'objet, pour le survol/clic/infobulle) d'un petit élément visuel `pointer-events:none` posé par-dessus, calé sur le détail précis à afficher (ici le rond noir du micro), reliés par un sélecteur de fratrie CSS (`~`) pour l'effet visuel au survol.
|
||||||
|
- **Aucune donnée figée en dur** : tout ce qui s'affiche vient d'un endpoint PHP réel de la session en cours (`preferences.php`, `version.php`), jamais de texte statique.
|
||||||
|
|
||||||
|
### Éléments livrés dans ce test
|
||||||
|
|
||||||
|
- **Classeur "Contacts" cliquable.** Zone calée sur la tranche visible (face plate) du premier classeur (bleu-vert sur la photo), lien vers `liste_contacts.html`, infobulle "Ouvrir le classeur des contacts", léger liseré blanc au survol.
|
||||||
|
- **Étiquette "Contacts" sur la tranche**, texte tourné (`rotate(-90deg)`, lecture bas → haut, comme demandé — "il faudra tourner la tête sur le côté pour le lire"). Centrage horizontal corrigé à deux reprises après retours de Jean-Marc : une première mesure (encadrement min/max brut des pixels clairs) donnait un centre décalé ; une deuxième mesure par moyenne ligne par ligne a **mélangé par erreur l'étiquette du classeur voisin** (bleu), collée visuellement à celle du classeur "Contacts" — d'où un texte qui débordait cette fois dans le mauvais sens, vers le classeur voisin. Centrage définitif obtenu en isolant la seule plage claire du classeur "Contacts" (x < 80 sur l'image de référence) sur plusieurs lignes avant d'en prendre le centre. **Point de méthode à garder pour la suite** : sur cette photo, deux étiquettes voisines ont une couleur de fond quasi identique (blanc/gris clair) — toute mesure automatique par simple seuil de luminosité doit borner la zone de recherche à l'objet visé, sous peine de capter l'objet d'à côté.
|
||||||
|
- **Chevalet nominatif** (en bas à droite du bureau) : affiche le prénom de l'utilisateur connecté (`USR_Prenom`, nouvelle colonne ajoutée par Jean-Marc à `ASP_Users`, exposée par `preferences.php`). Une seule ligne (le nom de la société, initialement envisagé en 2ᵉ ligne, retiré à la demande de Jean-Marc — "l'utilisateur la connaît déjà"), ellipsis de sécurité si le prénom est long.
|
||||||
|
- **Micro cliquable**, icône logée dans le rond noir de la grille du micro photographié. Bascule ouvert/fermé au clic (test d'affichage seulement — ne déclenche pas encore la reconnaissance vocale réelle de `micro.js`) : fermé = glyphe micro gris clair, infobulle "Le micro est fermé, cliquez pour l'ouvrir" ; ouvert = barres façon vu-mètre animées en rouge (couleur proche de `--rouge-micro` de `liste_contacts.html`), infobulle "Le micro est ouvert, cliquez pour le fermer". Icônes redessinées en SVG à partir de `mic_repos.png`/`mic_ecoute.png` (déjà utilisées pour le bouton micro du bandeau). Position verticale de l'icône ajustée après retour de Jean-Marc ("icônes trop basses") par mesure précise du profil de la calotte du micro sur la photo (pointe du dôme, puis passage à un cylindre à largeur constante) pour recentrer l'icône dans la partie haute du dôme sans déborder au-dessus.
|
||||||
|
- **Numéro de version affiché sur le bureau**, même source que `#statut-version` de `liste_contacts.html` (`version.php`). Couleur et position ajustées après retour de Jean-Marc : couleur assombrie et rendue opaque (au lieu d'une transparence à 62 %), texte en gras, repositionné bord droit de l'écran, juste au-dessus de la bande claire de la tranche avant du bureau.
|
||||||
|
- **Touche Échap** conservée comme échappatoire silencieuse vers `liste_todolist.html`, le temps que cet écran ne porte pas encore d'objet fonctionnel complet.
|
||||||
|
- **Version applicative incrémentée à `V1.007`** pour l'ensemble de ce lot (première modification livrée dans cette étape du travail).
|
||||||
|
|
||||||
|
### Fichiers touchés
|
||||||
|
|
||||||
|
`identification.html` (redirection post-connexion), `ecran_fond.html` (nouveau), `ecran_fond.jpg` (nouveau, image de référence 1024×457 fournie et recadrée par Jean-Marc), `preferences.php` (ajout de `USR_Prenom` en lecture), `version.php` (`V1.007`). Côté base : colonne `USR_Prenom` ajoutée à `ASP_Users` par Jean-Marc directement (voir convention actée en tête de journal sur les exports SQL transmis).
|
||||||
|
|
||||||
## Point ouvert, non tranché
|
## Point ouvert, non tranché
|
||||||
|
|
||||||
La dernière image de référence apportée par Jean-Marc (photo DeeVid AI) ne montre pas d'enveloppes ni de logo Gmail — uniquement classeurs, agenda, téléphone, micro et boîte à archives. Claude a choisi de **conserver** les enveloppes/Gmail dans la reconstruction, cet élément ayant été demandé explicitement par Jean-Marc plus tôt dans la session (indépendamment du style visuel de la référence). **À trancher à la prochaine session** : les garder, ou les retirer pour rester au plus près de l'image de référence.
|
- La question enveloppes/Gmail (voir plus haut) portait sur la maquette liège/post-its, mise de côté par le changement de cap ci-dessus — à retrancher le jour où cette piste sera reprise, pas urgent pour l'essai en cours.
|
||||||
|
- Confirmer un jour le libellé du 4ᵉ classeur envisagé dans la maquette liège ("À faire" / ToDoList) — question qui ne se pose plus dans l'immédiat : l'essai en cours n'a pour l'instant qu'un seul classeur fonctionnel ("Contacts").
|
||||||
|
- **Nouveau (2 septembre 2026, remonté par Jean-Marc) : la "tranche du bureau" (bord avant du plan de travail, en bas de l'image) n'est pas visible à l'écran chez lui.** Jean-Marc précise que ça ne le gêne pas dans l'immédiat, mais que ça pourrait poser problème plus tard — à revoir un jour. Cause non investiguée à ce stade (a priori liée à la proportion réelle de son écran par rapport à l'image, malgré le passage en `background-size:contain` qui garantit que l'image entière reste visible — reste à vérifier si la bande en question est simplement hors du cadre visible dans son cas, ou une autre cause).
|
||||||
|
|
||||||
## Statut et suite
|
## Statut et suite
|
||||||
|
|
||||||
**Session close pour la journée à la demande de Jean-Marc (2 septembre 2026 au soir)**, sans blocage particulier — juste une fin de journée de travail. Contrairement à ce qui avait été envisagé un peu plus tôt dans la session (attendre qu'une connaissance de Jean-Marc produise une meilleure représentation visuelle avant de reprendre), Jean-Marc a finalement trouvé lui-même une image de référence suffisamment proche pour permettre une nouvelle itération dans la foulée, dans la même session. **Aucun développement de code engagé à ce stade** — uniquement une maquette graphique exploratoire, aucun impact sur l'écran d'accueil actuellement en production (ToDoList).
|
**Essai fonctionnel en cours de test réel par Jean-Marc, sur son environnement de développement** (redirection post-identification vers `ecran_fond.html`, activée). Plusieurs allers-retours de correction fine déjà effectués dans la session (centrage de l'étiquette, position de l'icône micro, couleur/position du numéro de version) à partir des retours directs de Jean-Marc sur son propre écran — plusieurs points ont nécessité plus d'une itération, la mesure de position sur une photo réelle (plutôt que sur un dessin vectoriel) demandant une vérification fine à chaque retour. Fin de session actée le 2 septembre 2026 à la demande de Jean-Marc (changement de fenêtre de conversation) — pas de blocage, juste une pause volontaire.
|
||||||
|
|
||||||
**Reste à faire, noté au passage :**
|
**Reste à faire, noté au passage :**
|
||||||
- Trancher le point ouvert : conserver ou retirer les enveloppes/logo Gmail.
|
- Revoir un jour le sujet de la "tranche du bureau" non visible chez Jean-Marc (voir ci-dessus).
|
||||||
- Confirmer le libellé du 4ᵉ classeur (hypothèse actuelle : "À faire" / ToDoList).
|
- Décider si les autres objets photographiés sur le bureau (carnet, téléphone) doivent devenir cliquables/fonctionnels dans une prochaine étape, ou rester un habillage visuel statique pour l'instant.
|
||||||
- Une fois le champ couleur ajouté à `ASP_Agents` par Jean-Marc, faire correspondre exactement les couleurs de la maquette à celles réellement choisies en base.
|
- Brancher réellement le micro du bureau sur la reconnaissance vocale de `micro.js` (aujourd'hui : bascule d'affichage seule, sans effet sur l'écoute réelle).
|
||||||
- Décider si les icônes/objets du bureau (micro, téléphone, agenda, enveloppes, classeurs) doivent devenir réellement cliquables/fonctionnels dans une deuxième étape, ou rester d'abord un habillage visuel statique.
|
- Trancher, un jour, le sort de la piste "maquette liège + post-its par agent" (Claude Design) : abandonnée pour cet essai, mais pas explicitement enterrée pour une version plus aboutie.
|
||||||
- Artifact de travail (maquette éditable, dernière version) : https://claude.ai/code/artifact/a647369f-d320-4b21-9f8c-11b20f2ad353 — lien privé à Jean-Marc, à ne pas considérer comme un livrable définitif.
|
- Artifact de travail de la maquette liège (dernière version, non utilisée dans l'essai actuel) : https://claude.ai/code/artifact/a647369f-d320-4b21-9f8c-11b20f2ad353 — lien privé à Jean-Marc, à ne pas considérer comme un livrable définitif.
|
||||||
|
|||||||
+7
-3
@@ -13,8 +13,11 @@
|
|||||||
* REA_CodeUser dans realisations.php (voir journal, section 15) — impossible
|
* REA_CodeUser dans realisations.php (voir journal, section 15) — impossible
|
||||||
* pour un utilisateur de lire ou modifier les préférences d'un autre.
|
* pour un utilisateur de lire ou modifier les préférences d'un autre.
|
||||||
*
|
*
|
||||||
* GET : renvoie les deux ratios (0-100), USR_Code et USR_Societe (peut être
|
* GET : renvoie les deux ratios (0-100), USR_Code, USR_Prenom et USR_Societe
|
||||||
* null si non renseignée) de l'utilisateur connecté.
|
* (USR_Societe peut être null si non renseignée) de l'utilisateur
|
||||||
|
* connecté. USR_Prenom ajouté le 2 septembre 2026 pour l'écran de
|
||||||
|
* fond (voir journal, section 28) — affichage plus lisible sur le
|
||||||
|
* chevalet que USR_Nom (nom complet), qui n'y tenait pas.
|
||||||
* PUT : met à jour un ou plusieurs ratios (0-100 uniquement, whitelist des
|
* PUT : met à jour un ou plusieurs ratios (0-100 uniquement, whitelist des
|
||||||
* colonnes acceptées — voir CHAMPS_RATIO). USR_Societe n'est pas
|
* colonnes acceptées — voir CHAMPS_RATIO). USR_Societe n'est pas
|
||||||
* modifiable depuis ce formulaire (donnée gérée à la main en base,
|
* modifiable depuis ce formulaire (donnée gérée à la main en base,
|
||||||
@@ -50,7 +53,7 @@ try {
|
|||||||
switch ($method) {
|
switch ($method) {
|
||||||
case 'GET':
|
case 'GET':
|
||||||
$stmt = $pdo->prepare(
|
$stmt = $pdo->prepare(
|
||||||
'SELECT USR_Code, USR_Societe, USR_RatioPanneauContact, USR_RatioPanneauProspect FROM ASP_Users WHERE USR_Code = ?'
|
'SELECT USR_Code, USR_Prenom, USR_Societe, USR_RatioPanneauContact, USR_RatioPanneauProspect FROM ASP_Users WHERE USR_Code = ?'
|
||||||
);
|
);
|
||||||
$stmt->execute([$_SESSION['USR_Code']]);
|
$stmt->execute([$_SESSION['USR_Code']]);
|
||||||
$ligne = $stmt->fetch();
|
$ligne = $stmt->fetch();
|
||||||
@@ -61,6 +64,7 @@ try {
|
|||||||
}
|
}
|
||||||
echo json_encode([
|
echo json_encode([
|
||||||
'USR_Code' => $ligne['USR_Code'],
|
'USR_Code' => $ligne['USR_Code'],
|
||||||
|
'USR_Prenom' => $ligne['USR_Prenom'],
|
||||||
'USR_Societe' => $ligne['USR_Societe'],
|
'USR_Societe' => $ligne['USR_Societe'],
|
||||||
'USR_RatioPanneauContact' => (int)$ligne['USR_RatioPanneauContact'],
|
'USR_RatioPanneauContact' => (int)$ligne['USR_RatioPanneauContact'],
|
||||||
'USR_RatioPanneauProspect' => (int)$ligne['USR_RatioPanneauProspect'],
|
'USR_RatioPanneauProspect' => (int)$ligne['USR_RatioPanneauProspect'],
|
||||||
|
|||||||
+1
-1
@@ -24,7 +24,7 @@
|
|||||||
* d'identification, avant toute connexion.
|
* d'identification, avant toute connexion.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const ASPIC_VERSION = 'V1.006';
|
const ASPIC_VERSION = 'V1.007';
|
||||||
|
|
||||||
if (basename($_SERVER['SCRIPT_NAME']) === 'version.php') {
|
if (basename($_SERVER['SCRIPT_NAME']) === 'version.php') {
|
||||||
header('Content-Type: application/json; charset=utf-8');
|
header('Content-Type: application/json; charset=utf-8');
|
||||||
|
|||||||
Reference in New Issue
Block a user