| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246 |
- <?php
- Lib::loadClass('RouteBase');
- Lib::loadClass('DebugExecutionTime');
- class Route_FixCrmProcesInitIdx extends RouteBase {
- public function handleAuth() {
- if (!User::logged()) {
- throw new HttpException('Unauthorized', 401);
- }
- }
- public function defaultAction() {
- SE_Layout::gora();
- // echo '<a href="index.php?_route=FixCrmProcesInitIdx&_task=run">aktualizuj uprawnienia</a>';
- ?>
- <div class="jumbotron">
- <div class="container">
- <form class="form-inline" method="POST">
- <input type="hidden" name="_route" value="FixCrmProcesInitIdx" />
- <input type="hidden" name="_task" value="run" />
- <button type="submit" id="fldExecuteBtn" class="btn btn-primary" autocomplete="off">
- Zaktualizuj uprawnienia
- </button>
- </form>
- </div>
- </div>
- <script type="text/javascript">
- jQuery(document).ready(function () {
- jQuery('#fldExecuteBtn').on('click', function () {
- jQuery(this).text(jQuery(this).text() + '...').attr('disabled', 'disabled');
- jQuery(this).parent().submit();
- })
- });
- </script>
- <?php
- SE_Layout::dol();
- }
- public function mapAction() {
- SE_Layout::gora();
- // echo '<a href="index.php?_route=FixCrmProcesInitIdx&_task=run">aktualizuj uprawnienia</a>';
- $idProcesInit = V::get('id_proces_init', '', $_REQUEST, 'int');
- ?>
- <div class="jumbotron">
- <div class="container">
- <form class="form-inline" method="POST">
- <input type="hidden" name="_route" value="FixCrmProcesInitIdx" />
- <input type="hidden" name="_task" value="map" />
- <input type="text" class="form-control" name="id_proces_init" value="<?php echo $idProcesInit; ?>" />
- <button type="submit" id="fldExecuteBtn" class="btn btn-primary" autocomplete="off">
- Pokaż mapę
- </button>
- </form>
- </div>
- </div>
- <script type="text/javascript">
- jQuery(document).ready(function () {
- jQuery('#fldExecuteBtn').on('click', function () {
- jQuery(this).text(jQuery(this).text() + '...').attr('disabled', 'disabled');
- jQuery(this).parent().submit();
- })
- });
- </script>
- <?php
- if ($idProcesInit) {
- $this->printProcesInitMap($idProcesInit);
- }
- SE_Layout::dol();
- }
- public function printProcesInitMap($idProcesInit) {
- Lib::loadClass('CrmProcesMap');
- $map = new CrmProcesMap($idProcesInit);
- }
- public function runAction() {
- SE_Layout::gora();
- SE_Layout::menu();
- $DBG_TIME = true;//('1' == V::get('DBG_TIME', '', $_GET));
- $dbgExecTime = new DebugExecutionTime();
- if ($DBG_TIME) $dbgExecTime->activate();
- $dbgExecTime->log('start');
- try {
- $this->callProcedure();
- } catch (Exception $e) {
- ?>
- <div class="container">
- <div class="alert alert-warning">
- <?php echo $e->getMessage(); ?>
- </div>
- </div>
- <?php
- SE_Layout::dol();
- exit;
- }
- $dbgExecTime->log('procedure');
- $procExecTime = $dbgExecTime->getLastExecTime();
- //$totalExecTime = $dbgExecTime->getTotalExecTime();
- ?>
- <div class="container">
- <div class="alert alert-success">
- Zaktualizowano uprawnienia
- <br><span style="font-style:italic; opacity:0.4;">(<?php echo number_format($procExecTime, 6); ?> s)</span>
- </div>
- </div>
- <?php
- if($DBG_TIME){
- $dbgExecTime->log('end');
- //$dbgExecTime->printDebug();
- }
- SE_Layout::dol();
- }
- public function runApiAction() {
- $this->callProcedure();
- die('Zaktualizowano uprawnienia');
- }
- public function callProcedure() {
- $sql = "call `update_proces_init_idx_rec`();";
- $db = DB::getDB();
- if ($db->has_errors()) {
- throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
- }
- $res = $db->query($sql);
- if ($db->has_errors()) {
- $dbErrors = array();
- if ($db->has_errors()) {
- $dbErrorsSql = $db->get_errors();
- foreach ($dbErrorsSql as $vErr) {
- if ('SQL QUERY FAILED: ' == substr($vErr, 0, 18)) {
- $vErr = substr($vErr, 18);
- }
- //$dbErrors[] = StorageException::parseMessage($vErr);
- $dbErrors[] = $vErr;
- }
- }
- throw new StorageException($dbErrors);
- }
- }
- public function test1Action() {
- $sql = <<<SQL
- select count(*) as cnt, p.`ID`, group_concat(i.`idx_PROCES_INIT_ID`), group_concat(i.`idx_PROCES_WITH_GROUPS_ID`)
- from `CRM_PROCES` p
- left join `CRM_PROCES_idx` i on(i.`ID_PROCES`=p.`ID`)
- where i.`ID_PROCES`=p.`ID`
- group by p.`ID`
- order by cnt desc
- SQL;
- $db = DB::getDB();
- if ($db->has_errors()) {
- throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
- }
- $res = $db->query($sql);
- if ($db->has_errors()) {
- throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
- }
- while ($r = $db->fetch($res)) {
- echo'<pre>';print_r($r);echo'</pre>';
- }
- }
- public function test2Action() {
- $sqlList = array();
- $sqlList['RemoveTableGroupToInit'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_GROUP_to_PROCES`";
- $sqlList['InstallTableGroupToInit'] = <<<SQL
- CREATE TABLE IF NOT EXISTS `CRM_PROCES_idx_GROUP_to_PROCES` (
- `ID_PROCES` int(11) NOT NULL
- , `ID_GROUP` int(11) NOT NULL
- , `HAS_PERM_R` tinyint(1) NOT NULL DEFAULT 0
- , `HAS_PERM_X` tinyint(1) NOT NULL DEFAULT 0
- , KEY `ID_PROCES` (`ID_PROCES`)
- , KEY `ID_GROUP` (`ID_GROUP`)
- , UNIQUE KEY `uniq__GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
- ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
- SQL;
- $sqlList['UpdateTableGroupToInit'] = <<<SQL
- insert ignore into `CRM_PROCES_idx_GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
- select i.`ID_PROCES` as ID_PROCES, z.`ID` as ID_GROUP
- from `CRM_PROCES_idx` i
- join `CRM_WSKAZNIK` wsk on(wsk.`ID_PROCES`=i.`idx_PROCES_WITH_GROUPS_ID`
- and wsk.`A_STATUS` in('NORMAL', 'WAITING')
- )
- join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
- and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
- and z.`A_STATUS` in('NORMAL', 'WAITING')
- )
- join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
- and przyp.`FORM_TREAT` & 8 -- has perm X
- )
- -- where i.`TYPE` in('PROCES_INIT', 'GOTO_AND_RETURN')
- SQL;
- $db = DB::getDB();
- if ($db->has_errors()) throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
- $DBG_TIME = true;//('1' == V::get('DBG_TIME', '', $_GET));
- $dbgExecTime = new DebugExecutionTime();
- if ($DBG_TIME) $dbgExecTime->activate();
- $dbgExecTime->log('start');
- foreach ($sqlList as $sqlName => $sql) {
- $res = $db->query($sql);
- if ($db->has_errors()) throw new Exception("DB Errors at sql '{$sqlName}': " . implode("\n<br>", $db->get_errors()));
- if($DBG_TIME) $dbgExecTime->log("end-{$sqlName}");
- }
- if($DBG_TIME) $dbgExecTime->printDebug();
- }
- public function test3Action() {
- $sqlList = array();
- $sqlList['RemoveTableGroupToInit'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_GROUP_to_PROCES_test3`";
- $sqlList['RemoveTableGroupToInit'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_GROUP_to_PROCES_PERM`";
- $sqlList['InstallTableGroupToInit'] = <<<SQL
- CREATE TABLE IF NOT EXISTS `CRM_PROCES_idx_GROUP_to_PROCES_PERM` (
- `ID_PROCES` int(11) NOT NULL
- , `ID_GROUP` int(11) NOT NULL
- , `HAS_PERM_R` tinyint(1) NOT NULL DEFAULT 0
- , `HAS_PERM_X` tinyint(1) NOT NULL DEFAULT 0
- , KEY `ID_PROCES` (`ID_PROCES`)
- , KEY `ID_GROUP` (`ID_GROUP`)
- , UNIQUE KEY `uniq__GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
- ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
- SQL;
- $sqlList['UpdateTableGroupToInit'] = <<<SQL
- insert into `CRM_PROCES_idx_GROUP_to_PROCES_PERM` (`ID_PROCES`,`ID_GROUP`,`HAS_PERM_R`,`HAS_PERM_X`)
- select i.`ID_PROCES` as `_ID_PROCES`
- , z.`ID` as `_ID_GROUP`
- , IF(przyp.`FORM_TREAT` & 2, 1, 0) as `_HAS_PERM_R`
- , IF(przyp.`FORM_TREAT` & 8, 1, 0) as `_HAS_PERM_X`
- from `CRM_PROCES_idx` i
- join `CRM_WSKAZNIK` wsk on(wsk.`ID_PROCES`=i.`idx_PROCES_WITH_GROUPS_ID`
- and wsk.`A_STATUS` in('NORMAL', 'WAITING')
- )
- join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
- and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
- and z.`A_STATUS` in('NORMAL', 'WAITING')
- )
- join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`)
- -- where i.`TYPE` in('PROCES_INIT', 'GOTO_AND_RETURN')
- ON DUPLICATE KEY UPDATE `HAS_PERM_R`=GREATEST(`HAS_PERM_R`, IF(przyp.`FORM_TREAT` & 2, 1, 0))
- , `HAS_PERM_X`=GREATEST(`HAS_PERM_X`, IF(przyp.`FORM_TREAT` & 8, 1, 0))
- ;
- SQL;
- $db = DB::getDB();
- if ($db->has_errors()) throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
- $DBG_TIME = true;//('1' == V::get('DBG_TIME', '', $_GET));
- $dbgExecTime = new DebugExecutionTime();
- if ($DBG_TIME) $dbgExecTime->activate();
- $dbgExecTime->log('start');
- foreach ($sqlList as $sqlName => $sql) {
- $res = $db->query($sql);
- if ($db->has_errors()) throw new Exception("DB Errors at sql '{$sqlName}': " . implode("\n<br>", $db->get_errors()));
- if($DBG_TIME) $dbgExecTime->log("end-{$sqlName}");
- }
- if($DBG_TIME) $dbgExecTime->printDebug();
- }
- public function runDebugAction() {
- $sqlList = array();
- // SET @conf_last_exec_start_key = 'tbl_indexer_CRM_PROCES_last_exec_start';
- // SET @conf_last_exec_end_key = 'tbl_indexer_CRM_PROCES_last_exec_end';
- $sqlList['0-prepare-fill_idx_INIT-rm'] = "DROP PROCEDURE if exists `update_proces_init_idx__loop__fill_idx_INIT`";
- $sqlList['0-prepare-fill_idx_INIT-create'] = <<<SQL
- CREATE PROCEDURE `update_proces_init_idx__loop__fill_idx_INIT`()
- BEGIN
- SET @i = 0;
- SET @loopLomit = 100;
- SET @pinitCnt = 1;
- WHILE @i < @loopLomit and @pinitCnt > 0 DO
- update `CRM_PROCES_idx_TEMP` p
- join `CRM_PROCES_idx_TEMP` pp on(pp.`ID_PROCES`=p.`PARENT_ID`)
- set p.`idx_PROCES_INIT_ID`=IF(p.`idx_PROCES_INIT_ID`>0, p.`idx_PROCES_INIT_ID`, pp.`idx_PROCES_INIT_ID`)
- , p.`idx_MAIN_PROCES_INIT_ID`=pp.`idx_MAIN_PROCES_INIT_ID`
- -- // TODO:?: update here `idx_MAIN_PROCES_INIT_ID`
- where p.`idx_PROCES_INIT_ID`=0 and pp.`idx_PROCES_INIT_ID`>0
- ;
- SET @pinitCnt = ROW_COUNT();
- SET @i = @i + 1;
- END WHILE;
- END
- SQL;
- $sqlList['0-prepare-while-1-rm'] = "DROP PROCEDURE if exists `update_proces_init_idx_rec__while1`";
- $sqlList['0-prepare-while-1-create'] = <<<SQL
- CREATE PROCEDURE `update_proces_init_idx_rec__while1`()
- BEGIN
- -- update `CRM_PROCES_idx_TEMP` as i set i.`idx_PROCES_INIT_ID`=IF(i.`TYPE`='PROCES_INIT', i.`ID_PROCES`, 0);
- SET @i = 0;
- SET @loopLomit = 100;
- SET @pinitCnt = 1;
- WHILE @i < @loopLomit and @pinitCnt > 0 DO
- update `CRM_PROCES_idx_TEMP` p
- join `CRM_PROCES_idx_TEMP` pp on(pp.`ID_PROCES`=p.`PARENT_ID`)
- set p.`idx_MAIN_PROCES_INIT_ID`=pp.`idx_MAIN_PROCES_INIT_ID`
- where p.`idx_MAIN_PROCES_INIT_ID`=0 and pp.`idx_MAIN_PROCES_INIT_ID`>0
- ;
- SET @pinitCnt = ROW_COUNT();
- SET @i = @i + 1;
- END WHILE;
- END
- SQL;
- $sqlList['0-prepare-while-2-rm'] = "DROP PROCEDURE if exists `update_proces_init_idx_rec__while2`";
- $sqlList['0-prepare-while-2-create'] = <<<SQL
- CREATE PROCEDURE `update_proces_init_idx_rec__while2`()
- BEGIN
- SET @i = 0;
- SET @loopLomit = 100;
- SET @groupCnt = 1;
- WHILE @i < @loopLomit and @groupCnt > 0 DO
- update `CRM_PROCES_idx_TEMP` as p
- join `CRM_PROCES_idx_TEMP` as pp on(
- pp.`ID_PROCES`=p.`PARENT_ID`
- and pp.`idx_PROCES_WITH_GROUPS_ID` is not null
- and pp.`idx_PROCES_WITH_GROUPS_ID`>0
- )
- set p.`idx_PROCES_WITH_GROUPS_ID`=pp.`idx_PROCES_WITH_GROUPS_ID`
- where p.`idx_PROCES_WITH_GROUPS_ID` is null
- ;
- SET @groupCnt = ROW_COUNT();
- SET @i = @i + 1;
- END WHILE;
- END
- SQL;
- $sqlList__TEST_PERF_NO_DIFF['0-prepare-while-2-create'] = <<<SQL
- CREATE PROCEDURE `update_proces_init_idx_rec__while2`()
- BEGIN
- SET @i = 0;
- SET @loopLomit = 100;
- SET @groupCnt = 1;
- WHILE @i < @loopLomit and @groupCnt > 0 DO
- update `CRM_PROCES_idx_TEMP` as p
- join `CRM_PROCES_idx_TEMP` as pp on(pp.`ID_PROCES`=p.`PARENT_ID`
- and pp.`idx_PROCES_WITH_GROUPS_ID` is not null
- and pp.`idx_PROCES_WITH_GROUPS_ID`>0
- )
- set p.`idx_PROCES_WITH_GROUPS_ID`=pp.`idx_PROCES_WITH_GROUPS_ID`
- where p.`idx_PROCES_WITH_GROUPS_ID` is null
- ;
- SET @groupCnt = ROW_COUNT();
- SET @i = @i + 1;
- END WHILE;
- END
- SQL;
- $sqlList['CONF.1--set-start-time-in-config'] = <<<SQL
- -- CONF.1--set-start-time-in-config
- replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values ('tbl_indexer_CRM_PROCES_last_exec_start', NOW());
- SQL;
- $sqlList['I.1--truncate-table'] = <<<SQL
- -- I.1--truncate-table
- -- truncate table `CRM_PROCES_idx_TEMP`;
- DROP TABLE IF EXISTS `CRM_PROCES_idx_TEMP`;
- SQL;
- $sqlList['I.2--fill-CRM_PROCES_idx_TEMP'] = <<<SQL
- -- I.2--fill-CRM_PROCES_idx_TEMP
- -- Mysql BUG: "Can't reopen table" -- CREATE TEMPORARY TABLE `CRM_PROCES_idx_TEMP` (
- -- You cannot refer to a TEMPORARY table more than once in the same query.
- CREATE TABLE `CRM_PROCES_idx_TEMP` (
- `ID_PROCES` int(11) NOT NULL
- , `PARENT_ID` int(11) NOT NULL DEFAULT '0'
- , `TYPE` varchar(32) NOT NULL DEFAULT ''
- , `idx_PROCES_INIT_ID` int(11) NOT NULL DEFAULT '0'
- , `idx_MAIN_PROCES_INIT_ID` int(11) NULL DEFAULT '0'
- , `idx_PROCES_WITH_GROUPS_ID` int(11) NULL DEFAULT NULL
- -- , `idx_PATH` text NOT NULL
- , KEY `ID_PROCES` (`ID_PROCES`)
- , KEY `PARENT_ID` (`PARENT_ID`)
- , KEY `idx_PROCES_INIT_ID` (`idx_PROCES_INIT_ID`)
- , KEY `idx_MAIN_PROCES_INIT_ID` (`idx_MAIN_PROCES_INIT_ID`)
- , KEY `idx_PROCES_WITH_GROUPS_ID` (`idx_PROCES_WITH_GROUPS_ID`)
- , UNIQUE KEY `uniq__idx_PROCES_WITH_GROUPS_ID` (`ID_PROCES`,`idx_PROCES_WITH_GROUPS_ID`)
- )
- select p.`ID` as `ID_PROCES`
- , p.`TYPE` as `TYPE`
- , p.`PARENT_ID` as `PARENT_ID`
- , IF(p.`TYPE`='PROCES_INIT', p.`ID`, 0) as `idx_PROCES_INIT_ID`
- , IF(p.`TYPE`='PROCES_INIT', p.`ID`, 0) as `idx_MAIN_PROCES_INIT_ID`
- from `CRM_PROCES` p
- where p.`A_STATUS` in('NORMAL','WAITING')
- ;
- SQL;
- $sqlList['G.1--before-while-2-set-initial-proc_with_groups_id'] = <<<SQL
- -- G.1--before-while-2-set-initial-proc_with_groups_id
- update `CRM_PROCES_idx_TEMP` i
- join `CRM_WSKAZNIK` as wsk on(wsk.`ID_PROCES`=i.`ID_PROCES`
- and wsk.`A_STATUS` in('NORMAL', 'WAITING')
- )
- join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
- and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
- and z.`A_STATUS` in('NORMAL', 'WAITING')
- )
- join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
- and przyp.`FORM_TREAT` & 8 -- has perm X
- )
- set
- i.`idx_PROCES_WITH_GROUPS_ID`=i.`ID_PROCES`
- where i.`idx_PROCES_INIT_ID`>0
- ;
- SQL;
- $sqlList['G.2--while-2-loop-update-proc_with_groups_id-from-parent'] = <<<SQL
- -- G.2--while-2-loop-update-proc_with_groups_id-from-parent
- call `update_proces_init_idx_rec__while2`();
- SQL;
- $sqlList['P_INIT_ID.1--fill_idx_INIT'] = <<<SQL
- -- P_INIT_ID.1--fill_idx_INIT
- call `update_proces_init_idx__loop__fill_idx_INIT`();
- SQL;
- $sqlList['GOTO_AND_RET.1--from-7-fill-goto_and_return'] = <<<SQL
- -- GOTO_AND_RET.1--from-7-fill-goto_and_return
- 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`)
- select g.`ID`
- , 'GOTO_AND_RETURN' as `TYPE`
- , p.`ID` as `PARENT_ID`
- , g.`ID` as `idx_PROCES_INIT_ID`
- , i.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
- , 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`
- from `CRM_PROCES` p
- join `CRM_PROCES_idx_TEMP` i on(i.`ID_PROCES`=p.`ID`)
- join `CRM_PROCES` g on(g.`ID`=p.`IF_TRUE_GOTO`
- and g.`TYPE`='PROCES_INIT'
- and g.`A_STATUS` in('NORMAL','WAITING')
- and p.`IF_TRUE_GOTO_FLAG`='GOTO_AND_RETURN'
- and p.`IF_TRUE_GOTO`>0
- )
- join `CRM_PROCES_idx_TEMP` gi on(gi.`ID_PROCES`=g.`ID`)
- where p.`A_STATUS` in('NORMAL','WAITING')
- ;
- SQL;
- $sqlList['GOTO_AND_RET.2--fill-childrens-of-goto_and_return'] = <<<SQL
- -- GOTO_AND_RET.2--fill-childrens-of-goto_and_return
- 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`)
- select ic.`ID_PROCES`
- , 'GOTO_AND_RETURN_CHILD' as `TYPE`
- , ic.`PARENT_ID` as `PARENT_ID`
- , ic.`idx_PROCES_INIT_ID` as `idx_PROCES_INIT_ID`
- , i.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
- , 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`
- from `CRM_PROCES_idx_TEMP` i
- join `CRM_PROCES_idx_TEMP` ic on(
- ic.`idx_PROCES_INIT_ID`=i.`ID_PROCES`
- and ic.`ID_PROCES`!=i.`ID_PROCES`
- )
- where i.`TYPE`='GOTO_AND_RETURN'
- ;
- SQL;
- $sqlList__TODO_IS_NEEDED__['4.2-NEW-while-1'] = <<<SQL
- call `update_proces_init_idx_rec__while1`();
- SQL;
- // TODO: mv here loop insert goto_and_return
- // TODO: add idx_MAIN_PROCES_INIT_ID - which proces has goto_end_return for this step
- $sqlList__TODO_SEE_IDX_2__['CLEANUP.1--remove-not-needed-rows'] = <<<SQL
- -- // TODO: add to main procedure
- delete from `CRM_PROCES_idx_TEMP` where `idx_PROCES_INIT_ID`=0;
- SQL;
- $sqlList__TODO_SEE_IDX_2__['CLEANUP.2--update-idx_PROCES_WITH_GROUPS_ID-zero-where-null'] = <<<SQL
- update `CRM_PROCES_idx_TEMP`
- set `idx_PROCES_WITH_GROUPS_ID`=0
- where `idx_PROCES_WITH_GROUPS_ID` is null
- and `TYPE`='PROCES_INIT'
- ;
- SQL;
- $sqlList__TODO_IS_NEEDED__['9-fix-goto_and_return'] = <<<SQL
- insert ignore into `CRM_PROCES_idx_TEMP` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
- select i.`ID_PROCES`, 'GOTO_AND_RETURN' as `TYPE`, i.`PARENT_ID`, i.`idx_PROCES_INIT_ID`, pi.`idx_PROCES_WITH_GROUPS_ID`
- from `CRM_PROCES_idx_TEMP` i
- join `CRM_PROCES_idx_TEMP` pi on(pi.`idx_PROCES_INIT_ID`=i.`idx_PROCES_INIT_ID`)
- where i.`idx_PROCES_WITH_GROUPS_ID` is null
- and pi.`idx_PROCES_WITH_GROUPS_ID` is not null
- and pi.`idx_PROCES_WITH_GROUPS_ID`>0
- and i.`TYPE`!='GOTO_AND_RETURN'
- ;
- SQL;
- $sqlList__TODO_IS_NEEDED__['10-delete-where-!idx_PROCES_WITH_GROUPS_ID'] = <<<SQL
- delete from `CRM_PROCES_idx_TEMP` where `idx_PROCES_WITH_GROUPS_ID` is null or `idx_PROCES_WITH_GROUPS_ID`=0;
- SQL;
- $sqlList['GOTO_AND_RET.3--fill-goto_and_return_lvl2'] = <<<SQL
- -- GOTO_AND_RET.3--fill-goto_and_return_lvl2
- -- gc p(5105) is GOTO_AND_RETURN_CHILD pID(5061) pI(5039) pIM(5040) pG(5040)
- -- gc p(5105) is GOTO_AND_RETURN_CHILD pID(5061) pI(5039) pIM(5100) pG(5100)
- -- gg p(5103) is GOTO_AND_RETURN pID(5105) pI(5103) pIM(5039) pG(NULL)
- -- + p(5103) is GOTO_AND_RETURN_LVL2 pID(5105) pI(5103) pIM(5040) pG(5040)
- -- + p(5103) is GOTO_AND_RETURN_LVL2 pID(5105) pI(5103) pIM(5100) pG(5100)
- 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`)
- select gg.`ID_PROCES` as `ID_PROCES`
- , 'GOTO_AND_RETURN_LVL2' as `TYPE`
- , gg.`PARENT_ID` as `PARENT_ID`
- , gg.`idx_PROCES_INIT_ID` as `idx_PROCES_INIT_ID`
- , gc.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
- , 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`
- -- , 'gc', gc.*, 'gg', gg.*
- from `CRM_PROCES_idx_TEMP` gg
- join `CRM_PROCES_idx_TEMP` gc on(gc.`ID_PROCES`=gg.`PARENT_ID`)
- where gg.`TYPE`='GOTO_AND_RETURN'
- and gc.`TYPE`='GOTO_AND_RETURN_CHILD'
- ;
- SQL;
- $sqlList['GOTO_AND_RET.3--fill-childrens-of-goto_and_return_lvl2'] = <<<SQL
- -- GOTO_AND_RET.3--fill-childrens-of-goto_and_return_lvl2
- -- i p(5103) is GOTO_AND_RETURN_LVL2 pID(5105) pI(5103) pIM(5040) pG(5040)
- -- i p(5103) is GOTO_AND_RETURN_LVL2 pID(5105) pI(5103) pIM(5100) pG(5100)
- -- ic p(5104) is GOTO_AND_RETURN_CHILD pID(5103) pI(5103) pIM(5039) pG(NULL)
- -- ic p(5104) is GOTO_AND_RETURN_CHILD pID(5103) pI(5103) pIM(5039) pG(NULL)
- -- + p(5104) is GOTO_AND_RETURN_CHILD_LVL2 pID(5103) pI(5103) pIM(5100) pG(5100)
- -- + p(5104) is GOTO_AND_RETURN_CHILD_LVL2 pID(5103) pI(5103) pIM(5040) pG(5040)
- 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`)
- select ic.`ID_PROCES`
- , 'GOTO_AND_RETURN_CHILD_LVL2' as `TYPE`
- , ic.`PARENT_ID` as `PARENT_ID`
- , ic.`idx_PROCES_INIT_ID` as `idx_PROCES_INIT_ID`
- , i.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
- , 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`
- -- , 'i', i.*, 'ic', ic.*
- from `CRM_PROCES_idx_TEMP` i
- join `CRM_PROCES_idx_TEMP` ic on(
- ic.`idx_PROCES_INIT_ID`=i.`ID_PROCES`
- and ic.`ID_PROCES`!=i.`ID_PROCES`
- and ic.`TYPE`='GOTO_AND_RETURN_CHILD'
- )
- where i.`TYPE`='GOTO_AND_RETURN_LVL2'
- ;
- SQL;
- $sqlList['IDX.1--clear-CRM_PROCES_idx'] = <<<SQL
- -- IDX.1--clear-CRM_PROCES_idx
- truncate table `CRM_PROCES_idx`;
- SQL;
- $sqlList['IDX.2--update-CRM_PROCES_idx-from-temp'] = <<<SQL
- -- IDX.2--update-CRM_PROCES_idx-from-temp
- insert into `CRM_PROCES_idx` (`ID_PROCES`,`PARENT_ID`,`TYPE`,`idx_PROCES_INIT_ID`,`idx_MAIN_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
- 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`
- from `CRM_PROCES_idx_TEMP` i
- where i.`idx_PROCES_INIT_ID`>0 and i.`idx_PROCES_WITH_GROUPS_ID` is not null
- ;
- SQL;
- $sqlList__TODO_OFF_time_0_1__['P.1--update-CRM_PROCES-idx_PROCES_INIT_ID'] = <<<SQL
- update `CRM_PROCES` p
- 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)
- ;
- SQL;
- $sqlList['GP.1--clear-CRM_PROCES_idx_GROUP_to_PROCES'] = <<<SQL
- -- GP.1--clear-CRM_PROCES_idx_GROUP_to_PROCES
- truncate table `CRM_PROCES_idx_GROUP_to_PROCES`;
- SQL;
- $sqlList['GP.2--fill-CRM_PROCES_idx_GROUP_to_PROCES'] = <<<SQL
- -- GP.2--fill-CRM_PROCES_idx_GROUP_to_PROCES
- insert ignore into `CRM_PROCES_idx_GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
- select i.`ID_PROCES` as ID_PROCES, z.`ID` as ID_GROUP
- from `CRM_PROCES_idx` i
- join `CRM_WSKAZNIK` wsk on(wsk.`ID_PROCES`=i.`idx_PROCES_WITH_GROUPS_ID`
- and wsk.`A_STATUS` in('NORMAL', 'WAITING')
- )
- join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
- and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
- and z.`A_STATUS` in('NORMAL', 'WAITING')
- )
- join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
- and przyp.`FORM_TREAT` & 8 -- has perm X
- )
- -- where i.`TYPE` in('PROCES_INIT', 'GOTO_AND_RETURN')
- ;
- SQL;
- $sqlList['CONF.2--set-end-time-in-config'] = <<<SQL
- -- CONF.2--set-end-time-in-config
- replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values ('tbl_indexer_CRM_PROCES_last_exec_end', NOW());
- SQL;
- $db = DB::getDB();
- if ($db->has_errors()) {
- throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
- }
- $DBG_TIME = true;//('1' == V::get('DBG_TIME', '', $_GET));
- $dbgExecTime = new DebugExecutionTime();
- if ($DBG_TIME) $dbgExecTime->activate();
- $dbgExecTime->log('start');
- $sqlExecuteLimit = V::get('DBG_LIMIT', 0, $_GET);
- $sqlExecuteCounter = 0;
- foreach ($sqlList as $sqlName => $sql) {
- $sqlExecuteCounter++;
- echo'<p>['.$sqlExecuteCounter.'] Executing sql "'.$sqlName.'" ... </p>';
- $res = $db->query($sql);
- if ($db->has_errors()) {
- throw new Exception("DB Errors at sql '{$sqlName}': " . implode("\n<br>", $db->get_errors()));
- }
- if($DBG_TIME) $dbgExecTime->log("execute sql {$sqlName}");
- echo'<p>['.$sqlExecuteCounter.'] DONE sql "'.$sqlName.'"</p>';
- if ($sqlExecuteLimit > 0 && $sqlExecuteCounter >= $sqlExecuteLimit) break;
- }
- if($DBG_TIME) $dbgExecTime->printDebug();
- }
- public function reinstallAction() {
- $this->reinstall();
- die('OK');
- }
- public function reinstall() {
- $sqlList = array();
- $sqlList['RemoveTable_CRM_PROCES_idx'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx`";
- $sqlList['InstallTable_CRM_PROCES_idx'] = <<<SQL
- CREATE TABLE IF NOT EXISTS `CRM_PROCES_idx` (
- `ID_PROCES` int(11) NOT NULL
- , `PARENT_ID` int(11) NOT NULL DEFAULT '0'
- , `TYPE` varchar(32) NOT NULL DEFAULT ''
- , `idx_PROCES_INIT_ID` int(11) NOT NULL DEFAULT '0'
- , `idx_MAIN_PROCES_INIT_ID` int(11) NOT NULL DEFAULT '0'
- , `idx_PROCES_WITH_GROUPS_ID` int(11) NULL DEFAULT NULL
- -- , `idx_PATH` text NOT NULL
- , KEY `ID_PROCES` (`ID_PROCES`)
- , KEY `PARENT_ID` (`PARENT_ID`)
- , KEY `idx_PROCES_INIT_ID` (`idx_PROCES_INIT_ID`)
- , KEY `idx_MAIN_PROCES_INIT_ID` (`idx_MAIN_PROCES_INIT_ID`)
- , KEY `idx_PROCES_WITH_GROUPS_ID` (`idx_PROCES_WITH_GROUPS_ID`)
- -- , UNIQUE KEY `uniq__idx_PROCES_WITH_GROUPS_ID` (`ID_PROCES`,`idx_PROCES_WITH_GROUPS_ID`)
- ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
- SQL;
- $sqlList['RemoveTable_CRM_PROCES_idx_TEMP'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_TEMP`";
- $sqlList['InstallTable_CRM_PROCES_idx_TEMP'] = <<<SQL
- CREATE TABLE IF NOT EXISTS `CRM_PROCES_idx_TEMP` (
- `ID_PROCES` int(11) NOT NULL
- , `PARENT_ID` int(11) NOT NULL DEFAULT '0'
- , `TYPE` varchar(32) NOT NULL DEFAULT ''
- , `idx_PROCES_INIT_ID` int(11) NOT NULL DEFAULT '0'
- , `idx_MAIN_PROCES_INIT_ID` int(11) NULL DEFAULT '0'
- , `idx_PROCES_WITH_GROUPS_ID` int(11) NULL DEFAULT NULL
- -- , `idx_PATH` text NOT NULL
- , KEY `ID_PROCES` (`ID_PROCES`)
- , KEY `PARENT_ID` (`PARENT_ID`)
- , KEY `idx_PROCES_INIT_ID` (`idx_PROCES_INIT_ID`)
- , KEY `idx_MAIN_PROCES_INIT_ID` (`idx_MAIN_PROCES_INIT_ID`)
- , KEY `idx_PROCES_WITH_GROUPS_ID` (`idx_PROCES_WITH_GROUPS_ID`)
- , UNIQUE KEY `uniq__idx_PROCES_WITH_GROUPS_ID` (`ID_PROCES`,`idx_PROCES_WITH_GROUPS_ID`)
- ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
- SQL;
- $sqlList['RemoveOldTableGroupToInit'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_GROUPS_to_INIT`";
- $sqlList['RemoveTableGroupToInit'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_GROUP_to_PROCES`";
- $sqlList['InstallTableGroupToInit'] = <<<SQL
- CREATE TABLE IF NOT EXISTS `CRM_PROCES_idx_GROUP_to_PROCES` (
- `ID_PROCES` int(11) NOT NULL
- , `ID_GROUP` int(11) NOT NULL
- , `HAS_PERM_R` tinyint(1) NOT NULL DEFAULT 0
- , `HAS_PERM_X` tinyint(1) NOT NULL DEFAULT 0
- , KEY `ID_PROCES` (`ID_PROCES`)
- , KEY `ID_GROUP` (`ID_GROUP`)
- , UNIQUE KEY `uniq__GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
- ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
- SQL;
- $sqlList['RemoveTableGroupToInitPerm'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_GROUP_to_PROCES_PERM`";// TODO: to replace `CRM_PROCES_idx_GROUP_to_PROCES`
- $sqlList['InstallTableGroupToInitPerm'] = <<<SQL
- CREATE TABLE IF NOT EXISTS `CRM_PROCES_idx_GROUP_to_PROCES_PERM` (
- `ID_PROCES` int(11) NOT NULL
- , `ID_GROUP` int(11) NOT NULL
- , `HAS_PERM_R` tinyint(1) NOT NULL DEFAULT 0
- , `HAS_PERM_X` tinyint(1) NOT NULL DEFAULT 0
- , KEY `ID_PROCES` (`ID_PROCES`)
- , KEY `ID_GROUP` (`ID_GROUP`)
- , UNIQUE KEY `uniq__GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
- ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
- SQL;
- $sqlList['RemoveViewUserToProces'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_USER_to_PROCES_VIEW`";
- $sqlList['InstallViewUserToProces'] = <<<SQL
- CREATE VIEW `CRM_PROCES_idx_USER_to_PROCES_VIEW` AS
- select concat(u.`ID`, gi.`ID_PROCES`) as ID
- , gi.`ID_PROCES` as `ID_PROCES`
- , u.`ADM_ACCOUNT` as `ADM_ACCOUNT`
- , u.`EMPLOYEE_TYPE` as `EMPLOYEE_TYPE`
- , u.`A_STATUS` as `A_STATUS`
- from `ADMIN_USERS` u
- join `CRM_AUTH_PROFILE` au on(au.`REMOTE_ID`=u.`ID` and au.`REMOTE_TABLE`='ADMIN_USERS' and au.`A_STATUS` in('NORMAL','WAITING'))
- join `CRM_PROCES_idx_GROUP_to_PROCES` gi on(gi.`ID_GROUP`=au.`ID_ZASOB`)
- SQL;
- $sqlList['RemoveViewUserToInit'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_USER_to_INIT_VIEW`";
- $sqlList['InstallViewUserToInit'] = <<<SQL
- CREATE VIEW `CRM_PROCES_idx_USER_to_INIT_VIEW` AS
- select concat(u.`ID`, p.`ID`) as ID
- , p.`ID` as `ID_PROCES_INIT`
- , p.`DESC` as `DESC`
- , u.`ADM_ACCOUNT` as `ADM_ACCOUNT`
- , u.`EMPLOYEE_TYPE` as `EMPLOYEE_TYPE`
- , u.`A_STATUS` as `A_STATUS`
- from `ADMIN_USERS` u
- join `CRM_AUTH_PROFILE` au on(au.`REMOTE_ID`=u.`ID` and au.`REMOTE_TABLE`='ADMIN_USERS' and au.`A_STATUS` in('NORMAL','WAITING'))
- join `CRM_PROCES_idx_GROUP_to_PROCES` gi on(gi.`ID_GROUP`=au.`ID_ZASOB`)
- join `CRM_PROCES_idx` i on(i.`ID_PROCES`=gi.`ID_PROCES`)
- join `CRM_PROCES` p on(p.`ID`=i.`idx_PROCES_INIT_ID`)
- where p.`TYPE`='PROCES_INIT'
- group by u.`ID`, p.`ID`
- SQL;
- /* Usage - find proces init for user by $userLogin:
- SELECT *
- FROM `CRM_PROCES_idx_USER_to_INIT_VIEW`
- WHERE `ADM_ACCOUNT` LIKE '{$userLogin}'
- GROUP BY ID_PROCES_INIT
- */
- $sqlList['RemoveViewGroupToInit'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_GROUP_to_INIT_VIEW`";
- $sqlList['InstallViewGroupToInit'] = <<<SQL
- CREATE VIEW `CRM_PROCES_idx_GROUP_to_INIT_VIEW` AS
- select concat(gi.`ID_GROUP`, p.`ID`) as ID
- , p.`ID` as `ID_PROCES_INIT`
- , p.`DESC` as `DESC`
- , gi.`ID_GROUP` as `ID_GROUP`
- from `CRM_PROCES_idx_GROUP_to_PROCES` gi
- join `CRM_PROCES_idx` i on(i.`ID_PROCES`=gi.`ID_PROCES`)
- join `CRM_PROCES` p on(p.`ID`=i.`idx_PROCES_INIT_ID`)
- where p.`TYPE`='PROCES_INIT'
- group by gi.`ID_GROUP`, p.`ID`
- SQL;
- $sqlList['RemoveViewTablesInfo'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLES_INFO_VIEW`";
- $sqlList['InstallViewTablesInfo'] = <<<SQL
- CREATE VIEW `CRM_PROCES_idx_TABLES_INFO_VIEW` AS
- select z.`ID` as `ID_CELL`
- , z.`DESC` as `CELL_NAME`
- , z.`DESC_PL` as `CELL_LABEL`
- , z.`OPIS` as `CELL_DESCRIPTION`
- , z.`SORT_PRIO` as `CELL_SORT_PRIO`
- , zp.`ID` as `ID_TABLE`
- , zp.`DESC` as `TABLE_NAME`
- , zp.`DESC_PL` as `TABLE_LABEL`
- , zp.`OPIS` as `TABLE_DESCRIPTION`
- , zpp.`ID` as `ID_DATABASE`
- from `CRM_LISTA_ZASOBOW` z
- join `CRM_LISTA_ZASOBOW` zp on(zp.`ID`=z.`PARENT_ID` and zp.`TYPE`='TABELA' and zp.`A_STATUS` in('WAITING','NORMAL'))
- join `CRM_LISTA_ZASOBOW` zpp on(zpp.`ID`=zp.`PARENT_ID`
- -- TODO: and zpp.`TYPE`='BAZA_DANYCH...'
- and zpp.`A_STATUS` in('WAITING','NORMAL')
- )
- where z.`TYPE`='KOMORKA'
- and z.`A_STATUS` in('WAITING','NORMAL')
- SQL;
- $sqlList['RemoveViewTableToProces'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW`";
- $sqlList['InstallViewTableToProces'] = <<<SQL
- CREATE VIEW `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW` AS
- select tv.`ID_CELL` as `ID_CELL`
- , tv.`CELL_NAME` as `CELL_NAME`
- , tv.`ID_TABLE` as `ID_TABLE`
- , tv.`TABLE_NAME` as `TABLE_NAME`
- , tv.`TABLE_LABEL` as `TABLE_LABEL`
- , tv.`TABLE_DESCRIPTION` as `TABLE_DESCRIPTION`
- , tv.`ID_DATABASE` as `ID_DATABASE`
- , wsk.`ID_PROCES` as `ID_PROCES`
- from `CRM_PROCES_idx_TABLES_INFO_VIEW` tv
- join `CRM_WSKAZNIK` wsk on(wsk.`ID_ZASOB`=tv.`ID_CELL` and wsk.`A_STATUS` in('WAITING','NORMAL'))
- join `CRM_PROCES` p on(p.`ID`=wsk.`ID_PROCES` and p.`A_STATUS` in('WAITING','NORMAL'))
- SQL;
- $sqlList['RemoveViewUrlToProces'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_URL_TO_PROCES_VIEW`";
- $sqlList['InstallViewUrlToProces'] = <<<SQL
- CREATE VIEW `CRM_PROCES_idx_URL_TO_PROCES_VIEW` AS
- select z.`ID` as `ID_URL`
- , z.`DESC` as `URL_LINK`
- , z.`DESC_PL` as `URL_LABEL`
- , z.`OPIS` as `URL_DESC`
- , wsk.`ID_PROCES` as `ID_PROCES`
- from `CRM_LISTA_ZASOBOW` z
- join `CRM_WSKAZNIK` wsk on(wsk.`ID_ZASOB`=z.`ID` and wsk.`A_STATUS` in('WAITING','NORMAL'))
- join `CRM_PROCES` p on(p.`ID`=wsk.`ID_PROCES` and p.`A_STATUS` in('WAITING','NORMAL'))
- where z.`TYPE`='URL'
- and z.`A_STATUS` in('WAITING','NORMAL')
- SQL;
- $sqlList['RemoveViewTableCellToProcesWithPerms'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLE_TO_PROCES_PERMS_VIEW`";
- $sqlList['InstallViewTableCellToProcesWithPerms'] = <<<SQL
- CREATE VIEW `CRM_PROCES_idx_TABLE_TO_PROCES_PERMS_VIEW` AS
- select tv.`ID_CELL` as `ID_CELL`
- , tv.`CELL_NAME` as `CELL_NAME`
- , tv.`ID_TABLE` as `ID_TABLE`
- , tv.`TABLE_NAME` as `TABLE_NAME`
- , tv.`TABLE_LABEL` as `TABLE_LABEL`
- , tv.`TABLE_DESCRIPTION` as `TABLE_DESCRIPTION`
- , tv.`ID_DATABASE` as `ID_DATABASE`
- , wsk.`ID_PROCES` as `ID_PROCES`
- , replace(przyp.`FORM_TREAT`, ',', '') as FORM_TREAT
- , IF(przyp.`FORM_TREAT` & 2, 1, 0) as PERM_R
- , IF(przyp.`FORM_TREAT` & 4, 1, 0) as PERM_W
- , IF(przyp.`FORM_TREAT` & 8, 1, 0) as PERM_X
- , IF(przyp.`FORM_TREAT` & 16, 1, 0) as PERM_C
- , IF(przyp.`FORM_TREAT` & 32, 1, 0) as PERM_S
- , IF(przyp.`FORM_TREAT` & 64, 1, 0) as PERM_O
- , IF(przyp.`FORM_TREAT` & 128, 1, 0) as PERM_V
- , IF(przyp.`FORM_TREAT` & 256, 1, 0) as PERM_E
- from `CRM_PROCES_idx_TABLES_INFO_VIEW` tv
- join `CRM_WSKAZNIK` wsk on(wsk.`ID_ZASOB`=tv.`ID_CELL` and wsk.`A_STATUS` in('WAITING','NORMAL'))
- join `CRM_PROCES` p on(p.`ID`=wsk.`ID_PROCES` and p.`A_STATUS` in('WAITING','NORMAL'))
- join `CRM_PRZYPADEK` as przyp on (przyp.`ID`=wsk.`ID_PRZYPADEK`)
- SQL;
- $sqlExample_TableCellToProcesForInitTable = <<<SQL
- select tv.`ID_CELL` as `ID_CELL`
- , tv.`CELL_NAME` as `CELL_NAME`
- , tv.`CELL_LABEL` as `CELL_LABEL`
- , tv.`CELL_DESC` as `CELL_DESC`
- , tv.`CELL_SORT_PRIO` as `SORT_PRIO`
- , tv.`ID_TABLE` as `ID_TABLE`
- , tv.`TABLE_NAME` as `TABLE_NAME`
- , wsk.`ID_PROCES` as `ID_PROCES`
- , sum(IF(przyp.`FORM_TREAT` & 2, 1, 0)) as PERM_R
- , sum(IF(przyp.`FORM_TREAT` & 4, 1, 0)) as PERM_W
- , sum(IF(przyp.`FORM_TREAT` & 8, 1, 0)) as PERM_X
- , sum(IF(przyp.`FORM_TREAT` & 16, 1, 0)) as PERM_C
- , sum(IF(przyp.`FORM_TREAT` & 32, 1, 0)) as PERM_S
- , sum(IF(przyp.`FORM_TREAT` & 64, 1, 0)) as PERM_O
- , sum(IF(przyp.`FORM_TREAT` & 128, 1, 0)) as PERM_V
- , sum(IF(przyp.`FORM_TREAT` & 256, 1, 0)) as PERM_E
- from `CRM_PROCES_idx_TABLES_INFO_VIEW` tv
- join `CRM_WSKAZNIK` wsk on(wsk.`ID_ZASOB`=tv.`ID_CELL` and wsk.`A_STATUS` in('WAITING','NORMAL'))
- join `CRM_PROCES` p on(p.`ID`=wsk.`ID_PROCES` and p.`A_STATUS` in('WAITING','NORMAL'))
- join `CRM_PRZYPADEK` as przyp on (przyp.`ID`=wsk.`ID_PRZYPADEK`)
- where tv.`ID_TABLE`='{$idTable}'
- and wsk.`ID_PROCES` in({$sqlIdProcesList})
- group by tv.`ID_CELL`, wsk.`ID_PROCES`
- order by tv.`CELL_SORT_PRIO`
- SQL;
- $sqlExample_UrlToUserProces = <<<SQL
- select zpv.*
- from `CRM_PROCES_idx_URL_TO_PROCES_VIEW` zpv
- where zpv.`ID_PROCES` in({$sqlIdProcesList})
- SQL;
- $sqlExample_sqlIdProcesList = <<<SQL
- select gi.`ID_PROCES`
- from `CRM_PROCES_idx_GROUP_to_PROCES` gi
- where gi.`ID_GROUP` in({$idUserGroupList})
- SQL;
- $sqlList_BUG = <<<SQL
- -- BUG #1349 - View's SELECT contains a subquery in the FROM clause
- CREATE VIEW `CRM_PROCES_idx_TABLE_TO_USER_VIEW` AS
- select tpvg.`ID_PROCES`, tpvg.`TABLE_NAME`
- , upv.`ADM_ACCOUNT`
- , upv.`EMPLOYEE_TYPE`
- , upv.`A_STATUS`
- from
- (select tpv.`ID_PROCES`, tpv.`TABLE_NAME`
- from `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW` tpv
- group by tpv.`TABLE_NAME`, tpv.`ID_PROCES`) as tpvg
- join `CRM_PROCES_idx_USER_to_PROCES_VIEW` upv on(upv.`ID_PROCES`=tpvg.`ID_PROCES`)
- SQL;
- $sqlList['RemoveViewTableToProcesGrouped'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLE_TO_PROCES_GROUPED_VIEW`";
- $sqlList['InstallViewTableToProcesGrouped'] = <<<SQL
- CREATE VIEW `CRM_PROCES_idx_TABLE_TO_PROCES_GROUPED_VIEW` AS
- select tpv.`ID_TABLE`
- , tpv.`TABLE_NAME`
- , tpv.`TABLE_LABEL`
- , tpv.`TABLE_DESCRIPTION`
- , tpv.`ID_DATABASE`
- , tpv.`ID_PROCES`
- from `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW` tpv
- group by tpv.`ID_TABLE`, tpv.`ID_PROCES`
- SQL;
- $sqlList['RemoveViewTableToUser'] = "DROP VIEW IF EXISTS `CRM_PROCES_idx_TABLE_TO_USER_VIEW`";
- $sqlList['InstallViewTableToUser'] = <<<SQL
- CREATE VIEW `CRM_PROCES_idx_TABLE_TO_USER_VIEW` AS
- select tpgv.`ID_TABLE`, tpgv.`TABLE_NAME`, tpgv.`ID_PROCES`
- , upv.`ADM_ACCOUNT`
- , upv.`EMPLOYEE_TYPE`
- , upv.`A_STATUS`
- from `CRM_PROCES_idx_TABLE_TO_PROCES_GROUPED_VIEW` as tpgv
- join `CRM_PROCES_idx_USER_to_PROCES_VIEW` upv on(upv.`ID_PROCES`=tpgv.`ID_PROCES`)
- SQL;
- $sqlList['RemoveProcedure'] = "DROP PROCEDURE if exists `update_proces_init_idx_rec`";
- // throws errors:
- // #1146 - Table '{DATABASE_NAME}.P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Already executed' doesn't exist
- $sqlList['CreateProcedure'] = <<<SQL
- CREATE PROCEDURE `update_proces_init_idx_rec`()
- BEGIN
- SET @enabled = FALSE;
- SET @conf_last_exec_lock_key = 'tbl_indexer_CRM_PROCES_last_exec_lock_date';
- SET @conf_last_exec_start_key = 'tbl_indexer_CRM_PROCES_last_exec_start';
- SET @conf_last_exec_end_key = 'tbl_indexer_CRM_PROCES_last_exec_end';
- -- if already runnig mysql will throw "Commands out of sync; you can't run this command now"
- IF (select count(1) from `CRM_CONFIG` where `conf_key`=@conf_last_exec_lock_key and `conf_val`!='')>0 THEN
- UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Already executed` SET x=1;
- ELSE BEGIN
- -- CONF.1--set-start-time-in-config
- replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values (@conf_last_exec_lock_key, NOW()), (@conf_last_exec_start_key, NOW());
- -- I.1--truncate-table
- truncate table `CRM_PROCES_idx_TEMP`;
- -- I.2--fill-CRM_PROCES_idx_TEMP
- insert into `CRM_PROCES_idx_TEMP` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_MAIN_PROCES_INIT_ID`)
- select p.`ID` as `ID_PROCES`
- , p.`TYPE` as `TYPE`
- , p.`PARENT_ID` as `PARENT_ID`
- , IF(p.`TYPE`='PROCES_INIT', p.`ID`, 0) as `idx_PROCES_INIT_ID`
- , IF(p.`TYPE`='PROCES_INIT', p.`ID`, 0) as `idx_MAIN_PROCES_INIT_ID`
- from `CRM_PROCES` p
- where p.`A_STATUS` in('NORMAL','WAITING')
- ;
- -- G.1--before-while-2-set-initial-proc_with_groups_id
- update `CRM_PROCES_idx_TEMP` i
- join `CRM_WSKAZNIK` as wsk on(wsk.`ID_PROCES`=i.`ID_PROCES`
- and wsk.`A_STATUS` in('NORMAL', 'WAITING')
- )
- join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
- and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
- and z.`A_STATUS` in('NORMAL', 'WAITING')
- )
- join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
- and przyp.`FORM_TREAT` & 8 -- has perm X
- )
- set
- i.`idx_PROCES_WITH_GROUPS_ID`=i.`ID_PROCES`
- where i.`idx_PROCES_INIT_ID`>0
- ;
- -- G.2--while-2-loop-update-proc_with_groups_id-from-parent
- SET @i = 0;
- SET @loopLomit = 100;
- SET @groupCnt = 1;
- WHILE @i < @loopLomit and @groupCnt > 0 DO
- update `CRM_PROCES_idx_TEMP` as p
- join `CRM_PROCES_idx_TEMP` as pp on(
- pp.`ID_PROCES`=p.`PARENT_ID`
- and pp.`idx_PROCES_WITH_GROUPS_ID` is not null
- and pp.`idx_PROCES_WITH_GROUPS_ID`>0
- )
- set p.`idx_PROCES_WITH_GROUPS_ID`=pp.`idx_PROCES_WITH_GROUPS_ID`
- where p.`idx_PROCES_WITH_GROUPS_ID` is null
- ;
- SET @groupCnt = ROW_COUNT();
- SET @i = @i + 1;
- END WHILE;
- -- P_INIT_ID.1--fill_idx_INIT
- SET @i = 0;
- SET @loopLomit = 100;
- SET @pinitCnt = 1;
- WHILE @i < @loopLomit and @pinitCnt > 0 DO
- update `CRM_PROCES_idx_TEMP` p
- join `CRM_PROCES_idx_TEMP` pp on(pp.`ID_PROCES`=p.`PARENT_ID`)
- set p.`idx_PROCES_INIT_ID`=IF(p.`idx_PROCES_INIT_ID`>0, p.`idx_PROCES_INIT_ID`, pp.`idx_PROCES_INIT_ID`)
- , p.`idx_MAIN_PROCES_INIT_ID`=pp.`idx_MAIN_PROCES_INIT_ID`
- -- // TODO:?: update here `idx_MAIN_PROCES_INIT_ID`
- where p.`idx_PROCES_INIT_ID`=0 and pp.`idx_PROCES_INIT_ID`>0
- ;
- SET @pinitCnt = ROW_COUNT();
- SET @i = @i + 1;
- END WHILE;
- -- GOTO_AND_RET.1--from-7-fill-goto_and_return
- 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`)
- select g.`ID`
- , 'GOTO_AND_RETURN' as `TYPE`
- , p.`ID` as `PARENT_ID`
- , g.`ID` as `idx_PROCES_INIT_ID`
- , i.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
- , 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`
- from `CRM_PROCES` p
- join `CRM_PROCES_idx_TEMP` i on(i.`ID_PROCES`=p.`ID`)
- join `CRM_PROCES` g on(g.`ID`=p.`IF_TRUE_GOTO`
- and g.`TYPE`='PROCES_INIT'
- and g.`A_STATUS` in('NORMAL','WAITING')
- and p.`IF_TRUE_GOTO_FLAG`='GOTO_AND_RETURN'
- and p.`IF_TRUE_GOTO`>0
- )
- join `CRM_PROCES_idx_TEMP` gi on(gi.`ID_PROCES`=g.`ID`)
- where p.`A_STATUS` in('NORMAL','WAITING')
- ;
- -- GOTO_AND_RET.2--fill-childrens-of-goto_and_return
- 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`)
- select ic.`ID_PROCES`
- , 'GOTO_AND_RETURN_CHILD' as `TYPE`
- , ic.`PARENT_ID` as `PARENT_ID`
- , ic.`idx_PROCES_INIT_ID` as `idx_PROCES_INIT_ID`
- , i.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
- , 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`
- from `CRM_PROCES_idx_TEMP` i
- join `CRM_PROCES_idx_TEMP` ic on(
- ic.`idx_PROCES_INIT_ID`=i.`ID_PROCES`
- and ic.`ID_PROCES`!=i.`ID_PROCES`
- )
- where i.`TYPE`='GOTO_AND_RETURN'
- ;
- -- GOTO_AND_RET.3--fill-goto_and_return_lvl2
- -- gc p(5105) is GOTO_AND_RETURN_CHILD pID(5061) pI(5039) pIM(5040) pG(5040)
- -- gc p(5105) is GOTO_AND_RETURN_CHILD pID(5061) pI(5039) pIM(5100) pG(5100)
- -- gg p(5103) is GOTO_AND_RETURN pID(5105) pI(5103) pIM(5039) pG(NULL)
- -- + p(5103) is GOTO_AND_RETURN_LVL2 pID(5105) pI(5103) pIM(5040) pG(5040)
- -- + p(5103) is GOTO_AND_RETURN_LVL2 pID(5105) pI(5103) pIM(5100) pG(5100)
- 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`)
- select gg.`ID_PROCES` as `ID_PROCES`
- , 'GOTO_AND_RETURN_LVL2' as `TYPE`
- , gg.`PARENT_ID` as `PARENT_ID`
- , gg.`idx_PROCES_INIT_ID` as `idx_PROCES_INIT_ID`
- , gc.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
- , 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`
- -- , 'gc', gc.*, 'gg', gg.*
- from `CRM_PROCES_idx_TEMP` gg
- join `CRM_PROCES_idx_TEMP` gc on(gc.`ID_PROCES`=gg.`PARENT_ID`)
- where gg.`TYPE`='GOTO_AND_RETURN'
- and gc.`TYPE`='GOTO_AND_RETURN_CHILD'
- ;
- -- GOTO_AND_RET.3--fill-childrens-of-goto_and_return_lvl2
- -- i p(5103) is GOTO_AND_RETURN_LVL2 pID(5105) pI(5103) pIM(5040) pG(5040)
- -- i p(5103) is GOTO_AND_RETURN_LVL2 pID(5105) pI(5103) pIM(5100) pG(5100)
- -- ic p(5104) is GOTO_AND_RETURN_CHILD pID(5103) pI(5103) pIM(5039) pG(NULL)
- -- ic p(5104) is GOTO_AND_RETURN_CHILD pID(5103) pI(5103) pIM(5039) pG(NULL)
- -- + p(5104) is GOTO_AND_RETURN_CHILD_LVL2 pID(5103) pI(5103) pIM(5100) pG(5100)
- -- + p(5104) is GOTO_AND_RETURN_CHILD_LVL2 pID(5103) pI(5103) pIM(5040) pG(5040)
- 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`)
- select ic.`ID_PROCES`
- , 'GOTO_AND_RETURN_CHILD_LVL2' as `TYPE`
- , ic.`PARENT_ID` as `PARENT_ID`
- , ic.`idx_PROCES_INIT_ID` as `idx_PROCES_INIT_ID`
- , i.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
- , 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`
- -- , 'i', i.*, 'ic', ic.*
- from `CRM_PROCES_idx_TEMP` i
- join `CRM_PROCES_idx_TEMP` ic on(
- ic.`idx_PROCES_INIT_ID`=i.`ID_PROCES`
- and ic.`ID_PROCES`!=i.`ID_PROCES`
- and ic.`TYPE`='GOTO_AND_RETURN_CHILD'
- )
- where i.`TYPE`='GOTO_AND_RETURN_LVL2'
- ;
- -- IDX.1--clear-CRM_PROCES_idx
- truncate table `CRM_PROCES_idx`;
- -- IDX.2--update-CRM_PROCES_idx-from-temp
- insert into `CRM_PROCES_idx` (`ID_PROCES`,`PARENT_ID`,`TYPE`,`idx_PROCES_INIT_ID`,`idx_MAIN_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
- 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`
- from `CRM_PROCES_idx_TEMP` i
- where i.`idx_PROCES_INIT_ID`>0 and i.`idx_PROCES_WITH_GROUPS_ID` is not null
- ;
- -- TODO OFF: time ~0.1 P.1--update-CRM_PROCES-idx_PROCES_INIT_ID
- -- update `CRM_PROCES` p
- -- 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)
- -- ;
- -- GP.1--clear-CRM_PROCES_idx_GROUP_to_PROCES
- truncate table `CRM_PROCES_idx_GROUP_to_PROCES`;
- -- GP.2--fill-CRM_PROCES_idx_GROUP_to_PROCES
- insert ignore into `CRM_PROCES_idx_GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
- select i.`ID_PROCES` as ID_PROCES, z.`ID` as ID_GROUP
- from `CRM_PROCES_idx` i
- join `CRM_WSKAZNIK` wsk on(wsk.`ID_PROCES`=i.`idx_PROCES_WITH_GROUPS_ID`
- and wsk.`A_STATUS` in('NORMAL', 'WAITING')
- )
- join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
- and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
- and z.`A_STATUS` in('NORMAL', 'WAITING')
- )
- join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
- and przyp.`FORM_TREAT` & 8 -- has perm X
- )
- -- where i.`TYPE` in('PROCES_INIT', 'GOTO_AND_RETURN')
- ;
- -- GP.2--clear-CRM_PROCES_idx_GROUP_to_PROCES_PERM
- truncate table `CRM_PROCES_idx_GROUP_to_PROCES_PERM`;
- -- GP.3--fill-CRM_PROCES_idx_GROUP_to_PROCES_PERM
- insert into `CRM_PROCES_idx_GROUP_to_PROCES_PERM` (`ID_PROCES`,`ID_GROUP`,`HAS_PERM_R`,`HAS_PERM_X`)
- select i.`ID_PROCES` as `_ID_PROCES`
- , z.`ID` as `_ID_GROUP`
- , IF(przyp.`FORM_TREAT` & 2, 1, 0) as `_HAS_PERM_R`
- , IF(przyp.`FORM_TREAT` & 8, 1, 0) as `_HAS_PERM_X`
- from `CRM_PROCES_idx` i
- join `CRM_WSKAZNIK` wsk on(wsk.`ID_PROCES`=i.`idx_PROCES_WITH_GROUPS_ID`
- and wsk.`A_STATUS` in('NORMAL', 'WAITING')
- )
- join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
- and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
- and z.`A_STATUS` in('NORMAL', 'WAITING')
- )
- join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`)
- -- where i.`TYPE` in('PROCES_INIT', 'GOTO_AND_RETURN')
- ON DUPLICATE KEY UPDATE `HAS_PERM_R`=GREATEST(`HAS_PERM_R`, IF(przyp.`FORM_TREAT` & 2, 1, 0))
- , `HAS_PERM_X`=GREATEST(`HAS_PERM_X`, IF(przyp.`FORM_TREAT` & 8, 1, 0))
- ;
- -- CONF.2--set-end-time-in-config
- replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values (@conf_last_exec_lock_key, ''), (@conf_last_exec_end_key, NOW());
- -- clear msg 'Update perms' from Msgs system
- CALL CRM_UI_MSGS__markTableEveryoneAsExecuted('update_proces_init_idx_rec','FixCrmProcesInitIdx','Update perms','CRM_PROCES');
- END ; END IF ;
- END ;
- SQL;
- $sqlList['RemoveTrigger_AfterInsertProces'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_PROCES_AFTER_INSERT`";
- $sqlList['CreateTrigger_AfterInsertProces'] = "
- CREATE DEFINER=`root`@`localhost` TRIGGER `FixCrmProcesInitIdx_CRM_PROCES_AFTER_INSERT` AFTER INSERT ON `CRM_PROCES`
- FOR EACH ROW BEGIN
- -- only when PARENT_ID changes and PARENT_ID exists in `CRM_PROCES_idx`
- 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
- -- throw warning to update perms
- CALL CRM_UI_MSGS__addTableEveryoneUniqueMsg(coalesce(NEW.A_RECORD_CREATE_AUTHOR,':AFTER_INSERT'), 'FixCrmProcesInitIdx', 'danger', 'Update perms', 'CRM_PROCES');
- -- UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
- END IF;
- END
- ";
- $sqlList['RemoveTrigger_AfterUpdateProces'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_PROCES_AFTER_UPDATE`";
- $sqlList['CreateTrigger_AfterUpdateProces'] = "
- CREATE DEFINER=`root`@`localhost` TRIGGER `FixCrmProcesInitIdx_CRM_PROCES_AFTER_UPDATE` AFTER UPDATE ON `CRM_PROCES`
- FOR EACH ROW BEGIN
- -- only when PARENT_ID changes and ID exists in `CRM_PROCES_idx`
- 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
- -- throw warning to update perms
- CALL CRM_UI_MSGS__addTableEveryoneUniqueMsg(coalesce(NEW.A_RECORD_UPDATE_AUTHOR,':AFTER_UPDATE'), 'FixCrmProcesInitIdx', 'danger', 'Update perms', 'CRM_PROCES');
- -- UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
- END IF;
- END
- ";
- $sqlList['RemoveTrigger_AfterInsertWskaznik'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_INSERT`";
- $sqlList['CreateTrigger_AfterInsertWskaznik'] = "
- CREATE DEFINER=`root`@`localhost` TRIGGER `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_INSERT` AFTER INSERT ON `CRM_WSKAZNIK`
- FOR EACH ROW BEGIN
- -- only when ID_PROCES exists in `CRM_PROCES_idx`
- -- only when ID_ZASOB is group
- -- only when ID_PRZYPADEK has perm 'X'
- IF NEW.`ID_PROCES`>0
- AND NEW.`ID_ZASOB`>0
- AND NEW.`ID_PRZYPADEK`>0
- AND (select count(*) from `CRM_PROCES_idx` where `ID_PROCES`=NEW.`ID_PROCES` limit 1)>0
- AND (select count(*) from `CRM_LISTA_ZASOBOW` z where z.`ID`=NEW.`ID_ZASOB` and z.`TYPE` in('STANOWISKO','DZIAL','PODMIOT') limit 1)>0
- AND (select count(*) from `CRM_PRZYPADEK` przyp where przyp.`ID`=NEW.`ID_PRZYPADEK` and przyp.`FORM_TREAT` & 8 limit 1)>0
- THEN
- -- throw warning to update perms
- CALL CRM_UI_MSGS__addTableEveryoneUniqueMsg(coalesce(NEW.A_RECORD_CREATE_AUTHOR,':AFTER_INSERT_WSK'), 'FixCrmProcesInitIdx', 'danger', 'Update perms', 'CRM_PROCES');
- -- UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
- END IF;
- END
- ";
- $sqlList['RemoveTrigger_AfterUpdateWskaznik'] = "DROP TRIGGER IF EXISTS `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_UPDATE`";
- $sqlList['CreateTrigger_AfterUpdateWskaznik'] = "
- CREATE DEFINER=`root`@`localhost` TRIGGER `FixCrmProcesInitIdx_CRM_WSKAZNIK_AFTER_UPDATE` AFTER UPDATE ON `CRM_WSKAZNIK`
- FOR EACH ROW BEGIN
- -- only when old or new ID_PROCES exists in `CRM_PROCES_idx`
- -- only when old or new ID_ZASOB is group
- -- only when old or new ID_PRZYPADEK has perm 'X'
- IF (NEW.`ID_PROCES`!=OLD.`ID_PROCES`
- or NEW.`ID_ZASOB`!=OLD.`ID_ZASOB`
- or NEW.`ID_PRZYPADEK`!=OLD.`ID_PRZYPADEK`
- or (NEW.`A_STATUS`!=OLD.`A_STATUS`
- and ((NEW.`A_STATUS` in('WAITING','NORMAL') and OLD.`A_STATUS` not in('WAITING','NORMAL'))
- or (NEW.`A_STATUS` not in('WAITING','NORMAL') and OLD.`A_STATUS` in('WAITING','NORMAL'))
- )
- )
- )
- AND (NEW.`ID_PROCES`>0 or OLD.`ID_PROCES`>0)
- AND (NEW.`ID_ZASOB`>0 or OLD.`ID_ZASOB`>0)
- AND (NEW.`ID_PRZYPADEK`>0 or OLD.`ID_PRZYPADEK`>0)
- -- AND (select count(*) from `CRM_PROCES_idx` where `ID_PROCES` in(NEW.`ID_PROCES`,OLD.`ID_PROCES`) limit 1)>0
- 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
- 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
- THEN
- -- throw warning to update perms
- CALL CRM_UI_MSGS__addTableEveryoneUniqueMsg(coalesce(NEW.A_RECORD_UPDATE_AUTHOR,':AFTER_UPDATE_WSK'), 'FixCrmProcesInitIdx', 'danger', 'Update perms', 'CRM_PROCES');
- -- UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Update perms` SET x=1;
- END IF;
- END
- ";
- $sqlList['RemoveConfigLocks'] = "
- DELETE FROM `CRM_CONFIG` where `CONF_KEY`='tbl_indexer_CRM_PROCES_last_exec_lock_date';
- ";
- $db = DB::getDB();
- if ($db->has_errors()) {
- throw new Exception("DB Errors: " . implode("\n<br>", $db->get_errors()));
- }
- foreach ($sqlList as $sqlName => $sql) {
- $res = $db->query($sql);
- if ($db->has_errors()) {
- throw new Exception("DB Errors at sql '{$sqlName}': " . implode("\n<br>", $db->get_errors()));
- }
- }
- $this->callProcedure();
- }
- /*
- #1146 - Table '{DATABASE_NAME}.P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Already executed' doesn't exist
- */
- public function parseMessageFromStorage($msg) {
- switch ($msg) {
- case 'ERROR: Already executed': {
- $msg = "Aktualizacja uprawnień została już uruchomiona przez inną osobę";
- break;
- }
- case 'ERROR: Update perms': {
- $msg = "Wymagana aktualizacja uprawnień";
- break;
- }
- }
- return $msg;
- }
- public function parseMessageFromMsgsSystem($msg) {
- switch ($msg) {
- case 'Update perms': {
- $msg = "Wymagana aktualizacja uprawnień";
- break;
- }
- }
- return $msg;
- }
- public function runByMessageFromMsgsSystem($msg, &$execNotes) {
- switch ($msg) {
- case 'Update perms': {
- $execNotes .= 'Wymagana aktualizacja uprawnień';
- $this->callProcedure();
- $execNotes .= ' done';
- break;
- }
- }
- }
- }
|