Traitement des evenements hors region

This commit is contained in:
Vincent Calame 2019-03-08 17:19:26 +01:00 committed by root
parent 63dc64d496
commit 9723834532
2 changed files with 64 additions and 17 deletions

View File

@ -108,15 +108,19 @@ function mes_balise_Repartition($tag) {
/************************************
* Travaille en deux étapes :
* - récupère la liste des régions pour construire une arborescence pays par pays
* - un pays
* - récupère les évenements et les classes
* Récupération du JSON et traitement pour regrouper par région
* Renvoie le tableau associatif repartition avec deux clés :
* - 1) Récupère les évènements et les classe par région
* - 2) Récupère la liste des pays et des régions et les affecte par pays
*
* Renvoie le tableau associatif $repartition avec deux clés :
* - total : le nombre total d'évènements
* - regions : tableau associatif avec comme clé le nom de la région et comme valeur
* le tableau des évènements
* - pays : tableau des pays
* - ailleurs : tableau des évènements qui n'ont pas été classé dans un pays
*
* Un pays est un tableau associatif avec comme clés :
* - name : le nom du pays
* - code : son code (à noter que dans le JSON envoyé par l'agenda du libre les pays se distinguent des régions par la présence d'un code)
* - sousregions : le tableau des sous-régions
* - evenementsnationaux : évènements codés au niveau du pays
*************************************/
function mes_balise_Repartition2($tag) {
if ($GLOBALS[MES]["repartition2"] != false) {
@ -131,11 +135,11 @@ function mes_balise_Repartition2($tag) {
$region_id = 0;
if (array_key_exists("region_id", $evenement)) {
$region_id = $evenement["region_id"];
}
}
if (array_key_exists("id_".$region_id, $evenementParRegionMap)) {
$evenementParRegionMap["id_".$region_id][] = $evenement;
} else {
$evenementParRegionMap["id_".$region_id] = array($evenement);
$evenementParRegionMap["id_".$region_id] = array($evenement);
}
}
$url_regions = "http://www.agendadulibre.org/regions.json";
@ -143,6 +147,7 @@ function mes_balise_Repartition2($tag) {
$json_regions = json_decode(file_get_contents($url_regions), true);
$regionCount = count($json_regions);
$paysArray = array();
$regionTraiteeMap = array();
for($i = 0; $i < $regionCount; $i++) {
$region = $json_regions[$i];
if (strlen($region['code']) > 0) {
@ -159,19 +164,37 @@ function mes_balise_Repartition2($tag) {
$sousregion["evenements"] = $evenementParRegionArray;
$total_pays += $total_region;
$total += $total_region;
$pays["sousregions"][] = $sousregion;
$pays["sousregions"][] = $sousregion;
$regionTraiteeMap["id_".$region_id] = 1;
}
}
}
if (array_key_exists("id_".$pays_id, $evenementParRegionMap)) {
$evenementNationalArray = $evenementParRegionMap["id_".$pays_id];
$total_national = count($evenementNationalArray);
$total_pays += $total_national;
$total += $total_national;
$pays["evenementsnationaux"] = $evenementNationalArray;
$regionTraiteeMap["id_".$pays_id] = 1;
}
if ($total_pays > 0) {
$paysArray[] = $pays;
}
}
}
// Vérification que toutes les régions ont été traitées, les évènements non traités sont placés « ailleurs »
$ailleursArray = array();
foreach ($evenementParRegionMap as $key => $array) {
if (!(array_key_exists($key, $regionTraiteeMap))) {
$ailleursArray = array_merge($ailleursArray, $array);
}
}
// Objet final
$repartition = array(
"total" => $total,
"pays" => $paysArray
"pays" => $paysArray,
"ailleurs" => $ailleursArray
);
$GLOBALS[MES]["repartition2"] = $repartition;
return $repartition;

View File

@ -1,16 +1,40 @@
#SET{repartition, #MES_REPARTITION2{#ENV{tag}}}
<BOUCLE_repartition(DATA){source tableau, #GET{repartition/pays}}>
<h3 class="spip">#VALEUR{name}</h3>
<BOUCLE_sousregions(DATA){source tableau, #VALEUR{sousregions}}>
<BOUCLE_sousregions(DATA){source tableau, #VALEUR{sousregions}}>
<h4 class="spip">#VALEUR{name}</h4>
<ul>
<BOUCLE_evenements(DATA) {source tableau, #VALEUR{evenements}}{par start_time}>
<BOUCLE_evenements(DATA) {source tableau, #VALEUR{evenements}}{par start_time}>
[(#SET{evt,#VALEUR})]
<li>[[(#GET{evt/start_time}|nom_jour)] (#GET{evt/start_time}|affdate_jourcourt)[ à (#GET{evt/start_time}|heures)][:(#GET{evt/start_time}|minutes)]]
<a href="http://www.agendadulibre.org/events/[(#GET{evt/id})]">[(#GET{evt/title})]</a>
à [(#GET{evt/city})]
</li>
</BOUCLE_evenements>
</BOUCLE_evenements>
</ul>
</BOUCLE_sousregions>
</BOUCLE_sousregions>
<B_evenementsnationaux>
<h4 class="spip"><em>À l'échelle nationale</em></h4>
<ul>
<BOUCLE_evenementsnationaux(DATA) {source tableau, #VALEUR{evenementsnationaux}}{par start_time}>
[(#SET{evt,#VALEUR})]
<li>[[(#GET{evt/start_time}|nom_jour)] (#GET{evt/start_time}|affdate_jourcourt)[ à (#GET{evt/start_time}|heures)][:(#GET{evt/start_time}|minutes)]]
<a href="http://www.agendadulibre.org/events/[(#GET{evt/id})]">[(#GET{evt/title})]</a>
[((#GET{evt/city}))]
</li>
</BOUCLE_evenementsnationaux>
</ul>
</B_evenementsnationaux>
</BOUCLE_repartition>
<B_ailleurs>
<h3 class="spip">Ailleurs</h3>
<ul>
<BOUCLE_ailleurs(DATA){source tableau, #GET{repartition/ailleurs}}{par start_time}>
[(#SET{evt,#VALEUR})]
<li>[[(#GET{evt/start_time}|nom_jour)] (#GET{evt/start_time}|affdate_jourcourt)[ à (#GET{evt/start_time}|heures)][:(#GET{evt/start_time}|minutes)]]
<a href="http://www.agendadulibre.org/events/[(#GET{evt/id})]">[(#GET{evt/title})]</a>
[((#GET{evt/city}))]
</li>
</BOUCLE_ailleurs>
</ul>
</B_ailleurs>