X-Git-Url: https://git.plutz.net/?p=confetti;a=blobdiff_plain;f=actions%2Fgenerate_courselist.sh;fp=actions%2Fgenerate_courselist.sh;h=640e3f182e95667f3fff43d5192d7e334bfdb3a3;hp=0000000000000000000000000000000000000000;hb=804ecf70ec21f803334b09cc223aedb41d51c610;hpb=002b2558e02b14bf2dbcd3ba5ec039d22bac2d69 diff --git a/actions/generate_courselist.sh b/actions/generate_courselist.sh new file mode 100755 index 0000000..640e3f1 --- /dev/null +++ b/actions/generate_courselist.sh @@ -0,0 +1,126 @@ +#!/bin/zsh + +pdflatex="$(where pdflatex |head -n1 || echo false)" +course="$_GET[\"course\"]" +fromdate=$_GET['fromdate'] +fromdate=$(date -d "$fromdate" +%s) +[ -z "$fromdate" ] && fromdate=$(date +%s) + +. ${_EXEC}/pages/courses.sh loadfunctions +. ${_EXEC}/pages/attendees.sh loadfunctions + +list_attendee() { #Parameter: Cardfile + id="$1" + cardfile="$_DATA/vcard/${id}" + unset key + + declare -A tags + declare -A values + vcf_parse "$cardfile" |while read -r line; do + declare -A tag + case "$line" in + value*) eval "$line";; + tag*) eval "$line";; + key*) + if [ -z "$key" ]; then + eval "$line" + else + values[$key]="$value" + for t in ${(k)tag}; do + tags[${key}_$t]="$tag[$t]" + done + eval "$line" + if [ -n "$values[$key]" ]; then + n=0 + while [ -n "$values[$key$n]" ]; do n=$(($n + 1)); done + key=$key$n + fi + unset value + unset tag + fi + ;; + esac + done + + tel='' + for n in TEL TEL{0..10}; do if (echo "$values[$n]" |grep -Eq '[0-9]'); then + [ -n "$tel" ] && tel="$tel\\newline $values[$n]" || tel="$values[$n]" + fi; done + note='' + for n in NOTE NOTE{0..10}; do if [ -n "$values[$n]" ]; then + [ -n "$note" ] && note="$note\\newline $values[$n]" || note="$values[$n]" + fi; done + echo -E "$values[FN] & $values[BDAY] & $tel & $note" +} + +get_dates() { #Parameter: Calendarfile + calendarfile="$_DATA/ical/$course" + unset key + + declare -A tags + declare -A values + ics_parse "$calendarfile" |while read -r line; do + declare -A tag + case "$line" in + value*) eval "$line";; + tag*) eval "$line";; + key*) + if [ -z "$key" ]; then + eval "$line" + else + values[$key]="$value" + for t in ${(k)tag}; do + tags[${key}_$t]="$tag[$t]" + done + eval "$line" + if [ -n "$values[$key]" ]; then + n=0 + while [ -n "$values[$key$n]" ]; do n=$(($n + 1)); done + key=$key$n + fi + unset value + unset tag + fi + ;; + esac + done + + dtstart="$values[DTSTART]" + [ -z "$dtstart" ] && dtstart=$(date +%Y%m%dT%H%M%S) + echo "$dtstart" |case "$dtstart" in + *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';; + 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';; + *) 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';; + esac |read dts_date + rrule="$values[RRULE]" + rr_int="$(echo $rrule |sed -rn 's:^.*INTERVAL=([0-9]+)(;.*)?$:\1:p')" + rr_freq="$(echo $rrule |sed -rn 's:^.*FREQ=(YEARLY|MONTHLY|WEEKLY|DAILY)(;.*)?$:\1:p')" + case "$rr_freq" in; + YEARLY) rec="$rr_int year";; + MONTHLY) rec="$rr_int month";; + DAILY) rec="$rr_int day";; + *) rec="$rr_int week";; + esac + + next_date="$dts_date" + n=10 + while [ $n -gt 0 ]; do + if [ "$(date -d "$next_date" +%s)" -gt "$(date +%s)" ]; then + dtlist="$dtlist & $(date -d "$next_date" +"%d. %b.")" + n=$(($n - 1)) + fi + next_date="$(date -d "$next_date + $rec" +%Y-%m-%d)" + done + + echo "$dtlist" +} + +if [ -r "${_DATA}/ical/${course}" ]; then + . ${_EXEC}/templates/course_print.sh >"${_DATA}/temp/courselist_${course}.tex" + [ -e "${_DATA}/temp/courselist_${course}.pdf" ] && rm "${_DATA}/temp/courselist_${course}.pdf" + "$pdflatex" -halt-on-error -output-directory "${_DATA}/temp/" "${_DATA}/temp/courselist_${course}.tex" |debug >/dev/null +fi +if [ -r "${_DATA}/temp/courselist_${course}.pdf" ]; then + echo 'Content-Type: application/x-pdf\n' + cat "${_DATA}/temp/courselist_${course}.pdf" +fi