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