aktualizuj uprawnienia';
?>
aktualizuj uprawnienia';
$idProcesInit = V::get('id_proces_init', '', $_REQUEST, 'int');
?>
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) {
?>
log('procedure');
$procExecTime = $dbgExecTime->getLastExecTime();
//$totalExecTime = $dbgExecTime->getTotalExecTime();
?>
Zaktualizowano uprawnienia
( s)
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
", $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 = <<has_errors()) {
throw new Exception("DB Errors: " . implode("\n
", $db->get_errors()));
}
$res = $db->query($sql);
if ($db->has_errors()) {
throw new Exception("DB Errors: " . implode("\n
", $db->get_errors()));
}
while ($r = $db->fetch($res)) {
echo'';print_r($r);echo'
';
}
}
public function test2Action() {
$sqlList = array();
$sqlList['RemoveTableGroupToInit'] = "DROP TABLE IF EXISTS `CRM_PROCES_idx_GROUP_to_PROCES`";
$sqlList['InstallTableGroupToInit'] = <<has_errors()) throw new Exception("DB Errors: " . implode("\n
", $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
", $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'] = <<has_errors()) throw new Exception("DB Errors: " . implode("\n
", $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
", $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'] = << 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'] = << 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'] = << 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'] = << 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'] = <<0
;
SQL;
$sqlList['G.2--while-2-loop-update-proc_with_groups_id-from-parent'] = <<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'] = <<0
and i.`TYPE`!='GOTO_AND_RETURN'
;
SQL;
$sqlList__TODO_IS_NEEDED__['10-delete-where-!idx_PROCES_WITH_GROUPS_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'] = <<has_errors()) {
throw new Exception("DB Errors: " . implode("\n
", $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'['.$sqlExecuteCounter.'] Executing sql "'.$sqlName.'" ...
';
$res = $db->query($sql);
if ($db->has_errors()) {
throw new Exception("DB Errors at sql '{$sqlName}': " . implode("\n
", $db->get_errors()));
}
if($DBG_TIME) $dbgExecTime->log("execute sql {$sqlName}");
echo'['.$sqlExecuteCounter.'] DONE sql "'.$sqlName.'"
';
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'] = <<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
", $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
", $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;
}
}
}
}