2009-01-25 22:12:45 -07:00
|
|
|
comment_file_types=(md html)
|
2009-01-30 08:10:14 -07:00
|
|
|
|
|
|
|
fn conf_enable_comments {
|
|
|
|
if(~ $1 -n) {
|
|
|
|
allow_new_user_comments=yes
|
|
|
|
shift
|
|
|
|
}
|
|
|
|
enable_comments=yes
|
|
|
|
groups_allowed_comments=$*
|
|
|
|
}
|
|
|
|
|
2009-01-08 19:08:02 -07:00
|
|
|
fn bridge_init {
|
2009-01-30 08:10:14 -07:00
|
|
|
if(~ $#enable_comments 1) {
|
|
|
|
|
|
|
|
cdir=$sitedir$req_path'_werc/comments'
|
|
|
|
if(test -d $cdir)
|
|
|
|
ll_add handlers_body_foot display_comments $cdir
|
|
|
|
|
|
|
|
if({ check_user $groups_allowed_comments || {~ $#logged_user 0 && ! ~ $#allow_new_user_comments 0} } && ! ~ `{ls $local_path.$comment_file_types >[2]/dev/null|wc -l} 0) {
|
|
|
|
ll_add handlers_body_foot template apps/bridge/foot.tpl
|
|
|
|
|
|
|
|
if(~ $REQUEST_METHOD POST && mk_new_comment $cdir)
|
|
|
|
post_redirect $base_url^$post_arg_document_uri
|
|
|
|
if not
|
|
|
|
saved_comment_text=$post_arg_comment_text
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn validate_new_user {
|
|
|
|
usr=$1; pass=$2; pass2=$3
|
|
|
|
_status=()
|
2009-01-08 19:08:02 -07:00
|
|
|
|
2009-01-30 08:10:14 -07:00
|
|
|
if(~ $"usr '' || ! echo $usr |sed 1q|grep -s '^'$allowed_user_chars'+$')
|
|
|
|
_status='Requested user name is invalid, must match: '^$allowed_user_chars^'+'
|
|
|
|
if not if(test -d etc/users/$usr)
|
|
|
|
_status='Sorry, user name '''^$usr^''' already taken, please pick a different one.'
|
|
|
|
|
|
|
|
if(~ $"pass '' || ! ~ $"pass $"pass2)
|
|
|
|
_status=($_status 'Provided passwords don''t match.')
|
|
|
|
|
|
|
|
status=$_status
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fn mk_new_comment {
|
|
|
|
_status=()
|
|
|
|
dir=$1
|
|
|
|
if(~ $"post_arg_comment_text '')
|
|
|
|
_status='Provide a comment!'
|
|
|
|
if not if(~ $#logged_user 0) {
|
|
|
|
if(! ~ $#allow_new_user_comments 0) {
|
|
|
|
if(validate_new_user $"post_arg_comment_user $post_arg_comment_passwd $post_arg_comment_passwd2) {
|
|
|
|
u=$post_arg_comment_user':'$post_arg_comment_passwd
|
|
|
|
dir=$cdir^'_pending'
|
2009-01-30 08:48:49 -07:00
|
|
|
# XXX: This doesn't work because we then do a redirect.
|
2009-01-30 08:10:14 -07:00
|
|
|
notify_notes='Saved comment and registration info, they will be enabled when approved by an admin.'
|
2009-01-23 23:11:39 -07:00
|
|
|
}
|
2009-01-30 08:10:14 -07:00
|
|
|
if not
|
|
|
|
_status=$status
|
2009-01-10 20:03:46 -07:00
|
|
|
}
|
2009-01-30 08:10:14 -07:00
|
|
|
if not
|
|
|
|
_status='You need to log in to comment.'
|
2009-01-08 19:08:02 -07:00
|
|
|
}
|
2009-01-30 08:10:14 -07:00
|
|
|
if not if(check_user $groups_allowed_comments)
|
|
|
|
u=$logged_user
|
|
|
|
if not
|
|
|
|
_status='You are not a memeber of a group allowed to comment.'
|
|
|
|
|
|
|
|
if(~ $#_status 0) {
|
|
|
|
umask 002
|
2009-01-08 19:08:02 -07:00
|
|
|
|
2009-01-30 08:10:14 -07:00
|
|
|
dir=$dir'/'`{date -n} # FIXME Obvious race
|
|
|
|
mkdir -m 775 -p $dir &&
|
|
|
|
echo $u > $dir/user &&
|
|
|
|
echo $post_arg_comment_text > $dir/body
|
|
|
|
_s=$status
|
|
|
|
if(! ~ $"_s '') {
|
|
|
|
dprint 'ERROR XXX: Could not create comment: ' $_s
|
|
|
|
_status='Could not post comment due internal error, sorry.'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
notify_errors=$_status
|
|
|
|
status=$_status
|
2009-01-08 19:08:02 -07:00
|
|
|
}
|
2009-01-10 20:03:46 -07:00
|
|
|
|
2009-01-30 08:10:14 -07:00
|
|
|
fn display_comments {
|
|
|
|
echo '<hr /><h2>Comments</h2>'
|
|
|
|
|
|
|
|
for(c in `{ls $*/}) {
|
|
|
|
if(test -s $c/body) {
|
|
|
|
echo '<div>'
|
|
|
|
sed 's!.+!<b>By: <i>&</i></b><br />!' < $c/user
|
|
|
|
cat $c/body | escape_html | sed 's,$,<br />,'
|
|
|
|
echo '<hr /></div>'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|