libreenfete-squelettes/mes_fonctions.php

186 lines
6.2 KiB
PHP
Raw Normal View History

2017-01-09 10:47:45 +01:00
<?php
/**
* Created by PhpStorm.
* User: declic3000
* Date: 26/11/16
* Time: 11:36
*/
function balise_LISTE_REGIONS ($p) {
$p->code = "liste_regions()";
return $p;
}
function liste_regions(){
$tab_regions=array(
'3'=>"Auvergne-Rhône-Alpes",
'5'=>"Bourgogne-Franche-Comté",
'6'=>"Bretagne",
'7'=>"Centre-Val de Loire",
'9'=>"Corse",
'1'=>"Grand Est",
'23'=>"Guadeloupe",
'24'=>"Guyane",
'17'=>"Hauts-de-France",
'12'=>"Île-de-France",
'26'=>"La Réunion",
'25'=>"Martinique",
'28'=>"Mayotte",
'4'=>"Normandie",
'2'=>"Nouvelle-Aquitaine",
'13'=>"Occitanie",
'18'=>"Pays de la Loire",
'21'=>"Provence-Alpes-Côte d'Azur",
'27'=>"Autre pays" );
return $tab_regions;
}
/**********************************
* Le préfixe MES identifie les éléments
* défini dans ce fichier mes_fonctions.php
***********************************/
define("MES", "MES");
$GLOBALS[MES] = array("repartition" => false, "repartition2" => false);
/************************************
* Balise récupérant les évènements répartis par région
*************************************/
function balise_MES_REPARTITION($p) {
$tag = "";
if (($v = interprete_argument_balise(1,$p))!==NULL){
$tag = $v;
}
$p->code = "mes_balise_Repartition($tag)";
return $p;
}
/************************************
* Balise récupérant les évènements répartis par pays et par région
*************************************/
function balise_MES_REPARTITION2($p) {
$tag = "";
if (($v = interprete_argument_balise(1,$p))!==NULL){
$tag = $v;
}
$p->code = "mes_balise_Repartition2($tag)";
return $p;
}
/************************************
* Récupération du JSON et traitement pour regrouper par région
* 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
*************************************/
function mes_balise_Repartition($tag) {
if ($GLOBALS[MES]["repartition"] != false) {
return $GLOBALS[MES]["repartition"];
}
$url = 'http://www.agendadulibre.org/maps.json?future=false&tag='.$tag;
$json = json_decode(file_get_contents($url), true);
$evenementCount = count($json);
$regionMap = array();
for($i = 0; $i < $evenementCount; $i++) {
$evenement = $json[$i];
$region = "Autre";
if (array_key_exists("region", $evenement["properties"])) {
$region = $evenement["properties"]["region"];
}
if (array_key_exists($region, $regionMap)) {
$regionMap[$region][] = $evenement;
} else {
$regionMap[$region] = array($evenement);
}
}
uksort($regionMap, "mes_compare");
$repartition = array(
"total" => $evenementCount,
"regions" => $regionMap
);
$GLOBALS[MES]["repartition"] = $repartition;
return $repartition;
}
/************************************
* 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 :
* - 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
*************************************/
function mes_balise_Repartition2($tag) {
if ($GLOBALS[MES]["repartition2"] != false) {
return $GLOBALS[MES]["repartition2"];
}
2018-03-18 18:51:53 +01:00
$url_evenements = 'http://www.agendadulibre.org/maps.json?future=false&tag='.$tag;
$evenementArray = json_decode(file_get_contents($url_evenements), true);
$evenementCount = count($evenementArray);
$evenementParRegionMap = array();
for($i = 0; $i < $evenementCount; $i++) {
$evenement = $evenementArray[$i];
$region_id = 0;
if (array_key_exists("region", $evenement["properties"])) {
$region_id = $evenement["properties"]["region_id"];
}
if (array_key_exists("id_".$region_id, $evenementParRegionMap)) {
$evenementParRegionMap["id_".$region_id][] = $evenement;
} else {
$evenementParRegionMap["id_".$region_id] = array($evenement);
}
}
$url_regions = "http://www.agendadulibre.org/regions.json";
$total = 0;
$json_regions = json_decode(file_get_contents($url_regions), true);
$regionCount = count($json_regions);
$paysArray = array();
for($i = 0; $i < $regionCount; $i++) {
$region = $json_regions[$i];
if (strlen($region['code']) > 0) {
$pays_id = $region['id'];
$pays = array("name" => $region['name'], "code" => $region['code'], "sousregions" => array());
$total_pays = 0;
for($j = 0; $j < $regionCount; $j++) {
$sousregion = $json_regions[$j];
2018-03-18 18:51:53 +01:00
if ($sousregion["region_id"] == $pays_id) {
$region_id = $sousregion["id"];
if (array_key_exists("id_".$region_id, $evenementParRegionMap)) {
$evenementParRegionArray = $evenementParRegionMap["id_".$region_id];
$total_region = count($evenementParRegionArray);
$sousregion["evenements"] = $evenementParRegionArray;
$total_pays += $total_region;
2018-03-18 18:51:53 +01:00
$total += $total_region;
$pays["sousregions"][] = $sousregion;
}
}
}
if ($total_pays > 0) {
$paysArray[] = $pays;
}
}
}
$repartition = array(
"total" => $total,
"pays" => $paysArray
);
$GLOBALS[MES]["repartition2"] = $repartition;
return $repartition;
}
/************************************
* Fonction de comparaison tenant compte des accents
*************************************/
function mes_compare($a, $b) {
$coll = collator_create( 'fr_FR' );
return collator_compare($coll, $a, $b);
2017-01-09 10:47:45 +01:00
}