diff options
Diffstat (limited to 'IkiWiki')
-rw-r--r-- | IkiWiki/Plugin/attachment.pm | 64 | ||||
-rw-r--r-- | IkiWiki/Plugin/autoindex.pm | 4 | ||||
-rw-r--r-- | IkiWiki/Plugin/editpage.pm | 2 | ||||
-rw-r--r-- | IkiWiki/Plugin/goodstuff.pm | 4 | ||||
-rw-r--r-- | IkiWiki/Plugin/google.pm | 54 | ||||
-rw-r--r-- | IkiWiki/Plugin/inline.pm | 10 | ||||
-rw-r--r-- | IkiWiki/Plugin/lockedit.pm | 10 | ||||
-rw-r--r-- | IkiWiki/Plugin/orphans.pm | 2 | ||||
-rw-r--r-- | IkiWiki/Plugin/remove.pm | 14 | ||||
-rw-r--r-- | IkiWiki/Plugin/rename.pm | 10 | ||||
-rw-r--r-- | IkiWiki/Wrapper.pm | 2 |
11 files changed, 96 insertions, 80 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) { diff --git a/IkiWiki/Wrapper.pm b/IkiWiki/Wrapper.pm index 6dc25403e..187314d16 100644 --- a/IkiWiki/Wrapper.pm +++ b/IkiWiki/Wrapper.pm @@ -28,7 +28,7 @@ sub gen_wrapper () { #{{{ my @envsave; push @envsave, qw{REMOTE_ADDR QUERY_STRING REQUEST_METHOD REQUEST_URI CONTENT_TYPE CONTENT_LENGTH GATEWAY_INTERFACE - HTTP_COOKIE REMOTE_USER} if $config{cgi}; + HTTP_COOKIE REMOTE_USER HTTPS} if $config{cgi}; my $envsave=""; foreach my $var (@envsave) { $envsave.=<<"EOF" |