diff --git a/workflow/engine/src/BusinessModel/ProjectUser.php b/workflow/engine/src/BusinessModel/ProjectUser.php index 711259f72..ad2e58d07 100644 --- a/workflow/engine/src/BusinessModel/ProjectUser.php +++ b/workflow/engine/src/BusinessModel/ProjectUser.php @@ -202,13 +202,14 @@ class ProjectUser * Return the user that can start a task * * @param string $sProcessUID {@min 32} {@max 32} + * @param string $sActivityUID {@min 32} {@max 32} * @param array $oData * * return array * * @access public */ - public function postProjectWsUserCanStartTask($sProcessUID, $oData) + public function postProjectWsUserCanStartTask($sProcessUID, $sActivityUID, $oData) { try { $oProcess = \ProcessPeer::retrieveByPK( $sProcessUID ); @@ -220,8 +221,7 @@ class ProjectUser * validates if the username and password are valid data and if the user assigned * to the webentry has the rights and persmissions required */ - $sPRO_UID = $sProcessUID; - $sTASKS = $oData['act_uid']; + $sTASKS = $sActivityUID; $sWS_USER = trim( $oData['username'] ); $sWS_PASS = trim( $oData['password'] ); if (\G::is_https()) { @@ -265,9 +265,14 @@ class ProjectUser $oCriteria->addSelectColumn( \UsersPeer::USR_USERNAME ); $oCriteria->addSelectColumn( \UsersPeer::USR_FIRSTNAME ); $oCriteria->addSelectColumn( \UsersPeer::USR_LASTNAME ); + $oCriteria->addSelectColumn( \TaskPeer::PRO_UID ); $oCriteria->addJoin( \TaskUserPeer::USR_UID, \UsersPeer::USR_UID, \Criteria::LEFT_JOIN ); - $oCriteria->add( \TaskUserPeer::TAS_UID, $sTASKS ); + $oCriteria->addJoin( \TaskUserPeer::TAS_UID, \TaskPeer::TAS_UID, \Criteria::LEFT_JOIN ); + if ($sTASKS) { + $oCriteria->add( \TaskUserPeer::TAS_UID, $sTASKS ); + } $oCriteria->add( \UsersPeer::USR_USERNAME, $sWS_USER ); + $oCriteria->add( \TaskPeer::PRO_UID, $sProcessUID ); $userIsAssigned = \TaskUserPeer::doCount( $oCriteria ); // if the user is not assigned directly, maybe a have the task a group with the user if ($userIsAssigned < 1) { @@ -278,11 +283,19 @@ class ProjectUser $oCriteria->addSelectColumn( \UsersPeer::USR_LASTNAME ); $oCriteria->addJoin( \UsersPeer::USR_UID, \GroupUserPeer::USR_UID, \Criteria::LEFT_JOIN ); $oCriteria->addJoin( \GroupUserPeer::GRP_UID, \TaskUserPeer::USR_UID, \Criteria::LEFT_JOIN ); - $oCriteria->add( \TaskUserPeer::TAS_UID, $sTASKS ); + $oCriteria->addJoin( \TaskUserPeer::TAS_UID, \TaskPeer::TAS_UID, \Criteria::LEFT_JOIN ); + if ($sTASKS) { + $oCriteria->add( \TaskUserPeer::TAS_UID, $sTASKS ); + } $oCriteria->add( \UsersPeer::USR_USERNAME, $sWS_USER ); + $oCriteria->add( \TaskPeer::PRO_UID, $sProcessUID ); $userIsAssigned = \GroupUserPeer::doCount( $oCriteria ); if (! ($userIsAssigned >= 1)) { - throw (new \Exception( "The `usr_uid` `" . $sWS_USER . "` doesn't have the activity `act_uid` `" . $sTASKS . "` assigned")); + if ($sTASKS) { + throw (new \Exception( "The `usr_uid` `" . $sWS_USER . "` doesn't have the activity `act_uid` `" . $sTASKS . "` assigned")); + } else { + throw (new \Exception( "The `usr_uid` `" . $sWS_USER . "` doesn't have an activity assigned")); + } } } $oDataset = \TaskUserPeer::doSelectRS($oCriteria); diff --git a/workflow/engine/src/Services/Api/ProcessMaker/Project/ProjectUsers.php b/workflow/engine/src/Services/Api/ProcessMaker/Project/ProjectUsers.php index d27bc47bb..f16c86ac2 100644 --- a/workflow/engine/src/Services/Api/ProcessMaker/Project/ProjectUsers.php +++ b/workflow/engine/src/Services/Api/ProcessMaker/Project/ProjectUsers.php @@ -71,16 +71,17 @@ class ProjectUsers extends Api /** * @param string $prj_uid {@min 32} {@max 32} + * @param string $act_uid {@min 32} {@max 32} * @param wsUserCanStartTaskStructure $request_data * * @url POST /:prj_uid/ws/user/can-start-task */ - public function doPostProjectWsUserCanStartTask($prj_uid, wsUserCanStartTaskStructure $request_data = null) + public function doPostProjectWsUserCanStartTask($prj_uid, $act_uid = null, wsUserCanStartTaskStructure $request_data = null) { try { $request_data = (array)($request_data); $user = new \BusinessModel\ProjectUser(); - $objectData = $user->postProjectWsUserCanStartTask($prj_uid, $request_data); + $objectData = $user->postProjectWsUserCanStartTask($prj_uid, $act_uid, $request_data); //Response $response = $objectData; } catch (\Exception $e) { @@ -93,10 +94,6 @@ class ProjectUsers extends Api class wsUserCanStartTaskStructure { - /** - * @var string {@from body} {@min 32} {@max 32} - */ - public $act_uid; /** * @var string {@from body} */