]> git.plutz.net Git - confetti/blob - actions/update_card.sh
rename attendees section to more generic "cards" to allow alternate views for vcards
[confetti] / actions / update_card.sh
1 #!/bin/zsh
2
3 # Copyright 2014 Paul Hänsch
4 #
5 # This file is part of Confetti.
6
7 # Confetti is free software: you can redistribute it and/or modify
8 # it under the terms of the GNU Affero General Public License as published by
9 # the Free Software Foundation, either version 3 of the License, or
10 # (at your option) any later version.
11
12 # Confetti is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 # GNU Affero General Public License for more details.
16
17 # You should have received a copy of the GNU Affero General Public License
18 # along with Confetti.  If not, see <http://www.gnu.org/licenses/>. 
19
20 cgi_post
21 cgi_refdata
22
23 filter="&filter=${_REF[filter]}"
24 filtertype="&filtertype=${_REF[filtertype]}"
25 order="&order=${_REF[order]}"
26
27 card="${_POST[card]}"
28 tempfile="$_DATA/temp/$card"
29 cardfile="$_DATA/vcard/$card"
30 attfile="$_DATA/mappings/attendance"
31
32 _POST[0N]="$(echo "${_POST[0N]}" |sed 's:;: :')"
33 _POST[1N]="$(echo "${_POST[1N]}" |sed 's:;: :')"
34 _POST[2N]="$(echo "${_POST[2N]}" |sed 's:;: :')"
35 _POST[3N]="$(echo "${_POST[3N]}" |sed 's:;: :')"
36 _POST[4N]="$(echo "${_POST[4N]}" |sed 's:;: :')"
37
38 echo "BEGIN:VCARD\r" >"$tempfile"
39 echo "VERSION:4.0\r" >>"$tempfile"
40 echo "N:${_POST[0N]};${_POST[1N]};${_POST[2N]};${_POST[3N]};${_POST[4N]}\r" >>"$tempfile"
41 echo "UID:${_POST[UID]}\r" >>"$tempfile"
42 for field in $VCF_FIELDS; do
43   value="${_POST[$field]}"
44   n=0
45   while [ -n "$value" ]; do
46     value="$(echo "$value" |sed -r ':a;N;$!ba;s:\n:\\\\n:g;s:\r:\\\\r:g')"
47     echo "${field}:${value}\r"
48     value="${_POST[$field$n]}"
49     n=$(($n + 1))
50   done
51 done >>"$tempfile"
52
53 case "${_POST[action]}" in
54   addfield)
55     echo "${_POST[newfield]}:\r" >>"$tempfile"
56     echo "END:VCARD\r" >>"$tempfile"
57     echo -n "Location: ?p=cards${filter}${filtertype}${order}&edit=$card\n\n"
58     ;;
59   update)
60     attendance=()
61     for att in attendance attendance{0..100}; do
62       [ -n "${_POST[$att]}" ] && attendance+=("${_POST[$att]}")
63     done
64     sed -rn 's:^(.+)'$card'$:\1:p' "$attfile" |while read course; do
65       touch "$_DATA/ical/$course"
66     done
67     sed -i -r '/^(.+)\t'$card'$/d' "$attfile"
68     for each in $attendance; do
69       echo "$each\t$card"
70     done >>"$attfile"
71     sed -rn 's:^(.+)'$card'$:\1:p' "$attfile" |while read course; do
72       touch "$_DATA/ical/$course"
73     done
74
75     echo "END:VCARD\r" >>"$tempfile"
76     mv "$tempfile" "$cardfile"
77     echo -n "Location: ?p=cards${filter}${filtertype}${order}#$card\n\n"
78     ;;
79   cancel)
80     rm "$tempfile"
81     [ -f "$cardfile" ] \
82       && echo -n "Location: ?p=cards${filter}${filtertype}${order}#$card\n\n" \
83       || echo -n "Location: ?p=cards${filter}${filtertype}${order}\n\n"
84     ;;
85   delete)
86     rm "$tempfile" "$cardfile"
87     echo -n "Location: ?p=cards${filter}${filtertype}${order}\n\n"
88     ;;
89 esac