X-Git-Url: https://git.plutz.net/?p=confetti;a=blobdiff_plain;f=courses%2Flist.sh;fp=courses%2Flist.sh;h=e9ae7bca263506c1a71f4f3b9c0a72cc0d526ee2;hp=0000000000000000000000000000000000000000;hb=76c1e7bff1a8604ef2ef7da5d274d0db0e639139;hpb=90288ab07bb1ec83a91581fadc674a87a250a853 diff --git a/courses/list.sh b/courses/list.sh new file mode 100755 index 0000000..e9ae7bc --- /dev/null +++ b/courses/list.sh @@ -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 +}