X-Git-Url: https://git.plutz.net/?a=blobdiff_plain;f=handlers%2F60_move_rename_delete.sh;h=27246bd108acecac61ba2d7dc17406979aa2272d;hb=e1441ae3543689244e9275c0581ad6c00d610f67;hp=3879e9b86b4c8c104d5fdd9f286699cfeb80c15c;hpb=a26c541b845f86aa37b872d06ab3bf51e8206be8;p=shellwiki
diff --git a/handlers/60_move_rename_delete.sh b/handlers/60_move_rename_delete.sh
index 3879e9b..27246bd 100755
--- a/handlers/60_move_rename_delete.sh
+++ b/handlers/60_move_rename_delete.sh
@@ -1,6 +1,20 @@
#!/bin/sh
-l10n_immutablepage >/dev/null \
+# 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
Immutable Page
@@ -33,7 +47,7 @@ case "${PATH_INFO}" in
*) return 1;;
esac
-l10n_movepage >/dev/null \
+l10n_movepage >/dev/null 2>&1 \
|| l10n_movepage(){ # TRANSLATION
cat <<-EOF
Move Page
@@ -49,7 +63,7 @@ l10n_movepage >/dev/null \
Cancel
EOF
}
-l10n_renamepage >/dev/null \
+l10n_renamepage >/dev/null 2>&1 \
|| l10n_renamepage(){ # TRANSLATION
cat <<-EOF
Rename Page
@@ -65,26 +79,46 @@ l10n_renamepage >/dev/null \
Cancel
EOF
}
-l10n_deletepage >/dev/null \
+l10n_deletepage >/dev/null 2>&1 \
|| l10n_deletepage(){ # TRANSLATION
cat <<-EOF
Delete Page
$(HTML "${page}")
This page and its attachments will be deleted
+ Delete subpages
- Past revisions of the page text (including the current one) will remain accessible and can be restored.
- Attachments will be deleted completely, and cannot be restored.
- Subpages will not be affected and can still be accessed normally.
+ EOF
+ [ "$REV_PAGES" = true ] \
+ && printf ' Past revisions of the page text (including the current one) will remain accessible and can be restored. '
+ [ "$REV_PAGES" = true -a "$REV_ATTACHMENTS" = true ] \
+ && printf ' Attachments can be restored as well. ' \
+ || printf ' Attachments will be deleted completely, and cannot be restored. '
+ cat <<-EOF
+ Subpages will not be affected and can still be accessed normally.
Delete
Cancel
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:")
+
+ $(while read page; do
+ printf '%s ' "$(HTML $page)"
+ done)
+
+ $(_ 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