From 32b9e746ebc7f8fd2b04a620520b837229128d5f Mon Sep 17 00:00:00 2001 From: Adrien Dupuis <61695653+adriendupuis@users.noreply.github.com> Date: Tue, 12 May 2026 09:22:48 +0200 Subject: [PATCH] Fix/Enh. OpenAPI --- .../ContentTypeCreateController.php | 37 +++++++----------- .../ContentTypeCreateViewController.php | 38 ++++++++---------- .../ContentTypeDeleteController.php | 10 +++++ .../ContentTypeDraftCreateController.php | 39 ++++++++----------- .../ContentTypeDraftDeleteController.php | 10 +++++ ...tTypeDraftFieldDefinitionAddController.php | 37 +++++++----------- ...peDraftFieldDefinitionDeleteController.php | 10 +++++ ...TypeDraftFieldDefinitionListController.php | 18 +++------ ...DraftFieldDefinitionLoadByIdController.php | 22 ++++------- ...peDraftFieldDefinitionUpdateController.php | 37 +++++++----------- .../ContentTypeDraftLoadController.php | 22 ++++------- .../ContentTypeDraftUpdateController.php | 39 ++++++++----------- ...ntentTypeFieldDefinitionListController.php | 18 +++------ ...tTypeFieldDefinitionLoadByIdController.php | 22 ++++------- .../ContentTypeGroupCreateController.php | 39 ++++++++----------- .../ContentTypeGroupDeleteController.php | 10 +++++ .../ContentTypeGroupListController.php | 23 ++++------- .../ContentTypeGroupLoadByIdController.php | 24 ++++-------- .../ContentTypeGroupUpdateController.php | 39 ++++++++----------- .../ContentTypeGroupsListController.php | 24 ++++-------- .../ContentTypeLinkToGroupController.php | 34 ++++++++++------ .../ContentType/ContentTypeListController.php | 28 +++++-------- .../ContentTypeListForGroupController.php | 28 +++++-------- .../ContentTypeLoadByIdController.php | 24 ++++-------- .../ContentTypeUnlinkFromGroupController.php | 18 +++++---- 25 files changed, 279 insertions(+), 371 deletions(-) diff --git a/src/lib/Server/Controller/ContentType/ContentTypeCreateController.php b/src/lib/Server/Controller/ContentType/ContentTypeCreateController.php index a2f82ae07..a417ed07f 100644 --- a/src/lib/Server/Controller/ContentType/ContentTypeCreateController.php +++ b/src/lib/Server/Controller/ContentType/ContentTypeCreateController.php @@ -30,6 +30,7 @@ uriTemplate: '/content/typegroups/{contentTypeGroupId}/types', extraProperties: [OpenApiFactory::OVERRIDE_OPENAPI_RESPONSES => false], openapi: new Model\Operation( + operationId: 'ibexa.rest.create_content_type', summary: 'Create content type', description: 'Creates a new content type draft in the given content type group.', tags: [ @@ -37,19 +38,10 @@ ], parameters: [ new Model\Parameter( - name: 'Accept', + name: 'X-CSRF-Token', in: 'header', required: true, - description: 'If set, the new content type or draft is returned in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), - new Model\Parameter( - name: 'Content-Type', - in: 'header', - required: true, - description: 'The content type Create schema encoded in XML or JSON format.', + description: 'The CSRF Token needed on all unsafe HTTP methods with session.', schema: [ 'type' => 'string', ], @@ -64,35 +56,36 @@ ), ], requestBody: new Model\RequestBody( + description: 'The content type Create schema encoded in XML or JSON format.', content: new \ArrayObject([ - 'application/vnd.ibexa.api.ContentTypeCreate+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeCreate', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/content_type_group_id/types/POST/ContentTypeCreate.xml.example', - ], 'application/vnd.ibexa.api.ContentTypeCreate+json' => [ 'schema' => [ '$ref' => '#/components/schemas/ContentTypeCreateWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/content_type_group_id/types/POST/ContentTypeCreate.json.example', ], + 'application/vnd.ibexa.api.ContentTypeCreate+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/ContentTypeCreate', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/content_type_group_id/types/POST/ContentTypeCreate.xml.example', + ], ]), ), responses: [ Response::HTTP_CREATED => [ 'description' => 'Content type created.', 'content' => [ - 'application/vnd.ibexa.api.ContentType+xml' => [ + 'application/vnd.ibexa.api.ContentType+json' => [ 'schema' => [ - '$ref' => '#/components/schemas/ContentType', + '$ref' => '#/components/schemas/ContentTypeWrapper', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/draft/PUBLISH/ContentType.xml.example', ], - 'application/vnd.ibexa.api.ContentType+json' => [ + 'application/vnd.ibexa.api.ContentType+xml' => [ 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeWrapper', + '$ref' => '#/components/schemas/ContentType', ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/content_type_group_id/types/POST/ContentType.xml.example', ], ], ], diff --git a/src/lib/Server/Controller/ContentType/ContentTypeCreateViewController.php b/src/lib/Server/Controller/ContentType/ContentTypeCreateViewController.php index f8f8e697d..8189717f1 100644 --- a/src/lib/Server/Controller/ContentType/ContentTypeCreateViewController.php +++ b/src/lib/Server/Controller/ContentType/ContentTypeCreateViewController.php @@ -22,6 +22,7 @@ uriTemplate: '/content/types/view', extraProperties: [OpenApiFactory::OVERRIDE_OPENAPI_RESPONSES => false], openapi: new Model\Operation( + operationId: 'ibexa.rest.content_types.view', summary: 'Filter content types', description: 'Executes a query and returns a View including the results. The View input reflects the criteria model of the public PHP API.', tags: [ @@ -29,35 +30,27 @@ ], parameters: [ new Model\Parameter( - name: 'Accept', + name: 'X-CSRF-Token', in: 'header', required: true, - description: 'The view in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), - new Model\Parameter( - name: 'Content-Type', - in: 'header', - required: true, - description: 'The view input in XML or JSON format.', + description: 'The CSRF Token needed on all unsafe HTTP methods with session.', schema: [ 'type' => 'string', ], ), ], requestBody: new Model\RequestBody( + description: 'The view input in XML or JSON format.', content: new \ArrayObject([ - 'application/vnd.ibexa.api.ContentTypeViewInput+xml' => [ + 'application/vnd.ibexa.api.ContentTypeViewInput+json' => [ 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeViewInput', + '$ref' => '#/components/schemas/ContentTypeViewInputWrapper', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/POST/ContentTypeCreateView.xml.example', + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/POST/ContentTypeCreateView.json.example', ], - 'application/vnd.ibexa.api.ContentTypeViewInput+json' => [ + 'application/vnd.ibexa.api.ContentTypeViewInput+xml' => [ 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeViewInputWrapper', + '$ref' => '#/components/schemas/ContentTypeViewInput', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/POST/ContentTypeCreateView.xml.example', ], @@ -65,19 +58,20 @@ ), responses: [ Response::HTTP_OK => [ + 'description' => 'The view in XML or JSON format.', 'content' => [ - 'application/vnd.ibexa.api.ContentTypeList+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeInfoList', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/GET/ContentTypeInfoList.xml.example', - ], 'application/vnd.ibexa.api.ContentTypeList+json' => [ 'schema' => [ '$ref' => '#/components/schemas/ContentTypeInfoListWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/GET/ContentTypeInfoList.json.example', ], + 'application/vnd.ibexa.api.ContentTypeList+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/ContentTypeInfoList', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/GET/ContentTypeInfoList.xml.example', + ], ], ], Response::HTTP_BAD_REQUEST => [ diff --git a/src/lib/Server/Controller/ContentType/ContentTypeDeleteController.php b/src/lib/Server/Controller/ContentType/ContentTypeDeleteController.php index 593ad82c6..6a73c397c 100644 --- a/src/lib/Server/Controller/ContentType/ContentTypeDeleteController.php +++ b/src/lib/Server/Controller/ContentType/ContentTypeDeleteController.php @@ -20,12 +20,22 @@ #[Delete( uriTemplate: '/content/types/{contentTypeId}', openapi: new Model\Operation( + operationId: 'ibexa.rest.delete_content_type', summary: 'Delete content type', description: 'Deletes the provided content type.', tags: [ 'Type', ], parameters: [ + new Model\Parameter( + name: 'X-CSRF-Token', + in: 'header', + required: true, + description: 'The CSRF Token needed on all unsafe HTTP methods with session.', + schema: [ + 'type' => 'string', + ], + ), new Model\Parameter( name: 'contentTypeId', in: 'path', diff --git a/src/lib/Server/Controller/ContentType/ContentTypeDraftCreateController.php b/src/lib/Server/Controller/ContentType/ContentTypeDraftCreateController.php index 14c4defd0..7cc5727d5 100644 --- a/src/lib/Server/Controller/ContentType/ContentTypeDraftCreateController.php +++ b/src/lib/Server/Controller/ContentType/ContentTypeDraftCreateController.php @@ -26,6 +26,7 @@ uriTemplate: '/content/types/{contentTypeId}', extraProperties: [OpenApiFactory::OVERRIDE_OPENAPI_RESPONSES => false], openapi: new Model\Operation( + operationId: 'ibexa.rest.create_content_type_draft', summary: 'Create Draft', description: 'Creates a draft and updates it with the given data.', tags: [ @@ -33,19 +34,10 @@ ], parameters: [ new Model\Parameter( - name: 'Accept', + name: 'X-CSRF-Token', in: 'header', required: true, - description: 'If set, the new content type draft is returned in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), - new Model\Parameter( - name: 'Content-Type', - in: 'header', - required: true, - description: 'The content type Update schema encoded in XML or JSON format.', + description: 'The CSRF Token needed on all unsafe HTTP methods with session.', schema: [ 'type' => 'string', ], @@ -60,36 +52,37 @@ ), ], requestBody: new Model\RequestBody( + description: 'The content type Update schema encoded in XML or JSON format.', content: new \ArrayObject([ - 'application/vnd.ibexa.api.ContentTypeUpdate+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeUpdate', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/POST/ContentTypeUpdate.xml.example', - ], 'application/vnd.ibexa.api.ContentTypeUpdate+json' => [ 'schema' => [ '$ref' => '#/components/schemas/ContentTypeUpdateWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/POST/ContentTypeUpdate.json.example', ], + 'application/vnd.ibexa.api.ContentTypeUpdate+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/ContentTypeUpdate', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/POST/ContentTypeUpdate.xml.example', + ], ]), ), responses: [ Response::HTTP_CREATED => [ 'description' => 'Draft created.', 'content' => [ - 'application/vnd.ibexa.api.ContentTypeInfo+xml' => [ + 'application/vnd.ibexa.api.ContentTypeInfo+json' => [ 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeInfo', + '$ref' => '#/components/schemas/ContentTypeInfoWrapper', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/draft/PATCH/ContentTypeInfo.xml.example', + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/POST/ContentTypeInfo.json.example', ], - 'application/vnd.ibexa.api.ContentTypeInfo+json' => [ + 'application/vnd.ibexa.api.ContentTypeInfo+xml' => [ 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeInfoWrapper', + '$ref' => '#/components/schemas/ContentTypeInfo', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/draft/PATCH/ContentTypeInfo.json.example', + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/POST/ContentTypeInfo.xml.example', ], ], ], diff --git a/src/lib/Server/Controller/ContentType/ContentTypeDraftDeleteController.php b/src/lib/Server/Controller/ContentType/ContentTypeDraftDeleteController.php index cd9743267..525370069 100644 --- a/src/lib/Server/Controller/ContentType/ContentTypeDraftDeleteController.php +++ b/src/lib/Server/Controller/ContentType/ContentTypeDraftDeleteController.php @@ -17,12 +17,22 @@ #[Delete( uriTemplate: '/content/types/{contentTypeId}/draft', openapi: new Model\Operation( + operationId: 'ibexa.rest.delete_content_type_draft', summary: 'Delete content type draft', description: 'Deletes the provided content type draft.', tags: [ 'Type', ], parameters: [ + new Model\Parameter( + name: 'X-CSRF-Token', + in: 'header', + required: true, + description: 'The CSRF Token needed on all unsafe HTTP methods with session.', + schema: [ + 'type' => 'string', + ], + ), new Model\Parameter( name: 'contentTypeId', in: 'path', diff --git a/src/lib/Server/Controller/ContentType/ContentTypeDraftFieldDefinitionAddController.php b/src/lib/Server/Controller/ContentType/ContentTypeDraftFieldDefinitionAddController.php index c2bc6e2d8..b551934f4 100644 --- a/src/lib/Server/Controller/ContentType/ContentTypeDraftFieldDefinitionAddController.php +++ b/src/lib/Server/Controller/ContentType/ContentTypeDraftFieldDefinitionAddController.php @@ -28,6 +28,7 @@ uriTemplate: '/content/types/{contentTypeId}/draft/fieldDefinitions', extraProperties: [OpenApiFactory::OVERRIDE_OPENAPI_RESPONSES => false], openapi: new Model\Operation( + operationId: 'ibexa.rest.add_content_type_draft_field_definition', summary: 'Add content type Draft Field definition', description: 'Creates a new Field definition for the given content type.', tags: [ @@ -35,19 +36,10 @@ ], parameters: [ new Model\Parameter( - name: 'Accept', + name: 'X-CSRF-Token', in: 'header', required: true, - description: 'If set, the new Field definition is returned in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), - new Model\Parameter( - name: 'Content-Type', - in: 'header', - required: true, - description: 'The Field Definition Create schema encoded in XML or JSON format.', + description: 'The CSRF Token needed on all unsafe HTTP methods with session.', schema: [ 'type' => 'string', ], @@ -62,17 +54,18 @@ ), ], requestBody: new Model\RequestBody( + description: 'The Field Definition Create schema encoded in XML or JSON format.', content: new \ArrayObject([ - 'application/vnd.ibexa.api.FieldDefinitionCreate+xml' => [ + 'application/vnd.ibexa.api.FieldDefinitionCreate+json' => [ 'schema' => [ - '$ref' => '#/components/schemas/FieldDefinitionCreate', + '$ref' => '#/components/schemas/FieldDefinitionCreateWrapper', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/draft/field_definitions/POST/FieldDefinitionCreate.xml.example', ], - 'application/vnd.ibexa.api.FieldDefinitionCreate+json' => [ + 'application/vnd.ibexa.api.FieldDefinitionCreate+xml' => [ 'schema' => [ - '$ref' => '#/components/schemas/FieldDefinitionCreateWrapper', + '$ref' => '#/components/schemas/FieldDefinitionCreate', ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/draft/field_definitions/POST/FieldDefinitionCreate.xml.example', ], ]), ), @@ -80,18 +73,18 @@ Response::HTTP_CREATED => [ 'description' => 'Field definition created.', 'content' => [ - 'application/vnd.ibexa.api.FieldDefinition+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/FieldDefinition', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/field_definition_id/GET/FieldDefinition.xml.example', - ], 'application/vnd.ibexa.api.FieldDefinition+json' => [ 'schema' => [ '$ref' => '#/components/schemas/FieldDefinitionWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/field_definition_id/GET/FieldDefinition.json.example', ], + 'application/vnd.ibexa.api.FieldDefinition+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/FieldDefinition', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/draft/field_definitions/POST/FieldDefinition.xml.example', + ], ], ], Response::HTTP_BAD_REQUEST => [ diff --git a/src/lib/Server/Controller/ContentType/ContentTypeDraftFieldDefinitionDeleteController.php b/src/lib/Server/Controller/ContentType/ContentTypeDraftFieldDefinitionDeleteController.php index 124081884..7864b7f6e 100644 --- a/src/lib/Server/Controller/ContentType/ContentTypeDraftFieldDefinitionDeleteController.php +++ b/src/lib/Server/Controller/ContentType/ContentTypeDraftFieldDefinitionDeleteController.php @@ -21,12 +21,22 @@ uriTemplate: '/content/types/{contentTypeId}/draft/fieldDefinitions/{fieldDefinitionId}', extraProperties: [OpenApiFactory::OVERRIDE_OPENAPI_RESPONSES => false], openapi: new Model\Operation( + operationId: 'ibexa.rest.remove_content_type_draft_field_definition', summary: 'Delete content type Draft Field definition', description: 'Deletes the provided Field definition.', tags: [ 'Type', ], parameters: [ + new Model\Parameter( + name: 'X-CSRF-Token', + in: 'header', + required: true, + description: 'The CSRF Token needed on all unsafe HTTP methods with session.', + schema: [ + 'type' => 'string', + ], + ), new Model\Parameter( name: 'contentTypeId', in: 'path', diff --git a/src/lib/Server/Controller/ContentType/ContentTypeDraftFieldDefinitionListController.php b/src/lib/Server/Controller/ContentType/ContentTypeDraftFieldDefinitionListController.php index 80256ae38..a641d32bd 100644 --- a/src/lib/Server/Controller/ContentType/ContentTypeDraftFieldDefinitionListController.php +++ b/src/lib/Server/Controller/ContentType/ContentTypeDraftFieldDefinitionListController.php @@ -17,21 +17,13 @@ #[Get( uriTemplate: '/content/types/{contentTypeId}/draft/fieldDefinitions', openapi: new Model\Operation( + operationId: 'ibexa.rest.load_content_type_draft_field_definition_list', summary: 'Get Draft Field definition list', description: 'Returns all Field definitions of the provided content type Draft.', tags: [ 'Type', ], parameters: [ - new Model\Parameter( - name: 'Accept', - in: 'header', - required: true, - description: 'If set, the Field definitions are returned in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), new Model\Parameter( name: 'contentTypeId', in: 'path', @@ -45,14 +37,14 @@ Response::HTTP_OK => [ 'description' => 'OK - return a list of Field definitions.', 'content' => [ - 'application/vnd.ibexa.api.FieldDefinitionList+xml' => [ + 'application/vnd.ibexa.api.FieldDefinitionList+json' => [ 'schema' => [ - '$ref' => '#/components/schemas/FieldDefinitions', + '$ref' => '#/components/schemas/FieldDefinitionsWrapper', ], ], - 'application/vnd.ibexa.api.FieldDefinitionList+json' => [ + 'application/vnd.ibexa.api.FieldDefinitionList+xml' => [ 'schema' => [ - '$ref' => '#/components/schemas/FieldDefinitionsWrapper', + '$ref' => '#/components/schemas/FieldDefinitions', ], ], ], diff --git a/src/lib/Server/Controller/ContentType/ContentTypeDraftFieldDefinitionLoadByIdController.php b/src/lib/Server/Controller/ContentType/ContentTypeDraftFieldDefinitionLoadByIdController.php index b8aefda76..be015b966 100644 --- a/src/lib/Server/Controller/ContentType/ContentTypeDraftFieldDefinitionLoadByIdController.php +++ b/src/lib/Server/Controller/ContentType/ContentTypeDraftFieldDefinitionLoadByIdController.php @@ -19,21 +19,13 @@ #[Get( uriTemplate: '/content/types/{contentTypeId}/draft/fieldDefinitions/{fieldDefinitionId}', openapi: new Model\Operation( + operationId: 'ibexa.rest.load_content_type_draft_field_definition', summary: 'Get content type Draft Field definition', description: 'Returns the Field definition by the given ID.', tags: [ 'Type', ], parameters: [ - new Model\Parameter( - name: 'Accept', - in: 'header', - required: true, - description: 'If set, the Field definition is returned in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), new Model\Parameter( name: 'contentTypeId', in: 'path', @@ -55,17 +47,17 @@ Response::HTTP_OK => [ 'description' => 'OK - returns the Field definition.', 'content' => [ - 'application/vnd.ibexa.api.FieldDefinition+xml' => [ + 'application/vnd.ibexa.api.FieldDefinition+json' => [ 'schema' => [ - '$ref' => '#/components/schemas/FieldDefinition', + '$ref' => '#/components/schemas/FieldDefinitionWrapper', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/field_definition_id/GET/FieldDefinition.xml.example', + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/draft/field_definitions/field_definition_id/GET/FieldDefinition.json.example', ], - 'application/vnd.ibexa.api.FieldDefinition+json' => [ + 'application/vnd.ibexa.api.FieldDefinition+xml' => [ 'schema' => [ - '$ref' => '#/components/schemas/FieldDefinitionWrapper', + '$ref' => '#/components/schemas/FieldDefinition', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/field_definition_id/GET/FieldDefinition.json.example', + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/draft/field_definitions/field_definition_id/GET/FieldDefinition.xml.example', ], ], ], diff --git a/src/lib/Server/Controller/ContentType/ContentTypeDraftFieldDefinitionUpdateController.php b/src/lib/Server/Controller/ContentType/ContentTypeDraftFieldDefinitionUpdateController.php index 2db208e59..049d65957 100644 --- a/src/lib/Server/Controller/ContentType/ContentTypeDraftFieldDefinitionUpdateController.php +++ b/src/lib/Server/Controller/ContentType/ContentTypeDraftFieldDefinitionUpdateController.php @@ -25,6 +25,7 @@ uriTemplate: '/content/types/{contentTypeId}/draft/fieldDefinitions/{fieldDefinitionId}', extraProperties: [OpenApiFactory::OVERRIDE_OPENAPI_RESPONSES => false], openapi: new Model\Operation( + operationId: 'ibexa.rest.update_content_type_draft_field_definition', summary: 'Update content type Draft Field definition', description: 'Updates the attributes of a Field definition.', tags: [ @@ -32,19 +33,10 @@ ], parameters: [ new Model\Parameter( - name: 'Accept', + name: 'X-CSRF-Token', in: 'header', required: true, - description: 'If set, the updated Field definition is returned in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), - new Model\Parameter( - name: 'Content-Type', - in: 'header', - required: true, - description: 'The Field definition update schema encoded in XML or JSON format.', + description: 'The CSRF Token needed on all unsafe HTTP methods with session.', schema: [ 'type' => 'string', ], @@ -67,17 +59,18 @@ ), ], requestBody: new Model\RequestBody( + description: 'The Field definition update schema encoded in XML or JSON format.', content: new \ArrayObject([ - 'application/vnd.ibexa.api.FieldDefinitionUpdate+xml' => [ + 'application/vnd.ibexa.api.FieldDefinitionUpdate+json' => [ 'schema' => [ - '$ref' => '#/components/schemas/FieldDefinitionUpdate', + '$ref' => '#/components/schemas/FieldDefinitionUpdateWrapper', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/draft/field_definitions/field_definition_id/PATCH/FieldDefinitionUpdate.xml.example', ], - 'application/vnd.ibexa.api.FieldDefinitionUpdate+json' => [ + 'application/vnd.ibexa.api.FieldDefinitionUpdate+xml' => [ 'schema' => [ - '$ref' => '#/components/schemas/FieldDefinitionUpdateWrapper', + '$ref' => '#/components/schemas/FieldDefinitionUpdate', ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/draft/field_definitions/field_definition_id/PATCH/FieldDefinitionUpdate.xml.example', ], ]), ), @@ -85,18 +78,18 @@ Response::HTTP_OK => [ 'description' => 'OK - attributes updated.', 'content' => [ - 'application/vnd.ibexa.api.FieldDefinition+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/FieldDefinition', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/field_definition_id/GET/FieldDefinition.xml.example', - ], 'application/vnd.ibexa.api.FieldDefinition+json' => [ 'schema' => [ '$ref' => '#/components/schemas/FieldDefinitionWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/field_definition_id/GET/FieldDefinition.json.example', ], + 'application/vnd.ibexa.api.FieldDefinition+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/FieldDefinition', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/draft/field_definitions/field_definition_id/PATCH/FieldDefinition.xml.example', + ], ], ], Response::HTTP_BAD_REQUEST => [ diff --git a/src/lib/Server/Controller/ContentType/ContentTypeDraftLoadController.php b/src/lib/Server/Controller/ContentType/ContentTypeDraftLoadController.php index 58c913a2a..32790a425 100644 --- a/src/lib/Server/Controller/ContentType/ContentTypeDraftLoadController.php +++ b/src/lib/Server/Controller/ContentType/ContentTypeDraftLoadController.php @@ -17,21 +17,13 @@ #[Get( uriTemplate: '/content/types/{contentTypeId}/draft', openapi: new Model\Operation( + operationId: 'ibexa.rest.load_content_type_draft', summary: 'Get content type draft', description: 'Returns the draft of the content type with the provided ID.', tags: [ 'Type', ], parameters: [ - new Model\Parameter( - name: 'Accept', - in: 'header', - required: true, - description: 'If set, the content type is returned in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), new Model\Parameter( name: 'contentTypeId', in: 'path', @@ -45,18 +37,18 @@ Response::HTTP_OK => [ 'description' => 'OK - returns the content type.', 'content' => [ - 'application/vnd.ibexa.api.ContentType+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/ContentType', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/draft/PUBLISH/ContentType.xml.example', - ], 'application/vnd.ibexa.api.ContentType+json' => [ 'schema' => [ '$ref' => '#/components/schemas/ContentTypeWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/GET/ContentType.json.example', ], + 'application/vnd.ibexa.api.ContentType+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/ContentType', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/draft/PUBLISH/ContentType.xml.example', + ], ], ], Response::HTTP_UNAUTHORIZED => [ diff --git a/src/lib/Server/Controller/ContentType/ContentTypeDraftUpdateController.php b/src/lib/Server/Controller/ContentType/ContentTypeDraftUpdateController.php index c5fac48f4..014dadd91 100644 --- a/src/lib/Server/Controller/ContentType/ContentTypeDraftUpdateController.php +++ b/src/lib/Server/Controller/ContentType/ContentTypeDraftUpdateController.php @@ -26,6 +26,7 @@ uriTemplate: '/content/types/{contentTypeId}/draft', extraProperties: [OpenApiFactory::OVERRIDE_OPENAPI_RESPONSES => false], openapi: new Model\Operation( + operationId: 'ibexa.rest.update_content_type_draft', summary: 'Update content type draft', description: 'Updates metadata of a draft. This method does not handle Field definitions. PATCH or POST with header X-HTTP-Method-Override PATCH.', tags: [ @@ -33,19 +34,10 @@ ], parameters: [ new Model\Parameter( - name: 'Accept', + name: 'X-CSRF-Token', in: 'header', required: true, - description: 'If set, the new content type draft is returned in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), - new Model\Parameter( - name: 'Content-Type', - in: 'header', - required: true, - description: 'The content type update schema encoded in XML or JSON format.', + description: 'The CSRF Token needed on all unsafe HTTP methods with session.', schema: [ 'type' => 'string', ], @@ -60,18 +52,19 @@ ), ], requestBody: new Model\RequestBody( + description: 'The content type update schema encoded in XML or JSON format.', content: new \ArrayObject([ - 'application/vnd.ibexa.api.ContentTypeUpdate+xml' => [ + 'application/vnd.ibexa.api.ContentTypeUpdate+json' => [ 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeUpdate', + '$ref' => '#/components/schemas/ContentTypeUpdateWrapper', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/POST/ContentTypeUpdate.xml.example', + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/draft/PATCH/ContentTypeUpdate.json.example', ], - 'application/vnd.ibexa.api.ContentTypeUpdate+json' => [ + 'application/vnd.ibexa.api.ContentTypeUpdate+xml' => [ 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeUpdateWrapper', + '$ref' => '#/components/schemas/ContentTypeUpdate', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/POST/ContentTypeUpdate.json.example', + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/draft/PATCH/ContentTypeUpdate.xml.example', ], ]), ), @@ -79,18 +72,18 @@ Response::HTTP_OK => [ 'description' => 'Draft metadata updated.', 'content' => [ - 'application/vnd.ibexa.api.ContentTypeInfo+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeInfo', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/draft/PATCH/ContentTypeInfo.xml.example', - ], 'application/vnd.ibexa.api.ContentTypeInfo+json' => [ 'schema' => [ '$ref' => '#/components/schemas/ContentTypeInfoWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/draft/PATCH/ContentTypeInfo.json.example', ], + 'application/vnd.ibexa.api.ContentTypeInfo+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/ContentTypeInfo', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/draft/PATCH/ContentTypeInfo.xml.example', + ], ], ], Response::HTTP_BAD_REQUEST => [ diff --git a/src/lib/Server/Controller/ContentType/ContentTypeFieldDefinitionListController.php b/src/lib/Server/Controller/ContentType/ContentTypeFieldDefinitionListController.php index a91b268c5..30996e574 100644 --- a/src/lib/Server/Controller/ContentType/ContentTypeFieldDefinitionListController.php +++ b/src/lib/Server/Controller/ContentType/ContentTypeFieldDefinitionListController.php @@ -18,21 +18,13 @@ #[Get( uriTemplate: '/content/types/{contentTypeId}/fieldDefinitions', openapi: new Model\Operation( + operationId: 'ibexa.rest.load_content_type_field_definition_list', summary: 'Get Field definition list', description: 'Returns all Field definitions of the provided content type.', tags: [ 'Type', ], parameters: [ - new Model\Parameter( - name: 'Accept', - in: 'header', - required: true, - description: 'If set, the Field definitions are returned in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), new Model\Parameter( name: 'contentTypeId', in: 'path', @@ -46,14 +38,14 @@ Response::HTTP_OK => [ 'description' => 'OK - return a list of Field definitions.', 'content' => [ - 'application/vnd.ibexa.api.FieldDefinitionList+xml' => [ + 'application/vnd.ibexa.api.FieldDefinitionList+json' => [ 'schema' => [ - '$ref' => '#/components/schemas/FieldDefinitions', + '$ref' => '#/components/schemas/FieldDefinitionsWrapper', ], ], - 'application/vnd.ibexa.api.FieldDefinitionList+json' => [ + 'application/vnd.ibexa.api.FieldDefinitionList+xml' => [ 'schema' => [ - '$ref' => '#/components/schemas/FieldDefinitionsWrapper', + '$ref' => '#/components/schemas/FieldDefinitions', ], ], ], diff --git a/src/lib/Server/Controller/ContentType/ContentTypeFieldDefinitionLoadByIdController.php b/src/lib/Server/Controller/ContentType/ContentTypeFieldDefinitionLoadByIdController.php index 731fde1d4..716804949 100644 --- a/src/lib/Server/Controller/ContentType/ContentTypeFieldDefinitionLoadByIdController.php +++ b/src/lib/Server/Controller/ContentType/ContentTypeFieldDefinitionLoadByIdController.php @@ -20,21 +20,13 @@ #[Get( uriTemplate: '/content/types/{contentTypeId}/fieldDefinitions/{fieldDefinitionId}', openapi: new Model\Operation( + operationId: 'ibexa.rest.load_content_type_field_definition', summary: 'Get Field definition', description: 'Returns the Field definition by the given ID.', tags: [ 'Type', ], parameters: [ - new Model\Parameter( - name: 'Accept', - in: 'header', - required: true, - description: 'If set, the Field definition is returned in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), new Model\Parameter( name: 'contentTypeId', in: 'path', @@ -56,18 +48,18 @@ Response::HTTP_OK => [ 'description' => 'OK - returns the Field definition.', 'content' => [ - 'application/vnd.ibexa.api.FieldDefinition+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/FieldDefinition', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/field_definition_id/GET/FieldDefinition.xml.example', - ], 'application/vnd.ibexa.api.FieldDefinition+json' => [ 'schema' => [ '$ref' => '#/components/schemas/FieldDefinitionWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/field_definition_id/GET/FieldDefinition.json.example', ], + 'application/vnd.ibexa.api.FieldDefinition+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/FieldDefinition', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/field_definition_id/GET/FieldDefinition.xml.example', + ], ], ], Response::HTTP_UNAUTHORIZED => [ diff --git a/src/lib/Server/Controller/ContentType/ContentTypeGroupCreateController.php b/src/lib/Server/Controller/ContentType/ContentTypeGroupCreateController.php index 4aefd9f1f..bfba3e852 100644 --- a/src/lib/Server/Controller/ContentType/ContentTypeGroupCreateController.php +++ b/src/lib/Server/Controller/ContentType/ContentTypeGroupCreateController.php @@ -24,6 +24,7 @@ uriTemplate: '/content/typegroups', extraProperties: [OpenApiFactory::OVERRIDE_OPENAPI_RESPONSES => false], openapi: new Model\Operation( + operationId: 'ibexa.rest.create_content_type_group', summary: 'Create content type group', description: 'Creates a new content type group.', tags: [ @@ -31,55 +32,47 @@ ], parameters: [ new Model\Parameter( - name: 'Accept', + name: 'X-CSRF-Token', in: 'header', required: true, - description: 'If set, the new content type group is returned in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), - new Model\Parameter( - name: 'Content-Type', - in: 'header', - required: true, - description: 'The content type group input schema encoded in XML or JSON.', + description: 'The CSRF Token needed on all unsafe HTTP methods with session.', schema: [ 'type' => 'string', ], ), ], requestBody: new Model\RequestBody( + description: 'The content type group input schema encoded in XML or JSON.', content: new \ArrayObject([ - 'application/vnd.ibexa.api.ContentTypeGroupInput+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeGroupInput', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/POST/ContentTypeGroupInput.xml.example', - ], 'application/vnd.ibexa.api.ContentTypeGroupInput+json' => [ 'schema' => [ '$ref' => '#/components/schemas/ContentTypeGroupInputWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/POST/ContentTypeGroupInput.json.example', ], + 'application/vnd.ibexa.api.ContentTypeGroupInput+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/ContentTypeGroupInput', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/POST/ContentTypeGroupInput.xml.example', + ], ]), ), responses: [ Response::HTTP_CREATED => [ 'description' => 'Content type group created.', 'content' => [ - 'application/vnd.ibexa.api.ContentTypeGroup+xml' => [ + 'application/vnd.ibexa.api.ContentTypeGroup+json' => [ 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeGroup', + '$ref' => '#/components/schemas/ContentTypeGroupWrapper', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/POST/ContentTypeGroup.xml.example', + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/POST/ContentTypeGroup.json.example', ], - 'application/vnd.ibexa.api.ContentTypeGroup+json' => [ + 'application/vnd.ibexa.api.ContentTypeGroup+xml' => [ 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeGroupWrapper', + '$ref' => '#/components/schemas/ContentTypeGroup', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/content_type_group_id/PATCH/ContentTypeGroup.json.example', + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/POST/ContentTypeGroup.xml.example', ], ], ], diff --git a/src/lib/Server/Controller/ContentType/ContentTypeGroupDeleteController.php b/src/lib/Server/Controller/ContentType/ContentTypeGroupDeleteController.php index 3c0ebfd3f..c96c35f97 100644 --- a/src/lib/Server/Controller/ContentType/ContentTypeGroupDeleteController.php +++ b/src/lib/Server/Controller/ContentType/ContentTypeGroupDeleteController.php @@ -18,12 +18,22 @@ #[Delete( uriTemplate: '/content/typegroups/{contentTypeGroupId}', openapi: new Model\Operation( + operationId: 'ibexa.rest.delete_content_type_group', summary: 'Delete content type group', description: 'Deletes the provided content type group.', tags: [ 'Type Groups', ], parameters: [ + new Model\Parameter( + name: 'X-CSRF-Token', + in: 'header', + required: true, + description: 'The CSRF Token needed on all unsafe HTTP methods with session.', + schema: [ + 'type' => 'string', + ], + ), new Model\Parameter( name: 'contentTypeGroupId', in: 'path', diff --git a/src/lib/Server/Controller/ContentType/ContentTypeGroupListController.php b/src/lib/Server/Controller/ContentType/ContentTypeGroupListController.php index 9cf5fa318..f5dea372b 100644 --- a/src/lib/Server/Controller/ContentType/ContentTypeGroupListController.php +++ b/src/lib/Server/Controller/ContentType/ContentTypeGroupListController.php @@ -18,21 +18,13 @@ #[Get( uriTemplate: '/content/types/{contentTypeId}/groups', openapi: new Model\Operation( + operationId: 'ibexa.rest.load_groups_of_content_type', summary: 'Get groups of content type', description: 'Returns the content type group to which content type belongs to.', tags: [ 'Type', ], parameters: [ - new Model\Parameter( - name: 'Accept', - in: 'header', - required: true, - description: 'If set, the content type group list is returned in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), new Model\Parameter( name: 'contentTypeId', in: 'path', @@ -44,18 +36,19 @@ ], responses: [ Response::HTTP_OK => [ + 'description' => 'If set, the content type group list is returned in XML or JSON format.', 'content' => [ - 'application/vnd.ibexa.api.ContentTypeGroupRefList+xml' => [ + 'application/vnd.ibexa.api.ContentTypeGroupRefList+json' => [ 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeGroupRefList', + '$ref' => '#/components/schemas/ContentTypeGroupRefListWrapper', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/groups/id/DELETE/ContentTypeGroupRefList.xml.example', + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/groups/GET/ContentTypeGroupRefList.json.example', ], - 'application/vnd.ibexa.api.ContentTypeGroupRefList+json' => [ + 'application/vnd.ibexa.api.ContentTypeGroupRefList+xml' => [ 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeGroupRefListWrapper', + '$ref' => '#/components/schemas/ContentTypeGroupRefList', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/groups/id/DELETE/ContentTypeGroupRefList.json.example', + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/groups/GET/ContentTypeGroupRefList.xml.example', ], ], ], diff --git a/src/lib/Server/Controller/ContentType/ContentTypeGroupLoadByIdController.php b/src/lib/Server/Controller/ContentType/ContentTypeGroupLoadByIdController.php index ba9aefe43..27d6410c0 100644 --- a/src/lib/Server/Controller/ContentType/ContentTypeGroupLoadByIdController.php +++ b/src/lib/Server/Controller/ContentType/ContentTypeGroupLoadByIdController.php @@ -18,25 +18,17 @@ #[Get( uriTemplate: '/content/typegroups/{contentTypeGroupId}', openapi: new Model\Operation( + operationId: 'ibexa.rest.load_content_type_group', summary: 'Get content type group', description: 'Returns the content type group with provided ID.', tags: [ 'Type Groups', ], parameters: [ - new Model\Parameter( - name: 'Accept', - in: 'header', - required: true, - description: 'If set, the content type group is returned in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), new Model\Parameter( name: 'If-None-Match', in: 'header', - required: true, + required: false, description: 'ETag', schema: [ 'type' => 'string', @@ -55,17 +47,17 @@ Response::HTTP_OK => [ 'description' => 'OK - returns the content type group.', 'content' => [ - 'application/vnd.ibexa.api.ContentTypeGroup+xml' => [ + 'application/vnd.ibexa.api.ContentTypeGroup+json' => [ 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeList', + '$ref' => '#/components/schemas/ContentTypeListWrapper', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/GET/ContentTypeInfoList.xml.example', + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/content_type_group_id/GET/ContentTypeGroup.json.example', ], - 'application/vnd.ibexa.api.ContentTypeGroup+json' => [ + 'application/vnd.ibexa.api.ContentTypeGroup+xml' => [ 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeListWrapper', + '$ref' => '#/components/schemas/ContentTypeList', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/GET/ContentTypeInfoList.json.example', + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/content_type_group_id/GET/ContentTypeGroup.xml.example', ], ], ], diff --git a/src/lib/Server/Controller/ContentType/ContentTypeGroupUpdateController.php b/src/lib/Server/Controller/ContentType/ContentTypeGroupUpdateController.php index 467d64964..bffb892a3 100644 --- a/src/lib/Server/Controller/ContentType/ContentTypeGroupUpdateController.php +++ b/src/lib/Server/Controller/ContentType/ContentTypeGroupUpdateController.php @@ -27,6 +27,7 @@ uriTemplate: '/content/typegroups/{contentTypeGroupId}', extraProperties: [OpenApiFactory::OVERRIDE_OPENAPI_RESPONSES => false], openapi: new Model\Operation( + operationId: 'ibexa.rest.update_content_type_group', summary: 'Update content type group', description: 'Updates a content type group. PATCH or POST with header X-HTTP-Method-Override PATCH.', tags: [ @@ -34,19 +35,10 @@ ], parameters: [ new Model\Parameter( - name: 'Accept', + name: 'X-CSRF-Token', in: 'header', required: true, - description: 'If set, the updated content type group is returned in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), - new Model\Parameter( - name: 'Content-Type', - in: 'header', - required: true, - description: 'The content type group input schema encoded in XML or JSON format.', + description: 'The CSRF Token needed on all unsafe HTTP methods with session.', schema: [ 'type' => 'string', ], @@ -70,18 +62,19 @@ ), ], requestBody: new Model\RequestBody( + description: 'The content type group input schema encoded in XML or JSON format.', content: new \ArrayObject([ - 'application/vnd.ibexa.api.ContentTypeGroupInput+xml' => [ + 'application/vnd.ibexa.api.ContentTypeGroupInput+json' => [ 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeGroupInput', + '$ref' => '#/components/schemas/ContentTypeGroupInputWrapper', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/POST/ContentTypeGroupInput.xml.example', + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/content_type_group_id/PATCH/ContentTypeGroupInput.json.example', ], - 'application/vnd.ibexa.api.ContentTypeGroupInput+json' => [ + 'application/vnd.ibexa.api.ContentTypeGroupInput+xml' => [ 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeGroupInputWrapper', + '$ref' => '#/components/schemas/ContentTypeGroupInput', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/POST/ContentTypeGroupInput.json.example', + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/content_type_group_id/PATCH/ContentTypeGroupInput.xml.example', ], ]), ), @@ -89,18 +82,18 @@ Response::HTTP_OK => [ 'description' => 'Content type group updated.', 'content' => [ - 'application/vnd.ibexa.api.ContentTypeGroup+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeGroup', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/POST/ContentTypeGroup.xml.example', - ], 'application/vnd.ibexa.api.ContentTypeGroup+json' => [ 'schema' => [ '$ref' => '#/components/schemas/ContentTypeGroupWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/content_type_group_id/PATCH/ContentTypeGroup.json.example', ], + 'application/vnd.ibexa.api.ContentTypeGroup+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/ContentTypeGroup', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/content_type_group_id/PATCH/ContentTypeGroup.xml.example', + ], ], ], Response::HTTP_BAD_REQUEST => [ diff --git a/src/lib/Server/Controller/ContentType/ContentTypeGroupsListController.php b/src/lib/Server/Controller/ContentType/ContentTypeGroupsListController.php index 24b3767da..90a6451a9 100644 --- a/src/lib/Server/Controller/ContentType/ContentTypeGroupsListController.php +++ b/src/lib/Server/Controller/ContentType/ContentTypeGroupsListController.php @@ -19,38 +19,28 @@ #[Get( uriTemplate: '/content/typegroups', openapi: new Model\Operation( + operationId: 'ibexa.rest.load_content_type_group_list', summary: 'Get content type groups', description: 'Returns a list of all content type groups. If an identifier is provided, loads the content type group for this identifier.', tags: [ 'Type Groups', ], - parameters: [ - new Model\Parameter( - name: 'Accept', - in: 'header', - required: true, - description: 'If set, the content type group list is returned in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), - ], responses: [ Response::HTTP_OK => [ 'description' => 'OK - returns a list of content type groups.', 'content' => [ - 'application/vnd.ibexa.api.ContentTypeGroupList+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeGroupList', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/GET/ContentTypeGroupList.xml.example', - ], 'application/vnd.ibexa.api.ContentTypeGroupList+json' => [ 'schema' => [ '$ref' => '#/components/schemas/ContentTypeGroupListWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/GET/ContentTypeGroupList.json.example', ], + 'application/vnd.ibexa.api.ContentTypeGroupList+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/ContentTypeGroupList', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/GET/ContentTypeGroupList.xml.example', + ], ], ], Response::HTTP_TEMPORARY_REDIRECT => [ diff --git a/src/lib/Server/Controller/ContentType/ContentTypeLinkToGroupController.php b/src/lib/Server/Controller/ContentType/ContentTypeLinkToGroupController.php index 9342f30a7..33b3c6be6 100644 --- a/src/lib/Server/Controller/ContentType/ContentTypeLinkToGroupController.php +++ b/src/lib/Server/Controller/ContentType/ContentTypeLinkToGroupController.php @@ -23,6 +23,7 @@ uriTemplate: '/content/types/{contentTypeId}/groups', extraProperties: [OpenApiFactory::OVERRIDE_OPENAPI_RESPONSES => false], openapi: new Model\Operation( + operationId: 'ibexa.rest.link_content_type_to_group', summary: 'Link group to content type', description: 'Links a content type group to the content type and returns the updated group list.', tags: [ @@ -30,10 +31,10 @@ ], parameters: [ new Model\Parameter( - name: 'Accept', + name: 'X-CSRF-Token', in: 'header', required: true, - description: 'If set, the updated content type group list is returned in XML or JSON format.', + description: 'The CSRF Token needed on all unsafe HTTP methods with session.', schema: [ 'type' => 'string', ], @@ -46,22 +47,36 @@ 'type' => 'string', ], ), + new Model\Parameter( + name: 'group', + in: 'query', + required: true, + schema: [ + 'type' => 'string', + ], + description: 'Destination content type group URI; for example with content type group 4: `?group=/api/ibexa/v2/content/typegroups/4`', + ), ], + requestBody: new Model\RequestBody( + description: 'No payload required', + content: new \ArrayObject(), + ), responses: [ Response::HTTP_OK => [ + 'description' => 'If set, the updated content type group list is returned in XML or JSON format.', 'content' => [ - 'application/vnd.ibexa.api.ContentTypeGroupRefList+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeGroupRefList', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/groups/id/DELETE/ContentTypeGroupRefList.xml.example', - ], 'application/vnd.ibexa.api.ContentTypeGroupRefList+json' => [ 'schema' => [ '$ref' => '#/components/schemas/ContentTypeGroupRefListWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/groups/id/DELETE/ContentTypeGroupRefList.json.example', ], + 'application/vnd.ibexa.api.ContentTypeGroupRefList+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/ContentTypeGroupRefList', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/groups/POST/ContentTypeGroupRefList.xml.example', + ], ], ], Response::HTTP_BAD_REQUEST => [ @@ -74,9 +89,6 @@ 'description' => 'Error - The content type is already assigned to the group.', ], ], - requestBody: new Model\RequestBody( - content: new \ArrayObject(), - ), ), )] class ContentTypeLinkToGroupController extends RestController diff --git a/src/lib/Server/Controller/ContentType/ContentTypeListController.php b/src/lib/Server/Controller/ContentType/ContentTypeListController.php index bf01e189e..1787067ef 100644 --- a/src/lib/Server/Controller/ContentType/ContentTypeListController.php +++ b/src/lib/Server/Controller/ContentType/ContentTypeListController.php @@ -25,48 +25,38 @@ uriTemplate: '/content/types', extraProperties: [OpenApiFactory::OVERRIDE_OPENAPI_RESPONSES => false], openapi: new Model\Operation( + operationId: 'ibexa.rest.list_content_types', summary: 'List content types', description: 'Returns a list of content types.', tags: [ 'Type', ], - parameters: [ - new Model\Parameter( - name: 'Accept', - in: 'header', - required: true, - description: 'If set, the list of content type info objects or content types (including Field definitions) is returned in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), - ], responses: [ Response::HTTP_OK => [ 'description' => 'OK - returns a list of content types.', 'content' => [ - 'application/vnd.ibexa.api.ContentTypeInfoList+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeInfoList', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/GET/ContentTypeInfoList.xml.example', - ], 'application/vnd.ibexa.api.ContentTypeInfoList+json' => [ 'schema' => [ '$ref' => '#/components/schemas/ContentTypeInfoListWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/GET/ContentTypeInfoList.json.example', ], - 'application/vnd.ibexa.api.ContentTypeList+xml' => [ + 'application/vnd.ibexa.api.ContentTypeInfoList+xml' => [ 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeList', + '$ref' => '#/components/schemas/ContentTypeInfoList', ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/GET/ContentTypeInfoList.xml.example', ], 'application/vnd.ibexa.api.ContentTypeList+json' => [ 'schema' => [ '$ref' => '#/components/schemas/ContentTypeListWrapper', ], ], + 'application/vnd.ibexa.api.ContentTypeList+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/ContentTypeList', + ], + ], ], ], Response::HTTP_UNAUTHORIZED => [ diff --git a/src/lib/Server/Controller/ContentType/ContentTypeListForGroupController.php b/src/lib/Server/Controller/ContentType/ContentTypeListForGroupController.php index 20723377b..0355aaaac 100644 --- a/src/lib/Server/Controller/ContentType/ContentTypeListForGroupController.php +++ b/src/lib/Server/Controller/ContentType/ContentTypeListForGroupController.php @@ -22,21 +22,13 @@ uriTemplate: '/content/typegroups/{contentTypeGroupId}/types', extraProperties: [OpenApiFactory::OVERRIDE_OPENAPI_RESPONSES => false], openapi: new Model\Operation( + operationId: 'ibexa.rest.list_content_types_for_group', summary: 'List content types for group', description: 'Returns a list of content types in the provided group.', tags: [ 'Type Groups', ], parameters: [ - new Model\Parameter( - name: 'Accept', - in: 'header', - required: true, - description: 'If set, the list of content type info objects or content types (including Field definitions) is returned in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), new Model\Parameter( name: 'contentTypeGroupId', in: 'path', @@ -50,15 +42,21 @@ Response::HTTP_OK => [ 'description' => 'OK - returns a list on content types.', 'content' => [ + 'application/vnd.ibexa.api.ContentTypeInfoList+json' => [ + 'schema' => [ + '$ref' => '#/components/schemas/ContentTypeInfoListWrapper', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/content_type_group_id/types/GET/ContentTypeInfoList.json.example', + ], 'application/vnd.ibexa.api.ContentTypeInfoList+xml' => [ 'schema' => [ '$ref' => '#/components/schemas/ContentTypeInfoList', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/content_type_group_id/types/GET/ContentTypeInfoList.xml.example', ], - 'application/vnd.ibexa.api.ContentTypeInfoList+json' => [ + 'application/vnd.ibexa.api.ContentTypeList+json' => [ 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeInfoListWrapper', + '$ref' => '#/components/schemas/ContentTypeListWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/GET/ContentTypeInfoList.json.example', ], @@ -66,13 +64,7 @@ 'schema' => [ '$ref' => '#/components/schemas/ContentTypeList', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/GET/ContentTypeInfoList.xml.example', - ], - 'application/vnd.ibexa.api.ContentTypeList+json' => [ - 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeListWrapper', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/GET/ContentTypeInfoList.json.example', + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/typegroups/content_type_group_id/types/GET/ContentTypeList.xml.example', ], ], ], diff --git a/src/lib/Server/Controller/ContentType/ContentTypeLoadByIdController.php b/src/lib/Server/Controller/ContentType/ContentTypeLoadByIdController.php index 66544e256..8415612b9 100644 --- a/src/lib/Server/Controller/ContentType/ContentTypeLoadByIdController.php +++ b/src/lib/Server/Controller/ContentType/ContentTypeLoadByIdController.php @@ -18,25 +18,17 @@ #[Get( uriTemplate: '/content/types/{contentTypeId}', openapi: new Model\Operation( + operationId: 'ibexa.rest.load_content_type', summary: 'Get content type', description: 'Returns the content type with the provided ID.', tags: [ 'Type', ], parameters: [ - new Model\Parameter( - name: 'Accept', - in: 'header', - required: true, - description: 'If set, the content type is returned in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), new Model\Parameter( name: 'If-None-Match', in: 'header', - required: true, + required: false, description: 'ETag', schema: [ 'type' => 'string', @@ -55,18 +47,18 @@ Response::HTTP_OK => [ 'description' => 'OK - returns the content type.', 'content' => [ - 'application/vnd.ibexa.api.ContentType+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/ContentType', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/draft/PUBLISH/ContentType.xml.example', - ], 'application/vnd.ibexa.api.ContentType+json' => [ 'schema' => [ '$ref' => '#/components/schemas/ContentTypeWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/GET/ContentType.json.example', ], + 'application/vnd.ibexa.api.ContentType+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/ContentType', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/GET/ContentType.xml.example', + ], ], ], Response::HTTP_UNAUTHORIZED => [ diff --git a/src/lib/Server/Controller/ContentType/ContentTypeUnlinkFromGroupController.php b/src/lib/Server/Controller/ContentType/ContentTypeUnlinkFromGroupController.php index fb54162b7..175cfa95d 100644 --- a/src/lib/Server/Controller/ContentType/ContentTypeUnlinkFromGroupController.php +++ b/src/lib/Server/Controller/ContentType/ContentTypeUnlinkFromGroupController.php @@ -19,6 +19,7 @@ #[Delete( uriTemplate: '/content/types/{contentTypeId}/groups/{id}', openapi: new Model\Operation( + operationId: 'ibexa.rest.unlink_content_type_from_group', summary: 'Unlink group from content type', description: 'Removes the given group from the content type and returns the updated group list.', tags: [ @@ -26,10 +27,10 @@ ], parameters: [ new Model\Parameter( - name: 'Accept', + name: 'X-CSRF-Token', in: 'header', required: true, - description: 'If set, the updated content type group list is returned in XML or JSON format.', + description: 'The CSRF Token needed on all unsafe HTTP methods with session.', schema: [ 'type' => 'string', ], @@ -53,19 +54,20 @@ ], responses: [ Response::HTTP_OK => [ + 'description' => 'If set, the updated content type group list is returned in XML or JSON format.', 'content' => [ - 'application/vnd.ibexa.api.ContentTypeGroupRefList+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/ContentTypeGroupRefList', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/groups/id/DELETE/ContentTypeGroupRefList.xml.example', - ], 'application/vnd.ibexa.api.ContentTypeGroupRefList+json' => [ 'schema' => [ '$ref' => '#/components/schemas/ContentTypeGroupRefListWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/groups/id/DELETE/ContentTypeGroupRefList.json.example', ], + 'application/vnd.ibexa.api.ContentTypeGroupRefList+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/ContentTypeGroupRefList', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/types/content_type_id/groups/id/DELETE/ContentTypeGroupRefList.xml.example', + ], ], ], Response::HTTP_UNAUTHORIZED => [