]> git.plutz.net Git - confetti/blob - pages/courses.sh
pdflatex based generator for course lists
[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     echo "$each $aname" |tr -d '\r'
47   done
48 }
49
50 course_mail() {
51   id="$1"
52   coursemail=""
53   sed -rn 's:'$id'\t(.+)$:\1:p' "$_DATA/mappings/attendance" |while read each; do
54     coursemail="$coursemail$(sed -rn 's:^EMAIL(;.+)*\:(.+)\r$:\2,:p' "$_DATA/vcard/$each")"
55   done
56   echo "$coursemail"
57 }
58
59 ics_parse() {
60   tr -d '\n' <"$1" |sed -r 's:\r ::g;s:\r:\n:g' |tr -d '\r' \
61   | sed -r 's:^([^;\:]+)(;[^"\:]+|;"[^"]+")*\:(.*)$:key="\1"\nvalue="\3"\ntag=\2:g' \
62   | while read -r line; do
63     case "$line" in
64       key=*) echo -E "$line"
65         ;;
66       value=*) echo -E "$line"
67         ;;
68       tag=*) ot=''
69              echo -E "$line" \
70              | sed -r 's:^tag=::;s:\;([A-Z+_-]+="[^"]+"|[A-Z+_-]+=[^\;]+):\n\1:g;' \
71              | sed -r 's:([A-Z+_-]+)="?(.*)"?:tag\[\1\]="\2":g' \
72              | sed -r '/^ *$/d' \
73              | sort |while read -r tag; do
74                nt="$(echo -E "$tag" |sed -r 's:^tag\[([A-Z+_-]+)\]="(.*)"$:\1:')"
75                nv="$(echo -E "$tag" |sed -r 's:^tag\[([A-Z+_-]+)\]="(.*)"$:\2:')"
76                [ "$nt" = "$ot" ] && vl="$nv,$vl" || vl="$nv"
77                echo -E "tag[$nt]=\"$vl\""
78                ot="$nt"
79              done
80         ;;
81     esac
82   done
83 }
84
85 view_course() {  #Parameter: Calendarfile
86   id="$1"
87   calendarfile="$_DATA/ical/${id}"
88   cachefile="$_DATA/cache/${id}.cache"
89   unset key
90   if [ "$cachefile" -nt "$calendarfile" ]; then
91     cat "$cachefile"
92   else
93     declare -A tags
94     declare -A values
95     ics_parse "$calendarfile" |while read -r line; do
96       declare -A tag
97       case "$line" in
98         value*) eval "$line";;
99         tag*)   eval "$line";;
100         key*)
101           if [ -z "$key" ]; then
102             eval "$line"
103           else
104             values[$key]="$value"
105             for t in ${(k)tag}; do
106               tags[${key}_$t]="$tag[$t]"
107             done
108             eval "$line"
109             if [ -n "$values[$key]" ]; then
110               n=0
111               while [ -n "$values[$key$n]" ]; do n=$(($n + 1)); done
112               key=$key$n
113             fi
114             unset value
115             unset tag
116           fi
117         ;;
118       esac
119     done
120     . ${_EXEC}/templates/view_course.sh |tee "$cachefile"
121   fi
122 }
123
124 edit_course() {  #Parameter: Calendarfile
125   id="$1"
126   calendarfile="$_DATA/ical/$id"
127   tempfile="$_DATA/temp/$id"
128   [ -f "$tempfile" ] && calendarfile="$tempfile"
129   unset key
130
131   declare -A tags
132   declare -A values
133   ics_parse "$calendarfile" |while read -r line; do
134     declare -A tag
135     case "$line" in
136       value*) eval "$line";;
137       tag*)   eval "$line";;
138       key*)
139         if [ -z "$key" ]; then
140           eval "$line"
141         else
142           [ -n "$value" ] && values[$key]="$value" || values[$key]='\r'
143           for t in ${(k)tag}; do
144             tags[${key}_$t]="$tag[$t]"
145           done
146           eval "$line"
147           if [ -n "$values[$key]" ]; then
148             n=0
149             while [ -n "$values[${key}${n}]" ]; do n=$(($n + 1)); done
150             key=$key$n
151           fi
152             unset value
153             unset tag
154         fi
155       ;;
156     esac
157   done
158   . ${_EXEC}/templates/edit_course.sh
159 }
160
161 case "$1" in
162   title)
163     echo "Kurse"
164   ;;
165   css)
166     . ${_EXEC}/templates/courses.css.sh
167   ;;
168   body)
169     . ${_EXEC}/templates/text_courses.sh
170     . ${_EXEC}/templates/courses.html.sh
171   ;;
172 esac
173