dynamic therapy section
authorpaul <paul@plutz.net>
Thu, 7 Apr 2016 01:21:46 +0000 (01:21 +0000)
committerpaul <paul@plutz.net>
Thu, 7 Apr 2016 01:21:46 +0000 (01:21 +0000)
svn path=/trunk/; revision=89

actions/static_file.sh [new file with mode: 0755]
actions/update_therapy.sh [new file with mode: 0755]
pages/therapy.sh
templates/text_therapy.sh [new file with mode: 0755]
templates/therapy.css.sh
templates/therapy.html.sh

diff --git a/actions/static_file.sh b/actions/static_file.sh
new file mode 100755 (executable)
index 0000000..0b16fc1
--- /dev/null
@@ -0,0 +1,38 @@
+#!/bin/zsh
+
+# Copyright 2016 Paul Hänsch
+#
+# This file is part of Confetti.
+# 
+# Confetti is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+# 
+# Confetti is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+# 
+# You should have received a copy of the GNU Affero General Public License
+# along with Confetti.  If not, see <http://www.gnu.org/licenses/>. 
+
+BR='
+'
+file="$(invalidate "${_GET[name]}" '\.' 'none')"
+file="$_EXEC/templates/$file"
+
+if [ -f "$file" ]; then
+  case "${file##*.}" in
+    png) printf 'Content-Type: image/png';;
+    html) printf 'Content-Type: text/html';;
+    txt) printf 'Content-Type: text/plain';;
+    *) printf 'Content-Type: application/octet-stream';;
+  esac
+  printf '\r\n'
+  printf 'Content-Length: %s\r\n' "$(stat -c %s "$file")"
+  printf '\r\n'
+  cat "$file"
+else
+  printf 'HTTP/1.1 404 Not Found\n\n'
+fi
diff --git a/actions/update_therapy.sh b/actions/update_therapy.sh
new file mode 100755 (executable)
index 0000000..43a2e1f
--- /dev/null
@@ -0,0 +1,56 @@
+#!/bin/zsh
+
+# Copyright 2016 Paul Hänsch
+#
+# This file is part of Confetti.
+# 
+# Confetti is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+# 
+# Confetti is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+# 
+# You should have received a copy of the GNU Affero General Public License
+# along with Confetti.  If not, see <http://www.gnu.org/licenses/>. 
+
+BR='
+'
+tpy="${_POST[id]}"
+
+tpyfile="$_DATA/therapies/$tpy"
+tempfile="$_DATA/temp/$tpy"
+
+# serialize POST array into file
+for key in ${(k)_POST}; do
+  printf %s:%s\\n "$key" "${_POST[$key]//$BR/\\n}"
+done >"$tempfile"
+
+if [ -n "$_POST[delete_session]" ]; then
+  n="$_POST[delete_session]"
+  sed -i -r '/^session'$n'[_:]/d' "$tempfile"
+  rm "${tpyfile%.tpy}_session${n}.png"
+
+  while grep -Eq '^session'$(($n + 1))'_' "$tempfile"; do
+    sed -i -r 's;^session'$(($n + 1))'(_|:);session'$n'\1;' "$tempfile"
+    mv "${tpyfile%.tpy}_session$(($n+1)).png" "${tpyfile%.tpy}_session${n}.png"
+    n=$(($n+1))
+  done
+
+elif [ -n "$_POST[new_session]" ]; then
+  sid="$_POST[new_session]"
+  printf '%s:exists\n' "$sid" >>"$tempfile"
+
+  identify "$_EXEC/templates/therapy_background.png" \
+  | sed -r 's;^.* ([0-9]+x[0-9]+) .*$;\1;' \
+  | read dim
+
+  convert -size "$dim" xc:transparent "${tpyfile%.tpy}_${sid}.png"
+fi
+
+mv "$tempfile" "$tpyfile"
+
+redirect "?p=therapy&id=${tpy}"
index 571333e..6127b4d 100755 (executable)
@@ -18,6 +18,7 @@
 # along with Confetti.  If not, see <http://www.gnu.org/licenses/>. 
 
 declare -A tpy
+declare -A mpx
 
 BR='
 '
