/** * Renders and returns the output. * @see ParserHook::renderTag * * @since 3.0 * * @param array $parameters * * @return string */ public function render(array $parameters) { global $wgLang; // Check whether parser tag is used in the right namespace context, abort if not if ($this->parser->getTitle()->getNamespace() !== Maps_NS_LAYER) { global $wgContLang; return $this->rawErrorbox(wfMessage('maps-layerdef-wrong-namespace', $wgContLang->getNsText(Maps_NS_LAYER))->inContentLanguage()->text()); } $type = $parameters['type']; if ($type === false) { // no layer type specified $availableLayerTypes = MapsLayerTypes::getAvailableTypes(); $out = $this->rawErrorbox(wfMessage('maps-error-no-layertype', $wgLang->listToText($availableLayerTypes), count($availableLayerTypes))->inContentLanguage()->text()); } elseif (MapsLayerTypes::hasType($type)) { // get layer name if any: $name = $parameters['name'] !== false ? $parameters['name'] : null; // make sure the layer has a label, if no user data, make something up: if (empty($parameters['definition']['label'])) { if ($name !== null) { $labelSuffix = "- {$name}"; } else { // label for unnamed layer: $labelSuffix = '#' . (count($this->getLayerStore()->getLayers(MapsLayerGroup::LAYERS_NUMERIC)) + 1); } $parameters['definition']['label'] = $this->parser->getTitle()->getText() . ' ' . $labelSuffix; } // new layer from user input (could still be invalid): $layer = MapsLayers::newLayerFromDefinition($type, $parameters['definition'], $name); $out = $this->renderLayerInfo($layer); } else { // specified layer type is non-existant! $availableLayerTypes = MapsLayerTypes::getAvailableTypes(); $out = $this->rawErrorbox(wfMessage('maps-error-invalid-layertype', $this->validator->getParameter('type')->getOriginalValue(), $wgLang->listToText($availableLayerTypes), count($availableLayerTypes))->inContentLanguage()->text()); } // add the layer to the store after all info has been rendered: $this->addLayerToStore($layer); return $out; }