qcm

Faire des qcm simplement - retour accueil

git clone git://bebou.netlib.re/qcm
Log | Files | Refs | README |

commit dc8f213007f9f20ac5f3e17a2f10788e16e7265e
parent 4cf04b2e8b16c9b2d343621f0b4bfc1422bb2fad
Auteurice: Arthur Pons <arthur.pons@unistra.fr>
Date:   Mon, 16 Dec 2024 19:11:53 +0100

Ajout d'une vue web des résultats

Avec -d on peut dire où créer une vue web des résultats
On accède à ce résultat en accédant à la racine de l'id du questionnaire
Evidemment ça se met pas à jour automatiquement, faut F5

Diffstat:
MREADME | 22++++++++++++++++++++++
Mqcm.sh | 22+++++++++++++++-------
2 files changed, 37 insertions(+), 7 deletions(-)

diff --git a/README b/README @@ -76,6 +76,12 @@ garanti de se lancer, il peut exister un questionnaire avec le même identifiant $ qcm -i fraise +Choisir le dossier dans lequel le fichier HTML affichant les réponses sera créé. +Par défaut un fichier `index.html` sera créé dans un dossier `id`. Il faudra faire +F5 pour actualiser les résultats : + + $ qcm -d /var/www/monsite + Lire un questionnaire déjà fait depuis stdin et afficher les résultats avec gnuplot : @@ -150,6 +156,22 @@ est également possible d'utiliser un programme comme `curl` ou `wget`. Puisque les pages qui correspondent n'existent pas une erreur 404 sera renvoyée. Pas d'inquiétude, la réponse a tout de même bien été prise en compte. +### Consulter les réponses aux questionnaire + +Si l'on est pas la personne créatrice du questionnaire et que l'on souhaite +consulter les réponses soit même on peut y accéder via l'URL configurée pour, +normalement affichée à l'écran de la personne créatrice. Si cette URL est +`monsite.fr` et le questionnaire a pour identifiant `aze` alors dans le +fonctionnement par défaut de `qcm` les résultats seront à +`http://monsite.fr/aze/index.html`. + +Il est possible d'y accéder via un navigateur et de rafraichir les résultats +périodiquement ou, de manière plus automatisé : + + watch -t curl -s http://monsite.fr/aze/ | sed '1d;$d' + +Le `sed` permet de supprimer les balises `<pre>` et `</pre>`. + ## Le format du fichier de questionnaire Le fichier de questionnaire est un fichier texte. Chaque question contient des diff --git a/qcm.sh b/qcm.sh @@ -4,10 +4,11 @@ usage() { <<-. cat Faire des sondages simples en parsant les logs d'un serveur web - Usage : qcm [-h] [-e] [-u url] [-l logs] [-g] [-i identifiant] + Usage : qcm [-h] [-e] [-u url] [-l logs] [-g] [-i identifiant] [-d dossier] url par défaut : http://bebou.netlib.re (modifiable dans le code) log par défaut : /var/log/nginx/access.log (modifiable dans le code) + dossier avec html des rés : /var/www/bebou.netlib.re (modifiable dans le code) nombre d'options par défaut : 4 (ABCD) identifiant par défaut : match la regex [a-zA-Z0-9]{3} @@ -18,6 +19,7 @@ usage() { qcm -l /var/log/httpd/logs # changer le chemin du log parcouru qcm -e # masquer les réponses quand elles arrivent, mode "examen" qcm -i fraise # lancer un questionnaire avec l'identifiant fraise + qcm -d /var/www/monsite # changer le dossier par défaut dans lequel afficher les résultats cat mon-questionnaire.qcm | qcm # lancer le questionnaire .qcm cat mon-questionnaire.qcm | ssh compte@serveur qcm # le lancer à distance mais ne fonctionne pas encore ! @@ -27,9 +29,10 @@ usage() { } show() { -<<-. cat - url : $url/$id/réponse - par exemple : $url/$id/A +<<-. tee "$webdir/index.html" | grep -Ev "(<pre>|</pre>)" | cat + <pre> + exemple de réponse : $url/$id/A + url des résultats (à rafraichir manuellement) : $url/$id $question @@ -38,6 +41,7 @@ show() { $groupedanswers total : $tot + </pre> . } @@ -138,9 +142,9 @@ nbq=4 uopt="-u" plotcmd="cat" -while getopts "hegl:u:i:" opt; do +while getopts "hegl:u:i:d:" opt; do case $opt in - ( l | u | i ) [ -n "$OPTARG" ] && eval "$opt='$OPTARG'" ;; + ( l | u | i | d ) [ -n "$OPTARG" ] && eval "$opt='$OPTARG'" ;; ( g ) command -v gnuplot > /dev/null && plotcmd="gplot" ;; ( h ) usage; exit ;; ( e ) hide="yes";; @@ -151,6 +155,7 @@ done url="${u:-http://bebou.netlib.re}" logs="${l:-/var/log/nginx/access.log}" + [ ! -e "$logs" ] && { echo "fichier de log '$logs' n'existe pas" >&2;exit 1; } tmpd=$(mktemp -d "${TMPDIR:-/tmp}/qcm.XXX") @@ -168,13 +173,16 @@ else id=$(basename "$tmpd" | cut -d'.' -f2) fi +webdir="${d:-/var/www/bebou.netlib.re}"/$id +mkdir "$webdir" || { echo "Impossible de créer le dossier '$webdir'" >&2;exit 1; } + alias question:=question; question() { question="$*"; } alias type:=type; type() { type="$*"; } alias options:=options; options() { options="$*"; } alias choix:=choix; choix() { [ "$*" = "multiple" ] && choix="+" || choix=; } alias unique:=unique; unique() { [ "$*" = "non" ] && uopt= || uopt="-u"; } -trap 'rm -rf $tmpd;exit' INT TERM +trap 'rm -rf "$tmpd" "$webdir";exit' INT TERM QUIT trap 'kill 0' EXIT if [ -t 0 ];then