From a602408d66698d933e5dcc2ce5472ac43fbd57ce Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Wed, 15 Mar 2017 18:38:17 -0400 Subject: [PATCH 1/3] HOR-2868 --- workflow/engine/classes/class.case.php | 203 +++++------------- .../engine/classes/model/ObjectPermission.php | 99 +++++++++ 2 files changed, 148 insertions(+), 154 deletions(-) diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index d4cc5db0c..61fd30bbf 100644 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -5877,79 +5877,44 @@ class Cases } } - //If need need to check more details about the permissions + //If user can be see the objects process + //We will be prepare the data relate to the Type can be ANY, DYNAFORM, INPUT, OUTPUT, ... if (!$sw_participate) { switch ($opType) { case 'ANY': - //for dynaforms - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ApplicationPeer::APP_UID, $appUid); - $oCriteria->addJoin(ApplicationPeer::PRO_UID, StepPeer::PRO_UID); - $oCriteria->addJoin(StepPeer::STEP_UID_OBJ, DynaformPeer::DYN_UID); - if ($aCase['APP_STATUS'] != 'COMPLETED') { - if ($opTaskSource != '' && $opTaskSource != "0" && $opTaskSource != 0) { - $oCriteria->add(StepPeer::TAS_UID, $opTaskSource); - } - } - $oCriteria->add(StepPeer::STEP_TYPE_OBJ, 'DYNAFORM'); - $oCriteria->addAscendingOrderByColumn(StepPeer::STEP_POSITION); - $oCriteria->setDistinct(); - - $oDataset = DynaformPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - - while ($aRow = $oDataset->getRow()) { - if (!in_array($aRow['DYN_UID'], $result['DYNAFORM'])) { - array_push($result['DYNAFORM'], $aRow['DYN_UID']); - } - $oDataset->next(); - } - - //InputDocuments and OutputDocuments - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(AppDocumentPeer::APP_DOC_UID); - $oCriteria->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); - if ($aCase['APP_STATUS'] != 'COMPLETED') { - if ($opTaskSource != '' && $opTaskSource != "0" && $opTaskSource != 0) { - $oCriteria->add(AppDelegationPeer::TAS_UID, $opTaskSource); - } - } - $oCriteria->add( - $oCriteria->getNewCriterion(AppDocumentPeer::APP_DOC_TYPE, 'INPUT')-> - addOr($oCriteria->getNewCriterion(AppDocumentPeer::APP_DOC_TYPE, 'OUTPUT'))-> - addOr($oCriteria-> - getNewCriterion(AppDocumentPeer::APP_DOC_TYPE, 'ATTACHED')) + //For dynaforms + $result['DYNAFORM'] = $oObjectPermission->objectPermissionByDynaform( + $appUid, + $opTaskSource, + $opObjUid, + $aCase['APP_STATUS'], + $opParticipated + ); + //For Ouputs + $result['OUTPUT'] = $oObjectPermission->objectPermissionByOutputInput( + $appUid, + $proUid, + $opTaskSource, + 'OUTPUT', + $aCase['APP_STATUS'], + $opParticipated + ); + //For Inputs + $result['INPUT'] = $oObjectPermission->objectPermissionByOutputInput( + $appUid, + $proUid, + $opTaskSource, + 'INPUT', + $aCase['APP_STATUS'], + $opParticipated ); - - $oDataset = AppDelegationPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - - while ($oDataset->next()) { - $aRow = $oDataset->getRow(); - - if ($aRow['APP_DOC_TYPE'] == "ATTACHED") { - $aRow['APP_DOC_TYPE'] = "INPUT"; - } - if (!in_array($aRow['APP_DOC_UID'], $result[$aRow['APP_DOC_TYPE']])) { - array_push($result[$aRow['APP_DOC_TYPE']], $aRow['APP_DOC_UID']); - } - } $result['CASES_NOTES'] = 1; /*----------------------------------********---------------------------------*/ $result['SUMMARY_FORM'] = 1; /*----------------------------------********---------------------------------*/ - // Message History + //Message History $result['MSGS_HISTORY'] = $oObjectPermission->objectPermissionMessage( $appUid, $proUid, @@ -5962,99 +5927,30 @@ class Cases ); break; case 'DYNAFORM': - $oCriteria = new Criteria('workflow'); - $oCriteria->add(ApplicationPeer::APP_UID, $appUid); - if ($opTaskSource != '' && $opTaskSource != "0") { - $oCriteria->add(StepPeer::TAS_UID, $opTaskSource); - } - if ($opObjUid != '' && $opObjUid != '0') { - $oCriteria->add(DynaformPeer::DYN_UID, $opObjUid); - } - $oCriteria->addJoin(ApplicationPeer::PRO_UID, StepPeer::PRO_UID); - $oCriteria->addJoin(StepPeer::STEP_UID_OBJ, DynaformPeer::DYN_UID); - $oCriteria->add(StepPeer::STEP_TYPE_OBJ, 'DYNAFORM'); - $oCriteria->addAscendingOrderByColumn(StepPeer::STEP_POSITION); - $oCriteria->setDistinct(); - - $oDataset = DynaformPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - - while ($aRow = $oDataset->getRow()) { - if (!in_array($aRow['DYN_UID'], $result['DYNAFORM'])) { - array_push($result['DYNAFORM'], $aRow['DYN_UID']); - } - $oDataset->next(); - } + $result['DYNAFORM'] = $oObjectPermission->objectPermissionByDynaform( + $appUid, + $opTaskSource, + $opObjUid, + $aCase['APP_STATUS'] + ); break; case 'INPUT': + $result['INPUT'] = $oObjectPermission->objectPermissionByOutputInput( + $appUid, + $proUid, + $opTaskSource, + 'INPUT', + $aCase['APP_STATUS'] + ); + break; case 'OUTPUT': - if ($row['OP_OBJ_TYPE'] == 'INPUT') { - $obj_type = 'INPUT'; - } else { - $obj_type = 'OUTPUT'; - } - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(AppDocumentPeer::APP_DOC_UID); - $oCriteria->addSelectColumn(AppDocumentPeer::APP_DOC_TYPE); - $oCriteria->add(AppDelegationPeer::APP_UID, $appUid); - $oCriteria->add(AppDelegationPeer::PRO_UID, $proUid); - if ($aCase['APP_STATUS'] != 'COMPLETED') { - if ($opTaskSource != '' && $opTaskSource != "0" && $opTaskSource != 0) { - $oCriteria->add(AppDelegationPeer::TAS_UID, $opTaskSource); - } - } - if ($opObjUid != '' && $opObjUid != '0') { - $oCriteria->add(AppDocumentPeer::DOC_UID, $opObjUid); - } - if ($obj_type == 'INPUT') { - $oCriteria->add( - $oCriteria->getNewCriterion(AppDocumentPeer::APP_DOC_TYPE, $obj_type)-> - addOr($oCriteria->getNewCriterion(AppDocumentPeer::APP_DOC_TYPE, 'ATTACHED')) - ); - } else { - $oCriteria->add(AppDocumentPeer::APP_DOC_TYPE, $obj_type); - } - - $aConditions = Array(); - $aConditions[] = array(AppDelegationPeer::APP_UID, AppDocumentPeer::APP_UID); - $aConditions[] = array(AppDelegationPeer::DEL_INDEX, AppDocumentPeer::DEL_INDEX); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - - $oDataset = AppDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if (!in_array($aRow['APP_DOC_UID'], $result[$obj_type])) { - array_push($result[$obj_type], $aRow['APP_DOC_UID']); - } - $oDataset->next(); - } - if ($obj_type == 'INPUT') { - // For supervisor documents - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(AppDocumentPeer::APP_DOC_UID); - $oCriteria->addSelectColumn(AppDocumentPeer::APP_DOC_TYPE); - $oCriteria->add(ApplicationPeer::APP_UID, $appUid); - $oCriteria->add(ApplicationPeer::PRO_UID, $proUid); - if ($opObjUid != '' && $opObjUid != '0') { - $oCriteria->add(AppDocumentPeer::DOC_UID, $opObjUid); - } - $oCriteria->add(AppDocumentPeer::APP_DOC_TYPE, 'INPUT'); - $oCriteria->add(AppDocumentPeer::DEL_INDEX, 100000); - - $oCriteria->addJoin(ApplicationPeer::APP_UID, AppDocumentPeer::APP_UID, Criteria::LEFT_JOIN); - - $oDataset = AppDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { - if (!in_array($aRow['APP_DOC_UID'], $result['INPUT'])) { - array_push($result['INPUT'], $aRow['APP_DOC_UID']); - } - $oDataset->next(); - } - } + $result['OUTPUT'] = $oObjectPermission->objectPermissionByOutputInput( + $appUid, + $proUid, + $opTaskSource, + 'OUTPUT', + $aCase['APP_STATUS'] + ); break; case 'CASES_NOTES': $result['CASES_NOTES'] = 1; @@ -6076,7 +5972,6 @@ class Cases $opParticipated ); break; - } } } diff --git a/workflow/engine/classes/model/ObjectPermission.php b/workflow/engine/classes/model/ObjectPermission.php index 80d5e13dc..cb6c4ff78 100644 --- a/workflow/engine/classes/model/ObjectPermission.php +++ b/workflow/engine/classes/model/ObjectPermission.php @@ -308,5 +308,104 @@ class ObjectPermission extends BaseObjectPermission } return array_merge(array("DEL_INDEX" => $arrayDelIndex), $result["MSGS_HISTORY"]); } + + /** + * Verify if the user has the Dynaform access + * + * @param string $appUid the uid of the case + * @param string $opTaskSource the uid of a task selected in origin task + * @param integer $opObjUid uid of dynaform + * @param string $statusCase the status of the case COMPLETED, TO_DO + * @param int $opParticipated the value selected in participation required + * + * @return array with the uid of dynaforms + */ + public function objectPermissionByDynaform ($appUid, $opTaskSource = 0, $opObjUid = '', $statusCase = '', $opParticipated = 0) + { + $oCriteria = new Criteria('workflow'); + $oCriteria->addJoin(ApplicationPeer::PRO_UID, StepPeer::PRO_UID); + $oCriteria->addJoin(StepPeer::STEP_UID_OBJ, DynaformPeer::DYN_UID); + $oCriteria->add(ApplicationPeer::APP_UID, $appUid); + $oCriteria->add(StepPeer::STEP_TYPE_OBJ, 'DYNAFORM'); + + if ($statusCase != 'COMPLETED' && $opTaskSource != '' && (int)$opTaskSource != 0) { + $oCriteria->add(StepPeer::TAS_UID, $opTaskSource); + } + + if ($opObjUid != '' && $opObjUid != '0') { + $oCriteria->add(DynaformPeer::DYN_UID, $opObjUid); + } + + $oCriteria->addAscendingOrderByColumn(StepPeer::STEP_POSITION); + $oCriteria->setDistinct(); + + $oDataset = DynaformPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + + $result = array(); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + if (!in_array($aRow['DYN_UID'], $result)) { + array_push($result, $aRow['DYN_UID']); + } + $oDataset->next(); + } + return $result; + } + + /** + * Verify if the user has the Dynaform access + * + * @param string $appUid the uid of the case + * @param string $proUid the uid of the process + * @param string $opTaskSource the uid of a task selected in origin task + * @param string $obType can be INPUT or OUTPUT + * @param string $statusCase the status of the case COMPLETED, TO_DO + * @param int $opParticipated the value selected in participation required + * + * @return array with the uid of input or outputs + */ + public function objectPermissionByOutputInput ($appUid, $proUid, $opTaskSource, $obType = 'OUTPUT', $statusCase = '', $opParticipated = 0) + { + $oCriteria = new Criteria('workflow'); + $oCriteria->addSelectColumn(AppDocumentPeer::APP_DOC_UID); + $oCriteria->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); + + if ($statusCase != 'COMPLETED' && $opTaskSource != '' && (int)$opTaskSource != 0) { + $oCriteria->add(AppDelegationPeer::TAS_UID, $opTaskSource); + } + switch ($obType) { + case 'INPUT': + $oCriteria->add( + $oCriteria->getNewCriterion(AppDocumentPeer::APP_DOC_TYPE, 'INPUT')-> + addOr($oCriteria->getNewCriterion(AppDocumentPeer::APP_DOC_TYPE, 'ATTACHED')) + ); + break; + case 'OUTPUT': + $oCriteria->add(AppDocumentPeer::APP_DOC_TYPE, 'OUTPUT'); + break; + } + + $oDataset = AppDelegationPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + + $result = array(); + while ($oDataset->next()) { + $aRow = $oDataset->getRow(); + if ($aRow['APP_DOC_TYPE'] == "ATTACHED") { + $aRow['APP_DOC_TYPE'] = "INPUT"; + } + if (!in_array($aRow['APP_DOC_UID'], $result)) { + array_push($result, $aRow['APP_DOC_UID']); + } + } + return $result; + } } From 72cfb8fed2cd667a6d093ebcb2d09b4a82c6b696 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Thu, 16 Mar 2017 10:24:19 -0400 Subject: [PATCH 2/3] Remove the variable --- workflow/engine/classes/class.case.php | 9 +++------ workflow/engine/classes/model/ObjectPermission.php | 6 ++---- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index 61fd30bbf..abbb495bd 100644 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -5887,8 +5887,7 @@ class Cases $appUid, $opTaskSource, $opObjUid, - $aCase['APP_STATUS'], - $opParticipated + $aCase['APP_STATUS'] ); //For Ouputs $result['OUTPUT'] = $oObjectPermission->objectPermissionByOutputInput( @@ -5896,8 +5895,7 @@ class Cases $proUid, $opTaskSource, 'OUTPUT', - $aCase['APP_STATUS'], - $opParticipated + $aCase['APP_STATUS'] ); //For Inputs $result['INPUT'] = $oObjectPermission->objectPermissionByOutputInput( @@ -5905,8 +5903,7 @@ class Cases $proUid, $opTaskSource, 'INPUT', - $aCase['APP_STATUS'], - $opParticipated + $aCase['APP_STATUS'] ); $result['CASES_NOTES'] = 1; diff --git a/workflow/engine/classes/model/ObjectPermission.php b/workflow/engine/classes/model/ObjectPermission.php index cb6c4ff78..766f28133 100644 --- a/workflow/engine/classes/model/ObjectPermission.php +++ b/workflow/engine/classes/model/ObjectPermission.php @@ -316,11 +316,10 @@ class ObjectPermission extends BaseObjectPermission * @param string $opTaskSource the uid of a task selected in origin task * @param integer $opObjUid uid of dynaform * @param string $statusCase the status of the case COMPLETED, TO_DO - * @param int $opParticipated the value selected in participation required * * @return array with the uid of dynaforms */ - public function objectPermissionByDynaform ($appUid, $opTaskSource = 0, $opObjUid = '', $statusCase = '', $opParticipated = 0) + public function objectPermissionByDynaform ($appUid, $opTaskSource = 0, $opObjUid = '', $statusCase = '') { $oCriteria = new Criteria('workflow'); $oCriteria->addJoin(ApplicationPeer::PRO_UID, StepPeer::PRO_UID); @@ -361,11 +360,10 @@ class ObjectPermission extends BaseObjectPermission * @param string $opTaskSource the uid of a task selected in origin task * @param string $obType can be INPUT or OUTPUT * @param string $statusCase the status of the case COMPLETED, TO_DO - * @param int $opParticipated the value selected in participation required * * @return array with the uid of input or outputs */ - public function objectPermissionByOutputInput ($appUid, $proUid, $opTaskSource, $obType = 'OUTPUT', $statusCase = '', $opParticipated = 0) + public function objectPermissionByOutputInput ($appUid, $proUid, $opTaskSource, $obType = 'OUTPUT', $statusCase = '') { $oCriteria = new Criteria('workflow'); $oCriteria->addSelectColumn(AppDocumentPeer::APP_DOC_UID); From 915b96da90608404eeaebd0ddf54debbd34f23cf Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Thu, 16 Mar 2017 16:39:22 -0400 Subject: [PATCH 3/3] I send the parameter objectUid --- workflow/engine/classes/class.case.php | 4 ++++ workflow/engine/classes/model/ObjectPermission.php | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index 3d517a5d5..51837f16f 100644 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -5897,6 +5897,7 @@ class Cases $proUid, $opTaskSource, 'OUTPUT', + $opObjUid, $aCase['APP_STATUS'] ); //For Inputs @@ -5905,6 +5906,7 @@ class Cases $proUid, $opTaskSource, 'INPUT', + $opObjUid, $aCase['APP_STATUS'] ); @@ -5939,6 +5941,7 @@ class Cases $proUid, $opTaskSource, 'INPUT', + $opObjUid, $aCase['APP_STATUS'] ); break; @@ -5948,6 +5951,7 @@ class Cases $proUid, $opTaskSource, 'OUTPUT', + $opObjUid, $aCase['APP_STATUS'] ); break; diff --git a/workflow/engine/classes/model/ObjectPermission.php b/workflow/engine/classes/model/ObjectPermission.php index 766f28133..1319e6456 100644 --- a/workflow/engine/classes/model/ObjectPermission.php +++ b/workflow/engine/classes/model/ObjectPermission.php @@ -359,11 +359,12 @@ class ObjectPermission extends BaseObjectPermission * @param string $proUid the uid of the process * @param string $opTaskSource the uid of a task selected in origin task * @param string $obType can be INPUT or OUTPUT + * @param string $opObjUid uid of object [specific input or specific ouput] * @param string $statusCase the status of the case COMPLETED, TO_DO * * @return array with the uid of input or outputs */ - public function objectPermissionByOutputInput ($appUid, $proUid, $opTaskSource, $obType = 'OUTPUT', $statusCase = '') + public function objectPermissionByOutputInput ($appUid, $proUid, $opTaskSource, $obType = 'OUTPUT', $opObjUid = '', $statusCase = '') { $oCriteria = new Criteria('workflow'); $oCriteria->addSelectColumn(AppDocumentPeer::APP_DOC_UID); @@ -378,6 +379,9 @@ class ObjectPermission extends BaseObjectPermission if ($statusCase != 'COMPLETED' && $opTaskSource != '' && (int)$opTaskSource != 0) { $oCriteria->add(AppDelegationPeer::TAS_UID, $opTaskSource); } + if ($opObjUid != '' && $opObjUid != '0') { + $oCriteria->add(AppDocumentPeer::DOC_UID, $opObjUid); + } switch ($obType) { case 'INPUT': $oCriteria->add(