X-Git-Url: https://git.plutz.net/?p=confetti;a=blobdiff_plain;f=pages%2Fcards.sh;h=538146d83749fdc2b1c24d403c1a69e51487b090;hp=f2675ba0f7a9301baa88852376c9943791d2335b;hb=refs%2Fheads%2Fmaster;hpb=69e661b5c8ec195bd3c4998a623a60607b47059e diff --git a/pages/cards.sh b/pages/cards.sh deleted file mode 100755 index f2675ba..0000000 --- a/pages/cards.sh +++ /dev/null @@ -1,281 +0,0 @@ -#!/bin/zsh - -# Copyright 2014 - 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 . - -[ -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) - grep -il "${_GET[filter]}" ${_DATA}/vcard/*vcf - ;; - name) - egrep -xil "(FN|NICKNAME|N)(;.+)*:.*${_GET[filter]}.*" ${_DATA}/vcard/*vcf - ;; - street) - egrep -xil "(ADR)(;.+)*:([^;]*;){2}${_GET[filter]}.*" ${_DATA}/vcard/*vcf - ;; - zip) - egrep -xil "(ADR)(;.+)*:([^;]*;){5}${_GET[filter]}.*" ${_DATA}/vcard/*vcf - ;; - telephone) - egrep -xil "(TEL)(;.+)*:.*${_GET[filter]}.*" ${_DATA}/vcard/*vcf - ;; - birth) - egrep -xil "(BDAY)(;.+)*:${_GET[filter]}.*" ${_DATA}/vcard/*vcf - ;; - course) - ;; - *) ls -1 ${_DATA}/vcard/*vcf 2>/dev/null - ;; - esac |case "${_GET[order]}" in - firstname) - while read file; do - fn=$(sed -rn 's:^N(;.+)*\:([^;]*;){1} *([^;]*).*$:\3:p' "$file") - echo "$fn\t$file" - done - ;; - lastname) - while read file; do - ln=$(sed -rn 's:^N(;.+)*\:([^;]*;){0} *([^;]*).*$:\3:p' "$file") - echo "$ln\t$file" - done - ;; - bdate) - while read file; do - bd=$(sed -rn 's:^BDAY(;.+)*\:(.*)$:\2:p' "$file") - echo "$bd\t$file" - done - ;; - *) - sed -r 's:^.*$:x\t&:' - ;; - esac |sort |sed -r 's:^.*\t(.*/)([^/]+)$:\2:' -} - -vcf_parse() { - tr -d '\n' <"$1" |sed -r 's:\r ::g;s:\r:\n:g' \ - | sed -rn ' - s:^PHOTO:001 PHOTO:p; - s:^X-MS-CARDPICTURE:001 PHOTO:p; - s:^LOGO:002 LOGO:p; - s:^FN:003 FN:p; - s:^N[\:;]:004 &:p - s:^NICKNAME:005 NICKNAME:p; - s:^SOUND:006 SOUND:p; - s:^GENDER:007 GENDER:p; - s:^X-GENDER:007 GENDER:p; - s:^KIND:008 KIND:p; - s:^TITLE:009 TITLE:p; - s:^ROLE:010 ROLE:p; - s:^ORG:011 ORG:p; - s:^MEMBER:012 MEMBER:p; - s:^CATEGORIES:013 CATEGORIES:p; - s:^ANNIVERSARY:014 ANNIVERSARY:p; - s:^X-ANNIVERSARY:014 ANNIVERSARY:p; - s:^X-EVOLUTION-ANNIVERSARY:014 ANNIVERSARY:p; - s:^X-KADDRESSBOOK-X-Anniversary:014 ANNIVERSARY:p; - s:^BDAY:015 BDAY:p; - s:^EMAIL:016 EMAIL:p; - s:^TEL:017 TEL:p; - s:^IMPP:018 IMPP:p; - s:^X-AIM(;[^"\:]+|;"[^"]+")*\:(.*)$:018 IMPP\1\:aim\:\2:p; - s:^X-ICQ(;[^"\:]+|;"[^"]+")*\:(.*)$:018 IMPP\1\:aim\:\2:p; - s:^X-GOOGLE-TALK(;[^"\:]+|;"[^"]+")*\:(.*)$:018 IMPP\1\:xmpp\:\2:p; - s:^X-JABBER(;[^"\:]+|;"[^"]+")*\:(.*)$:018 IMPP\1\:xmpp\:\2:p; - s:^X-MSN(;[^"\:]+|;"[^"]+")*\:(.*)$:018 IMPP\1\:msn\:\2:p; - s:^X-YAHOO(;[^"\:]+|;"[^"]+")*\:(.*)$:018 IMPP\1\:ymsgr\:\2:p; - s:^X-SIP(;[^"\:]+|;"[^"]+")*\:(sip\:)?(.*)$:018 IMPP\1\:sip\:\3:p; - s:^ADR:019 ADR:p; - s:^LABEL(;[^"\:]+|;"[^"]+")*\:(.*)$:019 ADR;LABEL="\2"\1\::p; - s:^URL:021 URL:p; - s:^X-EVOLUTION-BLOG-URL:021 URL:p; - s:^LANG:022 LANG:p; - s:^NOTE:023 NOTE:p; - s:^UID:026 UID:p; - - s:^RELATED:025 RELATED:p; - s:^AGENT:025 RELATED\;TYPE=agent:p; - s:^X-ASSISTANT:025 RELATED\;TYPE=assistant;VALUE=text:p; - s:^X-EVOLUTION-ASSISTANT:025 RELATED\;TYPE=assistant;VALUE=text:p; - s:^X-KADDRESSBOOK-X-AssistantsName:025 RELATED\;TYPE=assistant;VALUE=text:p; - s:^X-MANAGER:025 RELATED\;TYPE=manager;VALUE=text:p; - s:^X-EVOLUTION-MANAGER:025 RELATED\;TYPE=manager;VALUE=text:p; - s:^X-KADDRESSBOOK-X-ManagersName:025 RELATED\;TYPE=manager;VALUE=text:p; - s:^X-SPOUSE:025 RELATED\;TYPE=spouse;VALUE=text:p; - s:^X-EVOLUTION-SPOUSE:025 RELATED\;TYPE=spouse;VALUE=text:p; - s:^X-KADDRESSBOOK-X-SpouseName:025 RELATED\;TYPE=spouse;VALUE=text:p; - - s:^BEGIN.*$:000 &:p; - s:^CALADRURI.*$::; - s:^CALURI.*$::; - s:^CLASS.*$::; - s:^CLIENTPIDMAP.*$::; - s:^END.*$:100 &:p; - s:^FBURL.*$::; - s:^GEO.*$::; - s:^MAILER.*$::; - s:^NAME.*$::; - s:^PRODID.*$::; - s:^PROFILE.*$::; - s:^REV.*$::; - s:^SORT-STRING.*$::; - s:^SOURCE.*$::; - s:^TZ.*$::; - s:^VERSION.*$:000 VERSION\:4.0:p; - s:^XML.*$::; - - s:^([A-Z].*)$:024 \1:p; - ' \ - |sort |while read -r line; do - case "$line" in - 00[012]*) - echo -E "$line" - ;; - 003*) - fn=$(echo -E "$line" |sed -r 's:^[0-9]{3} ([^;\:]+)(;[^"\:]+|;"[^"]+")*\:(.*)$:\3:g' |tr -d '\r') - ;; - 004*) - n=$(echo -E "$line" \ - |sed -rn 's:^([0-9]{3} )([^;\:]+)(;[^"\:]+|;"[^"]+")*\:([^;]*)(\;[^;]*)(\;[^;]*)?(\;[^;]*)?(\;[^;]*)?$:\7 \5 \6 \4 \8:gp' \ - |sed -r 's:,: :;s:\;: :g;s: +: :g' \ - |tr -d '\r' - ) - echo -E "$line" - ;; - 005*) - nick=$(echo -E "$line" |sed -r 's:^[0-9]{3} ([^;\:]+)(;[^"\:]+|;"[^"]+")*\:(.*)$:\3:g' |tr -d '\r') - echo -E "$line" - ;; - *) - [ -n "$n" ] && fn="$n" - #[ -n "$fn" -a -n "$nick" ] && fn="$fn aka. $nick" - [ -n "$fn" ] && echo -E "003 FN:$fn" \ - || echo -E "003 FN:$nick" - echo -E "$line" - cat - ;; - esac - done |tr -d '\r' \ - | sed -r 's:^[0-9]{3} ([^;\:]+)(;[^"\:]+|;"[^"]+")*\:(.*)$:key="\1"\nvalue="\3"\ntag=\2:g' \ - | while read -r line; do - case "$line" in - key=*) echo -E "$line" - ;; - value=*) echo -E "$line" - ;; - tag=*) ot='' - echo -E "$line" \ - | sed -r 's:^tag=::;s:\;([A-Z+_-]+="[^"]+"|[A-Z+_-]+=[^\;]+):\n\1:g;' \ - | sed -r 's:([A-Z+_-]+)="?(.*)"?:tag\[\1\]="\2":g' \ - | sed -r '/^ *$/d' \ - | sort |while read -r tag; do - nt="$(echo -E "$tag" |sed -r 's:^tag\[([A-Z+_-]+)\]="(.*)"$:\1:')" - nv="$(echo -E "$tag" |sed -r 's:^tag\[([A-Z+_-]+)\]="(.*)"$:\2:')" - [ "$nt" = "$ot" ] && vl="$nv,$vl" || vl="$nv" - echo -E "tag[$nt]=\"$vl\"" - ot="$nt" - done - ;; - esac - done \ - | sed -r 's:[\\$`]:\\&:g' -} - -view_card() { #Parameter: Cardfile - id="$1" - cardfile="$_DATA/vcard/${id}" - cachefile="$_DATA/cache/${id}.cache" - unset key - if [ "$cachefile" -nt "$cardfile" ]; then - cat "$cachefile" - else - declare -A tags - declare -A values - vcf_parse "$cardfile" |while read -r line; do - declare -A tag - case "$line" in - value*) eval "$line";; - tag*) eval "$line";; - key*) - if [ -z "$key" ]; then - eval "$line" - else - values[$key]="$value" - for t in ${(k)tag}; do - tags[${key}_$t]="$tag[$t]" - 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 value - unset tag - fi - ;; - esac - done - . $view_card |tee "$cachefile" - fi -} - -edit_card() { #Parameter: Cardfile - id="$1" - cardfile="$_DATA/vcard/$id" - tempfile="$_DATA/temp/$id" - [ -f "$tempfile" ] && cardfile="$tempfile" - unset key - - declare -A tags - declare -A values - vcf_parse "$cardfile" |while read -r line; do - declare -A tag - case "$line" in - value*) eval "$line";; - tag*) eval "$line";; - key*) - if [ -z "$key" ]; then - eval "$line" - else - [ -n "$value" ] && values[$key]="$value" || values[$key]='\r' - for t in ${(k)tag}; do - tags[${key}_$t]="$tag[$t]" - 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 value - unset tag - fi - ;; - esac - done - . $edit_card -}