registration: Support conditionally registered namespaces

Some extensions (e.g. EventLogging) conditionally register a namespace
depending upon the wiki's configuration using the CanonicalNamespaces
hook. Since the "namespaces" key automatically registers the namespace,
we need an option to not register it and let the extension take care of
that manually using the hook.

All of the other namespace related settings are safe to unconditionally
set since they won't do anything if the namespace doesn't actually
exist.

Bug: T141604
Change-Id: Ie8c217fdc8bd783b30f98210309ea56fef39c0da
This commit is contained in:
Kunal Mehta 2016-07-29 01:09:24 -07:00
parent 519e92e1e0
commit 93aed1e7eb
3 changed files with 14 additions and 1 deletions

View file

@ -625,6 +625,11 @@
"capitallinkoverride": {
"type": "boolean",
"description": "Set $wgCapitalLinks on a per-namespace basis"
},
"conditional": {
"type": "boolean",
"description": "Whether the namespace is conditional upon configuration and should not be registered (requires separate registration via a hook)",
"default": false
}
},
"required": ["id", "constant", "name"]

View file

@ -615,6 +615,11 @@
"capitallinkoverride": {
"type": "boolean",
"description": "Set $wgCapitalLinks on a per-namespace basis"
},
"conditional": {
"type": "boolean",
"description": "Whether the namespace is conditional upon configuration and should not be registered (requires separate registration via a hook)",
"default": false
}
},
"required": ["id", "constant", "name"]

View file

@ -243,7 +243,10 @@ class ExtensionProcessor implements Processor {
foreach ( $info['namespaces'] as $ns ) {
$id = $ns['id'];
$this->defines[$ns['constant']] = $id;
$this->attributes['ExtensionNamespaces'][$id] = $ns['name'];
if ( !( isset( $ns['conditional'] ) && $ns['conditional'] ) ) {
// If it is not conditional, register it
$this->attributes['ExtensionNamespaces'][$id] = $ns['name'];
}
if ( isset( $ns['gender'] ) ) {
$this->globals['wgExtraGenderNamespaces'][$id] = $ns['gender'];
}