public static function FormatException($app, $type, $errorMessage, $details, $phpTrace, $status = 500, $mimeType = MgMimeType::Html) { $errResponse = ""; if ($app->config("Error.OutputStackTrace") === false) { if ($mimeType === MgMimeType::Xml || $mimeType == MgMimeType::Kml) { $errResponse = sprintf("<?xml version=\"1.0\"?><Error><Type>%s</Type><Message>%s</Message><Details>%s</Details></Error>", MgUtils::EscapeXmlChars($type), MgUtils::EscapeXmlChars($errorMessage), MgUtils::EscapeXmlChars($details)); } else { if ($mimeType === MgMimeType::Json) { $errResponse = sprintf("{ \"Type\": \"%s\", \"Message\": \"%s\", \"Details\": \"%s\" }", MgUtils::EscapeJsonString($type), MgUtils::EscapeJsonString($errorMessage), MgUtils::EscapeJsonString($details)); } else { $errResponse = sprintf("<html><head><title>%s</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><style>body{margin:0;padding:30px;font:12px/1.5 Helvetica,Arial,Verdana,sans-serif;}h1{margin:0;font-size:48px;font-weight:normal;line-height:48px;}strong{display:inline-block;width:65px;}</style></head><body><h2>%s</h2>%s</body></html>", $type, $errorMessage, $details); } } } else { if ($mimeType === MgMimeType::Xml || $mimeType == MgMimeType::Kml) { $errResponse = sprintf("<?xml version=\"1.0\"?><Error><Type>%s</Type><Message>%s</Message><Details>%s</Details><StackTrace>%s</StackTrace></Error>", MgUtils::EscapeXmlChars($type), MgUtils::EscapeXmlChars($errorMessage), MgUtils::EscapeXmlChars($details), MgUtils::EscapeXmlChars($phpTrace)); } else { if ($mimeType === MgMimeType::Json) { $errResponse = sprintf("{ \"Type\": \"%s\", \"Message\": \"%s\", \"Details\": \"%s\", \"StackTrace\": \"%s\" }", MgUtils::EscapeJsonString($type), MgUtils::EscapeJsonString($errorMessage), MgUtils::EscapeJsonString($details), MgUtils::EscapeJsonString($phpTrace)); } else { $errResponse = sprintf("<html><head><title>%s</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><style>body{margin:0;padding:30px;font:12px/1.5 Helvetica,Arial,Verdana,sans-serif;}h1{margin:0;font-size:48px;font-weight:normal;line-height:48px;}strong{display:inline-block;width:65px;}</style></head><body><h2>%s</h2>%s<h2>%s</h2><pre>%s</pre></body></html>", $type, $errorMessage, $details, $app->localizer->getText("L_STACK_TRACE"), $phpTrace); } } } return $errResponse; }
private static function BoxValue($value, $type, $fmt = "xml") { $resp = ""; if ($fmt == "xml") { $resp .= '<?xml version="1.0" encoding="utf-8"?>'; $resp .= "<PrimitiveValue>"; $resp .= "<Type>{$type}</Type>"; if ($type == "String") { $resp .= "<Value>" . MgUtils::EscapeXmlChars($value) . "</Value>"; } else { $resp .= "<Value>{$value}</Value>"; } $resp .= "</PrimitiveValue>"; } else { //json $val = $value; if ($type == "String") { $val = '"' . MgUtils::EscapeJsonString($val) . '"'; } $resp = '{"PrimitiveValue":{"Type":"' . $type . '","Value":' . $val . '}}'; } return $resp; }
public static function FeatureToCzml($reader, $agfRw, $transform, $geometryName, $style, $idName = NULL) { if (!$reader->IsNull($geometryName)) { $agf = null; $geom = null; try { $agf = $reader->GetGeometry($geometryName); $geom = $agfRw->Read($agf, $transform); } catch (MgException $ex) { //Bail on bad geometries return ""; } $idIndex = -1; if ($idName != NULL) { $idIndex = $reader->GetPropertyIndex($idName); } //Write ID $idVal = ""; if ($idIndex >= 0 && !$reader->IsNull($idIndex)) { $propType = $reader->GetPropertyType($idIndex); switch ($propType) { case MgPropertyType::DateTime: $dt = $reader->GetDateTime($idIndex); $idVal = '"' . $dt->ToString() . '"'; break; case MgPropertyType::Double: $idVal = $reader->GetDouble($idIndex); break; case MgPropertyType::Int16: $idVal = $reader->GetInt16($idIndex); break; case MgPropertyType::Int32: $idVal = $reader->GetInt32($idIndex); break; case MgPropertyType::Int64: $idVal = $reader->GetInt64($idIndex); break; case MgPropertyType::Single: $idVal = $reader->GetSingle($idIndex); break; case MgPropertyType::String: $idVal = MgUtils::EscapeJsonString($reader->GetString($idIndex)); break; } } else { $idVal = uniqid(); } $elevIndex = -1; $extrude = 0.0; try { $elevIndex = $reader->GetPropertyIndex(MgRestConstants::PROP_Z_EXTRUSION); if ($elevIndex >= 0) { switch ($reader->GetPropertyType($elevIndex)) { case MgPropertyType::Int16: $extrude = $reader->GetInt16($elevIndex); break; case MgPropertyType::Int32: $extrude = $reader->GetInt32($elevIndex); break; case MgPropertyType::Int64: $extrude = $reader->GetInt64($elevIndex); break; case MgPropertyType::Double: $extrude = $reader->GetDouble($elevIndex); break; case MgPropertyType::Single: $extrude = $reader->GetSingle($elevIndex); break; } } //TODO: If units not in meters, convert it to meters } catch (MgException $ex) { } switch ($geom->GetGeometryType()) { case MgGeometryType::Point: case MgGeometryType::LineString: case MgGeometryType::Polygon: $geomCzml = self::GeometryToCzml($geom, $reader, $style, $extrude); if ($geomCzml == null) { return ""; } return self::SingleFeatureToCzml($idVal, $reader, $geomCzml); case MgGeometryType::MultiLineString: //For multi-geometry features, we split this off into separate packets, one packet for //each component geometry $parts = array(); $featId = uniqid(); for ($i = 0; $i < $geom->GetCount(); $i++) { $idValComp = $idVal . "_segment_" . $i . "_" . $featId; $lineStr = $geom->GetLineString($i); $geomCzml = self::GeometryToCzml($lineStr, $reader, $style, $extrude); if ($geomCzml == null) { continue; } array_push($parts, self::SingleFeatureToCzml($idValComp, $reader, $geomCzml)); } return implode(",", $parts); default: return ""; } } else { return ""; } }
public function EscapeForJson($str) { return MgUtils::EscapeJsonString($str); }
public static function FeatureToGeoJson($reader, $agfRw, $transform, $idName = NULL) { $idVal = NULL; $propVals = array(); $geomJson = ""; $idIndex = -1; if ($idName != NULL) { $idIndex = $reader->GetPropertyIndex($idName); } $propCount = $reader->GetPropertyCount(); for ($i = 0; $i < $propCount; $i++) { $name = $reader->GetPropertyName($i); $propType = $reader->GetPropertyType($i); if (!$reader->IsNull($i)) { if ($idIndex == $i) { switch ($propType) { case MgPropertyType::DateTime: $dt = $reader->GetDateTime($i); $idVal = '"' . $dt->ToString() . '"'; break; case MgPropertyType::Double: $idVal = $reader->GetDouble($i); break; case MgPropertyType::Int16: $idVal = $reader->GetInt16($i); break; case MgPropertyType::Int32: $idVal = $reader->GetInt32($i); break; case MgPropertyType::Int64: $idVal = $reader->GetInt64($i); break; case MgPropertyType::Single: $idVal = $reader->GetSingle($i); break; case MgPropertyType::String: $idVal = '"' . MgUtils::EscapeJsonString($reader->GetString($i)) . '"'; break; } } else { switch ($propType) { case MgPropertyType::Boolean: //NOTE: It appears PHP booleans are not string-able array_push($propVals, '"' . $name . '": ' . ($reader->GetBoolean($i) ? "true" : "false")); break; case MgPropertyType::Byte: array_push($propVals, '"' . $name . '": ' . $reader->GetByte($i)); break; case MgPropertyType::DateTime: $dt = $reader->GetDateTime($i); array_push($propVals, '"' . $name . '": "' . $dt->ToString() . '"'); break; case MgPropertyType::Decimal: case MgPropertyType::Double: array_push($propVals, '"' . $name . '": ' . $reader->GetDouble($i)); break; case MgPropertyType::Geometry: try { $agf = $reader->GetGeometry($i); $geom = $transform != null ? $agfRw->Read($agf, $transform) : $agfRw->Read($agf); $geomJson = self::ToGeoJson($geom); } catch (MgException $ex) { $geomJson = '"geometry": null'; } break; case MgPropertyType::Int16: array_push($propVals, '"' . $name . '": ' . $reader->GetInt16($i)); break; case MgPropertyType::Int32: array_push($propVals, '"' . $name . '": ' . $reader->GetInt32($i)); break; case MgPropertyType::Int64: array_push($propVals, '"' . $name . '": ' . $reader->GetInt64($i)); break; case MgPropertyType::Single: array_push($propVals, '"' . $name . '": ' . $reader->GetSingle($i)); break; case MgPropertyType::String: array_push($propVals, '"' . $name . '": "' . MgUtils::EscapeJsonString($reader->GetString($i)) . '"'); break; } } } else { array_push($propVals, '"' . $name . '": null'); } } $output = '{ "type": "Feature", '; $idJson = ""; if ($idVal !== NULL) { $idJson = '"id": ' . $idVal . ', '; $output .= $idJson; } if ($geomJson !== "") { $output .= $geomJson . ', "properties": {' . implode(",", $propVals) . "} }\n"; } else { $output .= '"properties": {' . implode(",", $propVals) . "} }\n"; } return $output; }
/** * Writes the GET response body based on the current record of the given MgReader. The caller must not advance to the next record * in the reader while inside this method */ protected function GetResponseBodyRecord($reader) { $output = ""; if (!$this->firstFeature) { $output .= ","; } $propVals = array(); $geomJson = ""; $propCount = $reader->GetPropertyCount(); for ($i = 0; $i < $propCount; $i++) { $name = $reader->GetPropertyName($i); $propType = $reader->GetPropertyType($i); if (!$reader->IsNull($i)) { switch ($propType) { case MgPropertyType::Boolean: array_push($propVals, '"' . $name . '": ' . $reader->GetBoolean($i)); break; case MgPropertyType::Byte: array_push($propVals, '"' . $name . '": ' . $reader->GetByte($i)); break; case MgPropertyType::DateTime: $dt = $reader->GetDateTime($i); array_push($propVals, '"' . $name . '": "' . $dt->ToString() . '"'); break; case MgPropertyType::Decimal: case MgPropertyType::Double: array_push($propVals, '"' . $name . '": ' . $reader->GetDouble($i)); break; case MgPropertyType::Geometry: try { $agf = $reader->GetGeometry($i); $geom = $this->transform != null ? $this->agfRw->Read($agf, $this->transform) : $this->agfRw->Read($agf); $geomJson = MgGeoJsonWriter::ToGeoJson($geom); } catch (MgException $ex) { $geomJson = '"geometry": null'; } break; case MgPropertyType::Int16: array_push($propVals, '"' . $name . '": ' . $reader->GetInt16($i)); break; case MgPropertyType::Int32: array_push($propVals, '"' . $name . '": ' . $reader->GetInt32($i)); break; case MgPropertyType::Int64: array_push($propVals, '"' . $name . '": ' . $reader->GetInt64($i)); break; case MgPropertyType::Single: array_push($propVals, '"' . $name . '": ' . $reader->GetSingle($i)); break; case MgPropertyType::String: array_push($propVals, '"' . $name . '": "' . MgUtils::EscapeJsonString($reader->GetString($i)) . '"'); break; } } else { array_push($propVals, '"' . $name . '": null'); } } if ($geomJson !== "") { $output .= '{ "type": "Feature", ' . $geomJson . ', "properties": {' . implode(",", $propVals) . "} }\n"; } else { $output .= '{ "type": "Feature", "properties": {' . implode(",", $propVals) . "} }\n"; } $this->app->response->write($output); $output = ""; $this->firstFeature = false; }