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

Reply via email to