Tableaux d'évolution de la vaccination

Tableau d'évolution générale

Le modèle de fichier HTML et le fichier CSS

C'est le cas le plus simple. Le script PHP va afficher une table qui indique l'évolution de la vaccination pour l'ensemble de la population française, sans distinction de classe d'âge, ni tout autre critère de sélection.

C'est donc toujours le même type de table qui sera affiché.

La structure du modèle de fichier HTML utilisé est simple :
<html>

<head>
    (...)
    <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>Evolution générale de la vaccination<br>COVID 19 en France</h1>
      <br>
      <table align="center" border="1" cellpadding="5">
          <tr align="center">
              <td>Date</td><td>1ère dose</td><td>Complet</td><td>Rappel</td>
              <td>% 1 dose</td><td>% complet</td><td>% rappel</td>
          </tr>
          XXXTABLE
      </table>
      <br>
  </div>

  <div id="menu">
      XXXMENU
  </div>
</body>

</html>
      
Comme la quasi totalité des modèles de page HTML de ce site, il fait appel au fichier misenpage.css
#menu
{
    position: absolute;
    top: 0px;
    bottom: 0px;
    left: 0px;
    width: 300px;
    padding: 20px;
    line-height : 24px;
    overflow: auto;
    background-color: #D8F0FF;
}

#contenu
{
    position: absolute;
    top: 0px;
    bottom: 0px;
    left: 350px;
    right: 0px;
    padding: 10px;
    overflow: auto;
}
      
La page est découpée en 2 zones :

Le script PHP

Le script PHP va générer la partie variable du contenu de la page, c'est à dire :
Pour le menu, c'est toujours pareil. On va donc juste s'intéresser à la table.

