diff --git a/src/bundle/Resources/api_platform/examples/content/objects/POST/ContentInfo.json.example b/src/bundle/Resources/api_platform/examples/content/objects/POST/ContentInfo.json.example new file mode 100644 index 000000000..a160db9f9 --- /dev/null +++ b/src/bundle/Resources/api_platform/examples/content/objects/POST/ContentInfo.json.example @@ -0,0 +1,43 @@ +{ + "Content": { + "_media-type": "application/vnd.ibexa.api.ContentInfo+json", + "_href": "/api/ibexa/v2/content/objects/77", + "_remoteId": "89e9b86c673b1c1de6781bb94488b18c", + "_id": 77, + "ContentType": { + "_media-type": "application/vnd.ibexa.api.ContentType+json", + "_href": "/api/ibexa/v2/content/types/2" + }, + "Name": "draft article", + "TranslatedName": "draft article", + "Versions": { + "_media-type": "application/vnd.ibexa.api.VersionList+json", + "_href": "/api/ibexa/v2/content/objects/77/versions" + }, + "CurrentVersion": { + "_media-type": "application/vnd.ibexa.api.Version+json", + "_href": "/api/ibexa/v2/content/objects/77/currentversion" + }, + "Section": { + "_media-type": "application/vnd.ibexa.api.Section+json", + "_href": "/api/ibexa/v2/content/sections/1" + }, + "Locations": { + "_media-type": "application/vnd.ibexa.api.LocationList+json", + "_href": "/api/ibexa/v2/content/objects/77/locations" + }, + "Owner": { + "_media-type": "application/vnd.ibexa.api.User+json", + "_href": "/api/ibexa/v2/user/users/14" + }, + "mainLanguageCode": "eng-GB", + "currentVersionNo": 1, + "alwaysAvailable": true, + "isHidden": false, + "status": "DRAFT", + "ObjectStates": { + "_media-type": "application/vnd.ibexa.api.ContentObjectStates+json", + "_href": "/api/ibexa/v2/content/objects/77/objectstates" + } + } +} diff --git a/src/bundle/Resources/api_platform/examples/content/objects/content_id/GET/ContentInfo.xml.example b/src/bundle/Resources/api_platform/examples/content/objects/content_id/GET/ContentInfo.xml.example deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/lib/Server/Controller/Content/ContentCreateController.php b/src/lib/Server/Controller/Content/ContentCreateController.php index 8865c7276..caaadc734 100644 --- a/src/lib/Server/Controller/Content/ContentCreateController.php +++ b/src/lib/Server/Controller/Content/ContentCreateController.php @@ -27,6 +27,7 @@ uriTemplate: '/content/objects', extraProperties: [OpenApiFactory::OVERRIDE_OPENAPI_RESPONSES => false], openapi: new Model\Operation( + operationId: 'ibexa.rest.create_content', summary: 'Create content item', description: 'Creates a draft assigned to the authenticated user. If a different user ID is given in the input, the draft is assigned to the given user but this action requires special permissions for the authenticated user (this is useful for content staging where the transfer process does not have to authenticate with the user who created the content item in the source server). The user needs to publish the content item if it should be visible.', tags: [ @@ -34,60 +35,59 @@ ], parameters: [ new Model\Parameter( - name: 'Accept', + name: 'X-CSRF-Token', in: 'header', required: true, - description: 'Content - If set, all information for the content item including the embedded current version is returned in XML or JSON format. ContentInfo - If set, all information for the content item (excluding the current version) is returned in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), - new Model\Parameter( - name: 'Content-Type', - in: 'header', - required: true, - description: 'The ContentCreate schema encoded 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 ContentCreate schema encoded in XML or JSON format.', content: new \ArrayObject([ - 'application/vnd.ibexa.api.ContentCreate+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/ContentCreate', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/POST/ContentCreate.xml.example', - ], 'application/vnd.ibexa.api.ContentCreate+json' => [ 'schema' => [ '$ref' => '#/components/schemas/ContentCreateWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/POST/ContentCreate.json.example', ], + 'application/vnd.ibexa.api.ContentCreate+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/ContentCreate', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/POST/ContentCreate.xml.example', + ], ]), ), responses: [ Response::HTTP_CREATED => [ + 'description' => 'Content - If set, all information for the content item including the embedded current version is returned in XML or JSON format. ContentInfo - If set, all information for the content item (excluding the current version) is returned in XML or JSON format.', 'content' => [ + 'application/vnd.ibexa.api.Content+json' => [ + 'schema' => [ + '$ref' => '#/components/schemas/ContentWrapper', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/POST/Content.json.example', + ], 'application/vnd.ibexa.api.Content+xml' => [ 'schema' => [ '$ref' => '#/components/schemas/Content', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/GET/Content.xml.example', + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/POST/Content.xml.example', ], - 'application/vnd.ibexa.api.Content+json' => [ + 'application/vnd.ibexa.api.ContentInfo+json' => [ 'schema' => [ - '$ref' => '#/components/schemas/ContentWrapper', + '$ref' => '#/components/schemas/ContentInfoWrapper', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/GET/Content.json.example', + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/POST/ContentInfo.json.example', ], 'application/vnd.ibexa.api.ContentInfo+xml' => [ 'schema' => [ - '$ref' => '#/components/schemas/ContentInfoWrapper', + '$ref' => '#/components/schemas/ContentInfo', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/PATCH/ContentInfo.xml.example', + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/POST/ContentInfo.xml.example', ], ], ], diff --git a/src/lib/Server/Controller/Content/ContentCurrentVersionRedirectController.php b/src/lib/Server/Controller/Content/ContentCurrentVersionRedirectController.php index edb607349..47d589a9c 100644 --- a/src/lib/Server/Controller/Content/ContentCurrentVersionRedirectController.php +++ b/src/lib/Server/Controller/Content/ContentCurrentVersionRedirectController.php @@ -16,6 +16,7 @@ #[Get( uriTemplate: '/content/objects/{contentId}/currentversion', openapi: new Model\Operation( + operationId: 'ibexa.rest.redirect_current_version', summary: 'Get current version', description: 'Redirects to the current version of the content item.', tags: [ @@ -33,18 +34,19 @@ ], responses: [ Response::HTTP_OK => [ + 'description' => 'OK - returns the Version in XML or JSON format.', 'content' => [ - 'application/vnd.ibexa.api.Version+xml' => [ + 'application/vnd.ibexa.api.Version+json' => [ 'schema' => [ - '$ref' => '#/components/schemas/Version', + '$ref' => '#/components/schemas/VersionWrapper', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/GET/Version.xml.example', + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/currentversion/GET/Version.json.example', ], - 'application/vnd.ibexa.api.Version+json' => [ + 'application/vnd.ibexa.api.Version+xml' => [ 'schema' => [ - '$ref' => '#/components/schemas/VersionWrapper', + '$ref' => '#/components/schemas/Version', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/GET/Version.json.example', + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/currentversion/GET/Version.xml.example', ], ], ], diff --git a/src/lib/Server/Controller/Content/ContentCurrentVersionRelationsRedirectController.php b/src/lib/Server/Controller/Content/ContentCurrentVersionRelationsRedirectController.php index 2f9455eb7..8392c8f52 100644 --- a/src/lib/Server/Controller/Content/ContentCurrentVersionRelationsRedirectController.php +++ b/src/lib/Server/Controller/Content/ContentCurrentVersionRelationsRedirectController.php @@ -18,6 +18,7 @@ uriTemplate: '/content/objects/{contentId}/relations', extraProperties: [OpenApiFactory::OVERRIDE_OPENAPI_RESPONSES => false], openapi: new Model\Operation( + operationId: 'ibexa.rest.redirect_current_version_relations', summary: 'Load Relations of content item', description: 'Redirects to the Relations of the current version.', tags: [ diff --git a/src/lib/Server/Controller/Content/ContentDeleteController.php b/src/lib/Server/Controller/Content/ContentDeleteController.php index 4a35fafe3..e89bbdc0b 100644 --- a/src/lib/Server/Controller/Content/ContentDeleteController.php +++ b/src/lib/Server/Controller/Content/ContentDeleteController.php @@ -16,12 +16,22 @@ #[Delete( uriTemplate: '/content/objects/{contentId}', openapi: new Model\Operation( + operationId: 'ibexa.rest.delete_content', summary: 'Delete Content', description: 'Deletes content item. If content item has multiple Locations, all of them will be deleted via delete a subtree.', tags: [ 'Objects', ], 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: 'contentId', in: 'path', diff --git a/src/lib/Server/Controller/Content/ContentDraftCreateFromCurrentVersionController.php b/src/lib/Server/Controller/Content/ContentDraftCreateFromCurrentVersionController.php index e657f3ca8..634c0e0a2 100644 --- a/src/lib/Server/Controller/Content/ContentDraftCreateFromCurrentVersionController.php +++ b/src/lib/Server/Controller/Content/ContentDraftCreateFromCurrentVersionController.php @@ -21,6 +21,7 @@ uriTemplate: '/content/objects/{contentId}/currentversion', extraProperties: [OpenApiFactory::OVERRIDE_OPENAPI_RESPONSES => false], openapi: new Model\Operation( + operationId: 'ibexa.rest.content.create_draft_from_current_version', summary: 'Create a draft from current version', description: 'The system creates a new draft as a copy of the current version. COPY or POST with header X-HTTP-Method-Override COPY.', tags: [ @@ -28,10 +29,10 @@ ], parameters: [ new Model\Parameter( - name: 'Accept', + name: 'X-CSRF-Token', in: 'header', required: true, - description: 'If set, the updated version is returned in XML or JSON format.', + description: 'The CSRF Token needed on all unsafe HTTP methods with session.', schema: [ 'type' => 'string', ], @@ -45,22 +46,26 @@ ], ), ], + requestBody: new Model\RequestBody( + description: 'No payload required', + content: new \ArrayObject(), + ), responses: [ Response::HTTP_CREATED => [ 'description' => 'Created', 'content' => [ - 'application/vnd.ibexa.api.Version+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/Version', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/GET/Version.xml.example', - ], 'application/vnd.ibexa.api.Version+json' => [ 'schema' => [ '$ref' => '#/components/schemas/VersionWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/GET/Version.json.example', ], + 'application/vnd.ibexa.api.Version+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/Version', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/GET/Version.xml.example', + ], ], ], Response::HTTP_UNAUTHORIZED => [ @@ -73,9 +78,6 @@ 'description' => 'Error - the content item was not found.', ], ], - requestBody: new Model\RequestBody( - content: new \ArrayObject(), - ), ), )] class ContentDraftCreateFromCurrentVersionController extends RestController diff --git a/src/lib/Server/Controller/Content/ContentDraftCreateFromVersionController.php b/src/lib/Server/Controller/Content/ContentDraftCreateFromVersionController.php index be03fe7b6..8cb8dd77b 100644 --- a/src/lib/Server/Controller/Content/ContentDraftCreateFromVersionController.php +++ b/src/lib/Server/Controller/Content/ContentDraftCreateFromVersionController.php @@ -19,6 +19,7 @@ uriTemplate: '/content/objects/{contentId}/versions/{versionNo}', extraProperties: [OpenApiFactory::OVERRIDE_OPENAPI_RESPONSES => false], openapi: new Model\Operation( + operationId: 'ibexa.rest.content.create_draft_from_version', summary: 'Create a draft from a version', description: 'The system creates a new draft as a copy of the given version. COPY or POST with header X-HTTP-Method-Override COPY.', tags: [ @@ -26,10 +27,10 @@ ], parameters: [ new Model\Parameter( - name: 'Accept', + name: 'X-CSRF-Token', in: 'header', required: true, - description: 'If set, the updated version is returned in XML or JSON format.', + description: 'The CSRF Token needed on all unsafe HTTP methods with session.', schema: [ 'type' => 'string', ], @@ -51,22 +52,26 @@ ], ), ], + requestBody: new Model\RequestBody( + description: 'No payload required', + content: new \ArrayObject(), + ), responses: [ Response::HTTP_CREATED => [ 'description' => 'Created.', 'content' => [ - 'application/vnd.ibexa.api.Version+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/Version', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/GET/Version.xml.example', - ], 'application/vnd.ibexa.api.Version+json' => [ 'schema' => [ '$ref' => '#/components/schemas/VersionWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/GET/Version.json.example', ], + 'application/vnd.ibexa.api.Version+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/Version', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/GET/Version.xml.example', + ], ], ], Response::HTTP_UNAUTHORIZED => [ @@ -76,9 +81,6 @@ 'description' => 'Error - the content item was not found.', ], ], - requestBody: new Model\RequestBody( - content: new \ArrayObject(), - ), ), )] class ContentDraftCreateFromVersionController extends RestController diff --git a/src/lib/Server/Controller/Content/ContentDraftTranslationDeleteController.php b/src/lib/Server/Controller/Content/ContentDraftTranslationDeleteController.php index 0d71a5b9c..370d0f855 100644 --- a/src/lib/Server/Controller/Content/ContentDraftTranslationDeleteController.php +++ b/src/lib/Server/Controller/Content/ContentDraftTranslationDeleteController.php @@ -17,12 +17,22 @@ #[Delete( uriTemplate: '/content/objects/{contentId}/versions/{versionNo}/translations/{languageCode}', openapi: new Model\Operation( + operationId: 'ibexa.rest.delete_translation_from_draft', summary: 'Delete translation from version draft', description: 'Removes a translation from a version draft.', tags: [ 'Objects', ], 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: 'contentId', in: 'path', diff --git a/src/lib/Server/Controller/Content/ContentHideController.php b/src/lib/Server/Controller/Content/ContentHideController.php index e9d66f292..765eac9a0 100644 --- a/src/lib/Server/Controller/Content/ContentHideController.php +++ b/src/lib/Server/Controller/Content/ContentHideController.php @@ -18,12 +18,22 @@ uriTemplate: '/content/objects/{contentId}/hide', extraProperties: [OpenApiFactory::OVERRIDE_OPENAPI_RESPONSES => false], openapi: new Model\Operation( + operationId: 'ibexa.rest.hide_content', summary: 'Hide content item', description: 'Makes or keep the content item invisible', tags: [ 'Objects', ], 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: 'contentId', in: 'path', @@ -33,6 +43,10 @@ ], ), ], + requestBody: new Model\RequestBody( + description: 'No payload required', + content: new \ArrayObject(), + ), responses: [ Response::HTTP_NO_CONTENT => [ 'description' => 'OK - Object item is hidden.', @@ -44,9 +58,6 @@ 'description' => 'Error - The content item was not found.', ], ], - requestBody: new Model\RequestBody( - content: new \ArrayObject(), - ), ), )] class ContentHideController extends RestController diff --git a/src/lib/Server/Controller/Content/ContentInVersionLoadController.php b/src/lib/Server/Controller/Content/ContentInVersionLoadController.php index 018abb2a8..2df4891dd 100644 --- a/src/lib/Server/Controller/Content/ContentInVersionLoadController.php +++ b/src/lib/Server/Controller/Content/ContentInVersionLoadController.php @@ -21,6 +21,7 @@ #[Get( uriTemplate: '/content/objects/{contentId}/versions/{versionNo}', openapi: new Model\Operation( + operationId: 'ibexa.rest.load_content_in_version', summary: 'Load version', description: 'Loads a specific version of a content item. This method returns Fields and relations.', tags: [ @@ -30,21 +31,12 @@ new Model\Parameter( name: 'If-None-Match', in: 'header', - required: true, + required: false, description: 'Only return the version if the given ETag is the not current one, otherwise a 304 is returned.', schema: [ 'type' => 'string', ], ), - new Model\Parameter( - name: 'Accept', - in: 'header', - required: true, - description: 'If set, the version list is returned in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), new Model\Parameter( name: 'contentId', in: 'path', @@ -64,23 +56,24 @@ ], responses: [ Response::HTTP_OK => [ + 'description' => 'If set, the version list is returned in XML or JSON format.', 'content' => [ - 'application/vnd.ibexa.api.Version+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/Version', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/GET/Version.xml.example', - ], 'application/vnd.ibexa.api.Version+json' => [ 'schema' => [ '$ref' => '#/components/schemas/VersionWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/GET/Version.json.example', ], + 'application/vnd.ibexa.api.Version+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/Version', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/GET/Version.xml.example', + ], ], ], Response::HTTP_NOT_MODIFIED => [ - 'description' => 'Error - the ETag does not match the current one.', + 'description' => 'Not Modified - the ETag matches the current one.', ], Response::HTTP_UNAUTHORIZED => [ 'description' => 'Error - the user is not authorized to read this content item.', diff --git a/src/lib/Server/Controller/Content/ContentLoadByIdController.php b/src/lib/Server/Controller/Content/ContentLoadByIdController.php index 031609f9a..55d2ff5d2 100644 --- a/src/lib/Server/Controller/Content/ContentLoadByIdController.php +++ b/src/lib/Server/Controller/Content/ContentLoadByIdController.php @@ -19,30 +19,15 @@ #[Get( uriTemplate: '/content/objects/{contentId}', openapi: new Model\Operation( + operationId: 'ibexa.rest.load_content', summary: 'Load content', - description: 'Loads the content item for the given ID. Depending on the Accept header the current version is embedded (i.e. the current published version or if it does not exist, the draft of the authenticated user).', + description: 'Loads the content item for the given ID. Depending on the Accept header the current version is embedded (i.e. the current published version or if it does not exist, the draft of the authenticated user). +* Content - If set, all information for the content item including the embedded current version is returned in XML or JSON format. +* ContentInfo - If set, all information for the content item (excluding the current version) is returned in XML or JSON format.', tags: [ 'Objects', ], parameters: [ - new Model\Parameter( - name: 'Accept', - in: 'header', - required: true, - description: ' -* Content - If set, all information for the content item including the embedded current version is returned in XML or JSON format. -* ContentInfo - If set, all information for the content item (excluding the current version) is returned in XML or JSON format. - ', - schema: [ - 'type' => 'string', - 'enum' => [ - 'application/vnd.ibexa.api.Content+xml', - 'application/vnd.ibexa.api.Content+json', - 'application/vnd.ibexa.api.ContentInfo+xml', - 'application/vnd.ibexa.api.ContentInfo+json', - ], - ], - ), new Model\Parameter( name: 'If-None-Match', in: 'header', @@ -63,29 +48,29 @@ ], responses: [ Response::HTTP_OK => [ + 'description' => 'OK - returns the Content or ContentInfo in XML or JSON format.', 'content' => [ - 'application/vnd.ibexa.api.Content+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/Content', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/GET/Content.xml.example', - ], 'application/vnd.ibexa.api.Content+json' => [ 'schema' => [ '$ref' => '#/components/schemas/ContentWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/GET/Content.json.example', ], - 'application/vnd.ibexa.api.ContentInfo+xml' => [ + 'application/vnd.ibexa.api.Content+xml' => [ 'schema' => [ - '$ref' => '#/components/schemas/ContentInfo', + '$ref' => '#/components/schemas/Content', ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/GET/Content.xml.example', ], 'application/vnd.ibexa.api.ContentInfo+json' => [ 'schema' => [ '$ref' => '#/components/schemas/ContentInfoWrapper', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/PATCH/ContentInfo.xml.example', + ], + 'application/vnd.ibexa.api.ContentInfo+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/ContentInfo', + ], ], ], ], diff --git a/src/lib/Server/Controller/Content/ContentMetadataUpdateController.php b/src/lib/Server/Controller/Content/ContentMetadataUpdateController.php index 8f06574f1..38a20a728 100644 --- a/src/lib/Server/Controller/Content/ContentMetadataUpdateController.php +++ b/src/lib/Server/Controller/Content/ContentMetadataUpdateController.php @@ -22,6 +22,7 @@ uriTemplate: '/content/objects/{contentId}', extraProperties: [OpenApiFactory::OVERRIDE_OPENAPI_RESPONSES => false], openapi: new Model\Operation( + operationId: 'ibexa.rest.update_content_metadata', summary: 'Update content', description: 'This method updates the content metadata which is independent from a version. PATCH or POST with header X-HTTP-Method-Override PATCH.', tags: [ @@ -29,10 +30,10 @@ ], parameters: [ new Model\Parameter( - name: 'Accept', + name: 'X-CSRF-Token', in: 'header', required: true, - description: 'If set, all information for the content item (excluding the current version) is returned in XML or JSON format.', + description: 'The CSRF Token needed on all unsafe HTTP methods with session.', schema: [ 'type' => 'string', ], @@ -46,15 +47,6 @@ 'type' => 'string', ], ), - new Model\Parameter( - name: 'Content-Type', - in: 'header', - required: true, - description: 'The ContentUpdate schema encoded in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), new Model\Parameter( name: 'contentId', in: 'path', @@ -65,31 +57,33 @@ ), ], requestBody: new Model\RequestBody( + description: 'The ContentUpdate schema encoded in XML or JSON format.', content: new \ArrayObject([ - 'application/vnd.ibexa.api.ContentUpdate+xml' => [ + 'application/vnd.ibexa.api.ContentUpdate+json' => [ 'schema' => [ - '$ref' => '#/components/schemas/ContentInfo', + '$ref' => '#/components/schemas/ContentInfoWrapper', ], ], - 'application/vnd.ibexa.api.ContentUpdate+json' => [ + 'application/vnd.ibexa.api.ContentUpdate+xml' => [ 'schema' => [ - '$ref' => '#/components/schemas/ContentInfoWrapper', + '$ref' => '#/components/schemas/ContentInfo', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/PATCH/ContentInfo.xml.example', + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/PATCH/ContentUpdate.xml.example', ], ]), ), responses: [ Response::HTTP_OK => [ + 'description' => 'If set, all information for the content item (excluding the current version) is returned in XML or JSON format.', 'content' => [ - 'application/vnd.ibexa.api.ContentInfo+xml' => [ + 'application/vnd.ibexa.api.ContentInfo+json' => [ 'schema' => [ - '$ref' => '#/components/schemas/ContentInfo', + '$ref' => '#/components/schemas/ContentInfoWrapper', ], ], - 'application/vnd.ibexa.api.ContentInfo+json' => [ + 'application/vnd.ibexa.api.ContentInfo+xml' => [ 'schema' => [ - '$ref' => '#/components/schemas/ContentInfoWrapper', + '$ref' => '#/components/schemas/ContentInfo', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/PATCH/ContentInfo.xml.example', ], diff --git a/src/lib/Server/Controller/Content/ContentRedirectController.php b/src/lib/Server/Controller/Content/ContentRedirectController.php index 43f579249..e5a3ad21d 100644 --- a/src/lib/Server/Controller/Content/ContentRedirectController.php +++ b/src/lib/Server/Controller/Content/ContentRedirectController.php @@ -20,6 +20,7 @@ uriTemplate: '/content/objects', extraProperties: [OpenApiFactory::OVERRIDE_OPENAPI_RESPONSES => false], openapi: new Model\Operation( + operationId: 'ibexa.rest.redirect_content', summary: 'Load content by remote ID', description: 'Loads content item for a given remote ID.', tags: [ diff --git a/src/lib/Server/Controller/Content/ContentRelationCreateController.php b/src/lib/Server/Controller/Content/ContentRelationCreateController.php index 33ee745c8..7d3133f52 100644 --- a/src/lib/Server/Controller/Content/ContentRelationCreateController.php +++ b/src/lib/Server/Controller/Content/ContentRelationCreateController.php @@ -25,6 +25,7 @@ uriTemplate: '/content/objects/{contentId}/versions/{versionNo}/relations', extraProperties: [OpenApiFactory::OVERRIDE_OPENAPI_RESPONSES => false], openapi: new Model\Operation( + operationId: 'ibexa.rest.create_relation', summary: 'Create new Relation', description: 'Creates a new Relation of type COMMON for the given draft.', tags: [ @@ -32,19 +33,10 @@ ], parameters: [ new Model\Parameter( - name: 'Accept', + name: 'X-CSRF-Token', in: 'header', required: true, - description: 'If set, the updated version is returned in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), - new Model\Parameter( - name: 'Content-Type', - in: 'header', - required: true, - description: 'The RelationCreate schema encoded in XML or JSON format.', + description: 'The CSRF Token needed on all unsafe HTTP methods with session.', schema: [ 'type' => 'string', ], @@ -67,36 +59,38 @@ ), ], requestBody: new Model\RequestBody( + description: 'The RelationCreate schema encoded in XML or JSON format.', content: new \ArrayObject([ - 'application/vnd.ibexa.api.RelationCreate+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/RelationCreate', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/relations/POST/RelationCreate.xml.example', - ], 'application/vnd.ibexa.api.RelationCreate+json' => [ 'schema' => [ '$ref' => '#/components/schemas/RelationCreateWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/relations/POST/RelationCreate.json.example', ], + 'application/vnd.ibexa.api.RelationCreate+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/RelationCreate', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/relations/POST/RelationCreate.xml.example', + ], ]), ), responses: [ Response::HTTP_CREATED => [ + 'description' => 'If set, the updated version is returned in XML or JSON format.', 'content' => [ - 'application/vnd.ibexa.api.Relation+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/Relation', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/relations/relation_id/GET/Relation.xml.example', - ], 'application/vnd.ibexa.api.Relation+json' => [ 'schema' => [ '$ref' => '#/components/schemas/RelationWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/relations/POST/Relation.json.example', ], + 'application/vnd.ibexa.api.Relation+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/Relation', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/relations/POST/Relation.xml.example', + ], ], ], ], diff --git a/src/lib/Server/Controller/Content/ContentRevealController.php b/src/lib/Server/Controller/Content/ContentRevealController.php index 0aebcc1cc..d48c4d3a8 100644 --- a/src/lib/Server/Controller/Content/ContentRevealController.php +++ b/src/lib/Server/Controller/Content/ContentRevealController.php @@ -18,12 +18,22 @@ uriTemplate: '/content/objects/{contentId}/reveal', extraProperties: [OpenApiFactory::OVERRIDE_OPENAPI_RESPONSES => false], openapi: new Model\Operation( + operationId: 'ibexa.rest.reveal_content', summary: 'Reveal content item', description: 'Makes or keep the content item visible', tags: [ 'Objects', ], 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: 'contentId', in: 'path', @@ -34,6 +44,7 @@ ), ], requestBody: new Model\RequestBody( + description: 'No payload required', content: new \ArrayObject(), ), responses: [ diff --git a/src/lib/Server/Controller/Content/ContentTranslationDeleteController.php b/src/lib/Server/Controller/Content/ContentTranslationDeleteController.php index 731608e42..dabe44b87 100644 --- a/src/lib/Server/Controller/Content/ContentTranslationDeleteController.php +++ b/src/lib/Server/Controller/Content/ContentTranslationDeleteController.php @@ -16,12 +16,22 @@ #[Delete( uriTemplate: '/content/objects/{contentId}/translations/{languageCode}', openapi: new Model\Operation( + operationId: 'ibexa.rest.delete_content_translation', summary: 'Delete translation (permanently)', description: 'Permanently deletes a translation from all versions of a content item.', tags: [ 'Objects', ], 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: 'contentId', in: 'path', diff --git a/src/lib/Server/Controller/Content/ContentVersionDeleteController.php b/src/lib/Server/Controller/Content/ContentVersionDeleteController.php index 2a7e0212b..5537b35c6 100644 --- a/src/lib/Server/Controller/Content/ContentVersionDeleteController.php +++ b/src/lib/Server/Controller/Content/ContentVersionDeleteController.php @@ -17,12 +17,22 @@ #[Delete( uriTemplate: '/content/objects/{contentId}/versions/{versionNo}', openapi: new Model\Operation( + operationId: 'ibexa.rest.delete_content_version', summary: 'Delete content version', description: 'Deletes the content version.', tags: [ 'Objects', ], 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: 'contentId', in: 'path', diff --git a/src/lib/Server/Controller/Content/ContentVersionRelationDeleteController.php b/src/lib/Server/Controller/Content/ContentVersionRelationDeleteController.php index 648c1bd7e..46893849b 100644 --- a/src/lib/Server/Controller/Content/ContentVersionRelationDeleteController.php +++ b/src/lib/Server/Controller/Content/ContentVersionRelationDeleteController.php @@ -22,12 +22,22 @@ #[Delete( uriTemplate: '/content/objects/{contentId}/versions/{versionNo}/relations/{relationId}', openapi: new Model\Operation( + operationId: 'ibexa.rest.remove_relation', summary: 'Delete Relation', description: 'Deletes a Relation of the given draft.', tags: [ 'Objects', ], 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: 'contentId', in: 'path', diff --git a/src/lib/Server/Controller/Content/ContentVersionRelationLoadByIdController.php b/src/lib/Server/Controller/Content/ContentVersionRelationLoadByIdController.php index d4d44fda3..877ebd67e 100644 --- a/src/lib/Server/Controller/Content/ContentVersionRelationLoadByIdController.php +++ b/src/lib/Server/Controller/Content/ContentVersionRelationLoadByIdController.php @@ -19,21 +19,13 @@ #[Get( uriTemplate: '/content/objects/{contentId}/versions/{versionNo}/relations/{relationId}', openapi: new Model\Operation( + operationId: 'ibexa.rest.load_version_relation', summary: 'Load Relation', description: 'Loads a Relation for the given content item.', tags: [ 'Objects', ], parameters: [ - new Model\Parameter( - name: 'Accept', - in: 'header', - required: true, - description: 'If set, the Relation is returned in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), new Model\Parameter( name: 'contentId', in: 'path', @@ -63,18 +55,18 @@ Response::HTTP_OK => [ 'description' => 'OK - loads a Relation for the given content item.', 'content' => [ - 'application/vnd.ibexa.api.Relation+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/Relation', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/relations/relation_id/GET/Relation.xml.example', - ], 'application/vnd.ibexa.api.Relation+json' => [ 'schema' => [ '$ref' => '#/components/schemas/RelationWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/relations/POST/Relation.json.example', ], + 'application/vnd.ibexa.api.Relation+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/Relation', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/relations/relation_id/GET/Relation.xml.example', + ], ], ], Response::HTTP_UNAUTHORIZED => [ diff --git a/src/lib/Server/Controller/Content/ContentVersionUpdateController.php b/src/lib/Server/Controller/Content/ContentVersionUpdateController.php index 814646d00..75ee355ce 100644 --- a/src/lib/Server/Controller/Content/ContentVersionUpdateController.php +++ b/src/lib/Server/Controller/Content/ContentVersionUpdateController.php @@ -26,6 +26,7 @@ uriTemplate: '/content/objects/{contentId}/versions/{versionNo}', extraProperties: [OpenApiFactory::OVERRIDE_OPENAPI_RESPONSES => false], openapi: new Model\Operation( + operationId: 'ibexa.rest.update_version', summary: 'Update version', description: 'A specific draft is updated. PATCH or POST with header X-HTTP-Method-Override PATCH.', tags: [ @@ -33,10 +34,10 @@ ], parameters: [ new Model\Parameter( - name: 'Accept', + name: 'X-CSRF-Token', in: 'header', required: true, - description: 'If set, the updated version is returned in XML or JSON format.', + description: 'The CSRF Token needed on all unsafe HTTP methods with session.', schema: [ 'type' => 'string', ], @@ -50,15 +51,6 @@ 'type' => 'string', ], ), - new Model\Parameter( - name: 'Content-Type', - in: 'header', - required: true, - description: 'The VersionUpdate schema encoded in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), new Model\Parameter( name: 'contentId', in: 'path', @@ -77,35 +69,37 @@ ), ], requestBody: new Model\RequestBody( + description: 'The VersionUpdate schema encoded in XML or JSON format.', content: new \ArrayObject([ - 'application/vnd.ibexa.api.VersionUpdate+xml' => [ + 'application/vnd.ibexa.api.VersionUpdate+json' => [ 'schema' => [ - '$ref' => '#/components/schemas/VersionUpdate', + '$ref' => '#/components/schemas/VersionUpdateWrapper', ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/PATCH/VersionUpdate.xml.example', ], - 'application/vnd.ibexa.api.VersionUpdate+json' => [ + 'application/vnd.ibexa.api.VersionUpdate+xml' => [ 'schema' => [ - '$ref' => '#/components/schemas/VersionUpdateWrapper', + '$ref' => '#/components/schemas/VersionUpdate', ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/PATCH/VersionUpdate.xml.example', ], ]), ), responses: [ Response::HTTP_OK => [ + 'description' => 'If set, the updated version is returned in XML or JSON format.', 'content' => [ - 'application/vnd.ibexa.api.Version+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/Version', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/GET/Version.xml.example', - ], 'application/vnd.ibexa.api.Version+json' => [ 'schema' => [ '$ref' => '#/components/schemas/VersionWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/GET/Version.json.example', ], + 'application/vnd.ibexa.api.Version+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/Version', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/PATCH/Version.xml.example', + ], ], ], Response::HTTP_BAD_REQUEST => [ diff --git a/src/lib/Server/Controller/Content/ContentVersionsListController.php b/src/lib/Server/Controller/Content/ContentVersionsListController.php index 9e226b9cf..2e39fb92d 100644 --- a/src/lib/Server/Controller/Content/ContentVersionsListController.php +++ b/src/lib/Server/Controller/Content/ContentVersionsListController.php @@ -19,21 +19,13 @@ uriTemplate: '/content/objects/{contentId}/versions', extraProperties: [OpenApiFactory::OVERRIDE_OPENAPI_RESPONSES => false], openapi: new Model\Operation( + operationId: 'ibexa.rest.load_content_versions', summary: 'List versions', description: 'Returns a list of all versions of the content item. This method does not include fields and relations in the version elements of the response.', tags: [ 'Objects', ], parameters: [ - new Model\Parameter( - name: 'Accept', - in: 'header', - required: true, - description: 'If set, the version list is returned in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), new Model\Parameter( name: 'contentId', in: 'path', @@ -45,19 +37,20 @@ ], responses: [ Response::HTTP_OK => [ + 'description' => 'If set, the version list is returned in XML or JSON format.', 'content' => [ - 'application/vnd.ibexa.api.VersionList+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/VersionList', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/GET/VersionList.xml.example', - ], 'application/vnd.ibexa.api.VersionList+json' => [ 'schema' => [ '$ref' => '#/components/schemas/VersionListWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/GET/VersionList.json.example', ], + 'application/vnd.ibexa.api.VersionList+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/VersionList', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/GET/VersionList.xml.example', + ], ], ], Response::HTTP_UNAUTHORIZED => [ diff --git a/src/lib/Server/Controller/Content/ContentVersionsRelationsListController.php b/src/lib/Server/Controller/Content/ContentVersionsRelationsListController.php index 5195f8407..b1fb36b3b 100644 --- a/src/lib/Server/Controller/Content/ContentVersionsRelationsListController.php +++ b/src/lib/Server/Controller/Content/ContentVersionsRelationsListController.php @@ -18,21 +18,13 @@ #[Get( uriTemplate: '/content/objects/{contentId}/versions/{versionNo}/relations', openapi: new Model\Operation( + operationId: 'ibexa.rest.load_version_relations', summary: 'Load Relations of content item version', description: 'Loads the Relations of the given version.', tags: [ 'Objects', ], parameters: [ - new Model\Parameter( - name: 'Accept', - in: 'header', - required: true, - description: 'If set, the Relation is returned in XML or JSON format.', - schema: [ - 'type' => 'string', - ], - ), new Model\Parameter( name: 'contentId', in: 'path', @@ -52,19 +44,20 @@ ], responses: [ Response::HTTP_OK => [ + 'description' => 'If set, the Relation is returned in XML or JSON format.', 'content' => [ - 'application/vnd.ibexa.api.RelationList+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/RelationList', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/relations/GET/RelationList.xml.example', - ], 'application/vnd.ibexa.api.RelationList+json' => [ 'schema' => [ '$ref' => '#/components/schemas/RelationListWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/relations/GET/RelationList.json.example', ], + 'application/vnd.ibexa.api.RelationList+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/RelationList', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/content/objects/content_id/versions/version_no/relations/GET/RelationList.xml.example', + ], ], ], Response::HTTP_UNAUTHORIZED => [ diff --git a/src/lib/Server/Controller/Views.php b/src/lib/Server/Controller/Views.php index 5c78cc3d4..9f96422fb 100644 --- a/src/lib/Server/Controller/Views.php +++ b/src/lib/Server/Controller/Views.php @@ -25,6 +25,7 @@ uriTemplate: '/views', extraProperties: [OpenApiFactory::OVERRIDE_OPENAPI_RESPONSES => false], openapi: new Model\Operation( + operationId: 'ibexa.rest.views.create', summary: 'Search content', description: 'Executes a query and returns a View including the results. View input reflects the criteria model of the public PHP API. @@ -34,42 +35,35 @@ ], 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.ViewInput+xml' => [ - 'schema' => [ - '$ref' => '#/components/schemas/ViewInput', - ], - 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/views/POST/ViewInput.xml.example', - ], 'application/vnd.ibexa.api.ViewInput+json' => [ 'schema' => [ '$ref' => '#/components/schemas/ViewInputWrapper', ], 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/views/POST/ViewInput.json.example', ], + 'application/vnd.ibexa.api.ViewInput+xml' => [ + 'schema' => [ + '$ref' => '#/components/schemas/ViewInput', + ], + 'x-ibexa-example-file' => '@IbexaRestBundle/Resources/api_platform/examples/views/POST/ViewInput.xml.example', + ], ]), ), responses: [ Response::HTTP_OK => [ + 'description' => 'The view in XML or JSON format.', 'content' => [ 'application/vnd.ibexa.api.View+xml; version=1.1' => [ 'schema' => [