X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/17fdb8028bfb2722c120b229c2131598affbddd6..6edd22808effa2b83947eee9986b901247d8871b:/IkiWiki/Plugin/inline.pm?ds=sidebyside

diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm
index 8890e5ed0..1a6c7cfcd 100644
--- a/IkiWiki/Plugin/inline.pm
+++ b/IkiWiki/Plugin/inline.pm
@@ -15,6 +15,7 @@ my $nested=0;
 
 sub import { #{{{
 	hook(type => "getopt", id => "inline", call => \&getopt);
+	hook(type => "getsetup", id => "inline", call => \&getsetup);
 	hook(type => "checkconfig", id => "inline", call => \&checkconfig);
 	hook(type => "sessioncgi", id => "inline", call => \&sessioncgi);
 	hook(type => "preprocess", id => "inline", 
@@ -27,7 +28,6 @@ sub import { #{{{
 	# pings interrupting page builds.
 	hook(type => "change", id => "inline", 
 		call => \&IkiWiki::pingurl);
-
 } # }}}
 
 sub getopt () { #{{{
@@ -39,8 +39,54 @@ sub getopt () { #{{{
 		"atom!" => \$config{atom},
 		"allowrss!" => \$config{allowrss},
 		"allowatom!" => \$config{allowatom},
+		"pingurl=s" => sub {
+			push @{$config{pingurl}}, $_[1];
+		},      
 	);
-}
+} #}}}
+
+sub getsetup () { #{{{
+	return
+		plugin => {
+			safe => 1,
+			rebuild => undef,
+		},
+		rss => {
+			type => "boolean",
+			example => 0,
+			description => "enable rss feeds by default?",
+			safe => 1,
+			rebuild => 1,
+		},
+		atom => {
+			type => "boolean",
+			example => 0,
+			description => "enable atom feeds by default?",
+			safe => 1,
+			rebuild => 1,
+		},
+		allowrss => {
+			type => "boolean",
+			example => 0,
+			description => "allow rss feeds to be used?",
+			safe => 1,
+			rebuild => 1,
+		},
+		allowatom => {
+			type => "boolean",
+			example => 0,
+			description => "allow atom feeds to be used?",
+			safe => 1,
+			rebuild => 1,
+		},
+		pingurl => {
+			type => "string",
+			example => "http://rpc.technorati.com/rpc/ping",
+			description => "urls to ping (using XML-RPC) on feed update",
+			safe => 1,
+			rebuild => 0,
+		},
+} #}}}
 
 sub checkconfig () { #{{{
 	if (($config{rss} || $config{atom}) && ! length $config{url}) {
@@ -52,6 +98,9 @@ sub checkconfig () { #{{{
 	if ($config{atom}) {
 		push @{$config{wiki_file_prune_regexps}}, qr/\.atom$/;
 	}
+	if (! exists $config{pingurl}) {
+		$config{pingurl}=[];
+	}
 } #}}}
 
 sub format (@) { #{{{
@@ -94,16 +143,11 @@ package IkiWiki;
 my %toping;
 my %feedlinks;
 
-sub yesno ($) { #{{{
-	my $val=shift;
-	return (defined $val && lc($val) eq "yes");
-} #}}}
-
 sub preprocess_inline (@) { #{{{
 	my %params=@_;
 	
 	if (! exists $params{pages}) {
-		return "[[inline ".gettext("missing pages parameter")."]]";
+		error gettext("missing pages parameter");
 	}
 	my $raw=yesno($params{raw});
 	my $archive=yesno($params{archive});
@@ -142,7 +186,7 @@ sub preprocess_inline (@) { #{{{
 	}
 
 	if (exists $params{sort} && $params{sort} eq 'title') {
-		@list=sort @list;
+		@list=sort { pagetitle(basename($a)) cmp pagetitle(basename($b)) } @list;
 	}
 	elsif (exists $params{sort} && $params{sort} eq 'mtime') {
 		@list=sort { $pagemtime{$b} <=> $pagemtime{$a} } @list;
@@ -207,7 +251,7 @@ sub preprocess_inline (@) { #{{{
 	my $atomurl=basename(atompage($params{destpage}).$feednum) if $feeds && $atom;
 	my $ret="";
 
-	if ($config{cgiurl} && ! $params{preview} && (exists $params{rootpage} ||
+	if (length $config{cgiurl} && ! $params{preview} && (exists $params{rootpage} ||
 			(exists $params{postform} && yesno($params{postform})))) {
 		# Add a blog post form, with feed buttons.
 		my $formtemplate=template("blogpost.tmpl", blind_cache => 1);
@@ -313,7 +357,7 @@ sub preprocess_inline (@) { #{{{
 			if (! $params{preview}) {
 				writefile($rssp, $config{destdir},
 					genfeed("rss",
-						$config{url}."/".rsspage($params{destpage}).$feednum, $desc, $params{destpage}, @feedlist));
+						$config{url}."/".rsspage($params{destpage}).$feednum, $desc, $params{guid}, $params{destpage}, @feedlist));
 				$toping{$params{destpage}}=1 unless $config{rebuild};
 				$feedlinks{$params{destpage}}=qq{<link rel="alternate" type="application/rss+xml" title="RSS" href="$rssurl" />};
 			}
@@ -323,7 +367,7 @@ sub preprocess_inline (@) { #{{{
 			will_render($params{destpage}, $atomp);
 			if (! $params{preview}) {
 				writefile($atomp, $config{destdir},
-					genfeed("atom", $config{url}."/".atompage($params{destpage}).$feednum, $desc, $params{destpage}, @feedlist));
+					genfeed("atom", $config{url}."/".atompage($params{destpage}).$feednum, $desc, $params{guid}, $params{destpage}, @feedlist));
 				$toping{$params{destpage}}=1 unless $config{rebuild};
 				$feedlinks{$params{destpage}}=qq{<link rel="alternate" type="application/atom+xml" title="Atom" href="$atomurl" />};
 			}
@@ -416,20 +460,21 @@ sub atompage ($) { #{{{
 	return targetpage(shift, "atom");
 } #}}}
 
-sub genfeed ($$$$@) { #{{{
+sub genfeed ($$$$$@) { #{{{
 	my $feedtype=shift;
 	my $feedurl=shift;
 	my $feeddesc=shift;
+	my $guid=shift;
 	my $page=shift;
 	my @pages=@_;
 	
-	my $url=URI->new(encode_utf8($config{url}."/".urlto($page,"")));
+	my $url=URI->new(encode_utf8(urlto($page,"",1)));
 	
 	my $itemtemplate=template($feedtype."item.tmpl", blind_cache => 1);
 	my $content="";
 	my $lasttime = 0;
 	foreach my $p (@pages) {
-		my $u=URI->new(encode_utf8($config{url}."/".urlto($p, "")));
+		my $u=URI->new(encode_utf8(urlto($p, "", 1)));
 		my $pcontent = absolute_urls(get_inline_content($p, $page), $url);
 
 		$itemtemplate->param(
@@ -442,6 +487,11 @@ sub genfeed ($$$$@) { #{{{
 			mdate_3339 => date_3339($pagemtime{$p}),
 		);
 
+		if (exists $pagestate{$p} &&
+		    exists $pagestate{$p}{meta}{guid}) {
+			$itemtemplate->param(guid => $pagestate{$p}{meta}{guid});
+		}
+
 		if ($itemtemplate->query(name => "enclosure")) {
 			my $file=$pagesources{$p};
 			my $type=pagetype($file);
@@ -484,6 +534,7 @@ sub genfeed ($$$$@) { #{{{
 		pageurl => $url,
 		content => $content,
 		feeddesc => $feeddesc,
+		guid => $guid,
 		feeddate => date_3339($lasttime),
 		feedurl => $feedurl,
 		version => $IkiWiki::version,
@@ -519,7 +570,7 @@ sub pingurl (@) { #{{{
 
 	foreach my $page (keys %toping) {
 		my $title=pagetitle(basename($page), 0);
-		my $url="$config{url}/".urlto($page, "");
+		my $url=urlto($page, "", 1);
 		foreach my $pingurl (@{$config{pingurl}}) {
 			debug("Pinging $pingurl for $page");
 			eval {