diff --git a/bundle/Resources/config/services/openapi/ibexa/field_value_schema_providers.yaml b/bundle/Resources/config/services/openapi/ibexa/field_value_schema_providers.yaml index 2db79cc..cf56653 100644 --- a/bundle/Resources/config/services/openapi/ibexa/field_value_schema_providers.yaml +++ b/bundle/Resources/config/services/openapi/ibexa/field_value_schema_providers.yaml @@ -108,3 +108,8 @@ services: class: Netgen\OpenApiIbexa\OpenApi\SchemaProvider\Ibexa\FieldValue\UrlFieldValueSchemaProvider tags: - { name: netgen.openapi_ibexa.ibexa.field_value_schema_provider, identifier: ezurl } + + netgen.openapi_ibexa.ibexa.field_value_schema_provider.matrix: + class: Netgen\OpenApiIbexa\OpenApi\SchemaProvider\Ibexa\FieldValue\MatrixFieldValueSchemaProvider + tags: + - { name: netgen.openapi_ibexa.ibexa.field_value_schema_provider, identifier: ezmatrix } diff --git a/bundle/Resources/config/services/page/visitors.yaml b/bundle/Resources/config/services/page/visitors.yaml index bc1a1e0..e790b64 100644 --- a/bundle/Resources/config/services/page/visitors.yaml +++ b/bundle/Resources/config/services/page/visitors.yaml @@ -191,3 +191,8 @@ services: class: Netgen\OpenApiIbexa\Page\Output\Visitor\IbexaFieldValue\UrlFieldValueVisitor tags: - { name: netgen.openapi_ibexa.page.output.visitor } + + netgen.openapi_ibexa.page.output.visitor.ibexa_field_value.matrix: + class: Netgen\OpenApiIbexa\Page\Output\Visitor\IbexaFieldValue\MatrixFieldValueVisitor + tags: + - { name: netgen.openapi_ibexa.page.output.visitor } diff --git a/lib/OpenApi/SchemaProvider/Ibexa/FieldValue/MatrixFieldValueSchemaProvider.php b/lib/OpenApi/SchemaProvider/Ibexa/FieldValue/MatrixFieldValueSchemaProvider.php new file mode 100644 index 0000000..cc23d14 --- /dev/null +++ b/lib/OpenApi/SchemaProvider/Ibexa/FieldValue/MatrixFieldValueSchemaProvider.php @@ -0,0 +1,24 @@ + new Schema\StringSchema(), + 'value' => new Schema\StringSchema(), + ], + null, + ['type', 'value'], + ), + ); + } +} diff --git a/lib/Page/Output/Visitor/IbexaFieldValue/MatrixFieldValueVisitor.php b/lib/Page/Output/Visitor/IbexaFieldValue/MatrixFieldValueVisitor.php new file mode 100644 index 0000000..78ed02c --- /dev/null +++ b/lib/Page/Output/Visitor/IbexaFieldValue/MatrixFieldValueVisitor.php @@ -0,0 +1,35 @@ + + */ +final class MatrixFieldValueVisitor implements VisitorInterface +{ + public function accept(object $value): bool + { + return $value instanceof MatrixValue; + } + + /** + * @return array> + */ + public function visit(object $value, OutputVisitor $outputVisitor, array $parameters = []): array + { + return array_map( + static fn (Row $row): array => $row->getCells(), + iterator_to_array($value->getRows()), + ); + } +} diff --git a/phpstan.neon b/phpstan.neon index 4e89f91..ecc3d9d 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -9,3 +9,4 @@ parameters: - '#Netgen\\TagsBundle\\Core\\FieldType\\Tags\\Value#' - '#Netgen\\Bundle\\EnhancedSelectionBundle\\Core\\FieldType\\EnhancedSelection\\Value#' - '#Netgen\\Bundle\\ContentTypeListBundle\\Core\\FieldType\\ContentTypeList\\Value#' + - '#Ibexa\\FieldTypeMatrix\\FieldType\\Value#'