]> git.plutz.net Git - serve0/blob - actions/multitag.sh
adapted to update in shcgi
[serve0] / actions / multitag.sh
1 #!/bin/zsh
2
3 filter="${_GET[f]}"
4 search="${_GET[s]}"
5 order=$(echo "${_GET[o]}" |egrep '^(Name|Date|Length)$')
6 page=$(echo "${_GET[pn]}" |egrep '^[0-9]+$')
7
8 addtag(){
9   meta="$1"
10   tag="$2"
11   
12   length=0; width=0; height=0;
13   if [ -r "$meta" ]; then
14     head -n1 "$meta" |read length width height info
15     tags="$(sed -n 2p "$meta" |sed -r 's:^\|(.*)$:\1:')"
16     description="$(sed -n '3,$p' "$meta")"
17   fi
18   
19   egrep -q "(^|.*\|)$tag(\|.*|$)" <<<"$tags" || tags="$tag|$tags"
20   
21   cat <<EOF >"$meta"
22 $length $width  $height $info
23 $tags
24 $description
25 EOF
26 }
27
28 cgi_post
29 n=''
30 while [ -n "${_POST[tagsel$n]}" ]; do
31   tagsel="${_POST[tagsel$n]}"
32   ( t=''
33     while [ -n "${_POST[ctag$t]}" ]; do
34       echo "${_POST[ctag$t]}"
35       [ -z "$t" ] && t=0 || t=$(($t + 1))
36     done
37     echo "${_POST[tags]}"
38   ) |sed -r 's:\t| :_:g;s:^!|\r|\$|\^::g;s:\\:\\\\:g;s/</\&lt\;/g;s/>/\&gt\;/g' \
39   | while read tag; do
40     addtag "${_DATA}/meta/$tagsel.meta" "$tag"
41   done
42   rm "${_DATA}/cache/$tagsel.cache" 2>/dev/null
43
44   [ -z "$n" ] && n=0 || n=$(($n + 1))
45 done
46
47 rm "${_DATA}"/cache/\?* 2>/dev/null
48 [ -n "${_POST[tags]}" ] && rm "${_DATA}"/cache/taglist 2>/dev/null
49
50 echo -n "Location: ?o=$order&s=$search&f=$filter&pn=$page\n\n"