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 }