escape certain characters before passing to eval (\, $, and `)
[confetti] / pages / courses.sh
index 9610ec2..6cb32e7 100755 (executable)
@@ -1,16 +1,61 @@
 #!/bin/sh
 
+[ -z "$_GET[\"order\"]" ] && _GET["order"]=DOW
+
+listcards() {
+  ls -1 ${_DATA}/vcard/*vcf 2>/dev/null |while read file; do
+    fn=$(sed -rn 's:^N(;.+)*\:([^;]*;){1} *([^;]*).*$:\3:p' "$file")
+    echo "$fn\t$file"
+  done |sort |sed -r 's:^.*\t(.*/)([^/]+)$:\2:'
+}
+
+
 listcourses() {
   case "$_GET[\"filtertype\"]" in
     *) ls -1 ${_DATA}/ical/*ics 2>/dev/null
       ;;
   esac |case "$_GET[\"order\"]" in
+    DOW)
+      while read file; do
+        icstime="$(sed -rn 's:^DTSTART\:(TZID=.*\:)?([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2})([0-9]{2})([0-9]{2})Z?\r$:\2-\3-\4 \5\:\6\:\7:p' "$file")"
+        echo "$(date -d "$icstime" "+%u %H%M%S")\t$file"
+      done
+      ;;
+    TOD)
+      while read file; do
+        icstime="$(sed -rn 's:^DTSTART\:(TZID=.*\:)?([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2})([0-9]{2})([0-9]{2})Z?\r$:\2-\3-\4 \5\:\6\:\7:p' "$file")"
+        echo "$(date -d "$icstime" +%H%M%S)\t$file"
+      done
+      ;;
     *)
       sed -r 's:^.*$:x\t&:'
       ;;
   esac |sort |sed -r 's:^.*\t(.*/)([^/]+)$:\2:'
 }
 
+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'
+  done
+}
+
+course_mail() {
+  id="$1"
+  coursemail=""
+  sed -rn 's:'$id'\t(.+)$:\1:p' "$_DATA/mappings/attendance" |while read each; do
+    coursemail="$coursemail$(sed -rn 's:^EMAIL(;.+)*\:(.+)\r$:\2,:p' "$_DATA/vcard/$each")"
+  done
+  echo "$coursemail"
+}
+
 ics_parse() {
   tr -d '\n' <"$1" |sed -r 's:\r ::g;s:\r:\n:g' |tr -d '\r' \
   | sed -r 's:^([^;\:]+)(;[^"\:]+|;"[^"]+")*\:(.*)$:key="\1"\nvalue="\3"\ntag=\2:g' \