admin prefs move to setup file, stage 1
authorJoey Hess <joey@kodama.kitenet.net>
Fri, 1 Aug 2008 19:45:57 +0000 (15:45 -0400)
committerJoey Hess <joey@kodama.kitenet.net>
Fri, 1 Aug 2008 20:45:04 +0000 (16:45 -0400)
The locked pages configuration is moving to a locked_pages option in the
setup file, and the allowed attachments configuration to
allowed_attachments. The admin prefs page can still be used for these, but
that's depreacted and will only be shown if there's currently a value.

IkiWiki/Plugin/attachment.pm
IkiWiki/Plugin/lockedit.pm
debian/changelog
doc/plugins/attachment.mdwn
doc/plugins/write.mdwn
doc/roadmap.mdwn
po/ikiwiki.pot

index 47e165251376ffa817b014fc041ae1a9cc9aa9d3..b6327f0c5455fdfe1a622e0e26f36663653357da 100644 (file)
@@ -21,6 +21,18 @@ sub getsetup () { #{{{
                        safe => 0, # executed
                        rebuild => 0,
                },
+               allowed_attachments => {
+                       type => "string",
+                       example => "mimetype(image/*) and maxsize(50kb)",
+                       description => "enhanced PageSpec specifying what attachments are allowed",
+                       description_html => htmllink("", "", 
+                               "ikiwiki/PageSpec/attachment", 
+                               noimageinline => 1,
+                               linktext => "enhanced PageSpec",
+                               )." specifying what attachments are allowed",
+                       safe => 1,
+                       rebuild => 0,
+               },
 } #}}}
 
 sub check_canattach ($$;$) { #{{{
@@ -36,19 +48,33 @@ sub check_canattach ($$;$) { #{{{
 
        # Use a special pagespec to test that the attachment is valid.
        my $allowed=1;
-       foreach my $admin (@{$config{adminuser}}) {
-               my $allowed_attachments=IkiWiki::userinfo_get($admin, "allowed_attachments");
-               if (defined $allowed_attachments &&
-                   length $allowed_attachments) {
-                       $allowed=pagespec_match($dest,
-                               $allowed_attachments,
-                               file => $file,
-                               user => $session->param("name"),
-                               ip => $ENV{REMOTE_ADDR},
-                       );
-                       last if $allowed;
+       if (defined $config{allowed_attachments} &&
+           length $config{allowed_attachments}) {
+               $allowed=pagespec_match($dest,
+                       $config{allowed_attachments},
+                       file => $file,
+                       user => $session->param("name"),
+                       ip => $ENV{REMOTE_ADDR},
+               );
+       }
+
+       # XXX deprecated, should be removed eventually
+       if ($allowed) {
+               foreach my $admin (@{$config{adminuser}}) {
+                       my $allowed_attachments=IkiWiki::userinfo_get($admin, "allowed_attachments");
+                       if (defined $allowed_attachments &&
+                           length $allowed_attachments) {
+                               $allowed=pagespec_match($dest,
+                                       $allowed_attachments,
+                                       file => $file,
+                                       user => $session->param("name"),
+                                       ip => $ENV{REMOTE_ADDR},
+                               );
+                               last if $allowed;
+                       }
                }
        }
+
        if (! $allowed) {
                error(gettext("prohibited by allowed_attachments")." ($allowed)");
        }
@@ -91,24 +117,26 @@ sub formbuilder_setup (@) { #{{{
                }
        }
        elsif ($form->title eq "preferences") {
+               # XXX deprecated, should remove eventually
                my $session=$params{session};
                my $user_name=$session->param("name");
 
                $form->field(name => "allowed_attachments", size => 50,
                        fieldset => "admin",
-                       comment => "(".
-                               htmllink("", "", 
-                                       "ikiwiki/PageSpec/attachment", 
-                                       noimageinline => 1,
-                                       linktext => "Enhanced PageSpec",
-                               ).")"
+                       comment => "deprecated; please move to allowed_attachments in setup file",
                );
                if (! IkiWiki::is_admin($user_name)) {
                        $form->field(name => "allowed_attachments", type => "hidden");
                }
                 if (! $form->submitted) {
-                       $form->field(name => "allowed_attachments", force => 1,
-                               value => IkiWiki::userinfo_get($user_name, "allowed_attachments"));
+                       my $value=IkiWiki::userinfo_get($user_name, "allowed_attachments");
+                       if (length $value) {
+                               $form->field(name => "allowed_attachments", force => 1,
+                                       value => IkiWiki::userinfo_get($user_name, "allowed_attachments"));
+                       }
+                       else {
+                               $form->field(name => "allowed_attachments", type => "hidden");
+                       }
                 }
                if ($form->submitted && $form->submitted eq 'Save Preferences') {
                        if (defined $form->field("allowed_attachments")) {
index 5ffb4e6f9edd254691f4fb5b246e3afb2aeea147..033b3826347fce2ea83ad67b2a28e7d9ccc56260 100644 (file)
@@ -6,11 +6,25 @@ use strict;
 use IkiWiki 2.00;
 
 sub import { #{{{
+       hook(type => "getsetup", id => "lockedit", call => \&getsetup);
        hook(type => "canedit", id => "lockedit", call => \&canedit);
        hook(type => "formbuilder_setup", id => "lockedit",
             call => \&formbuilder_setup);
 } # }}}
 
+sub getsetup () { #{{{
+       return
+               locked_pages => {
+                       type => "string",
+                       example => "!*/Discussion",
+                       description => "PageSpec controlling which pages are locked",
+                       description_html => htmllink("", "", "ikiwiki/PageSpec", noimageinline => 1).
+                               " controlling which pages are locked",
+                       safe => 1,
+                       rebuild => 0,
+               },
+} #}}}
+
 sub canedit ($$) { #{{{
        my $page=shift;
        my $cgi=shift;
@@ -19,6 +33,20 @@ sub canedit ($$) { #{{{
        my $user=$session->param("name");
        return undef if defined $user && IkiWiki::is_admin($user);
 
+       if (defined $config{locked_pages} && length $config{locked_pages} &&
+           pagespec_match($page, $config{locked_pages})) {
+               if (! defined $user ||
+                   ! IkiWiki::userinfo_get($session->param("name"), "regdate")) {
+                       return sub { IkiWiki::needsignin($cgi, $session) };
+               }
+               else {
+                       return sprintf(gettext("%s is locked and cannot be edited"),
+                               htmllink("", "", $page, noimageinline => 1));
+                       
+               }
+       }
+
+       # XXX deprecated, should be removed eventually
        foreach my $admin (@{$config{adminuser}}) {
                if (pagespec_match($page, IkiWiki::userinfo_get($admin, "locked_pages"))) {
                        if (! defined $user ||
@@ -26,9 +54,8 @@ sub canedit ($$) { #{{{
                                return sub { IkiWiki::needsignin($cgi, $session) };
                        }
                        else {
-                               return sprintf(gettext("%s is locked by %s and cannot be edited"),
-                                       htmllink("", "", $page, noimageinline => 1),
-                                       IkiWiki::userlink($admin));
+                               return sprintf(gettext("%s is locked and cannot be edited"),
+                                       htmllink("", "", $page, noimageinline => 1));
                        }
                }
        }
@@ -38,7 +65,8 @@ sub canedit ($$) { #{{{
 
 sub formbuilder_setup (@) { #{{{
        my %params=@_;
-       
+
+       # XXX deprecated, should be removed eventually  
        my $form=$params{form};
        if ($form->title eq "preferences") {
                my $session=$params{session};
@@ -47,13 +75,19 @@ sub formbuilder_setup (@) { #{{{
 
                $form->field(name => "locked_pages", size => 50,
                        fieldset => "admin",
-                       comment => "(".htmllink("", "", "ikiwiki/PageSpec", noimageinline => 1).")");
+                       comment => "deprecated; please move to locked_pages in setup file"
+               );
                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"));
+                       my $value=IkiWiki::userinfo_get($user_name, "locked_pages");
+                       if (length $value) {
+                               $form->field(name => "locked_pages", force => 1, value => $value);
+                       }
+                       else {
+                               $form->field(name => "locked_pages", type => "hidden");
+                       }
                }
                if ($form->submitted && $form->submitted eq 'Save Preferences') {
                        if (defined $form->field("locked_pages")) {
index 440910313131e8e21be85a0b9a7591c8b04df27d..033b9fbc68bed9e3e47e1bf8f1d7cb50ab79037d 100644 (file)
@@ -11,6 +11,10 @@ ikiwiki (2.60) UNRELEASED; urgency=low
   * Version control backends promoted to first-class plugins.
   * ikiwiki-update-wikilist: Add -r switch to remove. Default behavior is now
     always to add.
+  * The locked pages configuration is moving to a locked_pages option in the
+    setup file, and the allowed attachments configuration to
+    allowed_attachments. The admin prefs page can still be used for these, but
+    that's depreacted and will only be shown if there's currently a value.
 
  -- Joey Hess <joeyh@debian.org>  Mon, 21 Jul 2008 11:35:46 -0400
 
index 524a233fa7718603edb0f2168c7e857f92fabc5e..b04a04ad22467ac79a66d92d407c83b2b67d92e6 100644 (file)
@@ -20,9 +20,9 @@ Bear in mind that if you let anyone upload a particular kind of file
    contains html as a web page; including running any malicious javascript
    embedded in that page.
 
-If you enable this plugin, be sure to lock that down, by entering an
-[[enhanced_PageSpec|ikiwiki/pagespec/attachment]] in the "Allowed
-Attachments" field of the wiki admin's preferences page.
+If you enable this plugin, be sure to lock it down, via the
+`allowed_attachments` setup file option. This is a special 
+[[enhanced_PageSpec|ikiwiki/pagespec/attachment]].
 
 This plugin will use the [[!cpan File::MimeInfo::Magic]] perl module, if
 available, for mimetype checking.
index 77210d35cb8bd8731b42e921f0e5f289546a4f3c..255be4207c54ed5bc05062d421696719919c2b5d 100644 (file)
@@ -396,11 +396,12 @@ describing the option. For example:
                                rebuild => 0,
                        },
 
-* `type` can be "boolean", "string", "integer", "pagespec", or "internal" 
+* `type` can be "boolean", "string", "integer", or "internal" 
   (used for values that are not user-visible). The type is the type of
   the leaf values;  the `%config` option may be an array or hash of these.
 * `example` can be set to an example value.
 * `description` is a short description of the option.
+* `description_html` is an optional short description, that can contain html
 * `safe` should be false if the option should not be displayed in unsafe
   configuration methods, such as the web interface. Anything that specifies
   a command to run, a path on disk, or a regexp should be marked as unsafe.
index 32752715d8fe4b1f2c50219227ff396c50884080..6447e8c52cc804acab636cd82749213a757e0dd3 100644 (file)
@@ -39,21 +39,20 @@ backwards compatability.
 
 # 3.0
 
-Still in the early planning stages, version 3.0 will be an opportunity to
-make significant transitions.
+Version 3.0 will be an opportunity to make significant transitions.
 
 * Default to using `prefix_directives`.
 * Default to using `aggregateinternal`.
+* Remove deprecated prefs form settings for `allowed_attachments` and
+  `locked_pages`.
 
 ----
 
 # future goals
 
-* Improved [[todo/html]] stylesheets and templates.
-  _(status: [[css_market]] exists; it could always provide more stylesheets.  No alternate templates yet, though.)_
-* More documentation in the basewiki, including documentation for all enabled plugins.  Probably need some solution for [[todo/conditional_underlay_files]], too.
+* More documentation in the basewiki, including documentation for all enabled plugins.
 * Conversion support for existing other wikis.
   (Being worked on for MoinMoin and TWiki by [[Josh_Triplett|JoshTriplett]]
   and Jamey Sharp; support for other wikis should fit into the same
   framework.)
-* [[TODO]], [[bugs]], [[soc]], ...
+* [[TODO]], [[bugs]], ...
index 52ed49d81ff6bd327d7e075403c14729c00b48f0..cefd4d711c0b6874ee10bec55a8befb0188e170e 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-07-31 19:25-0400\n"
+"POT-Creation-Date: 2008-08-01 15:43-0400\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"
@@ -50,7 +50,7 @@ msgid "%s is not an editable page"
 msgstr ""
 
 #: ../IkiWiki/CGI.pm:437 ../IkiWiki/Plugin/brokenlinks.pm:24
-#: ../IkiWiki/Plugin/inline.pm:261 ../IkiWiki/Plugin/opendiscussion.pm:17
+#: ../IkiWiki/Plugin/inline.pm:306 ../IkiWiki/Plugin/opendiscussion.pm:17
 #: ../IkiWiki/Plugin/orphans.pm:28 ../IkiWiki/Render.pm:78
 #: ../IkiWiki/Render.pm:148
 msgid "discussion"
@@ -71,122 +71,122 @@ msgstr ""
 msgid "You are banned."
 msgstr ""
 
-#: ../IkiWiki/CGI.pm:758 ../IkiWiki/CGI.pm:759 ../IkiWiki.pm:785
+#: ../IkiWiki/CGI.pm:758 ../IkiWiki/CGI.pm:759 ../IkiWiki.pm:1086
 msgid "Error"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:57
+#: ../IkiWiki/Plugin/aggregate.pm:76
 msgid "Aggregation triggered via web."
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:66
+#: ../IkiWiki/Plugin/aggregate.pm:85
 msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:193
+#: ../IkiWiki/Plugin/aggregate.pm:212
 #, perl-format
 msgid "missing %s parameter"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:227
+#: ../IkiWiki/Plugin/aggregate.pm:246
 msgid "new feed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:241
+#: ../IkiWiki/Plugin/aggregate.pm:260
 msgid "posts"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:243
+#: ../IkiWiki/Plugin/aggregate.pm:262
 msgid "new"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:406
+#: ../IkiWiki/Plugin/aggregate.pm:425
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:413
+#: ../IkiWiki/Plugin/aggregate.pm:432
 #, perl-format
 msgid "expiring %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:440
+#: ../IkiWiki/Plugin/aggregate.pm:459
 #, perl-format
 msgid "processed ok at %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:444
+#: ../IkiWiki/Plugin/aggregate.pm:463
 #, perl-format
 msgid "checking feed %s ..."
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:449
+#: ../IkiWiki/Plugin/aggregate.pm:468
 #, perl-format
 msgid "could not find feed at %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:464
+#: ../IkiWiki/Plugin/aggregate.pm:483
 msgid "feed not found"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:494
 #, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:481
+#: ../IkiWiki/Plugin/aggregate.pm:500
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:487
+#: ../IkiWiki/Plugin/aggregate.pm:506
 msgid "feed crashed XML::Feed!"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:561
+#: ../IkiWiki/Plugin/aggregate.pm:580
 #, perl-format
 msgid "creating new page %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:30
+#: ../IkiWiki/Plugin/amazon_s3.pm:31
 msgid "deleting bucket.."
 msgstr ""
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:37 ../IkiWiki/Setup.pm:117
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:193
 msgid "done"
 msgstr ""
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:46
+#: ../IkiWiki/Plugin/amazon_s3.pm:93
 #, perl-format
 msgid "Must specify %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:85
+#: ../IkiWiki/Plugin/amazon_s3.pm:132
 msgid "Failed to create bucket in S3: "
 msgstr ""
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:170
+#: ../IkiWiki/Plugin/amazon_s3.pm:217
 msgid "Failed to save file to S3: "
 msgstr ""
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:192
+#: ../IkiWiki/Plugin/amazon_s3.pm:239
 msgid "Failed to delete file from S3: "
 msgstr ""
 
-#: ../IkiWiki/Plugin/attachment.pm:22
+#: ../IkiWiki/Plugin/attachment.pm:46
 #, perl-format
 msgid "there is already a page named %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/attachment.pm:41
+#: ../IkiWiki/Plugin/attachment.pm:79
 msgid "prohibited by allowed_attachments"
 msgstr ""
 
-#: ../IkiWiki/Plugin/attachment.pm:144
+#: ../IkiWiki/Plugin/attachment.pm:184
 msgid "bad attachment filename"
 msgstr ""
 
-#: ../IkiWiki/Plugin/attachment.pm:186
+#: ../IkiWiki/Plugin/attachment.pm:226
 msgid "attachment upload"
 msgstr ""
 
@@ -203,6 +203,12 @@ msgstr ""
 msgid "There are no broken links!"
 msgstr ""
 
+#: ../IkiWiki/Plugin/bzr.pm:12 ../IkiWiki/Plugin/git.pm:15
+#: ../IkiWiki/Plugin/mercurial.pm:12 ../IkiWiki/Plugin/monotone.pm:15
+#: ../IkiWiki/Plugin/svn.pm:11 ../IkiWiki/Plugin/tla.pm:10
+msgid "cannot use multiple rcs plugins"
+msgstr ""
+
 #: ../IkiWiki/Plugin/conditional.pm:18 ../IkiWiki/Plugin/cutpaste.pm:22
 #: ../IkiWiki/Plugin/cutpaste.pm:37 ../IkiWiki/Plugin/cutpaste.pm:53
 #: ../IkiWiki/Plugin/testpagespec.pm:17
@@ -277,33 +283,33 @@ msgstr ""
 msgid "failed to determine size of image %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:47
+#: ../IkiWiki/Plugin/inline.pm:89
 msgid "Must specify url to wiki with --url when using --rss or --atom"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:101
+#: ../IkiWiki/Plugin/inline.pm:146
 msgid "missing pages parameter"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:149
+#: ../IkiWiki/Plugin/inline.pm:194
 #, perl-format
 msgid "unknown sort type %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:220
+#: ../IkiWiki/Plugin/inline.pm:265
 msgid "Add a new post titled:"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:236
+#: ../IkiWiki/Plugin/inline.pm:281
 #, perl-format
 msgid "nonexistant template %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:269 ../IkiWiki/Render.pm:82
+#: ../IkiWiki/Plugin/inline.pm:314 ../IkiWiki/Render.pm:82
 msgid "Discussion"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:506
+#: ../IkiWiki/Plugin/inline.pm:551
 msgid "RPC::XML::Client not found, not pinging"
 msgstr ""
 
@@ -311,16 +317,16 @@ msgstr ""
 msgid "failed to run dot"
 msgstr ""
 
-#: ../IkiWiki/Plugin/lockedit.pm:29
+#: ../IkiWiki/Plugin/lockedit.pm:43 ../IkiWiki/Plugin/lockedit.pm:57
 #, perl-format
-msgid "%s is locked by %s and cannot be edited"
+msgid "%s is locked and cannot be edited"
 msgstr ""
 
-#: ../IkiWiki/Plugin/mdwn.pm:28
+#: ../IkiWiki/Plugin/mdwn.pm:40
 msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/mdwn.pm:51
+#: ../IkiWiki/Plugin/mdwn.pm:63
 #, perl-format
 msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
 msgstr ""
@@ -337,11 +343,11 @@ msgstr ""
 msgid "redir cycle is not allowed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:23
+#: ../IkiWiki/Plugin/mirrorlist.pm:35
 msgid "Mirrors"
 msgstr ""
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:23
+#: ../IkiWiki/Plugin/mirrorlist.pm:35
 msgid "Mirror"
 msgstr ""
 
@@ -349,11 +355,15 @@ msgstr ""
 msgid "more"
 msgstr ""
 
-#: ../IkiWiki/Plugin/openid.pm:45
+#: ../IkiWiki/Plugin/norcs.pm:55
+msgid "getctime not implemented"
+msgstr ""
+
+#: ../IkiWiki/Plugin/openid.pm:57
 msgid "Log in with"
 msgstr ""
 
-#: ../IkiWiki/Plugin/openid.pm:48
+#: ../IkiWiki/Plugin/openid.pm:60
 msgid "Get an OpenID"
 msgstr ""
 
@@ -365,31 +375,31 @@ msgstr ""
 msgid "bad or missing template"
 msgstr ""
 
-#: ../IkiWiki/Plugin/passwordauth.pm:223
+#: ../IkiWiki/Plugin/passwordauth.pm:243
 msgid "Account creation successful. Now you can Login."
 msgstr ""
 
-#: ../IkiWiki/Plugin/passwordauth.pm:226
+#: ../IkiWiki/Plugin/passwordauth.pm:246
 msgid "Error creating account."
 msgstr ""
 
-#: ../IkiWiki/Plugin/passwordauth.pm:233
+#: ../IkiWiki/Plugin/passwordauth.pm:253
 msgid "No email address, so cannot email password reset instructions."
 msgstr ""
 
-#: ../IkiWiki/Plugin/passwordauth.pm:265
+#: ../IkiWiki/Plugin/passwordauth.pm:287
 msgid "Failed to send mail"
 msgstr ""
 
-#: ../IkiWiki/Plugin/passwordauth.pm:267
+#: ../IkiWiki/Plugin/passwordauth.pm:289
 msgid "You have been mailed password reset instructions."
 msgstr ""
 
-#: ../IkiWiki/Plugin/passwordauth.pm:302
+#: ../IkiWiki/Plugin/passwordauth.pm:324
 msgid "incorrect password reset url"
 msgstr ""
 
-#: ../IkiWiki/Plugin/passwordauth.pm:305
+#: ../IkiWiki/Plugin/passwordauth.pm:327
 msgid "password reset denied"
 msgstr ""
 
@@ -397,21 +407,21 @@ msgstr ""
 msgid "Ping received."
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:37
+#: ../IkiWiki/Plugin/pinger.pm:49
 msgid "requires 'from' and 'to' parameters"
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:42
+#: ../IkiWiki/Plugin/pinger.pm:54
 #, perl-format
 msgid "Will ping %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:45
+#: ../IkiWiki/Plugin/pinger.pm:57
 #, perl-format
 msgid "Ignoring ping directive for wiki %s (this wiki is %s)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:61
+#: ../IkiWiki/Plugin/pinger.pm:73
 msgid "LWP not found, not pinging"
 msgstr ""
 
@@ -491,23 +501,23 @@ msgstr ""
 msgid "%A night"
 msgstr ""
 
-#: ../IkiWiki/Plugin/prettydate.pm:78
+#: ../IkiWiki/Plugin/prettydate.pm:96
 msgid "at teatime on %A"
 msgstr ""
 
-#: ../IkiWiki/Plugin/prettydate.pm:82
+#: ../IkiWiki/Plugin/prettydate.pm:100
 msgid "at midnight"
 msgstr ""
 
-#: ../IkiWiki/Plugin/prettydate.pm:85
+#: ../IkiWiki/Plugin/prettydate.pm:103
 msgid "at noon on %A"
 msgstr ""
 
-#: ../IkiWiki/Plugin/recentchanges.pm:76
+#: ../IkiWiki/Plugin/recentchanges.pm:95
 msgid "missing page"
 msgstr ""
 
-#: ../IkiWiki/Plugin/recentchanges.pm:78
+#: ../IkiWiki/Plugin/recentchanges.pm:97
 #, perl-format
 msgid "The page %s does not exist."
 msgstr ""
@@ -591,17 +601,17 @@ msgstr ""
 msgid "update for rename of %s to %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/search.pm:20
+#: ../IkiWiki/Plugin/search.pm:32
 #, perl-format
 msgid "Must specify %s when using the search plugin"
 msgstr ""
 
-#: ../IkiWiki/Plugin/search.pm:166
+#: ../IkiWiki/Plugin/search.pm:178
 #, perl-format
 msgid "need Digest::SHA1 to index %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/search.pm:201
+#: ../IkiWiki/Plugin/search.pm:213
 msgid "search"
 msgstr ""
 
@@ -703,10 +713,6 @@ msgstr ""
 msgid "failed to generate image from code"
 msgstr ""
 
-#: ../IkiWiki/Rcs/Stub.pm:96
-msgid "getctime not implemented"
-msgstr ""
-
 #: ../IkiWiki/Render.pm:276 ../IkiWiki/Render.pm:297
 #, perl-format
 msgid "skipping bad filename %s"
@@ -754,23 +760,11 @@ msgstr ""
 
 #. translators: The first parameter is a filename, and the second
 #. translators: is a (probably not translated) error message.
-#: ../IkiWiki/Setup.pm:25
+#: ../IkiWiki/Setup.pm:17
 #, perl-format
 msgid "cannot read %s: %s"
 msgstr ""
 
-#: ../IkiWiki/Setup.pm:58
-msgid "generating wrappers.."
-msgstr ""
-
-#: ../IkiWiki/Setup.pm:107
-msgid "rebuilding wiki.."
-msgstr ""
-
-#: ../IkiWiki/Setup.pm:110
-msgid "refreshing wiki.."
-msgstr ""
-
 #: ../IkiWiki/Wrapper.pm:16
 #, perl-format
 msgid "%s doesn't seem to be executable"
@@ -807,19 +801,31 @@ msgstr ""
 msgid "usage: ikiwiki [options] source dest"
 msgstr ""
 
-#: ../ikiwiki.in:82
+#: ../ikiwiki.in:79
 msgid "usage: --set var=value"
 msgstr ""
 
-#: ../IkiWiki.pm:126
+#: ../ikiwiki.in:126
+msgid "generating wrappers.."
+msgstr ""
+
+#: ../ikiwiki.in:182
+msgid "rebuilding wiki.."
+msgstr ""
+
+#: ../ikiwiki.in:185
+msgid "refreshing wiki.."
+msgstr ""
+
+#: ../IkiWiki.pm:410
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr ""
 
-#: ../IkiWiki.pm:768
+#: ../IkiWiki.pm:1069
 #, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr ""
 
-#: ../IkiWiki.pm:1216
+#: ../IkiWiki.pm:1557
 msgid "yes"
 msgstr ""