Jelajahi Sumber

fixed Api_WfsNs::getNsPrefix, added parseObjectNsUri

Piotr Labudda 9 tahun lalu
induk
melakukan
e4281a136c
1 mengubah file dengan 24 tambahan dan 1 penghapusan
  1. 24 1
      SE/se-lib/Api/WfsNs.php

+ 24 - 1
SE/se-lib/Api/WfsNs.php

@@ -33,7 +33,19 @@ class Api_WfsNs {
     $listNs = self::getNsList();
     $nsUri = trim($nsUri);
     $nsUri = rtrim($nsUri, '/');
-    return V::get($nsUri, null, $listNs);
+    $prefix = V::get($nsUri, null, $listNs);
+    if ($prefix) return $prefix;
+
+    $relativeNsUri = ('http' == substr($nsUri, 0, 4))
+      ? substr($nsUri, strlen(self::getBaseWfsUri()) + 1)
+      : $nsUri;
+    $prefix = V::get(self::getBaseWfsUri() . "/{$relativeNsUri}", null, $listNs);
+    if ($prefix) return $prefix;
+
+    if (false === strpos($nsUri, '/')) throw new Exception("BUG: Unsupported namespace uri '{$nsUri}'");
+    $nsEx = explode("/", $relativeNsUri);
+    if ('default_db' != $nsEx[0]) throw new Exception("BUG: Unsupported namespace uri '{$nsUri}'");
+    return str_replace('/', '__x3A__', $relativeNsUri);
   }
 
   // @usage: Api_WfsNs::getBaseWfsUri();
@@ -41,4 +53,15 @@ class Api_WfsNs {
     return Request::getHostUri() . "/wfs";
   }
 
+  // @returns [ $nsUri, $prefix, $name ]
+  public static function parseObjectNsUri($objectNsUri) {
+    if ('{' == substr($objectNsUri, 0, 1)) $objectNsUri = str_replace('}', '/', substr($objectNsUri, 1));// form like "{.../wfs/default_objects}AccessOwner"
+    $nsEx = explode('/', $objectNsUri);
+    $name = array_pop($nsEx);
+    $nsUri = implode('/', $nsEx);
+    if ('http' !== substr($nsUri, 0, 4)) $nsUri = self::getBaseWfsUri() . "/" . $nsUri;
+    $prefix = self::getNsPrefix($nsUri);
+    return [ $nsUri, $prefix, $name ];
+  }
+
 }