FixCrmProcesInitIdx.php 49 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219
  1. <?php
  2. Lib::loadClass('RouteBase');
  3. Lib::loadClass('DebugExecutionTime');
  4. class Route_FixCrmProcesInitIdx extends RouteBase {
  5. public function handleAuth() {
  6. if (!User::logged()) {
  7. throw new HttpException('Unauthorized', 401);
  8. }
  9. }
  10. public function defaultAction() {
  11. SE_Layout::gora();
  12. // echo '<a href="index.php?_route=FixCrmProcesInitIdx&_task=run">aktualizuj uprawnienia</a>';
  13. ?>
  14. <div class="jumbotron">
  15. <div class="container">
  16. <form class="form-inline" method="POST">
  17. <input type="hidden" name="_route" value="FixCrmProcesInitIdx" />
  18. <input type="hidden" name="_task" value="run" />
  19. <button type="submit" id="fldExecuteBtn" class="btn btn-primary" autocomplete="off">
  20. Zaktualizuj uprawnienia
  21. </button>
  22. </form>
  23. </div>
  24. </div>
  25. <script type="text/javascript">
  26. jQuery(document).ready(function () {
  27. jQuery('#fldExecuteBtn').on('click', function () {
  28. jQuery(this).text(jQuery(this).text() + '...').attr('disabled', 'disabled');
  29. jQuery(this).parent().submit();
  30. })
  31. });
  32. </script>
  33. <?php
  34. SE_Layout::dol();
  35. }
  36. public function mapAction() {
  37. SE_Layout::gora();
  38. // echo '<a href="index.php?_route=FixCrmProcesInitIdx&_task=run">aktualizuj uprawnienia</a>';
  39. $idProcesInit = V::get('id_proces_init', '', $_REQUEST, 'int');
  40. ?>
  41. <div class="jumbotron">
  42. <div class="container">
  43. <form class="form-inline" method="POST">
  44. <input type="hidden" name="_route" value="FixCrmProcesInitIdx" />
  45. <input type="hidden" name="_task" value="map" />
  46. <input type="text" class="form-control" name="id_proces_init" value="<?php echo $idProcesInit; ?>" />
  47. <button type="submit" id="fldExecuteBtn" class="btn btn-primary" autocomplete="off">
  48. Pokaż mapę
  49. </button>
  50. </form>
  51. </div>
  52. </div>
  53. <script type="text/javascript">
  54. jQuery(document).ready(function () {
  55. jQuery('#fldExecuteBtn').on('click', function () {
  56. jQuery(this).text(jQuery(this).text() + '...').attr('disabled', 'disabled');
  57. jQuery(this).parent().submit();
  58. })
  59. });
  60. </script>
  61. <?php
  62. if ($idProcesInit) {
  63. $this->printProcesInitMap($idProcesInit);
  64. }
  65. SE_Layout::dol();
  66. }
  67. public function printProcesInitMap($idProcesInit) {
  68. Lib::loadClass('CrmProcesMap');
  69. $map = new CrmProcesMap($idProcesInit);
  70. }
  71. public function runAction() {
  72. SE_Layout::gora();
  73. SE_Layout::menu();
  74. $DBG_TIME = true;//('1' == V::get('DBG_TIME', '', $_GET));
  75. $dbgExecTime = new DebugExecutionTime();
  76. if ($DBG_TIME) $dbgExecTime->activate();
  77. $dbgExecTime->log('start');
  78. try {
  79. $this->_callProcedure();
  80. } catch (Exception $e) {
  81. ?>
  82. <div class="container">
  83. <div class="alert alert-warning">
  84. <?php echo $e->getMessage(); ?>
  85. </div>
  86. </div>
  87. <?php
  88. SE_Layout::dol();
  89. exit;
  90. }
  91. $dbgExecTime->log('procedure');
  92. $procExecTime = $dbgExecTime->getLastExecTime();
  93. //$totalExecTime = $dbgExecTime->getTotalExecTime();
  94. ?>
  95. <div class="container">
  96. <div class="alert alert-success">
  97. Zaktualizowano uprawnienia
  98. <br><span style="font-style:italic; opacity:0.4;">(<?php echo number_format($procExecTime, 6); ?> s)</span>
  99. </div>
  100. </div>
  101. <?php
  102. if($DBG_TIME){
  103. $dbgExecTime->log('end');
  104. //$dbgExecTime->printDebug();
  105. }
  106. SE_Layout::dol();
  107. }
  108. public function runApiAction() {
  109. $this->_callProcedure();
  110. die('Zaktualizowano uprawnienia');
  111. }
  112. private function _callProcedure() {
  113. $sql = "call `update_proces_init_idx_rec`();";
  114. $db = DB::getDB();
  115. if ($db->has_errors()) {
  116. throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
  117. }
  118. $res = $db->query($sql);
  119. if ($db->has_errors()) {
  120. $dbErrors = array();
  121. if ($db->has_errors()) {
  122. $dbErrorsSql = $db->get_errors();
  123. foreach ($dbErrorsSql as $vErr) {
  124. if ('SQL QUERY FAILED: ' == substr($vErr, 0, 18)) {
  125. $vErr = substr($vErr, 18);
  126. }
  127. //$dbErrors[] = StorageException::parseMessage($vErr);
  128. $dbErrors[] = $vErr;
  129. }
  130. }
  131. throw new StorageException($dbErrors);
  132. }
  133. }
  134. public function test1Action() {
  135. $sql = <<<SQL
  136. select count(*) as cnt, p.`ID`, group_concat(i.`idx_PROCES_INIT_ID`), group_concat(i.`idx_PROCES_WITH_GROUPS_ID`)
  137. from `CRM_PROCES` p
  138. left join `CRM_PROCES_idx` i on(i.`ID_PROCES`=p.`ID`)
  139. where i.`ID_PROCES`=p.`ID`
  140. group by p.`ID`
  141. order by cnt desc
  142. SQL;
  143. $db = DB::getDB();
  144. if ($db->has_errors()) {
  145. throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
  146. }
  147. $res = $db->query($sql);
  148. if ($db->has_errors()) {
  149. throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
  150. }
  151. while ($r = $db->fetch($res)) {
  152. echo'<pre>';print_r($r);echo'</pre>';
  153. }
  154. }
  155. public function test2Action() {
  156. $sqlList = array();
  157. $sqlList['RemoveTableGroupToInit'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_GROUPS_to_INIT`";
  158. $sqlList['RemoveTableGroupToInit'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_GROUP_to_PROCES`";
  159. $sqlList['InstallTableGroupToInit'] = <<<SQL
  160. CREATE TABLE IF NOT EXISTS `CRM_PROCES_idx_GROUP_to_PROCES` (
  161. `ID_PROCES` int(11) NOT NULL
  162. , `ID_GROUP` int(11) NOT NULL
  163. , KEY `ID_PROCES` (`ID_PROCES`)
  164. , KEY `ID_GROUP` (`ID_GROUP`)
  165. , UNIQUE KEY `uniq__GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
  166. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  167. SQL;
  168. $sqlList['UpdateTableGroupToInit'] = <<<SQL
  169. insert ignore into `CRM_PROCES_idx_GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
  170. select i.`ID_PROCES` as ID_PROCES, z.`ID` as ID_GROUP
  171. from `CRM_PROCES_idx` i
  172. join `CRM_WSKAZNIK` wsk on(wsk.`ID_PROCES`=i.`idx_PROCES_WITH_GROUPS_ID`
  173. and wsk.`A_STATUS` in('NORMAL', 'WAITING')
  174. )
  175. join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
  176. and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
  177. and z.`A_STATUS` in('NORMAL', 'WAITING')
  178. )
  179. join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
  180. and przyp.`FORM_TREAT` & 8 -- has perm X
  181. )
  182. -- where i.`TYPE` in('PROCES_INIT', 'GOTO_AND_RETURN')
  183. SQL;
  184. $db = DB::getDB();
  185. if ($db->has_errors()) {
  186. throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
  187. }
  188. $DBG_TIME = true;//('1' == V::get('DBG_TIME', '', $_GET));
  189. $dbgExecTime = new DebugExecutionTime();
  190. if ($DBG_TIME) $dbgExecTime->activate();
  191. $dbgExecTime->log('start');
  192. foreach ($sqlList as $sqlName => $sql) {
  193. $res = $db->query($sql);
  194. if ($db->has_errors()) {
  195. throw new Exception("DB Errors at sql '{$sqlName}': " . implode("\n<br>", $db->get_errors()));
  196. }
  197. if($DBG_TIME) $dbgExecTime->log("end-{$sqlName}");
  198. }
  199. if($DBG_TIME) $dbgExecTime->printDebug();
  200. }
  201. public function runDebugAction() {
  202. $sqlList = array();
  203. // SET @conf_last_exec_start_key = 'tbl_indexer_CRM_PROCES_last_exec_start';
  204. // SET @conf_last_exec_end_key = 'tbl_indexer_CRM_PROCES_last_exec_end';
  205. $sqlList['0-prepare-fill_idx_INIT-rm'] = "DROP PROCEDURE if exists `update_proces_init_idx__loop__fill_idx_INIT`";
  206. $sqlList['0-prepare-fill_idx_INIT-create'] = <<<SQL
  207. CREATE PROCEDURE `update_proces_init_idx__loop__fill_idx_INIT`()
  208. BEGIN
  209. SET @i = 0;
  210. SET @loopLomit = 100;
  211. SET @pinitCnt = 1;
  212. WHILE @i < @loopLomit and @pinitCnt > 0 DO
  213. update `CRM_PROCES_idx_TEMP` p
  214. join `CRM_PROCES_idx_TEMP` pp on(pp.`ID_PROCES`=p.`PARENT_ID`)
  215. set p.`idx_PROCES_INIT_ID`=IF(p.`idx_PROCES_INIT_ID`>0, p.`idx_PROCES_INIT_ID`, pp.`idx_PROCES_INIT_ID`)
  216. , p.`idx_MAIN_PROCES_INIT_ID`=pp.`idx_MAIN_PROCES_INIT_ID`
  217. -- // TODO:?: update here `idx_MAIN_PROCES_INIT_ID`
  218. where p.`idx_PROCES_INIT_ID`=0 and pp.`idx_PROCES_INIT_ID`>0
  219. ;
  220. SET @pinitCnt = ROW_COUNT();
  221. SET @i = @i + 1;
  222. END WHILE;
  223. END
  224. SQL;
  225. $sqlList['0-prepare-while-1-rm'] = "DROP PROCEDURE if exists `update_proces_init_idx_rec__while1`";
  226. $sqlList['0-prepare-while-1-create'] = <<<SQL
  227. CREATE PROCEDURE `update_proces_init_idx_rec__while1`()
  228. BEGIN
  229. -- update `CRM_PROCES_idx_TEMP` as i set i.`idx_PROCES_INIT_ID`=IF(i.`TYPE`='PROCES_INIT', i.`ID_PROCES`, 0);
  230. SET @i = 0;
  231. SET @loopLomit = 100;
  232. SET @pinitCnt = 1;
  233. WHILE @i < @loopLomit and @pinitCnt > 0 DO
  234. update `CRM_PROCES_idx_TEMP` p
  235. join `CRM_PROCES_idx_TEMP` pp on(pp.`ID_PROCES`=p.`PARENT_ID`)
  236. set p.`idx_MAIN_PROCES_INIT_ID`=pp.`idx_MAIN_PROCES_INIT_ID`
  237. where p.`idx_MAIN_PROCES_INIT_ID`=0 and pp.`idx_MAIN_PROCES_INIT_ID`>0
  238. ;
  239. SET @pinitCnt = ROW_COUNT();
  240. SET @i = @i + 1;
  241. END WHILE;
  242. END
  243. SQL;
  244. $sqlList['0-prepare-while-2-rm'] = "DROP PROCEDURE if exists `update_proces_init_idx_rec__while2`";
  245. $sqlList['0-prepare-while-2-create'] = <<<SQL
  246. CREATE PROCEDURE `update_proces_init_idx_rec__while2`()
  247. BEGIN
  248. SET @i = 0;
  249. SET @loopLomit = 100;
  250. SET @groupCnt = 1;
  251. WHILE @i < @loopLomit and @groupCnt > 0 DO
  252. update `CRM_PROCES_idx_TEMP` as p
  253. join `CRM_PROCES_idx_TEMP` as pp on(
  254. pp.`ID_PROCES`=p.`PARENT_ID`
  255. and pp.`idx_PROCES_WITH_GROUPS_ID` is not null
  256. and pp.`idx_PROCES_WITH_GROUPS_ID`>0
  257. )
  258. set p.`idx_PROCES_WITH_GROUPS_ID`=pp.`idx_PROCES_WITH_GROUPS_ID`
  259. where p.`idx_PROCES_WITH_GROUPS_ID` is null
  260. ;
  261. SET @groupCnt = ROW_COUNT();
  262. SET @i = @i + 1;
  263. END WHILE;
  264. END
  265. SQL;
  266. $sqlList__TEST_PERF_NO_DIFF['0-prepare-while-2-create'] = <<<SQL
  267. CREATE PROCEDURE `update_proces_init_idx_rec__while2`()
  268. BEGIN
  269. SET @i = 0;
  270. SET @loopLomit = 100;
  271. SET @groupCnt = 1;
  272. WHILE @i < @loopLomit and @groupCnt > 0 DO
  273. update `CRM_PROCES_idx_TEMP` as p
  274. join `CRM_PROCES_idx_TEMP` as pp on(pp.`ID_PROCES`=p.`PARENT_ID`
  275. and pp.`idx_PROCES_WITH_GROUPS_ID` is not null
  276. and pp.`idx_PROCES_WITH_GROUPS_ID`>0
  277. )
  278. set p.`idx_PROCES_WITH_GROUPS_ID`=pp.`idx_PROCES_WITH_GROUPS_ID`
  279. where p.`idx_PROCES_WITH_GROUPS_ID` is null
  280. ;
  281. SET @groupCnt = ROW_COUNT();
  282. SET @i = @i + 1;
  283. END WHILE;
  284. END
  285. SQL;
  286. $sqlList['CONF.1--set-start-time-in-config'] = <<<SQL
  287. -- CONF.1--set-start-time-in-config
  288. replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values ('tbl_indexer_CRM_PROCES_last_exec_start', NOW());
  289. SQL;
  290. $sqlList['I.1--truncate-table'] = <<<SQL
  291. -- I.1--truncate-table
  292. -- truncate table `CRM_PROCES_idx_TEMP`;
  293. DROP TABLE IF EXISTS `CRM_PROCES_idx_TEMP`;
  294. SQL;
  295. $sqlList['I.2--fill-CRM_PROCES_idx_TEMP'] = <<<SQL
  296. -- I.2--fill-CRM_PROCES_idx_TEMP
  297. -- Mysql BUG: "Can't reopen table" -- CREATE TEMPORARY TABLE `CRM_PROCES_idx_TEMP` (
  298. -- You cannot refer to a TEMPORARY table more than once in the same query.
  299. CREATE TABLE `CRM_PROCES_idx_TEMP` (
  300. `ID_PROCES` int(11) NOT NULL
  301. , `PARENT_ID` int(11) NOT NULL DEFAULT '0'
  302. , `TYPE` varchar(32) NOT NULL DEFAULT ''
  303. , `idx_PROCES_INIT_ID` int(11) NOT NULL DEFAULT '0'
  304. , `idx_MAIN_PROCES_INIT_ID` int(11) NULL DEFAULT '0'
  305. , `idx_PROCES_WITH_GROUPS_ID` int(11) NULL DEFAULT NULL
  306. -- , `idx_PATH` text NOT NULL
  307. , KEY `ID_PROCES` (`ID_PROCES`)
  308. , KEY `PARENT_ID` (`PARENT_ID`)
  309. , KEY `idx_PROCES_INIT_ID` (`idx_PROCES_INIT_ID`)
  310. , KEY `idx_MAIN_PROCES_INIT_ID` (`idx_MAIN_PROCES_INIT_ID`)
  311. , KEY `idx_PROCES_WITH_GROUPS_ID` (`idx_PROCES_WITH_GROUPS_ID`)
  312. , UNIQUE KEY `uniq__idx_PROCES_WITH_GROUPS_ID` (`ID_PROCES`,`idx_PROCES_WITH_GROUPS_ID`)
  313. )
  314. select p.`ID` as `ID_PROCES`
  315. , p.`TYPE` as `TYPE`
  316. , p.`PARENT_ID` as `PARENT_ID`
  317. , IF(p.`TYPE`='PROCES_INIT', p.`ID`, 0) as `idx_PROCES_INIT_ID`
  318. , IF(p.`TYPE`='PROCES_INIT', p.`ID`, 0) as `idx_MAIN_PROCES_INIT_ID`
  319. from `CRM_PROCES` p
  320. where p.`A_STATUS` in('NORMAL','WAITING')
  321. ;
  322. SQL;
  323. $sqlList['G.1--before-while-2-set-initial-proc_with_groups_id'] = <<<SQL
  324. -- G.1--before-while-2-set-initial-proc_with_groups_id
  325. update `CRM_PROCES_idx_TEMP` i
  326. join `CRM_WSKAZNIK` as wsk on(wsk.`ID_PROCES`=i.`ID_PROCES`
  327. and wsk.`A_STATUS` in('NORMAL', 'WAITING')
  328. )
  329. join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
  330. and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
  331. and z.`A_STATUS` in('NORMAL', 'WAITING')
  332. )
  333. join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
  334. and przyp.`FORM_TREAT` & 8 -- has perm X
  335. )
  336. set
  337. i.`idx_PROCES_WITH_GROUPS_ID`=i.`ID_PROCES`
  338. where i.`idx_PROCES_INIT_ID`>0
  339. ;
  340. SQL;
  341. $sqlList['G.2--while-2-loop-update-proc_with_groups_id-from-parent'] = <<<SQL
  342. -- G.2--while-2-loop-update-proc_with_groups_id-from-parent
  343. call `update_proces_init_idx_rec__while2`();
  344. SQL;
  345. $sqlList['P_INIT_ID.1--fill_idx_INIT'] = <<<SQL
  346. -- P_INIT_ID.1--fill_idx_INIT
  347. call `update_proces_init_idx__loop__fill_idx_INIT`();
  348. SQL;
  349. $sqlList['GOTO_AND_RET.1--from-7-fill-goto_and_return'] = <<<SQL
  350. -- GOTO_AND_RET.1--from-7-fill-goto_and_return
  351. insert ignore into `CRM_PROCES_idx_TEMP` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_MAIN_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
  352. select g.`ID`
  353. , 'GOTO_AND_RETURN' as `TYPE`
  354. , p.`ID` as `PARENT_ID`
  355. , g.`ID` as `idx_PROCES_INIT_ID`
  356. , i.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
  357. , IF(i.`idx_PROCES_WITH_GROUPS_ID` is null, gi.`idx_PROCES_WITH_GROUPS_ID`, i.`idx_PROCES_WITH_GROUPS_ID`) as `idx_PROCES_WITH_GROUPS_ID`
  358. from `CRM_PROCES` p
  359. join `CRM_PROCES_idx_TEMP` i on(i.`ID_PROCES`=p.`ID`)
  360. join `CRM_PROCES` g on(g.`ID`=p.`IF_TRUE_GOTO`
  361. and g.`TYPE`='PROCES_INIT'
  362. and g.`A_STATUS` in('NORMAL','WAITING')
  363. and p.`IF_TRUE_GOTO_FLAG`='GOTO_AND_RETURN'
  364. and p.`IF_TRUE_GOTO`>0
  365. )
  366. join `CRM_PROCES_idx_TEMP` gi on(gi.`ID_PROCES`=g.`ID`)
  367. where p.`A_STATUS` in('NORMAL','WAITING')
  368. ;
  369. SQL;
  370. $sqlList['GOTO_AND_RET.2--fill-childrens-of-goto_and_return'] = <<<SQL
  371. -- GOTO_AND_RET.2--fill-childrens-of-goto_and_return
  372. insert ignore into `CRM_PROCES_idx_TEMP` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_MAIN_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
  373. select ic.`ID_PROCES`
  374. , 'GOTO_AND_RETURN_CHILD' as `TYPE`
  375. , ic.`PARENT_ID` as `PARENT_ID`
  376. , ic.`idx_PROCES_INIT_ID` as `idx_PROCES_INIT_ID`
  377. , i.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
  378. , IF(ic.`idx_PROCES_WITH_GROUPS_ID` is null, i.`idx_PROCES_WITH_GROUPS_ID`, ic.`idx_PROCES_WITH_GROUPS_ID`) as `idx_PROCES_WITH_GROUPS_ID`
  379. from `CRM_PROCES_idx_TEMP` i
  380. join `CRM_PROCES_idx_TEMP` ic on(
  381. ic.`idx_PROCES_INIT_ID`=i.`ID_PROCES`
  382. and ic.`ID_PROCES`!=i.`ID_PROCES`
  383. )
  384. where i.`TYPE`='GOTO_AND_RETURN'
  385. ;
  386. SQL;
  387. $sqlList__TODO_IS_NEEDED__['4.2-NEW-while-1'] = <<<SQL
  388. call `update_proces_init_idx_rec__while1`();
  389. SQL;
  390. // TODO: mv here loop insert goto_and_return
  391. // TODO: add idx_MAIN_PROCES_INIT_ID - which proces has goto_end_return for this step
  392. $sqlList__TODO_SEE_IDX_2__['CLEANUP.1--remove-not-needed-rows'] = <<<SQL
  393. -- // TODO: add to main procedure
  394. delete from `CRM_PROCES_idx_TEMP` where `idx_PROCES_INIT_ID`=0;
  395. SQL;
  396. $sqlList__TODO_SEE_IDX_2__['CLEANUP.2--update-idx_PROCES_WITH_GROUPS_ID-zero-where-null'] = <<<SQL
  397. update `CRM_PROCES_idx_TEMP`
  398. set `idx_PROCES_WITH_GROUPS_ID`=0
  399. where `idx_PROCES_WITH_GROUPS_ID` is null
  400. and `TYPE`='PROCES_INIT'
  401. ;
  402. SQL;
  403. $sqlList__TODO_IS_NEEDED__['9-fix-goto_and_return'] = <<<SQL
  404. insert ignore into `CRM_PROCES_idx_TEMP` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
  405. select i.`ID_PROCES`, 'GOTO_AND_RETURN' as `TYPE`, i.`PARENT_ID`, i.`idx_PROCES_INIT_ID`, pi.`idx_PROCES_WITH_GROUPS_ID`
  406. from `CRM_PROCES_idx_TEMP` i
  407. join `CRM_PROCES_idx_TEMP` pi on(pi.`idx_PROCES_INIT_ID`=i.`idx_PROCES_INIT_ID`)
  408. where i.`idx_PROCES_WITH_GROUPS_ID` is null
  409. and pi.`idx_PROCES_WITH_GROUPS_ID` is not null
  410. and pi.`idx_PROCES_WITH_GROUPS_ID`>0
  411. and i.`TYPE`!='GOTO_AND_RETURN'
  412. ;
  413. SQL;
  414. $sqlList__TODO_IS_NEEDED__['10-delete-where-!idx_PROCES_WITH_GROUPS_ID'] = <<<SQL
  415. delete from `CRM_PROCES_idx_TEMP` where `idx_PROCES_WITH_GROUPS_ID` is null or `idx_PROCES_WITH_GROUPS_ID`=0;
  416. SQL;
  417. $sqlList['GOTO_AND_RET.3--fill-goto_and_return_lvl2'] = <<<SQL
  418. -- GOTO_AND_RET.3--fill-goto_and_return_lvl2
  419. -- gc p(5105) is GOTO_AND_RETURN_CHILD pID(5061) pI(5039) pIM(5040) pG(5040)
  420. -- gc p(5105) is GOTO_AND_RETURN_CHILD pID(5061) pI(5039) pIM(5100) pG(5100)
  421. -- gg p(5103) is GOTO_AND_RETURN pID(5105) pI(5103) pIM(5039) pG(NULL)
  422. -- + p(5103) is GOTO_AND_RETURN_LVL2 pID(5105) pI(5103) pIM(5040) pG(5040)
  423. -- + p(5103) is GOTO_AND_RETURN_LVL2 pID(5105) pI(5103) pIM(5100) pG(5100)
  424. insert ignore into `CRM_PROCES_idx_TEMP` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_MAIN_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
  425. select gg.`ID_PROCES` as `ID_PROCES`
  426. , 'GOTO_AND_RETURN_LVL2' as `TYPE`
  427. , gg.`PARENT_ID` as `PARENT_ID`
  428. , gg.`idx_PROCES_INIT_ID` as `idx_PROCES_INIT_ID`
  429. , gc.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
  430. , IF(gg.`idx_PROCES_WITH_GROUPS_ID` is null, gc.`idx_PROCES_WITH_GROUPS_ID`, gg.`idx_PROCES_WITH_GROUPS_ID`) as `idx_PROCES_WITH_GROUPS_ID`
  431. -- , 'gc', gc.*, 'gg', gg.*
  432. from `CRM_PROCES_idx_TEMP` gg
  433. join `CRM_PROCES_idx_TEMP` gc on(gc.`ID_PROCES`=gg.`PARENT_ID`)
  434. where gg.`TYPE`='GOTO_AND_RETURN'
  435. and gc.`TYPE`='GOTO_AND_RETURN_CHILD'
  436. ;
  437. SQL;
  438. $sqlList['GOTO_AND_RET.3--fill-childrens-of-goto_and_return_lvl2'] = <<<SQL
  439. -- GOTO_AND_RET.3--fill-childrens-of-goto_and_return_lvl2
  440. -- i p(5103) is GOTO_AND_RETURN_LVL2 pID(5105) pI(5103) pIM(5040) pG(5040)
  441. -- i p(5103) is GOTO_AND_RETURN_LVL2 pID(5105) pI(5103) pIM(5100) pG(5100)
  442. -- ic p(5104) is GOTO_AND_RETURN_CHILD pID(5103) pI(5103) pIM(5039) pG(NULL)
  443. -- ic p(5104) is GOTO_AND_RETURN_CHILD pID(5103) pI(5103) pIM(5039) pG(NULL)
  444. -- + p(5104) is GOTO_AND_RETURN_CHILD_LVL2 pID(5103) pI(5103) pIM(5100) pG(5100)
  445. -- + p(5104) is GOTO_AND_RETURN_CHILD_LVL2 pID(5103) pI(5103) pIM(5040) pG(5040)
  446. insert ignore into `CRM_PROCES_idx_TEMP` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_MAIN_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
  447. select ic.`ID_PROCES`
  448. , 'GOTO_AND_RETURN_CHILD_LVL2' as `TYPE`
  449. , ic.`PARENT_ID` as `PARENT_ID`
  450. , ic.`idx_PROCES_INIT_ID` as `idx_PROCES_INIT_ID`
  451. , i.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
  452. , IF(ic.`idx_PROCES_WITH_GROUPS_ID` is null, i.`idx_PROCES_WITH_GROUPS_ID`, ic.`idx_PROCES_WITH_GROUPS_ID`) as `idx_PROCES_WITH_GROUPS_ID`
  453. -- , 'i', i.*, 'ic', ic.*
  454. from `CRM_PROCES_idx_TEMP` i
  455. join `CRM_PROCES_idx_TEMP` ic on(
  456. ic.`idx_PROCES_INIT_ID`=i.`ID_PROCES`
  457. and ic.`ID_PROCES`!=i.`ID_PROCES`
  458. and ic.`TYPE`='GOTO_AND_RETURN_CHILD'
  459. )
  460. where i.`TYPE`='GOTO_AND_RETURN_LVL2'
  461. ;
  462. SQL;
  463. $sqlList['IDX.1--clear-CRM_PROCES_idx'] = <<<SQL
  464. -- IDX.1--clear-CRM_PROCES_idx
  465. truncate table `CRM_PROCES_idx`;
  466. SQL;
  467. $sqlList['IDX.2--update-CRM_PROCES_idx-from-temp'] = <<<SQL
  468. -- IDX.2--update-CRM_PROCES_idx-from-temp
  469. insert into `CRM_PROCES_idx` (`ID_PROCES`,`PARENT_ID`,`TYPE`,`idx_PROCES_INIT_ID`,`idx_MAIN_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
  470. select i.`ID_PROCES`,i.`PARENT_ID`,i.`TYPE`,i.`idx_PROCES_INIT_ID`,i.`idx_MAIN_PROCES_INIT_ID`,i.`idx_PROCES_WITH_GROUPS_ID`
  471. from `CRM_PROCES_idx_TEMP` i
  472. where i.`idx_PROCES_INIT_ID`>0 and i.`idx_PROCES_WITH_GROUPS_ID` is not null
  473. ;
  474. SQL;
  475. $sqlList__TODO_OFF_time_0_1__['P.1--update-CRM_PROCES-idx_PROCES_INIT_ID'] = <<<SQL
  476. update `CRM_PROCES` p
  477. set p.`idx_PROCES_INIT_ID`=coalesce((select i.`idx_PROCES_INIT_ID` from `CRM_PROCES_idx` i where i.`ID_PROCES`=p.`ID` limit 1), 0)
  478. ;
  479. SQL;
  480. $sqlList['GP.1--clear-CRM_PROCES_idx_GROUP_to_PROCES'] = <<<SQL
  481. -- GP.1--clear-CRM_PROCES_idx_GROUP_to_PROCES
  482. truncate table `CRM_PROCES_idx_GROUP_to_PROCES`;
  483. SQL;
  484. $sqlList['GP.2--fill-CRM_PROCES_idx_GROUP_to_PROCES'] = <<<SQL
  485. -- GP.2--fill-CRM_PROCES_idx_GROUP_to_PROCES
  486. insert ignore into `CRM_PROCES_idx_GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
  487. select i.`ID_PROCES` as ID_PROCES, z.`ID` as ID_GROUP
  488. from `CRM_PROCES_idx` i
  489. join `CRM_WSKAZNIK` wsk on(wsk.`ID_PROCES`=i.`idx_PROCES_WITH_GROUPS_ID`
  490. and wsk.`A_STATUS` in('NORMAL', 'WAITING')
  491. )
  492. join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
  493. and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
  494. and z.`A_STATUS` in('NORMAL', 'WAITING')
  495. )
  496. join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
  497. and przyp.`FORM_TREAT` & 8 -- has perm X
  498. )
  499. -- where i.`TYPE` in('PROCES_INIT', 'GOTO_AND_RETURN')
  500. ;
  501. SQL;
  502. $sqlList['CONF.2--set-end-time-in-config'] = <<<SQL
  503. -- CONF.2--set-end-time-in-config
  504. replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values ('tbl_indexer_CRM_PROCES_last_exec_end', NOW());
  505. SQL;
  506. $db = DB::getDB();
  507. if ($db->has_errors()) {
  508. throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
  509. }
  510. $DBG_TIME = true;//('1' == V::get('DBG_TIME', '', $_GET));
  511. $dbgExecTime = new DebugExecutionTime();
  512. if ($DBG_TIME) $dbgExecTime->activate();
  513. $dbgExecTime->log('start');
  514. $sqlExecuteLimit = V::get('DBG_LIMIT', 0, $_GET);
  515. $sqlExecuteCounter = 0;
  516. foreach ($sqlList as $sqlName => $sql) {
  517. $sqlExecuteCounter++;
  518. echo'<p>['.$sqlExecuteCounter.'] Executing sql "'.$sqlName.'" ... </p>';
  519. $res = $db->query($sql);
  520. if ($db->has_errors()) {
  521. throw new Exception("DB Errors at sql '{$sqlName}': " . implode("\n<br>", $db->get_errors()));
  522. }
  523. if($DBG_TIME) $dbgExecTime->log("execute sql {$sqlName}");
  524. echo'<p>['.$sqlExecuteCounter.'] DONE sql "'.$sqlName.'"</p>';
  525. if ($sqlExecuteLimit > 0 && $sqlExecuteCounter >= $sqlExecuteLimit) break;
  526. }
  527. if($DBG_TIME) $dbgExecTime->printDebug();
  528. }
  529. public function reinstallAction() {
  530. $this->reinstall();
  531. die('OK');
  532. }
  533. public function reinstall() {
  534. $sqlList = array();
  535. $sqlList['RemoveTable'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx`";
  536. $sqlList['InstallTable'] = <<<SQL
  537. CREATE TABLE IF NOT EXISTS `CRM_PROCES_idx` (
  538. `ID_PROCES` int(11) NOT NULL
  539. , `PARENT_ID` int(11) NOT NULL DEFAULT '0'
  540. , `TYPE` varchar(32) NOT NULL DEFAULT ''
  541. , `idx_PROCES_INIT_ID` int(11) NOT NULL DEFAULT '0'
  542. , `idx_MAIN_PROCES_INIT_ID` int(11) NOT NULL DEFAULT '0'
  543. , `idx_PROCES_WITH_GROUPS_ID` int(11) NULL DEFAULT NULL
  544. -- , `idx_PATH` text NOT NULL
  545. , KEY `ID_PROCES` (`ID_PROCES`)
  546. , KEY `PARENT_ID` (`PARENT_ID`)
  547. , KEY `idx_PROCES_INIT_ID` (`idx_PROCES_INIT_ID`)
  548. , KEY `idx_MAIN_PROCES_INIT_ID` (`idx_MAIN_PROCES_INIT_ID`)
  549. , KEY `idx_PROCES_WITH_GROUPS_ID` (`idx_PROCES_WITH_GROUPS_ID`)
  550. -- , UNIQUE KEY `uniq__idx_PROCES_WITH_GROUPS_ID` (`ID_PROCES`,`idx_PROCES_WITH_GROUPS_ID`)
  551. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  552. SQL;
  553. $sqlList['RemoveOldTableGroupToInit'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_GROUPS_to_INIT`";
  554. $sqlList['RemoveTableGroupToInit'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_GROUP_to_PROCES`";
  555. $sqlList['InstallTableGroupToInit'] = <<<SQL
  556. CREATE TABLE IF NOT EXISTS `CRM_PROCES_idx_GROUP_to_PROCES` (
  557. `ID_PROCES` int(11) NOT NULL
  558. , `ID_GROUP` int(11) NOT NULL
  559. , KEY `ID_PROCES` (`ID_PROCES`)
  560. , KEY `ID_GROUP` (`ID_GROUP`)
  561. , UNIQUE KEY `uniq__GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
  562. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  563. SQL;
  564. $sqlList['RemoveViewUserToProces'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_USER_to_PROCES_VIEW`";
  565. $sqlList['InstallViewUserToProces'] = <<<SQL
  566. CREATE VIEW `CRM_PROCES_idx_USER_to_PROCES_VIEW` AS
  567. select concat(u.`ID`, gi.`ID_PROCES`) as ID
  568. , gi.`ID_PROCES` as `ID_PROCES`
  569. , u.`ADM_ACCOUNT` as `ADM_ACCOUNT`
  570. , u.`EMPLOYEE_TYPE` as `EMPLOYEE_TYPE`
  571. , u.`A_STATUS` as `A_STATUS`
  572. from `ADMIN_USERS` u
  573. join `CRM_AUTH_PROFILE` au on(au.`REMOTE_ID`=u.`ID` and au.`REMOTE_TABLE`='ADMIN_USERS' and au.`A_STATUS` in('NORMAL','WAITING'))
  574. join `CRM_PROCES_idx_GROUP_to_PROCES` gi on(gi.`ID_GROUP`=au.`ID_ZASOB`)
  575. SQL;
  576. $sqlList['RemoveViewUserToInit'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_USER_to_INIT_VIEW`";
  577. $sqlList['InstallViewUserToInit'] = <<<SQL
  578. CREATE VIEW `CRM_PROCES_idx_USER_to_INIT_VIEW` AS
  579. select concat(u.`ID`, p.`ID`) as ID
  580. , p.`ID` as `ID_PROCES_INIT`
  581. , p.`DESC` as `DESC`
  582. , u.`ADM_ACCOUNT` as `ADM_ACCOUNT`
  583. , u.`EMPLOYEE_TYPE` as `EMPLOYEE_TYPE`
  584. , u.`A_STATUS` as `A_STATUS`
  585. from `ADMIN_USERS` u
  586. join `CRM_AUTH_PROFILE` au on(au.`REMOTE_ID`=u.`ID` and au.`REMOTE_TABLE`='ADMIN_USERS' and au.`A_STATUS` in('NORMAL','WAITING'))
  587. join `CRM_PROCES_idx_GROUP_to_PROCES` gi on(gi.`ID_GROUP`=au.`ID_ZASOB`)
  588. join `CRM_PROCES_idx` i on(i.`ID_PROCES`=gi.`ID_PROCES`)
  589. join `CRM_PROCES` p on(p.`ID`=i.`idx_PROCES_INIT_ID`)
  590. where p.`TYPE`='PROCES_INIT'
  591. group by u.`ID`, p.`ID`
  592. SQL;
  593. /* Usage - find proces init for user by $userLogin:
  594. SELECT *
  595. FROM `CRM_PROCES_idx_USER_to_INIT_VIEW`
  596. WHERE `ADM_ACCOUNT` LIKE '{$userLogin}'
  597. GROUP BY ID_PROCES_INIT
  598. */
  599. $sqlList['RemoveViewGroupToInit'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_GROUP_to_INIT_VIEW`";
  600. $sqlList['InstallViewGroupToInit'] = <<<SQL
  601. CREATE VIEW `CRM_PROCES_idx_GROUP_to_INIT_VIEW` AS
  602. select concat(gi.`ID_GROUP`, p.`ID`) as ID
  603. , p.`ID` as `ID_PROCES_INIT`
  604. , p.`DESC` as `DESC`
  605. , gi.`ID_GROUP` as `ID_GROUP`
  606. from `CRM_PROCES_idx_GROUP_to_PROCES` gi
  607. join `CRM_PROCES_idx` i on(i.`ID_PROCES`=gi.`ID_PROCES`)
  608. join `CRM_PROCES` p on(p.`ID`=i.`idx_PROCES_INIT_ID`)
  609. where p.`TYPE`='PROCES_INIT'
  610. group by gi.`ID_GROUP`, p.`ID`
  611. SQL;
  612. $sqlList['RemoveViewTablesInfo'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLES_INFO_VIEW`";
  613. $sqlList['InstallViewTablesInfo'] = <<<SQL
  614. CREATE VIEW `CRM_PROCES_idx_TABLES_INFO_VIEW` AS
  615. select z.`ID` as `ID_CELL`
  616. , z.`DESC` as `CELL_NAME`
  617. , z.`DESC_PL` as `CELL_LABEL`
  618. , z.`OPIS` as `CELL_DESCRIPTION`
  619. , z.`SORT_PRIO` as `CELL_SORT_PRIO`
  620. , zp.`ID` as `ID_TABLE`
  621. , zp.`DESC` as `TABLE_NAME`
  622. , zp.`DESC_PL` as `TABLE_LABEL`
  623. , zp.`OPIS` as `TABLE_DESCRIPTION`
  624. , zpp.`ID` as `ID_DATABASE`
  625. from `CRM_LISTA_ZASOBOW` z
  626. join `CRM_LISTA_ZASOBOW` zp on(zp.`ID`=z.`PARENT_ID` and zp.`TYPE`='TABELA' and zp.`A_STATUS` in('WAITING','NORMAL'))
  627. join `CRM_LISTA_ZASOBOW` zpp on(zpp.`ID`=zp.`PARENT_ID`
  628. -- TODO: and zpp.`TYPE`='BAZA_DANYCH...'
  629. and zpp.`A_STATUS` in('WAITING','NORMAL')
  630. )
  631. where z.`TYPE`='KOMORKA'
  632. and z.`A_STATUS` in('WAITING','NORMAL')
  633. SQL;
  634. $sqlList['RemoveViewTableToProces'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW`";
  635. $sqlList['InstallViewTableToProces'] = <<<SQL
  636. CREATE VIEW `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW` AS
  637. select tv.`ID_CELL` as `ID_CELL`
  638. , tv.`CELL_NAME` as `CELL_NAME`
  639. , tv.`ID_TABLE` as `ID_TABLE`
  640. , tv.`TABLE_NAME` as `TABLE_NAME`
  641. , tv.`TABLE_LABEL` as `TABLE_LABEL`
  642. , tv.`TABLE_DESCRIPTION` as `TABLE_DESCRIPTION`
  643. , tv.`ID_DATABASE` as `ID_DATABASE`
  644. , wsk.`ID_PROCES` as `ID_PROCES`
  645. from `CRM_PROCES_idx_TABLES_INFO_VIEW` tv
  646. join `CRM_WSKAZNIK` wsk on(wsk.`ID_ZASOB`=tv.`ID_CELL` and wsk.`A_STATUS` in('WAITING','NORMAL'))
  647. join `CRM_PROCES` p on(p.`ID`=wsk.`ID_PROCES` and p.`A_STATUS` in('WAITING','NORMAL'))
  648. SQL;
  649. $sqlList['RemoveViewUrlToProces'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_URL_TO_PROCES_VIEW`";
  650. $sqlList['InstallViewUrlToProces'] = <<<SQL
  651. CREATE VIEW `CRM_PROCES_idx_URL_TO_PROCES_VIEW` AS
  652. select z.`ID` as `ID_URL`
  653. , z.`DESC` as `URL_LINK`
  654. , z.`DESC_PL` as `URL_LABEL`
  655. , z.`OPIS` as `URL_DESC`
  656. , wsk.`ID_PROCES` as `ID_PROCES`
  657. from `CRM_LISTA_ZASOBOW` z
  658. join `CRM_WSKAZNIK` wsk on(wsk.`ID_ZASOB`=z.`ID` and wsk.`A_STATUS` in('WAITING','NORMAL'))
  659. join `CRM_PROCES` p on(p.`ID`=wsk.`ID_PROCES` and p.`A_STATUS` in('WAITING','NORMAL'))
  660. where z.`TYPE`='URL'
  661. and z.`A_STATUS` in('WAITING','NORMAL')
  662. SQL;
  663. $sqlList['RemoveViewTableCellToProcesWithPerms'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLE_TO_PROCES_PERMS_VIEW`";
  664. $sqlList['InstallViewTableCellToProcesWithPerms'] = <<<SQL
  665. CREATE VIEW `CRM_PROCES_idx_TABLE_TO_PROCES_PERMS_VIEW` AS
  666. select tv.`ID_CELL` as `ID_CELL`
  667. , tv.`CELL_NAME` as `CELL_NAME`
  668. , tv.`ID_TABLE` as `ID_TABLE`
  669. , tv.`TABLE_NAME` as `TABLE_NAME`
  670. , tv.`TABLE_LABEL` as `TABLE_LABEL`
  671. , tv.`TABLE_DESCRIPTION` as `TABLE_DESCRIPTION`
  672. , tv.`ID_DATABASE` as `ID_DATABASE`
  673. , wsk.`ID_PROCES` as `ID_PROCES`
  674. , replace(przyp.`FORM_TREAT`, ',', '') as FORM_TREAT
  675. , IF(przyp.`FORM_TREAT` & 2, 1, 0) as PERM_R
  676. , IF(przyp.`FORM_TREAT` & 4, 1, 0) as PERM_W
  677. , IF(przyp.`FORM_TREAT` & 8, 1, 0) as PERM_X
  678. , IF(przyp.`FORM_TREAT` & 16, 1, 0) as PERM_C
  679. , IF(przyp.`FORM_TREAT` & 32, 1, 0) as PERM_S
  680. , IF(przyp.`FORM_TREAT` & 64, 1, 0) as PERM_O
  681. , IF(przyp.`FORM_TREAT` & 128, 1, 0) as PERM_V
  682. , IF(przyp.`FORM_TREAT` & 256, 1, 0) as PERM_E
  683. from `CRM_PROCES_idx_TABLES_INFO_VIEW` tv
  684. join `CRM_WSKAZNIK` wsk on(wsk.`ID_ZASOB`=tv.`ID_CELL` and wsk.`A_STATUS` in('WAITING','NORMAL'))
  685. join `CRM_PROCES` p on(p.`ID`=wsk.`ID_PROCES` and p.`A_STATUS` in('WAITING','NORMAL'))
  686. join `CRM_PRZYPADEK` as przyp on (przyp.`ID`=wsk.`ID_PRZYPADEK`)
  687. SQL;
  688. $sqlExample_TableCellToProcesForInitTable = <<<SQL
  689. select tv.`ID_CELL` as `ID_CELL`
  690. , tv.`CELL_NAME` as `CELL_NAME`
  691. , tv.`CELL_LABEL` as `CELL_LABEL`
  692. , tv.`CELL_DESC` as `CELL_DESC`
  693. , tv.`CELL_SORT_PRIO` as `SORT_PRIO`
  694. , tv.`ID_TABLE` as `ID_TABLE`
  695. , tv.`TABLE_NAME` as `TABLE_NAME`
  696. , wsk.`ID_PROCES` as `ID_PROCES`
  697. , sum(IF(przyp.`FORM_TREAT` & 2, 1, 0)) as PERM_R
  698. , sum(IF(przyp.`FORM_TREAT` & 4, 1, 0)) as PERM_W
  699. , sum(IF(przyp.`FORM_TREAT` & 8, 1, 0)) as PERM_X
  700. , sum(IF(przyp.`FORM_TREAT` & 16, 1, 0)) as PERM_C
  701. , sum(IF(przyp.`FORM_TREAT` & 32, 1, 0)) as PERM_S
  702. , sum(IF(przyp.`FORM_TREAT` & 64, 1, 0)) as PERM_O
  703. , sum(IF(przyp.`FORM_TREAT` & 128, 1, 0)) as PERM_V
  704. , sum(IF(przyp.`FORM_TREAT` & 256, 1, 0)) as PERM_E
  705. from `CRM_PROCES_idx_TABLES_INFO_VIEW` tv
  706. join `CRM_WSKAZNIK` wsk on(wsk.`ID_ZASOB`=tv.`ID_CELL` and wsk.`A_STATUS` in('WAITING','NORMAL'))
  707. join `CRM_PROCES` p on(p.`ID`=wsk.`ID_PROCES` and p.`A_STATUS` in('WAITING','NORMAL'))
  708. join `CRM_PRZYPADEK` as przyp on (przyp.`ID`=wsk.`ID_PRZYPADEK`)
  709. where tv.`ID_TABLE`='{$idTable}'
  710. and wsk.`ID_PROCES` in({$sqlIdProcesList})
  711. group by tv.`ID_CELL`, wsk.`ID_PROCES`
  712. order by tv.`CELL_SORT_PRIO`
  713. SQL;
  714. $sqlExample_UrlToUserProces = <<<SQL
  715. select zpv.*
  716. from `CRM_PROCES_idx_URL_TO_PROCES_VIEW` zpv
  717. where zpv.`ID_PROCES` in({$sqlIdProcesList})
  718. SQL;
  719. $sqlExample_sqlIdProcesList = <<<SQL
  720. select gi.`ID_PROCES`
  721. from `CRM_PROCES_idx_GROUP_to_PROCES` gi
  722. where gi.`ID_GROUP` in({$idUserGroupList})
  723. SQL;
  724. $sqlList_BUG = <<<SQL
  725. -- BUG #1349 - View's SELECT contains a subquery in the FROM clause
  726. CREATE VIEW `CRM_PROCES_idx_TABLE_TO_USER_VIEW` AS
  727. select tpvg.`ID_PROCES`, tpvg.`TABLE_NAME`
  728. , upv.`ADM_ACCOUNT`
  729. , upv.`EMPLOYEE_TYPE`
  730. , upv.`A_STATUS`
  731. from
  732. (select tpv.`ID_PROCES`, tpv.`TABLE_NAME`
  733. from `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW` tpv
  734. group by tpv.`TABLE_NAME`, tpv.`ID_PROCES`) as tpvg
  735. join `CRM_PROCES_idx_USER_to_PROCES_VIEW` upv on(upv.`ID_PROCES`=tpvg.`ID_PROCES`)
  736. SQL;
  737. $sqlList['RemoveViewTableToProcesGrouped'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLE_TO_PROCES_GROUPED_VIEW`";
  738. $sqlList['InstallViewTableToProcesGrouped'] = <<<SQL
  739. CREATE VIEW `CRM_PROCES_idx_TABLE_TO_PROCES_GROUPED_VIEW` AS
  740. select tpv.`ID_TABLE`
  741. , tpv.`TABLE_NAME`
  742. , tpv.`TABLE_LABEL`
  743. , tpv.`TABLE_DESCRIPTION`
  744. , tpv.`ID_DATABASE`
  745. , tpv.`ID_PROCES`
  746. from `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW` tpv
  747. group by tpv.`ID_TABLE`, tpv.`ID_PROCES`
  748. SQL;
  749. $sqlList['RemoveViewTableToUser'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLE_TO_USER_VIEW`";
  750. $sqlList['InstallViewTableToUser'] = <<<SQL
  751. CREATE VIEW `CRM_PROCES_idx_TABLE_TO_USER_VIEW` AS
  752. select tpgv.`ID_TABLE`, tpgv.`TABLE_NAME`, tpgv.`ID_PROCES`
  753. , upv.`ADM_ACCOUNT`
  754. , upv.`EMPLOYEE_TYPE`
  755. , upv.`A_STATUS`
  756. from `CRM_PROCES_idx_TABLE_TO_PROCES_GROUPED_VIEW` as tpgv
  757. join `CRM_PROCES_idx_USER_to_PROCES_VIEW` upv on(upv.`ID_PROCES`=tpgv.`ID_PROCES`)
  758. SQL;
  759. $sqlList['RemoveProcedure'] = "DROP PROCEDURE if exists `update_proces_init_idx_rec`";
  760. // throws errors:
  761. // #1146 - Table '{DATABASE_NAME}.P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Already executed' doesn't exist
  762. $sqlList['CreateProcedure'] = <<<SQL
  763. CREATE PROCEDURE `update_proces_init_idx_rec`()
  764. BEGIN
  765. SET @enabled = FALSE;
  766. SET @conf_last_exec_lock_key = 'tbl_indexer_CRM_PROCES_last_exec_lock_date';
  767. SET @conf_last_exec_start_key = 'tbl_indexer_CRM_PROCES_last_exec_start';
  768. SET @conf_last_exec_end_key = 'tbl_indexer_CRM_PROCES_last_exec_end';
  769. -- if already runnig mysql will throw "Commands out of sync; you can't run this command now"
  770. IF (select count(1) from `CRM_CONFIG` where `conf_key`=@conf_last_exec_lock_key and `conf_val`!='')>0 THEN
  771. UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Already executed` SET x=1;
  772. ELSE BEGIN
  773. -- CONF.1--set-start-time-in-config
  774. replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values (@conf_last_exec_lock_key, NOW()), (@conf_last_exec_start_key, NOW());
  775. -- I.1--truncate-table
  776. truncate table `CRM_PROCES_idx_TEMP`;
  777. -- I.2--fill-CRM_PROCES_idx_TEMP
  778. insert into `CRM_PROCES_idx_TEMP` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_MAIN_PROCES_INIT_ID`)
  779. select p.`ID` as `ID_PROCES`
  780. , p.`TYPE` as `TYPE`
  781. , p.`PARENT_ID` as `PARENT_ID`
  782. , IF(p.`TYPE`='PROCES_INIT', p.`ID`, 0) as `idx_PROCES_INIT_ID`
  783. , IF(p.`TYPE`='PROCES_INIT', p.`ID`, 0) as `idx_MAIN_PROCES_INIT_ID`
  784. from `CRM_PROCES` p
  785. where p.`A_STATUS` in('NORMAL','WAITING')
  786. ;
  787. -- G.1--before-while-2-set-initial-proc_with_groups_id
  788. update `CRM_PROCES_idx_TEMP` i
  789. join `CRM_WSKAZNIK` as wsk on(wsk.`ID_PROCES`=i.`ID_PROCES`
  790. and wsk.`A_STATUS` in('NORMAL', 'WAITING')
  791. )
  792. join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
  793. and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
  794. and z.`A_STATUS` in('NORMAL', 'WAITING')
  795. )
  796. join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
  797. and przyp.`FORM_TREAT` & 8 -- has perm X
  798. )
  799. set
  800. i.`idx_PROCES_WITH_GROUPS_ID`=i.`ID_PROCES`
  801. where i.`idx_PROCES_INIT_ID`>0
  802. ;
  803. -- G.2--while-2-loop-update-proc_with_groups_id-from-parent
  804. SET @i = 0;
  805. SET @loopLomit = 100;
  806. SET @groupCnt = 1;
  807. WHILE @i < @loopLomit and @groupCnt > 0 DO
  808. update `CRM_PROCES_idx_TEMP` as p
  809. join `CRM_PROCES_idx_TEMP` as pp on(
  810. pp.`ID_PROCES`=p.`PARENT_ID`
  811. and pp.`idx_PROCES_WITH_GROUPS_ID` is not null
  812. and pp.`idx_PROCES_WITH_GROUPS_ID`>0
  813. )
  814. set p.`idx_PROCES_WITH_GROUPS_ID`=pp.`idx_PROCES_WITH_GROUPS_ID`
  815. where p.`idx_PROCES_WITH_GROUPS_ID` is null
  816. ;
  817. SET @groupCnt = ROW_COUNT();
  818. SET @i = @i + 1;
  819. END WHILE;
  820. -- P_INIT_ID.1--fill_idx_INIT
  821. SET @i = 0;
  822. SET @loopLomit = 100;
  823. SET @pinitCnt = 1;
  824. WHILE @i < @loopLomit and @pinitCnt > 0 DO
  825. update `CRM_PROCES_idx_TEMP` p
  826. join `CRM_PROCES_idx_TEMP` pp on(pp.`ID_PROCES`=p.`PARENT_ID`)
  827. set p.`idx_PROCES_INIT_ID`=IF(p.`idx_PROCES_INIT_ID`>0, p.`idx_PROCES_INIT_ID`, pp.`idx_PROCES_INIT_ID`)
  828. , p.`idx_MAIN_PROCES_INIT_ID`=pp.`idx_MAIN_PROCES_INIT_ID`
  829. -- // TODO:?: update here `idx_MAIN_PROCES_INIT_ID`
  830. where p.`idx_PROCES_INIT_ID`=0 and pp.`idx_PROCES_INIT_ID`>0
  831. ;
  832. SET @pinitCnt = ROW_COUNT();
  833. SET @i = @i + 1;
  834. END WHILE;
  835. -- GOTO_AND_RET.1--from-7-fill-goto_and_return
  836. insert ignore into `CRM_PROCES_idx_TEMP` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_MAIN_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
  837. select g.`ID`
  838. , 'GOTO_AND_RETURN' as `TYPE`
  839. , p.`ID` as `PARENT_ID`
  840. , g.`ID` as `idx_PROCES_INIT_ID`
  841. , i.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
  842. , IF(i.`idx_PROCES_WITH_GROUPS_ID` is null, gi.`idx_PROCES_WITH_GROUPS_ID`, i.`idx_PROCES_WITH_GROUPS_ID`) as `idx_PROCES_WITH_GROUPS_ID`
  843. from `CRM_PROCES` p
  844. join `CRM_PROCES_idx_TEMP` i on(i.`ID_PROCES`=p.`ID`)
  845. join `CRM_PROCES` g on(g.`ID`=p.`IF_TRUE_GOTO`
  846. and g.`TYPE`='PROCES_INIT'
  847. and g.`A_STATUS` in('NORMAL','WAITING')
  848. and p.`IF_TRUE_GOTO_FLAG`='GOTO_AND_RETURN'
  849. and p.`IF_TRUE_GOTO`>0
  850. )
  851. join `CRM_PROCES_idx_TEMP` gi on(gi.`ID_PROCES`=g.`ID`)
  852. where p.`A_STATUS` in('NORMAL','WAITING')
  853. ;
  854. -- GOTO_AND_RET.2--fill-childrens-of-goto_and_return
  855. insert ignore into `CRM_PROCES_idx_TEMP` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_MAIN_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
  856. select ic.`ID_PROCES`
  857. , 'GOTO_AND_RETURN_CHILD' as `TYPE`
  858. , ic.`PARENT_ID` as `PARENT_ID`
  859. , ic.`idx_PROCES_INIT_ID` as `idx_PROCES_INIT_ID`
  860. , i.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
  861. , IF(ic.`idx_PROCES_WITH_GROUPS_ID` is null, i.`idx_PROCES_WITH_GROUPS_ID`, ic.`idx_PROCES_WITH_GROUPS_ID`) as `idx_PROCES_WITH_GROUPS_ID`
  862. from `CRM_PROCES_idx_TEMP` i
  863. join `CRM_PROCES_idx_TEMP` ic on(
  864. ic.`idx_PROCES_INIT_ID`=i.`ID_PROCES`
  865. and ic.`ID_PROCES`!=i.`ID_PROCES`
  866. )
  867. where i.`TYPE`='GOTO_AND_RETURN'
  868. ;
  869. -- GOTO_AND_RET.3--fill-goto_and_return_lvl2
  870. -- gc p(5105) is GOTO_AND_RETURN_CHILD pID(5061) pI(5039) pIM(5040) pG(5040)
  871. -- gc p(5105) is GOTO_AND_RETURN_CHILD pID(5061) pI(5039) pIM(5100) pG(5100)
  872. -- gg p(5103) is GOTO_AND_RETURN pID(5105) pI(5103) pIM(5039) pG(NULL)
  873. -- + p(5103) is GOTO_AND_RETURN_LVL2 pID(5105) pI(5103) pIM(5040) pG(5040)
  874. -- + p(5103) is GOTO_AND_RETURN_LVL2 pID(5105) pI(5103) pIM(5100) pG(5100)
  875. insert ignore into `CRM_PROCES_idx_TEMP` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_MAIN_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
  876. select gg.`ID_PROCES` as `ID_PROCES`
  877. , 'GOTO_AND_RETURN_LVL2' as `TYPE`
  878. , gg.`PARENT_ID` as `PARENT_ID`
  879. , gg.`idx_PROCES_INIT_ID` as `idx_PROCES_INIT_ID`
  880. , gc.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
  881. , IF(gg.`idx_PROCES_WITH_GROUPS_ID` is null, gc.`idx_PROCES_WITH_GROUPS_ID`, gg.`idx_PROCES_WITH_GROUPS_ID`) as `idx_PROCES_WITH_GROUPS_ID`
  882. -- , 'gc', gc.*, 'gg', gg.*
  883. from `CRM_PROCES_idx_TEMP` gg
  884. join `CRM_PROCES_idx_TEMP` gc on(gc.`ID_PROCES`=gg.`PARENT_ID`)
  885. where gg.`TYPE`='GOTO_AND_RETURN'
  886. and gc.`TYPE`='GOTO_AND_RETURN_CHILD'
  887. ;
  888. -- GOTO_AND_RET.3--fill-childrens-of-goto_and_return_lvl2
  889. -- i p(5103) is GOTO_AND_RETURN_LVL2 pID(5105) pI(5103) pIM(5040) pG(5040)
  890. -- i p(5103) is GOTO_AND_RETURN_LVL2 pID(5105) pI(5103) pIM(5100) pG(5100)
  891. -- ic p(5104) is GOTO_AND_RETURN_CHILD pID(5103) pI(5103) pIM(5039) pG(NULL)
  892. -- ic p(5104) is GOTO_AND_RETURN_CHILD pID(5103) pI(5103) pIM(5039) pG(NULL)
  893. -- + p(5104) is GOTO_AND_RETURN_CHILD_LVL2 pID(5103) pI(5103) pIM(5100) pG(5100)
  894. -- + p(5104) is GOTO_AND_RETURN_CHILD_LVL2 pID(5103) pI(5103) pIM(5040) pG(5040)
  895. insert ignore into `CRM_PROCES_idx_TEMP` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_MAIN_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
  896. select ic.`ID_PROCES`
  897. , 'GOTO_AND_RETURN_CHILD_LVL2' as `TYPE`
  898. , ic.`PARENT_ID` as `PARENT_ID`
  899. , ic.`idx_PROCES_INIT_ID` as `idx_PROCES_INIT_ID`
  900. , i.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
  901. , IF(ic.`idx_PROCES_WITH_GROUPS_ID` is null, i.`idx_PROCES_WITH_GROUPS_ID`, ic.`idx_PROCES_WITH_GROUPS_ID`) as `idx_PROCES_WITH_GROUPS_ID`
  902. -- , 'i', i.*, 'ic', ic.*
  903. from `CRM_PROCES_idx_TEMP` i
  904. join `CRM_PROCES_idx_TEMP` ic on(
  905. ic.`idx_PROCES_INIT_ID`=i.`ID_PROCES`
  906. and ic.`ID_PROCES`!=i.`ID_PROCES`
  907. and ic.`TYPE`='GOTO_AND_RETURN_CHILD'
  908. )
  909. where i.`TYPE`='GOTO_AND_RETURN_LVL2'
  910. ;
  911. -- IDX.1--clear-CRM_PROCES_idx
  912. truncate table `CRM_PROCES_idx`;
  913. -- IDX.2--update-CRM_PROCES_idx-from-temp
  914. insert into `CRM_PROCES_idx` (`ID_PROCES`,`PARENT_ID`,`TYPE`,`idx_PROCES_INIT_ID`,`idx_MAIN_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
  915. select i.`ID_PROCES`,i.`PARENT_ID`,i.`TYPE`,i.`idx_PROCES_INIT_ID`,i.`idx_MAIN_PROCES_INIT_ID`,i.`idx_PROCES_WITH_GROUPS_ID`
  916. from `CRM_PROCES_idx_TEMP` i
  917. where i.`idx_PROCES_INIT_ID`>0 and i.`idx_PROCES_WITH_GROUPS_ID` is not null
  918. ;
  919. -- TODO OFF: time ~0.1 P.1--update-CRM_PROCES-idx_PROCES_INIT_ID
  920. -- update `CRM_PROCES` p
  921. -- set p.`idx_PROCES_INIT_ID`=coalesce((select i.`idx_PROCES_INIT_ID` from `CRM_PROCES_idx` i where i.`ID_PROCES`=p.`ID` limit 1), 0)
  922. -- ;
  923. -- GP.1--clear-CRM_PROCES_idx_GROUP_to_PROCES
  924. truncate table `CRM_PROCES_idx_GROUP_to_PROCES`;
  925. -- GP.2--fill-CRM_PROCES_idx_GROUP_to_PROCES
  926. insert ignore into `CRM_PROCES_idx_GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
  927. select i.`ID_PROCES` as ID_PROCES, z.`ID` as ID_GROUP
  928. from `CRM_PROCES_idx` i
  929. join `CRM_WSKAZNIK` wsk on(wsk.`ID_PROCES`=i.`idx_PROCES_WITH_GROUPS_ID`
  930. and wsk.`A_STATUS` in('NORMAL', 'WAITING')
  931. )
  932. join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
  933. and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
  934. and z.`A_STATUS` in('NORMAL', 'WAITING')
  935. )
  936. join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
  937. and przyp.`FORM_TREAT` & 8 -- has perm X
  938. )
  939. -- where i.`TYPE` in('PROCES_INIT', 'GOTO_AND_RETURN')
  940. ;
  941. -- CONF.2--set-end-time-in-config
  942. replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values (@conf_last_exec_lock_key, ''), (@conf_last_exec_end_key, NOW());
  943. -- clear msg 'Update perms' from Msgs system
  944. update `CRM_UI_MSGS`
  945. set `A_STATUS`='OFF_HARD'
  946. , `actionExecutedTime`=NOW()
  947. , `A_RECORD_UPDATE_DATE`=NOW()
  948. , `A_RECORD_UPDATE_AUTHOR`='update_proces_init_idx_rec'
  949. where `A_STATUS`='WAITING'
  950. and `app_className`='FixCrmProcesInitIdx'
  951. and `msg`='Update perms'
  952. and `uiTargetType`='default_db_table'
  953. and `uiTargetName`='CRM_PROCES'
  954. ;
  955. END ; END IF ;
  956. END ;
  957. SQL;
  958. $sqlList['RemoveTrigger_AfterInsertProces'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_PROCES_AFTER_INSERT`";
  959. $sqlList['CreateTrigger_AfterInsertProces'] = "
  960. CREATE DEFINER=`root`@`localhost` TRIGGER `FixCrmProcesInitIdx_CRM_PROCES_AFTER_INSERT` AFTER INSERT ON `CRM_PROCES`
  961. FOR EACH ROW BEGIN
  962. -- only when PARENT_ID changes and PARENT_ID exists in `CRM_PROCES_idx`
  963. IF NEW.`PARENT_ID` IS NOT NULL AND NEW.`PARENT_ID`>0 AND (select count(*) from `CRM_PROCES_idx` where `ID_PROCES`=NEW.`PARENT_ID` limit 1)>0 THEN
  964. -- throw warning to update perms
  965. IF (select count(1) from `CRM_UI_MSGS` where `app_className`='FixCrmProcesInitIdx'
  966. and `msg`='Update perms'
  967. and `uiTargetType`='default_db_table'
  968. and `uiTargetName`='CRM_PROCES'
  969. and `A_STATUS`='WAITING'
  970. ) = 0 THEN
  971. INSERT INTO `CRM_UI_MSGS` (`ID`
  972. , `app_className`, `msg`, `msgType`
  973. , `uiTargetType`, `uiTargetName`
  974. , `userTargetType`
  975. , `A_RECORD_CREATE_DATE`, `A_RECORD_CREATE_AUTHOR`)
  976. VALUES (NULL
  977. , 'FixCrmProcesInitIdx', 'Update perms', 'danger'
  978. , 'default_db_table', 'CRM_PROCES'
  979. , 'everyone'
  980. , NOW(), coalesce(NEW.A_RECORD_UPDATE_AUTHOR,'trigger:FixCrmProcesInitIdx_CRM_PROCES_AFTER_INSERT')
  981. );
  982. END IF;
  983. -- UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
  984. END IF;
  985. END
  986. ";
  987. $sqlList['RemoveTrigger_AfterUpdateProces'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_PROCES_AFTER_UPDATE`";
  988. $sqlList['CreateTrigger_AfterUpdateProces'] = "
  989. CREATE DEFINER=`root`@`localhost` TRIGGER `FixCrmProcesInitIdx_CRM_PROCES_AFTER_UPDATE` AFTER UPDATE ON `CRM_PROCES`
  990. FOR EACH ROW BEGIN
  991. -- only when PARENT_ID changes and ID exists in `CRM_PROCES_idx`
  992. IF NEW.`PARENT_ID`!=OLD.`PARENT_ID` AND (select count(*) from `CRM_PROCES_idx` where `ID_PROCES` in(NEW.`ID`, NEW.`PARENT_ID`, OLD.`PARENT_ID`) limit 1)>0 THEN
  993. -- throw warning to update perms
  994. IF (select count(1) from `CRM_UI_MSGS` where `app_className`='FixCrmProcesInitIdx'
  995. and `msg`='Update perms'
  996. and `uiTargetType`='default_db_table'
  997. and `uiTargetName`='CRM_PROCES'
  998. and `A_STATUS`='WAITING'
  999. ) = 0 THEN
  1000. INSERT INTO `CRM_UI_MSGS` (`ID`
  1001. , `app_className`, `msg`, `msgType`
  1002. , `uiTargetType`, `uiTargetName`
  1003. , `userTargetType`
  1004. , `A_RECORD_CREATE_DATE`, `A_RECORD_CREATE_AUTHOR`)
  1005. VALUES (NULL
  1006. , 'FixCrmProcesInitIdx', 'Update perms', 'danger'
  1007. , 'default_db_table', 'CRM_PROCES'
  1008. , 'everyone'
  1009. , NOW(), coalesce(NEW.A_RECORD_UPDATE_AUTHOR,'trigger:FixCrmProcesInitIdx_CRM_PROCES_AFTER_UPDATE')
  1010. );
  1011. END IF;
  1012. -- UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
  1013. END IF;
  1014. END
  1015. ";
  1016. $sqlList['RemoveTrigger_AfterInsertWskaznik'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_INSERT`";
  1017. $sqlList['CreateTrigger_AfterInsertWskaznik'] = "
  1018. CREATE DEFINER=`root`@`localhost` TRIGGER `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_INSERT` AFTER INSERT ON `CRM_WSKAZNIK`
  1019. FOR EACH ROW BEGIN
  1020. -- only when ID_PROCES exists in `CRM_PROCES_idx`
  1021. -- only when ID_ZASOB is group
  1022. -- only when ID_PRZYPADEK has perm 'X'
  1023. IF NEW.`ID_PROCES`>0
  1024. AND NEW.`ID_ZASOB`>0
  1025. AND NEW.`ID_PRZYPADEK`>0
  1026. AND (select count(*) from `CRM_PROCES_idx` where `ID_PROCES`=NEW.`ID_PROCES` limit 1)>0
  1027. AND (select count(*) from `CRM_LISTA_ZASOBOW` z where z.`ID`=NEW.`ID_ZASOB` and z.`TYPE` in('STANOWISKO','DZIAL','PODMIOT') limit 1)>0
  1028. AND (select count(*) from `CRM_PRZYPADEK` przyp where przyp.`ID`=NEW.`ID_PRZYPADEK` and przyp.`FORM_TREAT` & 8 limit 1)>0
  1029. THEN
  1030. -- throw warning to update perms
  1031. IF (select count(1) from `CRM_UI_MSGS` where `app_className`='FixCrmProcesInitIdx'
  1032. and `msg`='Update perms'
  1033. and `uiTargetType`='default_db_table'
  1034. and `uiTargetName`='CRM_PROCES'
  1035. and `A_STATUS`='WAITING'
  1036. ) = 0 THEN
  1037. INSERT INTO `CRM_UI_MSGS` (`ID`
  1038. , `app_className`, `msg`, `msgType`
  1039. , `uiTargetType`, `uiTargetName`
  1040. , `userTargetType`
  1041. , `A_RECORD_CREATE_DATE`, `A_RECORD_CREATE_AUTHOR`)
  1042. VALUES (NULL
  1043. , 'FixCrmProcesInitIdx', 'Update perms', 'danger'
  1044. , 'default_db_table', 'CRM_PROCES'
  1045. , 'everyone'
  1046. , NOW(), coalesce(NEW.A_RECORD_UPDATE_AUTHOR,'trigger:FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_INSERT')
  1047. );
  1048. END IF;
  1049. -- UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
  1050. END IF;
  1051. END
  1052. ";
  1053. $sqlList['RemoveTrigger_AfterUpdateWskaznik'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_UPDATE`";
  1054. $sqlList['CreateTrigger_AfterUpdateWskaznik'] = "
  1055. CREATE DEFINER=`root`@`localhost` TRIGGER `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_UPDATE` AFTER UPDATE ON `CRM_WSKAZNIK`
  1056. FOR EACH ROW BEGIN
  1057. -- only when old or new ID_PROCES exists in `CRM_PROCES_idx`
  1058. -- only when old or new ID_ZASOB is group
  1059. -- only when old or new ID_PRZYPADEK has perm 'X'
  1060. IF (NEW.`ID_PROCES`!=OLD.`ID_PROCES`
  1061. or NEW.`ID_ZASOB`!=OLD.`ID_ZASOB`
  1062. or NEW.`ID_PRZYPADEK`!=OLD.`ID_PRZYPADEK`
  1063. or (NEW.`A_STATUS`!=OLD.`A_STATUS`
  1064. and ((NEW.`A_STATUS` in('WAITING','NORMAL') and OLD.`A_STATUS` not in('WAITING','NORMAL'))
  1065. or (NEW.`A_STATUS` not in('WAITING','NORMAL') and OLD.`A_STATUS` in('WAITING','NORMAL'))
  1066. )
  1067. )
  1068. )
  1069. AND (NEW.`ID_PROCES`>0 or OLD.`ID_PROCES`>0)
  1070. AND (NEW.`ID_ZASOB`>0 or OLD.`ID_ZASOB`>0)
  1071. AND (NEW.`ID_PRZYPADEK`>0 or OLD.`ID_PRZYPADEK`>0)
  1072. -- AND (select count(*) from `CRM_PROCES_idx` where `ID_PROCES` in(NEW.`ID_PROCES`,OLD.`ID_PROCES`) limit 1)>0
  1073. AND (select count(*) from `CRM_LISTA_ZASOBOW` z where z.`ID` in(NEW.`ID_ZASOB`,OLD.`ID_ZASOB`) and z.`TYPE` in('STANOWISKO','DZIAL','PODMIOT') limit 1)>0
  1074. AND (select count(*) from `CRM_PRZYPADEK` przyp where przyp.`ID` in(NEW.`ID_PRZYPADEK`,OLD.`ID_PRZYPADEK`) and przyp.`FORM_TREAT` & 8 limit 1)>0
  1075. THEN
  1076. -- throw warning to update perms
  1077. IF (select count(1) from `CRM_UI_MSGS` where `app_className`='FixCrmProcesInitIdx'
  1078. and `msg`='Update perms'
  1079. and `uiTargetType`='default_db_table'
  1080. and `uiTargetName`='CRM_PROCES'
  1081. and `A_STATUS`='WAITING'
  1082. ) = 0 THEN
  1083. INSERT INTO `CRM_UI_MSGS` (`ID`
  1084. , `app_className`, `msg`, `msgType`
  1085. , `uiTargetType`, `uiTargetName`
  1086. , `userTargetType`
  1087. , `A_RECORD_CREATE_DATE`, `A_RECORD_CREATE_AUTHOR`)
  1088. VALUES (NULL
  1089. , 'FixCrmProcesInitIdx', 'Update perms', 'danger'
  1090. , 'default_db_table', 'CRM_PROCES'
  1091. , 'everyone'
  1092. , NOW(), coalesce(NEW.A_RECORD_UPDATE_AUTHOR,'trigger:FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_UPDATE')
  1093. );
  1094. END IF;
  1095. -- UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
  1096. END IF;
  1097. END
  1098. ";
  1099. $db = DB::getDB();
  1100. if ($db->has_errors()) {
  1101. throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
  1102. }
  1103. foreach ($sqlList as $sqlName => $sql) {
  1104. $res = $db->query($sql);
  1105. if ($db->has_errors()) {
  1106. throw new Exception("DB Errors at sql '{$sqlName}': " . implode("\n<br>", $db->get_errors()));
  1107. }
  1108. }
  1109. }
  1110. /*
  1111. #1146 - Table '{DATABASE_NAME}.P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Already executed' doesn't exist
  1112. */
  1113. public function parseMessageFromStorage($msg) {
  1114. switch ($msg) {
  1115. case 'ERROR: Already executed': {
  1116. $msg = "Aktualizacja uprawnień została już uruchomiona przez inną osobę";
  1117. break;
  1118. }
  1119. case 'ERROR: Update perms': {
  1120. $msg = "Wymagana aktualizacja uprawnień";
  1121. break;
  1122. }
  1123. }
  1124. return $msg;
  1125. }
  1126. public function parseMessageFromMsgsSystem($msg) {
  1127. switch ($msg) {
  1128. case 'Update perms': {
  1129. $msg = "Wymagana aktualizacja uprawnień";
  1130. break;
  1131. }
  1132. }
  1133. return $msg;
  1134. }
  1135. public function runByMessageFromMsgsSystem($msg, &$execNotes) {
  1136. switch ($msg) {
  1137. case 'Update perms': {
  1138. $execNotes .= 'Wymagana aktualizacja uprawnień';
  1139. $this->_callProcedure();
  1140. $execNotes .= ' done';
  1141. break;
  1142. }
  1143. }
  1144. }
  1145. }