505 lines
24 KiB
HTML
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">×</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,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"').replace(/'/g,''');
|
|
}
|
|
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}} |