aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--IkiWiki.pm3
-rw-r--r--IkiWiki/CGI.pm131
-rw-r--r--IkiWiki/Plugin/anonok.pm16
-rw-r--r--IkiWiki/Plugin/lockedit.pm61
-rw-r--r--IkiWiki/Plugin/opendiscussion.pm22
-rw-r--r--IkiWiki/Plugin/openid.pm2
-rw-r--r--IkiWiki/Plugin/passwordauth.pm2
-rw-r--r--IkiWiki/Plugin/signinedit.pm25
-rw-r--r--IkiWiki/Plugin/skeleton.pm9
-rw-r--r--debian/NEWS8
-rw-r--r--debian/changelog15
-rw-r--r--doc/features.mdwn10
-rw-r--r--doc/ikiwiki.setup4
-rw-r--r--doc/index/discussion.mdwn18
-rw-r--r--doc/plugins.mdwn8
-rw-r--r--doc/plugins/anonok.mdwn5
-rw-r--r--doc/plugins/lockedit.mdwn4
-rw-r--r--doc/plugins/opendiscussion.mdwn5
-rw-r--r--doc/plugins/signinedit.mdwn5
-rw-r--r--doc/plugins/type/auth.mdwn2
-rw-r--r--doc/plugins/write.mdwn14
-rw-r--r--doc/todo/discuss_without_login.mdwn19
-rw-r--r--doc/usage.mdwn6
-rw-r--r--doc/w3mmode/ikiwiki.setup2
-rwxr-xr-xikiwiki.in1
-rw-r--r--po/bg.po41
-rw-r--r--po/cs.po39
-rw-r--r--po/es.po39
-rw-r--r--po/fr.po39
-rw-r--r--po/gu.po39
-rw-r--r--po/ikiwiki.pot39
-rw-r--r--po/pl.po43
-rw-r--r--po/sv.po39
-rw-r--r--po/vi.po39
34 files changed, 462 insertions, 292 deletions
diff --git a/IkiWiki.pm b/IkiWiki.pm
index 292f18f5e..2d692a978 100644
--- a/IkiWiki.pm
+++ b/IkiWiki.pm
@@ -44,7 +44,6 @@ sub defaultconfig () { #{{{
cgiurl => '',
historyurl => '',
diffurl => '',
- anonok => 0,
rss => 0,
atom => 0,
discussion => 1,
@@ -66,7 +65,7 @@ sub defaultconfig () { #{{{
setup => undef,
adminuser => undef,
adminemail => undef,
- plugin => [qw{mdwn inline htmlscrubber passwordauth}],
+ plugin => [qw{mdwn inline htmlscrubber passwordauth signinedit lockedit}],
timeformat => '%c',
locale => undef,
sslcookie => 0,
diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm
index 0c6670546..a8e610e2d 100644
--- a/IkiWiki/CGI.pm
+++ b/IkiWiki/CGI.pm
@@ -33,28 +33,25 @@ sub redirect ($$) { #{{{
}
} #}}}
-sub page_locked ($$;$) { #{{{
+sub check_canedit ($$$;$) { #{{{
my $page=shift;
+ my $q=shift;
my $session=shift;
my $nonfatal=shift;
- my $user=$session->param("name");
- return if defined $user && is_admin($user);
-
- foreach my $admin (@{$config{adminuser}}) {
- my $locked_pages=userinfo_get($admin, "locked_pages");
- if (pagespec_match($page, userinfo_get($admin, "locked_pages"))) {
- return 1 if $nonfatal;
-
- #translators: The first parameter is a page name,
- #translators: second is the user who locked it.
- error(sprintf(gettext("%s is locked by %s and cannot be edited"),
- htmllink("", "", $page, 1),
- userlink($admin)));
+ my $canedit;
+ run_hooks(canedit => sub {
+ return if defined $canedit;
+ my $ret=shift->($page, $q, $session);
+ if (defined $ret && $ret eq "") {
+ $canedit=1;
}
- }
-
- return 0;
+ elsif (defined $ret) {
+ $canedit=0;
+ error($ret) unless $nonfatal;
+ }
+ });
+ return $canedit;
} #}}}
sub decode_form_utf8 ($) { #{{{
@@ -113,6 +110,23 @@ sub cgi_recentchanges ($) { #{{{
print $q->header(-charset => 'utf-8'), $template->output;
} #}}}
+# Check if the user is signed in. If not, redirect to the signin form and
+# save their place to return to later.
+sub needsignin ($$) { #{{{
+ my $q=shift;
+ my $session=shift;
+
+ if (! defined $session->param("name") ||
+ ! userinfo_get($session->param("name"), "regdate")) {
+ if (! defined $session->param("postsignin")) {
+ $session->param(postsignin => $ENV{QUERY_STRING});
+ }
+ cgi_signin($q, $session);
+ cgi_savesession($session);
+ exit;
+ }
+} #}}}
+
sub cgi_signin ($$) { #{{{
my $q=shift;
my $session=shift;
@@ -134,11 +148,11 @@ sub cgi_signin ($$) { #{{{
);
my $buttons=["Login"];
- $form->field(name => "do", type => "hidden");
-
if ($q->param("do") ne "signin" && !$form->submitted) {
$form->text(gettext("You need to log in first."));
}
+ $form->field(name => "do", type => "hidden", value => "signin",
+ force => 1);
run_hooks(formbuilder_setup => sub {
shift->(form => $form, cgi => $q, session => $session);
@@ -166,23 +180,19 @@ sub cgi_postsignin ($$) { #{{{
my $session=shift;
# Continue with whatever was being done before the signin process.
- if (defined $q->param("do") && $q->param("do") ne "signin" &&
- defined $session->param("postsignin")) {
- my $postsignin=CGI->new($session->param("postsignin"));
- $session->clear("postsignin");
- cgi($postsignin, $session);
- cgi_savesession($session);
- exit;
- }
- else {
- redirect($q, $config{url});
- }
+ my $postsignin=CGI->new($session->param("postsignin"));
+ $session->clear("postsignin");
+ cgi($postsignin, $session);
+ cgi_savesession($session);
+ exit;
} #}}}
sub cgi_prefs ($$) { #{{{
my $q=shift;
my $session=shift;
+ needsignin($q, $session);
+
eval q{use CGI::FormBuilder};
error($@) if $@;
my $form = CGI::FormBuilder->new(
@@ -210,13 +220,10 @@ sub cgi_prefs ($$) { #{{{
$form->field(name => "email", size => 50);
$form->field(name => "subscriptions", size => 50,
comment => "(".htmllink("", "", "PageSpec", 1).")");
- $form->field(name => "locked_pages", size => 50,
- comment => "(".htmllink("", "", "PageSpec", 1).")");
$form->field(name => "banned_users", size => 50);
my $user_name=$session->param("name");
if (! is_admin($user_name)) {
- $form->field(name => "locked_pages", type => "hidden");
$form->field(name => "banned_users", type => "hidden");
}
@@ -225,8 +232,6 @@ sub cgi_prefs ($$) { #{{{
value => userinfo_get($user_name, "email"));
$form->field(name => "subscriptions", force => 1,
value => userinfo_get($user_name, "subscriptions"));
- $form->field(name => "locked_pages", force => 1,
- value => userinfo_get($user_name, "locked_pages"));
if (is_admin($user_name)) {
$form->field(name => "banned_users", force => 1,
value => join(" ", get_banned_users()));
@@ -245,7 +250,7 @@ sub cgi_prefs ($$) { #{{{
return;
}
elsif ($form->submitted eq 'Save Preferences' && $form->validate) {
- foreach my $field (qw(email subscriptions locked_pages)) {
+ foreach my $field (qw(email subscriptions)) {
if (defined $form->field($field) && length $form->field($field)) {
userinfo_set($user_name, $field, $form->field($field)) || error("failed to set $field");
}
@@ -422,16 +427,22 @@ sub cgi_editpage ($$) { #{{{
if length $config{userdir};
@page_locs = grep {
- ! exists $pagecase{lc $_} &&
- ! page_locked($_, $session, 1)
+ ! exists $pagecase{lc $_}
} @page_locs;
-
if (! @page_locs) {
# hmm, someone else made the page in the
# meantime?
redirect($q, "$config{url}/".htmlpage($page));
return;
}
+
+ my @editable_locs = grep {
+ check_canedit($_, $q, $session, 1)
+ } @page_locs;
+ if (! @editable_locs) {
+ # let it throw an error this time
+ map { check_canedit($_, $q, $session) } @page_locs;
+ }
my @page_types;
if (exists $hooks{htmlize}) {
@@ -440,13 +451,13 @@ sub cgi_editpage ($$) { #{{{
$form->tmpl_param("page_select", 1);
$form->field(name => "page", type => 'select',
- options => \@page_locs, value => $best_loc);
+ options => \@editable_locs, value => $best_loc);
$form->field(name => "type", type => 'select',
options => \@page_types);
$form->title(sprintf(gettext("creating %s"), pagetitle($page)));
}
elsif ($form->field("do") eq "edit") {
- page_locked($page, $session);
+ check_canedit($page, $q, $session);
if (! defined $form->field('editcontent') ||
! length $form->field('editcontent')) {
my $content="";
@@ -467,7 +478,7 @@ sub cgi_editpage ($$) { #{{{
}
else {
# save page
- page_locked($page, $session);
+ check_canedit($page, $q, $session);
my $content=$form->field('editcontent');
@@ -547,7 +558,7 @@ sub cgi_savesession ($) { #{{{
my $oldmask=umask(077);
$session->flush;
umask($oldmask);
-}
+} #}}}
sub cgi (;$$) { #{{{
my $q=shift;
@@ -606,37 +617,27 @@ sub cgi (;$$) { #{{{
}
}
}
-
- # Everything below this point needs the user to be signed in.
- if (((! $config{anonok} || $do eq 'prefs') &&
- (! defined $session->param("name") ||
- ! userinfo_get($session->param("name"), "regdate")))
- || $do eq 'signin') {
- if ($do ne 'signin' && ! defined $session->param("postsignin")) {
- $session->param(postsignin => $ENV{QUERY_STRING});
- }
- cgi_signin($q, $session);
- cgi_savesession($session);
- return;
- }
- elsif (defined $session->param("postsignin")) {
- cgi_postsignin($q, $session);
- }
-
- if (defined $session->param("name") && userinfo_get($session->param("name"), "banned")) {
+
+ if (defined $session->param("name") &&
+ userinfo_get($session->param("name"), "banned")) {
print $q->header(-status => "403 Forbidden");
$session->delete();
print gettext("You are banned.");
cgi_savesession($session);
- exit;
}
-
- if ($do eq 'create' || $do eq 'edit') {
- cgi_editpage($q, $session);
+ elsif ($do eq 'signin') {
+ cgi_signin($q, $session);
+ cgi_savesession($session);
+ }
+ elsif (defined $session->param("postsignin")) {
+ cgi_postsignin($q, $session);
}
elsif ($do eq 'prefs') {
cgi_prefs($q, $session);
}
+ elsif ($do eq 'create' || $do eq 'edit') {
+ cgi_editpage($q, $session);
+ }
elsif ($do eq 'blog') {
my $page=titlepage(decode_utf8($q->param('title')));
$page=~s/(\/)/"__".ord($1)."__"/eg; # escape slashes too
diff --git a/IkiWiki/Plugin/anonok.pm b/IkiWiki/Plugin/anonok.pm
new file mode 100644
index 000000000..3e2a746e6
--- /dev/null
+++ b/IkiWiki/Plugin/anonok.pm
@@ -0,0 +1,16 @@
+#!/usr/bin/perl
+package IkiWiki::Plugin::anonok;
+
+use warnings;
+use strict;
+use IkiWiki;
+
+sub import { #{{{
+ hook(type => "canedit", id => "anonok", call => \&canedit,);
+} # }}}
+
+sub canedit ($$$) { #{{{
+ return "";
+} #}}}
+
+1
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
diff --git a/IkiWiki/Plugin/opendiscussion.pm b/IkiWiki/Plugin/opendiscussion.pm
new file mode 100644
index 000000000..4b1a432b2
--- /dev/null
+++ b/IkiWiki/Plugin/opendiscussion.pm
@@ -0,0 +1,22 @@
+#!/usr/bin/perl
+package IkiWiki::Plugin::opendiscussion;
+
+use warnings;
+use strict;
+use IkiWiki;
+
+sub import { #{{{
+ hook(type => "canedit", id => "opendiscussion", call => \&canedit);
+} # }}}
+
+sub canedit ($$) { #{{{
+ my $page=shift;
+ my $cgi=shift;
+ my $session=shift;
+
+ my $discussion=gettext("discussion");
+ return "" if $page=~/\/\Q$discussion\E$/;
+ return undef;
+} #}}}
+
+1
diff --git a/IkiWiki/Plugin/openid.pm b/IkiWiki/Plugin/openid.pm
index 4a7255069..5d387fbc6 100644
--- a/IkiWiki/Plugin/openid.pm
+++ b/IkiWiki/Plugin/openid.pm
@@ -59,7 +59,7 @@ sub formbuilder_setup (@) { #{{{
elsif ($form->title eq "preferences") {
if (! defined $form->field(name => "name")) {
$form->field(name => "OpenID", disabled => 1, value =>
- $session->param("name"), size => 30, force => 1);
+ $session->param("name"), size => 50, force => 1);
}
}
}
diff --git a/IkiWiki/Plugin/passwordauth.pm b/IkiWiki/Plugin/passwordauth.pm
index 7ffc12080..3007dd4ff 100644
--- a/IkiWiki/Plugin/passwordauth.pm
+++ b/IkiWiki/Plugin/passwordauth.pm
@@ -21,7 +21,7 @@ sub formbuilder_setup (@) { #{{{
my $cgi=$params{cgi};
if ($form->title eq "signin" || $form->title eq "register") {
- $form->field(name => "name", required => 0, size => 30);
+ $form->field(name => "name", required => 0, size => 50);
$form->field(name => "password", type => "password", required => 0);
if ($form->submitted eq "Register" || $form->submitted eq "Create Account") {
diff --git a/IkiWiki/Plugin/signinedit.pm b/IkiWiki/Plugin/signinedit.pm
new file mode 100644
index 000000000..04532f4dc
--- /dev/null
+++ b/IkiWiki/Plugin/signinedit.pm
@@ -0,0 +1,25 @@
+#!/usr/bin/perl
+package IkiWiki::Plugin::signinedit;
+
+use warnings;
+use strict;
+use IkiWiki;
+
+sub import { #{{{
+ hook(type => "canedit", id => "signinedit", call => \&canedit,
+ last => 1);
+} # }}}
+
+sub canedit ($$$) { #{{{
+ my $page=shift;
+ my $cgi=shift;
+ my $session=shift;
+
+ # Have the user sign in, if they are not already. This is why the
+ # hook runs last, so that any hooks that don't need the user to
+ # signin can override this.
+ IkiWiki::needsignin($cgi, $session);
+ return "";
+} #}}}
+
+1
diff --git a/IkiWiki/Plugin/skeleton.pm b/IkiWiki/Plugin/skeleton.pm
index feb0f7419..06b184b0a 100644
--- a/IkiWiki/Plugin/skeleton.pm
+++ b/IkiWiki/Plugin/skeleton.pm
@@ -21,6 +21,7 @@ sub import { #{{{
hook(type => "change", id => "skeleton", call => \&change);
hook(type => "cgi", id => "skeleton", call => \&cgi);
hook(type => "auth", id => "skeleton", call => \&auth);
+ hook(type => "canedit", id => "skeleton", call => \&canedit);
hook(type => "formbuilder_setup", id => "skeleton", call => \&formbuilder_setup);
hook(type => "formbuilder", id => "skeleton", call => \&formbuilder);
hook(type => "savestate", id => "savestate", call => \&savestate);
@@ -105,6 +106,14 @@ sub auth ($$) { #{{{
debug("skeleton plugin running in auth");
} #}}}
+sub canedit ($$$) { #{{{
+ my $page=shift;
+ my $cgi=shift;
+ my $session=shift;
+
+ debug("skeleton plugin running in canedit");
+} #}}}
+
sub formbuilder_setup (@) { #{{{
my %params=@_;
diff --git a/debian/NEWS b/debian/NEWS
index dd19e26b4..bb3bf2272 100644
--- a/debian/NEWS
+++ b/debian/NEWS
@@ -1,3 +1,11 @@
+ikiwiki (1.42) unstable; urgency=low
+
+ The anonok setting in config files has been removed. To enable
+ httpauth support on your wiki, you should now enable the anonok plugin,
+ instead.
+
+ -- Joey Hess <joeyh@debian.org> Thu, 1 Feb 2007 16:57:59 -0500
+
ikiwiki (1.34) unstable; urgency=low
The httpauth setting in config files has been removed. To enable
diff --git a/debian/changelog b/debian/changelog
index 40eaae238..9ef47936e 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,8 +2,19 @@ ikiwiki (1.42) UNRELEASED; urgency=low
* Fix several more missing translations of Discussion.
* Fix for missing backlinks() in pagestats plugin.
-
- -- Joey Hess <joeyh@debian.org> Wed, 31 Jan 2007 02:12:01 -0500
+ * 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.
+
+ -- Joey Hess <joeyh@debian.org> Thu, 1 Feb 2007 15:36:38 -0500
ikiwiki (1.41) unstable; urgency=low
diff --git a/doc/features.mdwn b/doc/features.mdwn
index b2c810f30..58d6d09cd 100644
--- a/doc/features.mdwn
+++ b/doc/features.mdwn
@@ -129,7 +129,7 @@ and can be enabled by enabling [[CGI]].
### User registration
-Can optionally be configured to allow only registered users to post
+Can optionally be configured to allow only registered users to edit
pages.
User registration can be done using a web form, or ikiwiki can be
@@ -142,10 +142,12 @@ Thanks to subpages, every page can easily and automatically have a
/Discussion subpage. By default, these links are included in the
[[templates]] for each page.
-### Page locking
+### Edit controls
-Wiki admins can [[lock_pages|page_locking]] so that only other admins
-can edit them.
+Wiki admins can [[lock_pages|page_locking]] so that only other admins can
+edit them. Or a wiki can be set up to allow anyone to edit Discussion
+pages, but only registered users to edit other pages. These are just two
+possibilities, since page edit controls can be changed via plugins.
### [[PageHistory]]
diff --git a/doc/ikiwiki.setup b/doc/ikiwiki.setup
index 910b2b527..a25d9f50e 100644
--- a/doc/ikiwiki.setup
+++ b/doc/ikiwiki.setup
@@ -71,8 +71,6 @@ use IkiWiki::Setup::Standard {
#},
],
- # Can anonymous web users edit pages?
- #anonok => 1,
# Generate rss feeds for blogs?
rss => 1,
# Generate atom feeds for blogs?
@@ -98,7 +96,7 @@ use IkiWiki::Setup::Standard {
# To add plugins, list them here.
#add_plugins => [qw{goodstuff openid search wikitext camelcase
- # htmltidy fortune sidebar map rst}],
+ # htmltidy fortune sidebar map rst anonok}],
# If you want to disable any of the default plugins, list them here.
#disable_plugins => [qw{inline htmlscrubber passwordauth}],
diff --git a/doc/index/discussion.mdwn b/doc/index/discussion.mdwn
index e60ab0f50..7f82e87ce 100644
--- a/doc/index/discussion.mdwn
+++ b/doc/index/discussion.mdwn
@@ -162,21 +162,3 @@ Clicking on an old "?" or going to a create link but new Markdown content exists
>>> discussion, or users/discussion, but not index/discussion, since this
>>> page already exists. If all the pages existed, it would do the redirect
>>> thing. --[[Joey]]
-
-----
-
-# Discuss without login? Or feedback forum? Or fine-tuned per-page access control?
-
-Any plugin or option for allowing website visitors to edit the discuss page without logging in (without having ikiwiki accounts)?
-
-Or any plugin to add a feedback form (and maybe threads) to extend a Wiki webpage?
-
-Or is there per-page access control that can be fine-tuned to lock some users or groups for specific pages?
-(The [[pagespec]] does show a way to lock all pages except for Discussion pages, but I want some users to also be able to edit other pages.)
-
-I want a way for website visitors to be able to give feedback on the wiki pages without having to sign up or log in.
-I don't want them to be able to edit the exiting wiki pages except maybe Discussion page.
-
-(For some reason, it seems like I asked this before ...)
-
---JeremyReed \ No newline at end of file
diff --git a/doc/plugins.mdwn b/doc/plugins.mdwn
index 46527ce4f..1006a9e1c 100644
--- a/doc/plugins.mdwn
+++ b/doc/plugins.mdwn
@@ -7,10 +7,10 @@ wiki, or just have [[type/fun]].
There's documentation if you want to [[write]] your own plugins, or you can
install and use plugins [[contributed|contrib]] by others.
-The [[mdwn]], [[inline]], [[htmlscrubber]], and [[passwordauth]] plugins
-are enabled by default. To enable other plugins, use the `--plugin` switch
-described in [[usage]], or the equivalent `add_plugins` line in
-[[ikiwiki.setup]].
+The [[mdwn]], [[inline]], [[htmlscrubber]], [[passwordauth]],
+[[signinedit]], and [[lockedit]] plugins are enabled by default.
+To enable other plugins, use the `--plugin` switch described in
+[[usage]], or the equivalent `add_plugins` line in [[ikiwiki.setup]].
# Plugin directory
diff --git a/doc/plugins/anonok.mdwn b/doc/plugins/anonok.mdwn
new file mode 100644
index 000000000..ae1c87f43
--- /dev/null
+++ b/doc/plugins/anonok.mdwn
@@ -0,0 +1,5 @@
+[[template id=plugin name=anonok included=1 author="[[Joey]]"]]
+[[tag type/auth]]
+
+By default, anonymous users cannot edit the wiki. This plugin allows
+anonymous web users, who have not signed in, to edit any page in the wiki.
diff --git a/doc/plugins/lockedit.mdwn b/doc/plugins/lockedit.mdwn
new file mode 100644
index 000000000..be9ca841c
--- /dev/null
+++ b/doc/plugins/lockedit.mdwn
@@ -0,0 +1,4 @@
+[[template id=plugin name=lockedit core=1 included=1 author="[[Joey]]"]]
+[[tag type/auth]]
+
+This plugin enables [[page_locking]]. It is enabled by default.
diff --git a/doc/plugins/opendiscussion.mdwn b/doc/plugins/opendiscussion.mdwn
new file mode 100644
index 000000000..3257224dc
--- /dev/null
+++ b/doc/plugins/opendiscussion.mdwn
@@ -0,0 +1,5 @@
+[[template id=plugin name=opendiscussion included=1 author="[[Joey]]"]]
+[[tag type/auth]]
+
+This plugin allows editing of Discussion pages by anonymous users who have
+not logged into the wiki.
diff --git a/doc/plugins/signinedit.mdwn b/doc/plugins/signinedit.mdwn
new file mode 100644
index 000000000..5beae9dab
--- /dev/null
+++ b/doc/plugins/signinedit.mdwn
@@ -0,0 +1,5 @@
+[[template id=plugin name=signinedit core=1 included=1 author="[[Joey]]"]]
+[[tag type/auth]]
+
+This plugin, which is enabled by default, requires users be logged in
+before editing pages in the wiki.
diff --git a/doc/plugins/type/auth.mdwn b/doc/plugins/type/auth.mdwn
index a6ae5e4ea..400a5bcca 100644
--- a/doc/plugins/type/auth.mdwn
+++ b/doc/plugins/type/auth.mdwn
@@ -1,2 +1,2 @@
These plugins add different authentication methods for logging in to the
-wiki.
+wiki and control what pages users can edit.
diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn
index 6c475024a..d0f256ca2 100644
--- a/doc/plugins/write.mdwn
+++ b/doc/plugins/write.mdwn
@@ -192,6 +192,20 @@ object's "name" parameter to the authenticated user's name. Note that
if the name is set to the name of a user who is not registered,
a basic registration of the user will be automatically performed.
+### canedit
+
+ hook(type => "canedit", id => "foo", call => \&pagelocked);
+
+This hook can be used to implement arbitrary access methods to control when
+a page can be edited using the web interface (commits from revision control
+bypass it). When a page is edited, each registered canedit hook is called
+in turn, and passed the page name, a CGI object, and a session object.
+
+If edit can proceed, the hook should return "". If the edit is not allowed
+by this hook, the hook should return an error message for the user to see.
+If the hook has no opinion about whether the edit can proceed, return
+`undef`, and the next plugin will be asked to decide.
+
### formbuilder
hook(type => "formbuilder_setup", id => "foo", call => \&formbuilder_setup);
diff --git a/doc/todo/discuss_without_login.mdwn b/doc/todo/discuss_without_login.mdwn
new file mode 100644
index 000000000..74f3cde70
--- /dev/null
+++ b/doc/todo/discuss_without_login.mdwn
@@ -0,0 +1,19 @@
+# Discuss without login? Or feedback forum? Or fine-tuned per-page access control?
+
+Any plugin or option for allowing website visitors to edit the discuss page without logging in (without having ikiwiki accounts)?
+
+Or any plugin to add a feedback form (and maybe threads) to extend a Wiki webpage?
+
+Or is there per-page access control that can be fine-tuned to lock some users or groups for specific pages?
+(The [[pagespec]] does show a way to lock all pages except for Discussion pages, but I want some users to also be able to edit other pages.)
+
+I want a way for website visitors to be able to give feedback on the wiki pages without having to sign up or log in.
+I don't want them to be able to edit the exiting wiki pages except maybe Discussion page.
+
+(For some reason, it seems like I asked this before ...)
+
+--JeremyReed
+
+[[todo/Done]]; there's now a plugin interface for this and several nice
+plugins including one allowing [[plugins/opendiscussion]]. More special-purpose
+(and less wiki-like plugins) can be added based on this. --[[Joey]]
diff --git a/doc/usage.mdwn b/doc/usage.mdwn
index 9980cca03..afd699194 100644
--- a/doc/usage.mdwn
+++ b/doc/usage.mdwn
@@ -154,12 +154,6 @@ configuration options of their own.
This defaults to trunk; change it if your wiki is at some other location
inside the repository.
-* --anonok, --noanonok
-
- If anonok is set, it will allow anonymous web users, who have not signed in, to make changes to the wiki.
-
- By default, anonymous users cannot edit the wiki.
-
* --rss, --norss
If rss is set, ikiwiki will generate RSS feeds for pages that inline
diff --git a/doc/w3mmode/ikiwiki.setup b/doc/w3mmode/ikiwiki.setup
index 216e066c8..d71221a8f 100644
--- a/doc/w3mmode/ikiwiki.setup
+++ b/doc/w3mmode/ikiwiki.setup
@@ -26,7 +26,7 @@ use IkiWiki::Setup::Standard {
},
],
- anonok => 1,
+ add_plugins => [qw{anonok}],
rss => 1,
atom => 1,
discussion => 1,
diff --git a/ikiwiki.in b/ikiwiki.in
index 5b1f57d16..24b02bc41 100755
--- a/ikiwiki.in
+++ b/ikiwiki.in
@@ -31,7 +31,6 @@ sub getconfig () { #{{{
"wrappermode=i" => \$config{wrappermode},
"rcs=s" => \$config{rcs},
"no-rcs" => sub { $config{rcs}="" },
- "anonok!" => \$config{anonok},
"cgi!" => \$config{cgi},
"discussion!" => \$config{discussion},
"w3mmode!" => \$config{w3mmode},
diff --git a/po/bg.po b/po/bg.po
index 080b1e899..de0586307 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ikiwiki-bg\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-01-31 02:17-0500\n"
+"POT-Creation-Date: 2007-02-01 21:27-0500\n"
"PO-Revision-Date: 2007-01-12 01:19+0200\n"
"Last-Translator: Damyan Ivanov <dam@modsodtsys.com>\n"
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
@@ -16,43 +16,36 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
-#. translators: The first parameter is a page name,
-#. translators: second is the user who locked it.
-#: ../IkiWiki/CGI.pm:51
-#, perl-format
-msgid "%s is locked by %s and cannot be edited"
-msgstr ""
-"Страницата „%s” е заключена от потребителя „%s” и не може да бъде променяна"
-
-#: ../IkiWiki/CGI.pm:140
+#: ../IkiWiki/CGI.pm:152
msgid "You need to log in first."
msgstr "Първо трябва да влезете."
-#: ../IkiWiki/CGI.pm:257
+#: ../IkiWiki/CGI.pm:262
msgid "Preferences saved."
msgstr "Предпочитанията са запазени."
-#: ../IkiWiki/CGI.pm:407 ../IkiWiki/Plugin/brokenlinks.pm:24
-#: ../IkiWiki/Plugin/inline.pm:160 ../IkiWiki/Plugin/orphans.pm:28
-#: ../IkiWiki/Render.pm:97 ../IkiWiki/Render.pm:165
+#: ../IkiWiki/CGI.pm:412 ../IkiWiki/Plugin/brokenlinks.pm:24
+#: ../IkiWiki/Plugin/inline.pm:160 ../IkiWiki/Plugin/opendiscussion.pm:17
+#: ../IkiWiki/Plugin/orphans.pm:28 ../IkiWiki/Render.pm:97
+#: ../IkiWiki/Render.pm:165
msgid "discussion"
msgstr "дискусия"
-#: ../IkiWiki/CGI.pm:446
+#: ../IkiWiki/CGI.pm:457
#, perl-format
msgid "creating %s"
msgstr "създаване на %s"
-#: ../IkiWiki/CGI.pm:463 ../IkiWiki/CGI.pm:506
+#: ../IkiWiki/CGI.pm:474 ../IkiWiki/CGI.pm:517
#, perl-format
msgid "editing %s"
msgstr "промяна на %s"
-#: ../IkiWiki/CGI.pm:629
+#: ../IkiWiki/CGI.pm:625
msgid "You are banned."
msgstr "Достъпът ви е забранен."
-#: ../IkiWiki/CGI.pm:656
+#: ../IkiWiki/CGI.pm:657
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
@@ -142,6 +135,12 @@ msgstr "модулът „RPC::XML::Client” не е намерен; източ
msgid "linkmap failed to run dot"
msgstr "приставката „linkmap”: грешка при изпълнение на „dot”"
+#: ../IkiWiki/Plugin/lockedit.pm:24
+#, perl-format
+msgid "%s is locked by %s and cannot be edited"
+msgstr ""
+"Страницата „%s” е заключена от потребителя „%s” и не може да бъде променяна"
+
#: ../IkiWiki/Plugin/mdwn.pm:37
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
@@ -372,13 +371,13 @@ msgstr "успешно генериране на %s"
msgid "usage: ikiwiki [options] source dest"
msgstr "формат: ikiwiki [опции] източник местоназначение"
-#: ../IkiWiki.pm:103
+#: ../IkiWiki.pm:102
msgid "Must specify url to wiki with --url when using --cgi"
msgstr ""
"При използване на пареметъра „--cgi” е необходимо да се укаже и "
"местоположението на уикито чрез параметъра „--url”"
-#: ../IkiWiki.pm:148 ../IkiWiki.pm:149
+#: ../IkiWiki.pm:147 ../IkiWiki.pm:148
msgid "Error"
msgstr "Грешка"
@@ -386,7 +385,7 @@ msgstr "Грешка"
#. translators: preprocessor directive name,
#. translators: the second a page name, the
#. translators: third a number.
-#: ../IkiWiki.pm:528
+#: ../IkiWiki.pm:527
#, perl-format
msgid "%s preprocessing loop detected on %s at depth %i"
msgstr "открита е циклична завидимост при %s на „%s” на дълбочина %i"
diff --git a/po/cs.po b/po/cs.po
index 4c731c54e..5cc90a512 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ikiwiki\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-01-31 02:17-0500\n"
+"POT-Creation-Date: 2007-02-01 21:27-0500\n"
"PO-Revision-Date: 2007-01-07 11:59+0100\n"
"Last-Translator: Miroslav Kure <kurem@debian.cz>\n"
"Language-Team: Czech <debian-l10n-czech@lists.debian.org>\n"
@@ -15,42 +15,36 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#. translators: The first parameter is a page name,
-#. translators: second is the user who locked it.
-#: ../IkiWiki/CGI.pm:51
-#, perl-format
-msgid "%s is locked by %s and cannot be edited"
-msgstr "Stránka %s je zamknutá uživatelem %s a nelze ji měnit"
-
-#: ../IkiWiki/CGI.pm:140
+#: ../IkiWiki/CGI.pm:152
msgid "You need to log in first."
msgstr "Nejprve se musíte přihlásit."
-#: ../IkiWiki/CGI.pm:257
+#: ../IkiWiki/CGI.pm:262
msgid "Preferences saved."
msgstr "Nastavení uloženo."
-#: ../IkiWiki/CGI.pm:407 ../IkiWiki/Plugin/brokenlinks.pm:24
-#: ../IkiWiki/Plugin/inline.pm:160 ../IkiWiki/Plugin/orphans.pm:28
-#: ../IkiWiki/Render.pm:97 ../IkiWiki/Render.pm:165
+#: ../IkiWiki/CGI.pm:412 ../IkiWiki/Plugin/brokenlinks.pm:24
+#: ../IkiWiki/Plugin/inline.pm:160 ../IkiWiki/Plugin/opendiscussion.pm:17
+#: ../IkiWiki/Plugin/orphans.pm:28 ../IkiWiki/Render.pm:97
+#: ../IkiWiki/Render.pm:165
msgid "discussion"
msgstr "diskuse"
-#: ../IkiWiki/CGI.pm:446
+#: ../IkiWiki/CGI.pm:457
#, perl-format
msgid "creating %s"
msgstr "vytvářím %s"
-#: ../IkiWiki/CGI.pm:463 ../IkiWiki/CGI.pm:506
+#: ../IkiWiki/CGI.pm:474 ../IkiWiki/CGI.pm:517
#, perl-format
msgid "editing %s"
msgstr "upravuji %s"
-#: ../IkiWiki/CGI.pm:629
+#: ../IkiWiki/CGI.pm:625
msgid "You are banned."
msgstr "Jste vyhoštěni."
-#: ../IkiWiki/CGI.pm:656
+#: ../IkiWiki/CGI.pm:657
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
@@ -138,6 +132,11 @@ msgstr "RPC::XML::Client nebyl nalezen, nepinkám"
msgid "linkmap failed to run dot"
msgstr "linkmapu se nepodařilo spustit dot"
+#: ../IkiWiki/Plugin/lockedit.pm:24
+#, perl-format
+msgid "%s is locked by %s and cannot be edited"
+msgstr "Stránka %s je zamknutá uživatelem %s a nelze ji měnit"
+
#: ../IkiWiki/Plugin/mdwn.pm:37
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
@@ -366,11 +365,11 @@ msgstr "%s byl úspěšně vytvořen"
msgid "usage: ikiwiki [options] source dest"
msgstr "použití: ikiwiki [volby] zdroj cíl"
-#: ../IkiWiki.pm:103
+#: ../IkiWiki.pm:102
msgid "Must specify url to wiki with --url when using --cgi"
msgstr "Při použití --cgi musíte pomocí --url zadat url k wiki"
-#: ../IkiWiki.pm:148 ../IkiWiki.pm:149
+#: ../IkiWiki.pm:147 ../IkiWiki.pm:148
msgid "Error"
msgstr "Chyba"
@@ -378,7 +377,7 @@ msgstr "Chyba"
#. translators: preprocessor directive name,
#. translators: the second a page name, the
#. translators: third a number.
-#: ../IkiWiki.pm:528
+#: ../IkiWiki.pm:527
#, perl-format
msgid "%s preprocessing loop detected on %s at depth %i"
msgstr "Byla rozpoznána smyčka direktivy %s na %s v hloubce %i"
diff --git a/po/es.po b/po/es.po
index d2ba0745a..75387d161 100644
--- a/po/es.po
+++ b/po/es.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ikiwiki\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-01-31 02:17-0500\n"
+"POT-Creation-Date: 2007-02-01 21:27-0500\n"
"PO-Revision-Date: 2007-01-03 09:37+0100\n"
"Last-Translator: Víctor Moral <victor@taquiones.net>\n"
"Language-Team: spanish <es@li.org>\n"
@@ -16,42 +16,36 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
-#. translators: The first parameter is a page name,
-#. translators: second is the user who locked it.
-#: ../IkiWiki/CGI.pm:51
-#, perl-format
-msgid "%s is locked by %s and cannot be edited"
-msgstr "La página %s está bloqueada por %s y no puede modificarse"
-
-#: ../IkiWiki/CGI.pm:140
+#: ../IkiWiki/CGI.pm:152
msgid "You need to log in first."
msgstr "Antes es necesario identificarse"
-#: ../IkiWiki/CGI.pm:257
+#: ../IkiWiki/CGI.pm:262
msgid "Preferences saved."
msgstr "Las preferencias se han guardado."
-#: ../IkiWiki/CGI.pm:407 ../IkiWiki/Plugin/brokenlinks.pm:24
-#: ../IkiWiki/Plugin/inline.pm:160 ../IkiWiki/Plugin/orphans.pm:28
-#: ../IkiWiki/Render.pm:97 ../IkiWiki/Render.pm:165
+#: ../IkiWiki/CGI.pm:412 ../IkiWiki/Plugin/brokenlinks.pm:24
+#: ../IkiWiki/Plugin/inline.pm:160 ../IkiWiki/Plugin/opendiscussion.pm:17
+#: ../IkiWiki/Plugin/orphans.pm:28 ../IkiWiki/Render.pm:97
+#: ../IkiWiki/Render.pm:165
msgid "discussion"
msgstr "comentarios"
-#: ../IkiWiki/CGI.pm:446
+#: ../IkiWiki/CGI.pm:457
#, perl-format
msgid "creating %s"
msgstr "creando página %s"
-#: ../IkiWiki/CGI.pm:463 ../IkiWiki/CGI.pm:506
+#: ../IkiWiki/CGI.pm:474 ../IkiWiki/CGI.pm:517
#, perl-format
msgid "editing %s"
msgstr "modificando página %s"
-#: ../IkiWiki/CGI.pm:629
+#: ../IkiWiki/CGI.pm:625
msgid "You are banned."
msgstr "Ha sido expulsado."
-#: ../IkiWiki/CGI.pm:656
+#: ../IkiWiki/CGI.pm:657
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
@@ -142,6 +136,11 @@ msgstr "No he encontrado el componente RPC::XML::Client, no envío señal alguna
msgid "linkmap failed to run dot"
msgstr "El complemento linkmap no ha podido ejecutar el programa dot"
+#: ../IkiWiki/Plugin/lockedit.pm:24
+#, perl-format
+msgid "%s is locked by %s and cannot be edited"
+msgstr "La página %s está bloqueada por %s y no puede modificarse"
+
#: ../IkiWiki/Plugin/mdwn.pm:37
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
@@ -375,13 +374,13 @@ msgstr "creado con éxito el programa envoltorio %s"
msgid "usage: ikiwiki [options] source dest"
msgstr "uso: ikiwiki [opciones] origen destino"
-#: ../IkiWiki.pm:103
+#: ../IkiWiki.pm:102
msgid "Must specify url to wiki with --url when using --cgi"
msgstr ""
"Es obligatorio especicar un url al wiki con el parámetro --url si se utiliza "
"el parámetro --cgi"
-#: ../IkiWiki.pm:148 ../IkiWiki.pm:149
+#: ../IkiWiki.pm:147 ../IkiWiki.pm:148
msgid "Error"
msgstr "Error"
@@ -389,7 +388,7 @@ msgstr "Error"
#. translators: preprocessor directive name,
#. translators: the second a page name, the
#. translators: third a number.
-#: ../IkiWiki.pm:528
+#: ../IkiWiki.pm:527
#, perl-format
msgid "%s preprocessing loop detected on %s at depth %i"
msgstr ""
diff --git a/po/fr.po b/po/fr.po
index 9db7b5cd0..9a7ebdc8f 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ikiwiki\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-01-31 02:17-0500\n"
+"POT-Creation-Date: 2007-02-01 21:27-0500\n"
"PO-Revision-Date: 2007-01-22 22:12+0100\n"
"Last-Translator: Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>\n"
"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
@@ -17,42 +17,36 @@ msgstr ""
"X-Poedit-Language: French\n"
"X-Poedit-Country: FRANCE\n"
-#. translators: The first parameter is a page name,
-#. translators: second is the user who locked it.
-#: ../IkiWiki/CGI.pm:51
-#, perl-format
-msgid "%s is locked by %s and cannot be edited"
-msgstr "%s est verrouillé par %s et ne peut être édité"
-
-#: ../IkiWiki/CGI.pm:140
+#: ../IkiWiki/CGI.pm:152
msgid "You need to log in first."
msgstr "Vous devez d'abord vous identifier."
-#: ../IkiWiki/CGI.pm:257
+#: ../IkiWiki/CGI.pm:262
msgid "Preferences saved."
msgstr "Les préférences ont été enregistrées."
-#: ../IkiWiki/CGI.pm:407 ../IkiWiki/Plugin/brokenlinks.pm:24
-#: ../IkiWiki/Plugin/inline.pm:160 ../IkiWiki/Plugin/orphans.pm:28
-#: ../IkiWiki/Render.pm:97 ../IkiWiki/Render.pm:165
+#: ../IkiWiki/CGI.pm:412 ../IkiWiki/Plugin/brokenlinks.pm:24
+#: ../IkiWiki/Plugin/inline.pm:160 ../IkiWiki/Plugin/opendiscussion.pm:17
+#: ../IkiWiki/Plugin/orphans.pm:28 ../IkiWiki/Render.pm:97
+#: ../IkiWiki/Render.pm:165
msgid "discussion"
msgstr "Discussion"
-#: ../IkiWiki/CGI.pm:446
+#: ../IkiWiki/CGI.pm:457
#, perl-format
msgid "creating %s"
msgstr "Création de %s"
-#: ../IkiWiki/CGI.pm:463 ../IkiWiki/CGI.pm:506
+#: ../IkiWiki/CGI.pm:474 ../IkiWiki/CGI.pm:517
#, perl-format
msgid "editing %s"
msgstr "Édition de %s"
-#: ../IkiWiki/CGI.pm:629
+#: ../IkiWiki/CGI.pm:625
msgid "You are banned."
msgstr "Vous avez été banni."
-#: ../IkiWiki/CGI.pm:656
+#: ../IkiWiki/CGI.pm:657
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
"Échec de l'identification, vous devriez peut-être autoriser les cookies."
@@ -143,6 +137,11 @@ msgstr "RPC::XML::Client introuvable, pas de réponse au ping"
msgid "linkmap failed to run dot"
msgstr "Échec de lancement de dot par linkmap"
+#: ../IkiWiki/Plugin/lockedit.pm:24
+#, perl-format
+msgid "%s is locked by %s and cannot be edited"
+msgstr "%s est verrouillé par %s et ne peut être édité"
+
#: ../IkiWiki/Plugin/mdwn.pm:37
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
@@ -375,13 +374,13 @@ msgstr "%s a été créé avec succès"
msgid "usage: ikiwiki [options] source dest"
msgstr "Syntaxe : ikiwiki [options] source destination"
-#: ../IkiWiki.pm:103
+#: ../IkiWiki.pm:102
msgid "Must specify url to wiki with --url when using --cgi"
msgstr ""
"Vous devez indiquer une url vers le wiki par --url lors de l'utilisation de "
"--cgi"
-#: ../IkiWiki.pm:148 ../IkiWiki.pm:149
+#: ../IkiWiki.pm:147 ../IkiWiki.pm:148
msgid "Error"
msgstr "Erreur"
@@ -389,7 +388,7 @@ msgstr "Erreur"
#. translators: preprocessor directive name,
#. translators: the second a page name, the
#. translators: third a number.
-#: ../IkiWiki.pm:528
+#: ../IkiWiki.pm:527
#, perl-format
msgid "%s preprocessing loop detected on %s at depth %i"
msgstr ""
diff --git a/po/gu.po b/po/gu.po
index bcf98b982..59ae104b9 100644
--- a/po/gu.po
+++ b/po/gu.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ikiwiki-gu\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-01-31 02:17-0500\n"
+"POT-Creation-Date: 2007-02-01 21:27-0500\n"
"PO-Revision-Date: 2007-01-11 16:05+0530\n"
"Last-Translator: Kartik Mistry <kartik.mistry@gmail.com>\n"
"Language-Team: Gujarati <team@utkarsh.org>\n"
@@ -15,42 +15,36 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#. translators: The first parameter is a page name,
-#. translators: second is the user who locked it.
-#: ../IkiWiki/CGI.pm:51
-#, perl-format
-msgid "%s is locked by %s and cannot be edited"
-msgstr "%s એ %s દ્વારા તાળું મરાયેલ છે અને તેમાં સુધારો કરી શકાશે નહી"
-
-#: ../IkiWiki/CGI.pm:140
+#: ../IkiWiki/CGI.pm:152
msgid "You need to log in first."
msgstr "તમારે પ્રથમ લોગ ઇન થવું પડશે."
-#: ../IkiWiki/CGI.pm:257
+#: ../IkiWiki/CGI.pm:262
msgid "Preferences saved."
msgstr "પ્રાથમિકતાઓ સંગ્રહાઇ."
-#: ../IkiWiki/CGI.pm:407 ../IkiWiki/Plugin/brokenlinks.pm:24
-#: ../IkiWiki/Plugin/inline.pm:160 ../IkiWiki/Plugin/orphans.pm:28
-#: ../IkiWiki/Render.pm:97 ../IkiWiki/Render.pm:165
+#: ../IkiWiki/CGI.pm:412 ../IkiWiki/Plugin/brokenlinks.pm:24
+#: ../IkiWiki/Plugin/inline.pm:160 ../IkiWiki/Plugin/opendiscussion.pm:17
+#: ../IkiWiki/Plugin/orphans.pm:28 ../IkiWiki/Render.pm:97
+#: ../IkiWiki/Render.pm:165
msgid "discussion"
msgstr "ચર્ચા"
-#: ../IkiWiki/CGI.pm:446
+#: ../IkiWiki/CGI.pm:457
#, perl-format
msgid "creating %s"
msgstr "%s બનાવે છે"
-#: ../IkiWiki/CGI.pm:463 ../IkiWiki/CGI.pm:506
+#: ../IkiWiki/CGI.pm:474 ../IkiWiki/CGI.pm:517
#, perl-format
msgid "editing %s"
msgstr "%s સુધારે છે"
-#: ../IkiWiki/CGI.pm:629
+#: ../IkiWiki/CGI.pm:625
msgid "You are banned."
msgstr "તમારા પર પ્રતિબંધ છે."
-#: ../IkiWiki/CGI.pm:656
+#: ../IkiWiki/CGI.pm:657
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
@@ -138,6 +132,11 @@ msgstr "RPC::XML::Client મળ્યું નહી, પિંગ કરવા
msgid "linkmap failed to run dot"
msgstr "લીંકમેપ ડોટ ચલાવવામાં નિષ્ફળ"
+#: ../IkiWiki/Plugin/lockedit.pm:24
+#, perl-format
+msgid "%s is locked by %s and cannot be edited"
+msgstr "%s એ %s દ્વારા તાળું મરાયેલ છે અને તેમાં સુધારો કરી શકાશે નહી"
+
#: ../IkiWiki/Plugin/mdwn.pm:37
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
@@ -364,11 +363,11 @@ msgstr "સફળતાપૂર્વક પેદા કરેલ છે %s"
msgid "usage: ikiwiki [options] source dest"
msgstr "ઉપયોગ: ikiwiki [વિકલ્પો] source dest"
-#: ../IkiWiki.pm:103
+#: ../IkiWiki.pm:102
msgid "Must specify url to wiki with --url when using --cgi"
msgstr "જ્યારે --cgi ઉપયોગ કરતાં હોય ત્યારે વીકીનું યુઆરએલ સ્પષ્ટ કરવું જ પડશે"
-#: ../IkiWiki.pm:148 ../IkiWiki.pm:149
+#: ../IkiWiki.pm:147 ../IkiWiki.pm:148
msgid "Error"
msgstr "ક્ષતિ"
@@ -376,7 +375,7 @@ msgstr "ક્ષતિ"
#. translators: preprocessor directive name,
#. translators: the second a page name, the
#. translators: third a number.
-#: ../IkiWiki.pm:528
+#: ../IkiWiki.pm:527
#, perl-format
msgid "%s preprocessing loop detected on %s at depth %i"
msgstr "%s પર શોધાયેલ લુપ %s પર ચલાવે છે %i ઉંડાણ પર"
diff --git a/po/ikiwiki.pot b/po/ikiwiki.pot
index 43fe172ba..a77f9d883 100644
--- a/po/ikiwiki.pot
+++ b/po/ikiwiki.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-01-31 02:17-0500\n"
+"POT-Creation-Date: 2007-02-01 21:30-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,42 +16,36 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#. translators: The first parameter is a page name,
-#. translators: second is the user who locked it.
-#: ../IkiWiki/CGI.pm:51
-#, perl-format
-msgid "%s is locked by %s and cannot be edited"
-msgstr ""
-
-#: ../IkiWiki/CGI.pm:140
+#: ../IkiWiki/CGI.pm:152
msgid "You need to log in first."
msgstr ""
-#: ../IkiWiki/CGI.pm:257
+#: ../IkiWiki/CGI.pm:262
msgid "Preferences saved."
msgstr ""
-#: ../IkiWiki/CGI.pm:407 ../IkiWiki/Plugin/brokenlinks.pm:24
-#: ../IkiWiki/Plugin/inline.pm:160 ../IkiWiki/Plugin/orphans.pm:28
-#: ../IkiWiki/Render.pm:97 ../IkiWiki/Render.pm:165
+#: ../IkiWiki/CGI.pm:412 ../IkiWiki/Plugin/brokenlinks.pm:24
+#: ../IkiWiki/Plugin/inline.pm:160 ../IkiWiki/Plugin/opendiscussion.pm:17
+#: ../IkiWiki/Plugin/orphans.pm:28 ../IkiWiki/Render.pm:97
+#: ../IkiWiki/Render.pm:165
msgid "discussion"
msgstr ""
-#: ../IkiWiki/CGI.pm:446
+#: ../IkiWiki/CGI.pm:457
#, perl-format
msgid "creating %s"
msgstr ""
-#: ../IkiWiki/CGI.pm:463 ../IkiWiki/CGI.pm:506
+#: ../IkiWiki/CGI.pm:474 ../IkiWiki/CGI.pm:517
#, perl-format
msgid "editing %s"
msgstr ""
-#: ../IkiWiki/CGI.pm:629
+#: ../IkiWiki/CGI.pm:625
msgid "You are banned."
msgstr ""
-#: ../IkiWiki/CGI.pm:656
+#: ../IkiWiki/CGI.pm:657
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
@@ -139,6 +133,11 @@ msgstr ""
msgid "linkmap failed to run dot"
msgstr ""
+#: ../IkiWiki/Plugin/lockedit.pm:24
+#, perl-format
+msgid "%s is locked by %s and cannot be edited"
+msgstr ""
+
#: ../IkiWiki/Plugin/mdwn.pm:37
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
@@ -365,11 +364,11 @@ msgstr ""
msgid "usage: ikiwiki [options] source dest"
msgstr ""
-#: ../IkiWiki.pm:103
+#: ../IkiWiki.pm:102
msgid "Must specify url to wiki with --url when using --cgi"
msgstr ""
-#: ../IkiWiki.pm:148 ../IkiWiki.pm:149
+#: ../IkiWiki.pm:147 ../IkiWiki.pm:148
msgid "Error"
msgstr ""
@@ -377,7 +376,7 @@ msgstr ""
#. translators: preprocessor directive name,
#. translators: the second a page name, the
#. translators: third a number.
-#: ../IkiWiki.pm:528
+#: ../IkiWiki.pm:527
#, perl-format
msgid "%s preprocessing loop detected on %s at depth %i"
msgstr ""
diff --git a/po/pl.po b/po/pl.po
index a1e445949..a93c76167 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ikiwiki 1.37\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-01-31 02:17-0500\n"
+"POT-Creation-Date: 2007-02-01 21:27-0500\n"
"PO-Revision-Date: 2007-01-05 16:33+100\n"
"Last-Translator: Paweł Tęcza <ptecza@net.icm.edu.pl>\n"
"Language-Team: Debian L10n Polish <debian-l10n-polish@lists.debian.org>\n"
@@ -16,44 +16,36 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#. translators: The first parameter is a page name,
-#. translators: second is the user who locked it.
-#: ../IkiWiki/CGI.pm:51
-#, perl-format
-msgid "%s is locked by %s and cannot be edited"
-msgstr ""
-"strona %s jest tymczasowo zablokowana przez użytkownika %s i nie może być "
-"teraz edytowana"
-
-#: ../IkiWiki/CGI.pm:140
+#: ../IkiWiki/CGI.pm:152
msgid "You need to log in first."
msgstr "Konieczne jest zalogowanie się."
-#: ../IkiWiki/CGI.pm:257
+#: ../IkiWiki/CGI.pm:262
msgid "Preferences saved."
msgstr "Ustawienia zostały zapisane."
-#: ../IkiWiki/CGI.pm:407 ../IkiWiki/Plugin/brokenlinks.pm:24
-#: ../IkiWiki/Plugin/inline.pm:160 ../IkiWiki/Plugin/orphans.pm:28
-#: ../IkiWiki/Render.pm:97 ../IkiWiki/Render.pm:165
+#: ../IkiWiki/CGI.pm:412 ../IkiWiki/Plugin/brokenlinks.pm:24
+#: ../IkiWiki/Plugin/inline.pm:160 ../IkiWiki/Plugin/opendiscussion.pm:17
+#: ../IkiWiki/Plugin/orphans.pm:28 ../IkiWiki/Render.pm:97
+#: ../IkiWiki/Render.pm:165
msgid "discussion"
msgstr "dyskusja"
-#: ../IkiWiki/CGI.pm:446
+#: ../IkiWiki/CGI.pm:457
#, perl-format
msgid "creating %s"
msgstr "tworzenie strony %s"
-#: ../IkiWiki/CGI.pm:463 ../IkiWiki/CGI.pm:506
+#: ../IkiWiki/CGI.pm:474 ../IkiWiki/CGI.pm:517
#, perl-format
msgid "editing %s"
msgstr "edycja strony %s"
-#: ../IkiWiki/CGI.pm:629
+#: ../IkiWiki/CGI.pm:625
msgid "You are banned."
msgstr "Dostęp został zabroniony przez administratora."
-#: ../IkiWiki/CGI.pm:656
+#: ../IkiWiki/CGI.pm:657
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
@@ -145,6 +137,13 @@ msgstr "Niezainstalowany moduł RPC::XML::Client, brak możliwości pingowania"
msgid "linkmap failed to run dot"
msgstr "awaria wtyczki linkmap"
+#: ../IkiWiki/Plugin/lockedit.pm:24
+#, perl-format
+msgid "%s is locked by %s and cannot be edited"
+msgstr ""
+"strona %s jest tymczasowo zablokowana przez użytkownika %s i nie może być "
+"teraz edytowana"
+
#: ../IkiWiki/Plugin/mdwn.pm:37
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
@@ -376,13 +375,13 @@ msgstr "strona pomyślnie utworzona %s"
msgid "usage: ikiwiki [options] source dest"
msgstr "użycie: ikiwiki [parametry] źródło cel"
-#: ../IkiWiki.pm:103
+#: ../IkiWiki.pm:102
msgid "Must specify url to wiki with --url when using --cgi"
msgstr ""
"Użycie parametru --cgi wymaga podania adresu URL do wiki za pomocą parametru "
"--url"
-#: ../IkiWiki.pm:148 ../IkiWiki.pm:149
+#: ../IkiWiki.pm:147 ../IkiWiki.pm:148
msgid "Error"
msgstr "Błąd"
@@ -390,7 +389,7 @@ msgstr "Błąd"
#. translators: preprocessor directive name,
#. translators: the second a page name, the
#. translators: third a number.
-#: ../IkiWiki.pm:528
+#: ../IkiWiki.pm:527
#, perl-format
msgid "%s preprocessing loop detected on %s at depth %i"
msgstr "polecenie preprocesora %s wykryte w %s na głębokości %i"
diff --git a/po/sv.po b/po/sv.po
index ddb95c0f5..df9c1055b 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ikiwiki\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-01-31 02:17-0500\n"
+"POT-Creation-Date: 2007-02-01 21:27-0500\n"
"PO-Revision-Date: 2007-01-10 23:47+0100\n"
"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -15,42 +15,36 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#. translators: The first parameter is a page name,
-#. translators: second is the user who locked it.
-#: ../IkiWiki/CGI.pm:51
-#, perl-format
-msgid "%s is locked by %s and cannot be edited"
-msgstr "%s är låst av %s och kan inte redigeras"
-
-#: ../IkiWiki/CGI.pm:140
+#: ../IkiWiki/CGI.pm:152
msgid "You need to log in first."
msgstr "Du måste logga in först."
-#: ../IkiWiki/CGI.pm:257
+#: ../IkiWiki/CGI.pm:262
msgid "Preferences saved."
msgstr "Inställningar sparades."
-#: ../IkiWiki/CGI.pm:407 ../IkiWiki/Plugin/brokenlinks.pm:24
-#: ../IkiWiki/Plugin/inline.pm:160 ../IkiWiki/Plugin/orphans.pm:28
-#: ../IkiWiki/Render.pm:97 ../IkiWiki/Render.pm:165
+#: ../IkiWiki/CGI.pm:412 ../IkiWiki/Plugin/brokenlinks.pm:24
+#: ../IkiWiki/Plugin/inline.pm:160 ../IkiWiki/Plugin/opendiscussion.pm:17
+#: ../IkiWiki/Plugin/orphans.pm:28 ../IkiWiki/Render.pm:97
+#: ../IkiWiki/Render.pm:165
msgid "discussion"
msgstr "diskussion"
-#: ../IkiWiki/CGI.pm:446
+#: ../IkiWiki/CGI.pm:457
#, perl-format
msgid "creating %s"
msgstr "skapar %s"
-#: ../IkiWiki/CGI.pm:463 ../IkiWiki/CGI.pm:506
+#: ../IkiWiki/CGI.pm:474 ../IkiWiki/CGI.pm:517
#, perl-format
msgid "editing %s"
msgstr "redigerar %s"
-#: ../IkiWiki/CGI.pm:629
+#: ../IkiWiki/CGI.pm:625
msgid "You are banned."
msgstr "Du är bannlyst."
-#: ../IkiWiki/CGI.pm:656
+#: ../IkiWiki/CGI.pm:657
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
@@ -138,6 +132,11 @@ msgstr "RPC::XML::Client hittades inte, pingar inte"
msgid "linkmap failed to run dot"
msgstr "linkmap misslyckades att köra dot"
+#: ../IkiWiki/Plugin/lockedit.pm:24
+#, perl-format
+msgid "%s is locked by %s and cannot be edited"
+msgstr "%s är låst av %s och kan inte redigeras"
+
#: ../IkiWiki/Plugin/mdwn.pm:37
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
@@ -368,11 +367,11 @@ msgstr "generering av %s lyckades"
msgid "usage: ikiwiki [options] source dest"
msgstr "användning: ikiwiki [flaggor] källa mål"
-#: ../IkiWiki.pm:103
+#: ../IkiWiki.pm:102
msgid "Must specify url to wiki with --url when using --cgi"
msgstr "Måste ange url till wiki med --url när --cgi används"
-#: ../IkiWiki.pm:148 ../IkiWiki.pm:149
+#: ../IkiWiki.pm:147 ../IkiWiki.pm:148
msgid "Error"
msgstr "Fel"
@@ -380,7 +379,7 @@ msgstr "Fel"
#. translators: preprocessor directive name,
#. translators: the second a page name, the
#. translators: third a number.
-#: ../IkiWiki.pm:528
+#: ../IkiWiki.pm:527
#, perl-format
msgid "%s preprocessing loop detected on %s at depth %i"
msgstr "%s förbehandlingsslinga detekterades på %s, djup %i"
diff --git a/po/vi.po b/po/vi.po
index ddecc0db0..32d386856 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ikiwiki\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-01-31 02:17-0500\n"
+"POT-Creation-Date: 2007-02-01 21:27-0500\n"
"PO-Revision-Date: 2007-01-13 15:31+1030\n"
"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
@@ -16,42 +16,36 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: LocFactoryEditor 1.6fc1\n"
-#. translators: The first parameter is a page name,
-#. translators: second is the user who locked it.
-#: ../IkiWiki/CGI.pm:51
-#, perl-format
-msgid "%s is locked by %s and cannot be edited"
-msgstr "%s bị %s khoá nên không thể sửa được"
-
-#: ../IkiWiki/CGI.pm:140
+#: ../IkiWiki/CGI.pm:152
msgid "You need to log in first."
msgstr "Trước tiên bạn cần phải đăng nhập."
-#: ../IkiWiki/CGI.pm:257
+#: ../IkiWiki/CGI.pm:262
msgid "Preferences saved."
msgstr "Tùy thích đã được lưu."
-#: ../IkiWiki/CGI.pm:407 ../IkiWiki/Plugin/brokenlinks.pm:24
-#: ../IkiWiki/Plugin/inline.pm:160 ../IkiWiki/Plugin/orphans.pm:28
-#: ../IkiWiki/Render.pm:97 ../IkiWiki/Render.pm:165
+#: ../IkiWiki/CGI.pm:412 ../IkiWiki/Plugin/brokenlinks.pm:24
+#: ../IkiWiki/Plugin/inline.pm:160 ../IkiWiki/Plugin/opendiscussion.pm:17
+#: ../IkiWiki/Plugin/orphans.pm:28 ../IkiWiki/Render.pm:97
+#: ../IkiWiki/Render.pm:165
msgid "discussion"
msgstr "thảo luận"
-#: ../IkiWiki/CGI.pm:446
+#: ../IkiWiki/CGI.pm:457
#, perl-format
msgid "creating %s"
msgstr "đang tạo %s"
-#: ../IkiWiki/CGI.pm:463 ../IkiWiki/CGI.pm:506
+#: ../IkiWiki/CGI.pm:474 ../IkiWiki/CGI.pm:517
#, perl-format
msgid "editing %s"
msgstr "đang sửa %s"
-#: ../IkiWiki/CGI.pm:629
+#: ../IkiWiki/CGI.pm:625
msgid "You are banned."
msgstr "Bạn bị cấm ra."
-#: ../IkiWiki/CGI.pm:656
+#: ../IkiWiki/CGI.pm:657
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
@@ -141,6 +135,11 @@ msgstr "Không tìm thấy RPC::XML::Client nên không gửi gói tin ping"
msgid "linkmap failed to run dot"
msgstr "linkmap không chạy dot được"
+#: ../IkiWiki/Plugin/lockedit.pm:24
+#, perl-format
+msgid "%s is locked by %s and cannot be edited"
+msgstr "%s bị %s khoá nên không thể sửa được"
+
#: ../IkiWiki/Plugin/mdwn.pm:37
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
@@ -368,12 +367,12 @@ msgstr "%s đã được tạo ra"
msgid "usage: ikiwiki [options] source dest"
msgstr "cách sử dụng: ikiwiki [tùy chọn] nguồn đích"
-#: ../IkiWiki.pm:103
+#: ../IkiWiki.pm:102
msgid "Must specify url to wiki with --url when using --cgi"
msgstr ""
"Cần phải xác định địa chỉ URL tới wiki với « --url » khi dùng « --cgi »"
-#: ../IkiWiki.pm:148 ../IkiWiki.pm:149
+#: ../IkiWiki.pm:147 ../IkiWiki.pm:148
msgid "Error"
msgstr "Lỗi"
@@ -381,7 +380,7 @@ msgstr "Lỗi"
#. translators: preprocessor directive name,
#. translators: the second a page name, the
#. translators: third a number.
-#: ../IkiWiki.pm:528
+#: ../IkiWiki.pm:527
#, perl-format
msgid "%s preprocessing loop detected on %s at depth %i"
msgstr "vòng lặp tiền xử lý %s được phát hiện trên %s ở độ sâu %i"