Esempio n. 1
0
 /**
  * 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;
 }