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 }