FixCrmProcesInitIdx.php 45 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129
  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. replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values ('tbl_indexer_CRM_PROCES_last_exec_start', NOW());
  288. SQL;
  289. $sqlList['I.1--truncate-table'] = <<<SQL
  290. -- // TODO: mv to the procedure end, and add insert into `CRM_PROCES_idx` select * from `CRM_PROCES_idx_TEMP`;
  291. -- truncate table `CRM_PROCES_idx`;
  292. DROP TABLE IF EXISTS `CRM_PROCES_idx_TEMP`;
  293. SQL;
  294. $sqlList['I.2--fill-CRM_PROCES_idx_TEMP'] = <<<SQL
  295. -- Mysql BUG: "Can't reopen table" -- CREATE TEMPORARY TABLE `CRM_PROCES_idx_TEMP` (
  296. -- You cannot refer to a TEMPORARY table more than once in the same query.
  297. CREATE TABLE `CRM_PROCES_idx_TEMP` (
  298. `ID_PROCES` int(11) NOT NULL
  299. , `PARENT_ID` int(11) NOT NULL DEFAULT '0'
  300. , `TYPE` varchar(32) NOT NULL DEFAULT ''
  301. , `idx_PROCES_INIT_ID` int(11) NOT NULL DEFAULT '0'
  302. , `idx_MAIN_PROCES_INIT_ID` int(11) NULL DEFAULT '0'
  303. , `idx_PROCES_WITH_GROUPS_ID` int(11) NULL DEFAULT NULL
  304. -- , `idx_PATH` text NOT NULL
  305. , KEY `ID_PROCES` (`ID_PROCES`)
  306. , KEY `PARENT_ID` (`PARENT_ID`)
  307. , KEY `idx_PROCES_INIT_ID` (`idx_PROCES_INIT_ID`)
  308. , KEY `idx_MAIN_PROCES_INIT_ID` (`idx_MAIN_PROCES_INIT_ID`)
  309. , KEY `idx_PROCES_WITH_GROUPS_ID` (`idx_PROCES_WITH_GROUPS_ID`)
  310. , UNIQUE KEY `uniq__idx_PROCES_WITH_GROUPS_ID` (`ID_PROCES`,`idx_PROCES_WITH_GROUPS_ID`)
  311. )
  312. select p.`ID` as `ID_PROCES`
  313. , p.`TYPE` as `TYPE`
  314. , p.`PARENT_ID` as `PARENT_ID`
  315. , IF(p.`TYPE`='PROCES_INIT', p.`ID`, 0) as `idx_PROCES_INIT_ID`
  316. , IF(p.`TYPE`='PROCES_INIT', p.`ID`, 0) as `idx_MAIN_PROCES_INIT_ID`
  317. from `CRM_PROCES` p
  318. where p.`A_STATUS` in('NORMAL','WAITING')
  319. ;
  320. SQL;
  321. $sqlList['G.1--before-while-2-set-initial-proc_with_groups_id'] = <<<SQL
  322. update `CRM_PROCES_idx_TEMP` i
  323. join `CRM_WSKAZNIK` as wsk on(wsk.`ID_PROCES`=i.`ID_PROCES`
  324. and wsk.`A_STATUS` in('NORMAL', 'WAITING')
  325. )
  326. join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
  327. and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
  328. and z.`A_STATUS` in('NORMAL', 'WAITING')
  329. )
  330. join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
  331. and przyp.`FORM_TREAT` & 8 -- has perm X
  332. )
  333. set
  334. i.`idx_PROCES_WITH_GROUPS_ID`=i.`ID_PROCES`
  335. -- TODO: main procedure (this rows was removed step before):
  336. where i.`idx_PROCES_INIT_ID`>0
  337. ;
  338. SQL;
  339. $sqlList['G.2--while-2-loop-update-proc_with_groups_id-from-parent'] = <<<SQL
  340. call `update_proces_init_idx_rec__while2`();
  341. SQL;
  342. $sqlList['P_INIT_ID.1--fill_idx_INIT'] = <<<SQL
  343. call `update_proces_init_idx__loop__fill_idx_INIT`();
  344. SQL;
  345. $sqlList['GOTO_AND_RET.1--from-7-fill-goto_and_return'] = <<<SQL
  346. 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`)
  347. select g.`ID`
  348. , 'GOTO_AND_RETURN' as `TYPE`
  349. , p.`ID` as `PARENT_ID`
  350. , g.`ID` as `idx_PROCES_INIT_ID`
  351. , i.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
  352. , 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`
  353. from `CRM_PROCES` p
  354. join `CRM_PROCES_idx_TEMP` i on(i.`ID_PROCES`=p.`ID`)
  355. join `CRM_PROCES` g on(g.`ID`=p.`IF_TRUE_GOTO`
  356. and g.`TYPE`='PROCES_INIT'
  357. and g.`A_STATUS` in('NORMAL','WAITING')
  358. and p.`IF_TRUE_GOTO_FLAG`='GOTO_AND_RETURN'
  359. and p.`IF_TRUE_GOTO`>0
  360. )
  361. join `CRM_PROCES_idx_TEMP` gi on(gi.`ID_PROCES`=g.`ID`)
  362. where p.`A_STATUS` in('NORMAL','WAITING')
  363. ;
  364. SQL;
  365. $sqlList['GOTO_AND_RET.2--fill-childrens-of-goto_and_return'] = <<<SQL
  366. 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`)
  367. select ic.`ID_PROCES`
  368. , 'GOTO_AND_RETURN_CHILD' as `TYPE`
  369. , ic.`PARENT_ID` as `PARENT_ID`
  370. , ic.`idx_PROCES_INIT_ID` as `idx_PROCES_INIT_ID`
  371. , i.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
  372. , 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`
  373. from `CRM_PROCES_idx_TEMP` i
  374. join `CRM_PROCES_idx_TEMP` ic on(
  375. ic.`idx_PROCES_INIT_ID`=i.`ID_PROCES`
  376. and ic.`ID_PROCES`!=i.`ID_PROCES`
  377. )
  378. where i.`TYPE`='GOTO_AND_RETURN'
  379. ;
  380. SQL;
  381. $sqlList__TODO_IS_NEEDED__['4.2-NEW-while-1'] = <<<SQL
  382. call `update_proces_init_idx_rec__while1`();
  383. SQL;
  384. // TODO: mv here loop insert goto_and_return
  385. // TODO: add idx_MAIN_PROCES_INIT_ID - which proces has goto_end_return for this step
  386. $sqlList__TODO_SEE_IDX_2__['CLEANUP.1--remove-not-needed-rows'] = <<<SQL
  387. -- // TODO: add to main procedure
  388. delete from `CRM_PROCES_idx_TEMP` where `idx_PROCES_INIT_ID`=0;
  389. SQL;
  390. $sqlList__TODO_SEE_IDX_2__['CLEANUP.2--update-idx_PROCES_WITH_GROUPS_ID-zero-where-null'] = <<<SQL
  391. update `CRM_PROCES_idx_TEMP`
  392. set `idx_PROCES_WITH_GROUPS_ID`=0
  393. where `idx_PROCES_WITH_GROUPS_ID` is null
  394. and `TYPE`='PROCES_INIT'
  395. ;
  396. SQL;
  397. $sqlList__TODO_IS_NEEDED__['9-fix-goto_and_return'] = <<<SQL
  398. insert ignore into `CRM_PROCES_idx_TEMP` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
  399. select i.`ID_PROCES`, 'GOTO_AND_RETURN' as `TYPE`, i.`PARENT_ID`, i.`idx_PROCES_INIT_ID`, pi.`idx_PROCES_WITH_GROUPS_ID`
  400. from `CRM_PROCES_idx_TEMP` i
  401. join `CRM_PROCES_idx_TEMP` pi on(pi.`idx_PROCES_INIT_ID`=i.`idx_PROCES_INIT_ID`)
  402. where i.`idx_PROCES_WITH_GROUPS_ID` is null
  403. and pi.`idx_PROCES_WITH_GROUPS_ID` is not null
  404. and pi.`idx_PROCES_WITH_GROUPS_ID`>0
  405. and i.`TYPE`!='GOTO_AND_RETURN'
  406. ;
  407. SQL;
  408. $sqlList__TODO_IS_NEEDED__['10-delete-where-!idx_PROCES_WITH_GROUPS_ID'] = <<<SQL
  409. delete from `CRM_PROCES_idx_TEMP` where `idx_PROCES_WITH_GROUPS_ID` is null or `idx_PROCES_WITH_GROUPS_ID`=0;
  410. SQL;
  411. $sqlList['IDX.1--clear-CRM_PROCES_idx'] = <<<SQL
  412. truncate table `CRM_PROCES_idx`;
  413. SQL;
  414. $sqlList['IDX.2--update-CRM_PROCES_idx-from-temp'] = <<<SQL
  415. insert into `CRM_PROCES_idx`
  416. select i.* from `CRM_PROCES_idx_TEMP` i
  417. where i.`idx_PROCES_INIT_ID`>0 and i.`idx_PROCES_WITH_GROUPS_ID` is not null
  418. ;
  419. SQL;
  420. $sqlList__TODO_OFF_time_0_1__['P.1--update-CRM_PROCES-idx_PROCES_INIT_ID'] = <<<SQL
  421. update `CRM_PROCES` p
  422. 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)
  423. ;
  424. SQL;
  425. $sqlList['GP.1--clear-CRM_PROCES_idx_GROUP_to_PROCES'] = <<<SQL
  426. truncate table `CRM_PROCES_idx_GROUP_to_PROCES`;
  427. SQL;
  428. $sqlList['GP.2--fill-CRM_PROCES_idx_GROUP_to_PROCES'] = <<<SQL
  429. insert ignore into `CRM_PROCES_idx_GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
  430. select i.`ID_PROCES` as ID_PROCES, z.`ID` as ID_GROUP
  431. from `CRM_PROCES_idx` i
  432. join `CRM_WSKAZNIK` wsk on(wsk.`ID_PROCES`=i.`idx_PROCES_WITH_GROUPS_ID`
  433. and wsk.`A_STATUS` in('NORMAL', 'WAITING')
  434. )
  435. join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
  436. and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
  437. and z.`A_STATUS` in('NORMAL', 'WAITING')
  438. )
  439. join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
  440. and przyp.`FORM_TREAT` & 8 -- has perm X
  441. )
  442. -- where i.`TYPE` in('PROCES_INIT', 'GOTO_AND_RETURN')
  443. ;
  444. SQL;
  445. $sqlList['CONF.2--set-end-time-in-config'] = <<<SQL
  446. replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values ('tbl_indexer_CRM_PROCES_last_exec_end', NOW());
  447. SQL;
  448. $db = DB::getDB();
  449. if ($db->has_errors()) {
  450. throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
  451. }
  452. $DBG_TIME = true;//('1' == V::get('DBG_TIME', '', $_GET));
  453. $dbgExecTime = new DebugExecutionTime();
  454. if ($DBG_TIME) $dbgExecTime->activate();
  455. $dbgExecTime->log('start');
  456. $sqlExecuteLimit = V::get('DBG_LIMIT', 0, $_GET);
  457. $sqlExecuteCounter = 0;
  458. foreach ($sqlList as $sqlName => $sql) {
  459. $sqlExecuteCounter++;
  460. echo'<p>['.$sqlExecuteCounter.'] Executing sql "'.$sqlName.'" ... </p>';
  461. $res = $db->query($sql);
  462. if ($db->has_errors()) {
  463. throw new Exception("DB Errors at sql '{$sqlName}': " . implode("\n<br>", $db->get_errors()));
  464. }
  465. if($DBG_TIME) $dbgExecTime->log("execute sql {$sqlName}");
  466. echo'<p>['.$sqlExecuteCounter.'] DONE sql "'.$sqlName.'"</p>';
  467. if ($sqlExecuteLimit > 0 && $sqlExecuteCounter >= $sqlExecuteLimit) break;
  468. }
  469. if($DBG_TIME) $dbgExecTime->printDebug();
  470. }
  471. public function reinstallAction() {
  472. $this->reinstall();
  473. die('OK');
  474. }
  475. public function reinstall() {
  476. $sqlList = array();
  477. $sqlList['RemoveTable'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx`";
  478. $sqlList['InstallTable'] = <<<SQL
  479. CREATE TABLE IF NOT EXISTS `CRM_PROCES_idx` (
  480. `ID_PROCES` int(11) NOT NULL
  481. , `PARENT_ID` int(11) NOT NULL DEFAULT '0'
  482. , `TYPE` varchar(32) NOT NULL DEFAULT ''
  483. , `idx_PROCES_INIT_ID` int(11) NOT NULL DEFAULT '0'
  484. , `idx_MAIN_PROCES_INIT_ID` int(11) NOT NULL DEFAULT '0'
  485. , `idx_PROCES_WITH_GROUPS_ID` int(11) NULL DEFAULT NULL
  486. -- , `idx_PATH` text NOT NULL
  487. , KEY `ID_PROCES` (`ID_PROCES`)
  488. , KEY `PARENT_ID` (`PARENT_ID`)
  489. , KEY `idx_PROCES_INIT_ID` (`idx_PROCES_INIT_ID`)
  490. , KEY `idx_MAIN_PROCES_INIT_ID` (`idx_MAIN_PROCES_INIT_ID`)
  491. , KEY `idx_PROCES_WITH_GROUPS_ID` (`idx_PROCES_WITH_GROUPS_ID`)
  492. -- , UNIQUE KEY `uniq__idx_PROCES_WITH_GROUPS_ID` (`ID_PROCES`,`idx_PROCES_WITH_GROUPS_ID`)
  493. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  494. SQL;
  495. $sqlList['RemoveOldTableGroupToInit'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_GROUPS_to_INIT`";
  496. $sqlList['RemoveTableGroupToInit'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_GROUP_to_PROCES`";
  497. $sqlList['InstallTableGroupToInit'] = <<<SQL
  498. CREATE TABLE IF NOT EXISTS `CRM_PROCES_idx_GROUP_to_PROCES` (
  499. `ID_PROCES` int(11) NOT NULL
  500. , `ID_GROUP` int(11) NOT NULL
  501. , KEY `ID_PROCES` (`ID_PROCES`)
  502. , KEY `ID_GROUP` (`ID_GROUP`)
  503. , UNIQUE KEY `uniq__GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
  504. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  505. SQL;
  506. $sqlList['RemoveViewUserToProces'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_USER_to_PROCES_VIEW`";
  507. $sqlList['InstallViewUserToProces'] = <<<SQL
  508. CREATE VIEW `CRM_PROCES_idx_USER_to_PROCES_VIEW` AS
  509. select concat(u.`ID`, gi.`ID_PROCES`) as ID
  510. , gi.`ID_PROCES` as `ID_PROCES`
  511. , u.`ADM_ACCOUNT` as `ADM_ACCOUNT`
  512. , u.`EMPLOYEE_TYPE` as `EMPLOYEE_TYPE`
  513. , u.`A_STATUS` as `A_STATUS`
  514. from `ADMIN_USERS` u
  515. join `CRM_AUTH_PROFILE` au on(au.`REMOTE_ID`=u.`ID` and au.`REMOTE_TABLE`='ADMIN_USERS' and au.`A_STATUS` in('NORMAL','WAITING'))
  516. join `CRM_PROCES_idx_GROUP_to_PROCES` gi on(gi.`ID_GROUP`=au.`ID_ZASOB`)
  517. SQL;
  518. $sqlList['RemoveViewUserToInit'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_USER_to_INIT_VIEW`";
  519. $sqlList['InstallViewUserToInit'] = <<<SQL
  520. CREATE VIEW `CRM_PROCES_idx_USER_to_INIT_VIEW` AS
  521. select concat(u.`ID`, p.`ID`) as ID
  522. , p.`ID` as `ID_PROCES_INIT`
  523. , p.`DESC` as `DESC`
  524. , u.`ADM_ACCOUNT` as `ADM_ACCOUNT`
  525. , u.`EMPLOYEE_TYPE` as `EMPLOYEE_TYPE`
  526. , u.`A_STATUS` as `A_STATUS`
  527. from `ADMIN_USERS` u
  528. join `CRM_AUTH_PROFILE` au on(au.`REMOTE_ID`=u.`ID` and au.`REMOTE_TABLE`='ADMIN_USERS' and au.`A_STATUS` in('NORMAL','WAITING'))
  529. join `CRM_PROCES_idx_GROUP_to_PROCES` gi on(gi.`ID_GROUP`=au.`ID_ZASOB`)
  530. join `CRM_PROCES_idx` i on(i.`ID_PROCES`=gi.`ID_PROCES`)
  531. join `CRM_PROCES` p on(p.`ID`=i.`idx_PROCES_INIT_ID`)
  532. where p.`TYPE`='PROCES_INIT'
  533. -- group by u.`ID`, p.`ID`
  534. SQL;
  535. /* Usage - find proces init for user by $userLogin:
  536. SELECT *
  537. FROM `CRM_PROCES_idx_USER_to_INIT_VIEW`
  538. WHERE `ADM_ACCOUNT` LIKE '{$userLogin}'
  539. GROUP BY ID_PROCES_INIT
  540. */
  541. $sqlList['RemoveViewTablesInfo'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLES_INFO_VIEW`";
  542. $sqlList['InstallViewTablesInfo'] = <<<SQL
  543. CREATE VIEW `CRM_PROCES_idx_TABLES_INFO_VIEW` AS
  544. select z.`ID` as `ID_CELL`
  545. , z.`DESC` as `CELL_NAME`
  546. , z.`DESC_PL` as `CELL_LABEL`
  547. , z.`OPIS` as `CELL_DESCRIPTION`
  548. , z.`SORT_PRIO` as `CELL_SORT_PRIO`
  549. , zp.`ID` as `ID_TABLE`
  550. , zp.`DESC` as `TABLE_NAME`
  551. , zp.`DESC_PL` as `TABLE_LABEL`
  552. , zp.`OPIS` as `TABLE_DESCRIPTION`
  553. , zpp.`ID` as `ID_DATABASE`
  554. from `CRM_LISTA_ZASOBOW` z
  555. join `CRM_LISTA_ZASOBOW` zp on(zp.`ID`=z.`PARENT_ID` and zp.`TYPE`='TABELA' and zp.`A_STATUS` in('WAITING','NORMAL'))
  556. join `CRM_LISTA_ZASOBOW` zpp on(zpp.`ID`=zp.`PARENT_ID`
  557. -- TODO: and zpp.`TYPE`='BAZA_DANYCH...'
  558. and zpp.`A_STATUS` in('WAITING','NORMAL')
  559. )
  560. where z.`TYPE`='KOMORKA'
  561. and z.`A_STATUS` in('WAITING','NORMAL')
  562. SQL;
  563. $sqlList['RemoveViewTableToProces'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW`";
  564. $sqlList['InstallViewTableToProces'] = <<<SQL
  565. CREATE VIEW `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW` AS
  566. select tv.`ID_CELL` as `ID_CELL`
  567. , tv.`CELL_NAME` as `CELL_NAME`
  568. , tv.`ID_TABLE` as `ID_TABLE`
  569. , tv.`TABLE_NAME` as `TABLE_NAME`
  570. , tv.`TABLE_LABEL` as `TABLE_LABEL`
  571. , tv.`TABLE_DESCRIPTION` as `TABLE_DESCRIPTION`
  572. , tv.`ID_DATABASE` as `ID_DATABASE`
  573. , wsk.`ID_PROCES` as `ID_PROCES`
  574. from `CRM_PROCES_idx_TABLES_INFO_VIEW` tv
  575. join `CRM_WSKAZNIK` wsk on(wsk.`ID_ZASOB`=tv.`ID_CELL` and wsk.`A_STATUS` in('WAITING','NORMAL'))
  576. join `CRM_PROCES` p on(p.`ID`=wsk.`ID_PROCES` and p.`A_STATUS` in('WAITING','NORMAL'))
  577. SQL;
  578. $sqlList['RemoveViewUrlToProces'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_URL_TO_PROCES_VIEW`";
  579. $sqlList['InstallViewUrlToProces'] = <<<SQL
  580. CREATE VIEW `CRM_PROCES_idx_URL_TO_PROCES_VIEW` AS
  581. select z.`ID` as `ID_URL`
  582. , z.`DESC` as `URL_LINK`
  583. , z.`DESC_PL` as `URL_LABEL`
  584. , z.`OPIS` as `URL_DESC`
  585. , wsk.`ID_PROCES` as `ID_PROCES`
  586. from `CRM_LISTA_ZASOBOW` z
  587. join `CRM_WSKAZNIK` wsk on(wsk.`ID_ZASOB`=z.`ID` and wsk.`A_STATUS` in('WAITING','NORMAL'))
  588. join `CRM_PROCES` p on(p.`ID`=wsk.`ID_PROCES` and p.`A_STATUS` in('WAITING','NORMAL'))
  589. where z.`TYPE`='URL'
  590. and z.`A_STATUS` in('WAITING','NORMAL')
  591. SQL;
  592. $sqlList['RemoveViewTableCellToProcesWithPerms'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLE_TO_PROCES_PERMS_VIEW`";
  593. $sqlList['InstallViewTableCellToProcesWithPerms'] = <<<SQL
  594. CREATE VIEW `CRM_PROCES_idx_TABLE_TO_PROCES_PERMS_VIEW` AS
  595. select tv.`ID_CELL` as `ID_CELL`
  596. , tv.`CELL_NAME` as `CELL_NAME`
  597. , tv.`ID_TABLE` as `ID_TABLE`
  598. , tv.`TABLE_NAME` as `TABLE_NAME`
  599. , tv.`TABLE_LABEL` as `TABLE_LABEL`
  600. , tv.`TABLE_DESCRIPTION` as `TABLE_DESCRIPTION`
  601. , tv.`ID_DATABASE` as `ID_DATABASE`
  602. , wsk.`ID_PROCES` as `ID_PROCES`
  603. , replace(przyp.`FORM_TREAT`, ',', '') as FORM_TREAT
  604. , IF(przyp.`FORM_TREAT` & 2, 1, 0) as PERM_R
  605. , IF(przyp.`FORM_TREAT` & 4, 1, 0) as PERM_W
  606. , IF(przyp.`FORM_TREAT` & 8, 1, 0) as PERM_X
  607. , IF(przyp.`FORM_TREAT` & 16, 1, 0) as PERM_C
  608. , IF(przyp.`FORM_TREAT` & 32, 1, 0) as PERM_S
  609. , IF(przyp.`FORM_TREAT` & 64, 1, 0) as PERM_O
  610. , IF(przyp.`FORM_TREAT` & 128, 1, 0) as PERM_V
  611. , IF(przyp.`FORM_TREAT` & 256, 1, 0) as PERM_E
  612. from `CRM_PROCES_idx_TABLES_INFO_VIEW` tv
  613. join `CRM_WSKAZNIK` wsk on(wsk.`ID_ZASOB`=tv.`ID_CELL` and wsk.`A_STATUS` in('WAITING','NORMAL'))
  614. join `CRM_PROCES` p on(p.`ID`=wsk.`ID_PROCES` and p.`A_STATUS` in('WAITING','NORMAL'))
  615. join `CRM_PRZYPADEK` as przyp on (przyp.`ID`=wsk.`ID_PRZYPADEK`)
  616. SQL;
  617. $sqlExample_TableCellToProcesForInitTable = <<<SQL
  618. select tv.`ID_CELL` as `ID_CELL`
  619. , tv.`CELL_NAME` as `CELL_NAME`
  620. , tv.`CELL_LABEL` as `CELL_LABEL`
  621. , tv.`CELL_DESC` as `CELL_DESC`
  622. , tv.`CELL_SORT_PRIO` as `SORT_PRIO`
  623. , tv.`ID_TABLE` as `ID_TABLE`
  624. , tv.`TABLE_NAME` as `TABLE_NAME`
  625. , wsk.`ID_PROCES` as `ID_PROCES`
  626. , sum(IF(przyp.`FORM_TREAT` & 2, 1, 0)) as PERM_R
  627. , sum(IF(przyp.`FORM_TREAT` & 4, 1, 0)) as PERM_W
  628. , sum(IF(przyp.`FORM_TREAT` & 8, 1, 0)) as PERM_X
  629. , sum(IF(przyp.`FORM_TREAT` & 16, 1, 0)) as PERM_C
  630. , sum(IF(przyp.`FORM_TREAT` & 32, 1, 0)) as PERM_S
  631. , sum(IF(przyp.`FORM_TREAT` & 64, 1, 0)) as PERM_O
  632. , sum(IF(przyp.`FORM_TREAT` & 128, 1, 0)) as PERM_V
  633. , sum(IF(przyp.`FORM_TREAT` & 256, 1, 0)) as PERM_E
  634. from `CRM_PROCES_idx_TABLES_INFO_VIEW` tv
  635. join `CRM_WSKAZNIK` wsk on(wsk.`ID_ZASOB`=tv.`ID_CELL` and wsk.`A_STATUS` in('WAITING','NORMAL'))
  636. join `CRM_PROCES` p on(p.`ID`=wsk.`ID_PROCES` and p.`A_STATUS` in('WAITING','NORMAL'))
  637. join `CRM_PRZYPADEK` as przyp on (przyp.`ID`=wsk.`ID_PRZYPADEK`)
  638. where tv.`ID_TABLE`='{$idTable}'
  639. and wsk.`ID_PROCES` in({$sqlIdProcesList})
  640. group by tv.`ID_CELL`, wsk.`ID_PROCES`
  641. order by tv.`CELL_SORT_PRIO`
  642. SQL;
  643. $sqlExample_UrlToUserProces = <<<SQL
  644. select zpv.*
  645. from `CRM_PROCES_idx_URL_TO_PROCES_VIEW` zpv
  646. where zpv.`ID_PROCES` in({$sqlIdProcesList})
  647. SQL;
  648. $sqlExample_sqlIdProcesList = <<<SQL
  649. select gi.`ID_PROCES`
  650. from `CRM_PROCES_idx_GROUP_to_PROCES` gi
  651. where gi.`ID_GROUP` in({$idUserGroupList})
  652. SQL;
  653. $sqlList_BUG = <<<SQL
  654. -- BUG #1349 - View's SELECT contains a subquery in the FROM clause
  655. CREATE VIEW `CRM_PROCES_idx_TABLE_TO_USER_VIEW` AS
  656. select tpvg.`ID_PROCES`, tpvg.`TABLE_NAME`
  657. , upv.`ADM_ACCOUNT`
  658. , upv.`EMPLOYEE_TYPE`
  659. , upv.`A_STATUS`
  660. from
  661. (select tpv.`ID_PROCES`, tpv.`TABLE_NAME`
  662. from `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW` tpv
  663. group by tpv.`TABLE_NAME`, tpv.`ID_PROCES`) as tpvg
  664. join `CRM_PROCES_idx_USER_to_PROCES_VIEW` upv on(upv.`ID_PROCES`=tpvg.`ID_PROCES`)
  665. SQL;
  666. $sqlList['RemoveViewTableToProcesGrouped'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLE_TO_PROCES_GROUPED_VIEW`";
  667. $sqlList['InstallViewTableToProcesGrouped'] = <<<SQL
  668. CREATE VIEW `CRM_PROCES_idx_TABLE_TO_PROCES_GROUPED_VIEW` AS
  669. select tpv.`ID_TABLE`
  670. , tpv.`TABLE_NAME`
  671. , tpv.`TABLE_LABEL`
  672. , tpv.`TABLE_DESCRIPTION`
  673. , tpv.`ID_DATABASE`
  674. , tpv.`ID_PROCES`
  675. from `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW` tpv
  676. group by tpv.`ID_TABLE`, tpv.`ID_PROCES`
  677. SQL;
  678. $sqlList['RemoveViewTableToUser'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLE_TO_USER_VIEW`";
  679. $sqlList['InstallViewTableToUser'] = <<<SQL
  680. CREATE VIEW `CRM_PROCES_idx_TABLE_TO_USER_VIEW` AS
  681. select tpgv.`ID_TABLE`, tpgv.`TABLE_NAME`, tpgv.`ID_PROCES`
  682. , upv.`ADM_ACCOUNT`
  683. , upv.`EMPLOYEE_TYPE`
  684. , upv.`A_STATUS`
  685. from `CRM_PROCES_idx_TABLE_TO_PROCES_GROUPED_VIEW` as tpgv
  686. join `CRM_PROCES_idx_USER_to_PROCES_VIEW` upv on(upv.`ID_PROCES`=tpgv.`ID_PROCES`)
  687. SQL;
  688. $sqlList['RemoveProcedure'] = "DROP PROCEDURE if exists `update_proces_init_idx_rec`";
  689. // throws errors:
  690. // #1146 - Table '{DATABASE_NAME}.P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Already executed' doesn't exist
  691. $sqlList['CreateProcedure'] = <<<SQL
  692. CREATE PROCEDURE `update_proces_init_idx_rec`()
  693. BEGIN
  694. SET @enabled = FALSE;
  695. SET @conf_last_exec_lock_key = 'tbl_indexer_CRM_PROCES_last_exec_lock_date';
  696. SET @conf_last_exec_start_key = 'tbl_indexer_CRM_PROCES_last_exec_start';
  697. SET @conf_last_exec_end_key = 'tbl_indexer_CRM_PROCES_last_exec_end';
  698. -- if already runnig mysql will throw "Commands out of sync; you can't run this command now"
  699. IF (select count(1) from `CRM_CONFIG` where `conf_key`=@conf_last_exec_lock_key and `conf_val`!='')>0 THEN
  700. UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Already executed` SET x=1;
  701. ELSE BEGIN
  702. -- CONF.1--set-start-time-in-config
  703. replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values (@conf_last_exec_lock_key, NOW()), (@conf_last_exec_start_key, NOW());
  704. -- I.1--truncate-table
  705. truncate table `CRM_PROCES_idx_TEMP`;
  706. -- I.2--fill-CRM_PROCES_idx_TEMP
  707. insert into `CRM_PROCES_idx_TEMP` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_MAIN_PROCES_INIT_ID`)
  708. select p.`ID` as `ID_PROCES`
  709. , p.`TYPE` as `TYPE`
  710. , p.`PARENT_ID` as `PARENT_ID`
  711. , IF(p.`TYPE`='PROCES_INIT', p.`ID`, 0) as `idx_PROCES_INIT_ID`
  712. , IF(p.`TYPE`='PROCES_INIT', p.`ID`, 0) as `idx_MAIN_PROCES_INIT_ID`
  713. from `CRM_PROCES` p
  714. where p.`A_STATUS` in('NORMAL','WAITING')
  715. ;
  716. -- G.1--before-while-2-set-initial-proc_with_groups_id
  717. update `CRM_PROCES_idx_TEMP` i
  718. join `CRM_WSKAZNIK` as wsk on(wsk.`ID_PROCES`=i.`ID_PROCES`
  719. and wsk.`A_STATUS` in('NORMAL', 'WAITING')
  720. )
  721. join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
  722. and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
  723. and z.`A_STATUS` in('NORMAL', 'WAITING')
  724. )
  725. join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
  726. and przyp.`FORM_TREAT` & 8 -- has perm X
  727. )
  728. set
  729. i.`idx_PROCES_WITH_GROUPS_ID`=i.`ID_PROCES`
  730. where i.`idx_PROCES_INIT_ID`>0
  731. ;
  732. -- G.2--while-2-loop-update-proc_with_groups_id-from-parent
  733. SET @i = 0;
  734. SET @loopLomit = 100;
  735. SET @groupCnt = 1;
  736. WHILE @i < @loopLomit and @groupCnt > 0 DO
  737. update `CRM_PROCES_idx_TEMP` as p
  738. join `CRM_PROCES_idx_TEMP` as pp on(
  739. pp.`ID_PROCES`=p.`PARENT_ID`
  740. and pp.`idx_PROCES_WITH_GROUPS_ID` is not null
  741. and pp.`idx_PROCES_WITH_GROUPS_ID`>0
  742. )
  743. set p.`idx_PROCES_WITH_GROUPS_ID`=pp.`idx_PROCES_WITH_GROUPS_ID`
  744. where p.`idx_PROCES_WITH_GROUPS_ID` is null
  745. ;
  746. SET @groupCnt = ROW_COUNT();
  747. SET @i = @i + 1;
  748. END WHILE;
  749. -- 'P_INIT_ID.1--fill_idx_INIT
  750. SET @i = 0;
  751. SET @loopLomit = 100;
  752. SET @pinitCnt = 1;
  753. WHILE @i < @loopLomit and @pinitCnt > 0 DO
  754. update `CRM_PROCES_idx_TEMP` p
  755. join `CRM_PROCES_idx_TEMP` pp on(pp.`ID_PROCES`=p.`PARENT_ID`)
  756. set p.`idx_PROCES_INIT_ID`=IF(p.`idx_PROCES_INIT_ID`>0, p.`idx_PROCES_INIT_ID`, pp.`idx_PROCES_INIT_ID`)
  757. , p.`idx_MAIN_PROCES_INIT_ID`=pp.`idx_MAIN_PROCES_INIT_ID`
  758. -- // TODO:?: update here `idx_MAIN_PROCES_INIT_ID`
  759. where p.`idx_PROCES_INIT_ID`=0 and pp.`idx_PROCES_INIT_ID`>0
  760. ;
  761. SET @pinitCnt = ROW_COUNT();
  762. SET @i = @i + 1;
  763. END WHILE;
  764. -- GOTO_AND_RET.1--from-7-fill-goto_and_return
  765. 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`)
  766. select g.`ID`
  767. , 'GOTO_AND_RETURN' as `TYPE`
  768. , p.`ID` as `PARENT_ID`
  769. , g.`ID` as `idx_PROCES_INIT_ID`
  770. , i.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
  771. , 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`
  772. from `CRM_PROCES` p
  773. join `CRM_PROCES_idx_TEMP` i on(i.`ID_PROCES`=p.`ID`)
  774. join `CRM_PROCES` g on(g.`ID`=p.`IF_TRUE_GOTO`
  775. and g.`TYPE`='PROCES_INIT'
  776. and g.`A_STATUS` in('NORMAL','WAITING')
  777. and p.`IF_TRUE_GOTO_FLAG`='GOTO_AND_RETURN'
  778. and p.`IF_TRUE_GOTO`>0
  779. )
  780. join `CRM_PROCES_idx_TEMP` gi on(gi.`ID_PROCES`=g.`ID`)
  781. where p.`A_STATUS` in('NORMAL','WAITING')
  782. ;
  783. -- GOTO_AND_RET.2--fill-childrens-of-goto_and_return
  784. 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`)
  785. select ic.`ID_PROCES`
  786. , 'GOTO_AND_RETURN_CHILD' as `TYPE`
  787. , ic.`PARENT_ID` as `PARENT_ID`
  788. , ic.`idx_PROCES_INIT_ID` as `idx_PROCES_INIT_ID`
  789. , i.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
  790. , 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`
  791. from `CRM_PROCES_idx_TEMP` i
  792. join `CRM_PROCES_idx_TEMP` ic on(
  793. ic.`idx_PROCES_INIT_ID`=i.`ID_PROCES`
  794. and ic.`ID_PROCES`!=i.`ID_PROCES`
  795. )
  796. where i.`TYPE`='GOTO_AND_RETURN'
  797. ;
  798. -- // TODO: fill with goto_and_ret level 2
  799. -- gc p(5105) is GOTO_AND_RETURN_CHILD pID(5061) pI(5039) pIM(5040) pG(5040)
  800. -- gc p(5105) is GOTO_AND_RETURN_CHILD pID(5061) pI(5039) pIM(5100) pG(5100)
  801. -- gg p(5103) is GOTO_AND_RETURN pID(5105) pI(5103) pIM(5039) pG(NULL)
  802. -- + p(5103) is GOTO_AND_RETURN_LVL2 pID(5105) pI(5103) pIM(5040) pG(5040)
  803. -- + p(5103) is GOTO_AND_RETURN_LVL2 pID(5105) pI(5103) pIM(5100) pG(5100)
  804. 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`)
  805. select gg.`ID_PROCES` as `ID_PROCES`
  806. , 'GOTO_AND_RETURN_LVL2' as `TYPE`
  807. , gg.`PARENT_ID` as `PARENT_ID`
  808. , gg.`idx_PROCES_INIT_ID` as `idx_PROCES_INIT_ID`
  809. , gc.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
  810. , 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`
  811. -- , 'gc', gc.*, 'gg', gg.*
  812. from `CRM_PROCES_idx_TEMP` gg
  813. join `CRM_PROCES_idx_TEMP` gc on(gc.`ID_PROCES`=gg.`PARENT_ID`)
  814. where gg.`TYPE`='GOTO_AND_RETURN'
  815. and gc.`TYPE`='GOTO_AND_RETURN_CHILD'
  816. ;
  817. -- // TODO: fill childrens for goto_and_ret level 2
  818. -- i p(5103) is GOTO_AND_RETURN_LVL2 pID(5105) pI(5103) pIM(5040) pG(5040)
  819. -- i p(5103) is GOTO_AND_RETURN_LVL2 pID(5105) pI(5103) pIM(5100) pG(5100)
  820. -- ic p(5104) is GOTO_AND_RETURN_CHILD pID(5103) pI(5103) pIM(5039) pG(NULL)
  821. -- ic p(5104) is GOTO_AND_RETURN_CHILD pID(5103) pI(5103) pIM(5039) pG(NULL)
  822. -- + p(5104) is GOTO_AND_RETURN_CHILD_LVL2 pID(5103) pI(5103) pIM(5100) pG(5100)
  823. -- + p(5104) is GOTO_AND_RETURN_CHILD_LVL2 pID(5103) pI(5103) pIM(5040) pG(5040)
  824. 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`)
  825. select ic.`ID_PROCES`
  826. , 'GOTO_AND_RETURN_CHILD_LVL2' as `TYPE`
  827. , ic.`PARENT_ID` as `PARENT_ID`
  828. , ic.`idx_PROCES_INIT_ID` as `idx_PROCES_INIT_ID`
  829. , i.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
  830. , 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`
  831. -- , 'i', i.*, 'ic', ic.*
  832. from `CRM_PROCES_idx_TEMP` i
  833. join `CRM_PROCES_idx_TEMP` ic on(
  834. ic.`idx_PROCES_INIT_ID`=i.`ID_PROCES`
  835. and ic.`ID_PROCES`!=i.`ID_PROCES`
  836. and ic.`TYPE`='GOTO_AND_RETURN_CHILD'
  837. )
  838. where i.`TYPE`='GOTO_AND_RETURN_LVL2'
  839. ;
  840. -- IDX.1--clear-CRM_PROCES_idx
  841. truncate table `CRM_PROCES_idx`;
  842. -- IDX.2--update-CRM_PROCES_idx-from-temp
  843. insert into `CRM_PROCES_idx` (`ID_PROCES`,`PARENT_ID`,`TYPE`,`idx_PROCES_INIT_ID`,`idx_MAIN_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
  844. 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`
  845. from `CRM_PROCES_idx_TEMP` i
  846. where i.`idx_PROCES_INIT_ID`>0 and i.`idx_PROCES_WITH_GROUPS_ID` is not null
  847. ;
  848. -- TODO OFF: time ~0.1 P.1--update-CRM_PROCES-idx_PROCES_INIT_ID
  849. -- update `CRM_PROCES` p
  850. -- 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)
  851. -- ;
  852. -- GP.1--clear-CRM_PROCES_idx_GROUP_to_PROCES
  853. truncate table `CRM_PROCES_idx_GROUP_to_PROCES`;
  854. -- GP.2--fill-CRM_PROCES_idx_GROUP_to_PROCES
  855. insert ignore into `CRM_PROCES_idx_GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
  856. select i.`ID_PROCES` as ID_PROCES, z.`ID` as ID_GROUP
  857. from `CRM_PROCES_idx` i
  858. join `CRM_WSKAZNIK` wsk on(wsk.`ID_PROCES`=i.`idx_PROCES_WITH_GROUPS_ID`
  859. and wsk.`A_STATUS` in('NORMAL', 'WAITING')
  860. )
  861. join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
  862. and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
  863. and z.`A_STATUS` in('NORMAL', 'WAITING')
  864. )
  865. join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
  866. and przyp.`FORM_TREAT` & 8 -- has perm X
  867. )
  868. -- where i.`TYPE` in('PROCES_INIT', 'GOTO_AND_RETURN')
  869. ;
  870. -- CONF.2--set-end-time-in-config
  871. replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values (@conf_last_exec_lock_key, ''), (@conf_last_exec_end_key, NOW());
  872. -- clear msg 'Update perms' from Msgs system
  873. update `CRM_UI_MSGS`
  874. set `A_STATUS`='OFF_HARD'
  875. , `actionExecutedTime`=NOW()
  876. , `A_RECORD_UPDATE_DATE`=NOW()
  877. , `A_RECORD_UPDATE_AUTHOR`='update_proces_init_idx_rec'
  878. where `A_STATUS`='WAITING'
  879. and `app_className`='FixCrmProcesInitIdx'
  880. and `msg`='Update perms'
  881. and `uiTargetType`='default_db_table'
  882. and `uiTargetName`='CRM_PROCES'
  883. ;
  884. END ; END IF ;
  885. END ;
  886. SQL;
  887. $sqlList['RemoveTrigger_AfterInsertProces'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_PROCES_AFTER_INSERT`";
  888. $sqlList['CreateTrigger_AfterInsertProces'] = "
  889. CREATE DEFINER=`root`@`localhost` TRIGGER `FixCrmProcesInitIdx_CRM_PROCES_AFTER_INSERT` AFTER INSERT ON `CRM_PROCES`
  890. FOR EACH ROW BEGIN
  891. -- only when PARENT_ID changes and PARENT_ID exists in `CRM_PROCES_idx`
  892. 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
  893. -- throw warning to update perms
  894. IF (select count(1) from `CRM_UI_MSGS` where `app_className`='FixCrmProcesInitIdx'
  895. and `msg`='Update perms'
  896. and `uiTargetType`='default_db_table'
  897. and `uiTargetName`='CRM_PROCES'
  898. and `A_STATUS`='WAITING'
  899. ) = 0 THEN
  900. INSERT INTO `CRM_UI_MSGS` (`ID`
  901. , `app_className`, `msg`, `msgType`
  902. , `uiTargetType`, `uiTargetName`
  903. , `userTargetType`
  904. , `A_RECORD_CREATE_DATE`, `A_RECORD_CREATE_AUTHOR`)
  905. VALUES (NULL
  906. , 'FixCrmProcesInitIdx', 'Update perms', 'danger'
  907. , 'default_db_table', 'CRM_PROCES'
  908. , 'everyone'
  909. , NOW(), coalesce(NEW.A_RECORD_UPDATE_AUTHOR,'trigger:FixCrmProcesInitIdx_CRM_PROCES_AFTER_INSERT')
  910. );
  911. END IF;
  912. -- UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
  913. END IF;
  914. END
  915. ";
  916. $sqlList['RemoveTrigger_AfterUpdateProces'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_PROCES_AFTER_UPDATE`";
  917. $sqlList['CreateTrigger_AfterUpdateProces'] = "
  918. CREATE DEFINER=`root`@`localhost` TRIGGER `FixCrmProcesInitIdx_CRM_PROCES_AFTER_UPDATE` AFTER UPDATE ON `CRM_PROCES`
  919. FOR EACH ROW BEGIN
  920. -- only when PARENT_ID changes and ID exists in `CRM_PROCES_idx`
  921. 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
  922. -- throw warning to update perms
  923. IF (select count(1) from `CRM_UI_MSGS` where `app_className`='FixCrmProcesInitIdx'
  924. and `msg`='Update perms'
  925. and `uiTargetType`='default_db_table'
  926. and `uiTargetName`='CRM_PROCES'
  927. and `A_STATUS`='WAITING'
  928. ) = 0 THEN
  929. INSERT INTO `CRM_UI_MSGS` (`ID`
  930. , `app_className`, `msg`, `msgType`
  931. , `uiTargetType`, `uiTargetName`
  932. , `userTargetType`
  933. , `A_RECORD_CREATE_DATE`, `A_RECORD_CREATE_AUTHOR`)
  934. VALUES (NULL
  935. , 'FixCrmProcesInitIdx', 'Update perms', 'danger'
  936. , 'default_db_table', 'CRM_PROCES'
  937. , 'everyone'
  938. , NOW(), coalesce(NEW.A_RECORD_UPDATE_AUTHOR,'trigger:FixCrmProcesInitIdx_CRM_PROCES_AFTER_UPDATE')
  939. );
  940. END IF;
  941. -- UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
  942. END IF;
  943. END
  944. ";
  945. $sqlList['RemoveTrigger_AfterInsertWskaznik'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_INSERT`";
  946. $sqlList['CreateTrigger_AfterInsertWskaznik'] = "
  947. CREATE DEFINER=`root`@`localhost` TRIGGER `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_INSERT` AFTER INSERT ON `CRM_WSKAZNIK`
  948. FOR EACH ROW BEGIN
  949. -- only when ID_PROCES exists in `CRM_PROCES_idx`
  950. -- only when ID_ZASOB is group
  951. -- only when ID_PRZYPADEK has perm 'X'
  952. IF NEW.`ID_PROCES`>0
  953. AND NEW.`ID_ZASOB`>0
  954. AND NEW.`ID_PRZYPADEK`>0
  955. AND (select count(*) from `CRM_PROCES_idx` where `ID_PROCES`=NEW.`ID_PROCES` limit 1)>0
  956. AND (select count(*) from `CRM_LISTA_ZASOBOW` z where z.`ID`=NEW.`ID_ZASOB` and z.`TYPE` in('STANOWISKO','DZIAL','PODMIOT') limit 1)>0
  957. AND (select count(*) from `CRM_PRZYPADEK` przyp where przyp.`ID`=NEW.`ID_PRZYPADEK` and przyp.`FORM_TREAT` & 8 limit 1)>0
  958. THEN
  959. -- throw warning to update perms
  960. IF (select count(1) from `CRM_UI_MSGS` where `app_className`='FixCrmProcesInitIdx'
  961. and `msg`='Update perms'
  962. and `uiTargetType`='default_db_table'
  963. and `uiTargetName`='CRM_PROCES'
  964. and `A_STATUS`='WAITING'
  965. ) = 0 THEN
  966. INSERT INTO `CRM_UI_MSGS` (`ID`
  967. , `app_className`, `msg`, `msgType`
  968. , `uiTargetType`, `uiTargetName`
  969. , `userTargetType`
  970. , `A_RECORD_CREATE_DATE`, `A_RECORD_CREATE_AUTHOR`)
  971. VALUES (NULL
  972. , 'FixCrmProcesInitIdx', 'Update perms', 'danger'
  973. , 'default_db_table', 'CRM_PROCES'
  974. , 'everyone'
  975. , NOW(), coalesce(NEW.A_RECORD_UPDATE_AUTHOR,'trigger:FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_INSERT')
  976. );
  977. END IF;
  978. -- UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
  979. END IF;
  980. END
  981. ";
  982. $sqlList['RemoveTrigger_AfterUpdateWskaznik'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_UPDATE`";
  983. $sqlList['CreateTrigger_AfterUpdateWskaznik'] = "
  984. CREATE DEFINER=`root`@`localhost` TRIGGER `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_UPDATE` AFTER UPDATE ON `CRM_WSKAZNIK`
  985. FOR EACH ROW BEGIN
  986. -- only when old or new ID_PROCES exists in `CRM_PROCES_idx`
  987. -- only when old or new ID_ZASOB is group
  988. -- only when old or new ID_PRZYPADEK has perm 'X'
  989. IF (NEW.`ID_PROCES`!=OLD.`ID_PROCES`
  990. or NEW.`ID_ZASOB`!=OLD.`ID_ZASOB`
  991. or NEW.`ID_PRZYPADEK`!=OLD.`ID_PRZYPADEK`
  992. or (NEW.`A_STATUS`!=OLD.`A_STATUS`
  993. and ((NEW.`A_STATUS` in('WAITING','NORMAL') and OLD.`A_STATUS` not in('WAITING','NORMAL'))
  994. or (NEW.`A_STATUS` not in('WAITING','NORMAL') and OLD.`A_STATUS` in('WAITING','NORMAL'))
  995. )
  996. )
  997. )
  998. AND (NEW.`ID_PROCES`>0 or OLD.`ID_PROCES`>0)
  999. AND (NEW.`ID_ZASOB`>0 or OLD.`ID_ZASOB`>0)
  1000. AND (NEW.`ID_PRZYPADEK`>0 or OLD.`ID_PRZYPADEK`>0)
  1001. -- AND (select count(*) from `CRM_PROCES_idx` where `ID_PROCES` in(NEW.`ID_PROCES`,OLD.`ID_PROCES`) limit 1)>0
  1002. 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
  1003. 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
  1004. THEN
  1005. -- throw warning to update perms
  1006. IF (select count(1) from `CRM_UI_MSGS` where `app_className`='FixCrmProcesInitIdx'
  1007. and `msg`='Update perms'
  1008. and `uiTargetType`='default_db_table'
  1009. and `uiTargetName`='CRM_PROCES'
  1010. and `A_STATUS`='WAITING'
  1011. ) = 0 THEN
  1012. INSERT INTO `CRM_UI_MSGS` (`ID`
  1013. , `app_className`, `msg`, `msgType`
  1014. , `uiTargetType`, `uiTargetName`
  1015. , `userTargetType`
  1016. , `A_RECORD_CREATE_DATE`, `A_RECORD_CREATE_AUTHOR`)
  1017. VALUES (NULL
  1018. , 'FixCrmProcesInitIdx', 'Update perms', 'danger'
  1019. , 'default_db_table', 'CRM_PROCES'
  1020. , 'everyone'
  1021. , NOW(), coalesce(NEW.A_RECORD_UPDATE_AUTHOR,'trigger:FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_UPDATE')
  1022. );
  1023. END IF;
  1024. -- UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
  1025. END IF;
  1026. END
  1027. ";
  1028. $db = DB::getDB();
  1029. if ($db->has_errors()) {
  1030. throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
  1031. }
  1032. foreach ($sqlList as $sqlName => $sql) {
  1033. $res = $db->query($sql);
  1034. if ($db->has_errors()) {
  1035. throw new Exception("DB Errors at sql '{$sqlName}': " . implode("\n<br>", $db->get_errors()));
  1036. }
  1037. }
  1038. }
  1039. /*
  1040. #1146 - Table '{DATABASE_NAME}.P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Already executed' doesn't exist
  1041. */
  1042. public function parseMessageFromStorage($msg) {
  1043. switch ($msg) {
  1044. case 'ERROR: Already executed': {
  1045. $msg = "Aktualizacja uprawnień została już uruchomiona przez inną osobę";
  1046. break;
  1047. }
  1048. case 'ERROR: Update perms': {
  1049. $msg = "Wymagana aktualizacja uprawnień";
  1050. break;
  1051. }
  1052. }
  1053. return $msg;
  1054. }
  1055. public function parseMessageFromMsgsSystem($msg) {
  1056. switch ($msg) {
  1057. case 'Update perms': {
  1058. $msg = "Wymagana aktualizacja uprawnień";
  1059. break;
  1060. }
  1061. }
  1062. return $msg;
  1063. }
  1064. public function runByMessageFromMsgsSystem($msg, &$execNotes) {
  1065. switch ($msg) {
  1066. case 'Update perms': {
  1067. $execNotes .= 'Wymagana aktualizacja uprawnień';
  1068. $this->_callProcedure();
  1069. $execNotes .= ' done';
  1070. break;
  1071. }
  1072. }
  1073. }
  1074. }