Faire des qcm simplement - retour accueil
git clone git://bebou.netlib.re/qcm
Log | Files | Refs | README |
commit c552dbb228cab63fe5166d5d4a2709c2739a3b20 parent dc39bd28d7522eed5062c5178afe0782e2709147 Auteurice: Arthur Pons <arthur.pons@unistra.fr> Date: Thu, 7 Nov 2024 19:04:40 +0100 Gestion de l'unicité des réponses ou pas On peut donc maintenant répondre plusieurs fois aux questions si elles sont marquées avec `unique: non`. Meilleure documentation, meilleur exemple dans le fichier questions. Diffstat:
M | README | | | 65 | ++++++++++++++++++++++++++++++++++++++++++++++++++++------------- |
M | qcm.sh | | | 16 | +++++++++++----- |
M | questions | | | 24 | +++++++++++++++--------- |
3 files changed, 78 insertions(+), 27 deletions(-)
diff --git a/README b/README @@ -84,35 +84,70 @@ Lancer un questionnaire en local sur un serveur équipé de `qcm` : Le fichier de questionnaire est un fichier texte. Chaque question contient des champs pour renseigner ses attributs et *doit* terminer par l'instruction `demander`. Les attributs *doivent* être sous la forme `nom:` sans espace entre -le `:` et `nom` mais avec un espace après le `:`. La liste des attributs +le `:` et `nom` mais avec un espace après le `:`. + +La liste des attributs : * `question` : L'intitulé de la question. Optionnel, s'il n'existe pas rien ne sera affiché - * `type` : le type de question. Optionnel, ne fait rien pour le moment. + * `type` : le type de question. Optionnel, `qcm`, type par défaut, proposera + un choix multiple (A, B, C...), uniquement ces réponses seront valides. Si + `options` existe il fera correspondre les options aux différentes lettres. + En l'absence d'`options` `qcm` proposera 4 choix par défaut (A, B, C et D). + `ouverte` permettra n'importe quelle réponse et ignore `options`. * `options` : la liste des réponses possibles séparées par des `~`. Il ne doit pas y avoir de `~` à la fin. Optionnel, s'il n'existe pas c'est `-n` qui décidera du nombre de réponses possibles qui sera le même pour toutes les questions. - * `demander` : "enregistre" la question + * `unique` : si une seule réponse par IP est autorisée ou pas. Optionnel, "non" + enregistera toutes les réponses, n'importe quoi d'autre (`oui` par exemple) + filtrera sur les IP pour ne laisser que la première réponse passer. Par défaut + `unique` est à oui. + * `demander` : n'est pas un attribut mais "enregistre" la question et la lance + +**Attention** : Tout attribut renseigné pour la N^ième question conservera sa +valeur pour les questions suivantes s'il n'est pas répété. Si la question ou +les réponses contiennent des caractères spéciaux `;/)'` etc il vaut mieux tout +"quoter" avec des ". Pour ajouter un `"` vous pouvez l'échapper avec un `\`. Ainsi le fichier - question: blabla ? - type: qcm - options: oui~non~haha~coucou demander - question: deuxième question + question: om, psg ou les verts + options: om~psg~les verts + demander + + question: "Quels sentiments vous évoquent l'anarchie ?" + type: ouverte + unique: non + demander + + question: "Sachant que : + x=3 + y=7 + + Combien font \"x+y\" ?" type: qcm - options: coucou~mac hin~bidule + options: 6~11~10~autre + unique: oui demander - question: troisième :\) - options: oui~non + question: Et x-y ? demander -Posera trois questions `blabla ?`, `deuxième question` et `troisième :)` avec -les options respectives `oui, non, haha, coucou`, `coucou, mac hin, bidule` et -`oui, non`. +Posera cinq questions en tout. La première, celle par défaut, un qcm avec +quatre choix, aucun intitulé, aucune réponse possible d'affichée (juste les +lettres). Utile si les questions et les réponses sont gérées par ailleurs. +La seconde un qcm offrant le choix entre les trois équipes de foot. Sera +par défaut à choix unique et un qcm. La troisième une question ouverte à +laquelle on peut répondre plusieurs fois. Notez les `"` pour gérer l'apostrophe +dans `l'anarchie`. La quatrième une question à choix multiples de math avec +une réponse unique. Il faut ici rappeler que c'est une qcm et que l'on ne peut +réponse qu'une seule fois puisque par défaut on hérite des attributs de la +question précédente, ouverte et à laquelle on pouvait répondre plusieurs fois. +On notera également que si l'on englobe tout dans des double-quotes on peut +sauter des lignes et que l'on peut échaper des double-quotes. La dernière est +identique à la quatrième mais l'intitulé change. Etant donné que tous les attributs sont optionnels le fichier suivant : @@ -126,6 +161,10 @@ il posera trois questions sans intutilé avec trois options de réponses chacune Si l'on veut créer un questionnaire à la volée et que l'on connaît bien la syntaxe ci-dessus on peut simplement lancer `qcm -f -` et écrire les questions. +Pour l'instant toutes les questions de type `qcm` ne peuvent être à choix +multiple (ce qui est un comble). C'est soit `A` soit `B` etc mais pas plusieurs +à la fois. + ## Sécurité **Attention !** diff --git a/qcm.sh b/qcm.sh @@ -29,7 +29,11 @@ playout() { $([ -n "$question" ] && printf "%s" "$question") - $([ -n "$options" ] && printf "%s" "$opts" || printf "options : %s" "$opts" | tr -d '\n ') + $(if [ "$type" != "ouverte" ];then + [ -n "$options" ] \ + && printf "%s" "$opts" \ + || printf "options : %s" "$opts" | tr -d '\n ' + fi) $dat @@ -49,7 +53,7 @@ demander() { tailpid=$! while :;do - dat=$(< $tmpd/in sort -u -k1,1 | cut -d ' ' -f7 | cut -d'/' -f3 | sort | uniq -c | sort -rn) + dat=$(< $tmpd/in sort $uopt | cut -d ' ' -f7 | cut -d'/' -f3 | sort | uniq -c | sort -rn) [ -n "$dat" ] && tot=$(( $(echo "$dat" | awk '{print $1}' | paste -s -d+ -) )) opts=$(echo "$options" | tr '~' '\n' | paste $tmpd/o -) clear @@ -74,13 +78,15 @@ nbq="${n:-4}" refresh="${r:-1}" logs="${l:-/var/log/nginx/access.log}" file="$f" +uopt="-u -k1,1" tmpd=$(mktemp -d XXX) id=$(basename "$tmpd") -alias question:=question; question() question="$*" -alias type:=type; type() type="$*" -alias options:=options; options() options="$*" +alias question:=question; question() question="$*" +alias type:=type; type() type="$*" +alias options:=options; options() options="$*" +alias unique:=unique; unique() { [ "$*" = "non" ] && uopt= || uopt="-u -k1,1"; } trap "rm -rf $tmpd;exit" INT TERM trap "kill 0" EXIT diff --git a/questions b/questions @@ -1,17 +1,23 @@ -question: "azdazdazd -zdazdazda -adzazdazd" -type: qcm -options: oui~non~haha~coucou demander -question: deuxième question +question: om, psg ou les verts +options: om~psg~les verts +demander + +question: "Quels sentiments vous évoquent l'anarchie ?" type: ouverte -options: +unique: non demander -question: troisième :\) +question: "Sachant que : +x=3 +y=7 + +Combien font \"x+y\" ?" type: qcm -options: oui~non +options: 6~11~10~autre +unique: oui demander +question: Et x-y ? +demander