]> git.plutz.net Git - confetti/blob - pages/courses.sh
alphabetic ordering of course attendees
[confetti] / pages / courses.sh
1 #!/bin/sh
2
3 [ -z "$_GET[\"order\"]" ] && _GET["order"]=DOW
4
5 listcards() {
6   ls -1 ${_DATA}/vcard/*vcf 2>/dev/null |while read file; do
7     fn=$(sed -rn 's:^N(;.+)*\:([^;]*;){1} *([^;]*).*$:\3:p' "$file")
8     echo "$fn\t$file"
9   done |sort |sed -r 's:^.*\t(.*/)([^/]+)$:\2:'
10 }
11
12
13 listcourses() {
14   case "$_GET[\"filtertype\"]" in
15     *) ls -1 ${_DATA}/ical/*ics 2>/dev/null
16       ;;
17   esac |case "$_GET[\"order\"]" in
18     DOW)
19       while read file; do
20         icstime="$(sed -rn 's:^DTSTART\:(TZID=.*\:)?([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2})([0-9]{2})([0-9]{2})Z?\r$:\2-\3-\4 \5\:\6\:\7:p' "$file")"
21         echo "$(date -d "$icstime" "+%u %H%M%S")\t$file"
22       done
23       ;;
24     TOD)
25       while read file; do
26         icstime="$(sed -rn 's:^DTSTART\:(TZID=.*\:)?([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2})([0-9]{2})([0-9]{2})Z?\r$:\2-\3-\4 \5\:\6\:\7:p' "$file")"
27         echo "$(date -d "$icstime" +%H%M%S)\t$file"
28       done
29       ;;
30     *)
31       sed -r 's:^.*$:x\t&:'
32       ;;
33   esac |sort |sed -r 's:^.*\t(.*/)([^/]+)$:\2:'
34 }
35
36 list_attendance() {
37   id="$1"
38   sed -rn 's:'$id'\t(.+)$:\1:p' "$_DATA/mappings/attendance" |while read each; do
39     n_last="$(  sed -rn 's:^N(;.+)*\:([^;]*;){0} *([^;]*).*$:\3:p' "$_DATA/vcard/$each")"
40     n_first="$( sed -rn 's:^N(;.+)*\:([^;]*;){1} *([^;]*).*$:\3:p' "$_DATA/vcard/$each")"
41     n_middle="$(sed -rn 's:^N(;.+)*\:([^;]*;){2} *([^;]*).*$:\3:p' "$_DATA/vcard/$each")"
42     n_pre="$(   sed -rn 's:^N(;.+)*\:([^;]*;){3} *([^;]*).*$:\3:p' "$_DATA/vcard/$each")"
43     n_post="$(  sed -rn 's:^N(;.+)*\:([^;]*;){4} *([^;]*).*$:\3:p' "$_DATA/vcard/$each")"
44     byear="$(  sed -rn 's:^BDAY(;.+)*\:([0-9]{4})(-[0-9][0-9]){2}.*$:\2:p' "$_DATA/vcard/$each")"
45     #aname="${n_pre} ${n_first} ${n_middle} ${n_last} ${n_post} (*${byear})"
46     aname="${n_pre} ${n_first} ${n_middle} ${n_last} ${n_post}"
47     echo "$each $aname" |tr -d '\r'
48   done
49 }
50
51 course_mail() {
52   id="$1"
53   coursemail=""
54   sed -rn 's:'$id'\t(.+)$:\1:p' "$_DATA/mappings/attendance" |while read each; do
55     coursemail="$coursemail$(sed -rn 's:^EMAIL(;.+)*\:(.+)\r$:\2,:p' "$_DATA/vcard/$each")"
56   done
57   echo "$coursemail"
58 }
59
60 ics_parse() {
61   tr -d '\n' <"$1" |sed -r 's:\r ::g;s:\r:\n:g' |tr -d '\r' \
62   | sed -r 's:^([^;\:]+)(;[^"\:]+|;"[^"]+")*\:(.*)$:key="\1"\nvalue="\3"\ntag=\2:g' \
63   | while read -r line; do
64     case "$line" in
65       key=*) echo -E "$line"
66         ;;
67       value=*) echo -E "$line"
68         ;;
69       tag=*) ot=''
70              echo -E "$line" \
71              | sed -r 's:^tag=::;s:\;([A-Z+_-]+="[^"]+"|[A-Z+_-]+=[^\;]+):\n\1:g;' \
72              | sed -r 's:([A-Z+_-]+)="?(.*)"?:tag\[\1\]="\2":g' \
73              | sed -r '/^ *$/d' \
74              | sort |while read -r tag; do
75                nt="$(echo -E "$tag" |sed -r 's:^tag\[([A-Z+_-]+)\]="(.*)"$:\1:')"
76                nv="$(echo -E "$tag" |sed -r 's:^tag\[([A-Z+_-]+)\]="(.*)"$:\2:')"
77                [ "$nt" = "$ot" ] && vl="$nv,$vl" || vl="$nv"
78                echo -E "tag[$nt]=\"$vl\""
79                ot="$nt"
80              done
81         ;;
82     esac
83   done
84 }
85
86 view_course() {  #Parameter: Calendarfile
87   id="$1"
88   calendarfile="$_DATA/ical/${id}"
89   cachefile="$_DATA/cache/${id}.cache"
90   unset key
91   if [ "$cachefile" -nt "$calendarfile" ]; then
92     cat "$cachefile"
93   else
94     declare -A tags
95     declare -A values
96     ics_parse "$calendarfile" |while read -r line; do
97       declare -A tag
98       case "$line" in
99         value*) eval "$line";;
100         tag*)   eval "$line";;
101         key*)
102           if [ -z "$key" ]; then
103             eval "$line"
104           else
105             values[$key]="$value"
106             for t in ${(k)tag}; do
107               tags[${key}_$t]="$tag[$t]"
108             done
109             eval "$line"
110             if [ -n "$values[$key]" ]; then
111               n=0
112               while [ -n "$values[$key$n]" ]; do n=$(($n + 1)); done
113               key=$key$n
114             fi
115             unset value
116             unset tag
117           fi
118         ;;
119       esac
120     done
121     . ${_EXEC}/templates/view_course.sh |tee "$cachefile"
122   fi
123 }
124
125 edit_course() {  #Parameter: Calendarfile
126   id="$1"
127   calendarfile="$_DATA/ical/$id"
128   tempfile="$_DATA/temp/$id"
129   [ -f "$tempfile" ] && calendarfile="$tempfile"
130   unset key
131
132   declare -A tags
133   declare -A values
134   ics_parse "$calendarfile" |while read -r line; do
135     declare -A tag
136     case "$line" in
137       value*) eval "$line";;
138       tag*)   eval "$line";;
139       key*)
140         if [ -z "$key" ]; then
141           eval "$line"
142         else
143           [ -n "$value" ] && values[$key]="$value" || values[$key]='\r'
144           for t in ${(k)tag}; do
145             tags[${key}_$t]="$tag[$t]"
146           done
147           eval "$line"
148           if [ -n "$values[$key]" ]; then
149             n=0
150             while [ -n "$values[${key}${n}]" ]; do n=$(($n + 1)); done
151             key=$key$n
152           fi
153             unset value
154             unset tag
155         fi
156       ;;
157     esac
158   done
159   . ${_EXEC}/templates/edit_course.sh
160 }
161
162 case "$1" in
163   title)
164     echo "Kurse"
165   ;;
166   css)
167     . ${_EXEC}/templates/courses.css.sh
168   ;;
169   body)
170     . ${_EXEC}/templates/text_courses.sh
171     . ${_EXEC}/templates/courses.html.sh
172   ;;
173 esac
174