disallow Semicolon (;) character in persons name
[confetti] / actions / update_attendee.sh
1 #!/bin/zsh
2
3 cgi_post
4 cgi_refdata
5
6 filter="&filter=$_REF[\"filter\"]"
7 filtertype="&filtertype=$_REF[\"filtertype\"]"
8 order="&order=$_REF[\"order\"]"
9
10 card="$_POST[\"card\"]"
11 tempfile="$_DATA/temp/$card"
12 cardfile="$_DATA/vcard/$card"
13 attfile="$_DATA/mappings/attendance"
14
15 _POST["0N"]="$(echo "$_POST[\"0N\"]" |sed 's:;: :')"
16 _POST["1N"]="$(echo "$_POST[\"1N\"]" |sed 's:;: :')"
17 _POST["2N"]="$(echo "$_POST[\"2N\"]" |sed 's:;: :')"
18 _POST["3N"]="$(echo "$_POST[\"3N\"]" |sed 's:;: :')"
19 _POST["4N"]="$(echo "$_POST[\"4N\"]" |sed 's:;: :')"
20
21 echo "BEGIN:VCARD\r" >"$tempfile"
22 echo "VERSION:4.0\r" >>"$tempfile"
23 echo "N:$_POST[\"0N\"];$_POST[\"1N\"];$_POST[\"2N\"];$_POST[\"3N\"];$_POST[\"4N\"]\r" >>"$tempfile"
24 echo "UID:$_POST[\"UID\"]\r" >>"$tempfile"
25 for field in $VCF_FIELDS; do
26   value="$_POST[\"$field\"]"
27   n=0
28   while [ -n "$value" ]; do
29     value="$(echo "$value" |sed -r ':a;N;$!ba;s:\n:\\\\n:g;s:\r:\\\\r:g')"
30     echo "${field}:${value}\r"
31     value="$_POST[\"$field$n\"]"
32     n=$(($n + 1))
33   done
34 done >>"$tempfile"
35
36 case "$_POST[\"action\"]" in
37   addfield)
38     echo "$_POST[\"newfield\"]:\r" >>"$tempfile"
39     echo "END:VCARD\r" >>"$tempfile"
40     echo -n "Location: http://$HTTP_HOST/?page=attendees${filter}${filtertype}${order}&edit=$card\n\n"
41     ;;
42   update)
43     attendance=()
44     for att in attendance attendance{0..100}; do
45       [ -n "$_POST[\"$att\"]" ] && attendance+=("$_POST[\"$att\"]")
46     done
47     sed -rn 's:^(.+)'$card'$:\1:p' "$attfile" |while read course; do
48       touch "$_DATA/ical/$course"
49     done
50     sed -i -r '/^(.+)\t'$card'$/d' "$attfile"
51     for each in $attendance; do
52       echo "$each\t$card"
53     done >>"$attfile"
54     sed -rn 's:^(.+)'$card'$:\1:p' "$attfile" |while read course; do
55       touch "$_DATA/ical/$course"
56     done
57
58     echo "END:VCARD\r" >>"$tempfile"
59     mv "$tempfile" "$cardfile"
60     echo -n "Location: http://$HTTP_HOST/?page=attendees${filter}${filtertype}${order}#$card\n\n"
61     ;;
62   cancel)
63     rm "$tempfile"
64     [ -f "$cardfile" ] \
65       && echo -n "Location: http://$HTTP_HOST/?page=attendees${filter}${filtertype}${order}#$card\n\n" \
66       || echo -n "Location: http://$HTTP_HOST/?page=attendees${filter}${filtertype}${order}\n\n"
67     ;;
68   delete)
69     rm "$tempfile" "$cardfile"
70     echo -n "Location: http://$HTTP_HOST/?page=attendees${filter}${filtertype}${order}\n\n"
71     ;;
72 esac