diff --git a/rbac/engine/classes/model/RbacUsers.php b/rbac/engine/classes/model/RbacUsers.php index a6da34c66..6895d2ef0 100644 --- a/rbac/engine/classes/model/RbacUsers.php +++ b/rbac/engine/classes/model/RbacUsers.php @@ -401,6 +401,38 @@ class RbacUsers extends BaseRbacUsers return $array; } + + /** + * Verify if user have the permission + * + * @param string $userUid + * @param string $permission + * + * @return bool + * @throws Exception + */ + public function verifyPermission($userUid, $permission) + { + try { + $criteria = new Criteria('rbac'); + $criteria->clearSelectColumns(); + $criteria->add(PermissionsPeer::PER_CODE, $permission, Criteria::EQUAL); + $criteria->addJoin(UsersRolesPeer::ROL_UID, RolesPermissionsPeer::ROL_UID, Criteria::LEFT_JOIN); + $criteria->addJoin(RolesPermissionsPeer::PER_UID, PermissionsPeer::PER_UID, Criteria::LEFT_JOIN); + $criteria->add(UsersRolesPeer::USR_UID, $userUid, Criteria::EQUAL); + + $response = false; + $permission = PermissionsPeer::doSelectOne($criteria); + if ($permission) { + $response = true; + } + + return $response; + } catch (Exception $error) { + throw($error); + } + + } } // Users diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/GroupTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/GroupTest.php new file mode 100644 index 000000000..d502ce5a1 --- /dev/null +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/GroupTest.php @@ -0,0 +1,131 @@ +group; + } + + /** + * Set instance group + * + * @param Group $group + */ + public function setInstanceGroup(Group $group) + { + $this->group = $group; + } + + /** + * Sets up the unit tests. + */ + protected function setUp() + { + parent::setUp(); + + //Move section + global $RBAC; + $RBAC->initRBAC(); + $RBAC->loadUserRolePermission($RBAC->sSystem, '00000000000000000000000000000001'); + + $this->setInstanceGroup(new Group()); + } + + /** + * Information Group + * + * @return array Definition Data Group + */ + public function testDataGroup() + { + $response = [ + 'GRP_TITLE' => 'Group Test Unit', + 'GRP_STATUS' => 'ACTIVE' + ]; + return $response; + } + + /** + * Create group + * + * @depends testDataGroup + * + * @param array $dataGroup Information Group + * + * @return string group Uid + */ + public function testCreate($dataGroup) + { + $response = $this->getInstanceGroup()->create($dataGroup); + + $this->assertArrayHasKey('GRP_UID', $response); + + return $response['GRP_UID']; + } + + /** + * Get users from a group created recently. + * + * @depends testCreate + * @param string $groupUid Uid group + */ + public function testGetUsersOfGroup($groupUid) + { + $response = $this->getInstanceGroup()->getUsers('USERS', $groupUid); + $this->assertCount(0, $response); + } + + /** + * Get available users for assign to a group + * + * @depends testCreate + * @param string $groupUid Uid group + */ + public function testGetUsersAvailable($groupUid) + { + $response = $this->getInstanceGroup()->getUsers('AVAILABLE-USERS', $groupUid); + $this->assertCount(1, $response); + } + + /** + * Obtain assigned supervisors + * + * @depends testCreate + * @param string $groupUid Uid group + */ + public function testGetUsersSupervisor($groupUid) + { + $response = $this->getInstanceGroup()->getUsers('SUPERVISOR', $groupUid); + $this->assertCount(0, $response); + } + + /** + * Delete group + * + * @depends testCreate + * @expectedException Exception + * + * @param string $groupUid Uid Group + */ + public function testDelete($groupUid) + { + $this->getInstanceGroup()->delete($groupUid); + $this->getInstanceGroup()->getGroup($groupUid); + } +} diff --git a/workflow/engine/classes/model/GroupUser.php b/workflow/engine/classes/model/GroupUser.php index bf082de4f..ef15c63c0 100644 --- a/workflow/engine/classes/model/GroupUser.php +++ b/workflow/engine/classes/model/GroupUser.php @@ -217,5 +217,99 @@ class GroupUser extends BaseGroupUser } return false; } + + /** + * Load All users by groupUid + * + * @param $groupUid + * @param string $type + * @param string $filter + * @param string $sortField + * @param string $sortDir + * @param int $start + * @param int $limit + * @return array + * @throws Exception + */ + public function getUsersbyGroup($groupUid, $type = 'USERS', $filter = '', $sortField = 'USR_USERNAME', $sortDir = 'ASC', $start = 0, $limit = null) + { + try { + $validSorting = ['USR_UID', 'USR_USERNAME', 'USR_FIRSTNAME', 'USR_LASTNAME', 'USR_EMAIL', 'USR_STATUS']; + $response = [ + 'start' => !empty($start) ? $start : 0, + 'limit' => !empty($limit) ? $limit : 0, + 'filter' => !empty($filter) ? $filter : '', + 'data' => [] + ]; + + + $criteria = new Criteria('workflow'); + $criteria->add(UsersPeer::USR_STATUS, 'CLOSED', Criteria::NOT_EQUAL); + if ($type === 'AVAILABLE-USERS') { + $subQuery = 'SELECT ' . GroupUserPeer::USR_UID . + ' FROM ' . GroupUserPeer::TABLE_NAME . + ' WHERE ' . GroupUserPeer::GRP_UID . ' = "' . $groupUid . '" ' . + 'UNION SELECT "' . RBAC::GUEST_USER_UID . '"'; + + $criteria->add(UsersPeer::USR_UID, UsersPeer::USR_UID . " NOT IN ($subQuery)", Criteria::CUSTOM); + } else { + //USERS - SUPERVISOR + $criteria->addJoin(GroupUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN); + $criteria->add(GroupUserPeer::GRP_UID, $groupUid, Criteria::EQUAL); + } + + if (!empty($filter)) { + $criteria->add($criteria->getNewCriterion(UsersPeer::USR_USERNAME, '%' . $filter . '%', Criteria::LIKE)-> + addOr($criteria->getNewCriterion(UsersPeer::USR_FIRSTNAME, '%' . $filter . '%', Criteria::LIKE)-> + addOr($criteria->getNewCriterion(UsersPeer::USR_LASTNAME, '%' . $filter . '%', Criteria::LIKE)))); + } + $response['total'] = UsersPeer::doCount($criteria); + + $criteria->addSelectColumn(UsersPeer::USR_UID); + $criteria->addSelectColumn(UsersPeer::USR_USERNAME); + $criteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); + $criteria->addSelectColumn(UsersPeer::USR_LASTNAME); + $criteria->addSelectColumn(UsersPeer::USR_EMAIL); + $criteria->addSelectColumn(UsersPeer::USR_STATUS); + + $sort = UsersPeer::USR_USERNAME; + if (!empty($sortField) && in_array($sortField, $validSorting, true)) { + $sort = UsersPeer::TABLE_NAME . '.' . $sortField; + } + + if (!empty($sortDir) && strtoupper($sortDir) === 'DESC') { + $criteria->addDescendingOrderByColumn($sort); + } else { + $criteria->addAscendingOrderByColumn($sort); + } + + if (!empty($start)) { + $criteria->setOffset((int)$start); + } + + if (!empty($limit)) { + $criteria->setLimit((int)$limit); + } + + $dataSet = UsersPeer::doSelectRS($criteria); + $dataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $userRbac = new RbacUsers(); + while ($dataSet->next()) { + $row = $dataSet->getRow(); + if ($type === 'SUPERVISOR') { + if ($userRbac->verifyPermission($row['USR_UID'], 'PM_SUPERVISOR')) { + $response['data'][] = $row; + } + } else { + $response['data'][] = $row; + } + } + + return $response; + + } catch (Exception $error) { + throw $error; + } + } } diff --git a/workflow/engine/methods/groups/groups_Ajax.php b/workflow/engine/methods/groups/groups_Ajax.php index b58ebfc0c..4b227b6dd 100644 --- a/workflow/engine/methods/groups/groups_Ajax.php +++ b/workflow/engine/methods/groups/groups_Ajax.php @@ -1,59 +1,33 @@ . - * - * For more information, contact Colosa Inc, 2566 Le Jeune Rd., - * Coral Gables, FL, 33134, USA, or email info@colosa.com. - */ + if (($RBAC_Response = $RBAC->userCanAccess("PM_USERS")) != 1) { return $RBAC_Response; } $_POST['action'] = get_ajax_value('action'); +$groups = new Groups(); +$groupWf = new Groupwf(); + switch ($_POST['action']) { case 'showUsers': - - $oGroups = new Groups(); - $oGroup = new Groupwf(); - $aFields = $oGroup->load($_POST['sGroupUID']); + $fields = $groupWf->load($_POST['sGroupUID']); global $G_PUBLISH; $G_PUBLISH = new Publisher(); - //$G_PUBLISH->AddContent('xmlform', 'xmlform', 'groups/groups_UsersListTitle', '', array('GRP_NAME' => $aFields['GRP_TITLE'])); - $G_PUBLISH->AddContent('propeltable', 'groups/paged-table2', 'groups/groups_UsersList', $oGroups->getUsersGroupCriteria($_POST['sGroupUID']), array('GRP_UID' => $_POST['sGroupUID'],'GRP_NAME' => $aFields['GRP_TITLE'])); + $G_PUBLISH->AddContent('propeltable', 'groups/paged-table2', 'groups/groups_UsersList', $groups->getUsersGroupCriteria($_POST['sGroupUID']), array('GRP_UID' => $_POST['sGroupUID'], 'GRP_NAME' => $fields['GRP_TITLE'])); $oHeadPublisher = headPublisher::getSingleton(); - $oHeadPublisher->addScriptCode("groupname=\"{$aFields["GRP_TITLE"]}\";"); + $oHeadPublisher->addScriptCode("groupname=\"{$fields["GRP_TITLE"]}\";"); G::RenderPage('publish', 'raw'); break; case 'assignUser': - $oGroup = new Groups(); - $oGroup->addUserToGroup($_POST['GRP_UID'], $_POST['USR_UID']); + $groups->addUserToGroup($_POST['GRP_UID'], $_POST['USR_UID']); break; case 'assignAllUsers': - $oGroup = new Groups(); - $aUsers = explode(',', $_POST['aUsers']); - for ($i = 0; $i < count($aUsers); $i ++) { - $oGroup->addUserToGroup($_POST['GRP_UID'], $aUsers[$i]); + foreach (explode(',', $_POST['aUsers']) as $user) { + $groups->addUserToGroup($_POST['GRP_UID'], $user); } break; case 'ofToAssignUser': - $oGroup = new Groups(); - $oGroup->removeUserOfGroup($_POST['GRP_UID'], $_POST['USR_UID']); + $groups->removeUserOfGroup($_POST['GRP_UID'], $_POST['USR_UID']); break; case 'verifyGroupname': $_POST['sOriginalGroupname'] = get_ajax_value('sOriginalGroupname'); @@ -61,13 +35,12 @@ switch ($_POST['action']) { if ($_POST['sOriginalGroupname'] == $_POST['sGroupname']) { echo '0'; } else { - $oGroup = new Groupwf(); - $oCriteria = $oGroup->loadByGroupname($_POST['sGroupname']); + $oCriteria = $groupWf->loadByGroupname($_POST['sGroupname']); $oDataset = GroupwfPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); $aRow = $oDataset->getRow(); - if (! $aRow) { + if (!$aRow) { echo '0'; } else { echo '1'; @@ -75,16 +48,15 @@ switch ($_POST['action']) { } break; case 'groupsList': - $co = new Configurations(); - $config = $co->getConfiguration('groupList', 'pageSize', '', $_SESSION['USER_LOGGED']); - $env = $co->getConfiguration('ENVIRONMENT_SETTINGS', ''); + $config = new Configurations(); + $config = $config->getConfiguration('groupList', 'pageSize', '', $_SESSION['USER_LOGGED']); $limit_size = isset($config['pageSize']) ? $config['pageSize'] : 20; $start = isset($_REQUEST['start']) ? $_REQUEST['start'] : 0; $limit = isset($_REQUEST['limit']) ? $_REQUEST['limit'] : $limit_size; $filter = isset($_REQUEST['textFilter']) ? $_REQUEST['textFilter'] : ''; - $sortField = isset($_REQUEST["sort"])? $_REQUEST["sort"] : ""; - $sortDir = isset($_REQUEST["dir"])? $_REQUEST["dir"] : ""; + $sortField = isset($_REQUEST["sort"]) ? $_REQUEST["sort"] : ""; + $sortDir = isset($_REQUEST["dir"]) ? $_REQUEST["dir"] : ""; global $RBAC; if ($limit == $start) { @@ -96,17 +68,15 @@ switch ($_POST['action']) { require_once PATH_CONTROLLERS . 'adminProxy.php'; $uxList = adminProxy::getUxTypesList(); - $groups = new Groupwf(); - - $data = $groups->getAllGroup($start, $limit, $filter, $sortField, $sortDir, true); + $data = $groupWf->getAllGroup($start, $limit, $filter, $sortField, $sortDir, true); $result = $data['rows']; $totalRows = 0; $arrData = array(); foreach ($result as $results) { - $totalRows ++; - $results['CON_VALUE'] = str_replace(array("<",">" - ), array("<",">" + $totalRows++; + $results['CON_VALUE'] = str_replace(array("<", ">" + ), array("<", ">" ), $results['GRP_TITLE']); $results['GRP_TASKS'] = isset($aTask[$results['GRP_UID']]) ? $aTask[$results['GRP_UID']] : 0; $arrData[] = $results; @@ -120,8 +90,7 @@ switch ($_POST['action']) { echo G::json_encode($result); break; case 'exitsGroupName': - $oGroup = new Groupwf(); - $oCriteria = $oGroup->loadByGroupname($_POST['GRP_NAME']); + $oCriteria = $groupWf->loadByGroupname($_POST['GRP_NAME']); $oDataset = GroupwfPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); @@ -134,9 +103,8 @@ switch ($_POST['action']) { $newGroup['GRP_STATUS'] = ($_POST['status'] == '1') ? 'ACTIVE' : 'INACTIVE'; $newGroup['GRP_TITLE'] = trim($_POST['name']); unset($newGroup['GRP_UID']); - $group = new Groupwf(); - $group->create($newGroup); - G::auditLog("CreateGroup", "Group Name: ".$newGroup['GRP_TITLE']." - Group Status: ".$newGroup['GRP_STATUS']); + $groupWf->create($newGroup); + G::auditLog("CreateGroup", "Group Name: " . $newGroup['GRP_TITLE'] . " - Group Status: " . $newGroup['GRP_STATUS']); echo '{success: true}'; @@ -145,18 +113,16 @@ switch ($_POST['action']) { $editGroup['GRP_UID'] = $_POST['grp_uid']; $editGroup['GRP_STATUS'] = ($_POST['status'] == '1') ? 'ACTIVE' : 'INACTIVE'; $editGroup['GRP_TITLE'] = trim($_POST['name']); - $group = new Groupwf(); - $group->update($editGroup); - G::auditLog("UpdateGroup", "Group Name: ".$editGroup['GRP_TITLE']." - Group ID: (".$_POST['grp_uid'].") - Group Status: ".$editGroup['GRP_STATUS']); + $groupWf->update($editGroup); + G::auditLog("UpdateGroup", "Group Name: " . $editGroup['GRP_TITLE'] . " - Group ID: (" . $_POST['grp_uid'] . ") - Group Status: " . $editGroup['GRP_STATUS']); echo '{success: true}'; break; case 'deleteGroup': - $group = new Groupwf(); - if (! isset($_POST['GRP_UID'])) { + if (!isset($_POST['GRP_UID'])) { return; } - $group->remove(urldecode($_POST['GRP_UID'])); - G::auditLog("DeleteGroup", "Group Name: ".$_POST['GRP_NAME']." Group ID: (".$_POST['GRP_UID'].") "); + $groupWf->remove(urldecode($_POST['GRP_UID'])); + G::auditLog("DeleteGroup", "Group Name: " . $_POST['GRP_NAME'] . " Group ID: (" . $_POST['GRP_UID'] . ") "); require_once 'classes/model/TaskUser.php'; $oProcess = new TaskUser(); $oCriteria = new Criteria('workflow'); @@ -175,7 +141,7 @@ switch ($_POST['action']) { $criteria->add(ProcessUserPeer::USR_UID, $_POST['GRP_UID']); $criteria->add(ProcessUserPeer::PU_TYPE, 'GROUP_SUPERVISOR'); ProcessUserPeer::doDelete($criteria); - + //Delete group users require_once 'classes/model/GroupUser.php'; $criteria = new Criteria('workflow'); @@ -185,130 +151,36 @@ switch ($_POST['action']) { echo '{success: true}'; break; case 'assignedMembers': - - $co = new Configurations(); - $config = $co->getConfiguration('groupList', 'pageSize', '', $_SESSION['USER_LOGGED']); - $env = $co->getConfiguration('ENVIRONMENT_SETTINGS', ''); - $limit_size = isset($config['pageSize']) ? $config['pageSize'] : 20; - $start = isset($_REQUEST['start']) ? $_REQUEST['start'] : 0; - $limit = isset($_REQUEST['limit']) ? $_REQUEST['limit'] : $limit_size; - $filter = isset($_REQUEST['textFilter']) ? $_REQUEST['textFilter'] : ''; - - $sGroupUID = $_REQUEST['gUID']; - - $aUsers = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn('COUNT(*) AS CNT'); - $oCriteria->addJoin(GroupUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN); - $oCriteria->add(GroupUserPeer::GRP_UID, $sGroupUID); - $oCriteria->add(UsersPeer::USR_STATUS, 'CLOSED', Criteria::NOT_EQUAL); - $filter = (isset($_POST['textFilter'])) ? $_POST['textFilter'] : ''; - if ($filter != '') { - $oCriteria->add($oCriteria->getNewCriterion(UsersPeer::USR_USERNAME, '%' . $filter . '%', Criteria::LIKE)->addOr($oCriteria->getNewCriterion(UsersPeer::USR_FIRSTNAME, '%' . $filter . '%', Criteria::LIKE)->addOr($oCriteria->getNewCriterion(UsersPeer::USR_LASTNAME, '%' . $filter . '%', Criteria::LIKE)))); - } - $oDataset = UsersPeer::DoSelectRs($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $row = $oDataset->getRow(); - $totalRows = $row['CNT']; - - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(GroupUserPeer::GRP_UID); - $oCriteria->addSelectColumn(UsersPeer::USR_UID); - $oCriteria->addSelectColumn(UsersPeer::USR_USERNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_LASTNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_EMAIL); - $oCriteria->addSelectColumn(UsersPeer::USR_STATUS); - $oCriteria->addJoin(GroupUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN); - $oCriteria->add(GroupUserPeer::GRP_UID, $sGroupUID); - $oCriteria->add(UsersPeer::USR_STATUS, 'CLOSED', Criteria::NOT_EQUAL); - $filter = (isset($_POST['textFilter'])) ? $_POST['textFilter'] : ''; - if ($filter != '') { - $oCriteria->add($oCriteria->getNewCriterion(UsersPeer::USR_USERNAME, '%' . $filter . '%', Criteria::LIKE)->addOr($oCriteria->getNewCriterion(UsersPeer::USR_FIRSTNAME, '%' . $filter . '%', Criteria::LIKE)->addOr($oCriteria->getNewCriterion(UsersPeer::USR_LASTNAME, '%' . $filter . '%', Criteria::LIKE)))); - } - $oCriteria->setOffset($start); - $oCriteria->setLimit($limit); - - $oDataset = UsersPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $arrData = array(); - while ($oDataset->next()) { - $arrData[] = $oDataset->getRow(); - } - G::header('Content-Type: application/json'); - echo '{success: true, members: ' . G::json_encode($arrData) . ', total_users: ' . $totalRows . '}'; - break; case 'availableMembers': - $co = new Configurations(); - $config = $co->getConfiguration('groupList', 'pageSize', '', $_SESSION['USER_LOGGED']); - $env = $co->getConfiguration('ENVIRONMENT_SETTINGS', ''); + $config = new Configurations(); + $inputFilter = new InputFilter(); + + $config = $config->getConfiguration('groupList', 'pageSize', '', $_SESSION['USER_LOGGED']); $limit_size = isset($config['pageSize']) ? $config['pageSize'] : 20; $start = isset($_REQUEST['start']) ? $_REQUEST['start'] : 0; $limit = isset($_REQUEST['limit']) ? $_REQUEST['limit'] : $limit_size; $filter = isset($_REQUEST['textFilter']) ? $_REQUEST['textFilter'] : ''; + $groupUid = $inputFilter->quoteSmart($_REQUEST['gUID'], Propel::getConnection("workflow")->getResource()); - $inputFilter = new InputFilter(); - $subQuery = "SELECT " . GroupUserPeer::USR_UID . - " FROM " . GroupUserPeer::TABLE_NAME . - " WHERE " . GroupUserPeer::GRP_UID . " = '" . - $inputFilter->quoteSmart($_REQUEST['gUID'], Propel::getConnection("workflow")) . "'\n" . - "UNION SELECT '" . RBAC::GUEST_USER_UID . "'"; + $groupUsers = new GroupUser(); + $type = $_POST['action'] === 'assignedMembers' ? 'USERS' : 'AVAILABLE-USERS'; + $data = $groupUsers->getUsersbyGroup($groupUid, $type, $filter, 'USR_USERNAME', 'ASC', $start, $limit); - $aUsers = array(); - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn('COUNT(*) AS CNT'); - $oCriteria->add(UsersPeer::USR_STATUS, 'CLOSED', Criteria::NOT_EQUAL); - $oCriteria->add(UsersPeer::USR_UID, UsersPeer::USR_UID . " NOT IN ($subQuery)", Criteria::CUSTOM); - $filter = (isset($_POST['textFilter'])) ? $_POST['textFilter'] : ''; - if ($filter != '') { - $oCriteria->add($oCriteria->getNewCriterion(UsersPeer::USR_USERNAME, '%' . $filter . '%', Criteria::LIKE)->addOr($oCriteria->getNewCriterion(UsersPeer::USR_FIRSTNAME, '%' . $filter . '%', Criteria::LIKE)->addOr($oCriteria->getNewCriterion(UsersPeer::USR_LASTNAME, '%' . $filter . '%', Criteria::LIKE)))); - } - $oDataset = UsersPeer::DoSelectRs($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $row = $oDataset->getRow(); - $totalRows = $row['CNT']; - - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(UsersPeer::USR_UID); - $oCriteria->addSelectColumn(UsersPeer::USR_USERNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_LASTNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_EMAIL); - $oCriteria->addSelectColumn(UsersPeer::USR_STATUS); - $oCriteria->add(UsersPeer::USR_STATUS, 'CLOSED', Criteria::NOT_EQUAL); - $oCriteria->add(UsersPeer::USR_UID, UsersPeer::USR_UID . " NOT IN ($subQuery)", Criteria::CUSTOM); - $filter = (isset($_POST['textFilter'])) ? $_POST['textFilter'] : ''; - if ($filter != '') { - $oCriteria->add($oCriteria->getNewCriterion(UsersPeer::USR_USERNAME, '%' . $filter . '%', Criteria::LIKE)->addOr($oCriteria->getNewCriterion(UsersPeer::USR_FIRSTNAME, '%' . $filter . '%', Criteria::LIKE)->addOr($oCriteria->getNewCriterion(UsersPeer::USR_LASTNAME, '%' . $filter . '%', Criteria::LIKE)))); - } - $oCriteria->addAscendingOrderByColumn(UsersPeer::USR_USERNAME); - $oCriteria->setOffset($start); - $oCriteria->setLimit($limit); - $oDataset = UsersPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $arrData = array(); - while ($oDataset->next()) { - $arrData[] = $oDataset->getRow(); - } G::header('Content-Type: application/json'); - echo '{success: true, members: ' . G::json_encode($arrData) . ', total_users: ' . $totalRows . '}'; + echo '{success: true, members: ' . G::json_encode($data["data"]) . ', total_users: ' . $data["total"] . '}'; break; case 'assignUsersToGroupsMultiple': $GRP_UID = $_POST['GRP_UID']; $uUIDs = explode(',', $_POST['USR_UID']); - $oGroup = new Groups(); foreach ($uUIDs as $USR_UID) { - $oGroup->addUserToGroup($GRP_UID, $USR_UID); + $groups->addUserToGroup($GRP_UID, $USR_UID); } break; case 'deleteUsersToGroupsMultiple': $GRP_UID = $_POST['GRP_UID']; $uUIDs = explode(',', $_POST['USR_UID']); - $oGroup = new Groups(); foreach ($uUIDs as $USR_UID) { - $oGroup->removeUserOfGroup($GRP_UID, $USR_UID); + $groups->removeUserOfGroup($GRP_UID, $USR_UID); } break; case 'updatePageSize': diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Group.php b/workflow/engine/src/ProcessMaker/BusinessModel/Group.php index 95684a4b4..63082315b 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Group.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Group.php @@ -1,6 +1,12 @@ arrayFieldDefinition as $key => $value) { $this->arrayFieldNameForException[$value["fieldNameAux"]] = $key; } - } catch (\Exception $e) { + } catch (Exception $e) { throw $e; } } @@ -47,7 +53,7 @@ class Group $this->formatFieldNameInUppercase = $flag; $this->setArrayFieldNameForException($this->arrayFieldNameForException); - } catch (\Exception $e) { + } catch (Exception $e) { throw $e; } } @@ -65,7 +71,7 @@ class Group foreach ($arrayData as $key => $value) { $this->arrayFieldNameForException[$key] = $this->getFieldNameByFormatFieldName($value); } - } catch (\Exception $e) { + } catch (Exception $e) { throw $e; } } @@ -81,7 +87,7 @@ class Group { try { return ($this->formatFieldNameInUppercase)? strtoupper($fieldName) : strtolower($fieldName); - } catch (\Exception $e) { + } catch (Exception $e) { throw $e; } } @@ -117,7 +123,7 @@ class Group } else { return false; } - } catch (\Exception $e) { + } catch (Exception $e) { throw $e; } } @@ -133,12 +139,12 @@ class Group public function throwExceptionIfNotExistsGroup($groupUid, $fieldNameForException) { try { - $group = new \Groupwf(); + $group = new Groupwf(); if (!$group->GroupwfExists($groupUid)) { - throw new \Exception(\G::LoadTranslation("ID_GROUP_DOES_NOT_EXIST", array($fieldNameForException, $groupUid))); + throw new Exception(\G::LoadTranslation("ID_GROUP_DOES_NOT_EXIST", array($fieldNameForException, $groupUid))); } - } catch (\Exception $e) { + } catch (Exception $e) { throw $e; } } @@ -156,9 +162,9 @@ class Group { try { if ($this->existsTitle($groupTitle, $groupUidExclude)) { - throw new \Exception(\G::LoadTranslation("ID_GROUP_TITLE_ALREADY_EXISTS", array($fieldNameForException, $groupTitle))); + throw new Exception(\G::LoadTranslation("ID_GROUP_TITLE_ALREADY_EXISTS", array($fieldNameForException, $groupTitle))); } - } catch (\Exception $e) { + } catch (Exception $e) { throw $e; } } @@ -166,38 +172,39 @@ class Group /** * Create Group * - * @param array $arrayData Data + * @param array $arrayData Information of group * - * return array Return data of the new Group created + * @return array Return data of the new Group created + * @throws Exception */ public function create($arrayData) { try { $arrayData = array_change_key_case($arrayData, CASE_UPPER); - unset($arrayData["GRP_UID"]); + unset($arrayData['GRP_UID']); //Verify data - $process = new \ProcessMaker\BusinessModel\Process(); + $process = new Process(); $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, true); - $this->throwExceptionIfExistsTitle($arrayData["GRP_TITLE"], $this->arrayFieldNameForException["groupTitle"]); + $this->throwExceptionIfExistsTitle($arrayData['GRP_TITLE'], $this->arrayFieldNameForException['groupTitle']); //Create - $group = new \Groupwf(); + $group = new Groupwf(); $groupUid = $group->create($arrayData); //Return - $arrayData = array_merge(array("GRP_UID" => $groupUid), $arrayData); + $arrayData = array_merge(['GRP_UID' => $groupUid], $arrayData); if (!$this->formatFieldNameInUppercase) { $arrayData = array_change_key_case($arrayData, CASE_LOWER); } return $arrayData; - } catch (\Exception $e) { + } catch (Exception $e) { throw $e; } } @@ -205,10 +212,11 @@ class Group /** * Update Group * - * @param string $groupUid Unique id of Group - * @param array $arrayData Data + * @param string $groupUid Unique id of group + * @param array $arrayData information of group * - * return array Return data of the Group updated + * @return array Return data of the Group updated + * @throws Exception */ public function update($groupUid, $arrayData) { @@ -216,32 +224,32 @@ class Group $arrayData = array_change_key_case($arrayData, CASE_UPPER); //Verify data - $process = new \ProcessMaker\BusinessModel\Process(); + $process = new Process(); - $this->throwExceptionIfNotExistsGroup($groupUid, $this->arrayFieldNameForException["groupUid"]); + $this->throwExceptionIfNotExistsGroup($groupUid, $this->arrayFieldNameForException['groupUid']); $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, false); - if (isset($arrayData["GRP_TITLE"])) { - $this->throwExceptionIfExistsTitle($arrayData["GRP_TITLE"], $this->arrayFieldNameForException["groupTitle"], $groupUid); + if (isset($arrayData['GRP_TITLE'])) { + $this->throwExceptionIfExistsTitle($arrayData['GRP_TITLE'], $this->arrayFieldNameForException['groupTitle'], $groupUid); } //Update - $group = new \Groupwf(); + $group = new Groupwf(); - $arrayData["GRP_UID"] = $groupUid; + $arrayData['GRP_UID'] = $groupUid; $result = $group->update($arrayData); //Return - unset($arrayData["GRP_UID"]); + unset($arrayData['GRP_UID']); if (!$this->formatFieldNameInUppercase) { $arrayData = array_change_key_case($arrayData, CASE_LOWER); } return $arrayData; - } catch (\Exception $e) { + } catch (Exception $e) { throw $e; } } @@ -262,11 +270,11 @@ class Group $arrayTotalTasksByGroup = $this->getTotalTasksByGroup($groupUid); if (isset($arrayTotalTasksByGroup[$groupUid]) && $arrayTotalTasksByGroup[$groupUid] > 0) { - throw new \Exception(\G::LoadTranslation("ID_GROUP_CANNOT_DELETE_WHILE_ASSIGNED_TO_TASK")); + throw new Exception(\G::LoadTranslation("ID_GROUP_CANNOT_DELETE_WHILE_ASSIGNED_TO_TASK")); } //Delete - $group = new \Groupwf(); + $group = new Groupwf(); $result = $group->remove($groupUid); @@ -291,7 +299,7 @@ class Group $criteria->add(\ProcessUserPeer::PU_TYPE, "GROUP_SUPERVISOR"); \ProcessUserPeer::doDelete($criteria); - } catch (\Exception $e) { + } catch (Exception $e) { throw $e; } } @@ -312,7 +320,7 @@ class Group $criteria->addSelectColumn(\GroupwfPeer::GRP_LDAP_DN); $criteria->addSelectColumn(\GroupwfPeer::GRP_UX); return $criteria; - } catch (\Exception $e) { + } catch (Exception $e) { throw $e; } } @@ -359,7 +367,7 @@ class Group //Return return $arrayData; - } catch (\Exception $e) { + } catch (Exception $e) { throw $e; } } @@ -406,7 +414,7 @@ class Group //Return return $arrayData; - } catch (\Exception $e) { + } catch (Exception $e) { throw $e; } } @@ -428,7 +436,7 @@ class Group $this->getFieldNameByFormatFieldName("GRP_USERS") => $record["GRP_USERS"], $this->getFieldNameByFormatFieldName("GRP_TASKS") => $record["GRP_TASKS"] ); - } catch (\Exception $e) { + } catch (Exception $e) { throw $e; } } @@ -452,7 +460,7 @@ class Group $numRecTotal = 0; //Verify data - $process = new \ProcessMaker\BusinessModel\Process(); + $process = new Process(); $process->throwExceptionIfDataNotMetPagerVarDefinition(array("start" => $start, "limit" => $limit), $this->arrayFieldNameForException); @@ -561,7 +569,7 @@ class Group $filterName => (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData["filter"]))? $arrayFilterData["filter"] : "", "data" => $arrayGroup ); - } catch (\Exception $e) { + } catch (Exception $e) { throw $e; } } @@ -600,7 +608,7 @@ class Group //Return return $this->getGroupDataFromRecord($row); - } catch (\Exception $e) { + } catch (Exception $e) { throw $e; } } @@ -656,7 +664,7 @@ class Group } return $criteria; - } catch (\Exception $e) { + } catch (Exception $e) { throw $e; } } @@ -679,7 +687,7 @@ class Group $this->getFieldNameByFormatFieldName("USR_EMAIL") => $record["USR_EMAIL"] . "", $this->getFieldNameByFormatFieldName("USR_STATUS") => $record["USR_STATUS"] ); - } catch (\Exception $e) { + } catch (Exception $e) { throw $e; } } @@ -708,123 +716,41 @@ class Group } /** - * Get all Users of a Group + * Get all users of a group * - * @param string $option Option (USERS, AVAILABLE-USERS) - * @param string $groupUid Unique id of Group - * @param array $arrayFilterData Data of the filters - * @param string $sortField Field name to sort - * @param string $sortDir Direction of sorting (ASC, DESC) - * @param int $start Start - * @param int $limit Limit + * @param string $option types USERS|AVAILABLE-USERS|SUPERVISOR + * @param string $groupUid Unique id of Group + * @param array $arrayFilterData Data of the filters + * @param string $sortField Field name to sort + * @param string $sortDir Direction of sorting (ASC, DESC) + * @param int $start start + * @param int $limit limit * - * return array Return an array with all Users of a Group + * @return array Return an array with all Users of a Group + * @throws Exception */ - public function getUsers($option, $groupUid, $arrayFilterData = null, $sortField = null, $sortDir = null, $start = null, $limit = null) + public function getUsers($option, $groupUid, $arrayFilterData = [], $sortField = 'USR_USERNAME', $sortDir = 'ASC', $start = 0, $limit = null) { try { - $arrayUser = array(); - //Verify data - $process = new \ProcessMaker\BusinessModel\Process(); + $process = new Process(); - $this->throwExceptionIfNotExistsGroup($groupUid, $this->arrayFieldNameForException["groupUid"]); + $this->throwExceptionIfNotExistsGroup($groupUid, $this->arrayFieldNameForException['groupUid']); + $process->throwExceptionIfDataNotMetPagerVarDefinition(['start' => $start, 'limit' => $limit], $this->arrayFieldNameForException); - $process->throwExceptionIfDataNotMetPagerVarDefinition(array("start" => $start, "limit" => $limit), $this->arrayFieldNameForException); + $filter = isset($arrayFilterData['filter']) ? $arrayFilterData['filter'] : ''; - //Get data - if (!is_null($limit) && $limit . "" == "0") { - return $arrayUser; + $groupUsers = new GroupUser(); + $data = $groupUsers->getUsersbyGroup($groupUid, $option, $filter, $sortField, $sortDir, $start, $limit); + + $response = []; + foreach ($data['data'] as $user) + { + $response[] = $this->getUserDataFromRecord($user); } - //SQL - switch ($option) { - case "SUPERVISOR": - $flagPermission = true; - //Criteria for Supervisor - $criteria = $this->getUserCriteria($groupUid, $arrayFilterData); - break; - case "USERS": - //Criteria - $criteria = $this->getUserCriteria($groupUid, $arrayFilterData); - break; - case "AVAILABLE-USERS": - //Get Uids - $arrayUid = array(); - - $criteria = $this->getUserCriteria($groupUid); - - $rsCriteria = \UsersPeer::doSelectRS($criteria); - $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); - - while ($rsCriteria->next()) { - $row = $rsCriteria->getRow(); - - $arrayUid[] = $row["USR_UID"]; - } - - //Criteria - $criteria = $this->getUserCriteria("", $arrayFilterData, $arrayUid); - break; - } - - //SQL - if (!is_null($sortField) && trim($sortField) != "") { - $sortField = strtoupper($sortField); - - if (in_array($sortField, array("USR_UID", "USR_USERNAME", "USR_FIRSTNAME", "USR_LASTNAME", "USR_EMAIL", "USR_STATUS"))) { - $sortField = \UsersPeer::TABLE_NAME . "." . $sortField; - } else { - $sortField = \UsersPeer::USR_USERNAME; - } - } else { - $sortField = \UsersPeer::USR_USERNAME; - } - - if (!is_null($sortDir) && trim($sortDir) != "" && strtoupper($sortDir) == "DESC") { - $criteria->addDescendingOrderByColumn($sortField); - } else { - $criteria->addAscendingOrderByColumn($sortField); - } - - if (!is_null($start)) { - $criteria->setOffset((int)($start)); - } - - if (!is_null($limit)) { - $criteria->setLimit((int)($limit)); - } - - $rsCriteria = \UsersPeer::doSelectRS($criteria); - $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); - - if (isset($flagPermission) && $flagPermission) { - - while ($rsCriteria->next()) { - $row = $rsCriteria->getRow(); - - $aPermissions = $this->loadUserRolePermission("PROCESSMAKER", $row['USR_UID']); - $bInclude = false; - - foreach ($aPermissions as $aPermission) { - if ($aPermission['PER_CODE'] == 'PM_SUPERVISOR') { - $bInclude = true; - } - } - if ($bInclude) { - $arrayUser[] = $this->getUserDataFromRecord($row); - } - } - } else { - while ($rsCriteria->next()) { - $row = $rsCriteria->getRow(); - - $arrayUser[] = $this->getUserDataFromRecord($row); - } - } - //Return - return $arrayUser; - } catch (\Exception $e) { + return $response; + } catch (Exception $e) { throw $e; } }