]> git.plutz.net Git - confetti/blobdiff - courses/list.sh
merge from cgilite
[confetti] / courses / list.sh
diff --git a/courses/list.sh b/courses/list.sh
new file mode 100755 (executable)
index 0000000..e9ae7bc
--- /dev/null
@@ -0,0 +1,120 @@
+#!/bin/sh
+
+. "${_EXEC}"/pdiread.sh
+
+SUP_FIELDS="COMMENT"
+
+edit_course(){
+  local coursefile="$_DATA/ical/$1" 
+  local tempfile course
+
+  . $_EXEC/session_lock.sh
+
+  if ! tempfile="$(CHECK_SLOCK "$coursefile")"; then
+    printf '[div .message %s]' "$(l10n "This course is not set up for editing within this session.")"
+  else
+    course="$(pdi_load "$tempfile")"
+    cat <<-EOF
+       [form .course #${coursefile##*/} action="/courses/update_course.sh" method="POST"
+          [input type="hidden" name="course" value="${coursefile##*/}"]
+         [input type="hidden" name="tid" value="$(transid ${tempfile})"]
+          [div .section .basic . $(
+            edit_item "$course" SUMMARY COMMENT
+          )]
+          [div .section .dtstart . $(
+            edit_item "$course" DTSTART
+          )]
+          [div .section .recur . $(
+            edit_item "$course" RRULE
+          )]
+          [div .section .attendance . $(
+            edit_item "$course" attendance
+          )]
+          [div .control
+            [!-- select .item name=newfield
+              [option disabled="disabled" selected . $(l10n edit_addfieldtext)]
+              $(for f in $SUP_FIELDS; do printf '[option value="%s" . %s]\n' "$f" "$(l10n "$f")"; done)
+            ]
+            [button .item type="submit" name="action" value="addfield" . $(l10n edit_addfield) --]
+            [button .item type="submit" name="action" value="update"   . $(l10n edit_update)]
+            [button .item type="submit" name="action" value="cancel"   . $(l10n edit_cancel)]
+            [div .item .delete label="$(l10n edit_delete)"
+              [input type="checkbox" #delete]
+              [label for="delete" $(l10n edit_delete)]
+              [button type="submit" name="action" value="delete" $(l10n edit_delete)]
+            ]
+          ]
+       ]
+       EOF
+  fi
+}
+
+print_course(){
+  local coursefile="$1"
+  local course="$(pdi_load "$coursefile")"
+  cat <<-EOF
+    [div .course #${coursefile##*/}
+      [div .section .basic . $(
+        cal_item "$course" SUMMARY DTSTART RRULE
+      )]
+      [div .section .COMMENT   . $(cal_item "$course" COMMENT)]
+      [div .section .attendance [h3 $(l10n course_attendance) ] [ul . 
+        $(grep -F "${coursefile##*/}   " "$_DATA/mappings/attendance" |while read discard each; do
+          printf '[li [a .item .attendance href="/cards/#%s" . %s]]\n' \
+                 "$each" \
+                 "$(pdi_value "$(pdi_load "$_DATA/vcard/$each")" FN |unescape |HTML)"
+        done |sort -k7)]
+      ]
+      [div .control
+        [a .item href="/courses/edit_course.sh?course=${coursefile##*/}" $(l10n edit)]
+        [a .item href="/courses/export_pdf.sh?course=${coursefile##*/}" target="blank" $(l10n courselist)]
+        [a .item href="/courses/export_ical.sh?course=${coursefile##*/}" $(l10n ics_export)]
+        [a .item href="mailto:zack@vuesch.org?bcc=$(course_mail "${coursefile##*/}" |HTML)" $(l10n course_mail)]
+      ]
+    ]
+       EOF
+}
+
+course_mail() {
+  course="$1"
+  grep -F "${course}   " "$_DATA/mappings/attendance" |while read junk card; do
+    cat "${_DATA}/vcard/${card}"
+  done \
+  | pdi_load - \
+  | sed -nE 's;^EMAIL(\;[^:]*)*:(.+)\r?$;\2,;p' \
+  | tr -d \\n \
+  | unescape
+}
+
+print_courses(){
+  local calfile cachefile date size name ldate=0 lsize lname
+
+  while read calfile; do
+    cachefile="${_DATA}/cache/${calfile##*/}.cache"
+    if [ -s "$cachefile" -a "$cachefile" -nt "$calfile" ]; then
+      cat "$cachefile"
+    else
+      print_course "$calfile" |tee "$cachefile"
+    fi
+  done
+}
+
+order_courses() {
+  local calfile course
+
+  while read calfile; do
+    icstime="$(pdi_value "$(pdi_load "$calfile")" DTSTART |cal_date)"
+    case $order in
+      DOW) printf '%s  %s\n' "$(date -d "$icstime" "+%u %H:%M:%S")" "$calfile";;
+      TOD) printf '%s  %s\n' "$(date -d "$icstime" "+%H:%M:%S")" "$calfile";;
+    esac
+  done \
+  | sort \
+  | sed -E 's;^.*\t;;g'
+}
+
+list_courses(){
+  printf '%s\n' ${_DATA}/ical/*.ics \
+  | order_courses \
+  | print_courses
+}