|
|
@@ -123,7 +123,7 @@ $citySourceDataset = getCsvToArrayKeyValue($_SETTINGS["datasetFolder"]."/liste_v
|
|
|
</div>
|
|
|
</div>
|
|
|
<i>Utiliser Ctrl/Command + Clic pour (dé)sélectionner plusieurs options sur PC/Mac</i> <br>
|
|
|
- <button type="submit" class="btn btn-info rounded-pill col-sm-2" >Envoyer</button>
|
|
|
+ <button type="submit" class="btn btn-info rounded-pill col-sm-2" >Envoyer !</button>
|
|
|
</form>
|
|
|
|
|
|
<?php if ($isClassementValid) : ?>
|
|
|
@@ -149,7 +149,7 @@ $citySourceDataset = getCsvToArrayKeyValue($_SETTINGS["datasetFolder"]."/liste_v
|
|
|
|
|
|
<?php
|
|
|
// $html = "<h2>Résultats</h2>";
|
|
|
- $html = "<br><br><br>";
|
|
|
+ $html = "<br><br>";
|
|
|
|
|
|
// On va récupérer tous les rangs limited dispo triés par idChoix
|
|
|
//Mysql
|
|
|
@@ -163,13 +163,55 @@ $citySourceDataset = getCsvToArrayKeyValue($_SETTINGS["datasetFolder"]."/liste_v
|
|
|
//////////////////////////////////
|
|
|
// Calcul et affichage des données
|
|
|
//////////////////////////////////
|
|
|
- // v2. Conversion du filtre spé/ville de l'utilisateur
|
|
|
+ // v2.A Conversion du filtre spé/ville de l'utilisateur
|
|
|
// On croise l'array source de données avec les id sélectionnés via le GET (ce qui sécurise les données en plus)
|
|
|
// array_intersect_key(array_source, clés_à_garder)
|
|
|
+ // Si pas de filtre sélectionné, bah on prend toutes les spé/villes disponibles
|
|
|
$cityDataset = ($isTriVilleValid === TRUE) ? array_intersect_key($citySourceDataset, array_flip($_GET["v"])) : $citySourceDataset;
|
|
|
$specialityDatasetAbrev = ($isTriSpeValid === TRUE) ? array_intersect_key($specialitySourceDatasetAbrev, array_flip($_GET["s"])) : $specialitySourceDatasetAbrev;
|
|
|
$specialityDataset = ($isTriSpeValid === TRUE) ? array_intersect_key($specialitySourceDataset, array_flip($_GET['s'])) : $specialitySourceDataset;
|
|
|
|
|
|
+ // v2. Calcul des rangs potentiels pour chaque année simulée
|
|
|
+ // Requete sélectionnant le nombre de personnes ayant choisi avant le classement X
|
|
|
+ $sql = "SELECT idChoix, COUNT(*) as nb_perso_avant
|
|
|
+ FROM anciens_choix
|
|
|
+ WHERE classement < :classementEntre AND annee = :annee
|
|
|
+ GROUP BY idChoix";
|
|
|
+ $reqAnciensChoixPourClassementX = $db->prepare($sql);
|
|
|
+ // Requete sélectionnant le nombre total de personnes à chaque choix
|
|
|
+ $sql = "SELECT idChoix, COUNT(*) as nb_perso_total
|
|
|
+ FROM anciens_choix
|
|
|
+ WHERE annee = :annee
|
|
|
+ GROUP BY idChoix";
|
|
|
+ $reqAnciensChoixNbPostes = $db->prepare($sql);
|
|
|
+
|
|
|
+ $nbAncienChoixParAn = [];
|
|
|
+ $nbPersChoixAvant = [];
|
|
|
+ // On détermine les années simulées : 2017 à année actuelle - 1, et on récupère les données pour les gens avant ce classement
|
|
|
+ for ($annee = 2017; $annee <= (int) date("Y") - 1 ; $annee++) {
|
|
|
+ // On formate les données pour le nombre de postes avant le classement (pour l'intégrer à tous les postes après)
|
|
|
+ $reqAnciensChoixPourClassementX->execute([
|
|
|
+ "annee" => $annee,
|
|
|
+ "classementEntre" => $inputClassement
|
|
|
+ ]);
|
|
|
+ $nbChoixAnneeI = $reqAnciensChoixPourClassementX->fetchAll();
|
|
|
+ foreach ($nbChoixAnneeI as $nbPostesItem) {
|
|
|
+ $nbPersChoixAvant[$annee][$nbPostesItem['idChoix']] = $nbPostesItem['nb_perso_avant'];
|
|
|
+ }
|
|
|
+
|
|
|
+ // On formate les données pour position dans promo et nombres de postes
|
|
|
+ $reqAnciensChoixNbPostes->execute(["annee" => $annee]);
|
|
|
+ $nbPostesRaw = $reqAnciensChoixNbPostes->fetchAll();
|
|
|
+ foreach ($nbPostesRaw as $choix) {
|
|
|
+ $nbAncienChoixParAn[$choix["idChoix"]][$annee] = [
|
|
|
+ "position" => (isset ($nbPersChoixAvant[$annee][$choix['idChoix']])) ? $nbPersChoixAvant[$annee][$choix['idChoix']] + 1 : 1,
|
|
|
+ "nbPostesTotal" => $choix["nb_perso_total"]
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ unset($reqAnciensChoixNbPostes, $reqAnciensChoixPourClassementX, $nbPersChoixAvant);
|
|
|
+
|
|
|
// Affichage de la 1ère ligne = Titre des colonnes + infobulles (via BootstrapJS)
|
|
|
$html .= "<table><thead><tr><th></th>";
|
|
|
foreach ($specialityDatasetAbrev as $speId => $specialityName) {
|
|
|
@@ -197,6 +239,8 @@ $citySourceDataset = getCsvToArrayKeyValue($_SETTINGS["datasetFolder"]."/liste_v
|
|
|
$html .= "<tr><th scope='row'>".$cityName."</th>";
|
|
|
foreach ($specialityDatasetAbrev AS $specialityId => $specialityName) {
|
|
|
$idChoice = "0".$cityId.$specialityId;
|
|
|
+ $tooltip = FALSE;
|
|
|
+ $tooltipContent = "";
|
|
|
|
|
|
if (!isset($rangLimites[$idChoice])) {
|
|
|
$nbAnneePropose = 0;
|
|
|
@@ -204,13 +248,28 @@ $citySourceDataset = getCsvToArrayKeyValue($_SETTINGS["datasetFolder"]."/liste_v
|
|
|
} else {
|
|
|
$nbAnneePropose = count($rangLimites[$idChoice]);
|
|
|
$nbPossibleAnneePropose = 0;
|
|
|
+ $tooltip = TRUE; // Autorise l'insertion des données de la tooltip
|
|
|
foreach ($rangLimites[$idChoice] as $rangLimite) {
|
|
|
- if ((int) $rangLimite["rangLimite"] >= $inputClassement) {$nbPossibleAnneePropose++;}
|
|
|
+ if ((int) $rangLimite["rangLimite"] >= $inputClassement) {
|
|
|
+ $nbPossibleAnneePropose++;
|
|
|
+
|
|
|
+ // Gestion du contenu de la tooltip
|
|
|
+ if(isset($nbAncienChoixParAn[$idChoice][$rangLimite["annee"]])) { // Cas où il reste de la place
|
|
|
+ $temp = $nbAncienChoixParAn[$idChoice][$rangLimite["annee"]];
|
|
|
+ $tooltipContent .= "ECNi ".$rangLimite["annee"]." : ".$temp["position"]."/".$temp["nbPostesTotal"] ."<br>";
|
|
|
+ } else { // Cas où le choix n'a pas été pourvu (donc y'a personne dans les anciens choix)
|
|
|
+ $tooltipContent .= "ECNi ".$rangLimite["annee"]." : Non poourvu<br>";
|
|
|
+ }
|
|
|
+ } else { // Cas où le choix était impossible cette année
|
|
|
+ $tooltipContent .= "ECNi ".$rangLimite["annee"]." : Impossible. <br>";
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// Affichage de la cellule
|
|
|
- $html .= "<td class=\"";
|
|
|
+ $html .= "<td ";
|
|
|
+ $html .= ($tooltip === TRUE) ? "data-toggle='tooltip' data-placement='bottom' data-html='true' " : "";
|
|
|
+ $html .= " class=\"";
|
|
|
switch (TRUE) {
|
|
|
case ($nbPossibleAnneePropose === 0 && $nbAnneePropose === 0):
|
|
|
$html .= "never-available";
|
|
|
@@ -232,7 +291,9 @@ $citySourceDataset = getCsvToArrayKeyValue($_SETTINGS["datasetFolder"]."/liste_v
|
|
|
$html .= "all-choices";
|
|
|
break;
|
|
|
}
|
|
|
- $html .= "\">";
|
|
|
+ $html .= "\" ";
|
|
|
+ $html .= ($tooltip === TRUE) ? "title='".$tooltipContent."'" : "";
|
|
|
+ $html .= ">";
|
|
|
if ($nbPossibleAnneePropose > 0) {
|
|
|
$html .= $nbPossibleAnneePropose;
|
|
|
} else if ($nbPossibleAnneePropose === 0 && $nbAnneePropose !== 0) {
|
|
|
@@ -252,6 +313,10 @@ $citySourceDataset = getCsvToArrayKeyValue($_SETTINGS["datasetFolder"]."/liste_v
|
|
|
|
|
|
</div>
|
|
|
|
|
|
+<div style="text-align: center; font-weight: 700;">
|
|
|
+ Copyright © 2021 MH2V SAS. Tous droits réservés.
|
|
|
+</div>
|
|
|
+
|
|
|
<!-- Bootstrap core JS-->
|
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
|
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
|