77use OpenApi \Attributes as OA ;
88use PhpList \Core \Domain \Subscription \Model \SubscribePage ;
99use PhpList \Core \Domain \Subscription \Model \SubscribePageData ;
10+ use PhpList \Core \Domain \Subscription \Repository \SubscriberAttributeDefinitionRepository ;
1011use Symfony \Component \Serializer \Normalizer \NormalizerInterface ;
1112
1213#[OA \Schema(
2829)]
2930class SubscribePagePublicNormalizer implements NormalizerInterface
3031{
32+ public function __construct (
33+ private readonly SubscriberAttributeDefinitionRepository $ attributeDefinitionRepository ,
34+ ) {
35+ }
36+
3137 /**
3238 * @SuppressWarnings(PHPMD.UnusedFormalParameter)
3339 */
@@ -43,14 +49,39 @@ public function normalize($object, string $format = null, array $context = []):
4349 'data ' => array_reduce (
4450 $ object ->getData (),
4551 function (array $ carry , SubscribePageData $ data ) {
46- $ carry [$ data ->getName ()] = $ data ->getData ();
52+ $ value = $ data ->getData ();
53+ if ($ data ->getName () === 'attributes ' ) {
54+ $ ids = array_filter (explode ('+ ' , $ data ->getData ()));
55+ $ value = $ this ->getAttributeDefinitions ($ ids );
56+ }
57+ $ carry [$ data ->getName ()] = $ value ;
58+
4759 return $ carry ;
4860 },
4961 []
5062 ),
5163 ];
5264 }
5365
66+ private function getAttributeDefinitions (array $ ids ): array
67+ {
68+ $ attributeDefinitions = $ this ->attributeDefinitionRepository ->getByIds ($ ids );
69+ $ result = [];
70+ foreach ($ attributeDefinitions as $ attributeDefinition ) {
71+ $ result [] = [
72+ 'id ' => $ attributeDefinition ->getId (),
73+ 'name ' => $ attributeDefinition ->getName (),
74+ 'type ' => $ attributeDefinition ->getType ()->value ,
75+ 'required ' => $ attributeDefinition ->isRequired (),
76+ 'default_value ' => $ attributeDefinition ->getDefaultValue (),
77+ 'list_order ' => $ attributeDefinition ->getListOrder (),
78+ 'options ' => $ attributeDefinition ->getOptions (),
79+ ];
80+ }
81+
82+ return $ result ;
83+ }
84+
5485 /**
5586 * @SuppressWarnings(PHPMD.UnusedFormalParameter)
5687 */
0 commit comments