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