X-Git-Url: https://git.plutz.net/?a=blobdiff_plain;f=handlers%2F60_move_rename_delete.sh;h=749affcfdd88fa31c0021fb1c924bcd2c617f843;hb=3c949f9f02cddc9d1cd30174342aae1d58175999;hp=33f79d00270f381636c1f110765de79f6277444d;hpb=cc10cae9b0fb87a17819a487842913c2c23ddd3c;p=shellwiki diff --git a/handlers/60_move_rename_delete.sh b/handlers/60_move_rename_delete.sh index 33f79d0..749affc 100755 --- a/handlers/60_move_rename_delete.sh +++ b/handlers/60_move_rename_delete.sh @@ -1,5 +1,19 @@ #!/bin/sh +# Copyright 2022 - 2023 Paul Hänsch +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +# IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + l10n_immutablepage >/dev/null 2>&1 \ || l10n_immutablepage(){ #TRANSLATION cat <<-EOF @@ -19,7 +33,7 @@ case "${PATH_INFO}" in printf 'Refresh: %i, url=%s\r\n' 4 ./ theme_error 403 return 0 - elif [ -d "$_EXEC/pages/${page}/" ]; then + elif [ ! -d "$_DATA/pages/${page}" -a -d "$_EXEC/pages/${page}" ]; then theme_page - <<-EOF

@@ -71,20 +85,40 @@ l10n_deletepage >/dev/null 2>&1 \

Delete Page

$(HTML "${page}")

This page and its attachments will be deleted

+ EOF } +list_writable() { + local PATH_INFO page="${1%/}/" + + if acl_write "$page"; then + PATH_INFO="$page" + page_glob "*" 0 \ + | while read page; do + list_writable "${PATH_INFO}${page}" + done + printf %s\\n "$page" |debug + fi +} + if [ "$REQUEST_METHOD" = POST ]; then action="$(POST action)" newname="$(POST newname |grep -m1 -xE '[^#/]*')" newlocation="$(POST newlocation |grep -m1 -xE '/[^#]*')" + delsub="$(POST delete_subpages |grep -m1 -xE 'true|false')" else case "${PATH_INFO}" in */\[move\]) location="${page%/}" location="${location%/*}/" @@ -124,7 +158,7 @@ if [ "$action" = rename -a "$newname" ]; then if [ -d "$_DATA/pages/$newname" ]; then printf 'Refresh: %i\r\n' 4 - export ERRORMSG="A location of that name already exists." + export ERROR_MSG="A location of that name already exists." theme_error 400 return 0 elif ! acl_write "$oldname" || ! acl_write "$newname"; then @@ -148,12 +182,12 @@ elif [ "$action" = move -a "$newlocation" ]; then if [ -d "$_DATA/pages/$newname" ]; then printf 'Refresh: %i\r\n' 4 - export ERRORMSG="A page of that name already exists at the given location." + export ERROR_MSG="A page of that name already exists at the given location." theme_error 400 return 0 elif [ ! -d "$_DATA/pages/$newlocation" ]; then printf 'Refresh: %i\r\n' 4 - export ERRORMSG="The given location does not exist." + export ERROR_MSG="The given location does not exist." theme_error 400 return 0 elif ! acl_write "$oldname" || ! acl_write "$newname"; then @@ -175,24 +209,51 @@ elif [ "$action" = delete ]; then printf 'Refresh: %i\r\n' 4 theme_error 403 return 0 - elif [ "$REV_PAGES" = true ]; then - git -C "$_DATA" rm "pages/${oldname}/#page.md" - git -C "$_DATA" commit -m 'Page # '"$oldname"' # deleted by user @ '"$USER_NAME"' @' \ - -- "pages/${oldname}/#page.md" - rm -r -- "$_DATA/pages/${oldname}"/\#* - rmdir -- "$_DATA/pages/${oldname}/" || true - REDIRECT ./ - else - rm -- "$_DATA/pages/${oldname}/#page.md" - rm -r -- "$_DATA/pages/${oldname}"/\#* - rmdir -- "$_DATA/pages/${oldname}/" || true - REDIRECT ./ fi + + printf 'Status: 202 Accepted\r\n' + { [ "$delsub" = true ] \ + && list_writable "$oldname" \ + || printf %s\\n "$oldname" + } | while read oldname; do + if [ "$REV_PAGES" = true -a "$REV_ATTACHMENTS" = true ]; then + git -C "$_DATA" rm "pages/${oldname}/#page.md" >&2 + git -C "$_DATA" rm -r "pages/${oldname}/#attachments/" >&2 + git -C "$_DATA" commit -m 'Page # '"$oldname"' # deleted by user @ '"$USER_NAME"' @' \ + -- "pages/${oldname}/#page.md" "pages/${oldname}/#attachments/" >&2 + rm -r -- "$_DATA/pages/${oldname}"/\#* + rmdir -- "$_DATA/pages/${oldname}/" || true + elif [ "$REV_PAGES" = true ]; then + git -C "$_DATA" rm "pages/${oldname}/#page.md" >&2 + git -C "$_DATA" commit -m 'Page # '"$oldname"' # deleted by user @ '"$USER_NAME"' @' \ + -- "pages/${oldname}/#page.md" >&2 + rm -r -- "$_DATA/pages/${oldname}"/\#* + rmdir -- "$_DATA/pages/${oldname}/" || true + else + rm -- "$_DATA/pages/${oldname}/#page.md" + rm -r -- "$_DATA/pages/${oldname}"/\#* + rmdir -- "$_DATA/pages/${oldname}/" || true + fi + printf '%s\n' "$oldname" + done | { + cat <<-EOF +
+

$(_ "Pages deleted:")

+ + $(_ OK) +
+ EOF + } | theme_page - + return 0 elif [ "$action" = cancel ]; then REDIRECT ./ elif [ "$action" ]; then printf 'Refresh: %i\r\n' 4 - export ERRORMSG="Missing parameters." + export ERROR_MSG="Missing parameters." theme_error 400 return 0 fi