WfsNs.php 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. Lib::loadClass('Request');
  3. class Api_WfsNs {
  4. public static function typeName($namespaceUri) {
  5. $ex = explode('/', $namespaceUri);
  6. $name = array_pop($ex);
  7. $nsUri = implode('/', $ex);
  8. return self::getNsPrefix($nsUri) . ":{$name}";
  9. }
  10. // @usage: Api_WfsNs::getNsList();
  11. public static function getNsList() {
  12. $listNs = array();
  13. $baseNsUri = self::getBaseWfsUri();
  14. $listNs["{$baseNsUri}"] = 'p5';
  15. $listNs["{$baseNsUri}/default_db"] = 'default_db';
  16. $listNs["{$baseNsUri}/default_objects"] = 'default_objects';
  17. $listNs["{$baseNsUri}/objects"] = 'p5_objects';// TODO: to remove
  18. return $listNs;
  19. }
  20. // @usage: Api_WfsNs::getNsUri('default_db');
  21. public static function getNsUri($nsPrefix) {
  22. $listNs = self::getNsList();
  23. $nsMap = array_flip($listNs);
  24. $nsUri = V::get($nsPrefix, null, $nsMap);
  25. if (!$nsUri) {
  26. if ('p5_default_db' == $nsPrefix) return V::get('default_db', null, $nsMap);
  27. if ('objects' == $nsPrefix) return V::get('p5_objects', null, $nsMap);
  28. if ('default_db__x3A__' == substr($nsPrefix, 0, 17)) return $nsMap['default_db'] . "/" . substr($nsPrefix, 17);
  29. }
  30. return $nsUri;
  31. }
  32. // @usage: Api_WfsNs::getNsPrefix('https://biuro.biall-net.pl/wfs/default_db');
  33. public static function getNsPrefix($nsUri) {
  34. $listNs = self::getNsList();
  35. $nsUri = trim($nsUri);
  36. $nsUri = rtrim($nsUri, '/');
  37. $prefix = V::get($nsUri, null, $listNs);
  38. if ($prefix) return $prefix;
  39. $relativeNsUri = ('http' == substr($nsUri, 0, 4))
  40. ? substr($nsUri, strlen(self::getBaseWfsUri()) + 1)
  41. : $nsUri;
  42. $prefix = V::get(self::getBaseWfsUri() . "/{$relativeNsUri}", null, $listNs);
  43. if ($prefix) return $prefix;
  44. if (false === strpos($nsUri, '/')) throw new Exception("BUG: Unsupported namespace uri '{$nsUri}'");
  45. $nsEx = explode("/", $relativeNsUri);
  46. if ('default_db' != $nsEx[0]) throw new Exception("BUG: Unsupported namespace uri '{$nsUri}'");
  47. return str_replace('/', '__x3A__', $relativeNsUri);
  48. }
  49. // @usage: Api_WfsNs::getBaseWfsUri();
  50. public static function getBaseWfsUri() {
  51. return Request::getHostUri() . "/wfs";
  52. }
  53. /**
  54. * @return [ $nsUri, $prefix, $name ]
  55. * @example: list($nsUri, $prefix, $name) = Api_WfsNs::parseObjectNsUri('default_objects/AccessOwner');
  56. */
  57. public static function parseObjectNsUri($objectNsUri) {
  58. if ('{' == substr($objectNsUri, 0, 1)) $objectNsUri = str_replace('}', '/', substr($objectNsUri, 1));// form like "{.../wfs/default_objects}AccessOwner"
  59. $nsEx = explode('/', $objectNsUri);
  60. $name = array_pop($nsEx);
  61. $nsUri = implode('/', $nsEx);
  62. if ('http' !== substr($nsUri, 0, 4)) $nsUri = self::getBaseWfsUri() . "/" . $nsUri;
  63. $prefix = self::getNsPrefix($nsUri);
  64. return [ $nsUri, $prefix, $name ];
  65. }
  66. }