WfsJsRequestPanel.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. <?php
  2. // use Monolog\Handler\StreamHandler;
  3. // use Monolog\Formatter\JsonFormatter;
  4. Lib::loadClass('RouteBase');
  5. Lib::loadClass('P5');
  6. Lib::loadClass('Core_AclHelper');
  7. Lib::loadClass('ACL');
  8. class Route_WfsJsRequestPanel extends RouteBase {
  9. public function defaultAction() {
  10. UI::gora();
  11. try {
  12. $exampleFltr = [
  13. " <ogc:Filter>",
  14. " <ogc:Or>",
  15. " <ogc:PropertyIsEqualTo>",
  16. " <ogc:PropertyName>ID</ogc:PropertyName>",
  17. " <ogc:Literal>1003</ogc:Literal>",
  18. " </ogc:PropertyIsEqualTo>",
  19. " <ogc:PropertyIsEqualTo>",
  20. " <ogc:PropertyName>ID</ogc:PropertyName>",
  21. " <ogc:Literal>608</ogc:Literal>",
  22. " </ogc:PropertyIsEqualTo>",
  23. " </ogc:Or>",
  24. " </ogc:Filter>",
  25. ];
  26. $listExampleProp = [];
  27. $listExampleProp['lvl1'] = [
  28. " <wfs:PropertyName>ID</wfs:PropertyName>",
  29. " <wfs:PropertyName>PARENT_ID</wfs:PropertyName>",
  30. " <wfs:PropertyName>TYPE</wfs:PropertyName>",
  31. " <wfs:PropertyName>DESC</wfs:PropertyName>",
  32. " <wfs:PropertyName>default_db__x3A__CRM_PROCES:PROCES</wfs:PropertyName>",
  33. ];
  34. $listExampleProp['lvl2-by-@-1'] = [
  35. " <wfs:PropertyName>ID</wfs:PropertyName>",
  36. " <wfs:PropertyName>PARENT_ID</wfs:PropertyName>",
  37. " <wfs:PropertyName>TYPE</wfs:PropertyName>",
  38. " <wfs:PropertyName>DESC</wfs:PropertyName>",
  39. " <wfs:PropertyName resolve=\"all\" resolveDepth=\"1\">default_db__x3A__CRM_PROCES:PROCES</wfs:PropertyName>",
  40. ];
  41. $listExampleProp['lvl2-by-@-2'] = [
  42. " <wfs:PropertyName>ID</wfs:PropertyName>",
  43. " <wfs:PropertyName>PARENT_ID</wfs:PropertyName>",
  44. " <wfs:PropertyName>TYPE</wfs:PropertyName>",
  45. " <wfs:PropertyName>DESC</wfs:PropertyName>",
  46. " <wfs:PropertyName resolve=\"all\" resolveDepth=\"2\">default_db__x3A__CRM_PROCES:PROCES</wfs:PropertyName>",
  47. ];
  48. $listExampleProp['lvl2-by-@-3'] = [
  49. " <wfs:PropertyName>ID</wfs:PropertyName>",
  50. " <wfs:PropertyName>PARENT_ID</wfs:PropertyName>",
  51. " <wfs:PropertyName>TYPE</wfs:PropertyName>",
  52. " <wfs:PropertyName>DESC</wfs:PropertyName>",
  53. " <wfs:PropertyName resolve=\"all\" resolveDepth=\"3\">default_db__x3A__CRM_PROCES:PROCES</wfs:PropertyName>",
  54. ];
  55. $listExampleProp['lvl2-by-@-*'] = [
  56. " <wfs:PropertyName>ID</wfs:PropertyName>",
  57. " <wfs:PropertyName>PARENT_ID</wfs:PropertyName>",
  58. " <wfs:PropertyName>TYPE</wfs:PropertyName>",
  59. " <wfs:PropertyName>DESC</wfs:PropertyName>",
  60. " <wfs:PropertyName resolve=\"all\" resolveDepth=\"*\">default_db__x3A__CRM_PROCES:PROCES</wfs:PropertyName>",
  61. ];
  62. $listExampleProp['lvl2'] = [
  63. " <wfs:PropertyName>ID</wfs:PropertyName>",
  64. " <wfs:PropertyName>PARENT_ID</wfs:PropertyName>",
  65. " <wfs:PropertyName>TYPE</wfs:PropertyName>",
  66. " <wfs:PropertyName>DESC</wfs:PropertyName>",
  67. " <wfs:PropertyName>default_db__x3A__CRM_PROCES:PROCES/ID</wfs:PropertyName>",
  68. " <wfs:PropertyName>default_db__x3A__CRM_PROCES:PROCES/PARENT_ID</wfs:PropertyName>",
  69. " <wfs:PropertyName>default_db__x3A__CRM_PROCES:PROCES/TYPE</wfs:PropertyName>",
  70. " <wfs:PropertyName>default_db__x3A__CRM_PROCES:PROCES/DESC</wfs:PropertyName>",
  71. " <wfs:PropertyName>default_db__x3A__CRM_PROCES:PROCES/default_db__x3A__CRM_PROCES:PROCES</wfs:PropertyName>",
  72. ];
  73. $listExampleProp['lvl2wsk'] = [
  74. " <wfs:PropertyName>ID</wfs:PropertyName>",
  75. " <wfs:PropertyName>PARENT_ID</wfs:PropertyName>",
  76. " <wfs:PropertyName>TYPE</wfs:PropertyName>",
  77. " <wfs:PropertyName>DESC</wfs:PropertyName>",
  78. " <wfs:PropertyName>OPIS</wfs:PropertyName>",
  79. " <wfs:PropertyName>path</wfs:PropertyName>",
  80. " <wfs:PropertyName>default_db__x3A__CRM_PROCES:PROCES/ID</wfs:PropertyName>",
  81. " <wfs:PropertyName>default_db__x3A__CRM_PROCES:PROCES/PARENT_ID</wfs:PropertyName>",
  82. " <wfs:PropertyName>default_db__x3A__CRM_PROCES:PROCES/TYPE</wfs:PropertyName>",
  83. " <wfs:PropertyName>default_db__x3A__CRM_PROCES:PROCES/DESC</wfs:PropertyName>",
  84. " <wfs:PropertyName>default_db__x3A__CRM_PROCES:PROCES/default_db__x3A__CRM_PROCES:PROCES</wfs:PropertyName>",
  85. " <wfs:PropertyName>default_db__x3A__CRM_PROCES:PROCES/default_db__x3A__CRM_WSKAZNIK:CRM_WSKAZNIK</wfs:PropertyName>",
  86. " <wfs:PropertyName>default_db__x3A__CRM_WSKAZNIK:CRM_WSKAZNIK/*</wfs:PropertyName>",
  87. ];
  88. $listExampleProp['lvl3'] = [
  89. " <wfs:PropertyName>ID</wfs:PropertyName>",
  90. " <wfs:PropertyName>PARENT_ID</wfs:PropertyName>",
  91. " <wfs:PropertyName>TYPE</wfs:PropertyName>",
  92. " <wfs:PropertyName>DESC</wfs:PropertyName>",
  93. " <wfs:PropertyName>OPIS</wfs:PropertyName>",
  94. " <wfs:PropertyName>path</wfs:PropertyName>",
  95. " <wfs:PropertyName>default_db__x3A__CRM_PROCES:PROCES/ID</wfs:PropertyName>",
  96. " <wfs:PropertyName>default_db__x3A__CRM_PROCES:PROCES/PARENT_ID</wfs:PropertyName>",
  97. " <wfs:PropertyName>default_db__x3A__CRM_PROCES:PROCES/TYPE</wfs:PropertyName>",
  98. " <wfs:PropertyName>default_db__x3A__CRM_PROCES:PROCES/DESC</wfs:PropertyName>",
  99. " <wfs:PropertyName>default_db__x3A__CRM_PROCES:PROCES/default_db__x3A__CRM_PROCES:PROCES/ID</wfs:PropertyName>",
  100. " <wfs:PropertyName>default_db__x3A__CRM_PROCES:PROCES/default_db__x3A__CRM_PROCES:PROCES/PARENT_ID</wfs:PropertyName>",
  101. " <wfs:PropertyName>default_db__x3A__CRM_PROCES:PROCES/default_db__x3A__CRM_PROCES:PROCES/TYPE</wfs:PropertyName>",
  102. " <wfs:PropertyName>default_db__x3A__CRM_PROCES:PROCES/default_db__x3A__CRM_PROCES:PROCES/DESC</wfs:PropertyName>",
  103. " <wfs:PropertyName>default_db__x3A__CRM_PROCES:PROCES/default_db__x3A__CRM_PROCES:PROCES/default_db__x3A__CRM_PROCES:PROCES</wfs:PropertyName>",
  104. " <wfs:PropertyName>default_db__x3A__CRM_PROCES:PROCES/default_db__x3A__CRM_WSKAZNIK:CRM_WSKAZNIK/*</wfs:PropertyName>",
  105. " <wfs:PropertyName>default_db__x3A__CRM_WSKAZNIK:CRM_WSKAZNIK/*</wfs:PropertyName>",
  106. ];
  107. $exampleWfsRequestBody = "<wfs:Query>" . "\n" . implode("\n", array_merge($listExampleProp['lvl1'], $exampleFltr)) . "\n" ."</wfs:Query>";
  108. UI::startContainer();
  109. // Lib::loadClass('Vendor_Monolog');
  110. // $logger = new Vendor_Monolog('dbg-logger-name');
  111. // $logger->pushHandler(new StreamHandler('/tmp/monolog-test.log', Vendor_Monolog::WARNING));
  112. // $logger->warning('Foo');
  113. // $logger->error('Bar');
  114. //
  115. // $logFile = '/tmp/monolog-test-json.log';
  116. // $formatter = new JsonFormatter();
  117. // // Create a handler
  118. // $stream = new StreamHandler($logFile, Vendor_Monolog::INFO);
  119. // $stream->setFormatter($formatter);
  120. // // bind it to a logger object
  121. // $securityLogger = new Vendor_Monolog('View Info');
  122. // $securityLogger->pushHandler($stream);
  123. // $securityLogger->addInfo('debug message / label', [ 'dbg-object' => [ 'x' => 'y', 'z' ] ]);
  124. // 'wfsRequestFeatureTypeName' = 'default_db__x3A__CRM_PROCES:PROCES'
  125. echo UI::h('input', [ 'id' => 'wfsRequestFeatureTypeName', 'class' => "form-control", 'value' => 'default_db__x3A__CRM_PROCES:PROCES', 'title' => "Feature name" ]);
  126. echo UI::h('textarea', [ 'id' => 'wfsRequestBody', 'style' => "width:100%; height:300px" ], htmlspecialchars($exampleWfsRequestBody));
  127. echo UI::h('button', [ 'class' => "btn btn-primary", 'onClick' => "return sendWfsRequest(this)" ], "Wyslij");
  128. echo UI::h('div', [ 'style' => "display:inline", 'id' => "wfs-example-btns" ]);
  129. echo UI::h('details', [ 'style' => "padding:6px; background-color:#333; color:#fff", 'open' => "open" ], [
  130. UI::h('summary', [ 'style' => "padding:0 3px; outline:none; cursor:pointer" ], "WFS Response converted to JSON"),
  131. UI::h('pre', [ 'id' => 'wfsResponse', 'style' => "margin:0; font-size:x-small; border-radius:0" ], 'loading...'),
  132. ]);
  133. echo UI::h('details', [ 'style' => "padding:6px; background-color:#68cbfd; color:#fff" ], [
  134. UI::h('summary', [ 'style' => "padding:0 3px; outline:none; cursor:pointer" ], [
  135. UI::h('i',[ 'class' => "glyphicon glyphicon-question-sign" ]),
  136. " WFS 1.1, 2.0 fetch nested objects (traverse, resolve)",
  137. ]),
  138. UI::h('pre', ['style' => "margin:0; font-size:x-small; border-radius:0"], implode("\n", [
  139. "WFS 1.1 - traverseXlinkDepth, traverseXlinkExpiry " . UI::h('a', ['href'=>"http://docs.opengeospatial.org/is/04-094r1/04-094r1.html#50"], "http://docs.opengeospatial.org/is/04-094r1/04-094r1.html#50"),
  140. "WFS 2.0 - resolve, resolveDepth, resolveTimeout " . UI::h('a', ['href'=>"http://docs.opengeospatial.org/is/09-025r2/09-025r2.html#57"], "http://docs.opengeospatial.org/is/09-025r2/09-025r2.html#57"),
  141. "",
  142. "WFS 1.1 traverseXlinkDepth type=\"string\" ('*' or int > 0) - recurse limit ('*' - no limit)",
  143. "WFS 1.1 traverseXlinkExpiry type=\"xsd:positiveInteger\" - timeOut in minutes",
  144. "WFS 1.1 Note: traverse used in wfs:GetFeature or inside wfs:Query tag wfs:XlinkPropertyName (same like wfs:PropertyName but with @traverse* attributes)",
  145. "",
  146. "WFS 2.0 resolve type=\"wfs:ResolveValueType\" default=\"none\" (enum: 'local', 'remote', 'all', 'none')",
  147. " - resolve=\"local\" - operation shall only resolve local references",
  148. " - resolve=\"remote\" - operation shall only resolve remote resource references",
  149. " - resolve=\"all\" - means that an operation shall resolve all resource references",
  150. " - resolve=\"none\" - means that an operation shall not resolve any resource references",
  151. "WFS 2.0 resolveDepth type=\"wfs:positiveIntegerWithStar\" default=\"*\" ('*' or int > 0) - recurse limit ('*' - no limit)",
  152. "WFW 2.0 resolveTimeout type=\"xsd:positiveInteger\" default=\"300\" - timeOut in seconds",
  153. "WFS 2.0 Note: resolve used in wfs:GetFeature or inside wfs:Query tag wfs:PropertyName",
  154. " in wfs:PropertyName may use resolvePath - @see " . UI::h('a', ['href'=>"http://docs.opengeospatial.org/is/09-025r2/09-025r2.html#103"], "http://docs.opengeospatial.org/is/09-025r2/09-025r2.html#103"),
  155. "",
  156. "WFS 2.0 resolve, resolveDepth example " . UI::h('a', ['href'=>"http://grepcode.com/file/repo1.maven.org/maven2/org.jvnet.ogc/ogc-schemas/2.2.0/ogc/wfs/2.0/examples/GetFeature/GetFeature_12.xml"], "http://grepcode.com/file/repo1.maven.org/maven2/org.jvnet.ogc/ogc-schemas/2.2.0/ogc/wfs/2.0/examples/GetFeature/GetFeature_12.xml"),
  157. ])),
  158. ]);
  159. UI::endContainer();
  160. $examples['Procesy'] = [
  161. 'typeName' => 'default_db__x3A__CRM_PROCES:PROCES',
  162. 'examples' => array_map(function ($props) use ($exampleFltr) {
  163. return "<wfs:Query>" . "\n" . implode("\n", array_merge($props, $exampleFltr)) . "\n" . "</wfs:Query>";
  164. }, $listExampleProp),
  165. ];
  166. $examples['BiAudit'] = [
  167. 'typeName' => 'default_db__x3A__BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA:BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA',
  168. 'examples' => [
  169. 'BiAudit' => "",
  170. 'BiAudit lvl3' => "<wfs:Query>" . implode("\n\t", [
  171. "<wfs:PropertyName>A_ADM_COMPANY</wfs:PropertyName>",
  172. "<wfs:PropertyName>A_CLASSIFIED</wfs:PropertyName>",
  173. "<wfs:PropertyName>A_STATUS</wfs:PropertyName>",
  174. "<wfs:PropertyName>A_STATUS_INFO</wfs:PropertyName>",
  175. "<wfs:PropertyName>BI_analiza_depth</wfs:PropertyName>",
  176. "<wfs:PropertyName>BI_analiza_reloadCache</wfs:PropertyName>",
  177. "<wfs:PropertyName>FILE_STATUS</wfs:PropertyName>",
  178. "<wfs:PropertyName>FILE_STATUS_info</wfs:PropertyName>",
  179. "<wfs:PropertyName>ID</wfs:PropertyName>",
  180. "<wfs:PropertyName>L_APPOITMENT_USER</wfs:PropertyName>",
  181. "<wfs:PropertyName>default_db__x3A__BI_audit_ENERGA_PRACOWNICY:BI_audit_ENERGA_PRACOWNICY/*</wfs:PropertyName>",
  182. "<wfs:PropertyName>default_db__x3A__BI_audit_ENERGA_RUM_KONTRAHENCI:BI_audit_ENERGA_RUM_KONTRAHENCI/*</wfs:PropertyName>",
  183. "<wfs:PropertyName>default_db__x3A__BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row:BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row/*</wfs:PropertyName>",
  184. "<wfs:PropertyName>default_db__x3A__BI_audit_KW_requested_person:BI_audit_KW_requested_person/*</wfs:PropertyName>",
  185. ]) . "\n" . "</wfs:Query>",
  186. ],
  187. ];
  188. echo UI::h('script', [], "
  189. var examples = " . json_encode($examples) . ";
  190. console.log('examples', examples)
  191. function setWfsExample(label, i) {
  192. console.log('label', label, 'i', i)
  193. document.getElementById('wfsRequestFeatureTypeName').value = examples[label].typeName
  194. document.getElementById('wfsRequestBody').value = examples[label].examples[i]
  195. sendWfsRequest()
  196. }
  197. for (var label in examples) {
  198. for (var i in examples[label].examples) {
  199. jQuery(document.getElementById('wfs-example-btns')).append('<button class=\"btn btn-default\" style=\"margin-left:12px\" onClick=\"setWfsExample(\''+label+'\', \''+i+'\')\">'+i+'</button>')
  200. }
  201. }
  202. ");
  203. echo UI::h('script', [], "
  204. function sendWfsRequest() {
  205. document.getElementById('wfsResponse').innerHTML = 'loading...'
  206. var featureTypeName = document.getElementById('wfsRequestFeatureTypeName').value
  207. var postBody = document.getElementById('wfsRequestBody').value.replace(/&lt;/g, '<').replace(/&gt;/g, '>')
  208. console.log('wfsRequestBody:', postBody)
  209. p5WFS_GetFeature(featureTypeName, Object.assign({
  210. 'maxFeatures': 5,
  211. }, (!postBody) ? {} : { 'ogc:Filter': postBody }
  212. )).then(function (features) {
  213. console.log('features', features)
  214. document.getElementById('wfsResponse').innerHTML = JSON.stringify(features, null, 2)
  215. }).catch(function (e) {
  216. console.warn(e)
  217. document.getElementById('wfsResponse').innerHTML = JSON.stringify(e, null, 2)
  218. p5UI__notifyAjaxCallback({ type: 'error', msg: e })
  219. })
  220. return false
  221. }
  222. (function () {
  223. console.log('p5WFS_GetFeature() ...')
  224. sendWfsRequest()
  225. })()
  226. ");
  227. } catch (Exception $e) {
  228. UI::alert('danger', $e);
  229. }
  230. UI::dol();
  231. }
  232. }