[MediaWiki-commits] [Gerrit] mediawiki...MobileFrontend[specialpages]: Mobile Frontend feature management system
jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/402938 ) Change subject: Mobile Frontend feature management system .. Mobile Frontend feature management system Bug: T182362 Change-Id: If7ebace5ace1b2f191a53e6a1e8bc373307af08f --- M extension.json M includes/MobileFrontend.hooks.php M includes/ServiceWiring.php A includes/features/Feature.php A includes/features/FeaturesManager.php A includes/features/IFeature.php 6 files changed, 152 insertions(+), 2 deletions(-) Approvals: jenkins-bot: Verified Jdlrobson: Looks good to me, approved diff --git a/extension.json b/extension.json index d0f5318..f4935db 100644 --- a/extension.json +++ b/extension.json @@ -46,7 +46,8 @@ "MobileFrontendAlias": "MobileFrontend.alias.php" }, "AutoloadNamespaces": { - "MobileFrontend\\Transforms\\": "includes/transforms/" + "MobileFrontend\\Transforms\\": "includes/transforms/", + "MobileFrontend\\Features\\" : "includes/features/" }, "AutoloadClasses": { "ExtMobileFrontend": "includes/MobileFrontend.body.php", diff --git a/includes/MobileFrontend.hooks.php b/includes/MobileFrontend.hooks.php index cd7f519..6fbb210 100644 --- a/includes/MobileFrontend.hooks.php +++ b/includes/MobileFrontend.hooks.php @@ -122,6 +122,13 @@ $skin = self::getDefaultMobileSkin( $context, $mobileContext ); Hooks::run( 'RequestContextCreateSkinMobile', [ $mobileContext, $skin ] ); + // TODO, do we want to have a specific hook just for Mobile Features initialization + // or do we want to reuse the RequestContextCreateSkinMobile and use MediawikiService + // to retrieve the FeaturesManager + $featureManager = \MediaWiki\MediaWikiServices::getInstance() + ->getService( 'MobileFrontend.FeaturesManager' ); + Hooks::run( 'MobileFrontendFeaturesRegistration', [ $featureManager ] ); + return false; } diff --git a/includes/ServiceWiring.php b/includes/ServiceWiring.php index efc21e1..ee9abfb 100644 --- a/includes/ServiceWiring.php +++ b/includes/ServiceWiring.php @@ -1,10 +1,28 @@ function ( MediaWikiServices $services ) { return $services->getService( 'ConfigFactory' ) ->makeConfig( 'mobilefrontend' ); - } + }, + + 'MobileFrontend.FeaturesManager' => function ( MediaWikiServices $services ) { + $config = $services->getService( 'MobileFrontend.Config' ); + + $manager = new FeaturesManager(); + // register default features + // maybe we can get all available features by looping through MobileFrontend.Feature.* + // and register it here, it would be nice to have something like + // $services->getAllByPrefix('MobileFrontend.Feature') + $manager->registerFeature( new Feature( 'MFEnableWikidataDescriptions', + $config->get( 'MFEnableWikidataDescriptions' ) ) ); + $manager->registerFeature( new Feature( 'MFLazyLoadReferences', + $config->get( 'MFLazyLoadReferences' ) ) ); + + return $manager; + }, ]; diff --git a/includes/features/Feature.php b/includes/features/Feature.php new file mode 100644 index 000..9627d41 --- /dev/null +++ b/includes/features/Feature.php @@ -0,0 +1,59 @@ +name = $name; + $this->options = $options; + } + + /** +* @inheritDoc +*/ + public function isAvailable( $mode ) { + return array_key_exists( $mode, $this->options ) ? + $this->options[ $mode ] : self::DEFAULT_ENABLED_MODE; + } + + /** +* @inheritDoc +*/ + public function getId() { + return $this->name; + } + + /** +* @inheritDoc +*/ + public function getNameKey() { + return 'mobile-frontend-mobile-option-' . $this->name; + } + + /** +* @inheritDoc +*/ + public function getDescriptionKey() { + return 'mobile-frontend-mobile-option-' . $this->name . '-description'; + } + +} diff --git a/includes/features/FeaturesManager.php b/includes/features/FeaturesManager.php new file mode 100644 index 000..85ee423 --- /dev/null +++ b/includes/features/FeaturesManager.php @@ -0,0 +1,31 @@ + +*/ + private $features = []; + + /** +* Register a new MobileFronted feature +* @param IFeature $feature Feature to register +*/ + public function registerFeature( IFeature $feature ) { + $this->features[] = $feature; + } + + /** +* @param string $mode Mode +* @return array +
[MediaWiki-commits] [Gerrit] mediawiki...MobileFrontend[specialpages]: Mobile Frontend feature management system
Pmiazga has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/402938 ) Change subject: Mobile Frontend feature management system .. Mobile Frontend feature management system Bug: T182362 Change-Id: If7ebace5ace1b2f191a53e6a1e8bc373307af08f --- A ServiceWiring.php M extension.json M includes/MobileFrontend.hooks.php M includes/ServiceWiring.php A includes/features/Feature.php A includes/features/FeaturesManager.php A includes/features/IFeature.php M includes/specials/SpecialMobileOptions.php 8 files changed, 197 insertions(+), 13 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/MobileFrontend refs/changes/38/402938/1 diff --git a/ServiceWiring.php b/ServiceWiring.php new file mode 100644 index 000..ee9abfb --- /dev/null +++ b/ServiceWiring.php @@ -0,0 +1,28 @@ + function ( MediaWikiServices $services ) { + return $services->getService( 'ConfigFactory' ) + ->makeConfig( 'mobilefrontend' ); + }, + + 'MobileFrontend.FeaturesManager' => function ( MediaWikiServices $services ) { + $config = $services->getService( 'MobileFrontend.Config' ); + + $manager = new FeaturesManager(); + // register default features + // maybe we can get all available features by looping through MobileFrontend.Feature.* + // and register it here, it would be nice to have something like + // $services->getAllByPrefix('MobileFrontend.Feature') + $manager->registerFeature( new Feature( 'MFEnableWikidataDescriptions', + $config->get( 'MFEnableWikidataDescriptions' ) ) ); + $manager->registerFeature( new Feature( 'MFLazyLoadReferences', + $config->get( 'MFLazyLoadReferences' ) ) ); + + return $manager; + }, +]; diff --git a/extension.json b/extension.json index 54c8107..3c0aae6 100644 --- a/extension.json +++ b/extension.json @@ -45,6 +45,9 @@ "ExtensionMessagesFiles": { "MobileFrontendAlias": "MobileFrontend.alias.php" }, + "AutoloadNamespaces": { + "MobileFrontend\\Features\\" : "includes/features/" + }, "AutoloadClasses": { "ExtMobileFrontend": "includes/MobileFrontend.body.php", "MobileFrontendHooks": "includes/MobileFrontend.hooks.php", diff --git a/includes/MobileFrontend.hooks.php b/includes/MobileFrontend.hooks.php index 91b943d..07614f9 100644 --- a/includes/MobileFrontend.hooks.php +++ b/includes/MobileFrontend.hooks.php @@ -122,6 +122,13 @@ $skin = self::getDefaultMobileSkin( $context, $mobileContext ); Hooks::run( 'RequestContextCreateSkinMobile', [ $mobileContext, $skin ] ); + // TODO, do we want to have a specific hook just for Mobile Features initialization + // or do we want to reuse the RequestContextCreateSkinMobile and use MediawikiService + // to retrieve the FeaturesManager + $featureManager = \MediaWiki\MediaWikiServices::getInstance() + ->getService( 'MobileFrontend.FeaturesManager' ); + Hooks::run( 'MobileFrontendFeaturesRegistration', [ $featureManager ] ); + return false; } diff --git a/includes/ServiceWiring.php b/includes/ServiceWiring.php index efc21e1..ee9abfb 100644 --- a/includes/ServiceWiring.php +++ b/includes/ServiceWiring.php @@ -1,10 +1,28 @@ function ( MediaWikiServices $services ) { return $services->getService( 'ConfigFactory' ) ->makeConfig( 'mobilefrontend' ); - } + }, + + 'MobileFrontend.FeaturesManager' => function ( MediaWikiServices $services ) { + $config = $services->getService( 'MobileFrontend.Config' ); + + $manager = new FeaturesManager(); + // register default features + // maybe we can get all available features by looping through MobileFrontend.Feature.* + // and register it here, it would be nice to have something like + // $services->getAllByPrefix('MobileFrontend.Feature') + $manager->registerFeature( new Feature( 'MFEnableWikidataDescriptions', + $config->get( 'MFEnableWikidataDescriptions' ) ) ); + $manager->registerFeature( new Feature( 'MFLazyLoadReferences', + $config->get( 'MFLazyLoadReferences' ) ) ); + + return $manager; + }, ]; diff --git a/includes/features/Feature.php b/includes/features/Feature.php new file mode 100644 index 000..d03ac88 --- /dev/null +++ b/includes/features/Feature.php @@ -0,0 +1,59 @@ +name = $name; + $this->config = $config; + } + + /** +* @inheritDoc +*/ + public