Pwirth has uploaded a new change for review. ( 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(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/BlueSpiceFoundation refs/changes/83/394083/3 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: newchange Gerrit-Change-Id: Icb809c8397d7dc1abe2544ac8f20c77c021240ad Gerrit-PatchSet: 3 Gerrit-Project: mediawiki/extensions/BlueSpiceFoundation Gerrit-Branch: master Gerrit-Owner: Pwirth <wi...@hallowelt.biz> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits