diff --git a/src/Bundle/ChillMainBundle/Audit/SubjectConverterManager.php b/src/Bundle/ChillMainBundle/Audit/SubjectConverterManager.php index d43196889..00c2d67c1 100644 --- a/src/Bundle/ChillMainBundle/Audit/SubjectConverterManager.php +++ b/src/Bundle/ChillMainBundle/Audit/SubjectConverterManager.php @@ -28,16 +28,25 @@ final readonly class SubjectConverterManager implements SubjectConverterManagerI * @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 { foreach ($this->converters as $converter) { + if ($converter instanceof SubjectConverterManagerAwareInterface) { + $converter->setSubjectConverterManager($this); + } + if ($converter->supportsConvert($subject)) { - $subjects = $converter->convert($subject); - - if ($subjects instanceof Subject) { - return [$subjects->asArray()]; - } - - return array_map(static fn (Subject $subject) => $subject->asArray(), $subjects); + return $converter->convert($subject); } } diff --git a/src/Bundle/ChillMainBundle/Audit/SubjectConverterManagerAwareInterface.php b/src/Bundle/ChillMainBundle/Audit/SubjectConverterManagerAwareInterface.php new file mode 100644 index 000000000..767cbedac --- /dev/null +++ b/src/Bundle/ChillMainBundle/Audit/SubjectConverterManagerAwareInterface.php @@ -0,0 +1,17 @@ +subjectConverterManager = $subjectConverterManager; + } +} diff --git a/src/Bundle/ChillMainBundle/Audit/SubjectConverterManagerInterface.php b/src/Bundle/ChillMainBundle/Audit/SubjectConverterManagerInterface.php index c955648f3..5c4a84f71 100644 --- a/src/Bundle/ChillMainBundle/Audit/SubjectConverterManagerInterface.php +++ b/src/Bundle/ChillMainBundle/Audit/SubjectConverterManagerInterface.php @@ -17,4 +17,9 @@ interface SubjectConverterManagerInterface * @return list */ public function convertEntityToSubjects(mixed $subject): array; + + /** + * @return Subject|list + */ + public function getSubjectsForEntity(mixed $subject): Subject|array; } diff --git a/src/Bundle/ChillMainBundle/config/services/audit.yaml b/src/Bundle/ChillMainBundle/config/services/audit.yaml index 51ac98369..173bfe7e4 100644 --- a/src/Bundle/ChillMainBundle/config/services/audit.yaml +++ b/src/Bundle/ChillMainBundle/config/services/audit.yaml @@ -8,6 +8,8 @@ services: exclude: - '../../Audit/Subject.php' - '../../Audit/AuditEvent.php' + - '../../Audit/SubjectConverterManagerAwareInterface.php' + - '../../Audit/SubjectConverterManagerAwareTrait.php' - '../../Audit/Exception/' - '../../Audit/Exception/*'