Просмотр исходного кода

added group to proces with perms test on fix acl

Piotr Labudda 10 лет назад
Родитель
Сommit
a8fd2b55e5
1 измененных файлов с 89 добавлено и 6 удалено
  1. 89 6
      SE/se-lib/Route/FixCrmProcesInitIdx.php

+ 89 - 6
SE/se-lib/Route/FixCrmProcesInitIdx.php

@@ -169,12 +169,13 @@ SQL;
 
 	public function test2Action() {
 		$sqlList = array();
-		$sqlList['RemoveTableGroupToInit'] = "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`)
@@ -197,18 +198,63 @@ SQL;
 			--	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()));
+		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 ($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();
@@ -624,6 +670,20 @@ 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`)
@@ -1023,6 +1083,29 @@ BEGIN
 		--	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());