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