Améliorations diverses : plusieurs calendriers avec mode d'accès (catégorie) et couleurs

This commit is contained in:
bountz committed 2026-11-12 11:08:25 +01:00
1 parent 76df5b8ad5
commit efa2b448ff
13 files changed
+507 -856

No files matched your search

+4 -2
View File
@@ -3,13 +3,15 @@
Module Agenda associatif pour le logiciel Paheko
## Fonctionnalités
+ Calendrier mensuel/semaine/liste,
+ gestion de plusieurs calendriers (couleurs et catégorie),
+ catégorie : accès public, membres, administrateurs
+ vues : mensuel/semaine/liste,
+ rendez-vous réguliers récurrents (avec exceptions et couleurs),
+ événements ponctuels,
+ purge et tri automatiques.
## Installation
Via module dans Paheko
Via import module dans Paheko
## License
Libre de tout droit
+158 -140
View File
@@ -1,6 +1,6 @@
{{if $vue != "liste"}}
<div class="card">
<h2>Calendrier ({{$cal_filtre}})</h2>
<h2 style="background:hsl({{$selected_calendar_couleur}},100%,50%)">Calendrier ({{$selected_calendar_name}})</h2>
{{if $vue == "mois"}}
<div class="nav-mois">
<a href="{{$_url}}?vue=mois&amp;an={{$an_prec}}&amp;mois={{$mois_prec}}">&larr;</a>
@@ -21,151 +21,169 @@
<a href="{{$_url}}?vue=semaine&amp;an={{$an}}&amp;mois={{$mois}}&amp;semaine_sel={{"%d+1"|math:$semaine_sel}}">&rarr;</a>
{{/if}}
</div>
{{/if}}
<div class="scroll-cal">
<table class="calendrier">
<thead>
<tr><th>Lun</th><th>Mar</th><th>Mer</th><th>Jeu</th><th>Ven</th><th>Sam</th><th>Dim</th></tr>
</thead>
<tbody>
<tr>
{{:assign var="cellules." value=1}}{{:assign var="cellules." value=2}}{{:assign var="cellules." value=3}}{{:assign var="cellules." value=4}}{{:assign var="cellules." value=5}}{{:assign var="cellules." value=6}}{{:assign var="cellules." value=7}}{{:assign var="cellules." value=8}}{{:assign var="cellules." value=9}}{{:assign var="cellules." value=10}}
{{:assign var="cellules." value=11}}{{:assign var="cellules." value=12}}{{:assign var="cellules." value=13}}{{:assign var="cellules." value=14}}{{:assign var="cellules." value=15}}{{:assign var="cellules." value=16}}{{:assign var="cellules." value=17}}{{:assign var="cellules." value=18}}{{:assign var="cellules." value=19}}{{:assign var="cellules." value=20}}
{{:assign var="cellules." value=21}}{{:assign var="cellules." value=22}}{{:assign var="cellules." value=23}}{{:assign var="cellules." value=24}}{{:assign var="cellules." value=25}}{{:assign var="cellules." value=26}}{{:assign var="cellules." value=27}}{{:assign var="cellules." value=28}}{{:assign var="cellules." value=29}}{{:assign var="cellules." value=30}}
{{:assign var="cellules." value=31}}{{:assign var="cellules." value=32}}{{:assign var="cellules." value=33}}{{:assign var="cellules." value=34}}{{:assign var="cellules." value=35}}{{:assign var="cellules." value=36}}{{:assign var="cellules." value=37}}{{:assign var="cellules." value=38}}{{:assign var="cellules." value=39}}{{:assign var="cellules." value=40}}
{{:assign var="cellules." value=41}}{{:assign var="cellules." value=42}}
{{#foreach from=$cellules item="n"}}
{{:assign var="rangee_n" value="floor((%d-1)/7)+1"|math:$n}}
{{if $vue == "mois" || $rangee_n == $semaine_sel}}
{{:assign var="jour_num" value="%d-%d"|math:$n:$decalage}}
{{if $jour_num >= 1 && $jour_num <= $nb_jours}}
{{:assign var="date_cellule" value="%04d-%02d-%02d"|args:$an:$mois:$jour_num}}
{{:assign var="dow_cellule" value=$date_cellule|date:"N"}}
{{:assign var="occurrence_mois" value="floor((%d-1)/7)+1"|math:$jour_num}}
{{:assign var="est_derniere_occurrence" value=false}}
{{if "%d+7"|math:$jour_num > $nb_jours}}{{:assign var="est_derniere_occurrence" value=true}}{{/if}}
{{:assign var="evts_ce_jour" from="events_par_jour.%s"|args:$date_cellule}}
{{:assign var="badges_jour" value=""}}
{{#foreach from=$perms_data item="pd"}}
{{if $pd.jour == $dow_cellule}}
{{if $pd.date_debut == "" || $date_cellule >= $pd.date_debut}}
{{if $pd.date_fin == "" || $date_cellule <= $pd.date_fin}}
{{:assign var="est_exclue" value=false}}
{{#foreach from=$pd.exceptions item="ex"}}
{{if $ex == $date_cellule}}{{:assign var="est_exclue" value=true}}{{/if}}
{{/foreach}}
{{if !$est_exclue}}
{{:assign var="afficher_badge" value=false}}
{{if $pd.type_recurrence == "mensuel"}}
{{if $pd.semaine_du_mois == -1 && $est_derniere_occurrence}}{{:assign var="afficher_badge" value=true}}{{/if}}
{{if $pd.semaine_du_mois == $occurrence_mois}}{{:assign var="afficher_badge" value=true}}{{/if}}
{{elseif $pd.type_recurrence == "quinzaine"}}
{{if $pd.date_debut != ""}}
{{:assign var="ref_sem_q" value=$pd.date_debut|date:"W"|intval}}
{{:assign var="cell_sem_q" value=$date_cellule|date:"W"|intval}}
{{:assign var="diff_sem_q" value="(%d-%d) %% 2"|math:$cell_sem_q:$ref_sem_q}}
{{if $diff_sem_q == 0}}{{:assign var="afficher_badge" value=true}}{{/if}}
{{/if}}
<div class="scroll-cal">
<table class="calendrier">
<thead>
<tr><th>Lun</th><th>Mar</th><th>Mer</th><th>Jeu</th><th>Ven</th><th>Sam</th><th>Dim</th></tr>
</thead>
<tbody>
<tr>
{{#foreach count=42 key="i"}}
{{:assign var="i" value="1+%d"|math:$i}}
{{:assign var="cellules." value=$i}}
{{/foreach}}
{{*
{{:assign var="cellules." value=1}}{{:assign var="cellules." value=2}}{{:assign var="cellules." value=3}}{{:assign var="cellules." value=4}}{{:assign var="cellules." value=5}}{{:assign var="cellules." value=6}}{{:assign var="cellules." value=7}}{{:assign var="cellules." value=8}}{{:assign var="cellules." value=9}}{{:assign var="cellules." value=10}}
{{:assign var="cellules." value=11}}{{:assign var="cellules." value=12}}{{:assign var="cellules." value=13}}{{:assign var="cellules." value=14}}{{:assign var="cellules." value=15}}{{:assign var="cellules." value=16}}{{:assign var="cellules." value=17}}{{:assign var="cellules." value=18}}{{:assign var="cellules." value=19}}{{:assign var="cellules." value=20}}
{{:assign var="cellules." value=21}}{{:assign var="cellules." value=22}}{{:assign var="cellules." value=23}}{{:assign var="cellules." value=24}}{{:assign var="cellules." value=25}}{{:assign var="cellules." value=26}}{{:assign var="cellules." value=27}}{{:assign var="cellules." value=28}}{{:assign var="cellules." value=29}}{{:assign var="cellules." value=30}}
{{:assign var="cellules." value=31}}{{:assign var="cellules." value=32}}{{:assign var="cellules." value=33}}{{:assign var="cellules." value=34}}{{:assign var="cellules." value=35}}{{:assign var="cellules." value=36}}{{:assign var="cellules." value=37}}{{:assign var="cellules." value=38}}{{:assign var="cellules." value=39}}{{:assign var="cellules." value=40}}
{{:assign var="cellules." value=41}}{{:assign var="cellules." value=42}}
*}}
{{#foreach from=$cellules item="n"}}
{{:assign var="rangee_n" value="floor((%d-1)/7)+1"|math:$n}}
{{if $vue == "mois" || $rangee_n == $semaine_sel}}
{{:assign var="jour_num" value="%d-%d"|math:$n:$decalage}}
{{if $jour_num >= 1 && $jour_num <= $nb_jours}}
{{:assign var="date_cellule" value="%04d-%02d-%02d"|args:$an:$mois:$jour_num}}
{{:assign var="dow_cellule" value=$date_cellule|date:"N"}}
{{:assign var="occurrence_mois" value="floor((%d-1)/7)+1"|math:$jour_num}}
{{:assign var="est_derniere_occurrence" value=false}}
{{if "%d+7"|math:$jour_num > $nb_jours}}{{:assign var="est_derniere_occurrence" value=true}}{{/if}}
{{:assign var="evts_ce_jour" from="events_par_jour.%s"|args:$date_cellule}}
{{:assign var="badges_jour" value=""}}
{{#foreach from=$perms_data item="pd"}}
{{if $pd.jour == $dow_cellule}}
{{if $pd.date_debut == "" || $date_cellule >= $pd.date_debut}}
{{if $pd.date_fin == "" || $date_cellule <= $pd.date_fin}}
{{:assign var="est_exclue" value=false}}
{{#foreach from=$pd.exceptions item="ex"}}
{{if $ex == $date_cellule}}{{:assign var="est_exclue" value=true}}{{/if}}
{{/foreach}}
{{if !$est_exclue}}
{{:assign var="afficher_badge" value=false}}
{{if $pd.type_recurrence == "mensuel"}}
{{if $pd.semaine_du_mois == -1 && $est_derniere_occurrence}}{{:assign var="afficher_badge" value=true}}{{/if}}
{{if $pd.semaine_du_mois == $occurrence_mois}}{{:assign var="afficher_badge" value=true}}{{/if}}
{{elseif $pd.type_recurrence == "quinzaine"}}
{{if $pd.date_debut != ""}}
{{:assign var="ref_sem_q" value=$pd.date_debut|date:"W"|intval}}
{{:assign var="cell_sem_q" value=$date_cellule|date:"W"|intval}}
{{:assign var="diff_sem_q" value="(%d-%d) %% 2"|math:$cell_sem_q:$ref_sem_q}}
{{if $diff_sem_q == 0}}{{:assign var="afficher_badge" value=true}}{{/if}}
{{/if}}
{{else}}
{{:assign var="afficher_badge" value=true}}
{{/if}}
{{if $afficher_badge}}
{{:assign var="cle_b" value="%s_a_perm%s"|args:$pd.debut:$pd.id}}
{{:assign var="badges_jour.%s.type"|args:$cle_b value="perm"}}
{{:assign var="badges_jour.%s.debut"|args:$cle_b value=$pd.debut}}
{{:assign var="badges_jour.%s.fin"|args:$cle_b value=$pd.fin}}
{{:assign var="badges_jour.%s.label"|args:$cle_b value=$pd.label}}
{{:assign var="badges_jour.%s.couleur"|args:$cle_b value=$pd.couleur|or:'#4c7a2e'}}
{{:assign var="badges_jour.%s.pid"|args:$cle_b value=$pd.id}}
{{:assign var="badges_jour.%s.lieu"|args:$cle_b value=$pd.lieu}}
{{:assign var="badges_jour.%s.description"|args:$cle_b value=$pd.description}}
{{/if}}
{{/if}}
{{else}}
{{:assign var="afficher_badge" value=true}}
{{/if}}
{{if $afficher_badge}}
{{:assign var="cle_b" value="%s_a_perm%s"|args:$pd.debut:$pd.id}}
{{:assign var="badges_jour.%s.type"|args:$cle_b value="perm"}}
{{:assign var="badges_jour.%s.debut"|args:$cle_b value=$pd.debut}}
{{:assign var="badges_jour.%s.fin"|args:$cle_b value=$pd.fin}}
{{:assign var="badges_jour.%s.label"|args:$cle_b value=$pd.label}}
{{:assign var="badges_jour.%s.couleur"|args:$cle_b value=$pd.couleur|or:'#4c7a2e'}}
{{:assign var="badges_jour.%s.pid"|args:$cle_b value=$pd.id}}
{{:assign var="badges_jour.%s.lieu"|args:$cle_b value=$pd.lieu}}
{{:assign var="badges_jour.%s.description"|args:$cle_b value=$pd.description}}
{{/if}}
{{/if}}
{{/if}}
{{/foreach}}
{{if $evts_ce_jour}}
{{#foreach from=$evts_ce_jour item="ev"}}
{{:assign var="cle_b" value="%s_b_evt%s"|args:$ev.debut:$ev.id}}
{{:assign var="badges_jour.%s.type"|args:$cle_b value="evt"}}
{{:assign var="badges_jour.%s.id"|args:$cle_b value=$ev.id}}
{{:assign var="badges_jour.%s.debut"|args:$cle_b value=$ev.debut}}
{{:assign var="badges_jour.%s.fin"|args:$cle_b value=$ev.fin}}
{{:assign var="badges_jour.%s.label"|args:$cle_b value=$ev.titre}}
{{:assign var="badges_jour.%s.couleur"|args:$cle_b value=$ev.couleur|or:'#8c3a1e'}}
{{:assign var="badges_jour.%s.lieu"|args:$cle_b value=$ev.lieu}}
{{:assign var="badges_jour.%s.description"|args:$cle_b value=$ev.description}}
{{:assign var="badges_jour.%s.lien"|args:$cle_b value=$ev.lien}}
{{:assign var="badges_jour.%s.lien1_label"|args:$cle_b value=$ev.lien1_label}}
{{:assign var="badges_jour.%s.lien1_url"|args:$cle_b value=$ev.lien1_url}}
{{:assign var="badges_jour.%s.lien2_label"|args:$cle_b value=$ev.lien2_label}}
{{:assign var="badges_jour.%s.lien2_url"|args:$cle_b value=$ev.lien2_url}}
{{:assign var="badges_jour.%s.lien3_label"|args:$cle_b value=$ev.lien3_label}}
{{:assign var="badges_jour.%s.lien3_url"|args:$cle_b value=$ev.lien3_url}}
{{/foreach}}
{{/if}}
{{/if}}
{{/foreach}}
{{if $evts_ce_jour}}
{{#foreach from=$evts_ce_jour item="ev"}}
{{:assign var="cle_b" value="%s_b_evt%s"|args:$ev.debut:$ev.id}}
{{:assign var="badges_jour.%s.type"|args:$cle_b value="evt"}}
{{:assign var="badges_jour.%s.id"|args:$cle_b value=$ev.id}}
{{:assign var="badges_jour.%s.debut"|args:$cle_b value=$ev.debut}}
{{:assign var="badges_jour.%s.fin"|args:$cle_b value=$ev.fin}}
{{:assign var="badges_jour.%s.label"|args:$cle_b value=$ev.titre}}
{{:assign var="badges_jour.%s.couleur"|args:$cle_b value=$ev.couleur|or:'#8c3a1e'}}
{{:assign var="badges_jour.%s.lieu"|args:$cle_b value=$ev.lieu}}
{{:assign var="badges_jour.%s.description"|args:$cle_b value=$ev.description}}
{{:assign var="badges_jour.%s.lien"|args:$cle_b value=$ev.lien}}
{{:assign var="badges_jour.%s.lien1_label"|args:$cle_b value=$ev.lien1_label}}
{{:assign var="badges_jour.%s.lien1_url"|args:$cle_b value=$ev.lien1_url}}
{{:assign var="badges_jour.%s.lien2_label"|args:$cle_b value=$ev.lien2_label}}
{{:assign var="badges_jour.%s.lien2_url"|args:$cle_b value=$ev.lien2_url}}
{{:assign var="badges_jour.%s.lien3_label"|args:$cle_b value=$ev.lien3_label}}
{{:assign var="badges_jour.%s.lien3_url"|args:$cle_b value=$ev.lien3_url}}
{{/foreach}}
{{/if}}
{{if $badges_jour}}
{{:assign var="badges_tries" value=$badges_jour|ksort|values}}
{{else}}
{{:assign var="badges_tries" value=""}}
{{/if}}
<td{{if $date_cellule == $aujourdhui}} class="today"{{/if}}>
<div class="num">{{$jour_num}}</div>
{{#foreach from=$badges_tries item="bj"}}
{{if $bj.type == "perm"}}
<div class="perm-badge" style="background:{{$bj.couleur}};">
<div class="badge-content" onclick="ouvrirDetailEvt(this);" data-titre="{{$bj.label}}" data-horaire="{{if $bj.debut}}{{$bj.debut}}{{if $bj.fin}}–{{$bj.fin}}{{/if}}{{/if}}" data-lieu="{{$bj.lieu}}" data-description="{{$bj.description}}" data-lien1-label="" data-lien1-url="" data-lien2-label="" data-lien2-url="" data-lien3-label="" data-lien3-url="">
{{if $bj.debut}}{{$bj.debut}}{{if $bj.fin}}–{{$bj.fin}}{{/if}} — {{/if}}{{$bj.label}}{{if $bj.lieu}}<br /><a class="lieu-lien" href="https://www.openstreetmap.org/search?query={{$bj.lieu|url_encode}}" target="_blank" rel="noopener" onclick="event.stopPropagation();">&#128205; {{$bj.lieu}}</a>{{/if}}
{{if $bj.description}}<div class="evt-desc-apercu">{{$bj.description}}</div>{{/if}}
</div>
{{if $est_admin}}
<span class="badge-actions">
<a class="badge-edit" href="index.html?edit_perm={{$bj.pid}}#form-perm" title="Modifier" onclick="event.stopPropagation();">&#9998;</a>
<form method="post" action="index.html?an={{$an}}&amp;mois={{$mois}}" class="mini-form" onclick="event.stopPropagation();">
<input type="hidden" name="perm_id" value="{{$bj.pid}}" />
<input type="hidden" name="date_exclue" value="{{$date_cellule}}" />
<input type="hidden" name="retour_an" value="{{$an}}" />
<input type="hidden" name="retour_mois" value="{{$mois}}" />
<button type="submit" name="suppr_occurrence" value="1" class="mini-x" title="Supprimer seulement ce jour">&#10005;</button>
</form>
</span>
{{/if}}
</div>
{{if $badges_jour}}
{{:assign var="badges_tries" value=$badges_jour|ksort|values}}
{{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%);
*}}
<div class="evt-badge" style="background:hsl({{$bj.couleur}},100%,50%);">
<div class="badge-content" onclick="ouvrirDetailEvt(this);" data-titre="{{$bj.label}}" data-horaire="{{if $bj.debut}}{{$bj.debut}}{{if $bj.fin}}–{{$bj.fin}}{{/if}}{{/if}}" data-lieu="{{$bj.lieu}}" data-description="{{$bj.description}}" data-lien="{{$bj.lien}}" data-lien1-label="{{$bj.lien1_label}}" data-lien1-url="{{$bj.lien1_url}}" data-lien2-label="{{$bj.lien2_label}}" data-lien2-url="{{$bj.lien2_url}}" data-lien3-label="{{$bj.lien3_label}}" data-lien3-url="{{$bj.lien3_url}}">
{{if $bj.debut}}{{$bj.debut}}{{if $bj.fin}}–{{$bj.fin}}{{/if}} — {{/if}}{{$bj.label}}{{if $bj.lieu}}<br /><a class="lieu-lien" href="https://www.openstreetmap.org/search?query={{$bj.lieu|url_encode}}" target="_blank" rel="noopener" onclick="event.stopPropagation();">&#128205; {{$bj.lieu}}</a>{{/if}}
{{if $bj.description}}<div class="evt-desc-apercu">{{$bj.description}}</div>{{/if}}
</div>
{{if $est_admin}}
<span class="badge-actions">
<a class="badge-edit" href="index.html?edit_event={{$bj.id}}&amp;an={{$an}}&amp;mois={{$mois}}#form-event" title="Modifier" onclick="event.stopPropagation();">&#9998;</a>
<form method="post" action="index.html?an={{$an}}&amp;mois={{$mois}}" class="mini-form" onclick="event.stopPropagation();">
<input type="hidden" name="retour_an" value="{{$an}}" />
<input type="hidden" name="retour_mois" value="{{$mois}}" />
<button type="submit" name="suppr_event" value="{{$bj.id}}" class="mini-x" title="Supprimer">&#10005;</button>
</form>
</span>
{{/if}}
</div>
{{:assign var="badges_tries" value=""}}
{{/if}}
{{/foreach}}
</td>
{{else}}
<td class="vide"></td>
{{/if}}
{{/if}}
{{if $vue == "mois" && "%d %% 7"|math:$n == 0 && $n != 42}}</tr><tr>{{/if}}
{{/foreach}}
</tr>
</tbody>
</table>
</div>
</div>
<td{{if $date_cellule == $aujourdhui}} class="today"{{/if}}>
<div class="num">{{$jour_num}}</div>
{{#foreach from=$badges_tries item="bj"}}
{{if $bj.type == "perm"}}
<div class="perm-badge" style="background:{{$bj.couleur}};">
<div class="badge-content" onclick="ouvrirDetailEvt(this);" data-titre="{{$bj.label}}" data-horaire="{{if $bj.debut}}{{$bj.debut}}{{if $bj.fin}}–{{$bj.fin}}{{/if}}{{/if}}" data-lieu="{{$bj.lieu}}" data-description="{{$bj.description}}" data-lien1-label="" data-lien1-url="" data-lien2-label="" data-lien2-url="" data-lien3-label="" data-lien3-url="">
{{if $bj.debut}}{{$bj.debut}}{{if $bj.fin}}–{{$bj.fin}}{{/if}} — {{/if}}{{$bj.label}}{{if $bj.lieu}}<br /><a class="lieu-lien" href="https://www.openstreetmap.org/search?query={{$bj.lieu|url_encode}}" target="_blank" rel="noopener" onclick="event.stopPropagation();">&#128205; {{$bj.lieu}}</a>{{/if}}
{{if $bj.description}}<div class="evt-desc-apercu">{{$bj.description}}</div>{{/if}}
</div>
{{if $est_admin}}
<span class="badge-actions">
<a class="badge-edit" href="index.html?edit_perm={{$bj.pid}}#form-perm" title="Modifier" onclick="event.stopPropagation();">&#9998;</a>
<form method="post" action="" class="mini-form" onclick="event.stopPropagation();">
{{:input type="hidden" name="perm_id" default=$bj.pid }}
{{:input type="hidden" name="date_exclue" default=$date_cellule }}
{{:input type="hidden" name="retour_an" default=$an }}
{{:input type="hidden" name="retour_mois" default=$mois }}
{{:button type="submit" name="suppr_occurrence" class="mini-x" shape="delete" title="Supprimer seulement ce jour" value=$bj.pid}}
{{*
<input type="hidden" name="perm_id" value="{{$bj.pid}}" />
<input type="hidden" name="date_exclue" value="{{$date_cellule}}" />
<input type="hidden" name="retour_an" value="{{$an}}" />
<input type="hidden" name="retour_mois" value="{{$mois}}" />
<button type="submit" name="suppr_occurrence" value="1" class="mini-x" title="Supprimer seulement ce jour">&#10005;</button>
*}}
</form>
</span>
{{/if}}
</div>
{{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%);
*}}
<div class="evt-badge" style="background:hsl({{$bj.couleur}},100%,50%);">
<div class="badge-content" onclick="ouvrirDetailEvt(this);" data-titre="{{$bj.label}}" data-horaire="{{if $bj.debut}}{{$bj.debut}}{{if $bj.fin}}–{{$bj.fin}}{{/if}}{{/if}}" data-lieu="{{$bj.lieu}}" data-description="{{$bj.description}}" data-lien="{{$bj.lien}}" data-lien1-label="{{$bj.lien1_label}}" data-lien1-url="{{$bj.lien1_url}}" data-lien2-label="{{$bj.lien2_label}}" data-lien2-url="{{$bj.lien2_url}}" data-lien3-label="{{$bj.lien3_label}}" data-lien3-url="{{$bj.lien3_url}}">
{{if $bj.debut}}{{$bj.debut}}{{if $bj.fin}}–{{$bj.fin}}{{/if}} — {{/if}}{{$bj.label}}{{if $bj.lieu}}<br /><a class="lieu-lien" href="https://www.openstreetmap.org/search?query={{$bj.lieu|url_encode}}" target="_blank" rel="noopener" onclick="event.stopPropagation();">&#128205; {{$bj.lieu}}</a>{{/if}}
{{if $bj.description}}<div class="evt-desc-apercu">{{$bj.description}}</div>{{/if}}
</div>
{{if $est_admin}}
<span class="badge-actions">
<a class="badge-edit" href="index.html?edit_event={{$bj.id}}&amp;an={{$an}}&amp;mois={{$mois}}#form-event" title="Modifier" onclick="event.stopPropagation();">&#9998;</a>
<form method="post" action="" class="mini-form" onclick="event.stopPropagation();">
{{:input type="hidden" name="retour_an" default=$an }}
{{:input type="hidden" name="retour_mois" default=$mois }}
{{:button type="submit" name="suppr_event" class="mini-x" shape="delete" title="Supprimer" value=$bj.id}}
{{*
<input type="hidden" name="retour_an" value="{{$an}}" />
<input type="hidden" name="retour_mois" value="{{$mois}}" />
<button type="submit" name="suppr_event" value="{{$bj.id}}" class="mini-x" title="Supprimer">&#10005;</button>
*}}
</form>
</span>
{{/if}}
</div>
{{/if}}
{{/foreach}}
</td>
{{else}}
<td class="vide"></td>
{{/if}}
{{/if}}
{{if $vue == "mois" && "%d %% 7"|math:$n == 0 && $n != 42}}</tr><tr>{{/if}}
{{/foreach}}
</tr>
</tbody>
</table>
</div>
</div>
{{/if}}
+77 -69
View File
@@ -1,3 +1,4 @@
{{* Gestion des Calendriers *}}
{{if $est_admin && $subconf=="manage_cal"}}
<div class="card">
<h2>Gérer les calendriers</h2>
@@ -6,32 +7,71 @@
<tbody>
{{#foreach from=$calendriers_liste item="cd_gest"}}
<tr>
<td>{{$cd_gest.nom}}{{if $cd_gest.par_defaut}} <small style="color:#999;">(par défaut)</small>{{/if}}</td>
<td>
{{if !$cd_gest.par_defaut}}
<form method="post" action="" style="display:inline">
{{* <button type="submit" name="suppr_calendrier" value="{{$cd_gest.id}}" class="mini" title="Supprimer ce calendrier">&#10005; Supprimer</button>*}}
{{:button type="submit" name="suppr_calendrier" label="Supprimer ce calendrier" shape="delete" value="%s"|args:$cd_gest.id}}
</form>
{{/if}}
<span style="color:hsl({{$cd_gest.textecouleur}},100%,50%) ;background:hsl({{$cd_gest.couleur}},100%,50%);"> {{$cd_gest.nom}}</span>
{{if $cd_gest.par_defaut}} <small style="color:#999;">(par défaut)</small>{{/if}}</td>
<td>
{{:linkbutton href="index.html?nav=conf&conf=manage_cal&idcal=%s"|args:$cd_gest.id label="Modifier ce calendrier" class="mini" shape="edit"}}
<form method="post" action="" style="display:inline">
{{if !$cd_gest.par_defaut}}
{{:button type="submit" name="suppr_calendrier" label="Supprimer ce calendrier" class="mini" shape="delete" value="%s"|args:$cd_gest.id}}
{{/if}}
</form>
</td>
</tr>
{{/foreach}}
</tbody>
</table>
<p class="aide">Supprimer un calendrier ne supprime pas les événements/rendez-vous qui y étaient rattachés — ils basculent simplement dans "Agenda" par défaut.</p>
<form method="post" action="" class="ajout" style="margin-top:.8rem;">
{{* <div class="champ" style="flex:2; min-width:14rem;"><label>Nouveau calendrier</label>
<input type="text" name="nom_calendrier" placeholder="ex. Réunions" required="required" />
</div>
<button type="submit" name="add_calendrier" value="1">Ajouter</button>
*}}
<dl>{{:input type="text" name="nom_calendrier" label="Nouveau calendrier" help="ex. Réunions" required=true}}</dl>
{{:button type="submit" name="add_calendrier" label="Ajouter" title="Ajouter un calendrier" shape="plus" value="1"}}
<fieldset class="entree">
{{if $_GET.idcal && $est_admin}}
<h2>Modifier un calendrier</h2>
{{:assign var="_cnom" from="calendriers_liste.%s.nom"|args:$_GET.idcal}}
{{:assign var="_cdef" from="calendriers_liste.%s.par_defaut"|args:$_GET.idcal}}
{{:assign var="_ccou" from="calendriers_liste.%s.couleur"|args:$_GET.idcal}}
{{:assign var="_ctco" from="calendriers_liste.%s.textecouleur"|args:$_GET.idcal}}
{{:assign var="_ccat" from="calendriers_liste.%s.categorie"|args:$_GET.idcal}}
{{if $_cdef == true}}
{{:assign _checked="checked"}}
{{/if}}
<dl>{{:input type="text" name="nom_calendrier" label="Nom du calendrier" default=$_cnom required=true}}</dl>
<dl>{{:input type="hue" name="couleur" label="Couleur de l'arrière-plan" default=$_ccou}}</dl>
<dl>{{:input type="hue" name="couleur_texte" label="Couleur du texte" default=$_ctco}}</dl>
<dl>{{:input type="checkbox" name="pardefaut" label="Calendrier par défaut ?" checked="%s"|args:$_checked value=true}}</dl>
{{if $_ccat == "p"}} {{:assign _p="checked"}} {{elseif $_ccat == "m"}} {{:assign _m="checked"}} {{elseif $_ccat == "a"}} {{:assign _a="checked"}} {{else}} {{:assign _p="checked"}} {{/if}}
{{:assign var="options." id="p" texte="public" checked="%s"|args:$_p}}
{{:assign var="options." id="m" texte="membres" checked="%s"|args:$_m}}
{{:assign var="options." id="a" texte="admins" checked="%s"|args:$_a}}
<dl>
{{#foreach from=$options item="o"}}
{{:input type="radio" name="categorie" label="Catégorie" value=$o.id label=$o.texte checked=$o.checked}}
{{/foreach}}
{{*:input type="radio" name="categorie" label="Catégorie" checked="%s"|args:$_checked value=true*}}
</dl>
{{:button type="submit" name="mod_calendrier" label="Modifier" title="Modifier un calendrier" shape="plus" value="%d"|args:$_GET.idcal}}
{{else}}
<h2>Ajouter un calendrier</h2>
<dl>{{:input type="text" name="nom_calendrier" label="Nom du calendrier" help="ex. Réunions" required=true}}</dl>
<dl>{{:input type="hue" name="couleur" label="Couleur de l'arrière-plan" help="Couleur par defaut de l'arrière-plan des évènements créés dans ce calendrier." }}</dl>
<dl>{{:input type="hue" name="couleur_texte" label="Couleur du texte" default=$_ctco}}</dl>
<dl>{{:input type="checkbox" name="pardefaut" label="Calendrier par défaut ?" value=true}}</dl>
{{:assign var="options." id="p" texte="public" checked="checked"}}
{{:assign var="options." id="m" texte="membres"}}
{{:assign var="options." id="a" texte="admins"}}
<dl>
{{#foreach from=$options item="o"}}
{{:input type="radio" name="categorie" label="Catégorie" value=$o.id label=$o.texte checked=$o.checked}}
{{/foreach}}
</dl>
{{:button type="submit" name="add_calendrier" label="Ajouter" title="Ajouter un calendrier" shape="plus" value="1"}}
{{/if}}
</fieldset>
</form>
<p class="aide" style="color:#777; font-size:.85rem; margin:.6rem 0 0;">Supprimer un calendrier ne supprime pas les événements/rendez-vous qui y étaient rattachés — ils basculent simplement dans "Agenda" par défaut.</p>
</div>
{{/if}}
{{* Gestion des évènements *}}
{{if $est_admin && $subconf=="manage_eve"}}
{{*:debug event=$event*}}
<form method="post" action="">
@@ -45,78 +85,46 @@
{{:input type="time" name="debut" label="De" default=$event.debut}}
{{:input type="time" name="fin" label="À" default=$event.fin}}
{{:input type="text" name="lieu" label="Lieu" default=$event.lieu}}
{{:input type="hue" name="couleur" label="Couleur" }}
{{if $edit_event}}
{{:input type="hue" name="couleur" label="Couleur" default=$event.couleur }}
{{/if}}
{{:assign var="ee_cal_eff" value=$event.calendrier}}
{{if $ee_cal_eff == ""}}{{:assign var="ee_cal_eff" value="agenda"}}{{/if}}
{{*if $ee_cal_eff == ""}}{{:assign var="ee_cal_eff" value="agenda"}}{{/if*}} {{* inutile *}}
{{#foreach from=$calendriers_liste item="cd_opt"}}
{{:assign var="calendriers_options.%s"|args:$cd_opt.id label=$cd_opt.nom}}
{{/foreach}}
{{*:debug cal=$calendriers_options*}}
{{:input type="select" name="calendrier" label="Calendrier" default=$event.calendrier options=$calendriers_options required=true}}
{{:input type="textarea" cols=40 rows=3 name="description" label="Description complète" default=$event.description required=false}}
{{#foreach count=3 key="i"}}
{{:assign var="i" value="1+%d"|math:$i}}
{{:assign _ell="event.lien%d_label"|args:$i _elu="event.lien%d_url"|args:$i}}
{{:assign var="ell" from=$_ell}}
{{:assign var="elu" from=$_elu}}
<div class="ajout">
{{:input type="text" name="lien%d_label"|args:$i label="Lien %d — libellé"|args:$i default=$ell placeholder="Ex. Inscription"}}
{{:input type="text" name="lien%d_url"|args:$i label="Lien %d — URL"|args:$i default=$elu placeholder="https://…"}}
{{/foreach}}
{{*
<div class="ajout">{{:input type="text" name="lien1_label" label="Lien 1 — libellé" default=$event.lien1_label placeholder="Ex. Affiche"}}{{:input type="text" name="lien1_url" label="Lien 1 — URL" default=$event.lien1_url placeholder="https://…"}}</div>
<div class="ajout">{{:input type="text" name="lien2_label" label="Lien 2 — libellé" default=$event.lien2_label placeholder="Ex. Programme"}}{{:input type="text" name="lien2_url" label="Lien 2 — URL" default=$event.lien2_url placeholder="https://…"}}</div>
<div class="ajout">{{:input type="text" name="lien3_label" label="Lien 3 — libellé" default=$event.lien3_label placeholder="Ex. Inscription"}}{{:input type="text" name="lien3_url" label="Lien 3 — URL" default=$event.lien3_url placeholder="https://…"}}</div>
*}}
</dl>
</fieldset>
<p class="submit">
{{if $edit_event}}
<a class="retour" href="?an={{$an}}&amp;mois={{$mois}}">Annuler</a>
{{:button type="submit" name="save_event" label="Enregistrer les modifications" class="main" value="%s"|args:$event.key}}
{{:input type="hidden" name="event_id" default=$event.id}}
{{:button type="submit" name="save_event" label="Enregistrer les modifications" class="main"}}
{{else}}
{{:button type="submit" name="save_event" label="Ajouter l'événement" shape="plus" class="main"}}
{{/if}}
</p>
</form>
{{* <div class="card" id="form-event">
<h2>{{if $edit_event}}Modifier l'événement{{else}}Ajouter un événement{{/if}}</h2>
<form method="post" action="index.html?an={{$an}}&amp;mois={{$mois}}">
<input type="hidden" name="retour_an" value="{{$an}}" />
<input type="hidden" name="retour_mois" value="{{$mois}}" />
<div class="ajout">
<div class="champ" style="flex:2; min-width:14rem;"><label>Titre</label><input type="text" name="titre" value="{{$ee_titre}}" required="required" /></div>
<div class="champ"><label>Date</label><input type="date" name="date" value="{{$ee_date}}" required="required" /></div>
<div class="champ"><label>De</label><input type="time" name="debut" value="{{$ee_debut}}" /></div>
<div class="champ"><label>À</label><input type="time" name="fin" value="{{$ee_fin}}" /></div>
<div class="champ" style="flex:1; min-width:10rem;"><label>Lieu</label><input type="text" name="lieu" value="{{$ee_lieu}}" /></div>
<div class="champ" style="flex:0 0 5rem;"><label>Couleur</label><input type="color" name="couleur" value="{{$ee_couleur|or:'#8c3a1e'}}" style="height:2.4rem; padding:.2rem;" /></div>
<div class="champ" style="flex:0 0 10rem;">
<label>Calendrier</label>
<select name="calendrier">
{{:assign var="ee_cal_eff" value=$ee_calendrier}}
{{if $ee_cal_eff == ""}}{{:assign var="ee_cal_eff" value="agenda"}}{{/if}}
{{#foreach from=$calendriers_liste item="cd_opt"}}
<option value="{{$cd_opt.id}}" {{if $cd_opt.id == $ee_cal_eff}}selected="selected"{{/if}}>{{$cd_opt.nom}}</option>
{{/foreach}}
</select>
</div>
</div>
<p><label>Description (facultatif)</label><textarea name="description" rows="2">{{$ee_description}}</textarea></p>
<p style="margin:.8rem 0 .3rem; font-size:.85rem; color:#666;">Liens (affiche, document, inscription… — jusqu'à 3, facultatifs)</p>
<div class="ajout">
<div class="champ" style="flex:1; min-width:10rem;"><label>Lien 1 — libellé</label><input type="text" name="lien1_label" value="{{$ee_lien1_label}}" placeholder="ex. Affiche" /></div>
<div class="champ" style="flex:2; min-width:14rem;"><label>Lien 1 — URL</label><input type="url" name="lien1_url" value="{{$ee_lien1_url}}" placeholder="https://…" /></div>
</div>
<div class="ajout">
<div class="champ" style="flex:1; min-width:10rem;"><label>Lien 2 — libellé</label><input type="text" name="lien2_label" value="{{$ee_lien2_label}}" placeholder="ex. Programme" /></div>
<div class="champ" style="flex:2; min-width:14rem;"><label>Lien 2 — URL</label><input type="url" name="lien2_url" value="{{$ee_lien2_url}}" placeholder="https://…" /></div>
</div>
<div class="ajout">
<div class="champ" style="flex:1; min-width:10rem;"><label>Lien 3 — libellé</label><input type="text" name="lien3_label" value="{{$ee_lien3_label}}" placeholder="ex. Inscription" /></div>
<div class="champ" style="flex:2; min-width:14rem;"><label>Lien 3 — URL</label><input type="url" name="lien3_url" value="{{$ee_lien3_url}}" placeholder="https://…" /></div>
</div>
{{if $edit_event}}
<button type="submit" name="rename_event" value="{{$edit_event}}">Enregistrer les modifications</button>
<a class="retour" href="index.html?an={{$an}}&amp;mois={{$mois}}">Annuler</a>
{{else}}
<button type="submit" name="add_event" value="1">Ajouter l'événement</button>
{{/if}}
</form>
</div>
*}}
{{/if}}
{{* Gestion des occurences *}}
{{if $est_admin && $subconf=="manage_app"}}
<div class="card" id="form-perm">
<h2>{{if $edit_perm}}Modifier ce rendez-vous régulier{{else}}Ajouter un rendez-vous régulier{{/if}}</h2>
@@ -163,10 +171,10 @@
<label>Calendrier</label>
<select name="calendrier">
{{:assign var="ep_cal_eff" value=$ep_calendrier}}
{{if $ep_cal_eff == ""}}{{:assign var="ep_cal_eff" value="agenda"}}{{/if}}
{{#foreach from=$calendriers_liste item="cd_opt2"}}
<option value="{{$cd_opt2.id}}" {{if $cd_opt2.id == $ep_cal_eff}}selected="selected"{{/if}}>{{$cd_opt2.nom}}</option>
{{/foreach}}
{{if $ep_cal_eff == ""}}{{:assign var="ep_cal_eff" value="agenda"}}{{/if}}
{{#foreach from=$calendriers_liste item="cd_opt2"}}
<option value="{{$cd_opt2.id}}" {{if $cd_opt2.id == $ep_cal_eff}}selected="selected"{{/if}}>{{$cd_opt2.nom}}</option>
{{/foreach}}
</select>
</div>
</div>
+6 -1
View File
@@ -31,10 +31,15 @@
{{if $est_admin}}
<span>
<a class="mini" href="index.html?edit_event={{$id}}&amp;an={{$an}}&amp;mois={{$mois}}#form-event" title="Modifier">&#9998;</a>
<form method="post" action="index.html?an={{$an}}&amp;mois={{$mois}}" style="display:inline">
<form method="post" action="" style="display:inline">
{{:input type="hidden" name="retour_an" default=$an}}
{{:input type="hidden" name="retour_mois" default=$mois}}
{{:button type="submit" name="suppr_event" label="Supprimer" shape="delete" class="mini" default=$id required=true}}
{{*
<input type="hidden" name="retour_an" value="{{$an}}" />
<input type="hidden" name="retour_mois" value="{{$mois}}" />
<button type="submit" name="suppr_event" value="{{$id}}" class="mini" title="Supprimer">&#10005;</button>
*}}
</form>
</span>
{{/if}}
+7 -7
View File
@@ -13,13 +13,13 @@
{{#restrict section="web" level="write"}}
<aside>
{{*:debug cf=$cal_filtre*}}
{{if $cal_filtre == "tous"}}
{{:button label="Tous les calendriers" shape="calendar" href="%s?vue=%s&an=%s&mois=%s&cal=tous"|args:$_url:$vue:$an:$mois disabled=true}}
{{if $selected_calendar == -1}}
{{:button label="Tous les calendriers" shape="calendar" href="%s?vue=%s&an=%s&mois=%s&cal=-1"|args:$_url:$vue:$an:$mois disabled=true}}
{{else}}
{{:linkbutton label="Tous les calendriers" shape="calendar" href="%s?vue=%s&an=%s&mois=%s&cal=tous"|args:$_url:$vue:$an:$mois}}
{{:linkbutton label="Tous les calendriers" shape="calendar" href="%s?vue=%s&an=%s&mois=%s&cal=-1"|args:$_url:$vue:$an:$mois}}
{{/if}}
{{#foreach from=$calendriers_liste item="cd_tab"}}
{{if $cal_filtre == $cd_tab.id}}
{{if $selected_calendar == $cd_tab.id}}
{{:button label="%s"|args:$cd_tab.nom shape="calendar" href="%s?vue=%s&an=%s&mois=%s&cal=%s"|args:$_url:$vue:$an:$mois:$cd_tab.id disabled=true}}
{{else}}
{{:linkbutton label="%s"|args:$cd_tab.nom shape="calendar" href="%s?vue=%s&an=%s&mois=%s&cal=%s"|args:$_url:$vue:$an:$mois:$cd_tab.id}}
@@ -44,9 +44,9 @@
{{:assign _liclass="nav-mois" _ulclass="modal-liens"}}
{{/if}}
<ul class="{{$_ulclass}}">
<li {{if !$subcurrent || $subcurrent == 'mois'}} class="{{$_liclass}}"{{/if}}><a href="{{$_url}}?vue=mois&an={{$an}}&mois={{$mois}}&cal={{$cal}}">Mois</a></li>
<li {{if $subcurrent == 'semaine'}} class="{{$_liclass}}"{{/if}}><a href="{{$_url}}?vue=semaine&an={{$an}}&mois={{$mois}}&cal={{$cal}}">Semaine</a></li>
<li {{if $subcurrent == 'liste'}} class="{{$_liclass}}"{{/if}}><a href="{{$_url}}?vue=liste&cal={{$cal}}">Liste</a></li>
<li {{if !$subcurrent || $subcurrent == 'mois'}} class="{{$_liclass}}"{{/if}}><a href="{{$_url}}?vue=mois&an={{$an}}&mois={{$mois}}">Mois</a></li>
<li {{if $subcurrent == 'semaine'}} class="{{$_liclass}}"{{/if}}><a href="{{$_url}}?vue=semaine&an={{$an}}&mois={{$mois}}">Semaine</a></li>
<li {{if $subcurrent == 'liste'}} class="{{$_liclass}}"{{/if}}><a href="{{$_url}}?vue=liste">Liste</a></li>
</ul>
{{/if}}
{{#restrict section="web" level="write"}}
+1
View File
@@ -62,6 +62,7 @@ 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; }
p.aide { color:#777; font-size:.85rem; margin:.6rem 0 0; }
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; }
+80 -596
View File
@@ -26,123 +26,21 @@
{{*: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}}
{{* ---------- Gestion des événements ---------- *}}
{{if $_POST.save_event || $_POST.suppr_event }}
{{:include file="manage/_event.html"}}
{{/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}}
{{* ---------- Gestion des permanences ---------- *}}
{{if $_POST.add_perm || $_POST.rename_perm || $_POST.suppr_perm}}
{{:include file="manage/_perm.html"}}
{{/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}}
{{* ---------- Gestion des occurrences ---------- *}}
{{if $_POST.suppr_occurrence }}
{{:include file="manage/_occurence.html"}}
{{/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}}
{{* ---------- 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) ---------- *}}
@@ -180,55 +78,71 @@
{{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"}}
{{* ---------- 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=false}}
{{: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}}
{{* ---------- 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}}
{{* ---------- 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}}
@@ -253,13 +167,13 @@
{{* 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}}
{{#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 where=$where_purge_perm}}
{{#load module="agenda" where=$where_purge_perm}}
{{*:delete id=$id*}}
{{*:debug id=$id*}}
{{:assign var="purge_faite" value=true}}
@@ -272,7 +186,7 @@
{{* ---------- 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"}}
{{#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}}
@@ -504,443 +418,12 @@
{{/if}}
<div class="wrap">
{{* FB : Retour vers l'admin du site si admin
{{if $est_admin}}
<p><a class="retour" href="/admin">&larr; Retour au site</a></p>
{{else}}
<p><a class="retour" href="/">&larr; Retour au site</a></p>
{{/if}}
<h1>Agenda{{if $est_admin}}<span class="badge-admin">mode admin</span>{{/if}}</h1>
*}}
{{*
<nav class="vue-tabs">
<a class="{{if $vue == "mois"}}current{{/if}}" href="index.html?vue=mois&amp;an={{$an}}&amp;mois={{$mois}}&amp;cal={{$cal_filtre}}">Mois</a>
<a class="{{if $vue == "semaine"}}current{{/if}}" href="index.html?vue=semaine&amp;an={{$an}}&amp;mois={{$mois}}&amp;cal={{$cal_filtre}}">Semaine</a>
<a class="{{if $vue == "liste"}}current{{/if}}" href="index.html?vue=liste&amp;cal={{$cal_filtre}}">Liste</a>
</nav>
<nav class="vue-tabs cal-tabs">
<a class="{{if $cal_filtre == "tous"}}current{{/if}}" href="index.html?vue={{$vue}}&amp;an={{$an}}&amp;mois={{$mois}}&amp;cal=tous">Tous les calendriers</a>
{{#foreach from=$calendriers_liste item="cd_tab"}}
<a class="{{if $cal_filtre == $cd_tab.id}}current{{/if}}" href="index.html?vue={{$vue}}&amp;an={{$an}}&amp;mois={{$mois}}&amp;cal={{$cd_tab.id}}">{{$cd_tab.nom}}</a>
{{/foreach}}
</nav>
*}}
{{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}}
{{* CALENDAR
{{if $vue != "liste"}}
<div class="card">
<h2>Calendrier ({{$cal_filtre}})</h2>
{{if $vue == "mois"}}
<div class="nav-mois">
<a href="index.html?vue=mois&amp;an={{$an_prec}}&amp;mois={{$mois_prec}}">&larr;</a>
<span>{{$nom_mois}}</span>
<a href="index.html?vue=mois&amp;an={{$an_suiv}}&amp;mois={{$mois_suiv}}">&rarr;</a>
</div>
{{else}}
<div class="nav-mois">
{{if $semaine_sel <= 1}}
<a href="index.html?vue=semaine&amp;an={{$an_prec}}&amp;mois={{$mois_prec}}&amp;semaine_sel={{$total_rows_prec}}">&larr;</a>
{{else}}
<a href="index.html?vue=semaine&amp;an={{$an}}&amp;mois={{$mois}}&amp;semaine_sel={{"%d-1"|math:$semaine_sel}}">&larr;</a>
{{/if}}
<span>Semaine du {{$nom_mois}}</span>
{{if $semaine_sel >= $total_rows}}
<a href="index.html?vue=semaine&amp;an={{$an_suiv}}&amp;mois={{$mois_suiv}}&amp;semaine_sel=1">&rarr;</a>
{{else}}
<a href="index.html?vue=semaine&amp;an={{$an}}&amp;mois={{$mois}}&amp;semaine_sel={{"%d+1"|math:$semaine_sel}}">&rarr;</a>
{{/if}}
</div>
{{/if}}
<div class="scroll-cal">
<table class="calendrier">
<thead>
<tr><th>Lun</th><th>Mar</th><th>Mer</th><th>Jeu</th><th>Ven</th><th>Sam</th><th>Dim</th></tr>
</thead>
<tbody>
<tr>
{{:assign var="cellules." value=1}}{{:assign var="cellules." value=2}}{{:assign var="cellules." value=3}}{{:assign var="cellules." value=4}}{{:assign var="cellules." value=5}}{{:assign var="cellules." value=6}}{{:assign var="cellules." value=7}}{{:assign var="cellules." value=8}}{{:assign var="cellules." value=9}}{{:assign var="cellules." value=10}}
{{:assign var="cellules." value=11}}{{:assign var="cellules." value=12}}{{:assign var="cellules." value=13}}{{:assign var="cellules." value=14}}{{:assign var="cellules." value=15}}{{:assign var="cellules." value=16}}{{:assign var="cellules." value=17}}{{:assign var="cellules." value=18}}{{:assign var="cellules." value=19}}{{:assign var="cellules." value=20}}
{{:assign var="cellules." value=21}}{{:assign var="cellules." value=22}}{{:assign var="cellules." value=23}}{{:assign var="cellules." value=24}}{{:assign var="cellules." value=25}}{{:assign var="cellules." value=26}}{{:assign var="cellules." value=27}}{{:assign var="cellules." value=28}}{{:assign var="cellules." value=29}}{{:assign var="cellules." value=30}}
{{:assign var="cellules." value=31}}{{:assign var="cellules." value=32}}{{:assign var="cellules." value=33}}{{:assign var="cellules." value=34}}{{:assign var="cellules." value=35}}{{:assign var="cellules." value=36}}{{:assign var="cellules." value=37}}{{:assign var="cellules." value=38}}{{:assign var="cellules." value=39}}{{:assign var="cellules." value=40}}
{{:assign var="cellules." value=41}}{{:assign var="cellules." value=42}}
{{#foreach from=$cellules item="n"}}
{{:assign var="rangee_n" value="floor((%d-1)/7)+1"|math:$n}}
{{if $vue == "mois" || $rangee_n == $semaine_sel}}
{{:assign var="jour_num" value="%d-%d"|math:$n:$decalage}}
{{if $jour_num >= 1 && $jour_num <= $nb_jours}}
{{:assign var="date_cellule" value="%04d-%02d-%02d"|args:$an:$mois:$jour_num}}
{{:assign var="dow_cellule" value=$date_cellule|date:"N"}}
{{:assign var="occurrence_mois" value="floor((%d-1)/7)+1"|math:$jour_num}}
{{:assign var="est_derniere_occurrence" value=false}}
{{if "%d+7"|math:$jour_num > $nb_jours}}{{:assign var="est_derniere_occurrence" value=true}}{{/if}}
{{:assign var="evts_ce_jour" from="events_par_jour.%s"|args:$date_cellule}}
{{:assign var="badges_jour" value=""}}
{{#foreach from=$perms_data item="pd"}}
{{if $pd.jour == $dow_cellule}}
{{if $pd.date_debut == "" || $date_cellule >= $pd.date_debut}}
{{if $pd.date_fin == "" || $date_cellule <= $pd.date_fin}}
{{:assign var="est_exclue" value=false}}
{{#foreach from=$pd.exceptions item="ex"}}
{{if $ex == $date_cellule}}{{:assign var="est_exclue" value=true}}{{/if}}
{{/foreach}}
{{if !$est_exclue}}
{{:assign var="afficher_badge" value=false}}
{{if $pd.type_recurrence == "mensuel"}}
{{if $pd.semaine_du_mois == -1 && $est_derniere_occurrence}}{{:assign var="afficher_badge" value=true}}{{/if}}
{{if $pd.semaine_du_mois == $occurrence_mois}}{{:assign var="afficher_badge" value=true}}{{/if}}
{{elseif $pd.type_recurrence == "quinzaine"}}
{{if $pd.date_debut != ""}}
{{:assign var="ref_sem_q" value=$pd.date_debut|date:"W"|intval}}
{{:assign var="cell_sem_q" value=$date_cellule|date:"W"|intval}}
{{:assign var="diff_sem_q" value="(%d-%d) %% 2"|math:$cell_sem_q:$ref_sem_q}}
{{if $diff_sem_q == 0}}{{:assign var="afficher_badge" value=true}}{{/if}}
{{/if}}
{{else}}
{{:assign var="afficher_badge" value=true}}
{{/if}}
{{if $afficher_badge}}
{{:assign var="cle_b" value="%s_a_perm%s"|args:$pd.debut:$pd.id}}
{{:assign var="badges_jour.%s.type"|args:$cle_b value="perm"}}
{{:assign var="badges_jour.%s.debut"|args:$cle_b value=$pd.debut}}
{{:assign var="badges_jour.%s.fin"|args:$cle_b value=$pd.fin}}
{{:assign var="badges_jour.%s.label"|args:$cle_b value=$pd.label}}
{{:assign var="badges_jour.%s.couleur"|args:$cle_b value=$pd.couleur|or:'#4c7a2e'}}
{{:assign var="badges_jour.%s.pid"|args:$cle_b value=$pd.id}}
{{:assign var="badges_jour.%s.lieu"|args:$cle_b value=$pd.lieu}}
{{:assign var="badges_jour.%s.description"|args:$cle_b value=$pd.description}}
{{/if}}
{{/if}}
{{/if}}
{{/if}}
{{/if}}
{{/foreach}}
{{if $evts_ce_jour}}
{{#foreach from=$evts_ce_jour item="ev"}}
{{:assign var="cle_b" value="%s_b_evt%s"|args:$ev.debut:$ev.id}}
{{:assign var="badges_jour.%s.type"|args:$cle_b value="evt"}}
{{:assign var="badges_jour.%s.id"|args:$cle_b value=$ev.id}}
{{:assign var="badges_jour.%s.debut"|args:$cle_b value=$ev.debut}}
{{:assign var="badges_jour.%s.fin"|args:$cle_b value=$ev.fin}}
{{:assign var="badges_jour.%s.label"|args:$cle_b value=$ev.titre}}
{{:assign var="badges_jour.%s.couleur"|args:$cle_b value=$ev.couleur|or:'#8c3a1e'}}
{{:assign var="badges_jour.%s.lieu"|args:$cle_b value=$ev.lieu}}
{{:assign var="badges_jour.%s.description"|args:$cle_b value=$ev.description}}
{{:assign var="badges_jour.%s.lien"|args:$cle_b value=$ev.lien}}
{{:assign var="badges_jour.%s.lien1_label"|args:$cle_b value=$ev.lien1_label}}
{{:assign var="badges_jour.%s.lien1_url"|args:$cle_b value=$ev.lien1_url}}
{{:assign var="badges_jour.%s.lien2_label"|args:$cle_b value=$ev.lien2_label}}
{{:assign var="badges_jour.%s.lien2_url"|args:$cle_b value=$ev.lien2_url}}
{{:assign var="badges_jour.%s.lien3_label"|args:$cle_b value=$ev.lien3_label}}
{{:assign var="badges_jour.%s.lien3_url"|args:$cle_b value=$ev.lien3_url}}
{{/foreach}}
{{/if}}
{{if $badges_jour}}
{{:assign var="badges_tries" value=$badges_jour|ksort|values}}
{{else}}
{{:assign var="badges_tries" value=""}}
{{/if}}
<td{{if $date_cellule == $aujourdhui}} class="today"{{/if}}>
<div class="num">{{$jour_num}}</div>
{{#foreach from=$badges_tries item="bj"}}
{{if $bj.type == "perm"}}
<div class="perm-badge" style="background:{{$bj.couleur}};">
<div class="badge-content" onclick="ouvrirDetailEvt(this);" data-titre="{{$bj.label}}" data-horaire="{{if $bj.debut}}{{$bj.debut}}{{if $bj.fin}}–{{$bj.fin}}{{/if}}{{/if}}" data-lieu="{{$bj.lieu}}" data-description="{{$bj.description}}" data-lien1-label="" data-lien1-url="" data-lien2-label="" data-lien2-url="" data-lien3-label="" data-lien3-url="">
{{if $bj.debut}}{{$bj.debut}}{{if $bj.fin}}–{{$bj.fin}}{{/if}} — {{/if}}{{$bj.label}}{{if $bj.lieu}}<br /><a class="lieu-lien" href="https://www.openstreetmap.org/search?query={{$bj.lieu|url_encode}}" target="_blank" rel="noopener" onclick="event.stopPropagation();">&#128205; {{$bj.lieu}}</a>{{/if}}
{{if $bj.description}}<div class="evt-desc-apercu">{{$bj.description}}</div>{{/if}}
</div>
{{if $est_admin}}
<span class="badge-actions">
<a class="badge-edit" href="index.html?edit_perm={{$bj.pid}}#form-perm" title="Modifier" onclick="event.stopPropagation();">&#9998;</a>
<form method="post" action="index.html?an={{$an}}&amp;mois={{$mois}}" class="mini-form" onclick="event.stopPropagation();">
<input type="hidden" name="perm_id" value="{{$bj.pid}}" />
<input type="hidden" name="date_exclue" value="{{$date_cellule}}" />
<input type="hidden" name="retour_an" value="{{$an}}" />
<input type="hidden" name="retour_mois" value="{{$mois}}" />
<button type="submit" name="suppr_occurrence" value="1" class="mini-x" title="Supprimer seulement ce jour">&#10005;</button>
</form>
</span>
{{/if}}
</div>
{{else}}
<div class="evt-badge" style="background:{{$bj.couleur}};">
<div class="badge-content" onclick="ouvrirDetailEvt(this);" data-titre="{{$bj.label}}" data-horaire="{{if $bj.debut}}{{$bj.debut}}{{if $bj.fin}}–{{$bj.fin}}{{/if}}{{/if}}" data-lieu="{{$bj.lieu}}" data-description="{{$bj.description}}" data-lien="{{$bj.lien}}" data-lien1-label="{{$bj.lien1_label}}" data-lien1-url="{{$bj.lien1_url}}" data-lien2-label="{{$bj.lien2_label}}" data-lien2-url="{{$bj.lien2_url}}" data-lien3-label="{{$bj.lien3_label}}" data-lien3-url="{{$bj.lien3_url}}">
{{if $bj.debut}}{{$bj.debut}}{{if $bj.fin}}–{{$bj.fin}}{{/if}} — {{/if}}{{$bj.label}}{{if $bj.lieu}}<br /><a class="lieu-lien" href="https://www.openstreetmap.org/search?query={{$bj.lieu|url_encode}}" target="_blank" rel="noopener" onclick="event.stopPropagation();">&#128205; {{$bj.lieu}}</a>{{/if}}
{{if $bj.description}}<div class="evt-desc-apercu">{{$bj.description}}</div>{{/if}}
</div>
{{if $est_admin}}
<span class="badge-actions">
<a class="badge-edit" href="index.html?edit_event={{$bj.id}}&amp;an={{$an}}&amp;mois={{$mois}}#form-event" title="Modifier" onclick="event.stopPropagation();">&#9998;</a>
<form method="post" action="index.html?an={{$an}}&amp;mois={{$mois}}" class="mini-form" onclick="event.stopPropagation();">
<input type="hidden" name="retour_an" value="{{$an}}" />
<input type="hidden" name="retour_mois" value="{{$mois}}" />
<button type="submit" name="suppr_event" value="{{$bj.id}}" class="mini-x" title="Supprimer">&#10005;</button>
</form>
</span>
{{/if}}
</div>
{{/if}}
{{/foreach}}
</td>
{{else}}
<td class="vide"></td>
{{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}}
{{/if}}
{{if $vue == "mois" && "%d %% 7"|math:$n == 0 && $n != 42}}</tr><tr>{{/if}}
{{/foreach}}
</tr>
</tbody>
</table>
</div>
</div>
{{/if}}
*}}
{{*if $est_admin}}
<div class="card">
<h2>Gérer les calendriers</h2>
<table class="permanences">
<thead><tr><th>Nom</th><th></th></tr></thead>
<tbody>
{{#foreach from=$calendriers_liste item="cd_gest"}}
<tr>
<td>{{$cd_gest.nom}}{{if $cd_gest.par_defaut}} <small style="color:#999;">(par défaut)</small>{{/if}}</td>
<td>
{{if !$cd_gest.par_defaut}}
<form method="post" action="index.html" style="display:inline">
<button type="submit" name="suppr_calendrier" value="{{$cd_gest.id}}" class="mini" title="Supprimer ce calendrier">&#10005; Supprimer</button>
</form>
{{/if}}
</td>
</tr>
{{/foreach}}
</tbody>
</table>
<form method="post" action="index.html" class="ajout" style="margin-top:.8rem;">
<div class="champ" style="flex:2; min-width:14rem;"><label>Nouveau calendrier</label><input type="text" name="nom_calendrier" placeholder="ex. Réunions" required="required" /></div>
<button type="submit" name="add_calendrier" value="1">Ajouter</button>
</form>
<p class="aide" style="color:#777; font-size:.85rem; margin:.6rem 0 0;">Supprimer un calendrier ne supprime pas les événements/rendez-vous qui y étaient rattachés — ils basculent simplement dans "Agenda" par défaut.</p>
</div>
{{/if*}}
{{*if $est_admin}}
<div class="card card-perm">
<h2>Rendez-vous réguliers</h2>
{{:assign var="perm_trouve" value=false}}
<div class="scroll-cal">
<table class="permanences">
<thead><tr><th>Récurrence</th><th>Jour</th><th>Horaires</th><th>Détail</th><th>Lieu</th><th>Calendrier</th><th>Depuis / jusqu'à</th>{{if $est_admin}}<th></th>{{/if}}</tr></thead>
<tbody>
{{#load where="$$.type = 'permanence'" order="$$.jour ASC, $$.debut ASC"}}
{{:assign var="perm_trouve" value=true}}
{{:assign var="nom_jour" from="noms_jours.%s"|args:$jour}}
<tr>
<td>
{{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}}
</td>
<td>{{$nom_jour}}</td>
<td>{{$debut}}{{if $fin}} — {{$fin}}{{/if}}</td>
<td>{{$label}}</td>
<td>{{if $lieu}}<a class="lieu-lien" href="https://www.openstreetmap.org/search?query={{$lieu|url_encode}}" target="_blank" rel="noopener">{{$lieu}}</a>{{/if}}</td>
<td>
{{: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}}
</td>
<td>{{if $date_debut}}à partir du {{$date_debut|date_short}}{{/if}}{{if $date_debut && $date_fin}}<br />{{/if}}{{if $date_fin}}jusqu'au {{$date_fin|date_short}}{{/if}}</td>
{{if $est_admin}}
<td>
<a class="mini" href="index.html?edit_perm={{$id}}#form-perm" title="Modifier">&#9998;</a>
<form method="post" action="index.html" style="display:inline">
<button type="submit" name="suppr_perm" value="{{$id}}" class="mini" title="Supprimer">&#10005;</button>
</form>
</td>
{{/if}}
</tr>
{{/load}}
</tbody>
</table>
</div>
{{if !$perm_trouve}}<p class="vide">Aucun rendez-vous régulier enregistré.</p>{{/if}}
</div>
{{/if*}}
{{*
<div class="card">
<h2>{{if $vue == "liste"}}Calendrier en liste (3 prochains mois){{else}}Événements à venir{{/if}}</h2>
{{if $vue == "liste"}}
{{:assign var="rien_trouve" value=true}}
<ul class="liste-evt">
{{#foreach from=$liste_triee item="it"}}
{{:assign var="rien_trouve" value=false}}
<li>
<span class="date-evt">{{$it.date|date_long}}{{if $it.debut}} — {{$it.debut}}{{if $it.fin}} à {{$it.fin}}{{/if}}{{/if}}</span>
<span class="titre-evt">
<span class="tag-type" style="background:{{$it.couleur}};">{{$it.type}}</span>
{{$it.label}}
{{if $it.lien1_url}}<br /><a class="lien-evt" href="{{$it.lien1_url}}" target="_blank" rel="noopener">{{$it.lien1_label|or:"Voir l'affiche / plus d'infos"}} &rarr;</a>{{/if}}
{{if $it.lien2_url}}<br /><a class="lien-evt" href="{{$it.lien2_url}}" target="_blank" rel="noopener">{{$it.lien2_label|or:"Voir l'affiche / plus d'infos"}} &rarr;</a>{{/if}}
{{if $it.lien3_url}}<br /><a class="lien-evt" href="{{$it.lien3_url}}" target="_blank" rel="noopener">{{$it.lien3_label|or:"Voir l'affiche / plus d'infos"}} &rarr;</a>{{/if}}
{{if !$it.lien1_url && !$it.lien2_url && !$it.lien3_url && $it.lien}}<br /><a class="lien-evt" href="{{$it.lien}}" target="_blank" rel="noopener">Voir l'affiche / plus d'infos &rarr;</a>{{/if}}
</span>
</li>
{{/foreach}}
</ul>
{{if $rien_trouve}}<p class="vide">Rien de prévu sur les 3 prochains mois.</p>{{/if}}
{{else}}
{{:assign var="event_trouve" value=false}}
<ul class="liste-evt">
{{#load where=$where_venir order="$$.date ASC"}}
{{:assign var="event_trouve" value=true}}
<li>
<span class="date-evt">{{$date|date_long}}{{if $debut}} — {{$debut}}{{if $fin}} à {{$fin}}{{/if}}{{/if}}</span>
<span class="titre-evt">{{$titre}}{{if $description}}<br /><small>{{$description}}</small>{{/if}}{{if $lien1_url}}<br /><a class="lien-evt" href="{{$lien1_url}}" target="_blank" rel="noopener">{{$lien1_label|or:"Voir l'affiche / plus d'infos"}} &rarr;</a>{{/if}}{{if $lien2_url}}<br /><a class="lien-evt" href="{{$lien2_url}}" target="_blank" rel="noopener">{{$lien2_label|or:"Voir l'affiche / plus d'infos"}} &rarr;</a>{{/if}}{{if $lien3_url}}<br /><a class="lien-evt" href="{{$lien3_url}}" target="_blank" rel="noopener">{{$lien3_label|or:"Voir l'affiche / plus d'infos"}} &rarr;</a>{{/if}}{{if !$lien1_url && !$lien2_url && !$lien3_url && $lien}}<br /><a class="lien-evt" href="{{$lien}}" target="_blank" rel="noopener">Voir l'affiche / plus d'infos &rarr;</a>{{/if}}</span>
{{if $lieu}}<span class="lieu-evt"><a href="https://www.openstreetmap.org/search?query={{$lieu|url_encode}}" target="_blank" rel="noopener">&#128205; {{$lieu}}</a></span>{{/if}}
{{if $est_admin}}
<span>
<a class="mini" href="index.html?edit_event={{$id}}&amp;an={{$an}}&amp;mois={{$mois}}#form-event" title="Modifier">&#9998;</a>
<form method="post" action="index.html?an={{$an}}&amp;mois={{$mois}}" style="display:inline">
<input type="hidden" name="retour_an" value="{{$an}}" />
<input type="hidden" name="retour_mois" value="{{$mois}}" />
<button type="submit" name="suppr_event" value="{{$id}}" class="mini" title="Supprimer">&#10005;</button>
</form>
</span>
{{/if}}
</li>
{{/load}}
</ul>
{{if !$event_trouve}}<p class="vide">Aucun événement à venir pour l'instant.</p>{{/if}}
{{/if}}
</div>
*}}
{{*if $est_admin}}
<div class="card" id="form-event">
<h2>{{if $edit_event}}Modifier l'événement{{else}}Ajouter un événement{{/if}}</h2>
<form method="post" action="index.html?an={{$an}}&amp;mois={{$mois}}">
<input type="hidden" name="retour_an" value="{{$an}}" />
<input type="hidden" name="retour_mois" value="{{$mois}}" />
<div class="ajout">
<div class="champ" style="flex:2; min-width:14rem;"><label>Titre</label><input type="text" name="titre" value="{{$ee_titre}}" required="required" /></div>
<div class="champ"><label>Date</label><input type="date" name="date" value="{{$ee_date}}" required="required" /></div>
<div class="champ"><label>De</label><input type="time" name="debut" value="{{$ee_debut}}" /></div>
<div class="champ"><label>À</label><input type="time" name="fin" value="{{$ee_fin}}" /></div>
<div class="champ" style="flex:1; min-width:10rem;"><label>Lieu</label><input type="text" name="lieu" value="{{$ee_lieu}}" /></div>
<div class="champ" style="flex:0 0 5rem;"><label>Couleur</label><input type="color" name="couleur" value="{{$ee_couleur|or:'#8c3a1e'}}" style="height:2.4rem; padding:.2rem;" /></div>
<div class="champ" style="flex:0 0 10rem;">
<label>Calendrier</label>
<select name="calendrier">
{{:assign var="ee_cal_eff" value=$ee_calendrier}}
{{if $ee_cal_eff == ""}}{{:assign var="ee_cal_eff" value="agenda"}}{{/if}}
{{#foreach from=$calendriers_liste item="cd_opt"}}
<option value="{{$cd_opt.id}}" {{if $cd_opt.id == $ee_cal_eff}}selected="selected"{{/if}}>{{$cd_opt.nom}}</option>
{{/foreach}}
</select>
</div>
</div>
<p><label>Description (facultatif)</label><textarea name="description" rows="2">{{$ee_description}}</textarea></p>
<p style="margin:.8rem 0 .3rem; font-size:.85rem; color:#666;">Liens (affiche, document, inscription… — jusqu'à 3, facultatifs)</p>
<div class="ajout">
<div class="champ" style="flex:1; min-width:10rem;"><label>Lien 1 — libellé</label><input type="text" name="lien1_label" value="{{$ee_lien1_label}}" placeholder="ex. Affiche" /></div>
<div class="champ" style="flex:2; min-width:14rem;"><label>Lien 1 — URL</label><input type="url" name="lien1_url" value="{{$ee_lien1_url}}" placeholder="https://…" /></div>
</div>
<div class="ajout">
<div class="champ" style="flex:1; min-width:10rem;"><label>Lien 2 — libellé</label><input type="text" name="lien2_label" value="{{$ee_lien2_label}}" placeholder="ex. Programme" /></div>
<div class="champ" style="flex:2; min-width:14rem;"><label>Lien 2 — URL</label><input type="url" name="lien2_url" value="{{$ee_lien2_url}}" placeholder="https://…" /></div>
</div>
<div class="ajout">
<div class="champ" style="flex:1; min-width:10rem;"><label>Lien 3 — libellé</label><input type="text" name="lien3_label" value="{{$ee_lien3_label}}" placeholder="ex. Inscription" /></div>
<div class="champ" style="flex:2; min-width:14rem;"><label>Lien 3 — URL</label><input type="url" name="lien3_url" value="{{$ee_lien3_url}}" placeholder="https://…" /></div>
</div>
{{if $edit_event}}
<button type="submit" name="rename_event" value="{{$edit_event}}">Enregistrer les modifications</button>
<a class="retour" href="index.html?an={{$an}}&amp;mois={{$mois}}">Annuler</a>
{{else}}
<button type="submit" name="add_event" value="1">Ajouter l'événement</button>
{{/if}}
</form>
</div>
{{/if*}}
{{*if $est_admin}}
<div class="card" id="form-perm">
<h2>{{if $edit_perm}}Modifier ce rendez-vous régulier{{else}}Ajouter un rendez-vous régulier{{/if}}</h2>
<form method="post" action="index.html">
<div class="ajout">
<div class="champ">
<label>Récurrence</label>
<select name="type_recurrence">
<option value="hebdomadaire" {{if $ep_type_recurrence != "mensuel" && $ep_type_recurrence != "quinzaine"}}selected="selected"{{/if}}>Chaque semaine</option>
<option value="quinzaine" {{if $ep_type_recurrence == "quinzaine"}}selected="selected"{{/if}}>Toutes les 2 semaines</option>
<option value="mensuel" {{if $ep_type_recurrence == "mensuel"}}selected="selected"{{/if}}>Un jour précis du mois</option>
</select>
</div>
<div class="champ">
<label>Jour</label>
<select name="jour">
<option value="1" {{if $ep_jour == 1}}selected="selected"{{/if}}>Lundi</option>
<option value="2" {{if $ep_jour == 2}}selected="selected"{{/if}}>Mardi</option>
<option value="3" {{if $ep_jour == 3}}selected="selected"{{/if}}>Mercredi</option>
<option value="4" {{if $ep_jour == 4}}selected="selected"{{/if}}>Jeudi</option>
<option value="5" {{if $ep_jour == 5}}selected="selected"{{/if}}>Vendredi</option>
<option value="6" {{if $ep_jour == 6}}selected="selected"{{/if}}>Samedi</option>
<option value="7" {{if $ep_jour == 7}}selected="selected"{{/if}}>Dimanche</option>
</select>
</div>
<div class="champ">
<label>Quel(le) — si "un jour précis du mois"</label>
<select name="semaine_du_mois">
<option value="1" {{if $ep_semaine_du_mois == 1}}selected="selected"{{/if}}>1er</option>
<option value="2" {{if $ep_semaine_du_mois == 2}}selected="selected"{{/if}}>2e</option>
<option value="3" {{if $ep_semaine_du_mois == 3}}selected="selected"{{/if}}>3e</option>
<option value="4" {{if $ep_semaine_du_mois == 4}}selected="selected"{{/if}}>4e</option>
<option value="-1" {{if $ep_semaine_du_mois == -1}}selected="selected"{{/if}}>Dernier</option>
</select>
</div>
<div class="champ"><label>De</label><input type="time" name="debut" value="{{$ep_debut}}" /></div>
<div class="champ"><label>À</label><input type="time" name="fin" value="{{$ep_fin}}" /></div>
<div class="champ" style="flex:2; min-width:14rem;"><label>Détail</label><input type="text" name="label" value="{{$ep_label}}" placeholder="ex. Ouvert aux adhérents" required="required" /></div>
<div class="champ" style="flex:1; min-width:10rem;"><label>Lieu (facultatif)</label><input type="text" name="lieu" value="{{$ep_lieu}}" placeholder="ex. Local associatif" /></div>
<div class="champ"><label>Depuis le (facultatif)</label><input type="date" name="date_debut" value="{{$ep_date_debut}}" /></div>
<div class="champ"><label>Jusqu'au (facultatif)</label><input type="date" name="date_fin" value="{{$ep_date_fin}}" /></div>
<div class="champ" style="flex:0 0 5rem;"><label>Couleur</label><input type="color" name="couleur" value="{{$ep_couleur|or:'#4c7a2e'}}" style="height:2.4rem; padding:.2rem;" /></div>
<div class="champ" style="flex:0 0 10rem;">
<label>Calendrier</label>
<select name="calendrier">
{{:assign var="ep_cal_eff" value=$ep_calendrier}}
{{if $ep_cal_eff == ""}}{{:assign var="ep_cal_eff" value="agenda"}}{{/if}}
{{#foreach from=$calendriers_liste item="cd_opt2"}}
<option value="{{$cd_opt2.id}}" {{if $cd_opt2.id == $ep_cal_eff}}selected="selected"{{/if}}>{{$cd_opt2.nom}}</option>
{{/foreach}}
</select>
</div>
</div>
<p><label>Description (facultatif)</label><textarea name="description" rows="2">{{$ep_description}}</textarea></p>
<p class="aide" style="color:#777; font-size:.85rem; margin:.4rem 0 0;">Laissez ces deux dates vides pour un rendez-vous permanent, sans limite dans le temps. Pour "Toutes les 2 semaines", renseignez "Depuis le" avec la date du premier rendez-vous : c'est elle qui sert de point de départ pour calculer une semaine sur deux.</p>
{{if $edit_perm}}
<button type="submit" name="rename_perm" value="{{$edit_perm}}">Enregistrer</button>
<a class="retour" href="index.html">Annuler</a>
{{else}}
<button type="submit" name="add_perm" value="1">Ajouter</button>
{{/if}}
</form>
</div>
{{/if*}}
</div>
<div class="modal-overlay" id="modalDetailEvt" onclick="if(event.target===this){fermerDetailEvt();}">
@@ -1016,6 +499,7 @@ document.addEventListener('keydown', function(e) { if (e.key === 'Escape') { fer
{{*</body>
</html>
*}}
{{*:debug*}}
{{if $est_admin==true}}
{{:admin_footer}}
{{/if}}
+77
View File
@@ -0,0 +1,77 @@
{{* ---------- Gestion des calendriers (ajout / suppression, admin) ---------- *}}
{{#form on="add_calendrier"}}
{{if $_POST.add_calendrier && $est_admin}}
{{* Nom déjà existant ? *}}
{{if $_POST.nom_calendrier}}
{{#load where="$$.type = 'calendrier' AND $$.nom = '%s'"|args:$_POST.nom_calendrier}}
{{:error message="Le nom du calendrier existe déjà."}}
{{/load}}
{{else}}
{{:error message="Le nom du calendrier doit être renseigné."}}
{{/if}}
{{if $_POST.pardefaut == true}}
{{* enlève le flag à un des autres calendriers *}}
{{#load where="$$.type = 'calendrier' AND $$.par_defaut = true"|args:$_POST.nom_calendrier}}
{{:assign var="_id_cal" value=$id}}
{{/load}}
{{if $_id_cal}}
{{:save type="calendrier" id=$_id_cal par_defaut=false}}
{{/if}}
{{:assign _pardef=true}}
{{else}}
{{:assign _pardef=false}}
{{/if}}
{{:save type="calendrier" nom=$_POST.nom_calendrier par_defaut=$_pardef couleur=$_POST.couleur}}
{{:redirect url="index.html?nav=conf&conf=manage_cal&msg=ajout"}}
{{/if}}
{{else}}
{{:form_errors}}
{{/form}}
{{* Modifier un calendrier *}}
{{#form on="mod_calendrier"}}
{{:debug p=$_POST}}
{{* vérifications *}}
{{if !$_POST.mod_calendrier && !$est_admin}}
{{:error message="Le calendrier n'existe pas."}}
{{/if}}
{{* Nom déjà existant ? *}}
{{if $_POST.nom_calendrier}}
{{#load where="$$.type = 'calendrier' AND $$.nom = '%s' AND id <> %d"|args:$_POST.nom_calendrier:$_POST.mod_calendrier}}
{{:error message="Le nom du calendrier existe déjà."}}
{{/load}}
{{else}}
{{:error message="Le nom du calendrier doit être renseigné."}}
{{/if}}
{{* Par défaut déjà existant ? *}}
{{if $_POST.pardefaut == true}}
{{* enlève le flag à un des autres calendriers *}}
{{#load where="$$.type = 'calendrier' AND $$.par_defaut = true"|args:$_POST.nom_calendrier}}
{{:assign var="_id_cal" value=$id}}
{{/load}}
{{if $_id_cal}}
{{:save type="calendrier" id=$_id_cal par_defaut=false}}
{{/if}}
{{:assign _pardef=true}}
{{else}}
{{:assign _pardef=false}}
{{/if}}
{{:save type="calendrier" id=$_POST.mod_calendrier nom=$_POST.nom_calendrier par_defaut=$_pardef couleur=$_POST.couleur textecouleur=$_POST.couleur_texte categorie=$_POST.categorie}}
{{else}}
{{:form_errors}}
{{/form}}
{{* Supprimer un calendrier *}}
{{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}}
+41
View File
@@ -0,0 +1,41 @@
{{* ---------- Ajout ou Modification d'un événement (admin) ---------- *}}
{{#form on="save_event" }}
{{if $_POST.save_event && $est_admin}}
{{if !$_POST.event_id}}
{{:assign var="_eventKey" value="%s"|uuid}}
{{#load where="id = %d"|args:$_POST.calendrier}}
{{:assign var="_eventColor" value=$couleur}}
{{/load}}
{{else}}
{{:assign var="_eventKey" value=$_POST.save_event}}
{{:assign var="_eventColor" value=$_POST.couleur}}
{{/if}}
{{:debug post=$_POST _eventKey=$_eventKey _eventColor=$_eventColor}}
{{: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=$_eventColor|intval
calendrier=$_POST.calendrier|strval|trim}}
{{:redirect url="?an=%s&mois=%s"|args:$_POST.retour_an:$_POST.retour_mois}}
{{/if}}
{{else}}
{{:form_errors}}
{{/form}}
{{* ---------- Suppression d'un événement (admin) ---------- *}}
{{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}}
+25
View File
@@ -0,0 +1,25 @@
{{* ---------- 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}}
+23
View File
@@ -0,0 +1,23 @@
{{* ---------- 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}}
+3 -3
View File
@@ -1,7 +1,7 @@
name = "Agenda"
description = "Calendrier mensuel/semaine/liste, rendez-vous réguliers récurrents (avec exceptions et couleurs), événements ponctuels, purge et tri automatiques."
author = "Vive le Vélo/Recycl'arz"
author_url = "https://recyclarz.bountyarz.ovh"
description = "Gestion des calendriers associatif avec vues mensuel/semaine/liste, rendez-vous réguliers récurrents (avec exceptions et couleurs), événements ponctuels, purge et tri automatiques. \nversion 1.1"
author = "Vive le Vélo (original) / Recycl'arz"
author_url = "https://git.kaz.bzh/bountz/agenda"
restrict_section = "web"
restrict_level = "write"
home_button = false
+5 -38
View File
@@ -1,48 +1,15 @@
{{*
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8" />
<style>
:root { --terra: #8c3a1e; }
* { box-sizing: border-box; }
body { margin: 0; padding: 0; font-family: "Trebuchet MS", Helvetica, sans-serif; background: transparent; color: #222; }
h4 { margin: 0 0 .4em; color: var(--terra); font-size: 1em; }
ul.agenda-upcoming-list { margin: 0 0 .5em; padding: 0; list-style: none; }
ul.agenda-upcoming-list li { font-size: .9em; margin-bottom: .3em; }
ul.agenda-upcoming-list li b { color: var(--terra); margin-right: .3em; }
p.vide { font-size: .9em; color: #777; margin: 0 0 .5em; }
p.agenda-lien { margin: 0; font-size: .85em; text-align: right; }
p.agenda-lien a { color: var(--terra); }
</style>
</head>
<body>
*}}
{{*
<style>
* { box-sizing: border-box; }
h4.agenda-upcoming-list { margin: 0 0 .4em; color: #8c3a1e; font-size: .8em; }
ul.agenda-upcoming-list { margin: 0 0 .5em; padding: 0; list-style: none; }
ul.agenda-upcoming-list li { font-size: .5em; margin-bottom: .3em; }
ul.agenda-upcoming-list li b { color: #8c3a1e; margin-right: .3em; }
p.vide { font-size: .7em; color: #777; margin: 0 0 .5em; }
p.agenda-lien { margin: 0; font-size: .7em; text-align: right; }
p.agenda-lien a { color: #8c3a1e; }
</style>
*}}
{{:assign var="aujourdhui" value=$now|date:"Y-m-d"}}
{{:assign var="where_venir" value="$$.type = 'event' AND $$.date >= '%s' AND ($$.calendrier = 'agenda' OR $$.calendrier IS NULL OR $$.calendrier = '')"|args:$aujourdhui}}
{{:assign var="where_public" value="$$.type = 'calendrier' AND $$.categorie = 'p' "}}
{{:assign var="event_trouve" value=false}}
<h4>Prochains événements</h4>
<ul>
{{#load module="agenda" where=$where_public limit=1}}
{{:assign var="where_venir" value="$$.type = 'event' AND $$.date >= '%s' AND $$.calendrier = '%s' "|args:$aujourdhui:$id}}
{{/load}}
{{#load module="agenda" where=$where_venir order="$$.date ASC" limit=4}}
{{:assign var="event_trouve" value=true}}
<li><b>{{$date|date_short}}</b> {{$titre}}</li>
{{/load}}
</ul>
{{if !$event_trouve}}<p>Aucun événement à venir pour l'instant.</p>{{/if}}
{{*<p class="agenda-lien"><a href="index.html" target="_top">Voir l'agenda complet &rarr;</a></p>
</body>
</html>
*}}