X-Git-Url: https://git.plutz.net/?p=confetti;a=blobdiff_plain;f=pages%2Fcards.sh;h=945908ea70edb1b937dbc401a7122edb730285df;hp=3f0be4a8167ac0d2db5cafb57f09aea19ba60f9e;hb=786c12839c61826d4d06e2a2f62d1a3d8b7ea780;hpb=51b0a660590e9a0adaaa35a3259de32156d1dee6 diff --git a/pages/cards.sh b/pages/cards.sh index 3f0be4a..945908e 100755 --- a/pages/cards.sh +++ b/pages/cards.sh @@ -20,17 +20,25 @@ BR=' ' +force_items(){ + for each in "$@"; do + [ -z "${values[$each]+x}" ] && values[${each}]='' + done +} + case $PROFILE in medical) + SUP_FIELDS=(N NICKNAME GENDER BDAY ADR TEL EMAIL X-HEALTH-INSURANCE X-HEALTH-INSURANCE-NOCONTRIB IMPP URL NOTE X-CLIENT-REFERRAL) + FORCE_ITEMS=(ADR TEL EMAIL NOTE X-CLIENT-REFERRAL) view_card="$_EXEC/templates/view_client.sh" - edit_card="$_EXEC/templates/edit_client.sh" _GET[order]="${_GET[order]:-lastname}" _GET[filtertype]="${_GET[filtertype]:-name}" profile_medical=x ;; circus) + SUP_FIELDS=(N NICKNAME GENDER BDAY X-ZACK-JOINDATE X-ZACK-LEAVEDATE EMAIL TEL IMPP ADR URL NOTE) + FORCE_ITEMS=(BDAY X-ZACK-JOINDATE TEL EMAIL ADR NOTE) view_card="$_EXEC/templates/view_attendee.sh" - edit_card="$_EXEC/templates/edit_attendee.sh" _GET[order]="${_GET[order]:-firstname}" _GET[filtertype]="${_GET[filtertype]:-any}" profile_circus=x @@ -111,7 +119,8 @@ vcf_parse() { y;abcdefghijklmnopqrstuvwxyz;ABCDEFGHIJKLMNOPQRSTUVWXYZ; G; s;\n;;; - + # === strip trailing CR (but keep CRs in property value) === + s;\r$;;; # === Normalise various known vendor properties === s;^X-MS-CARDPICTURE(\;|:);PHOTO\1;; @@ -175,16 +184,59 @@ vcf_parse() { if [ -z "$key" ]; then eval "$line" else - values[${key}]="${value//\\r\\n/$BR}" - for t in ${(k)tag}; do - values[${key}_${t}]="${tag[$t]}" + printf '%s\n' "$value" |sed -rn ' + :X + s;((^|[^\\])(\\\\)*),;\1\n;g; + tX; + s;\\,;,;g; + p + ' \ + | while read -r val; do + while [ -n "${values[$key$n]+x}" ]; do n=$((${n=-1} + 1)); done + if printf '%s\n' "$val" |grep -qE '((^|[^\\])(\\\\)*)\;'; then + m=0 + values[${key}${n}]="${val}" + printf '%s\n' "$val" |sed -rn ' + :X + s;((^|[^\\])(\\\\)*)\;;\1\n;g; + tX; + s;\\\;;\;;g; + p + ' \ + | while read -r v; do + values[${key}${n}+${m}]="$( + printf %s\\n "${v}" \ + | sed -rn ' + :X + s;((^|[^\\])(\\\\)*)\\n;\1\n;g; + tX; + s;\\\\;\\;g; + p + ' + )" + m=$(($m + 1)) + done + else + values[${key}${n}]="$( + printf %s\\n "${val}" \ + | sed -rn ' + :X + s;((^|[^\\])(\\\\)*)\\n;\1\n;g; + tX; + s;\\\;;\;;g; + s;\\\\;\\;g; + p + ' + )" + fi + for t in ${(k)tag}; do + values[${key}${n}_${t}]="${tag[$t]}" + done done + eval "$line" - if [ -n "$values[$key]" ]; then - n=0 - while [ -n "$values[$key$n]" ]; do n=$(($n + 1)); done - key=$key$n - fi + unset n + while [ -n "${values[$key$n]+x}" ]; do n=$((${n=-1} + 1)); done unset value unset tag fi @@ -214,5 +266,6 @@ edit_card() { #Parameter: Cardfile declare -A values vcf_parse "$cardfile" - . $edit_card + force_items $FORCE_ITEMS + . "$_EXEC/templates/edit_card.sh" }