]> git.plutz.net Git - confetti/blob - actions/generate_courselist.sh
Dirty: avoid some latex control characters
[confetti] / actions / generate_courselist.sh
1 #!/bin/zsh
2
3 pdflatex="$(where pdflatex |head -n1 || echo false)"
4 course="$_GET[\"course\"]"
5 fromdate=$_GET['fromdate']
6 fromdate=$(date -d "$fromdate" +%s)
7 [ -z "$fromdate" ] && fromdate=$(date +%s)
8
9 . ${_EXEC}/pages/courses.sh loadfunctions
10 . ${_EXEC}/pages/attendees.sh loadfunctions
11
12 tex_clean() { #in dire need for improvement
13   echo "$*" |tr -d '{&}\'
14 }
15
16
17 list_attendee() {  #Parameter: Cardfile
18   id="$1"
19   cardfile="$_DATA/vcard/${id}"
20   unset key
21
22   declare -A tags
23   declare -A values
24   vcf_parse "$cardfile" |while read -r line; do
25     declare -A tag
26     case "$line" in
27       value*) eval "$line";;
28       tag*)   eval "$line";;
29       key*)
30         if [ -z "$key" ]; then
31           eval "$line"
32         else
33           values[$key]="$(tex_clean "$value")"
34           for t in ${(k)tag}; do
35             tags[${key}_$t]="$tag[$t]"
36           done
37           eval "$line"
38           if [ -n "$values[$key]" ]; then
39             n=0
40             while [ -n "$values[$key$n]" ]; do n=$(($n + 1)); done
41             key=$key$n
42           fi
43           unset value
44           unset tag
45         fi
46       ;;
47     esac
48   done
49
50   tel=''
51   for n in TEL TEL{0..10}; do if (echo "$values[$n]" |grep -Eq '[0-9]'); then
52     [ -n "$tel" ] && tel="$tel\\newline $values[$n]" || tel="$values[$n]"
53   fi; done
54   note=''
55   for n in NOTE NOTE{0..10}; do if [ -n "$values[$n]" ]; then
56     [ -n "$note" ] && note="$note\\newline $values[$n]" || note="$values[$n]"
57   fi; done
58   echo -E "$values[FN] & $values[BDAY] & $tel & $note"
59 }
60
61 get_dates() {  #Parameter: Calendarfile
62   calendarfile="$_DATA/ical/$course"
63   unset key
64
65   declare -A tags
66   declare -A values
67   ics_parse "$calendarfile" |while read -r line; do
68     declare -A tag
69     case "$line" in
70       value*) eval "$line";;
71       tag*)   eval "$line";;
72       key*)
73         if [ -z "$key" ]; then
74           eval "$line"
75         else
76           values[$key]="$(tex_clean "$value")"
77           for t in ${(k)tag}; do
78             tags[${key}_$t]="$tag[$t]"
79           done
80           eval "$line"
81           if [ -n "$values[$key]" ]; then
82             n=0
83             while [ -n "$values[$key$n]" ]; do n=$(($n + 1)); done
84             key=$key$n
85           fi
86           unset value
87           unset tag
88         fi
89       ;;
90     esac
91   done
92
93   dtstart="$values[DTSTART]"
94   [ -z "$dtstart" ] && dtstart=$(date +%Y%m%dT%H%M%S)
95   echo "$dtstart" |case "$dtstart" in
96     *Z)    sed -rn 's:^([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2})([0-9]{2})([0-9]{2})Z$:\1-\2-\3 \4\:\5\:\6 UTC:p';;
97     TZID*) sed -rn 's:^TZID=(.+)\:([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2})([0-9]{2})([0-9]{2})$:TZ="\1" \2-\3-\4 \5\:\6\:\7:p';;
98     *)     sed -rn 's:^([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2})([0-9]{2})([0-9]{2})$:\1-\2-\3 \4\:\5\:\6:p';;
99   esac |read dts_date
100   rrule="$values[RRULE]"
101   rr_int="$(echo $rrule |sed -rn 's:^.*INTERVAL=([0-9]+)(;.*)?$:\1:p')"
102   rr_freq="$(echo $rrule |sed -rn 's:^.*FREQ=(YEARLY|MONTHLY|WEEKLY|DAILY)(;.*)?$:\1:p')"
103   case "$rr_freq" in;
104     YEARLY) rec="$rr_int year";;
105     MONTHLY) rec="$rr_int month";;
106     DAILY) rec="$rr_int day";;
107     *) rec="$rr_int week";;
108   esac
109
110   next_date="$dts_date"
111   n=10
112   while [ $n -gt 0 ]; do
113     if [ "$(date -d "$next_date" +%s)" -gt "$(date +%s)" ]; then
114       dtlist="$dtlist & $(date -d "$next_date" +"%d. %b.")"
115       n=$(($n - 1))
116     fi
117     next_date="$(date -d "$next_date + $rec" +%Y-%m-%d)"
118   done
119
120   echo "$dtlist"
121 }
122
123 if [ -r "${_DATA}/ical/${course}" ]; then
124   . ${_EXEC}/templates/course_print.sh >"${_DATA}/temp/courselist_${course}.tex"
125   [ -e "${_DATA}/temp/courselist_${course}.pdf" ] && rm "${_DATA}/temp/courselist_${course}.pdf"
126   "$pdflatex" -halt-on-error -output-directory "${_DATA}/temp/" "${_DATA}/temp/courselist_${course}.tex" |debug >/dev/null
127 fi
128 if [ -r "${_DATA}/temp/courselist_${course}.pdf" ]; then
129   echo 'Content-Type: application/x-pdf\n'
130   cat "${_DATA}/temp/courselist_${course}.pdf"
131 fi