X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fregistration%2FExtensionProcessor.php;h=0d0a6e47619f444621602b314c365295bd92503f;hb=e46d0694ac253df5f91fcfcd65ff19b0b3a2982c;hp=ffc7a7e08e3b5605d26f8e7672e70e3f67d78e96;hpb=23673a0ff99f4173ded689ee32dae799f2d07642;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/registration/ExtensionProcessor.php b/includes/registration/ExtensionProcessor.php index ffc7a7e08e..0d0a6e4761 100644 --- a/includes/registration/ExtensionProcessor.php +++ b/includes/registration/ExtensionProcessor.php @@ -197,8 +197,20 @@ class ExtensionProcessor implements Processor { $this->extractMessagesDirs( $dir, $info ); $this->extractNamespaces( $info ); $this->extractResourceLoaderModules( $dir, $info ); - $this->extractServiceWiringFiles( $dir, $info ); - $this->extractParserTestFiles( $dir, $info ); + if ( isset( $info['ServiceWiringFiles'] ) ) { + $this->extractPathBasedGlobal( + 'wgServiceWiringFiles', + $dir, + $info['ServiceWiringFiles'] + ); + } + if ( isset( $info['ParserTestFiles'] ) ) { + $this->extractPathBasedGlobal( + 'wgParserTestFiles', + $dir, + $info['ParserTestFiles'] + ); + } $name = $this->extractCredits( $path, $info ); if ( isset( $info['callback'] ) ) { $this->callbacks[$name] = $info['callback']; @@ -378,9 +390,10 @@ class ExtensionProcessor implements Processor { protected function extractExtensionMessagesFiles( $dir, array $info ) { if ( isset( $info['ExtensionMessagesFiles'] ) ) { - $this->globals["wgExtensionMessagesFiles"] += array_map( function ( $file ) use ( $dir ) { - return "$dir/$file"; - }, $info['ExtensionMessagesFiles'] ); + foreach ( $info['ExtensionMessagesFiles'] as &$file ) { + $file = "$dir/$file"; + } + $this->globals["wgExtensionMessagesFiles"] += $info['ExtensionMessagesFiles']; } } @@ -450,7 +463,7 @@ class ExtensionProcessor implements Processor { } foreach ( $info['config'] as $key => $val ) { if ( $key[0] !== '@' ) { - $this->globals["$prefix$key"] = $val; + $this->addConfigGlobal( "$prefix$key", $val ); } } } @@ -478,24 +491,29 @@ class ExtensionProcessor implements Processor { if ( isset( $data['path'] ) && $data['path'] ) { $value = "$dir/$value"; } - $this->globals["$prefix$key"] = $value; + $this->addConfigGlobal( "$prefix$key", $value ); } } } - protected function extractServiceWiringFiles( $dir, array $info ) { - if ( isset( $info['ServiceWiringFiles'] ) ) { - foreach ( $info['ServiceWiringFiles'] as $path ) { - $this->globals['wgServiceWiringFiles'][] = "$dir/$path"; - } + /** + * Helper function to set a value to a specific global, if it isn't set already. + * + * @param string $key The config key with the prefix and anything + * @param mixed $value The value of the config + */ + private function addConfigGlobal( $key, $value ) { + if ( array_key_exists( $key, $this->globals ) ) { + throw new RuntimeException( + "The configuration setting '$key' was already set by another extension," + . " and cannot be set again." ); } + $this->globals[$key] = $value; } - protected function extractParserTestFiles( $dir, array $info ) { - if ( isset( $info['ParserTestFiles'] ) ) { - foreach ( $info['ParserTestFiles'] as $path ) { - $this->globals['wgParserTestFiles'][] = "$dir/$path"; - } + protected function extractPathBasedGlobal( $global, $dir, $paths ) { + foreach ( $paths as $path ) { + $this->globals[$global][] = "$dir/$path"; } }