]> sipb.mit.edu Git - ikiwiki.git/blob - IkiWiki/Plugin/lockedit.pm
remove description_html, add link
[ikiwiki.git] / IkiWiki / Plugin / lockedit.pm
1 #!/usr/bin/perl
2 package IkiWiki::Plugin::lockedit;
3
4 use warnings;
5 use strict;
6 use IkiWiki 2.00;
7
8 sub import { #{{{
9         hook(type => "getsetup", id => "lockedit", call => \&getsetup);
10         hook(type => "canedit", id => "lockedit", call => \&canedit);
11         hook(type => "formbuilder_setup", id => "lockedit",
12              call => \&formbuilder_setup);
13 } # }}}
14
15 sub getsetup () { #{{{
16         return
17                 locked_pages => {
18                         type => "pagespec",
19                         example => "!*/Discussion",
20                         description => "PageSpec controlling which pages are locked",
21                         link => "ikiwiki/PageSpec",
22                         safe => 1,
23                         rebuild => 0,
24                 },
25 } #}}}
26
27 sub canedit ($$) { #{{{
28         my $page=shift;
29         my $cgi=shift;
30         my $session=shift;
31
32         my $user=$session->param("name");
33         return undef if defined $user && IkiWiki::is_admin($user);
34
35         if (defined $config{locked_pages} && length $config{locked_pages} &&
36             pagespec_match($page, $config{locked_pages})) {
37                 if (! defined $user ||
38                     ! IkiWiki::userinfo_get($session->param("name"), "regdate")) {
39                         return sub { IkiWiki::needsignin($cgi, $session) };
40                 }
41                 else {
42                         return sprintf(gettext("%s is locked and cannot be edited"),
43                                 htmllink("", "", $page, noimageinline => 1));
44                         
45                 }
46         }
47
48         # XXX deprecated, should be removed eventually
49         foreach my $admin (@{$config{adminuser}}) {
50                 if (pagespec_match($page, IkiWiki::userinfo_get($admin, "locked_pages"))) {
51                         if (! defined $user ||
52                             ! IkiWiki::userinfo_get($session->param("name"), "regdate")) {
53                                 return sub { IkiWiki::needsignin($cgi, $session) };
54                         }
55                         else {
56                                 return sprintf(gettext("%s is locked and cannot be edited"),
57                                         htmllink("", "", $page, noimageinline => 1));
58                         }
59                 }
60         }
61
62         return undef;
63 } #}}}
64
65 sub formbuilder_setup (@) { #{{{
66         my %params=@_;
67
68         # XXX deprecated, should be removed eventually  
69         my $form=$params{form};
70         if ($form->title eq "preferences") {
71                 my $session=$params{session};
72                 my $cgi=$params{cgi};
73                 my $user_name=$session->param("name");
74
75                 $form->field(name => "locked_pages", size => 50,
76                         fieldset => "admin",
77                         comment => "deprecated; please move to locked_pages in setup file"
78                 );
79                 if (! IkiWiki::is_admin($user_name)) {
80                         $form->field(name => "locked_pages", type => "hidden");
81                 }
82                 if (! $form->submitted) {
83                         my $value=IkiWiki::userinfo_get($user_name, "locked_pages");
84                         if (length $value) {
85                                 $form->field(name => "locked_pages", force => 1, value => $value);
86                         }
87                         else {
88                                 $form->field(name => "locked_pages", type => "hidden");
89                         }
90                 }
91                 if ($form->submitted && $form->submitted eq 'Save Preferences') {
92                         if (defined $form->field("locked_pages")) {
93                                 IkiWiki::userinfo_set($user_name, "locked_pages",
94                                         $form->field("locked_pages")) ||
95                                                 error("failed to set locked_pages");
96                                 if (! length $form->field("locked_pages")) {
97                                         $form->field(name => "locked_pages", type => "hidden");
98                                 }
99                         }
100                 }
101         }
102 } #}}}
103
104 1