WfsNs.php 3.7 KB

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