course attendance in attendees list
authorpaul <paul@plutz.net>
Mon, 2 Dec 2013 17:57:17 +0000 (17:57 +0000)
committerpaul <paul@plutz.net>
Mon, 2 Dec 2013 17:57:17 +0000 (17:57 +0000)
svn path=/trunk/; revision=34

actions/update_attendee.sh
index.cgi
pages/attendees.sh
templates/attendees.css.sh
templates/edit_attendee.sh
templates/text_attendee.sh
templates/view_attendee.sh

index 1fcd3ec..078d096 100644 (file)
@@ -8,8 +8,9 @@ filtertype="&filtertype=$_REF[\"filtertype\"]"
 order="&order=$_REF[\"order\"]"
 
 card="$_POST[\"card\"]"
-tempfile="temp/$card"
-cardfile="vcard/$card"
+tempfile="$_DATA/temp/$card"
+cardfile="$_DATA/vcard/$card"
+attfile="$_DATA/mappings/attendance"
 
 echo "BEGIN:VCARD\r" >"$tempfile"
 echo "VERSION:4.0\r" >>"$tempfile"
@@ -33,6 +34,18 @@ case "$_POST[\"action\"]" in
     echo -n "Location: http://$HTTP_HOST/?page=attendees${filter}${filtertype}${order}&edit=$card\n\n"
     ;;
   update)
+    attendance=()
+    for att in attendance attendance{0..100}; do
+      [ -n "$_POST[\"$att\"]" ] && attendance+=("$_POST[\"$att\"]")
+    done
+    sed -rn 's:^(.+)'$card'$:\1:p' "$attfile" |while read course; do
+      touch "$_DATA/ical/$course"
+    done
+    sed -i -r '/^(.+)\t'$card'$/d' "$attfile"
+    for each in $attendance; do
+      echo "$each\t$card" >>"$attfile"
+    done
+
     echo "END:VCARD\r" >>"$tempfile"
     mv "$tempfile" "$cardfile"
     echo -n "Location: http://$HTTP_HOST/?page=attendees${filter}${filtertype}${order}#$card\n\n"
index 4273071..119228e 100755 (executable)
--- a/index.cgi
+++ b/index.cgi
@@ -25,10 +25,11 @@ _DATA="$(dirname "$call")"  #storage directory
 [ -w "$_DATA" ] && [ -d "$_DATA" ] || die "storage directory must be writable"
 
 # create directories for object storage
-for each in "$_DATA"/{vcard,ical,cache,temp}; do
+for each in "$_DATA"/{vcard,ical,cache,temp,mappings}; do
   [ ! -e "$each" ] && mkdir "$each"
   [ -w "$each" ] && [ -d "$each" ] || die "storage $each must be a writable directory"
 done
+touch "$_DATA/mappings/attendance"
 
 # create htaccess file
 [ -f .htaccess ] || cat >.htaccess <<EOF
index a8a22c7..9d03cad 100755 (executable)
@@ -2,6 +2,13 @@
 
 [ -z "$_GET[\"order\"]" ] && _GET["order"]=firstname
 
+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")"
+    echo "$(date -d "$icstime" "+%u %H%M%S")\t$file"
+  done |sort |sed -r 's:^.*\t(.*/)([^/]+)$:\2:'
+}
+
 listcards() {
   case "$_GET[\"filtertype\"]" in
     any)
index 2639fdb..006bd95 100644 (file)
@@ -68,10 +68,24 @@ cat <<EOF
   display: inline-block;
   float:left;
   width: 20ex;
-  margin: .125em .5ex .5ex .5ex;
+  margin: .125em .25ex .5ex .25ex;
   padding: 0 .2em .2em .2em;
   background: #EEE;
 }
+.cardlist .card .section a.attendance {
+  display: inline-block;
+  margin-right: 1ex;
+  word-wrap: break-word;
+}
+
+.cardlist .card .attendance {
+  width: 83.5ex;
+}
+.cardlist .card .attendance .check {
+  display: inline-block;
+  width: 27ex;
+}
+
 .cardlist .card .control {
   float: right;
   text-align: right;
index 004f690..357e2bf 100755 (executable)
@@ -1,6 +1,9 @@
 check_gen() {
   [ "$value[GENDER]" = "$1" ] && echo 'selected="selected"'
 }
+check_a() {
+  egrep -q "^${1}.${id}$" "$_DATA/mappings/attendance" && echo 'checked="checked"'
+}
 
 n_last="$(echo "$values[N]" |sed -rn 's:^([^;]*;){0} *([^;]*).*$:\2:p')"
 n_first="$(echo "$values[N]" |sed -rn 's:^([^;]*;){1} *([^;]*).*$:\2:p')"
@@ -87,6 +90,14 @@ for n in NOTE NOTE{0..10}; do [ -n "$values[$n]" ] &&\
 done
 echo '  </div>'
 echo ''
+echo '  <div class="section attendance">'
+echo '    <span class="sectitle">'$(l10n course_attendance)'</span>'
+listcourses |while read each; do
+  cname="$(sed -rn 's:^SUMMARY\:(.*)$:\1:p' "$_DATA/ical/$each")"
+  echo '    <span class="check attendance"><input type="checkbox" name="attendance" value="'$each'" '$(check_a "$each")'/>'$cname'</span>'
+done
+echo '  </div>'
+echo ''
 echo '  <div class="section control">'
 echo '    <button class="item control" type="submit" name="action" value="addfield">'$(l10n edit_addfield)'</button>'
 echo '    <select class="item control" name="newfield">'
index 5efbb80..132cc42 100755 (executable)
@@ -76,6 +76,7 @@ item_name[filter_course]="Kurs"
 item_name[filter_apply]="Filtern"
 item_name[filter_cancel]="Filter löschen"
 item_name[newcard]="Neuen Eintrag anlegen"
+item_name[course_attendance]="Kursteilnahme"
 
 l10n() {
   [ -n "$item_name[$1]" ] && echo -n "$item_name[$1]" || echo -n "$1"
index 53c508c..685ea8a 100755 (executable)
@@ -58,6 +58,14 @@ for n in NOTE NOTE{0..10}; do [ -n "$values[$n]" ] &&\
 done
 echo '  </div>'
 echo ''
+echo '  <div class="section">'
+echo '    <span class="sectitle">'$(l10n course_attendance)'</span>'
+sed -rn 's:(.*)\t'$id'$:\1:p' "$_DATA/mappings/attendance" |while read each; do
+  cname="$(sed -rn 's:^SUMMARY\:(.*)$:\1:p' "$_DATA/ical/$each")"
+  echo '    <a class="item attendance" href="/?page=courses#'$each'">'$cname'</a>'
+done
+echo '  </div>'
+echo ''
 echo '  <div class="section control">'
 echo '    <a class="item control" href="?action=edit_attendee&card='${id}'">'$(l10n edit)'</a>'
 echo '    <a class="item control" href="?export=vcard&card='${id}'">'$(l10n vcf_export)'</a>'