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.
This commit is contained in:
2026-01-28 17:31:26 +01:00
parent bb96b9312e
commit 624cad8818
5 changed files with 62 additions and 7 deletions

View File

@@ -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);
}
}

View File

@@ -0,0 +1,17 @@
<?php
declare(strict_types=1);
/*
* Chill is a software for social workers
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace Chill\MainBundle\Audit;
interface SubjectConverterManagerAwareInterface
{
public function setSubjectConverterManager(SubjectConverterManagerInterface $subjectConverterManager): void;
}

View File

@@ -0,0 +1,22 @@
<?php
declare(strict_types=1);
/*
* Chill is a software for social workers
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace Chill\MainBundle\Audit;
trait SubjectConverterManagerAwareTrait
{
private SubjectConverterManagerInterface $subjectConverterManager;
public function setSubjectConverterManager(SubjectConverterManagerInterface $subjectConverterManager): void
{
$this->subjectConverterManager = $subjectConverterManager;
}
}

View File

@@ -17,4 +17,9 @@ interface SubjectConverterManagerInterface
* @return list<array>
*/
public function convertEntityToSubjects(mixed $subject): array;
/**
* @return Subject|list<Subject>
*/
public function getSubjectsForEntity(mixed $subject): Subject|array;
}

View File

@@ -8,6 +8,8 @@ services:
exclude:
- '../../Audit/Subject.php'
- '../../Audit/AuditEvent.php'
- '../../Audit/SubjectConverterManagerAwareInterface.php'
- '../../Audit/SubjectConverterManagerAwareTrait.php'
- '../../Audit/Exception/'
- '../../Audit/Exception/*'