kun

un outil de sondage - retour accueil

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

commands.sh (6129B)


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