226 lines
13 KiB
HTML
226 lines
13 KiB
HTML
{{* ---------- Purge automatique des créneaux dont la date est passée ----------
|
|
TODO : mettre un paramètre ou/non pour la purge.
|
|
Si non, bloquer l'inscription sur ce créneau
|
|
|
|
{{:assign var="aujourdhui_s" value=$now|date:"Y-m-d"}}
|
|
{{:assign var="suppression_faite" value=false}}
|
|
{{#foreach from=$s.creneaux item="c"}}
|
|
{{if !$c.date || $c.date >= $aujourdhui_s}}
|
|
{{:assign var="creneaux_actifs." value=$c}}
|
|
{{else}}
|
|
{{:assign var="suppression_faite" value=true}}
|
|
{{/if}}
|
|
{{/foreach}}
|
|
{{if $suppression_faite}}
|
|
{{:save id=$s.id creneaux=$creneaux_actifs}}
|
|
{{:redirect url="%s?id=%s"|args:$_url:$s.id}}
|
|
{{/if}}
|
|
*}}
|
|
{{* ---------- Créneaux triés par ordre chronologique ---------- *}}
|
|
{{#foreach from=$s.creneaux item="c"}}
|
|
{{:assign var="cle_date" value=$c.date|strval}}
|
|
{{if !$cle_date}}{{:assign var="cle_date" value="9999-99-99"}}{{/if}}
|
|
{{:assign var="cle_tri" value="%s_%s_%s"|args:$cle_date:$c.debut:$c.id}}
|
|
{{:assign var="tri.%s"|args:$cle_tri value=$c}}
|
|
{{/foreach}}
|
|
{{if $s.creneaux|count}}{{:assign var="creneaux" value=$tri|ksort|values}}{{/if}}
|
|
|
|
{{* ---------- Ligne en cours de modification ----------
|
|
{{:assign var="edit_nom" value=$_POST.edit_nom|strval}}
|
|
{{#foreach from=$s.votes item="v"}}
|
|
{{if $v.nom == $edit_nom}}
|
|
{{:assign var="edit_choix" value=$v.choix}}
|
|
{{:assign var="edit_remarque" value=$v.remarque}}
|
|
{{/if}}
|
|
{{/foreach}}
|
|
*}}
|
|
{{* ---------- Créneau en cours de modification ----------
|
|
{{:assign var="edit_creneau" value=$_POST.edit_creneau|strval}}
|
|
{{#foreach from=$s.creneaux item="c"}}
|
|
{{if $c.id == $edit_creneau}}
|
|
{{:assign var="edit_c_titre" value=$c.titre}}
|
|
{{:assign var="edit_c_date" value=$c.date}}
|
|
{{:assign var="edit_c_debut" value=$c.debut}}
|
|
{{:assign var="edit_c_fin" value=$c.fin}}
|
|
{{:assign var="edit_c_ok" value=1}}
|
|
{{/if}}
|
|
{{/foreach}}
|
|
*}}
|
|
{{* ---------- Totaux par créneau ---------- *}}
|
|
{{:assign var="max_oui" value=0}}
|
|
{{:assign var="nb_votants" value=0}}
|
|
|
|
<div class="card">
|
|
<h2>Créneaux</h2>
|
|
{{if $creneaux|count}}
|
|
<form method="post" action="">
|
|
<div class="scroll">
|
|
<table class="grille">
|
|
<thead>
|
|
<tr>
|
|
<th></th>
|
|
{{#foreach from=$creneaux item="c"}}
|
|
{{:assign var="th_oui" from="tot_oui.%s"|args:$c.id}}{{:assign var="th_peut" from="tot_peut.%s"|args:$c.id}}
|
|
<th class="creneau">{{if $c.titre|trim}}<em class="titre">{{$c.titre}}</em>{{/if}}{{if $c.date}}<b>{{$c.date|date_long}}</b><small>{{$c.debut}} → {{$c.fin}}</small>{{else}}<b>{{$c.label}}</b>{{/if}}
|
|
{{if $est_admin}}
|
|
{{if $th_oui < 1 && $th_peut < 1}}
|
|
{{*<button type="submit" name="edit_creneau" value="{{$c.id}}" class="mini" formnovalidate="formnovalidate" title="Modifier ce créneau">✎</button>*}}
|
|
{{:button type="submit" class="mini" name="edit_creneau" shape="edit" title="Modifier ce créneau" value="%d"|args:$c.id}}
|
|
{{/if}}
|
|
{{*<button type="submit" name="suppr_creneau" value="{{$c.id}}" class="mini" formnovalidate="formnovalidate" title="Supprimer ce créneau">✕</button>*}}
|
|
{{:button type="submit" class="mini" name="suppr_creneau" shape="delete" title="Supprimer ce créneau" value="%d"|args:$c.id}}
|
|
{{/if}}
|
|
</th>
|
|
{{/foreach}}
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{{#foreach from=$s.votes item="v"}}
|
|
<tr>
|
|
<th>{{$v.nom}}
|
|
{{*<button type="submit" name="edit_nom" value="{{$v.nom}}" class="mini" formnovalidate="formnovalidate" title="Modifier cette ligne">✎</button>*}}
|
|
{{:button type="submit" class="mini" name="edit_nom" label="Modifier cette ligne" default=$v.nom}}
|
|
{{if $est_admin}}
|
|
{{*<button type="submit" name="suppr_nom" value="{{$v.nom}}" class="mini" formnovalidate="formnovalidate" title="Supprimer cette ligne">✕</button>*}}
|
|
{{:button type="submit" class="mini" name="suppr_nom" label="Supprimer cette ligne" default=$v.nom}}
|
|
{{/if}}
|
|
</th>
|
|
{{#foreach from=$creneaux item="c"}}
|
|
{{:assign var="val" from="v.choix.%s"|args:$c.id}}
|
|
{{if $val == 2}}<td class="oui">✔</td>{{elseif $val == 1}}<td class="peut">(✔)</td>{{else}}<td class="non"></td>{{/if}}
|
|
{{/foreach}}
|
|
</tr>
|
|
{{/foreach}}
|
|
<tr class="saisie">
|
|
<th>
|
|
{{if $is_logged}}
|
|
{{:input type="text" name="nom_vote" label="Votre nom" default=$logged_user.nom readonly="readonly" required=true}}
|
|
{{else}}
|
|
{{:input type="text" name="nom_vote" label="Votre nom" placeholder="Votre nom" default=$edit_nom required=true}}
|
|
{{/if}}
|
|
</th>
|
|
{{#foreach from=$creneaux item="c"}}
|
|
{{:assign var="pre" from="edit_choix.%s"|args:$c.id}}
|
|
<td>
|
|
{{*:debug c=$c pre=$pre*}}
|
|
{{:input type="radio" name="dispo[%s]"|args:$c.id label="oui" value="2"}}
|
|
{{:input type="radio" name="dispo[%s]"|args:$c.id label="si besoin" value="1"}}
|
|
{{:input type="radio" name="dispo[%s]"|args:$c.id label="non" value="0"}}
|
|
{{*
|
|
<label><input type="radio" class="normal" name="dispo[{{$c.id}}]" value="2" {{if $pre == 2}}checked="checked"{{/if}} /> oui</label>
|
|
<label><input type="radio" class="normal" name="dispo[{{$c.id}}]" value="1" {{if $pre == 1}}checked="checked"{{/if}} /> si besoin</label>
|
|
<label><input type="radio" class="normal" name="dispo[{{$c.id}}]" value="0" {{if $pre != 1 && $pre != 2}}checked="checked"{{/if}} /> non</label>
|
|
*}}
|
|
</td>
|
|
{{/foreach}}
|
|
</tr>
|
|
<tr class="somme">
|
|
<th>Somme<small>{{$nb_votants}} votant(s)</small></th>
|
|
{{#foreach from=$creneaux item="c"}}
|
|
{{:assign var="n_oui" from="tot_oui.%s"|args:$c.id}}
|
|
{{:assign var="n_peut" from="tot_peut.%s"|args:$c.id}}
|
|
<td>{{if $n_oui > 0 && $n_oui == $max_oui}}<span class="best">★ {{$n_oui}}</span>{{elseif $n_oui > 0}}{{$n_oui}}{{else}}0{{/if}}{{if $n_peut > 0}}<small>(+{{$n_peut}})</small>{{/if}}</td>
|
|
{{/foreach}}
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<p class="champ" style="margin-top:.8rem;">
|
|
{{:input type="textarea" cols=40 rows=2 name="remarque" label="Une précision à ajouter ?" default=$edit_remarque required=false}}
|
|
{{*
|
|
<label style="display:block; font-size:.9rem; color:#666; margin-bottom:.3rem;">Remarque (facultatif)</label>
|
|
<textarea name="remarque"
|
|
rows="2" placeholder="Une précision à ajouter ?"
|
|
style="width:100%; font-family:inherit; font-size:1rem; padding:.45rem .7rem; border:1px solid #bbb; border-radius:.4rem;">{{$edit_remarque}}</textarea>
|
|
*}}
|
|
</p>
|
|
<p>
|
|
{{* <button type="submit" name="enregistrer" value="1">Enregistrer mes disponibilités</button>*}}
|
|
{{:button type="submit" name="voter_creneau" label="Enregistrer mes disponibilités" help="Pour corriger votre vote, retapez le même nom et choisissez une autre option." class="main" value="%d"|args:$s.id}}
|
|
</p>
|
|
<p class="aide">Tapez votre nom, cochez vos disponibilités puis enregistrez. Pour corriger une ligne existante, cliquez sur le crayon à côté du nom.</p>
|
|
</form>
|
|
{{else}}
|
|
<p class="vide">Aucun créneau pour l'instant.{{if $est_admin}} Ajoutez-en un ci-dessous pour commencer.{{/if}}</p>
|
|
{{/if}}
|
|
</div>
|
|
|
|
{{:assign var="remarque_trouvee" value=false}}
|
|
<div class="card">
|
|
<h2>Remarques</h2>
|
|
<ul style="list-style:none; margin:0; padding:0;">
|
|
{{#foreach from=$s.votes item="v"}}
|
|
{{if $v.remarque|trim}}
|
|
{{:assign var="remarque_trouvee" value=true}}
|
|
<li style="padding:.5rem 0; border-bottom:1px solid #eceae8;"><b>{{$v.nom}}</b> — {{$v.remarque}}</li>
|
|
{{/if}}
|
|
{{/foreach}}
|
|
</ul>
|
|
{{if !$remarque_trouvee}}<p class="vide">Aucune remarque pour l'instant.</p>{{/if}}
|
|
</div>
|
|
|
|
{{*if $est_admin}}
|
|
<div class="card">
|
|
{{if $edit_c_ok}}
|
|
<h2>Modifier ce créneau</h2>
|
|
<form method="post" action="" class="ajout">
|
|
<label>Titre <input type="text" name="titre" value="{{$edit_c_titre}}" placeholder="ex. Permanence atelier" /></label>
|
|
<label>Date <input type="date" name="date" value="{{$edit_c_date}}" required="required" /></label>
|
|
<label>de <input type="time" name="debut" value="{{$edit_c_debut}}" required="required" /></label>
|
|
<label>à <input type="time" name="fin" value="{{$edit_c_fin}}" required="required" /></label>
|
|
<button type="submit" name="rename_creneau" value="{{$edit_creneau}}">Enregistrer</button>
|
|
<a class="retour" href="{{$_url}}?id={{$s.id}}">Annuler</a>
|
|
</form>
|
|
{{else}}
|
|
<h2>Ajouter un créneau</h2>
|
|
<form method="post" action="" class="ajout">
|
|
<label>Titre <input type="text" name="titre" placeholder="ex. Permanence atelier" /></label>
|
|
<label>Date <input type="date" name="date" required="required" /></label>
|
|
<label>de <input type="time" name="debut" value="19:00" required="required" /></label>
|
|
<label>à <input type="time" name="fin" value="21:00" required="required" /></label>
|
|
<button type="submit" name="add_creneau" value="1">Ajouter la colonne</button>
|
|
</form>
|
|
{{/if}}
|
|
</div>
|
|
|
|
<div class="card">
|
|
<h2>Ajouter plusieurs créneaux (saisie libre)</h2>
|
|
<form method="post" action="">
|
|
<table style="width:100%; border-collapse:collapse;">
|
|
<thead><tr><th style="text-align:left; font-size:.85rem; color:#666;">Titre</th><th style="text-align:left; font-size:.85rem; color:#666;">Date</th><th style="text-align:left; font-size:.85rem; color:#666;">De</th><th style="text-align:left; font-size:.85rem; color:#666;">À</th></tr></thead>
|
|
<tbody>
|
|
<tr><td><input type="text" name="titre_1" placeholder="ex. Permanence" /></td><td><input type="date" name="date_1" /></td><td><input type="time" name="debut_1" value="19:00" /></td><td><input type="time" name="fin_1" value="21:00" /></td></tr>
|
|
<tr><td><input type="text" name="titre_2" placeholder="ex. Permanence" /></td><td><input type="date" name="date_2" /></td><td><input type="time" name="debut_2" value="19:00" /></td><td><input type="time" name="fin_2" value="21:00" /></td></tr>
|
|
<tr><td><input type="text" name="titre_3" placeholder="ex. Permanence" /></td><td><input type="date" name="date_3" /></td><td><input type="time" name="debut_3" value="19:00" /></td><td><input type="time" name="fin_3" value="21:00" /></td></tr>
|
|
<tr><td><input type="text" name="titre_4" placeholder="ex. Permanence" /></td><td><input type="date" name="date_4" /></td><td><input type="time" name="debut_4" value="19:00" /></td><td><input type="time" name="fin_4" value="21:00" /></td></tr>
|
|
<tr><td><input type="text" name="titre_5" placeholder="ex. Permanence" /></td><td><input type="date" name="date_5" /></td><td><input type="time" name="debut_5" value="19:00" /></td><td><input type="time" name="fin_5" value="21:00" /></td></tr>
|
|
</tbody>
|
|
</table>
|
|
<p class="aide">Laissez la date vide pour ignorer une ligne. Seules les lignes avec une date seront ajoutées.</p>
|
|
<p><button type="submit" name="ajout_multiple" value="1">Ajouter ces créneaux</button></p>
|
|
</form>
|
|
</div>
|
|
|
|
<div class="card">
|
|
<h2>Générer des créneaux automatiquement</h2>
|
|
<form method="post" action="" class="ajout">
|
|
<label>Titre <input type="text" name="g_titre" placeholder="ex. Permanence atelier" /></label>
|
|
<label>de <input type="time" name="g_heure_debut" value="19:00" required="required" /></label>
|
|
<label>à <input type="time" name="g_heure_fin" value="21:00" required="required" /></label>
|
|
<label>Du <input type="date" name="g_debut_periode" required="required" /></label>
|
|
<label>au <input type="date" name="g_fin_periode" required="required" /></label>
|
|
<button type="submit" name="generer_creneaux" value="1">Générer les créneaux</button>
|
|
<div style="width:100%; display:flex; gap:1rem; flex-wrap:wrap; margin-top:.5rem;">
|
|
<label style="display:flex; align-items:center; gap:.3rem; font-size:.9rem;"><input type="checkbox" name="g_jour[]" value="1" /> Lundi</label>
|
|
<label style="display:flex; align-items:center; gap:.3rem; font-size:.9rem;"><input type="checkbox" name="g_jour[]" value="2" /> Mardi</label>
|
|
<label style="display:flex; align-items:center; gap:.3rem; font-size:.9rem;"><input type="checkbox" name="g_jour[]" value="3" /> Mercredi</label>
|
|
<label style="display:flex; align-items:center; gap:.3rem; font-size:.9rem;"><input type="checkbox" name="g_jour[]" value="4" /> Jeudi</label>
|
|
<label style="display:flex; align-items:center; gap:.3rem; font-size:.9rem;"><input type="checkbox" name="g_jour[]" value="5" /> Vendredi</label>
|
|
<label style="display:flex; align-items:center; gap:.3rem; font-size:.9rem;"><input type="checkbox" name="g_jour[]" value="6" /> Samedi</label>
|
|
<label style="display:flex; align-items:center; gap:.3rem; font-size:.9rem;"><input type="checkbox" name="g_jour[]" value="7" /> Dimanche</label>
|
|
</div>
|
|
</form>
|
|
<p class="aide">Crée un créneau pour chaque jour correspondant dans la période choisie (ex. "tous les mardis du 1er au 30 septembre"). Limité à un an à partir de la date de début.</p>
|
|
</div>
|
|
{{/if*}}
|
|
{{:debug sondage=$s}} |