X-Git-Url: https://git.plutz.net/?a=blobdiff_plain;f=handlers%2F60_edit.sh;fp=handlers%2F60_edit.sh;h=6d4e1eac12bd7c1359b7b1a95ad9bd19dcfa11b4;hb=c2d4d148a5155b27e7573462b12476df231e23f9;hp=0000000000000000000000000000000000000000;hpb=d5f49dcedc32f9eaa2932c0a9e9bf5ffbc92cab9;p=shellwiki diff --git a/handlers/60_edit.sh b/handlers/60_edit.sh new file mode 100755 index 0000000..6d4e1ea --- /dev/null +++ b/handlers/60_edit.sh @@ -0,0 +1,69 @@ +#!/bin/sh + +. "${_EXEC}/session_lock.sh" + +wiki_text() { + # Print source text of a wiki page + # Get page from data or underlay dir + local page="$(PATH "$1")" + + if [ -f "$_DATA/pages/$page/#page.md" ]; then + cat -- "$_DATA/pages/$page/#page.md" + elif [ -f "$_EXEC/pages/$page/#page.md" ]; then + cat -- "$_EXEC/pages/$page/#page.md" + else + return 1 + fi +} + +case $PATH_INFO in + */\[edit\]) : ;; + *) return 1 ;; +esac + +edit_page="${PATH_INFO%\[edit\]}" +edit_file="$_DATA/pages/$edit_page/#page.md" +[ "$REQUEST_METHOD" = POST ] && edit_action="$(POST action)" + +if ! acl_write "$edit_page"; then + theme_error 403 + return 0 + +elif [ "$edit_action" = cancel ]; then + S_RELEASE "$edit_file" + REDIRECT "${_BASE}${PATH_INFO%\[edit\]}" + +elif [ "$edit_action" = update ]; then + if mkdir -p -- "${edit_file%/#page.md}" \ + && S_LOCK "$edit_file"; then + POST pagetext >"$edit_file" + S_RELEASE "$edit_file" + else + export ERRMSG="ERR_NOLOCK" + REDIRECT "${_BASE}${PATH_INFO%\[edit\]}/[edit]" + fi + + if [ "$(which git)" ]; then + git -C "$_DATA" add \ + -- "pages/$edit_page/#page.md" + git -C "$_DATA" commit -qm \ + "Page # ${edit_page} # updated by user @ ${USER_NAME} @" \ + -- "pages/$edit_page/#page.md" + fi 1>&2 + + REDIRECT "${_BASE}${edit_page}" + +elif mkdir -p -- "${edit_file%/#page.md}" \ + && S_LOCK "$edit_file"; then + theme_editor "$edit_page" + return 0 + +else + printf 'Refresh: %i; url=%s\r\n' 4 ../ + export ERROR_MSG="Unable to lock page for editing" + theme_error 409 + return 0 + +fi + +return 1