kun

un outil de sondage - retour accueil

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

commands.sh (6190B)


      1 # créer un sondage
      2 # Si text est renseigné il deviendra le contenu du sondage
      3 # kun create [text]
      4 create() {
      5 	local id folder text
      6 	text="$1"
      7 	folder=$(mktemp -d /tmp/kun.XXXXX) \
      8 		|| { _die "erreur à la création du dossier de sondage $folder";return 1; }
      9 	id=${folder##/tmp/kun.}
     10 	if [ -n "$text" ];then
     11 		echo "$text" > $folder/question \
     12 			|| { _die "erreur à l'écriture du sondage $id";return 1; }
     13 	else
     14 		cp $questiontemplate $folder/question
     15 		${EDITOR:-vim -y -c 'set ls=2|set stl=ctrl+q\ pour\ quitter'} $folder/question
     16 	fi
     17 	if [ -s "$folder/question" ] && ! diff "$folder/question" "$questiontemplate" > /dev/null;then
     18 		_success "Sondage {$id} créé avec succès"
     19 		_cmdlog "create \"$(< $folder/question sed -z 's,\n,\\\\n,g')\""
     20 		printf "{%s}\n" "$id"
     21 	else _die "sondage vide ou n'ayant pas été modifié, il n'a pas été créé"
     22 	fi
     23 }
     24 
     25 # ajouter une réponse à un sondage
     26 # kun addanswer id votre_nom [text]
     27 addanswer() {
     28 	local id name idrep repfile text
     29 	id="${1:?missing parameter}";name="${2:?missing parameter}";text="$3"
     30 	
     31 	_nameexists "$id" "$name" && { _die "$name est déjà pris pour le sondage {$id}";return 1;}
     32 	
     33 	if [ -n "$text" ];then
     34 		if grep -q "^$text$" /tmp/kun.$id/question;then
     35 			repfile=$(mktemp /tmp/kun.$id/$name-XXXXX) \
     36 				|| { _die "erreur à la création du fichier de réponse $repfile";return 1; }
     37 			idrep=$(basename $repfile | cut -d'-' -f2)
     38 			echo "$text" > $repfile
     39 		else _die "Réponse $text n'est pas une option";return 1;
     40 		fi
     41 	else
     42 		_inform "les flèches pour parcourir les réponses
     43 tabulation pour sélectionner une réponse
     44 entrée pour valider le tout\n"
     45 		_inform "Question : \n\n$(grep "^#" /tmp/kun.$id/question | sed 's,^#,,')"
     46 		echo
     47 		a=$(< /tmp/kun.$id/question grep -v '^#' | fzy -m)
     48 		if [ -n "$a" ];then
     49 			repfile=$(mktemp /tmp/kun.$id/$name-XXXXX) \
     50 				|| { _die "erreur à la création du fichier de réponse $repfile";return 1; }
     51 			idrep=$(basename $repfile | cut -d'-' -f2)
     52 			echo "$a" > $repfile
     53 		else
     54 			_die "Réponse vide";return 1;
     55 		fi
     56 	fi
     57 	[ -f "$repfile" ] || { _die "Erreur dans l'écriture de la réponse";return 1;}
     58 	
     59 	_success "réponse {$idrep} de $name soumise au sondage {$id}"
     60 	_inform "recap de la réponse :"
     61 	_inform "$(cat $repfile)"
     62 	_cmdlog "addanswer $id $name \"$(< $repfile sed -z 's,\n,\\\\n,g')\""
     63 	printf "{%s}	{%s}\n" "$id" "$idrep"
     64 }
     65 
     66 # modifier une réponse existante
     67 # n'est pas tant une "modification" qu'une réécriture
     68 # kun modifyanswer id id_de_réponse [text]
     69 modifyanswer() {
     70 	local id idrep repfile text
     71 	id="${1:?missing parameter}";idrep="${2:?missing parameter}";text="$3"
     72 	_answerexists "${1:?missing parameter}" "${2:?missing parameter}" || { _die "Réponse {$idrep} n'existe pas";return 1;}
     73 	name=$(basename /tmp/kun.$id/*-$idrep | cut -d'-' -f1)
     74 	repfile="/tmp/kun.$id/$name-$idrep"
     75 	
     76 	_inform "Question : \n\n$(grep "^#" /tmp/kun.$id/question | sed 's,^#,,')"
     77 	if [ -n "$text" ];then echo "$text" | grep -f /tmp/kun.$id/question > $repfile
     78 	else                   < /tmp/kun.$id/question grep -v '^#' | fzy -m > $repfile
     79 	fi
     80 	[ -f "$repfile" ] || { _die "Erreur dans l'écriture de la réponse";return 1;}
     81 	
     82 	_success "Modification de la réponse {$idrep} de $name soumise au sondage {$id}"
     83 	_inform "recap de la réponse :"
     84 	_inform "$(cat $repfile)"
     85 	_cmdlog "modifyanswer $id $idrep \"$(< $repfile sed -z 's,\n,\\\\n,g')\""
     86 }
     87 
     88 # supprimer un sondage
     89 # kun deletequestion id
     90 deletequestion() {
     91 	local id
     92 	id="${1:?missing parameter}"
     93 
     94 	_questionexists "$id" || { _die "Sondage n'existe pas"; return 1; }
     95 	rm -rf /tmp/kun.$id || { _die "Erreur dans la suppression de {$id}"; return 1; }
     96 
     97 	_success "Sondage {$id} supprimé" 
     98 	_cmdlog "deletequestion $id"
     99 }
    100 
    101 # supprimer une réponse
    102 # kun deleteanswer id id_réponse
    103 deleteanswer() {
    104 	local id idrep
    105 	id="${1:?missing parameter}";idrep="${2:?missing parameter}"
    106 
    107 	_questionexists "$id"          || { _die "Sondage n'existe pas"; return 1; }
    108 	_answerexists   "$id" "$idrep" || { _die "Réponse n'existe pas"; return 1; }
    109 	rm /tmp/kun.$id/*-$idrep \
    110 		|| { _die "Erreur dans la suppression de la réponse {$idrep} du sondage {$id}"; return 1; }
    111 
    112 	_success "Question {$idrep} du sondage {$id} supprimée"
    113 	_cmdlog "deleteanswer $id $idrep"
    114 }
    115 
    116 # voir les résultats d'une question
    117 # kun results id
    118 results() {
    119 	local id
    120 	id="${1:?missing parameter}"
    121 
    122 	_questionexists "$id" || { _die "Sondage n'existe pas"; return 2; }
    123 	_ananswerexists "$id" || { _die "Le sondage {$id} n'a pas encore de réponse"; return 1; }
    124 
    125 	answers=$(cat /tmp/kun.$id/question)
    126 	_cmdlog "results $id"
    127 
    128 	_inform "Question : \n\n$(grep "^#" /tmp/kun.$id/question | sed 's,^#,,')"
    129 	echo
    130 	_inform "Les réponses à la question $id : \n"
    131 	< /tmp/kun.$id/question grep -v '^#' /tmp/kun.$id/question |
    132 	while read answer;do
    133 		names=$(grep -l "$answer" /tmp/kun.$id/*-* | grep -v '/question:' | grep -v ^$)
    134 		[ -z "$names" ] \
    135 			&& nb=0 \
    136 			|| { names=$(printf "%s\n" $names | xargs -n1 basename | cut -d'-' -f1)
    137 				 nb=$(printf "%s\n" $names | wc -l); }
    138 		printf "%d	%s	%s\n" $nb "$answer" $(echo "$names" | paste -s -d';' -)
    139 	done | sort -t'	' -k1 -rn
    140 }
    141 
    142 # voir la liste des personnes ayant répondu
    143 # kun getpeople id
    144 getpeople() {
    145 	local id answers
    146 	id="${1:?missing parameter}"
    147 
    148 	_questionexists "$id" || { _die "Sondage n'existe pas"; return 2; }
    149 	_ananswerexists "$id" || { _die "Le sondage {$id} n'a pas encore de réponse"; return 1; }
    150 
    151 	answers=$(find /tmp/kun.$id -type f -not -name question | sort)
    152 	_cmdlog "getpeople $id"
    153 
    154 	_inform "Les personnes ayant répondu à $id : \n"
    155 	printf "%s\n" $answers |
    156 		cut -d'-' -f1 |
    157 		xargs -n1 basename
    158 }
    159 
    160 # voir la réponse d'une personne à un sondage
    161 # kun getanswer id nom_de_la_personne
    162 getanswer() {
    163 	local id name
    164 	id="${1:?missing parameter}";name="${2:?missing parameter}"
    165 
    166 	_nameexists "$id" "$name" \
    167 		|| { _die "$name n'a pas répondu à ce sondage";return 1;}
    168 	_cmdlog "getanswer $id $name"
    169 	_inform "Réponse de $name à la question $id : \n"
    170 	cat /tmp/kun.$id/$name-*
    171 }
    172 
    173 # récupérer un fichier de log
    174 # kun getlog id
    175 getlog() {
    176 	local id
    177 	id="${1:?missing parameter}"
    178 
    179 	cat /tmp/kun.$id.log || { _die "Problème à la lecture du fichier de log $id";return 1; }
    180 }