コード例 #1
0
ファイル: utils.php プロジェクト: geofac/mapguide-rest
 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;
 }
コード例 #2
0
ファイル: boxedvalue.php プロジェクト: geofac/mapguide-rest
 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;
 }
コード例 #3
0
ファイル: czmlwriter.php プロジェクト: geofac/mapguide-rest
 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 "";
     }
 }
コード例 #4
0
 public function EscapeForJson($str)
 {
     return MgUtils::EscapeJsonString($str);
 }
コード例 #5
0
 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;
 }
コード例 #6
0
 /**
  * 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;
 }