Code source du fichier pages-doc/tabjour.html

<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&nbsp;:<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>&lt;body&gt;</tt> est le suivant&nbsp;:<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&nbsp;% plus
      grands)&nbsp;:<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 à&nbsp;:<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>XX&#88;MENU</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&nbsp;:<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>
      &lt;div id="contenu"&gt;</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&nbsp;(...)</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&nbsp;()</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&nbsp;()</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&nbsp;()</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&nbsp;()</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>