mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2026-03-08 06:59:45 +00:00
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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -8,6 +8,8 @@ services:
|
||||
exclude:
|
||||
- '../../Audit/Subject.php'
|
||||
- '../../Audit/AuditEvent.php'
|
||||
- '../../Audit/SubjectConverterManagerAwareInterface.php'
|
||||
- '../../Audit/SubjectConverterManagerAwareTrait.php'
|
||||
- '../../Audit/Exception/'
|
||||
- '../../Audit/Exception/*'
|
||||
|
||||
|
||||
Reference in New Issue
Block a user