X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/7960031135e74f6d36abc4294dbadb687117222c..4708aeceb3ec518a00069ad7a112ab0a5596275c:/IkiWiki/Plugin/lockedit.pm diff --git a/IkiWiki/Plugin/lockedit.pm b/IkiWiki/Plugin/lockedit.pm index a829df1cf..93a525677 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 => "pagespec", + 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,12 +33,30 @@ 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"))) { - IkiWiki::needsignin($cgi, $session) unless defined $user; - return sprintf(gettext("%s is locked by %s and cannot be edited"), - htmllink("", "", $page, noimageinline => 1), - IkiWiki::userlink($admin)); + 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)); + } } } @@ -33,28 +65,38 @@ sub canedit ($$) { #{{{ sub formbuilder_setup (@) { #{{{ my %params=@_; - - my $form=$params{form}; - my $session=$params{session}; - my $cgi=$params{cgi}; - my $user_name=$session->param("name"); + # XXX deprecated, should be removed eventually + my $form=$params{form}; if ($form->title eq "preferences") { + my $session=$params{session}; + my $cgi=$params{cgi}; + my $user_name=$session->param("name"); + $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")) { IkiWiki::userinfo_set($user_name, "locked_pages", $form->field("locked_pages")) || error("failed to set locked_pages"); + if (! length $form->field("locked_pages")) { + $form->field(name => "locked_pages", type => "hidden"); + } } } }