]> git.plutz.net Git - shellwiki/blob - handlers/30_newpage.sh
Merge commit '47bbf18dd9e54f60c6406b991760f057ce38f648'
[shellwiki] / handlers / 30_newpage.sh
1 #!/bin/sh
2
3 case $PATH_INFO in
4   */\[newpage\]):;;
5   *) return 1;;
6 esac
7
8 if [ "$(POST action)" != newpage ]; then
9   printf 'Refresh: %i; url=%s\r\n' 4 ./
10   export ERROR_MSG="Formdata invalid"
11   theme_error 400
12   return 0
13 fi
14
15 pattern="$(POST pattern)"
16 template="$(POST template)"
17 page="$(POST page)"
18
19 if [ "$page" ]; then
20   pattern="$(date +"$pattern")"
21   page="$(printf -- "$pattern" "$page")"
22 else
23   printf 'Refresh: %i; url=%s\r\n' 4 ./
24   export ERROR_MSG="Page name required"
25   theme_error 400
26   return 0
27 fi
28
29 page="$(page_abs "$page")"
30 [ "$template" ] \
31 && template="$(page_abs "$template")" \
32 || template="$page"
33
34 if [ -f "$_DATA/pages/$page/#page.md" -o \
35      -f "$_EXEC/pages/$page/#page.md" ]; then
36   printf 'Refresh: %i; url=%s\r\n' 4 ./
37   export ERROR_MSG="Page exists already"
38   theme_error 409
39   return 0
40
41 elif ! acl_write "$page"; then
42   printf 'Refresh: %i; url=%s\r\n' 4 ./
43   export ERROR_MSG="You don't have permission to write to this page"
44   theme_error 403
45   return 0
46
47 elif mkdir -p -- "$_DATA/pages/${page}" \
48      && S_LOCK "$_DATA/pages/$page/#page.md"; then
49   theme_editor "$page" "$template"
50   return 0
51
52 else
53   printf 'Refresh: %i; url=%s\r\n' 4 ./
54   export ERROR_MSG="Unable to lock page for editing"
55   theme_error 409
56   return 0
57 fi
58
59 return 1