3 # Copyright 2022 - 2023 Paul Hänsch
5 # Permission to use, copy, modify, and/or distribute this software for any
6 # purpose with or without fee is hereby granted, provided that the above
7 # copyright notice and this permission notice appear in all copies.
9 # THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
12 # SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
15 # IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 l10n_immutablepage >/dev/null 2>&1 \
18 || l10n_immutablepage(){ #TRANSLATION
20 <h1>Immutable Page</h1>
21 This is a core page of the wiki system. Its name and position cannot be changed.
22 You may however update this page and you can use ACLs to hide it from various listings.
26 case "${PATH_INFO}" in
27 */\[move\]|*/\[rename\]|*/\[delete\])
28 page="${PATH_INFO%\[*\]}"
29 if [ ! -d "$_DATA/pages/${page}" -a ! -d "$_EXEC/pages/${page}" ]; then
32 elif ! acl_write "$page"; then
33 printf 'Refresh: %i, url=%s\r\n' 4 ./
36 elif [ -d "$_EXEC/pages/${page}/" ]; then
50 l10n_movepage >/dev/null 2>&1 \
51 || l10n_movepage(){ # TRANSLATION
54 <p class="pageid">$(HTML "${page}")</p>
55 <input name="newlocation" value="$(HTML "$location")" placeholder="New Location">
57 <li>A page with the same name must not already exist at the new location.</li>
58 <li>You must have permission to create new pages at this location.</li>
59 <li>All subpages will become available under the new path name.</li>
60 <li>Subpages will become unavailable under their current name.</li>
62 <button type=submit name=action value=move>Move</button>
63 <button type=submit name=action value=cancel>Cancel</button>
66 l10n_renamepage >/dev/null 2>&1 \
67 || l10n_renamepage(){ # TRANSLATION
70 <p class="pageid">$(HTML "${page}")</p>
71 <input name="newname" value="$(HTML "$name")" placeholder="New Name">
73 <li>A page with the new name must not already exist.</li>
74 <li>You must have permission to create new pages at this location.</li>
75 <li>All subpages will become available under the new path name.</li>
76 <li>Subpages will become unavailable under their current name.</li>
78 <button type=submit name=action value=rename>Rename</button>
79 <button type=submit name=action value=cancel>Cancel</button>
82 l10n_deletepage >/dev/null 2>&1 \
83 || l10n_deletepage(){ # TRANSLATION
86 <p class="pageid">$(HTML "${page}")</p>
87 <p>This page and its attachments will be deleted</p>
89 <li>Past revisions of the page text (including the current one) will remain accessible and can be restored.</li>
90 <li>Attachments will be deleted completely, and cannot be restored.</li>
91 <li>Subpages will not be affected and can still be accessed normally.</li>
93 <button type=submit name=action value=delete>Delete</button>
94 <button type=submit name=action value=cancel>Cancel</button>
98 if [ "$REQUEST_METHOD" = POST ]; then
99 action="$(POST action)"
100 newname="$(POST newname |grep -m1 -xE '[^#/]*')"
101 newlocation="$(POST newlocation |grep -m1 -xE '/[^#]*')"
102 else case "${PATH_INFO}" in
104 location="${page%/}" location="${location%/*}/"
106 <form method=POST id=movepage>
107 <input type=hidden name=session_id value="$SESSION_KEY">
114 name="${page%/}" name="${name##*/}"
116 <form method=POST id=renamepage>
117 <input type=hidden name=session_id value="$SESSION_KEY">
125 <form method=POST id=deletepage>
126 <input type=hidden name=session_id value="$SESSION_KEY">
135 if [ "$action" = rename -a "$newname" ]; then
136 oldname="${PATH_INFO%\[*\]}"
137 newname="${oldname%/*/}$(PATH "${newname}/")"
139 if [ -d "$_DATA/pages/$newname" ]; then
140 printf 'Refresh: %i\r\n' 4
141 export ERRORMSG="A location of that name already exists."
144 elif ! acl_write "$oldname" || ! acl_write "$newname"; then
145 printf 'Refresh: %i\r\n' 4
148 elif [ "$REV_PAGES" = true ]; then
149 git -C "$_DATA" mv "pages/$oldname" "pages/$newname"
150 git -C "$_DATA" commit -m 'Page # '"$oldname"' # renamed to # '"$newname"' # by user @ '"$USER_NAME"' @' \
151 -- "pages/$oldname" "pages/$newname"
152 REDIRECT "$_BASE${newname}"
154 mv -- "$_DATA/pages/$oldname" "$_DATA/pages/$newname"
155 REDIRECT "$_BASE${newname}"
157 elif [ "$action" = move -a "$newlocation" ]; then
158 oldname="${PATH_INFO%\[*\]}"
159 newlocation="$(PATH "$newlocation")"
160 newname="${oldname%/}"
161 newname="${newlocation%/}/${newname##*/}/"
163 if [ -d "$_DATA/pages/$newname" ]; then
164 printf 'Refresh: %i\r\n' 4
165 export ERRORMSG="A page of that name already exists at the given location."
168 elif [ ! -d "$_DATA/pages/$newlocation" ]; then
169 printf 'Refresh: %i\r\n' 4
170 export ERRORMSG="The given location does not exist."
173 elif ! acl_write "$oldname" || ! acl_write "$newname"; then
174 printf 'Refresh: %i\r\n' 4
177 elif [ "$REV_PAGES" = true ]; then
178 git -C "$_DATA" mv "pages/${oldname}" "pages/${newname}"
179 git -C "$_DATA" commit -m 'Page # '"$oldname"' # moved to # '"$newname"' # by user @ '"$USER_NAME"' @' \
180 -- "pages/${oldname}" "pages/${newname}"
181 REDIRECT "$_BASE${newname}"
183 mv -- "$_DATA/pages/$oldname" "$_DATA/pages/$newname"
184 REDIRECT "$_BASE${newname}"
186 elif [ "$action" = delete ]; then
187 oldname="${PATH_INFO%\[*\]}"
188 if ! acl_write "$oldname"; then
189 printf 'Refresh: %i\r\n' 4
192 elif [ "$REV_PAGES" = true ]; then
193 git -C "$_DATA" rm "pages/${oldname}/#page.md"
194 git -C "$_DATA" commit -m 'Page # '"$oldname"' # deleted by user @ '"$USER_NAME"' @' \
195 -- "pages/${oldname}/#page.md"
196 rm -r -- "$_DATA/pages/${oldname}"/\#*
197 rmdir -- "$_DATA/pages/${oldname}/" || true
200 rm -- "$_DATA/pages/${oldname}/#page.md"
201 rm -r -- "$_DATA/pages/${oldname}"/\#*
202 rmdir -- "$_DATA/pages/${oldname}/" || true
205 elif [ "$action" = cancel ]; then
207 elif [ "$action" ]; then
208 printf 'Refresh: %i\r\n' 4
209 export ERRORMSG="Missing parameters."