Configuration database
From MediaWiki.org
Contents |
[edit] Problems to solve
- .php config files are fragile
- easy to break by mistake
- no edit history unless you explicit do external version control
- Editing config files is difficult/inconvenient for many sites
- requires shell access
- can't easily expose limited settings to admins on the wiki, making serious bottlenecks for site config issues on a big wiki farm
- Handling config for multi-wiki farms right now is very difficult
- SiteConfig/InitaliseSettings stuff is weirdly Wikimedia-specific and just plain ugly
- querying settings from a sister site (even simply translating dbname <-> URL and getting descriptive names) is very difficult, unreliable (various settings may be in CommonSettings and not show up in the config arrays)
- extensions are difficult to configure since the array is read in before the extensions and their defaults are loaded
[edit] Requirements
- Should work cleanly for one-off installs
- Should handle Wikimedia-style farms:
- global configuration
- configurations shared among project groups
- configurations specific to a wiki
- need to be able to fetch config info from other wikis cleanly
- Varying user permissions; not all settings should be editable by everyone
- Metadata...
- For each config (core or ext) provide:
- type
- validation rules
- friendly name
- more detailed description, examples
- Default
- For each config (core or ext) provide:
- Needs high-level read/write support, so we can abstract backends more easily (CDB,SQL,etc)
Possibly use HtmlForm or similar framework for defining UI paging? Similar to prefs rewrite?
- We can adapt some of the form field types in Configure (that's where I got the idea for HTMLForm) for the new configuration (there are some specialist types like group permissions arrays).
[edit] Data types
- bool
- int
- string
- URL
- local path
- message key
- other
- wiki reference
- array of strings
- array of items
- ?
[edit] Internal interface
Common case: local lookups:
wfConf('serverUrl')(shortcut)WikiConfig::forLocal()->get('serverUrl')
Other-local-site info lookups:
WikiConfig::forWiki('dewiki')->get('serverUrl')WikiConfig::forSite('de.wikipedia.org')->get('serverUrl')?
interface WikiConfig { /** * Get a configuration value, like 'wgEnableSomething' * @param $key String A configuration key * @return mixed */ public function get( $key ); /** * Set a configuration variable * @param $key String A configuration key * @param $value mixed The value to set * @return mixed Previously set value */ public function set( $key, $value ); /** * Is a particular extension installed? Helpful * for other extensions that might potentially change * behavior if other extensions are installed * @param $name String Extension name * @return boolean */ public function extensionInstalled( $name ); }
[edit] User interface
There's a lot that can be adapted or copied from Configure.
[edit] Bugs that could be solved / New features
- bug 12518 - Cross-wiki userrights reflects groups on local wiki, not target wiki
- Maybe add a iw_wiki col in the interwiki table that references the wiki ID:
- bug 11 - Red interwiki links -- check for page existence across wikis
- bug 9890 - Reasonably efficient interwiki transclusion
- (these sorts of things benefit from being able to look up things like remote namespaces cleanly, so we can pull data from a db directly instead of doing some nasty api hack)
- Drop $wgLocalInterwiki and check if iw_wiki == wfWikiId().
- Maybe run internal HTTP requests (transwiki imports, fetching remote file description page, interwiki transclusion) internally?
- Drop $wgLocalDatabases and replace this with a query in the database.
[edit] See also
- module registry idea notes
- Extension:Configure experience and lessons
- Zend_Config