]> git.plutz.net Git - confetti/blobdiff - pages/courses.sh
improved vcf parser (speed, security)
[confetti] / pages / courses.sh
index 14d1713c9eb8b3b471d402501cb3a3fe9f42a0fb..0fa5542f13efa1ceaafe7fa709e2d8e0236c467b 100755 (executable)
@@ -1,6 +1,6 @@
-#!/bin/sh
+#!/bin/zsh
 
-# Copyright 2014 Paul Hänsch
+# Copyright 2014, 2016 Paul Hänsch
 #
 # This file is part of Confetti.
 # 
@@ -53,14 +53,25 @@ listcourses() {
 list_attendance() {
   id="$1"
   sed -rn 's:'$id'\t(.+)$:\1:p' "$_DATA/mappings/attendance" |while read each; do
-    n_last="$(  sed -rn 's:^N(;.+)*\:([^;]*;){0} *([^;]*).*$:\3:p' "$_DATA/vcard/$each")"
-    n_first="$( sed -rn 's:^N(;.+)*\:([^;]*;){1} *([^;]*).*$:\3:p' "$_DATA/vcard/$each")"
-    n_middle="$(sed -rn 's:^N(;.+)*\:([^;]*;){2} *([^;]*).*$:\3:p' "$_DATA/vcard/$each")"
-    n_pre="$(   sed -rn 's:^N(;.+)*\:([^;]*;){3} *([^;]*).*$:\3:p' "$_DATA/vcard/$each")"
-    n_post="$(  sed -rn 's:^N(;.+)*\:([^;]*;){4} *([^;]*).*$:\3:p' "$_DATA/vcard/$each")"
-    byear="$(  sed -rn 's:^BDAY(;.+)*\:([0-9]{4})(-[0-9][0-9]){2}.*$:\2:p' "$_DATA/vcard/$each")"
-    aname="${n_pre} ${n_first} ${n_middle} ${n_last} ${n_post} (*${byear})"
-    echo "$each $aname" |tr -d '\r'
+    card="$_DATA/vcard/$each"
+    if [ -r "$card" ]; then
+      aname="$(sed -rn '
+          /^N(;.+)*:/{
+          h;
+          s;^N(\;.+)*:([^\;]*\;){3} *([^\;]*).*$;\3;p; g;
+          s;^N(\;.+)*:([^\;]*\;){1} *([^\;]*).*$;\3;p; g;
+          s;^N(\;.+)*:([^\;]*\;){2} *([^\;]*).*$;\3;p; g;
+          s;^N(\;.+)*:([^\;]*\;){0} *([^\;]*).*$;\3;p; g;
+          s;^N(\;.+)*:([^\;]*\;){4} *([^\;]*).*$;\3;p; g;
+          }' "$card" \
+        | sed -r ':X;N;$!bX; s;([\;\n\r,]| )+; ;g;; s;^ +| +$;;g;'
+      )"
+      fname="$(sed -rn 's;^FN(\;.+)*:(.+)\r?$;\2;g; s;([\;\n,]| )+; ;g;; s;^ +| +$;;g;' "$card")"
+      nname="$(sed -rn 's;^NICKNAME(\;.+)*:(.+)\r?$;\2;g; s;([\;\n,]| )+; ;g;; s;^ +| +$;;g;' "$card")"
+      byear="$(sed -rn 's:^BDAY(\;.+)*\:([0-9]{4})(-[0-9][0-9]){2}.*$:\2:p' "$_DATA/vcard/$each")"
+
+      printf '%s %s (*%04i)\n' "$each" "${aname:-${fname:-${nname}}}" "$byear"
+    fi
   done
 }
 
@@ -174,17 +185,3 @@ edit_course() {  #Parameter: Calendarfile
   done
   . ${_EXEC}/templates/edit_course.sh
 }
-
-case "$1" in
-  title)
-    echo "Kurse"
-  ;;
-  css)
-    . ${_EXEC}/templates/courses.css.sh
-  ;;
-  body)
-    . ${_EXEC}/templates/text_courses.sh
-    . ${_EXEC}/templates/courses.html.sh
-  ;;
-esac
-