summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess <joey@gnu.kitenet.net>2009-02-12 16:31:05 -0500
committerJoey Hess <joey@gnu.kitenet.net>2009-02-12 16:33:35 -0500
commit2c51b18aec0cebd1a433cb541fe80f8ade7b3936 (patch)
tree575b6ab25cb3ff52b7c12311f4a56f5fa5f1d2cf
parentc0405e0f20e49c382b656bf9c83c4dd1aa0fc187 (diff)
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.
-rw-r--r--IkiWiki.pm64
-rw-r--r--IkiWiki/Plugin/editpage.pm66
-rw-r--r--debian/changelog2
3 files changed, 67 insertions, 65 deletions
diff --git a/IkiWiki.pm b/IkiWiki.pm
index 66fea4369..ce1ceb351 100644
--- a/IkiWiki.pm
+++ b/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 () {
diff --git a/IkiWiki/Plugin/editpage.pm b/IkiWiki/Plugin/editpage.pm
index c206d96a4..0068a6b11 100644
--- a/IkiWiki/Plugin/editpage.pm
+++ b/IkiWiki/Plugin/editpage.pm
@@ -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;
diff --git a/debian/changelog b/debian/changelog
index 7467508f6..8da3f8849 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -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