X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/a9d7c5453ae0f214f86043381310b81ad358b933..566c1af2aafa7b371a07f5229513ac2014e93fd9:/IkiWiki.pm?ds=sidebyside

diff --git a/IkiWiki.pm b/IkiWiki.pm
index c01c59ac6..207ca87fb 100644
--- a/IkiWiki.pm
+++ b/IkiWiki.pm
@@ -20,7 +20,7 @@ use Exporter q{import};
 our @EXPORT = qw(hook debug error template htmlpage add_depends pagespec_match
                  bestlink htmllink readfile writefile pagetype srcfile pagename
                  displaytime will_render gettext urlto targetpage
-		 add_underlay pagetitle titlepage linkpage
+		 add_underlay pagetitle titlepage linkpage newpagefile
                  %config %links %pagestate %wikistate %renderedfiles
                  %pagesources %destsources);
 our $VERSION = 2.00; # plugin interface version, next is ikiwiki version
@@ -200,7 +200,7 @@ sub getsetup () { #{{{
 	},
 	indexpages => {
 		type => "boolean",
-		defualt => 0,
+		default => 0,
 		description => "use page/index.mdwn source files",
 		safe => 1,
 		rebuild => 1,
@@ -632,13 +632,26 @@ sub pagename ($) { #{{{
 	return $page;
 } #}}}
 
+sub newpagefile ($$) { #{{{
+	my $page=shift;
+	my $type=shift;
+
+	if (! $config{indexpages} || $page eq 'index') {
+		return $page.".".$type;
+	}
+	else {
+		return $page."/index.".$type;
+	}
+} #}}}
+
 sub targetpage ($$) { #{{{
 	my $page=shift;
 	my $ext=shift;
 	
-	if (! $config{usedirs} || $page =~ /^index$/ ) {
+	if (! $config{usedirs} || $page eq 'index') {
 		return $page.".".$ext;
-	} else {
+	}
+	else {
 		return $page."/index.".$ext;
 	}
 } #}}}
@@ -668,11 +681,12 @@ sub srcfile ($;$) { #{{{
 sub add_underlay ($) { #{{{
 	my $dir=shift;
 
-	if ($dir=~/^\//) {
-		unshift @{$config{underlaydirs}}, $dir;
+	if ($dir !~ /^\//) {
+		$dir="$config{underlaydir}/../$dir";
 	}
-	else {
-		unshift @{$config{underlaydirs}}, "$config{underlaydir}/../$dir";
+
+	if (! grep { $_ eq $dir } @{$config{underlaydirs}}) {
+		unshift @{$config{underlaydirs}}, $dir;
 	}
 
 	return 1;
@@ -884,6 +898,23 @@ sub abs2rel ($$) { #{{{
 } #}}}
 
 sub displaytime ($;$) { #{{{
+	my $time=shift;
+	my $format=shift;
+	if (exists $hooks{displaytime}) {
+		my $ret;
+		run_hooks(displaytime => sub {
+			$ret=shift->($time, $format)
+		});
+		return $ret;
+	}
+	else {
+		return formattime($time, $format);
+	}
+} #}}}
+
+sub formattime ($;$) { #{{{
+	# Plugins can override this function to mark up the time for
+	# display.
 	my $time=shift;
 	my $format=shift;
 	if (! defined $format) {
@@ -1906,4 +1937,61 @@ sub match_creation_year ($$;@) { #{{{
 	}
 } #}}}
 
+sub match_user ($$;@) { #{{{
+	shift;
+	my $user=shift;
+	my %params=@_;
+	
+	if (! exists $params{user}) {
+		return IkiWiki::FailReason->new("no user specified");
+	}
+
+	if (defined $params{user} && lc $params{user} eq lc $user) {
+		return IkiWiki::SuccessReason->new("user is $user");
+	}
+	elsif (! defined $params{user}) {
+		return IkiWiki::FailReason->new("not logged in");
+	}
+	else {
+		return IkiWiki::FailReason->new("user is $params{user}, not $user");
+	}
+} #}}}
+
+sub match_admin ($$;@) { #{{{
+	shift;
+	shift;
+	my %params=@_;
+	
+	if (! exists $params{user}) {
+		return IkiWiki::FailReason->new("no user specified");
+	}
+
+	if (defined $params{user} && IkiWiki::is_admin($params{user})) {
+		return IkiWiki::SuccessReason->new("user is an admin");
+	}
+	elsif (! defined $params{user}) {
+		return IkiWiki::FailReason->new("not logged in");
+	}
+	else {
+		return IkiWiki::FailReason->new("user is not an admin");
+	}
+} #}}}
+
+sub match_ip ($$;@) { #{{{
+	shift;
+	my $ip=shift;
+	my %params=@_;
+	
+	if (! exists $params{ip}) {
+		return IkiWiki::FailReason->new("no IP specified");
+	}
+
+	if (defined $params{ip} && lc $params{ip} eq lc $ip) {
+		return IkiWiki::SuccessReason->new("IP is $ip");
+	}
+	else {
+		return IkiWiki::FailReason->new("IP is $params{ip}, not $ip");
+	}
+} #}}}
+
 1