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); /************************************ * Balise récupérant les évènements répartis par pays et 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; } /************************************ * Travaille en deux étapes : * - 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 * - 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_Repartition($tag) { if ($GLOBALS[MES]["repartition"] != false) { return $GLOBALS[MES]["repartition"]; } $url_evenements = 'http://www.agendadulibre.org/events.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_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); } } $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(); $regionTraiteeMap = 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]; 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; $total += $total_region; $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, "ailleurs" => $ailleursArray ); $GLOBALS[MES]["repartition"] = $repartition; return $repartition; }*/ function mes_balise_Repartition($tag) { if ($GLOBALS[MES]["repartition"] != false) { return $GLOBALS[MES]["repartition"]; } //Étape 1 : récupération de la liste des évènements $url_evenements = 'http://www.agendadulibre.org/events.json?future=false&tag='.$tag; $evenementArray = json_decode(file_get_contents($url_evenements), true); $evenementCount = count($evenementArray); //Étape 2 : balayage des évènements et ventilation par région (champ « region_id ») $evenementParRegionMap = array(); for($i = 0; $i < $evenementCount; $i++) { $evenement = $evenementArray[$i]; $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); } } //Étape 3 : récupération de la liste des régions $url_regions = "http://www.agendadulibre.org/regions.json"; $total = 0; $json_regions = json_decode(file_get_contents($url_regions), true); $paysArray = array(); $regionTraiteeMap = array(); $internet = array("evenements" => array(), "total" => 0); //Étape 4 : création d'une instance LefPays pour chaque région qui correspond à un pays (présence du champ code), création des sous-régions de ce pays et affectation des évènements liés à ce pays foreach($json_regions as $json_region) { $pays_code = $json_region['code']; if ($pays_code == "internet") { $pays_internet = new LefInternet($json_region); $pays_internet->populate($evenementParRegionMap); $internet = $pays_internet->toArray(); $total += $internet["total"]; } else if (strlen($pays_code) > 0) { $pays = new LefPays($json_region); $pays->populate($json_regions, $evenementParRegionMap); foreach($pays->getKeyArray() as $key) { $regionTraiteeMap[$key] = 1; } $total_pays = $pays->getTotal(); if ($total_pays > 0) { if ($pays->getCode() == "internet") { $internet = $pays->toArray(); } else { $paysArray[] = $pays->toArray(); } $total += $total_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, "internet" => $internet, "ailleurs" => $ailleursArray ); $GLOBALS[MES]["repartition"] = $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); } /************************************ * Vérifie que le paramètre est bien numérique *************************************/ function filtre_lef_test_num($annee) { if (!is_numeric($annee)) { return ""; } else { return $annee; } } /************************************ * Vérifie que le paramètre est un mot-clé correct *************************************/ function filtre_lef_test_tag($tag) { if (preg_match('/^[-a-z0-9]+$/', $tag)) { return $tag; } else { return ""; } } /************************************ * Spécial filtre liste des évènements *************************************/ function filtre_lef_liste_evenements($annee) { if (strlen($annee) == 0) { return ""; } if (!is_numeric($annee)) { return "Paramètre année incorrect"; } $evenementArray = lef_getEvenementArrayParAnnee($annee); return lef_getEvenementRows($evenementArray); } function filtre_lef_liste_evenements_tag($tag) { if (strlen($tag) == 0) { return ""; } if (!preg_match('/^[-a-z0-9]+$/', $tag)) { return "Paramètre tag incorrect"; } else { $evenementArray = lef_getEvenementArrayParTag($tag); return lef_getEvenementRows($evenementArray); } } function filtre_lef_evenement_array($annee) { if (!is_numeric($annee)) { return array(); } return lef_getEvenementArrayParAnnee($annee); } function filtre_lef_evenement_array_tag($tag) { return lef_getEvenementArrayParTag($tag); } function filtre_lef_date($time) { $date = date_create($time); return date_format($date, 'd/m'); } /************************************ * Enregistrement local des évènements pour repérer les nouveaux * Le chemin du répertoire IMG est codé en dur ! *************************************/ function lef_getEvenementArrayParAnnee($annee) { return lef_getEvenementArray("libre-en-fete-".$annee, $annee); } function lef_getEvenementArrayParTag($tag) { return lef_getEvenementArray($tag, "tags/".$tag); } function lef_getEvenementArray($tag, $storeDir) { $IMG_ROOT = "/var/lib/spip/sites/www.libre-en-fete.net/"; $jsonString = file_get_contents("https://www.agendadulibre.org/events.json?future=false&tag=".$tag); $json = json_decode($jsonString, TRUE); $evenementCount = count($json); $currentTime = date(DATE_ATOM); $dirPath = $IMG_ROOT."IMG/agendadulibre/".$storeDir; if (!file_exists($dirPath)) { mkdir($dirPath, 0777, TRUE); } $evenementArray = array(); for($i = 0; $i < $evenementCount; $i++) { $evenement = $json[$i]; $id = $evenement["id"]; $path = $dirPath."/".$id; if (file_exists($path)) { $time = file_get_contents($path); } else { $time = $currentTime; $fp = fopen($path, 'w'); fwrite($fp, $time); fclose($fp); } $evenement["time"] = $time; $evenementArray[] = $evenement; } usort($evenementArray, "lef_comparaison"); return $evenementArray; } function lef_getEvenementRows($evenementArray) { $evenementCount = count( $evenementArray); if ($evenementCount == 0) { return "Aucun évènement"; } $result = ""; for($i = 0; $i < $evenementCount; $i++) { $evenement = $evenementArray[$i]; $increment = ($evenementCount - $i); $date = date_create($evenement["start_time"]); $result .= "