index.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?php
  2. require_once "libs/fnMain.php";
  3. /**************************
  4. * VALIDATION DES DONNEES
  5. **************************/
  6. $isClassementValid = isset($_GET["classement"]) && (int) $_GET["classement"] !== 0;
  7. /**************************
  8. * Affichage du formulaire
  9. **************************/
  10. ?>
  11. <!doctype html>
  12. <html lang="fr">
  13. <head>
  14. <meta charset="UTF-8">
  15. <meta name="viewport"
  16. content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  17. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  18. <title>RangLimier</title>
  19. <link rel="icon" type="image/png" href="assets/favicon.png">
  20. <link rel="stylesheet" href="assets/fonts/material-icons.min.css">
  21. <link rel="stylesheet" href="assets/bootstrap.min.css">
  22. <link rel="stylesheet" href="assets/divers.css">
  23. </head>
  24. <body>
  25. <h1>RangLimier</h1>
  26. <p>Cet outil permet, en entrant un classement (réel ou supposé), de voir les choix disponibles à ce classement. <br>
  27. <i>Attention : Cet outil est à but purement indicatif, les variations entre chaque année sont imprévisibles. Cela vous sert à avoir une vision globale des choix possible</i>
  28. </p>
  29. <form action="index.php" method="get">
  30. <label for="classement">Veuillez entrer le classement (réel ou supposé) à tester : </label> <br>
  31. <input type="text" name="classement" <?= ($isClassementValid === TRUE) ? 'value='.(int) $_GET["classement"] : "" ?>>
  32. <button type="submit" class="btn btn-info">Envoyer</button>
  33. </form>
  34. <?php if ($isClassementValid) : ?>
  35. <hr><h1>Tableau de classement</h1>
  36. <h2>Légende</h2>
  37. <table>
  38. <thead>
  39. <th colspan="5" style="text-align: center;">Légende (sur toutes les années)</th>
  40. </thead>
  41. <tbody>
  42. <tr>
  43. <td class="never-available">Jamais proposé</td>
  44. <td class="no-choice">Aucun choix</td>
  45. <td class="last-choice">Une seule année</td>
  46. <td class="half-choices">Plusieurs choix</td>
  47. <td class="all-choices">Tous les choix</td>
  48. </tr>
  49. </tbody>
  50. </table>
  51. <p>
  52. Chaque nombre dans chaque case correspond au nombre d'années où ce choix était dispo au classement rentré <br>
  53. </p>
  54. <?php
  55. $html = "<h2>Résultats</h2>";
  56. // On va récupérer tous les rangs limited dispo triés par idChoix
  57. //Mysql
  58. $reqRL = $db->query('SELECT idChoix, annee, rangLimite FROM dataset');
  59. //pgsql
  60. // $reqRL = $db->query('SELECT dataset."idChoix", annee, dataset."rangLimite" FROM dataset');
  61. $rangLimites = $reqRL->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC);
  62. // Récupération des datasets
  63. $specialityDatasetAbrev = getCsvToArrayKeyValue($_SETTINGS["datasetFolder"]."/liste_specialites_abrev.csv");
  64. $specialityDataset = getCsvToArrayKeyValue($_SETTINGS["datasetFolder"]."/liste_specialites.csv");
  65. $cityDataset = getCsvToArrayKeyValue($_SETTINGS["datasetFolder"]."/liste_villes.csv");
  66. $inputClassement = (int) $_GET["classement"];
  67. // Calcul et affichage des données
  68. // Affichage de la 1ère ligne = Titre des colonnes
  69. $html .= "<table><thead><tr><th></th>";
  70. foreach ($specialityDatasetAbrev as $specialityName) {
  71. $html .= "<th scope='col'>".$specialityName."</th>";
  72. }
  73. $html .= "</tr></thead><tbody>";
  74. // Affichage de la suite du tableau avec le calcul
  75. foreach ($cityDataset as $cityId => $cityName) {
  76. // On gère la séparation des différentes régions entre elles (représentées dans le csv villes par les lignes XX_:XX)
  77. // La notation des lignes de séparation est sous forme XX_x car si on laissait XX, la fonction getCsvToArrayKeyValue
  78. // ne retourne la position que pour la 1ère occurence de XX;XX
  79. // La manière de fix ça de manière la plus opti et sale, c'est de faire un substr et de tester les 2 premiers charactères
  80. // si ils sont égaux à XX, on fait une séparation
  81. // TODO : Faire un parseur csv qui prend en compte chaque ligne du csv dans l'ordre du fichier
  82. if (strpos($cityId, "XX") !== FALSE) {
  83. $html .= "<tr><th></th>";
  84. foreach ($specialityDatasetAbrev as $specialityName) {
  85. $html .= "<th scope='col'>".$specialityName."</th>";
  86. }
  87. $html .= "</th>";
  88. continue;
  89. }
  90. $html .= "<tr><th scope='row'>".$cityName."</th>";
  91. foreach ($specialityDatasetAbrev AS $specialityId => $specialityName) {
  92. $idChoice = "0".$cityId.$specialityId;
  93. if (!isset($rangLimites[$idChoice])) {
  94. $nbAnneePropose = 0;
  95. $nbPossibleAnneePropose = 0;
  96. } else {
  97. $nbAnneePropose = count($rangLimites[$idChoice]);
  98. $nbPossibleAnneePropose = 0;
  99. foreach ($rangLimites[$idChoice] as $rangLimite) {
  100. if ((int) $rangLimite["rangLimite"] >= $inputClassement) {$nbPossibleAnneePropose++;}
  101. }
  102. }
  103. // Affichage de la cellule
  104. $html .= "<td class=\"";
  105. switch (TRUE) {
  106. case ($nbPossibleAnneePropose === 0 && $nbAnneePropose === 0):
  107. $html .= "never-available";
  108. break;
  109. case ($nbPossibleAnneePropose === 0):
  110. $html .= "no-choice";
  111. break;
  112. case ($nbAnneePropose > $nbPossibleAnneePropose && $nbPossibleAnneePropose === 1):
  113. $html .= "last-choice";
  114. break;
  115. case ($nbAnneePropose > $nbPossibleAnneePropose && $nbPossibleAnneePropose !== 1):
  116. $html .= "half-choices";
  117. break;
  118. case ($nbAnneePropose === $nbPossibleAnneePropose):
  119. $html .= "all-choices";
  120. break;
  121. }
  122. $html .= "\">";
  123. if ($nbPossibleAnneePropose > 0) {
  124. $html .= $nbPossibleAnneePropose;
  125. } else if ($nbPossibleAnneePropose === 0 && $nbAnneePropose !== 0) {
  126. $html .= "0";
  127. }
  128. $html .= "</td>";
  129. }
  130. $html .= "</tr>";
  131. }
  132. $html .= "</tbody></table><br>";
  133. echo $html;
  134. ?>
  135. <table>
  136. </table>
  137. <?php endif;?>
  138. </body>
  139. </html>