summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--IkiWiki/Plugin/recentchanges.pm58
-rw-r--r--debian/changelog3
-rw-r--r--doc/plugins/recentchanges/discussion.mdwn2
3 files changed, 54 insertions, 9 deletions
diff --git a/IkiWiki/Plugin/recentchanges.pm b/IkiWiki/Plugin/recentchanges.pm
index 337fb7ac5..e23ee491f 100644
--- a/IkiWiki/Plugin/recentchanges.pm
+++ b/IkiWiki/Plugin/recentchanges.pm
@@ -8,8 +8,9 @@ use IkiWiki 2.00;
sub import { #{{{
hook(type => "checkconfig", id => "recentchanges", call => \&checkconfig);
hook(type => "refresh", id => "recentchanges", call => \&refresh);
- hook(type => "htmlize", id => "_change", call => \&htmlize);
hook(type => "pagetemplate", id => "recentchanges", call => \&pagetemplate);
+ hook(type => "htmlize", id => "_change", call => \&htmlize);
+ hook(type => "cgi", id => "recentchanges", call => \&cgi);
} #}}}
sub checkconfig () { #{{{
@@ -51,6 +52,39 @@ sub htmlize (@) { #{{{
return $params{content};
} #}}}
+sub cgi ($) { #{{{
+ my $cgi=shift;
+ if (defined $cgi->param('do') && $cgi->param('do') eq "recentchanges_link") {
+ # This is a link from a change page to some
+ # other page. Since the change pages are only generated
+ # once, statically, links on them won't be updated if the
+ # page they link to is deleted, or newly created, or
+ # changes for whatever reason. So this CGI handles that
+ # dynamic linking stuff.
+ my $page=$cgi->param("page");
+ if (!defined $page) {
+ error("missing page parameter");
+ }
+
+ IkiWiki::loadindex();
+
+ my $link=bestlink("", $page);
+ if (! length $link) {
+ print "Content-type: text/html\n\n";
+ print IkiWiki::misctemplate(gettext(gettext("missing page")),
+ "<p>".
+ sprintf(gettext("The page %s does not exist."),
+ htmllink("", "", $page)).
+ "</p>");
+ }
+ else {
+ IkiWiki::redirect($cgi, $config{url}."/".htmlpage($link));
+ }
+
+ exit;
+ }
+}
+
sub store ($$$) { #{{{
my $change=shift;
@@ -65,10 +99,15 @@ sub store ($$$) { #{{{
delete @{$change->{pages}}[10 .. @{$change->{pages}}] if $is_excess;
$change->{pages} = [
map {
- if (length $config{url}) {
- $_->{link} = "<a href=\"$config{url}/".
- urlto($_->{page},"")."\">".
- IkiWiki::pagetitle($_->{page})."</a>";
+ if (length $config{cgiurl}) {
+ $_->{link} = "<a href=\"".
+ IkiWiki::cgiurl(
+ do => "recentchanges_link",
+ page => $_->{page}
+ ).
+ "\">".
+ IkiWiki::pagetitle($_->{page}).
+ "</a>"
}
else {
$_->{link} = IkiWiki::pagetitle($_->{page});
@@ -87,10 +126,11 @@ sub store ($$$) { #{{{
$change->{authorurl}=$change->{user};
$change->{user}=$oiduser;
}
- elsif (length $config{url}) {
- $change->{authorurl}="$config{url}/".
- (length $config{userdir} ? "$config{userdir}/" : "").
- $change->{user};
+ elsif (length $config{cgiurl}) {
+ $change->{authorurl} = IkiWiki::cgiurl(
+ do => "recentchanges_link",
+ page => (length $config{userdir} ? "$config{userdir}/" : "").$change->{author},
+ );
}
# escape wikilinks and preprocessor stuff in commit messages
diff --git a/debian/changelog b/debian/changelog
index 590c1a84e..e736e7631 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -14,6 +14,9 @@ ikiwiki (2.31) UNRELEASED; urgency=low
much better.
* aggregate: Revert use of forking to not save state, that was not the right
approach.
+ * recentchanges: Improve handling of links on the very static changes pages
+ by thunking to the CGI, which can redirect to the page, or allow it to be
+ created if it doesn't exist.
-- Joey Hess <joeyh@debian.org> Sat, 02 Feb 2008 23:36:31 -0500
diff --git a/doc/plugins/recentchanges/discussion.mdwn b/doc/plugins/recentchanges/discussion.mdwn
index 69145435e..922493fe8 100644
--- a/doc/plugins/recentchanges/discussion.mdwn
+++ b/doc/plugins/recentchanges/discussion.mdwn
@@ -5,6 +5,8 @@ The links to user pages of e.g. *MichaelBanck* or *GianlucaGuida* don't work, as
being linked to <http://www.bddebian.com/~wiki/user/MichaelBanck>, whereas it should be
<http://www.bddebian.com/~wiki/user/michaelbanck>.
+> I've fixed this.. --[[Joey]]
+
Another one. If you change the *recentchangespage* configuration option, (it seems to me)
that the pages from the old hierarchy will not be removed from the disk. But then, changing
this should be a rather uncommon thing.