X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/bc66a00b90e00971156f1aea5678ce88d006e84d..f8c306a21b2d7b137fbc9245079d2db8b75366e1:/IkiWiki/Plugin/comments.pm diff --git a/IkiWiki/Plugin/comments.pm b/IkiWiki/Plugin/comments.pm index 34bbafeed..833bedf25 100644 --- a/IkiWiki/Plugin/comments.pm +++ b/IkiWiki/Plugin/comments.pm @@ -7,7 +7,7 @@ package IkiWiki::Plugin::comments; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; use Encode; use POSIX qw(strftime); @@ -198,8 +198,17 @@ sub preprocess { $pagestate{$page}{meta}{author} = $params{claimedauthor}; } - if (defined $params{url} and safeurl($params{url})) { - $pagestate{$page}{meta}{authorurl} = $params{url}; + if (defined $params{url}) { + my $url=$params{url}; + + eval q{use URI::Heuristic}; + if (! $@) { + $url=URI::Heuristic::uf_uristr($url); + } + + if (safeurl($url)) { + $pagestate{$page}{meta}{authorurl} = $url; + } } } else { @@ -334,8 +343,6 @@ sub sessioncgi ($$) { error(gettext("bad page name")); } - # FIXME: is this right? Or should we be using the candidate subpage - # (whatever that might mean) as the base URL? my $baseurl = urlto($page, undef, 1); $form->title(sprintf(gettext("commenting on %s"), @@ -447,6 +454,12 @@ sub sessioncgi ($$) { $template->param(title => $form->field('subject')); $template->param(ctime => displaytime(time)); + IkiWiki::run_hooks(pagetemplate => sub { + shift->(page => $location, + destpage => $page, + template => $template); + }); + $form->tmpl_param(page_preview => $template->output); } else { @@ -454,9 +467,21 @@ sub sessioncgi ($$) { } if ($form->submitted eq POST_COMMENT && $form->validate) { - my $file = "$location._comment"; - IkiWiki::checksessionexpiry($cgi, $session); + + $postcomment=1; + IkiWiki::check_content(content => $form->field('editcontent'), + subject => $form->field('subject'), + $config{comments_allowauthor} ? ( + author => $form->field('author'), + url => $form->field('url'), + ) : (), + page => $location, + cgi => $cgi, session => $session + ); + $postcomment=0; + + my $file = "$location._comment"; # FIXME: could probably do some sort of graceful retry # on error? Would require significant unwinding though @@ -491,7 +516,10 @@ sub sessioncgi ($$) { error($conflict) if defined $conflict; # Jump to the new comment on the page. - IkiWiki::redirect($cgi, urlto($page, undef, 1)."#$location"); + # The trailing question mark tries to avoid broken + # caches and get the most recent version of the page. + IkiWiki::redirect($cgi, urlto($page, undef, 1)."?updated#$location"); + } else { IkiWiki::showform ($form, \@buttons, $session, $cgi, @@ -525,6 +553,8 @@ sub pagetemplate (@) { my $page = $params{page}; my $template = $params{template}; my $shown = ($template->query(name => 'commentslink') || + $template->query(name => 'commentsurl') || + $template->query(name => 'atomcommentsurl') || $template->query(name => 'comments')) && commentsshown($page); @@ -554,6 +584,22 @@ sub pagetemplate (@) { } } + if ($template->query(name => 'commentsurl')) { + if ($shown) { + $template->param(commentsurl => + urlto($page, undef, 1).'#comments'); + } + } + + if ($template->query(name => 'atomcommentsurl') && $config{usedirs}) { + if ($shown) { + # This will 404 until there are some comments, but I + # think that's probably OK... + $template->param(atomcommentsurl => + urlto($page, undef, 1).'comments.atom'); + } + } + if ($template->query(name => 'commentslink')) { # XXX Would be nice to say how many comments there are in # the link. But, to update the number, blog pages @@ -568,6 +614,12 @@ sub pagetemplate (@) { } } + # everything below this point is only relevant to the comments + # themselves + if (!exists $commentstate{$page}) { + return; + } + if ($template->query(name => 'commentuser')) { $template->param(commentuser => $commentstate{$page}{commentuser}); @@ -592,6 +644,14 @@ sub pagetemplate (@) { $template->param(commentauthorurl => $commentstate{$page}{commentauthorurl}); } + + if ($template->query(name => 'removeurl') && + IkiWiki::Plugin::remove->can("check_canremove") && + length $config{cgiurl}) { + $template->param(removeurl => IkiWiki::cgiurl(do => 'remove', + page => $page)); + $template->param(have_actions => 1); + } } package IkiWiki::PageSpec;