diff --git a/_config.html b/_config.html new file mode 100644 index 0000000..f64d03c --- /dev/null +++ b/_config.html @@ -0,0 +1,130 @@ +{{* Modifier sondage *}} +{{if $subconf == "edit_son"}} +
+ {{#load assign="s" id=$_GET.id|intval}} + {{if !$s.id}} + {{:error message="Ce sondage n'existe pas (ou plus)."}} + {{/if}} + +
+
+ Modifier Sondage ({{$s.mode}}) +
+ {{: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}} +
+
+ +
+

Résultats

+ {{if $s.options|count}} + + {{#foreach from=$s.options item="o"}} + {{:assign var="n_o" from="tot_opt.%s"|args:$o.id}} + + + + + + {{/foreach}} +
{{$o.texte}} + {{if $n_o > 0 && $n_o == $max_opt}}★ {{$n_o}} voix{{else}}{{$n_o}} voix{{/if}} + + {{:button type="submit" name="del_opt_son" label="Supprimer cette option" class="mini" shape="minus" value="%d"|args:$s.id}} +
+

{{$nb_votants_simple}} votant(s) au total.

+ {{else}} +

Rien à afficher pour l'instant.

+ {{/if}} +
+ + {{if $s.mode == "simple"}} +
+ Ajouter une option. +
+ {{: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}} +
+
+ {{else}} + {{:include file="_crenaux.html"}} + {{/if}} + +
+ Je confirme vouloir supprimer définitivement ce sondage et toutes les réponses. +
+ {{:button type="submit" name="del_son" label="Supprimer le sondage" class="danger" value="%d"|args:$s.id}} +
+
+
+ + {{else}} + {{* Liste des sondages *}} +
+

Sondages en cours et archivés

+ +
+ {{/load}} +
+ +{{* Nouveau sondage *}} +{{elseif !$subconf || $subconf == "new_son"}} +
+

Nouveau sondage

+
+
+ Type de sondage +
+ {{: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"}} +
+
+
+
+ +{{* Paramètres globaux *}} +{{elseif !$subconf || $subconf == "edit_con"}} + {{if $est_admin}} + {{:include file="manage/_config.html"}} + {{else}} +

Ces paramètres sont réservés à l'administrateur.

+ {{/if}} +{{/if}} \ No newline at end of file diff --git a/_crenaux.html b/_crenaux.html new file mode 100644 index 0000000..ac372ba --- /dev/null +++ b/_crenaux.html @@ -0,0 +1,77 @@ +
+

Créneaux

+ TODO + {{#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}} + {{if $c.titre|trim}}{{$c.titre}}{{/if}}{{if $c.date}}{{$c.date|date_long}}{{$c.debut}} → {{$c.fin}}{{else}}{{$c.label}}{{/if}} + {{if $est_admin}} + {{if $th_oui < 1 && $th_peut < 1}} + + {{/if}} + + {{/if}} + + {{/foreach}} +
+
+ {{if $edit_c_ok}} +

Modifier ce créneau

+
+ + + + + + Annuler +
+ {{else}} +

Ajouter un créneau

+
+ + + + + +
+ {{/if}} +
+ +
+

Ajouter plusieurs créneaux (saisie libre)

+
+ + + + + + + + + +
TitreDateDeÀ
+

Laissez la date vide pour ignorer une ligne. Seules les lignes avec une date seront ajoutées.

+

+
+
+ +
+

Générer des créneaux automatiquement

+
+ + + + + + +
+ + + + + + + +
+
+

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.

+
\ No newline at end of file diff --git a/_nav.html b/_nav.html new file mode 100644 index 0000000..e68f212 --- /dev/null +++ b/_nav.html @@ -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}} +*}} + + + +{{* Messages *}} +{{if $_GET.msg == "ajout" }} +

Ajout effectué

+{{elseif $_GET.msg == "vote" }} +

Merci de votre participation !

+{{elseif $_GET.msg == "modification" }} +

Modification effectuée

+{{elseif $_GET.msg == "suppression" }} +

Suppression effectuée

+{{/if}} \ No newline at end of file diff --git a/_sondage.html b/_sondage.html new file mode 100644 index 0000000..06c0d0b --- /dev/null +++ b/_sondage.html @@ -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}} +
+ {{* Vue des sondages en cours *}} + {{if !$vue || $vue=="encours"}} +
+

Sondages en cours

+ +
+ {{* Vue des sondages archivés *}} + {{elseif $vue=="archive"}} +
+

Sondages archivés (fermés)

+ {{if $au_moins_un_ferme}} + + {{else}} +

Aucun sondage archivé.

+ {{/if}} +
+ {{* 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}} +
\ No newline at end of file diff --git a/_vote.html b/_vote.html new file mode 100644 index 0000000..5bbee74 --- /dev/null +++ b/_vote.html @@ -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}} + +
+

