kun

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"