return $canedit;
}
+sub check_cansave ($$$$) {
+ my $page=shift;
+ my $content=shift;
+ my $q=shift;
+ my $session=shift;
+
+ my $cansave;
+ run_hooks(cansave => sub {
+ return if defined $cansave;
+ my $ret=shift->($page, $content, $q, $session);
+ if (defined $ret) {
+ if ($ret eq "") {
+ $cansave=1;
+ }
+ elsif (ref $ret eq 'CODE') {
+ $ret->();
+ $cansave=0;
+ }
+ else {
+ error($ret);
+ $cansave=0;
+ }
+ }
+ });
+ return $cansave;
+}
+
sub cgi_editpage ($$) {
my $q=shift;
my $session=shift;
}
my $content=$form->field('editcontent');
+ check_cansave($page, $content, $q, $session);
run_hooks(editcontent => sub {
$content=shift->(
content => $content,
hook(type => "auth", id => "skeleton", call => \&auth);
hook(type => "sessioncgi", id => "skeleton", call => \&sessioncgi);
hook(type => "canedit", id => "skeleton", call => \&canedit);
+ hook(type => "cansave", id => "skeleton", call => \&cansave);
hook(type => "editcontent", id => "skeleton", call => \&editcontent);
hook(type => "formbuilder_setup", id => "skeleton", call => \&formbuilder_setup);
hook(type => "formbuilder", id => "skeleton", call => \&formbuilder);
debug("skeleton plugin running in canedit");
}
+sub cansave ($$$$) {
+ my $page=shift;
+ my $content=shift;
+ my $cgi=shift;
+ my $session=shift;
+
+ debug("skeleton plugin running in cansave")
+}
+
sub editcontent ($$$) {
my %params=@_;
since it's sometimes used to test to see which pages in a set of pages a
user can edit.
+### cansave
+
+ hook(type => "cansave", id => "foo", call => \&cansave);
+
+This hook can be used to implement arbitrary access methods to control
+when a page being edited can be saved using the web interface (commits
+from revision control bypass it).
+
+When a page is about to be saved, each registered cansave hook is
+called in turn, and passed the page name, the edited content, a CGI
+object and a session object.
+
+The return value of a cansave hook is interpreted the same as for the
+canedit hook.
+
### canremove
hook(type => "canremove", id => "foo", call => \&canremove);