]> git.plutz.net Git - confetti/blobdiff - actions/generate_courselist.sh
introduce combined filter engine
[confetti] / actions / generate_courselist.sh
index 2b6b9ea2c7e2b36848b864c62ca0aaae36bbbfc4..07fb0bbb79bf1f19c94afa7a4f0c86b345aa79de 100755 (executable)
@@ -1,94 +1,70 @@
 #!/bin/zsh
 
+# Copyright 2014, 2016 Paul Hänsch
+#
+# This file is part of Confetti.
+# 
+# Confetti is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+# 
+# Confetti is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+# 
+# You should have received a copy of the GNU Affero General Public License
+# along with Confetti.  If not, see <http://www.gnu.org/licenses/>. 
+
 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 '{&}\'
+  echo "$*" |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' "$fullname" "$values[BDAY]" "$tel" "$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)
@@ -100,7 +76,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";;
@@ -124,6 +100,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'