]> git.plutz.net Git - lobster/blob - courses/list.sh
global and improved pdi escaping functions
[lobster] / courses / list.sh
1 #!/bin/sh
2
3 . "${_EXEC}"/pdiread.sh
4
5 edit_card(){
6   local coursefile="$_DATA/courses/$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="/cards/update_course.sh" method="POST"
17           [input type="hidden" name="tid" value="$(transid ${tempfile})"]
18         ]
19         EOF
20   fi
21 }
22
23 print_course(){
24   local coursefile="$1"
25   local course="$(pdi_load "$coursefile")"
26   cat <<-EOF
27     [div .course #${coursefile##*/}
28       [div .section .basic &shy;$(
29         cal_item "$course" SUMMARY DTSTART RRULE
30       )]
31       [div .section .COMMENT   &shy;$(cal_item "$course" COMMENT)]
32       [div .section .attendance [h3 $(l10n course_attendance) ] [ul &shy;
33         $(grep -F "     ${cardfile##*/}" "$_DATA/mappings/attendance" |while read each discard; do
34           printf '[li [a .item .attendance href="/courses#%s" &shy;%s]]' \
35                  "$each" \
36                  "$(pdi_value "$(pdi_load "$_DATA/ical/$each")" SUMMARY |unescape |HTML)"
37         done)]
38       ]
39       [div .control
40         [a .item href="/courses/edit_course.sh?course=${coursefile##*/}" $(l10n edit)]
41         [a .item href="/courses/export_pdf.sh?course=${coursefile##*/}" target="blank" $(l10n courselist)]
42         [a .item href="/courses/export_ical.sh?course=${coursefile##*/}" $(l10n ics_export)]
43         [a .item href="mailto:zack@vuesch.org?bcc=$(course_mail "${coursefile##*/}")" $(l10n course_mail)]
44       ]
45     ]
46         EOF
47 }
48
49 print_courses(){
50   local calfile cachefile date size name ldate=0 lsize lname
51
52   while read calfile; do
53     cachefile="${_DATA}/cache/${calfile##*/}.cache"
54     if [ -s "$cachefile" -a "$cachefile" -nt "$calfile" ]; then
55       cat "$cachefile"
56     else
57       print_course "$calfile" |tee "$cachefile"
58     fi
59   done
60 }
61
62 order_courses() {
63   local calfile course
64
65   while read calfile; do
66     icstime="$(pdi_value "$(pdi_load "$calfile")" DTSTART |cal_date)"
67     case $order in
68       DOW) printf '%s   %s\n' "$(date -d "$icstime" "+%u %H:%M:%S")" "$calfile";;
69       TOD) printf '%s   %s\n' "$(date -d "$icstime" "+%H:%M:%S")" "$calfile";;
70     esac
71   done \
72   | sort \
73   | sed -E 's;^.*\t;;g'
74 }
75
76 list_courses(){
77   printf '%s\n' ${_DATA}/courses/*.ics \
78   | order_courses \
79   | print_courses
80 }