un outil de sondage - retour accueil
git clone git://bebou.netlib.re/kun
Log | Files | Refs | README |
kun.sh (3507B)
1 #! /bin/sh 2 3 . ./utils.sh 4 5 . ./commands.sh 6 7 # Probablement pas safe mais pratique 8 #[ "$(type $1)" = "$1 is a shell function" ] \ 9 # && { eval "$(echo $@ | cut -d';' -f1)" && exit 0 || exit 1;} 10 11 _help() { 12 echo "Les commandes dispos : \n" 13 grep -E -B3 "^[a-zA-Z]+ *\(\) *{ *$" ./commands.sh | 14 grep -v ^$ 15 } 16 17 questiontemplate=$(mktemp) 18 <<. cat > $questiontemplate 19 # La question sur des lignes 20 # commençant par # 21 # Une option par ligne 22 réponse A 23 réponse B 24 réponse C 25 . 26 kunscript=$(mktemp) 27 trap "rm -f $kunscript $questiontemplate" EXIT TERM QUIT INT 28 29 if [ -n "$SSH_ORIGINAL_COMMAND" ];then 30 echo "$SSH_ORIGINAL_COMMAND" > $kunscript 31 elif [ ! -t 0 ];then 32 cat > $kunscript 33 fi 34 35 # Si kunscript n'est pas vide on l'exec 36 cat $kunscript 37 if [ -s "$kunscript" ];then 38 # Probablement safe mais fastidieux 39 while read cmd;do 40 set -- $cmd 41 case "$1" in 42 (create) shift;create "$@" || exit 1;; 43 (addanswer) 44 shift;id="$1" 45 shift;name="$1" 46 shift;text="$@" 47 addanswer "$id" "$name" "$text" || exit 1;; 48 (modifyanswer) modifyanswer "$2" "$3" "$4" || exit 1;; 49 (deletequestion) deletequestion "$2" || exit 1;; 50 (deleteanswer) deleteanswer "$2" "$3" || exit 1;; 51 (results) results "$2" || exit 1;; 52 (getpeople) getpeople "$2" || exit 1;; 53 (getanswer) getanswer "$2" "$3" || exit 1;; 54 (getlog) getlog "$2" || exit 1;; 55 (-h) _help;exit 0;; 56 (*) _die "Commande $1 n'existe pas";exit 1;; 57 esac 58 done < $kunscript 59 exit 0 60 fi 61 62 # Sinon on créé le fichier de log 63 logfile=$(mktemp /tmp/kun.XXX.log) 64 exec 3> $logfile 65 66 # Et on lance la TUI 67 while [ ! "$k" = "quitter" ];do 68 69 t="";l=""; 70 k=$(<<-. fzy 71 quitter 72 créer un sondage 73 répondre à un sondage 74 consulter un sondage 75 supprimer un sondage 76 supprimer une réponse 77 consulter le log en cours 78 récupérer un fichier de log 79 . 80 ) 81 82 case $k in 83 ("créer un sondage") 84 create ;; 85 ("répondre à un sondage") 86 read -p "id du sondage : " id 87 _questionexists "$id" || { _die "Sondage n'existe pas"; continue; } 88 l=$(<<-. fzy 89 ajouter une réponse 90 modifier une réponse 91 . 92 ) 93 case $l in 94 ("ajouter une réponse") 95 read -p "votre nom : " name 96 while ! addanswer "$id" "$name";do 97 read -p "votre nom : " name 98 done ;; 99 ("modifier une réponse") 100 read -p "id de la réponse : " idrep 101 modifyanswer "$id" "$idrep" ;; 102 esac ;; 103 ("consulter un sondage") 104 read -p "id du sondage : " id 105 _questionexists "$id" || { _die "Sondage n'existe pas"; continue; } 106 while [ ! "$t" = "quitter" ];do 107 t=$(<<-. fzy 108 quitter 109 toutes 110 une personne 111 . 112 ) 113 case $t in 114 ("toutes") 115 results "$id" ;; 116 ("une personne") 117 people=$(getpeople "$id") 118 while [ ! "$choice" = "quitter" ];do 119 choice=$(echo "$people" | sed '1i\quitter' | fzy) 120 [ "$choice" != "quitter" ] && getanswer "$id" "$choice" 121 done;choice=;; 122 esac 123 done ;; 124 ("supprimer un sondage") 125 read -p "id du sondage : " id 126 deletequestion "$id" ;; 127 ("supprimer une réponse") 128 read -p "id du sondage : " id 129 read -p "id de la réponse : " idrep 130 deleteanswer "$id" "$idrep";; 131 ("consulter le log en cours") 132 _showlog;; 133 ("récupérer un fichier de log") 134 read -p "id du log : " id 135 getlog "$id";; 136 esac 137 done 138 139 chmod +x $logfile 140 [ -s "$logfile" ] \ 141 && printf "Fichier de log : %s\n" $logfile \ 142 || rm "$logfile"