From 624cad8818e405cc37ebbb7b1aaef840b6c9eb11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Wed, 28 Jan 2026 17:31:26 +0100 Subject: [PATCH] Add support for `SubjectConverterManager` awareness in converters and refactor subject retrieval. - Introduced `SubjectConverterManagerAwareTrait` and `SubjectConverterManagerAwareInterface` for injecting subject converter manager into converters. - Added `getSubjectsForEntity` method in `SubjectConverterManager` to centralize subject retrieval logic. - Updated converters to set the subject converter manager when applicable. --- .../Audit/SubjectConverterManager.php | 23 +++++++++++++------ .../SubjectConverterManagerAwareInterface.php | 17 ++++++++++++++ .../SubjectConverterManagerAwareTrait.php | 22 ++++++++++++++++++ .../SubjectConverterManagerInterface.php | 5 ++++ .../config/services/audit.yaml | 2 ++ 5 files changed, 62 insertions(+), 7 deletions(-) create mode 100644 src/Bundle/ChillMainBundle/Audit/SubjectConverterManagerAwareInterface.php create mode 100644 src/Bundle/ChillMainBundle/Audit/SubjectConverterManagerAwareTrait.php 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/*'