<html>
<head>
<title>Phpcovid : Bargraphes de plusieurs couleurs</title>
<meta name=author content="Bernard Chardonneau">
<meta name=copyleft content="Logiciel et données publiés dans le domaine public">
<meta name=robots content="noindex,follow">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="css/misenpage.css" rel="stylesheet" type="text/css">
<link href="css/styles.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="contenu">
<h1>Bargraphes de plusieurs couleurs</h1>
<h2>Principe général</h2>
Les 4 séries de bargraphes du menu autres que celle décrite
précédemment :<br>
<ul>
<li>Général</li>
<li>Par classe d'âge (2)</li>
<li>Par région</li>
<li>Par département d'outre-mer</li>
</ul>
sont générées selon le même principe.<br>
<br>
Tout d'abord, comme pour la présentation des données sous forme de
tableaux, il est nécessaire de mettre à jour périodiquement le fichier
csv local à partir du fichier csv de référence. Pour cela, on fait
appel à la même fonction <tt>testmaj-tot.... ()</tt><br>
<br>
Les données étant présentées sous la forme de bargraphes (qui sont des
images au format BMP), ces bargraphes devront être mis à jour chaque fois
que le fichier csv local qui a permit de les générer est actualisé.<br>
<br>
Ce tableau indique pour chaque série de bargraphes quels fichiers sont
utilisés.<br>
<br>
<table border="1" cellpadding="10">
<tr align="center">
<td>Critère de tri</td><td>Fichier csv local</td>
<td>Fonction de mise à jour</td><td>Nom des bargraphes</td>
</tr>
<tr>
<td>Général</td>
<td><tt>vacsi-totgen-fra.csv</tt></td>
<td><tt>testmaj_totgen_fra ()</tt></td>
<td><tt>barre-gen-??.bmp</tt></td>
</tr>
<tr>
<td>Par classe d'âge</td>
<td><tt>vacsi-tot-a-fra.csv</tt></td>
<td><tt>testmaj_tot_a_fra ()</tt></td>
<td><tt>barre-age-??.bmp</tt></td>
</tr>
<tr>
<td>Par région</td>
<td><tt>vacsi-tot-reg.csv</tt></td>
<td><tt>testmaj_tot_reg ()</tt></td>
<td><tt>barre-reg-???.bmp</tt></td>
</tr>
<tr>
<td>Par DOM</td>
<td><tt>vacsi-tot-dom.csv</tt></td>
<td>Voir explication</td>
<td><tt>barre-dom-???.bmp</tt></td>
</tr>
</table>
<br>
Comme dans le cas de la présentation des données sous forme de tables,
le fichier <tt>vacsi-totgen-fra.csv</tt> utilise le fichier csv local
<tt>vacsi-tot-a-fra.csv</tt> pour être réactualisé. En conséquence,
la fonction <tt>testmaj_tot_a_fra ()</tt> est appelée avant
<tt>testmaj_totgen_fra ()</tt> .<br>
<br>
Si ces données redeviennent disponibles, une fonction
<tt>testmaj_tot_dom ()</tt> sera rajoutée.<br>
<br>
Chaque page web affichant plusieurs bargraphes, il faut plusieurs
images bmp dont chacune a un nom différent. C'est au niveau des ? que
diffèrent les noms des différents bargraphes d'une catégorie.<br>
<br>
À la place de ces ? on trouve :<br>
<ul>
<li>Pour les bargraphes généraux et pour ceux par classe d'âge,
un nombre à 2 chiffres qui correspond au premier champ de
la ligne du fichier csv local;</li>
<br>
<li>Pour les bargraphes par région, les 3 premières lettres
du nom de la région en minuscules;</li>
<br>
<li>Pour les bargraphes par département d'outre-mer, également
un code de 3 lettres minuscules.</li>
</ul>
Les différents bargraphes dont on aura besoin sont générés par un
programme C appelé depuis le script php.<br>
<br>
<h2>Le modèle de fichier html</h2>
Pour les 4 séries de bargraphes, le modèle de page html utilisé est
similaire.<br>
<br>
Voici le partie <body> de celui qui permet d'afficher les
bargraphes par région.<br>
!vsource exemples-code/body-bargraphe-reg.html
On peut remarquer que le contenu de la partie droite de la page web
est centré.<br>
<pre>
<div id="contenu" align="center"></pre>
Comme les bargraphes ont tous la même largeur, il n'est pas nécessaire
de recourir à une table pour les aligner d'un coté, comme c'est le cas
pour les bargraphes "Par classe d'âge (1)".<br>
<br>
Le script PHP va devoir mettre la date de l'état de vaccination à la
place de <tt>XXXDATE</tt> puis générer une série de bargraphes à la
place de la ligne contenant <tt>XXXLISTE</tt> .<br>
<h2>Le script php qui génère la page</h2>
Le début du traitement effectué par ce script est le même que pour
l'affichage des données sous la forme d'une table.<br>
<ul>
<li>on sélectionne le modèle de page html;</li>
<li>on recopie l'entête de ce fichier en remplaçant <tt>noindex</tt>
par <tt>index</tt>;</li>
<li>on continue de recopier le modèle de fichier HTML jusqu'à
l'endroit où sera le contenu de la partie droite de la page.</li>
<li>on vérifie si le fichier csv local dont on a besoin est à jour
et si nécessaire, on l'actualise.</li>
</ul>
Dans le cas du script qui affiche les bargraphes relatifs à la
vaccination par région, on commence par le code suivant :<br>
!vsource exemples-code/debut-bargraphe-reg.php
Si le fichier csv local a été mis à jour, il faut le faire aussi pour
tous les bargraphes. Pour cela, on compare la date de mise à jour de
l'un des bargraphes concernés (dans l'exemple ci dessous, le bargraphe
pour la région Occitanie) avec celle du fichier csv local.<br>
<br>
Si le fichier csv local est plus récent, on utilise la commande
<tt>exec</tt> du PHP pour lancer l'exécution du programme C
<tt>gen-serie-bargraphes</tt> auquel on passe comme paramètre le nom
du fichier csv local et le début du nom des images bmp à générer.<br>
<br>
Si l'exécution du programme C se passe mal, un affichage d'erreur est
prévu.<br>
!vsource exemples-code/gen-bargraphe-reg.php
Ensuite, on accède au fichier csv local, on récupère la date dans sa
première ligne, on la met au format jj/mm/aaaa, on l'affiche au bon
endroit et on recopie la suite du fichier HTML jusqu'à la ligne où
on rajoutera les différents bargraphes.<br>
!vsource exemples-code/recup-date.php
On est prêt pour traiter les lignes du fichier csv local qui suivent.<br>
<br>
Comme on le fait pour générer les bargraphes similaires au site officiel,
on commence par lire la première ligne du fichier csv et en extraire le
nombre de doses de vaccin :<br>
!vsource exemples-code/compte-doses-l1.php
Puis pour chacune des lignes du fichier csv local, on va :<br>
<ul>
<li>afficher le titre du bargraphe,</li>
<li>afficher les taux de vaccination pour chaque dose,</li>
<li>calculer et afficher le taux de non vaccinés.</li>
</ul>
Pour le titre du bargraphe, dans le cas des régions ou des DOM, c'est
directement le champ 0 de la ligne lue. Dans le cas des bargraphes par
classe d'âge ou à partir d'un certain âge, il y a une petite transformation
à faire qui similaire à celle réalisée pour la colonne 1 des tableaux
(voir 2 lignes plus haut dans le menu de gauche).<br>
<br>
Pour les taux de vaccination, on remplacera les points décimaux par des
virgules et on ajoutera <tt>%</tt> après la valeur numérique.<br>
!vsource exemples-code/titre-et-taux-barg.php
Il ne reste plus qu'à afficher le bon bargraphe. Le cas des bargraphes
généraux et des bargraphes par classe d'âge est le plus simple :
le champ $args [0] contient directement le code de 2 chiffres
qui apparaît dans le nom de l'image bmp à afficher.<br>
<br>
Pour les bargraphes par région, la partie variable de leur nom est
constituée pas les 3 premières lettres du nom de la région écrites
en minuscules :<br>
!vsource exemples-code/choix-bargraphe-reg.php
C'est pour les DOM que c'est le plus compliqué.
<ul>
<li>si le nom du DOM commence par "Saint" (en abrégé "ST") le code
utilisé pour le bargraphe est la lettre "s" suivie des 2 premiers
caractère du 2ème mot écrits en minuscules.</li>
<br>
<li>dans les autres cas, comme pour les régions, on prend les 3
premiers caractères du nom, qu'on met en minuscules, mais si
on y trouve un "é" (Réunion), il perd son accent.</li>
</ul>
!vsource exemples-code/choix-bargraphe-dom.php
On est en mesure d'afficher le bargraphe. Le code qui suit est celui
pour les bargraphes concernant une région.<br>
!vsource exemples-code/affiche-bargraphe.php
On peut passer à la ligne suivante du fichier csv local et recommencer le
même traitement jusqu'à ce que ce fichier ait été traité en entier.<br>
<br>
Il ne reste plus alors qu'à terminer le fichier HTML en rajoutant le
menu qui doit apparaître du coté gauche. Ce traitement est réalisé à
l'identique pour toutes les pages du site qui donnent des statistiques
de vaccination.<br>
!vsource exemples-code/ajout-menu.php
<h2>Le programme C pour générer les bargraphes</h2>
Ce point est détaillé <a href="voir.php?page=progc-gen">ici</a>.<br>
<br>
</div>
<div id="menu">
XXXMENU
</div>
</body>
</html>