<?php /** * LayerInfo * * $Id: LayerInfo.php 963 2007-10-16 15:37:30Z madair $ * * Copyright (c) 2007, DM Solutions Group Inc. * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ /***************************************************************************** * Purpose: get info about a layer and its underlying data source *****************************************************************************/ include ("Common.php"); include ("Utilities.php"); $featureService = $siteConnection->CreateService(MgServiceType::FeatureService); // Converts a boolean to "yes" or "no" // --from MG Web Tier API Reference function BooleanToString($boolean) { if (is_bool($boolean)) return ($boolean ? "true" : "false"); else return "ERROR in BooleanToString."; } //Get a runtime map from a map definition $map = new MgMap(); $map->Open($resourceService, $mapName); //Get the layer $layerCollection=$map->GetLayers(); try { $layer = $layerCollection->GetItem($_REQUEST['layer']); if ($layer == null) { echo '<Error>Layer '.$_REQUEST['layer'].' Not Found</Error>'; exit; } if (isset($_REQUEST['selectable'])) { if (strcasecmp($_REQUEST['selectable'], 'true') == 0) { $layer->SetSelectable(true); } else { $layer->SetSelectable(false); } $map->Save($resourceService); } //property mappings from the session if (isset($_SESSION['property_mappings'])) { $mappings = $_SESSION['property_mappings'][$layer->GetObjectId()]; } $dataSourceId = new MgResourceIdentifier($layer->GetFeatureSourceId()); //echo $dataSourceId->ToString();exit; $agf = new MgAgfReaderWriter(); /***************************************************************************** TODO: check GetCapabilities of the feature provider to ensure that it has the appropriate capability to insert and update *****************************************************************************/ /***************************************************************************** TODO: check user permissions to edit the resource *****************************************************************************/ /***************************************************************************** get the layer's geometric type(s) *****************************************************************************/ /***************************************************************************** get the layer's attributes and types *****************************************************************************/ $attributes = GetFeatureSourceAttributes($map, $layer->GetLayerDefinition(), $featureService); /***************************************************************************** determine whether a shadow feature source has been created for the layer *****************************************************************************/ // convert the feature resource for the selected layer to the shadow version $shadowResourceId = CreateSessionResourceId($dataSourceId, '-shadow'); $hasShadow = 'false'; if (DataSourceExists($resourceService, $shadowResourceId)) { $hasShadow = 'true'; } //get class definition from the featureSource $classDefinition = GetFeatureClassDefinition($featureService, $layer, $dataSourceId); //MgPropertyDefinition classProps $classProps = $classDefinition->GetProperties(); $featureGeometryName = $layer->GetFeatureGeometryName(); $aLayerTypes = array(); $aProperties = array(); for ($i=0; $i< $classProps->GetCount(); $i++) { $prop = $classProps->GetItem($i); if ($prop->GetPropertyType() == MgFeaturePropertyType::GeometricProperty) { $featureClass = $prop->GetGeometryTypes(); if ($featureClass & MgFeatureGeometricType::Surface) { array_push($aLayerTypes, 'surface'); } else if ($featureClass & MgFeatureGeometricType::Curve) { array_push($aLayerTypes, 'curve'); } else if ($featureClass & MgFeatureGeometricType::Solid) { array_push($aLayerTypes, 'solid'); //could use surface here for editing purposes? } else if ($featureClass & MgFeatureGeometricType::Point){ array_push($aLayerTypes, 'point'); } break; } } //Get layer collection as xml header('content-type: text/xml'); echo "<LayerInfo>\n"; for ( $i=0; $i < count($aLayerTypes); $i++ ) { echo "<LayerType>".$aLayerTypes[$i]."</LayerType>\n"; } echo "<!--is editable?-->"; if (IsLayerEditable($resourceService, $layer)) { echo "<Editable>true</Editable>\n"; } else { echo "<Editable>false</Editable>\n"; } echo "<Shadowed>$hasShadow</Shadowed>\n"; echo "<Attributes>\n"; foreach($attributes as $attribute) { if (!is_array($attribute)) { continue; } echo "<Attribute>\n"; echo "<Name>".$attribute['name']."</Name>"; echo "<Description>".$attribute['description']."</Description>"; echo "<Datatype>".$attribute['datatype']."</Datatype>"; echo "<Readonly>".$attribute['readonly']."</Readonly>"; echo "<Length>".$attribute['length']."</Length>"; echo "<Default>".$attribute['default']."</Default>"; echo "<Precision>".$attribute['precision']."</Precision>"; echo "<Scale>".$attribute['scale']."</Scale>"; echo "<Nullable>".$attribute['nullable']."</Nullable>"; echo "</Attribute>\n"; } echo "</Attributes>\n"; echo "</LayerInfo>"; exit; } catch (MgException $e) { echo "ERROR: " . $e->GetMessage() . "\n"; echo $e->GetDetails() . "\n"; echo $e->GetStackTrace() . "\n"; exit; } ?>