FixCrmProcesInitIdx.php 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783
  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['RemoveViewUserToInit'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_USER_to_INIT_VIEW`";
  382. $sqlList['InstallViewUserToInit'] = <<<SQL
  383. CREATE VIEW `CRM_PROCES_idx_USER_to_INIT_VIEW` AS
  384. select concat(u.`ID`, p.`ID`) as ID
  385. , p.`ID` as `ID_PROCES_INIT`
  386. , p.`DESC` as `DESC`
  387. , u.`ADM_ACCOUNT` as `ADM_ACCOUNT`
  388. , u.`EMPLOYEE_TYPE` as `EMPLOYEE_TYPE`
  389. , u.`A_STATUS` as `A_STATUS`
  390. from `ADMIN_USERS` u
  391. join `CRM_AUTH_PROFILE` au on(au.`REMOTE_ID`=u.`ID` and au.`REMOTE_TABLE`='ADMIN_USERS' and au.`A_STATUS` in('NORMAL','WAITING'))
  392. join `CRM_PROCES_idx_GROUP_to_PROCES` gi on(gi.`ID_GROUP`=au.`ID_ZASOB`)
  393. join `CRM_PROCES_idx` i on(i.`ID_PROCES`=gi.`ID_PROCES`)
  394. join `CRM_PROCES` p on(p.`ID`=i.`idx_PROCES_INIT_ID`)
  395. where p.`TYPE`='PROCES_INIT'
  396. -- group by u.`ID`, p.`ID`
  397. SQL;
  398. /* Usage - find proces init for user by $userLogin:
  399. SELECT *
  400. FROM `CRM_PROCES_idx_USER_to_INIT_VIEW`
  401. WHERE `ADM_ACCOUNT` LIKE '{$userLogin}'
  402. GROUP BY ID_PROCES_INIT
  403. */
  404. $sqlList['RemoveViewTableToProces'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW`";
  405. $sqlList['InstallViewTableToProces'] = <<<SQL
  406. CREATE VIEW `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW` AS
  407. select z.`ID` as `ID_CELL`
  408. , z.`DESC` as `CELL_NAME`
  409. , zp.`ID` as `ID_TABLE`
  410. , zp.`DESC` as `TABLE_NAME`
  411. , wsk.`ID_PROCES` as `ID_PROCES`
  412. -- , z.*, wsk.*
  413. from `CRM_LISTA_ZASOBOW` z
  414. join `CRM_LISTA_ZASOBOW` zp on(zp.`ID`=z.`PARENT_ID` and zp.`TYPE`='TABELA' and zp.`A_STATUS` in('WAITING','NORMAL'))
  415. join `CRM_WSKAZNIK` wsk on(wsk.`ID_ZASOB`=z.`ID`)
  416. where z.`TYPE`='KOMORKA'
  417. and z.`A_STATUS` in('WAITING','NORMAL')
  418. SQL;
  419. $sqlList['RemoveProcedure'] = "DROP PROCEDURE if exists `update_proces_init_idx_rec`";
  420. // throws errors:
  421. // #1146 - Table '{DATABASE_NAME}.P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Already executed' doesn't exist
  422. $sqlList['CreateProcedure'] = <<<SQL
  423. CREATE PROCEDURE `update_proces_init_idx_rec`()
  424. BEGIN
  425. SET @enabled = FALSE;
  426. SET @conf_last_exec_lock_key = 'tbl_indexer_CRM_PROCES_last_exec_lock_date';
  427. SET @conf_last_exec_start_key = 'tbl_indexer_CRM_PROCES_last_exec_start';
  428. SET @conf_last_exec_end_key = 'tbl_indexer_CRM_PROCES_last_exec_end';
  429. -- if already runnig mysql will throw "Commands out of sync; you can't run this command now"
  430. IF (select count(1) from `CRM_CONFIG` where `conf_key`=@conf_last_exec_lock_key and `conf_val`!='')>0 THEN
  431. UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Already executed` SET x=1;
  432. ELSE BEGIN
  433. replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values (@conf_last_exec_lock_key, NOW()), (@conf_last_exec_start_key, NOW());
  434. -- select sleep(2); -- // DBG
  435. -- select 'truncate->delete...';
  436. truncate table `CRM_PROCES_idx`;
  437. -- delete from `CRM_PROCES_idx`;
  438. -- select 'insert into `CRM_PROCES_idx`...';
  439. insert into `CRM_PROCES_idx` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`)
  440. select p.`ID`, p.`TYPE`, p.`PARENT_ID`, IF(p.`TYPE`='PROCES_INIT', p.`ID`, 0) as idx_PROCES_INIT_ID
  441. from `CRM_PROCES` p
  442. where p.`A_STATUS` in('NORMAL','WAITING')
  443. ;
  444. -- select 'while 1...';
  445. update `CRM_PROCES_idx` as p set p.`idx_PROCES_INIT_ID`=IF(p.`TYPE`='PROCES_INIT', p.`ID_PROCES`, 0);
  446. SET @i = 0;
  447. SET @loopLomit = 100;
  448. SET @pinitCnt = 1;
  449. WHILE @i < @loopLomit and @pinitCnt > 0 DO
  450. update `CRM_PROCES_idx` as p join `CRM_PROCES_idx` as pp on(pp.`ID_PROCES`=p.`PARENT_ID`)
  451. set p.`idx_PROCES_INIT_ID`=pp.`idx_PROCES_INIT_ID`
  452. where p.`idx_PROCES_INIT_ID`=0 and pp.`idx_PROCES_INIT_ID`>0;
  453. SET @pinitCnt = ROW_COUNT();
  454. SET @i = @i + 1;
  455. END WHILE;
  456. -- select 'while 2... search stanowiska';
  457. update `CRM_PROCES_idx` i
  458. join `CRM_WSKAZNIK` as wsk on(wsk.`ID_PROCES`=i.`ID_PROCES`
  459. and wsk.`A_STATUS` in('NORMAL', 'WAITING')
  460. )
  461. join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
  462. and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
  463. and z.`A_STATUS` in('NORMAL', 'WAITING')
  464. )
  465. join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
  466. and przyp.`FORM_TREAT` & 8 -- has perm X
  467. )
  468. set
  469. i.`idx_PROCES_WITH_GROUPS_ID`=i.`ID_PROCES`
  470. where i.`idx_PROCES_INIT_ID`>0;
  471. SET @i = 0;
  472. SET @loopLomit = 100;
  473. SET @groupCnt = 1;
  474. WHILE @i < @loopLomit and @groupCnt > 0 DO
  475. update `CRM_PROCES_idx` as p join `CRM_PROCES_idx` as pp on(pp.`ID_PROCES`=p.`PARENT_ID`)
  476. set p.`idx_PROCES_WITH_GROUPS_ID`=pp.`idx_PROCES_WITH_GROUPS_ID`
  477. where p.`idx_PROCES_WITH_GROUPS_ID` is null
  478. and pp.`idx_PROCES_WITH_GROUPS_ID` is not null
  479. and pp.`idx_PROCES_WITH_GROUPS_ID`>0;
  480. SET @groupCnt = ROW_COUNT();
  481. SET @i = @i + 1;
  482. END WHILE;
  483. -- select 'GOTO_AND_RETURN...';
  484. insert ignore into `CRM_PROCES_idx` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
  485. select g.`ID`, 'GOTO_AND_RETURN' as `TYPE`, p.`ID` as PARENT_ID, g.`ID` as idx_PROCES_INIT_ID
  486. , pi.`idx_PROCES_WITH_GROUPS_ID`
  487. from `CRM_PROCES` p
  488. join `CRM_PROCES_idx` pi on(pi.`ID_PROCES`=p.`ID`)
  489. join `CRM_PROCES` g on(g.`ID`=p.`IF_TRUE_GOTO`
  490. and g.`TYPE`='PROCES_INIT'
  491. and g.`A_STATUS` in('NORMAL','WAITING')
  492. and p.`IF_TRUE_GOTO_FLAG`='GOTO_AND_RETURN'
  493. and p.`IF_TRUE_GOTO`>0
  494. )
  495. where p.`A_STATUS` in('NORMAL','WAITING')
  496. 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`)
  497. ;
  498. update `CRM_PROCES_idx`
  499. set `idx_PROCES_WITH_GROUPS_ID`=0
  500. where `idx_PROCES_WITH_GROUPS_ID` is null
  501. and `TYPE`='PROCES_INIT'
  502. ;
  503. insert ignore into `CRM_PROCES_idx` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
  504. select i.`ID_PROCES`, 'GOTO_AND_RETURN' as `TYPE`, i.`PARENT_ID`, i.`idx_PROCES_INIT_ID`, pi.`idx_PROCES_WITH_GROUPS_ID`
  505. from `CRM_PROCES_idx` i
  506. join `CRM_PROCES_idx` pi on(pi.`idx_PROCES_INIT_ID`=i.`idx_PROCES_INIT_ID`)
  507. where i.`idx_PROCES_WITH_GROUPS_ID` is null
  508. and pi.`idx_PROCES_WITH_GROUPS_ID` is not null
  509. and pi.`idx_PROCES_WITH_GROUPS_ID`>0
  510. and i.`TYPE`!='GOTO_AND_RETURN'
  511. ;
  512. -- select 'delete idx_PROCES_WITH_GROUPS_ID...';
  513. delete from `CRM_PROCES_idx` where `idx_PROCES_WITH_GROUPS_ID` is null or `idx_PROCES_WITH_GROUPS_ID`=0;
  514. -- select 'update `CRM_PROCES`...';
  515. update `CRM_PROCES` p
  516. 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)
  517. ;
  518. -- select 'update `CRM_PROCES_idx_GROUP_to_PROCES`...';
  519. truncate table `CRM_PROCES_idx_GROUP_to_PROCES`;
  520. insert ignore into `CRM_PROCES_idx_GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
  521. select i.`ID_PROCES` as ID_PROCES, z.`ID` as ID_GROUP
  522. from `CRM_PROCES_idx` i
  523. join `CRM_WSKAZNIK` wsk on(wsk.`ID_PROCES`=i.`idx_PROCES_WITH_GROUPS_ID`
  524. and wsk.`A_STATUS` in('NORMAL', 'WAITING')
  525. )
  526. join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
  527. and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
  528. and z.`A_STATUS` in('NORMAL', 'WAITING')
  529. )
  530. join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
  531. and przyp.`FORM_TREAT` & 8 -- has perm X
  532. )
  533. -- where i.`TYPE` in('PROCES_INIT', 'GOTO_AND_RETURN')
  534. ;
  535. replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values (@conf_last_exec_lock_key, ''), (@conf_last_exec_end_key, NOW());
  536. -- clear msg 'Update perms' from Msgs system
  537. update `CRM_UI_MSGS`
  538. set `A_STATUS`='OFF_HARD'
  539. , `actionExecutedTime`=NOW()
  540. , `A_RECORD_UPDATE_DATE`=NOW()
  541. , `A_RECORD_UPDATE_AUTHOR`='update_proces_init_idx_rec'
  542. where `A_STATUS`='WAITING'
  543. and `app_className`='FixCrmProcesInitIdx'
  544. and `msg`='Update perms'
  545. and `uiTargetType`='default_db_table'
  546. and `uiTargetName`='CRM_PROCES';
  547. END ; END IF ;
  548. END ;
  549. SQL;
  550. $sqlList['RemoveTrigger_AfterInsertProces'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_PROCES_AFTER_INSERT`";
  551. $sqlList['CreateTrigger_AfterInsertProces'] = "
  552. CREATE TRIGGER `FixCrmProcesInitIdx_CRM_PROCES_AFTER_INSERT` AFTER INSERT ON `CRM_PROCES`
  553. FOR EACH ROW BEGIN
  554. -- only when PARENT_ID changes and PARENT_ID exists in `CRM_PROCES_idx`
  555. 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
  556. -- throw warning to update perms
  557. IF (select count(1) from `CRM_UI_MSGS` where `app_className`='FixCrmProcesInitIdx'
  558. and `msg`='Update perms'
  559. and `uiTargetType`='default_db_table'
  560. and `uiTargetName`='CRM_PROCES'
  561. and `A_STATUS`='WAITING'
  562. ) = 0 THEN
  563. INSERT INTO `CRM_UI_MSGS` (`ID`
  564. , `app_className`, `msg`, `msgType`
  565. , `uiTargetType`, `uiTargetName`
  566. , `userTargetType`
  567. , `A_RECORD_CREATE_DATE`, `A_RECORD_CREATE_AUTHOR`)
  568. VALUES (NULL
  569. , 'FixCrmProcesInitIdx', 'Update perms', 'danger'
  570. , 'default_db_table', 'CRM_PROCES'
  571. , 'everyone'
  572. , NOW(), coalesce(NEW.A_RECORD_UPDATE_AUTHOR,'trigger:FixCrmProcesInitIdx_CRM_PROCES_AFTER_INSERT')
  573. );
  574. END IF;
  575. UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
  576. END IF;
  577. END
  578. ";
  579. $sqlList['RemoveTrigger_AfterUpdateProces'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_PROCES_AFTER_UPDATE`";
  580. $sqlList['CreateTrigger_AfterUpdateProces'] = "
  581. CREATE TRIGGER `FixCrmProcesInitIdx_CRM_PROCES_AFTER_UPDATE` AFTER UPDATE ON `CRM_PROCES`
  582. FOR EACH ROW BEGIN
  583. -- only when PARENT_ID changes and ID exists in `CRM_PROCES_idx`
  584. 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
  585. -- throw warning to update perms
  586. IF (select count(1) from `CRM_UI_MSGS` where `app_className`='FixCrmProcesInitIdx'
  587. and `msg`='Update perms'
  588. and `uiTargetType`='default_db_table'
  589. and `uiTargetName`='CRM_PROCES'
  590. and `A_STATUS`='WAITING'
  591. ) = 0 THEN
  592. INSERT INTO `CRM_UI_MSGS` (`ID`
  593. , `app_className`, `msg`, `msgType`
  594. , `uiTargetType`, `uiTargetName`
  595. , `userTargetType`
  596. , `A_RECORD_CREATE_DATE`, `A_RECORD_CREATE_AUTHOR`)
  597. VALUES (NULL
  598. , 'FixCrmProcesInitIdx', 'Update perms', 'danger'
  599. , 'default_db_table', 'CRM_PROCES'
  600. , 'everyone'
  601. , NOW(), coalesce(NEW.A_RECORD_UPDATE_AUTHOR,'trigger:FixCrmProcesInitIdx_CRM_PROCES_AFTER_UPDATE')
  602. );
  603. END IF;
  604. UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
  605. END IF;
  606. END
  607. ";
  608. $sqlList['RemoveTrigger_AfterInsertWskaznik'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_INSERT`";
  609. $sqlList['CreateTrigger_AfterInsertWskaznik'] = "
  610. CREATE TRIGGER `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_INSERT` AFTER INSERT ON `CRM_WSKAZNIK`
  611. FOR EACH ROW BEGIN
  612. -- only when ID_PROCES exists in `CRM_PROCES_idx`
  613. -- only when ID_ZASOB is group
  614. -- only when ID_PRZYPADEK has perm 'X'
  615. IF NEW.`ID_PROCES`>0
  616. AND NEW.`ID_ZASOB`>0
  617. AND NEW.`ID_PRZYPADEK`>0
  618. AND (select count(*) from `CRM_PROCES_idx` where `ID_PROCES`=NEW.`ID_PROCES` limit 1)>0
  619. AND (select count(*) from `CRM_LISTA_ZASOBOW` z where z.`ID`=NEW.`ID_ZASOB` and z.`TYPE` in('STANOWISKO','DZIAL','PODMIOT') limit 1)>0
  620. AND (select count(*) from `CRM_PRZYPADEK` przyp where przyp.`ID`=NEW.`ID_PRZYPADEK` and przyp.`FORM_TREAT` & 8 limit 1)>0
  621. THEN
  622. -- throw warning to update perms
  623. IF (select count(1) from `CRM_UI_MSGS` where `app_className`='FixCrmProcesInitIdx'
  624. and `msg`='Update perms'
  625. and `uiTargetType`='default_db_table'
  626. and `uiTargetName`='CRM_PROCES'
  627. and `A_STATUS`='WAITING'
  628. ) = 0 THEN
  629. INSERT INTO `CRM_UI_MSGS` (`ID`
  630. , `app_className`, `msg`, `msgType`
  631. , `uiTargetType`, `uiTargetName`
  632. , `userTargetType`
  633. , `A_RECORD_CREATE_DATE`, `A_RECORD_CREATE_AUTHOR`)
  634. VALUES (NULL
  635. , 'FixCrmProcesInitIdx', 'Update perms', 'danger'
  636. , 'default_db_table', 'CRM_PROCES'
  637. , 'everyone'
  638. , NOW(), coalesce(NEW.A_RECORD_UPDATE_AUTHOR,'trigger:FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_INSERT')
  639. );
  640. END IF;
  641. UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
  642. END IF;
  643. END
  644. ";
  645. $sqlList['RemoveTrigger_AfterUpdateWskaznik'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_UPDATE`";
  646. $sqlList['CreateTrigger_AfterUpdateWskaznik'] = "
  647. CREATE TRIGGER `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_UPDATE` AFTER UPDATE ON `CRM_WSKAZNIK`
  648. FOR EACH ROW BEGIN
  649. -- only when old or new ID_PROCES exists in `CRM_PROCES_idx`
  650. -- only when old or new ID_ZASOB is group
  651. -- only when old or new ID_PRZYPADEK has perm 'X'
  652. IF (NEW.`ID_PROCES`!=OLD.`ID_PROCES`
  653. or NEW.`ID_ZASOB`!=OLD.`ID_ZASOB`
  654. or NEW.`ID_PRZYPADEK`!=OLD.`ID_PRZYPADEK`
  655. or (NEW.`A_STATUS`!=OLD.`A_STATUS`
  656. and ((NEW.`A_STATUS` in('WAITING','NORMAL') and OLD.`A_STATUS` not in('WAITING','NORMAL'))
  657. or (NEW.`A_STATUS` not in('WAITING','NORMAL') and OLD.`A_STATUS` in('WAITING','NORMAL'))
  658. )
  659. )
  660. )
  661. AND (NEW.`ID_PROCES`>0 or OLD.`ID_PROCES`>0)
  662. AND (NEW.`ID_ZASOB`>0 or OLD.`ID_ZASOB`>0)
  663. AND (NEW.`ID_PRZYPADEK`>0 or OLD.`ID_PRZYPADEK`>0)
  664. -- AND (select count(*) from `CRM_PROCES_idx` where `ID_PROCES` in(NEW.`ID_PROCES`,OLD.`ID_PROCES`) limit 1)>0
  665. 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
  666. 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
  667. THEN
  668. -- throw warning to update perms
  669. IF (select count(1) from `CRM_UI_MSGS` where `app_className`='FixCrmProcesInitIdx'
  670. and `msg`='Update perms'
  671. and `uiTargetType`='default_db_table'
  672. and `uiTargetName`='CRM_PROCES'
  673. and `A_STATUS`='WAITING'
  674. ) = 0 THEN
  675. INSERT INTO `CRM_UI_MSGS` (`ID`
  676. , `app_className`, `msg`, `msgType`
  677. , `uiTargetType`, `uiTargetName`
  678. , `userTargetType`
  679. , `A_RECORD_CREATE_DATE`, `A_RECORD_CREATE_AUTHOR`)
  680. VALUES (NULL
  681. , 'FixCrmProcesInitIdx', 'Update perms', 'danger'
  682. , 'default_db_table', 'CRM_PROCES'
  683. , 'everyone'
  684. , NOW(), coalesce(NEW.A_RECORD_UPDATE_AUTHOR,'trigger:FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_UPDATE')
  685. );
  686. END IF;
  687. UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
  688. END IF;
  689. END
  690. ";
  691. $db = DB::getDB();
  692. if ($db->has_errors()) {
  693. throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
  694. }
  695. foreach ($sqlList as $sqlName => $sql) {
  696. $res = $db->query($sql);
  697. if ($db->has_errors()) {
  698. throw new Exception("DB Errors at sql '{$sqlName}': " . implode("\n<br>", $db->get_errors()));
  699. }
  700. }
  701. }
  702. /*
  703. #1146 - Table '{DATABASE_NAME}.P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Already executed' doesn't exist
  704. */
  705. public function parseMessageFromStorage($msg) {
  706. switch ($msg) {
  707. case 'ERROR: Already executed': {
  708. $msg = "Aktualizacja uprawnień została już uruchomiona przez inną osobę";
  709. break;
  710. }
  711. case 'ERROR: Update perms': {
  712. $msg = "Wymagana aktualizacja uprawnień";
  713. break;
  714. }
  715. }
  716. return $msg;
  717. }
  718. public function parseMessageFromMsgsSystem($msg) {
  719. switch ($msg) {
  720. case 'Update perms': {
  721. $msg = "Wymagana aktualizacja uprawnień";
  722. break;
  723. }
  724. }
  725. return $msg;
  726. }
  727. public function runByMessageFromMsgsSystem($msg, &$execNotes) {
  728. switch ($msg) {
  729. case 'Update perms': {
  730. $execNotes .= 'Wymagana aktualizacja uprawnień';
  731. $this->_callProcedure();
  732. $execNotes .= ' done';
  733. break;
  734. }
  735. }
  736. }
  737. }