From 6655ac8dd9a786d394d628fed0fbc6e6008078c1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Paul=20H=C3=A4nsch?= Date: Wed, 6 Feb 2019 02:44:01 +0100 Subject: [PATCH] reimplemented card listing --- cards/l10n.sh | 10 ++-- cards/list.sh | 125 ++++++++++++++++++++++++++++++++++++++ cards/main.cgi | 10 +++- cards/view_card.sh | 145 --------------------------------------------- 4 files changed, 138 insertions(+), 152 deletions(-) create mode 100755 cards/list.sh delete mode 100755 cards/view_card.sh diff --git a/cards/l10n.sh b/cards/l10n.sh index c916173..48ee59e 100755 --- a/cards/l10n.sh +++ b/cards/l10n.sh @@ -16,7 +16,9 @@ # along with Confetti. If not, see . l10n(){ - case $1 in + local word + [ $# -eq 0 ] && read -r word || word="$1" + case $word in PHOTO) printf %s "Foto";; LOGO) printf %s "Logo";; FN) printf %s "Voller Name";; @@ -89,10 +91,10 @@ l10n(){ new_prescription) printf %s "Neue Verordnung";; no_icd) printf %s "Kein ICD Code";; - X-ZACK-JOINDATE) printf %s "An­mel­de­da­tum";; + X-ZACK-JOINDATE) printf %s "An­mel­de­da­tum";; X-ZACK-LEAVEDATE) printf %s "Ab­mel­de­da­tum";; - label_join) printf %s "Anm.";; - label_leave) printf %s "Abm.";; + X-ZACK-JOINDATE_short) printf %s "Anm.";; + X-ZACK-LEAVEDATE_short) printf %s "Abm.";; edit) printf %s "Bearbeiten";; edit_categories) printf %s "Kategorien Bearbeiten";; diff --git a/cards/list.sh b/cards/list.sh new file mode 100755 index 0000000..cb33637 --- /dev/null +++ b/cards/list.sh @@ -0,0 +1,125 @@ +#!/bin/sh + +. "${_EXEC}"/pdiread.sh + +card_fullname(){ + local card="$1" n1 n2 n3 n4 n5 + + local N="$(pdi_value "$card" N)" + local FN="$(pdi_value "$card" FN)" + local NICKNAME="$(pdi_value "$card" NICKNAME)" + + if [ "$FN" ]; then + printf %s "$FN" + elif [ "$N" ]; then + IFS=\; read n1 n2 n3 n4 n5 <<-EOF + $(pdi_value "$card" N) + EOF + printf '%s %s %s %s %s' "$n4" "$n2" "$n3" "$n1" "$n5" + elif [ "$NICKNAME" ]; then + printf '"%s"' "$NICKNAME" + fi +} + +card_item(){ + local card="$1" + local item cnt c + shift 1 + + for item in $@; do + cnt="$(pdi_count "$card" "$item")" + + case $item in + FN) printf '[h2 .item .FN ­%s]' "$(card_fullname "$card" |HTML)" + ;; + GENDER) printf '[span .item .GENDER ­%s]' "$(pdi_value "$card" GENDER |l10n)" + ;; + NICKNAME) seq 1 $cnt |while read c; do + printf '[span .item .NICKNAME ­aka. "%s"]' \ + "$(pdi_value "$card" NICKNAME $c |HTML)" + done + ;; + X-ZACK-JOINDATE|X-ZACK-LEAVEDATE) if [ $cnt -gt 0 ]; then + printf '[span .item .%s [b %s:] %s]' \ + "$item" "$(l10n "${item}_short")" \ + "$(pdi_value "$card" "$item" |HTML)" + fi + ;; + BDAY) if [ $cnt -gt 0 ]; then + printf '[span .item .BDAY [b *:] %s]' \ + "$(pdi_value "$card" BDAY |grep -xE '[0-9-]+')" + fi + ;; + SOUND) if [ $cnt -gt 0 ]; then + printf '[audio .item .SOUND controls="controls" + [source type="audio/ogg" src="data:audio/ogg;base64,%s"] + ]' \ + "$(pdi_value "$card" SOUND |grep -xE '[a-zA-Z0-9/+=]+')" + fi + ;; + PHOTO|LOGO) if [ $cnt -gt 0 ]; then + printf '[img .item .%s src="data:image/%s;base64,%s"]' "$item" \ + "$(pdi_attrib "$card" "$item" |sed -r 's;^(.*;)?TYPE="?(.+)"?(;.*)?$;\2;')" \ + "$(pdi_value "$card" "$item" |grep -xE '[a-zA-Z0-9/+=]+')" + fi + ;; + EMAIL) if [ $cnt -gt 0 ]; then + printf '[h3 %s]' "$(l10n EMAIL)" + seq 1 $cnt |while read c; do + printf '[a .item .EMAIL href="mailto:%s" ­%s]' \ + "$(pdi_value "$card" EMAIL $c |HTML)" \ + "$(pdi_value "$card" EMAIL $c |HTML)" + done + fi + ;; + *) if [ $cnt -gt 0 ]; then + printf '[h3 %s]' "$(l10n "$item")" + seq 1 $cnt |while read c; do + printf '[span .item .%s ­%s]' "$item" \ + "$(pdi_value "$card" "$item" $c |HTML)" + done + fi + ;; + esac + done +} + +print_card(){ + local cardfile="$1" + local cachefile="${_DATA}/cache/${cardfile##*/}.cache" + + if [ "$cachefile" -nt "$cardfile" -a "$cachefile" -nt "${_EXEC}/cards" ]; then + cat "$cachefile" + else + local card="$(pdi_load "$cardfile")" + tee "$cachefile" <<-EOF + [div .card #${cardfile##*/} + [div .section .basic ­$( + card_item "$card" FN GENDER NICKNAME BDAY X-ZACK-JOINDATE X-ZACK-LEAVEDATE SOUND PHOTO LOGO + )] + [div .section .phone ­$(card_item "$card" TEL)] + [div .section .message ­$(card_item "$card" EMAIL IMPP URL)] + [div .section .address ­$(card_item "$card" ADR)] + [div .section .note ­$(card_item "$card" NOTE)] + [div .section .attendance [h3 $(l10n course_attendance) ] [ul ­ + $(grep -F " ${cardfile##*/}" "$_DATA/mappings/attendance" |while read each discard; do + printf '[li [a .item .attendance href="/courses#%s" ­%s]]' \ + "$each" \ + "$(pdi_value "$(pdi_load "$_DATA/ical/$each")" SUMMARY |HTML)" + done)] + $(card_item "$card" CATEGORIES) + ] + [div .control + [a .item href="/cards/${cardfile##*/}?action=edit" $(l10n edit)] + [a .item href="/cards/${cardfile##*/}?action=export" $(l10n vcf_export)] + ] + ] + EOF + fi +} + +list_cards(){ + for cardfile in "${_DATA}"/vcard/*.vcf; do + print_card "$cardfile" + done +} diff --git a/cards/main.cgi b/cards/main.cgi index bfc574f..3cf8a23 100755 --- a/cards/main.cgi +++ b/cards/main.cgi @@ -12,13 +12,14 @@ fi . $_EXEC/pdiread.sh . $_EXEC/cards/l10n.sh . $_EXEC/cards/widgets.sh +. $_EXEC/cards/list.sh filter="$(GET filter)" order="$(GET order)" printf 'Content-Type: text/html; charset=utf-8\r\n\r\n' -$_EXEC/cgilite/html-sh.sed <. - -list_items(){ - item="$1" - [ -n "${values[$item]+x}" ] && \ - printf '

