diff --git a/tests/unit/workflow/engine/classes/CasesTest.php b/tests/unit/workflow/engine/classes/CasesTest.php index 27ab462e0..958b72b3c 100644 --- a/tests/unit/workflow/engine/classes/CasesTest.php +++ b/tests/unit/workflow/engine/classes/CasesTest.php @@ -7,6 +7,9 @@ use ProcessMaker\Model\Application; use ProcessMaker\Model\Delegation; use ProcessMaker\Model\Process; use ProcessMaker\Model\Step; +use ProcessMaker\Model\Task; +use ProcessMaker\Model\TaskUser; +use ProcessMaker\Model\User; use Tests\TestCase; class CasesTest extends TestCase @@ -360,6 +363,49 @@ class CasesTest extends TestCase $this->assertCount(4, $res); } + /** + * Test the getStartCases method + * + * @covers \Cases::getStartCases() + * @test + */ + public function it_should_test_get_start_cases() + { + // Creating a process with initial tasks + $process = factory(Process::class)->create(); + $user = factory(User::class)->create(); + $normalTask = factory(Task::class)->create([ + 'PRO_UID' => $process->PRO_UID, + 'PRO_ID' => $process->PRO_ID, + 'TAS_START' => 'TRUE' + ]); + $webEntryTask = factory(Task::class)->create([ + 'PRO_UID' => $process->PRO_UID, + 'PRO_ID' => $process->PRO_ID, + 'TAS_START' => 'TRUE', + 'TAS_TYPE' => 'WEBENTRYEVENT' + ]); + factory(TaskUser::class)->create([ + 'TAS_UID' => $normalTask->TAS_UID, + 'USR_UID' => $user->USR_UID + ]); + factory(TaskUser::class)->create([ + 'TAS_UID' => $webEntryTask->TAS_UID, + 'USR_UID' => $user->USR_UID + ]); + + // Instance class Cases + $cases = new Cases(); + + // Get all initial tasks + $startingTasks = $cases->getStartCases($user->USR_UID); + $this->assertCount(3, $startingTasks); + + // Get initial tasks without dummy tasks + $startingTasks = $cases->getStartCases($user->USR_UID, true); + $this->assertCount(2, $startingTasks); + } + /** * Call the tearDown method */ diff --git a/workflow/engine/classes/Cases.php b/workflow/engine/classes/Cases.php index fdeade4d8..7a6fed66c 100644 --- a/workflow/engine/classes/Cases.php +++ b/workflow/engine/classes/Cases.php @@ -1,5 +1,6 @@ 'char', 'value' => 'char'); - $tasks = array(); + $rows = [['uid' => 'char', 'value' => 'char']]; + $tasks = []; $c = new Criteria(); $c->clearSelectColumns(); @@ -126,7 +129,7 @@ class Cases $c->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN); $c->add(ProcessPeer::PRO_STATUS, 'ACTIVE'); $c->add(TaskPeer::TAS_START, 'TRUE'); - $c->add(TaskUserPeer::USR_UID, $sUIDUser); + $c->add(TaskUserPeer::USR_UID, $uidUser); $c->add(TaskUserPeer::TU_TYPE, 1); $rs = TaskPeer::doSelectRS($c); $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); @@ -141,7 +144,7 @@ class Cases //check groups $group = new Groups(); - $aGroups = $group->getActiveGroupsForAnUser($sUIDUser); + $groups = $group->getActiveGroupsForAnUser($uidUser); $c = new Criteria(); $c->clearSelectColumns(); @@ -151,7 +154,7 @@ class Cases $c->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN); $c->add(ProcessPeer::PRO_STATUS, 'ACTIVE'); $c->add(TaskPeer::TAS_START, 'TRUE'); - $c->add(TaskUserPeer::USR_UID, $aGroups, Criteria::IN); + $c->add(TaskUserPeer::USR_UID, $groups, Criteria::IN); $c->add(TaskUserPeer::TU_TYPE, 1); $rs = TaskPeer::doSelectRS($c); $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); @@ -171,17 +174,21 @@ class Cases $c->addSelectColumn(ProcessPeer::PRO_TITLE); $c->addJoin(TaskPeer::PRO_UID, ProcessPeer::PRO_UID, Criteria::LEFT_JOIN); $c->add(TaskPeer::TAS_UID, $tasks, Criteria::IN); + // Include or not the dummy tasks + if ($withoutDummyTasks) { + $c->add(TaskPeer::TAS_TYPE, BusinessModelTask::getDummyTypes(), Criteria::NOT_IN); + } $c->addAscendingOrderByColumn(ProcessPeer::PRO_TITLE); $c->addAscendingOrderByColumn(TaskPeer::TAS_TITLE); $rs = TaskPeer::doSelectRS($c); $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); $rs->next(); while ($row = $rs->getRow()) { - $rows[] = array( + $rows[] = [ 'uid' => $row['TAS_UID'], 'value' => $row['PRO_TITLE'] . ' (' . $row['TAS_TITLE'] . ')', 'pro_uid' => $row['PRO_UID'] - ); + ]; $rs->next(); $row = $rs->getRow(); } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ProjectUser.php b/workflow/engine/src/ProcessMaker/BusinessModel/ProjectUser.php index 1208dfc45..4b4051129 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/ProjectUser.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ProjectUser.php @@ -2,8 +2,15 @@ namespace ProcessMaker\BusinessModel; -use \G; +use Cases; +use Criteria; +use Exception; +use G; +use GroupUserPeer; use ProcessMaker\Core\System; +use ResultSet; +use TaskPeer; +use TaskUserPeer; class ProjectUser { @@ -90,71 +97,75 @@ class ProjectUser } /** - * Return starting task + * Return starting tasks * - * @param string $sProcessUID {@min 32} {@max 32} + * @param string $processUid * - * return array + * @return array + * + * @throws Exception * * @access public */ - public function getProjectStartingTasks($sProcessUID) + public function getProjectStartingTasks($processUid) { try { - Validator::proUid($sProcessUID, '$prj_uid'); - $aUsers = array(); - $usersIds = array(); + Validator::proUid($processUid, '$prj_uid'); + $users = []; + $usersIds = []; - $oCriteria = new \Criteria('workflow'); - $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); - $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']; + $criteria = new Criteria('workflow'); + $criteria->addSelectColumn(TaskUserPeer::USR_UID); + $criteria->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN); + $criteria->add(TaskPeer::PRO_UID, $processUid); + $criteria->add(TaskUserPeer::TU_TYPE, 1); + $criteria->add(TaskUserPeer::TU_RELATION, 1); + $dataSet = TaskUserPeer::doSelectRS($criteria); + $dataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC); + while ($dataSet->next()) { + $row = $dataSet->getRow(); + if (!in_array($row['USR_UID'], $usersIds)) { + $usersIds[] = $row['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::USR_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']; + $criteria = new Criteria('workflow'); + $criteria->addSelectColumn(GroupUserPeer::USR_UID); + $criteria->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN); + $criteria->addJoin(TaskUserPeer::USR_UID, GroupUserPeer::GRP_UID, Criteria::LEFT_JOIN); + $criteria->add(TaskPeer::PRO_UID, $processUid); + $criteria->add(TaskUserPeer::TU_TYPE, 1); + $criteria->add(TaskUserPeer::TU_RELATION, 2); + $dataSet = TaskUserPeer::doSelectRS($criteria); + $dataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC); + while ($dataSet->next()) { + $row = $dataSet->getRow(); + if (!in_array($row['USR_UID'], $usersIds)) { + $usersIds[] = $row['USR_UID']; } } foreach($usersIds as $value) { - $oCase = new \Cases(); - $startTasks = $oCase->getStartCases( $value ); + $cases = new Cases(); + $startTasks = $cases->getStartCases($value, true); foreach ($startTasks as $task) { - if ((isset( $task['pro_uid'] )) && ($task['pro_uid'] == $sProcessUID) ) { - $taskValue = explode( '(', $task['value'] ); - $tasksLastIndex = count( $taskValue ) - 1; - $taskValue = explode( ')', $taskValue[$tasksLastIndex] ); - $aUsers[] = array('act_name' => $taskValue[0], - 'act_uid' => $task['uid']); + if ((isset($task['pro_uid'])) && ($task['pro_uid'] == $processUid)) { + $taskValue = explode('(', $task['value']); + $tasksLastIndex = count($taskValue) - 1; + $taskValue = explode(')', $taskValue[$tasksLastIndex]); + $users[] = [ + 'act_name' => $taskValue[0], + 'act_uid' => $task['uid'] + ]; } } } - $new = array(); - $exclude = array(""); - for ($i = 0; $i<=count($aUsers)-1; $i++) { - if (!in_array(trim($aUsers[$i]["act_uid"]) ,$exclude)) { - $new[] = $aUsers[$i]; - $exclude[] = trim($aUsers[$i]["act_uid"]); + $new = []; + $exclude = [""]; + for ($i = 0; $i <= count($users) - 1; $i++) { + if (!in_array(trim($users[$i]["act_uid"]) ,$exclude)) { + $new[] = $users[$i]; + $exclude[] = trim($users[$i]["act_uid"]); } } return $new;