diff options
author | joey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071> | 2007-02-02 02:33:03 +0000 |
---|---|---|
committer | joey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071> | 2007-02-02 02:33:03 +0000 |
commit | 5f162cfd344f6b75fa39a57be4b3d488cadd1535 (patch) | |
tree | 56528c6b3fad333fc32ee4a774a0130bbfaa6131 /IkiWiki/Plugin/lockedit.pm | |
parent | 930ca4d85f90ddf83cfaab7061a9ac49ee04313a (diff) | |
download | ikiwiki-5f162cfd344f6b75fa39a57be4b3d488cadd1535.tar ikiwiki-5f162cfd344f6b75fa39a57be4b3d488cadd1535.tar.gz |
* Add canedit hook, allowing arbitrary controls over when a page can be
edited.
* Move code forcing signing before edit to a new "signinedit" plugin, and
code checking for locked pages into a new "lockedit" plugin. Both are
enabled by default.
* Remove the anonok config setting. This is now implemented by a new
"anonok" plugin. Anyone with a wiki allowing anonymous edits should
change their configs to enable this new plugin.
* Add an opendiscussion plugin that allows anonymous users to edit
discussion pages, on a wiki that is otherwise wouldn't allow it.
* Lots of CGI code reorg and cleanup.
Diffstat (limited to 'IkiWiki/Plugin/lockedit.pm')
-rw-r--r-- | IkiWiki/Plugin/lockedit.pm | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/IkiWiki/Plugin/lockedit.pm b/IkiWiki/Plugin/lockedit.pm new file mode 100644 index 000000000..587f7ee54 --- /dev/null +++ b/IkiWiki/Plugin/lockedit.pm @@ -0,0 +1,61 @@ +#!/usr/bin/perl +package IkiWiki::Plugin::lockedit; + +use warnings; +use strict; +use IkiWiki; + +sub import { #{{{ + hook(type => "canedit", id => "lockedit", call => \&canedit); + hook(type => "formbuilder_setup", id => "lockedit", + call => \&formbuilder_setup); +} # }}} + +sub canedit ($$) { #{{{ + my $page=shift; + my $cgi=shift; + my $session=shift; + + my $user=$session->param("name"); + return undef if defined $user && IkiWiki::is_admin($user); + + foreach my $admin (@{$config{adminuser}}) { + if (pagespec_match($page, IkiWiki::userinfo_get($admin, "locked_pages"))) { + return sprintf(gettext("%s is locked by %s and cannot be edited"), + htmllink("", "", $page, 1), + IkiWiki::userlink($admin)); + } + } + + return undef; +} #}}} + +sub formbuilder_setup (@) { #{{{ + my %params=@_; + + my $form=$params{form}; + my $session=$params{session}; + my $cgi=$params{cgi}; + my $user_name=$session->param("name"); + + if ($form->title eq "preferences") { + $form->field(name => "locked_pages", size => 50, + comment => "(".htmllink("", "", "PageSpec", 1).")"); + 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")); + } + 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"); + } + } + } +} #}}} + +1 |