move check_canedit, check_content to IkiWiki library from editpage
It no longer makes sense to keep these functions in editpage, because serveral plugins now exist that use them, and users may want to disable editpage, while leaving those plugins enabled. Most notably, comments uses both functions, and it's entirely appropriate to disable editpage but still want to have comments enabled. Less likely, attachments, rename, and remove all use check_canedit -- but it would be unusual indeed to want to use these w/o editpage.master
parent
c0405e0f20
commit
2c51b18aec
64
IkiWiki.pm
64
IkiWiki.pm
|
@ -1293,6 +1293,70 @@ sub indexlink () {
|
|||
return "<a href=\"$config{url}\">$config{wikiname}</a>";
|
||||
}
|
||||
|
||||
sub check_canedit ($$$;$) {
|
||||
my $page=shift;
|
||||
my $q=shift;
|
||||
my $session=shift;
|
||||
my $nonfatal=shift;
|
||||
|
||||
my $canedit;
|
||||
run_hooks(canedit => sub {
|
||||
return if defined $canedit;
|
||||
my $ret=shift->($page, $q, $session);
|
||||
if (defined $ret) {
|
||||
if ($ret eq "") {
|
||||
$canedit=1;
|
||||
}
|
||||
elsif (ref $ret eq 'CODE') {
|
||||
$ret->() unless $nonfatal;
|
||||
$canedit=0;
|
||||
}
|
||||
elsif (defined $ret) {
|
||||
error($ret) unless $nonfatal;
|
||||
$canedit=0;
|
||||
}
|
||||
}
|
||||
});
|
||||
return defined $canedit ? $canedit : 1;
|
||||
}
|
||||
|
||||
sub check_content (@) {
|
||||
my %params=@_;
|
||||
|
||||
return 1 if ! exists $hooks{checkcontent}; # optimisation
|
||||
|
||||
if (exists $pagesources{$params{page}}) {
|
||||
my @diff;
|
||||
my %old=map { $_ => 1 }
|
||||
split("\n", readfile(srcfile($pagesources{$params{page}})));
|
||||
foreach my $line (split("\n", $params{content})) {
|
||||
push @diff, $line if ! exists $old{$_};
|
||||
}
|
||||
$params{content}=join("\n", @diff);
|
||||
}
|
||||
|
||||
my $ok;
|
||||
run_hooks(checkcontent => sub {
|
||||
return if defined $ok;
|
||||
my $ret=shift->(%params);
|
||||
if (defined $ret) {
|
||||
if ($ret eq "") {
|
||||
$ok=1;
|
||||
}
|
||||
elsif (ref $ret eq 'CODE') {
|
||||
$ret->() unless $params{nonfatal};
|
||||
$ok=0;
|
||||
}
|
||||
elsif (defined $ret) {
|
||||
error($ret) unless $params{nonfatal};
|
||||
$ok=0;
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
return defined $ok ? $ok : 1;
|
||||
}
|
||||
|
||||
my $wikilock;
|
||||
|
||||
sub lockwiki () {
|
||||
|
|
|
@ -51,73 +51,9 @@ sub refresh () {
|
|||
|
||||
# Back to ikiwiki namespace for the rest, this code is very much
|
||||
# internal to ikiwiki even though it's separated into a plugin,
|
||||
# and other plugins use the functions below.
|
||||
# and other plugins use the function below.
|
||||
package IkiWiki;
|
||||
|
||||
sub check_canedit ($$$;$) {
|
||||
my $page=shift;
|
||||
my $q=shift;
|
||||
my $session=shift;
|
||||
my $nonfatal=shift;
|
||||
|
||||
my $canedit;
|
||||
run_hooks(canedit => sub {
|
||||
return if defined $canedit;
|
||||
my $ret=shift->($page, $q, $session);
|
||||
if (defined $ret) {
|
||||
if ($ret eq "") {
|
||||
$canedit=1;
|
||||
}
|
||||
elsif (ref $ret eq 'CODE') {
|
||||
$ret->() unless $nonfatal;
|
||||
$canedit=0;
|
||||
}
|
||||
elsif (defined $ret) {
|
||||
error($ret) unless $nonfatal;
|
||||
$canedit=0;
|
||||
}
|
||||
}
|
||||
});
|
||||
return defined $canedit ? $canedit : 1;
|
||||
}
|
||||
|
||||
sub check_content (@) {
|
||||
my %params=@_;
|
||||
|
||||
return 1 if ! exists $hooks{checkcontent}; # optimisation
|
||||
|
||||
if (exists $pagesources{$params{page}}) {
|
||||
my @diff;
|
||||
my %old=map { $_ => 1 }
|
||||
split("\n", readfile(srcfile($pagesources{$params{page}})));
|
||||
foreach my $line (split("\n", $params{content})) {
|
||||
push @diff, $line if ! exists $old{$_};
|
||||
}
|
||||
$params{content}=join("\n", @diff);
|
||||
}
|
||||
|
||||
my $ok;
|
||||
run_hooks(checkcontent => sub {
|
||||
return if defined $ok;
|
||||
my $ret=shift->(%params);
|
||||
if (defined $ret) {
|
||||
if ($ret eq "") {
|
||||
$ok=1;
|
||||
}
|
||||
elsif (ref $ret eq 'CODE') {
|
||||
$ret->() unless $params{nonfatal};
|
||||
$ok=0;
|
||||
}
|
||||
elsif (defined $ret) {
|
||||
error($ret) unless $params{nonfatal};
|
||||
$ok=0;
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
return defined $ok ? $ok : 1;
|
||||
}
|
||||
|
||||
sub cgi_editpage ($$) {
|
||||
my $q=shift;
|
||||
my $session=shift;
|
||||
|
|
|
@ -13,6 +13,8 @@ ikiwiki (3.04) UNRELEASED; urgency=low
|
|||
file into. Closes: #514384
|
||||
* shortcut: If default_pageext is set, first look for
|
||||
shortcuts.default_pageext.
|
||||
* Allow comments, rename, remove, and attazhments plugins to be used
|
||||
even if the editpage plugin is disabled.
|
||||
|
||||
-- Joey Hess <joeyh@debian.org> Sat, 31 Jan 2009 19:04:45 -0500
|
||||
|
||||
|
|
Loading…
Reference in New Issue