implement course edit and updates
[confetti] / courses / list.sh
1 #!/bin/sh
2
3 . "${_EXEC}"/pdiread.sh
4
5 edit_course(){
6   local coursefile="$_DATA/ical/$1" 
7   local tempfile course
8
9   . $_EXEC/session_lock.sh
10
11   if ! tempfile="$(CHECK_SLOCK "$coursefile")"; then
12     printf '[div .message %s]' "$(l10n "This course is not set up for editing within this session.")"
13   else
14     course="$(pdi_load "$tempfile")"
15     cat <<-EOF
16         [form .course #${coursefile##*/} action="/courses/update_course.sh" method="POST"
17           [input type="hidden" name="course" value="${coursefile##*/}"]
18           [input type="hidden" name="tid" value="$(transid ${tempfile})"]
19           [div .section .basic . $(
20             edit_item "$course" SUMMARY COMMENT
21           )]
22           [div .section .dtstart . $(
23             edit_item "$course" DTSTART
24           )]
25           [div .section .recur . $(
26             edit_item "$course" RRULE
27           )]
28           [div .section .select_attendance . $(
29             edit_item "$course" attendance
30           )]
31           [div .control
32             [select .item name=newfield
33               [option disabled="disabled" selected . $(l10n edit_addfieldtext)]
34               $(for f in $SUP_FIELDS; do printf '[option value="%s" . %s]\n' "$f" "$(l10n "$f")"; done)
35             ]
36             [button .item type="submit" name="action" value="addfield" . $(l10n edit_addfield)]
37             [button .item type="submit" name="action" value="update"   . $(l10n edit_update)]
38             [button .item type="submit" name="action" value="delete"   . $(l10n edit_delete)]
39             [button .item type="submit" name="action" value="cancel"   . $(l10n edit_cancel)]
40           ]'
41         ]
42         EOF
43   fi
44 }
45
46 print_course(){
47   local coursefile="$1"
48   local course="$(pdi_load "$coursefile")"
49   cat <<-EOF
50     [div .course #${coursefile##*/}
51       [div .section .basic . $(
52         cal_item "$course" SUMMARY DTSTART RRULE
53       )]
54       [div .section .COMMENT   . $(cal_item "$course" COMMENT)]
55       [div .section .attendance [h3 $(l10n course_attendance) ] [ul . 
56         $(grep -F "${coursefile##*/}    " "$_DATA/mappings/attendance" |while read discard each; do
57           printf '[li [a .item .attendance href="/cards/#%s" . %s]]\n' \
58                  "$each" \
59                  "$(pdi_value "$(pdi_load "$_DATA/vcard/$each")" FN |unescape |HTML)"
60         done |sort -k7)]
61       ]
62       [div .control
63         [a .item href="/courses/edit_course.sh?course=${coursefile##*/}" $(l10n edit)]
64         [a .item href="/courses/export_pdf.sh?course=${coursefile##*/}" target="blank" $(l10n courselist)]
65         [a .item href="/courses/export_ical.sh?course=${coursefile##*/}" $(l10n ics_export)]
66         [a .item href="mailto:zack@vuesch.org?bcc=$(course_mail "${coursefile##*/}" |HTML)" $(l10n course_mail)]
67       ]
68     ]
69         EOF
70 }
71
72 course_mail() {
73   course="$1"
74   grep -F "${course}    " "$_DATA/mappings/attendance" |while read junk card; do
75     cat "${_DATA}/vcard/${card}"
76   done \
77   | pdi_load - \
78   | sed -rn 's;^EMAIL(\;[^:]*)*:(.+)\r?$;\2,;p' \
79   | tr -d \\n \
80   | unescape
81 }
82
83 print_courses(){
84   local calfile cachefile date size name ldate=0 lsize lname
85
86   while read calfile; do
87     cachefile="${_DATA}/cache/${calfile##*/}.cache"
88     if [ -s "$cachefile" -a "$cachefile" -nt "$calfile" ]; then
89       cat "$cachefile"
90     else
91       print_course "$calfile" |tee "$cachefile"
92     fi
93   done
94 }
95
96 order_courses() {
97   local calfile course
98
99   while read calfile; do
100     icstime="$(pdi_value "$(pdi_load "$calfile")" DTSTART |cal_date)"
101     case $order in
102       DOW) printf '%s   %s\n' "$(date -d "$icstime" "+%u %H:%M:%S")" "$calfile";;
103       TOD) printf '%s   %s\n' "$(date -d "$icstime" "+%H:%M:%S")" "$calfile";;
104     esac
105   done \
106   | sort \
107   | sed -E 's;^.*\t;;g'
108 }
109
110 list_courses(){
111   printf '%s\n' ${_DATA}/ical/*.ics \
112   | order_courses \
113   | print_courses
114 }