FixCrmProcesInitIdx.php 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801
  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 runAction() {
  37. SE_Layout::gora();
  38. SE_Layout::menu();
  39. $DBG_TIME = true;//('1' == V::get('DBG_TIME', '', $_GET));
  40. $dbgExecTime = new DebugExecutionTime();
  41. if ($DBG_TIME) $dbgExecTime->activate();
  42. $dbgExecTime->log('start');
  43. try {
  44. $this->_callProcedure();
  45. } catch (Exception $e) {
  46. ?>
  47. <div class="container">
  48. <div class="alert alert-warning">
  49. <?php echo $e->getMessage(); ?>
  50. </div>
  51. </div>
  52. <?php
  53. SE_Layout::dol();
  54. exit;
  55. }
  56. $dbgExecTime->log('procedure');
  57. $procExecTime = $dbgExecTime->getLastExecTime();
  58. //$totalExecTime = $dbgExecTime->getTotalExecTime();
  59. ?>
  60. <div class="container">
  61. <div class="alert alert-success">
  62. Zaktualizowano uprawnienia
  63. <br><span style="font-style:italic; opacity:0.4;">(<?php echo number_format($procExecTime, 6); ?> s)</span>
  64. </div>
  65. </div>
  66. <?php
  67. if($DBG_TIME){
  68. $dbgExecTime->log('end');
  69. //$dbgExecTime->printDebug();
  70. }
  71. SE_Layout::dol();
  72. }
  73. public function runApiAction() {
  74. $this->_callProcedure();
  75. die('Zaktualizowano uprawnienia');
  76. }
  77. private function _callProcedure() {
  78. $sql = "call `update_proces_init_idx_rec`();";
  79. $db = DB::getDB();
  80. if ($db->has_errors()) {
  81. throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
  82. }
  83. $res = $db->query($sql);
  84. if ($db->has_errors()) {
  85. $dbErrors = array();
  86. if ($db->has_errors()) {
  87. $dbErrorsSql = $db->get_errors();
  88. foreach ($dbErrorsSql as $vErr) {
  89. if ('SQL QUERY FAILED: ' == substr($vErr, 0, 18)) {
  90. $vErr = substr($vErr, 18);
  91. }
  92. //$dbErrors[] = StorageException::parseMessage($vErr);
  93. $dbErrors[] = $vErr;
  94. }
  95. }
  96. throw new StorageException($dbErrors);
  97. }
  98. }
  99. public function test1Action() {
  100. $sql = <<<SQL
  101. select count(*) as cnt, p.`ID`, group_concat(i.`idx_PROCES_INIT_ID`), group_concat(i.`idx_PROCES_WITH_GROUPS_ID`)
  102. from `CRM_PROCES` p
  103. left join `CRM_PROCES_idx` i on(i.`ID_PROCES`=p.`ID`)
  104. where i.`ID_PROCES`=p.`ID`
  105. group by p.`ID`
  106. order by cnt desc
  107. SQL;
  108. $db = DB::getDB();
  109. if ($db->has_errors()) {
  110. throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
  111. }
  112. $res = $db->query($sql);
  113. if ($db->has_errors()) {
  114. throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
  115. }
  116. while ($r = $db->fetch($res)) {
  117. echo'<pre>';print_r($r);echo'</pre>';
  118. }
  119. }
  120. public function test2Action() {
  121. $sqlList = array();
  122. $sqlList['RemoveTableGroupToInit'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_GROUPS_to_INIT`";
  123. $sqlList['RemoveTableGroupToInit'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_GROUP_to_PROCES`";
  124. $sqlList['InstallTableGroupToInit'] = <<<SQL
  125. CREATE TABLE IF NOT EXISTS `CRM_PROCES_idx_GROUP_to_PROCES` (
  126. `ID_PROCES` int(11) NOT NULL
  127. , `ID_GROUP` int(11) NOT NULL
  128. , KEY `ID_PROCES` (`ID_PROCES`)
  129. , KEY `ID_GROUP` (`ID_GROUP`)
  130. , UNIQUE KEY `uniq__GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
  131. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  132. SQL;
  133. $sqlList['UpdateTableGroupToInit'] = <<<SQL
  134. insert ignore into `CRM_PROCES_idx_GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
  135. select i.`ID_PROCES` as ID_PROCES, z.`ID` as ID_GROUP
  136. from `CRM_PROCES_idx` i
  137. join `CRM_WSKAZNIK` wsk on(wsk.`ID_PROCES`=i.`idx_PROCES_WITH_GROUPS_ID`
  138. and wsk.`A_STATUS` in('NORMAL', 'WAITING')
  139. )
  140. join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
  141. and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
  142. and z.`A_STATUS` in('NORMAL', 'WAITING')
  143. )
  144. join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
  145. and przyp.`FORM_TREAT` & 8 -- has perm X
  146. )
  147. -- where i.`TYPE` in('PROCES_INIT', 'GOTO_AND_RETURN')
  148. SQL;
  149. $db = DB::getDB();
  150. if ($db->has_errors()) {
  151. throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
  152. }
  153. $DBG_TIME = true;//('1' == V::get('DBG_TIME', '', $_GET));
  154. $dbgExecTime = new DebugExecutionTime();
  155. if ($DBG_TIME) $dbgExecTime->activate();
  156. $dbgExecTime->log('start');
  157. foreach ($sqlList as $sqlName => $sql) {
  158. $res = $db->query($sql);
  159. if ($db->has_errors()) {
  160. throw new Exception("DB Errors at sql '{$sqlName}': " . implode("\n<br>", $db->get_errors()));
  161. }
  162. if($DBG_TIME) $dbgExecTime->log("end-{$sqlName}");
  163. }
  164. if($DBG_TIME) $dbgExecTime->printDebug();
  165. }
  166. public function runDebugAction() {
  167. $sqlList = array();
  168. // SET @conf_last_exec_start_key = 'tbl_indexer_CRM_PROCES_last_exec_start';
  169. // SET @conf_last_exec_end_key = 'tbl_indexer_CRM_PROCES_last_exec_end';
  170. $sqlList['0-prepare-while-1-rm'] = "DROP PROCEDURE if exists `update_proces_init_idx_rec__while1`";
  171. $sqlList['0-prepare-while-1-create'] = <<<SQL
  172. CREATE PROCEDURE `update_proces_init_idx_rec__while1`()
  173. BEGIN
  174. update `CRM_PROCES_idx` as i set i.`idx_PROCES_INIT_ID`=IF(i.`TYPE`='PROCES_INIT', i.`ID_PROCES`, 0);
  175. SET @i = 0;
  176. SET @loopLomit = 100;
  177. SET @pinitCnt = 1;
  178. WHILE @i < @loopLomit and @pinitCnt > 0 DO
  179. update `CRM_PROCES_idx` as p join `CRM_PROCES_idx` as pp on(pp.`ID_PROCES`=p.`PARENT_ID`)
  180. set p.`idx_PROCES_INIT_ID`=pp.`idx_PROCES_INIT_ID`
  181. where p.`idx_PROCES_INIT_ID`=0 and pp.`idx_PROCES_INIT_ID`>0;
  182. SET @pinitCnt = ROW_COUNT();
  183. SET @i = @i + 1;
  184. END WHILE;
  185. END
  186. SQL;
  187. $sqlList['0-prepare-while-2-rm'] = "DROP PROCEDURE if exists `update_proces_init_idx_rec__while2`";
  188. $sqlList['0-prepare-while-2-create'] = <<<SQL
  189. CREATE PROCEDURE `update_proces_init_idx_rec__while2`()
  190. BEGIN
  191. SET @i = 0;
  192. SET @loopLomit = 100;
  193. SET @groupCnt = 1;
  194. WHILE @i < @loopLomit and @groupCnt > 0 DO
  195. update `CRM_PROCES_idx` as p join `CRM_PROCES_idx` as pp on(pp.`ID_PROCES`=p.`PARENT_ID`)
  196. set p.`idx_PROCES_WITH_GROUPS_ID`=pp.`idx_PROCES_WITH_GROUPS_ID`
  197. where p.`idx_PROCES_WITH_GROUPS_ID` is null
  198. and pp.`idx_PROCES_WITH_GROUPS_ID` is not null
  199. and pp.`idx_PROCES_WITH_GROUPS_ID`>0;
  200. SET @groupCnt = ROW_COUNT();
  201. SET @i = @i + 1;
  202. END WHILE;
  203. END
  204. SQL;
  205. $sqlList__TEST_PERF_NO_DIFF['0-prepare-while-2-create'] = <<<SQL
  206. CREATE PROCEDURE `update_proces_init_idx_rec__while2`()
  207. BEGIN
  208. SET @i = 0;
  209. SET @loopLomit = 100;
  210. SET @groupCnt = 1;
  211. WHILE @i < @loopLomit and @groupCnt > 0 DO
  212. update `CRM_PROCES_idx` as p
  213. join `CRM_PROCES_idx` as pp on(pp.`ID_PROCES`=p.`PARENT_ID`
  214. and pp.`idx_PROCES_WITH_GROUPS_ID` is not null
  215. and pp.`idx_PROCES_WITH_GROUPS_ID`>0
  216. )
  217. set p.`idx_PROCES_WITH_GROUPS_ID`=pp.`idx_PROCES_WITH_GROUPS_ID`
  218. where p.`idx_PROCES_WITH_GROUPS_ID` is null
  219. ;
  220. SET @groupCnt = ROW_COUNT();
  221. SET @i = @i + 1;
  222. END WHILE;
  223. END
  224. SQL;
  225. $sqlList['1-set-start-time-in-config'] = <<<SQL
  226. replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values ('tbl_indexer_CRM_PROCES_last_exec_start', NOW());
  227. SQL;
  228. $sqlList['2-truncate-table'] = <<<SQL
  229. truncate table `CRM_PROCES_idx`;
  230. -- delete from `CRM_PROCES_idx`;
  231. SQL;
  232. $sqlList['3-fill-CRM_PROCES_idx'] = <<<SQL
  233. -- select 'insert into `CRM_PROCES_idx`...';
  234. insert into `CRM_PROCES_idx` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`)
  235. select p.`ID`, p.`TYPE`, p.`PARENT_ID`, IF(p.`TYPE`='PROCES_INIT', p.`ID`, 0) as idx_PROCES_INIT_ID
  236. from `CRM_PROCES` p
  237. where p.`A_STATUS` in('NORMAL','WAITING')
  238. ;
  239. SQL;
  240. $sqlList['4-while-1'] = <<<SQL
  241. call `update_proces_init_idx_rec__while1`();
  242. SQL;
  243. $sqlList['5-before-while-2'] = <<<SQL
  244. update `CRM_PROCES_idx` i
  245. join `CRM_WSKAZNIK` as wsk on(wsk.`ID_PROCES`=i.`ID_PROCES`
  246. and wsk.`A_STATUS` in('NORMAL', 'WAITING')
  247. )
  248. join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
  249. and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
  250. and z.`A_STATUS` in('NORMAL', 'WAITING')
  251. )
  252. join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
  253. and przyp.`FORM_TREAT` & 8 -- has perm X
  254. )
  255. set
  256. i.`idx_PROCES_WITH_GROUPS_ID`=i.`ID_PROCES`
  257. where i.`idx_PROCES_INIT_ID`>0;
  258. SQL;
  259. $sqlList['6-while-2'] = <<<SQL
  260. call `update_proces_init_idx_rec__while2`();
  261. SQL;
  262. $sqlList['7-goto_and_return'] = <<<SQL
  263. insert ignore into `CRM_PROCES_idx` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
  264. select g.`ID`, 'GOTO_AND_RETURN' as `TYPE`, p.`ID` as PARENT_ID, g.`ID` as idx_PROCES_INIT_ID
  265. , pi.`idx_PROCES_WITH_GROUPS_ID`
  266. from `CRM_PROCES` p
  267. join `CRM_PROCES_idx` pi on(pi.`ID_PROCES`=p.`ID`)
  268. join `CRM_PROCES` g on(g.`ID`=p.`IF_TRUE_GOTO`
  269. and g.`TYPE`='PROCES_INIT'
  270. and g.`A_STATUS` in('NORMAL','WAITING')
  271. and p.`IF_TRUE_GOTO_FLAG`='GOTO_AND_RETURN'
  272. and p.`IF_TRUE_GOTO`>0
  273. )
  274. where p.`A_STATUS` in('NORMAL','WAITING')
  275. 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`)
  276. ;
  277. -- SET @groupCnt = ROW_COUNT();
  278. SQL;
  279. $sqlList['8-update-idx_PROCES_WITH_GROUPS_ID-zero-where-null'] = <<<SQL
  280. update `CRM_PROCES_idx`
  281. set `idx_PROCES_WITH_GROUPS_ID`=0
  282. where `idx_PROCES_WITH_GROUPS_ID` is null
  283. and `TYPE`='PROCES_INIT'
  284. ;
  285. SQL;
  286. $sqlList['9-fix-goto_and_return'] = <<<SQL
  287. insert ignore into `CRM_PROCES_idx` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
  288. select i.`ID_PROCES`, 'GOTO_AND_RETURN' as `TYPE`, i.`PARENT_ID`, i.`idx_PROCES_INIT_ID`, pi.`idx_PROCES_WITH_GROUPS_ID`
  289. from `CRM_PROCES_idx` i
  290. join `CRM_PROCES_idx` pi on(pi.`idx_PROCES_INIT_ID`=i.`idx_PROCES_INIT_ID`)
  291. where i.`idx_PROCES_WITH_GROUPS_ID` is null
  292. and pi.`idx_PROCES_WITH_GROUPS_ID` is not null
  293. and pi.`idx_PROCES_WITH_GROUPS_ID`>0
  294. and i.`TYPE`!='GOTO_AND_RETURN'
  295. ;
  296. SQL;
  297. $sqlList['10-delete-where-!idx_PROCES_WITH_GROUPS_ID'] = <<<SQL
  298. -- select 'delete idx_PROCES_WITH_GROUPS_ID...';
  299. delete from `CRM_PROCES_idx` where `idx_PROCES_WITH_GROUPS_ID` is null or `idx_PROCES_WITH_GROUPS_ID`=0;
  300. SQL;
  301. $sqlList['11-update-CRM_PROCES-idx_PROCES_INIT_ID'] = <<<SQL
  302. -- select 'update `CRM_PROCES`...';
  303. update `CRM_PROCES` p
  304. 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)
  305. ;
  306. SQL;
  307. $sqlList['11-clear-CRM_PROCES_idx_GROUP_to_PROCES'] = <<<SQL
  308. -- select 'update `CRM_PROCES_idx_GROUP_to_PROCES`...';
  309. truncate table `CRM_PROCES_idx_GROUP_to_PROCES`;
  310. SQL;
  311. $sqlList['11-fill-CRM_PROCES_idx_GROUP_to_PROCES'] = <<<SQL
  312. insert ignore into `CRM_PROCES_idx_GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
  313. select i.`ID_PROCES` as ID_PROCES, z.`ID` as ID_GROUP
  314. from `CRM_PROCES_idx` i
  315. join `CRM_WSKAZNIK` wsk on(wsk.`ID_PROCES`=i.`idx_PROCES_WITH_GROUPS_ID`
  316. and wsk.`A_STATUS` in('NORMAL', 'WAITING')
  317. )
  318. join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
  319. and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
  320. and z.`A_STATUS` in('NORMAL', 'WAITING')
  321. )
  322. join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
  323. and przyp.`FORM_TREAT` & 8 -- has perm X
  324. )
  325. -- where i.`TYPE` in('PROCES_INIT', 'GOTO_AND_RETURN')
  326. ;
  327. SQL;
  328. $sqlList['12-set-end-time-in-config'] = <<<SQL
  329. replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values ('tbl_indexer_CRM_PROCES_last_exec_end', NOW());
  330. SQL;
  331. $db = DB::getDB();
  332. if ($db->has_errors()) {
  333. throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
  334. }
  335. $DBG_TIME = true;//('1' == V::get('DBG_TIME', '', $_GET));
  336. $dbgExecTime = new DebugExecutionTime();
  337. if ($DBG_TIME) $dbgExecTime->activate();
  338. $dbgExecTime->log('start');
  339. foreach ($sqlList as $sqlName => $sql) {
  340. $res = $db->query($sql);
  341. if ($db->has_errors()) {
  342. throw new Exception("DB Errors at sql '{$sqlName}': " . implode("\n<br>", $db->get_errors()));
  343. }
  344. if($DBG_TIME) $dbgExecTime->log("execute sql {$sqlName}");
  345. }
  346. if($DBG_TIME) $dbgExecTime->printDebug();
  347. }
  348. public function reinstallAction() {
  349. $this->reinstall();
  350. die('OK');
  351. }
  352. public function reinstall() {
  353. $sqlList = array();
  354. $sqlList['RemoveTable'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx`";
  355. $sqlList['InstallTable'] = <<<SQL
  356. CREATE TABLE IF NOT EXISTS `CRM_PROCES_idx` (
  357. `ID_PROCES` int(11) NOT NULL
  358. , `PARENT_ID` int(11) NOT NULL DEFAULT '0'
  359. , `TYPE` varchar(32) NOT NULL DEFAULT ''
  360. , `idx_PROCES_INIT_ID` int(11) NOT NULL DEFAULT '0'
  361. , `idx_PROCES_WITH_GROUPS_ID` int(11) NULL DEFAULT NULL
  362. -- , `idx_PATH` text NOT NULL
  363. , KEY `ID_PROCES` (`ID_PROCES`)
  364. , KEY `PARENT_ID` (`PARENT_ID`)
  365. , KEY `idx_PROCES_INIT_ID` (`idx_PROCES_INIT_ID`)
  366. , KEY `idx_PROCES_WITH_GROUPS_ID` (`idx_PROCES_WITH_GROUPS_ID`)
  367. , UNIQUE KEY `uniq__idx_PROCES_WITH_GROUPS_ID` (`ID_PROCES`,`idx_PROCES_WITH_GROUPS_ID`)
  368. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  369. SQL;
  370. $sqlList['RemoveOldTableGroupToInit'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_GROUPS_to_INIT`";
  371. $sqlList['RemoveTableGroupToInit'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_GROUP_to_PROCES`";
  372. $sqlList['InstallTableGroupToInit'] = <<<SQL
  373. CREATE TABLE IF NOT EXISTS `CRM_PROCES_idx_GROUP_to_PROCES` (
  374. `ID_PROCES` int(11) NOT NULL
  375. , `ID_GROUP` int(11) NOT NULL
  376. , KEY `ID_PROCES` (`ID_PROCES`)
  377. , KEY `ID_GROUP` (`ID_GROUP`)
  378. , UNIQUE KEY `uniq__GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
  379. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  380. SQL;
  381. $sqlList['RemoveViewUserToProces'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_USER_to_PROCES_VIEW`";
  382. $sqlList['InstallViewUserToProces'] = <<<SQL
  383. CREATE VIEW `CRM_PROCES_idx_USER_to_PROCES_VIEW` AS
  384. select concat(u.`ID`, gi.`ID_PROCES`) as ID
  385. , gi.`ID_PROCES` as `ID_PROCES`
  386. , u.`ADM_ACCOUNT` as `ADM_ACCOUNT`
  387. , u.`EMPLOYEE_TYPE` as `EMPLOYEE_TYPE`
  388. , u.`A_STATUS` as `A_STATUS`
  389. from `ADMIN_USERS` u
  390. join `CRM_AUTH_PROFILE` au on(au.`REMOTE_ID`=u.`ID` and au.`REMOTE_TABLE`='ADMIN_USERS' and au.`A_STATUS` in('NORMAL','WAITING'))
  391. join `CRM_PROCES_idx_GROUP_to_PROCES` gi on(gi.`ID_GROUP`=au.`ID_ZASOB`)
  392. SQL;
  393. $sqlList['RemoveViewUserToInit'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_USER_to_INIT_VIEW`";
  394. $sqlList['InstallViewUserToInit'] = <<<SQL
  395. CREATE VIEW `CRM_PROCES_idx_USER_to_INIT_VIEW` AS
  396. select concat(u.`ID`, p.`ID`) as ID
  397. , p.`ID` as `ID_PROCES_INIT`
  398. , p.`DESC` as `DESC`
  399. , u.`ADM_ACCOUNT` as `ADM_ACCOUNT`
  400. , u.`EMPLOYEE_TYPE` as `EMPLOYEE_TYPE`
  401. , u.`A_STATUS` as `A_STATUS`
  402. from `ADMIN_USERS` u
  403. join `CRM_AUTH_PROFILE` au on(au.`REMOTE_ID`=u.`ID` and au.`REMOTE_TABLE`='ADMIN_USERS' and au.`A_STATUS` in('NORMAL','WAITING'))
  404. join `CRM_PROCES_idx_GROUP_to_PROCES` gi on(gi.`ID_GROUP`=au.`ID_ZASOB`)
  405. join `CRM_PROCES_idx` i on(i.`ID_PROCES`=gi.`ID_PROCES`)
  406. join `CRM_PROCES` p on(p.`ID`=i.`idx_PROCES_INIT_ID`)
  407. where p.`TYPE`='PROCES_INIT'
  408. -- group by u.`ID`, p.`ID`
  409. SQL;
  410. /* Usage - find proces init for user by $userLogin:
  411. SELECT *
  412. FROM `CRM_PROCES_idx_USER_to_INIT_VIEW`
  413. WHERE `ADM_ACCOUNT` LIKE '{$userLogin}'
  414. GROUP BY ID_PROCES_INIT
  415. */
  416. $sqlList['RemoveViewTableToProces'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW`";
  417. $sqlList['InstallViewTableToProces'] = <<<SQL
  418. CREATE VIEW `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW` AS
  419. select z.`ID` as `ID_CELL`
  420. , z.`DESC` as `CELL_NAME`
  421. , zp.`ID` as `ID_TABLE`
  422. , zp.`DESC` as `TABLE_NAME`
  423. , wsk.`ID_PROCES` as `ID_PROCES`
  424. -- , z.*, wsk.*
  425. from `CRM_LISTA_ZASOBOW` z
  426. join `CRM_LISTA_ZASOBOW` zp on(zp.`ID`=z.`PARENT_ID` and zp.`TYPE`='TABELA' and zp.`A_STATUS` in('WAITING','NORMAL'))
  427. join `CRM_WSKAZNIK` wsk on(wsk.`ID_ZASOB`=z.`ID`)
  428. where z.`TYPE`='KOMORKA'
  429. and z.`A_STATUS` in('WAITING','NORMAL')
  430. SQL;
  431. /* Usage - find tables for user by $userLogin:
  432. SELECT up.*, tp.*
  433. FROM `CRM_PROCES_idx_USER_to_PROCES_VIEW` up
  434. join `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW` tp on(tp.`ID_PROCES`=up.`ID_PROCES`)
  435. WHERE `ADM_ACCOUNT` LIKE '{$userLogin}'
  436. */
  437. $sqlList['RemoveProcedure'] = "DROP PROCEDURE if exists `update_proces_init_idx_rec`";
  438. // throws errors:
  439. // #1146 - Table '{DATABASE_NAME}.P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Already executed' doesn't exist
  440. $sqlList['CreateProcedure'] = <<<SQL
  441. CREATE PROCEDURE `update_proces_init_idx_rec`()
  442. BEGIN
  443. SET @enabled = FALSE;
  444. SET @conf_last_exec_lock_key = 'tbl_indexer_CRM_PROCES_last_exec_lock_date';
  445. SET @conf_last_exec_start_key = 'tbl_indexer_CRM_PROCES_last_exec_start';
  446. SET @conf_last_exec_end_key = 'tbl_indexer_CRM_PROCES_last_exec_end';
  447. -- if already runnig mysql will throw "Commands out of sync; you can't run this command now"
  448. IF (select count(1) from `CRM_CONFIG` where `conf_key`=@conf_last_exec_lock_key and `conf_val`!='')>0 THEN
  449. UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Already executed` SET x=1;
  450. ELSE BEGIN
  451. replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values (@conf_last_exec_lock_key, NOW()), (@conf_last_exec_start_key, NOW());
  452. -- select sleep(2); -- // DBG
  453. -- select 'truncate->delete...';
  454. truncate table `CRM_PROCES_idx`;
  455. -- delete from `CRM_PROCES_idx`;
  456. -- select 'insert into `CRM_PROCES_idx`...';
  457. insert into `CRM_PROCES_idx` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`)
  458. select p.`ID`, p.`TYPE`, p.`PARENT_ID`, IF(p.`TYPE`='PROCES_INIT', p.`ID`, 0) as idx_PROCES_INIT_ID
  459. from `CRM_PROCES` p
  460. where p.`A_STATUS` in('NORMAL','WAITING')
  461. ;
  462. -- select 'while 1...';
  463. update `CRM_PROCES_idx` as p set p.`idx_PROCES_INIT_ID`=IF(p.`TYPE`='PROCES_INIT', p.`ID_PROCES`, 0);
  464. SET @i = 0;
  465. SET @loopLomit = 100;
  466. SET @pinitCnt = 1;
  467. WHILE @i < @loopLomit and @pinitCnt > 0 DO
  468. update `CRM_PROCES_idx` as p join `CRM_PROCES_idx` as pp on(pp.`ID_PROCES`=p.`PARENT_ID`)
  469. set p.`idx_PROCES_INIT_ID`=pp.`idx_PROCES_INIT_ID`
  470. where p.`idx_PROCES_INIT_ID`=0 and pp.`idx_PROCES_INIT_ID`>0;
  471. SET @pinitCnt = ROW_COUNT();
  472. SET @i = @i + 1;
  473. END WHILE;
  474. -- select 'while 2... search stanowiska';
  475. update `CRM_PROCES_idx` i
  476. join `CRM_WSKAZNIK` as wsk on(wsk.`ID_PROCES`=i.`ID_PROCES`
  477. and wsk.`A_STATUS` in('NORMAL', 'WAITING')
  478. )
  479. join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
  480. and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
  481. and z.`A_STATUS` in('NORMAL', 'WAITING')
  482. )
  483. join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
  484. and przyp.`FORM_TREAT` & 8 -- has perm X
  485. )
  486. set
  487. i.`idx_PROCES_WITH_GROUPS_ID`=i.`ID_PROCES`
  488. where i.`idx_PROCES_INIT_ID`>0;
  489. SET @i = 0;
  490. SET @loopLomit = 100;
  491. SET @groupCnt = 1;
  492. WHILE @i < @loopLomit and @groupCnt > 0 DO
  493. update `CRM_PROCES_idx` as p join `CRM_PROCES_idx` as pp on(pp.`ID_PROCES`=p.`PARENT_ID`)
  494. set p.`idx_PROCES_WITH_GROUPS_ID`=pp.`idx_PROCES_WITH_GROUPS_ID`
  495. where p.`idx_PROCES_WITH_GROUPS_ID` is null
  496. and pp.`idx_PROCES_WITH_GROUPS_ID` is not null
  497. and pp.`idx_PROCES_WITH_GROUPS_ID`>0;
  498. SET @groupCnt = ROW_COUNT();
  499. SET @i = @i + 1;
  500. END WHILE;
  501. -- select 'GOTO_AND_RETURN...';
  502. insert ignore into `CRM_PROCES_idx` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
  503. select g.`ID`, 'GOTO_AND_RETURN' as `TYPE`, p.`ID` as PARENT_ID, g.`ID` as idx_PROCES_INIT_ID
  504. , pi.`idx_PROCES_WITH_GROUPS_ID`
  505. from `CRM_PROCES` p
  506. join `CRM_PROCES_idx` pi on(pi.`ID_PROCES`=p.`ID`)
  507. join `CRM_PROCES` g on(g.`ID`=p.`IF_TRUE_GOTO`
  508. and g.`TYPE`='PROCES_INIT'
  509. and g.`A_STATUS` in('NORMAL','WAITING')
  510. and p.`IF_TRUE_GOTO_FLAG`='GOTO_AND_RETURN'
  511. and p.`IF_TRUE_GOTO`>0
  512. )
  513. where p.`A_STATUS` in('NORMAL','WAITING')
  514. 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`)
  515. ;
  516. update `CRM_PROCES_idx`
  517. set `idx_PROCES_WITH_GROUPS_ID`=0
  518. where `idx_PROCES_WITH_GROUPS_ID` is null
  519. and `TYPE`='PROCES_INIT'
  520. ;
  521. insert ignore into `CRM_PROCES_idx` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
  522. select i.`ID_PROCES`, 'GOTO_AND_RETURN' as `TYPE`, i.`PARENT_ID`, i.`idx_PROCES_INIT_ID`, pi.`idx_PROCES_WITH_GROUPS_ID`
  523. from `CRM_PROCES_idx` i
  524. join `CRM_PROCES_idx` pi on(pi.`idx_PROCES_INIT_ID`=i.`idx_PROCES_INIT_ID`)
  525. where i.`idx_PROCES_WITH_GROUPS_ID` is null
  526. and pi.`idx_PROCES_WITH_GROUPS_ID` is not null
  527. and pi.`idx_PROCES_WITH_GROUPS_ID`>0
  528. and i.`TYPE`!='GOTO_AND_RETURN'
  529. ;
  530. -- select 'delete idx_PROCES_WITH_GROUPS_ID...';
  531. delete from `CRM_PROCES_idx` where `idx_PROCES_WITH_GROUPS_ID` is null or `idx_PROCES_WITH_GROUPS_ID`=0;
  532. -- select 'update `CRM_PROCES`...';
  533. update `CRM_PROCES` p
  534. 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)
  535. ;
  536. -- select 'update `CRM_PROCES_idx_GROUP_to_PROCES`...';
  537. truncate table `CRM_PROCES_idx_GROUP_to_PROCES`;
  538. insert ignore into `CRM_PROCES_idx_GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
  539. select i.`ID_PROCES` as ID_PROCES, z.`ID` as ID_GROUP
  540. from `CRM_PROCES_idx` i
  541. join `CRM_WSKAZNIK` wsk on(wsk.`ID_PROCES`=i.`idx_PROCES_WITH_GROUPS_ID`
  542. and wsk.`A_STATUS` in('NORMAL', 'WAITING')
  543. )
  544. join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
  545. and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
  546. and z.`A_STATUS` in('NORMAL', 'WAITING')
  547. )
  548. join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
  549. and przyp.`FORM_TREAT` & 8 -- has perm X
  550. )
  551. -- where i.`TYPE` in('PROCES_INIT', 'GOTO_AND_RETURN')
  552. ;
  553. replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values (@conf_last_exec_lock_key, ''), (@conf_last_exec_end_key, NOW());
  554. -- clear msg 'Update perms' from Msgs system
  555. update `CRM_UI_MSGS`
  556. set `A_STATUS`='OFF_HARD'
  557. , `actionExecutedTime`=NOW()
  558. , `A_RECORD_UPDATE_DATE`=NOW()
  559. , `A_RECORD_UPDATE_AUTHOR`='update_proces_init_idx_rec'
  560. where `A_STATUS`='WAITING'
  561. and `app_className`='FixCrmProcesInitIdx'
  562. and `msg`='Update perms'
  563. and `uiTargetType`='default_db_table'
  564. and `uiTargetName`='CRM_PROCES';
  565. END ; END IF ;
  566. END ;
  567. SQL;
  568. $sqlList['RemoveTrigger_AfterInsertProces'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_PROCES_AFTER_INSERT`";
  569. $sqlList['CreateTrigger_AfterInsertProces'] = "
  570. CREATE TRIGGER `FixCrmProcesInitIdx_CRM_PROCES_AFTER_INSERT` AFTER INSERT ON `CRM_PROCES`
  571. FOR EACH ROW BEGIN
  572. -- only when PARENT_ID changes and PARENT_ID exists in `CRM_PROCES_idx`
  573. 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
  574. -- throw warning to update perms
  575. IF (select count(1) from `CRM_UI_MSGS` where `app_className`='FixCrmProcesInitIdx'
  576. and `msg`='Update perms'
  577. and `uiTargetType`='default_db_table'
  578. and `uiTargetName`='CRM_PROCES'
  579. and `A_STATUS`='WAITING'
  580. ) = 0 THEN
  581. INSERT INTO `CRM_UI_MSGS` (`ID`
  582. , `app_className`, `msg`, `msgType`
  583. , `uiTargetType`, `uiTargetName`
  584. , `userTargetType`
  585. , `A_RECORD_CREATE_DATE`, `A_RECORD_CREATE_AUTHOR`)
  586. VALUES (NULL
  587. , 'FixCrmProcesInitIdx', 'Update perms', 'danger'
  588. , 'default_db_table', 'CRM_PROCES'
  589. , 'everyone'
  590. , NOW(), coalesce(NEW.A_RECORD_UPDATE_AUTHOR,'trigger:FixCrmProcesInitIdx_CRM_PROCES_AFTER_INSERT')
  591. );
  592. END IF;
  593. UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
  594. END IF;
  595. END
  596. ";
  597. $sqlList['RemoveTrigger_AfterUpdateProces'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_PROCES_AFTER_UPDATE`";
  598. $sqlList['CreateTrigger_AfterUpdateProces'] = "
  599. CREATE TRIGGER `FixCrmProcesInitIdx_CRM_PROCES_AFTER_UPDATE` AFTER UPDATE ON `CRM_PROCES`
  600. FOR EACH ROW BEGIN
  601. -- only when PARENT_ID changes and ID exists in `CRM_PROCES_idx`
  602. 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
  603. -- throw warning to update perms
  604. IF (select count(1) from `CRM_UI_MSGS` where `app_className`='FixCrmProcesInitIdx'
  605. and `msg`='Update perms'
  606. and `uiTargetType`='default_db_table'
  607. and `uiTargetName`='CRM_PROCES'
  608. and `A_STATUS`='WAITING'
  609. ) = 0 THEN
  610. INSERT INTO `CRM_UI_MSGS` (`ID`
  611. , `app_className`, `msg`, `msgType`
  612. , `uiTargetType`, `uiTargetName`
  613. , `userTargetType`
  614. , `A_RECORD_CREATE_DATE`, `A_RECORD_CREATE_AUTHOR`)
  615. VALUES (NULL
  616. , 'FixCrmProcesInitIdx', 'Update perms', 'danger'
  617. , 'default_db_table', 'CRM_PROCES'
  618. , 'everyone'
  619. , NOW(), coalesce(NEW.A_RECORD_UPDATE_AUTHOR,'trigger:FixCrmProcesInitIdx_CRM_PROCES_AFTER_UPDATE')
  620. );
  621. END IF;
  622. UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
  623. END IF;
  624. END
  625. ";
  626. $sqlList['RemoveTrigger_AfterInsertWskaznik'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_INSERT`";
  627. $sqlList['CreateTrigger_AfterInsertWskaznik'] = "
  628. CREATE TRIGGER `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_INSERT` AFTER INSERT ON `CRM_WSKAZNIK`
  629. FOR EACH ROW BEGIN
  630. -- only when ID_PROCES exists in `CRM_PROCES_idx`
  631. -- only when ID_ZASOB is group
  632. -- only when ID_PRZYPADEK has perm 'X'
  633. IF NEW.`ID_PROCES`>0
  634. AND NEW.`ID_ZASOB`>0
  635. AND NEW.`ID_PRZYPADEK`>0
  636. AND (select count(*) from `CRM_PROCES_idx` where `ID_PROCES`=NEW.`ID_PROCES` limit 1)>0
  637. AND (select count(*) from `CRM_LISTA_ZASOBOW` z where z.`ID`=NEW.`ID_ZASOB` and z.`TYPE` in('STANOWISKO','DZIAL','PODMIOT') limit 1)>0
  638. AND (select count(*) from `CRM_PRZYPADEK` przyp where przyp.`ID`=NEW.`ID_PRZYPADEK` and przyp.`FORM_TREAT` & 8 limit 1)>0
  639. THEN
  640. -- throw warning to update perms
  641. IF (select count(1) from `CRM_UI_MSGS` where `app_className`='FixCrmProcesInitIdx'
  642. and `msg`='Update perms'
  643. and `uiTargetType`='default_db_table'
  644. and `uiTargetName`='CRM_PROCES'
  645. and `A_STATUS`='WAITING'
  646. ) = 0 THEN
  647. INSERT INTO `CRM_UI_MSGS` (`ID`
  648. , `app_className`, `msg`, `msgType`
  649. , `uiTargetType`, `uiTargetName`
  650. , `userTargetType`
  651. , `A_RECORD_CREATE_DATE`, `A_RECORD_CREATE_AUTHOR`)
  652. VALUES (NULL
  653. , 'FixCrmProcesInitIdx', 'Update perms', 'danger'
  654. , 'default_db_table', 'CRM_PROCES'
  655. , 'everyone'
  656. , NOW(), coalesce(NEW.A_RECORD_UPDATE_AUTHOR,'trigger:FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_INSERT')
  657. );
  658. END IF;
  659. UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
  660. END IF;
  661. END
  662. ";
  663. $sqlList['RemoveTrigger_AfterUpdateWskaznik'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_UPDATE`";
  664. $sqlList['CreateTrigger_AfterUpdateWskaznik'] = "
  665. CREATE TRIGGER `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_UPDATE` AFTER UPDATE ON `CRM_WSKAZNIK`
  666. FOR EACH ROW BEGIN
  667. -- only when old or new ID_PROCES exists in `CRM_PROCES_idx`
  668. -- only when old or new ID_ZASOB is group
  669. -- only when old or new ID_PRZYPADEK has perm 'X'
  670. IF (NEW.`ID_PROCES`!=OLD.`ID_PROCES`
  671. or NEW.`ID_ZASOB`!=OLD.`ID_ZASOB`
  672. or NEW.`ID_PRZYPADEK`!=OLD.`ID_PRZYPADEK`
  673. or (NEW.`A_STATUS`!=OLD.`A_STATUS`
  674. and ((NEW.`A_STATUS` in('WAITING','NORMAL') and OLD.`A_STATUS` not in('WAITING','NORMAL'))
  675. or (NEW.`A_STATUS` not in('WAITING','NORMAL') and OLD.`A_STATUS` in('WAITING','NORMAL'))
  676. )
  677. )
  678. )
  679. AND (NEW.`ID_PROCES`>0 or OLD.`ID_PROCES`>0)
  680. AND (NEW.`ID_ZASOB`>0 or OLD.`ID_ZASOB`>0)
  681. AND (NEW.`ID_PRZYPADEK`>0 or OLD.`ID_PRZYPADEK`>0)
  682. -- AND (select count(*) from `CRM_PROCES_idx` where `ID_PROCES` in(NEW.`ID_PROCES`,OLD.`ID_PROCES`) limit 1)>0
  683. 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
  684. 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
  685. THEN
  686. -- throw warning to update perms
  687. IF (select count(1) from `CRM_UI_MSGS` where `app_className`='FixCrmProcesInitIdx'
  688. and `msg`='Update perms'
  689. and `uiTargetType`='default_db_table'
  690. and `uiTargetName`='CRM_PROCES'
  691. and `A_STATUS`='WAITING'
  692. ) = 0 THEN
  693. INSERT INTO `CRM_UI_MSGS` (`ID`
  694. , `app_className`, `msg`, `msgType`
  695. , `uiTargetType`, `uiTargetName`
  696. , `userTargetType`
  697. , `A_RECORD_CREATE_DATE`, `A_RECORD_CREATE_AUTHOR`)
  698. VALUES (NULL
  699. , 'FixCrmProcesInitIdx', 'Update perms', 'danger'
  700. , 'default_db_table', 'CRM_PROCES'
  701. , 'everyone'
  702. , NOW(), coalesce(NEW.A_RECORD_UPDATE_AUTHOR,'trigger:FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_UPDATE')
  703. );
  704. END IF;
  705. UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
  706. END IF;
  707. END
  708. ";
  709. $db = DB::getDB();
  710. if ($db->has_errors()) {
  711. throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
  712. }
  713. foreach ($sqlList as $sqlName => $sql) {
  714. $res = $db->query($sql);
  715. if ($db->has_errors()) {
  716. throw new Exception("DB Errors at sql '{$sqlName}': " . implode("\n<br>", $db->get_errors()));
  717. }
  718. }
  719. }
  720. /*
  721. #1146 - Table '{DATABASE_NAME}.P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Already executed' doesn't exist
  722. */
  723. public function parseMessageFromStorage($msg) {
  724. switch ($msg) {
  725. case 'ERROR: Already executed': {
  726. $msg = "Aktualizacja uprawnień została już uruchomiona przez inną osobę";
  727. break;
  728. }
  729. case 'ERROR: Update perms': {
  730. $msg = "Wymagana aktualizacja uprawnień";
  731. break;
  732. }
  733. }
  734. return $msg;
  735. }
  736. public function parseMessageFromMsgsSystem($msg) {
  737. switch ($msg) {
  738. case 'Update perms': {
  739. $msg = "Wymagana aktualizacja uprawnień";
  740. break;
  741. }
  742. }
  743. return $msg;
  744. }
  745. public function runByMessageFromMsgsSystem($msg, &$execNotes) {
  746. switch ($msg) {
  747. case 'Update perms': {
  748. $execNotes .= 'Wymagana aktualizacja uprawnień';
  749. $this->_callProcedure();
  750. $execNotes .= ' done';
  751. break;
  752. }
  753. }
  754. }
  755. }