From 93d44839394042df8a0096b9a26a742e5652ae3b Mon Sep 17 00:00:00 2001 From: Uriel Date: Mon, 26 Jan 2009 03:37:47 +0100 Subject: [PATCH] Upgrade and cleanup dirdir, move to app framework, and its implementation more elegant and reliable. --- apps/dirdir/app.rc | 20 ++++++++++++++----- apps/dirdir/edit.tpl | 46 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 5 deletions(-) create mode 100644 apps/dirdir/edit.tpl diff --git a/apps/dirdir/app.rc b/apps/dirdir/app.rc index 17a3829..2a6df1f 100644 --- a/apps/dirdir/app.rc +++ b/apps/dirdir/app.rc @@ -1,14 +1,24 @@ fn dirdir_init { - if(! ~ $#enable_wiki 0 && test -f $local_path.md && check_user $wiki_editors_group) - ll_add handlers_bar_left dirdir_controls + if(! ~ $#enable_wiki 0 && check_user $wiki_editors_group admin) { + if(test -f $local_path.md) + ll_add handlers_bar_left dirdir_controls + + 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) + } + + } } fn dirdir_controls { # Display 'Edit', 'History', etc, links - echo '
' + echo '' echo '' echo '' echo '
' - - } diff --git a/apps/dirdir/edit.tpl b/apps/dirdir/edit.tpl new file mode 100644 index 0000000..056d9ed --- /dev/null +++ b/apps/dirdir/edit.tpl @@ -0,0 +1,46 @@ +% if (~ $"edit_save '') { +
+

Editing %($edit_wiki_page%)

+
+
+ %{ + + if(~ $#edit_text 0 && test -f $edit_file) + cat $edit_file | escape_html + if not + echo $edit_text | escape_html + + %} +
+ + + DirDir documents are written using Markdown syntax. +
+
+% } + +% if(! ~ $"edit_preview '') { +

Preview:

+
+% echo $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 $loggin_user > $dirdir_verdir/author + echo $edit_text > $dirdir_verdir/data + echo $edit_text > $edit_file +%} +

Saved %($edit_wiki_page%)!

+% } +