]> git.plutz.net Git - shellwiki/blob - handlers/60_newpage.sh
enable work without git revisioning
[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   pattern="$(date +"$pattern")"
23   page="$(printf -- "$pattern" "$page")"
24 else
25   printf 'Refresh: %i; url=%s\r\n' 4 ./
26   export ERROR_MSG="Page name required"
27   theme_error 400
28   return 0
29 fi
30
31 page="$(page_abs "$page")"
32 [ "$template" ] \
33 && template="$(page_abs "$template")" \
34 || template="$page"
35
36 if [ -f "$_DATA/pages/$page/#page.md" -o \
37      -f "$_EXEC/pages/$page/#page.md" ]; then
38   printf 'Refresh: %i; url=%s\r\n' 4 ./
39   export ERROR_MSG="Page exists already"
40   theme_error 409
41   return 0
42
43 elif ! acl_write "$page"; then
44   printf 'Refresh: %i; url=%s\r\n' 4 ./
45   export ERROR_MSG="You don't have permission to write to this page"
46   theme_error 403
47   return 0
48
49 elif mkdir -p -- "$_DATA/pages/${page}" \
50      && S_LOCK "$_DATA/pages/$page/#page.md"; then
51   theme_editor "$page" "$template"
52   return 0
53
54 else
55   printf 'Refresh: %i; url=%s\r\n' 4 ./
56   export ERROR_MSG="Unable to lock page for editing"
57   theme_error 409
58   return 0
59 fi
60
61 return 1