Merged in luisfernandosl/processmaker/PM-3462 (pull request #2863)
PM-3462
This commit is contained in:
@@ -3,6 +3,178 @@ namespace ProcessMaker\BusinessModel\Cases;
|
|||||||
|
|
||||||
class InputDocument
|
class InputDocument
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Check if the user has permissions
|
||||||
|
*
|
||||||
|
* @param string $applicationUid Unique id of Case
|
||||||
|
* @param string $delIndex Delegataion index
|
||||||
|
* @param string $userUid Unique id of User
|
||||||
|
* @param string $inputDocumentUid
|
||||||
|
*
|
||||||
|
* return void Throw exception the user does not have permission to delete
|
||||||
|
*/
|
||||||
|
public function throwExceptionIfHaventPermissionToDelete($applicationUid, $delIndex, $userUid, $appDocumentUid)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
//Verify data inbox
|
||||||
|
$case = new \ProcessMaker\BusinessModel\Cases();
|
||||||
|
$arrayResult = $case->getStatusInfo($applicationUid, $delIndex, $userUid);
|
||||||
|
|
||||||
|
$flagInbox = 1;
|
||||||
|
|
||||||
|
if (empty($arrayResult) || !preg_match("/^(?:TO_DO|DRAFT)$/", $arrayResult["APP_STATUS"])) {
|
||||||
|
$flagInbox = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Verify data Supervisor
|
||||||
|
$application = \ApplicationPeer::retrieveByPK($applicationUid);
|
||||||
|
|
||||||
|
$flagSupervisor = 0;
|
||||||
|
|
||||||
|
$supervisor = new \ProcessMaker\BusinessModel\ProcessSupervisor();
|
||||||
|
$arraySupervisor = $supervisor->getProcessSupervisors($application->getProUid());
|
||||||
|
|
||||||
|
foreach ($arraySupervisor as $value) {
|
||||||
|
if($value["usr_uid"] == $userUid) {
|
||||||
|
$flagSupervisor = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($flagInbox == 0 && $flagSupervisor == 0) {
|
||||||
|
throw new \Exception(\G::LoadTranslation("ID_USER_NOT_HAVE_PERMISSION_DELETE_INPUT_DOCUMENT", array($userUid)));
|
||||||
|
}
|
||||||
|
|
||||||
|
//Verify data permission
|
||||||
|
$flagPermission = 0;
|
||||||
|
|
||||||
|
$criteria = new \Criteria("workflow");
|
||||||
|
|
||||||
|
$criteria->addSelectColumn(\AppDocumentPeer::DOC_UID);
|
||||||
|
|
||||||
|
$criteria->add(\AppDocumentPeer::APP_DOC_UID, $appDocumentUid, \Criteria::EQUAL);
|
||||||
|
$criteria->add(\AppDocumentPeer::APP_UID, $applicationUid, \Criteria::EQUAL);
|
||||||
|
$criteria->add(\AppDocumentPeer::APP_DOC_TYPE, "INPUT", \Criteria::EQUAL);
|
||||||
|
|
||||||
|
$rsCriteria = \AppDocumentPeer::doSelectRS($criteria);
|
||||||
|
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
||||||
|
|
||||||
|
if ($rsCriteria->next()) {
|
||||||
|
$row = $rsCriteria->getRow();
|
||||||
|
|
||||||
|
$inputDocumentUid = $row["DOC_UID"];
|
||||||
|
|
||||||
|
//Criteria
|
||||||
|
$criteria2 = new \Criteria("workflow");
|
||||||
|
|
||||||
|
$criteria2->addSelectColumn(\ObjectPermissionPeer::OP_UID);
|
||||||
|
|
||||||
|
$criteria2->add(\ObjectPermissionPeer::PRO_UID, $application->getProUid(), \Criteria::EQUAL);
|
||||||
|
$criteria2->add(\ObjectPermissionPeer::OP_OBJ_TYPE, "INPUT", \Criteria::EQUAL);
|
||||||
|
$criteria2->add(
|
||||||
|
$criteria2->getNewCriterion(\ObjectPermissionPeer::OP_OBJ_UID, $inputDocumentUid, \Criteria::EQUAL)->addOr(
|
||||||
|
$criteria2->getNewCriterion(\ObjectPermissionPeer::OP_OBJ_UID, "0", \Criteria::EQUAL))->addOr(
|
||||||
|
$criteria2->getNewCriterion(\ObjectPermissionPeer::OP_OBJ_UID, "", \Criteria::EQUAL))
|
||||||
|
);
|
||||||
|
$criteria2->add(\ObjectPermissionPeer::OP_ACTION, "DELETE", \Criteria::EQUAL);
|
||||||
|
|
||||||
|
//User
|
||||||
|
$criteriaU = clone $criteria2;
|
||||||
|
|
||||||
|
$criteriaU->add(\ObjectPermissionPeer::OP_USER_RELATION, 1, \Criteria::EQUAL);
|
||||||
|
$criteriaU->add(\ObjectPermissionPeer::USR_UID, $userUid, \Criteria::EQUAL);
|
||||||
|
|
||||||
|
$rsCriteriaU = \ObjectPermissionPeer::doSelectRS($criteriaU);
|
||||||
|
$rsCriteriaU->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
||||||
|
|
||||||
|
if ($rsCriteriaU->next()) {
|
||||||
|
$flagPermission = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Group
|
||||||
|
if ($flagPermission == 0) {
|
||||||
|
$criteriaG = clone $criteria2;
|
||||||
|
|
||||||
|
$criteriaG->add(\ObjectPermissionPeer::OP_USER_RELATION, 2, \Criteria::EQUAL);
|
||||||
|
|
||||||
|
$criteriaG->addJoin(\ObjectPermissionPeer::USR_UID, \GroupUserPeer::GRP_UID, \Criteria::LEFT_JOIN);
|
||||||
|
$criteriaG->add(\GroupUserPeer::USR_UID, $userUid, \Criteria::EQUAL);
|
||||||
|
|
||||||
|
$rsCriteriaG = \ObjectPermissionPeer::doSelectRS($criteriaG);
|
||||||
|
$rsCriteriaG->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
||||||
|
|
||||||
|
if ($rsCriteriaG->next()) {
|
||||||
|
$flagPermission = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($flagPermission == 0) {
|
||||||
|
throw new \Exception(\G::LoadTranslation("ID_USER_NOT_HAVE_PERMISSION_DELETE_INPUT_DOCUMENT", array($userUid)));
|
||||||
|
}
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verify if not exists input Document in Steps
|
||||||
|
*
|
||||||
|
* @param string $applicationUid Unique id of Case
|
||||||
|
* @param string $delIndex Delegataion index
|
||||||
|
* @param string $appDocumentUid
|
||||||
|
*
|
||||||
|
* return void Throw exception if not exists input Document in Steps
|
||||||
|
*/
|
||||||
|
public function throwExceptionIfInputDocumentNotExistsInSteps($applicacionUid, $delIndex, $appDocumentUid)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
//Verify Case
|
||||||
|
$appDelegation = \AppDelegationPeer::retrieveByPK($applicacionUid, $delIndex);
|
||||||
|
|
||||||
|
if (is_null($appDelegation)) {
|
||||||
|
throw new \Exception(\G::LoadTranslation("ID_CASE_DEL_INDEX_DOES_NOT_EXIST", array("app_uid", $applicacionUid, "del_index", $delIndex)));
|
||||||
|
}
|
||||||
|
|
||||||
|
$taskUid = $appDelegation->getTasUid();
|
||||||
|
|
||||||
|
//Verify Steps
|
||||||
|
$criteria = new \Criteria("workflow");
|
||||||
|
|
||||||
|
$criteria->addSelectColumn(\AppDocumentPeer::DOC_UID);
|
||||||
|
|
||||||
|
$criteria->add(\AppDocumentPeer::APP_DOC_UID, $appDocumentUid, \Criteria::EQUAL);
|
||||||
|
$criteria->add(\AppDocumentPeer::APP_UID, $applicacionUid, \Criteria::EQUAL);
|
||||||
|
$criteria->add(\AppDocumentPeer::APP_DOC_TYPE, "INPUT", \Criteria::EQUAL);
|
||||||
|
|
||||||
|
$rsCriteria = \AppDocumentPeer::doSelectRS($criteria);
|
||||||
|
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
||||||
|
|
||||||
|
if ($rsCriteria->next()) {
|
||||||
|
$row = $rsCriteria->getRow();
|
||||||
|
|
||||||
|
$inputDocumentUid = $row["DOC_UID"];
|
||||||
|
|
||||||
|
$criteria = new \Criteria("workflow");
|
||||||
|
|
||||||
|
$criteria->addSelectColumn(\StepPeer::STEP_UID);
|
||||||
|
|
||||||
|
$criteria->add(\StepPeer::TAS_UID, $taskUid, \Criteria::EQUAL);
|
||||||
|
$criteria->add(\StepPeer::STEP_TYPE_OBJ, "INPUT_DOCUMENT", \Criteria::EQUAL);
|
||||||
|
$criteria->add(\StepPeer::STEP_UID_OBJ, $inputDocumentUid, \Criteria::EQUAL);
|
||||||
|
|
||||||
|
$rsCriteria = \StepPeer::doSelectRS($criteria);
|
||||||
|
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
|
||||||
|
|
||||||
|
if (!$rsCriteria->next()) {
|
||||||
|
throw new \Exception(\G::LoadTranslation("ID_CASES_INPUT_DOCUMENT_DOES_NOT_EXIST", array($appDocumentUid)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get data of Cases InputDocument
|
* Get data of Cases InputDocument
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -47,20 +47,25 @@ class InputDocument extends Api
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @url DELETE /:app_uid/input-document/:inp_doc_uid
|
* @url DELETE /:app_uid/:del_index/input-document/:app_doc_uid
|
||||||
*
|
*
|
||||||
* @param string $app_uid {@min 32}{@max 32}
|
* @param string $app_uid {@min 32}{@max 32}
|
||||||
* @param string $inp_doc_uid {@min 32}{@max 32}
|
* @param int $del_index {@min 1}
|
||||||
|
* @param string $app_doc_uid {@min 32}{@max 32}
|
||||||
*/
|
*/
|
||||||
public function doDeleteInputDocument($app_uid, $inp_doc_uid)
|
public function doDeleteInputDocument($app_uid, $del_index, $app_doc_uid)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$inputDocument = new \ProcessMaker\BusinessModel\Cases\InputDocument();
|
$inputDocument = new \ProcessMaker\BusinessModel\Cases\InputDocument();
|
||||||
$inputDocument->removeInputDocument($inp_doc_uid);
|
|
||||||
|
$inputDocument->throwExceptionIfHaventPermissionToDelete($app_uid, $del_index, $this->getUserId(), $app_doc_uid);
|
||||||
|
$inputDocument->throwExceptionIfInputDocumentNotExistsInSteps($app_uid, $del_index, $app_doc_uid);
|
||||||
|
$inputDocument->removeInputDocument($app_doc_uid);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
|
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @url POST /:app_uid/input-document
|
* @url POST /:app_uid/input-document
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user