Файловый менеджер - Редактировать - /var/www/html/mwstake.zip
Ðазад
PK ! C֣� � . mediawiki-component-manifestregistry/README.mdnu �[��� ## MediaWiki Stakeholders Group - Components # ManifestRegistry for MediaWiki Provides a combined registry over all in the `attribute` section registered things in `extension.json` files. **This code is meant to be executed within the MediaWiki application context. No standalone usage is intended.** ## Use in a MediaWiki extension Add `"mwstake/mediawiki-component-manifestregistry": "~2.0"` to the `require` section of your `composer.json` file. Since 2.0 explicit initialization is required. This can be achieved by - either adding `"callback": "mwsInitComponents"` to your `extension.json`/`skin.json` - or calling `mwsInitComponents();` within you extensions/skins custom `callback` method See also [`mwstake/mediawiki-componentloader`](https://github.com/hallowelt/mwstake-mediawiki-componentloader). ### Register values in extension.json ```JSON { "attributes": { "BlueSpiceFoundation": { "RoleRegistry": { "admin": "\\BlueSpice\\Permission\\Role\\Admin::factory", "editor": "\\BlueSpice\\Permission\\Role\\Editor::factory", "reader": "\\BlueSpice\\Permission\\Role\\Reader::factory", "author": "\\BlueSpice\\Permission\\Role\\Author::factory", "reviewer": "\\BlueSpice\\Permission\\Role\\Reviewer::factory", "accountmanager": "\\BlueSpice\\Permission\\Role\\AccountManager::factory" } }, "BlueSpicePrivacy": { "CookieConsentNativeMWCookies": { "notificationFlag": { "group": "necessary", "addPrefix": true } } } }, "manifest_version": 2, } ``` ### Implement in your code ```php $factory = \MediaWiki\MediaWikiServices::getInstance()->getService( 'MWStakeManifestRegistryFactory' ); $registry = $factory->get( 'MyExtensionMyRegistry' ); $myValues = $registry->getValue( 'subValue' ); $allMyValues = $registry->getAllValues(); ``` ## Configuration - `mwsgManifestRegistryOverrides`: Used to overwrite existing registries by either add, remove or merge their values: *Example 1:* ```php $GLOBALS['mwsgManifestRegistryOverrides']['MyRegistry'] = [ 'set' => [ 'ReplaceKey' => 'with new value', ], 'merge' => [ 'AddThisKey' => 'with this value', ], 'remove' => [ 'keyOfValueThatShouldBeRemoved' ] ] ``` PK ! ���& & ? mediawiki-component-manifestregistry/includes/ServiceWiring.phpnu �[��� <?php use MediaWiki\Logger\LoggerFactory; use MediaWiki\MediaWikiServices; use MWStake\MediaWiki\Component\ManifestRegistry\ManifestObjectFactory; use MWStake\MediaWiki\Component\ManifestRegistry\ManifestRegistryFactory; return [ 'MWStakeManifestRegistryFactory' => function ( MediaWikiServices $services ) { $extensionRegistry = ExtensionRegistry::getInstance(); $overrides = $GLOBALS['mwsgManifestRegistryOverrides']; return new ManifestRegistryFactory( $extensionRegistry, $overrides ); }, 'MWStakeManifestObjectFactory' => function ( MediaWikiServices $services ) { $logger = LoggerFactory::getInstance( 'MWStakeComponentManifestRegistry' ); return new ManifestObjectFactory( $services->get( 'MWStakeManifestRegistryFactory' ), $services->getObjectFactory(), $logger ); } ]; PK ! ��gm D mediawiki-component-manifestregistry/src/ManifestRegistryFactory.phpnu �[��� <?php namespace MWStake\MediaWiki\Component\ManifestRegistry; use ExtensionRegistry; class ManifestRegistryFactory { /** * * @var ExtensionRegistry */ private $extensionRegistry = null; /** * * @var array */ private $overrides = []; /** * * @param ExtensionRegistry $extensionRegistry * @param array $overrides */ public function __construct( $extensionRegistry, $overrides ) { $this->extensionRegistry = $extensionRegistry; $this->overrides = $overrides; } /** * * @param string $manifestAttributeKey * @return IRegistry */ public function get( $manifestAttributeKey ) : IRegistry { $registry = new ManifestAttributeBasedRegistry( $manifestAttributeKey, $this->extensionRegistry, $this->overrides ); return $registry; } } PK ! � �� 6 mediawiki-component-manifestregistry/src/IRegistry.phpnu �[��� <?php namespace MWStake\MediaWiki\Component\ManifestRegistry; interface IRegistry { /** * * @param string $key * @param string $default * @return string */ public function getValue( $key, $default = '' ); /** * @return string[] */ public function getAllKeys(); } PK ! �$� � � K mediawiki-component-manifestregistry/src/ManifestAttributeBasedRegistry.phpnu �[��� <?php namespace MWStake\MediaWiki\Component\ManifestRegistry; use ExtensionRegistry; use GlobalVarConfig; class ManifestAttributeBasedRegistry implements IRegistry { public const OVERRIDE_SET = 'set'; public const OVERRIDE_MERGE = 'merge'; public const OVERRIDE_REMOVE = 'remove'; /** * * @var string */ protected $attribName = ''; /** * * @var \ExtensionRegistry */ protected $extensionRegistry = null; /** * * @var array */ protected $overrides = []; /** * * @param string $attribName * @param \ExtensionRegistry|null $extensionRegistry * @param array|null $overrides */ public function __construct( $attribName, $extensionRegistry = null, $overrides = null ) { $this->attribName = $attribName; $this->extensionRegistry = $extensionRegistry; if ( $this->extensionRegistry === null ) { $this->extensionRegistry = ExtensionRegistry::getInstance(); } if ( $overrides === null ) { $config = new GlobalVarConfig( 'mwsgManifestRegistry' ); $overrides = $config->get( 'Overrides' ); } $this->overrides = []; if ( isset( $overrides[ $attribName ] ) ) { $this->overrides = $overrides[ $attribName ]; } } /** * * @param string $key * @param string $default * @return string|callable */ public function getValue( $key, $default = '' ) { $registry = $this->getRegistryArray(); $value = isset( $registry[$key] ) ? $registry[$key] : $default; if ( is_array( $value ) ) { // Attributes get merged together instead of being overwritten, // so just take the last one $value = end( $value ); } return $value; } /** * * @return string[] */ public function getAllKeys() { $registry = $this->getRegistryArray(); return array_keys( $registry ); } /** * * @return array */ public function getAllValues() { $all = []; foreach ( $this->getAllKeys() as $key ) { $all[$key] = $this->getValue( $key ); } return $all; } /** * * @return array */ protected function getRegistryArray() { $registry = $this->extensionRegistry->getAttribute( $this->attribName ); if ( isset( $this->overrides[static::OVERRIDE_SET ] ) ) { $registry = $this->overrides[static::OVERRIDE_SET ]; } else { if ( isset( $this->overrides[static::OVERRIDE_MERGE ] ) ) { $registry = array_merge( $registry, $this->overrides[static::OVERRIDE_MERGE ] ); } if ( isset( $this->overrides[static::OVERRIDE_REMOVE ] ) ) { foreach ( $this->overrides[static::OVERRIDE_REMOVE ] as $removeKey ) { if ( isset( $registry[ $removeKey ] ) ) { unset( $registry[ $removeKey ] ); } } } } return $registry; } /** * @param string $key * @return array */ public function getObjectSpec( $key ): array { $objectSpec = []; $registry = $this->getRegistryArray(); $specs = isset( $registry[$key] ) ? $registry[$key] : []; foreach ( $specs as $name => $value ) { /** * Attributes get merged together instead of being overwritten. * This may result in an array for class or factory which is not allowed. * * Other specifications like services are an array. It is not possible to * decide which of them belong to the original factory and which to the override. */ if ( ( $name === 'class' ) && is_array( $value ) ) { $objectSpec[$name] = end( $value ); continue; } if ( ( $name === 'factory' ) && is_array( $value ) ) { $objectSpec[$name] = end( $value ); continue; } $objectSpec[$name] = $value; } return $objectSpec; } } PK ! �N䇗 � B mediawiki-component-manifestregistry/src/ManifestObjectFactory.phpnu �[��� <?php namespace MWStake\MediaWiki\Component\ManifestRegistry; use Psr\Log\LoggerInterface; use Wikimedia\ObjectFactory\ObjectFactory; class ManifestObjectFactory { /** * @var ManifestRegistryFactory */ private $registryFactory = null; /** * @var ObjectFactory */ private $objectFactory = null; /** * @var LoggerInterface */ private $logger = null; /** * @param ManifestRegistryFactory $registryFactory * @param ObjectFactory $objectFactory * @param LoggerInterface $logger * @return void */ public function __construct( ManifestRegistryFactory $registryFactory, ObjectFactory $objectFactory, LoggerInterface $logger ) { $this->registryFactory = $registryFactory; $this->objectFactory = $objectFactory; $this->logger = $logger; } /** * @param string $registryName * @param string $registryKey * @param array $options * @param string|null $instanceof * @return object|null */ public function createObject( string $registryName, string $registryKey, array $options = [], string $instanceof = null ): ?object { /** @var ManifestAttributeBasedRegistry */ $registry = $this->registryFactory->get( $registryName ); $spec = $registry->getObjectSpec( $registryKey ); if ( !isset( $spec['factory'] ) && !isset( $spec['class'] ) ) { return null; } $object = $this->objectFactory->createObject( $spec, $options ); if ( ( $instanceof === null ) || is_a( $object, $instanceof, true ) ) { return $object; } return null; } /** * @param string $registryName * @param array $options * @param string|null $instanceof * @return array */ public function createAllObjects( string $registryName, array $options = [], string $instanceof = null ): array { /** @var ManifestAttributeBasedRegistry */ $registry = $this->registryFactory->get( $registryName ); $registryKeys = $registry->getAllKeys(); $objects = []; foreach ( $registryKeys as $registryKey ) { $spec = $registry->getObjectSpec( $registryKey ); $object = $this->createObject( $registryName, $registryKey, $options, $instanceof ); if ( $object === null ) { $this->logger->warning( "The object of {key} in {registry} is not a instance of {instanceof}", [ 'key' => $registryKey, 'registry' => $registryName, 'instanceof' => $instanceof ] ); continue; } $objects[$registryKey] = $object; } return $objects; } } PK ! ŃϴQ Q 1 mediawiki-component-manifestregistry/.eslint.jsonnu �[��� { "root": true, "extends": [ "wikimedia/client", "wikimedia/mediawiki" ], "rules": { "space-before-blocks": "warn", "space-before-function-paren": "warn", "spaced-comment": "warn", "space-in-parens": "warn", "space-infix-ops": "warn", "space-unary-ops": "warn", "no-multi-spaces": "warn", "no-trailing-spaces": "warn", "keyword-spacing": "warn", "comma-spacing": "warn", "computed-property-spacing": "warn", "array-bracket-spacing": "warn", "object-curly-spacing": "warn", "key-spacing": "warn", "no-tabs": "warn", "comma-dangle": "warn", "no-implicit-globals": "warn", "quote-props": "warn", "no-console": "warn", "eqeqeq": "warn", "no-useless-concat": "warn", "no-mixed-spaces-and-tabs": "warn", "no-useless-escape": "warn", "vars-on-top": "warn", "curly": "warn", "quotes": "warn", "camelcase": "warn", "no-underscore-dangle": "warn", "indent": "warn", "valid-jsdoc": "warn", "one-var": "warn", "no-unneeded-ternary": "warn", "no-undef": "warn", "no-unused-vars": "warn", "no-shadow-restricted-names": "warn", "wrap-iife": "warn", "no-extend-native": "warn", "no-restricted-properties": "warn", "no-use-before-define": "warn", "eol-last": "warn", "brace-style": "warn", "no-bitwise": "warn", "no-global-assign": "warn", "no-redeclare": "warn", "operator-linebreak": "warn", "no-multiple-empty-lines": "warn", "func-call-spacing": "warn", "no-useless-call": "warn", "no-control-regex": "warn", "no-prototype-builtins": "warn", "mediawiki/msg-doc": "warn", "new-cap": "warn", "semi-style": "warn" } } PK ! ���� � 7 mediawiki-component-manifestregistry/CODE_OF_CONDUCT.mdnu �[��� The development of this software is covered by a [Code of Conduct](https://www.mediawiki.org/wiki/Special:MyLanguage/Code_of_Conduct). PK ! ���� � 1 mediawiki-component-manifestregistry/package.jsonnu �[��� { "private": true, "scripts": { "test": "grunt test" }, "devDependencies": { "eslint-config-wikimedia": "0.20.0", "grunt": "1.5.3", "grunt-banana-checker": "0.9.0", "grunt-eslint": "23.0.0" } } PK ! 8��� � >