convertGuiXmlToFiltersPHP.xsl 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet version="1.0"
  3. xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  4. xmlns:ui_table="https://biuro.biall-net.pl/SE/version-git/schema/gui/table.gui.xsd"
  5. xmlns:ogc="http://www.opengis.net/ogc"
  6. >
  7. <!-- xmlns:p5_36_TEST_PERMS="https://biuro.biall-net.pl/api/36/TEST_PERMS" -->
  8. <!-- import namespaces from xsd xmlns:p5_36_TEST_PERMS="https://biuro.biall-net.pl/api/36/TEST_PERMS" -->
  9. <xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
  10. <!-- from Data_Source
  11. sf_Problemy
  12. $fltrs['Problemy'] = new stdClass();
  13. $fltrs['Problemy']->icon = 'glyphicon glyphicon-warning-sign';
  14. $fltrs['Problemy']->btns = array();
  15. $fltrs['Problemy']->btns['PROBLEMY'] = (object)array('value'=>'PROBLEM');
  16. $fltrs['Problemy']->btns['OSTRZEZENIA'] = (object)array('value'=>'WARNING');
  17. $fltrs['Problemy']->btns['BEZ_PROBLEM.'] = (object)array('value'=>'NORMAL');
  18. sf_Status
  19. $fltrs['Status'] = new stdClass();
  20. $fltrs['Status']->icon = 'glyphicon glyphicon-question-sign';
  21. $fltrs['Status']->btns = array();
  22. $fltrs['Status']->btns['OCZEKUJACY'] = (object)array('value'=>'WAITING');
  23. $fltrs['Status']->btns['AKTYWNI'] = (object)array('value'=>'AKTYWNI');
  24. sf_Spotkania
  25. $fltrs['Spotkania'] = new stdClass();
  26. $fltrs['Spotkania']->icon = 'glyphicon glyphicon-calendar';
  27. $fltrs['Spotkania']->btns = array();
  28. $fltrs['Spotkania']->btns['STARE'] = (object)array('value'=>'OLD');
  29. $fltrs['Spotkania']->btns['ZARAZ'] = (object)array('value'=>'NOW');
  30. $fltrs['Spotkania']->btns['DZISIAJ'] = (object)array('value'=>'TODAY');
  31. $fltrs['Spotkania']->btns['BRAK'] = (object)array('value'=>'BRAK');
  32. sf_Access
  33. $fltrs['Access'] = new stdClass();
  34. $fltrs['Access']->icon = 'glyphicon glyphicon-lock';
  35. $fltrs['Access']->btns = array();
  36. $fltrs['Access']->btns['Pokaż'] = (object)array('value'=>'SHOW');
  37. -->
  38. <!-- from Data_Source
  39. sf_Problemy
  40. case 'Problemy':
  41. if (array_key_exists('A_PROBLEM', $this->_cols)) {
  42. switch ($value) {
  43. case 'PROBLEM':
  44. $sqlFltr = " t.`A_PROBLEM`!='' ";
  45. break;
  46. case 'WARNING':
  47. $sqlFltr = " t.`A_PROBLEM`='WARNING' ";
  48. break;
  49. case 'NORMAL':
  50. $sqlFltr = " t.`A_PROBLEM`='' ";
  51. break;
  52. }
  53. }
  54. break;
  55. case 'Status':
  56. if (array_key_exists('A_STATUS', $this->_cols)) {
  57. switch ($value) {
  58. case 'WAITING':
  59. $sqlFltr = " t.`A_STATUS`='WAITING' ";
  60. break;
  61. case 'AKTYWNI':
  62. $sqlFltr = " t.`A_STATUS` in('NORMAL', 'WARNING') ";
  63. // TODO: $_SESSION['USERS_FILTER_STATUS_SQL']="and (( $thiss->DETECT_TABLE_NAME.A_STATUS='NORMAL' or $thiss->DETECT_TABLE_NAME.A_STATUS='WARNING' ) or ( $thiss->DETECT_TABLE_NAME.A_STATUS='OFF_SOFT' and $thiss->DETECT_TABLE_NAME.A_PROBLEM_DESC not like '%odla%fizy%' and $thiss->DETECT_TABLE_NAME.A_PROBLEM!='' ) or ( $thiss->DETECT_TABLE_NAME.A_STATUS='OFF_SOFT' and $thiss->DETECT_TABLE_NAME.A_PROBLEM='' )) ";
  64. // if ($thiss->DETECT_TABLE_NAME == 'KSIEG_DOKUMENTY') $_SESSION['USERS_FILTER_STATUS_SQL']="and ( $thiss->DETECT_TABLE_NAME.A_STATUS='NORMAL' or $thiss->DETECT_TABLE_NAME.A_STATUS='WARNING' ) ";
  65. break;
  66. }
  67. }
  68. break;
  69. case 'Spotkania':
  70. if (array_key_exists('L_APPOITMENT_DATE', $this->_cols)) {
  71. switch ($value) {
  72. case 'OLD':
  73. $sqlFltr = " UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)<UNIX_TIMESTAMP(now()) and t.`L_APPOITMENT_DATE`!='' ";
  74. break;
  75. case 'NOW':
  76. $sqlFltr = " UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)<UNIX_TIMESTAMP(now())+3600 and UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)>UNIX_TIMESTAMP(now())-3600 ";
  77. break;
  78. case 'TODAY':
  79. $start = mktime(0,0,0, date("m"), date("d"), date("Y"));
  80. $end = mktime(0,0,0, date("m"), date("d") + 1, date("Y"));
  81. $sqlFltr = " UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)>'{$start}' and UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)<'{$end}' ";
  82. break;
  83. case 'TOMORROW':
  84. $start = mktime(0,0,0, date("m"), date("d") + 1, date("Y"));
  85. $end = mktime(0,0,0, date("m"), date("d") + 2, date("Y"));
  86. $sqlFltr = " UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)>'{$start}' and UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)<'{$end}' ";
  87. break;
  88. case 'YESTERDAY':
  89. $start = mktime(0,0,0, date("m"), date("d") - 1, date("Y"));
  90. $end = mktime(0,0,0, date("m"), date("d") - 2, date("Y"));
  91. $sqlFltr = " UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)>'{$start}' and UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)<'{$end}' ";
  92. break;
  93. case 'BRAK':
  94. $start = mktime(0,0,0, date("m"), date("d") - 1, date("Y"));
  95. $end = mktime(0,0,0, date("m"), date("d") - 2, date("Y"));
  96. $sqlFltr = " t.`L_APPOITMENT_DATE`='' ";
  97. break;
  98. }
  99. }
  100. break;
  101. case 'Access':
  102. if ('SHOW' != $value && $this->isAccessFltrAllowed()) {
  103. $userLogin = User::getLogin();
  104. $usrAclGroups = User::getLdapGroupsNames();
  105. $usrAclGroups[] = '';// TODO: allow empty for everyone?
  106. $sqlUsrAclGroups = "'" . implode("','", $usrAclGroups) . "'";
  107. $sqlFltr = "
  108. t.`{$this->_fieldGroupWrite}` in({$sqlUsrAclGroups})
  109. and t.`{$this->_fieldGroupRead}` in({$sqlUsrAclGroups})
  110. ";
  111. if (array_key_exists('L_APPOITMENT_USER', $this->_cols)) {
  112. $sqlFltr = "
  113. (
  114. ({$sqlFltr})
  115. or t.`L_APPOITMENT_USER`='{$userLogin}'
  116. )
  117. ";
  118. }
  119. }
  120. -->
  121. <!-- $sqlFltr = " t.`A_STATUS`='WAITING' "; -->
  122. <!-- $sqlFltr = " t.`A_STATUS` in('NORMAL', 'WARNING') "; -->
  123. <!-- $sqlFltr = " (t.`A_STATUS`='NORMAL' or t.`A_STATUS`='WARNING') "; -->
  124. <!-- in('NORMAL', 'WARNING') -->
  125. <!-- ogc:Filter example:
  126. <ogc:Filter>
  127. <ogc:And>
  128. <ogc:Or>
  129. <ogc:PropertyIsEqualTo>
  130. <ogc:PropertyName>ID</ogc:PropertyName>
  131. <ogc:Literal>98400005701</ogc:Literal>
  132. </ogc:PropertyIsEqualTo>
  133. <ogc:PropertyIsEqualTo>
  134. <ogc:PropertyName>ID</ogc:PropertyName>
  135. <ogc:Literal>-1</ogc:Literal>
  136. </ogc:PropertyIsEqualTo>
  137. </ogc:Or>
  138. <ogc:And>
  139. <ogc:PropertyIsLessThanOrEqualTo>
  140. <ogc:PropertyName>MH_DATUM_INGANG</ogc:PropertyName>
  141. <ogc:Literal>2015-02-27T00:00:00Z</ogc:Literal>
  142. </ogc:PropertyIsLessThanOrEqualTo>
  143. <ogc:Or>
  144. <ogc:PropertyIsGreaterThanOrEqualTo>
  145. <ogc:PropertyName>MH_DATUM_EINDE</ogc:PropertyName>
  146. <ogc:Literal>2015-02-27T00:00:00Z</ogc:Literal>
  147. </ogc:PropertyIsGreaterThanOrEqualTo>
  148. <ogc:PropertyIsNull>
  149. <ogc:PropertyName>MH_DATUM_EINDE</ogc:PropertyName>
  150. </ogc:PropertyIsNull>
  151. </ogc:Or>
  152. </ogc:And>
  153. </ogc:And>
  154. </ogc:Filter>
  155. -->
  156. <xsl:template match="/">
  157. <xsl:apply-templates select="ui_table:ui_table/ui_table:filters"/>
  158. </xsl:template>
  159. <xsl:template match="ui_table:filters">
  160. <xsl:value-of select="'&lt;?php'" />
  161. require_once dirname(__FILE__) . '/../../se-lib/bootstrap.php';
  162. Lib::loadClass('SqlQueryWhereBuilder');
  163. $filters = array();
  164. // DBG: template match="ui_table:filters"
  165. // DBG: element name = '<xsl:value-of select="local-name()" />'
  166. // DBG: element name = '<xsl:value-of select="name(.)" />'
  167. <xsl:apply-templates select="ui_table:filter"/>
  168. // TODO: DBG $filters
  169. print_r($filters);
  170. </xsl:template>
  171. <!--
  172. <filters>
  173. <filter>
  174. <label>Status</label>
  175. <icon>question-sign</icon>
  176. <name>sf_Status</name>
  177. <filter_buttons>
  178. <filter_button>
  179. <name>OCZEKUJACY</name>
  180. <value>WAITING</value>
  181. <ogc:Filter>
  182. <ogc:PropertyIsEqualTo>
  183. <ogc:PropertyName>A_STATUS</ogc:PropertyName>
  184. <ogc:Literal>WAITING</ogc:Literal>
  185. </ogc:PropertyIsEqualTo>
  186. </ogc:Filter>
  187. </filter_button>
  188. <filter_button>
  189. <name>AKTYWNI</name>
  190. <value>AKTYWNI</value>
  191. <ogc:Filter>
  192. <ogc:Or>
  193. <ogc:PropertyIsEqualTo>
  194. <ogc:PropertyName>A_STATUS</ogc:PropertyName>
  195. <ogc:Literal>NORMAL</ogc:Literal>
  196. </ogc:PropertyIsEqualTo>
  197. </ogc:Or>
  198. <ogc:Or>
  199. <ogc:PropertyIsEqualTo>
  200. <ogc:PropertyName>A_STATUS</ogc:PropertyName>
  201. <ogc:Literal>WARNING</ogc:Literal>
  202. </ogc:PropertyIsEqualTo>
  203. </ogc:Or>
  204. </ogc:Filter>
  205. -->
  206. <xsl:template match="ui_table:filter">
  207. // DBG: template match="ui_table:filter"
  208. $filters['<xsl:value-of select="ui_table:name" />']['label'] = "<xsl:value-of select="ui_table:label" />";
  209. $filters['<xsl:value-of select="ui_table:name" />']['icon'] = "<xsl:value-of select="ui_table:icon" />";
  210. $filterButtons = array();
  211. <xsl:apply-templates select="ui_table:filter_buttons/ui_table:filter_button"/>
  212. $filters['<xsl:value-of select="ui_table:name" />']['buttons'] = $filterButtons;
  213. </xsl:template>
  214. <xsl:template match="ui_table:filter_button">
  215. // DBG: template match="ui_table:filter_button"
  216. $filterButtons['<xsl:value-of select="ui_table:value" />'] = array();
  217. $filterButtons['<xsl:value-of select="ui_table:value" />']['label'] = "<xsl:value-of select="ui_table:name" />";
  218. <!-- TODO: sql filter -->
  219. $sqlFilter = new SqlQueryWhereBuilder();
  220. <xsl:apply-templates select="ogc:Filter"/>
  221. $filterButtons['<xsl:value-of select="ui_table:value" />']['sqlFilter'] = $sqlFilter;
  222. $filterButtons['<xsl:value-of select="ui_table:value" />']['sqlFilterRaw'] = $sqlFilter->getQueryWhere();
  223. </xsl:template>
  224. <xsl:template match="ogc:Filter">
  225. // DBG: template match="ogc:Filter"
  226. <xsl:apply-templates/>
  227. </xsl:template>
  228. <xsl:template match="ogc:Or">
  229. // DBG: template match="ogc:Or"
  230. $sqlFilter->openBlock('or');
  231. <xsl:apply-templates/>
  232. $sqlFilter->closeBlock('or');
  233. </xsl:template>
  234. <xsl:template match="ogc:And">
  235. // DBG: template match="ogc:And"
  236. $sqlFilter->openBlock('and');
  237. <xsl:apply-templates/>
  238. $sqlFilter->closeBlock('and');
  239. </xsl:template>
  240. <!--
  241. <ogc:PropertyIsEqualTo>
  242. <ogc:PropertyName>A_STATUS</ogc:PropertyName>
  243. <ogc:Literal>NORMAL</ogc:Literal>
  244. </ogc:PropertyIsEqualTo>
  245. -->
  246. <!-- TODO: sql variable for table prefix (t) -->
  247. <xsl:template match="ogc:PropertyIsEqualTo">
  248. // DBG: template match="ogc:PropertyIsEqualTo"
  249. $sqlFilter->addComparisonFieldToValue('<xsl:value-of select="ogc:PropertyName" />', '=', '<xsl:value-of select="ogc:Literal" />');
  250. </xsl:template>
  251. </xsl:stylesheet>