Sondage

+

{{$s.description}}

+ {{if $s.options|count}} + {{* Ne pas laisser l'admin voter *}} + {{if !$est_admin}} +
+
+ Voter +
+ {{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"}} + {{* {{$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}} +
+
+
+ {{/if}} + {{else}} +

Aucune option pour l'instant.{{if $est_admin}} Ajoutez-en ci-dessous.{{/if}}

+ {{/if}} + +
+

Résultats

+ {{if $s.options|count}} + + {{#foreach from=$s.options item="o"}} + {{:assign var="n_o" from="tot_opt.%s"|args:$o.id}} + + + + {{if $est_admin}} + + {{/if}} + + {{/foreach}} +
{{$o.texte}} + {{if $n_o > 0 && $n_o == $max_opt}}★ {{$n_o}} voix{{else}}{{$n_o}} voix{{/if}} + +
+ {{: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"}} +
+
+

{{$nb_votants_simple}} votant(s) au total.

+ {{else}} +

Rien à afficher pour l'instant.

+ {{/if}} +
+ + {{:assign var="remarque_trouvee_vs" value=false}} +
+

Remarques

+ + {{if !$remarque_trouvee_vs}}

Aucune remarque pour l'instant.

{{/if}} +
+ + {{if $est_admin}} +
+

Qui a voté quoi

+ {{if $s.votes_simple|count}} + + {{else}} +

Personne n'a encore voté.

+ {{/if}} +
+ +
+

Ajouter une option

+
+ + {{:button type="submit" name="add_opt_son" value=$s.id class="mini" label="Ajouter"}} +
+
+ {{/if}} + +
+{{:debug sondage=$s}} \ No newline at end of file diff --git a/_vote_date.html b/_vote_date.html new file mode 100644 index 0000000..4929565 --- /dev/null +++ b/_vote_date.html @@ -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}} + +
+

Créneaux

+ {{if $creneaux|count}} +
+
+ + + + + {{#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}} + + {{/foreach}} + + + + {{#foreach from=$s.votes item="v"}} + + + {{#foreach from=$creneaux item="c"}} + {{:assign var="val" from="v.choix.%s"|args:$c.id}} + {{if $val == 2}}{{elseif $val == 1}}{{else}}{{/if}} + {{/foreach}} + + {{/foreach}} + + + {{#foreach from=$creneaux item="c"}} + {{:assign var="pre" from="edit_choix.%s"|args:$c.id}} + + {{/foreach}} + + + + {{#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}} + + {{/foreach}} + + +
{{if $c.titre|trim}}{{$c.titre}}{{/if}}{{if $c.date}}{{$c.date|date_long}}{{$c.debut}} → {{$c.fin}}{{else}}{{$c.label}}{{/if}} + {{if $est_admin}} + {{if $th_oui < 1 && $th_peut < 1}} + {{**}} + {{:button type="submit" class="mini" name="edit_creneau" label="Modifier ce créneau" default=$c.id}} + {{/if}} + {{**}} + {{:button type="submit" class="mini" name="suppr_creneau" label="Supprimer ce créneau" default=$c.id}} + {{/if}} +
{{$v.nom}} + {{**}} + {{:button type="submit" class="mini" name="edit_nom" label="Modifier cette ligne" default=$v.nom}} + {{if $est_admin}} + {{**}} + {{:button type="submit" class="mini" name="suppr_nom" label="Supprimer cette ligne" default=$v.nom}} + {{/if}} + ✔(✔)
+ {{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}} + + {{*: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"}} + {{* + + + + *}} +
Somme{{$nb_votants}} votant(s){{if $n_oui > 0 && $n_oui == $max_oui}}★ {{$n_oui}}{{elseif $n_oui > 0}}{{$n_oui}}{{else}}0{{/if}}{{if $n_peut > 0}}(+{{$n_peut}}){{/if}}
+
+

+ {{:input type="textarea" cols=40 rows=2 name="remarque" label="Une précision à ajouter ?" default=$edit_remarque required=false}} + {{* + + + *}} +

+

+ {{* *}} + {{: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}} +

+

Tapez votre nom, cochez vos disponibilités puis enregistrez. Pour corriger une ligne existante, cliquez sur le crayon à côté du nom.

+
+ {{else}} +

Aucun créneau pour l'instant.{{if $est_admin}} Ajoutez-en un ci-dessous pour commencer.{{/if}}

+ {{/if}} +
+ + {{:assign var="remarque_trouvee" value=false}} +
+

Remarques

+ + {{if !$remarque_trouvee}}

Aucune remarque pour l'instant.

{{/if}} +
+ + {{*if $est_admin}} +
+ {{if $edit_c_ok}} +

Modifier ce créneau

+
+ + + + + + Annuler +
+ {{else}} +

Ajouter un créneau

+
+ + + + + +
+ {{/if}} +
+ +
+

Ajouter plusieurs créneaux (saisie libre)

+
+ + + + + + + + + +
TitreDateDeÀ
+

Laissez la date vide pour ignorer une ligne. Seules les lignes avec une date seront ajoutées.

+

+
+
+ +
+

Générer des créneaux automatiquement

+
+ + + + + + +
+ + + + + + + +
+
+

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.

+
+ {{/if*}} +{{:debug sondage=$s}} \ No newline at end of file diff --git a/icon.svg b/icon.svg new file mode 100644 index 0000000..f241efc --- /dev/null +++ b/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..0d49bff --- /dev/null +++ b/index.html @@ -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}}mode admin{{/if}} +{{* TODO membre logué + *}} +{{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}} \ No newline at end of file diff --git a/manage/_config.html b/manage/_config.html new file mode 100644 index 0000000..593439f --- /dev/null +++ b/manage/_config.html @@ -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}} + +
+
+ Paramètres +
+ {{:input type="checkbox" name="purge" label="Purge les créneaux passés" checked=$module.config.purge value=true}} +
+
+
+ Ajouter un type de sondage +
+ + + + + + + + {{if $module.config.sondage_styles}} + {{#foreach from=$module.config.sondage_styles key="key" }} + + + + {{if $mcat|intval > 0 }} + {{:assign var="mcat_label" from="member_cat.%s.label"|args:$mcat}} + + {{else}} + + {{/if}} + + {{/foreach}} + {{/if}} +
NomLabelCatégorie de membres
{{:input type="text" help="Un seul mot en minuscules" placeholder="Ex. actifs" name="name"}}{{:input type="text" placeholder="Ex. Sondage privé (Conseil Collégial/CA)" name="label"}}{{:input type="select" name="cat" options=$member_cat}}
{{$key}}{{$label}}{{$mcat_label}}{{$mcat}}
+
+
+

+ {{:button type="submit" name="save_param" label="Enregistrer" shape="right" class="main"}} +

+
\ No newline at end of file diff --git a/manage/_sondage.html b/manage/_sondage.html new file mode 100644 index 0000000..3a644c2 --- /dev/null +++ b/manage/_sondage.html @@ -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}} \ No newline at end of file diff --git a/manage/_sondage_creneaux.html b/manage/_sondage_creneaux.html new file mode 100644 index 0000000..b99c281 --- /dev/null +++ b/manage/_sondage_creneaux.html @@ -0,0 +1,177 @@ +{{* ---------- 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}} + {{: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}} \ No newline at end of file diff --git a/manage/_sondage_simple.html b/manage/_sondage_simple.html new file mode 100644 index 0000000..6041846 --- /dev/null +++ b/manage/_sondage_simple.html @@ -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}} \ No newline at end of file diff --git a/manage/_vote.html b/manage/_vote.html new file mode 100644 index 0000000..53874fe --- /dev/null +++ b/manage/_vote.html @@ -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}} \ No newline at end of file diff --git a/module.ini b/module.ini new file mode 100644 index 0000000..e6ac038 --- /dev/null +++ b/module.ini @@ -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 \ No newline at end of file diff --git a/sondage.css b/sondage.css new file mode 100644 index 0000000..1472aa0 --- /dev/null +++ b/sondage.css @@ -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; } +} \ No newline at end of file diff --git a/sondage.html b/sondage.html new file mode 100644 index 0000000..188e2b0 --- /dev/null +++ b/sondage.html @@ -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é + *}} +{{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}} +*}} +{{* + + + + + +{{$s.titre}} — {{$config.org_name}} + + + + +
+

← Retour au site·Tous les sondages{{if $est_admin}}·+ Nouveau sondage libre{{/if}}

+

{{$s.titre}}{{if $est_admin}}mode admin{{/if}}

+*}} +
+

