X-Git-Url: http://git.plutz.net/?a=blobdiff_plain;f=actions%2Ffilter.sh;h=f5057bea390c72445f5fb7e8accc03f29874852f;hb=d716f2ce1fe64cf87f777490315bc51906001c72;hp=94b87f2c7ce6036f54b4e5458cba35344bc6f313;hpb=c7e6e63b567cd68f0a9c1f12dd92b175d2f6a2a0;p=serve0 diff --git a/actions/filter.sh b/actions/filter.sh index 94b87f2..f5057be 100755 --- a/actions/filter.sh +++ b/actions/filter.sh @@ -1,37 +1,42 @@ #!/bin/zsh +# Copyright 2014 - 2016 Paul Hänsch +# +# This file is part of Serve0 +# +# Serve0 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. +# +# Serve0 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 Serve0 If not, see . -if [ -n "${CONTENT_LENGTH}" -a "${CONTENT_LENGTH}" -gt 0 ]; then -(head -c "${CONTENT_LENGTH}"; echo)|sed 's:&:\n:g;s:\r::g' |while read line; do - case "$line" in - type[0-9]=neg) - [ -z "$filters" ] && filters="!" - [ -n "$filters" ] && egrep -q '(^|\^|\||!)$' <<<"$filters" || filters="${filters}^!" - ;; - type[0-9]=pos) - egrep -q '(^|\^|\||!)$' <<<"$filters" || filters="${filters}^" - ;; - category=*) - category="$(sed 's/^category=//;s/+/ /g;s/%/\\x/g' <<<"$line")" - category="$(echo -e "${category}" |sed 's/\t/ /g;s/\r//g;s/\\/\\\\/g' |head -n1)" - ;; - filter=*) - filter="$(sed 's/^filter=//;s/+/ /g;s/%/\\x/g' <<<"$line")" - filter="$(echo -e "${filter}" |sed 's/\t/ /g;s/\r//g;s/\\/\\\\/g' |head -n1)" - egrep -q '(^|\^|\||!)$' <<<"${filters}" || filters="${filters}|" - filters="${filters}${filter}" - ;; - cfilter=*) - cfilter="$(sed 's/^cfilter=//;s/+/ /g;s/%/\\x/g' <<<"$line")" - cfilter="$(echo -e "${cfilter}" |sed 's/\t/ /g;s/\r//g;s/\\/\\\\/g' |head -n1)" - egrep -q '(^|\^|\||!)$' <<<"${filters}" || filters="${filters}|" - [ -n "$cfilter" ] && filters="${filters}${category}:${cfilter}" - ;; - o=Name) order=Name;; - o=Date) order=Date;; - o=Length) order=Length;; - esac +order=$(validate "${_POST[o]}" 'Name|Length|Date' Name) + +for fn in {0..9}; do + category="$(validate "${_POST[category$fn]}" '[[:alnum:]_-]+' none)" + + n=''; while [ -n "${_POST[cfilter${fn}_$n]}" ]; do + #cfilter="$(validate "${_POST[cfilter${fn}_$n]}" '[[:alnum:]\?!\._=\(\)+-]+' '#')" + cfilter="${_POST[cfilter${fn}_$n]}" + + 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 -fi -echo "?o=${order}&f=${filters}" >>${_DATA}/meta/recent -echo -n "Location: ?o=${order}&f=${filters}\n\n" +printf %s\\n "?o=${order}&f=${filters}" >>${_DATA}/meta/recent +redirect "?o=${order}&f=${filters}"