]> git.plutz.net Git - confetti/blob - pages/courses.sh
display line breaks in comments
[confetti] / pages / courses.sh
1 #!/bin/sh
2
3 [ -z "$_GET[\"order\"]" ] && _GET["order"]=DOW
4
5 listcourses() {
6   case "$_GET[\"filtertype\"]" in
7     *) ls -1 ${_DATA}/ical/*ics 2>/dev/null
8       ;;
9   esac |case "$_GET[\"order\"]" in
10     DOW)
11       while read file; do
12         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")"
13         echo "$(date -d "$icstime" "+%u %H%M%S")\t$file"
14       done
15       ;;
16     TOD)
17       while read file; do
18         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")"
19         echo "$(date -d "$icstime" +%H%M%S)\t$file"
20       done
21       ;;
22     *)
23       sed -r 's:^.*$:x\t&:'
24       ;;
25   esac |sort |sed -r 's:^.*\t(.*/)([^/]+)$:\2:'
26 }
27
28 ics_parse() {
29   tr -d '\n' <"$1" |sed -r 's:\r ::g;s:\r:\n:g' |tr -d '\r' \
30   | sed -r 's:^([^;\:]+)(;[^"\:]+|;"[^"]+")*\:(.*)$:key="\1"\nvalue="\3"\ntag=\2:g' \
31   | while read -r line; do
32     case "$line" in
33       key=*) echo -E "$line"
34         ;;
35       value=*) echo -E "$line"
36         ;;
37       tag=*) ot=''
38              echo -E "$line" \
39              | sed -r 's:^tag=::;s:\;([A-Z+_-]+="[^"]+"|[A-Z+_-]+=[^\;]+):\n\1:g;' \
40              | sed -r 's:([A-Z+_-]+)="?(.*)"?:tag\[\1\]="\2":g' \
41              | sed -r '/^ *$/d' \
42              | sort |while read -r tag; do
43                nt="$(echo -E "$tag" |sed -r 's:^tag\[([A-Z+_-]+)\]="(.*)"$:\1:')"
44                nv="$(echo -E "$tag" |sed -r 's:^tag\[([A-Z+_-]+)\]="(.*)"$:\2:')"
45                [ "$nt" = "$ot" ] && vl="$nv,$vl" || vl="$nv"
46                echo -E "tag[$nt]=\"$vl\""
47                ot="$nt"
48              done
49         ;;
50     esac
51   done
52 }
53
54 view_course() {  #Parameter: Calendarfile
55   id="$1"
56   calendarfile="$_DATA/ical/${id}"
57   cachefile="$_DATA/cache/${id}.cache"
58   unset key
59   if [ "$cachefile" -nt "$calendarfile" ]; then
60     cat "$cachefile"
61   else
62     declare -A tags
63     declare -A values
64     ics_parse "$calendarfile" |while read -r line; do
65       declare -A tag
66       case "$line" in
67         value*) eval "$line";;
68         tag*)   eval "$line";;
69         key*)
70           if [ -z "$key" ]; then
71             eval "$line"
72           else
73             values[$key]="$value"
74             for t in ${(k)tag}; do
75               tags[${key}_$t]="$tag[$t]"
76             done
77             eval "$line"
78             if [ -n "$values[$key]" ]; then
79               n=0
80               while [ -n "$values[$key$n]" ]; do n=$(($n + 1)); done
81               key=$key$n
82             fi
83             unset value
84             unset tag
85           fi
86         ;;
87       esac
88     done
89     . ${_EXEC}/templates/view_course.sh |tee "$cachefile"
90   fi
91 }
92
93 edit_course() {  #Parameter: Calendarfile
94   id="$1"
95   calendarfile="$_DATA/ical/$id"
96   tempfile="$_DATA/temp/$id"
97   [ -f "$tempfile" ] && calendarfile="$tempfile"
98   unset key
99
100   declare -A tags
101   declare -A values
102   ics_parse "$calendarfile" |while read -r line; do
103     declare -A tag
104     case "$line" in
105       value*) eval "$line";;
106       tag*)   eval "$line";;
107       key*)
108         if [ -z "$key" ]; then
109           eval "$line"
110         else
111           [ -n "$value" ] && values[$key]="$value" || values[$key]='\r'
112           for t in ${(k)tag}; do
113             tags[${key}_$t]="$tag[$t]"
114           done
115           eval "$line"
116           if [ -n "$values[$key]" ]; then
117             n=0
118             while [ -n "$values[${key}${n}]" ]; do n=$(($n + 1)); done
119             key=$key$n
120           fi
121             unset value
122             unset tag
123         fi
124       ;;
125     esac
126   done
127   . ${_EXEC}/templates/edit_course.sh
128 }
129
130 case "$1" in
131   title)
132     echo "Kurse"
133   ;;
134   css)
135     . ${_EXEC}/templates/courses.css.sh
136   ;;
137   body)
138     . ${_EXEC}/templates/text_courses.sh
139     . ${_EXEC}/templates/courses.html.sh
140   ;;
141 esac
142