PM-3675 "Uso de interface lenta (supervisores) cuando..." SOLVED
Issue:
Uso de interface lenta (supervisores) cuando se tienen varios usuarios (40000)
Cause:
No se realizo de manera correcta el paginado de registros
Solution:
> Se a implementado los siguientes end-points:
GET /api/1.0/{workspace}/project/{prj_uid}/process-supervisors/paged
GET /api/1.0/{workspace}/project/{prj_uid}/available-process-supervisors/paged
Estos end-points aceptan los siguientes parametros:
/paged?filter={filter}&start={start}&limit={limit}&type={type}
/paged?lfilter={lfilter}&start={start}&limit={limit}&type={type}
/paged?rfilter={rfilter}&start={start}&limit={limit}&type={type}
Donde:
filter: Representa la busqueda de registros que contienen este valor
lfilter: Representa la busqueda de registros que empiezan con este valor
rfilter: Representa la busqueda de registros que terminan con este valor
type: Acepta los siguentes valores: "user", "group"
Ejemplo:
GET /api/1.0/{workspace}/project/{prj_uid}/process-supervisors/paged
<<<<< 200
{
"total": 2,
"start": 0,
"limit": 0,
"filter": "",
"data": [
{
"pu_uid": "35013609256044fb96b3ed9043434423",
"pu_type": "GROUP_SUPERVISOR",
"grp_uid": "60593768854492f8fa43aa2064326562",
"grp_name": "GROUP1"
},
{
"pu_uid": "18118183155f2ecac3a1895011300509",
"pu_type": "SUPERVISOR",
"usr_uid": "36101505055f202d172e961090822011",
"usr_firstname": "user4",
"usr_lastname": "user4",
"usr_username": "user4",
"usr_email": "xxx@processmaker.com"
}
]
}
Note:
Los Databases "rbac" y "workflow" deben estar unificados en un solo Database (IMPORTANTE)
This commit is contained in:
@@ -7,71 +7,414 @@ use Luracast\Restler\User;
|
||||
class ProcessSupervisor
|
||||
{
|
||||
/**
|
||||
* Return supervisors
|
||||
* @param string $sProcessUID
|
||||
* Get Supervisors
|
||||
*
|
||||
* @param string $processUid
|
||||
* @param string $option
|
||||
* @param array $arrayFilterData
|
||||
* @param int $start
|
||||
* @param int $limit
|
||||
* @param string $type
|
||||
*
|
||||
* @return array
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
public function getProcessSupervisors($sProcessUID = '')
|
||||
public function getProcessSupervisors($processUid, $option, $arrayFilterData = null, $start = null, $limit = null, $type = null)
|
||||
{
|
||||
try {
|
||||
$aResp = array();
|
||||
// Groups
|
||||
$oCriteria = new \Criteria('workflow');
|
||||
$oCriteria->addSelectColumn(\ProcessUserPeer::PU_UID);
|
||||
$oCriteria->addSelectColumn(\ProcessUserPeer::USR_UID);
|
||||
$oCriteria->addAsColumn('GRP_TITLE', \ContentPeer::CON_VALUE);
|
||||
$aConditions [] = array(\ProcessUserPeer::USR_UID, \ContentPeer::CON_ID);
|
||||
$aConditions [] = array(\ContentPeer::CON_CATEGORY, \DBAdapter::getStringDelimiter().'GRP_TITLE'.\DBAdapter::getStringDelimiter());
|
||||
$aConditions [] = array(\ContentPeer::CON_LANG, \DBAdapter::getStringDelimiter().SYS_LANG.\DBAdapter::getStringDelimiter());
|
||||
$oCriteria->addJoinMC($aConditions, \Criteria::LEFT_JOIN);
|
||||
$oCriteria->add(\ProcessUserPeer::PU_TYPE, 'GROUP_SUPERVISOR');
|
||||
$oCriteria->add(\ProcessUserPeer::PRO_UID, $sProcessUID);
|
||||
$oCriteria->addAscendingOrderByColumn(\ContentPeer::CON_VALUE);
|
||||
$oDataset = \ProcessUserPeer::doSelectRS($oCriteria);
|
||||
$oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
||||
$oDataset->next();
|
||||
while ($aRow = $oDataset->getRow()) {
|
||||
$aResp[] = array('pu_uid' => $aRow['PU_UID'],
|
||||
'pu_type' => "GROUP_SUPERVISOR",
|
||||
'grp_uid' => $aRow['USR_UID'],
|
||||
'grp_name' => $aRow['GRP_TITLE']);
|
||||
$oDataset->next();
|
||||
require_once(PATH_RBAC_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "UsersRoles.php");
|
||||
require_once(PATH_RBAC_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "UsersRolesPeer.php");
|
||||
require_once(PATH_RBAC_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "Roles.php");
|
||||
require_once(PATH_RBAC_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "RolesPeer.php");
|
||||
require_once(PATH_RBAC_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "RolesPermissions.php");
|
||||
require_once(PATH_RBAC_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "RolesPermissionsPeer.php");
|
||||
require_once(PATH_RBAC_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "Permissions.php");
|
||||
require_once(PATH_RBAC_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "PermissionsPeer.php");
|
||||
|
||||
$arraySupervisor = array();
|
||||
|
||||
$numRecTotal = 0;
|
||||
$startbk = $start;
|
||||
$limitbk = $limit;
|
||||
|
||||
//Verify data
|
||||
$process = new \ProcessMaker\BusinessModel\Process();
|
||||
|
||||
$process->throwExceptionIfDataNotMetPagerVarDefinition(array("start" => $start, "limit" => $limit), array("start" => "start", "limit" => "limit"));
|
||||
|
||||
//Set variables
|
||||
$filterName = "filter";
|
||||
|
||||
if (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData["filter"])) {
|
||||
$arrayAux = array(
|
||||
"" => "filter",
|
||||
"LEFT" => "lfilter",
|
||||
"RIGHT" => "rfilter"
|
||||
);
|
||||
|
||||
$filterName = $arrayAux[(isset($arrayFilterData["filterOption"]))? $arrayFilterData["filterOption"] : ""];
|
||||
}
|
||||
|
||||
// Users
|
||||
$oCriteria = new \Criteria('workflow');
|
||||
$oCriteria->addSelectColumn(\ProcessUserPeer::USR_UID);
|
||||
$oCriteria->addSelectColumn(\ProcessUserPeer::PU_UID);
|
||||
$oCriteria->addSelectColumn(\UsersPeer::USR_FIRSTNAME);
|
||||
$oCriteria->addSelectColumn(\UsersPeer::USR_LASTNAME);
|
||||
$oCriteria->addSelectColumn(\UsersPeer::USR_USERNAME);
|
||||
$oCriteria->addSelectColumn(\UsersPeer::USR_EMAIL);
|
||||
$oCriteria->addJoin(\ProcessUserPeer::USR_UID, \UsersPeer::USR_UID, \Criteria::LEFT_JOIN);
|
||||
$oCriteria->add(\ProcessUserPeer::PU_TYPE, 'SUPERVISOR');
|
||||
$oCriteria->add(\ProcessUserPeer::PRO_UID, $sProcessUID);
|
||||
$oCriteria->add(\UsersPeer::USR_STATUS, 'ACTIVE');
|
||||
$oCriteria->addAscendingOrderByColumn(\UsersPeer::USR_FIRSTNAME);
|
||||
$oDataset = \ProcessUserPeer::doSelectRS($oCriteria);
|
||||
$oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
||||
$oDataset->next();
|
||||
while ($aRow = $oDataset->getRow()) {
|
||||
$aResp[] = array('pu_uid' => $aRow['PU_UID'],
|
||||
'pu_type' => "SUPERVISOR",
|
||||
'usr_uid' => $aRow['USR_UID'],
|
||||
'usr_firstname' => $aRow['USR_FIRSTNAME'],
|
||||
'usr_lastname' => $aRow['USR_LASTNAME'],
|
||||
'usr_username' => $aRow['USR_USERNAME'],
|
||||
'usr_email' => $aRow['USR_EMAIL']);
|
||||
$oDataset->next();
|
||||
//Get data
|
||||
if (!is_null($limit) && $limit . "" == "0") {
|
||||
//Return
|
||||
return array(
|
||||
"total" => $numRecTotal,
|
||||
"start" => (int)((!is_null($startbk))? $startbk : 0),
|
||||
"limit" => (int)((!is_null($limitbk))? $limitbk : 0),
|
||||
$filterName => (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData["filter"]))? $arrayFilterData["filter"] : "",
|
||||
"data" => $arraySupervisor
|
||||
);
|
||||
}
|
||||
if ($aResp == null) {
|
||||
$aResp = array();
|
||||
|
||||
//Verify data
|
||||
$process->throwExceptionIfNotExistsProcess($processUid, "prj_uid");
|
||||
|
||||
//Set variables
|
||||
$numRecTotalGroup = 0;
|
||||
$numRecTotalUser = 0;
|
||||
|
||||
$delimiter = \DBAdapter::getStringDelimiter();
|
||||
|
||||
switch ($option) {
|
||||
case "ASSIGNED":
|
||||
break;
|
||||
case "AVAILABLE":
|
||||
$arrayGroupUid = array();
|
||||
$arrayUserUid = array();
|
||||
|
||||
$criteria = new \Criteria("workflow");
|
||||
|
||||
$criteria->addSelectColumn(\ProcessUserPeer::USR_UID);
|
||||
$criteria->addSelectColumn(\ProcessUserPeer::PU_TYPE);
|
||||
$criteria->add(\ProcessUserPeer::PRO_UID, $processUid, \Criteria::EQUAL);
|
||||
$criteria->add(\ProcessUserPeer::PU_TYPE, "%SUPERVISOR%", \Criteria::LIKE);
|
||||
|
||||
$rsCriteria = \ProcessUserPeer::doSelectRS($criteria);
|
||||
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
||||
|
||||
while ($rsCriteria->next()) {
|
||||
$row = $rsCriteria->getRow();
|
||||
|
||||
if ($row["PU_TYPE"] == "SUPERVISOR") {
|
||||
$arrayUserUid[] = $row["USR_UID"];
|
||||
} else {
|
||||
$arrayGroupUid[] = $row["USR_UID"];
|
||||
}
|
||||
}
|
||||
|
||||
$arrayRbacSystemData = array("SYS_UID" => "PROCESSMAKER", "SYS_CODE" => "00000000000000000000000000000002");
|
||||
break;
|
||||
}
|
||||
return $aResp;
|
||||
} catch (Exception $e) {
|
||||
|
||||
//Groups
|
||||
//Query
|
||||
if (empty($type) || $type == "group") {
|
||||
$criteriaGroup = new \Criteria("workflow");
|
||||
|
||||
$criteriaGroup->addSelectColumn(\GroupwfPeer::GRP_UID);
|
||||
$criteriaGroup->addAsColumn("GRP_TITLE", \ContentPeer::CON_VALUE);
|
||||
|
||||
switch ($option) {
|
||||
case "ASSIGNED":
|
||||
$criteriaGroup->addSelectColumn(\ProcessUserPeer::PU_UID);
|
||||
|
||||
$arrayCondition = array();
|
||||
$arrayCondition[] = array(\ProcessUserPeer::USR_UID, \GroupwfPeer::GRP_UID, \Criteria::EQUAL);
|
||||
$arrayCondition[] = array(\GroupwfPeer::GRP_STATUS, $delimiter . "ACTIVE" . $delimiter, \Criteria::EQUAL);
|
||||
$criteriaGroup->addJoinMC($arrayCondition, \Criteria::LEFT_JOIN);
|
||||
|
||||
$arrayCondition = array();
|
||||
$arrayCondition[] = array(\GroupwfPeer::GRP_UID, \ContentPeer::CON_ID, \Criteria::EQUAL);
|
||||
$arrayCondition[] = array(\ContentPeer::CON_CATEGORY, $delimiter . "GRP_TITLE" . $delimiter, \Criteria::EQUAL);
|
||||
$arrayCondition[] = array(\ContentPeer::CON_LANG, $delimiter . SYS_LANG . $delimiter, \Criteria::EQUAL);
|
||||
$criteriaGroup->addJoinMC($arrayCondition, \Criteria::LEFT_JOIN);
|
||||
|
||||
$criteriaGroup->add(\ProcessUserPeer::PU_TYPE, "GROUP_SUPERVISOR", \Criteria::EQUAL);
|
||||
$criteriaGroup->add(\ProcessUserPeer::PRO_UID, $processUid, \Criteria::EQUAL);
|
||||
break;
|
||||
case "AVAILABLE":
|
||||
$sql = "
|
||||
SELECT DISTINCT " . \GroupUserPeer::GRP_UID . "
|
||||
FROM " . \GroupUserPeer::TABLE_NAME . ", " . \UsersPeer::TABLE_NAME . ",
|
||||
" . \UsersRolesPeer::TABLE_NAME . ", " . \RolesPermissionsPeer::TABLE_NAME . ", " . \PermissionsPeer::TABLE_NAME . "
|
||||
WHERE " . \GroupUserPeer::GRP_UID . " = " . \GroupwfPeer::GRP_UID . " AND
|
||||
" . \GroupUserPeer::USR_UID . " = " . \UsersPeer::USR_UID . " AND " . \UsersPeer::USR_STATUS . " = " . $delimiter . "ACTIVE" . $delimiter . " AND
|
||||
" . \UsersPeer::USR_UID . " = " . \UsersRolesPeer::USR_UID . " AND
|
||||
" . \UsersRolesPeer::ROL_UID . " = " . \RolesPermissionsPeer::ROL_UID . " AND
|
||||
" . \RolesPermissionsPeer::PER_UID . " = " . \PermissionsPeer::PER_UID . " AND
|
||||
" . \PermissionsPeer::PER_CODE . " = " . $delimiter . "PM_SUPERVISOR" . $delimiter . " AND
|
||||
" . \PermissionsPeer::PER_SYSTEM . " = " . $delimiter . $arrayRbacSystemData["SYS_CODE"] . $delimiter . "
|
||||
";
|
||||
|
||||
$arrayCondition = array();
|
||||
$arrayCondition[] = array(\GroupwfPeer::GRP_UID, \ContentPeer::CON_ID, \Criteria::EQUAL);
|
||||
$arrayCondition[] = array(\ContentPeer::CON_CATEGORY, $delimiter . "GRP_TITLE" . $delimiter, \Criteria::EQUAL);
|
||||
$arrayCondition[] = array(\ContentPeer::CON_LANG, $delimiter . SYS_LANG . $delimiter, \Criteria::EQUAL);
|
||||
$criteriaGroup->addJoinMC($arrayCondition, \Criteria::LEFT_JOIN);
|
||||
|
||||
$criteriaGroup->add(
|
||||
$criteriaGroup->getNewCriterion(\GroupwfPeer::GRP_UID, $arrayGroupUid, \Criteria::NOT_IN)->addAnd(
|
||||
$criteriaGroup->getNewCriterion(\GroupwfPeer::GRP_STATUS, "ACTIVE", \Criteria::EQUAL))->addAnd(
|
||||
$criteriaGroup->getNewCriterion(\GroupwfPeer::GRP_UID, \GroupwfPeer::GRP_UID . " IN ($sql)", \Criteria::CUSTOM))
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData["filter"]) && trim($arrayFilterData["filter"]) != "") {
|
||||
$arraySearch = array(
|
||||
"" => "%" . $arrayFilterData["filter"] . "%",
|
||||
"LEFT" => $arrayFilterData["filter"] . "%",
|
||||
"RIGHT" => "%" . $arrayFilterData["filter"]
|
||||
);
|
||||
|
||||
$search = $arraySearch[(isset($arrayFilterData["filterOption"]))? $arrayFilterData["filterOption"] : ""];
|
||||
|
||||
$criteriaGroup->add(\ContentPeer::CON_VALUE, $search, \Criteria::LIKE);
|
||||
}
|
||||
|
||||
//Number records total
|
||||
$criteriaCount = clone $criteriaGroup;
|
||||
|
||||
$criteriaCount->clearSelectColumns();
|
||||
$criteriaCount->addSelectColumn("COUNT(" . \GroupwfPeer::GRP_UID . ") AS NUM_REC");
|
||||
|
||||
switch ($option) {
|
||||
case "ASSIGNED":
|
||||
$rsCriteriaCount = \ProcessUserPeer::doSelectRS($criteriaCount);
|
||||
break;
|
||||
case "AVAILABLE":
|
||||
$rsCriteriaCount = \GroupwfPeer::doSelectRS($criteriaCount);
|
||||
break;
|
||||
}
|
||||
|
||||
$rsCriteriaCount->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
||||
|
||||
$result = $rsCriteriaCount->next();
|
||||
$row = $rsCriteriaCount->getRow();
|
||||
|
||||
$numRecTotalGroup = (int)($row["NUM_REC"]);
|
||||
$numRecTotal = $numRecTotal + $numRecTotalGroup;
|
||||
}
|
||||
|
||||
//Users
|
||||
//Query
|
||||
if (empty($type) || $type == "user") {
|
||||
$criteriaUser = new \Criteria("workflow");
|
||||
|
||||
$criteriaUser->addSelectColumn(\UsersPeer::USR_UID);
|
||||
$criteriaUser->addSelectColumn(\UsersPeer::USR_USERNAME);
|
||||
$criteriaUser->addSelectColumn(\UsersPeer::USR_FIRSTNAME);
|
||||
$criteriaUser->addSelectColumn(\UsersPeer::USR_LASTNAME);
|
||||
$criteriaUser->addSelectColumn(\UsersPeer::USR_EMAIL);
|
||||
|
||||
switch ($option) {
|
||||
case "ASSIGNED":
|
||||
$criteriaUser->addSelectColumn(\ProcessUserPeer::PU_UID);
|
||||
|
||||
$arrayCondition = array();
|
||||
$arrayCondition[] = array(\ProcessUserPeer::USR_UID, \UsersPeer::USR_UID, \Criteria::EQUAL);
|
||||
$arrayCondition[] = array(\UsersPeer::USR_STATUS, $delimiter . "ACTIVE" . $delimiter, \Criteria::EQUAL);
|
||||
$criteriaUser->addJoinMC($arrayCondition, \Criteria::LEFT_JOIN);
|
||||
|
||||
$criteriaUser->add(\ProcessUserPeer::PU_TYPE, "SUPERVISOR", \Criteria::EQUAL);
|
||||
$criteriaUser->add(\ProcessUserPeer::PRO_UID, $processUid, \Criteria::EQUAL);
|
||||
|
||||
break;
|
||||
case "AVAILABLE":
|
||||
$sql = "
|
||||
SELECT DISTINCT " . \UsersRolesPeer::USR_UID . "
|
||||
FROM " . \UsersRolesPeer::TABLE_NAME . ", " . \RolesPermissionsPeer::TABLE_NAME . ", " . \PermissionsPeer::TABLE_NAME . "
|
||||
WHERE " . \UsersRolesPeer::USR_UID . " = " . \UsersPeer::USR_UID . " AND
|
||||
" . \UsersRolesPeer::ROL_UID . " = " . \RolesPermissionsPeer::ROL_UID . " AND
|
||||
" . \RolesPermissionsPeer::PER_UID . " = " . \PermissionsPeer::PER_UID . " AND
|
||||
" . \PermissionsPeer::PER_CODE . " = " . $delimiter . "PM_SUPERVISOR" . $delimiter . " AND
|
||||
" . \PermissionsPeer::PER_SYSTEM . " = " . $delimiter . $arrayRbacSystemData["SYS_CODE"] . $delimiter . "
|
||||
";
|
||||
|
||||
$criteriaUser->add(
|
||||
$criteriaUser->getNewCriterion(\UsersPeer::USR_UID, $arrayUserUid, \Criteria::NOT_IN)->addAnd(
|
||||
$criteriaUser->getNewCriterion(\UsersPeer::USR_STATUS, "ACTIVE", \Criteria::EQUAL))->addAnd(
|
||||
$criteriaUser->getNewCriterion(\UsersPeer::USR_UID, \UsersPeer::USR_UID . " IN ($sql)", \Criteria::CUSTOM))
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData["filter"]) && trim($arrayFilterData["filter"]) != "") {
|
||||
$arraySearch = array(
|
||||
"" => "%" . $arrayFilterData["filter"] . "%",
|
||||
"LEFT" => $arrayFilterData["filter"] . "%",
|
||||
"RIGHT" => "%" . $arrayFilterData["filter"]
|
||||
);
|
||||
|
||||
$search = $arraySearch[(isset($arrayFilterData["filterOption"]))? $arrayFilterData["filterOption"] : ""];
|
||||
|
||||
$criteriaUser->add(
|
||||
$criteriaUser->getNewCriterion(\UsersPeer::USR_USERNAME, $search, \Criteria::LIKE)->addOr(
|
||||
$criteriaUser->getNewCriterion(\UsersPeer::USR_FIRSTNAME, $search, \Criteria::LIKE))->addOr(
|
||||
$criteriaUser->getNewCriterion(\UsersPeer::USR_LASTNAME, $search, \Criteria::LIKE))
|
||||
);
|
||||
}
|
||||
|
||||
//Number records total
|
||||
$criteriaCount = clone $criteriaUser;
|
||||
|
||||
$criteriaCount->clearSelectColumns();
|
||||
$criteriaCount->addSelectColumn("COUNT(" . \UsersPeer::USR_UID . ") AS NUM_REC");
|
||||
|
||||
switch ($option) {
|
||||
case "ASSIGNED":
|
||||
$rsCriteriaCount = \ProcessUserPeer::doSelectRS($criteriaCount);
|
||||
break;
|
||||
case "AVAILABLE":
|
||||
$rsCriteriaCount = \UsersPeer::doSelectRS($criteriaCount);
|
||||
break;
|
||||
}
|
||||
|
||||
$rsCriteriaCount->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
||||
|
||||
$result = $rsCriteriaCount->next();
|
||||
$row = $rsCriteriaCount->getRow();
|
||||
|
||||
$numRecTotalUser = (int)($row["NUM_REC"]);
|
||||
$numRecTotal = $numRecTotal + $numRecTotalUser;
|
||||
}
|
||||
|
||||
//Groups
|
||||
//Query
|
||||
if (empty($type) || $type == "group") {
|
||||
$criteriaGroup->addAscendingOrderByColumn("GRP_TITLE");
|
||||
|
||||
if (!is_null($start)) {
|
||||
$criteriaGroup->setOffset((int)($start));
|
||||
}
|
||||
|
||||
if (!is_null($limit)) {
|
||||
$criteriaGroup->setLimit((int)($limit));
|
||||
}
|
||||
|
||||
switch ($option) {
|
||||
case "ASSIGNED":
|
||||
$rsCriteriaGroup = \ProcessUserPeer::doSelectRS($criteriaGroup);
|
||||
break;
|
||||
case "AVAILABLE":
|
||||
$rsCriteriaGroup = \GroupwfPeer::doSelectRS($criteriaGroup);
|
||||
break;
|
||||
}
|
||||
|
||||
$rsCriteriaGroup->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
||||
|
||||
$numRecGroup = 0;
|
||||
|
||||
while ($rsCriteriaGroup->next()) {
|
||||
$row = $rsCriteriaGroup->getRow();
|
||||
|
||||
switch ($option) {
|
||||
case "ASSIGNED":
|
||||
$arraySupervisor[] = array(
|
||||
"pu_uid" => $row["PU_UID"],
|
||||
"pu_type" => "GROUP_SUPERVISOR",
|
||||
"grp_uid" => $row["GRP_UID"],
|
||||
"grp_name" => $row["GRP_TITLE"]
|
||||
);
|
||||
break;
|
||||
case "AVAILABLE":
|
||||
$arraySupervisor[] = array(
|
||||
"grp_uid" => $row["GRP_UID"],
|
||||
"grp_name" => $row["GRP_TITLE"],
|
||||
"obj_type" => "group"
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
$numRecGroup++;
|
||||
}
|
||||
}
|
||||
|
||||
//Users
|
||||
//Query
|
||||
if (empty($type) || $type == "user") {
|
||||
$flagUser = true;
|
||||
|
||||
if ($numRecTotalGroup > 0) {
|
||||
if ($numRecGroup > 0) {
|
||||
if (!is_null($limit)) {
|
||||
if ($numRecGroup < (int)($limit)) {
|
||||
$start = 0;
|
||||
$limit = $limit - $numRecGroup;
|
||||
} else {
|
||||
$flagUser = false;
|
||||
}
|
||||
} else {
|
||||
$start = 0;
|
||||
}
|
||||
} else {
|
||||
$start = (int)($start) - $numRecTotalGroup;
|
||||
}
|
||||
}
|
||||
|
||||
if ($flagUser) {
|
||||
//Users
|
||||
//Query
|
||||
$criteriaUser->addAscendingOrderByColumn(\UsersPeer::USR_FIRSTNAME);
|
||||
|
||||
if (!is_null($start)) {
|
||||
$criteriaUser->setOffset((int)($start));
|
||||
}
|
||||
|
||||
if (!is_null($limit)) {
|
||||
$criteriaUser->setLimit((int)($limit));
|
||||
}
|
||||
|
||||
switch ($option) {
|
||||
case "ASSIGNED":
|
||||
$rsCriteriaUser = \ProcessUserPeer::doSelectRS($criteriaUser);
|
||||
break;
|
||||
case "AVAILABLE":
|
||||
$rsCriteriaUser = \UsersPeer::doSelectRS($criteriaUser);
|
||||
break;
|
||||
}
|
||||
|
||||
$rsCriteriaUser->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
||||
|
||||
while ($rsCriteriaUser->next()) {
|
||||
$row = $rsCriteriaUser->getRow();
|
||||
|
||||
switch ($option) {
|
||||
case "ASSIGNED":
|
||||
$arraySupervisor[] = array(
|
||||
"pu_uid" => $row["PU_UID"],
|
||||
"pu_type" => "SUPERVISOR",
|
||||
"usr_uid" => $row["USR_UID"],
|
||||
"usr_firstname" => $row["USR_FIRSTNAME"],
|
||||
"usr_lastname" => $row["USR_LASTNAME"],
|
||||
"usr_username" => $row["USR_USERNAME"],
|
||||
"usr_email" => $row["USR_EMAIL"]
|
||||
);
|
||||
break;
|
||||
case "AVAILABLE":
|
||||
$arraySupervisor[] = array(
|
||||
"usr_uid" => $row["USR_UID"],
|
||||
"usr_firstname" => $row["USR_FIRSTNAME"],
|
||||
"usr_lastname" => $row["USR_LASTNAME"],
|
||||
"usr_username" => $row["USR_USERNAME"],
|
||||
"usr_email" => $row["USR_EMAIL"],
|
||||
"obj_type" => "user"
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Return
|
||||
return array(
|
||||
"total" => $numRecTotal,
|
||||
"start" => (int)((!is_null($startbk))? $startbk : 0),
|
||||
"limit" => (int)((!is_null($limitbk))? $limitbk : 0),
|
||||
$filterName => (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData["filter"]))? $arrayFilterData["filter"] : "",
|
||||
"data" => $arraySupervisor
|
||||
);
|
||||
} catch (\Exception $e) {
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
@@ -148,124 +491,6 @@ class ProcessSupervisor
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return available supervisors
|
||||
* @param string $obj_type
|
||||
* @param string $sProcessUID
|
||||
*
|
||||
* @return array
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
public function getAvailableProcessSupervisors($obj_type, $sProcessUID = '')
|
||||
{
|
||||
try {
|
||||
require_once (PATH_RBAC_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "Roles.php");
|
||||
$aRespLi = array();
|
||||
$aRespLiGroups = array();
|
||||
$userRole = new \ProcessMaker\BusinessModel\User();
|
||||
// Groups
|
||||
$oCriteria = new \Criteria('workflow');
|
||||
$oCriteria->addSelectColumn(\ProcessUserPeer::USR_UID);
|
||||
$oCriteria->addSelectColumn(\ProcessUserPeer::PU_TYPE);
|
||||
$oCriteria->add(\ProcessUserPeer::PRO_UID, $sProcessUID);
|
||||
$oCriteria->add(\ProcessUserPeer::PU_TYPE, '%SUPERVISOR%', \Criteria::LIKE);
|
||||
$oDataset = \ProcessUserPeer::doSelectRS($oCriteria);
|
||||
$oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
||||
$oDataset->next();
|
||||
$aUIDS = array();
|
||||
$aGRUS = array();
|
||||
while ($aRow = $oDataset->getRow()) {
|
||||
if ($aRow['PU_TYPE'] == 'SUPERVISOR') {
|
||||
$aUIDS [] = $aRow ['USR_UID'];
|
||||
} else {
|
||||
$aGRUS [] = $aRow ['USR_UID'];
|
||||
}
|
||||
$oDataset->next();
|
||||
}
|
||||
$oCriteria = new \Criteria('workflow');
|
||||
$oCriteria->addSelectColumn(\GroupwfPeer::GRP_UID);
|
||||
$oCriteria->addAsColumn('GRP_TITLE', \ContentPeer::CON_VALUE);
|
||||
$aConditions [] = array(\GroupwfPeer::GRP_UID, \ContentPeer::CON_ID);
|
||||
$aConditions [] = array(\ContentPeer::CON_CATEGORY, \DBAdapter::getStringDelimiter() . 'GRP_TITLE' . \DBAdapter::getStringDelimiter());
|
||||
$aConditions [] = array(\ContentPeer::CON_LANG, \DBAdapter::getStringDelimiter() . SYS_LANG . \DBAdapter::getStringDelimiter());
|
||||
$oCriteria->addJoinMC($aConditions, \Criteria::LEFT_JOIN);
|
||||
$oCriteria->add(\GroupwfPeer::GRP_UID, $aGRUS, \Criteria::NOT_IN);
|
||||
$oCriteria->addAscendingOrderByColumn(\ContentPeer::CON_VALUE);
|
||||
$oDataset = \GroupwfPeer::doSelectRS($oCriteria);
|
||||
$oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
||||
$oDataset->next();
|
||||
if ($obj_type == 'group' || $obj_type == '') {
|
||||
while ($aRow = $oDataset->getRow()) {
|
||||
$group = new \ProcessMaker\BusinessModel\Group();
|
||||
$userGroup = $group->getUsers('USERS', $aRow['GRP_UID']);
|
||||
foreach ($userGroup as $value) {
|
||||
$permission = $userRole->loadUserRolePermission('PROCESSMAKER', $value["USR_UID"]);
|
||||
foreach ($permission as $values) {
|
||||
if ($values["PER_CODE"] == 'PM_SUPERVISOR') {
|
||||
$aRespLiGroups[] = array('grp_uid' => $aRow['GRP_UID'],
|
||||
'grp_name' => $aRow['GRP_TITLE'],
|
||||
'obj_type' => "group");
|
||||
}
|
||||
}
|
||||
}
|
||||
$oDataset->next();
|
||||
}
|
||||
}
|
||||
$exclude = array("");
|
||||
for ($i = 0; $i<=count($aRespLiGroups)-1; $i++) {
|
||||
if (!in_array(trim($aRespLiGroups[$i]["grp_uid"]) ,$exclude)) {
|
||||
$aRespLi[] = $aRespLiGroups[$i];
|
||||
$exclude[] = trim($aRespLiGroups[$i]["grp_uid"]);
|
||||
}
|
||||
}
|
||||
$sDelimiter = \DBAdapter::getStringDelimiter();
|
||||
$oCriteria = new \Criteria('workflow');
|
||||
$oCriteria->addSelectColumn(\UsersPeer::USR_UID);
|
||||
$oCriteria->addSelectColumn(\UsersPeer::USR_ROLE);
|
||||
$oCriteria->add(\UsersPeer::USR_UID, $aUIDS, \Criteria::NOT_IN);
|
||||
$oDataset = \UsersPeer::doSelectRS($oCriteria);
|
||||
$oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
||||
$oDataset->next();
|
||||
$aUIDS = array();
|
||||
while ($aRow = $oDataset->getRow()) {
|
||||
$permission = $userRole->loadUserRolePermission('PROCESSMAKER', $aRow['USR_UID']);
|
||||
foreach ($permission as $key => $value) {
|
||||
if ($value["PER_CODE"] == 'PM_SUPERVISOR') {
|
||||
$aUIDS [] = $aRow ['USR_UID'];
|
||||
}
|
||||
}
|
||||
$oDataset->next();
|
||||
}
|
||||
$oCriteria = new \Criteria('workflow');
|
||||
$oCriteria->addSelectColumn(\UsersPeer::USR_UID);
|
||||
$oCriteria->addSelectColumn(\UsersPeer::USR_FIRSTNAME);
|
||||
$oCriteria->addSelectColumn(\UsersPeer::USR_LASTNAME);
|
||||
$oCriteria->addSelectColumn(\UsersPeer::USR_USERNAME);
|
||||
$oCriteria->addSelectColumn(\UsersPeer::USR_EMAIL);
|
||||
$oCriteria->add(\UsersPeer::USR_UID, $aUIDS, \Criteria::IN);
|
||||
$oCriteria->addAscendingOrderByColumn(\UsersPeer::USR_FIRSTNAME);
|
||||
$oCriteria->add(\UsersPeer::USR_STATUS, 'ACTIVE');
|
||||
$oDataset = \UsersPeer::doSelectRS($oCriteria);
|
||||
$oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
||||
$oDataset->next();
|
||||
if ($obj_type == 'user' || $obj_type == '') {
|
||||
while ($aRow = $oDataset->getRow()) {
|
||||
$aRespLi[] = array('usr_uid' => $aRow['USR_UID'],
|
||||
'usr_firstname' => $aRow['USR_FIRSTNAME'],
|
||||
'usr_lastname' => $aRow['USR_LASTNAME'],
|
||||
'usr_username' => $aRow['USR_USERNAME'],
|
||||
'usr_email' => $aRow['USR_EMAIL'],
|
||||
"obj_type" => "user" );
|
||||
$oDataset->next();
|
||||
}
|
||||
}
|
||||
return $aRespLi;
|
||||
} catch (Exception $e) {
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return dynaforms supervisor
|
||||
* @param string $sProcessUID
|
||||
@@ -1133,15 +1358,15 @@ class ProcessSupervisor
|
||||
$step_pos = $pu_pos;
|
||||
$step_uid = $pu_uid;
|
||||
foreach ($aSteps as $dataStep) {
|
||||
if($dataStep['obj_type'] == 'DYNAFORM'){
|
||||
if ($dataStep['obj_type'] == 'DYNAFORM') {
|
||||
if ($dataStep['pud_uid'] == $step_uid) {
|
||||
$prStepPos = (int)$dataStep['pud_position'];
|
||||
}
|
||||
}else{
|
||||
} else {
|
||||
if ($dataStep['pui_uid'] == $step_uid) {
|
||||
$prStepPos = (int)$dataStep['pui_position'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$seStepPos = $step_pos;
|
||||
//Principal Step is up
|
||||
@@ -1160,17 +1385,17 @@ class ProcessSupervisor
|
||||
}
|
||||
$range = range($iniPos, $finPos);
|
||||
foreach ($aSteps as $dataStep) {
|
||||
if($dataStep['obj_type'] == 'DYNAFORM'){
|
||||
if ($dataStep['obj_type'] == 'DYNAFORM') {
|
||||
if ((in_array($dataStep['pud_position'], $range)) && ($dataStep['pud_uid'] != $step_uid)) {
|
||||
$stepChangeIds[] = $dataStep['pud_uid'];
|
||||
$stepChangePos[] = $dataStep['pud_position'];
|
||||
}
|
||||
}else{
|
||||
} else {
|
||||
if ((in_array($dataStep['pui_position'], $range)) && ($dataStep['pui_uid'] != $step_uid)) {
|
||||
$stepChangeIds[] = $dataStep['pui_uid'];
|
||||
$stepChangePos[] = $dataStep['pui_position'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach ($stepChangeIds as $key => $value) {
|
||||
if ($modPos == 'UP') {
|
||||
|
||||
@@ -12,22 +12,27 @@ use \Luracast\Restler\RestException;
|
||||
class ProcessSupervisors extends Api
|
||||
{
|
||||
/**
|
||||
* @param string $prjUid {@min 32} {@max 32}
|
||||
* @url GET /:prj_uid/process-supervisors/paged
|
||||
* @url GET /:prj_uid/process-supervisors
|
||||
*
|
||||
* @url GET /:prjUid/process-supervisors
|
||||
* @param string $prj_uid {@min 32}{@max 32}
|
||||
*/
|
||||
public function doGetProcessSupervisors($prjUid)
|
||||
public function doGetProcessSupervisors($prj_uid, $filter = null, $lfilter = null, $rfilter = null, $start = null, $limit = null, $type = null)
|
||||
{
|
||||
try {
|
||||
$supervisor = new \ProcessMaker\BusinessModel\ProcessSupervisor();
|
||||
$arrayData = $supervisor->getProcessSupervisors($prjUid);
|
||||
//Response
|
||||
$response = $arrayData;
|
||||
|
||||
$arrayFilterData = array(
|
||||
"filter" => (!is_null($filter))? $filter : ((!is_null($lfilter))? $lfilter : ((!is_null($rfilter))? $rfilter : null)),
|
||||
"filterOption" => (!is_null($filter))? "" : ((!is_null($lfilter))? "LEFT" : ((!is_null($rfilter))? "RIGHT" : ""))
|
||||
);
|
||||
|
||||
$response = $supervisor->getProcessSupervisors($prj_uid, "ASSIGNED", $arrayFilterData, $start, $limit, $type);
|
||||
|
||||
return (preg_match("/^.*\/paged.*$/", $this->restler->url))? $response : $response["data"];
|
||||
} catch (\Exception $e) {
|
||||
//response
|
||||
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
|
||||
}
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -51,26 +56,29 @@ class ProcessSupervisors extends Api
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $prjUid {@min 32} {@max 32}
|
||||
* @param string $obj_type
|
||||
* @url GET /:prj_uid/available-process-supervisors/paged
|
||||
* @url GET /:prj_uid/available-process-supervisors
|
||||
*
|
||||
* @url GET /:prjUid/available-process-supervisors
|
||||
* @param string $prj_uid {@min 32}{@max 32}
|
||||
*/
|
||||
public function doGetAvailableSupervisors($prjUid, $obj_type = '')
|
||||
public function doGetAvailableProcessSupervisors($prj_uid, $filter = null, $lfilter = null, $rfilter = null, $start = null, $limit = null, $type = null)
|
||||
{
|
||||
try {
|
||||
$supervisor = new \ProcessMaker\BusinessModel\ProcessSupervisor();
|
||||
$arrayData = $supervisor->getAvailableProcessSupervisors($obj_type, $prjUid);
|
||||
//Response
|
||||
$response = $arrayData;
|
||||
|
||||
$arrayFilterData = array(
|
||||
"filter" => (!is_null($filter))? $filter : ((!is_null($lfilter))? $lfilter : ((!is_null($rfilter))? $rfilter : null)),
|
||||
"filterOption" => (!is_null($filter))? "" : ((!is_null($lfilter))? "LEFT" : ((!is_null($rfilter))? "RIGHT" : ""))
|
||||
);
|
||||
|
||||
$response = $supervisor->getProcessSupervisors($prj_uid, "AVAILABLE", $arrayFilterData, $start, $limit, $type);
|
||||
|
||||
return (preg_match("/^.*\/paged.*$/", $this->restler->url))? $response : $response["data"];
|
||||
} catch (\Exception $e) {
|
||||
//response
|
||||
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
|
||||
}
|
||||
return $response;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param string $prjUid {@min 32} {@max 32}
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user