From bb394fdae8ba488f1031d6f053f1544c689a3628 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 1 Aug 2008 15:45:57 -0400 Subject: admin prefs move to setup file, stage 1 The locked pages configuration is moving to a locked_pages option in the setup file, and the allowed attachments configuration to allowed_attachments. The admin prefs page can still be used for these, but that's depreacted and will only be shown if there's currently a value. --- IkiWiki/Plugin/attachment.pm | 66 +++++++++++++++++++++++++++++++------------- IkiWiki/Plugin/lockedit.pm | 48 +++++++++++++++++++++++++++----- 2 files changed, 88 insertions(+), 26 deletions(-) (limited to 'IkiWiki/Plugin') diff --git a/IkiWiki/Plugin/attachment.pm b/IkiWiki/Plugin/attachment.pm index 47e165251..b6327f0c5 100644 --- a/IkiWiki/Plugin/attachment.pm +++ b/IkiWiki/Plugin/attachment.pm @@ -21,6 +21,18 @@ sub getsetup () { #{{{ safe => 0, # executed rebuild => 0, }, + allowed_attachments => { + type => "string", + example => "mimetype(image/*) and maxsize(50kb)", + description => "enhanced PageSpec specifying what attachments are allowed", + description_html => htmllink("", "", + "ikiwiki/PageSpec/attachment", + noimageinline => 1, + linktext => "enhanced PageSpec", + )." specifying what attachments are allowed", + safe => 1, + rebuild => 0, + }, } #}}} sub check_canattach ($$;$) { #{{{ @@ -36,19 +48,33 @@ sub check_canattach ($$;$) { #{{{ # Use a special pagespec to test that the attachment is valid. my $allowed=1; - foreach my $admin (@{$config{adminuser}}) { - my $allowed_attachments=IkiWiki::userinfo_get($admin, "allowed_attachments"); - if (defined $allowed_attachments && - length $allowed_attachments) { - $allowed=pagespec_match($dest, - $allowed_attachments, - file => $file, - user => $session->param("name"), - ip => $ENV{REMOTE_ADDR}, - ); - last if $allowed; + if (defined $config{allowed_attachments} && + length $config{allowed_attachments}) { + $allowed=pagespec_match($dest, + $config{allowed_attachments}, + file => $file, + user => $session->param("name"), + ip => $ENV{REMOTE_ADDR}, + ); + } + + # XXX deprecated, should be removed eventually + if ($allowed) { + foreach my $admin (@{$config{adminuser}}) { + my $allowed_attachments=IkiWiki::userinfo_get($admin, "allowed_attachments"); + if (defined $allowed_attachments && + length $allowed_attachments) { + $allowed=pagespec_match($dest, + $allowed_attachments, + file => $file, + user => $session->param("name"), + ip => $ENV{REMOTE_ADDR}, + ); + last if $allowed; + } } } + if (! $allowed) { error(gettext("prohibited by allowed_attachments")." ($allowed)"); } @@ -91,24 +117,26 @@ sub formbuilder_setup (@) { #{{{ } } elsif ($form->title eq "preferences") { + # XXX deprecated, should remove eventually my $session=$params{session}; my $user_name=$session->param("name"); $form->field(name => "allowed_attachments", size => 50, fieldset => "admin", - comment => "(". - htmllink("", "", - "ikiwiki/PageSpec/attachment", - noimageinline => 1, - linktext => "Enhanced PageSpec", - ).")" + comment => "deprecated; please move to allowed_attachments in setup file", ); if (! IkiWiki::is_admin($user_name)) { $form->field(name => "allowed_attachments", type => "hidden"); } if (! $form->submitted) { - $form->field(name => "allowed_attachments", force => 1, - value => IkiWiki::userinfo_get($user_name, "allowed_attachments")); + my $value=IkiWiki::userinfo_get($user_name, "allowed_attachments"); + if (length $value) { + $form->field(name => "allowed_attachments", force => 1, + value => IkiWiki::userinfo_get($user_name, "allowed_attachments")); + } + else { + $form->field(name => "allowed_attachments", type => "hidden"); + } } if ($form->submitted && $form->submitted eq 'Save Preferences') { if (defined $form->field("allowed_attachments")) { diff --git a/IkiWiki/Plugin/lockedit.pm b/IkiWiki/Plugin/lockedit.pm index 5ffb4e6f9..033b38263 100644 --- a/IkiWiki/Plugin/lockedit.pm +++ b/IkiWiki/Plugin/lockedit.pm @@ -6,11 +6,25 @@ use strict; use IkiWiki 2.00; sub import { #{{{ + hook(type => "getsetup", id => "lockedit", call => \&getsetup); hook(type => "canedit", id => "lockedit", call => \&canedit); hook(type => "formbuilder_setup", id => "lockedit", call => \&formbuilder_setup); } # }}} +sub getsetup () { #{{{ + return + locked_pages => { + type => "string", + example => "!*/Discussion", + description => "PageSpec controlling which pages are locked", + description_html => htmllink("", "", "ikiwiki/PageSpec", noimageinline => 1). + " controlling which pages are locked", + safe => 1, + rebuild => 0, + }, +} #}}} + sub canedit ($$) { #{{{ my $page=shift; my $cgi=shift; @@ -19,6 +33,20 @@ sub canedit ($$) { #{{{ my $user=$session->param("name"); return undef if defined $user && IkiWiki::is_admin($user); + if (defined $config{locked_pages} && length $config{locked_pages} && + pagespec_match($page, $config{locked_pages})) { + if (! defined $user || + ! IkiWiki::userinfo_get($session->param("name"), "regdate")) { + return sub { IkiWiki::needsignin($cgi, $session) }; + } + else { + return sprintf(gettext("%s is locked and cannot be edited"), + htmllink("", "", $page, noimageinline => 1)); + + } + } + + # XXX deprecated, should be removed eventually foreach my $admin (@{$config{adminuser}}) { if (pagespec_match($page, IkiWiki::userinfo_get($admin, "locked_pages"))) { if (! defined $user || @@ -26,9 +54,8 @@ sub canedit ($$) { #{{{ return sub { IkiWiki::needsignin($cgi, $session) }; } else { - return sprintf(gettext("%s is locked by %s and cannot be edited"), - htmllink("", "", $page, noimageinline => 1), - IkiWiki::userlink($admin)); + return sprintf(gettext("%s is locked and cannot be edited"), + htmllink("", "", $page, noimageinline => 1)); } } } @@ -38,7 +65,8 @@ sub canedit ($$) { #{{{ sub formbuilder_setup (@) { #{{{ my %params=@_; - + + # XXX deprecated, should be removed eventually my $form=$params{form}; if ($form->title eq "preferences") { my $session=$params{session}; @@ -47,13 +75,19 @@ sub formbuilder_setup (@) { #{{{ $form->field(name => "locked_pages", size => 50, fieldset => "admin", - comment => "(".htmllink("", "", "ikiwiki/PageSpec", noimageinline => 1).")"); + comment => "deprecated; please move to locked_pages in setup file" + ); if (! IkiWiki::is_admin($user_name)) { $form->field(name => "locked_pages", type => "hidden"); } if (! $form->submitted) { - $form->field(name => "locked_pages", force => 1, - value => IkiWiki::userinfo_get($user_name, "locked_pages")); + my $value=IkiWiki::userinfo_get($user_name, "locked_pages"); + if (length $value) { + $form->field(name => "locked_pages", force => 1, value => $value); + } + else { + $form->field(name => "locked_pages", type => "hidden"); + } } if ($form->submitted && $form->submitted eq 'Save Preferences') { if (defined $form->field("locked_pages")) { -- cgit v1.2.3