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