/** * @see ItemParameterCriterion::validate */ protected function doValidation($value, Parameter $parameter, array $parameters) { $title = Title::newFromText($value, Maps_NS_LAYER); if ($title->getNamespace() == Maps_NS_LAYER && $title->exists()) { $layerPage = new MapsLayerPage($title); return $layerPage->hasValidDefinition($this->service); } return false; }
/** * @see ItemParameterCriterion::validate */ protected function doValidation($value, Parameter $parameter, array $parameters) { $parts = explode($this->groupNameSep, $value, 2); $layerTitle = Title::newFromText($parts[0], Maps_NS_LAYER); // if page with layer definition doesn't exist: if ($layerTitle === null || $layerTitle->getNamespace() !== Maps_NS_LAYER || !$layerTitle->exists()) { return false; } $layerName = count($parts) > 1 ? $parts[1] : null; $layerPage = new MapsLayerPage($layerTitle); return $layerPage->hasUsableLayer($layerName); }
/** * @see ParameterManipulation::manipulate * * @since 0.7 */ public function manipulate(Parameter &$parameter, array &$parameters) { global $egMapsOLLayerGroups, $egMapsOLAvailableLayers; $layerDefs = array(); $layerNames = array(); foreach ($parameter->getValue() as $layerOrGroup) { $lcLayerOrGroup = strtolower($layerOrGroup); // Layer groups. Loop over all items and add them when not present yet. if (array_key_exists($lcLayerOrGroup, $egMapsOLLayerGroups)) { foreach ($egMapsOLLayerGroups[$lcLayerOrGroup] as $layerName) { if (!in_array($layerName, $layerNames)) { if (is_array($egMapsOLAvailableLayers[$layerName])) { $layerDefs[] = 'new ' . $egMapsOLAvailableLayers[$layerName][0]; } else { $layerDefs[] = 'new ' . $egMapsOLAvailableLayers[$layerName]; } $layerNames[] = $layerName; } } } elseif (array_key_exists($lcLayerOrGroup, $egMapsOLAvailableLayers)) { if (!in_array($lcLayerOrGroup, $layerNames)) { if (is_array($egMapsOLAvailableLayers[$lcLayerOrGroup])) { $layerDefs[] = 'new ' . $egMapsOLAvailableLayers[$lcLayerOrGroup][0]; } else { $layerDefs[] = 'new ' . $egMapsOLAvailableLayers[$lcLayerOrGroup]; } $layerNames[] = $lcLayerOrGroup; } } else { $title = Title::newFromText($layerOrGroup, Maps_NS_LAYER); if ($title->getNamespace() == Maps_NS_LAYER && $title->exists()) { $layerPage = new MapsLayerPage($title); if ($layerPage->hasValidDefinition('openlayers')) { $layer = $layerPage->getLayer(); if (!in_array($layerOrGroup, $layerNames)) { $layerDefs[] = $layer->getJavaScriptDefinition(); $layerNames[] = $layerOrGroup; } } else { wfWarn("Invalid layer ({$layerOrGroup}) encountered after validation."); } } else { wfWarn("Invalid layer ({$layerOrGroup}) encountered after validation."); } } } $parameter->setValue($layerDefs); MapsMappingServices::getServiceInstance('openlayers')->addLayerDependencies($this->getDependencies($layerNames)); }