]> git.plutz.net Git - serve0/blob - actions/multitag.sh
use new cgi engine for multitagging
[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[\"p\"]" |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&p=$page\n\n"