jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/398654 )
Change subject: Change BlueSpice\Services to be decorator ...................................................................... Change BlueSpice\Services to be decorator ... of MediaWikiServices Change-Id: I1d4b1eb462e9942a2f63b53087c38ba188e93ee1 --- M src/Services.php A src/ServicesDecorator.php 2 files changed, 406 insertions(+), 9 deletions(-) Approvals: Robert Vogel: Looks good to me, approved jenkins-bot: Verified diff --git a/src/Services.php b/src/Services.php index 5f8f51d..5ce168e 100644 --- a/src/Services.php +++ b/src/Services.php @@ -4,14 +4,14 @@ use MediaWiki\MediaWikiServices; -class Services extends MediaWikiServices { +class Services extends ServicesDecorator { /** * * @return ExtensionRegistry */ public function getBSExtensionRegistry() { - return $this->getService( 'BSExtensionRegistry' ); + return $this->decoratedServices->getService( 'BSExtensionRegistry' ); } /** @@ -19,7 +19,7 @@ * @return ExtensionFactory */ public function getBSExtensionFactory() { - return $this->getService( 'BSExtensionFactory' ); + return $this->decoratedServices->getService( 'BSExtensionFactory' ); } /** @@ -27,7 +27,7 @@ * @return ConfigDefinitionFactory */ public function getBSConfigDefinitionFactory() { - return $this->getService( 'BSConfigDefinitionFactory' ); + return $this->decoratedServices->getService( 'BSConfigDefinitionFactory' ); } /** @@ -35,7 +35,7 @@ * @return DynamicFileDispatcher\Factory */ public function getBSDynamicFileDispatcherFactory() { - return $this->getService( 'BSDynamicFileDispatcherFactory' ); + return $this->decoratedServices->getService( 'BSDynamicFileDispatcherFactory' ); } /** @@ -43,7 +43,7 @@ * @return DynamicFileDispatcher\UrlBuilder */ public function getBSDynamicFileDispatcherUrlBuilder() { - return $this->getService( 'BSDynamicFileDispatcherUrlBuilder' ); + return $this->decoratedServices->getService( 'BSDynamicFileDispatcherUrlBuilder' ); } /** @@ -51,7 +51,7 @@ * @return EntityRegistry */ public function getBSEntityRegistry() { - return $this->getService( 'BSEntityRegistry' ); + return $this->decoratedServices->getService( 'BSEntityRegistry' ); } /** @@ -59,7 +59,7 @@ * @return EntityConfigFactory */ public function getBSEntityConfigFactory() { - return $this->getService( 'BSEntityConfigFactory' ); + return $this->decoratedServices->getService( 'BSEntityConfigFactory' ); } /** @@ -67,6 +67,6 @@ * @return EntityFactory */ public function getBSEntityFactory() { - return $this->getService( 'BSEntityFactory' ); + return $this->decoratedServices->getService( 'BSEntityFactory' ); } } \ No newline at end of file diff --git a/src/ServicesDecorator.php b/src/ServicesDecorator.php new file mode 100644 index 0000000..07a4008 --- /dev/null +++ b/src/ServicesDecorator.php @@ -0,0 +1,397 @@ +<?php + +namespace BlueSpice; + +use MediaWiki\MediaWikiServices; +use MediaWiki\Services\ServiceContainer; + +class ServicesDecorator extends ServiceContainer { + + /** + * @var Services|null + */ + protected static $instance = null; + + /** + * Returns the global default instance of the top level service locator. + * + * @since 1.27 + * + * The default instance is initialized using the service instantiator functions + * defined in ServiceWiring.php. + * + * @note This should only be called by static functions! The instance returned here + * should not be passed around! Objects that need access to a service should have + * that service injected into the constructor, never a service locator! + * + * @return Services + */ + public static function getInstance() { + if ( static::$instance === null ) { + static::$instance = static::newInstance( MediaWikiServices::getInstance() ); + } + + return static::$instance; + } + + /** + * + * @var MediaWikiServices + */ + protected $decoratedServices = null; + + public function __construct( $services ) { + $this->decoratedServices = $services; + } + + /** + * @params MediaWikiServices + * @return Services + * @throws MWException + * @throws \FatalError + */ + private static function newInstance( $services ) { + $instance = new static( $services ); + + \Hooks::run( 'BlueSpiceServices', [ $instance ] ); + + return $instance; + } + + /** + * Returns a service object of the kind associated with $name. + * Services instances are instantiated lazily, on demand. + * This method may or may not return the same service instance + * when called multiple times with the same $name. + * + * @note Rather than calling this method directly, it is recommended to provide + * getters with more meaningful names and more specific return types, using + * a subclass or wrapper. + * + * @see redefineService(). + * + * @param string $name The service name + * + * @throws NoSuchServiceException if $name is not a known service. + * @throws ContainerDisabledException if this container has already been destroyed. + * @throws ServiceDisabledException if the requested service has been disabled. + * + * @return object The service instance + */ + public function getService( $name ) { + return $this->decoratedServices->getService( $name ); + } + + /** + * Returns the Config object containing the bootstrap configuration. + * Bootstrap configuration would typically include database credentials + * and other information that may be needed before the ConfigFactory + * service can be instantiated. + * + * @note This should only be used during bootstrapping, in particular + * when creating the MainConfig service. Application logic should + * use getMainConfig() to get a Config instances. + * + * @since 1.27 + * @return Config + */ + public function getBootstrapConfig() { + return $this->decoratedServices->getService( 'BootstrapConfig' ); + } + + /** + * @since 1.27 + * @return ConfigFactory + */ + public function getConfigFactory() { + return $this->decoratedServices->getService( 'ConfigFactory' ); + } + + /** + * Returns the Config object that provides configuration for MediaWiki core. + * This may or may not be the same object that is returned by getBootstrapConfig(). + * + * @since 1.27 + * @return Config + */ + public function getMainConfig() { + return $this->decoratedServices->getService( 'MainConfig' ); + } + + /** + * @since 1.27 + * @return SiteLookup + */ + public function getSiteLookup() { + return $this->decoratedServices->getService( 'SiteLookup' ); + } + + /** + * @since 1.27 + * @return SiteStore + */ + public function getSiteStore() { + return $this->decoratedServices->getService( 'SiteStore' ); + } + + /** + * @since 1.28 + * @return InterwikiLookup + */ + public function getInterwikiLookup() { + return $this->decoratedServices->getService( 'InterwikiLookup' ); + } + + /** + * @since 1.27 + * @return IBufferingStatsdDataFactory + */ + public function getStatsdDataFactory() { + return $this->decoratedServices->getService( 'StatsdDataFactory' ); + } + + /** + * @since 1.27 + * @return EventRelayerGroup + */ + public function getEventRelayerGroup() { + return $this->decoratedServices->getService( 'EventRelayerGroup' ); + } + + /** + * @since 1.27 + * @return SearchEngine + */ + public function newSearchEngine() { + // New engine object every time, since they keep state + return $this->decoratedServices->getService( 'SearchEngineFactory' )->create(); + } + + /** + * @since 1.27 + * @return SearchEngineFactory + */ + public function getSearchEngineFactory() { + return $this->decoratedServices->getService( 'SearchEngineFactory' ); + } + + /** + * @since 1.27 + * @return SearchEngineConfig + */ + public function getSearchEngineConfig() { + return $this->decoratedServices->getService( 'SearchEngineConfig' ); + } + + /** + * @since 1.27 + * @return SkinFactory + */ + public function getSkinFactory() { + return $this->decoratedServices->getService( 'SkinFactory' ); + } + + /** + * @since 1.28 + * @return LBFactory + */ + public function getDBLoadBalancerFactory() { + return $this->decoratedServices->getService( 'DBLoadBalancerFactory' ); + } + + /** + * @since 1.28 + * @return LoadBalancer The main DB load balancer for the local wiki. + */ + public function getDBLoadBalancer() { + return $this->decoratedServices->getService( 'DBLoadBalancer' ); + } + + /** + * @since 1.28 + * @return WatchedItemStoreInterface + */ + public function getWatchedItemStore() { + return $this->decoratedServices->getService( 'WatchedItemStore' ); + } + + /** + * @since 1.28 + * @return WatchedItemQueryService + */ + public function getWatchedItemQueryService() { + return $this->decoratedServices->getService( 'WatchedItemQueryService' ); + } + + /** + * @since 1.28 + * @return CryptRand + */ + public function getCryptRand() { + return $this->decoratedServices->getService( 'CryptRand' ); + } + + /** + * @since 1.28 + * @return CryptHKDF + */ + public function getCryptHKDF() { + return $this->decoratedServices->getService( 'CryptHKDF' ); + } + + /** + * @since 1.28 + * @return MediaHandlerFactory + */ + public function getMediaHandlerFactory() { + return $this->decoratedServices->getService( 'MediaHandlerFactory' ); + } + + /** + * @since 1.28 + * @return MimeAnalyzer + */ + public function getMimeAnalyzer() { + return $this->decoratedServices->getService( 'MimeAnalyzer' ); + } + + /** + * @since 1.28 + * @return ProxyLookup + */ + public function getProxyLookup() { + return $this->decoratedServices->getService( 'ProxyLookup' ); + } + + /** + * @since 1.29 + * @return Parser + */ + public function getParser() { + return $this->decoratedServices->getService( 'Parser' ); + } + + /** + * @since 1.30 + * @return ParserCache + */ + public function getParserCache() { + return $this->decoratedServices->getService( 'ParserCache' ); + } + + /** + * @since 1.28 + * @return GenderCache + */ + public function getGenderCache() { + return $this->decoratedServices->getService( 'GenderCache' ); + } + + /** + * @since 1.28 + * @return LinkCache + */ + public function getLinkCache() { + return $this->decoratedServices->getService( 'LinkCache' ); + } + + /** + * @since 1.28 + * @return LinkRendererFactory + */ + public function getLinkRendererFactory() { + return $this->decoratedServices->getService( 'LinkRendererFactory' ); + } + + /** + * LinkRenderer instance that can be used + * if no custom options are needed + * + * @since 1.28 + * @return LinkRenderer + */ + public function getLinkRenderer() { + return $this->decoratedServices->getService( 'LinkRenderer' ); + } + + /** + * @since 1.28 + * @return TitleFormatter + */ + public function getTitleFormatter() { + return $this->decoratedServices->getService( 'TitleFormatter' ); + } + + /** + * @since 1.28 + * @return TitleParser + */ + public function getTitleParser() { + return $this->decoratedServices->getService( 'TitleParser' ); + } + + /** + * @since 1.28 + * @return \BagOStuff + */ + public function getMainObjectStash() { + return $this->decoratedServices->getService( 'MainObjectStash' ); + } + + /** + * @since 1.28 + * @return \WANObjectCache + */ + public function getMainWANObjectCache() { + return $this->decoratedServices->getService( 'MainWANObjectCache' ); + } + + /** + * @since 1.28 + * @return \BagOStuff + */ + public function getLocalServerObjectCache() { + return $this->decoratedServices->getService( 'LocalServerObjectCache' ); + } + + /** + * @since 1.28 + * @return VirtualRESTServiceClient + */ + public function getVirtualRESTServiceClient() { + return $this->decoratedServices->getService( 'VirtualRESTServiceClient' ); + } + + /** + * @since 1.29 + * @return \ConfiguredReadOnlyMode + */ + public function getConfiguredReadOnlyMode() { + return $this->decoratedServices->getService( 'ConfiguredReadOnlyMode' ); + } + + /** + * @since 1.29 + * @return \ReadOnlyMode + */ + public function getReadOnlyMode() { + return $this->decoratedServices->getService( 'ReadOnlyMode' ); + } + + /** + * @since 1.30 + * @return CommandFactory + */ + public function getShellCommandFactory() { + return $this->decoratedServices->getService( 'ShellCommandFactory' ); + } + + /** + * @since 1.31 + * @return \ExternalStoreFactory + */ + public function getExternalStoreFactory() { + return $this->decoratedServices->getService( 'ExternalStoreFactory' ); + } + +} -- To view, visit https://gerrit.wikimedia.org/r/398654 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I1d4b1eb462e9942a2f63b53087c38ba188e93ee1 Gerrit-PatchSet: 3 Gerrit-Project: mediawiki/extensions/BlueSpiceFoundation Gerrit-Branch: master Gerrit-Owner: Robert Vogel <vo...@hallowelt.biz> Gerrit-Reviewer: Ljonka <l.verhovs...@gmail.com> Gerrit-Reviewer: Mglaser <gla...@hallowelt.biz> Gerrit-Reviewer: Pwirth <wi...@hallowelt.biz> Gerrit-Reviewer: Robert Vogel <vo...@hallowelt.biz> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits