diff --git a/workflow/engine/classes/model/Groupwf.php b/workflow/engine/classes/model/Groupwf.php index c20cf3da9..cfeec6c4f 100755 --- a/workflow/engine/classes/model/Groupwf.php +++ b/workflow/engine/classes/model/Groupwf.php @@ -343,36 +343,39 @@ class Groupwf extends BaseGroupwf return $result; } - public function getAllGroup ($start = null, $limit = null, $search = null, $sortField = null, $sortDir = null) + public function getAllGroup($start = null, $limit = null, $search = null, $sortField = null, $sortDir = null) { require_once PATH_RBAC . "model/RbacUsers.php"; require_once 'classes/model/TaskUser.php'; require_once 'classes/model/GroupUser.php'; - + $sDelimiter = DBAdapter::getStringDelimiter(); + $aConditions = [ + [GroupwfPeer::GRP_UID, 'C.CON_ID'], + ['C.CON_CATEGORY', $sDelimiter . 'GRP_TITLE' . $sDelimiter], + ['C.CON_LANG', 'if((SELECT COUNT(S.CON_ID) FROM CONTENT AS S WHERE S.CON_ID=C.CON_ID AND S.CON_CATEGORY=C.CON_CATEGORY AND S.CON_LANG=' . $sDelimiter . SYS_LANG . $sDelimiter . ')>0,' . $sDelimiter . SYS_LANG . $sDelimiter . ',' . $sDelimiter . 'en' . $sDelimiter . ')'] + ]; $totalCount = 0; - $criteria = new Criteria( 'workflow' ); - $criteria->addSelectColumn( GroupwfPeer::GRP_UID ); - $criteria->addJoin( GroupwfPeer::GRP_UID, ContentPeer::CON_ID, Criteria::LEFT_JOIN ); - $criteria->add( ContentPeer::CON_CATEGORY, 'GRP_TITLE' ); - $criteria->add( ContentPeer::CON_LANG, SYS_LANG ); + $criteria = new Criteria('workflow'); + $criteria->addSelectColumn(GroupwfPeer::GRP_UID); + $criteria->addAlias('C', 'CONTENT'); + $criteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); if ($search) { - $criteria->add( ContentPeer::CON_VALUE, '%' . $search . '%', Criteria::LIKE ); + $criteria->add('C.CON_VALUE', '%' . $search . '%', Criteria::LIKE); } - $totalRows = GroupwfPeer::doCount( $criteria ); + $totalRows = GroupwfPeer::doCount($criteria); - $criteria = new Criteria( 'workflow' ); - $criteria->addSelectColumn( GroupwfPeer::GRP_UID ); - $criteria->addSelectColumn( GroupwfPeer::GRP_STATUS ); - $criteria->addSelectColumn( GroupwfPeer::GRP_UX ); - $criteria->addAsColumn( 'GRP_TITLE', ContentPeer::CON_VALUE ); - $criteria->addJoin( GroupwfPeer::GRP_UID, ContentPeer::CON_ID, Criteria::LEFT_JOIN ); - $criteria->add( ContentPeer::CON_CATEGORY, 'GRP_TITLE' ); - $criteria->add( ContentPeer::CON_LANG, SYS_LANG ); + $criteria = new Criteria('workflow'); + $criteria->addSelectColumn(GroupwfPeer::GRP_UID); + $criteria->addSelectColumn(GroupwfPeer::GRP_STATUS); + $criteria->addSelectColumn(GroupwfPeer::GRP_UX); + $criteria->addAlias('C', 'CONTENT'); + $criteria->addAsColumn('GRP_TITLE', 'C.CON_VALUE'); + $criteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); if (is_null($sortField) || trim($sortField) == "") { - $sortField = ContentPeer::CON_VALUE; + $sortField = 'GRP_TITLE'; } if (!is_null($sortDir) && trim($sortDir) != "" && strtoupper($sortDir) == "DESC") { @@ -382,29 +385,28 @@ class Groupwf extends BaseGroupwf } if ($start != '') { - $criteria->setOffset( $start ); + $criteria->setOffset($start); } if ($limit != '') { - $criteria->setLimit( $limit ); + $criteria->setLimit($limit); } if ($search) { - $criteria->add( ContentPeer::CON_VALUE, '%' . $search . '%', Criteria::LIKE ); + $criteria->add('C.CON_VALUE', '%' . $search . '%', Criteria::LIKE); } - $oDataset = GroupwfPeer::doSelectRS( $criteria ); - $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); - $processes = Array (); - $uids = array (); - $groups = array (); - $aGroups = array (); + $oDataset = GroupwfPeer::doSelectRS($criteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $processes = array(); + $uids = array(); + $groups = array(); + $aGroups = array(); while ($oDataset->next()) { $groups[] = $oDataset->getRow(); } - return array ('rows' => $groups,'totalCount' => $totalRows - ); + return array('rows' => $groups, 'totalCount' => $totalRows); } public function filterGroup ($filter, $start, $limit) diff --git a/workflow/engine/methods/cases/summary.php b/workflow/engine/methods/cases/summary.php index 72be7a59c..1092f3848 100755 --- a/workflow/engine/methods/cases/summary.php +++ b/workflow/engine/methods/cases/summary.php @@ -74,7 +74,7 @@ try { G::LoadClass('pmDynaform'); $FieldsPmDynaform = $applicationFields; $FieldsPmDynaform["CURRENT_DYNAFORM"] = $_REQUEST['DYN_UID']; - $a = new pmDynaform($FieldsPmDynaform); + $a = new pmDynaform(\ProcessMaker\Util\DateTime::convertUtcToTimeZone($FieldsPmDynaform)); $a->printView(); } if (file_exists( PATH_DYNAFORM . $applicationFields['PRO_UID'] . PATH_SEP . $_REQUEST['DYN_UID'] . '.xml' )) { diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Group/User.php b/workflow/engine/src/ProcessMaker/BusinessModel/Group/User.php index 967481d0c..d5bc7c5a0 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Group/User.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Group/User.php @@ -169,6 +169,115 @@ class User } } + /** + * Assign users to groups + * + * @param array $arrayData Data of users and groups + * + * return array Return result + */ + public function createBatch(array $arrayData) + { + try { + //Verify data + if (empty($arrayData)) { + throw new \Exception(\G::LoadTranslation('ID_INFORMATION_EMPTY')); + } + + $arrayAux = []; + + foreach ($arrayData as $value) { + $arrayAux = $value; + + if (!isset($arrayAux['groupUid'])){ + throw new \Exception(\G::LoadTranslation('ID_DOES_NOT_EXIST', ['groupUid'])); + } + + if (gettype($arrayAux['groupUid']) != 'string'){ + throw new \Exception(\G::LoadTranslation('ID_INVALID_VALUE_STRING', ['groupUid'])); + } + + if (!isset($arrayAux['users'])) { + throw new \Exception(\G::LoadTranslation('ID_DOES_NOT_EXIST', ['users'])); + } + + if(gettype($arrayAux['users']) != 'array') { + throw new \Exception(\G::LoadTranslation('ID_INVALID_VALUE_ARRAY', ['users'])); + } + } + + //Assign + $group = new \Groupwf(); + + $arrayResult = []; + $arrayUsrGrp = []; + + foreach ($arrayData as $value) { + $flagAssignGrp = 1; + $arrayMsg = []; + + $arrayUsrGrp = $value; + + //Verify data + $grpUid = \GroupwfPeer::retrieveByPK($arrayUsrGrp['groupUid']); + + if (is_null($grpUid)) { + $arrayMsg['groupUid'] = [$arrayUsrGrp['groupUid'] => 'GROUP_NOT_EXISTS']; + $flagAssignGrp = 0; + } + + if ($flagAssignGrp == 1) { + $arrayMsg['groupUid'] = [$arrayUsrGrp['groupUid'] => 'GROUP_EXISTS']; + + $arrayUsr = $arrayUsrGrp['users']; + $arrayResultUsr = []; + + foreach ($arrayUsr as $valueUidUser) { + $flagAssignUsr = 1; + + //Verify data + $userUid = \UsersPeer::retrieveByPK($valueUidUser); + + if (is_null($userUid)) { + $arrayResultUsr[$valueUidUser] = 'USER_NOT_EXISTS'; + $flagAssignUsr = 0; + } + + if ($flagAssignUsr == 1 && $userUid->getUsrStatus() == 'CLOSED') { + $arrayResultUsr[$valueUidUser] = 'USER_INACTIVE'; + $flagAssignUsr = 0; + } + + $groupUser = \GroupUserPeer::retrieveByPK($arrayUsrGrp['groupUid'], $valueUidUser); + + if ($flagAssignUsr == 1 && !is_null($groupUser)) { + $arrayResultUsr[$valueUidUser] = 'USER_ALREADY_ASSIGNED'; + $flagAssignUsr = 0; + } + + //Assign + if ($flagAssignUsr == 1) { + $group = new \Groups(); + + $group->addUserToGroup($arrayUsrGrp['groupUid'], $valueUidUser); + + $arrayResultUsr[$valueUidUser] = 'USER_SUCCESSFULLY_ASSIGNED'; + } + + $arrayMsg['users'] = $arrayResultUsr; + } + } + + $arrayResult[] = $arrayMsg; + } + + //Return + return $arrayResult; + } catch (\Exception $e) { + throw $e; + } + } + /** * Unassign User of the Group * diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Group/User.php b/workflow/engine/src/ProcessMaker/Services/Api/Group/User.php index a55ff2075..30281903b 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Group/User.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Group/User.php @@ -31,6 +31,36 @@ class User extends Api } } + /** + * @url POST /batch-users + * + * @param array $request_data + * + * @status 201 + */ + public function doPostBatchUsers($request_data) + { + try { + $user = new \ProcessMaker\BusinessModel\User(); + + $usrUid = $this->getUserId(); + + if (!$user->checkPermission($usrUid, 'PM_USERS')) { + throw new \Exception(\G::LoadTranslation('ID_USER_NOT_HAVE_PERMISSION', array($usrUid))); + } + + $groupUser = new \ProcessMaker\BusinessModel\Group\User(); + $groupUser->setFormatFieldNameInUppercase(false); + + $arrayData = $groupUser->createBatch($request_data); + + //Return + return $arrayData; + } catch (\Exception $e) { + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } + /** * @url DELETE /:grp_uid/user/:usr_uid *