Parcourir la source

fixed fetch table proces filtr for user - UserAcl::getTableProcesInitList

Piotr Labudda il y a 8 ans
Parent
commit
2ff2225f70
1 fichiers modifiés avec 25 ajouts et 12 suppressions
  1. 25 12
      SE/se-lib/UserAcl.php

+ 25 - 12
SE/se-lib/UserAcl.php

@@ -539,24 +539,37 @@ SQL;
 		$tableProcesInitList = ACL::getTableProcesInitList($idTable);
 		if (!empty($tableProcesInitList)) {
 			$filteredTableProcesInitList = array();
-			DBG::_('DBG_MAP', '1', "tableProcesInitList({$idTable})", $tableProcesInitList, __CLASS__, __FUNCTION__, __LINE__);
 			$procesIds = array_keys($tableProcesInitList);
+			if (empty($procesIds)) {
+				DBG::log("BUG empty \$procesIds for table {$idTable}");
+				return [];
+			}
 			$sqlProcesIds = implode(",", $procesIds);
 			$userLogin = User::getLogin();
-			$sql = "select uiv.`ID_PROCES_INIT`, uiv.`DESC`
-				from `CRM_PROCES_idx_USER_to_INIT_VIEW` uiv
-				where uiv.`ADM_ACCOUNT`='{$userLogin}'
-					and uiv.`ID_PROCES_INIT` in({$sqlProcesIds})
-				group by uiv.`ID_PROCES_INIT`
+			$groupIds = User::getGroupsIds();
+			if (empty($procesIds)) {
+				DBG::log("BUG empty User Group Ids");
+				return [];
+			}
+			$sqlGroupIds = implode(",", $groupIds);
+			// $sql = " -- slow
+			// 	select uiv.`ID_PROCES_INIT`, uiv.`DESC`
+			// 	from `CRM_PROCES_idx_USER_to_INIT_VIEW` uiv
+			// 	where uiv.`ADM_ACCOUNT`='{$userLogin}'
+			// 		and uiv.`ID_PROCES_INIT` in({$sqlProcesIds})
+			// 	group by uiv.`ID_PROCES_INIT`
+			// ";
+			$sql = "
+				select ugiv.`ID_PROCES_INIT`, ugiv.`DESC`
+				from `CRM_PROCES_idx_GROUP_to_INIT_VIEW` ugiv
+				where ugiv.`ID_GROUP` in({$sqlGroupIds})
+					and ugiv.`ID_PROCES_INIT` in({$sqlProcesIds})
 			";
-			DBG::_('DBG_MAP', '1', "tableProcesInitList({$idTable}):sql", $sql, __CLASS__, __FUNCTION__, __LINE__);
-			$db = DB::getDB();
-			$res = $db->query($sql);
-			while ($r = $db->fetch($res)) {
-				$filteredTableProcesInitList[$r->ID_PROCES_INIT] = $r->DESC;
+			foreach (DB::getPDO()->fetchAll($sql) as $row) {
+				$filteredTableProcesInitList[$row['ID_PROCES_INIT']] = $row['DESC'];
 			}
 			$tableProcesInitList = $filteredTableProcesInitList;
-			DBG::_('DBG_MAP', '1', "tableProcesInitList({$idTable}):filteredTableProcesInitList", $filteredTableProcesInitList, __CLASS__, __FUNCTION__, __LINE__);
+			DBG::log($filteredTableProcesInitList, 'array', "tableProcesInitList({$idTable}):filteredTableProcesInitList");
 		}
 		return $tableProcesInitList;
 	}