]> git.plutz.net Git - serve0/blobdiff - actions/filter.sh
cleaner filter builder
[serve0] / actions / filter.sh
index 957b1e7af2906fa3617c13df644ccd7231cea26f..c7f4d87fd8aba5e3125866735a397d07fc33f6b0 100755 (executable)
@@ -1,25 +1,24 @@
 #!/bin/zsh
 
 cgi_post
-order="${_POST[o]}"
+order=$(validate "${_POST[o]}" 'Name|Length|Date' Name)
 
 for fn in {0..9}; do
-  type="${_POST[type$fn]}"
-  category="$(echo "${_POST[category$fn]}" |sed 's/\t/ /g;s/\r//g;s/\\/\\\\/g' |head -n1)"
+  category="$(validate "${_POST[category$fn]}" '[[:alnum:]_-]+' none)"
 
-  if [ "$type" = "neg" ]; then
-    [ -z "$filters" ] && filters="!"
-    [ -n "$filters" ] && egrep -q '(^|\^|\||!)$' <<<"$filters" || filters="${filters}^!"
-  elif [ "$type" = "pos" ]; then
-    egrep -q '(^|\^|\||!)$' <<<"$filters" || filters="${filters}^"
-  fi
+  n=''; while [ -n "${_POST[cfilter${fn}_$n]}" ]; do
+    cfilter="$(validate "${_POST[cfilter${fn}_$n]}" '[[:alnum:]\?!\._=\(\)+-]+' '#')"
 
-  n=''
-  while [ -n "${_POST[cfilter${fn}_$n]}" ]; do
-    cfilter="$(echo "${_POST[cfilter${fn}_$n]}" |sed 's/\t/ /g;s/\r//g;s/\\/\\\\/g' |head -n1)"
-    egrep -q '(^|\^|\||!)$' <<<"${filters}" || filters="${filters}|"
-    [ "$category" = "none" ] && filters="${filters}${cfilter}" || filters="${filters}${category}:${cfilter}"
-    [ -z "$n" ] && n=0 || n=$(($n + 1))
+    if [ -z "$n" ]; then
+      [ -n "$filters" ] && filters="${filters}^"
+      [ "${_POST[type$fn]}" = 'neg' ] && filters="${filters}!"
+      n=0
+    else
+      filters="${filters}|"
+      n=$(($n + 1))
+    fi
+    [ "$category" = "none" ] && filters="${filters}${cfilter}" \
+                             || filters="${filters}${category}:${cfilter}"
   done
 done