Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f9819b5bfa | ||
|
|
b74c1de631 | ||
|
|
017fde1e53 | ||
|
|
8aed0ac517 |
No files matched your search
@@ -1,6 +1,6 @@
|
|||||||
# Sondages (vote)
|
# Sondages (vote)
|
||||||
|
|
||||||
Sondages, façon Framadate !
|
Sondages, façon Framadate ! Pour le logiciel [Paheko](https://paheko.cloud/)
|
||||||
|
|
||||||
## Fonctionnalités
|
## Fonctionnalités
|
||||||
Sondage de disponibilités (grille de créneaux) ou sondage simple (question à choix), avec génération automatique de créneaux récurrents.
|
Sondage de disponibilités (grille de créneaux) ou sondage simple (question à choix), avec génération automatique de créneaux récurrents.
|
||||||
+130
@@ -0,0 +1,130 @@
|
|||||||
|
{{* Modifier sondage *}}
|
||||||
|
{{if $subconf == "edit_son"}}
|
||||||
|
<div class="card" id="form-nouveau">
|
||||||
|
{{#load assign="s" id=$_GET.id|intval}}
|
||||||
|
{{if !$s.id}}
|
||||||
|
{{:error message="Ce sondage n'existe pas (ou plus)."}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
<form method="post" action="">
|
||||||
|
<fieldset class="entree">
|
||||||
|
<legend>Modifier Sondage ({{$s.mode}})</legend>
|
||||||
|
<dl>
|
||||||
|
{{:input type="hidden" name="id" default=$s.id required=true}}
|
||||||
|
{{:input type="text" name="titre" label="Titre" default=$s.titre required=true}}
|
||||||
|
{{:input type="textarea" cols=40 rows=3 name="description" label="Description complète" default=$s.description required=false}}
|
||||||
|
{{:input type="select" name="style" label="Style de sondage" default=$s.style options=$module.config.sondage_styles required=true}}
|
||||||
|
{{:button type="submit" name="save_son" label="Enregistrer les modifications" class="main" value="%d"|args:$s.id}}
|
||||||
|
</dl>
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
|
<div class="card">
|
||||||
|
<h2>Résultats</h2>
|
||||||
|
{{if $s.options|count}}
|
||||||
|
<table style="width:100%; border-collapse:collapse;">
|
||||||
|
{{#foreach from=$s.options item="o"}}
|
||||||
|
{{:assign var="n_o" from="tot_opt.%s"|args:$o.id}}
|
||||||
|
<tr>
|
||||||
|
<th style="text-align:left; padding:.4rem .3rem; border-bottom:1px solid #eceae8; font-weight:normal;">{{$o.texte}}</th>
|
||||||
|
<td style="padding:.4rem .3rem; border-bottom:1px solid #eceae8; text-align:right; white-space:nowrap;">
|
||||||
|
{{if $n_o > 0 && $n_o == $max_opt}}<span class="best">★ {{$n_o}} voix</span>{{else}}{{$n_o}} voix{{/if}}
|
||||||
|
</td>
|
||||||
|
<td style="padding:.4rem .3rem; border-bottom:1px solid #eceae8; text-align:right;">
|
||||||
|
{{:button type="submit" name="del_opt_son" label="Supprimer cette option" class="mini" shape="minus" value="%d"|args:$s.id}}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{{/foreach}}
|
||||||
|
</table>
|
||||||
|
<p class="aide">{{$nb_votants_simple}} votant(s) au total.</p>
|
||||||
|
{{else}}
|
||||||
|
<p class="vide">Rien à afficher pour l'instant.</p>
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{if $s.mode == "simple"}}
|
||||||
|
<fieldset class="entree">
|
||||||
|
<legend>Ajouter une option.</legend>
|
||||||
|
<dl>
|
||||||
|
{{:input type="text" name="texte" label="Texte de l'option" placeholder="ex. Samedi matin" required=false}}
|
||||||
|
{{:button type="submit" name="add_opt_son" label="Ajouter" class="main" value="%d"|args:$s.id}}
|
||||||
|
</dl>
|
||||||
|
</fieldset>
|
||||||
|
{{else}}
|
||||||
|
{{:include file="_creneaux.html"}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
<fieldset class="entree">
|
||||||
|
<legend>Je confirme vouloir supprimer définitivement ce sondage et toutes les réponses.</legend>
|
||||||
|
<dl>
|
||||||
|
{{:button type="submit" name="del_son" label="Supprimer le sondage" class="danger" value="%d"|args:$s.id}}
|
||||||
|
</dl>
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
{{else}}
|
||||||
|
{{* Liste des sondages *}}
|
||||||
|
<div class="card">
|
||||||
|
<h2>Sondages en cours et archivés</h2>
|
||||||
|
<ul class="sondages">
|
||||||
|
{{:assign var="au_moins_un_ouvert" value=false}}
|
||||||
|
{{:assign var="au_moins_un_ferme" value=false}}
|
||||||
|
{{#load type="sondage" order="id DESC"}}
|
||||||
|
{{:assign var="nb_c" value=0}}{{if $creneaux|count}}{{:assign var="nb_c" value=$creneaux|count}}{{/if}}
|
||||||
|
{{:assign var="nb_v" value=0}}{{if $votes|count}}{{:assign var="nb_v" value=$votes|count}}{{/if}}
|
||||||
|
{{:assign var="nb_o" value=0}}{{if $options|count}}{{:assign var="nb_o" value=$options|count}}{{/if}}
|
||||||
|
{{:assign var="nb_vs" value=0}}{{if $votes_simple|count}}{{:assign var="nb_vs" value=$votes_simple|count}}{{/if}}
|
||||||
|
{{if !$ferme}}
|
||||||
|
{{:assign var="au_moins_un_ouvert" value=true}}
|
||||||
|
<li><a href="{{$_url}}?id={{$id}}&nav=conf&conf=edit_son">{{$titre}}<small>{{if $mode == "simple"}}{{$nb_o}} option(s) — {{$nb_vs}} votant(s){{else}}{{$nb_c}} créneau(x) — {{$nb_v}} participant(s){{/if}}</small></a></li>
|
||||||
|
{{else}}
|
||||||
|
{{:assign var="au_moins_un_ferme" value=true}}
|
||||||
|
{{/if}}
|
||||||
|
{{/load}}
|
||||||
|
{{if !$au_moins_un_ouvert}}
|
||||||
|
<li><p class="vide">Aucun sondage en cours.{{if $est_admin}} Créez-en un ci-dessous.{{/if}}</p></li>
|
||||||
|
{{/if}}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
{{/load}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{* Nouveau sondage *}}
|
||||||
|
{{elseif !$subconf || $subconf == "new_son"}}
|
||||||
|
<div class="card" id="form-nouveau">
|
||||||
|
<h2>Nouveau sondage</h2>
|
||||||
|
<form method="post" action="">
|
||||||
|
<fieldset class="entree">
|
||||||
|
<legend>Type de sondage</legend>
|
||||||
|
<dl>
|
||||||
|
{{:input type="text" name="titre" label="Titre" default=$s.titre required=true}}
|
||||||
|
{{:input type="textarea" cols=40 rows=3 name="description" label="Description complète" default=$s.description required=false}}
|
||||||
|
{{*#foreach from=$calendriers_liste item="cd_opt"}}
|
||||||
|
{{:assign var="calendriers_options.%s"|args:$cd_opt.id label=$cd_opt.nom}}
|
||||||
|
{{/foreach*}}
|
||||||
|
{{:assign var="sondage_modes.creneaux" label="Disponibilités (grille de créneaux)"}}
|
||||||
|
{{:assign var="sondage_modes.simple" label="Sondage simple (question à choix)"}}
|
||||||
|
{{if !$module.config.sondage_styles }}
|
||||||
|
{{:assign var="sondage_styles.prive" label="Sondage privé (Conseil Collégial/CA)" mcat="privat"}}
|
||||||
|
{{:assign var="sondage_styles.membre" label="Sondage membre (membres logués)" mcat="logged"}}
|
||||||
|
{{:assign var="sondage_styles.public" label="Sondage public (tous)" mcat="all"}}
|
||||||
|
{{:save key="config" purge=false sondage_styles=$sondage_styles}}
|
||||||
|
{{else}}
|
||||||
|
{{:assign var="sondage_styles" value=$module.config.sondage_styles}}
|
||||||
|
{{/if}}
|
||||||
|
{{*:debug cal=$sondage_types*}}
|
||||||
|
{{:input type="select" name="mode" label="Mode" options=$sondage_modes required=true}}
|
||||||
|
{{:input type="select" name="style" label="Style de sondage" options=$sondage_styles required=true}}
|
||||||
|
{{:button type="submit" name="create_son" label="Créer le sondage" class="main" value="1"}}
|
||||||
|
</dl>
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{* Paramètres globaux *}}
|
||||||
|
{{elseif !$subconf || $subconf == "edit_con"}}
|
||||||
|
{{if $est_admin}}
|
||||||
|
{{:include file="manage/_config.html"}}
|
||||||
|
{{else}}
|
||||||
|
<p class="vide">Ces paramètres sont réservés à l'administrateur.</p>
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
+165
@@ -0,0 +1,165 @@
|
|||||||
|
{{* ---------- 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}}
|
||||||
|
{{*:debug s=$s creneaux=$creneaux*}}
|
||||||
|
<div class="card">
|
||||||
|
<h2>Créneaux TODO</h2>
|
||||||
|
<form method="post" action="">
|
||||||
|
<div class="scroll">
|
||||||
|
<table class="grille">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
{{#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" class="mini" name="edit_creneau" shape="edit" title="Modifier ce créneau" value="%d"|args:$c.id}}
|
||||||
|
{{/if}}
|
||||||
|
{{: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>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<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>
|
||||||
|
*}}
|
||||||
|
{{:input type="text" name="titre" placeholder="Ex. Permanence Atelier" label="Titre" default=$edit_c_titre }}
|
||||||
|
{{:input type="date" name="date" default=$edit_c_date label="Date" required=true}}
|
||||||
|
{{:input type="time" name="debut" default=$edit_c_debut label="de" required=true}}
|
||||||
|
{{:input type="time" name="fin" default=$edit_c_fin label="à" required=true}}
|
||||||
|
{{:button type="submit" name="rename_creneau" label="Modifier" value="%d"|args:$_POST.edit_creneau }}
|
||||||
|
<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>
|
||||||
|
*}}
|
||||||
|
{{:input type="text" name="titre" placeholder="Ex. Permanence Atelier" label="Titre"}}
|
||||||
|
{{:input type="date" name="date" label="Date" required=true}}
|
||||||
|
{{:input type="time" name="debut" default="19:00" label="de" required=true}}
|
||||||
|
{{:input type="time" name="fin" default="21:00" label="à" required=true}}
|
||||||
|
{{:button type="submit" name="add_creneau" label="Ajouter la colonne" value="%d"|args:$s.id }}
|
||||||
|
</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>
|
||||||
|
{{#foreach count=5 key="i"}}
|
||||||
|
<tr>
|
||||||
|
<td>{{:input type="text" name="titre_%d"|args:$i placeholder="Ex. Permanence Atelier" label="Titre"}}</td>
|
||||||
|
<td>{{:input type="date" name="date_%d"|args:$i label="Date" required=true}}</td>
|
||||||
|
<td>{{:input type="time" name="debut_%d"|args:$i default="19:00" label="de" required=true}}</td>
|
||||||
|
<td>{{:input type="time" name="fin_%d"|args:$i default="21:00" label="à" required=true}}</td>
|
||||||
|
</tr>
|
||||||
|
{{/foreach}}
|
||||||
|
{{*
|
||||||
|
<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>
|
||||||
|
{{:button type="submit" name="ajout_multiple" label="Ajouter ces créneaux" value="%d"|args:$s.id }}
|
||||||
|
{{*<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>
|
||||||
|
*}}
|
||||||
|
{{:input type="text" name="g_titre" placeholder="Ex. Permanence Atelier" label="Titre"}}
|
||||||
|
{{:input type="time" name="g_heure_debut" default="19:00" label="de" required=true}}
|
||||||
|
{{:input type="time" name="g_heure_fin" default="21:00" label="à" required=true}}
|
||||||
|
{{:input type="date" name="g_debut_periode" label="Du" required=true}}
|
||||||
|
{{:input type="date" name="g_fin_periode" label="au" required=true}}
|
||||||
|
{{:button type="submit" name="generer_creneaux" label="Générer les créneaux" value="%d"|args:$s.id }}
|
||||||
|
<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>
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
{{* Navigation
|
||||||
|
{{#restrict section="web" level="write"}}
|
||||||
|
{{:assign _url="%sindex.html"|args:$module.url}}
|
||||||
|
{{else}}
|
||||||
|
{{if $is_logged==true}}
|
||||||
|
{{:assign _url="%sindex.html"|args:$module.url}}
|
||||||
|
{{else}}
|
||||||
|
{{:assign _url="%ssondage.html"|args:$module.url}}
|
||||||
|
{{/if}}
|
||||||
|
{{/restrict}}
|
||||||
|
*}}
|
||||||
|
|
||||||
|
<nav class="tabs">
|
||||||
|
{{*if $current == 'sondage'}}
|
||||||
|
{{#restrict section="web" level="write"}}
|
||||||
|
<aside>
|
||||||
|
{{:linkbutton label="Tous les sondages" shape="calendar" href="%s"|args:$_url}}
|
||||||
|
{{#foreach from=$calendriers_liste item="cd_tab"}}
|
||||||
|
{{: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}}
|
||||||
|
{{/foreach}}
|
||||||
|
</aside>
|
||||||
|
{{/restrict}}
|
||||||
|
{{/if*}}
|
||||||
|
{{* menu principal : exclus pour le site anonyme *}}
|
||||||
|
{{if $is_logged==true}}
|
||||||
|
<ul>
|
||||||
|
<li {{if $current == "sondage"}} class="current"{{/if}}><a href="{{$_url}}">Sondage</a></li>
|
||||||
|
{{#restrict section="web" level="write"}}
|
||||||
|
<li {{if $current == 'config'}} class="current"{{/if}}><a href="{{$_url}}?nav=conf">Configuration</a></li>
|
||||||
|
{{/restrict}}
|
||||||
|
</ul>
|
||||||
|
{{/if}}
|
||||||
|
{{* menu secondaire *}}
|
||||||
|
{{if $current == 'sondage'}}
|
||||||
|
{{:assign _liclass="current" _ulclass="sub"}}
|
||||||
|
{{if $is_logged==false}}
|
||||||
|
{{:assign _liclass="nav-mois" _ulclass="modal-liens"}}
|
||||||
|
{{/if}}
|
||||||
|
<ul class="{{$_ulclass}}">
|
||||||
|
{{if $subcurrent == 'view'}}
|
||||||
|
<li class="title"><label>❓{{$s.titre}}</label> </li>
|
||||||
|
{{/if}}
|
||||||
|
<li {{if !$subcurrent || $subcurrent == 'encours'}} class="{{$_liclass}}"{{/if}}><a href="{{$_url}}">En cours</a></li>
|
||||||
|
<li {{if $subcurrent == 'archive'}} class="{{$_liclass}}"{{/if}}><a href="{{$_url}}?vue=archive">Archives (Fermés)</a></li>
|
||||||
|
{{* <li {{if $subcurrent == 'liste'}} class="{{$_liclass}}"{{/if}}><a href="{{$_url}}?vue=liste&cal={{$cal}}">Liste</a></li>
|
||||||
|
*}}</ul>
|
||||||
|
{{/if}}
|
||||||
|
{{#restrict section="web" level="write"}}
|
||||||
|
{{if $current == 'config'}}
|
||||||
|
<ul class="sub">
|
||||||
|
<li {{if !$subcurrent || $subcurrent == 'new_son'}} class="current"{{/if}}><a href="{{$_url}}?nav={{$_GET.nav}}&conf=new_son">Nouveau</a></li>
|
||||||
|
<li {{if $subcurrent == 'edit_son'}} class="current"{{/if}}><a href="{{$_url}}?nav={{$_GET.nav}}&conf=edit_son">Modifier</a></li>
|
||||||
|
<li {{if $subcurrent == 'edit_con'}} class="current"{{/if}}><a href="{{$_url}}?nav={{$_GET.nav}}&conf=edit_con">Paramètres</a></li>
|
||||||
|
{{* <li {{if $subcurrent == 'manage_app'}} class="current"{{/if}}><a href="{{$_url}}?nav={{$_GET.nav}}&conf=manage_app">RDV réguliers</a></li>*}}
|
||||||
|
</ul>
|
||||||
|
{{/if}}
|
||||||
|
{{/restrict}}
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
{{* Messages *}}
|
||||||
|
{{if $_GET.msg == "ajout" }}
|
||||||
|
<p class="block confirm">Ajout effectué</p>
|
||||||
|
{{elseif $_GET.msg == "vote" }}
|
||||||
|
<p class="block confirm">Merci de votre participation !</p>
|
||||||
|
{{elseif $_GET.msg == "modification" }}
|
||||||
|
<p class="block confirm">Modification effectuée</p>
|
||||||
|
{{elseif $_GET.msg == "suppression" }}
|
||||||
|
<p class="block confirm">Suppression effectuée</p>
|
||||||
|
{{/if}}
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
{{* Filtre en fonction du style de sondage et de la qualité de l'utilisateur *}}
|
||||||
|
{{if $son_style == "prive" || $son_style == "admin"}}
|
||||||
|
{{:assign _sqlin="($$.style IN ('prive', 'membre','public','') OR $$.style IS NULL)"}}
|
||||||
|
{{elseif $son_style == "membre"}}
|
||||||
|
{{:assign _sqlin="($$.style IN ('membre','public','') OR $$.style IS NULL)"}}
|
||||||
|
{{elseif $son_style == "public"}}
|
||||||
|
{{:assign _sqlin="($$.style IN ('public','') OR $$.style IS NULL)"}}
|
||||||
|
{{/if}}
|
||||||
|
<div class="wrap">
|
||||||
|
{{* Vue des sondages en cours *}}
|
||||||
|
{{if !$vue || $vue=="encours"}}
|
||||||
|
<div class="card">
|
||||||
|
<h2>Sondages en cours</h2>
|
||||||
|
<ul class="sondages">
|
||||||
|
{{:assign var="au_moins_un_ouvert" value=false}}
|
||||||
|
{{:assign var="au_moins_un_ferme" value=false}}
|
||||||
|
{{#load type="sondage" where="%s"|args:$_sqlin order="id DESC"}}
|
||||||
|
{{:assign var="nb_c" value=0}}{{if $creneaux|count}}{{:assign var="nb_c" value=$creneaux|count}}{{/if}}
|
||||||
|
{{:assign var="nb_v" value=0}}{{if $votes|count}}{{:assign var="nb_v" value=$votes|count}}{{/if}}
|
||||||
|
{{:assign var="nb_o" value=0}}{{if $options|count}}{{:assign var="nb_o" value=$options|count}}{{/if}}
|
||||||
|
{{:assign var="nb_vs" value=0}}{{if $votes_simple|count}}{{:assign var="nb_vs" value=$votes_simple|count}}{{/if}}
|
||||||
|
{{if !$ferme}}
|
||||||
|
{{:assign var="au_moins_un_ouvert" value=true}}
|
||||||
|
<li><a href="{{$_url}}?vue=view&id={{$id}}">{{$titre}}<span class="badge-admin">{{$style}}</span><small>
|
||||||
|
{{if $mode == "simple"}}{{$nb_o}} option(s) — {{$nb_vs}} votant(s)
|
||||||
|
{{else}}{{$nb_c}} créneau(x) — {{$nb_v}} participant(s){{/if}}
|
||||||
|
</small></a></li>
|
||||||
|
{{else}}
|
||||||
|
{{:assign var="au_moins_un_ferme" value=true}}
|
||||||
|
{{/if}}
|
||||||
|
{{/load}}
|
||||||
|
{{if !$au_moins_un_ouvert}}
|
||||||
|
<li><p class="vide">Aucun sondage en cours.{{if $est_admin}} Créez-en un ci-dessous.{{/if}}</p></li>
|
||||||
|
{{/if}}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
{{* Vue des sondages archivés *}}
|
||||||
|
{{elseif $vue=="archive"}}
|
||||||
|
<div class="card">
|
||||||
|
<h2>Sondages archivés (fermés)</h2>
|
||||||
|
{{if $au_moins_un_ferme}}
|
||||||
|
<ul class="sondages">
|
||||||
|
{{#load type="sondage" where="%s"|args:$_sqlin order="id DESC"}}
|
||||||
|
{{if $ferme}}
|
||||||
|
{{:assign var="nb_c2" value=0}}{{if $creneaux|count}}{{:assign var="nb_c2" value=$creneaux|count}}{{/if}}
|
||||||
|
{{:assign var="nb_v2" value=0}}{{if $votes|count}}{{:assign var="nb_v2" value=$votes|count}}{{/if}}
|
||||||
|
{{:assign var="nb_o2" value=0}}{{if $options|count}}{{:assign var="nb_o2" value=$options|count}}{{/if}}
|
||||||
|
{{:assign var="nb_vs2" value=0}}{{if $votes_simple|count}}{{:assign var="nb_vs2" value=$votes_simple|count}}{{/if}}
|
||||||
|
<li><a href="{{$_url}}?vue=view&id={{$id}}" style="color:#999;">{{$titre}}<small>{{if $mode == "simple"}}{{$nb_o2}} option(s) — {{$nb_vs2}} votant(s){{else}}{{$nb_c2}} créneau(x) — {{$nb_v2}} participant(s){{/if}}</small></a></li>
|
||||||
|
{{/if}}
|
||||||
|
{{/load}}
|
||||||
|
</ul>
|
||||||
|
{{else}}
|
||||||
|
<p class="vide">Aucun sondage archivé.</p>
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
{{* Vue d'un sondage en particulier *}}
|
||||||
|
{{elseif $vue=="view"}}
|
||||||
|
{{if $s.mode=="simple"}}
|
||||||
|
{{:include file="_vote.html"}}
|
||||||
|
{{else}}
|
||||||
|
{{:include file="_vote_date.html"}}
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
+153
@@ -0,0 +1,153 @@
|
|||||||
|
|
||||||
|
{{* ---------- Totaux par option (sondage simple) ---------- *}}
|
||||||
|
{{:assign var="max_opt" value=0}}
|
||||||
|
{{#foreach from=$s.options item="o"}}
|
||||||
|
{{:assign var="l_opt" value=[]}}
|
||||||
|
{{#foreach from=$s.votes_simple item="v"}}
|
||||||
|
{{if $v.choix == $o.id}}{{:assign var="l_opt." value=1}}{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:assign var="n_opt" value=0}}
|
||||||
|
{{if $l_opt|count}}{{:assign var="n_opt" value=$l_opt|count}}{{/if}}
|
||||||
|
{{:assign var="tot_opt.%s"|args:$o.id value=$n_opt}}
|
||||||
|
{{if $n_opt > $max_opt}}{{:assign var="max_opt" value=$n_opt}}{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:assign var="nb_votants_simple" value=0}}
|
||||||
|
{{if $s.votes_simple|count}}{{:assign var="nb_votants_simple" value=$s.votes_simple|count}}{{/if}}
|
||||||
|
|
||||||
|
{{* ---------- Choix en cours de modification (sondage simple) ---------- *}}
|
||||||
|
{{:assign var="edit_nom_vs" value=$_POST.edit_nom_vs|strval}}
|
||||||
|
{{#foreach from=$s.votes_simple item="v"}}
|
||||||
|
{{if $v.nom == $edit_nom_vs}}
|
||||||
|
{{:assign var="edit_choix_vs" value=$v.choix}}
|
||||||
|
{{:assign var="edit_remarque_vs" value=$v.remarque}}
|
||||||
|
{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{#foreach from=$s.votes item="v"}}
|
||||||
|
{{:assign var="l_votants." value=1}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{if $l_votants|count}}{{:assign var="nb_votants" value=$l_votants|count}}{{/if}}
|
||||||
|
{{#foreach from=$s.creneaux item="c"}}
|
||||||
|
{{:assign var="l_oui" value=[]}}
|
||||||
|
{{:assign var="l_peut" value=[]}}
|
||||||
|
{{#foreach from=$s.votes item="v"}}
|
||||||
|
{{:assign var="val" from="v.choix.%s"|args:$c.id}}
|
||||||
|
{{if $val == 2}}{{:assign var="l_oui." value=1}}{{/if}}
|
||||||
|
{{if $val == 1}}{{:assign var="l_peut." value=1}}{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:assign var="n_oui" value=0}}
|
||||||
|
{{:assign var="n_peut" value=0}}
|
||||||
|
{{if $l_oui|count}}{{:assign var="n_oui" value=$l_oui|count}}{{/if}}
|
||||||
|
{{if $l_peut|count}}{{:assign var="n_peut" value=$l_peut|count}}{{/if}}
|
||||||
|
{{:assign var="tot_oui.%s"|args:$c.id value=$n_oui}}
|
||||||
|
{{:assign var="tot_peut.%s"|args:$c.id value=$n_peut}}
|
||||||
|
{{if $n_oui > $max_oui}}{{:assign var="max_oui" value=$n_oui}}{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
|
||||||
|
<div class="card">
|
||||||
|
<h2>Sondage</h2>
|
||||||
|
<h4>{{$s.description}}</h4>
|
||||||
|
{{if $s.options|count}}
|
||||||
|
{{* Ne pas laisser l'admin voter *}}
|
||||||
|
{{if !$est_admin}}
|
||||||
|
<form method="post" action="">
|
||||||
|
<fieldset class="entree">
|
||||||
|
<legend>Voter</legend>
|
||||||
|
<dl>
|
||||||
|
{{if $is_logged}}
|
||||||
|
{{:input type="text" name="nom_vote" label="Votre nom" default=$logged_user.nom readonly="readonly"}}
|
||||||
|
{{else}}
|
||||||
|
{{:input type="text" name="nom_vote" label="Votre nom" placeholder="Votre nom" default=$edit_nom_vs required=true}}
|
||||||
|
{{/if}}
|
||||||
|
{{#foreach from=$s.options item="o"}}
|
||||||
|
{{*<input type="radio" name="choix_option" value="{{$o.id}}" {{if $edit_choix_vs == $o.id}}checked="checked"{{/if}} required="required" /> {{$o.texte*}}
|
||||||
|
{{:input type="radio" name="choix_option" value=$o.id label=$o.texte}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:input type="textarea" cols=40 rows=2 name="remarque" label="Une précision à ajouter ?" default=$edit_remarque_vs required=false}}
|
||||||
|
{{:button type="submit" name="voter_simple" label="Voter" help="Pour corriger votre vote, retapez le même nom et choisissez une autre option." class="main" value="%d"|args:$s.id}}
|
||||||
|
</dl>
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
{{/if}}
|
||||||
|
{{else}}
|
||||||
|
<p class="vide">Aucune option pour l'instant.{{if $est_admin}} Ajoutez-en ci-dessous.{{/if}}</p>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
<div class="card">
|
||||||
|
<h2>Résultats</h2>
|
||||||
|
{{if $s.options|count}}
|
||||||
|
<table style="width:100%; border-collapse:collapse;">
|
||||||
|
{{#foreach from=$s.options item="o"}}
|
||||||
|
{{:assign var="n_o" from="tot_opt.%s"|args:$o.id}}
|
||||||
|
<tr>
|
||||||
|
<th style="text-align:left; padding:.4rem .3rem; border-bottom:1px solid #eceae8; font-weight:normal;">{{$o.texte}}</th>
|
||||||
|
<td style="padding:.4rem .3rem; border-bottom:1px solid #eceae8; text-align:right; white-space:nowrap;">
|
||||||
|
{{if $n_o > 0 && $n_o == $max_opt}}<span class="best">★ {{$n_o}} voix</span>{{else}}{{$n_o}} voix{{/if}}
|
||||||
|
</td>
|
||||||
|
{{if $est_admin}}
|
||||||
|
<td style="padding:.4rem .3rem; border-bottom:1px solid #eceae8; text-align:right;">
|
||||||
|
<form method="post" action="" style="display:inline">
|
||||||
|
{{:input type="hidden" name="oid" default=$o.id required=true}}
|
||||||
|
{{:button type="submit" name="del_opt_son" value=$s.id class="mini" label="Supprimer cette option"}}
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
{{/if}}
|
||||||
|
</tr>
|
||||||
|
{{/foreach}}
|
||||||
|
</table>
|
||||||
|
<p class="aide">{{$nb_votants_simple}} votant(s) au total.</p>
|
||||||
|
{{else}}
|
||||||
|
<p class="vide">Rien à afficher pour l'instant.</p>
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{:assign var="remarque_trouvee_vs" value=false}}
|
||||||
|
<div class="card">
|
||||||
|
<h2>Remarques</h2>
|
||||||
|
<ul style="list-style:none; margin:0; padding:0;">
|
||||||
|
{{#foreach from=$s.votes_simple item="v"}}
|
||||||
|
{{if $v.remarque|trim}}
|
||||||
|
{{:assign var="remarque_trouvee_vs" 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_vs}}<p class="vide">Aucune remarque pour l'instant.</p>{{/if}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{if $est_admin}}
|
||||||
|
<div class="card">
|
||||||
|
<h2>Qui a voté quoi</h2>
|
||||||
|
{{if $s.votes_simple|count}}
|
||||||
|
<ul style="list-style:none; margin:0; padding:0;">
|
||||||
|
{{#foreach from=$s.votes_simple item="v"}}
|
||||||
|
{{:assign var="txt_choix" value=""}}
|
||||||
|
{{#foreach from=$s.options item="o"}}
|
||||||
|
{{if $o.id == $v.choix}}{{:assign var="txt_choix" value=$o.texte}}{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
<li style="padding:.4rem 0; border-bottom:1px solid #eceae8;">
|
||||||
|
{{$v.nom}} — {{$txt_choix}}
|
||||||
|
{{if $est_admin}}
|
||||||
|
<form method="post" action="" style="display:inline">
|
||||||
|
{{:input type="hidden" name="choix" default=$v.choix required=true}}
|
||||||
|
{{:button type="submit" name="del_vot_son" value=$s.id class="mini" label="Supprimer ce vote"}}
|
||||||
|
</form>
|
||||||
|
{{/if}}
|
||||||
|
</li>
|
||||||
|
{{/foreach}}
|
||||||
|
</ul>
|
||||||
|
{{else}}
|
||||||
|
<p class="vide">Personne n'a encore voté.</p>
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card">
|
||||||
|
<h2>Ajouter une option</h2>
|
||||||
|
<form method="post" action="" class="ajout">
|
||||||
|
<label style="flex:2; min-width:14rem;">{{:input type="text" name="texte" label="Texte de l'option" placeholder="ex. Samedi matin" required=true}}</label>
|
||||||
|
{{:button type="submit" name="add_opt_son" value=$s.id class="mini" label="Ajouter"}}
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
{{:debug sondage=$s}}
|
||||||
+226
@@ -0,0 +1,226 @@
|
|||||||
|
{{* ---------- 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}}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
<svg id="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm64 192c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V256c0-17.7 14.3-32 32-32zm64-64c0-17.7 14.3-32 32-32s32 14.3 32 32V352c0 17.7-14.3 32-32 32s-32-14.3-32-32V160zM320 288c17.7 0 32 14.3 32 32v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V320c0-17.7 14.3-32 32-32z"/></svg>
|
||||||
|
After Width: | Height: | Size: 617 B |
+85
@@ -0,0 +1,85 @@
|
|||||||
|
{{* =========================================================================
|
||||||
|
MODULE SONDAGE
|
||||||
|
|
||||||
|
ADMINISTRATION : accès admin géré par les permissions Paheko réelles
|
||||||
|
(membre connecté avec droit d'écriture sur la section "web"), via
|
||||||
|
{{#restrict}} ci-dessous.
|
||||||
|
========================================================================= *}}
|
||||||
|
{{#restrict section="web" level="admin"}}
|
||||||
|
{{:assign est_admin=true son_style="admin"}}
|
||||||
|
{{:assign _url="%sindex.html"|args:$module.url}}
|
||||||
|
{{else}}
|
||||||
|
{{#restrict section="users" level="admin"}}
|
||||||
|
{{:assign est_admin=false son_style="prive"}}
|
||||||
|
{{else}}
|
||||||
|
{{if $is_logged}}
|
||||||
|
{{:assign est_admin=false son_style="membre"}}
|
||||||
|
{{else}}
|
||||||
|
{{:assign est_admin=false son_style="public"}}
|
||||||
|
{{/if}}
|
||||||
|
{{/restrict}}
|
||||||
|
{{/restrict}}
|
||||||
|
|
||||||
|
{{if $est_admin==true}}
|
||||||
|
{{:admin_header title="Sondages" custom_css="/m/vote/sondage.css" layout="" current="module_vote"}}
|
||||||
|
{{if $est_admin}}<span class="badge-admin">mode admin</span>{{/if}}
|
||||||
|
{{* TODO membre logué
|
||||||
|
<link rel='stylesheet' id='agenda-css' href='agenda.css' media='all'/>*}}
|
||||||
|
{{else}}
|
||||||
|
{{:admin_header title="Sondages" custom_css="/m/vote/sondage.css" layout="" current="module_vote"}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{* Si edition ou suppression de sondages *}}
|
||||||
|
{{if $est_admin==true}}
|
||||||
|
{{if $_GET.id > 0}}
|
||||||
|
{{:assign _nav="conf" _conf="edit_son"}}
|
||||||
|
{{/if}}
|
||||||
|
{{:assign _nav=$_GET.nav _conf=$_GET.conf}}
|
||||||
|
{{else}}
|
||||||
|
{{:assign _nav=$_GET.nav}}
|
||||||
|
{{:assign _conf=$_GET.conf}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{* Charge le sondage choisi si dispo *}}
|
||||||
|
{{#load assign="s" id=$_GET.id|intval}}
|
||||||
|
{{else}}
|
||||||
|
{{#load assign="s" id=$_POST.id|intval}}{{/load}}
|
||||||
|
{{/load}}
|
||||||
|
{{:assign vue=$_GET.vue}}
|
||||||
|
|
||||||
|
{{* ---------- Ajout/modification/suppression d'un sondage (admin) ---------- *}}
|
||||||
|
{{if $_POST.create_son || $_POST.del_son || $_POST.save_son}}
|
||||||
|
{{:include file="manage/_sondage.html"}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{* ---------- Ajout/suppression d'une option ou d'un vote (sondage simple, admin) ---------- *}}
|
||||||
|
{{if $_POST.add_opt_son || $_POST.del_opt_son || $_POST.del_vot_son}}
|
||||||
|
{{:include file="manage/_sondage_simple.html"}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{* ---------- Voter sondage (public) ---------- *}}
|
||||||
|
{{if $_POST.voter_simple || $_POST.voter_creneau}}
|
||||||
|
{{:include file="manage/_vote.html"}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{* ---------- Manage créneaux (admin) ---------- *}}
|
||||||
|
{{if $_POST.add_creneau || $_POST.ajout_multiple || $_POST.generer_creneaux || $_POST.rename_creneau || $_POST.suppr_creneau || $_POST.suppr_nom|| $_POST.enregistrer}}
|
||||||
|
{{:include file="manage/_sondage_creneaux.html"}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{* Navigation config (admin) *}}
|
||||||
|
{{if $_nav == "conf"}}
|
||||||
|
{{if !$_conf}}
|
||||||
|
{{:include file="_nav.html" current="config" subcurrent="new_son"}}
|
||||||
|
{{:assign _conf="new_son"}}
|
||||||
|
{{else}}
|
||||||
|
{{:include file="_nav.html" current="config" subcurrent="%s"|args:$_conf}}
|
||||||
|
{{:assign _conf=$_conf}}
|
||||||
|
{{/if}}
|
||||||
|
{{:include file="_config.html" subconf=$_conf}}
|
||||||
|
{{* Navigation normale (tous) *}}
|
||||||
|
{{else}}
|
||||||
|
{{:include file="_nav.html" current="sondage" subcurrent="%s"|args:$vue}}
|
||||||
|
{{:include file="_sondage.html" _vue="%s"|args:$vue}}
|
||||||
|
{{/if}}
|
||||||
|
{{:debug get=$_GET post=$_POST cur=$current sub=$subcurrent subconf=$subconf}}
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
{{* -*- brindille -*- *}}
|
||||||
|
{{#restrict block=true section="config" level="write"}}{{/restrict}}
|
||||||
|
|
||||||
|
{{* Traiter l'envoi du formulaire *}}
|
||||||
|
{{#form on="save_param"}}
|
||||||
|
|
||||||
|
{{* vérification *}}
|
||||||
|
{{if $_POST.purge == true}}
|
||||||
|
{{:assign purge_creneaux=true}}
|
||||||
|
{{else}}
|
||||||
|
{{:assign purge_creneaux=false}}
|
||||||
|
{{/if}}
|
||||||
|
{{* Valeurs par défaut *}}
|
||||||
|
{{if !$module.config.sondage_styles }}
|
||||||
|
{{:assign var="sondage_styles.prive" label="Sondage privé (Conseil Collégial/CA)" mcat="privat"}}
|
||||||
|
{{:assign var="sondage_styles.membre" label="Sondage membre (membres logués)" mcat="logged"}}
|
||||||
|
{{:assign var="sondage_styles.public" label="Sondage public (tous)" mcat="all"}}
|
||||||
|
{{else}}
|
||||||
|
{{:assign var="sondage_styles" value=$module.config.sondage_styles}}
|
||||||
|
{{/if}}
|
||||||
|
{{* vérification *}}
|
||||||
|
{{if $_POST.name && $_POST.name|key_in:$sondage_styles}}
|
||||||
|
{{:error message="Le nom %s est déjà utilisé !"|args:$_POST.name}}
|
||||||
|
{{/if}}
|
||||||
|
{{if $_POST.name|strval && $_POST.label|strval && $_POST.cat|intval}}
|
||||||
|
{{:assign shortname=$_POST.name|tolower}}
|
||||||
|
{{:assign var="sondage_styles.%s"|args:$shortname label="%s"|args:$_POST.label mcat=$_POST.cat}}
|
||||||
|
{{/if}}
|
||||||
|
{{* save *}}
|
||||||
|
{{:save key="config"
|
||||||
|
purge=$purge_creneaux|boolval
|
||||||
|
sondage_styles=$sondage_styles
|
||||||
|
}}
|
||||||
|
{{:redirect force="%s?nav=conf&conf=edit_con"|args:$module.url}}
|
||||||
|
{{/form}}
|
||||||
|
|
||||||
|
{{* Charge les catégories de membres *}}
|
||||||
|
{{#select id, name FROM users_categories WHERE (hidden = 0 AND perm_connect = 1);}}
|
||||||
|
{{:assign var="member_cat.%d"|args:$id label="%s"|args:$name}}
|
||||||
|
{{/select}}
|
||||||
|
|
||||||
|
<form method="post" action="" data-focus="1">
|
||||||
|
<fieldset class="storage">
|
||||||
|
<legend>Paramètres</legend>
|
||||||
|
<dl>
|
||||||
|
{{:input type="checkbox" name="purge" label="Purge les créneaux passés" checked=$module.config.purge value=true}}
|
||||||
|
</dl>
|
||||||
|
</fieldset>
|
||||||
|
<fieldset class="storage">
|
||||||
|
<legend>Ajouter un type de sondage</legend>
|
||||||
|
<dl>
|
||||||
|
<table>
|
||||||
|
<tr><th>Nom</th><th>Label</th><th>Catégorie de membres</th></tr>
|
||||||
|
<tr>
|
||||||
|
<td width="25%">{{:input type="text" help="Un seul mot en minuscules" placeholder="Ex. actifs" name="name"}}</td>
|
||||||
|
<td width="50%">{{:input type="text" placeholder="Ex. Sondage privé (Conseil Collégial/CA)" name="label"}}</td>
|
||||||
|
<td width="25%">{{:input type="select" name="cat" options=$member_cat}}</td>
|
||||||
|
</tr>
|
||||||
|
{{if $module.config.sondage_styles}}
|
||||||
|
{{#foreach from=$module.config.sondage_styles key="key" }}
|
||||||
|
<tr>
|
||||||
|
<td>{{$key}}</td>
|
||||||
|
<td>{{$label}}</td>
|
||||||
|
{{if $mcat|intval > 0 }}
|
||||||
|
{{:assign var="mcat_label" from="member_cat.%s.label"|args:$mcat}}
|
||||||
|
<td>{{$mcat_label}}</td>
|
||||||
|
{{else}}
|
||||||
|
<td>{{$mcat}}</td>
|
||||||
|
{{/if}}
|
||||||
|
</tr>
|
||||||
|
{{/foreach}}
|
||||||
|
{{/if}}
|
||||||
|
</table>
|
||||||
|
</dl>
|
||||||
|
</fieldset>
|
||||||
|
<p class="submit">
|
||||||
|
{{:button type="submit" name="save_param" label="Enregistrer" shape="right" class="main"}}
|
||||||
|
</p>
|
||||||
|
</form>
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
{{* Création Nouveau Sondage *}}
|
||||||
|
{{#form on="create_son"}}
|
||||||
|
{{*:assign var="titre" value=$_POST.titre|strval|trim*}}
|
||||||
|
{{*:assign var="description" value=$_POST.description|strval|trim*}}
|
||||||
|
{{:save type="sondage"
|
||||||
|
titre=$_POST.titre|strval|trim
|
||||||
|
description=$_POST.description|strval|trim
|
||||||
|
mode=$_POST.mode|strval|trim
|
||||||
|
style=$_POST.style|strval|trim
|
||||||
|
assign_new_id="nouveau_id"
|
||||||
|
}}
|
||||||
|
{{:redirect url="%s?nav=conf&conf=edit_son&id=%s"|args:$module.url:$nouveau_id}}
|
||||||
|
{{else}}
|
||||||
|
{{:form_errors}}
|
||||||
|
{{/form}}
|
||||||
|
|
||||||
|
{{* Modification Sondage *}}
|
||||||
|
{{#form on="save_son"}}
|
||||||
|
{{*:assign var="titre" value=$_POST.titre|strval|trim*}}
|
||||||
|
{{*:assign var="description" value=$_POST.description|strval|trim*}}
|
||||||
|
{{:save type="sondage" id=$_POST.save_son|intval
|
||||||
|
titre=$_POST.titre|strval|trim
|
||||||
|
style=$_POST.style|strval|trim
|
||||||
|
description=$_POST.description|strval|trim
|
||||||
|
}}
|
||||||
|
{{*:redirect url="sondage.html?id=%s"|args:$nouveau_id*}}
|
||||||
|
{{else}}
|
||||||
|
{{:form_errors}}
|
||||||
|
{{/form}}
|
||||||
|
|
||||||
|
{{* ---------- Suppression du sondage (admin) ---------- *}}
|
||||||
|
{{#form on="del_son"}}
|
||||||
|
{{:delete id=$_POST.del_son|intval}}
|
||||||
|
{{:redirect url="%s?nav=conf&conf=edit_son"|args:$module.url}}
|
||||||
|
{{else}}
|
||||||
|
{{:form_errors}}
|
||||||
|
{{/form}}
|
||||||
|
|
||||||
|
{{* ---------- Modification de la description (admin) ---------- *}}
|
||||||
|
{{#form on="maj_description"}}
|
||||||
|
{{:save id=$_POST.maj_description description=$saisi_description}}
|
||||||
|
{{*:redirect url="%s?nav=conf&conf=edit_son"|args:$module.url*}}
|
||||||
|
{{else}}
|
||||||
|
{{:form_errors}}
|
||||||
|
{{/form}}
|
||||||
@@ -0,0 +1,178 @@
|
|||||||
|
{{* ---------- Ajout d'un créneau (admin) ---------- *}}
|
||||||
|
{{if $_POST.add_creneau && $est_admin}}
|
||||||
|
{{:assign var="saisi_titre" value=$_POST.titre|strval|trim}}
|
||||||
|
{{:assign var="saisi_date" value=$_POST.date|strval|trim}}
|
||||||
|
{{:assign var="saisi_debut" value=$_POST.debut|strval|trim}}
|
||||||
|
{{:assign var="saisi_fin" value=$_POST.fin|strval|trim}}
|
||||||
|
{{if $saisi_date}}
|
||||||
|
{{:assign var="new_creneaux" value=$s.creneaux}}
|
||||||
|
{{:assign var="cid" value=$now|date:"YmdHis"}}
|
||||||
|
{{:assign var="nouveau" id=$cid titre=$saisi_titre date=$saisi_date debut=$saisi_debut fin=$saisi_fin}}
|
||||||
|
{{:assign var="new_creneaux." value=$nouveau}}
|
||||||
|
{{:save id=$s.id creneaux=$new_creneaux}}
|
||||||
|
{{*:redirect url="%s?vue=view&id=%s"|args:$_url:$s.id*}}
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{* ---------- Ajout de plusieurs créneaux d'un coup (saisie libre, admin) ---------- *}}
|
||||||
|
{{if $_POST.ajout_multiple && $est_admin}}
|
||||||
|
{{:assign var="new_creneaux" value=$s.creneaux}}
|
||||||
|
{{:assign var="lignes." value=1}}{{:assign var="lignes." value=2}}{{:assign var="lignes." value=3}}{{:assign var="lignes." value=4}}{{:assign var="lignes." value=5}}
|
||||||
|
{{#foreach from=$lignes item="ligne_i"}}
|
||||||
|
{{:assign var="m_date_brut" from="_POST.date_%d"|args:$ligne_i}}
|
||||||
|
{{:assign var="m_date" value=$m_date_brut|strval|trim}}
|
||||||
|
{{if $m_date}}
|
||||||
|
{{:assign var="m_titre_brut" from="_POST.titre_%d"|args:$ligne_i}}
|
||||||
|
{{:assign var="m_debut_brut" from="_POST.debut_%d"|args:$ligne_i}}
|
||||||
|
{{:assign var="m_fin_brut" from="_POST.fin_%d"|args:$ligne_i}}
|
||||||
|
{{:assign var="m_titre" value=$m_titre_brut|strval|trim}}
|
||||||
|
{{:assign var="m_debut" value=$m_debut_brut|strval|trim}}
|
||||||
|
{{:assign var="m_fin" value=$m_fin_brut|strval|trim}}
|
||||||
|
{{:assign this_date=$now|date:'YmdHis'}}
|
||||||
|
{{:assign var="cid_m" value="%s-%d"|args:$this_date:$ligne_i}}
|
||||||
|
{{:assign var="nouveau_m" id=$cid_m titre=$m_titre date=$m_date debut=$m_debut fin=$m_fin}}
|
||||||
|
{{:assign var="new_creneaux." value=$nouveau_m}}
|
||||||
|
{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:save id=$s.id creneaux=$new_creneaux}}
|
||||||
|
{{:redirect url="%s?vue=view&id=%s"|args:$_url:$s.id}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{* ---------- Générateur automatique de créneaux par jour de semaine (admin) ---------- *}}
|
||||||
|
{{if $_POST.generer_creneaux && $est_admin}}
|
||||||
|
{{#foreach from=$_POST.g_jour item="jc"}}
|
||||||
|
{{:assign var="jours_sel." value=$jc|intval}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:assign var="g_debut_periode" value=$_POST.g_debut_periode|strval|trim}}
|
||||||
|
{{:assign var="g_fin_periode" value=$_POST.g_fin_periode|strval|trim}}
|
||||||
|
{{:assign var="g_titre" value=$_POST.g_titre|strval|trim}}
|
||||||
|
{{:assign var="g_heure_debut" value=$_POST.g_heure_debut|strval|trim}}
|
||||||
|
{{:assign var="g_heure_fin" value=$_POST.g_heure_fin|strval|trim}}
|
||||||
|
{{if $g_debut_periode && $g_fin_periode}}
|
||||||
|
{{:assign var="new_creneaux" value=$s.creneaux}}
|
||||||
|
{{:assign var="an_g0" value=$g_debut_periode|date:"Y"}}
|
||||||
|
{{:assign var="mois_g0" value=$g_debut_periode|date:"n"}}
|
||||||
|
{{if $mois_g0 == 12}}{{:assign var="mois_g1" value=1}}{{:assign var="an_g1" value="%d+1"|math:$an_g0}}{{else}}{{:assign var="mois_g1" value="%d+1"|math:$mois_g0}}{{:assign var="an_g1" value=$an_g0}}{{/if}}
|
||||||
|
{{if $mois_g1 == 12}}{{:assign var="mois_g2" value=1}}{{:assign var="an_g2" value="%d+1"|math:$an_g1}}{{else}}{{:assign var="mois_g2" value="%d+1"|math:$mois_g1}}{{:assign var="an_g2" value=$an_g1}}{{/if}}
|
||||||
|
{{if $mois_g2 == 12}}{{:assign var="mois_g3" value=1}}{{:assign var="an_g3" value="%d+1"|math:$an_g2}}{{else}}{{:assign var="mois_g3" value="%d+1"|math:$mois_g2}}{{:assign var="an_g3" value=$an_g2}}{{/if}}
|
||||||
|
{{if $mois_g3 == 12}}{{:assign var="mois_g4" value=1}}{{:assign var="an_g4" value="%d+1"|math:$an_g3}}{{else}}{{:assign var="mois_g4" value="%d+1"|math:$mois_g3}}{{:assign var="an_g4" value=$an_g3}}{{/if}}
|
||||||
|
{{if $mois_g4 == 12}}{{:assign var="mois_g5" value=1}}{{:assign var="an_g5" value="%d+1"|math:$an_g4}}{{else}}{{:assign var="mois_g5" value="%d+1"|math:$mois_g4}}{{:assign var="an_g5" value=$an_g4}}{{/if}}
|
||||||
|
{{if $mois_g5 == 12}}{{:assign var="mois_g6" value=1}}{{:assign var="an_g6" value="%d+1"|math:$an_g5}}{{else}}{{:assign var="mois_g6" value="%d+1"|math:$mois_g5}}{{:assign var="an_g6" value=$an_g5}}{{/if}}
|
||||||
|
{{if $mois_g6 == 12}}{{:assign var="mois_g7" value=1}}{{:assign var="an_g7" value="%d+1"|math:$an_g6}}{{else}}{{:assign var="mois_g7" value="%d+1"|math:$mois_g6}}{{:assign var="an_g7" value=$an_g6}}{{/if}}
|
||||||
|
{{if $mois_g7 == 12}}{{:assign var="mois_g8" value=1}}{{:assign var="an_g8" value="%d+1"|math:$an_g7}}{{else}}{{:assign var="mois_g8" value="%d+1"|math:$mois_g7}}{{:assign var="an_g8" value=$an_g7}}{{/if}}
|
||||||
|
{{if $mois_g8 == 12}}{{:assign var="mois_g9" value=1}}{{:assign var="an_g9" value="%d+1"|math:$an_g8}}{{else}}{{:assign var="mois_g9" value="%d+1"|math:$mois_g8}}{{:assign var="an_g9" value=$an_g8}}{{/if}}
|
||||||
|
{{if $mois_g9 == 12}}{{:assign var="mois_g10" value=1}}{{:assign var="an_g10" value="%d+1"|math:$an_g9}}{{else}}{{:assign var="mois_g10" value="%d+1"|math:$mois_g9}}{{:assign var="an_g10" value=$an_g9}}{{/if}}
|
||||||
|
{{if $mois_g10 == 12}}{{:assign var="mois_g11" value=1}}{{:assign var="an_g11" value="%d+1"|math:$an_g10}}{{else}}{{:assign var="mois_g11" value="%d+1"|math:$mois_g10}}{{:assign var="an_g11" value=$an_g10}}{{/if}}
|
||||||
|
|
||||||
|
{{:assign var="mois_gen_an.0" value=$an_g0}}{{:assign var="mois_gen_mois.0" value=$mois_g0}}
|
||||||
|
{{:assign var="mois_gen_an.1" value=$an_g1}}{{:assign var="mois_gen_mois.1" value=$mois_g1}}
|
||||||
|
{{:assign var="mois_gen_an.2" value=$an_g2}}{{:assign var="mois_gen_mois.2" value=$mois_g2}}
|
||||||
|
{{:assign var="mois_gen_an.3" value=$an_g3}}{{:assign var="mois_gen_mois.3" value=$mois_g3}}
|
||||||
|
{{:assign var="mois_gen_an.4" value=$an_g4}}{{:assign var="mois_gen_mois.4" value=$mois_g4}}
|
||||||
|
{{:assign var="mois_gen_an.5" value=$an_g5}}{{:assign var="mois_gen_mois.5" value=$mois_g5}}
|
||||||
|
{{:assign var="mois_gen_an.6" value=$an_g6}}{{:assign var="mois_gen_mois.6" value=$mois_g6}}
|
||||||
|
{{:assign var="mois_gen_an.7" value=$an_g7}}{{:assign var="mois_gen_mois.7" value=$mois_g7}}
|
||||||
|
{{:assign var="mois_gen_an.8" value=$an_g8}}{{:assign var="mois_gen_mois.8" value=$mois_g8}}
|
||||||
|
{{:assign var="mois_gen_an.9" value=$an_g9}}{{:assign var="mois_gen_mois.9" value=$mois_g9}}
|
||||||
|
{{:assign var="mois_gen_an.10" value=$an_g10}}{{:assign var="mois_gen_mois.10" value=$mois_g10}}
|
||||||
|
{{:assign var="mois_gen_an.11" value=$an_g11}}{{:assign var="mois_gen_mois.11" value=$mois_g11}}
|
||||||
|
|
||||||
|
{{:assign var="jours_gen." value=1}}{{:assign var="jours_gen." value=2}}{{:assign var="jours_gen." value=3}}{{:assign var="jours_gen." value=4}}{{:assign var="jours_gen." value=5}}{{:assign var="jours_gen." value=6}}{{:assign var="jours_gen." value=7}}{{:assign var="jours_gen." value=8}}{{:assign var="jours_gen." value=9}}{{:assign var="jours_gen." value=10}}
|
||||||
|
{{:assign var="jours_gen." value=11}}{{:assign var="jours_gen." value=12}}{{:assign var="jours_gen." value=13}}{{:assign var="jours_gen." value=14}}{{:assign var="jours_gen." value=15}}{{:assign var="jours_gen." value=16}}{{:assign var="jours_gen." value=17}}{{:assign var="jours_gen." value=18}}{{:assign var="jours_gen." value=19}}{{:assign var="jours_gen." value=20}}
|
||||||
|
{{:assign var="jours_gen." value=21}}{{:assign var="jours_gen." value=22}}{{:assign var="jours_gen." value=23}}{{:assign var="jours_gen." value=24}}{{:assign var="jours_gen." value=25}}{{:assign var="jours_gen." value=26}}{{:assign var="jours_gen." value=27}}{{:assign var="jours_gen." value=28}}{{:assign var="jours_gen." value=29}}{{:assign var="jours_gen." value=30}}
|
||||||
|
{{:assign var="jours_gen." value=31}}
|
||||||
|
|
||||||
|
{{:assign var="idx_mois_gen." value=0}}{{:assign var="idx_mois_gen." value=1}}{{:assign var="idx_mois_gen." value=2}}{{:assign var="idx_mois_gen." value=3}}{{:assign var="idx_mois_gen." value=4}}{{:assign var="idx_mois_gen." value=5}}
|
||||||
|
{{:assign var="idx_mois_gen." value=6}}{{:assign var="idx_mois_gen." value=7}}{{:assign var="idx_mois_gen." value=8}}{{:assign var="idx_mois_gen." value=9}}{{:assign var="idx_mois_gen." value=10}}{{:assign var="idx_mois_gen." value=11}}
|
||||||
|
|
||||||
|
{{#foreach from=$idx_mois_gen item="im_gen"}}
|
||||||
|
{{:assign var="an_g" from="mois_gen_an.%s"|args:$im_gen}}
|
||||||
|
{{:assign var="mois_g" from="mois_gen_mois.%s"|args:$im_gen}}
|
||||||
|
{{:assign var="premier_g" value="%04d-%02d-01"|args:$an_g:$mois_g}}
|
||||||
|
{{:assign var="nb_jours_g" value=$premier_g|date:"t"}}
|
||||||
|
{{#foreach from=$jours_gen item="jn_g"}}
|
||||||
|
{{if $jn_g <= $nb_jours_g}}
|
||||||
|
{{:assign var="date_g" value="%04d-%02d-%02d"|args:$an_g:$mois_g:$jn_g}}
|
||||||
|
{{if $date_g >= $g_debut_periode && $date_g <= $g_fin_periode}}
|
||||||
|
{{:assign var="dow_g" value=$date_g|date:"N"}}
|
||||||
|
{{:assign var="jour_ok_g" value=false}}
|
||||||
|
{{#foreach from=$jours_sel item="jsel_g"}}
|
||||||
|
{{if $dow_g == $jsel_g}}{{:assign var="jour_ok_g" value=true}}{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{if $jour_ok_g}}
|
||||||
|
{{:assign var="cid_g" value="%s-%s"|args:$now|date:"YmdHis":$date_g}}
|
||||||
|
{{:assign var="nouveau_g" id=$cid_g titre=$g_titre date=$date_g debut=$g_heure_debut fin=$g_heure_fin}}
|
||||||
|
{{:assign var="new_creneaux." value=$nouveau_g}}
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:save id=$s.id creneaux=$new_creneaux}}
|
||||||
|
{{:redirect url="%s?vue=view&id=%s"|args:$_url:$s.id}}
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{* ---------- Modification d'un créneau (admin) ---------- *}}
|
||||||
|
{{if $_POST.rename_creneau && $est_admin}}
|
||||||
|
{{:debug _POST_rename_creneau=$_POST.rename_creneau}}
|
||||||
|
{{:assign var="saisi_titre" value=$_POST.titre|strval|trim}}
|
||||||
|
{{:assign var="saisi_date" value=$_POST.date|strval|trim}}
|
||||||
|
{{:assign var="saisi_debut" value=$_POST.debut|strval|trim}}
|
||||||
|
{{:assign var="saisi_fin" value=$_POST.fin|strval|trim}}
|
||||||
|
{{if $saisi_date}}
|
||||||
|
{{#foreach from=$s.creneaux item="c"}}
|
||||||
|
{{if $c.id == $_POST.rename_creneau}}
|
||||||
|
{{:assign var="modifie" id=$c.id titre=$saisi_titre date=$saisi_date debut=$saisi_debut fin=$saisi_fin}}
|
||||||
|
{{:assign var="new_creneaux." value=$modifie}}
|
||||||
|
{{else}}
|
||||||
|
{{:assign var="new_creneaux." value=$c}}
|
||||||
|
{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:save id=$s.id creneaux=$new_creneaux}}
|
||||||
|
{{*:redirect url="%s?vue=view&id=%s"|args:$_url:$s.id*}}
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{* ---------- Suppression d'un créneau (admin) ---------- *}}
|
||||||
|
{{if $_POST.suppr_creneau && $est_admin}}
|
||||||
|
{{#foreach from=$s.creneaux item="c"}}
|
||||||
|
{{if $c.id != $_POST.suppr_creneau}}
|
||||||
|
{{:assign var="new_creneaux." value=$c}}
|
||||||
|
{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:save id=$s.id creneaux=$new_creneaux}}
|
||||||
|
{{:redirect url="%s?vue=view&id=%s"|args:$_url:$s.id}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{* ---------- Suppression d'une ligne (admin) ---------- *}}
|
||||||
|
{{if $_POST.suppr_nom && $est_admin}}
|
||||||
|
{{#foreach from=$s.votes item="v"}}
|
||||||
|
{{if $v.nom != $_POST.suppr_nom}}
|
||||||
|
{{:assign var="new_votes." value=$v}}
|
||||||
|
{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:save id=$s.id votes=$new_votes}}
|
||||||
|
{{:redirect url="%s?vue=view&id=%s"|args:$_url:$s.id}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{* ---------- Enregistrement d'une ligne (public) ---------- *}}
|
||||||
|
{{if $_POST.enregistrer}}
|
||||||
|
{{:assign var="saisi_nom" value=$_POST.nom|strval|trim}}
|
||||||
|
{{:assign var="saisi_remarque" value=$_POST.remarque|strval|trim}}
|
||||||
|
{{if $saisi_nom}}
|
||||||
|
{{#foreach from=$s.votes item="v"}}
|
||||||
|
{{if $v.nom != $saisi_nom}}
|
||||||
|
{{:assign var="new_votes." value=$v}}
|
||||||
|
{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{#foreach from=$s.creneaux item="c"}}
|
||||||
|
{{:assign var="val" from="_POST.dispo.%s"|args:$c.id}}
|
||||||
|
{{:assign var="new_choix.%s"|args:$c.id value=$val|intval}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:assign var="ligne" nom=$saisi_nom choix=$new_choix remarque=$saisi_remarque}}
|
||||||
|
{{:assign var="new_votes." value=$ligne}}
|
||||||
|
{{:save id=$s.id votes=$new_votes}}
|
||||||
|
{{:redirect url="%s?vue=view&id=%s"|args:$_url:$s.id}}
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
{{* ---------- Ajout d'une option (sondage simple, admin) ---------- *}}
|
||||||
|
{{#form on="add_opt_son"}}
|
||||||
|
{{if $_POST.add_opt_son}}
|
||||||
|
{{* Charge sondage *}}
|
||||||
|
{{#load assign="s" id=$_POST.add_opt_son|intval}}{{/load}}
|
||||||
|
{{:assign var="saisi_opt" value=$_POST.texte|strval|trim}}
|
||||||
|
{{if $saisi_opt}}
|
||||||
|
{{:assign var="new_options" value=$s.options}}
|
||||||
|
{{:assign var="oid" value=$now|date:"YmdHis"}}
|
||||||
|
{{:assign var="nouvelle_opt" id=$oid texte=$saisi_opt}}
|
||||||
|
{{:assign var="new_options." value=$nouvelle_opt}}
|
||||||
|
{{:save id=$s.id options=$new_options}}
|
||||||
|
{{:redirect url="%s?vue=view&id=%s&msg=ajout"|args:$module.url:$s.id}}
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
{{else}}
|
||||||
|
{{:form_errors}}
|
||||||
|
{{/form}}
|
||||||
|
{{* ---------- Suppression d'une option (sondage simple, admin) ---------- *}}
|
||||||
|
{{#form on="del_opt_son"}}
|
||||||
|
{{if $_POST.del_opt_son}}
|
||||||
|
{{* Charge sondage *}}
|
||||||
|
{{#load assign="s" id=$_POST.del_opt_son|intval}}{{/load}}
|
||||||
|
{{#foreach from=$s.options item="o"}}
|
||||||
|
{{if $o.id != $_POST.oid}}
|
||||||
|
{{:assign var="new_options." value=$o}}
|
||||||
|
{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:save id=$s.id options=$new_options}}
|
||||||
|
{{:redirect url="%s?vue=view&id=%s&msg=suppression"|args:$module.url:$s.id}}
|
||||||
|
{{/if}}
|
||||||
|
{{else}}
|
||||||
|
{{:form_errors}}
|
||||||
|
{{/form}}
|
||||||
|
{{* ---------- Suppression d'un vote (sondage simple, admin) ---------- *}}
|
||||||
|
{{#form on="del_vot_son"}}
|
||||||
|
{{if $_POST.del_vot_son}}
|
||||||
|
{{* Charge sondage *}}
|
||||||
|
{{#load assign="s" id=$_POST.del_vot_son|intval}}{{/load}}
|
||||||
|
{{#foreach from=$s.votes_simple item="v"}}
|
||||||
|
{{if $v.choix != $_POST.choix}}
|
||||||
|
{{:assign var="new_votes_simple." value=$v}}
|
||||||
|
{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:save id=$s.id votes_simple=$new_votes_simple}}
|
||||||
|
{{:redirect url="%s?vue=view&id=%s&msg=suppression"|args:$module.url:$s.id}}
|
||||||
|
{{/if}}
|
||||||
|
{{/form}}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
{{* ---------- Vote sur un sondage simple (public) ---------- *}}
|
||||||
|
{{#form on="voter_simple"}}
|
||||||
|
{{if $_POST.voter_simple}}
|
||||||
|
{{:assign var="vs_nom" value=$_POST.nom_vote|strval|trim}}
|
||||||
|
{{:assign var="vs_choix" value=$_POST.choix_option|strval|trim}}
|
||||||
|
{{:assign var="vs_remarque" value=$_POST.remarque|strval|trim}}
|
||||||
|
{{if $vs_nom != "" && $vs_choix != ""}}
|
||||||
|
{{#foreach from=$s.votes_simple item="v"}}
|
||||||
|
{{if $v.nom != $vs_nom}}
|
||||||
|
{{:assign var="new_votes_simple." value=$v}}
|
||||||
|
{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:assign var="ligne_vs" nom=$vs_nom choix=$vs_choix remarque=$vs_remarque}}
|
||||||
|
{{:assign var="new_votes_simple." value=$ligne_vs}}
|
||||||
|
{{*:debug new_votes_simple=$new_votes_simple*}}
|
||||||
|
{{:save id=$_POST.voter_simple votes_simple=$new_votes_simple}}
|
||||||
|
{{:redirect url="%s?msg=vote"|args:$module.url}}
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
{{else}}
|
||||||
|
{{:form_errors}}
|
||||||
|
{{/form}}
|
||||||
|
|
||||||
|
{{* ---------- Vote sur un sondage de disponibilités (public) ---------- *}}
|
||||||
|
{{#form on="voter_creneau"}}
|
||||||
|
{{if $_POST.voter_creneau}}
|
||||||
|
{{:assign var="saisi_nom" value=$_POST.nom_vote|strval|trim}}
|
||||||
|
{{:assign var="saisi_remarque" value=$_POST.remarque|strval|trim}}
|
||||||
|
{{if $saisi_nom}}
|
||||||
|
{{#foreach from=$s.votes item="v"}}
|
||||||
|
{{if $v.nom != $saisi_nom}}
|
||||||
|
{{:assign var="new_votes." value=$v}}
|
||||||
|
{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:debug new_votes=$new_votes}}
|
||||||
|
{{#foreach from=$s.creneaux item="c"}}
|
||||||
|
{{:assign var="val" from="_POST.dispo.%s"|args:$c.id}}
|
||||||
|
{{:assign var="new_choix.%s"|args:$c.id value=$val|intval}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:assign var="ligne" nom=$saisi_nom choix=$new_choix remarque=$saisi_remarque}}
|
||||||
|
{{:assign var="new_votes." value=$ligne}}
|
||||||
|
{{:save id=$s.id votes=$new_votes}}
|
||||||
|
{{:redirect url="%s?msg=vote"|args:$module.url}}
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
{{else}}
|
||||||
|
{{:form_errors}}
|
||||||
|
{{/form}}
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
name = "Sondages"
|
||||||
|
description = "Tableau de disponibilités partagé, façon Framadate : chacun indique ses disponibilités sur les créneaux proposés."
|
||||||
|
author = "Vive le Vélo / F.Boudaud (Asso Recycl'arz)"
|
||||||
|
author_url = "https://recyclarz.bountyarz.ovh"
|
||||||
|
restrict_section = "web"
|
||||||
|
restrict_level = "write"
|
||||||
|
home_button = false
|
||||||
|
menu = true
|
||||||
|
home_button = true
|
||||||
|
web = false
|
||||||
+66
@@ -0,0 +1,66 @@
|
|||||||
|
:root { --terra: #8c3a1e; --terra2: #bb4f2a; --orange: #d9720f; --vert: #4c7a2e; }
|
||||||
|
* { box-sizing: border-box; }
|
||||||
|
.wrap { max-width: 62rem; margin: 0 auto; }
|
||||||
|
h1 { margin: 0 0 1.2rem; font-size: 1.7rem; color: var(--terra); }
|
||||||
|
.card { background: #fff; border: 1px solid #e2ddd9; border-radius: .6rem; padding: 1rem 1.2rem 1.2rem; margin-bottom: 1.2rem; box-shadow: 0 1px 4px rgba(0,0,0,.10); }
|
||||||
|
.card h2 { margin: 0 0 .8rem; font-size: 1.05rem; color: var(--terra); text-transform: uppercase; letter-spacing: .04em; }
|
||||||
|
input[type=text] { max-width: 100%; box-sizing: border-box; font-size: 1.05rem; padding: .45rem .7rem; border: 1px solid #bbb; border-radius: .4rem; background: #fff; }
|
||||||
|
ul.sondages { list-style: none; margin: 0; padding: 0; }
|
||||||
|
ul.sondages li { border-bottom: 1px solid #eee; }
|
||||||
|
ul.sondages li:last-child { border-bottom: none; }
|
||||||
|
ul.sondages a { display: block; padding: .7rem .2rem; color: #00358a; font-size: 1.15rem; text-decoration: none; }
|
||||||
|
ul.sondages a:hover { color: var(--terra); text-decoration: underline; }
|
||||||
|
ul.sondages small { display: block; color: #777; font-size: .85rem; }
|
||||||
|
p.vide { color: #777; margin: 0; }
|
||||||
|
a.retour { color: var(--terra); text-decoration: none; font-size: .95rem; }
|
||||||
|
a.retour:hover { text-decoration: underline; }
|
||||||
|
textarea.description: { width:100%; font-family:inherit; font-size:1rem; padding:.45rem .7rem; border:1px solid #bbb; border-radius:.4rem; resize:vertical; }
|
||||||
|
p.fil { margin: 0 0 .2rem; }
|
||||||
|
p.fil span.sep { color: #c4bdb8; margin: 0 .45rem; }
|
||||||
|
h1 { margin: .4rem 0 1.2rem; font-size: 1.7rem; color: var(--terra); }
|
||||||
|
.badge-admin { display: inline-block; background: var(--vert); color: #fff; font-size: .75rem; padding: .15rem .5rem; border-radius: 1rem; margin-left: .5rem; vertical-align: middle; }
|
||||||
|
.card { background: #fff; border: 1px solid #e2ddd9; border-radius: .6rem; padding: 1rem 1.2rem 1.2rem; margin-bottom: 1.2rem; box-shadow: 0 1px 4px rgba(0,0,0,.10); }
|
||||||
|
.card h2 { margin: 0 0 .8rem; font-size: 1.05rem; color: var(--terra); text-transform: uppercase; letter-spacing: .04em; }
|
||||||
|
.scroll { overflow: auto; max-height: 70vh; }
|
||||||
|
table.grille { border-collapse: separate; border-spacing: 0; width: 100%; }
|
||||||
|
table.grille th, table.grille td { padding: .5rem .6rem; text-align: center; border-bottom: 1px solid #eceae8; }
|
||||||
|
table.grille th:first-child { width: 15rem; min-width: 15rem; position: sticky; left: 0; z-index: 2; }
|
||||||
|
table.grille thead th { background: var(--terra); color: #fff; font-size: .9rem; line-height: 1.25; vertical-align: middle; border-bottom: none; position: sticky; top: 0; z-index: 3; }
|
||||||
|
table.grille thead th:first-child { background: var(--terra); z-index: 4; }
|
||||||
|
table.grille thead th.creneau { min-width: 7.5rem; border-left: 1px solid rgba(255,255,255,.25); }
|
||||||
|
table.grille thead th.creneau b { display: block; font-size: .95rem; }
|
||||||
|
table.grille thead th.creneau small { display: block; font-weight: normal; opacity: .85; }
|
||||||
|
table.grille tbody th { text-align: right; font-weight: bold; background: #faf9f8; }
|
||||||
|
td.oui { background: #dbeec6; color: #33521a; font-weight: bold; }
|
||||||
|
td.peut { background: #fae4c6; color: #7a5310; font-weight: bold; }
|
||||||
|
td.non { background: #f7cec7; }
|
||||||
|
tr.somme th, tr.somme td { border-top: 2px solid var(--terra); border-bottom: none; padding-top: .7rem; font-weight: bold; background: #fff; }
|
||||||
|
tr.somme td span.best { color: var(--terra); }
|
||||||
|
tr.somme td small, tr.somme th small { display: block; font-weight: normal; color: #7a5310; }
|
||||||
|
tr.saisie th, tr.saisie td { background: #f1f5ec; border-top: 2px solid #cfd9c2; }
|
||||||
|
tr.saisie label { display: block; cursor: pointer; font-size: .8rem; line-height: 1.5; text-align: left; }
|
||||||
|
tr.saisie input[type=radio] { margin: 0 .3rem 0 0; vertical-align: middle; }
|
||||||
|
input[type=text] { font-size: 1rem; padding: .4rem .6rem; border: 1px solid #bbb; border-radius: .4rem; width: 100%; }
|
||||||
|
input[type=date], input[type=time] { font-family: inherit; font-size: 1rem; padding: .4rem .6rem; border: 1px solid #bbb; border-radius: .4rem; background: #fff; }
|
||||||
|
button { font-family: inherit; font-size: .95rem; padding: .45rem .9rem; border: none; border-radius: .4rem; background: var(--terra); color: #fff; cursor: pointer; }
|
||||||
|
button:hover { background: var(--orange); }
|
||||||
|
button.mini { background: none; color: #e6cfc6; padding: .1rem .25rem; font-size: .9rem; }
|
||||||
|
button.mini:hover { background: none; color: #fff; }
|
||||||
|
p.aide { color: #777; font-size: .9rem; margin: .6rem 0 0; }
|
||||||
|
.ajout { display: flex; gap: .6rem; align-items: center; flex-wrap: wrap; }
|
||||||
|
.ajout label { font-size: .9rem; color: #666; }
|
||||||
|
p.vide { color: #777; }
|
||||||
|
.ajout input[type=text] { width: auto; min-width: 13rem; }
|
||||||
|
table.grille thead th.creneau em.titre { display: block; font-style: normal; font-size: .78rem; text-transform: uppercase; letter-spacing: .04em; opacity: .8; margin-bottom: .15rem; }
|
||||||
|
.card.danger { border-color: #e6c9c2; }
|
||||||
|
.card.danger h2 { color: #a12a12; }
|
||||||
|
.card.danger label { font-size: .95rem; cursor: pointer; }
|
||||||
|
button.danger { background: #a12a12; }
|
||||||
|
button.danger:hover { background: #c9401f; }
|
||||||
|
|
||||||
|
@media (max-width: 600px) {
|
||||||
|
table.grille th:first-child { width: 6.5rem; min-width: 6.5rem; }
|
||||||
|
tr.saisie th input[type=text] { padding: .3rem .4rem; font-size: .85rem; }
|
||||||
|
tr.saisie label { font-size: .72rem; }
|
||||||
|
table.grille th, table.grille td { padding: .4rem .3rem; }
|
||||||
|
}
|
||||||
+742
@@ -0,0 +1,742 @@
|
|||||||
|
{{* Administration : droits Paheko réels (écriture sur la section "web"), plus de code partagé dans l'URL. *}}
|
||||||
|
{{#restrict section="web" level="write"}}
|
||||||
|
{{:assign var="est_admin" value=true}}
|
||||||
|
{{else}}
|
||||||
|
{{if $is_logged==true}}
|
||||||
|
{{:assign _url="%sindex.html"|args:$module.url}}
|
||||||
|
{{else}}
|
||||||
|
{{:assign _url="%ssondage.html"|args:$module.url}}
|
||||||
|
{{/if}}
|
||||||
|
{{:assign var="est_admin" value=false}}
|
||||||
|
{{/restrict}}
|
||||||
|
|
||||||
|
{{if $est_admin==true}}
|
||||||
|
{{:admin_header title="Sondages" custom_css="/m/vote/sondage.css" layout="" current="module_vote"}}
|
||||||
|
{{* TODO membre logué
|
||||||
|
<link rel='stylesheet' id='agenda-css' href='agenda.css' media='all'/>*}}
|
||||||
|
{{else}}
|
||||||
|
{{:admin_header title="Sondages" custom_css="/m/vote/sondage.css" layout="" current="module_vote"}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{* Charge le sondage choisi si dispo *}}
|
||||||
|
{{#load assign="s" id=$_GET.id|intval}}{{/load}}
|
||||||
|
{{:assign vue=$_GET.vue}}
|
||||||
|
|
||||||
|
{{* Navigation *}}
|
||||||
|
{{if $_nav == "conf"}}
|
||||||
|
{{if !$_conf}}
|
||||||
|
{{:include file="_nav.html" current="config" subcurrent="new_son"}}
|
||||||
|
{{:assign _conf="new_son"}}
|
||||||
|
{{else}}
|
||||||
|
{{:include file="_nav.html" current="config" subcurrent="%s"|args:$_conf}}
|
||||||
|
{{:assign _conf=$_conf}}
|
||||||
|
{{/if}}
|
||||||
|
{{:include file="_config.html" subconf=$_conf}}
|
||||||
|
{{else}}
|
||||||
|
{{if !$_GET.vue}}
|
||||||
|
{{:assign vue="new_son"}}
|
||||||
|
{{/if}}
|
||||||
|
{{:include file="_nav.html" current="sondage" subcurrent="%s"|args:$vue}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{if !$s.id}}
|
||||||
|
{{:error message="Ce sondage n'existe pas (ou plus)."}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{* ---------- Ajout d'une option (sondage simple, admin) ----------
|
||||||
|
{{if $_POST.add_option && $est_admin}}
|
||||||
|
{{:assign var="saisi_opt" value=$_POST.texte|strval|trim}}
|
||||||
|
{{if $saisi_opt}}
|
||||||
|
{{:assign var="new_options" value=$s.options}}
|
||||||
|
{{:assign var="oid" value=$now|date:"YmdHis"}}
|
||||||
|
{{:assign var="nouvelle_opt" id=$oid texte=$saisi_opt}}
|
||||||
|
{{:assign var="new_options." value=$nouvelle_opt}}
|
||||||
|
{{:save id=$s.id options=$new_options}}
|
||||||
|
{{:redirect url="sondage.html?id=%s&code=%s"|args:$s.id:$code_saisi}}
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
*}}
|
||||||
|
{{* ---------- Suppression d'une option (sondage simple, admin) ----------
|
||||||
|
{{if $_POST.suppr_option && $est_admin}}
|
||||||
|
{{#foreach from=$s.options item="o"}}
|
||||||
|
{{if $o.id != $_POST.suppr_option}}
|
||||||
|
{{:assign var="new_options." value=$o}}
|
||||||
|
{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:save id=$s.id options=$new_options}}
|
||||||
|
{{:redirect url="sondage.html?id=%s&code=%s"|args:$s.id:$code_saisi}}
|
||||||
|
{{/if}}
|
||||||
|
*}}
|
||||||
|
{{* ---------- Vote sur un sondage simple (public) ----------
|
||||||
|
{{if $_POST.voter_simple}}
|
||||||
|
{{:assign var="vs_nom" value=$_POST.nom_vote|strval|trim}}
|
||||||
|
{{:assign var="vs_choix" value=$_POST.choix_option|strval|trim}}
|
||||||
|
{{:assign var="vs_remarque" value=$_POST.remarque|strval|trim}}
|
||||||
|
{{if $vs_nom != "" && $vs_choix != ""}}
|
||||||
|
{{#foreach from=$s.votes_simple item="v"}}
|
||||||
|
{{if $v.nom != $vs_nom}}
|
||||||
|
{{:assign var="new_votes_simple." value=$v}}
|
||||||
|
{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:assign var="ligne_vs" nom=$vs_nom choix=$vs_choix remarque=$vs_remarque}}
|
||||||
|
{{:assign var="new_votes_simple." value=$ligne_vs}}
|
||||||
|
{{:save id=$s.id votes_simple=$new_votes_simple}}
|
||||||
|
{{:redirect url="sondage.html?id=%s&code=%s"|args:$s.id:$code_saisi}}
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
*}}
|
||||||
|
{{* ---------- Ajout d'un créneau (admin) ----------
|
||||||
|
{{if $_POST.add_creneau && $est_admin}}
|
||||||
|
{{:assign var="saisi_titre" value=$_POST.titre|strval|trim}}
|
||||||
|
{{:assign var="saisi_date" value=$_POST.date|strval|trim}}
|
||||||
|
{{:assign var="saisi_debut" value=$_POST.debut|strval|trim}}
|
||||||
|
{{:assign var="saisi_fin" value=$_POST.fin|strval|trim}}
|
||||||
|
{{if $saisi_date}}
|
||||||
|
{{:assign var="new_creneaux" value=$s.creneaux}}
|
||||||
|
{{:assign var="cid" value=$now|date:"YmdHis"}}
|
||||||
|
{{:assign var="nouveau" id=$cid titre=$saisi_titre date=$saisi_date debut=$saisi_debut fin=$saisi_fin}}
|
||||||
|
{{:assign var="new_creneaux." value=$nouveau}}
|
||||||
|
{{:save id=$s.id creneaux=$new_creneaux}}
|
||||||
|
{{:redirect url="sondage.html?id=%s&code=%s"|args:$s.id:$code_saisi}}
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
*}}
|
||||||
|
{{* ---------- Ajout de plusieurs créneaux d'un coup (saisie libre, admin) ----------
|
||||||
|
{{if $_POST.ajout_multiple && $est_admin}}
|
||||||
|
{{:assign var="new_creneaux" value=$s.creneaux}}
|
||||||
|
{{:assign var="lignes." value=1}}{{:assign var="lignes." value=2}}{{:assign var="lignes." value=3}}{{:assign var="lignes." value=4}}{{:assign var="lignes." value=5}}
|
||||||
|
{{#foreach from=$lignes item="ligne_i"}}
|
||||||
|
{{:assign var="m_date_brut" from="_POST.date_%d"|args:$ligne_i}}
|
||||||
|
{{:assign var="m_date" value=$m_date_brut|strval|trim}}
|
||||||
|
{{if $m_date}}
|
||||||
|
{{:assign var="m_titre_brut" from="_POST.titre_%d"|args:$ligne_i}}
|
||||||
|
{{:assign var="m_debut_brut" from="_POST.debut_%d"|args:$ligne_i}}
|
||||||
|
{{:assign var="m_fin_brut" from="_POST.fin_%d"|args:$ligne_i}}
|
||||||
|
{{:assign var="m_titre" value=$m_titre_brut|strval|trim}}
|
||||||
|
{{:assign var="m_debut" value=$m_debut_brut|strval|trim}}
|
||||||
|
{{:assign var="m_fin" value=$m_fin_brut|strval|trim}}
|
||||||
|
{{:assign this_date=$now|date:'YmdHis'}}
|
||||||
|
{{:assign var="cid_m" value="%s-%d"|args:$this_date:$ligne_i}}
|
||||||
|
{{:assign var="nouveau_m" id=$cid_m titre=$m_titre date=$m_date debut=$m_debut fin=$m_fin}}
|
||||||
|
{{:assign var="new_creneaux." value=$nouveau_m}}
|
||||||
|
{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:save id=$s.id creneaux=$new_creneaux}}
|
||||||
|
{{:redirect url="sondage.html?id=%s&code=%s"|args:$s.id:$code_saisi}}
|
||||||
|
{{/if}}
|
||||||
|
*}}
|
||||||
|
{{* ---------- Générateur automatique de créneaux par jour de semaine (admin) ----------
|
||||||
|
{{if $_POST.generer_creneaux && $est_admin}}
|
||||||
|
{{#foreach from=$_POST.g_jour item="jc"}}
|
||||||
|
{{:assign var="jours_sel." value=$jc|intval}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:assign var="g_debut_periode" value=$_POST.g_debut_periode|strval|trim}}
|
||||||
|
{{:assign var="g_fin_periode" value=$_POST.g_fin_periode|strval|trim}}
|
||||||
|
{{:assign var="g_titre" value=$_POST.g_titre|strval|trim}}
|
||||||
|
{{:assign var="g_heure_debut" value=$_POST.g_heure_debut|strval|trim}}
|
||||||
|
{{:assign var="g_heure_fin" value=$_POST.g_heure_fin|strval|trim}}
|
||||||
|
{{if $g_debut_periode && $g_fin_periode}}
|
||||||
|
{{:assign var="new_creneaux" value=$s.creneaux}}
|
||||||
|
|
||||||
|
{{:assign var="an_g0" value=$g_debut_periode|date:"Y"}}
|
||||||
|
{{:assign var="mois_g0" value=$g_debut_periode|date:"n"}}
|
||||||
|
{{if $mois_g0 == 12}}{{:assign var="mois_g1" value=1}}{{:assign var="an_g1" value="%d+1"|math:$an_g0}}{{else}}{{:assign var="mois_g1" value="%d+1"|math:$mois_g0}}{{:assign var="an_g1" value=$an_g0}}{{/if}}
|
||||||
|
{{if $mois_g1 == 12}}{{:assign var="mois_g2" value=1}}{{:assign var="an_g2" value="%d+1"|math:$an_g1}}{{else}}{{:assign var="mois_g2" value="%d+1"|math:$mois_g1}}{{:assign var="an_g2" value=$an_g1}}{{/if}}
|
||||||
|
{{if $mois_g2 == 12}}{{:assign var="mois_g3" value=1}}{{:assign var="an_g3" value="%d+1"|math:$an_g2}}{{else}}{{:assign var="mois_g3" value="%d+1"|math:$mois_g2}}{{:assign var="an_g3" value=$an_g2}}{{/if}}
|
||||||
|
{{if $mois_g3 == 12}}{{:assign var="mois_g4" value=1}}{{:assign var="an_g4" value="%d+1"|math:$an_g3}}{{else}}{{:assign var="mois_g4" value="%d+1"|math:$mois_g3}}{{:assign var="an_g4" value=$an_g3}}{{/if}}
|
||||||
|
{{if $mois_g4 == 12}}{{:assign var="mois_g5" value=1}}{{:assign var="an_g5" value="%d+1"|math:$an_g4}}{{else}}{{:assign var="mois_g5" value="%d+1"|math:$mois_g4}}{{:assign var="an_g5" value=$an_g4}}{{/if}}
|
||||||
|
{{if $mois_g5 == 12}}{{:assign var="mois_g6" value=1}}{{:assign var="an_g6" value="%d+1"|math:$an_g5}}{{else}}{{:assign var="mois_g6" value="%d+1"|math:$mois_g5}}{{:assign var="an_g6" value=$an_g5}}{{/if}}
|
||||||
|
{{if $mois_g6 == 12}}{{:assign var="mois_g7" value=1}}{{:assign var="an_g7" value="%d+1"|math:$an_g6}}{{else}}{{:assign var="mois_g7" value="%d+1"|math:$mois_g6}}{{:assign var="an_g7" value=$an_g6}}{{/if}}
|
||||||
|
{{if $mois_g7 == 12}}{{:assign var="mois_g8" value=1}}{{:assign var="an_g8" value="%d+1"|math:$an_g7}}{{else}}{{:assign var="mois_g8" value="%d+1"|math:$mois_g7}}{{:assign var="an_g8" value=$an_g7}}{{/if}}
|
||||||
|
{{if $mois_g8 == 12}}{{:assign var="mois_g9" value=1}}{{:assign var="an_g9" value="%d+1"|math:$an_g8}}{{else}}{{:assign var="mois_g9" value="%d+1"|math:$mois_g8}}{{:assign var="an_g9" value=$an_g8}}{{/if}}
|
||||||
|
{{if $mois_g9 == 12}}{{:assign var="mois_g10" value=1}}{{:assign var="an_g10" value="%d+1"|math:$an_g9}}{{else}}{{:assign var="mois_g10" value="%d+1"|math:$mois_g9}}{{:assign var="an_g10" value=$an_g9}}{{/if}}
|
||||||
|
{{if $mois_g10 == 12}}{{:assign var="mois_g11" value=1}}{{:assign var="an_g11" value="%d+1"|math:$an_g10}}{{else}}{{:assign var="mois_g11" value="%d+1"|math:$mois_g10}}{{:assign var="an_g11" value=$an_g10}}{{/if}}
|
||||||
|
|
||||||
|
{{:assign var="mois_gen_an.0" value=$an_g0}}{{:assign var="mois_gen_mois.0" value=$mois_g0}}
|
||||||
|
{{:assign var="mois_gen_an.1" value=$an_g1}}{{:assign var="mois_gen_mois.1" value=$mois_g1}}
|
||||||
|
{{:assign var="mois_gen_an.2" value=$an_g2}}{{:assign var="mois_gen_mois.2" value=$mois_g2}}
|
||||||
|
{{:assign var="mois_gen_an.3" value=$an_g3}}{{:assign var="mois_gen_mois.3" value=$mois_g3}}
|
||||||
|
{{:assign var="mois_gen_an.4" value=$an_g4}}{{:assign var="mois_gen_mois.4" value=$mois_g4}}
|
||||||
|
{{:assign var="mois_gen_an.5" value=$an_g5}}{{:assign var="mois_gen_mois.5" value=$mois_g5}}
|
||||||
|
{{:assign var="mois_gen_an.6" value=$an_g6}}{{:assign var="mois_gen_mois.6" value=$mois_g6}}
|
||||||
|
{{:assign var="mois_gen_an.7" value=$an_g7}}{{:assign var="mois_gen_mois.7" value=$mois_g7}}
|
||||||
|
{{:assign var="mois_gen_an.8" value=$an_g8}}{{:assign var="mois_gen_mois.8" value=$mois_g8}}
|
||||||
|
{{:assign var="mois_gen_an.9" value=$an_g9}}{{:assign var="mois_gen_mois.9" value=$mois_g9}}
|
||||||
|
{{:assign var="mois_gen_an.10" value=$an_g10}}{{:assign var="mois_gen_mois.10" value=$mois_g10}}
|
||||||
|
{{:assign var="mois_gen_an.11" value=$an_g11}}{{:assign var="mois_gen_mois.11" value=$mois_g11}}
|
||||||
|
|
||||||
|
{{:assign var="jours_gen." value=1}}{{:assign var="jours_gen." value=2}}{{:assign var="jours_gen." value=3}}{{:assign var="jours_gen." value=4}}{{:assign var="jours_gen." value=5}}{{:assign var="jours_gen." value=6}}{{:assign var="jours_gen." value=7}}{{:assign var="jours_gen." value=8}}{{:assign var="jours_gen." value=9}}{{:assign var="jours_gen." value=10}}
|
||||||
|
{{:assign var="jours_gen." value=11}}{{:assign var="jours_gen." value=12}}{{:assign var="jours_gen." value=13}}{{:assign var="jours_gen." value=14}}{{:assign var="jours_gen." value=15}}{{:assign var="jours_gen." value=16}}{{:assign var="jours_gen." value=17}}{{:assign var="jours_gen." value=18}}{{:assign var="jours_gen." value=19}}{{:assign var="jours_gen." value=20}}
|
||||||
|
{{:assign var="jours_gen." value=21}}{{:assign var="jours_gen." value=22}}{{:assign var="jours_gen." value=23}}{{:assign var="jours_gen." value=24}}{{:assign var="jours_gen." value=25}}{{:assign var="jours_gen." value=26}}{{:assign var="jours_gen." value=27}}{{:assign var="jours_gen." value=28}}{{:assign var="jours_gen." value=29}}{{:assign var="jours_gen." value=30}}
|
||||||
|
{{:assign var="jours_gen." value=31}}
|
||||||
|
|
||||||
|
{{:assign var="idx_mois_gen." value=0}}{{:assign var="idx_mois_gen." value=1}}{{:assign var="idx_mois_gen." value=2}}{{:assign var="idx_mois_gen." value=3}}{{:assign var="idx_mois_gen." value=4}}{{:assign var="idx_mois_gen." value=5}}
|
||||||
|
{{:assign var="idx_mois_gen." value=6}}{{:assign var="idx_mois_gen." value=7}}{{:assign var="idx_mois_gen." value=8}}{{:assign var="idx_mois_gen." value=9}}{{:assign var="idx_mois_gen." value=10}}{{:assign var="idx_mois_gen." value=11}}
|
||||||
|
|
||||||
|
{{#foreach from=$idx_mois_gen item="im_gen"}}
|
||||||
|
{{:assign var="an_g" from="mois_gen_an.%s"|args:$im_gen}}
|
||||||
|
{{:assign var="mois_g" from="mois_gen_mois.%s"|args:$im_gen}}
|
||||||
|
{{:assign var="premier_g" value="%04d-%02d-01"|args:$an_g:$mois_g}}
|
||||||
|
{{:assign var="nb_jours_g" value=$premier_g|date:"t"}}
|
||||||
|
{{#foreach from=$jours_gen item="jn_g"}}
|
||||||
|
{{if $jn_g <= $nb_jours_g}}
|
||||||
|
{{:assign var="date_g" value="%04d-%02d-%02d"|args:$an_g:$mois_g:$jn_g}}
|
||||||
|
{{if $date_g >= $g_debut_periode && $date_g <= $g_fin_periode}}
|
||||||
|
{{:assign var="dow_g" value=$date_g|date:"N"}}
|
||||||
|
{{:assign var="jour_ok_g" value=false}}
|
||||||
|
{{#foreach from=$jours_sel item="jsel_g"}}
|
||||||
|
{{if $dow_g == $jsel_g}}{{:assign var="jour_ok_g" value=true}}{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{if $jour_ok_g}}
|
||||||
|
{{:assign var="cid_g" value="%s-%s"|args:$now|date:"YmdHis":$date_g}}
|
||||||
|
{{:assign var="nouveau_g" id=$cid_g titre=$g_titre date=$date_g debut=$g_heure_debut fin=$g_heure_fin}}
|
||||||
|
{{:assign var="new_creneaux." value=$nouveau_g}}
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{/foreach}}
|
||||||
|
|
||||||
|
{{:save id=$s.id creneaux=$new_creneaux}}
|
||||||
|
{{:redirect url="sondage.html?id=%s&code=%s"|args:$s.id:$code_saisi}}
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
*}}
|
||||||
|
|
||||||
|
{{* ---------- Modification de la description (admin) ----------
|
||||||
|
{{if $_POST.maj_description && $est_admin}}
|
||||||
|
{{:assign var="saisi_description" value=$_POST.description|strval|trim}}
|
||||||
|
{{:save id=$s.id description=$saisi_description}}
|
||||||
|
{{:redirect url="sondage.html?id=%s&code=%s"|args:$s.id:$code_saisi}}
|
||||||
|
{{/if}}
|
||||||
|
*}}
|
||||||
|
|
||||||
|
{{* ---------- Modification d'un créneau (admin) ----------
|
||||||
|
{{if $_POST.rename_creneau && $est_admin}}
|
||||||
|
{{:assign var="saisi_titre" value=$_POST.titre|strval|trim}}
|
||||||
|
{{:assign var="saisi_date" value=$_POST.date|strval|trim}}
|
||||||
|
{{:assign var="saisi_debut" value=$_POST.debut|strval|trim}}
|
||||||
|
{{:assign var="saisi_fin" value=$_POST.fin|strval|trim}}
|
||||||
|
{{if $saisi_date}}
|
||||||
|
{{#foreach from=$s.creneaux item="c"}}
|
||||||
|
{{if $c.id == $_POST.rename_creneau}}
|
||||||
|
{{:assign var="modifie" id=$c.id titre=$saisi_titre date=$saisi_date debut=$saisi_debut fin=$saisi_fin}}
|
||||||
|
{{:assign var="new_creneaux." value=$modifie}}
|
||||||
|
{{else}}
|
||||||
|
{{:assign var="new_creneaux." value=$c}}
|
||||||
|
{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:save id=$s.id creneaux=$new_creneaux}}
|
||||||
|
{{:redirect url="sondage.html?id=%s&code=%s"|args:$s.id:$code_saisi}}
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
*}}
|
||||||
|
|
||||||
|
{{* ---------- Suppression d'un créneau (admin) ----------
|
||||||
|
{{if $_POST.suppr_creneau && $est_admin}}
|
||||||
|
{{#foreach from=$s.creneaux item="c"}}
|
||||||
|
{{if $c.id != $_POST.suppr_creneau}}
|
||||||
|
{{:assign var="new_creneaux." value=$c}}
|
||||||
|
{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:save id=$s.id creneaux=$new_creneaux}}
|
||||||
|
{{:redirect url="sondage.html?id=%s&code=%s"|args:$s.id:$code_saisi}}
|
||||||
|
{{/if}}
|
||||||
|
*}}
|
||||||
|
|
||||||
|
{{* ---------- Suppression d'une ligne (admin) ---------- *}}
|
||||||
|
{{if $_POST.suppr_nom && $est_admin}}
|
||||||
|
{{#foreach from=$s.votes item="v"}}
|
||||||
|
{{if $v.nom != $_POST.suppr_nom}}
|
||||||
|
{{:assign var="new_votes." value=$v}}
|
||||||
|
{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:save id=$s.id votes=$new_votes}}
|
||||||
|
{{:redirect url="sondage.html?id=%s&code=%s"|args:$s.id:$code_saisi}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{* ---------- Suppression du sondage (admin) ----------
|
||||||
|
{{if $_POST.suppr_sondage && $est_admin}}
|
||||||
|
{{if $_POST.confirmer}}
|
||||||
|
{{:delete id=$s.id}}
|
||||||
|
{{:redirect url="./?code=%s"|args:$code_saisi}}
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
*}}
|
||||||
|
{{* ---------- Enregistrement d'une ligne (public) ----------
|
||||||
|
{{if $_POST.enregistrer}}
|
||||||
|
{{:assign var="saisi_nom" value=$_POST.nom|strval|trim}}
|
||||||
|
{{:assign var="saisi_remarque" value=$_POST.remarque|strval|trim}}
|
||||||
|
{{if $saisi_nom}}
|
||||||
|
{{#foreach from=$s.votes item="v"}}
|
||||||
|
{{if $v.nom != $saisi_nom}}
|
||||||
|
{{:assign var="new_votes." value=$v}}
|
||||||
|
{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{#foreach from=$s.creneaux item="c"}}
|
||||||
|
{{:assign var="val" from="_POST.dispo.%s"|args:$c.id}}
|
||||||
|
{{:assign var="new_choix.%s"|args:$c.id value=$val|intval}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:assign var="ligne" nom=$saisi_nom choix=$new_choix remarque=$saisi_remarque}}
|
||||||
|
{{:assign var="new_votes." value=$ligne}}
|
||||||
|
{{:save id=$s.id votes=$new_votes}}
|
||||||
|
{{:redirect url="sondage.html?id=%s"|args:$s.id}}
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
*}}
|
||||||
|
{{* ---------- Purge automatique des créneaux dont la date est passée ----------
|
||||||
|
{{: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="sondage.html?id=%s&code=%s"|args:$s.id:$code_saisi}}
|
||||||
|
{{/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}}
|
||||||
|
*}}
|
||||||
|
{{* ---------- Totaux par option (sondage simple) ----------
|
||||||
|
{{:assign var="max_opt" value=0}}
|
||||||
|
{{#foreach from=$s.options item="o"}}
|
||||||
|
{{:assign var="l_opt" value=[]}}
|
||||||
|
{{#foreach from=$s.votes_simple item="v"}}
|
||||||
|
{{if $v.choix == $o.id}}{{:assign var="l_opt." value=1}}{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:assign var="n_opt" value=0}}
|
||||||
|
{{if $l_opt|count}}{{:assign var="n_opt" value=$l_opt|count}}{{/if}}
|
||||||
|
{{:assign var="tot_opt.%s"|args:$o.id value=$n_opt}}
|
||||||
|
{{if $n_opt > $max_opt}}{{:assign var="max_opt" value=$n_opt}}{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:assign var="nb_votants_simple" value=0}}
|
||||||
|
{{if $s.votes_simple|count}}{{:assign var="nb_votants_simple" value=$s.votes_simple|count}}{{/if}}
|
||||||
|
*}}
|
||||||
|
{{* ---------- Choix en cours de modification (sondage simple) ----------
|
||||||
|
{{:assign var="edit_nom_vs" value=$_POST.edit_nom_vs|strval}}
|
||||||
|
{{#foreach from=$s.votes_simple item="v"}}
|
||||||
|
{{if $v.nom == $edit_nom_vs}}
|
||||||
|
{{:assign var="edit_choix_vs" value=$v.choix}}
|
||||||
|
{{:assign var="edit_remarque_vs" value=$v.remarque}}
|
||||||
|
{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{#foreach from=$s.votes item="v"}}
|
||||||
|
{{:assign var="l_votants." value=1}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{if $l_votants|count}}{{:assign var="nb_votants" value=$l_votants|count}}{{/if}}
|
||||||
|
{{#foreach from=$s.creneaux item="c"}}
|
||||||
|
{{:assign var="l_oui" value=[]}}
|
||||||
|
{{:assign var="l_peut" value=[]}}
|
||||||
|
{{#foreach from=$s.votes item="v"}}
|
||||||
|
{{:assign var="val" from="v.choix.%s"|args:$c.id}}
|
||||||
|
{{if $val == 2}}{{:assign var="l_oui." value=1}}{{/if}}
|
||||||
|
{{if $val == 1}}{{:assign var="l_peut." value=1}}{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{:assign var="n_oui" value=0}}
|
||||||
|
{{:assign var="n_peut" value=0}}
|
||||||
|
{{if $l_oui|count}}{{:assign var="n_oui" value=$l_oui|count}}{{/if}}
|
||||||
|
{{if $l_peut|count}}{{:assign var="n_peut" value=$l_peut|count}}{{/if}}
|
||||||
|
{{:assign var="tot_oui.%s"|args:$c.id value=$n_oui}}
|
||||||
|
{{:assign var="tot_peut.%s"|args:$c.id value=$n_peut}}
|
||||||
|
{{if $n_oui > $max_oui}}{{:assign var="max_oui" value=$n_oui}}{{/if}}
|
||||||
|
|
||||||
|
{{/foreach}}
|
||||||
|
*}}
|
||||||
|
{{*
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="fr">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<title>{{$s.titre}} — {{$config.org_name}}</title>
|
||||||
|
<style>
|
||||||
|
:root { --terra: #8c3a1e; --orange: #d9720f; --vert: #4c7a2e; }
|
||||||
|
* { box-sizing: border-box; }
|
||||||
|
body { margin: 0; padding: 1.5rem 1rem 3rem; font-family: "Trebuchet MS", Helvetica, sans-serif; background: #f4f6f2; color: #222; }
|
||||||
|
.wrap { max-width: 78rem; margin: 0 auto; }
|
||||||
|
a.retour { color: var(--terra); text-decoration: none; font-size: .95rem; }
|
||||||
|
a.retour:hover { text-decoration: underline; }
|
||||||
|
p.fil { margin: 0 0 .2rem; }
|
||||||
|
p.fil span.sep { color: #c4bdb8; margin: 0 .45rem; }
|
||||||
|
h1 { margin: .4rem 0 1.2rem; font-size: 1.7rem; color: var(--terra); }
|
||||||
|
.badge-admin { display: inline-block; background: var(--vert); color: #fff; font-size: .75rem; padding: .15rem .5rem; border-radius: 1rem; margin-left: .5rem; vertical-align: middle; }
|
||||||
|
.card { background: #fff; border: 1px solid #e2ddd9; border-radius: .6rem; padding: 1rem 1.2rem 1.2rem; margin-bottom: 1.2rem; box-shadow: 0 1px 4px rgba(0,0,0,.10); }
|
||||||
|
.card h2 { margin: 0 0 .8rem; font-size: 1.05rem; color: var(--terra); text-transform: uppercase; letter-spacing: .04em; }
|
||||||
|
.scroll { overflow: auto; max-height: 70vh; }
|
||||||
|
table.grille { border-collapse: separate; border-spacing: 0; width: 100%; }
|
||||||
|
table.grille th, table.grille td { padding: .5rem .6rem; text-align: center; border-bottom: 1px solid #eceae8; }
|
||||||
|
table.grille th:first-child { width: 15rem; min-width: 15rem; position: sticky; left: 0; z-index: 2; }
|
||||||
|
table.grille thead th { background: var(--terra); color: #fff; font-size: .9rem; line-height: 1.25; vertical-align: middle; border-bottom: none; position: sticky; top: 0; z-index: 3; }
|
||||||
|
table.grille thead th:first-child { background: var(--terra); z-index: 4; }
|
||||||
|
table.grille thead th.creneau { min-width: 7.5rem; border-left: 1px solid rgba(255,255,255,.25); }
|
||||||
|
table.grille thead th.creneau b { display: block; font-size: .95rem; }
|
||||||
|
table.grille thead th.creneau small { display: block; font-weight: normal; opacity: .85; }
|
||||||
|
table.grille tbody th { text-align: right; font-weight: bold; background: #faf9f8; }
|
||||||
|
td.oui { background: #dbeec6; color: #33521a; font-weight: bold; }
|
||||||
|
td.peut { background: #fae4c6; color: #7a5310; font-weight: bold; }
|
||||||
|
td.non { background: #f7cec7; }
|
||||||
|
tr.somme th, tr.somme td { border-top: 2px solid var(--terra); border-bottom: none; padding-top: .7rem; font-weight: bold; background: #fff; }
|
||||||
|
tr.somme td span.best { color: var(--terra); }
|
||||||
|
tr.somme td small, tr.somme th small { display: block; font-weight: normal; color: #7a5310; }
|
||||||
|
tr.saisie th, tr.saisie td { background: #f1f5ec; border-top: 2px solid #cfd9c2; }
|
||||||
|
tr.saisie label { display: block; cursor: pointer; font-size: .8rem; line-height: 1.5; text-align: left; }
|
||||||
|
tr.saisie input[type=radio] { margin: 0 .3rem 0 0; vertical-align: middle; }
|
||||||
|
input[type=text] { font-size: 1rem; padding: .4rem .6rem; border: 1px solid #bbb; border-radius: .4rem; width: 100%; }
|
||||||
|
input[type=date], input[type=time] { font-family: inherit; font-size: 1rem; padding: .4rem .6rem; border: 1px solid #bbb; border-radius: .4rem; background: #fff; }
|
||||||
|
button { font-family: inherit; font-size: .95rem; padding: .45rem .9rem; border: none; border-radius: .4rem; background: var(--terra); color: #fff; cursor: pointer; }
|
||||||
|
button:hover { background: var(--orange); }
|
||||||
|
button.mini { background: none; color: #e6cfc6; padding: .1rem .25rem; font-size: .9rem; }
|
||||||
|
button.mini:hover { background: none; color: #fff; }
|
||||||
|
p.aide { color: #777; font-size: .9rem; margin: .6rem 0 0; }
|
||||||
|
.ajout { display: flex; gap: .6rem; align-items: center; flex-wrap: wrap; }
|
||||||
|
.ajout label { font-size: .9rem; color: #666; }
|
||||||
|
p.vide { color: #777; }
|
||||||
|
.ajout input[type=text] { width: auto; min-width: 13rem; }
|
||||||
|
table.grille thead th.creneau em.titre { display: block; font-style: normal; font-size: .78rem; text-transform: uppercase; letter-spacing: .04em; opacity: .8; margin-bottom: .15rem; }
|
||||||
|
.card.danger { border-color: #e6c9c2; }
|
||||||
|
.card.danger h2 { color: #a12a12; }
|
||||||
|
.card.danger label { font-size: .95rem; cursor: pointer; }
|
||||||
|
button.danger { background: #a12a12; }
|
||||||
|
button.danger:hover { background: #c9401f; }
|
||||||
|
|
||||||
|
@media (max-width: 600px) {
|
||||||
|
table.grille th:first-child { width: 6.5rem; min-width: 6.5rem; }
|
||||||
|
tr.saisie th input[type=text] { padding: .3rem .4rem; font-size: .85rem; }
|
||||||
|
tr.saisie label { font-size: .72rem; }
|
||||||
|
table.grille th, table.grille td { padding: .4rem .3rem; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="wrap">
|
||||||
|
<p class="fil"><a class="retour" href="/">← Retour au site</a><span class="sep">·</span><a class="retour" href="./{{if $est_admin}}?code={{$code_saisi}}{{/if}}">Tous les sondages</a>{{if $est_admin}}<span class="sep">·</span><a class="retour" href="./?code={{$code_saisi}}&mode=simple#form-nouveau">+ Nouveau sondage libre</a>{{/if}}</p>
|
||||||
|
<h1>{{$s.titre}}{{if $est_admin}}<span class="badge-admin">mode admin</span>{{/if}}</h1>
|
||||||
|
*}}
|
||||||
|
<div class="card">
|
||||||
|
<h2>Description</h2>
|
||||||
|
{{if $est_admin}}
|
||||||
|
{{:assign var="desc_len" value=$s.description|strval|strlen}}
|
||||||
|
{{:assign var="desc_rows" value=3}}
|
||||||
|
{{if $desc_len > 400}}
|
||||||
|
{{:assign var="desc_rows" value=16}}
|
||||||
|
{{elseif $desc_len > 250}}
|
||||||
|
{{:assign var="desc_rows" value=10}}
|
||||||
|
{{elseif $desc_len > 120}}
|
||||||
|
{{:assign var="desc_rows" value=6}}
|
||||||
|
{{elseif $desc_len > 40}}
|
||||||
|
{{:assign var="desc_rows" value=4}}
|
||||||
|
{{/if}}
|
||||||
|
<form method="post" action="sondage.html?id={{$s.id}}&code={{$code_saisi}}">
|
||||||
|
<input type="hidden" name="code" value="{{$code_saisi}}" />
|
||||||
|
<p><textarea class="description" name="description" rows="{{$desc_rows}}" placeholder="Ajoutez une description...">{{$s.description}}</textarea></p>
|
||||||
|
<p><button type="submit" name="maj_description" value="1">Enregistrer la description</button></p>
|
||||||
|
</form>
|
||||||
|
{{else}}
|
||||||
|
{{if $s.description|trim}}<p id="desc-texte" style="white-space:pre-wrap;">{{$s.description}}</p>{{else}}<p class="vide">Aucune description.</p>{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{if $s.mode == "simple"}}
|
||||||
|
{{:include file="_vote.html"}}
|
||||||
|
{{*
|
||||||
|
<div class="card">
|
||||||
|
<h2>Voter</h2>
|
||||||
|
{{if $s.options|count}}
|
||||||
|
<form method="post" action="sondage.html?id={{$s.id}}&code={{$code_saisi}}">
|
||||||
|
<input type="hidden" name="code" value="{{$code_saisi}}" />
|
||||||
|
<p class="champ"><label style="display:block; font-size:.9rem; color:#666; margin-bottom:.3rem;">Votre nom</label><input type="text" name="nom_vote" value="{{$edit_nom_vs}}" placeholder="Votre nom" required="required" /></p>
|
||||||
|
<div style="margin:.8rem 0;">
|
||||||
|
{{#foreach from=$s.options item="o"}}
|
||||||
|
<label style="display:block; padding:.4rem 0; cursor:pointer;">
|
||||||
|
<input type="radio" name="choix_option" value="{{$o.id}}" {{if $edit_choix_vs == $o.id}}checked="checked"{{/if}} required="required" /> {{$o.texte}}
|
||||||
|
</label>
|
||||||
|
{{/foreach}}
|
||||||
|
</div>
|
||||||
|
<p class="champ"><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_vs}}</textarea></p>
|
||||||
|
<button type="submit" name="voter_simple" value="1">Voter</button>
|
||||||
|
<p class="aide">Pour corriger votre vote, retapez le même nom et choisissez une autre option.</p>
|
||||||
|
</form>
|
||||||
|
{{else}}
|
||||||
|
<p class="vide">Aucune option pour l'instant.{{if $est_admin}} Ajoutez-en ci-dessous.{{/if}}</p>
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card">
|
||||||
|
<h2>Résultats</h2>
|
||||||
|
{{if $s.options|count}}
|
||||||
|
<table style="width:100%; border-collapse:collapse;">
|
||||||
|
{{#foreach from=$s.options item="o"}}
|
||||||
|
{{:assign var="n_o" from="tot_opt.%s"|args:$o.id}}
|
||||||
|
<tr>
|
||||||
|
<th style="text-align:left; padding:.4rem .3rem; border-bottom:1px solid #eceae8; font-weight:normal;">{{$o.texte}}</th>
|
||||||
|
<td style="padding:.4rem .3rem; border-bottom:1px solid #eceae8; text-align:right; white-space:nowrap;">
|
||||||
|
{{if $n_o > 0 && $n_o == $max_opt}}<span class="best">★ {{$n_o}} voix</span>{{else}}{{$n_o}} voix{{/if}}
|
||||||
|
</td>
|
||||||
|
{{if $est_admin}}
|
||||||
|
<td style="padding:.4rem .3rem; border-bottom:1px solid #eceae8; text-align:right;">
|
||||||
|
<form method="post" action="sondage.html?id={{$s.id}}&code={{$code_saisi}}" style="display:inline">
|
||||||
|
<input type="hidden" name="code" value="{{$code_saisi}}" />
|
||||||
|
<button type="submit" name="suppr_option" value="{{$o.id}}" class="mini" title="Supprimer cette option">✕</button>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
{{/if}}
|
||||||
|
</tr>
|
||||||
|
{{/foreach}}
|
||||||
|
</table>
|
||||||
|
<p class="aide">{{$nb_votants_simple}} votant(s) au total.</p>
|
||||||
|
{{else}}
|
||||||
|
<p class="vide">Rien à afficher pour l'instant.</p>
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{:assign var="remarque_trouvee_vs" value=false}}
|
||||||
|
<div class="card">
|
||||||
|
<h2>Remarques</h2>
|
||||||
|
<ul style="list-style:none; margin:0; padding:0;">
|
||||||
|
{{#foreach from=$s.votes_simple item="v"}}
|
||||||
|
{{if $v.remarque|trim}}
|
||||||
|
{{:assign var="remarque_trouvee_vs" 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_vs}}<p class="vide">Aucune remarque pour l'instant.</p>{{/if}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{if $est_admin}}
|
||||||
|
<div class="card">
|
||||||
|
<h2>Qui a voté quoi</h2>
|
||||||
|
{{if $s.votes_simple|count}}
|
||||||
|
<ul style="list-style:none; margin:0; padding:0;">
|
||||||
|
{{#foreach from=$s.votes_simple item="v"}}
|
||||||
|
{{:assign var="txt_choix" value=""}}
|
||||||
|
{{#foreach from=$s.options item="o"}}
|
||||||
|
{{if $o.id == $v.choix}}{{:assign var="txt_choix" value=$o.texte}}{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
<li style="padding:.4rem 0; border-bottom:1px solid #eceae8;">{{$v.nom}} — {{$txt_choix}}</li>
|
||||||
|
{{/foreach}}
|
||||||
|
</ul>
|
||||||
|
{{else}}
|
||||||
|
<p class="vide">Personne n'a encore voté.</p>
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card">
|
||||||
|
<h2>Ajouter une option</h2>
|
||||||
|
<form method="post" action="sondage.html?id={{$s.id}}&code={{$code_saisi}}" class="ajout">
|
||||||
|
<input type="hidden" name="code" value="{{$code_saisi}}" />
|
||||||
|
<label style="flex:2; min-width:14rem;">Texte de l'option <input type="text" name="texte" placeholder="ex. Samedi matin" required="required" /></label>
|
||||||
|
<button type="submit" name="add_option" value="1">Ajouter</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
*}}
|
||||||
|
{{else}}
|
||||||
|
{{:include file="_vote_date.html"}}
|
||||||
|
{{*
|
||||||
|
<div class="card">
|
||||||
|
{{if $creneaux|count}}
|
||||||
|
<form method="post" action="sondage.html?id={{$s.id}}&code={{$code_saisi}}">
|
||||||
|
<input type="hidden" name="code" value="{{$code_saisi}}" />
|
||||||
|
<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>{{/if}} <button type="submit" name="suppr_creneau" value="{{$c.id}}" class="mini" formnovalidate="formnovalidate" title="Supprimer ce créneau">✕</button>
|
||||||
|
{{/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> {{if $est_admin}}<button type="submit" name="suppr_nom" value="{{$v.nom}}" class="mini" formnovalidate="formnovalidate" title="Supprimer cette ligne">✕</button>{{/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><input type="text" name="nom" placeholder="Votre nom" value="{{$edit_nom}}" required="required" /></th>
|
||||||
|
{{#foreach from=$creneaux item="c"}}
|
||||||
|
{{:assign var="pre" from="edit_choix.%s"|args:$c.id}}
|
||||||
|
<td>
|
||||||
|
<label><input type="radio" name="dispo[{{$c.id}}]" value="2" {{if $pre == 2}}checked="checked"{{/if}} /> oui</label>
|
||||||
|
<label><input type="radio" name="dispo[{{$c.id}}]" value="1" {{if $pre == 1}}checked="checked"{{/if}} /> si besoin</label>
|
||||||
|
<label><input type="radio" 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;"><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></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="sondage.html?id={{$s.id}}&code={{$code_saisi}}" class="ajout">
|
||||||
|
<input type="hidden" name="code" value="{{$code_saisi}}" />
|
||||||
|
<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="sondage.html?id={{$s.id}}&code={{$code_saisi}}">Annuler</a>
|
||||||
|
</form>
|
||||||
|
{{else}}
|
||||||
|
<h2>Ajouter un créneau</h2>
|
||||||
|
<form method="post" action="sondage.html?id={{$s.id}}&code={{$code_saisi}}" class="ajout">
|
||||||
|
<input type="hidden" name="code" value="{{$code_saisi}}" />
|
||||||
|
<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="sondage.html?id={{$s.id}}&code={{$code_saisi}}">
|
||||||
|
<input type="hidden" name="code" value="{{$code_saisi}}" />
|
||||||
|
<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="sondage.html?id={{$s.id}}&code={{$code_saisi}}" class="ajout">
|
||||||
|
<input type="hidden" name="code" value="{{$code_saisi}}" />
|
||||||
|
<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}}
|
||||||
|
*}}
|
||||||
|
{{if $est_admin}}
|
||||||
|
<div class="card danger">
|
||||||
|
<h2>Supprimer ce sondage</h2>
|
||||||
|
<form method="post" action="sondage.html?id={{$s.id}}&code={{$code_saisi}}">
|
||||||
|
<input type="hidden" name="code" value="{{$code_saisi}}" />
|
||||||
|
<p><label><input type="checkbox" name="confirmer" value="1" /> Je confirme vouloir supprimer définitivement ce sondage et toutes les réponses.</label></p>
|
||||||
|
<p><button type="submit" name="suppr_sondage" value="1" class="danger">Supprimer le sondage</button></p>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
var descEl = document.getElementById('desc-texte');
|
||||||
|
if (descEl) {
|
||||||
|
descEl.innerHTML = descEl.innerHTML.replace(/(https?:\/\/[^\s<]+)/g, '<a href="$1" target="_blank" rel="noopener">$1</a>');
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{{*/html>*}}
|
||||||
|
|
||||||
|
<!-- v3 -->
|
||||||
Reference in new issue
Block a user