FixCrmProcesInitIdx.php 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838
  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-while-1-rm'] = "DROP PROCEDURE if exists `update_proces_init_idx_rec__while1`";
  206. $sqlList['0-prepare-while-1-create'] = <<<SQL
  207. CREATE PROCEDURE `update_proces_init_idx_rec__while1`()
  208. BEGIN
  209. update `CRM_PROCES_idx` as i set i.`idx_PROCES_INIT_ID`=IF(i.`TYPE`='PROCES_INIT', i.`ID_PROCES`, 0);
  210. SET @i = 0;
  211. SET @loopLomit = 100;
  212. SET @pinitCnt = 1;
  213. WHILE @i < @loopLomit and @pinitCnt > 0 DO
  214. update `CRM_PROCES_idx` as p join `CRM_PROCES_idx` as pp on(pp.`ID_PROCES`=p.`PARENT_ID`)
  215. set p.`idx_PROCES_INIT_ID`=pp.`idx_PROCES_INIT_ID`
  216. where p.`idx_PROCES_INIT_ID`=0 and pp.`idx_PROCES_INIT_ID`>0;
  217. SET @pinitCnt = ROW_COUNT();
  218. SET @i = @i + 1;
  219. END WHILE;
  220. END
  221. SQL;
  222. $sqlList['0-prepare-while-2-rm'] = "DROP PROCEDURE if exists `update_proces_init_idx_rec__while2`";
  223. $sqlList['0-prepare-while-2-create'] = <<<SQL
  224. CREATE PROCEDURE `update_proces_init_idx_rec__while2`()
  225. BEGIN
  226. SET @i = 0;
  227. SET @loopLomit = 100;
  228. SET @groupCnt = 1;
  229. WHILE @i < @loopLomit and @groupCnt > 0 DO
  230. update `CRM_PROCES_idx` as p join `CRM_PROCES_idx` as pp on(pp.`ID_PROCES`=p.`PARENT_ID`)
  231. set p.`idx_PROCES_WITH_GROUPS_ID`=pp.`idx_PROCES_WITH_GROUPS_ID`
  232. where p.`idx_PROCES_WITH_GROUPS_ID` is null
  233. and pp.`idx_PROCES_WITH_GROUPS_ID` is not null
  234. and pp.`idx_PROCES_WITH_GROUPS_ID`>0;
  235. SET @groupCnt = ROW_COUNT();
  236. SET @i = @i + 1;
  237. END WHILE;
  238. END
  239. SQL;
  240. $sqlList__TEST_PERF_NO_DIFF['0-prepare-while-2-create'] = <<<SQL
  241. CREATE PROCEDURE `update_proces_init_idx_rec__while2`()
  242. BEGIN
  243. SET @i = 0;
  244. SET @loopLomit = 100;
  245. SET @groupCnt = 1;
  246. WHILE @i < @loopLomit and @groupCnt > 0 DO
  247. update `CRM_PROCES_idx` as p
  248. join `CRM_PROCES_idx` as pp on(pp.`ID_PROCES`=p.`PARENT_ID`
  249. and pp.`idx_PROCES_WITH_GROUPS_ID` is not null
  250. and pp.`idx_PROCES_WITH_GROUPS_ID`>0
  251. )
  252. set p.`idx_PROCES_WITH_GROUPS_ID`=pp.`idx_PROCES_WITH_GROUPS_ID`
  253. where p.`idx_PROCES_WITH_GROUPS_ID` is null
  254. ;
  255. SET @groupCnt = ROW_COUNT();
  256. SET @i = @i + 1;
  257. END WHILE;
  258. END
  259. SQL;
  260. $sqlList['1-set-start-time-in-config'] = <<<SQL
  261. replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values ('tbl_indexer_CRM_PROCES_last_exec_start', NOW());
  262. SQL;
  263. $sqlList['2-truncate-table'] = <<<SQL
  264. truncate table `CRM_PROCES_idx`;
  265. -- delete from `CRM_PROCES_idx`;
  266. SQL;
  267. $sqlList['3-fill-CRM_PROCES_idx'] = <<<SQL
  268. -- select 'insert into `CRM_PROCES_idx`...';
  269. insert into `CRM_PROCES_idx` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`)
  270. select p.`ID`, p.`TYPE`, p.`PARENT_ID`, IF(p.`TYPE`='PROCES_INIT', p.`ID`, 0) as idx_PROCES_INIT_ID
  271. from `CRM_PROCES` p
  272. where p.`A_STATUS` in('NORMAL','WAITING')
  273. ;
  274. SQL;
  275. $sqlList['4-while-1'] = <<<SQL
  276. call `update_proces_init_idx_rec__while1`();
  277. SQL;
  278. $sqlList['5-before-while-2'] = <<<SQL
  279. update `CRM_PROCES_idx` i
  280. join `CRM_WSKAZNIK` as wsk on(wsk.`ID_PROCES`=i.`ID_PROCES`
  281. and wsk.`A_STATUS` in('NORMAL', 'WAITING')
  282. )
  283. join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
  284. and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
  285. and z.`A_STATUS` in('NORMAL', 'WAITING')
  286. )
  287. join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
  288. and przyp.`FORM_TREAT` & 8 -- has perm X
  289. )
  290. set
  291. i.`idx_PROCES_WITH_GROUPS_ID`=i.`ID_PROCES`
  292. where i.`idx_PROCES_INIT_ID`>0;
  293. SQL;
  294. $sqlList['6-while-2'] = <<<SQL
  295. call `update_proces_init_idx_rec__while2`();
  296. SQL;
  297. $sqlList['7-goto_and_return'] = <<<SQL
  298. insert ignore into `CRM_PROCES_idx` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
  299. select g.`ID`, 'GOTO_AND_RETURN' as `TYPE`, p.`ID` as PARENT_ID, g.`ID` as idx_PROCES_INIT_ID
  300. , pi.`idx_PROCES_WITH_GROUPS_ID`
  301. from `CRM_PROCES` p
  302. join `CRM_PROCES_idx` pi on(pi.`ID_PROCES`=p.`ID`)
  303. join `CRM_PROCES` g on(g.`ID`=p.`IF_TRUE_GOTO`
  304. and g.`TYPE`='PROCES_INIT'
  305. and g.`A_STATUS` in('NORMAL','WAITING')
  306. and p.`IF_TRUE_GOTO_FLAG`='GOTO_AND_RETURN'
  307. and p.`IF_TRUE_GOTO`>0
  308. )
  309. where p.`A_STATUS` in('NORMAL','WAITING')
  310. and 0=(select IF(i.`idx_PROCES_WITH_GROUPS_ID` is null, 0, -1) from `CRM_PROCES_idx` i where i.`ID_PROCES`=g.`ID`)
  311. ;
  312. -- SET @groupCnt = ROW_COUNT();
  313. SQL;
  314. $sqlList['8-update-idx_PROCES_WITH_GROUPS_ID-zero-where-null'] = <<<SQL
  315. update `CRM_PROCES_idx`
  316. set `idx_PROCES_WITH_GROUPS_ID`=0
  317. where `idx_PROCES_WITH_GROUPS_ID` is null
  318. and `TYPE`='PROCES_INIT'
  319. ;
  320. SQL;
  321. $sqlList['9-fix-goto_and_return'] = <<<SQL
  322. insert ignore into `CRM_PROCES_idx` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
  323. select i.`ID_PROCES`, 'GOTO_AND_RETURN' as `TYPE`, i.`PARENT_ID`, i.`idx_PROCES_INIT_ID`, pi.`idx_PROCES_WITH_GROUPS_ID`
  324. from `CRM_PROCES_idx` i
  325. join `CRM_PROCES_idx` pi on(pi.`idx_PROCES_INIT_ID`=i.`idx_PROCES_INIT_ID`)
  326. where i.`idx_PROCES_WITH_GROUPS_ID` is null
  327. and pi.`idx_PROCES_WITH_GROUPS_ID` is not null
  328. and pi.`idx_PROCES_WITH_GROUPS_ID`>0
  329. and i.`TYPE`!='GOTO_AND_RETURN'
  330. ;
  331. SQL;
  332. $sqlList['10-delete-where-!idx_PROCES_WITH_GROUPS_ID'] = <<<SQL
  333. -- select 'delete idx_PROCES_WITH_GROUPS_ID...';
  334. delete from `CRM_PROCES_idx` where `idx_PROCES_WITH_GROUPS_ID` is null or `idx_PROCES_WITH_GROUPS_ID`=0;
  335. SQL;
  336. $sqlList['11-update-CRM_PROCES-idx_PROCES_INIT_ID'] = <<<SQL
  337. -- select 'update `CRM_PROCES`...';
  338. update `CRM_PROCES` p
  339. 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)
  340. ;
  341. SQL;
  342. $sqlList['11-clear-CRM_PROCES_idx_GROUP_to_PROCES'] = <<<SQL
  343. -- select 'update `CRM_PROCES_idx_GROUP_to_PROCES`...';
  344. truncate table `CRM_PROCES_idx_GROUP_to_PROCES`;
  345. SQL;
  346. $sqlList['11-fill-CRM_PROCES_idx_GROUP_to_PROCES'] = <<<SQL
  347. insert ignore into `CRM_PROCES_idx_GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
  348. select i.`ID_PROCES` as ID_PROCES, z.`ID` as ID_GROUP
  349. from `CRM_PROCES_idx` i
  350. join `CRM_WSKAZNIK` wsk on(wsk.`ID_PROCES`=i.`idx_PROCES_WITH_GROUPS_ID`
  351. and wsk.`A_STATUS` in('NORMAL', 'WAITING')
  352. )
  353. join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
  354. and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
  355. and z.`A_STATUS` in('NORMAL', 'WAITING')
  356. )
  357. join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
  358. and przyp.`FORM_TREAT` & 8 -- has perm X
  359. )
  360. -- where i.`TYPE` in('PROCES_INIT', 'GOTO_AND_RETURN')
  361. ;
  362. SQL;
  363. $sqlList['12-set-end-time-in-config'] = <<<SQL
  364. replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values ('tbl_indexer_CRM_PROCES_last_exec_end', NOW());
  365. SQL;
  366. $db = DB::getDB();
  367. if ($db->has_errors()) {
  368. throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
  369. }
  370. $DBG_TIME = true;//('1' == V::get('DBG_TIME', '', $_GET));
  371. $dbgExecTime = new DebugExecutionTime();
  372. if ($DBG_TIME) $dbgExecTime->activate();
  373. $dbgExecTime->log('start');
  374. foreach ($sqlList as $sqlName => $sql) {
  375. $res = $db->query($sql);
  376. if ($db->has_errors()) {
  377. throw new Exception("DB Errors at sql '{$sqlName}': " . implode("\n<br>", $db->get_errors()));
  378. }
  379. if($DBG_TIME) $dbgExecTime->log("execute sql {$sqlName}");
  380. }
  381. if($DBG_TIME) $dbgExecTime->printDebug();
  382. }
  383. public function reinstallAction() {
  384. $this->reinstall();
  385. die('OK');
  386. }
  387. public function reinstall() {
  388. $sqlList = array();
  389. $sqlList['RemoveTable'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx`";
  390. $sqlList['InstallTable'] = <<<SQL
  391. CREATE TABLE IF NOT EXISTS `CRM_PROCES_idx` (
  392. `ID_PROCES` int(11) NOT NULL
  393. , `PARENT_ID` int(11) NOT NULL DEFAULT '0'
  394. , `TYPE` varchar(32) NOT NULL DEFAULT ''
  395. , `idx_PROCES_INIT_ID` int(11) NOT NULL DEFAULT '0'
  396. , `idx_PROCES_WITH_GROUPS_ID` int(11) NULL DEFAULT NULL
  397. -- , `idx_PATH` text NOT NULL
  398. , KEY `ID_PROCES` (`ID_PROCES`)
  399. , KEY `PARENT_ID` (`PARENT_ID`)
  400. , KEY `idx_PROCES_INIT_ID` (`idx_PROCES_INIT_ID`)
  401. , KEY `idx_PROCES_WITH_GROUPS_ID` (`idx_PROCES_WITH_GROUPS_ID`)
  402. , UNIQUE KEY `uniq__idx_PROCES_WITH_GROUPS_ID` (`ID_PROCES`,`idx_PROCES_WITH_GROUPS_ID`)
  403. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  404. SQL;
  405. $sqlList['RemoveOldTableGroupToInit'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_GROUPS_to_INIT`";
  406. $sqlList['RemoveTableGroupToInit'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_GROUP_to_PROCES`";
  407. $sqlList['InstallTableGroupToInit'] = <<<SQL
  408. CREATE TABLE IF NOT EXISTS `CRM_PROCES_idx_GROUP_to_PROCES` (
  409. `ID_PROCES` int(11) NOT NULL
  410. , `ID_GROUP` int(11) NOT NULL
  411. , KEY `ID_PROCES` (`ID_PROCES`)
  412. , KEY `ID_GROUP` (`ID_GROUP`)
  413. , UNIQUE KEY `uniq__GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
  414. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  415. SQL;
  416. $sqlList['RemoveViewUserToProces'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_USER_to_PROCES_VIEW`";
  417. $sqlList['InstallViewUserToProces'] = <<<SQL
  418. CREATE VIEW `CRM_PROCES_idx_USER_to_PROCES_VIEW` AS
  419. select concat(u.`ID`, gi.`ID_PROCES`) as ID
  420. , gi.`ID_PROCES` as `ID_PROCES`
  421. , u.`ADM_ACCOUNT` as `ADM_ACCOUNT`
  422. , u.`EMPLOYEE_TYPE` as `EMPLOYEE_TYPE`
  423. , u.`A_STATUS` as `A_STATUS`
  424. from `ADMIN_USERS` u
  425. join `CRM_AUTH_PROFILE` au on(au.`REMOTE_ID`=u.`ID` and au.`REMOTE_TABLE`='ADMIN_USERS' and au.`A_STATUS` in('NORMAL','WAITING'))
  426. join `CRM_PROCES_idx_GROUP_to_PROCES` gi on(gi.`ID_GROUP`=au.`ID_ZASOB`)
  427. SQL;
  428. $sqlList['RemoveViewUserToInit'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_USER_to_INIT_VIEW`";
  429. $sqlList['InstallViewUserToInit'] = <<<SQL
  430. CREATE VIEW `CRM_PROCES_idx_USER_to_INIT_VIEW` AS
  431. select concat(u.`ID`, p.`ID`) as ID
  432. , p.`ID` as `ID_PROCES_INIT`
  433. , p.`DESC` as `DESC`
  434. , u.`ADM_ACCOUNT` as `ADM_ACCOUNT`
  435. , u.`EMPLOYEE_TYPE` as `EMPLOYEE_TYPE`
  436. , u.`A_STATUS` as `A_STATUS`
  437. from `ADMIN_USERS` u
  438. join `CRM_AUTH_PROFILE` au on(au.`REMOTE_ID`=u.`ID` and au.`REMOTE_TABLE`='ADMIN_USERS' and au.`A_STATUS` in('NORMAL','WAITING'))
  439. join `CRM_PROCES_idx_GROUP_to_PROCES` gi on(gi.`ID_GROUP`=au.`ID_ZASOB`)
  440. join `CRM_PROCES_idx` i on(i.`ID_PROCES`=gi.`ID_PROCES`)
  441. join `CRM_PROCES` p on(p.`ID`=i.`idx_PROCES_INIT_ID`)
  442. where p.`TYPE`='PROCES_INIT'
  443. -- group by u.`ID`, p.`ID`
  444. SQL;
  445. /* Usage - find proces init for user by $userLogin:
  446. SELECT *
  447. FROM `CRM_PROCES_idx_USER_to_INIT_VIEW`
  448. WHERE `ADM_ACCOUNT` LIKE '{$userLogin}'
  449. GROUP BY ID_PROCES_INIT
  450. */
  451. $sqlList['RemoveViewTableToProces'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW`";
  452. $sqlList['InstallViewTableToProces'] = <<<SQL
  453. CREATE VIEW `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW` AS
  454. select z.`ID` as `ID_CELL`
  455. , z.`DESC` as `CELL_NAME`
  456. , zp.`ID` as `ID_TABLE`
  457. , zp.`DESC` as `TABLE_NAME`
  458. , wsk.`ID_PROCES` as `ID_PROCES`
  459. -- , z.*, wsk.*
  460. from `CRM_LISTA_ZASOBOW` z
  461. join `CRM_LISTA_ZASOBOW` zp on(zp.`ID`=z.`PARENT_ID` and zp.`TYPE`='TABELA' and zp.`A_STATUS` in('WAITING','NORMAL'))
  462. join `CRM_WSKAZNIK` wsk on(wsk.`ID_ZASOB`=z.`ID`)
  463. where z.`TYPE`='KOMORKA'
  464. and z.`A_STATUS` in('WAITING','NORMAL')
  465. SQL;
  466. /* Usage - find tables for user by $userLogin:
  467. SELECT up.*, tp.*
  468. FROM `CRM_PROCES_idx_USER_to_PROCES_VIEW` up
  469. join `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW` tp on(tp.`ID_PROCES`=up.`ID_PROCES`)
  470. WHERE `ADM_ACCOUNT` LIKE '{$userLogin}'
  471. */
  472. $sqlList['RemoveProcedure'] = "DROP PROCEDURE if exists `update_proces_init_idx_rec`";
  473. // throws errors:
  474. // #1146 - Table '{DATABASE_NAME}.P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Already executed' doesn't exist
  475. $sqlList['CreateProcedure'] = <<<SQL
  476. CREATE PROCEDURE `update_proces_init_idx_rec`()
  477. BEGIN
  478. SET @enabled = FALSE;
  479. SET @conf_last_exec_lock_key = 'tbl_indexer_CRM_PROCES_last_exec_lock_date';
  480. SET @conf_last_exec_start_key = 'tbl_indexer_CRM_PROCES_last_exec_start';
  481. SET @conf_last_exec_end_key = 'tbl_indexer_CRM_PROCES_last_exec_end';
  482. -- if already runnig mysql will throw "Commands out of sync; you can't run this command now"
  483. IF (select count(1) from `CRM_CONFIG` where `conf_key`=@conf_last_exec_lock_key and `conf_val`!='')>0 THEN
  484. UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Already executed` SET x=1;
  485. ELSE BEGIN
  486. replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values (@conf_last_exec_lock_key, NOW()), (@conf_last_exec_start_key, NOW());
  487. -- select sleep(2); -- // DBG
  488. -- select 'truncate->delete...';
  489. truncate table `CRM_PROCES_idx`;
  490. -- delete from `CRM_PROCES_idx`;
  491. -- select 'insert into `CRM_PROCES_idx`...';
  492. insert into `CRM_PROCES_idx` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`)
  493. select p.`ID`, p.`TYPE`, p.`PARENT_ID`, IF(p.`TYPE`='PROCES_INIT', p.`ID`, 0) as idx_PROCES_INIT_ID
  494. from `CRM_PROCES` p
  495. where p.`A_STATUS` in('NORMAL','WAITING')
  496. ;
  497. -- select 'while 1...';
  498. update `CRM_PROCES_idx` as p set p.`idx_PROCES_INIT_ID`=IF(p.`TYPE`='PROCES_INIT', p.`ID_PROCES`, 0);
  499. SET @i = 0;
  500. SET @loopLomit = 100;
  501. SET @pinitCnt = 1;
  502. WHILE @i < @loopLomit and @pinitCnt > 0 DO
  503. update `CRM_PROCES_idx` as p join `CRM_PROCES_idx` as pp on(pp.`ID_PROCES`=p.`PARENT_ID`)
  504. set p.`idx_PROCES_INIT_ID`=pp.`idx_PROCES_INIT_ID`
  505. where p.`idx_PROCES_INIT_ID`=0 and pp.`idx_PROCES_INIT_ID`>0;
  506. SET @pinitCnt = ROW_COUNT();
  507. SET @i = @i + 1;
  508. END WHILE;
  509. -- select 'while 2... search stanowiska';
  510. update `CRM_PROCES_idx` i
  511. join `CRM_WSKAZNIK` as wsk on(wsk.`ID_PROCES`=i.`ID_PROCES`
  512. and wsk.`A_STATUS` in('NORMAL', 'WAITING')
  513. )
  514. join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
  515. and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
  516. and z.`A_STATUS` in('NORMAL', 'WAITING')
  517. )
  518. join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
  519. and przyp.`FORM_TREAT` & 8 -- has perm X
  520. )
  521. set
  522. i.`idx_PROCES_WITH_GROUPS_ID`=i.`ID_PROCES`
  523. where i.`idx_PROCES_INIT_ID`>0;
  524. SET @i = 0;
  525. SET @loopLomit = 100;
  526. SET @groupCnt = 1;
  527. WHILE @i < @loopLomit and @groupCnt > 0 DO
  528. update `CRM_PROCES_idx` as p join `CRM_PROCES_idx` as pp on(pp.`ID_PROCES`=p.`PARENT_ID`)
  529. set p.`idx_PROCES_WITH_GROUPS_ID`=pp.`idx_PROCES_WITH_GROUPS_ID`
  530. where p.`idx_PROCES_WITH_GROUPS_ID` is null
  531. and pp.`idx_PROCES_WITH_GROUPS_ID` is not null
  532. and pp.`idx_PROCES_WITH_GROUPS_ID`>0;
  533. SET @groupCnt = ROW_COUNT();
  534. SET @i = @i + 1;
  535. END WHILE;
  536. -- select 'GOTO_AND_RETURN...';
  537. insert ignore into `CRM_PROCES_idx` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
  538. select g.`ID`, 'GOTO_AND_RETURN' as `TYPE`, p.`ID` as PARENT_ID, g.`ID` as idx_PROCES_INIT_ID
  539. , pi.`idx_PROCES_WITH_GROUPS_ID`
  540. from `CRM_PROCES` p
  541. join `CRM_PROCES_idx` pi on(pi.`ID_PROCES`=p.`ID`)
  542. join `CRM_PROCES` g on(g.`ID`=p.`IF_TRUE_GOTO`
  543. and g.`TYPE`='PROCES_INIT'
  544. and g.`A_STATUS` in('NORMAL','WAITING')
  545. and p.`IF_TRUE_GOTO_FLAG`='GOTO_AND_RETURN'
  546. and p.`IF_TRUE_GOTO`>0
  547. )
  548. where p.`A_STATUS` in('NORMAL','WAITING')
  549. and 0=(select IF(i.`idx_PROCES_WITH_GROUPS_ID` is null, 0, -1) from `CRM_PROCES_idx` i where i.`ID_PROCES`=g.`ID`)
  550. ;
  551. update `CRM_PROCES_idx`
  552. set `idx_PROCES_WITH_GROUPS_ID`=0
  553. where `idx_PROCES_WITH_GROUPS_ID` is null
  554. and `TYPE`='PROCES_INIT'
  555. ;
  556. insert ignore into `CRM_PROCES_idx` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
  557. select i.`ID_PROCES`, 'GOTO_AND_RETURN' as `TYPE`, i.`PARENT_ID`, i.`idx_PROCES_INIT_ID`, pi.`idx_PROCES_WITH_GROUPS_ID`
  558. from `CRM_PROCES_idx` i
  559. join `CRM_PROCES_idx` pi on(pi.`idx_PROCES_INIT_ID`=i.`idx_PROCES_INIT_ID`)
  560. where i.`idx_PROCES_WITH_GROUPS_ID` is null
  561. and pi.`idx_PROCES_WITH_GROUPS_ID` is not null
  562. and pi.`idx_PROCES_WITH_GROUPS_ID`>0
  563. and i.`TYPE`!='GOTO_AND_RETURN'
  564. ;
  565. -- select 'delete idx_PROCES_WITH_GROUPS_ID...';
  566. delete from `CRM_PROCES_idx` where `idx_PROCES_WITH_GROUPS_ID` is null or `idx_PROCES_WITH_GROUPS_ID`=0;
  567. -- select 'update `CRM_PROCES`...';
  568. update `CRM_PROCES` p
  569. 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)
  570. ;
  571. -- select 'update `CRM_PROCES_idx_GROUP_to_PROCES`...';
  572. truncate table `CRM_PROCES_idx_GROUP_to_PROCES`;
  573. insert ignore into `CRM_PROCES_idx_GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
  574. select i.`ID_PROCES` as ID_PROCES, z.`ID` as ID_GROUP
  575. from `CRM_PROCES_idx` i
  576. join `CRM_WSKAZNIK` wsk on(wsk.`ID_PROCES`=i.`idx_PROCES_WITH_GROUPS_ID`
  577. and wsk.`A_STATUS` in('NORMAL', 'WAITING')
  578. )
  579. join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
  580. and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
  581. and z.`A_STATUS` in('NORMAL', 'WAITING')
  582. )
  583. join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
  584. and przyp.`FORM_TREAT` & 8 -- has perm X
  585. )
  586. -- where i.`TYPE` in('PROCES_INIT', 'GOTO_AND_RETURN')
  587. ;
  588. replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values (@conf_last_exec_lock_key, ''), (@conf_last_exec_end_key, NOW());
  589. -- clear msg 'Update perms' from Msgs system
  590. update `CRM_UI_MSGS`
  591. set `A_STATUS`='OFF_HARD'
  592. , `actionExecutedTime`=NOW()
  593. , `A_RECORD_UPDATE_DATE`=NOW()
  594. , `A_RECORD_UPDATE_AUTHOR`='update_proces_init_idx_rec'
  595. where `A_STATUS`='WAITING'
  596. and `app_className`='FixCrmProcesInitIdx'
  597. and `msg`='Update perms'
  598. and `uiTargetType`='default_db_table'
  599. and `uiTargetName`='CRM_PROCES';
  600. END ; END IF ;
  601. END ;
  602. SQL;
  603. $sqlList['RemoveTrigger_AfterInsertProces'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_PROCES_AFTER_INSERT`";
  604. $sqlList['CreateTrigger_AfterInsertProces'] = "
  605. CREATE DEFINER=`root`@`localhost` TRIGGER `FixCrmProcesInitIdx_CRM_PROCES_AFTER_INSERT` AFTER INSERT ON `CRM_PROCES`
  606. FOR EACH ROW BEGIN
  607. -- only when PARENT_ID changes and PARENT_ID exists in `CRM_PROCES_idx`
  608. 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
  609. -- throw warning to update perms
  610. IF (select count(1) from `CRM_UI_MSGS` where `app_className`='FixCrmProcesInitIdx'
  611. and `msg`='Update perms'
  612. and `uiTargetType`='default_db_table'
  613. and `uiTargetName`='CRM_PROCES'
  614. and `A_STATUS`='WAITING'
  615. ) = 0 THEN
  616. INSERT INTO `CRM_UI_MSGS` (`ID`
  617. , `app_className`, `msg`, `msgType`
  618. , `uiTargetType`, `uiTargetName`
  619. , `userTargetType`
  620. , `A_RECORD_CREATE_DATE`, `A_RECORD_CREATE_AUTHOR`)
  621. VALUES (NULL
  622. , 'FixCrmProcesInitIdx', 'Update perms', 'danger'
  623. , 'default_db_table', 'CRM_PROCES'
  624. , 'everyone'
  625. , NOW(), coalesce(NEW.A_RECORD_UPDATE_AUTHOR,'trigger:FixCrmProcesInitIdx_CRM_PROCES_AFTER_INSERT')
  626. );
  627. END IF;
  628. -- UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
  629. END IF;
  630. END
  631. ";
  632. $sqlList['RemoveTrigger_AfterUpdateProces'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_PROCES_AFTER_UPDATE`";
  633. $sqlList['CreateTrigger_AfterUpdateProces'] = "
  634. CREATE DEFINER=`root`@`localhost` TRIGGER `FixCrmProcesInitIdx_CRM_PROCES_AFTER_UPDATE` AFTER UPDATE ON `CRM_PROCES`
  635. FOR EACH ROW BEGIN
  636. -- only when PARENT_ID changes and ID exists in `CRM_PROCES_idx`
  637. 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
  638. -- throw warning to update perms
  639. IF (select count(1) from `CRM_UI_MSGS` where `app_className`='FixCrmProcesInitIdx'
  640. and `msg`='Update perms'
  641. and `uiTargetType`='default_db_table'
  642. and `uiTargetName`='CRM_PROCES'
  643. and `A_STATUS`='WAITING'
  644. ) = 0 THEN
  645. INSERT INTO `CRM_UI_MSGS` (`ID`
  646. , `app_className`, `msg`, `msgType`
  647. , `uiTargetType`, `uiTargetName`
  648. , `userTargetType`
  649. , `A_RECORD_CREATE_DATE`, `A_RECORD_CREATE_AUTHOR`)
  650. VALUES (NULL
  651. , 'FixCrmProcesInitIdx', 'Update perms', 'danger'
  652. , 'default_db_table', 'CRM_PROCES'
  653. , 'everyone'
  654. , NOW(), coalesce(NEW.A_RECORD_UPDATE_AUTHOR,'trigger:FixCrmProcesInitIdx_CRM_PROCES_AFTER_UPDATE')
  655. );
  656. END IF;
  657. -- UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
  658. END IF;
  659. END
  660. ";
  661. $sqlList['RemoveTrigger_AfterInsertWskaznik'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_INSERT`";
  662. $sqlList['CreateTrigger_AfterInsertWskaznik'] = "
  663. CREATE DEFINER=`root`@`localhost` TRIGGER `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_INSERT` AFTER INSERT ON `CRM_WSKAZNIK`
  664. FOR EACH ROW BEGIN
  665. -- only when ID_PROCES exists in `CRM_PROCES_idx`
  666. -- only when ID_ZASOB is group
  667. -- only when ID_PRZYPADEK has perm 'X'
  668. IF NEW.`ID_PROCES`>0
  669. AND NEW.`ID_ZASOB`>0
  670. AND NEW.`ID_PRZYPADEK`>0
  671. AND (select count(*) from `CRM_PROCES_idx` where `ID_PROCES`=NEW.`ID_PROCES` limit 1)>0
  672. AND (select count(*) from `CRM_LISTA_ZASOBOW` z where z.`ID`=NEW.`ID_ZASOB` and z.`TYPE` in('STANOWISKO','DZIAL','PODMIOT') limit 1)>0
  673. AND (select count(*) from `CRM_PRZYPADEK` przyp where przyp.`ID`=NEW.`ID_PRZYPADEK` and przyp.`FORM_TREAT` & 8 limit 1)>0
  674. THEN
  675. -- throw warning to update perms
  676. IF (select count(1) from `CRM_UI_MSGS` where `app_className`='FixCrmProcesInitIdx'
  677. and `msg`='Update perms'
  678. and `uiTargetType`='default_db_table'
  679. and `uiTargetName`='CRM_PROCES'
  680. and `A_STATUS`='WAITING'
  681. ) = 0 THEN
  682. INSERT INTO `CRM_UI_MSGS` (`ID`
  683. , `app_className`, `msg`, `msgType`
  684. , `uiTargetType`, `uiTargetName`
  685. , `userTargetType`
  686. , `A_RECORD_CREATE_DATE`, `A_RECORD_CREATE_AUTHOR`)
  687. VALUES (NULL
  688. , 'FixCrmProcesInitIdx', 'Update perms', 'danger'
  689. , 'default_db_table', 'CRM_PROCES'
  690. , 'everyone'
  691. , NOW(), coalesce(NEW.A_RECORD_UPDATE_AUTHOR,'trigger:FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_INSERT')
  692. );
  693. END IF;
  694. -- UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
  695. END IF;
  696. END
  697. ";
  698. $sqlList['RemoveTrigger_AfterUpdateWskaznik'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_UPDATE`";
  699. $sqlList['CreateTrigger_AfterUpdateWskaznik'] = "
  700. CREATE DEFINER=`root`@`localhost` TRIGGER `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_UPDATE` AFTER UPDATE ON `CRM_WSKAZNIK`
  701. FOR EACH ROW BEGIN
  702. -- only when old or new ID_PROCES exists in `CRM_PROCES_idx`
  703. -- only when old or new ID_ZASOB is group
  704. -- only when old or new ID_PRZYPADEK has perm 'X'
  705. IF (NEW.`ID_PROCES`!=OLD.`ID_PROCES`
  706. or NEW.`ID_ZASOB`!=OLD.`ID_ZASOB`
  707. or NEW.`ID_PRZYPADEK`!=OLD.`ID_PRZYPADEK`
  708. or (NEW.`A_STATUS`!=OLD.`A_STATUS`
  709. and ((NEW.`A_STATUS` in('WAITING','NORMAL') and OLD.`A_STATUS` not in('WAITING','NORMAL'))
  710. or (NEW.`A_STATUS` not in('WAITING','NORMAL') and OLD.`A_STATUS` in('WAITING','NORMAL'))
  711. )
  712. )
  713. )
  714. AND (NEW.`ID_PROCES`>0 or OLD.`ID_PROCES`>0)
  715. AND (NEW.`ID_ZASOB`>0 or OLD.`ID_ZASOB`>0)
  716. AND (NEW.`ID_PRZYPADEK`>0 or OLD.`ID_PRZYPADEK`>0)
  717. -- AND (select count(*) from `CRM_PROCES_idx` where `ID_PROCES` in(NEW.`ID_PROCES`,OLD.`ID_PROCES`) limit 1)>0
  718. 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
  719. 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
  720. THEN
  721. -- throw warning to update perms
  722. IF (select count(1) from `CRM_UI_MSGS` where `app_className`='FixCrmProcesInitIdx'
  723. and `msg`='Update perms'
  724. and `uiTargetType`='default_db_table'
  725. and `uiTargetName`='CRM_PROCES'
  726. and `A_STATUS`='WAITING'
  727. ) = 0 THEN
  728. INSERT INTO `CRM_UI_MSGS` (`ID`
  729. , `app_className`, `msg`, `msgType`
  730. , `uiTargetType`, `uiTargetName`
  731. , `userTargetType`
  732. , `A_RECORD_CREATE_DATE`, `A_RECORD_CREATE_AUTHOR`)
  733. VALUES (NULL
  734. , 'FixCrmProcesInitIdx', 'Update perms', 'danger'
  735. , 'default_db_table', 'CRM_PROCES'
  736. , 'everyone'
  737. , NOW(), coalesce(NEW.A_RECORD_UPDATE_AUTHOR,'trigger:FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_UPDATE')
  738. );
  739. END IF;
  740. -- UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
  741. END IF;
  742. END
  743. ";
  744. $db = DB::getDB();
  745. if ($db->has_errors()) {
  746. throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
  747. }
  748. foreach ($sqlList as $sqlName => $sql) {
  749. $res = $db->query($sql);
  750. if ($db->has_errors()) {
  751. throw new Exception("DB Errors at sql '{$sqlName}': " . implode("\n<br>", $db->get_errors()));
  752. }
  753. }
  754. }
  755. /*
  756. #1146 - Table '{DATABASE_NAME}.P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Already executed' doesn't exist
  757. */
  758. public function parseMessageFromStorage($msg) {
  759. switch ($msg) {
  760. case 'ERROR: Already executed': {
  761. $msg = "Aktualizacja uprawnień została już uruchomiona przez inną osobę";
  762. break;
  763. }
  764. case 'ERROR: Update perms': {
  765. $msg = "Wymagana aktualizacja uprawnień";
  766. break;
  767. }
  768. }
  769. return $msg;
  770. }
  771. public function parseMessageFromMsgsSystem($msg) {
  772. switch ($msg) {
  773. case 'Update perms': {
  774. $msg = "Wymagana aktualizacja uprawnień";
  775. break;
  776. }
  777. }
  778. return $msg;
  779. }
  780. public function runByMessageFromMsgsSystem($msg, &$execNotes) {
  781. switch ($msg) {
  782. case 'Update perms': {
  783. $execNotes .= 'Wymagana aktualizacja uprawnień';
  784. $this->_callProcedure();
  785. $execNotes .= ' done';
  786. break;
  787. }
  788. }
  789. }
  790. }