2017-01-09 10:47:45 +01:00
< ? php
2021-11-26 15:05:38 +01:00
require ( 'lef_fonctions.php' );
2017-01-09 10:47:45 +01:00
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 ;
2018-02-01 22:47:46 +01:00
}
/**********************************
* Le préfixe MES identifie les éléments
* défini dans ce fichier mes_fonctions . php
***********************************/
define ( " MES " , " MES " );
2021-11-26 15:05:38 +01:00
$GLOBALS [ MES ] = array ( " repartition " => false );
2018-02-01 22:47:46 +01:00
2018-03-18 18:15:39 +01:00
/************************************
* Balise récupérant les évènements répartis par pays et par région
*************************************/
2021-11-26 15:05:38 +01:00
function balise_MES_REPARTITION ( $p ) {
2018-03-18 18:15:39 +01:00
$tag = " " ;
if (( $v = interprete_argument_balise ( 1 , $p )) !== NULL ){
$tag = $v ;
}
2021-11-26 15:05:38 +01:00
$p -> code = " mes_balise_Repartition( $tag ) " ;
2018-03-18 18:15:39 +01:00
return $p ;
}
2018-02-01 22:47:46 +01:00
2018-03-18 18:15:39 +01:00
/************************************
* Travaille en deux étapes :
2019-03-08 17:19:26 +01:00
* - 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 :
2018-03-18 18:15:39 +01:00
* - total : le nombre total d ' évènements
2019-03-08 17:19:26 +01:00
* - 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
2018-03-18 18:15:39 +01:00
*************************************/
2021-11-26 15:05:38 +01:00
/* function mes_balise_Repartition ( $tag ) {
if ( $GLOBALS [ MES ][ " repartition " ] != false ) {
return $GLOBALS [ MES ][ " repartition " ];
2018-03-18 18:15:39 +01:00
}
2019-03-06 01:26:18 +01:00
$url_evenements = 'http://www.agendadulibre.org/events.json?future=false&tag=' . $tag ;
2018-03-18 18:51:53 +01:00
$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 ;
2019-03-06 01:26:18 +01:00
if ( array_key_exists ( " region_id " , $evenement )) {
$region_id = $evenement [ " region_id " ];
2019-03-08 17:19:26 +01:00
}
2018-03-18 18:51:53 +01:00
if ( array_key_exists ( " id_ " . $region_id , $evenementParRegionMap )) {
$evenementParRegionMap [ " id_ " . $region_id ][] = $evenement ;
} else {
2019-03-08 17:19:26 +01:00
$evenementParRegionMap [ " id_ " . $region_id ] = array ( $evenement );
2018-03-18 18:51:53 +01:00
}
}
2018-03-18 18:15:39 +01:00
$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 ();
2019-03-08 17:19:26 +01:00
$regionTraiteeMap = array ();
2018-03-18 18:15:39 +01:00
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 ;
2018-03-18 18:15:39 +01:00
$total_pays += $total_region ;
2018-03-18 18:51:53 +01:00
$total += $total_region ;
2019-03-08 17:19:26 +01:00
$pays [ " sousregions " ][] = $sousregion ;
$regionTraiteeMap [ " id_ " . $region_id ] = 1 ;
2018-03-18 18:15:39 +01:00
}
}
2019-03-08 17:19:26 +01:00
}
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 ;
2018-03-18 18:15:39 +01:00
}
if ( $total_pays > 0 ) {
$paysArray [] = $pays ;
}
}
}
2019-03-08 17:19:26 +01:00
// 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
2018-03-18 18:15:39 +01:00
$repartition = array (
" total " => $total ,
2019-03-08 17:19:26 +01:00
" pays " => $paysArray ,
" ailleurs " => $ailleursArray
2018-03-18 18:15:39 +01:00
);
2021-11-26 15:05:38 +01:00
$GLOBALS [ MES ][ " repartition " ] = $repartition ;
return $repartition ;
} */
function mes_balise_Repartition ( $tag ) {
if ( $GLOBALS [ MES ][ " repartition " ] != false ) {
return $GLOBALS [ MES ][ " repartition " ];
}
2022-07-03 02:25:01 +02:00
//Étape 1 : récupération de la liste des évènements
2021-11-26 15:05:38 +01:00
$url_evenements = 'http://www.agendadulibre.org/events.json?future=false&tag=' . $tag ;
$evenementArray = json_decode ( file_get_contents ( $url_evenements ), true );
$evenementCount = count ( $evenementArray );
2022-07-03 02:25:01 +02:00
//Étape 2 : balayage des évènements et ventilation par région (champ « region_id »)
2021-11-26 15:05:38 +01:00
$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 );
}
}
2022-07-03 02:25:01 +02:00
//Étape 3 : récupération de la liste des régions
2021-11-26 15:05:38 +01:00
$url_regions = " http://www.agendadulibre.org/regions.json " ;
$total = 0 ;
$json_regions = json_decode ( file_get_contents ( $url_regions ), true );
$paysArray = array ();
$regionTraiteeMap = array ();
2022-07-03 02:25:01 +02:00
$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
2021-11-26 15:05:38 +01:00
foreach ( $json_regions as $json_region ) {
2022-07-03 02:25:01 +02:00
$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 ) {
2021-11-26 15:05:38 +01:00
$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 ) {
2022-07-03 02:25:01 +02:00
if ( $pays -> getCode () == " internet " ) {
$internet = $pays -> toArray ();
} else {
$paysArray [] = $pays -> toArray ();
}
2021-11-26 15:05:38 +01:00
$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 ,
2022-07-03 02:25:01 +02:00
" internet " => $internet ,
2021-11-26 15:05:38 +01:00
" ailleurs " => $ailleursArray
);
$GLOBALS [ MES ][ " repartition " ] = $repartition ;
2018-03-18 18:15:39 +01:00
return $repartition ;
}
2018-02-01 22:47:46 +01:00
/************************************
* Fonction de comparaison tenant compte des accents
*************************************/
function mes_compare ( $a , $b ) {
$coll = collator_create ( 'fr_FR' );
return collator_compare ( $coll , $a , $b );
2019-03-06 01:26:18 +01:00
}
2020-11-28 14:58:44 +01:00
2022-02-02 20:14:41 +01:00
/************************************
* Vérifie que le paramètre est bien numérique
*************************************/
function filtre_lef_test_num ( $annee ) {
if ( ! is_numeric ( $annee )) {
return " " ;
} else {
return $annee ;
}
}
2022-07-07 01:38:14 +02:00
/************************************
* 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 " " ;
}
}
2020-11-28 14:58:44 +01:00
/************************************
* Spécial filtre liste des évènements
*************************************/
function filtre_lef_liste_evenements ( $annee ) {
2022-07-07 01:38:14 +02:00
if ( strlen ( $annee ) == 0 ) {
return " " ;
}
2020-11-28 14:58:44 +01:00
if ( ! is_numeric ( $annee )) {
return " Paramètre année incorrect " ;
}
2022-07-07 01:38:14 +02:00
$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 );
}
2022-02-02 20:14:41 +01:00
}
2022-07-07 01:38:14 +02:00
2022-02-02 20:14:41 +01:00
function filtre_lef_evenement_array ( $annee ) {
if ( ! is_numeric ( $annee )) {
return array ();
}
2022-07-07 01:38:14 +02:00
return lef_getEvenementArrayParAnnee ( $annee );
}
function filtre_lef_evenement_array_tag ( $tag ) {
return lef_getEvenementArrayParTag ( $tag );
2022-02-02 20:14:41 +01:00
}
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 !
*************************************/
2022-07-07 01:38:14 +02:00
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 ) {
2022-02-02 20:14:41 +01:00
$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 );
2020-11-28 14:58:44 +01:00
$currentTime = date ( DATE_ATOM );
2022-07-07 01:38:14 +02:00
$dirPath = $IMG_ROOT . " IMG/agendadulibre/ " . $storeDir ;
2020-11-28 14:58:44 +01:00
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 " );
2022-02-02 20:14:41 +01:00
return $evenementArray ;
2020-11-28 14:58:44 +01:00
}
2022-07-07 01:38:14 +02:00
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 .= " <tr> " ;
$result .= " <td> " . $increment . " </td> " ;
$result .= '<td><a href="http://www.agendadulibre.org/events/' . $evenement [ " id " ] . '">' . $evenement [ " id " ] . " </a></td> " ;
$result .= " <td> " . date_format ( $date , 'd/m' ) . " </td> " ;
$result .= " <td> " . $evenement [ " title " ] . " </td> " ;
$result .= " <td> " . $evenement [ " city " ] . " </td> " ;
$result .= " <td> " . $evenement [ " time " ] . " </td> " ;
$result .= " <td> " . $evenement [ " contact " ] . " </td> " ;
$result .= " </tr> " ;
}
return $result ;
}
2020-11-28 14:58:44 +01:00
function lef_comparaison ( $evt1 , $evt2 ) {
$time1 = $evt1 [ " time " ];
$time2 = $evt2 [ " time " ];
if ( $time1 > $time2 ) {
return - 1 ;
}
if ( $time1 < $time2 ) {
return 1 ;
}
$id1 = $evt1 [ " id " ];
$id2 = $evt2 [ " id " ];
if ( $id1 > $id2 ) {
return - 1 ;
}
if ( $id1 < $id2 ) {
return 1 ;
}
return 0 ;
}