summaryrefslogtreecommitdiff
path: root/IkiWiki/Plugin
diff options
context:
space:
mode:
authorJoey Hess <joey@kodama.kitenet.net>2008-10-15 19:36:48 -0400
committerJoey Hess <joey@kodama.kitenet.net>2008-10-15 19:36:48 -0400
commit1f7f5d5e0e21920c5f15290cd34594ad91077071 (patch)
treea19302c57ed6ea46c4bf05a1ed8d840725643069 /IkiWiki/Plugin
parent917f54a777d152ee5963acd81bf8a2800a0507b1 (diff)
parent20e691fe20ead76d826ab77501c6e9cbc7b487e8 (diff)
Merge branch 'master' into darcs
Diffstat (limited to 'IkiWiki/Plugin')
-rw-r--r--IkiWiki/Plugin/attachment.pm64
-rw-r--r--IkiWiki/Plugin/autoindex.pm4
-rw-r--r--IkiWiki/Plugin/editpage.pm2
-rw-r--r--IkiWiki/Plugin/goodstuff.pm4
-rw-r--r--IkiWiki/Plugin/google.pm54
-rw-r--r--IkiWiki/Plugin/inline.pm10
-rw-r--r--IkiWiki/Plugin/lockedit.pm10
-rw-r--r--IkiWiki/Plugin/orphans.pm2
-rw-r--r--IkiWiki/Plugin/remove.pm14
-rw-r--r--IkiWiki/Plugin/rename.pm10
10 files changed, 95 insertions, 79 deletions
diff --git a/IkiWiki/Plugin/attachment.pm b/IkiWiki/Plugin/attachment.pm
index 837992841..dcac3e820 100644
--- a/IkiWiki/Plugin/attachment.pm
+++ b/IkiWiki/Plugin/attachment.pm
@@ -94,7 +94,8 @@ sub formbuilder_setup (@) { #{{{
my $form=$params{form};
my $q=$params{cgi};
- if (defined $form->field("do") && $form->field("do") eq "edit") {
+ if (defined $form->field("do") && ($form->field("do") eq "edit" ||
+ $form->field("do") eq "create")) {
# Add attachment field, set type to multipart.
$form->enctype(&CGI::MULTIPART);
$form->field(name => 'attachment', type => 'file');
@@ -158,7 +159,7 @@ sub formbuilder (@) { #{{{
my $form=$params{form};
my $q=$params{cgi};
- return if ! defined $form->field("do") || $form->field("do") ne "edit";
+ return if ! defined $form->field("do") || ($form->field("do") ne "edit" && $form->field("do") ne "create") ;
my $filename=$q->param('attachment');
if (defined $filename && length $filename &&
@@ -288,63 +289,4 @@ sub attachment_list ($) { #{{{
return sort { $b->{mtime_raw} <=> $a->{mtime_raw} || $a->{link} cmp $b->{link} } @ret;
} #}}}
-package IkiWiki::PageSpec;
-
-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
diff --git a/IkiWiki/Plugin/autoindex.pm b/IkiWiki/Plugin/autoindex.pm
index a79a06314..d1b3edb1f 100644
--- a/IkiWiki/Plugin/autoindex.pm
+++ b/IkiWiki/Plugin/autoindex.pm
@@ -97,7 +97,9 @@ sub refresh () { #{{{
if ($config{rcs}) {
IkiWiki::disable_commit_hook();
}
- genindex($_) foreach @needed;
+ foreach my $page (@needed) {
+ genindex($page);
+ }
if ($config{rcs}) {
IkiWiki::rcs_commit_staged(
gettext("automatic index generation"),
diff --git a/IkiWiki/Plugin/editpage.pm b/IkiWiki/Plugin/editpage.pm
index 794548c6d..30c93df20 100644
--- a/IkiWiki/Plugin/editpage.pm
+++ b/IkiWiki/Plugin/editpage.pm
@@ -250,7 +250,7 @@ sub cgi_editpage ($$) { #{{{
file_pruned($from, $config{srcdir}) ||
$from=~/^\// ||
$absolute ||
- $form->submitted eq "Preview") {
+ $form->submitted) {
@page_locs=$best_loc=$page;
}
else {
diff --git a/IkiWiki/Plugin/goodstuff.pm b/IkiWiki/Plugin/goodstuff.pm
index 08ed960b4..ed1f4ddfc 100644
--- a/IkiWiki/Plugin/goodstuff.pm
+++ b/IkiWiki/Plugin/goodstuff.pm
@@ -27,7 +27,9 @@ my @bundle=qw{
sub import { #{{{
hook(type => "getsetup", id => "goodstuff", call => \&getsetup);
- IkiWiki::loadplugin($_) foreach @bundle;
+ foreach my $plugin (@bundle) {
+ IkiWiki::loadplugin($plugin);
+ }
} # }}}
sub getsetup { #{{{
diff --git a/IkiWiki/Plugin/google.pm b/IkiWiki/Plugin/google.pm
new file mode 100644
index 000000000..92b9b29eb
--- /dev/null
+++ b/IkiWiki/Plugin/google.pm
@@ -0,0 +1,54 @@
+#!/usr/bin/perl
+package IkiWiki::Plugin::google;
+
+use warnings;
+use strict;
+use IkiWiki 2.00;
+use URI;
+
+my $host;
+
+sub import { #{{{
+ hook(type => "getsetup", id => "google", call => \&getsetup);
+ hook(type => "checkconfig", id => "google", call => \&checkconfig);
+ hook(type => "pagetemplate", id => "google", call => \&pagetemplate);
+} # }}}
+
+sub getsetup () { #{{{
+ return
+ plugin => {
+ safe => 1,
+ rebuild => 1,
+ },
+} #}}}
+
+sub checkconfig () { #{{{
+ if (! length $config{url}) {
+ error(sprintf(gettext("Must specify %s when using the google search plugin"), "url"));
+ }
+ my $uri=URI->new($config{url});
+ if (! $uri || ! defined $uri->host) {
+ error(gettext("Failed to parse url, cannot determine domain name"));
+ }
+ $host=$uri->host;
+} #}}}
+
+my $form;
+sub pagetemplate (@) { #{{{
+ my %params=@_;
+ my $page=$params{page};
+ my $template=$params{template};
+
+ # Add search box to page header.
+ if ($template->query(name => "searchform")) {
+ if (! defined $form) {
+ my $searchform = template("googleform.tmpl", blind_cache => 1);
+ $searchform->param(sitefqdn => $host);
+ $form=$searchform->output;
+ }
+
+ $template->param(searchform => $form);
+ }
+} #}}}
+
+1
diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm
index e0f33ef31..6d88c2f15 100644
--- a/IkiWiki/Plugin/inline.pm
+++ b/IkiWiki/Plugin/inline.pm
@@ -114,7 +114,7 @@ sub format (@) { #{{{
return $params{content};
} #}}}
-sub sessioncgi () { #{{{
+sub sessioncgi ($$) { #{{{
my $q=shift;
my $session=shift;
@@ -266,6 +266,9 @@ sub preprocess_inline (@) { #{{{
my $rootpage;
if (exists $params{rootpage}) {
$rootpage=bestlink($params{page}, $params{rootpage});
+ if (!length $rootpage) {
+ $rootpage=$params{rootpage};
+ }
}
else {
$rootpage=$params{page};
@@ -313,6 +316,7 @@ sub preprocess_inline (@) { #{{{
$template->param(pageurl => urlto(bestlink($params{page}, $page), $params{destpage}));
$template->param(title => pagetitle(basename($page)));
$template->param(ctime => displaytime($pagectime{$page}, $params{timeformat}));
+ $template->param(mtime => displaytime($pagemtime{$page}, $params{timeformat}));
$template->param(first => 1) if $page eq $list[0];
$template->param(last => 1) if $page eq $list[$#list];
@@ -372,7 +376,7 @@ sub preprocess_inline (@) { #{{{
genfeed("rss",
$config{url}."/".$rssp, $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" />};
+ $feedlinks{$params{destpage}}=qq{<link rel="alternate" type="application/rss+xml" title="$desc (RSS)" href="$rssurl" />};
}
}
if ($atom) {
@@ -382,7 +386,7 @@ sub preprocess_inline (@) { #{{{
writefile($atomp, $config{destdir},
genfeed("atom", $config{url}."/".$atomp, $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" />};
+ $feedlinks{$params{destpage}}=qq{<link rel="alternate" type="application/atom+xml" title="$desc (Atom)" href="$atomurl" />};
}
}
}
diff --git a/IkiWiki/Plugin/lockedit.pm b/IkiWiki/Plugin/lockedit.pm
index 7462de41c..f6cac6cdd 100644
--- a/IkiWiki/Plugin/lockedit.pm
+++ b/IkiWiki/Plugin/lockedit.pm
@@ -37,7 +37,10 @@ sub canedit ($$) { #{{{
return undef if defined $user && IkiWiki::is_admin($user);
if (defined $config{locked_pages} && length $config{locked_pages} &&
- pagespec_match($page, $config{locked_pages})) {
+ pagespec_match($page, $config{locked_pages},
+ user => $session->param("name"),
+ ip => $ENV{REMOTE_ADDR},
+ )) {
if (! defined $user ||
! IkiWiki::userinfo_get($session->param("name"), "regdate")) {
return sub { IkiWiki::needsignin($cgi, $session) };
@@ -51,7 +54,10 @@ sub canedit ($$) { #{{{
# XXX deprecated, should be removed eventually
foreach my $admin (@{$config{adminuser}}) {
- if (pagespec_match($page, IkiWiki::userinfo_get($admin, "locked_pages"))) {
+ if (pagespec_match($page, IkiWiki::userinfo_get($admin, "locked_pages"),
+ user => $session->param("name"),
+ ip => $ENV{REMOTE_ADDR},
+ )) {
if (! defined $user ||
! IkiWiki::userinfo_get($session->param("name"), "regdate")) {
return sub { IkiWiki::needsignin($cgi, $session) };
diff --git a/IkiWiki/Plugin/orphans.pm b/IkiWiki/Plugin/orphans.pm
index b910758e0..32cbc5dd5 100644
--- a/IkiWiki/Plugin/orphans.pm
+++ b/IkiWiki/Plugin/orphans.pm
@@ -43,7 +43,7 @@ sub preprocess (@) { #{{{
next if grep {
length $_ &&
($_ !~ /\/\Q$discussion\E$/i || ! $config{discussion}) &&
- bestlink($page, $_) !~ /^($page|)$/
+ bestlink($page, $_) !~ /^(\Q$page\E|)$/
} @{$links{$page}};
push @orphans, $page;
}
diff --git a/IkiWiki/Plugin/remove.pm b/IkiWiki/Plugin/remove.pm
index c8d76368e..68bf9d1ee 100644
--- a/IkiWiki/Plugin/remove.pm
+++ b/IkiWiki/Plugin/remove.pm
@@ -61,9 +61,10 @@ sub formbuilder_setup (@) { #{{{
my $form=$params{form};
my $q=$params{cgi};
- if (defined $form->field("do") && $form->field("do") eq "edit") {
+ if (defined $form->field("do") && ($form->field("do") eq "edit" ||
+ $form->field("do") eq "create")) {
# Removal button for the page, and also for attachments.
- push @{$params{buttons}}, "Remove";
+ push @{$params{buttons}}, "Remove" if $form->field("do") eq "edit";
$form->tmpl_param("field-remove" => '<input name="_submit" type="submit" value="Remove Attachments" />');
}
} #}}}
@@ -97,7 +98,9 @@ sub removal_confirm ($$@) { #{{{
my $attachment=shift;
my @pages=@_;
- check_canremove($_, $q, $session) foreach @pages;
+ foreach my $page (@pages) {
+ check_canremove($page, $q, $session);
+ }
# Save current form state to allow returning to it later
# without losing any edits.
@@ -135,11 +138,12 @@ sub formbuilder (@) { #{{{
my %params=@_;
my $form=$params{form};
- if (defined $form->field("do") && $form->field("do") eq "edit") {
+ if (defined $form->field("do") && ($form->field("do") eq "edit" ||
+ $form->field("do") eq "create")) {
my $q=$params{cgi};
my $session=$params{session};
- if ($form->submitted eq "Remove") {
+ if ($form->submitted eq "Remove" && $form->field("do") eq "edit") {
removal_confirm($q, $session, 0, $form->field("page"));
}
elsif ($form->submitted eq "Remove Attachments") {
diff --git a/IkiWiki/Plugin/rename.pm b/IkiWiki/Plugin/rename.pm
index 6c131487a..7e55e271c 100644
--- a/IkiWiki/Plugin/rename.pm
+++ b/IkiWiki/Plugin/rename.pm
@@ -210,11 +210,12 @@ sub formbuilder (@) { #{{{
my %params=@_;
my $form=$params{form};
- if (defined $form->field("do") && $form->field("do") eq "edit") {
+ if (defined $form->field("do") && ($form->field("do") eq "edit" ||
+ $form->field("do") eq "create")) {
my $q=$params{cgi};
my $session=$params{session};
- if ($form->submitted eq "Rename") {
+ if ($form->submitted eq "Rename" && $form->field("do") eq "edit") {
rename_start($q, $session, 0, $form->field("page"));
}
elsif ($form->submitted eq "Rename Attachment") {
@@ -237,9 +238,10 @@ sub formbuilder_setup (@) { #{{{
my $form=$params{form};
my $q=$params{cgi};
- if (defined $form->field("do") && $form->field("do") eq "edit") {
+ if (defined $form->field("do") && ($form->field("do") eq "edit" ||
+ $form->field("do") eq "create")) {
# Rename button for the page, and also for attachments.
- push @{$params{buttons}}, "Rename";
+ push @{$params{buttons}}, "Rename" if $form->field("do") eq "edit";
$form->tmpl_param("field-rename" => '<input name="_submit" type="submit" value="Rename Attachment" />');
if (defined $renamesummary) {