Robert Vogel has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/394083 )
Change subject: BSFoudation: Client side config rendering
......................................................................
BSFoudation: Client side config rendering
* used MediaWikiServices for the new ConfigDefinitionFactory
* added a getter for services to the hook handler base class
* fixed reference for ResourceLoaderGetConfigVars base class
* added method isRLConfigVar to config definition to decide wich config gets
handed over to the resourceLoader
Change-Id: Icb809c8397d7dc1abe2544ac8f20c77c021240ad
---
M includes/ServiceWiring.php
M src/ConfigDefinition.php
M src/ConfigDefinition/FileExtensions.php
M src/ConfigDefinition/ImageExtensions.php
A src/ConfigDefinitionFactory.php
M src/Hook.php
M src/Hook/ResourceLoaderGetConfigVars.php
M src/Hook/ResourceLoaderGetConfigVars/AddBSGConfig.php
8 files changed, 130 insertions(+), 52 deletions(-)
Approvals:
Robert Vogel: Looks good to me, approved
jenkins-bot: Verified
diff --git a/includes/ServiceWiring.php b/includes/ServiceWiring.php
index 865a084..653b764 100644
--- a/includes/ServiceWiring.php
+++ b/includes/ServiceWiring.php
@@ -4,6 +4,12 @@
return [
+ 'BSConfigDefinitionFactory' => function ( MediaWikiServices $services )
{
+ return new \BlueSpice\ConfigDefinitionFactory(
+ $services->getConfigFactory()->makeConfig( 'bsg' )
+ );
+ },
+
'BSDynamicFileDispatcherFactory' => function ( MediaWikiServices
$services ) {
return new \BlueSpice\DynamicFileDispatcher\Factory(
$services->getConfigFactory()->makeConfig( 'bsg' )
diff --git a/src/ConfigDefinition.php b/src/ConfigDefinition.php
index 41d7002..ad10069 100644
--- a/src/ConfigDefinition.php
+++ b/src/ConfigDefinition.php
@@ -4,8 +4,6 @@
abstract class ConfigDefinition implements ISetting {
- protected static $configDefinitions = null;
-
/**
*
* @var \IContextSource
@@ -30,55 +28,10 @@
* @param \Config $config
* @param string $name
*/
- protected function __construct( $context, $config, $name ) {
+ public function __construct( $context, $config, $name ) {
$this->context = $context;
$this->config = $config;
$this->name = $name;
- }
-
- /**
- *
- * @param string $name
- * @param \Config $config
- * @return ConfigDefinition | false
- */
- public static function factory( $name, \Config $config = null ) {
- if( !$config ) {
- $config = \MediaWiki\MediaWikiServices::getInstance()
- ->getConfigFactory()->makeConfig( 'bsg' );
- }
- if( empty( $name ) || !$config->has( $name ) ) {
- return false;
- }
- $definitions = static::getConfigDefinitions();
- if( !isset( $definitions[$name] ) ) {
- return false;
- }
- if( !is_callable( $definitions[$name] ) ) {
- return false;
- }
- return call_user_func_array( $definitions[$name], [
- \RequestContext::getMain(),
- $config,
- $name,
- ]);
- }
-
- protected static function getConfigDefinitions() {
- if( static::$configDefinitions ) {
- return static::$configDefinitions;
- }
- static::$configDefinitions = [];
- foreach( $GLOBALS['bsgExtensions'] as $extName =>
$extDefinition ) {
- if( empty( $extDefinition['configDefinitions'] ) ) {
- continue;
- }
- static::$configDefinitions = array_merge(
- static::$configDefinitions,
- $extDefinition['configDefinitions']
- );
- }
- return static::$configDefinitions;
}
/**
@@ -138,10 +91,22 @@
];
}
+ /**
+ * Returns if the config is stored in the database
+ * @return boolean
+ */
public function isStored() {
return false;
}
+ /**
+ * Returns if the config is a ResourceLoader variable
+ * @return boolean
+ */
+ public function isRLConfigVar() {
+ return false;
+ }
+
protected function makeFormFieldParams() {
return [
'name' => $this->getName(),
diff --git a/src/ConfigDefinition/FileExtensions.php
b/src/ConfigDefinition/FileExtensions.php
index be65e21..f599125 100644
--- a/src/ConfigDefinition/FileExtensions.php
+++ b/src/ConfigDefinition/FileExtensions.php
@@ -11,4 +11,8 @@
public function isStored() {
return true;
}
+
+ public function isRLConfigVar() {
+ return true;
+ }
}
diff --git a/src/ConfigDefinition/ImageExtensions.php
b/src/ConfigDefinition/ImageExtensions.php
index 0ff151f..2b51452 100644
--- a/src/ConfigDefinition/ImageExtensions.php
+++ b/src/ConfigDefinition/ImageExtensions.php
@@ -11,4 +11,8 @@
public function isStored() {
return true;
}
+
+ public function isRLConfigVar() {
+ return true;
+ }
}
diff --git a/src/ConfigDefinitionFactory.php b/src/ConfigDefinitionFactory.php
new file mode 100644
index 0000000..1369950
--- /dev/null
+++ b/src/ConfigDefinitionFactory.php
@@ -0,0 +1,72 @@
+<?php
+
+namespace BlueSpice;
+
+class ConfigDefinitionFactory {
+
+ protected $configDefinitions = null;
+
+ /**
+ *
+ * @var \Config
+ */
+ protected $config = null;
+
+ /**
+ * @param \Config $config
+ * @return Entity | null
+ */
+ public function __construct( $config ) {
+ $this->config = $config;
+ }
+
+ /**
+ *
+ * @param string $name
+ * @return ConfigDefinition | false
+ */
+ public function factory( $name ) {
+ if( empty( $name ) || !$this->config->has( $name ) ) {
+ return false;
+ }
+ $definitions = $this->getConfigDefinitions();
+ if( !isset( $definitions[$name] ) ) {
+ return false;
+ }
+ if( !is_callable( $definitions[$name] ) ) {
+ return false;
+ }
+ return call_user_func_array( $definitions[$name], [
+ \RequestContext::getMain(),
+ $this->config,
+ $name,
+ ]);
+ }
+
+ /**
+ *
+ * @return array
+ */
+ public function getRegisteredDefinitions() {
+ return array_keys( $this->getConfigDefinitions() );
+ }
+
+ protected function getConfigDefinitions() {
+ if( $this->configDefinitions ) {
+ return $this->configDefinitions;
+ }
+ $this->configDefinitions = [];
+ //TODO: This need to be changed in the future, using globals is
not
+ //cool! You may implement \BlueSpice\ExtensionManager ;)
+ foreach( $GLOBALS['bsgExtensions'] as $extName =>
$extDefinition ) {
+ if( empty( $extDefinition['configDefinitions'] ) ) {
+ continue;
+ }
+ $this->configDefinitions = array_merge(
+ $this->configDefinitions,
+ $extDefinition['configDefinitions']
+ );
+ }
+ return $this->configDefinitions;
+ }
+}
diff --git a/src/Hook.php b/src/Hook.php
index b464e0d..e221aa3 100644
--- a/src/Hook.php
+++ b/src/Hook.php
@@ -26,6 +26,8 @@
*/
namespace BlueSpice;
+use MediaWiki\MediaWikiServices;
+
abstract class Hook {
/**
@@ -83,6 +85,14 @@
return $this->config;
}
+ /**
+ *
+ * @return MediaWikiServices
+ */
+ protected function getServices() {
+ return MediaWikiServices::getInstance();
+ }
+
public function process() {
if( $this->skipProcessing() ) {
return true;
diff --git a/src/Hook/ResourceLoaderGetConfigVars.php
b/src/Hook/ResourceLoaderGetConfigVars.php
index 77e5ee4..9603a67 100644
--- a/src/Hook/ResourceLoaderGetConfigVars.php
+++ b/src/Hook/ResourceLoaderGetConfigVars.php
@@ -59,6 +59,6 @@
public function __construct( $context, $config, &$vars ) {
parent::__construct( $context, $config );
- $this->vars = $vars;
+ $this->vars = &$vars;
}
}
\ No newline at end of file
diff --git a/src/Hook/ResourceLoaderGetConfigVars/AddBSGConfig.php
b/src/Hook/ResourceLoaderGetConfigVars/AddBSGConfig.php
index 7675de8..0014e74 100644
--- a/src/Hook/ResourceLoaderGetConfigVars/AddBSGConfig.php
+++ b/src/Hook/ResourceLoaderGetConfigVars/AddBSGConfig.php
@@ -3,16 +3,33 @@
namespace BlueSpice\Hook\ResourceLoaderGetConfigVars;
use BlueSpice\Hook\ResourceLoaderGetConfigVars;
+use BlueSpice\ConfigDefinition;
class AddBSGConfig extends ResourceLoaderGetConfigVars {
protected function doProcess() {
+ $this->vars = array_merge(
+ $this->vars,
+ $this->getSettingsToExpose()
+ );
return true;
}
protected function getSettingsToExpose() {
- return [
-
- ];
+ $cfgVars = [];
+ $cfgDefFactory = $this->getServices()->getService(
+ 'BSConfigDefinitionFactory'
+ );
+ foreach( $cfgDefFactory->getRegisteredDefinitions() as $name ) {
+ $cfgDef = $cfgDefFactory->factory( $name );
+ if( !$cfgDef instanceof ConfigDefinition ) {
+ continue;
+ }
+ if( !$cfgDef->isRLConfigVar() ) {
+ continue;
+ }
+ $cfgVars[ $cfgDef->getVariableName() ] =
$cfgDef->getValue();
+ }
+ return $cfgVars;
}
}
\ No newline at end of file
--
To view, visit https://gerrit.wikimedia.org/r/394083
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Icb809c8397d7dc1abe2544ac8f20c77c021240ad
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/BlueSpiceFoundation
Gerrit-Branch: master
Gerrit-Owner: Pwirth <[email protected]>
Gerrit-Reviewer: Robert Vogel <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits