BryanDavis has uploaded a new change for review.
https://gerrit.wikimedia.org/r/277701
Change subject: Allow global extension to be disabled per-wiki
......................................................................
Allow global extension to be disabled per-wiki
Some extensions (e.g. AuthPlugins) are mutually exclusive. Roles like
role::centralauth that setup an extension globally for the
MediaWiki-Vagrant managed wiki farm are the norm due to simplicity.
Another role however may want to setup a single wiki that deviates from
the norm for the rest of the wiki farm.
This change introduces a method for disabling an extension that has been
installed globally on a per-wiki basis using the new $wmvExtensions
global PHP variable. This variable is expected to be an array with
extension names as keys and booleans as values. If an extension is not
listed in the array or maps to true then it will be loaded. If it maps
to anything else it will not be loaded.
::mediawiki::wiki is extended to allow providing a hash of additional
$wgConf settings for the wiki. This can be used to set $wmvExtensions
flags or change any other setting currently handled by $wgConf.
Bug: T128501
Change-Id: I2ad8cc316d99c27e1d92c2bb776a4224e57ec08c
---
M puppet/modules/mediawiki/manifests/extension.pp
M puppet/modules/mediawiki/manifests/wiki.pp
M puppet/modules/mediawiki/templates/extension.php.erb
M puppet/modules/mediawiki/templates/multiwiki/LoadWgConf.php.erb
M puppet/modules/mediawiki/templates/wiki/wgConf.php.erb
5 files changed, 63 insertions(+), 12 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/vagrant
refs/changes/01/277701/1
diff --git a/puppet/modules/mediawiki/manifests/extension.pp
b/puppet/modules/mediawiki/manifests/extension.pp
index abf8bd1..1f567fb 100644
--- a/puppet/modules/mediawiki/manifests/extension.pp
+++ b/puppet/modules/mediawiki/manifests/extension.pp
@@ -173,6 +173,7 @@
ensure => $ensure,
wiki => $ext_wiki,
header => template('mediawiki/extension.php.erb'),
+ footer => '}', # Close if opened in header
values => $settings,
priority => $priority,
require => Git::Clone[$ext_repo],
diff --git a/puppet/modules/mediawiki/manifests/wiki.pp
b/puppet/modules/mediawiki/manifests/wiki.pp
index 8c17fe2..dc0fab8 100644
--- a/puppet/modules/mediawiki/manifests/wiki.pp
+++ b/puppet/modules/mediawiki/manifests/wiki.pp
@@ -61,11 +61,33 @@
# Full base URL of host (example: 'http://mywiki.net:8080').
#
# [*primary_wiki*]
-# Whether this is the primary wiki (defaults false)
+# Whether this is the primary wiki (default: false)
#
# [*priority*]
# Position of this wiki in foreachwiki. Uses the scale of
-# the LOAD_ constants from site.php. Default is $LOAD_NORMAL.
+# the LOAD_ constants from site.php. (default: $LOAD_NORMAL)
+#
+# [*wgconf*]
+# Hash of extra wgConf settings for this wiki. One use case for this is
+# selectively disabling a globally installed extension for a particular
+# wiki by setting wmvExtensions[<extension name>] = false. (default: {})
+#
+# === Examples
+#
+# Add a wiki named 'testwiki':
+#
+# mediawiki::wiki { 'test': }
+#
+# Disable the CentralAuth extension on a wiki named 'nocawiki':
+#
+# mediawiki::wiki { 'noca':
+# wgconf => {
+# 'wmvExtensions' => {
+# 'CentralAuth' => false,
+# },
+# },
+# }
+#
define mediawiki::wiki(
$wiki_name = $title,
$db_host = $::mysql::grant_host_name,
@@ -81,6 +103,7 @@
$server_url =
"http://${title}${::mediawiki::multiwiki::base_domain}${::port_fragment}",
$primary_wiki = false,
$priority = $::LOAD_NORMAL,
+ $wgconf = {},
) {
include ::mwv
include ::mediawiki
diff --git a/puppet/modules/mediawiki/templates/extension.php.erb
b/puppet/modules/mediawiki/templates/extension.php.erb
index 21f9a97..cb8e93b 100644
--- a/puppet/modules/mediawiki/templates/extension.php.erb
+++ b/puppet/modules/mediawiki/templates/extension.php.erb
@@ -1,6 +1,12 @@
-if ( class_exists( 'ExtensionRegistry' ) && file_exists( "$IP/extensions/<%=
@ext_name %>/extension.json" ) ) {
- wfLoadExtension( '<%= @ext_name %>' );
-} elseif ( file_exists( "$IP/extensions/<%= @ext_name %>/<%= @ext_entrypoint
%>" ) ) {
- include_once "$IP/extensions/<%= @ext_name %>/<%= @ext_entrypoint %>";
-}
+// Load extension
+if ( !isset( $wmvExtensions['<%= @ext_name %>'] ) ||
+ $wmvExtensions['<%= @ext_name %>'] === true
+) {
+ if ( class_exists( 'ExtensionRegistry' ) &&
+ file_exists( "$IP/extensions/<%= @ext_name %>/extension.json" )
+ ) {
+ wfLoadExtension( '<%= @ext_name %>' );
+ } elseif ( file_exists( "$IP/extensions/<%= @ext_name %>/<%=
@ext_entrypoint %>" ) ) {
+ include_once "$IP/extensions/<%= @ext_name %>/<%=
@ext_entrypoint %>";
+ }
diff --git a/puppet/modules/mediawiki/templates/multiwiki/LoadWgConf.php.erb
b/puppet/modules/mediawiki/templates/multiwiki/LoadWgConf.php.erb
index a381b0b..a21b30b 100644
--- a/puppet/modules/mediawiki/templates/multiwiki/LoadWgConf.php.erb
+++ b/puppet/modules/mediawiki/templates/multiwiki/LoadWgConf.php.erb
@@ -49,17 +49,20 @@
'default' => '/wiki/$1',
),
'wgScriptPath' => array(
- 'default'=>'/w',
+ 'default' => '/w',
),
'wgLogo' => array(
- 'default'=>'/mediawiki-vagrant.png',
+ 'default' => '/mediawiki-vagrant.png',
),
'wgSitename' => array(
- 'default'=>'devwiki'
+ 'default' => 'devwiki'
+ ),
+ 'wmvExtensions' => array(
+ 'default' => array(),
),
);
-// Need settings for all wikis so cross-wiki urls generate
+// Load wgConf settings for all wikis
foreach ( glob( __DIR__ . '/*/wgConf.php' ) as $file) {
- include_once $file;
+ require_once $file;
}
diff --git a/puppet/modules/mediawiki/templates/wiki/wgConf.php.erb
b/puppet/modules/mediawiki/templates/wiki/wgConf.php.erb
index c3c3d3e..1febaff 100644
--- a/puppet/modules/mediawiki/templates/wiki/wgConf.php.erb
+++ b/puppet/modules/mediawiki/templates/wiki/wgConf.php.erb
@@ -11,3 +11,21 @@
$wgConf->settings['wgUploadDirectory']['<%= @db_name %>'] = '<%= @upload_dir
%>';
$wgConf->settings['wgUploadPath']['<%= @db_name %>'] = '<%= @upload_path %>';
$wgConf->settings['wgDebugLogFile']['<%= @db_name %>'] = '<%= @debug_log_file
%>';
+<%=
+ def phpize(o)
+ case o
+ when nil then
+ 'NULL'
+ when Array
+ 'array( ' + o.map { |x| phpize(x) }.join(', ') + ' )'
+ when Hash
+ 'array( ' + o.sort.map { |k,v| k.to_pson + ' => ' +
phpize(v) }.join(', ') + ' )'
+ else
+ o.include?('.') ? Float(o).to_s : Integer(o).to_s
rescue o.to_pson
+ end
+ end
+
+ @wgconf.sort.map { |k,v|
+ "$wgConf->settings['#{k}']['#{@db_name}'] = #{phpize(v)};"
+ }.join("\n")
+%>
--
To view, visit https://gerrit.wikimedia.org/r/277701
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I2ad8cc316d99c27e1d92c2bb776a4224e57ec08c
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/vagrant
Gerrit-Branch: master
Gerrit-Owner: BryanDavis <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits