|
|
@@ -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);
|
|
|
}
|
|
|
|
|
|
}
|