Description

+{{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}} +
+ +

+

+
+{{else}} + {{if $s.description|trim}}

{{$s.description}}

{{else}}

Aucune description.

{{/if}} +{{/if}} +
+ +{{if $s.mode == "simple"}} + {{:include file="_vote.html"}} +{{* +
+

Voter

+{{if $s.options|count}} +
+ +

+
+ {{#foreach from=$s.options item="o"}} + + {{/foreach}} +
+

+ +

Pour corriger votre vote, retapez le même nom et choisissez une autre option.

+
+{{else}} +

Aucune option pour l'instant.{{if $est_admin}} Ajoutez-en ci-dessous.{{/if}}

+{{/if}} +
+ +
+

Résultats

+{{if $s.options|count}} + +{{#foreach from=$s.options item="o"}} + {{:assign var="n_o" from="tot_opt.%s"|args:$o.id}} + + + + {{if $est_admin}} + + {{/if}} + +{{/foreach}} +
{{$o.texte}} + {{if $n_o > 0 && $n_o == $max_opt}}★ {{$n_o}} voix{{else}}{{$n_o}} voix{{/if}} + +
+ + +
+
+

{{$nb_votants_simple}} votant(s) au total.

+{{else}} +

Rien à afficher pour l'instant.

+{{/if}} +
+ +{{:assign var="remarque_trouvee_vs" value=false}} +
+

Remarques

+ +{{if !$remarque_trouvee_vs}}

Aucune remarque pour l'instant.

{{/if}} +
+ +{{if $est_admin}} +
+

Qui a voté quoi

+{{if $s.votes_simple|count}} + +{{else}} +

Personne n'a encore voté.

+{{/if}} +
+ +
+

Ajouter une option

+
+ + + +
+
+{{/if}} +*}} +{{else}} + {{:include file="_vote_date.html"}} + {{* +
+{{if $creneaux|count}} +
+ +
+ + + + + {{#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}} + + {{/foreach}} + + + +{{#foreach from=$s.votes item="v"}} + + + {{#foreach from=$creneaux item="c"}} + {{:assign var="val" from="v.choix.%s"|args:$c.id}} + {{if $val == 2}}{{elseif $val == 1}}{{else}}{{/if}} + {{/foreach}} + +{{/foreach}} + + + {{#foreach from=$creneaux item="c"}} + {{:assign var="pre" from="edit_choix.%s"|args:$c.id}} + + {{/foreach}} + + + + {{#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}} + + {{/foreach}} + + +
{{if $c.titre|trim}}{{$c.titre}}{{/if}}{{if $c.date}}{{$c.date|date_long}}{{$c.debut}} → {{$c.fin}}{{else}}{{$c.label}}{{/if}} + {{if $est_admin}} + {{if $th_oui < 1 && $th_peut < 1}}{{/if}} + {{/if}} +
{{$v.nom}} {{if $est_admin}}{{/if}}✔(✔)
+ + + +
Somme{{$nb_votants}} votant(s){{if $n_oui > 0 && $n_oui == $max_oui}}★ {{$n_oui}}{{elseif $n_oui > 0}}{{$n_oui}}{{else}}0{{/if}}{{if $n_peut > 0}}(+{{$n_peut}}){{/if}}
+
+

+

+

Tapez votre nom, cochez vos disponibilités puis enregistrez. Pour corriger une ligne existante, cliquez sur le crayon à côté du nom.

+
+{{else}} +

Aucun créneau pour l'instant.{{if $est_admin}} Ajoutez-en un ci-dessous pour commencer.{{/if}}

+{{/if}} +
+ +{{:assign var="remarque_trouvee" value=false}} +
+

Remarques

+ +{{if !$remarque_trouvee}}

Aucune remarque pour l'instant.

{{/if}} +
+ +{{if $est_admin}} +
+{{if $edit_c_ok}} +

Modifier ce créneau

+
+ + + + + + + Annuler +
+{{else}} +

Ajouter un créneau

+
+ + + + + + +
+{{/if}} +
+ +
+

Ajouter plusieurs créneaux (saisie libre)

+
+ + + + + + + + + + +
TitreDateDeÀ
+

Laissez la date vide pour ignorer une ligne. Seules les lignes avec une date seront ajoutées.

+

+
+
+ +
+

Générer des créneaux automatiquement

+
+ + + + + + + +
+ + + + + + + +
+
+

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.

+
+ +{{/if}} +*}} +{{if $est_admin}} +
+

Supprimer ce sondage

+
+ +

+

+
+
+{{/if}} + +{{/if}} + +
+ + + +{{*/html>*}} + + \ No newline at end of file