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