@@ -25,8 +26,26 @@ BR='
 id="$_GET[id]"
 
 tpyfile="$_DATA/therapies/$id"
+mpxfile="$_DATA/prescriptions/${id%.tpy}.mpx"
+client="$_DATA/vcard/${id%%.*}.vcf"
+
+card_N="$(sed -nr 's:^(N)(;[^"\:]+|;"[^"]+")*\:(.*)$:\3:gp' "$client")"
+card_FN="$(sed -nr 's:^(FN)(;[^"\:]+|;"[^"]+")*\:(.*)$:\3:gp' "$client")"
+card_NICK="$(sed -nr 's:^(NICKNAME)(;[^"\:]+|;"[^"]+")*\:(.*)$:\3:gp' "$client")"
+
+n=$(printf %s "$card_N" \
+    | sed -rn 's:^([^;]*)(\;[^;]*)(\;[^;]*)?(\;[^;]*)?(\;[^;]*)?$:\4 \2 \3 \1 \5:gp' \
+    | sed -r 's:,: :;s:\;: :g;s: +: :g;s:^ $::;'
+   )
+client_name="${n:-${card_FN:-${card_NICK}}}"
 
 mpx=()
+cat "$mpxfile" |while read -r line; do
+  val="${line#*:}"
+  mpx[${line%%:*}]="${val//\\n/$BR}"
+done
+
+tpy=()
 cat "$tpyfile" |while read -r line; do
   val="${line#*:}"
   tpy[${line%%:*}]="${val//\\n/$BR}"
diff --git a/templates/text_therapy.sh b/templates/text_therapy.sh
new file mode 100755 (executable)
index 0000000..d0a3202
--- /dev/null
@@ -0,0 +1,22 @@
+# Copyright 2016 Paul Hänsch
+#
+# This file is part of Confetti.
+# 
+# Confetti is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+# 
+# Confetti is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+# 
+# You should have received a copy of the GNU Affero General Public License
+# along with Confetti.  If not, see <http://www.gnu.org/licenses/>. 
+
+. $_EXEC/templates/text_prescriptions.sh
+
+item_name[prescriptionlist]="Zur Verordnungsliste"
+item_name[delete_session]="Therapiesitzung entfernen"
+item_name[therapist]="Therapeut"
index d6221e1..8a87a8e 100755 (executable)
@@ -6,6 +6,7 @@ body {
   position: relative;
   width: 100%;
   margin: 0; padding: 0;
+  padding-top: 2em;
 }
 
 input.tab { display: none; }
