]> git.plutz.net Git - confetti/blob - cards/export_csv.sh
a1004f7083bd4c84231c65dbcb409fb9ab2ec699
[confetti] / cards / export_csv.sh
1 #!/bin/sh
2
3 . $_EXEC/pdiread.sh
4 . $_EXEC/cards/l10n.sh
5 . $_EXEC/cards/list.sh
6
7 upcase=' y;abcdefghijklmnopqrstuvwxyzäöüé;ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜÉ;; '
8
9 filter="$(GET f)"
10 order="$(GET o)"
11
12 [ "$order" ] || order=firstname
13
14 list_attendance() {
15   grep -F "     ${cardfile##*/}" "$_DATA/mappings/attendance" |while read each discard; do
16     { pdi_value "$(pdi_load "$_DATA/ical/$each")" SUMMARY || l10n "(unnamed course)"; } |unescape
17   done \
18   | sed -E 's;";\\";g;'
19 }
20
21 list_item() {
22   local item="$1"
23   local cnt="$(pdi_count "$card" "$item")"
24   local ret=''
25   
26   seq 1 $cnt |while read n; do case $item in
27     TEL)
28       tel="$(pdi_value "$card" "$item" "$n" |unescape)"
29       [ "$tel" ] && printf '%s: %s\n' "$(l10n "TYPE=$(pdi_attrib "$card" "$item" "$n" TYPE)")" "$tel"
30       ;;
31     GENDER)
32       gen="$(pdi_value "$card" "$item" "$n" |unescape)"
33       [ "$gen" ] && l10n "gender_$gen"
34       ;;
35     *) pdi_value "$card" "$item" "$n" |unescape
36       ;;
37   esac; done \
38   | sed -E 's;";\\";g;'
39 }
40
41 printf '%s\r\n' \
42        'Content-Type: text/csv; charset=utf-8' \
43        'Content-Disposition: inline; filename="confetti_export_'$(date +%F_%T)'.csv"' \
44        ''
45
46 printf '"%s";"%s";"%s";"%s";"%s";"%s";"%s";"%s";"%s"\n' \
47        "$(l10n FN)" "$(l10n GENDER)" "$(l10n BDAY)" \
48        "$(l10n TEL)" "$(l10n EMAIL)" "$(l10n ADR)" \
49        "$(l10n NOTE)" "$(l10n courses)" "$(l10n CATEGORIES)" \
50 | sed -E 's;&shy\;;;g;'
51
52
53 filter_cards \
54 | order_cards \
55 | while read cardfile; do
56   card="$(pdi_load "$cardfile")"
57   printf '"%s";"%s";"%s";"%s";"%s";"%s";"%s";"%s";"%s"\n' \
58   "$(list_item FN)" "$(list_item GENDER)" "$(list_item BDAY)" \
59   "$(list_item TEL)" "$(list_item EMAIL)" "$(list_item ADR)" \
60   "$(list_item NOTE)" "$(list_attendance)" "$(list_item CATEGORIES)"
61 done