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