@@ -31,30 +32,63 @@ input.color[value="c101"] + label { background-color: #F0F;}
 input.color[value="c110"] + label { background-color: #FF0;}
 input.color[value="c111"] + label { background-color: #FFF;}
 
-h1, label.tab, div.tab,
+h1, label.tab, div.tab, fieldset.tab,
 div.patient, div.prescription {
   display: block;
   width: 96%;
   margin: 0 2%;
 }
+
+div.prescription .insurance{ display: block; margin: .5ex 0 1ex 0; }
+div.prescription label.checkbox,
+div.prescription label.radio { padding-left: 1.25em; font-size: 1em;}
+
+div.prescription label.checkbox:before,
+div.prescription label.radio:before {
+  display: inline-block;
+  color: #000;
+  background-color: #FFF;
+  height: 1.375em; width: 1.125em;
+  padding: .125em 0 0 .375em;
+  margin: 0 .5em .25em -1.25em;
+  border: 1px solid #000;
+  vertical-align: middle;
+  content: ' ';
+}
+div.prescription label.radio:before { border-radius: .5em;}
+div.prescription label.checkbox.checked:before,
+div.prescription label.radio.checked:before { content: "\2713";}
+
+div.prescription label[for=prescreviewed] {
+  margin-left: 1ex;
+  font-weight: bold;
+  text-decoration: underline;
+  background-color: #FCC;
+}
+div.prescription label[for=prescreviewed].checked {
+  font-weight: normal;
+  text-decoration: none;
+  background-color: transparent;
+}
+
 fieldset.color {
   margin: .5em 2% 0 2%;
   border: none;
   padding: 0;
 }
-img.dotmark {
+.dotmark {
   max-width: 96%;
   margin: .125em 2%; padding: 0;
   text-align: left;
   border: 1px dotted black;
 }
-img.dotmark.ov {
+.dotmark.ov {
   position: absolute;
   bottom: 5px; right: 0%;
   z-index: 1;
 }
 @media(min-width: 800px){
-  h1, label.tab, div.tab,
+  h1, label.tab, div.tab, fieldset.tab,
   div.patient, div.prescription {
     width: 38%;
     margin-right: 0;
@@ -65,14 +99,14 @@ img.dotmark.ov {
     right: 0;
     top: 0em;
   }
-  img.dotmark {
+  .dotmark {
     position: fixed;
     max-width: 56%;
     max-height: 480px;
     right: 0;
     top: 2em;
   }
-  img.dotmark.ov {
+  .dotmark.ov {
     position: fixed;
     bottom: auto;
   }
@@ -87,12 +121,13 @@ div.prescription {
   padding: .125em 1.25ex .5em 1.25ex;
 }
 div > h2 { margin: 0; border-bottom: 1px solid black; }
-div > a:first-of-type {
+div:nth-child(n+2) > a:first-of-type {
   display: block;
   margin: .125em 0 .5em 0;
   text-decoration: none;
 }
 
+fieldset.tab,
 label.tab {
   font-size: 1.25em;
   font-weight: bold;
@@ -101,6 +136,7 @@ label.tab {
   background-color: #333;
   margin-top: .125em;
   text-align: right;
+  border: none;
 }
 label.heading {
   background-color: #FFF;
@@ -113,11 +149,13 @@ label.heading > span {
   text-decoration: underline;
 }
 
+fieldset.tab > *,
+label > input,
 label > span {
   display: inline-block;
   text-align: right;
 }
-label > span.no {
+.tab > .no {
   width:  10%; float: left;
   border: solid 1px #FFF;
   background-color: #555;
@@ -129,13 +167,14 @@ label.heading > span.no {
   background-color: inherit;
   border: none;
 }
-label > span.date      { width: 30%; }
-label > span.therapist { width: 40%; }
-label > span.signature { width: 10%; }
-label > span.signature > button { display: inline-block; margin: 0; }
+.tab > .date      { width: 30%; }
+.tab > .therapist { width: 40%; }
+.tab > .signature { width: 10%; }
+.tab > .signature > button { display: inline-block; margin: 0; }
+fieldset.tab > button[type=submit] { width: 5%; text-align: center; margin-left: 5%;}
 
-button[value=pos], button[value=neg] {
-  display: block;
+.signature > button[value=pos],
+.signature > button[value=neg] {
   margin-bottom: .25em;
   border: 1px solid black;
   height: 1.5em; width: 1.5em;
@@ -144,8 +183,23 @@ button[value=pos], button[value=neg] {
   color: #000;
   white-space: nowrap;
 }
-button[value=pos]::before { padding: 0 1ex 0 .25ex; content: "\2713"; }
-button[value=neg]::before { padding: 0 1ex 0 .25ex; content: "\00a0 \00a0 \00a0"; }
+.signature > input[type=checkbox] {display: none;}
+.signature > button[value=neg]::before { padding: 0 1ex 0 .25ex; content: "\2713"; }
+.signature > button[value=pos]::before { padding: 0 1ex 0 .25ex; content: "\00a0 \00a0 \00a0"; }
+
+input.tab + label.tab > input.date,
+input.tab + label.tab > input.therapist {
+  display: none;
+}
+input.tab:checked + label.tab > input.date,
+input.tab:checked + label.tab > input.therapist {
+  display: inline;
+}
+input.tab:checked + label.tab > span.date,
+input.tab:checked + label.tab > span.therapist {
+  display: none;
+}
+
 
 div.tab {
   border: 2px solid #333;
@@ -173,6 +227,7 @@ div.tab > fieldset.note > input.color[value="c101"]:checked ~ textarea { backgro
 div.tab > fieldset.note > input.color[value="c110"]:checked ~ textarea { background-color: #FF8; }
 div.tab > fieldset.note > input.color[value="c111"]:checked ~ textarea { background-color: #FFF; }
 
+div.tab > button.delete {float: right; display: inline-block;}
 EOF
 
 # vi:set filetype=css:
index cb3cf26..f6533f7 100755 (executable)
 # You should have received a copy of the GNU Affero General Public License
 # along with Confetti.  If not, see <http://www.gnu.org/licenses/>. 
 
+t_session_note(){
+  session_n="$1"
+  note_n="$2"
+  
+  color=session${session_n}_note${note_n}_color
+  unset c0 c1 c2 c3 c4 c5 c6 c7
+  
+  case "$tpy[$color]" in
+    c000) c0=checked;;
+    c001) c1=checked;;
+    c010) c2=checked;;
+    c011) c3=checked;;
+    c100) c4=checked;;
+    c101) c5=checked;;
+    c110) c6=checked;;
+    *)    c7=checked;;
+  esac
+
+cat <<EOF
+  <fieldset class=note>
+    <input class=color type=radio name="$color" value="c000" id=${color}_000 $c0><label for=${color}_000></label>
+    <input class=color type=radio name="$color" value="c001" id=${color}_001 $c1><label for=${color}_001></label>
+    <input class=color type=radio name="$color" value="c010" id=${color}_010 $c2><label for=${color}_010></label>
+    <input class=color type=radio name="$color" value="c011" id=${color}_011 $c3><label for=${color}_011></label>
+    <input class=color type=radio name="$color" value="c100" id=${color}_100 $c4><label for=${color}_100></label>
+    <input class=color type=radio name="$color" value="c101" id=${color}_101 $c5><label for=${color}_101></label>
+    <input class=color type=radio name="$color" value="c110" id=${color}_110 $c6><label for=${color}_110></label>
+    <input class=color type=radio name="$color" value="c111" id=${color}_111 $c7><label for=${color}_111></label>
+    <textarea name="session${session_n}_note${note_n}">${tpy[session${session_n}_note${note_n}]}</textarea>
+  </fieldset>
+EOF
+}
+
+t_session(){
+  session_n="$1"
+
+  sid=session${session_n}
+
+  if [ "$tpy[${sid}_sigset]" = pos ]; then
+    sig=neg
+    sigcheck=checked
+  elif [ "$tpy[${sid}_sigset]" = neg ]; then
+    sig=pos
+    unset sigcheck
+  elif [ "$tpy[${sid}_signature]" = pos ]; then
+    sig=neg
+    sigcheck=checked
+  else
+    sig=pos
+    unset sigcheck
+  fi
+
+cat <<EOF
+  <input type=hidden name=$sid value=exists>
+  <input class="tab" type="checkbox" id=${sid}_open name="${sid}_open" value="checked" ${tpy[${sid}_open]}>
+  <label class="tab" for="${sid}_open">
+    <span class=no>${session_n}.</span><!--
+ --><span class=date>${tpy[${sid}_date]}</span><!--
+ --><input class="date" name="${sid}_date" value="${tpy[${sid}_date]}" placeholder="$(l10n date)"><!--
+ --><span class=therapist>${tpy[${sid}_therapist]}</span><!--
+ --><input class="therapist" name="${sid}_therapist" value="${tpy[${sid}_therapist]}" placeholder="$(l10n therapist)"><!--
+ --><span class=signature><input type=checkbox name="${sid}_signature" value=pos $sigcheck><button type=submit name=${sid}_sigset value=$sig></button></span>
+  </label>
+  <div class=tab>
+    <input class="dotmark ov" type="image" name=dotmark value="$sid" src="/therapies/${id%.tpy}_${sid}.png" alt="">
+    $(n=1; while [ -n "${tpy[${sid}_note${n}]+x}" ]; do
+      t_session_note $session_n $n
+      n=$(($n+1))
+    done
+    printf '<button type=submit name=%s_note%s value="">+</button>' "$sid" "$n"
+    )
+
+    <button class=delete type=submit name=delete_session value=${session_n}>$(l10n delete_session)</button>
+    <button type=submit>$(l10n save)</button>
+  </div>
+EOF
+}
+
+therapy_sessions(){
+  n=1; while [ -n "${tpy[session${n}]}" ]; do
+    t_session $n
+    n=$(($n+1))
+  done
+
+  sid=session$n
+
+cat <<EOF
+  <fieldset class="tab">
+    <span class=no>…</span><!--
+ --><input class=date name=${sid}_date value="" placeholder="$(l10n date)" /><!--
+ --><input class=therapist name=${sid}_therapist value="" placeholder="$(l10n therapist)" /><!--
+ --><button type=submit name=new_session value=$sid>+</button></span>
+    <input type=hidden name="${sid}_note1" value="">
+    <input type=hidden name="${sid}_open" value="checked">
+  </fieldset>
+EOF
+}
+
+unset c0 c1 c2 c3 c4 c5 c6 c7
+case "$tpy[color]" in
+  c001) c1=checked;;
+  c010) c2=checked;;
+  c011) c3=checked;;
+  c100) c4=checked;;
+  c101) c5=checked;;
+  c110) c6=checked;;
+  c111) c7=checked;;
+     *) c0=checked;;
+esac
+
 cat <<EOF
-<form method=GET action="">
   <h1>Behandlungen</h1>
 
   <div class="patient">
-    <h2>Flrbrlprrf Zoidberg</h2>
-    <a href="?p=patienten">&lt; zur Patientenliste</a>
-    <span class="insurance">Gemeinsame Betriebskrankenkasse der Gesellschaften der Textilgruppe Hof</span>
+    <h2>$client_name</h2>
+    <a href="?p=prescriptions&amp;client=${id%%.*}.vcf">&lt; $(l10n prescriptionlist)</a>
   </div>
 
   <div class="prescription">
-    <h2>Verordnung</h2>
-    <button type=submit name=prescreviewed value=pos>Verordnung geprüft</button>
+    <h2>$(l10n therapy_prescription)</h2>
+    <span class="insurance">${mpx[insurance]}</span>
+    <label class="checkbox ${mpx[prescreviewed]:+checked}" for="prescreviewed">
+      $([ -n "${mpx[prescreviewed]}" ] && printf %s "$(l10n prescreviewed)" \
+                                       || printf %s "$(l10n prescreview)" )
+    </label>
     <ul>
-      <li>6x MT</li>
-      <li>6x Fango</li>
+      ${mpx[remidy]:+ <li>${mpx[quantity]}  ${mpx[remidy]}</li>}
+      ${mpx[remidy1]:+<li>${mpx[quantity1]} ${mpx[remidy1]}</li>}
     </ul>
-    ???
-    <button type=submit name=extrapay      value=neg>Zuzahlung</button>
+
+    ${mpx[addcontrib]:+
+    <label class='checkbox ${mpx[contribconfirm]:+checked}' for="addcontrib">
+      $([ -n "${mpx[contribconfirm]}" ] && printf %s "$(l10n contribconfirm)" ${mpx[contribconfirm]} \
+                                        || printf %s "$(l10n addcontrib)" )
+    </label>
+    }
   </div>
 
+<form method="POST" action="?action=update_therapy">
+  <input type="hidden" name="id" value="${id}">
+
   <label class="tab heading">
     <span class=no>Nr.</span><!--
  --><span class=date>Datum</span><!--
@@ -43,99 +163,20 @@ cat <<EOF
  --><span class=signature>Sig.</span>
   </label>
 
-  <input class="tab" type="checkbox" id=2015-10-15-1>
-  <label class="tab" for=2015-10-15-1>
-    <span class=no>1.</span><!--
- --><span class=date>15.10.2015</span><!--
- --><span class=therapist>Josh</span><!--
- --><span class=signature><button type=submit name=2015-10-15-1_sig value=pos></button></span>
-  </label>
-  <div class=tab>
-    <img class="dotmark ov" src="therapy_ov2015-10-15-1.png" alt="">
-
-    <fieldset class=note>
-      <input class=color type=radio name=2015-10-15-1_c1 value="c000" id=2015-10-15-1_c1c000><label for=2015-10-15-1_c1c000></label>
-      <input class=color type=radio name=2015-10-15-1_c1 value="c001" id=2015-10-15-1_c1c001><label for=2015-10-15-1_c1c001></label>
-      <input class=color type=radio name=2015-10-15-1_c1 value="c010" id=2015-10-15-1_c1c010><label for=2015-10-15-1_c1c010></label>
-      <input class=color type=radio name=2015-10-15-1_c1 value="c011" id=2015-10-15-1_c1c011 checked><label for=2015-10-15-1_c1c011></label>
-      <input class=color type=radio name=2015-10-15-1_c1 value="c100" id=2015-10-15-1_c1c100><label for=2015-10-15-1_c1c100></label>
-      <input class=color type=radio name=2015-10-15-1_c1 value="c101" id=2015-10-15-1_c1c101><label for=2015-10-15-1_c1c101></label>
-      <input class=color type=radio name=2015-10-15-1_c1 value="c110" id=2015-10-15-1_c1c110><label for=2015-10-15-1_c1c110></label>
-      <input class=color type=radio name=2015-10-15-1_c1 value="c111" id=2015-10-15-1_c1c111><label for=2015-10-15-1_c1c111></label>
-      <textarea name=2015-10-15-1_n1>
-Unfall 3.9.2015
-Bruch Oberarm rechts
-      </textarea>
-    </fieldset>
-
-    <fieldset class=note>
-      <input class=color type=radio name=2015-10-15-1_c2 value="c000" id=2015-10-15-1_c2c000><label for=2015-10-15-1_c2c000></label>
-      <input class=color type=radio name=2015-10-15-1_c2 value="c001" id=2015-10-15-1_c2c001><label for=2015-10-15-1_c2c001></label>
-      <input class=color type=radio name=2015-10-15-1_c2 value="c010" id=2015-10-15-1_c2c010><label for=2015-10-15-1_c2c010></label>
-      <input class=color type=radio name=2015-10-15-1_c2 value="c011" id=2015-10-15-1_c2c011><label for=2015-10-15-1_c2c011></label>
-      <input class=color type=radio name=2015-10-15-1_c2 value="c100" id=2015-10-15-1_c2c100 checked><label for=2015-10-15-1_c2c100></label>
-      <input class=color type=radio name=2015-10-15-1_c2 value="c101" id=2015-10-15-1_c2c101><label for=2015-10-15-1_c2c101></label>
-      <input class=color type=radio name=2015-10-15-1_c2 value="c110" id=2015-10-15-1_c2c110><label for=2015-10-15-1_c2c110></label>
-      <input class=color type=radio name=2015-10-15-1_c2 value="c111" id=2015-10-15-1_c2c111><label for=2015-10-15-1_c2c111></label>
-      <textarea name=2015-10-15-1_n2>
-Medikamentenallergie
-Komplikationen
-6. Rippe instabil
-      </textarea>
-    </fieldset>
-
-    <fieldset class=note>
-      <input class=color type=radio name=2015-10-15-1_c3 value="c000" id=2015-10-15-1_c3c000><label for=2015-10-15-1_c3c000></label>
-      <input class=color type=radio name=2015-10-15-1_c3 value="c001" id=2015-10-15-1_c3c001><label for=2015-10-15-1_c3c001></label>
-      <input class=color type=radio name=2015-10-15-1_c3 value="c010" id=2015-10-15-1_c3c010><label for=2015-10-15-1_c3c010></label>
-      <input class=color type=radio name=2015-10-15-1_c3 value="c011" id=2015-10-15-1_c3c011><label for=2015-10-15-1_c3c011></label>
-      <input class=color type=radio name=2015-10-15-1_c3 value="c100" id=2015-10-15-1_c3c100><label for=2015-10-15-1_c3c100></label>
-      <input class=color type=radio name=2015-10-15-1_c3 value="c101" id=2015-10-15-1_c3c101><label for=2015-10-15-1_c3c101></label>
-      <input class=color type=radio name=2015-10-15-1_c3 value="c110" id=2015-10-15-1_c3c110><label for=2015-10-15-1_c3c110></label>
-      <input class=color type=radio name=2015-10-15-1_c3 value="c111" id=2015-10-15-1_c3c111><label for=2015-10-15-1_c3c111></label>
-      <textarea name=2015-10-15-1_n3>
-      </textarea>
-    </fieldset>
-    <button type=submit name=edit value=2015-10-15-1_note3>Speichern</button>
-  </div>
-
-
-  <input class=tab type="checkbox" id=2015-10-22-1>
-  <label class=tab for=2015-10-22-1>
-    <span class=no>2.</span><!--
- --><span class=date>22.10.2015</span><!--
- --><span class=therapist>Josh</span><!--
- --><span class=signature><button type=submit name=2015-10-22-1_sig value=neg></button></span>
-  </label>
-  <div class=tab>
-    <img class="dotmark ov" src="therapy_ov2015-10-22-1.png" alt="">
-
-    <fieldset class=note>
-      <input class=color type=radio name=2015-10-22-1_c1 value="c000" id=2015-10-22-1_c1c000><label for=2015-10-22-1_c1c000></label>
-      <input class=color type=radio name=2015-10-22-1_c1 value="c001" id=2015-10-22-1_c1c001><label for=2015-10-22-1_c1c001></label>
-      <input class=color type=radio name=2015-10-22-1_c1 value="c010" id=2015-10-22-1_c1c010><label for=2015-10-22-1_c1c010></label>
-      <input class=color type=radio name=2015-10-22-1_c1 value="c011" id=2015-10-22-1_c1c011><label for=2015-10-22-1_c1c011></label>
-      <input class=color type=radio name=2015-10-22-1_c1 value="c100" id=2015-10-22-1_c1c100><label for=2015-10-22-1_c1c100></label>
-      <input class=color type=radio name=2015-10-22-1_c1 value="c101" id=2015-10-22-1_c1c101><label for=2015-10-22-1_c1c101></label>
-      <input class=color type=radio name=2015-10-22-1_c1 value="c110" id=2015-10-22-1_c1c110><label for=2015-10-22-1_c1c110></label>
-      <input class=color type=radio name=2015-10-22-1_c1 value="c111" id=2015-10-22-1_c1c111><label for=2015-10-22-1_c1c111></label>
-      <textarea name=2015-10-22-1_n1>
-      </textarea>
-    </fieldset>
-    <button type=submit name=edit value=2015-10-22-1_note3>Speichern</button>
-  </div>
+  $(therapy_sessions)
 
   <fieldset class=color>
-    <input class=color type=radio name=color value="c000" id=c000><label for=c000></label>
-    <input class=color type=radio name=color value="c001" id=c001><label for=c001></label>
-    <input class=color type=radio name=color value="c010" id=c010><label for=c010></label>
-    <input class=color type=radio name=color value="c011" id=c011><label for=c011></label>
-    <input class=color type=radio name=color value="c100" id=c100 checked><label for=c100></label>
-    <input class=color type=radio name=color value="c101" id=c101><label for=c101></label>
-    <input class=color type=radio name=color value="c110" id=c110><label for=c110></label>
-    <input class=color type=radio name=color value="c111" id=c111><label for=c111></label>
+    <input class=color type=radio name=color value="c000" id=c000 $c0><label for=c000></label>
+    <input class=color type=radio name=color value="c001" id=c001 $c1><label for=c001></label>
+    <input class=color type=radio name=color value="c010" id=c010 $c2><label for=c010></label>
+    <input class=color type=radio name=color value="c011" id=c011 $c3><label for=c011></label>
+    <input class=color type=radio name=color value="c100" id=c100 $c4><label for=c100></label>
+    <input class=color type=radio name=color value="c101" id=c101 $c5><label for=c101></label>
+    <input class=color type=radio name=color value="c110" id=c110 $c6><label for=c110></label>
+    <input class=color type=radio name=color value="c111" id=c111 $c7><label for=c111></label>
   </fieldset>
-  <img class="dotmark bg" src="therapy_background.png" alt="">
+  <img class="dotmark bg" src="?action=static_file&amp;name=therapy_background.png" alt="">
+
 </form>
 
 EOF