Merged in feature/HOR-4424 (pull request #6476)

HOR-4478

Approved-by: Julio Cesar Laura Avendaño <contact@julio-laura.com>
This commit is contained in:
Paula Quispe
2018-05-25 13:10:08 +00:00
committed by Julio Cesar Laura Avendaño
15 changed files with 279 additions and 176 deletions

View File

@@ -3349,6 +3349,7 @@ class Cases
* @param array $rolesPermissions, the roles that we need to review
* @param array $objectPermissions, the permissions that we need to review
* @param boolean $objectSupervisor, if we need to get all the objects supervisor
* @param string $tasUid
* @return array
*/
public function userAuthorization(
@@ -3357,7 +3358,8 @@ class Cases
$appUid,
$rolesPermissions = [],
$objectPermissions = [],
$objectSupervisor = false
$objectSupervisor = false,
$tasUid = ''
) {
$arrayAccess = [];
@@ -3389,7 +3391,7 @@ class Cases
if (count($objectPermissions) > 0) {
$case = new ClassesCases();
foreach ($objectPermissions as $key => $value) {
$resPermission = $case->getAllObjectsFrom($proUid, $appUid, '', $usrUid, $value);
$resPermission = $case->getAllObjectsFrom($proUid, $appUid, $tasUid, $usrUid, $value);
if (isset($resPermission[$key])) {
$arrayAccess['objectPermissions'][$key] = $resPermission[$key];
}

View File

@@ -1,11 +1,12 @@
<?php
namespace ProcessMaker\BusinessModel;
use Behat\Behat\Exception\Exception;
use \G;
use \Criteria;
use \ObjectPermissionPeer;
use \Exception as StandardException;
use BasePeer;
use Criteria;
use G;
use ObjectPermission;
use ObjectPermissionPeer;
use Exception;
/**
* @author Brayan Pereyra (Cochalo) <brayan@colosa.com>
@@ -13,6 +14,7 @@ use \Exception as StandardException;
*/
class ProcessPermissions
{
const DOES_NOT_APPLY = 'N/A';
/**
* Get list for Process Permissions
*
@@ -20,8 +22,6 @@ class ProcessPermissions
* @var string $op_uid. Uid for Process Permission
*
* @access public
* @author Brayan Pereyra (Cochalo) <brayan@colosa.com>
* @copyright Colosa - Bolivia
*
* @return array
*/
@@ -42,6 +42,14 @@ class ProcessPermissions
$oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
//Participated
if ($aRow['OP_PARTICIPATE'] == 0) {
$participated = G::LoadTranslation('ID_NO');
} else {
$participated = G::LoadTranslation('ID_YES');
}
//Obtain action (permission)
$action = G::LoadTranslation('ID_' . $aRow['OP_ACTION']);
//Obtain task target
if (($aRow['TAS_UID'] != '') && ($aRow['TAS_UID'] != '0')) {
try {
@@ -87,97 +95,87 @@ class ProcessPermissions
//Obtain object and type
switch ($aRow['OP_OBJ_TYPE']) {
case 'ALL':
$sObjectType = G::LoadTranslation('ID_ALL');
$sObject = G::LoadTranslation('ID_ALL');
$objectType = G::LoadTranslation('ID_ALL');
$object = G::LoadTranslation('ID_ALL');
break;
case 'ANY': //For backward compatibility (some process with ANY instead of ALL
$sObjectType = G::LoadTranslation('ID_ALL');
$sObject = G::LoadTranslation('ID_ALL');
$objectType = G::LoadTranslation('ID_ALL');
$object = G::LoadTranslation('ID_ALL');
break;
/* case 'ANY_DYNAFORM':
$sObjectType = G::LoadTranslation('ID_ANY_DYNAFORM');
$sObject = G::LoadTranslation('ID_ALL');
break;
case 'ANY_INPUT':
$sObjectType = G::LoadTranslation('ID_ANY_INPUT');
$sObject = G::LoadTranslation('ID_ALL');
break;
case 'ANY_OUTPUT':
$sObjectType = G::LoadTranslation('ID_ANY_OUTPUT');
$sObject = G::LoadTranslation('ID_ALL');
break; */
case 'DYNAFORM':
$sObjectType = G::LoadTranslation('ID_DYNAFORM');
$objectType = G::LoadTranslation('ID_DYNAFORM');
if (($aRow['OP_OBJ_UID'] != '') && ($aRow['OP_OBJ_UID'] != '0')) {
$oDynaform = new \Dynaform();
try {
$aFields = $oDynaform->load($aRow['OP_OBJ_UID']);
$sObject = $aFields['DYN_TITLE'];
$object = $aFields['DYN_TITLE'];
} catch (\Exception $errorNotExists) {
error_log($errorNotExists->getMessage() . ' - ' . G::LoadTranslation('ID_PROCESS_PERMISSIONS') .
error_log($errorNotExists->getMessage() . ' - ' . G::LoadTranslation('ID_PROCESS_PERMISSIONS') .
' - ' . $aRow['OP_OBJ_TYPE'] . ' - ' . $aRow['OP_OBJ_UID']);
$oDataset->next();
continue 2;
}
} else {
$sObject = G::LoadTranslation('ID_ALL');
$object = G::LoadTranslation('ID_ALL');
}
break;
case 'INPUT':
$sObjectType = G::LoadTranslation('ID_INPUT_DOCUMENT');
$objectType = G::LoadTranslation('ID_INPUT_DOCUMENT');
if (($aRow['OP_OBJ_UID'] != '') && ($aRow['OP_OBJ_UID'] != '0')) {
$oInputDocument = new \InputDocument();
try {
$aFields = $oInputDocument->load($aRow['OP_OBJ_UID']);
$sObject = $aFields['INP_DOC_TITLE'];
$object = $aFields['INP_DOC_TITLE'];
} catch (\Exception $errorNotExists) {
error_log($errorNotExists->getMessage() . ' - ' . G::LoadTranslation('ID_PROCESS_PERMISSIONS') .
error_log($errorNotExists->getMessage() . ' - ' . G::LoadTranslation('ID_PROCESS_PERMISSIONS') .
' - ' . $aRow['OP_OBJ_TYPE'] . ' - ' . $aRow['OP_OBJ_UID']);
$oDataset->next();
continue 2;
}
} else {
$sObject = G::LoadTranslation('ID_ALL');
$object = G::LoadTranslation('ID_ALL');
}
break;
case 'OUTPUT':
$sObjectType = G::LoadTranslation('ID_OUTPUT_DOCUMENT');
$objectType = G::LoadTranslation('ID_OUTPUT_DOCUMENT');
if (($aRow['OP_OBJ_UID'] != '') && ($aRow['OP_OBJ_UID'] != '0')) {
$oOutputDocument = new \OutputDocument();
try {
$aFields = $oOutputDocument->load($aRow['OP_OBJ_UID']);
$sObject = $aFields['OUT_DOC_TITLE'];
$object = $aFields['OUT_DOC_TITLE'];
} catch (\Exception $errorNotExists) {
error_log($errorNotExists->getMessage() . ' - ' . G::LoadTranslation('ID_PROCESS_PERMISSIONS') .
error_log($errorNotExists->getMessage() . ' - ' . G::LoadTranslation('ID_PROCESS_PERMISSIONS') .
' - ' . $aRow['OP_OBJ_TYPE'] . ' - ' . $aRow['OP_OBJ_UID']);
$oDataset->next();
continue 2;
}
} else {
$sObject = G::LoadTranslation('ID_ALL');
$object = G::LoadTranslation('ID_ALL');
}
break;
case 'CASES_NOTES':
$sObjectType = G::LoadTranslation('ID_CASES_NOTES');
$sObject = 'N/A';
$objectType = G::LoadTranslation('ID_CASES_NOTES');
$object = self::DOES_NOT_APPLY;
break;
case 'MSGS_HISTORY':
$sObjectType = G::LoadTranslation('MSGS_HISTORY');
$sObject = G::LoadTranslation('ID_ALL');
$objectType = G::LoadTranslation('MSGS_HISTORY');
$object = G::LoadTranslation('ID_ALL');
break;
/*----------------------------------********---------------------------------*/
case 'REASSIGN_MY_CASES':
$objectType = G::LoadTranslation('ID_REASSIGN_MY_CASES');
$object = self::DOES_NOT_APPLY;
$aRow['OP_ACTION'] = self::DOES_NOT_APPLY;
$participated = self::DOES_NOT_APPLY;
break;
/*----------------------------------********---------------------------------*/
default:
$sObjectType = G::LoadTranslation('ID_ALL');
$sObject = G::LoadTranslation('ID_ALL');
$objectType = G::LoadTranslation('ID_ALL');
$object = G::LoadTranslation('ID_ALL');
break;
}
//Participated
if ($aRow['OP_PARTICIPATE'] == 0) {
$sParticipated = G::LoadTranslation('ID_NO');
} else {
$sParticipated = G::LoadTranslation('ID_YES');
}
//Obtain action (permission)
$sAction = G::LoadTranslation('ID_' . $aRow['OP_ACTION']);
//Add to array
$arrayTemp = array();
$arrayTemp = array_merge($aRow, array(
@@ -185,10 +183,10 @@ class ProcessPermissions
'TASK_TARGET' => $sTaskTarget,
'GROUP_USER' => $sUserGroup,
'TASK_SOURCE' => $sTaskSource,
'OBJECT_TYPE' => $sObjectType,
'OBJECT' => $sObject,
'PARTICIPATED' => $sParticipated,
'ACTION' => $sAction,
'OBJECT_TYPE' => $objectType,
'OBJECT' => $object,
'PARTICIPATED' => $participated,
'ACTION' => $action,
'OP_CASE_STATUS' => $aRow['OP_CASE_STATUS'])
);
$aObjectsPermissions[] = array_change_key_case($arrayTemp, CASE_LOWER);
@@ -213,7 +211,7 @@ class ProcessPermissions
*
* @access public
*
* @return void
* @return void|array
* @throws Exception
*/
public function saveProcessPermission($data, $opUid = '')
@@ -226,7 +224,7 @@ class ProcessPermissions
$opUid = $this->validateOpUid($opUid);
}
if (empty($data['USR_UID']) || (isset($data['USR_UID']) && $data['USR_UID'] === "null")) {
throw (new StandardException(G::LoadTranslation("ID_SELECT_USER_OR_GROUP")));
throw (new Exception(G::LoadTranslation("ID_SELECT_USER_OR_GROUP")));
}
if ($data['OP_USER_RELATION'] == "1") {
$this->validateUsrUid($data['USR_UID']);
@@ -244,50 +242,59 @@ class ProcessPermissions
$data['OP_TASK_SOURCE'] = '';
}
$sObjectUID = '';
$opCaseStatus = !empty($data['OP_CASE_STATUS']) ? $data['OP_CASE_STATUS'] : '0';
$opObjectUid = '';
switch ($data['OP_OBJ_TYPE']) {
case 'ANY':
//case 'ANY_DYNAFORM':CASES_NOTES
//case 'ANY_INPUT':
//case 'ANY_OUTPUT':
$sObjectUID = '';
$opObjectUid = '';
break;
case 'DYNAFORM':
$data['DYNAFORMS'] = $data['DYNAFORMS'] == 0 ? '': $data['DYNAFORMS'];
if ($data['DYNAFORMS'] != '') {
$this->validateDynUid($data['DYNAFORMS']);
}
$sObjectUID = $data['DYNAFORMS'];
$opObjectUid = $data['DYNAFORMS'];
break;
case 'ATTACHED':
$sObjectUID = '';
$opObjectUid = '';
break;
case 'INPUT':
$data['INPUTS'] = $data['INPUTS'] == 0 ? '': $data['INPUTS'];
if ($data['INPUTS'] != '') {
$this->validateInpUid($data['INPUTS']);
}
$sObjectUID = $data['INPUTS'];
$opObjectUid = $data['INPUTS'];
break;
case 'OUTPUT':
$data['OUTPUTS'] = $data['OUTPUTS'] == 0 ? '': $data['OUTPUTS'];
if ($data['OUTPUTS'] != '') {
$this->validateOutUid($data['OUTPUTS']);
}
$sObjectUID = $data['OUTPUTS'];
$opObjectUid = $data['OUTPUTS'];
break;
case 'REASSIGN_MY_CASES':
$opCaseStatus = 'TO_DO';
$data['OP_ACTION'] = '';
break;
}
$oOP = new \ObjectPermission();
$objectPermission = new ObjectPermission();
$permissionUid = ($opUid != '') ? $opUid : G::generateUniqueID();
$data['OP_UID'] = $permissionUid;
$data['OP_OBJ_UID'] = $sObjectUID;
$opParticipate = empty($data['OP_PARTICIPATE']) ? ObjectPermission::OP_PARTICIPATE_NO : $data['OP_PARTICIPATE'];
$data['OP_PARTICIPATE'] = $opParticipate;
$data['OP_CASE_STATUS'] = $opCaseStatus;
$data['OP_OBJ_UID'] = $opObjectUid;
if ($opUid == '') {
$oOP->fromArray( $data, \BasePeer::TYPE_FIELDNAME );
$oOP->save();
$daraRes = $oOP->load($permissionUid);
$daraRes = array_change_key_case($daraRes, CASE_LOWER);
return $daraRes;
if (empty($opUid)) {
$objectPermission->fromArray($data, BasePeer::TYPE_FIELDNAME);
$objectPermission->save();
$newPermission = $objectPermission->load($permissionUid);
$newPermission = array_change_key_case($newPermission, CASE_LOWER);
return $newPermission;
} else {
$data['TAS_UID'] = $data['TAS_UID'] != '' ? $data['TAS_UID'] : '0';
$data['OP_TASK_SOURCE'] = $data['OP_TASK_SOURCE'] != '' ? $data['OP_TASK_SOURCE'] : '0';
@@ -296,7 +303,8 @@ class ProcessPermissions
$data['OP_OBJ_UID'] = $data['OP_OBJ_UID'] != '' ? $data['OP_OBJ_UID'] : '0';
$data['OP_ACTION'] = $data['OP_ACTION'] != '' ? $data['OP_ACTION'] : '0';
$data['OP_CASE_STATUS'] = $data['OP_CASE_STATUS'] != '' ? $data['OP_CASE_STATUS'] : '0';
$oOP->update($data);
$objectPermission->update($data);
}
} catch (Exception $e) {
throw $e;

View File

@@ -1,8 +1,10 @@
<?php
namespace ProcessMaker\Services\Api\Project;
use \ProcessMaker\Services\Api;
use \Luracast\Restler\RestException;
use Exception;
use Luracast\Restler\RestException;
use ProcessMaker\BusinessModel\ProcessPermissions as BmProcessPermissions;
use ProcessMaker\Services\Api;
/**
* Project\ProcessPermissions Api Controller
@@ -17,20 +19,18 @@ class ProcessPermissions extends Api
/**
* @param string $prj_uid {@min 1} {@max 32}
*
* @author Brayan Pereyra (Cochalo) <brayan@colosa.com>
* @copyright Colosa - Bolivia
*
* @return array
* @throws RestException
*
* @url GET /:prj_uid/process-permissions
*/
public function doGetProcessPermissions($prj_uid)
{
try {
$processPermissions = new \ProcessMaker\BusinessModel\ProcessPermissions();
$processPermissions = new BmProcessPermissions();
$response = $processPermissions->getProcessPermissions($prj_uid);
return $response;
} catch (\Exception $e) {
} catch (Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
@@ -39,20 +39,18 @@ class ProcessPermissions extends Api
* @param string $prj_uid {@min 1} {@max 32}
* @param string $ob_uid {@min 1} {@max 32}
*
* @author Brayan Pereyra (Cochalo) <brayan@colosa.com>
* @copyright Colosa - Bolivia
*
* @return array
* @throws RestException
*
* @url GET /:prj_uid/process-permission/:ob_uid
*/
public function doGetProcessPermission($prj_uid, $ob_uid)
{
try {
$processPermissions = new \ProcessMaker\BusinessModel\ProcessPermissions();
$processPermissions = new BmProcessPermissions();
$response = $processPermissions->getProcessPermissions($prj_uid, $ob_uid);
return $response;
} catch (\Exception $e) {
} catch (Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
@@ -75,11 +73,11 @@ class ProcessPermissions extends Api
public function doPostProcessPermission($prj_uid, $request_data)
{
try {
$hiddenFields = array('task_target', 'group_user', 'task_source',
$hiddenFields = ['task_target', 'group_user', 'task_source',
'object_type', 'object', 'participated', 'action'
);
];
$request_data['pro_uid'] = $prj_uid;
$processPermissions = new \ProcessMaker\BusinessModel\ProcessPermissions();
$processPermissions = new BmProcessPermissions();
$response = $processPermissions->saveProcessPermission($request_data);
foreach ($response as $key => $eventData) {
if (in_array($key, $hiddenFields)) {
@@ -87,13 +85,13 @@ class ProcessPermissions extends Api
}
}
return $response;
} catch (\Exception $e) {
} catch (Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
/**
* Update process permisson.
* Update process permission.
*
* @url PUT /:prj_uid/process-permission/:ob_uid
*
@@ -104,7 +102,7 @@ class ProcessPermissions extends Api
* @param string $op_user_relation {@from body} {@choice 1,2}
* @param string $op_case_status {@from body} {@choice ALL,DRAFT,TO_DO,PAUSED,COMPLETED}
* @param string $op_participate {@from body} {@choice 0,1}
* @param string $op_obj_type {@from body} {@choice ANY,DYNAFORM,ATTACHMENT,INPUT,OUTPUT,CASES_NOTES,MSGS_HISTORY,SUMMARY_FORM}
* @param string $op_obj_type {@from body} {@choice ANY,DYNAFORM,ATTACHMENT,INPUT,OUTPUT,CASES_NOTES,MSGS_HISTORY,SUMMARY_FORM,REASSIGN_MY_CASES}
* @param string $op_action {@from body} {@choice VIEW,BLOCK,DELETE,RESEND}
* @param string $tas_uid {@from body}
* @param string $op_task_source {@from body}
@@ -124,10 +122,10 @@ class ProcessPermissions extends Api
$request_data,
$usr_uid,
$op_user_relation,
$op_case_status,
$op_participate,
$op_case_status = 'ALL',
$op_participate = '0',
$op_obj_type,
$op_action,
$op_action = 'VIEW',
$tas_uid = '',
$op_task_source = '',
$dynaforms = '',
@@ -136,10 +134,11 @@ class ProcessPermissions extends Api
) {
try {
$request_data['pro_uid'] = $prj_uid;
$processPermissions = new \ProcessMaker\BusinessModel\ProcessPermissions();
$request_data['op_action'] = $op_action;
$processPermissions = new BmProcessPermissions();
$response = $processPermissions->saveProcessPermission($request_data, $ob_uid);
return $response;
} catch (\Exception $e) {
} catch (Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
@@ -153,14 +152,14 @@ class ProcessPermissions extends Api
* @param string $ob_uid {@min 1} {@max 32}
*
* @return void
* @throws RestException
*/
public function doDeleteProcessPermission($prj_uid, $ob_uid)
{
try {
$processPermissions = new \ProcessMaker\BusinessModel\ProcessPermissions();
$response = $processPermissions->deleteProcessPermission($ob_uid, $prj_uid);
return $response;
} catch (\Exception $e) {
$processPermissions = new BmProcessPermissions();
$processPermissions->deleteProcessPermission($ob_uid, $prj_uid);
} catch (Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}