diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ProjectUser.php b/workflow/engine/src/ProcessMaker/BusinessModel/ProjectUser.php index db858723b..f57feff9a 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/ProjectUser.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ProjectUser.php @@ -108,26 +108,43 @@ class ProjectUser throw (new \Exception( 'This id for prj_uid: '. $sProcessUID .' does not correspond to a registered process')); } $aUsers = array(); - $sDelimiter = \DBAdapter::getStringDelimiter(); + $usersIds = array(); + $oCriteria = new \Criteria('workflow'); - $oCriteria->setDistinct(); - $oCriteria->addSelectColumn(\UsersPeer::USR_UID); - $oCriteria->addSelectColumn(\UsersPeer::USR_FIRSTNAME); - $oCriteria->addSelectColumn(\UsersPeer::USR_LASTNAME); - $oCriteria->addSelectColumn(\UsersPeer::USR_USERNAME); - $oCriteria->addJoin(\TaskUserPeer::USR_UID, \UsersPeer::USR_UID, \Criteria::LEFT_JOIN); - $oCriteria->addJoin(\TaskUserPeer::TAS_UID, \TaskPeer::TAS_UID, \Criteria::LEFT_JOIN); + $oCriteria->addSelectColumn(\TaskUserPeer::USR_UID); + $oCriteria->addJoin(\TaskPeer::TAS_UID, \TaskUserPeer::TAS_UID, \Criteria::LEFT_JOIN); $oCriteria->add(\TaskPeer::PRO_UID, $sProcessUID); $oCriteria->add(\TaskUserPeer::TU_TYPE, 1); $oCriteria->add(\TaskUserPeer::TU_RELATION, 1); - $oCriteria->addGroupByColumn(\TaskUserPeer::USR_UID); $oDataset = \TaskUserPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { + while ($oDataset->next()) { + $aRow = $oDataset->getRow(); + if (!in_array($aRow['USR_UID'], $usersIds)) { + $usersIds[] = $aRow['USR_UID']; + } + } + + $oCriteria = new \Criteria('workflow'); + $oCriteria->addSelectColumn(\GroupUserPeer::USR_UID); + $oCriteria->addJoin(\TaskPeer::TAS_UID, \TaskUserPeer::TAS_UID, \Criteria::LEFT_JOIN); + $oCriteria->addJoin(\TaskUserPeer::TAS_UID, \GroupUserPeer::GRP_UID, \Criteria::LEFT_JOIN); + $oCriteria->add(\TaskPeer::PRO_UID, $sProcessUID); + $oCriteria->add(\TaskUserPeer::TU_TYPE, 1); + $oCriteria->add(\TaskUserPeer::TU_RELATION, 2); + $oDataset = \TaskUserPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + while ($oDataset->next()) { + $aRow = $oDataset->getRow(); + if (!in_array($aRow['USR_UID'], $usersIds)) { + $usersIds[] = $aRow['USR_UID']; + } + } + + foreach($usersIds as $value) { \G::LoadClass( 'case' ); $oCase = new \Cases(); - $startTasks = $oCase->getStartCases( $aRow['USR_UID'] ); + $startTasks = $oCase->getStartCases( $value ); foreach ($startTasks as $task) { if ((isset( $task['pro_uid'] )) && ($task['pro_uid'] == $sProcessUID) ) { $taskValue = explode( '(', $task['value'] ); diff --git a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php index 0e0d1880b..35d3267b0 100644 --- a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php +++ b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php @@ -668,6 +668,7 @@ class BpmnWorkflow extends Project\Bpmn $diagram = isset($projectData["diagrams"]) && isset($projectData["diagrams"][0]) ? $projectData["diagrams"][0] : array(); $result = array(); + $projectData['prj_uid'] = $prjUid; $bwp = BpmnWorkflow::load($prjUid); $projectRecord = array_change_key_case($projectData, CASE_UPPER); $bwp->update($projectRecord); @@ -799,7 +800,6 @@ class BpmnWorkflow extends Project\Bpmn $bwp->removeGateway($gatewayData["GAT_UID"]); } } - /* * Diagram's Events Handling */ diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Project.php b/workflow/engine/src/ProcessMaker/Services/Api/Project.php index eae11b29e..3832ac898 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Project.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Project.php @@ -63,6 +63,9 @@ class Project extends Api public function post($prj_name, $request_data) { try { + if (!isset($request_data['prj_author'])) { + $request_data['prj_author'] = $this->getUserId(); + } return Adapter\BpmnWorkflow::createFromStruct($request_data); } catch (\Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());