Après avoir copié l'entête de la page HTML et s'être positionné dans la zone contenu, on vérifie si le fichier vacsi-a-fra.csv (évolution de la vaccination par classe d'âge) et les fichiers dérivés sont à jour. Si nécessaire, on les actualise par un appel de la fonction testmaj_a_fra ()

On n'a pas besoin du fichier vacsi-a-fra.csv (il servira pour générer des graphiques), mais on va utiliser une partie des données qu'il contient et qui est mémorisé dans le fichier vacsi-age-ta.csv (synthèse de l'évolution de la vaccination tous âges confondus à raison d'une information tous les 10 jours, normalement, le 1er, 11ème et 21ème jour de chaque mois, plus l'information du dernier jour disponible.
    // recopier le début de l'entête html en remplaçant noindex par index
    copmaj ($descfic, "noindex,", "index,");

    // recopier le début du fichier html jusqu'à la zone contenu
    copie_jusque_chaine ($descfic, "contenu", 1);

    // vérifier si le fichier csv à utiliser est à jour
    // l'actualiser si nécessaire
    testmaj_a_fra ();

    // construire le nom du fichier csv
    $ficcsv = DIR_CSV."/vacsi-age-ta.csv";

    // l'ouvrir en lecture
    $descscv = fopen ($ficcsv, "r");
      
Le contenu de ce fichier est presque ce qu'il faut pour générer la table. Il suffit de franciser les nombres décimaux, de rajouter des symboles % et de mettre les données au format HTML.
    // lire une ligne du fichier csv
    $ligne = trim (fgets ($descscv, LG_MAX_CSV));

    // tantque non fin de fichier
    while ($ligne)
    {
        // séparer les nombres de vaccination des taux
        $pos_point = strpos ($ligne, ".");
        $deblig = substr ($ligne, 0, $pos_point);
        $finlig = substr ($ligne, $pos_point);

        // franciser les . décimaux
        $finlig = str_replace (".", ",", $finlig);

        // rajouter les pourcentages
        $finlig = str_replace (";", " %;", $finlig)." %";

        // mettre la ligne lue au format html
        $ligne = str_replace (";", "</td><td>", $deblig.$finlig);

        // mettre la ligne au format html
        $ligne = str_replace (";", "</td><td>", $ligne);

        // générer la ligne dans la table
        echo "          <tr align=\"center\">\n";
        echo "              <td>".$ligne."</td>\n";
        echo "          </tr>\n";

        // passer à la ligne suivante du fichier csv
        $ligne = trim (fgets ($descscv, LG_MAX_CSV));
    }
      
Ce traitement est identique à celui expliqué dans la page Tableaux de vaccination à ce jour

Autres tableaux d'évolution de la vaccination

Pour les autres tableaux d'évolution de la vaccination :
Plusieurs tables seraient nécessaires pour représenter la totalité des éléments de chaque catégorie. Et comme chaque table comporte 3 lignes de plus chaque mois (sauf en ce moment pour les DOM pour lesquels 11 mois sont mémorisés), out afficher sur la même page web prendrait un grand nombre de lignes.

On a donc recours à un formulaire pour demander à l'utilisateur quelle table de la catégorie qu'il a choisi, il veut voir.

De ce fait, il va y avoir 2 cas à traiter par le script PHP

Les modèles de fichier HTML et les fichiers CSS

On va utiliser 2 modèles de fichiers HTML, un pour chaque cas.

En prenant comme exemple l'évolution de la vaccination par région, le premier modèle de fichier de nom table-evol-select-reg.html a la structure suivante :
<html>

<head>
    (...)
    <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" align="center">
      <h1>Evolution vaccination COVID 19 en France</h1>
      <font style="font-size:150%">
          <br>
          <br>
          Commencez par sélectionner une région<br>
          <br>
          <br>
      </font>
      <form action=table-evol-reg.php method=post onclick=submit()>
          <select name="reg" font style="font-size:120%">
              <option value = "">Choisir</option>
              XXXOPTIONS
          </select>
      </form>
  </div>

  <div id="menu">
      XXXMENU
  </div>
</body>

</html>
      
Il utilise les mêmes fichiers CSS que les autres pages du site et va permettre de générer une page avec en partie gauche le menu et en partie droite une liste déroulante permettant de sélectionner la région.

La liste des régions possibles sera générée par le script PHP à la place de la ligne XXXOPTIONS

La partie droite de la page aura l'aspect visuel suivant :



Une fois la région sélectionnée, une autre page est affichée selon le modèle suivant :
<html>

<head>
    (...)
    <link href="css/misenpage2.css" rel="stylesheet" type="text/css">
    <link href="css/styles.css" rel="stylesheet" type="text/css">
</head>

<body>
  <div id="barre_haut" align="center">
      <h1>Evolution vaccination COVID 19 en France</h1>
      <form action=table-evol-reg.php method=post onclick=submit()>
          Région &nbsp;
          <select name="reg" font style="font-size:120%">>
              XXXOPTIONS
          </select>
      </form>
  </div>

  <div id="contenu">
      <table align="center" border="1" cellpadding="5">
          <tr align="center">
              <td>Date</td><td>1ère dose</td><td>Complet</td><td>Rappel</td>
              <td>% 1 dose</td><td>% complet</td><td>% rappel</td>
          </tr>
          XXXTABLE
      </table>
      <br>
  </div>

  <div id="menu">
      XXXMENU
  </div>
</body>

</html>
      
Cette page comporte 3 zones :
La structure de la page étant différente, on fait appel à un autre fichier CSS : misenpage2.css
#menu
{
    position: absolute;
    top: 0px;
    bottom: 0px;
    left: 0px;
    width: 300px;
    padding: 20px;
    line-height : 25px;
    overflow: auto;
    background-color: #D8F0FF;
}

#barre_haut
{
    position: absolute;
    top: 0px;
    height: 140px;
    left: 350px;
    right: 0px;
    text-align: center;
    overflow: auto;
}

#contenu
{
    position: absolute;
    top: 130px;
    bottom: 0px;
    left: 350px;
    right: 0px;
    padding: 10px;
    overflow: auto;
}
      

Le script PHP

Nous continuons de prendre comme exemple l'évolution de la vaccination par région.

Le premier travail du script PHP consiste à vérifier si une région a déjà été sélectionnée. En fonction de la réponse, il choisira le bon modèle de fichiers HTML.
    // récupérer la région sélectionnée
    $reg = $_GET ['reg'];

    // modèle de page html (dépend si région déjà sélectionnée ou non)
    if ($reg)
        $ficpage = DIR_PAGES."/table-evol-reg.html";
    else
        $ficpage = DIR_PAGES."/table-evol-select-reg.html";
      
Ensuite, on recopie le début du fichier HTML jusqu'à l'endroit où il faut rajouter la liste d'options dans le formulaire.
    // recopier le début de l'entête html en remplaçant noindex par index
    copmaj ($descfic, "noindex,", "index,");

    // recopier le début du fichier html jusqu'au formulaire de sélection de région
    copie_jusque_option ($descfic);
      
Dans le cas des régions, on va utiliser 2 tableaux :
    // liste des codes de régions
    $liste_codereg = array ("auv", "bou", "bre", "cen", "cor", "gra", "hau",
                            "ile", "nor", "nou", "occ", "pay", "pro");

    // liste des noms de régions
    $liste_nomreg = array ("Auvergne-Rhône-Alpes", "Bourgogne-Franche-Comté", "Bretagne",
                           "Centre-Val de Loire", "Corse", "Grand Est", "Hauts-de-France",
                           "Ile-de-France", "Normandie", "Nouvelle-Aquitaine", "Occitanie",
                           "Pays de la Loire", "Provence-Alpes-Côte d’Azur");
      
Le principe est strictement le même pour les départements d'outre-mer.

Dans le cas des classes d'âge, seul le premier tableau (codes des classes d'âge sur 2 chiffres) est présent. Le texte à générer est fabriqué de la même manière que pour le tableau de vaccination par classe d'âge à ce jour :
    // récupérer une classe d'âge
    $agemax = $liste_cl_age [$indice];

    (...)

    // générer le texte associé
    if ($agemin)
    {
        if ($agemax < 80)
            echo "De ".$agemin." à ";
        else
            echo "À partir de ";
    }
    else
        echo "Jusqu'à ";

    // fin de la balise <option>
    echo $agemax." ans</option>\n";

    // âge minimal pour la classe d'âge suivante
    $agemin = $agemax + 1;
      
avec $agemin qui vaut 0 la première fois.

On va alors utiliser les deux tableaux pour générer la liste permettant de sélectionner une région (ou un DOM, ou une classe d'âge).
    // génération de la liste des régions
    for ($indice = 0; $indice < count ($liste_codereg); $indice++)
    {
        // récupérer un code de région
        $codereg = $liste_codereg [$indice];

        // générer l'option
        echo "              <option ";

        // si région précédemment choisie
        if ($reg == $codereg)
            // la sélectionner
            echo "selected ";

        // fin de la balise <option>
        echo 'value = "'.$codereg.'">'.$liste_nomreg [$indice]."</option>\n";
    }
      
Dans le cas où l'une des régions a été sélectionnée, le mot clé selected dans la ligne HTML correspondante fera que c'est le nom de cette région qui apparaîtra par défaut dans le menu déroulant.

Par exemple, si la région sélectionnée est "Bourgogne-Franche-Comté", le code HTML du menu déroulant sera :
    <select name="reg" font style="font-size:120%">>
        <option value = "auv">Auvergne-Rhône-Alpes</option>
        <option selected value = "bou">Bourgogne-Franche-Comté</option>
        <option value = "bre">Bretagne</option>
        (...)
        <option value = "pro">Provence-Alpes-Côte d’Azur</option>
    </select>
      
Ensuite, si une région a été sélectionnée, il faut afficher la table d'évolution de la vaccination. Pour cela, on commence par vérifier si les fichiers csv locaux concernés doivent être mis à jour. Puis on ouvre en lecture le fichier csv qui contient la table à afficher.
    // si une région a été sélectionnée
    if ($reg)
    {
        // recopier le début du fichier html jusqu'à la zone contenu
        copie_jusque_chaine ($descfic, "contenu", 1);

        // vérifier si les fichier csv à utiliser sont à jour
        // les actualiser si nécessaire
        testmaj_regdom ();

        // construire le nom du fichier csv
        $ficcsv = DIR_CSV."/vacsi-reg-".$reg.".csv";

        // l'ouvrir en lecture
        $descscv = fopen ($ficcsv, "r");
      
L'affichage de la table se fait strictement de la même manière que pour le tableau d'évolution générale de la vaccination (voir plus haut pour les détails).

Ensuite, qu'il y ait eu ou non une table à afficher, on termine la page HTML en générant le menu qui apparaîtra du coté gauche.