X-Git-Url: https://git.plutz.net/?p=confetti;a=blobdiff_plain;f=courses%2Flist.sh;fp=courses%2Flist.sh;h=a0eb6d16ef61318c8e45ee114964d1ef0a0e0d65;hp=0000000000000000000000000000000000000000;hb=057ad3bc6e2d4c7bcc5d93047b0426e7e608d25a;hpb=de8d4cf5570142a647bfe81f13fa87a73802e4e8 diff --git a/courses/list.sh b/courses/list.sh new file mode 100755 index 0000000..a0eb6d1 --- /dev/null +++ b/courses/list.sh @@ -0,0 +1,131 @@ +#!/bin/sh + +. "${_EXEC}"/pdiread.sh + +edit_card(){ + local cardfile="$_DATA/vcard/$1" + local tempfile card + + . $_EXEC/session_lock.sh + + if ! tempfile="$(CHECK_SLOCK "$cardfile")"; then + printf '[div .message %s]' "$(l10n "This card is not set up for editing within this session.")" + else + card="$(pdi_load "$tempfile")" + cat <<-EOF + [form .card #${cardfile##*/} action="/cards/update_card.sh" method="POST" + [input type="hidden" name="tid" value="$(transid ${tempfile})"] + [div .section .basic $( + edit_item "$card" N GENDER + [ "$(pdi_count "$card" NICKNAME)" -gt 0 ] \ + && edit_item "$card" NICKNAME + edit_item "$card" BDAY + edit_item "$card" X-ZACK-JOINDATE + [ "$(pdi_count "$card" X-ZACK-LEAVEDATE)" -gt 0 ] \ + && edit_item "$card" X-ZACK-LEAVEDATE + card_item "$card" SOUND PHOTO LOGO + )] + [div .section .phone $(edit_item "$card" TEL)] + [div .section .message $( + edit_item "$card" EMAIL + [ $(pdi_count "$card" IMPP) -gt 0 ] && edit_item "$card" IMPP + [ $(pdi_count "$card" URL ) -gt 0 ] && edit_item "$card" URL + )] + [div .section .address $(edit_item "$card" ADR)] + [div .section .note $(edit_item "$card" NOTE)] + [div .section .attendance + [h3 $(l10n course_attendance) ] $( + for course in "$_DATA"/ical/*.ics; do + printf '[label [input type="checkbox" name="attendance" value="%s" %s] %s]' \ + "${course##*/}" \ + "$(grep -qF "${course##*/} ${cardfile##*/}" "$_DATA/mappings/attendance" \ + && printf 'checked="checked"' + )" \ + "$(pdi_value "$(pdi_load "$course")" SUMMARY |unescape |HTML)" + done) + [h3 $(l10n CATEGORIES) ] $( + grep -xE '[^ ]+' "$_DATA"/mappings/categories |while read -r cat; do + printf '[label [input type="checkbox" name="attendance" value="%s" %s] %s]' \ + "$(HTML "$cat")" \ + "$(seq 1 $(pdi_count "$card" CATEGORIES) |while read c; do + pdi_value "$card" CATEGORIES $c |grep -qxF "$cat" \ + && printf 'checked="checked"' && break + done)" \ + "$(HTML "$cat")" + done) + ] + [div .control + [select .item name="newfield" + [option value="" disabled="disabled" selected="selected" $(l10n edit_addfieldtext)] + $(for f in NICKNAME EMAIL TEL IMPP ADR URL NOTE; do + printf '[option value="%s" %s] ' "$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)] + [input type="checkbox" #delete] [label .item for="delete" $(l10n edit_delete)] + [button .item type="submit" name="action" value="delete"] + [button .item type="submit" name="action" value="cancel" $(l10n edit_cancel)] + ] + [input type="hidden" name="UID" value="$(pdi_value "$card" UID |HTML)"] + [input type="hidden" name="card" value="${cardfile##*/}"] + ] + 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 " ${cardfile##*/}" "$_DATA/mappings/attendance" |while read each discard; do + printf '[li [a .item .attendance href="/courses#%s" ­%s]]' \ + "$each" \ + "$(pdi_value "$(pdi_load "$_DATA/ical/$each")" SUMMARY |unescape |HTML)" + done)] + $(cal_item "$card" CATEGORIES) + ] + [div .control + [a .item href="" $(l10n edit)] + ] + ] + EOF +} + +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}/courses/*.ics \ + | order_courses \ + | print_courses +}