X-Git-Url: https://git.plutz.net/?p=confetti;a=blobdiff_plain;f=actions%2Fgenerate_courselist.sh;h=5b3a32b4315825921c65f3397c3a85abf60807f4;hp=afa43874864943db745756c15b77f39c4e0434df;hb=c552e0b51dd1d27ef7ce042c074b9928cfc5685d;hpb=1e8f35fa92c610b540cbe365e2231194b58e0cc0 diff --git a/actions/generate_courselist.sh b/actions/generate_courselist.sh index afa4387..5b3a32b 100755 --- a/actions/generate_courselist.sh +++ b/actions/generate_courselist.sh @@ -1,6 +1,6 @@ #!/bin/zsh -# Copyright 2014 Paul Hänsch +# Copyright 2014, 2016 Paul Hänsch # # This file is part of Confetti. # @@ -18,94 +18,55 @@ # along with Confetti. If not, see . pdflatex="$(where pdflatex |head -n1 || echo false)" -course="$_GET[\"course\"]" -fromdate=$_GET['fromdate'] -fromdate=$(date -d "$fromdate" +%s) +course="${_GET[course]}" +fromdate="${_GET[fromdate]}" +fromdate="$(date -d "$fromdate" +%s)" 2>/dev/null [ -z "$fromdate" ] && fromdate=$(date +%s) -. ${_EXEC}/pages/courses.sh loadfunctions -. ${_EXEC}/pages/attendees.sh loadfunctions +. ${_EXEC}/pages/courses.sh +. ${_EXEC}/pages/cards.sh tex_clean() { #in dire need for improvement - echo "$*" |tr -d '{&}\' + printf %s "$*" |tr -d '{&}\\' } 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]="$(tex_clean "$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" + if [ -r "$cardfile" ]; then + vcf_parse "$cardfile" + + n=$(printf %s "$values[N]" \ + | sed -rn 's:^([^;]*)(;[^;]*)(;[^;]*)?(;[^;]*)?(;[^;]*)?$:\4 \2 \3 \1 \5:gp' \ + | sed -r 's:,: :;s:;: :g;s: +: :g;s:^ $::;' + ) + fullname="${n:-${values[FN]:-${values[NICKNAME]}}}" + + 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 + printf '%s & %s & %s & %s\n' \ + "$(tex_clean $fullname)" "$(tex_clean $values[BDAY])" "$(tex_clean $tel)" "$(tex_clean $note)" \ + + | sed -r ':X;N;$!bX; s;\n;\\newline ;g' + fi } 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]="$(tex_clean "$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 + ics_parse "$calendarfile" dtstart="$values[DTSTART]" [ -z "$dtstart" ] && dtstart=$(date +%Y%m%dT%H%M%S) @@ -117,7 +78,7 @@ get_dates() { #Parameter: Calendarfile 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; + case "$rr_freq" in YEARLY) rec="$rr_int year";; MONTHLY) rec="$rr_int month";; DAILY) rec="$rr_int day";; @@ -141,6 +102,7 @@ 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 + "$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'