BiAuditGraph.php 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <?php
  2. Lib::loadClass('Api_WfsNs');
  3. class Route_UrlAction_BiAuditGraph extends RouteBase {
  4. function defaultAction() {
  5. $args = [];
  6. $args['raportId'] = V::get('raportId', 0, $_GET, 'int');
  7. $args['featureId'] = V::get('featureId', '', $_GET);
  8. $args['primaryKey'] = V::get('primaryKey', '', $_GET);
  9. if ($args['raportId']) return UI::layout([$this, 'raportView'], [ 'args' => $args ]);
  10. UI::layout([$this, 'defaultView']);
  11. }
  12. function defaultView() {
  13. // typeName = "default_db__x3A__BI_audit_KRS_person:BI_audit_KRS_person"
  14. $namespace = 'default_db/BI_audit_KRS_person/BI_audit_KRS_person'; // V::get('namespace', '', $_GET);
  15. if (!$namespace) throw new Exception("Missing namespace");
  16. $primaryKey = V::get('primaryKey', '', $_GET);
  17. if (!$primaryKey) throw new Exception("Missing primaryKey");
  18. echo UI::h('div', [ 'id' => "ref_graph_node", 'style' => "width:98%; height:500px; border:1px solid silver; margin:8px auto; padding:0" ], [
  19. "Pobieranie danych..."
  20. ]);
  21. echo UI::h('script', [ 'src' => "static/visjs/vis.min.js" ]);
  22. echo UI::h('style', [ 'type' => "text/css", 'src' => "static/visjs/vis.min.css" ]);
  23. UI::inlineJS(__FILE__ . '.view.js', [
  24. 'HTML_ID_REF_GRAPH' => 'ref_graph_node',
  25. 'TYPENAME' => Api_WfsNs::typeName($namespace),
  26. 'PRIMARY_KEY' => $primaryKey,
  27. 'WFS_URL' => Router::getRoute('WfsBiAudit')->getLink(),
  28. 'DBG' => (V::get('DBG', 0, $_GET, 'int') > 0),
  29. ]);
  30. }
  31. function raportOutputMatrixAction() {
  32. $args = [];
  33. $args['raportId'] = V::get('raportId', 0, $_GET, 'int');
  34. $args['outputFormat'] = V::get('outputFormat', '', $_GET, 'word');
  35. try {
  36. if (!$args['raportId']) throw new Exception("Wrong param raportId");
  37. } catch (\Exception $e) {
  38. switch ($args['outputFormat']) {
  39. case 'json': return $this->sendJsonErrorMsg($e->getMessage());
  40. case 'xml': return $this->sendXmlErrorMsg($e->getMessage());
  41. case 'html':
  42. default: {
  43. return $this->sendHtmlErrorMsg($e->getMessage());
  44. }
  45. }
  46. }
  47. $matrix = $this->getRaportOutputMatrix($args['raportId']);
  48. switch ($args['outputFormat']) {
  49. case 'json': return $this->sendJsonMatrix($args['raportId'], $matrix);
  50. case 'xml': return $this->sendXmlMatrix($args['raportId'], $matrix);
  51. case 'html':
  52. default: {
  53. return $this->sendHtmlMatrix($args['raportId'], $matrix);
  54. }
  55. }
  56. }
  57. function sendJsonMatrix($raportId, $matrix) { // TODO: ..
  58. print_r($matrix);
  59. }
  60. function sendXmlMatrix($raportId, $matrix) { // TODO: ...
  61. print_r($matrix);
  62. }
  63. function sendHtmlMatrix($raportId, $matrix) {
  64. UI::gora();
  65. UI::table([
  66. 'caption' => "Wyniki raportu Nr {$raportId}",
  67. 'rows' => $matrix,
  68. ]);
  69. UI::dol();
  70. }
  71. function sendJsonErrorMsg($msg) { // TODO: ..
  72. echo $e->getMessage();
  73. }
  74. function sendXmlErrorMsg($msg) { // TODO: ...
  75. echo $e->getMessage();
  76. }
  77. function sendHtmlErrorMsg($msg) {
  78. UI::gora();
  79. UI::alert('danger', $e->getMessage());
  80. UI::dol();
  81. }
  82. function raportView($args) {
  83. $raportId = V::get('raportId', 0, $args, 'int');
  84. $featureId = V::get('featureId', '', $args, '');
  85. $h = [ 'UI', 'h' ];
  86. echo $h('div', [ 'id' => "bi_audit_raport-network_graph" ], "TODO: loading data...");
  87. echo $h('script', ['src'=>"static/vendor.js?v=a76e2988", 'type'=>"text/javascript"]);
  88. echo $h('script', [ 'src' => "static/visjs/vis.min.js" ]);
  89. UI::inlineJS(__FILE__ . '.network-graph.js', [
  90. 'HTML_ID_REF_GRAPH' => 'bi_audit_raport-network_graph',
  91. // 'TYPENAME' => Api_WfsNs::typeName($namespace),
  92. // 'PRIMARY_KEY' => $primaryKey,
  93. // 'WFS_URL' => Router::getRoute('WfsBiAudit')->getLink(),
  94. 'API_URL' => $this->getLink('getRaportNetworkGraphDataAjax'),
  95. 'DBG' => (V::get('DBG', 0, $_GET, 'int') > 0),
  96. ]);
  97. $this->getRaportOutputMatrix($raportId); // TODO: DBG
  98. }
  99. function getRaportNetworkGraphDataAjaxAction() {
  100. }
  101. function getRaportOutputMatrix($raportId) {
  102. // Main Raport Acl NS: default_db__x3A__BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA:BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA
  103. // - Found Paths in: default_db__x3A__BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row:BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row
  104. // - Path Points in: default_db__x3A__BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row_object:BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row_object
  105. $mainNs = [
  106. 'Raport' => 'default_db__x3A__BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA:BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA',
  107. 'Path' => 'default_db__x3A__BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row:BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row',
  108. 'Point' => 'default_db__x3A__BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row_object:BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row_object',
  109. ];
  110. $listObjectsNs = [];
  111. $listObjectsNs[] = 'default_db__x3A__BI_audit_CEIDG:BI_audit_CEIDG';
  112. $listObjectsNs[] = 'default_db__x3A__BI_audit_CEIDG_pelnomocnicy:BI_audit_CEIDG_pelnomocnicy';
  113. $listObjectsNs[] = 'default_db__x3A__BI_audit_CEIDG_powiazania:BI_audit_CEIDG_powiazania';
  114. $listObjectsNs[] = 'default_db__x3A__BI_audit_ENERGA_PRACOWNICY:BI_audit_ENERGA_PRACOWNICY';
  115. $listObjectsNs[] = 'default_db__x3A__BI_audit_ENERGA_PRACOWNICY_adresy:BI_audit_ENERGA_PRACOWNICY_adresy';
  116. $listObjectsNs[] = 'default_db__x3A__BI_audit_ENERGA_RUM_KONTRAHENCI:BI_audit_ENERGA_RUM_KONTRAHENCI';
  117. $listObjectsNs[] = 'default_db__x3A__BI_audit_KRS:BI_audit_KRS';
  118. $listObjectsNs[] = 'default_db__x3A__BI_audit_KRS_address:BI_audit_KRS_address';
  119. $listObjectsNs[] = 'default_db__x3A__BI_audit_KRS_company:BI_audit_KRS_company';
  120. $listObjectsNs[] = 'default_db__x3A__BI_audit_KRS_person:BI_audit_KRS_person';
  121. $listObjectsNs[] = 'default_db__x3A__BI_audit_KW_requested_person:BI_audit_KW_requested_person';
  122. $listObjectsNs[] = 'default_db__x3A__BI_audit_MSIG:BI_audit_MSIG';
  123. $listObjectsNs[] = 'default_db__x3A__BI_audit_MSIG_address:BI_audit_MSIG_address';
  124. $listObjectsNs[] = 'default_db__x3A__BI_audit_MSIG_company:BI_audit_MSIG_company';
  125. $listObjectsNs[] = 'default_db__x3A__BI_audit_MSIG_person:BI_audit_MSIG_person';
  126. $listObjectsNs[] = 'default_db__x3A__TERYT_adresy:TERYT_adresy';
  127. $outRefTables = array_merge(
  128. [ [ 'label' => 'Raport_to_Path', 'table' => ACL::getRefTable(Api_WfsNs::toNamespace($mainNs['Raport']), $mainNs['Path']) ] ],
  129. [ [ 'label' => 'Path_to_Point', 'table' => ACL::getRefTable(Api_WfsNs::toNamespace($mainNs['Path']), $mainNs['Point']) ] ],
  130. array_map(function ($objNs) use ($mainNs) {
  131. $objLabel = str_replace([ 'BI_audit_' ], '', substr($objNs, strrpos($objNs, ':') + 1));
  132. return [ 'label' => "Point_to_{$objLabel}", 'table' => ACL::getRefTable(Api_WfsNs::toNamespace($mainNs['Point']), $objNs) ];
  133. }, $listObjectsNs)
  134. );
  135. $nsToTableName = function ($objNs) {
  136. return substr($objNs, strrpos($objNs, ':') + 1);
  137. };
  138. $mainTables = array_map($nsToTableName, array_merge($mainNs));
  139. $refFromPointTables = array_map($nsToTableName, $listObjectsNs);
  140. $allTables = array_merge($mainTables, $refFromPointTables);
  141. DBG::log($allTables, 'array', '$allTables');
  142. $refTables = array_combine( array_map(V::makePick('label'), $outRefTables), array_map(V::makePick('table'), $outRefTables) );
  143. DBG::log($refTables, 'array', '$refTables');
  144. $fromPointRefTableAliases = array_map(function ($objNs) {
  145. return str_replace([ 'BI_audit_' ], '', substr($objNs, strrpos($objNs, ':') + 1));
  146. }, array_merge($listObjectsNs));
  147. DBG::log($fromPointRefTableAliases, 'array', '$fromPointRefTableAliases');
  148. $sqlSelect = implode("\n , ", array_merge(
  149. array_map(function ($tbl, $key) {
  150. return "t_{$key}.ID as pk_{$key}";
  151. }, $mainTables, array_keys($mainTables)),
  152. array_map(function ($tbl, $key) use ($fromPointRefTableAliases) {
  153. return "t_{$key}.ID as pk_{$fromPointRefTableAliases[$key]}";
  154. }, $refFromPointTables, array_keys($refFromPointTables))
  155. ));
  156. $sqlTablesFrom = [];
  157. // return "\n" . "join `{$tableName}` `t_{$key}` on ( `t_{$key}`.ID = `t_{}` ) ";
  158. $sqlListFromJoin = [];
  159. $fromPointRefTables = array_slice(array_values($refTables), 2);
  160. for ($i = 0; $i < count($listObjectsNs); $i++) {
  161. $sqlListFromJoin[] = "
  162. left join `{$fromPointRefTables[$i]}` as r_Point_to_{$i} on ( r_Point_to_{$i}.PRIMARY_KEY = t_Point.ID )
  163. left join `{$allTables[$i]}` as t_{$i} on ( t_{$i}.ID = r_Point_to_{$i}.REMOTE_PRIMARY_KEY )
  164. ";
  165. }
  166. $sqlFromJoin = implode("\n", $sqlListFromJoin);
  167. $sql = "
  168. select {$sqlSelect}
  169. from `{$allTables['Raport']}` as t_Raport
  170. left join `{$refTables['Raport_to_Path']}` as r_Raport_to_Path on ( r_Raport_to_Path.PRIMARY_KEY = t_Raport.ID )
  171. left join `{$allTables['Path']}` as t_Path on ( t_Path.ID = r_Raport_to_Path.REMOTE_PRIMARY_KEY )
  172. left join `{$refTables['Path_to_Point']}` as r_Path_to_Point on ( r_Path_to_Point.PRIMARY_KEY = t_Path.ID )
  173. left join `{$allTables['Point']}` as t_Point on ( t_Point.ID = r_Path_to_Point.REMOTE_PRIMARY_KEY )
  174. {$sqlFromJoin}
  175. where t_Raport.ID = {$raportId}
  176. ";
  177. return DB::getPDO()->fetchAll($sql);
  178. }
  179. }