Merged in bugfix/HOR-3986 (pull request #6163)
HOR-3986 Approved-by: Julio Cesar Laura Avendaño <contact@julio-laura.com>
This commit is contained in:
@@ -611,12 +611,16 @@ class AppDocument extends BaseAppDocument
|
||||
$aColumns['PRO_UID'],
|
||||
$appUid,
|
||||
array(),
|
||||
array('INPUT_DOCUMENTS' => 'VIEW')
|
||||
array('INPUT_DOCUMENTS' => 'VIEW', 'ATTACHMENTS' => 'VIEW')
|
||||
);
|
||||
//Has permissions?
|
||||
if (in_array($appDocUid, $userAuthorization['objectPermissions']['INPUT_DOCUMENTS'])) {
|
||||
return true;
|
||||
}
|
||||
//Has permissions?
|
||||
if (in_array($appDocUid, $userAuthorization['objectPermissions']['ATTACHMENTS'])) {
|
||||
return true;
|
||||
}
|
||||
//Is supervisor?
|
||||
if ($userAuthorization['supervisor']) {
|
||||
//Review if the supervisor has assigned the object input document
|
||||
|
||||
@@ -1,12 +1,4 @@
|
||||
<?php
|
||||
/**
|
||||
* ObjectPermission.php
|
||||
*
|
||||
* @package workflow.engine.classes.model
|
||||
*/
|
||||
|
||||
//require_once 'classes/model/om/BaseObjectPermission.php';
|
||||
|
||||
/**
|
||||
* Skeleton subclass for representing a row from the 'OBJECT_PERMISSION' table.
|
||||
*
|
||||
@@ -18,19 +10,31 @@
|
||||
*
|
||||
* @package workflow.engine.classes.model
|
||||
*/
|
||||
|
||||
use ProcessMaker\BusinessModel\Cases\InputDocument;
|
||||
|
||||
class ObjectPermission extends BaseObjectPermission
|
||||
{
|
||||
public function load ($UID)
|
||||
/**
|
||||
* Get the fields related to the user uid
|
||||
*
|
||||
* @param string $usrUid
|
||||
*
|
||||
* @return array
|
||||
* @throws Exception
|
||||
*/
|
||||
public function load($usrUid)
|
||||
{
|
||||
try {
|
||||
$oRow = ObjectPermissionPeer::retrieveByPK( $UID );
|
||||
if (! is_null( $oRow )) {
|
||||
$aFields = $oRow->toArray( BasePeer::TYPE_FIELDNAME );
|
||||
$this->fromArray( $aFields, BasePeer::TYPE_FIELDNAME );
|
||||
$this->setNew( false );
|
||||
return $aFields;
|
||||
$row = ObjectPermissionPeer::retrieveByPK($usrUid);
|
||||
if (!is_null($row)) {
|
||||
$fields = $row->toArray(BasePeer::TYPE_FIELDNAME);
|
||||
$this->fromArray($fields, BasePeer::TYPE_FIELDNAME);
|
||||
$this->setNew(false);
|
||||
|
||||
return $fields;
|
||||
} else {
|
||||
throw (new Exception( "The row '" . $UsrUid . "' in table USER doesn't exist!" ));
|
||||
throw (new Exception("The row '" . $usrUid . "' in table USER doesn't exist!"));
|
||||
}
|
||||
} catch (Exception $oError) {
|
||||
throw ($oError);
|
||||
@@ -367,44 +371,57 @@ class ObjectPermission extends BaseObjectPermission
|
||||
*/
|
||||
public function objectPermissionByOutputInput ($appUid, $proUid, $opTaskSource, $obType = 'OUTPUT', $opObjUid = '', $statusCase = '')
|
||||
{
|
||||
$oCriteria = new Criteria('workflow');
|
||||
$oCriteria->addSelectColumn(AppDocumentPeer::APP_DOC_UID);
|
||||
$oCriteria->addSelectColumn(AppDocumentPeer::APP_DOC_TYPE);
|
||||
$criteria = new Criteria('workflow');
|
||||
$criteria->addSelectColumn(AppDocumentPeer::APP_DOC_UID);
|
||||
$criteria->addSelectColumn(AppDocumentPeer::APP_DOC_TYPE);
|
||||
$arrayCondition = array();
|
||||
$arrayCondition[] = array(AppDelegationPeer::APP_UID, AppDocumentPeer::APP_UID, Criteria::EQUAL);
|
||||
$arrayCondition[] = array(AppDelegationPeer::DEL_INDEX, AppDocumentPeer::DEL_INDEX, Criteria::EQUAL);
|
||||
$oCriteria->addJoinMC($arrayCondition, Criteria::LEFT_JOIN);
|
||||
$oCriteria->add(AppDelegationPeer::APP_UID, $appUid);
|
||||
$oCriteria->add(AppDelegationPeer::PRO_UID, $proUid);
|
||||
$criteria->addJoinMC($arrayCondition, Criteria::LEFT_JOIN);
|
||||
$criteria->add(AppDelegationPeer::APP_UID, $appUid);
|
||||
$criteria->add(AppDelegationPeer::PRO_UID, $proUid);
|
||||
|
||||
if ($statusCase != 'COMPLETED' && $opTaskSource != '' && (int)$opTaskSource != 0) {
|
||||
$oCriteria->add(AppDelegationPeer::TAS_UID, $opTaskSource);
|
||||
$criteria->add(AppDelegationPeer::TAS_UID, $opTaskSource);
|
||||
}
|
||||
if ($opObjUid != '' && $opObjUid != '0') {
|
||||
$oCriteria->add(AppDocumentPeer::DOC_UID, $opObjUid);
|
||||
$criteria->add(AppDocumentPeer::DOC_UID, $opObjUid);
|
||||
}
|
||||
|
||||
$supervisorDocuments = [];
|
||||
switch ($obType) {
|
||||
case 'INPUT':
|
||||
$oCriteria->add(AppDocumentPeer::APP_DOC_TYPE, 'INPUT');
|
||||
$criteria->add(AppDocumentPeer::APP_DOC_TYPE, 'INPUT');
|
||||
//We will to get the supervisor's documents with index = 100000
|
||||
$inputDocument = new InputDocument();
|
||||
$supervisorDocuments = $inputDocument->getSupervisorDocuments($appUid);
|
||||
break;
|
||||
case 'ATTACHED':
|
||||
$oCriteria->add(AppDocumentPeer::APP_DOC_TYPE, 'ATTACHED');
|
||||
$criteria->add(AppDocumentPeer::APP_DOC_TYPE, 'ATTACHED');
|
||||
break;
|
||||
case 'OUTPUT':
|
||||
$oCriteria->add(AppDocumentPeer::APP_DOC_TYPE, 'OUTPUT');
|
||||
$criteria->add(AppDocumentPeer::APP_DOC_TYPE, 'OUTPUT');
|
||||
break;
|
||||
}
|
||||
|
||||
$oDataset = AppDelegationPeer::doSelectRS($oCriteria);
|
||||
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||
$dataset = AppDelegationPeer::doSelectRS($criteria);
|
||||
$dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||
|
||||
$result = array();
|
||||
while ($oDataset->next()) {
|
||||
$aRow = $oDataset->getRow();
|
||||
if (!in_array($aRow['APP_DOC_UID'], $result)) {
|
||||
array_push($result, $aRow['APP_DOC_UID']);
|
||||
$result = [];
|
||||
while ($dataset->next()) {
|
||||
$row = $dataset->getRow();
|
||||
if (!in_array($row['APP_DOC_UID'], $result)) {
|
||||
array_push($result, $row['APP_DOC_UID']);
|
||||
}
|
||||
}
|
||||
|
||||
//We will to add the supervisor's documents in the result
|
||||
foreach ($supervisorDocuments as $key => $value) {
|
||||
if (!in_array($value['APP_DOC_UID'], $result)) {
|
||||
array_push($result, $value['APP_DOC_UID']);
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
@@ -1140,4 +1140,40 @@ class InputDocument
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This function get all the supervisor's documents
|
||||
* When the DEL_INDEX = 100000
|
||||
*
|
||||
* @param string $appUid, uid related to the case
|
||||
* @param array $docType, can be INPUT, ATTACHED, OUTPUT
|
||||
* @param array $docStatus, can be ACTIVE, DELETED
|
||||
*
|
||||
* @return array $documents
|
||||
* @throws Exception
|
||||
*/
|
||||
public function getSupervisorDocuments($appUid, $docType = ['INPUT'], $docStatus = ['ACTIVE'])
|
||||
{
|
||||
try {
|
||||
$criteria = new Criteria('workflow');
|
||||
$criteria->add(AppDocumentPeer::APP_UID, $appUid);
|
||||
$criteria->add(AppDocumentPeer::APP_DOC_TYPE, $docType, Criteria::IN);
|
||||
$criteria->add(AppDocumentPeer::APP_DOC_STATUS, $docStatus, Criteria::IN);
|
||||
$criteria->add(AppDocumentPeer::DEL_INDEX, 100000);
|
||||
$criteria->addJoin(AppDocumentPeer::APP_UID, ApplicationPeer::APP_UID, Criteria::LEFT_JOIN);
|
||||
$dataset = AppDocumentPeer::doSelectRS($criteria);
|
||||
$dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||
$dataset->next();
|
||||
$documents = [];
|
||||
while ($row = $dataset->getRow()) {
|
||||
$documents[] = $row;
|
||||
$dataset->next();
|
||||
}
|
||||
|
||||
return $documents;
|
||||
} catch (Exception $e) {
|
||||
throw $e;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user