New version of comments module, must more reliable and polished.
This commit is contained in:
parent
75ca494424
commit
f71c7866f4
2 changed files with 113 additions and 44 deletions
|
|
@ -1,30 +1,98 @@
|
|||
comment_file_types=(md html)
|
||||
fn bridge_init {
|
||||
if(! ~ $#enable_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(get_post_args comment_text) {
|
||||
d=`{date -n} # FIXME Obvious race
|
||||
d=$local_path^'_werc/comments/'^$d/
|
||||
|
||||
u=$logged_user
|
||||
if(~ $#logged_user 0) {
|
||||
get_post_args comment_user_name comment_user_password
|
||||
# XXX Should do this too if user not in required group
|
||||
if(! login_user $comment_user_name $comment_user_password) {
|
||||
u=$comment_user_name':'$comment_user_password
|
||||
d=$d^'_pending'
|
||||
}
|
||||
if not
|
||||
u = $logged_user
|
||||
}
|
||||
|
||||
umask 002
|
||||
if(mkdir -m 775 -p $d) { # Rudimentary perm checking
|
||||
echo $u > $d/user
|
||||
echo $comment_text > $d/body
|
||||
}
|
||||
}
|
||||
fn conf_enable_comments {
|
||||
if(~ $1 -n) {
|
||||
allow_new_user_comments=yes
|
||||
shift
|
||||
}
|
||||
|
||||
enable_comments=yes
|
||||
groups_allowed_comments=$*
|
||||
}
|
||||
|
||||
fn bridge_init {
|
||||
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=()
|
||||
|
||||
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'
|
||||
notify_notes='Saved comment and registration info, they will be enabled when approved by an admin.'
|
||||
ll_add handlers_body_foot notices_handler
|
||||
}
|
||||
if not
|
||||
_status=$status
|
||||
}
|
||||
if not
|
||||
_status='You need to log in to comment.'
|
||||
}
|
||||
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
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
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>'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,26 +1,27 @@
|
|||
% cdir = $local_path^'_werc/comments'
|
||||
% if(test -d $cdir) {
|
||||
<hr /><h2>Comments</h2>
|
||||
% for(c in `{ls $cdir/}) {
|
||||
<div><b>By: <i>
|
||||
% cat $c/user
|
||||
</i></b>
|
||||
<br />
|
||||
% cat $c/body | escape_html | sed 's,$,<br />,'
|
||||
<hr /></div>
|
||||
% }
|
||||
% }
|
||||
|
||||
<hr />
|
||||
|
||||
% notices_handler
|
||||
% # XXX should post to bridge_post or similar
|
||||
<form action="" method="post">
|
||||
<textarea name="comment_text" id="comment_text" cols="80" rows="16"></textarea>
|
||||
<textarea name="comment_text" id="comment_text" cols="80" rows="16">%($"saved_comment_text%)</textarea>
|
||||
<br />
|
||||
<input type="hidden" name="document_uri" value="%($req_path%)" />
|
||||
<input type="submit" name="post_comment" value="Post a comment" />
|
||||
% if(! check_user) {
|
||||
<label>User: <input type="text" name="comment_user_name" value="" /></label>
|
||||
<label>Password: <input type="password" name="comment_user_password" value="" /></label>
|
||||
<div style="font-size: 70%">If you are not registered enter your desired user/password and your account will be created when your comment is approved.</div>
|
||||
|
||||
% if(~ $#logged_user 0 && ! ~ $#allow_new_user_comments 0) {
|
||||
<label>New user name:
|
||||
<input type="text" name="comment_user" value="%($"post_arg_comment_user%)" />
|
||||
</label>
|
||||
|
||||
<label>Password:
|
||||
<input type="password" name="comment_passwd" value="" />
|
||||
</label>
|
||||
|
||||
<label>Repeat password:
|
||||
<input type="password" name="comment_passwd2" value="" />
|
||||
</label>
|
||||
<div style="font-size: 70%">
|
||||
Enter your desired user name/password and after your comment has been reviewed by an addmin it will be posted and your account will be enabled. If you are already registered please <a href="/_users/login">login</a> before posting.
|
||||
</div>
|
||||
% }
|
||||
</form>
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue