diff --git a/ProcessMaker/Repositories/ProcessExecutionRawRepository.php b/ProcessMaker/Repositories/ProcessExecutionRawRepository.php index eae200cf6e..5d92e53752 100644 --- a/ProcessMaker/Repositories/ProcessExecutionRawRepository.php +++ b/ProcessMaker/Repositories/ProcessExecutionRawRepository.php @@ -485,7 +485,7 @@ private function mergeGroupMemberUserIdsRaw(array $groupIds, array &$users): voi $subGroupIds = array_values(array_unique($subGroupIds)); $groupPlaceholders = implode(',', array_fill(0, count($subGroupIds), '?')); $activeGroups = DB::select( - "SELECT id FROM groups WHERE id IN ($groupPlaceholders) AND status = ?", + "SELECT id FROM `groups` WHERE id IN ($groupPlaceholders) AND status = ?", array_merge($subGroupIds, ['ACTIVE']) ); foreach ($activeGroups as $group) { diff --git a/tests/unit/ProcessMaker/Repositories/ProcessExecutionRawRepositoryTest.php b/tests/unit/ProcessMaker/Repositories/ProcessExecutionRawRepositoryTest.php index f7e17405ad..96510e40a0 100644 --- a/tests/unit/ProcessMaker/Repositories/ProcessExecutionRawRepositoryTest.php +++ b/tests/unit/ProcessMaker/Repositories/ProcessExecutionRawRepositoryTest.php @@ -2,7 +2,10 @@ namespace Tests\Unit\ProcessMaker\Repositories; +use ProcessMaker\Models\Group; +use ProcessMaker\Models\GroupMember; use ProcessMaker\Models\ProcessRequest; +use ProcessMaker\Models\User; use ProcessMaker\Repositories\ProcessExecutionRawRepository; use Tests\TestCase; @@ -34,4 +37,33 @@ public function testGetProcessRequestForResponseRawIncludesDataColumn(): void $this->assertIsArray($hydrated->data); $this->assertSame('persisted', $hydrated->data['marker']); } + + public function testRawGroupAssignmentResolvesActiveNestedGroups(): void + { + $user = User::factory()->create(['status' => 'ACTIVE']); + $parentGroup = Group::factory()->create(['status' => 'ACTIVE']); + $childGroup = Group::factory()->create(['status' => 'ACTIVE']); + + GroupMember::withoutEvents(function () use ($parentGroup, $childGroup, $user): void { + GroupMember::create([ + 'group_id' => $parentGroup->id, + 'member_id' => $childGroup->id, + 'member_type' => Group::class, + ]); + GroupMember::create([ + 'group_id' => $childGroup->id, + 'member_id' => $user->id, + 'member_type' => User::class, + ]); + }); + + $repository = new ProcessExecutionRawRepository(); + $method = new \ReflectionMethod($repository, 'mergeGroupMemberUserIdsRaw'); + $method->setAccessible(true); + $users = []; + + $method->invokeArgs($repository, [[$parentGroup->id], &$users]); + + $this->assertSame([$user->id], array_values($users)); + } }