kun

un outil de sondage - retour accueil

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

commit 33ba959273f31d11acd64e3af985adae00df8648
parent 462a826dc90b4d8f0249d0072a84c1314f1d96c3
Auterice: Arthur Pons <arthur.pons@unistra.fr>
Date:   Wed, 18 Sep 2024 19:12:13 +0200

Gros avancements

Gestion des menus entièrement en dehors des fonctions
Documentation des fonctions avec des commentaires
Ajout de plusieurs fonctions pour :

  * Voir les personnes ayant répondus à un sondage
  * Récupérer le résultat du sondage
  * Récupérer la réponse d'une personne à un sondage

Idées :

  * Factoriser la gestion des erreurs
  * permettre l'exec des fonctions sans le menu
  * voir ce qu'il est possible de faire avec l'astuce du "while cmd"
  * normaliser le retour des fonctions
  * factoriser la gestion des menus ? ou voir avec zenu ?
  * réfléchir à un moyen de *modifier* la réponse et pas juste la
    refaire (pas possible avec fzy ?)

Diffstat:
Mkun | 153++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------
1 file changed, 93 insertions(+), 60 deletions(-)

diff --git a/kun b/kun @@ -1,77 +1,47 @@ #! /bin/sh +# créer un sondage +# kun create create() { - local id - id=$1 + id=$(mktemp -d /tmp/kun.XXXXX) nano $id/question echo "id du sondage : ${id##/tmp/kun.}" } +# ajouter une réponse à un sondage +# kun addanswer id votre_nom addanswer() { local name idrep repfile - read -p "votre nom : " name + id="$1";name="$2" + [ -f /tmp/kun.$id/$name-* ] && { echo "Ce nom a déjà été pris";return 0; } repfile=$(mktemp /tmp/kun.$id/$name-XXXXX) - echo "les flèches pour parcourir les réponses" - echo "tabulation pour sélectionner une réponse" - echo "entrée pour valider le tout" + <<-. cat + les flèches pour parcourir les réponses + tabulation pour sélectionner une réponse + entrée pour valider le tout + + . < /tmp/kun.$id/question fzy -m > $repfile idrep=$(basename $repfile) echo "id de la réponse : ${idrep##$name-}" + return 1 } +# modifier une réponse existante +# kun modifyanswer id id_de_réponse +# n'est pas tant une "modification" qu'une réécriture modifyanswer() { - local idrep id - read -p "id de la réponse : " idrep - [ ! -f "/tmp/kun.$id/$idrep" ] && { echo "Réponse n'existe pas";return; } - < /tmp/kun.$id/question fzy -m > /tmp/kun.$id/$idrep -} - -answer() { - local c id - id="$1" - [ ! -d "/tmp/kun.$id" ] && { echo "Sondage n'existe pas";return; } - c=$(<<-. fzy - ajouter une réponse - modifier une réponse - . - ) - case $c in - ("ajouter une réponse") addanswer ;; - ("modifier une réponse") modifyanswer ;; - esac -} - -see() { - local c pers id - id="$1" - [ ! -d "/tmp/kun.$id" ] && { echo "Sondage n'existe pas";return; } - while [ ! "$c" = "quitter" ];do - c=$(<<-. fzy - quitter - toutes - une personne - . - ) - case $c in - ("toutes") - find /tmp/kun.$id -type f -not -name question | - xargs cat | - sort | - uniq -c | - sort -rn ;; - ("une personne") - while [ ! "$pers" = "quitter" ];do - pers=$(find /tmp/kun.$id/* -not -name 'question' | - cut -d'-' -f1 | - xargs -n1 basename | - sed '1i\quitter' | - fzy) - [ -f /tmp/kun.$id/$pers-* ] && cat /tmp/kun.$id/$pers-* - done ;; - esac - done + local idrep id name + id="$1";idrep="$2" + echo "/tmp/kun.$id/*-$idrep" + ls /tmp/kun.$id/*-$idrep + [ ! -f /tmp/kun.$id/*-$idrep ] && { echo "Réponse n'existe pas";return; } + name=$(basename /tmp/kun.$id/*-$idrep | cut -d'-' -f1) + < /tmp/kun.$id/question fzy -m > /tmp/kun.$id/$name-$idrep } +# supprimer un sondage +# kun deletequestion id deletequestion() { local id id="$1" @@ -79,6 +49,8 @@ deletequestion() { rm -rf /tmp/kun.$id } +# supprimer une réponse +# kun deleteanswer id id_réponse deleteanswer() { local id idrep id="$1" @@ -88,8 +60,39 @@ deleteanswer() { rm /tmp/kun.$id/$idrep } +# voir les résultats d'une question +# kun result id +result() { + local id + id="$1" + find /tmp/kun.$id -type f -not -name question | + xargs cat | + sort | + uniq -c | + sort -rn +} + +# voir la liste des personnes ayant répondu +# kun getpeople id +getpeople() { + local id + id="$1" + find /tmp/kun.$id/* -not -name 'question' | + cut -d'-' -f1 | + xargs -n1 basename +} + +# voir la réponse d'une personne à un sondage +# kun getanswer id nom_de_la_personne +getanswer() { + local id pers + id="$1";pers="$2" + [ -f /tmp/kun.$id/$pers-* ] && cat /tmp/kun.$id/$pers-* +} + while [ ! "$c" = "quitter" ];do + t="" c=$(<<-. fzy quitter créer un sondage @@ -102,14 +105,44 @@ while [ ! "$c" = "quitter" ];do case $c in ("créer un sondage") - id=$(mktemp -d /tmp/kun.XXXXX) create "$id" ;; ("répondre à un sondage") read -p "id du sondage : " id - answer "$id" ;; - ("consulter un sondage") + [ ! -d "/tmp/kun.$id" ] && { echo "Sondage n'existe pas";return; } + c=$(<<-. fzy + ajouter une réponse + modifier une réponse + . + ) + case $c in + ("ajouter une réponse") + read -p "votre nom : " name + while addanswer "$id" "$name";do + read -p "votre nom : " name + done ;; + ("modifier une réponse") + read -p "id de la réponse : " idrep + modifyanswer "$id" "$idrep" ;; + esac ;; + ("consulter un sondage") read -p "id du sondage : " id - see "$id" ;; + while [ ! "$t" = "quitter" ];do + t=$(<<-. fzy + quitter + toutes + une personne + . + ) + case $t in + ("toutes") + result "$id" ;; + ("une personne") + while [ ! "$pers" = "quitter" ];do + pers=$(getpeople "$id" | sed '1i\quitter' | fzy) + getanswer "$id" "$pers" + done ;; + esac + done ;; ("supprimer un sondage") read -p "id du sondage : " id deletequestion "$id" ;;