Piotr Labudda 6 роки тому
батько
коміт
b406f00dff
1 змінених файлів з 52 додано та 74 видалено
  1. 52 74
      SE/se-lib/UserAcl.php

+ 52 - 74
SE/se-lib/UserAcl.php

@@ -57,52 +57,44 @@ class UserAcl {
 	}
 
 	function getProcesIds() {
-		if (!empty($this->_proces_ids)) {
-			return $this->_proces_ids;
-		}
-		$db = DB::getDB();
+		if (!empty($this->_proces_ids)) return $this->_proces_ids;
+
 		$groups = $this->fetchGroups();
 		if (empty($groups)) {
 			return false;
 		}
-		$sql = "select p.`ID`
+		$this->_proces_ids = DB::getPDO()->fetchValuesList("
+			select p.`ID`
 			from `CRM_PROCES` as p
-				left join `CRM_WSKAZNIK` as w on(p.`ID`=w.`ID_PROCES`)
+				left join `CRM_WSKAZNIK` as w on ( p.`ID` = w.`ID_PROCES` )
 			where
-				w.`ID_ZASOB` in(" . implode(",", array_keys($groups)) . ")
-				and w.`A_STATUS` in('NORMAL', 'WAITING')
-				and p.`A_STATUS` in('NORMAL', 'WAITING')
-		";
-		$res = $db->query($sql);
-		while ($r = $db->fetch($res)) {
-			$this->_proces_ids [$r->ID] = true;
-		}
-		$this->_proces_ids = array_keys($this->_proces_ids);
+				w.`ID_ZASOB` in ( " . implode(",", array_keys($groups)) . " )
+				and w.`A_STATUS` in ( 'NORMAL', 'WAITING' )
+				and p.`A_STATUS` in ( 'NORMAL', 'WAITING' )
+		");
 		return $this->_proces_ids;
 	}
 
 	function getProcesTree() {
-		if (!empty($this->_proces_tree_flat)) {
-			return $this->_proces_tree_flat;
-		}
+		if (!empty($this->_proces_tree_flat)) return $this->_proces_tree_flat;
 
-		$db = DB::getDB();
-		$sql = "select p.`ID`, p.`PARENT_ID`
+		$listItems = DB::getPDO()->fetchAll("
+			select p.`ID`, p.`PARENT_ID`
 				from `CRM_PROCES` as p
-				where p.`A_STATUS` in('WAITING','NORMAL')
+				where p.`A_STATUS` in ( 'WAITING', 'NORMAL' )
 			union
 				select p.`IF_TRUE_GOTO` as ID, p.`ID` as PARENT_ID
 				from `CRM_PROCES` as p
-				where p.`A_STATUS` in('WAITING','NORMAL')
-					and p.IF_TRUE_GOTO>0
-					and p.IF_TRUE_GOTO_FLAG='GOTO_AND_RETURN'
-		";
+				where p.`A_STATUS` in ( 'WAITING', 'NORMAL' )
+					and p.IF_TRUE_GOTO > 0
+					and p.IF_TRUE_GOTO_FLAG = 'GOTO_AND_RETURN'
+		");
 		//	union select '83','122'		  union select p.`ID` as ID, p.`IF_TRUE_GOTO` as PARENT_ID from `CRM_PROCES` as p where p.`A_STATUS` in('WAITING','NORMAL') and p.IF_TRUE_GOTO>0
 		//union select '83','122'
 		//union select '83','2025'
-		$res = $db->query($sql);
-		while ($r = $db->fetch($res)) {
-			$this->_proces_tree_flat[$r->PARENT_ID][] = $r->ID;
+		$this->_proces_tree_flat = [];
+		foreach ($listItems as $item) {
+			$this->_proces_tree_flat[$item['PARENT_ID']][] = $item['ID'];
 		}
 		return $this->_proces_tree_flat;
 	}
@@ -495,7 +487,7 @@ class UserAcl {
 	/**
 	 * Ids List of Proces Init for user (use filters)
 	 */
-	public function getUsedUserProcesInitIds() {
+	 function getUsedUserProcesInitIds() {
 		$usedProcesInitList = $this->getUsedUserProcesInitList();
 		return array_keys($usedProcesInitList);
 	}
@@ -503,26 +495,22 @@ class UserAcl {
 	/**
 	 * List of Proces Init for user (use filters)
 	 */
-	public function getUsedUserProcesInitList() {
+	function getUsedUserProcesInitList() {
 		$filterIdProces = $this->getFilterIdProces();
-		if ($filterIdProces > 0) {
-			return $filterIdProces;
-		}
+		if ($filterIdProces > 0) return $filterIdProces;
 
 		$sqlIdProcesListSql = $this->getUsedUserProcesIdsSql();
 		if (!$sqlIdProcesListSql) return [];
-		$fetchUsedProcesInitListSql = <<<SQL
+		$listItems = DB::getPDO()->fetchAll("
 			select p.`ID`, p.`DESC`
-				from `CRM_PROCES` p
-				where p.`ID` in({$sqlIdProcesListSql})
-					and p.`TYPE`='PROCES_INIT'
-				order by p.`SORT_PRIO`
-SQL;
+			from `CRM_PROCES` p
+			where p.`ID` in ( {$sqlIdProcesListSql} )
+				and p.`TYPE` = 'PROCES_INIT'
+			order by p.`SORT_PRIO`
+		");
 		$usedProcesInitList = array();
-		$db = DB::getDB();
-		$res = $db->query($fetchUsedProcesInitListSql);
-		while ($r = $db->fetch($res)) {
-			$usedProcesInitList[$r->ID] = $r->DESC;
+		foreach ($listItems as $item) {
+			$usedProcesInitList[$item['ID']] = $item['DESC'];
 		}
 		return $usedProcesInitList;
 	}
@@ -577,51 +565,41 @@ SQL;
 		return $tableProcesInitList;
 	}
 
-	public function canExecuteProcesInit($idProcesInit) {
+	function canExecuteProcesInit($idProcesInit) {
 		$isAllowed = false;
 		$idProcesInit = (int)$idProcesInit;
 		if (!$idProcesInit) return false;
 		$idUserGroupList = $this->fetchGroups();
 		$sqlIdUserGroupList = implode(",", array_keys($idUserGroupList));
-		$checkProcesAccessSql = <<<SQL
+		$isAlowed = DB::getPDO()->fetchValue("
 			select count(*) as cnt
-				from `CRM_PROCES_idx_GROUP_to_PROCES` gi
-					join `CRM_PROCES` p on(p.`ID`=gi.`ID_PROCES` and p.`TYPE`='PROCES_INIT')
-				where gi.`ID_GROUP` in({$sqlIdUserGroupList})
-					and gi.`ID_PROCES`='{$idProcesInit}'
-SQL;
-		$db = DB::getDB();
-		$res = $db->query($checkProcesAccessSql);
-		if ($r = $db->fetch($res)) {
-			if ($r->cnt > 0) {
-				$isAllowed = true;
-			}
-		}
-		return $isAllowed;
+			from `CRM_PROCES_idx_GROUP_to_PROCES` gi
+				join `CRM_PROCES` p on ( p.`ID` = gi.`ID_PROCES` and p.`TYPE` = 'PROCES_INIT' )
+			where gi.`ID_GROUP` in ( {$sqlIdUserGroupList} )
+				and gi.`ID_PROCES` = :id_proces_init
+		", [
+			':id_proces_init' => $idProcesInit,
+		]);
+		return ($isAlowed > 0);
 	}
 
-	public function canViewProces($idProcesInit) {
+	function canViewProces($idProcesInit) {
 		$isAllowed = false;
 		$idProcesInit = (int)$idProcesInit;
 		if (!$idProcesInit) return false;
 		$idUserGroupList = $this->fetchGroups();
 		$sqlIdUserGroupList = implode(",", array_keys($idUserGroupList));
-		$checkProcesAccessSql = <<<SQL
+		$isAllowed = DB::getPDO()->fetchValue("
 			select count(*) as cnt
-				from `CRM_PROCES_idx_GROUP_to_PROCES_PERM` gi
-					join `CRM_PROCES` p on(p.`ID`=gi.`ID_PROCES`)
-				where gi.`ID_GROUP` in({$sqlIdUserGroupList})
-					and gi.`ID_PROCES`='{$idProcesInit}'
-			--		and gi.`HAS_PERM_R`=1 -- TODO: allow only with defined perm 'R'
-SQL;
-		$db = DB::getDB();
-		$res = $db->query($checkProcesAccessSql);
-		if ($r = $db->fetch($res)) {
-			if ($r->cnt > 0) {
-				$isAllowed = true;
-			}
-		}
-		return $isAllowed;
+			from `CRM_PROCES_idx_GROUP_to_PROCES_PERM` gi
+				join `CRM_PROCES` p on ( p.`ID` = gi.`ID_PROCES` )
+			where gi.`ID_GROUP` in ( {$sqlIdUserGroupList} )
+				and gi.`ID_PROCES` = :id_proces_init
+		", [
+			':id_proces_init' => $idProcesInit,
+		]);
+		// --		and gi.`HAS_PERM_R` = 1 -- TODO allow only with defined perm 'R'
+		return ($isAllowed > 0);
 	}
 
 }