FixCrmProcesInitIdx.php 47 KB

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