%s

\n' "$(l10n $item)" - for n in "$item" "$item"{0..100}; do - if [ -z "${values[$n]+x}" ]; then - break - else case "$item" in - EMAIL) - printf '\n' \ - "$(attribsafe "${values[$n]}")" "$(htmlsafe "${values[$n]}")" - ;; - *) - printf '%s\n' \ - "$item" "$(htmlsafe ${values[$n]})" - ;; - esac; fi - done -} - -list_section(){ - printf '
' "$1" - shift 1 - for each in $@; do - list_items "$each" - done - printf '
' -} - -n=$(printf %s "$values[N+3] $values[N+1] $values[N+2] $values[N+0] $values[N+4]" \ - | sed -r ':X;$!{N;bX}; s;^[\n ]+;;; s;[\n ]+$;;; s;[\r\t\n ]+; ;g;' - ) -fullname="${n:-${values[FN]:-${values[NICKNAME]}}}" - -hi_company="${values[X-HEALTH-INSURANCE+0]}" - hi_number="${values[X-HEALTH-INSURANCE+1]}" - hi_status="${values[X-HEALTH-INSURANCE+2]}" - -printf '
-

%s

-' "$fullname" -[ -n "$values[GENDER]" ] && printf ' - %s - ' "$(l10n "$values[GENDER]")" - -for n in NICKNAME NICKNAME{0..100}; do - [ -z "${values[$n]+x}" ] && break \ - || printf ' - aka. %s - ' "$(htmlsafe ${values[$n]})" -done - -[ -n "$values[BDAY]" ] && printf ' - *: %s - ' "$(htmlsafe "$values[BDAY]")" -[ -n "$values[X-ZACK-JOINDATE]" ] && printf ' - %s: %s - ' "$(l10n label_join)" "$(htmlsafe "$values[X-ZACK-JOINDATE]")" -[ -n "$values[X-ZACK-LEAVEDATE]" ] && printf ' - %s:%s - ' "$(l10n label_leave)" "$(htmlsafe "$values[X-ZACK-LEAVEDATE]")" - -[ -n "$values[SOUND]" ] && printf ' - ' "$values[SOUND]" - -[ -n "$values[PHOTO]" ] && printf ' - - ' "${values[PHOTO_TYPE]}" "${values[PHOTO]}" - -[ -n "$values[LOGO]" ] && printf ' - - ' "${values[LOGO_TYPE]}" "${values[LOGO]}" - -if [ "$PROFILE" = circus ]; then - printf '
' - - list_section phone TEL - list_section message EMAIL IMPP URL - list_section address ADR - list_section note NOTE - - printf '

