diff options
Diffstat (limited to 'www/wiki/extensions/Maps/src/MediaWiki/ParserHooks/DisplayMapFunction.php')
-rw-r--r-- | www/wiki/extensions/Maps/src/MediaWiki/ParserHooks/DisplayMapFunction.php | 117 |
1 files changed, 45 insertions, 72 deletions
diff --git a/www/wiki/extensions/Maps/src/MediaWiki/ParserHooks/DisplayMapFunction.php b/www/wiki/extensions/Maps/src/MediaWiki/ParserHooks/DisplayMapFunction.php index bad0d842..5d64b52e 100644 --- a/www/wiki/extensions/Maps/src/MediaWiki/ParserHooks/DisplayMapFunction.php +++ b/www/wiki/extensions/Maps/src/MediaWiki/ParserHooks/DisplayMapFunction.php @@ -3,12 +3,12 @@ namespace Maps\MediaWiki\ParserHooks; use Maps; -use Maps\MapsFunctions; +use Maps\MappingService; use Maps\MappingServices; +use Maps\MapsFactory; use Maps\Presentation\ParameterExtractor; use MWException; -use ParamProcessor; -use ParamProcessor\ProcessedParam; +use ParamProcessor\Processor; use Parser; /** @@ -38,7 +38,7 @@ class DisplayMapFunction { * @throws MWException */ public function getMapHtmlForKeyValueStrings( Parser $parser, array $parameters ): string { - $processor = new \ParamProcessor\Processor( new \ParamProcessor\Options() ); + $processor = new Processor( new \ParamProcessor\Options() ); $service = $this->services->getServiceOrDefault( $this->extractServiceName( @@ -50,14 +50,20 @@ class DisplayMapFunction { $processor->setFunctionParams( $parameters, - array_merge( - self::getHookDefinition( ';' )->getParameters(), - $service->getParameterInfo() - ), - self::getHookDefinition( ';' )->getDefaultParameters() + [], + self::getDefaultParameters() + ); + + $processor->setParameterDefinitions( + $this->getAllParameterDefinitions( $service, ';' ) ); - return $this->getMapHtmlFromProcessor( $parser, $processor ); + $this->trackMap( $parser ); + + return $this->renderer->renderMap( + $service->processingResultToMapParams( $processor->processParameters() ), + $parser + ); } /** @@ -69,65 +75,35 @@ class DisplayMapFunction { * @throws MWException */ public function getMapHtmlForParameterList( Parser $parser, array $parameters ) { - $processor = new \ParamProcessor\Processor( new \ParamProcessor\Options() ); + $processor = new Processor( new \ParamProcessor\Options() ); $service = $this->services->getServiceOrDefault( $this->extractServiceName( $parameters ) ); $this->renderer->service = $service; - $processor->setParameters( - $parameters, - array_merge( - self::getHookDefinition( "\n" )->getParameters(), - $service->getParameterInfo() - ) + $processor->setParameters( $parameters ); + $processor->setParameterDefinitions( + $this->getAllParameterDefinitions( $service, "\n" ) ); - return $this->getMapHtmlFromProcessor( $parser, $processor ); - } - - private function getMapHtmlFromProcessor( Parser $parser, ParamProcessor\Processor $processor ) { - $params = $processor->processParameters()->getParameters(); - - $this->defaultMapZoom( $params ); - $this->trackMap( $parser ); return $this->renderer->renderMap( - $this->processedParametersToKeyValueArray( $params ), + $service->processingResultToMapParams( $processor->processParameters() ), $parser ); } - private function extractServiceName( array $parameters ): string { - $service = ( new ParameterExtractor() )->extract( - [ 'mappingservice', 'service' ], - $parameters - ); - - return $service ?? ''; - } - - private function processedParametersToKeyValueArray( array $params ): array { - $parameters = []; - - foreach ( $params as $parameter ) { - $parameters[$parameter->getName()] = $parameter->getValue(); - } + private function getAllParameterDefinitions( MappingService $service, string $locationDelimiter ) { + $params = []; - return $parameters; - } - - public static function getHookDefinition( string $locationDelimiter ): \ParserHooks\HookDefinition { - return new \ParserHooks\HookDefinition( - [ 'display_map', 'display_point', 'display_points', 'display_line' ], - self::getParameterDefinitions( $locationDelimiter ), - [ 'coordinates' ] - ); - } - - private static function getParameterDefinitions( $locationDelimiter ): array { - $params = MapsFunctions::getCommonParameters(); + $params['mappingservice'] = [ + 'type' => 'string', + 'aliases' => 'service', + 'default' => $GLOBALS['egMapsDefaultService'], + 'values' => MapsFactory::globalInstance()->getMappingServices()->getAllNames(), + 'message' => 'maps-par-mappingservice' + ]; $params['coordinates'] = [ 'type' => 'string', @@ -138,28 +114,25 @@ class DisplayMapFunction { 'message' => 'maps-displaymap-par-coordinates', ]; - return $params; + return MapsFactory::globalInstance()->getParamDefinitionFactory()->newDefinitionsFromArrays( + array_merge( + $params, + $service->getParameterInfo() + ) + ); } - /** - * @param ProcessedParam[] $parameters - */ - private function defaultMapZoom( array &$parameters ) { - if ( array_key_exists( 'zoom', $parameters ) && $parameters['zoom']->wasSetToDefault() && count( - $parameters['coordinates']->getValue() - ) > 1 ) { - $parameters['zoom'] = $this->getParameterWithValue( $parameters['zoom'], false ); - } + private function extractServiceName( array $parameters ): string { + $service = ( new ParameterExtractor() )->extract( + [ 'mappingservice', 'service' ], + $parameters + ); + + return $service ?? ''; } - private function getParameterWithValue( ProcessedParam $param, $value ) { - return new ProcessedParam( - $param->getName(), - $value, - $param->wasSetToDefault(), - $param->getOriginalName(), - $param->getOriginalValue() - ); + public static function getDefaultParameters(): array { + return [ 'coordinates' ]; } private function trackMap( Parser $parser ) { |