diff --git a/_appointments_list.html b/_appointments_list.html new file mode 100644 index 0000000..be94b6c --- /dev/null +++ b/_appointments_list.html @@ -0,0 +1,48 @@ +{{if $est_admin}} +
| Récurrence | Jour | Horaires | Détail | Lieu | Calendrier | Depuis / jusqu'à | {{if $est_admin}}{{/if}} |
|---|---|---|---|---|---|---|---|
| + {{if $type_recurrence == "mensuel"}} + {{if $semaine_du_mois == -1}}Dernier{{elseif $semaine_du_mois == 1}}1er{{else}}{{$semaine_du_mois}}e{{/if}} du mois + {{elseif $type_recurrence == "quinzaine"}} + Toutes les 2 semaines + {{else}} + Chaque semaine + {{/if}} + | +{{$nom_jour}} | +{{$debut}}{{if $fin}} — {{$fin}}{{/if}} | +{{$label}} | +{{if $lieu}}{{$lieu}}{{/if}} | ++ {{:assign var="cal_eff_tab" value=$calendrier}} + {{if $cal_eff_tab == ""}}{{:assign var="cal_eff_tab" value="agenda"}}{{/if}} + {{:assign var="nom_cal_tab" from="calendriers_liste.%s.nom"|args:$cal_eff_tab}} + {{$nom_cal_tab}} + | +{{if $date_debut}}à partir du {{$date_debut|date_short}}{{/if}}{{if $date_debut && $date_fin}} {{/if}}{{if $date_fin}}jusqu'au {{$date_fin|date_short}}{{/if}} |
+ {{if $est_admin}}
+ + ✎ + + | + {{/if}} +
Aucun rendez-vous régulier enregistré.
{{/if}} +| Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
|---|---|---|---|---|---|---|
|
+ {{$jour_num}}
+ {{#foreach from=$badges_tries item="bj"}}
+ {{if $bj.type == "perm"}}
+
+
+ {{else}}
+ {{* background: hsl(var(--first-color), 50%, 90%);
+ background: linear-gradient(200deg, hsl(var(--first-color), 50%, 90%) 5%, hsl(var(--second-color), 30%, 90%) 30%);
+*}}
+
+ {{if $bj.debut}}{{$bj.debut}}{{if $bj.fin}}–{{$bj.fin}}{{/if}} — {{/if}}{{$bj.label}}{{if $bj.lieu}}
+ {{if $est_admin}}
+
+ ✎
+
+
+ {{/if}}
+ 📍 {{$bj.lieu}}{{/if}} + {{if $bj.description}} {{$bj.description}} {{/if}}
+
+
+ {{/if}}
+ {{/foreach}}
+
+ {{if $bj.debut}}{{$bj.debut}}{{if $bj.fin}}–{{$bj.fin}}{{/if}} — {{/if}}{{$bj.label}}{{if $bj.lieu}}
+ {{if $est_admin}}
+
+ ✎
+
+
+ {{/if}}
+ 📍 {{$bj.lieu}}{{/if}} + {{if $bj.description}} {{$bj.description}} {{/if}}
+ |
+ {{else}}
+ + + {{/if}} + {{/if}} + {{if $vue == "mois" && "%d %% 7"|math:$n == 0 && $n != 42}} | |||||
| Nom | Actions |
|---|---|
| {{$cd_gest.nom}}{{if $cd_gest.par_defaut}} (par défaut){{/if}} | ++ {{if !$cd_gest.par_defaut}} + + {{/if}} + | +
Supprimer un calendrier ne supprime pas les événements/rendez-vous qui y étaient rattachés — ils basculent simplement dans "Agenda" par défaut.
+Rien de prévu sur les 3 prochains mois.
{{/if}} +{{else}} + {{:assign var="event_trouve" value=false}} +Aucun événement à venir pour l'instant.
{{/if}} +{{/if}} \ No newline at end of file diff --git a/_nav.html b/_nav.html new file mode 100644 index 0000000..85a07b9 --- /dev/null +++ b/_nav.html @@ -0,0 +1,72 @@ +{{* Navigation *}} +{{#restrict section="web" level="write"}} + {{:assign _url="%sindex.html"|args:$module.url}} +{{else}} + {{if $is_logged==true}} + {{:assign _url="%sindex.html"|args:$module.url}} + {{else}} + {{:assign _url="%sagenda.html"|args:$module.url}} + {{/if}} +{{/restrict}} + + +{{* Messages *}} +{{if $_GET.msg == "ajout" }} +Ajout effectué
+{{elseif $_GET.msg == "modification" }} +Modification effectuée
+{{elseif $_GET.msg == "suppression" }} +Suppression effectuée
+{{elseif $_GET.msg == "supprmvtmat" }} +Mouvement supprimé - Matériel supprimé
+{{/if}} \ No newline at end of file diff --git a/agenda.css b/agenda.css new file mode 100644 index 0000000..355a6af --- /dev/null +++ b/agenda.css @@ -0,0 +1,86 @@ +:root { --terra: #8c3a1e; --orange: #d9720f; --vert: #4c7a2e; } +* { box-sizing: border-box; } +/* body { margin: 0; padding: 1.5rem 1rem 3rem; font-family: "Trebuchet MS", Helvetica, sans-serif; background: #f4f6f2; color: #222; font-size: 1.08rem; }*/ +.wrap { display: inline-block; max-width: 100rem; margin: 0 auto; } +a.retour { color: var(--terra); text-decoration: none; font-size: .95rem; } +a.retour:hover { text-decoration: underline; } +h1 { margin: .4rem 0 1.2rem; font-size: 1.7rem; color: var(--terra); } +.card { background: #fff; border: 1px solid #e2ddd9; border-radius: .6rem; padding: 1rem 1.2rem 1.2rem; margin-bottom: 1.2rem; box-shadow: 0 1px 4px rgba(0,0,0,.10); } +.card.card-perm { border-left: .35rem solid var(--vert); } +.card.card-perm h2 { color: var(--vert); } +.card.card-horaires table { width: 100%; border-collapse: collapse; } +.card.card-horaires table th, .card.card-horaires table td { padding: .35rem .5rem; text-align: left; border-bottom: 1px solid #eceae8; } +.card.card-horaires .activite { display: block; font-weight: bold; color: var(--terra); } +.card h2 { margin: 0 0 .8rem; font-size: 1.05rem; color: var(--terra); text-transform: uppercase; letter-spacing: .04em; } +.nav-mois { display: flex; align-items: center; justify-content: space-between; margin-bottom: .8rem; } +.nav-mois a { color: var(--terra); text-decoration: none; font-weight: bold; font-size: 1.3rem; padding: .1rem .6rem; } +.nav-mois a:hover { color: var(--orange); } +.nav-mois span { font-size: 1.15rem; font-weight: bold; text-transform: capitalize; color: var(--terra); } +.scroll-cal { overflow-x: auto; -webkit-overflow-scrolling: touch; } +table.calendrier { border-collapse: collapse; width: 100%; min-width: 46rem; table-layout: fixed; } +table.calendrier th { padding: .4rem; font-size: .9rem; color: #777; text-transform: uppercase; } +table.calendrier td { border: 1px solid #eceae8; vertical-align: top; height: 7.5rem; padding: .35rem; font-size: 1rem; } +table.calendrier td.vide { background: #fafafa; } +table.calendrier td .num { font-weight: bold; color: #555; font-size: 1.15rem; } +table.calendrier td.today { background: #fdf2e6; } +table.calendrier td.today .num { color: var(--orange); } +.evt-badge { color: #fff; border-radius: .3rem; padding: .15rem .4rem; margin-top: .25rem; font-size: .88rem; line-height: 1.3; display: flex; align-items: flex-start; justify-content: space-between; gap: .2rem; } +.evt-badge .badge-content { flex: 1; min-width: 0; cursor: pointer; white-space: normal; word-break: break-word; } +.evt-desc-apercu { margin-top: .15rem; font-size: .8rem; opacity: .85; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } +.perm-badge { color: #fff; border-radius: .3rem; padding: .15rem .4rem; margin-top: .25rem; font-size: .88rem; line-height: 1.3; opacity: .95; display: flex; align-items: flex-start; justify-content: space-between; gap: .2rem; } +.perm-badge .badge-content { flex: 1; min-width: 0; cursor: pointer; white-space: normal; word-break: break-word; } +.perm-badge span { white-space: normal; word-break: break-word; } +.perm-badge form.mini-form { display: inline; flex-shrink: 0; } +button.mini-x { background: none; border: none; color: #fff; opacity: .7; padding: 0; font-size: .8rem; line-height: 1; cursor: pointer; } +button.mini-x:hover { opacity: 1; } +.badge-actions { display: flex; align-items: center; gap: .35rem; flex-shrink: 0; } +a.badge-edit { color: #fff; opacity: .7; text-decoration: none; font-size: .85rem; line-height: 1.3; flex-shrink: 0; } +a.badge-edit:hover { opacity: 1; } +.modal-overlay { display: none; position: fixed; inset: 0; background: rgba(0,0,0,.55); z-index: 1000; align-items: center; justify-content: center; padding: 1rem; } +.modal-overlay.open { display: flex; } +.modal-box { background: #fff; border-radius: .6rem; padding: 1.2rem 1.4rem 1.4rem; max-width: 28rem; width: 100%; max-height: 82vh; overflow-y: auto; position: relative; box-shadow: 0 4px 24px rgba(0,0,0,.25); } +.modal-box h3 { margin: 0 1.6rem .3rem 0; color: var(--terra); } +.modal-meta { color: #777; font-size: .9rem; margin: .15rem 0; } +.modal-meta a { color: var(--terra); text-decoration: none; } +.modal-meta a:hover { text-decoration: underline; } +.modal-description { margin-top: .7rem; white-space: pre-wrap; } +.modal-liens { margin-top: .8rem; display: flex; flex-wrap: wrap; gap: .5rem; } +.modal-liens a { display: inline-block; background: var(--terra); color: #fff; text-decoration: none; padding: .45rem .9rem; border-radius: .4rem; font-size: .92rem; } +.modal-liens a:hover { background: var(--orange); } +.modal-close { position: absolute; top: .5rem; right: .6rem; background: none; border: none; font-size: 1.5rem; line-height: 1; color: #999; cursor: pointer; padding: .2rem .4rem; } +.modal-close:hover { color: var(--terra); } +ul.liste-evt { list-style: none; margin: 0; padding: 0; } +ul.liste-evt li { padding: .6rem 0; border-bottom: 1px solid #eceae8; display: flex; justify-content: space-between; gap: .8rem; align-items: baseline; flex-wrap: wrap; } +ul.liste-evt li:last-child { border-bottom: none; } +ul.liste-evt .date-evt { color: var(--terra); font-weight: bold; min-width: 9rem; } +ul.liste-evt .titre-evt { flex: 1; } +ul.liste-evt .lieu-evt { color: #777; font-size: .85rem; } +ul.liste-evt .lieu-evt a { color: inherit; text-decoration: none; } +ul.liste-evt .lieu-evt a:hover { text-decoration: underline; } +a.lieu-lien { color: inherit; text-decoration: none; } +a.lieu-lien:hover { text-decoration: underline; } +ul.liste-evt .lien-evt { color: var(--terra); font-size: .85rem; } +.tag-type { display: inline-block; color: #fff; font-size: .75rem; text-transform: uppercase; letter-spacing: .03em; padding: .1rem .4rem; border-radius: .3rem; margin-right: .4rem; vertical-align: middle; } +p.vide { color: #777; } +table.permanences { border-collapse: collapse; width: 100%; } +.scroll-cal table.permanences { min-width: 42rem; } +table.permanences th, table.permanences td { padding: .5rem .4rem; text-align: left; border-bottom: 1px solid #eceae8; } +table.permanences th { color: #777; font-size: .8rem; text-transform: uppercase; } +input[type=text], input[type=date], input[type=time], input[type=url], textarea, select { font-family: inherit; font-size: 1rem; padding: .4rem .6rem; border: 1px solid #bbb; border-radius: .4rem; width: 100%; background: #fff; } +.ajout { display: flex; gap: .6rem; align-items: flex-end; flex-wrap: wrap; } +.ajout label { font-size: .85rem; color: #666; display: block; margin-bottom: .2rem; } +.ajout .champ { min-width: 9rem; } +button { font-family: inherit; font-size: .95rem; padding: .45rem .9rem; border: none; border-radius: .4rem; background: var(--terra); color: #fff; cursor: pointer; } +button:hover { background: var(--orange); } +button.mini { background: none; color: #999; padding: .1rem .3rem; font-size: .85rem; text-decoration: none; } +button.mini:hover { color: var(--terra); } +a.mini { color: #999; text-decoration: none; font-size: .85rem; padding: .1rem .3rem; } +a.mini:hover { color: var(--terra); } +.badge-admin { display: inline-block; background: var(--vert); color: #fff; font-size: .75rem; padding: .15rem .5rem; border-radius: 1rem; margin-left: .5rem; vertical-align: middle; } +nav.vue-tabs { display: flex; gap: .4rem; margin-bottom: 1.2rem; } +nav.vue-tabs a { color: var(--terra); text-decoration: none; font-weight: bold; padding: .4rem .9rem; border-radius: .4rem; background: #fff; border: 1px solid #e2ddd9; } +nav.vue-tabs a:hover { background: #fdf2e6; } +nav.vue-tabs a.current { background: var(--terra); color: #fff; border-color: var(--terra); } +nav.cal-tabs { margin-top: -.6rem; } +nav.cal-tabs a { font-weight: normal; font-size: .88rem; padding: .3rem .7rem; } +nav.cal-tabs a.current { background: var(--vert); border-color: var(--vert); } \ No newline at end of file diff --git a/flux.ics b/flux.ics new file mode 100644 index 0000000..1b7cc11 --- /dev/null +++ b/flux.ics @@ -0,0 +1,61 @@ +{{* ========================================================================= + FLUX ICALENDAR — module agenda + Placez ce fichier dans le module "agenda", nommé par exemple "flux.ics". + Les gens pourront s'abonner (lecture seule) avec l'URL publique de ce + fichier, ex: https://VOTRE-SITE/m/agenda/flux.ics + + Limite connue : sans calcul de date avancé disponible dans ce langage, + l'heure de début de la récurrence (DTSTART) est calée sur la date de + début choisie (ou aujourd'hui si aucune n'est renseignée) même si son + jour de la semaine ne correspond pas exactement — ce n'est pas un + problème pour la plupart des calendriers, qui recalculent les + occurrences à partir de la règle BYDAY, mais à tester. +========================================================================= *}} +{{:assign var="aujourdhui_ics" value=$now|date:"Y-m-d"}} + +{{* ---------- Codes des jours de la semaine pour BYDAY ---------- *}} +{{:assign var="jours_ical.1" value="MO"}} +{{:assign var="jours_ical.2" value="TU"}} +{{:assign var="jours_ical.3" value="WE"}} +{{:assign var="jours_ical.4" value="TH"}} +{{:assign var="jours_ical.5" value="FR"}} +{{:assign var="jours_ical.6" value="SA"}} +{{:assign var="jours_ical.7" value="SU"}} + +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//{{$config.org_name}}//Agenda//FR +CALSCALE:GREGORIAN +METHOD:PUBLISH +X-WR-CALNAME:{{$config.org_name}} — Agenda +{{#load where="$$.type = 'event'" order="$$.date ASC"}} +BEGIN:VEVENT +UID:evt-{{$id}}@{{$config.org_name|strval|replace:" ":"-"}} +DTSTAMP:{{$aujourdhui_ics|date:"Ymd"}}T000000Z +DTSTART:{{$date|date:"Ymd"}}T{{$debut|strval|replace:":":""}}00 +{{if $fin}}DTEND:{{$date|date:"Ymd"}}T{{$fin|strval|replace:":":""}}00 +{{/if}}SUMMARY:{{$titre|strval|replace:"\\":"\\\\"|replace:",":"\,"|replace:";":"\;"}} +{{if $lieu}}LOCATION:{{$lieu|strval|replace:"\\":"\\\\"|replace:",":"\,"|replace:";":"\;"}} +{{/if}}{{if $description}}DESCRIPTION:{{$description|strval|replace:"\\":"\\\\"|replace:",":"\,"|replace:";":"\;"|replace:" +":" "}} +{{/if}}END:VEVENT +{{/load}} +{{#load where="$$.type = 'permanence'" order="$$.jour ASC"}} + {{:assign var="jc" from="jours_ical.%s"|args:$jour}} + {{:assign var="dtstart_date" value=$date_debut}} + {{if !$dtstart_date}}{{:assign var="dtstart_date" value=$aujourdhui_ics}}{{/if}} +BEGIN:VEVENT +UID:perm-{{$id}}@{{$config.org_name|strval|replace:" ":"-"}} +DTSTAMP:{{$aujourdhui_ics|date:"Ymd"}}T000000Z +DTSTART:{{$dtstart_date|date:"Ymd"}}T{{$debut|strval|replace:":":""}}00 +{{if $fin}}DTEND:{{$dtstart_date|date:"Ymd"}}T{{$fin|strval|replace:":":""}}00 +{{/if}}{{if $type_recurrence == "mensuel"}}RRULE:FREQ=MONTHLY;BYDAY={{$semaine_du_mois}}{{$jc}}{{if $date_fin}};UNTIL={{$date_fin|date:"Ymd"}}T235959Z{{/if}} + +{{else}}RRULE:FREQ=WEEKLY;BYDAY={{$jc}}{{if $date_fin}};UNTIL={{$date_fin|date:"Ymd"}}T235959Z{{/if}} + +{{/if}}{{#foreach from=$exceptions item="ex_ics"}}EXDATE:{{$ex_ics|date:"Ymd"}}T{{$debut|strval|replace:":":""}}00 +{{/foreach}}SUMMARY:{{$label|strval|replace:"\\":"\\\\"|replace:",":"\,"|replace:";":"\;"}} +{{if $lieu}}LOCATION:{{$lieu|strval|replace:"\\":"\\\\"|replace:",":"\,"|replace:";":"\;"}} +{{/if}}END:VEVENT +{{/load}} +END:VCALENDAR \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..0cc4cb6 --- /dev/null +++ b/index.html @@ -0,0 +1,1021 @@ +{{* ========================================================================= + 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é + *}} +{{/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*}} + +{{* ---------- Ajout ou Modification d'un événement ---------- *}} +{{#form on="save_event" }} + {{if $_POST.save_event && $est_admin}} + {{if $_POST.save_event == 0}} + {{:assign var="_eventKey" value="%s"|uuid}} + {{else}} + {{:assign var="_eventKey" value=$_POST.save_event}} + {{/if}} + {{:debug post=$_POST _eventKey=$_eventKey}} + {{:save + key=$_eventKey + type="event" + titre=$_POST.titre|strval|trim + date=$_POST.date|parse_date + debut=$_POST.debut|parse_time + fin=$_POST.fin|parse_time + lieu=$_POST.lieu|strval|trim + description=$_POST.description|strval|trim + lien1_label=$_POST.lien1_label|strval|trim + lien1_url=$_POST.lien1_url|strval|trim + lien2_label=$_POST.lien2_label|strval|trim + lien2_url=$_POST.lien2_url|strval|trim + lien3_label=$_POST.lien3_label|strval|trim + lien3_url=$_POST.lien3_url|strval|trim + couleur=$_POST.couleur|strval|trim + calendrier=$_POST.calendrier|strval|trim}} + {{:redirect url="?an=%s&mois=%s"|args:$_POST.retour_an:$_POST.retour_mois*}} + {{/if}} +{{else}} + {{:form_errors}} +{{/form}} + +{{* ---------- Modification d'un événement ---------- +{{#form on="rename_event"}} + {{if $_POST.rename_event && $est_admin}} + {{:assign var="t" value=$_POST.titre|strval|trim}} + {{:assign var="d" value=$_POST.date|strval|trim}} + {{if $t != "" && $d != ""}} + {{:save + id=$_POST.rename_event|intval + type="event" + titre=$t + date=$d + debut=$_POST.debut|strval|trim + fin=$_POST.fin|strval|trim + lieu=$_POST.lieu|strval|trim + description=$_POST.description|strval|trim + lien1_label=$_POST.lien1_label|strval|trim + lien1_url=$_POST.lien1_url|strval|trim + lien2_label=$_POST.lien2_label|strval|trim + lien2_url=$_POST.lien2_url|strval|trim + lien3_label=$_POST.lien3_label|strval|trim + lien3_url=$_POST.lien3_url|strval|trim + couleur=$_POST.couleur|strval|trim + calendrier=$_POST.calendrier|strval|trim}} + {{*:redirect url="index.html?an=%s&mois=%s"|args:$_POST.retour_an:$_POST.retour_mois}} + {{/if}} + {{/if}} +{{else}} + {{:form_errors}} +{{/form}} +*}} + +{{* ---------- Suppression d'un événement ---------- *}} +{{if $_POST.suppr_event && $est_admin}} + {{:delete id=$_POST.suppr_event|intval}} + {{:redirect url="index.html?an=%s&mois=%s"|args:$_POST.retour_an:$_POST.retour_mois}} +{{/if}} + +{{* ---------- Ajout d'une permanence récurrente ---------- *}} +{{if $_POST.add_perm && $est_admin}} + {{:assign var="lbl" value=$_POST.label|strval|trim}} + {{if $lbl != ""}} + {{:save type="permanence" jour=$_POST.jour|intval debut=$_POST.debut|strval|trim fin=$_POST.fin|strval|trim label=$lbl lieu=$_POST.lieu|strval|trim description=$_POST.description|strval|trim date_debut=$_POST.date_debut|strval|trim date_fin=$_POST.date_fin|strval|trim type_recurrence=$_POST.type_recurrence|strval|trim semaine_du_mois=$_POST.semaine_du_mois|intval couleur=$_POST.couleur|strval|trim calendrier=$_POST.calendrier|strval|trim}} + {{:redirect url="index.html"}} + {{/if}} +{{/if}} + +{{* ---------- Modification d'une permanence ---------- *}} +{{if $_POST.rename_perm && $est_admin}} + {{:assign var="lbl" value=$_POST.label|strval|trim}} + {{if $lbl != ""}} + {{:save id=$_POST.rename_perm|intval type="permanence" jour=$_POST.jour|intval debut=$_POST.debut|strval|trim fin=$_POST.fin|strval|trim label=$lbl lieu=$_POST.lieu|strval|trim description=$_POST.description|strval|trim date_debut=$_POST.date_debut|strval|trim date_fin=$_POST.date_fin|strval|trim type_recurrence=$_POST.type_recurrence|strval|trim semaine_du_mois=$_POST.semaine_du_mois|intval couleur=$_POST.couleur|strval|trim calendrier=$_POST.calendrier|strval|trim}} + {{:redirect url="index.html"}} + {{/if}} +{{/if}} + +{{* ---------- Suppression d'une permanence ---------- *}} +{{if $_POST.suppr_perm && $est_admin}} + {{:delete id=$_POST.suppr_perm|intval}} + {{:redirect url="index.html"}} +{{/if}} + +{{* ---------- Suppression d'une seule occurrence (date) d'un rendez-vous régulier ---------- *}} +{{if $_POST.suppr_occurrence && $est_admin}} + {{:assign var="perm_id" value=$_POST.perm_id|intval}} + {{:assign var="date_exclue" value=$_POST.date_exclue|strval|trim}} + {{#load id=$perm_id}} + {{:assign var="ov_jour" value=$jour}} + {{:assign var="ov_debut" value=$debut}} + {{:assign var="ov_fin" value=$fin}} + {{:assign var="ov_label" value=$label}} + {{:assign var="ov_date_debut" value=$date_debut}} + {{:assign var="ov_date_fin" value=$date_fin}} + {{:assign var="ov_type_recurrence" value=$type_recurrence}} + {{:assign var="ov_semaine_du_mois" value=$semaine_du_mois}} + {{:assign var="ov_couleur" value=$couleur}} + {{:assign var="ov_lieu" value=$lieu}} + {{:assign var="ov_description" value=$description}} + {{:assign var="ov_calendrier" value=$calendrier}} + {{#foreach from=$exceptions item="ex"}} + {{:assign var="new_exceptions." value=$ex}} + {{/foreach}} + {{/load}} + {{:assign var="new_exceptions." value=$date_exclue}} + {{:save id=$perm_id type="permanence" jour=$ov_jour debut=$ov_debut fin=$ov_fin label=$ov_label lieu=$ov_lieu description=$ov_description date_debut=$ov_date_debut date_fin=$ov_date_fin type_recurrence=$ov_type_recurrence semaine_du_mois=$ov_semaine_du_mois couleur=$ov_couleur calendrier=$ov_calendrier exceptions=$new_exceptions}} + {{:redirect url="index.html?an=%s&mois=%s"|args:$_POST.retour_an:$_POST.retour_mois}} +{{/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}} + +{{* ---------- Gestion des calendriers (ajout / suppression, admin) ---------- *}} +{{if $_POST.add_calendrier && $est_admin}} + {{:assign var="nom_cal" value=$_POST.nom_calendrier|strval|trim}} + {{if $nom_cal != ""}} + {{:save type="calendrier" nom=$nom_cal}} + {{:redirect url="index.html?nav=conf&conf=manage_cal&msg=ajout"}} + {{/if}} +{{/if}} + +{{if $_POST.suppr_calendrier && $est_admin}} + {{:assign var="cal_a_suppr" value=$_POST.suppr_calendrier|strval|trim}} + {{:assign var="where_reassign" value="$$.calendrier = '%s'"|args:$cal_a_suppr}} + {{#load where=$where_reassign}} + {{if $type == "event"}} + {{:save id=$id type="event" titre=$titre date=$date debut=$debut fin=$fin lieu=$lieu description=$description lien=$lien lien1_label=$lien1_label lien1_url=$lien1_url lien2_label=$lien2_label lien2_url=$lien2_url lien3_label=$lien3_label lien3_url=$lien3_url couleur=$couleur calendrier=""}} + {{elseif $type == "permanence"}} + {{:save id=$id type="permanence" jour=$jour debut=$debut fin=$fin label=$label lieu=$lieu description=$description date_debut=$date_debut date_fin=$date_fin type_recurrence=$type_recurrence semaine_du_mois=$semaine_du_mois couleur=$couleur exceptions=$exceptions calendrier=""}} + {{/if}} + {{/load}} + {{:delete id=$cal_a_suppr|intval}} + {{:redirect url="index.html?nav=conf&conf=manage_cal&msg=suppression"}} +{{/if}} + +{{* ---------- Liste des calendriers disponibles (Agenda + ceux ajoutés) ---------- *}} +{{:assign var="calendriers_liste.agenda.id" value="agenda"}} +{{:assign var="calendriers_liste.agenda.nom" value="Agenda"}} +{{:assign var="calendriers_liste.agenda.par_defaut" value=true}} +{{#load 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=false}} +{{/load}} + +{{* ---------- Filtre calendrier (choisi via ?cal=..., "agenda" par défaut) ---------- *}} +{{:assign var="cal_filtre" value=$_GET.cal|strval|trim}} +{{:assign var="cal_filtre_valide" value=false}} +{{if $cal_filtre == "tous"}}{{:assign var="cal_filtre_valide" value=true}}{{/if}} +{{#foreach from=$calendriers_liste item="cd_check"}} + {{if $cd_check.id == $cal_filtre}}{{:assign var="cal_filtre_valide" value=true}}{{/if}} +{{/foreach}} +{{if !$cal_filtre_valide}}{{:assign var="cal_filtre" value="agenda"}}{{/if}} + +{{:assign var="filtre_cal_sql" value=""}} +{{if $cal_filtre == "agenda"}} + {{:assign var="filtre_cal_sql" value=" AND ($$.calendrier = 'agenda' OR $$.calendrier IS NULL OR $$.calendrier = '')"}} +{{elseif $cal_filtre != "tous"}} + {{:assign var="filtre_cal_sql" value=" AND $$.calendrier = '%s'"|args:$cal_filtre}} +{{/if}} + +{{* ---------- 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 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 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}} +{{* + + + + + +| Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
|---|---|---|---|---|---|---|
|
+ {{$jour_num}}
+ {{#foreach from=$badges_tries item="bj"}}
+ {{if $bj.type == "perm"}}
+
+
+ {{else}}
+
+ {{if $bj.debut}}{{$bj.debut}}{{if $bj.fin}}–{{$bj.fin}}{{/if}} — {{/if}}{{$bj.label}}{{if $bj.lieu}}
+ {{if $est_admin}}
+
+ ✎
+
+
+ {{/if}}
+ 📍 {{$bj.lieu}}{{/if}} + {{if $bj.description}} {{$bj.description}} {{/if}}
+
+
+ {{/if}}
+ {{/foreach}}
+
+ {{if $bj.debut}}{{$bj.debut}}{{if $bj.fin}}–{{$bj.fin}}{{/if}} — {{/if}}{{$bj.label}}{{if $bj.lieu}}
+ {{if $est_admin}}
+
+ ✎
+
+
+ {{/if}}
+ 📍 {{$bj.lieu}}{{/if}} + {{if $bj.description}} {{$bj.description}} {{/if}}
+ |
+ {{else}}
+ + + {{/if}} + {{/if}} + {{if $vue == "mois" && "%d %% 7"|math:$n == 0 && $n != 42}} | |||||
| Nom | |
|---|---|
| {{$cd_gest.nom}}{{if $cd_gest.par_defaut}} (par défaut){{/if}} | ++ {{if !$cd_gest.par_defaut}} + + {{/if}} + | +
Supprimer un calendrier ne supprime pas les événements/rendez-vous qui y étaient rattachés — ils basculent simplement dans "Agenda" par défaut.
+| Récurrence | Jour | Horaires | Détail | Lieu | Calendrier | Depuis / jusqu'à | {{if $est_admin}}{{/if}} |
|---|---|---|---|---|---|---|---|
| + {{if $type_recurrence == "mensuel"}} + {{if $semaine_du_mois == -1}}Dernier{{elseif $semaine_du_mois == 1}}1er{{else}}{{$semaine_du_mois}}e{{/if}} du mois + {{elseif $type_recurrence == "quinzaine"}} + Toutes les 2 semaines + {{else}} + Chaque semaine + {{/if}} + | +{{$nom_jour}} | +{{$debut}}{{if $fin}} — {{$fin}}{{/if}} | +{{$label}} | +{{if $lieu}}{{$lieu}}{{/if}} | ++ {{:assign var="cal_eff_tab" value=$calendrier}} + {{if $cal_eff_tab == ""}}{{:assign var="cal_eff_tab" value="agenda"}}{{/if}} + {{:assign var="nom_cal_tab" from="calendriers_liste.%s.nom"|args:$cal_eff_tab}} + {{$nom_cal_tab}} + | +{{if $date_debut}}à partir du {{$date_debut|date_short}}{{/if}}{{if $date_debut && $date_fin}} {{/if}}{{if $date_fin}}jusqu'au {{$date_fin|date_short}}{{/if}} |
+ {{if $est_admin}}
+ + ✎ + + | + {{/if}} +
Aucun rendez-vous régulier enregistré.
{{/if}} +Rien de prévu sur les 3 prochains mois.
{{/if}} +{{else}} + {{:assign var="event_trouve" value=false}} +Aucun événement à venir pour l'instant.
{{/if}} +{{/if}} +Aucun événement à venir pour l'instant.
{{/if}} +{{* + + + +*}} \ No newline at end of file