]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki.pm
(no commit message)
[ikiwiki.git] / IkiWiki.pm
index 0746ef24ba36c00b6b7d3b340440f611609f622e..e4765219e60bdd9c7408aaf4425b1657ae1f618d 100644 (file)
@@ -13,7 +13,8 @@ use open qw{:utf8 :std};
 
 use vars qw{%config %links %oldlinks %pagemtime %pagectime %pagecase
            %pagestate %renderedfiles %oldrenderedfiles %pagesources
-           %destsources %depends %hooks %forcerebuild $gettext_obj};
+           %destsources %depends %hooks %forcerebuild $gettext_obj
+           %loaded_plugins};
 
 use Exporter q{import};
 our @EXPORT = qw(hook debug error template htmlpage add_depends pagespec_match
@@ -40,6 +41,28 @@ sub getsetup () { #{{{
                safe => 1,
                rebuild => 1,
        },
+       adminemail => {
+               type => "string",
+               default => undef,
+               example => 'me@example.com',
+               description => "contact email for wiki",
+               safe => 1,
+               rebuild => 0,
+       },
+       adminuser => {
+               type => "string",
+               default => [],
+               description => "users who are wiki admins",
+               safe => 1,
+               rebuild => 0,
+       },
+       banned_users => {
+               type => "string",
+               default => [],
+               description => "users who are banned from the wiki",
+               safe => 1,
+               rebuild => 0,
+       },
        srcdir => {
                type => "string",
                default => undef,
@@ -56,21 +79,6 @@ sub getsetup () { #{{{
                safe => 0, # path
                rebuild => 1,
        },
-       adminuser => {
-               type => "string",
-               default => [],
-               description => "user names of wiki admins",
-               safe => 1,
-               rebuild => 0,
-       },
-       adminemail => {
-               type => "string",
-               default => undef,
-               example => 'me@example.com',
-               description => "contact email for wiki",
-               safe => 1,
-               rebuild => 0,
-       },
        url => {
                type => "string",
                default => '',
@@ -91,7 +99,7 @@ sub getsetup () { #{{{
                type => "string",
                default => '',
                example => "/var/www/wiki/ikiwiki.cgi",
-               description => "cgi executable to generate",
+               description => "cgi wrapper to generate",
                safe => 0, # file
                rebuild => 0,
        },
@@ -115,7 +123,7 @@ sub getsetup () { #{{{
                                openid signinedit lockedit conditional
                                recentchanges parentlinks}],
                description => "plugins to enable by default",
-               safe => 1,
+               safe => 0,
                rebuild => 1,
        },
        add_plugins => {
@@ -136,6 +144,7 @@ sub getsetup () { #{{{
                type => "string",
                default => "$installdir/share/ikiwiki/templates",
                description => "location of template files",
+               advanced => 1,
                safe => 0, # path
                rebuild => 1,
        },
@@ -143,6 +152,7 @@ sub getsetup () { #{{{
                type => "string",
                default => "$installdir/share/ikiwiki/basewiki",
                description => "base wiki source location",
+               advanced => 1,
                safe => 0, # path
                rebuild => 0,
        },
@@ -162,14 +172,14 @@ sub getsetup () { #{{{
        },
        verbose => {
                type => "boolean",
-               default => 0,
+               example => 1,
                description => "display verbose messages when building?",
                safe => 1,
                rebuild => 0,
        },
        syslog => {
                type => "boolean",
-               default => 0,
+               example => 1,
                description => "log to syslog?",
                safe => 1,
                rebuild => 0,
@@ -195,6 +205,14 @@ sub getsetup () { #{{{
                safe => 1,
                rebuild => 1,
        },
+       sslcookie => {
+               type => "boolean",
+               default => 0,
+               description => "only send cookies over SSL connections?",
+               advanced => 1,
+               safe => 1,
+               rebuild => 0,
+       },
        default_pageext => {
                type => "string",
                default => "mdwn",
@@ -213,6 +231,7 @@ sub getsetup () { #{{{
                type => "string",
                default => '%c',
                description => "strftime format string to display date",
+               advanced => 1,
                safe => 1,
                rebuild => 1,
        },
@@ -221,16 +240,10 @@ sub getsetup () { #{{{
                default => undef,
                example => "en_US.UTF-8",
                description => "UTF-8 locale to use",
+               advanced => 1,
                safe => 0,
                rebuild => 1,
        },
-       sslcookie => {
-               type => "boolean",
-               default => 0,
-               description => "only send cookies over SSL connections?",
-               safe => 1,
-               rebuild => 0,
-       },
        userdir => {
                type => "string",
                default => "",
@@ -250,6 +263,7 @@ sub getsetup () { #{{{
                type => "boolean",
                default => 0,
                description => "attempt to hardlink source files? (optimisation for large files)",
+               advanced => 1,
                safe => 0, # paranoia
                rebuild => 0,
        },
@@ -258,6 +272,7 @@ sub getsetup () { #{{{
                description => "",
                example => "022",
                description => "force ikiwiki to use a particular umask",
+               advanced => 1,
                safe => 0, # paranoia
                rebuild => 0,
        },
@@ -266,6 +281,7 @@ sub getsetup () { #{{{
                default => "",
                example => "$ENV{HOME}/.ikiwiki/",
                description => "extra library and plugin directory",
+               advanced => 1,
                safe => 0, # directory
                rebuild => 0,
        },
@@ -281,6 +297,7 @@ sub getsetup () { #{{{
                default => undef,
                example => '\.wav$',
                description => "regexp of source files to ignore",
+               advanced => 1,
                safe => 0, # regexp
                rebuild => 1,
        },
@@ -337,6 +354,13 @@ sub getsetup () { #{{{
                safe => 0,
                rebuild => 0,
        },
+       setup => {
+               type => "internal",
+               default => undef,
+               description => "running in setup mode",
+               safe => 0,
+               rebuild => 0,
+       },
        refresh => {
                type => "internal",
                default => 0,
@@ -358,10 +382,10 @@ sub getsetup () { #{{{
                safe => 0,
                rebuild => 0,
        },
-       setup => {
+       setupfile => {
                type => "internal",
                default => undef,
-               description => "setup file to read",
+               description => "path to setup file",
                safe => 0,
                rebuild => 0,
        },
@@ -412,13 +436,6 @@ sub checkconfig () { #{{{
        
        $config{wikistatedir}="$config{srcdir}/.ikiwiki"
                unless exists $config{wikistatedir};
-       
-       if ($config{rcs}) {
-               loadplugin($config{rcs});
-       }
-       else {
-               loadplugin("norcs");
-       }
 
        if (defined $config{umask}) {
                umask(possibly_foolish_untaint($config{umask}));
@@ -433,14 +450,14 @@ sub listplugins () { #{{{
        my %ret;
 
        foreach my $dir (@INC, $config{libdir}) {
-               next unless defined $dir;
+               next unless defined $dir && length $dir;
                foreach my $file (glob("$dir/IkiWiki/Plugin/*.pm")) {
                        my ($plugin)=$file=~/.*\/(.*)\.pm$/;
                        $ret{$plugin}=1;
                }
        }
        foreach my $dir ($config{libdir}, "$installdir/lib/ikiwiki") {
-               next unless defined $dir;
+               next unless defined $dir && length $dir;
                foreach my $file (glob("$dir/plugins/*")) {
                        $ret{basename($file)}=1 if -x $file;
                }
@@ -450,11 +467,21 @@ sub listplugins () { #{{{
 } #}}}
 
 sub loadplugins () { #{{{
-       if (defined $config{libdir}) {
+       if (defined $config{libdir} && length $config{libdir}) {
                unshift @INC, possibly_foolish_untaint($config{libdir});
        }
 
        loadplugin($_) foreach @{$config{default_plugins}}, @{$config{add_plugins}};
+       
+       if ($config{rcs}) {
+               if (exists $IkiWiki::hooks{rcs}) {
+                       error(gettext("cannot use multiple rcs plugins"));
+               }
+               loadplugin($config{rcs});
+       }
+       if (! exists $IkiWiki::hooks{rcs}) {
+               loadplugin("norcs");
+       }
 
        run_hooks(getopt => sub { shift->() });
        if (grep /^-/, @ARGV) {
@@ -476,6 +503,7 @@ sub loadplugin ($) { #{{{
                if (defined $dir && -x "$dir/plugins/$plugin") {
                        require IkiWiki::Plugin::external;
                        import IkiWiki::Plugin::external "$dir/plugins/$plugin";
+                       $loaded_plugins{$plugin}=1;
                        return 1;
                }
        }
@@ -485,6 +513,7 @@ sub loadplugin ($) { #{{{
        if ($@) {
                error("Failed to load plugin $mod: $@");
        }
+       $loaded_plugins{$plugin}=1;
        return 1;
 } #}}}
 
@@ -1021,6 +1050,8 @@ sub preprocess ($$$;$$) { #{{{
                my $prefix=shift;
                my $command=shift;
                my $params=shift;
+               $params="" if ! defined $params;
+
                if (length $escape) {
                        return "[[$prefix$command $params]]";
                }