summaryrefslogtreecommitdiff
path: root/doc/todo/online_configuration.mdwn
blob: db3b41a715a821cb9b46c9d0961ed0eea0de5e46 (plain)

It should be possible to configure ikiwiki online, in the wiki admin's preferences form. Rather than the current situation where most settings are in ikiwiki.setup, and one or two (like locked pages and upload limits) in the admin preferences.

In theory, every setting could be configured there. In practice, some settings, like srcdir and destdir are ones you want to keep far away from editing via the web.

Currently admin prefs are per-admin, and are stored in the userdb. That seems like a bad choice in the context of this idea. Instead, admin setup should be configured on a separate page than the regular user prefs page, and should be shared amoung all admins, and the ideal storage would be another ikiwiki setup file, which could be loaded in, and written back out.

If ikiwiki-makerepo were extended a little bit to generate the stub setup file that's enough to get ikiwiki.cgi working, and that sets values for all the dangerous options, leaving only safe ones 'undef', then users could set up ikiwiki using it, and configure the rest with the web interface, without ever needing to edit a setup file.

The setup page could require every available plugin, and then call a getsetup function, which would look something like:

sub getsetup () {
	eval q{use Some::Thing};
	die $@ if $@;

	return option_foo => {
		safe => 1,
		rebuild => 1,
		type => "boolean",
		default => 0,
		description => gettext("Enable foo."),
	},
	option_bar => {
		safe => 0,
		rebuild => 0,
		type => "password",
		default => "",
		description => gettext("Password for bar."),
	};
}

The types would be: boolean, string, password, filename, other. This would be the type of the leaf fields; if a value in %config is an array or hash, the type specifies the type of values that go into it.

From this info, a form can be built, that has core setup values at the top, followed by each plugin whose getsetup succeeded, with a check box to enable/disable that plugin, and all of its setup options listed after it.

The main setup file could control what options are read from the online setup file:

online_setup_include => 'safe', # all things with safe = 1
online_setup_exclude => [qw{option_baz}],

Note that posting the setup form would sometimes need to cause a rebuild of the whole wiki. This could be done with output streamed to the admin in the web browser. The rebuild fields would be set to 1 for values that require a wiki rebuild when changed, and to 0 for values that only need the wrappers to be refreshed.

[[tag wishlist]]