Files

505 lines
24 KiB
HTML

{{* =========================================================================
MODULE AGENDA
ADMINISTRATION : accès admin géré par les permissions Paheko réelles
(membre connecté avec droit d'écriture sur la section "web"), via
{{#restrict}} ci-dessous. Plus de code partagé dans l'URL.
========================================================================= *}}
{{#restrict section="web" level="write"}}
{{:assign var="est_admin" value=true}}
{{else}}
{{if $is_logged==true}}
{{:assign _url="%sindex.html"|args:$module.url}}
{{else}}
{{:assign _url="%sagenda.html"|args:$module.url}}
{{/if}}
{{:assign var="est_admin" value=false}}
{{/restrict}}
{{if $est_admin==true}}
{{:admin_header title="Agenda" custom_css="/m/agenda/agenda.css" layout="" current="module_agenda"}}
{{* {{else}} TODO membre logué
<link rel='stylesheet' id='agenda-css' href='agenda.css' media='all'/>*}}
{{/if}}
{{* ---------- Temp correction ---------- *}}
{{*:delete where="$$.type = :type AND id > 9" :type="event"*}}
{{*:save key="c489ba90-16d0-42cb-b5b8-8daa2f7e0d06" date="28/10/2026"|parse_date*}}
{{* ---------- Gestion des événements ---------- *}}
{{if $_POST.save_event || $_POST.suppr_event }}
{{:include file="manage/_event.html"}}
{{/if}}
{{* ---------- Gestion des permanences ---------- *}}
{{if $_POST.add_perm || $_POST.rename_perm || $_POST.suppr_perm}}
{{:include file="manage/_perm.html"}}
{{/if}}
{{* ---------- Gestion des occurrences ---------- *}}
{{if $_POST.suppr_occurrence }}
{{:include file="manage/_occurence.html"}}
{{/if}}
{{* ---------- Gestion des calendriers ---------- *}}
{{if $_POST.add_calendrier || $_POST.suppr_calendrier || $_POST.mod_calendrier}}
{{:include file="manage/_calendrier.html"}}
{{/if}}
{{* ---------- Mois affiché (par défaut : le mois en cours) ---------- *}}
{{:assign var="an" value=$_GET.an|intval}}
{{:assign var="mois" value=$_GET.mois|intval}}
{{if $an < 1}}{{:assign var="an" value=$now|date:"Y"}}{{/if}}
{{if $mois < 1 || $mois > 12}}{{:assign var="mois" value=$now|date:"n"}}{{/if}}
{{:assign var="premier_du_mois" value="%04d-%02d-01"|args:$an:$mois}}
{{:assign var="nb_jours" value=$premier_du_mois|date:"t"}}
{{:assign var="dow_premier" value=$premier_du_mois|date:"N"}}
{{:assign var="decalage" value="%d-1"|math:$dow_premier}}
{{:assign var="nom_mois" value=$premier_du_mois|date:"F Y"}}
{{:assign var="aujourdhui" value=$now|date:"Y-m-d"}}
{{* ---------- Mois précédent / suivant ---------- *}}
{{if $mois == 1}}
{{:assign var="mois_prec" value=12}}
{{:assign var="an_prec" value="%d-1"|math:$an}}
{{else}}
{{:assign var="mois_prec" value="%d-1"|math:$mois}}
{{:assign var="an_prec" value=$an}}
{{/if}}
{{if $mois == 12}}
{{:assign var="mois_suiv" value=1}}
{{:assign var="an_suiv" value="%d+1"|math:$an}}
{{else}}
{{:assign var="mois_suiv" value="%d+1"|math:$mois}}
{{:assign var="an_suiv" value=$an}}
{{/if}}
{{* ---------- Vue choisie : mois (défaut), semaine ou liste ---------- *}}
{{if $_GET.nav != "conf"}}
{{:assign var="vue" value=$_GET.vue|strval|trim}}
{{if $vue != "semaine" && $vue != "liste"}}{{:assign var="vue" value="mois"}}{{/if}}
{{/if}}
{{* ---------- Liste des calendriers disponibles ---------- *}}
{{#load module="agenda" where="$$.type = 'calendrier'" order="$$.nom ASC"}}
{{:assign var="calendriers_liste.%s.id"|args:$id value=$id}}
{{:assign var="calendriers_liste.%s.nom"|args:$id value=$nom}}
{{:assign var="calendriers_liste.%s.par_defaut"|args:$id value=$par_defaut}}
{{:assign var="calendriers_liste.%s.couleur"|args:$id value=$couleur}}
{{:assign var="calendriers_liste.%s.textecouleur"|args:$id value=$textecouleur}}
{{:assign var="calendriers_liste.%s.categorie"|args:$id value=$categorie}}
{{else}}
{{* Pas encore de calendrier créé : vérifier que nous ne sommes pas sur le site web *}}
{{if $module.name == "agenda"}}
{{:save type="calendrier" nom="Agenda" par_defaut=true couleur=180 textecouleur="225" categorie="p"}}
{{/if}}
{{/load}}
{{* ---------- Liste des calendriers publics (Web) ---------- *}}
{{if $module.name == "web"}}
{{:assign filtre_cal_sql="1"}}
{{#foreach from=$calendriers_liste item="value"}}
{{if $value.categorie == "p"}}
{{:assign var="calendriers_publics." id=$id value=$nom}}
{{:assign filtre_cal_sql=" AND $$.calendrier = '%d' AND %s"|args:$id:$filtre_cal_sql}}
{{/if}}
{{/foreach}}
{{:assign selected_calendar=-1 selected_calendar_name="Public" selected_calendar_couleur=180}}
{{*:debug filtre_cal_sql=$filtre_cal_sql*}}
{{/if}}
{{* ---------- Filtre calendrier (Utilisateurs logués) ---------- *}}
{{if $is_logged==true}}
{{:assign saved_filters=$module.config.filters}}
{{:assign var="user_filters" from="saved_filters.%s"|args:$logged_user.id}}
{{if $_GET.cal == null}}
{{:assign selected_calendar=$user_filters.cal_key }}
{{:assign var="selected_calendar_name" from="calendriers_liste.%s.nom"|args:$selected_calendar}}
{{:assign var="selected_calendar_couleur" from="calendriers_liste.%s.couleur"|args:$selected_calendar}}
{{if $selected_calendar == -1}}
{{:assign filtre_cal_sql=""}}
{{else}}
{{:assign filtre_cal_sql=" AND $$.calendrier = '%s'"|args:$selected_calendar}}
{{/if}}
{{else}}
{{*
-1 = Tous
n = Id du calendrier dans la base
*}}
{{if $_GET.cal == -1}}
{{:assign selected_calendar=-1 selected_calendar_name="Tous" selected_calendar_couleur=180}}
{{:assign filtre_cal_sql=""}}
{{else}}
{{:assign selected_calendar=$_GET.cal}}
{{:assign var="selected_calendar_name" from="calendriers_liste.%s.nom"|args:$selected_calendar}}
{{:assign var="selected_calendar_couleur" from="calendriers_liste.%s.couleur"|args:$selected_calendar}}
{{:assign filtre_cal_sql=" AND $$.calendrier = '%s'"|args:$selected_calendar}}
{{/if}}
{{:assign var="user_filters.cal_key" value=$selected_calendar}}
{{:assign var="saved_filters.%s"|args:$logged_user.id value=$user_filters}}
{{:save key="config" filters=$saved_filters}}
{{/if}}
{{else}}
{{:assign selected_calendar=$_GET.cal}}
{{/if}}
{{*:debug _GET=$_GET scal=$selected_calendar fsql=$filtre_cal_sql user_cal=$user_filters.cal_key*}}
{{* ---------- Nombre de rangées du mois affiché, et du mois précédent (pour la navigation par semaine) ---------- *}}
{{:assign var="total_rows" value="ceil((%d+%d)/7)"|math:$nb_jours:$decalage}}
{{:assign var="premier_du_mois_prec" value="%04d-%02d-01"|args:$an_prec:$mois_prec}}
{{:assign var="nb_jours_prec" value=$premier_du_mois_prec|date:"t"}}
{{:assign var="dow_premier_prec" value=$premier_du_mois_prec|date:"N"}}
{{:assign var="decalage_prec" value="%d-1"|math:$dow_premier_prec}}
{{:assign var="total_rows_prec" value="ceil((%d+%d)/7)"|math:$nb_jours_prec:$decalage_prec}}
{{* ---------- Rangée sélectionnée pour la vue semaine (par défaut : celle contenant aujourd'hui) ---------- *}}
{{:assign var="semaine_sel" value=$_GET.semaine_sel|intval}}
{{if $semaine_sel < 1}}
{{:assign var="jour_today_num" value=$aujourdhui|date:"j"}}
{{if $an == $now|date:"Y" && $mois == $now|date:"n"}}
{{:assign var="semaine_sel" value="ceil((%d+%d)/7)"|math:$jour_today_num:$decalage}}
{{else}}
{{:assign var="semaine_sel" value=1}}
{{/if}}
{{/if}}
{{if $semaine_sel > $total_rows}}{{:assign var="semaine_sel" value=$total_rows}}{{/if}}
{{* ---------- Purge automatique des événements passés et rendez-vous réguliers expirés ---------- *}}
{{* FB : Ne Fonctionne pas : erreur "Database is locked" / perso ca m'arrrange de conserver les anciens RDV pour avoir une trace ;-)SS *}}
{{:assign var="purge_faite" value=false}}
{{:assign var="where_purge_evt" value="$$.type = 'event' AND $$.date < '%s'"|args:$aujourdhui}}
{{#load module="agenda" where=$where_purge_evt}}
{{*:delete id=$id*}}
{{*:debug id=$id*}}
{{:assign var="purge_faite" value=true}}
{{/load}}
{{:assign var="where_purge_perm" value="$$.type = 'permanence' AND $$.date_fin != '' AND $$.date_fin < '%s'"|args:$aujourdhui}}
{{#load module="agenda" where=$where_purge_perm}}
{{*:delete id=$id*}}
{{*:debug id=$id*}}
{{:assign var="purge_faite" value=true}}
{{/load}}
{{if $purge_faite}}
{{* FB : provoque une redirection en boucle et un timeout *}}
{{*:redirect url="index.html?vue=%s&an=%s&mois=%s&cal=%s"|args:$vue:$an:$mois:$cal_filtre*}}
{{/if}}
{{* ---------- Chargement des événements du mois affiché (pour la grille) ---------- *}}
{{:assign var="date_fin_mois" value="%04d-%02d-%02d"|args:$an:$mois:$nb_jours}}
{{:assign var="where_mois" value="$$.type = 'event' AND $$.date >= '%s' AND $$.date <= '%s'%s"|args:$premier_du_mois:$date_fin_mois:$filtre_cal_sql}}
{{#load module="agenda" where=$where_mois order="$$.date ASC" }}
{{:assign var="events_par_jour.%s.%s.titre"|args:$date:$id value=$titre}}
{{:assign var="events_par_jour.%s.%s.id"|args:$date:$id value=$id}}
{{:assign var="events_par_jour.%s.%s.debut"|args:$date:$id value=$debut}}
{{:assign var="events_par_jour.%s.%s.fin"|args:$date:$id value=$fin}}
{{:assign var="events_par_jour.%s.%s.couleur"|args:$date:$id value=$couleur}}
{{:assign var="events_par_jour.%s.%s.lieu"|args:$date:$id value=$lieu}}
{{:assign var="events_par_jour.%s.%s.description"|args:$date:$id value=$description}}
{{:assign var="events_par_jour.%s.%s.lien"|args:$date:$id value=$lien}}
{{:assign var="events_par_jour.%s.%s.lien1_label"|args:$date:$id value=$lien1_label}}
{{:assign var="events_par_jour.%s.%s.lien1_url"|args:$date:$id value=$lien1_url}}
{{:assign var="events_par_jour.%s.%s.lien2_label"|args:$date:$id value=$lien2_label}}
{{:assign var="events_par_jour.%s.%s.lien2_url"|args:$date:$id value=$lien2_url}}
{{:assign var="events_par_jour.%s.%s.lien3_label"|args:$date:$id value=$lien3_label}}
{{:assign var="events_par_jour.%s.%s.lien3_url"|args:$date:$id value=$lien3_url}}
{{/load}}
{{* ---------- Préchargement des permanences (pour la grille, avec vérification date début/fin) ---------- *}}
{{:assign var="where_perms" value="$$.type = 'permanence'%s"|args:$filtre_cal_sql}}
{{#load module="agenda" where=$where_perms order="$$.jour ASC, $$.debut ASC"}}
{{:assign var="perms_data.%s.id"|args:$id value=$id}}
{{:assign var="perms_data.%s.jour"|args:$id value=$jour}}
{{:assign var="perms_data.%s.label"|args:$id value=$label}}
{{:assign var="perms_data.%s.lieu"|args:$id value=$lieu}}
{{:assign var="perms_data.%s.description"|args:$id value=$description}}
{{:assign var="perms_data.%s.debut"|args:$id value=$debut}}
{{:assign var="perms_data.%s.fin"|args:$id value=$fin}}
{{:assign var="perms_data.%s.date_debut"|args:$id value=$date_debut}}
{{:assign var="perms_data.%s.date_fin"|args:$id value=$date_fin}}
{{:assign var="perms_data.%s.type_recurrence"|args:$id value=$type_recurrence}}
{{:assign var="perms_data.%s.semaine_du_mois"|args:$id value=$semaine_du_mois}}
{{:assign var="perms_data.%s.exceptions"|args:$id value=$exceptions}}
{{:assign var="perms_data.%s.couleur"|args:$id value=$couleur}}
{{/load}}
{{* ---------- Chargement des événements à venir (pour la liste) ---------- *}}
{{:assign var="where_venir" value="$$.type = 'event' AND $$.date >= '%s'%s"|args:$aujourdhui:$filtre_cal_sql}}
{{* ---------- Vue Liste uniquement : occurrences des rendez-vous réguliers sur les 3 prochains mois, fusionnées avec les événements ---------- *}}
{{if $vue == "liste"}}
{{#load module="agenda" where=$where_venir order="$$.date ASC"}}
{{:assign var="cle_liste" value="%s_%s_evt%s"|args:$date:$debut:$id}}
{{:assign var="liste_fusionnee.%s.date"|args:$cle_liste value=$date}}
{{:assign var="liste_fusionnee.%s.debut"|args:$cle_liste value=$debut}}
{{:assign var="liste_fusionnee.%s.fin"|args:$cle_liste value=$fin}}
{{:assign var="liste_fusionnee.%s.label"|args:$cle_liste value=$titre}}
{{:assign var="liste_fusionnee.%s.couleur"|args:$cle_liste value=$couleur|or:"#8c3a1e"}}
{{:assign var="liste_fusionnee.%s.type"|args:$cle_liste value="Événement"}}
{{:assign var="liste_fusionnee.%s.lien"|args:$cle_liste value=$lien}}
{{:assign var="liste_fusionnee.%s.lien1_label"|args:$cle_liste value=$lien1_label}}
{{:assign var="liste_fusionnee.%s.lien1_url"|args:$cle_liste value=$lien1_url}}
{{:assign var="liste_fusionnee.%s.lien2_label"|args:$cle_liste value=$lien2_label}}
{{:assign var="liste_fusionnee.%s.lien2_url"|args:$cle_liste value=$lien2_url}}
{{:assign var="liste_fusionnee.%s.lien3_label"|args:$cle_liste value=$lien3_label}}
{{:assign var="liste_fusionnee.%s.lien3_url"|args:$cle_liste value=$lien3_url}}
{{/load}}
{{* -- Mois 1 : le mois en cours -- *}}
{{:assign var="an_m0" value=$now|date:"Y"}}
{{:assign var="mois_m0" value=$now|date:"n"}}
{{* -- Mois 2 : le mois suivant -- *}}
{{if $mois_m0 == 12}}{{:assign var="mois_m1" value=1}}{{:assign var="an_m1" value="%d+1"|math:$an_m0}}
{{else}}{{:assign var="mois_m1" value="%d+1"|math:$mois_m0}}{{:assign var="an_m1" value=$an_m0}}{{/if}}
{{* -- Mois 3 : encore le mois suivant -- *}}
{{if $mois_m1 == 12}}{{:assign var="mois_m2" value=1}}{{:assign var="an_m2" value="%d+1"|math:$an_m1}}
{{else}}{{:assign var="mois_m2" value="%d+1"|math:$mois_m1}}{{:assign var="an_m2" value=$an_m1}}{{/if}}
{{:assign var="jours_du_mois." value=1}}{{:assign var="jours_du_mois." value=2}}{{:assign var="jours_du_mois." value=3}}{{:assign var="jours_du_mois." value=4}}{{:assign var="jours_du_mois." value=5}}{{:assign var="jours_du_mois." value=6}}{{:assign var="jours_du_mois." value=7}}{{:assign var="jours_du_mois." value=8}}{{:assign var="jours_du_mois." value=9}}{{:assign var="jours_du_mois." value=10}}
{{:assign var="jours_du_mois." value=11}}{{:assign var="jours_du_mois." value=12}}{{:assign var="jours_du_mois." value=13}}{{:assign var="jours_du_mois." value=14}}{{:assign var="jours_du_mois." value=15}}{{:assign var="jours_du_mois." value=16}}{{:assign var="jours_du_mois." value=17}}{{:assign var="jours_du_mois." value=18}}{{:assign var="jours_du_mois." value=19}}{{:assign var="jours_du_mois." value=20}}
{{:assign var="jours_du_mois." value=21}}{{:assign var="jours_du_mois." value=22}}{{:assign var="jours_du_mois." value=23}}{{:assign var="jours_du_mois." value=24}}{{:assign var="jours_du_mois." value=25}}{{:assign var="jours_du_mois." value=26}}{{:assign var="jours_du_mois." value=27}}{{:assign var="jours_du_mois." value=28}}{{:assign var="jours_du_mois." value=29}}{{:assign var="jours_du_mois." value=30}}
{{:assign var="jours_du_mois." value=31}}
{{:assign var="mois_traite_an.0" value=$an_m0}}{{:assign var="mois_traite_mois.0" value=$mois_m0}}
{{:assign var="mois_traite_an.1" value=$an_m1}}{{:assign var="mois_traite_mois.1" value=$mois_m1}}
{{:assign var="mois_traite_an.2" value=$an_m2}}{{:assign var="mois_traite_mois.2" value=$mois_m2}}
{{:assign var="idx_mois." value=0}}
{{:assign var="idx_mois." value=1}}
{{:assign var="idx_mois." value=2}}
{{#foreach from=$idx_mois item="idx_m"}}
{{:assign var="an_l2" from="mois_traite_an.%s"|args:$idx_m}}
{{:assign var="mois_l2" from="mois_traite_mois.%s"|args:$idx_m}}
{{:assign var="premier_l2" value="%04d-%02d-01"|args:$an_l2:$mois_l2}}
{{:assign var="nb_jours_l2" value=$premier_l2|date:"t"}}
{{#foreach from=$jours_du_mois item="jn"}}
{{if $jn <= $nb_jours_l2}}
{{:assign var="date_l2" value="%04d-%02d-%02d"|args:$an_l2:$mois_l2:$jn}}
{{if $date_l2 >= $aujourdhui}}
{{:assign var="dow_l2" value=$date_l2|date:"N"}}
{{:assign var="occ_l2" value="floor((%d-1)/7)+1"|math:$jn}}
{{:assign var="derniere_l2" value=false}}
{{if "%d+7"|math:$jn > $nb_jours_l2}}{{:assign var="derniere_l2" value=true}}{{/if}}
{{#foreach from=$perms_data item="pd"}}
{{if $pd.jour == $dow_l2}}
{{if $pd.date_debut == "" || $date_l2 >= $pd.date_debut}}
{{if $pd.date_fin == "" || $date_l2 <= $pd.date_fin}}
{{:assign var="excl_l2" value=false}}
{{#foreach from=$pd.exceptions item="ex2"}}
{{if $ex2 == $date_l2}}{{:assign var="excl_l2" value=true}}{{/if}}
{{/foreach}}
{{if !$excl_l2}}
{{:assign var="ok_l2" value=false}}
{{if $pd.type_recurrence == "mensuel"}}
{{if $pd.semaine_du_mois == -1 && $derniere_l2}}{{:assign var="ok_l2" value=true}}{{/if}}
{{if $pd.semaine_du_mois == $occ_l2}}{{:assign var="ok_l2" value=true}}{{/if}}
{{elseif $pd.type_recurrence == "quinzaine"}}
{{if $pd.date_debut != ""}}
{{:assign var="ref_sem_q2" value=$pd.date_debut|date:"W"|intval}}
{{:assign var="cell_sem_q2" value=$date_l2|date:"W"|intval}}
{{:assign var="diff_sem_q2" value="(%d-%d) %% 2"|math:$cell_sem_q2:$ref_sem_q2}}
{{if $diff_sem_q2 == 0}}{{:assign var="ok_l2" value=true}}{{/if}}
{{/if}}
{{else}}
{{:assign var="ok_l2" value=true}}
{{/if}}
{{if $ok_l2}}
{{:assign var="cle_liste2" value="%s_%s_perm%s"|args:$date_l2:$pd.debut:$pd.id}}
{{:assign var="liste_fusionnee.%s.date"|args:$cle_liste2 value=$date_l2}}
{{:assign var="liste_fusionnee.%s.debut"|args:$cle_liste2 value=$pd.debut}}
{{:assign var="liste_fusionnee.%s.fin"|args:$cle_liste2 value=$pd.fin}}
{{:assign var="liste_fusionnee.%s.label"|args:$cle_liste2 value=$pd.label}}
{{:assign var="liste_fusionnee.%s.couleur"|args:$cle_liste2 value=$pd.couleur|or:"#4c7a2e"}}
{{:assign var="liste_fusionnee.%s.type"|args:$cle_liste2 value="Rendez-vous régulier"}}
{{/if}}
{{/if}}
{{/if}}
{{/if}}
{{/if}}
{{/foreach}}
{{/if}}
{{/if}}
{{/foreach}}
{{/foreach}}
{{:assign var="liste_triee" value=$liste_fusionnee|ksort|values}}
{{/if}}
{{* ---------- Noms des jours ---------- *}}
{{:assign var="noms_jours." value=""}}
{{:assign var="noms_jours." value="Lundi"}}
{{:assign var="noms_jours." value="Mardi"}}
{{:assign var="noms_jours." value="Mercredi"}}
{{:assign var="noms_jours." value="Jeudi"}}
{{:assign var="noms_jours." value="Vendredi"}}
{{:assign var="noms_jours." value="Samedi"}}
{{:assign var="noms_jours." value="Dimanche"}}
{{* ---------- Événement / permanence en cours de modification ---------- *}}
{{:assign var="edit_event" value=$_GET.edit_event|intval}}
{{if $edit_event}}
{{#load id=$edit_event assign="event"}}
{{:assign var="ee_titre" value=$titre}}
{{:assign var="ee_date" value=$date}}
{{:assign var="ee_debut" value=$debut}}
{{:assign var="ee_fin" value=$fin}}
{{:assign var="ee_lieu" value=$lieu}}
{{:assign var="ee_description" value=$description}}
{{:assign var="ee_lien1_label" value=$lien1_label}}
{{:assign var="ee_lien1_url" value=$lien1_url}}
{{:assign var="ee_lien2_label" value=$lien2_label}}
{{:assign var="ee_lien2_url" value=$lien2_url}}
{{:assign var="ee_lien3_label" value=$lien3_label}}
{{:assign var="ee_lien3_url" value=$lien3_url}}
{{if $ee_lien1_url == "" && $ee_lien2_url == "" && $ee_lien3_url == "" && $lien != ""}}
{{:assign var="ee_lien1_url" value=$lien}}
{{/if}}
{{:assign var="ee_couleur" value=$couleur}}
{{:assign var="ee_calendrier" value=$calendrier}}
{{/load}}
{{/if}}
{{:assign var="edit_perm" value=$_GET.edit_perm|intval}}
{{if $edit_perm}}
{{#load id=$edit_perm assign="perm"}}
{{:assign var="ep_jour" value=$jour}}
{{:assign var="ep_debut" value=$debut}}
{{:assign var="ep_fin" value=$fin}}
{{:assign var="ep_label" value=$label}}
{{:assign var="ep_lieu" value=$lieu}}
{{:assign var="ep_description" value=$description}}
{{:assign var="ep_date_debut" value=$date_debut}}
{{:assign var="ep_date_fin" value=$date_fin}}
{{:assign var="ep_type_recurrence" value=$type_recurrence}}
{{:assign var="ep_semaine_du_mois" value=$semaine_du_mois}}
{{:assign var="ep_couleur" value=$couleur}}
{{:assign var="ep_calendrier" value=$calendrier}}
{{/load}}
{{/if}}
{{*
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Agenda — {{$config.org_name}}</title>
</style>
</head>
<body>*}}
{{* Si edition ou suppression d'évenements ou RDV *}}
{{if $est_admin==true}}
{{if $_GET.edit_event > 0}}
{{:assign _nav="conf"}}
{{:assign _conf="manage_eve"}}
{{elseif $_GET.edit_perm > 0}}
{{:assign _nav="conf"}}
{{:assign _conf="manage_app"}}
{{else}}
{{:assign _nav=$_GET.nav}}
{{:assign _conf=$_GET.conf}}
{{/if}}
{{/if}}
{{* Navigation *}}
{{if $_nav == "conf"}}
{{if !$_conf}}
{{:include file="_nav.html" current="config" subcurrent="manage_cal"}}
{{:assign _conf="manage_cal"}}
{{else}}
{{:include file="_nav.html" current="config" subcurrent="%s"|args:$_conf}}
{{:assign _conf=$_conf}}
{{/if}}
{{:include file="_config.html" subconf=$_conf}}
{{else}}
{{:include file="_nav.html" current="agenda" subcurrent="%s"|args:$vue vue=$vue an=$an mois=$mois cal=$cal_filtre}}
{{/if}}
<div class="wrap">
{{if $vue == "mois" || $vue == "semaine"}}
{{:include file="_calendar.html" vue=$vue}}
{{elseif $vue == "liste"}}
{{:include file="_appointments_list.html" vue=$vue}}
{{:include file="_events_list.html" vue=$vue}}
{{/if}}
</div>
<div class="modal-overlay" id="modalDetailEvt" onclick="if(event.target===this){fermerDetailEvt();}">
<div class="modal-box" role="dialog" aria-modal="true" aria-labelledby="modalDetailTitre">
<button type="button" class="modal-close" onclick="fermerDetailEvt();" aria-label="Fermer">&times;</button>
<h3 id="modalDetailTitre"></h3>
<p class="modal-meta" id="modalDetailHoraire"></p>
<p class="modal-meta" id="modalDetailLieu"></p>
<p class="modal-description" id="modalDetailDescription"></p>
<div class="modal-liens" id="modalDetailLiens"></div>
</div>
</div>
<script type="text/javascript">
function echapperHtml(str) {
return str.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;').replace(/'/g,'&#39;');
}
function lienifier(str) {
return echapperHtml(str).replace(/(https?:\/\/[^\s<]+)/g, function(url) {
var suffixe = '';
var m = url.match(/[.,;:!?)]+$/);
if (m) { suffixe = m[0]; url = url.slice(0, -suffixe.length); }
return '<a href="' + url + '" target="_blank" rel="noopener">' + url + '</a>' + suffixe;
});
}
function ouvrirDetailEvt(el) {
document.getElementById('modalDetailTitre').textContent = el.getAttribute('data-titre') || '';
var horaire = el.getAttribute('data-horaire') || '';
var elH = document.getElementById('modalDetailHoraire');
elH.textContent = horaire;
elH.style.display = horaire ? '' : 'none';
var lieu = el.getAttribute('data-lieu') || '';
var elL = document.getElementById('modalDetailLieu');
if (lieu) {
elL.innerHTML = '<a href="https://www.openstreetmap.org/search?query=' + encodeURIComponent(lieu) + '" target="_blank" rel="noopener">📍 ' + echapperHtml(lieu) + '</a>';
elL.style.display = '';
} else {
elL.style.display = 'none';
}
var desc = el.getAttribute('data-description') || '';
var elD = document.getElementById('modalDetailDescription');
elD.innerHTML = lienifier(desc);
elD.style.display = desc ? '' : 'none';
var conteneurLiens = document.getElementById('modalDetailLiens');
conteneurLiens.innerHTML = '';
var liens = [];
for (var i = 1; i <= 3; i++) {
var url = el.getAttribute('data-lien' + i + '-url') || '';
if (url) {
var label = el.getAttribute('data-lien' + i + '-label') || '';
liens.push({ label: label || "Voir l'affiche / plus d'infos", url: url });
}
}
if (liens.length === 0) {
var lienHerite = el.getAttribute('data-lien') || '';
if (lienHerite) { liens.push({ label: "Voir l'affiche / plus d'infos", url: lienHerite }); }
}
liens.forEach(function(l) {
var a = document.createElement('a');
a.href = l.url;
a.target = '_blank';
a.rel = 'noopener';
a.textContent = l.label + ' →';
conteneurLiens.appendChild(a);
});
document.getElementById('modalDetailEvt').classList.add('open');
}
function fermerDetailEvt() {
document.getElementById('modalDetailEvt').classList.remove('open');
}
document.addEventListener('keydown', function(e) { if (e.key === 'Escape') { fermerDetailEvt(); } });
</script>
{{*</body>
</html>
*}}
{{*:debug*}}
{{if $est_admin==true}}
{{:admin_footer}}
{{/if}}