%s

    ' "$(l10n course_attendance)" - sed -rn 's:(.*)\t'"$id"'$:\1:p' "$_DATA/mappings/attendance" |while read each; do - cname="$(sed -rn 's:^SUMMARY\:(.*)$:\1:p' "$_DATA/ical/$each")" - printf '
  • %s
  • ' "$each" "$(htmlsafe $cname)" - done - printf '
' - list_items CATEGORIES - printf '
' - -elif [ "$PROFILE" = medical ]; then - list_items ADR - list_items URL - printf '' - - list_section phone TEL EMAIL IMPP - - printf '

%s

' "$(l10n X-HEALTH-INSURANCE)" - [ -n "$hi_company" ] && printf '%s' \ - "$(htmlsafe "$hi_company")" - [ -n "$hi_number" ] && printf ' %s' \ - "$(l10n hi_number)" "$(htmlsafe "$hi_number")" - [ -n "$hi_status" ] && printf ' %s' \ - "$(l10n hi_status)" "$(htmlsafe "$hi_status")" - printf '
' - - list_section note NOTE X-CLIENT-REFERRAL - - printf '

%s

    ' "$(l10n prescriptions)" - declare -A mpx - find "$_DATA/prescriptions/" -name "${id%.vcf}.*.mpx" \ - | while read pfile; do - mpx=(); cat "$pfile" |while read -r line; do - val="${line#*:}" - mpx[${line%%:*}]="$(htmlsafe "${val//\\n/$BR}")" - done - printf '
  • %s: %s - %s
  • ' \ - "${id}" "${pfile##*/}" "${mpx[date]}" "${mpx[indicator]}" \ - "$([ -n "${mpx[remidy]}" ] && printf '%s %s' "${mpx[quantity]}" "${mpx[remidy]}" - for n in {0..10}; do - [ -n "${mpx[remidy${n}]}" ] && printf ', %s %s' "${mpx[quantity${n}]}" "${mpx[remidy${n}]}" - done - )" - done |sort -r - printf '
' -fi -- 2.39.2