]> git.plutz.net Git - confetti/blob - pages/attendees.sh
display line breaks in comments
[confetti] / pages / attendees.sh
1 #!/bin/sh
2
3 [ -z "$_GET[\"order\"]" ] && _GET["order"]=firstname
4
5 listcards() {
6   case "$_GET[\"filtertype\"]" in
7     any)
8        grep -il "$_GET[\"filter\"]" ${_DATA}/vcard/*vcf
9       ;;
10     name)
11        egrep -xil "(FN|NICKNAME|N)(;.+)*:.*$_GET[\"filter\"].*" ${_DATA}/vcard/*vcf
12       ;;
13     street)
14        egrep -xil "(ADR)(;.+)*:([^;]*;){2}$_GET[\"filter\"].*" ${_DATA}/vcard/*vcf
15       ;;
16     zip)
17        egrep -xil "(ADR)(;.+)*:([^;]*;){5}$_GET[\"filter\"].*" ${_DATA}/vcard/*vcf
18       ;;
19     telephone)
20        egrep -xil "(TEL)(;.+)*:.*$_GET[\"filter\"].*" ${_DATA}/vcard/*vcf
21       ;;
22     birth)
23        egrep -xil "(BDAY)(;.+)*:$_GET[\"filter\"].*" ${_DATA}/vcard/*vcf
24       ;;
25     course)
26       ;;
27     *) ls -1 ${_DATA}/vcard/*vcf 2>/dev/null
28       ;;
29   esac |case "$_GET[\"order\"]" in
30     firstname)
31       while read file; do
32         fn=$(sed -rn 's:^N(;.+)*\:([^;]*;){1} *([^;]*).*$:\3:p' "$file")
33         echo "$fn\t$file"
34       done
35       ;;
36     lastname)
37       while read file; do
38         ln=$(sed -rn 's:^N(;.+)*\:([^;]*;){0} *([^;]*).*$:\3:p' "$file")
39         echo "$ln\t$file"
40       done
41       ;;
42     bdate)
43       while read file; do
44         bd=$(sed -rn 's:^BDAY(;.+)*\:(.*)$:\2:p' "$file")
45         echo "$bd\t$file"
46       done
47       ;;
48     *)
49       sed -r 's:^.*$:x\t&:'
50       ;;
51   esac |sort |sed -r 's:^.*\t(.*/)([^/]+)$:\2:'
52 }
53
54 vcf_parse() {
55   tr -d '\n' <"$1" |sed -r 's:\r ::g;s:\r:\n:g' \
56   | sed -rn '
57     s:^PHOTO:001 PHOTO:p;
58     s:^X-MS-CARDPICTURE:001 PHOTO:p;
59     s:^LOGO:002 LOGO:p;
60     s:^FN:003 FN:p;
61     s:^N[\:;]:004 &:p
62     s:^NICKNAME:005 NICKNAME:p;
63     s:^SOUND:006 SOUND:p;
64     s:^GENDER:007 GENDER:p;
65     s:^X-GENDER:007 GENDER:p;
66     s:^KIND:008 KIND:p;
67     s:^TITLE:009 TITLE:p;
68     s:^ROLE:010 ROLE:p;
69     s:^ORG:011 ORG:p;
70     s:^MEMBER:012 MEMBER:p;
71     s:^CATEGORIES:013 CATEGORIES:p;
72     s:^ANNIVERSARY:014 ANNIVERSARY:p;
73     s:^X-ANNIVERSARY:014 ANNIVERSARY:p;
74     s:^X-EVOLUTION-ANNIVERSARY:014 ANNIVERSARY:p;
75     s:^X-KADDRESSBOOK-X-Anniversary:014 ANNIVERSARY:p;
76     s:^BDAY:015 BDAY:p;
77     s:^EMAIL:016 EMAIL:p;
78     s:^TEL:017 TEL:p;
79     s:^IMPP:018 IMPP:p;
80     s:^X-AIM(;[^"\:]+|;"[^"]+")*\:(.*)$:018 IMPP\1\:aim\:\2:p;
81     s:^X-ICQ(;[^"\:]+|;"[^"]+")*\:(.*)$:018 IMPP\1\:aim\:\2:p;
82     s:^X-GOOGLE-TALK(;[^"\:]+|;"[^"]+")*\:(.*)$:018 IMPP\1\:xmpp\:\2:p;
83     s:^X-JABBER(;[^"\:]+|;"[^"]+")*\:(.*)$:018 IMPP\1\:xmpp\:\2:p;
84     s:^X-MSN(;[^"\:]+|;"[^"]+")*\:(.*)$:018 IMPP\1\:msn\:\2:p;
85     s:^X-YAHOO(;[^"\:]+|;"[^"]+")*\:(.*)$:018 IMPP\1\:ymsgr\:\2:p;
86     s:^X-SIP(;[^"\:]+|;"[^"]+")*\:(sip\:)?(.*)$:018 IMPP\1\:sip\:\3:p;
87     s:^ADR:019 ADR:p;
88     s:^LABEL(;[^"\:]+|;"[^"]+")*\:(.*)$:019 ADR;LABEL="\2"\1\::p;
89     s:^URL:021 URL:p;
90     s:^X-EVOLUTION-BLOG-URL:021 URL:p;
91     s:^LANG:022 LANG:p;
92     s:^NOTE:023 NOTE:p;
93     s:^UID:026 UID:p;
94
95     s:^RELATED:025 RELATED:p;
96     s:^AGENT:025 RELATED\;TYPE=agent:p;
97     s:^X-ASSISTANT:025 RELATED\;TYPE=assistant;VALUE=text:p;
98     s:^X-EVOLUTION-ASSISTANT:025 RELATED\;TYPE=assistant;VALUE=text:p;
99     s:^X-KADDRESSBOOK-X-AssistantsName:025 RELATED\;TYPE=assistant;VALUE=text:p;
100     s:^X-MANAGER:025 RELATED\;TYPE=manager;VALUE=text:p;
101     s:^X-EVOLUTION-MANAGER:025 RELATED\;TYPE=manager;VALUE=text:p;
102     s:^X-KADDRESSBOOK-X-ManagersName:025 RELATED\;TYPE=manager;VALUE=text:p;
103     s:^X-SPOUSE:025 RELATED\;TYPE=spouse;VALUE=text:p;
104     s:^X-EVOLUTION-SPOUSE:025 RELATED\;TYPE=spouse;VALUE=text:p;
105     s:^X-KADDRESSBOOK-X-SpouseName:025 RELATED\;TYPE=spouse;VALUE=text:p;
106
107     s:^BEGIN.*$:000 &:p;
108     s:^CALADRURI.*$::;
109     s:^CALURI.*$::;
110     s:^CLASS.*$::;
111     s:^CLIENTPIDMAP.*$::;
112     s:^END.*$:100 &:p;
113     s:^FBURL.*$::;
114     s:^GEO.*$::;
115     s:^MAILER.*$::;
116     s:^NAME.*$::;
117     s:^PRODID.*$::;
118     s:^PROFILE.*$::;
119     s:^REV.*$::;
120     s:^SORT-STRING.*$::;
121     s:^SOURCE.*$::;
122     s:^TZ.*$::;
123     s:^VERSION.*$:000 VERSION\:4.0:p;
124     s:^XML.*$::;
125
126     s:^([A-Z].*)$:024 \1:p;
127     ' \
128   |sort |while read -r line; do
129     case "$line" in
130       00[012]*)
131         echo -E "$line"
132         ;;
133       003*)
134         fn=$(echo -E "$line" |sed -r 's:^[0-9]{3} ([^;\:]+)(;[^"\:]+|;"[^"]+")*\:(.*)$:\3:g' |tr -d '\r')
135         ;;
136       004*)
137         n=$(echo -E "$line" \
138           |sed -rn 's:^([0-9]{3} )([^;\:]+)(;[^"\:]+|;"[^"]+")*\:([^;]*)(\;[^;]*)(\;[^;]*)?(\;[^;]*)?(\;[^;]*)?$:\7 \5 \6 \4 \8:gp' \
139           |sed -r 's:,: :;s:\;: :g;s: +: :g' \
140           |tr -d '\r'
141         )
142         echo -E "$line"
143         ;;
144       005*)
145         nick=$(echo -E "$line" |sed -r 's:^[0-9]{3} ([^;\:]+)(;[^"\:]+|;"[^"]+")*\:(.*)$:\3:g' |tr -d '\r')
146         echo -E "$line"
147         ;;
148       *)
149         [ -n "$n" ] && fn="$n"
150         #[ -n "$fn" -a -n "$nick" ] && fn="$fn aka. $nick"
151         [ -n "$fn" ] && echo -E "003 FN:$fn" \
152                       || echo -E "003 FN:$nick"
153         echo -E "$line"
154         cat
155         ;;
156     esac
157   done |tr -d '\r' \
158   | sed -r 's:^[0-9]{3} ([^;\:]+)(;[^"\:]+|;"[^"]+")*\:(.*)$:key="\1"\nvalue="\3"\ntag=\2:g' \
159   | while read -r line; do
160     case "$line" in
161       key=*) echo -E "$line"
162         ;;
163       value=*) echo -E "$line"
164         ;;
165       tag=*) ot=''
166              echo -E "$line" \
167              | sed -r 's:^tag=::;s:\;([A-Z+_-]+="[^"]+"|[A-Z+_-]+=[^\;]+):\n\1:g;' \
168              | sed -r 's:([A-Z+_-]+)="?(.*)"?:tag\[\1\]="\2":g' \
169              | sed -r '/^ *$/d' \
170              | sort |while read -r tag; do
171                nt="$(echo -E "$tag" |sed -r 's:^tag\[([A-Z+_-]+)\]="(.*)"$:\1:')"
172                nv="$(echo -E "$tag" |sed -r 's:^tag\[([A-Z+_-]+)\]="(.*)"$:\2:')"
173                [ "$nt" = "$ot" ] && vl="$nv,$vl" || vl="$nv"
174                echo -E "tag[$nt]=\"$vl\""
175                ot="$nt"
176              done
177         ;;
178     esac
179   done
180 }
181
182 view_attendee() {  #Parameter: Cardfile
183   id="$1"
184   cardfile="$_DATA/vcard/${id}"
185   cachefile="$_DATA/cache/${id}.cache"
186   unset key
187   if [ "$cachefile" -nt "$cardfile" ]; then
188     cat "$cachefile"
189   else
190     declare -A tags
191     declare -A values
192     vcf_parse "$cardfile" |while read -r line; do
193       declare -A tag
194       case "$line" in
195         value*) eval "$line";;
196         tag*)   eval "$line";;
197         key*)
198           if [ -z "$key" ]; then
199             eval "$line"
200           else
201             values[$key]="$value"
202             for t in ${(k)tag}; do
203               tags[${key}_$t]="$tag[$t]"
204             done
205             eval "$line"
206             if [ -n "$values[$key]" ]; then
207               n=0
208               while [ -n "$values[$key$n]" ]; do n=$(($n + 1)); done
209               key=$key$n
210             fi
211             unset value
212             unset tag
213           fi
214         ;;
215       esac
216     done
217     . ${_EXEC}/templates/view_attendee.sh |tee "$cachefile"
218   fi
219 }
220
221 edit_attendee() {  #Parameter: Cardfile
222   id="$1"
223   cardfile="$_DATA/vcard/$id"
224   tempfile="$_DATA/temp/$id"
225   [ -f "$tempfile" ] && cardfile="$tempfile"
226   unset key
227
228   declare -A tags
229   declare -A values
230   vcf_parse "$cardfile" |while read -r line; do
231     declare -A tag
232     case "$line" in
233       value*) eval "$line";;
234       tag*)   eval "$line";;
235       key*)
236         if [ -z "$key" ]; then
237           eval "$line"
238         else
239           [ -n "$value" ] && values[$key]="$value" || values[$key]='\r'
240           for t in ${(k)tag}; do
241             tags[${key}_$t]="$tag[$t]"
242           done
243           eval "$line"
244           if [ -n "$values[$key]" ]; then
245             n=0
246             while [ -n "$values[${key}${n}]" ]; do n=$(($n + 1)); done
247             key=$key$n
248           fi
249             unset value
250             unset tag
251         fi
252       ;;
253     esac
254   done
255   . ${_EXEC}/templates/edit_attendee.sh
256 }
257
258 case "$1" in
259   title)
260     echo "Teilnehmende"
261   ;;
262   css)
263     . ${_EXEC}/templates/attendees.css.sh
264   ;;
265   body)
266     . ${_EXEC}/templates/text_attendee.sh
267     . ${_EXEC}/templates/attendees.html.sh
268   ;;
269 esac
270