<html> <head> <title>Phpcovid : Tableaux de vaccination à ce jour</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>Tableaux de vaccination à ce jour</h1> Les choix du menu qui concernent les tableaux de vaccination à ce jour sont tous traités selon le même principe :<br> <ul> <li>Vérifier si le fichier csv local qui contient le données à afficher est à jour, l'actualiser si nécessaire.</li><br> <li>Récupérer la date dans le fichier csv local, la mettre au format jj/mm/aaaa et l'afficher.</li><br> <li>Lire les autres lignes du fichier csv local, mettre en forme si nécessaire l'information de la colonne 1, franciser les pourcentages de vaccination et afficher les données récupérées dans une table.</li> </ul> On va détailler le traitement pour le tableau général puis indiquer les différences pour les autres choix du menu. <br> <h2>Tableau général de la vaccination à ce jour</h2> Comme pour toutes les autres pages de ce site relatives aux statistiques de vaccination, on utilise un modèle de fichier html.<br> <br> Comme de script php qui génère cette page s'appelle <tt>tabjour.php</tt> le fichier html correspondant s'appelle <tt>tabjour.html</tt><br> <br> Le contenu de sa partie <tt><body></tt> est le suivant :<br> !vsource exemples-code/body-table-gen.html ce qui, pour la partie droite de la fenêtre du navigateur donnerait sans aucun traitement par un script PHP (mais des caractères 25 % plus grands) :<br> <br> <iframe src="exemples-code/droite-table-gen.html" width="800" height="180"></iframe><br> <br> Le travail du script php <tt>tabjour.php</tt> va consister à :<br> <ul> <li>vérifier si le fichier local <tt>vacsi-totgen-fra.csv</tt> est à jour, sinon l'actualiser</li><br> <li>récupérer la date indiquée dans ce fichier et la mettre au format jj/mm/aaaa à la place du champ <tt>XXXDATE</tt></li><br> <li>récupérer la suite du fichier csv local ligne par ligne et générer la suite de la table à la place de la ligne <tt>XXXTABLE</tt> (la suite de la table s'affichera alors en dessous de la ligne d'entête</li><br> <li>générer le menu dans la colonne de gauche à la place de <tt>XXXMENU</tt> mais ce point fera l'objet d'une explication séparée.</li> </ul> Les scripts PHP qui génèrent les pages de ce site font appels à d'autres scripts PHP parmi lesquels <tt>constantes.php</tt> où sont définis les sous répertoires du site :<br> <pre><font style="font-size:90%"> define ('DIR_CSV', "ref-csv"); // répertoires où sont stockés les fichiers csv define ('DIR_PAGES', "pages"); // répertoire des modèles de pages html </font></pre> On commence par accéder au modèle de page HTML et à recopier le début en remplaçant dans l'entête <tt>noindex</tt> par <tt>index</tt> .<br> Ainsi, les modèles de page HTML ne seront pas référencés par les moteurs de recherche alors que les vrais pages du site le seront.<br> <br> On continue de recopier le début du fichier HTML jusqu'à la ligne qui indique le début du contenu de la partie principale de la page.<br> !vsource exemples-code/acces-page-table-gen.html On remarque que l'appel de la fonction <tt>copie_jusque_chaine (...)</tt> possède un 3ème paramètre égal à 1. Ça a pour conséquence que la ligne <pre> <div id="contenu"></pre> du fichier HTML sera recopiée au lieu d'être sautée.<br> <br> On vérifie alors si le fichier <tt>vacsi-totgen-fra.csv</tt> est à jour, mais comme il dépend du fichier <tt>vacsi-tot-a-fra.csv</tt> on vérifie et actualise si nécessaire ce premier fichier d'abord.<br> <br> On peut alors accéder au fichier <tt>vacsi-totgen-fra.csv</tt><br> !vsource exemples-code/testmaj-totgen.php Si tout s'est bien passé jusque là, on récupère la date qui figure en première ligne du fichier csv local, on la met au format jj/mm/aaaa et et on l'affiche au bon endroit dans la page HTML.<br> !vsource exemples-code/copdate-totgen.php On recopie la suite du fichier HTML jusqu'à l'endroit où on doit remplir la table.<br> !vsource exemples-code/postable-totgen.php La première ligne de la table concerne la vaccination tous âges confondus. On va faire le même traitement pour toutes les lignes du fichier <tt>vacsi-totgen-fra.csv</tt><br> !vsource exemples-code/boucle-coptable-totgen.php Les autres champs de chaque ligne seront tous recopiés dans la table dans l'ordre où ils apparaissent. Le traitement fait une fois dans les fonctions <tt>testmaj_...</tt> , plus précisément par la fonction <tt>selchamps_jour (...)</tt> qu'elles appellent permet de disposer de fichier csv locaux qu'on a très peu besoin de modifier pour générer les tables et les bargraphes.<br> <br> Cependant, on veut franciser l'affichage en mettant une virgule à la place du point décimal pour les taux de vaccination qui seront suivis d'un %<br> <br> Ce traitement n'a pas été fait directement dans le fichier <tt>vacsi-totgen-fra.csv</tt> car cela aurait compliqué son analyse pour réaliser des bargraphes.<br> <br> Le premier champ de la ligne étant déjà lu, on lit la suite de la ligne et on cherche le premier point décimal.<br> <br> À partir de cet endroit de la ligne, on remplace les points par des virgules et on rajoute des % avant chaque passage au champ suivant et après le dernier champ. Le début de la ligne reste inchangé.<br> !vsource exemples-code/maj-pourcent.php Il ne reste plus qu'à générer une ligne dans la table en remplaçant les délimiteurs de champs des fichier csv ";" par les balises HTML de changement de colonne.<br> !vsource exemples-code/genligne-table.php Dans le cas (très improbable en phase d'exploitation du site) où on ne pourrait pas accéder au fichier <tt>vacsi-totgen-fra.csv</tt> on affiche le titre de la page avec une date inconnue, suivi d'un message d'erreur en rouge, et un saute l'écriture de la table.<br> !vsource exemples-code/err-acces-csvtot.php Pour finir, dans tous les cas on termine le fichier HTML en rajoutant le menu dans la partie gauche de la page. La fonction <tt>genmenu</tt> utilisée sera détaillée dans une page de documentation spécifique.<br> !vsource exemples-code/ajout-menu.php <h2>Tableau de la vaccination par classe d'âge à ce jour</h2> Pour remplir la table, le fichier csv local utilisé est <tt>vacsi-tot-a-fra.csv</tt><br> <br> On vérifie si ce fichier est à jour, et si nécessaire, on l'actualise grâce à un appel de la fonction <tt>testmaj_tot_a_fra ()</tt> <br> Ensuite, le remplissage de la table est très proche de celui réalisé pour l'état de la vaccination à ce jour à partir de certains âges.<br> <br> Pour toutes les classes d'âge jusqu'à l'avant dernière, on va afficher l'âge minimum et l'âge maximum de la classe d'âge concernée.<br> <br> Pour ça, on utilise 2 variables <tt>$agemin</tt> et <tt>$agemax</tt><br> <br> <tt>$agemax</tt> est le premier champ de la ligne lue. Chaque classe d'âge, sauf la dernière, est identifiées par un numéro représentant l'âge maximum pour cette classe.<br> <br> <tt>$agemin</tt> correspond à un an de plus que la valeur <tt>$agemax</tt> de la classe d'âge précédente. La première classe d'âge commence à <tt>0</tt>.<br> <br> Mais il y a le cas particulier de la classe d'âge notée <tt>80</tt> qui signifie "à partir de 80 ans".<br> <br> Dans la boucle qui traite les différentes lignes du fichier csv local, on commence par lire une ligne complète avant de séparer le premier champ (classe d'âge) du reste.<br> <br> Les autres traitements, notamment la francisation des nombres décimaux et le rajout de % pour les taux de vaccination s'effectuent comme pour la table général décrite en détail plus haut.<br> <br> On s'arrête après avoir traité la classe d'âge notée <tt>80</tt> . La catégorie "tous âges confondus" présent à la fin du fichier csv est donc ignorée.<br> !vsource exemples-code/table-age.php <h2>Tableau de la vaccination par département à ce jour</h2> Pour ce tableau, on utilise le fichier csv <tt>vacsi-tot-dep.csv</tt> qui est mis à jour si nécessaire par la fonction <tt>testmaj_tot_dep ()</tt> <br> Il n'y a pas de traitement particulier à effectuer pour le code du département (un numéro à 2 chiffres sauf dans le cas de la Corse) qui est affiché tel quel.<br> <br> On commence donc par lire une ligne complète du fichier csv avant de faire le même traitement pour les taux de vaccination que pour les 2 tables précédente.<br> <br> On s'arrête après avoir traité toutes les lignes du fichier <tt>vacsi-tot-dep.csv</tt><br> !vsource exemples-code/table-dep.php <h2>Tableau de la vaccination par région et par DOM à ce jour</h2> Jusqu'au début décembre 2021, la même page web présentait à la fois l'état de la vaccination à ce jour dans les régions de métropole et dans les départements d'outre-mer.<br> <br> Les données des départements d'outre-mer n'apparaissant plus ensuite dans les fichiers de référence, des choix distincts ont été mis dans le menu pour accéder séparément à l'état de la vaccination par région et par DOM.<br> <br> Pour le tableau de la vaccination par région, on utilise le fichier csv <tt>vacsi-tot-reg.csv</tt> qui est mis à jour si nécessaire par la fonction <tt>testmaj_tot_reg ()</tt><br> <br> Pour le tableau de la vaccination par DOM, on utilisé pendant 2 mois les données enregistrées dans le fichier csv <tt>vacsi-tot-dom.csv</tt> pour le 30 novembre 2021. Puis en février 2022, les données pour les DOM sont redevenues disponibles. La fonction <tt>testmaj_tot_dom ()</tt> permet de mettre à jour le fichier csv local.<br> <br> À part le nom de fichier csv local utilisé et la fonction appelée pour le mettre à jour, les fichiers PHP pour les tableaux de vaccination par département (de métropole), région et DOM sont à présent identiques.<br> <br> </div> <div id="menu"> XXXMENU </div> </body> </html>