FixCrmProcesInitIdx.php 51 KB

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