From a3c2c71275509708eac9baf6eb81994e38cd9c08 Mon Sep 17 00:00:00 2001 From: Uriel Date: Thu, 26 Feb 2009 11:50:18 +0100 Subject: [PATCH] Big overhaul of dirdir rewriting most code to be much simpler, reliable and efficient. Now we have a wiki engine in ~20 lines of code! --- apps/dirdir/app.rc | 40 ++++++++++++++++---------------- apps/dirdir/edit.tpl | 39 +++++++------------------------ apps/dirdir/sidebar_controls.tpl | 3 +++ 3 files changed, 32 insertions(+), 50 deletions(-) create mode 100644 apps/dirdir/sidebar_controls.tpl diff --git a/apps/dirdir/app.rc b/apps/dirdir/app.rc index c7416e1..04d7e73 100644 --- a/apps/dirdir/app.rc +++ b/apps/dirdir/app.rc @@ -1,31 +1,31 @@ fn conf_enable_wiki { enable_wiki=yes - wiki_editors_group=$* + wiki_editors_groups=$* conf_enable_app dirdir } - fn dirdir_init { - if(! ~ $#enable_wiki 0 && check_user $wiki_editors_group) { - if(test -f $local_path.md) - ll_add handlers_bar_left dirdir_controls + if(! ~ $#enable_wiki 0 && check_user $wiki_editors_groups && test -f $local_path.md) { + dirdir_file=$local_path.md + dirdir_dir=$dirdir_file^'_werc/dirdir/' + + if(~ $#post_arg_dirdir_save 1 && ! ~ $"post_arg_edit_text '') { - if(~ $req_path */dirdir_edit && ~ $REQUEST_METHOD POST) { - get_post_args edit_wiki_page edit_text edit_preview edit_save - # XXX SECURITY! should sanitize input and ensure we only edit files - # we are allowed. This is a start, but should be way more careful - edit_file = `{echo $sitedir/$edit_wiki_page|sed -e 's/\.\.*/./g' -e 's,/$,/index,' | sed 's/$/.md/'} - tpl=`{get_lib_file dirdir/edit.tpl apps/dirdir/edit.tpl} - handler_body_main=(tpl_handler $tpl) + dirdir_verdir=$dirdir_dir/^`{date -n}^/ + mkdir -p $dirdir_verdir + + # XXX Use a tmp file and mv(1) to ensure updates are atomic? + echo $logged_user > $dirdir_verdir/author + echo $post_arg_edit_text > $dirdir_verdir/data + echo $post_arg_edit_text > $dirdir_file + + post_redirect $base_url^$req_path + #notify_notes='Saved '$"req_path'!' } + if not if(~ $#post_arg_dirdir_edit 1 || ~ $#post_arg_dirdir_preview 1) + handler_body_main=(tpl_handler `{get_lib_file dirdir/edit.tpl apps/dirdir/edit.tpl} ) + if not if(! ~ $REQUEST_METHOD POST) + ll_add handlers_bar_left tpl_handler apps/dirdir/sidebar_controls.tpl } } - -fn dirdir_controls { - # Display 'Edit', 'History', etc, links - echo '
' - echo '' - echo '' - echo '
' -} diff --git a/apps/dirdir/edit.tpl b/apps/dirdir/edit.tpl index 3365df9..9e50638 100644 --- a/apps/dirdir/edit.tpl +++ b/apps/dirdir/edit.tpl @@ -1,46 +1,25 @@ -% if(~ $"edit_save '') {
-

Editing %($edit_wiki_page%)

+

Editing: %($req_path%)


-
- +
- - + + DirDir documents are written using Markdown syntax.
-% } -% if(! ~ $"edit_preview '') { +% if(! ~ $"post_arg_dirdir_preview '') {

Preview:

-% echo $edit_text | $formatter +% echo $post_arg_edit_text | $formatter
-

% } -% if not if(! ~ $"edit_save '') { -%{ - dirdir_dir = $edit_file^'_werc/dirdir/' - - if(! test -d $dirdir_dir) - mkdir -p $dirdir_dir - - dirdir_verdir = $dirdir_dir/`{date -n}^/ - mkdir $dirdir_verdir - - echo $logged_user > $dirdir_verdir/author - echo $edit_text > $dirdir_verdir/data - echo $edit_text > $edit_file -%} -

Saved %($edit_wiki_page%)!

-% } - diff --git a/apps/dirdir/sidebar_controls.tpl b/apps/dirdir/sidebar_controls.tpl new file mode 100644 index 0000000..a897fc1 --- /dev/null +++ b/apps/dirdir/sidebar_controls.tpl @@ -0,0 +1,3 @@ +
+ +