Files
luos/workflow/engine/src/BusinessModel/ProcessPermissions.php

369 lines
14 KiB
PHP
Raw Normal View History

2014-01-09 16:33:07 -04:00
<?php
namespace BusinessModel;
use \G;
use \Cases;
use \Criteria;
use \ObjectPermissionPeer;
/**
* @author Brayan Pereyra (Cochalo) <brayan@colosa.com>
* @copyright Colosa - Bolivia
*/
class ProcessPermissions
{
/**
* Get list for Process Permissions
*
2014-01-09 16:33:07 -04:00
* @var string $sProcessUID. Uid for Process
* @var string $sPermissionUid. Uid for Process Permission
2014-01-09 16:33:07 -04:00
*
* @access public
* @author Brayan Pereyra (Cochalo) <brayan@colosa.com>
* @copyright Colosa - Bolivia
*
* @return array
*/
2014-01-10 15:32:14 -04:00
public function getProcessPermissions($sProcessUID, $sPermissionUid = '')
2014-01-09 16:33:07 -04:00
{
G::LoadClass('case');
Cases::verifyTable();
$aObjectsPermissions = array();
$oCriteria = new \Criteria('workflow');
$oCriteria->add(ObjectPermissionPeer::PRO_UID, $sProcessUID);
2014-01-10 15:32:14 -04:00
if ($sPermissionUid != '') {
$oCriteria->add(ObjectPermissionPeer::OP_UID, $sPermissionUid);
}
2014-01-09 16:33:07 -04:00
$oDataset = ObjectPermissionPeer::doSelectRS($oCriteria);
$oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
//Obtain task target
if (($aRow['TAS_UID'] != '') && ($aRow['TAS_UID'] != '0')) {
try {
$oTask = new \Task();
$aFields = $oTask->load($aRow['TAS_UID']);
$sTaskTarget = $aFields['TAS_TITLE'];
} catch (\Exception $oError) {
$sTaskTarget = 'All Tasks';
}
} else {
$sTaskTarget = G::LoadTranslation('ID_ANY_TASK');
}
//Obtain user or group
if ($aRow['OP_USER_RELATION'] == 1) {
$oUser = new \Users();
$aFields = $oUser->load($aRow['USR_UID']);
$sUserGroup = $aFields['USR_FIRSTNAME'] . ' ' . $aFields['USR_LASTNAME'] . ' (' . $aFields['USR_USERNAME'] . ')';
} else {
$oGroup = new \Groupwf();
if ($aRow['USR_UID'] != '') {
try {
$aFields = $oGroup->load($aRow['USR_UID']);
$sUserGroup = $aFields['GRP_TITLE'];
} catch (\Exception $oError) {
$sUserGroup = '(GROUP DELETED)';
}
} else {
$sUserGroup = G::LoadTranslation('ID_ANY');
}
}
//Obtain task source
if (($aRow['OP_TASK_SOURCE'] != '') && ($aRow['OP_TASK_SOURCE'] != '0')) {
try {
$oTask = new \Task();
$aFields = $oTask->load($aRow['OP_TASK_SOURCE']);
$sTaskSource = $aFields['TAS_TITLE'];
} catch (\Exception $oError) {
$sTaskSource = 'All Tasks';
}
} else {
$sTaskSource = G::LoadTranslation('ID_ANY_TASK');
}
//Obtain object and type
switch ($aRow['OP_OBJ_TYPE']) {
case 'ALL':
$sObjectType = G::LoadTranslation('ID_ALL');
$sObject = 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');
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');
if (($aRow['OP_OBJ_UID'] != '') && ($aRow['OP_OBJ_UID'] != '0')) {
$oDynaform = new \Dynaform();
$aFields = $oDynaform->load($aRow['OP_OBJ_UID']);
$sObject = $aFields['DYN_TITLE'];
} else {
$sObject = G::LoadTranslation('ID_ALL');
}
break;
case 'INPUT':
$sObjectType = G::LoadTranslation('ID_INPUT_DOCUMENT');
if (($aRow['OP_OBJ_UID'] != '') && ($aRow['OP_OBJ_UID'] != '0')) {
$oInputDocument = new \InputDocument();
$aFields = $oInputDocument->load($aRow['OP_OBJ_UID']);
$sObject = $aFields['INP_DOC_TITLE'];
} else {
$sObject = G::LoadTranslation('ID_ALL');
}
break;
case 'OUTPUT':
$sObjectType = G::LoadTranslation('ID_OUTPUT_DOCUMENT');
if (($aRow['OP_OBJ_UID'] != '') && ($aRow['OP_OBJ_UID'] != '0')) {
$oOutputDocument = new \OutputDocument();
$aFields = $oOutputDocument->load($aRow['OP_OBJ_UID']);
$sObject = $aFields['OUT_DOC_TITLE'];
} else {
$sObject = G::LoadTranslation('ID_ALL');
}
break;
case 'CASES_NOTES':
$sObjectType = G::LoadTranslation('ID_CASES_NOTES');
$sObject = 'N/A';
break;
case 'MSGS_HISTORY':
$sObjectType = G::LoadTranslation('MSGS_HISTORY');
$sObject = G::LoadTranslation('ID_ALL');
break;
default:
$sObjectType = G::LoadTranslation('ID_ALL');
$sObject = 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();
2014-01-27 10:54:49 -04:00
$arrayTemp = array_merge($aRow, array(
'OP_UID' => $aRow['OP_UID'],
'TASK_TARGET' => $sTaskTarget,
'GROUP_USER' => $sUserGroup,
'TASK_SOURCE' => $sTaskSource,
'OBJECT_TYPE' => $sObjectType,
'OBJECT' => $sObject,
'PARTICIPATED' => $sParticipated,
'ACTION' => $sAction,
'OP_CASE_STATUS' => $aRow['OP_CASE_STATUS'])
);
$aObjectsPermissions[] = array_change_key_case($arrayTemp, CASE_LOWER);
2014-01-09 16:33:07 -04:00
$oDataset->next();
}
2014-01-10 15:32:14 -04:00
if ($sPermissionUid != '' && empty($aObjectsPermissions)) {
throw (new \Exception( 'This row doesn\'t exist!' ));
2014-01-28 11:34:07 -04:00
} elseif ($sPermissionUid != '' && !empty($aObjectsPermissions)) {
2014-01-21 15:35:16 -04:00
$aObjectsPermissions = array_change_key_case($aObjectsPermissions, CASE_LOWER);
2014-01-10 15:32:14 -04:00
return current($aObjectsPermissions);
}
2014-01-21 15:35:16 -04:00
$aObjectsPermissions = array_change_key_case($aObjectsPermissions, CASE_LOWER);
2014-01-09 16:33:07 -04:00
return $aObjectsPermissions;
}
/**
* Save Process Permission
*
* @var array $data. Data for Process Permission
* @var string $sPermissionUid. Uid for Process Permission
*
* @access public
* @author Brayan Pereyra (Cochalo) <brayan@colosa.com>
* @copyright Colosa - Bolivia
*
* @return void
*/
public function saveProcessPermission($data, $sPermissionUid = '')
{
try {
$data = array_change_key_case($data, CASE_UPPER);
$this->validateProcess($data['PRO_UID']);
$this->validateUser($data['USR_UID']);
if (isset($data['TAS_UID']) && ($data['TAS_UID'] != '')) {
$this->validateTask($data['TAS_UID']);
} else {
$data['TAS_UID'] = '';
}
if (isset($data['OP_TASK_SOURCE']) && ($data['OP_TASK_SOURCE'] != '')) {
$this->validateTask($data['OP_TASK_SOURCE']);
} else {
$data['OP_TASK_SOURCE'] = '';
}
$sObjectUID = '';
switch ($data['OP_OBJ_TYPE']) {
case 'ANY':
2014-01-28 11:34:07 -04:00
//case 'ANY_DYNAFORM':CASES_NOTES
//case 'ANY_INPUT':
//case 'ANY_OUTPUT':
$sObjectUID = '';
break;
case 'DYNAFORM':
$this->validateDynaform($data['DYNAFORMS']);
$sObjectUID = $data['DYNAFORMS'];
break;
case 'INPUT':
$this->validateInput($data['INPUTS']);
$sObjectUID = $data['INPUTS'];
break;
case 'OUTPUT':
$this->validateOutput($data['OUTPUTS']);
$sObjectUID = $data['OUTPUTS'];
break;
}
$oOP = new \ObjectPermission();
$permissionUid = ($sPermissionUid != '') ? $sPermissionUid : G::generateUniqueID();
$data['OP_UID'] = $permissionUid;
$data['OP_OBJ_UID'] = $sObjectUID;
if ($sPermissionUid == '') {
$oOP->fromArray( $data, \BasePeer::TYPE_FIELDNAME );
$oOP->save();
$daraRes = $oOP->load($permissionUid);
$daraRes = array_change_key_case($daraRes, CASE_LOWER);
return $daraRes;
} else {
$data['TAS_UID'] = $data['TAS_UID'] != '' ? $data['TAS_UID'] : '0';
$data['OP_TASK_SOURCE'] = $data['OP_TASK_SOURCE'] != '' ? $data['OP_TASK_SOURCE'] : '0';
$data['OP_PARTICIPATE'] = $data['OP_PARTICIPATE'] != '' ? $data['OP_PARTICIPATE'] : 0;
$data['OP_OBJ_TYPE'] = $data['OP_OBJ_TYPE'] != '' ? $data['OP_OBJ_TYPE'] : '0';
$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);
}
} catch (Exception $e) {
throw $e;
}
}
/**
* Delete Process Permission
*
* @var string $sPermissionUid. Uid for Process Permission
*
* @access public
* @author Brayan Pereyra (Cochalo) <brayan@colosa.com>
* @copyright Colosa - Bolivia
*
* @return void
*/
public function deleteProcessPermission($sPermissionUid)
{
try {
require_once 'classes/model/ObjectPermission.php';
$oOP = new \ObjectPermission();
$oOP = ObjectPermissionPeer::retrieveByPK( $sPermissionUid );
$oOP->delete();
} catch (Exception $e) {
throw $e;
}
}
public function validateProcess($proUid) {
$proUid = trim($proUid);
if ($proUid == '') {
throw (new \Exception('This process doesn\'t exist!'));
}
$oProcess = new \Process();
if (!($oProcess->processExists($proUid))) {
throw (new \Exception('This process doesn\'t exist!'));
}
return $proUid;
}
public function validateUser($userUid) {
$userUid = trim($userUid);
if ($userUid == '') {
throw (new \Exception('This user doesn\'t exist!'));
}
$oUsers = new \Users();
if (!($oUsers->userExists($userUid))) {
throw (new \Exception('This user doesn\'t exist!'));
}
return $userUid;
}
public function validateTask($taskUid) {
$taskUid = trim($taskUid);
if ($taskUid == '') {
throw (new \Exception('This task doesn\'t exist!'));
}
$oTask = new \Task();
if (!($oTask->taskExists($taskUid))) {
throw (new \Exception('This task doesn\'t exist!'));
}
return $taskUid;
}
public function validateDynaform($dynUid) {
$dynUid = trim($dynUid);
if ($dynUid == '') {
throw (new \Exception('This dynaform doesn\'t exist!'));
}
$oDynaform = new \Dynaform();
if (!($oDynaform->dynaformExists($dynUid))) {
throw (new \Exception('This dynaform doesn\'t exist!'));
}
return $dynUid;
}
public function validateInput($inputUid) {
$inputUid = trim($inputUid);
if ($inputUid == '') {
throw (new \Exception('This inputDocument doesn\'t exist!'));
}
$oInputDocument = new \InputDocument();
if (!($oInputDocument->InputExists($inputUid))) {
throw (new \Exception('This inputDocument doesn\'t exist!'));
}
return $inputUid;
}
public function validateOutput($outputUid) {
$outputUid = trim($outputUid);
if ($outputUid == '') {
throw (new \Exception('This task doesn\'t exist!'));
}
$oOutputDocument = new \OutputDocument();
if (!($oOutputDocument->OutputExists($outputUid))) {
throw (new \Exception('This task doesn\'t exist!'));
}
return $outputUid;
}
2014-01-09 16:33:07 -04:00
}