From: Simon McVittie Date: Sun, 23 Nov 2008 17:10:44 +0000 (+0000) Subject: comments: use global config to decide whether commenting is allowed, and for name... X-Git-Tag: 2.71~116 X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/commitdiff_plain/49eabc676a170bfbd31ee51c27e02c20355554dc comments: use global config to decide whether commenting is allowed, and for name of page Also: * decide comment page name sooner * set permalink on it --- diff --git a/IkiWiki/Plugin/comments.pm b/IkiWiki/Plugin/comments.pm index 80469f503..01ee481f5 100644 --- a/IkiWiki/Plugin/comments.pm +++ b/IkiWiki/Plugin/comments.pm @@ -237,24 +237,27 @@ sub sessioncgi ($$) { #{{{ linktext => 'FormattingHelp'), allowdirectives => $allow_directives); + if ($form->submitted eq CANCEL) { + # bounce back to the page they wanted to comment on, and exit. + # CANCEL need not be considered in future + IkiWiki::redirect($cgi, urlto($page, undef, 1)); + exit; + } + if (not exists $pagesources{$page}) { error(sprintf(gettext( "page '%s' doesn't exist, so you can't comment"), $page)); } - if (not $pagestate{$page}{comments}{comments}) { + + if (not pagespec_match($page, $config{comments_open_pagespec}, + location => $page)) { error(sprintf(gettext( - "comments are not enabled on page '%s'"), + "comments on page '%s' are closed"), $page)); } - if ($form->submitted eq CANCEL) { - # bounce back to the page they wanted to comment on, and exit. - # CANCEL need not be considered in future - IkiWiki::redirect($cgi, urlto($page, undef, 1)); - exit; - } - + IkiWiki::checksessionexpiry($session, $cgi->param('sid')); IkiWiki::check_canedit($page . "[postcomment]", $cgi, $session); my ($authorurl, $author) = linkuser(getcgiuser($session)); @@ -274,13 +277,24 @@ sub sessioncgi ($$) { #{{{ unless $config{prefix_directives}; } + # FIXME: check that the wiki is locked right now, because + # if it's not, there are mad race conditions! + + # FIXME: rather a simplistic way to make the comments... + my $i = 0; + my $file; + my $location; + do { + $i++; + $location = "$page/${comments_pagename}${i}"; + } while (-e "$config{srcdir}/$location._comment"); + + my $anchor = "${comments_pagename}${i}"; + IkiWiki::run_hooks(sanitize => sub { - # $fake is a possible location for this comment. We don't - # know yet what the comment number *actually* is. - my $fake = "$page/_comment_1"; $body=shift->( - page => $fake, - destpage => $fake, + page => $location, + destpage => $location, content => $body, ); }); @@ -293,6 +307,8 @@ sub sessioncgi ($$) { #{{{ $content_tmpl->param(authorurl => $authorurl); $content_tmpl->param(subject => $form->field('subject')); $content_tmpl->param(body => $body); + $content_tmpl->param(anchor => "$anchor"); + $content_tmpl->param(permalink => "$baseurl#$anchor"); my $content = $content_tmpl->output; @@ -303,14 +319,11 @@ sub sessioncgi ($$) { #{{{ # - this means that if they do, rocks fall and everyone dies if ($form->submitted eq PREVIEW) { - # $fake is a possible location for this comment. We don't - # know yet what the comment number *actually* is. - my $fake = "$page/_comment_1"; - my $preview = IkiWiki::htmlize($fake, $page, 'mdwn', + my $preview = IkiWiki::htmlize($location, $page, 'mdwn', IkiWiki::linkify($page, $page, IkiWiki::preprocess($page, $page, - IkiWiki::filter($fake, $page, - $content), + IkiWiki::filter($location, + $page, $content), 0, 1))); IkiWiki::run_hooks(format => sub { $preview = shift->(page => $page, @@ -331,24 +344,10 @@ sub sessioncgi ($$) { #{{{ } if ($form->submitted eq POST_COMMENT && $form->validate) { - # Let's get posting. We don't check_canedit here because - # that somewhat defeats the point of this plugin. - - IkiWiki::checksessionexpiry($session, $cgi->param('sid')); - - # FIXME: check that the wiki is locked right now, because - # if it's not, there are mad race conditions! - - # FIXME: rather a simplistic way to make the comments... - my $i = 0; - my $file; - do { - $i++; - $file = "$page/_comment_${i}._comment"; - } while (-e "$config{srcdir}/$file"); + my $file = "$location._comment"; # FIXME: could probably do some sort of graceful retry - # if I could be bothered + # on error? Would require significant unwinding though writefile($file, $config{srcdir}, $content); my $conflict; @@ -357,7 +356,9 @@ sub sessioncgi ($$) { #{{{ my $message = gettext("Added a comment"); if (defined $form->field('subject') && length $form->field('subject')) { - $message .= ": ".$form->field('subject'); + $message = sprintf( + gettext("Added a comment: %s"), + $form->field('subject')); } IkiWiki::rcs_add($file); @@ -378,7 +379,7 @@ sub sessioncgi ($$) { #{{{ error($conflict) if defined $conflict; # Bounce back to where we were, but defeat broken caches - my $anticache = "?updated=$page/_comment_$i"; + my $anticache = "?updated=$page/${comments_pagename}${i}"; IkiWiki::redirect($cgi, urlto($page, undef, 1).$anticache); } else {