From aedb6776919b351df7df7c310c238c41317ddc44 Mon Sep 17 00:00:00 2001
From: paul <paul@plutz.net>
Date: Sat, 27 Feb 2016 16:20:54 +0000
Subject: [PATCH] enable support for phone number types

svn path=/trunk/; revision=88
---
 actions/update_card.sh     |  5 ++--
 pages/cards.sh             |  9 ++++---
 templates/attendees.css.sh | 52 ++++++++++++++++++++++----------------
 templates/edit_client.sh   | 28 ++++++++++++++++----
 templates/text_cards.sh    | 10 ++++++++
 templates/text_courses.sh  |  6 +----
 templates/view_client.sh   | 32 +++++++++++------------
 7 files changed, 89 insertions(+), 53 deletions(-)

diff --git a/actions/update_card.sh b/actions/update_card.sh
index a810476..f18c9ee 100755
--- a/actions/update_card.sh
+++ b/actions/update_card.sh
@@ -47,9 +47,10 @@ UID:${_POST[UID]}
 $(
 for field in $VCF_FIELDS; do
   for key in $field $field{0..100}; do
-    [ -z "$_POST[$key]" ] && break
+    [ -z "${_POST[$key]+x}" ] && break
     value="$(printf %s "$_POST[$key]" |sed -r ':a;N;$!ba;s:\n:\\n:g;s:\r:\\r:g')"
-    printf '%s:%s\n' "${field}" "$value"
+    [ "${key%%[0-9]*}" = TEL ] && tag="TYPE=${_POST[phonetype${key#TEL}]}" || tag=''
+    [ -n "$value" ] && printf '%s:%s\n' "${field}${tag:+;$tag}" "$value"
   done
 done
 [ "${_POST[action]}" = addfield ] && printf '%s:\n' "${_POST[newfield]}"
diff --git a/pages/cards.sh b/pages/cards.sh
index d1170b0..50fee63 100755
--- a/pages/cards.sh
+++ b/pages/cards.sh
@@ -19,6 +19,9 @@
 
 [ -z "${_GET[order]}" ] && _GET[order]="firstname"
 
+BR='
+'
+
 listcourses() {
   ls -1 ${_DATA}/ical/*ics |while read file; do
     icstime="$(sed -rn 's:^DTSTART\:(TZID=.*\:)?([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2})([0-9]{2})([0-9]{2})Z?\r$:\2-\3-\4 \5\:\6\:\7:p' "$file")"
@@ -115,7 +118,7 @@ vcf_parse() {
     case "$line" in
       key=*) printf %s\\n "$line"
 	;;
-      value=*) printf %s\\n "$line"
+      value=*) printf %s\\n "${line}"
 	;;
       tag=*) ot=''
 	     printf %s "$line" \
@@ -154,7 +157,7 @@ view_card() {  #Parameter: Cardfile
           if [ -z "$key" ]; then
             eval "$line"
           else
-            values[$key]="$value"
+            values[$key]="${value//\\r\\n/$BR}"
             for t in ${(k)tag}; do
               tags[${key}_$t]="$tag[$t]"
             done
@@ -192,7 +195,7 @@ edit_card() {  #Parameter: Cardfile
         if [ -z "$key" ]; then
           eval "$line"
         else
-          [ -n "$value" ] && values[$key]="$value" || values[$key]='\r'
+          [ -n "$value" ] && values[$key]="${value//\\r\\n/$BR}" || values[$key]='\r'
           for t in ${(k)tag}; do
             tags[${key}_$t]="$tag[$t]"
           done
diff --git a/templates/attendees.css.sh b/templates/attendees.css.sh
index 036ad04..b7c800e 100755
--- a/templates/attendees.css.sh
+++ b/templates/attendees.css.sh
@@ -134,6 +134,35 @@ cat <<EOF
   margin-top: 0;
 }
 
+.card .section .item {
+  display: block;
+  max-width: 100%;
+  word-wrap: break-word;
+}
+.card .section .item label {
+  font-weight: bold;
+}
+
+.card .section textarea.NOTE {
+  min-height: 6em;
+}
+.card .section textarea.ADR {
+  min-height: 4em;
+}
+
+.card .section .PHOTO {
+  width: 100%;
+  max-height: 10em;
+}
+.card .section .GENDER { display: inline-block; padding-right: .5ex;}
+.card .section .BDAY { display: inline-block;}
+
+.card .section select {
+  display: block;
+  background-color: #FFF;
+  border: 1px solid black;
+}
+
 .card .section.attendance ul { margin: 0; padding: 0; }
 .card .section.attendance ul li {
   display: block;
@@ -188,31 +217,10 @@ form.card .insurance input[type=radio]:checked + label + input + label + select,
 form.card .insurance input[type=radio]:checked + label + select + input {
   display: block;
   border: 1px solid black;
+  background-color: #FFF;
   border-width: 0 1px 1px 1px;
   padding: .25ex 0;
   margin-top: -1px;
-  background-color: #FFF;
-}
-
-.card .section .item {
-  display: block;
-  max-width: 100%;
-  word-wrap: break-word;
-}
-.card .section .item label {
-  font-weight: bold;
-}
-
-.card .section textarea.NOTE {
-  min-height: 6em;
-}
-.card .section textarea.ADR {
-  min-height: 4em;
-}
-
-.card .section .PHOTO {
-  width: 100%;
-  max-height: 10em;
 }
 
 EOF
diff --git a/templates/edit_client.sh b/templates/edit_client.sh
index 586fa69..2b0c004 100755
--- a/templates/edit_client.sh
+++ b/templates/edit_client.sh
@@ -15,11 +15,29 @@
 # You should have received a copy of the GNU Affero General Public License
 # along with Confetti.  If not, see <http://www.gnu.org/licenses/>. 
 
+setchecked() {
+  printf 'checked="checked"'
+}
+setselected() {
+  printf 'selected="selected"'
+}
 check_gen() {
-  [ "$values[GENDER]" = "$1" ] && echo 'selected="selected"'
+  [ "$values[GENDER]" = "$1" ] && setselected
 }
 check_a() {
-  egrep -q "^${1}.${id}$" "$_DATA/mappings/attendance" && echo 'checked="checked"'
+  egrep -q "^${1}.${id}$" "$_DATA/mappings/attendance" && setchecked
+}
+teltype() {
+  cat <<-EOF
+	<select class="item phonetype" name="phonetype">
+	  <option value="" disabled="disabled" $([ -z "$1" ] && setselected )>$(l10n phone_typeselect)</option>
+	  <option value=""></option>
+	  <option value="HOME" $([ "$1" = HOME ] && setselected)>$(l10n phone_home)</option>
+	  <option value="CELL" $([ "$1" = CELL ] && setselected)>$(l10n phone_cell)</option>
+	  <option value="WORK" $([ "$1" = WORK ] && setselected)>$(l10n phone_work)</option>
+	  <option value="FAX"  $([ "$1" = FAX  ] && setselected)>$(l10n phone_fax )</option>
+	</select>
+	EOF
 }
 
 n_last="$(printf %s "$values[N]" |sed -rn 's:^([^;]*;){0} *([^;]*).*$:\2:p')"
@@ -85,13 +103,13 @@ cat <<END_HTML
 
   <div class="section phone">
     <h3>$(l10n TEL)</h3>
-    <input class="item TEL" name="TEL" value="$values[TEL]" />
+    $(teltype "${tags[TEL_TYPE]}")<input class="item TEL" name="TEL" value="$values[TEL]" />
     $(for n in TEL{0..10}; do
-      echo "${values[$n]:+<input class="item TEL" name="TEL" value="'$values[$n]'" />}"
+      printf "${values[$n]:+$(teltype "${tags[$n_TYPE]}")<input class="item TEL" name="TEL" value="'$values[$n]'" />}"
     done)
     ${values[EMAIL]:+<h3>$(l10n EMAIL)</h3>}
     $(for n in EMAIL EMAIL{0..10}; do
-      echo "${values[$n]:+<input class="item EMAIL" name="EMAIL" value="$values[$n]" />}"
+      printf "${values[$n]:+<input class="item EMAIL" name="EMAIL" value="$values[$n]" />}"
     done)
     ${values[IMPP]:+<h3>$(l10n IMPP)</h3>}
     $(for n in IMPP IMPP{0..10}; do
diff --git a/templates/text_cards.sh b/templates/text_cards.sh
index 53d8489..be2efa7 100755
--- a/templates/text_cards.sh
+++ b/templates/text_cards.sh
@@ -37,6 +37,16 @@ item_name[ANNIVERSARY]="Jubiläum"
 item_name[BDAY]="Geburtstag"
 item_name[EMAIL]="E-Mail"
 item_name[TEL]="Telefon"
+item_name[phone_typeselect]="Typ"
+item_name[phone_home]="Privat"
+item_name[phone_cell]="Mobil"
+item_name[phone_work]="Büro"
+item_name[phone_fax]="Fax"
+item_name[tHOME]="Privat:"
+item_name[tWORK]="Büro:"
+item_name[tCELL]="Mobil:"
+item_name[tFAX]="Fax:"
+item_name[tVOICE]=""
 item_name[IMPP]="Chat"
 item_name[ADR]="Anschrift"
 item_name[URL]="Webseite"
diff --git a/templates/text_courses.sh b/templates/text_courses.sh
index fd92ddd..b86240a 100755
--- a/templates/text_courses.sh
+++ b/templates/text_courses.sh
@@ -1,4 +1,4 @@
-# Copyright 2014 Paul Hänsch
+# Copyright 2014, 2016 Paul Hänsch
 #
 # This file is part of Confetti.
 # 
@@ -58,7 +58,3 @@ item_name[t_eternal]="ewig"
 item_name[t_times]="mal"
 item_name[t_until]="Bis"
 item_name[t_oclock]="Uhr"
-
-l10n() {
-  [ -n "$item_name[$1]" ] && echo -n "$item_name[$1]" || echo -n "$1"
-}
diff --git a/templates/view_client.sh b/templates/view_client.sh
index 4b06268..bbcc091 100755
--- a/templates/view_client.sh
+++ b/templates/view_client.sh
@@ -29,57 +29,57 @@ hi_status="$(printf %s "${values[X-HEALTH-INSURANCE]}" |cut -d\; -f3)"
 cat <<END_HTML
   <div class="section basic">
     <h2 class="item FN">$fullname</h2>
-    ${values[GENDER]:+<span class="item GENDER">$(l10n $values[GENDER])</span>}
+    ${values[GENDER]:+<span class="\""item GENDER"\"">$(l10n $values[GENDER])</span>}
 
     $(for n in NICKNAME NICKNAME{0..10}; do
-      echo "${values[$n]:+<span class="item NICKNAME">aka. $values[$n]</span>}"
+      echo "${values[$n]:+<span class="\""item NICKNAME"\"">aka. $values[$n]</span>}"
     done)
 
-    ${values[BDAY]:+<span class="item BDAY"><label>*:</label> ${values[BDAY]}</span>}
-    ${values[SOUND]:+<audio controls="controls" class="item SOUND"><source type="audio/ogg" src="data:audio/ogg;base64,$values[SOUND]" /></audio>}
-    ${values[PHOTO]:+<img class="item PHOTO" src="data:image/$tags[PHOTO_TYPE];base64,$values[PHOTO]" />}
-    ${values[LOGO]:+<img class="item LOGO" src="data:image/$tags[LOGO_TYPE];base64,$values[LOGO]" />}
+    ${values[BDAY]:+<span class="\""item BDAY"\""><label>*:</label> ${values[BDAY]}</span>}
+    ${values[SOUND]:+<audio controls="controls" class="\""item SOUND"\""><source type="audio/ogg" src="\""data:audio/ogg;base64,$values[SOUND]"\"" /></audio>}
+    ${values[PHOTO]:+<img class="\""item PHOTO"\"" src="\""data:image/$tags[PHOTO_TYPE];base64,$values[PHOTO]"\"" />}
+    ${values[LOGO]:+<img class="\""item LOGO"\"" src="\""data:image/$tags[LOGO_TYPE];base64,$values[LOGO]"\"" />}
 
     <h3>$(l10n ADR)</h3>
     $(for n in ADR ADR{0..10}; do
-      echo "${values[$n]:+<span class="item ADR">$values[$n]</span>}"
+      echo "${values[$n]:+<span class="\""item ADR"\"">$values[$n]</span>}"
     done)
     ${values[URL]:+<h3>$(l10n URL)</h3>}
     $(for n in URL URL{0..10}; do
-      echo "${values[$n]:+<span class="item URL"><a href="$values[$n]">$values[$n]</a></span>}"
+      echo "${values[$n]:+<span class="\""item URL"\""><a href="\""$values[$n]"\"">$values[$n]</a></span>}"
     done)
   </div><!--
 
   --><div class="section phone">
     <h3>$(l10n TEL)</h3>
     $(for n in TEL TEL{0..10}; do
-      echo "${values[$n]:+<span class="item TEL">$tags[${n}_TYPE] $values[$n]</span>}"
+      echo "${values[$n]:+<span class="\""item TEL"\"">$(l10n t${tags[${n}_TYPE]}) $values[$n]</span>}"
     done)
     ${values[EMAIL]:+<h3>$(l10n EMAIL)</h3>}
     $(for n in EMAIL EMAIL{0..10}; do
-      echo "${values[$n]:+<span class="item EMAIL"><a href="mailto:$values[$n]">$values[$n]</a></span>}"
+      echo "${values[$n]:+<span class="\""item EMAIL"\""><a href="\""mailto:$values[$n]"\"">$values[$n]</a></span>}"
     done)
     ${values[IMPP]:+<h3>$(l10n IMPP)</h3>}
     $(for n in IMPP IMPP{0..10}; do
-      echo "${values[$n]:+<span class="item IMPP">$tags[${n}_TYPE] <a href="$values[$n]">$values[$n]</a></span>}"
+      echo "${values[$n]:+<span class="\""item IMPP"\"">$tags[${n}_TYPE] <a href="\""$values[$n]"\"">$values[$n]</a></span>}"
     done)
   </div><!--
 
   --><div class="section insurance">
     <h3>$(l10n X-HEALTH-INSURANCE)</h3>
-    ${hi_company:+<span class="item hi_comapany">${hi_company}</span>}
-    ${hi_number:+<span class="item hi_number"><label>$(l10n hi_number):</label> ${hi_number}</span>}
-    ${hi_status:+<span class="item hi_status"><label>$(l10n hi_status):</label> ${hi_status}</span>}
+    ${hi_company:+<span class="\""item hi_comapany"\"">${hi_company}</span>}
+    ${hi_number:+<span class="\""item hi_number"\""><label>$(l10n hi_number):</label> ${hi_number}</span>}
+    ${hi_status:+<span class="\""item hi_status"\""><label>$(l10n hi_status):</label> ${hi_status}</span>}
   </div><!--
 
   --><div class="section note">
     ${values[NOTE]:+<h3>$(l10n NOTE)</h3>}
     $(for n in NOTE NOTE{0..10}; do
-      echo "${values[$n]:+<span class="item NOTE">$values[$n]</span>}"
+      echo "${values[$n]:+<span class="\""item NOTE"\"">$values[$n]</span>}"
     done)
     ${values[X-CLIENT-REFERRAL]:+<h3>$(l10n X-CLIENT-REFERRAL)</h3>}
     $(for n in X-CLIENT-REFERRAL X-CLIENT-REFERRAL{0..10}; do
-      echo "${values[$n]:+<span class="item X-CLIENT-REFERRAL">$values[$n]</span>}"
+      echo "${values[$n]:+<span class="\""item X-CLIENT-REFERRAL"\"">$values[$n]</span>}"
     done)
   </div><!--
 
-- 
2.39.5