diff --git a/src/Bundle/ChillMainBundle/Audit/AuditEvent2Trail.php b/src/Bundle/ChillMainBundle/Audit/AuditEvent2Trail.php index 4a1927636..76bfe15e5 100644 --- a/src/Bundle/ChillMainBundle/Audit/AuditEvent2Trail.php +++ b/src/Bundle/ChillMainBundle/Audit/AuditEvent2Trail.php @@ -34,10 +34,10 @@ final readonly class AuditEvent2Trail implements AuditEvent2TrailInterface $event->description->trans($this->translator) : $event->description; - $targets = array_reduce( + $subjects = array_reduce( $event->subjects, function (array $carry, mixed $item): array { - return array_merge($carry, $this->subjectConverterManager->convertEntityToSubjects($item)); + return array_merge($carry, $this->subjectConverterManager->getSubjectsForEntity($item)); }, [] ); @@ -50,7 +50,7 @@ final readonly class AuditEvent2Trail implements AuditEvent2TrailInterface $this->clock->now(), $user instanceof User ? $user : null, $description, - $targets, + array_map(fn (Subject $subject) => $subject->asArray(), $subjects), $event->metadata, ); } diff --git a/src/Bundle/ChillMainBundle/Audit/SubjectConverterManager.php b/src/Bundle/ChillMainBundle/Audit/SubjectConverterManager.php index 00c2d67c1..a31aac42b 100644 --- a/src/Bundle/ChillMainBundle/Audit/SubjectConverterManager.php +++ b/src/Bundle/ChillMainBundle/Audit/SubjectConverterManager.php @@ -22,23 +22,7 @@ final readonly class SubjectConverterManager implements SubjectConverterManagerI private iterable $converters, ) {} - /** - * @return list - * - * @throws ConvertSubjectException - */ - public function convertEntityToSubjects(mixed $subject): array - { - $subjects = $this->getSubjectsForEntity($subject); - - if ($subjects instanceof Subject) { - return [$subjects->asArray()]; - } - - return array_map(static fn (Subject $subject) => $subject->asArray(), $subjects); - } - - public function getSubjectsForEntity(mixed $subject): Subject|array + public function getSubjectsForEntity(mixed $subject): array { foreach ($this->converters as $converter) { if ($converter instanceof SubjectConverterManagerAwareInterface) { @@ -46,7 +30,9 @@ final readonly class SubjectConverterManager implements SubjectConverterManagerI } if ($converter->supportsConvert($subject)) { - return $converter->convert($subject); + $subjects = $converter->convert($subject); + + return $subjects instanceof Subject ? [$subjects] : $subjects; } } diff --git a/src/Bundle/ChillMainBundle/Audit/SubjectConverterManagerInterface.php b/src/Bundle/ChillMainBundle/Audit/SubjectConverterManagerInterface.php index 5c4a84f71..eb09ba1b2 100644 --- a/src/Bundle/ChillMainBundle/Audit/SubjectConverterManagerInterface.php +++ b/src/Bundle/ChillMainBundle/Audit/SubjectConverterManagerInterface.php @@ -14,12 +14,7 @@ namespace Chill\MainBundle\Audit; interface SubjectConverterManagerInterface { /** - * @return list + * @return list */ - public function convertEntityToSubjects(mixed $subject): array; - - /** - * @return Subject|list - */ - public function getSubjectsForEntity(mixed $subject): Subject|array; + public function getSubjectsForEntity(mixed $subject): array; } diff --git a/src/Bundle/ChillMainBundle/Tests/Audit/AuditEvent2TrailTest.php b/src/Bundle/ChillMainBundle/Tests/Audit/AuditEvent2TrailTest.php index 8d4e7f27a..0f0add5ce 100644 --- a/src/Bundle/ChillMainBundle/Tests/Audit/AuditEvent2TrailTest.php +++ b/src/Bundle/ChillMainBundle/Tests/Audit/AuditEvent2TrailTest.php @@ -13,6 +13,7 @@ namespace Chill\MainBundle\Tests\Audit; use Chill\MainBundle\Audit\AuditEvent; use Chill\MainBundle\Audit\AuditEvent2Trail; +use Chill\MainBundle\Audit\Subject; use Chill\MainBundle\Audit\SubjectConverterManagerInterface; use Chill\MainBundle\Entity\AuditTrail; use PHPUnit\Framework\TestCase; @@ -48,11 +49,11 @@ class AuditEvent2TrailTest extends TestCase metadata: ['foo' => 'bar'] ); - $subjectConverterManager->convertEntityToSubjects($subject) - ->willReturn([['type' => 'stdClass', 'id' => '1']]); - $security->getUser()->willReturn(null); + $subjectConverterManager->getSubjectsForEntity($subject) + ->willReturn([new Subject('stdClass', ['id' => '1'])]); + $service = new AuditEvent2Trail( $translator->reveal(), $subjectConverterManager->reveal(), @@ -65,7 +66,7 @@ class AuditEvent2TrailTest extends TestCase $this->assertInstanceOf(AuditTrail::class, $trail); $this->assertSame('test_action', $trail->getAction()); $this->assertSame('translated description', $trail->getDescription()); - $this->assertSame([[['type' => 'stdClass', 'id' => '1']]], $trail->getTargets()); + $this->assertSame([['id' => '1', 't' => 'stdClass']], $trail->getTargets()); $this->assertSame(['foo' => 'bar'], $trail->getMetadata()); $this->assertEquals($clock->now(), $trail->getOccurredAt()); } diff --git a/src/Bundle/ChillMainBundle/Tests/Audit/SubjectConverterManagerTest.php b/src/Bundle/ChillMainBundle/Tests/Audit/SubjectConverterManagerTest.php index fa32383de..39bbacede 100644 --- a/src/Bundle/ChillMainBundle/Tests/Audit/SubjectConverterManagerTest.php +++ b/src/Bundle/ChillMainBundle/Tests/Audit/SubjectConverterManagerTest.php @@ -32,7 +32,7 @@ class SubjectConverterManagerTest extends TestCase $manager = new SubjectConverterManager([]); $this->expectException(ConvertSubjectException::class); - $manager->convertEntityToSubjects(new \stdClass()); + $manager->getSubjectsForEntity(new \stdClass()); } public function testReturnsSingleSubjectWhenConverterReturnsSubject(): void @@ -46,10 +46,10 @@ class SubjectConverterManagerTest extends TestCase $manager = new SubjectConverterManager([$converter->reveal()]); - $result = $manager->convertEntityToSubjects($subject); + $result = $manager->getSubjectsForEntity($subject); $this->assertCount(1, $result); - $this->assertSame(['id' => '123', 't' => 'type'], $result[0]); + $this->assertSame(['id' => '123', 't' => 'type'], $result[0]->asArray()); } public function testReturnsListOfSubjectsWhenConverterReturnsArray(): void @@ -64,11 +64,11 @@ class SubjectConverterManagerTest extends TestCase $manager = new SubjectConverterManager([$converter->reveal()]); - $result = $manager->convertEntityToSubjects($subject); + $result = $manager->getSubjectsForEntity($subject); $this->assertCount(2, $result); - $this->assertSame(['id' => '123', 't' => 'type1'], $result[0]); - $this->assertSame(['id' => '456', 't' => 'type2'], $result[1]); + $this->assertSame(['id' => '123', 't' => 'type1'], $result[0]->asArray()); + $this->assertSame(['id' => '456', 't' => 'type2'], $result[1]->asArray()); } public function testSkipsConverterThatDoesNotSupportSubject(): void @@ -86,9 +86,9 @@ class SubjectConverterManagerTest extends TestCase $manager = new SubjectConverterManager([$converter1->reveal(), $converter2->reveal()]); - $result = $manager->convertEntityToSubjects($subject); + $result = $manager->getSubjectsForEntity($subject); $this->assertCount(1, $result); - $this->assertSame(['id' => '123', 't' => 'type'], $result[0]); + $this->assertSame(['id' => '123', 't' => 'type'], $result[0]->asArray()); } } diff --git a/src/Bundle/ChillPersonBundle/Audit/SubjectConverter/AccompanyingPeriodSubjectConverter.php b/src/Bundle/ChillPersonBundle/Audit/SubjectConverter/AccompanyingPeriodSubjectConverter.php index 2320f6d3e..6625ecd41 100644 --- a/src/Bundle/ChillPersonBundle/Audit/SubjectConverter/AccompanyingPeriodSubjectConverter.php +++ b/src/Bundle/ChillPersonBundle/Audit/SubjectConverter/AccompanyingPeriodSubjectConverter.php @@ -24,19 +24,12 @@ class AccompanyingPeriodSubjectConverter implements SubjectConverterInterface, S { use SubjectConverterManagerAwareTrait; - public function convert(mixed $subject): array + public function convert(mixed $subject): Subject|array { $data = [new Subject('accompanying_period', ['id' => $subject->getId()])]; foreach ($subject->getCurrentParticipations() as $participation) { - $subjects = $this->subjectConverterManager->getSubjectsForEntity($participation->getPerson()); - if ($subjects instanceof Subject) { - $data[] = $subjects; - } else { - foreach ($subjects as $s) { - $data[] = $s; - } - } + array_push($data, ...$this->subjectConverterManager->getSubjectsForEntity($participation->getPerson())); } return $data; diff --git a/src/Bundle/ChillPersonBundle/Audit/SubjectConverter/AccompanyingPeriodWorkSubjectConverter.php b/src/Bundle/ChillPersonBundle/Audit/SubjectConverter/AccompanyingPeriodWorkSubjectConverter.php index 5e4250faf..4e5602de7 100644 --- a/src/Bundle/ChillPersonBundle/Audit/SubjectConverter/AccompanyingPeriodWorkSubjectConverter.php +++ b/src/Bundle/ChillPersonBundle/Audit/SubjectConverter/AccompanyingPeriodWorkSubjectConverter.php @@ -29,12 +29,7 @@ class AccompanyingPeriodWorkSubjectConverter implements SubjectConverterInterfac $data = [new Subject('accompanying_period_work', ['id' => $subject->getId()])]; foreach ($subject->getPersons() as $person) { - $personSubject = $this->subjectConverterManager->getSubjectsForEntity($person); - if ($personSubject instanceof Subject) { - $data[] = $personSubject; - } else { - array_push($data, ...$personSubject); - } + array_push($data, ...$this->subjectConverterManager->getSubjectsForEntity($person)); } return $data;