add field drop down entry
[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 .select_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="delete"   . $(l10n edit_delete)]
41             [button .item type="submit" name="action" value="cancel"   . $(l10n edit_cancel)]
42           ]'
43         ]
44         EOF
45   fi
46 }
47
48 print_course(){
49   local coursefile="$1"
50   local course="$(pdi_load "$coursefile")"
51   cat <<-EOF
52     [div .course #${coursefile##*/}
53       [div .section .basic . $(
54         cal_item "$course" SUMMARY DTSTART RRULE
55       )]
56       [div .section .COMMENT   . $(cal_item "$course" COMMENT)]
57       [div .section .attendance [h3 $(l10n course_attendance) ] [ul . 
58         $(grep -F "${coursefile##*/}    " "$_DATA/mappings/attendance" |while read discard each; do
59           printf '[li [a .item .attendance href="/cards/#%s" . %s]]\n' \
60                  "$each" \
61                  "$(pdi_value "$(pdi_load "$_DATA/vcard/$each")" FN |unescape |HTML)"
62         done |sort -k7)]
63       ]
64       [div .control
65         [a .item href="/courses/edit_course.sh?course=${coursefile##*/}" $(l10n edit)]
66         [a .item href="/courses/export_pdf.sh?course=${coursefile##*/}" target="blank" $(l10n courselist)]
67         [a .item href="/courses/export_ical.sh?course=${coursefile##*/}" $(l10n ics_export)]
68         [a .item href="mailto:zack@vuesch.org?bcc=$(course_mail "${coursefile##*/}" |HTML)" $(l10n course_mail)]
69       ]
70     ]
71         EOF
72 }
73
74 course_mail() {
75   course="$1"
76   grep -F "${course}    " "$_DATA/mappings/attendance" |while read junk card; do
77     cat "${_DATA}/vcard/${card}"
78   done \
79   | pdi_load - \
80   | sed -rn 's;^EMAIL(\;[^:]*)*:(.+)\r?$;\2,;p' \
81   | tr -d \\n \
82   | unescape
83 }
84
85 print_courses(){
86   local calfile cachefile date size name ldate=0 lsize lname
87
88   while read calfile; do
89     cachefile="${_DATA}/cache/${calfile##*/}.cache"
90     if [ -s "$cachefile" -a "$cachefile" -nt "$calfile" ]; then
91       cat "$cachefile"
92     else
93       print_course "$calfile" |tee "$cachefile"
94     fi
95   done
96 }
97
98 order_courses() {
99   local calfile course
100
101   while read calfile; do
102     icstime="$(pdi_value "$(pdi_load "$calfile")" DTSTART |cal_date)"
103     case $order in
104       DOW) printf '%s   %s\n' "$(date -d "$icstime" "+%u %H:%M:%S")" "$calfile";;
105       TOD) printf '%s   %s\n' "$(date -d "$icstime" "+%H:%M:%S")" "$calfile";;
106     esac
107   done \
108   | sort \
109   | sed -E 's;^.*\t;;g'
110 }
111
112 list_courses(){
113   printf '%s\n' ${_DATA}/ical/*.ics \
114   | order_courses \
115   | print_courses
116 }