+view_attendee() { #Parameter: Cardfile
+ id="$1"
+ cardfile="$_DATA/vcard/${id}"
+ cachefile="$_DATA/cache/${id}.cache"
+ unset key
+ if [ "$cachefile" -nt "$cardfile" ]; then
+ cat "$cachefile"
+ else
+ declare -A tags
+ declare -A values
+ vcf_parse "$cardfile" |while read -r line; do
+ declare -A tag
+ case "$line" in
+ value*) eval "$line";;
+ tag*) eval "$line";;
+ key*)
+ if [ -z "$key" ]; then
+ eval "$line"
+ else
+ values[$key]="$value"
+ for t in ${(k)tag}; do
+ tags[${key}_$t]="$tag[$t]"
+ done
+ eval "$line"
+ if [ -n "$values[$key]" ]; then
+ n=0
+ while [ -n "$values[$key$n]" ]; do n=$(($n + 1)); done
+ key=$key$n
+ fi
+ unset value
+ unset tag
+ fi
+ ;;
+ esac
+ done
+ . ${_EXEC}/templates/view_attendee.sh |tee "$cachefile"
+ fi
+}
+
+edit_attendee() { #Parameter: Cardfile
+ id="$1"
+ cardfile="$_DATA/vcard/$id"
+ tempfile="$_DATA/temp/$id"
+ [ -f "$tempfile" ] && cardfile="$tempfile"
+ unset key
+
+ declare -A tags
+ declare -A values
+ vcf_parse "$cardfile" |while read -r line; do
+ declare -A tag
+ case "$line" in
+ value*) eval "$line";;
+ tag*) eval "$line";;
+ key*)
+ if [ -z "$key" ]; then
+ eval "$line"
+ else
+ [ -n "$value" ] && values[$key]="$value" || values[$key]='\r'
+ for t in ${(k)tag}; do
+ tags[${key}_$t]="$tag[$t]"
+ done
+ eval "$line"
+ if [ -n "$values[$key]" ]; then
+ n=0
+ while [ -n "$values[${key}${n}]" ]; do n=$(($n + 1)); done
+ key=$key$n
+ fi
+ unset value
+ unset tag
+ fi
+ ;;
+ esac
+ done
+ . ${_EXEC}/templates/edit_attendee.sh
+}
+