From 4eb1b3e24b73b25e15edf3f5eb1d66a34e82e195 Mon Sep 17 00:00:00 2001 From: Bartek Wajda Date: Tue, 28 Oct 2025 09:34:12 +0100 Subject: [PATCH 1/5] IBX-9266: Added REST endpoint loading available site accesses for location # Conflicts: # src/bundle/Resources/config/routing_rest.yaml # src/bundle/Resources/config/services/controllers.yaml # src/bundle/Resources/config/services/rest.yaml --- .../SiteAccess/SiteAccessController.php | 29 ++++++++++ src/bundle/Resources/config/routing_rest.yaml | 11 ++++ .../config/services/controllers.yaml | 8 +++ .../Resources/config/services/rest.yaml | 7 +++ .../SiteAccess/SiteAccessesListVisitor.php | 41 +++++++++++++ .../Value/SiteAccess/SiteAccessesList.php | 33 +++++++++++ .../REST/GetSiteAccessesListTest.php | 57 +++++++++++++++++++ .../REST/Schemas/SiteAccessesList.json | 45 +++++++++++++++ .../REST/Schemas/SiteAccessesList.xsd | 19 +++++++ .../REST/Snapshots/SiteAccessesList.json | 32 +++++++++++ .../REST/Snapshots/SiteAccessesList.xml | 23 ++++++++ 11 files changed, 305 insertions(+) create mode 100644 src/bundle/Controller/SiteAccess/SiteAccessController.php create mode 100644 src/lib/REST/Output/ValueObjectVisitor/SiteAccess/SiteAccessesListVisitor.php create mode 100644 src/lib/REST/Value/SiteAccess/SiteAccessesList.php create mode 100644 tests/integration/REST/GetSiteAccessesListTest.php create mode 100644 tests/integration/Resources/REST/Schemas/SiteAccessesList.json create mode 100644 tests/integration/Resources/REST/Schemas/SiteAccessesList.xsd create mode 100644 tests/integration/Resources/REST/Snapshots/SiteAccessesList.json create mode 100644 tests/integration/Resources/REST/Snapshots/SiteAccessesList.xml diff --git a/src/bundle/Controller/SiteAccess/SiteAccessController.php b/src/bundle/Controller/SiteAccess/SiteAccessController.php new file mode 100644 index 0000000000..342e9b02d7 --- /dev/null +++ b/src/bundle/Controller/SiteAccess/SiteAccessController.php @@ -0,0 +1,29 @@ +siteAccessResolver = $siteAccessResolver; + } + + public function loadForLocation(Location $location): SiteAccessesList + { + return new SiteAccessesList($this->siteAccessResolver->getSiteAccessesListForLocation($location)); + } +} diff --git a/src/bundle/Resources/config/routing_rest.yaml b/src/bundle/Resources/config/routing_rest.yaml index 20113ea6d4..3fd0bff77e 100644 --- a/src/bundle/Resources/config/routing_rest.yaml +++ b/src/bundle/Resources/config/routing_rest.yaml @@ -137,3 +137,14 @@ ibexa.rest.content_type.load_field_definitions_from_expression: methods: [POST] options: expose: true + +# +# Site Access +# + +ibexa.rest.siteaccess.load_for_location: + path: /siteaccess/load-for-location/{locationId} + controller: 'Ibexa\Bundle\AdminUi\Controller\SiteAccess\SiteAccessController::loadForLocation' + methods: [GET] + options: + expose: true diff --git a/src/bundle/Resources/config/services/controllers.yaml b/src/bundle/Resources/config/services/controllers.yaml index ab509005ec..3df8ff07c3 100644 --- a/src/bundle/Resources/config/services/controllers.yaml +++ b/src/bundle/Resources/config/services/controllers.yaml @@ -265,3 +265,11 @@ services: $fieldsByExpressionService: '@Ibexa\Contracts\AdminUi\ContentType\ContentTypeFieldsByExpressionServiceInterface' tags: - controller.service_arguments + + Ibexa\Bundle\AdminUi\Controller\SiteAccess\SiteAccessController: + parent: Ibexa\Rest\Server\Controller + autowire: true + arguments: + $siteAccessResolver: '@Ibexa\AdminUi\Siteaccess\NonAdminSiteaccessResolver' + tags: + - controller.service_arguments diff --git a/src/bundle/Resources/config/services/rest.yaml b/src/bundle/Resources/config/services/rest.yaml index 0cbc65fd13..98ebcdb3d3 100644 --- a/src/bundle/Resources/config/services/rest.yaml +++ b/src/bundle/Resources/config/services/rest.yaml @@ -108,3 +108,10 @@ services: parent: Ibexa\Contracts\Rest\Output\ValueObjectVisitor tags: - { name: ibexa.rest.output.value_object.visitor, type: Ibexa\AdminUi\REST\Value\ContentType\FieldDefinitionInfoList } + # + # Site Accesses + # + Ibexa\AdminUi\REST\Output\ValueObjectVisitor\SiteAccess\SiteAccessesListVisitor: + parent: Ibexa\Contracts\Rest\Output\ValueObjectVisitor + tags: + - { name: ibexa.rest.output.value_object.visitor, type: Ibexa\AdminUi\REST\Value\SiteAccess\SiteAccessesList } diff --git a/src/lib/REST/Output/ValueObjectVisitor/SiteAccess/SiteAccessesListVisitor.php b/src/lib/REST/Output/ValueObjectVisitor/SiteAccess/SiteAccessesListVisitor.php new file mode 100644 index 0000000000..bae041ac5a --- /dev/null +++ b/src/lib/REST/Output/ValueObjectVisitor/SiteAccess/SiteAccessesListVisitor.php @@ -0,0 +1,41 @@ +startObjectElement('SiteAccessesList'); + $visitor->setHeader('Content-Type', $generator->getMediaType('SiteAccessesList')); + + $generator->startList('values'); + foreach ($data->getSiteAccesses() as $siteAccess) { + $generator->startObjectElement('SiteAccess'); + + $generator->startValueElement('name', $siteAccess->name); + $generator->endValueElement('name'); + + $generator->startValueElement('provider', $siteAccess->provider); + $generator->endValueElement('provider'); + + $generator->endObjectElement('SiteAccess'); + } + $generator->endList('values'); + + $generator->endObjectElement('SiteAccessesList'); + } +} diff --git a/src/lib/REST/Value/SiteAccess/SiteAccessesList.php b/src/lib/REST/Value/SiteAccess/SiteAccessesList.php new file mode 100644 index 0000000000..bd8ab6d1de --- /dev/null +++ b/src/lib/REST/Value/SiteAccess/SiteAccessesList.php @@ -0,0 +1,33 @@ +siteAccesses = $siteAccesses; + } + + /** + * @return \Ibexa\Core\MVC\Symfony\SiteAccess[] + */ + public function getSiteAccesses(): array + { + return $this->siteAccesses; + } +} diff --git a/tests/integration/REST/GetSiteAccessesListTest.php b/tests/integration/REST/GetSiteAccessesListTest.php new file mode 100644 index 0000000000..23166dbf61 --- /dev/null +++ b/tests/integration/REST/GetSiteAccessesListTest.php @@ -0,0 +1,57 @@ +getIbexaTestCore()->setAdministratorUser(); + + $this->loginAsUser( + $this->createUserWithPolicies( + 'editor', + [ + 'user/login' => [], + 'content/read' => [], + 'content/versionread' => [], + ] + ) + ); + } + + protected static function getEndpointsToTest(): iterable + { + foreach (self::REQUIRED_FORMATS as $format) { + yield new EndpointRequestDefinition( + 'GET', + '/api/ibexa/v2/siteaccess/load-for-location/2', + 'SiteAccessesList', + "application/vnd.ibexa.api.SiteAccessesList+$format", + ['HTTP_X-SiteAccess' => 'admin'], + null, + null, + 'SiteAccessesList' + ); + } + } +} diff --git a/tests/integration/Resources/REST/Schemas/SiteAccessesList.json b/tests/integration/Resources/REST/Schemas/SiteAccessesList.json new file mode 100644 index 0000000000..37666c93a8 --- /dev/null +++ b/tests/integration/Resources/REST/Schemas/SiteAccessesList.json @@ -0,0 +1,45 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "properties": { + "SiteAccessesList": { + "type": "object", + "properties": { + "_media-type": { + "type": "string" + }, + "values": { + "type": "array", + "items": [ + { + "type": "object", + "properties": { + "_media-type": { + "type": "string" + }, + "name": { + "type": "string" + }, + "provider": { + "type": "string" + } + }, + "required": [ + "_media-type", + "name", + "provider" + ] + } + ] + } + }, + "required": [ + "_media-type", + "values" + ] + } + }, + "required": [ + "SiteAccessesList" + ] +} diff --git a/tests/integration/Resources/REST/Schemas/SiteAccessesList.xsd b/tests/integration/Resources/REST/Schemas/SiteAccessesList.xsd new file mode 100644 index 0000000000..801b207e10 --- /dev/null +++ b/tests/integration/Resources/REST/Schemas/SiteAccessesList.xsd @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/tests/integration/Resources/REST/Snapshots/SiteAccessesList.json b/tests/integration/Resources/REST/Snapshots/SiteAccessesList.json new file mode 100644 index 0000000000..dc35e3981d --- /dev/null +++ b/tests/integration/Resources/REST/Snapshots/SiteAccessesList.json @@ -0,0 +1,32 @@ +{ + "SiteAccessesList": { + "_media-type": "application/vnd.ibexa.api.SiteAccessesList+json", + "values": [ + { + "_media-type": "application/vnd.ibexa.api.SiteAccess+json", + "name": "__default_site_access__", + "provider": "Ibexa\\Core\\MVC\\Symfony\\SiteAccess\\Provider\\StaticSiteAccessProvider" + }, + { + "_media-type": "application/vnd.ibexa.api.SiteAccess+json", + "name": "__second_site_access__", + "provider": "Ibexa\\Core\\MVC\\Symfony\\SiteAccess\\Provider\\StaticSiteAccessProvider" + }, + { + "_media-type": "application/vnd.ibexa.api.SiteAccess+json", + "name": "ger", + "provider": "Ibexa\\Core\\MVC\\Symfony\\SiteAccess\\Provider\\StaticSiteAccessProvider" + }, + { + "_media-type": "application/vnd.ibexa.api.SiteAccess+json", + "name": "eng", + "provider": "Ibexa\\Core\\MVC\\Symfony\\SiteAccess\\Provider\\StaticSiteAccessProvider" + }, + { + "_media-type": "application/vnd.ibexa.api.SiteAccess+json", + "name": "ku6\"H", + "provider": "Ibexa\\Core\\MVC\\Symfony\\SiteAccess\\Provider\\StaticSiteAccessProvider" + } + ] + } +} diff --git a/tests/integration/Resources/REST/Snapshots/SiteAccessesList.xml b/tests/integration/Resources/REST/Snapshots/SiteAccessesList.xml new file mode 100644 index 0000000000..0f6b502c15 --- /dev/null +++ b/tests/integration/Resources/REST/Snapshots/SiteAccessesList.xml @@ -0,0 +1,23 @@ + + + + __default_site_access__ + Ibexa\Core\MVC\Symfony\SiteAccess\Provider\StaticSiteAccessProvider + + + __second_site_access__ + Ibexa\Core\MVC\Symfony\SiteAccess\Provider\StaticSiteAccessProvider + + + ger + Ibexa\Core\MVC\Symfony\SiteAccess\Provider\StaticSiteAccessProvider + + + eng + Ibexa\Core\MVC\Symfony\SiteAccess\Provider\StaticSiteAccessProvider + + + ku6"H + Ibexa\Core\MVC\Symfony\SiteAccess\Provider\StaticSiteAccessProvider + + From 2448b4d27ff46ab88d34ffeacb7fd400fc525b8a Mon Sep 17 00:00:00 2001 From: Bartek Wajda Date: Tue, 28 Oct 2025 10:53:34 +0100 Subject: [PATCH 2/5] IBX-9266: Naming --- .../Controller/SiteAccess/SiteAccessController.php | 12 +++++++----- src/bundle/Resources/config/routing_rest.yaml | 4 ++-- tests/integration/REST/GetSiteAccessesListTest.php | 4 ++-- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/bundle/Controller/SiteAccess/SiteAccessController.php b/src/bundle/Controller/SiteAccess/SiteAccessController.php index 342e9b02d7..8c88eddcce 100644 --- a/src/bundle/Controller/SiteAccess/SiteAccessController.php +++ b/src/bundle/Controller/SiteAccess/SiteAccessController.php @@ -15,15 +15,17 @@ final class SiteAccessController extends RestController { - private SiteaccessResolverInterface $siteAccessResolver; + private SiteaccessResolverInterface $nonAdminSiteAccessResolver; - public function __construct(SiteaccessResolverInterface $siteAccessResolver) + public function __construct(SiteaccessResolverInterface $nonAdminSiteAccessResolver) { - $this->siteAccessResolver = $siteAccessResolver; + $this->nonAdminSiteAccessResolver = $nonAdminSiteAccessResolver; } - public function loadForLocation(Location $location): SiteAccessesList + public function loadNonAdminSiteAccessesForLocation(Location $location): SiteAccessesList { - return new SiteAccessesList($this->siteAccessResolver->getSiteAccessesListForLocation($location)); + return new SiteAccessesList( + $this->nonAdminSiteAccessResolver->getSiteAccessesListForLocation($location) + ); } } diff --git a/src/bundle/Resources/config/routing_rest.yaml b/src/bundle/Resources/config/routing_rest.yaml index 3fd0bff77e..ad3bc947ec 100644 --- a/src/bundle/Resources/config/routing_rest.yaml +++ b/src/bundle/Resources/config/routing_rest.yaml @@ -143,8 +143,8 @@ ibexa.rest.content_type.load_field_definitions_from_expression: # ibexa.rest.siteaccess.load_for_location: - path: /siteaccess/load-for-location/{locationId} - controller: 'Ibexa\Bundle\AdminUi\Controller\SiteAccess\SiteAccessController::loadForLocation' + path: /siteaccess/load-non-admin-for-location/{locationId} + controller: 'Ibexa\Bundle\AdminUi\Controller\SiteAccess\SiteAccessController::loadNonAdminSiteAccessesForLocation' methods: [GET] options: expose: true diff --git a/tests/integration/REST/GetSiteAccessesListTest.php b/tests/integration/REST/GetSiteAccessesListTest.php index 23166dbf61..6531bfd929 100644 --- a/tests/integration/REST/GetSiteAccessesListTest.php +++ b/tests/integration/REST/GetSiteAccessesListTest.php @@ -11,7 +11,7 @@ use Ibexa\Contracts\Test\Rest\Request\Value\EndpointRequestDefinition; /** - * Coverage for /siteaccess/load-for-location/{locationId} REST endpoint. + * Coverage for /siteaccess/load-non-admin-for-location/{locationId} REST endpoint. */ final class GetSiteAccessesListTest extends BaseAdminUiRestWebTestCase { @@ -44,7 +44,7 @@ protected static function getEndpointsToTest(): iterable foreach (self::REQUIRED_FORMATS as $format) { yield new EndpointRequestDefinition( 'GET', - '/api/ibexa/v2/siteaccess/load-for-location/2', + '/api/ibexa/v2/siteaccess/load-non-admin-for-location/2', 'SiteAccessesList', "application/vnd.ibexa.api.SiteAccessesList+$format", ['HTTP_X-SiteAccess' => 'admin'], From 164b9fde943021f1a72a8d8e4631ad45f1119bc9 Mon Sep 17 00:00:00 2001 From: Bartek Wajda Date: Tue, 28 Oct 2025 10:56:40 +0100 Subject: [PATCH 3/5] IBX-9266: Naming --- src/bundle/Resources/config/services/controllers.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/config/services/controllers.yaml b/src/bundle/Resources/config/services/controllers.yaml index 3df8ff07c3..af48618886 100644 --- a/src/bundle/Resources/config/services/controllers.yaml +++ b/src/bundle/Resources/config/services/controllers.yaml @@ -270,6 +270,6 @@ services: parent: Ibexa\Rest\Server\Controller autowire: true arguments: - $siteAccessResolver: '@Ibexa\AdminUi\Siteaccess\NonAdminSiteaccessResolver' + $nonAdminSiteAccessResolver: '@Ibexa\AdminUi\Siteaccess\NonAdminSiteaccessResolver' tags: - controller.service_arguments From 18e63f6aaf7eedb388ef66da80e409b9f0bbc37a Mon Sep 17 00:00:00 2001 From: Bartek Wajda Date: Tue, 28 Oct 2025 14:29:41 +0100 Subject: [PATCH 4/5] IBX-9266: Applied review remarks --- src/bundle/Resources/config/routing_rest.yaml | 4 ++-- .../SiteAccess/SiteAccessesListVisitor.php | 3 --- .../integration/REST/GetSiteAccessesListTest.php | 4 ++-- .../Resources/REST/Schemas/SiteAccessesList.json | 6 +----- .../Resources/REST/Schemas/SiteAccessesList.xsd | 1 - .../REST/Snapshots/SiteAccessesList.json | 15 +++++---------- .../Resources/REST/Snapshots/SiteAccessesList.xml | 5 ----- 7 files changed, 10 insertions(+), 28 deletions(-) diff --git a/src/bundle/Resources/config/routing_rest.yaml b/src/bundle/Resources/config/routing_rest.yaml index ad3bc947ec..cf69dbdaed 100644 --- a/src/bundle/Resources/config/routing_rest.yaml +++ b/src/bundle/Resources/config/routing_rest.yaml @@ -142,8 +142,8 @@ ibexa.rest.content_type.load_field_definitions_from_expression: # Site Access # -ibexa.rest.siteaccess.load_for_location: - path: /siteaccess/load-non-admin-for-location/{locationId} +ibexa.rest.site_access.load_for_location: + path: /site-access/load-non-admin-for-location/{locationId} controller: 'Ibexa\Bundle\AdminUi\Controller\SiteAccess\SiteAccessController::loadNonAdminSiteAccessesForLocation' methods: [GET] options: diff --git a/src/lib/REST/Output/ValueObjectVisitor/SiteAccess/SiteAccessesListVisitor.php b/src/lib/REST/Output/ValueObjectVisitor/SiteAccess/SiteAccessesListVisitor.php index bae041ac5a..0a00ee75d7 100644 --- a/src/lib/REST/Output/ValueObjectVisitor/SiteAccess/SiteAccessesListVisitor.php +++ b/src/lib/REST/Output/ValueObjectVisitor/SiteAccess/SiteAccessesListVisitor.php @@ -29,9 +29,6 @@ public function visit(Visitor $visitor, Generator $generator, $data): void $generator->startValueElement('name', $siteAccess->name); $generator->endValueElement('name'); - $generator->startValueElement('provider', $siteAccess->provider); - $generator->endValueElement('provider'); - $generator->endObjectElement('SiteAccess'); } $generator->endList('values'); diff --git a/tests/integration/REST/GetSiteAccessesListTest.php b/tests/integration/REST/GetSiteAccessesListTest.php index 6531bfd929..c967e18d99 100644 --- a/tests/integration/REST/GetSiteAccessesListTest.php +++ b/tests/integration/REST/GetSiteAccessesListTest.php @@ -11,7 +11,7 @@ use Ibexa\Contracts\Test\Rest\Request\Value\EndpointRequestDefinition; /** - * Coverage for /siteaccess/load-non-admin-for-location/{locationId} REST endpoint. + * Coverage for /site-access/load-non-admin-for-location/{locationId} REST endpoint. */ final class GetSiteAccessesListTest extends BaseAdminUiRestWebTestCase { @@ -44,7 +44,7 @@ protected static function getEndpointsToTest(): iterable foreach (self::REQUIRED_FORMATS as $format) { yield new EndpointRequestDefinition( 'GET', - '/api/ibexa/v2/siteaccess/load-non-admin-for-location/2', + '/api/ibexa/v2/site-access/load-non-admin-for-location/2', 'SiteAccessesList', "application/vnd.ibexa.api.SiteAccessesList+$format", ['HTTP_X-SiteAccess' => 'admin'], diff --git a/tests/integration/Resources/REST/Schemas/SiteAccessesList.json b/tests/integration/Resources/REST/Schemas/SiteAccessesList.json index 37666c93a8..c99d90396c 100644 --- a/tests/integration/Resources/REST/Schemas/SiteAccessesList.json +++ b/tests/integration/Resources/REST/Schemas/SiteAccessesList.json @@ -19,15 +19,11 @@ }, "name": { "type": "string" - }, - "provider": { - "type": "string" } }, "required": [ "_media-type", - "name", - "provider" + "name" ] } ] diff --git a/tests/integration/Resources/REST/Schemas/SiteAccessesList.xsd b/tests/integration/Resources/REST/Schemas/SiteAccessesList.xsd index 801b207e10..0210f9c2a2 100644 --- a/tests/integration/Resources/REST/Schemas/SiteAccessesList.xsd +++ b/tests/integration/Resources/REST/Schemas/SiteAccessesList.xsd @@ -7,7 +7,6 @@ - diff --git a/tests/integration/Resources/REST/Snapshots/SiteAccessesList.json b/tests/integration/Resources/REST/Snapshots/SiteAccessesList.json index dc35e3981d..fbf576070d 100644 --- a/tests/integration/Resources/REST/Snapshots/SiteAccessesList.json +++ b/tests/integration/Resources/REST/Snapshots/SiteAccessesList.json @@ -4,28 +4,23 @@ "values": [ { "_media-type": "application/vnd.ibexa.api.SiteAccess+json", - "name": "__default_site_access__", - "provider": "Ibexa\\Core\\MVC\\Symfony\\SiteAccess\\Provider\\StaticSiteAccessProvider" + "name": "__default_site_access__" }, { "_media-type": "application/vnd.ibexa.api.SiteAccess+json", - "name": "__second_site_access__", - "provider": "Ibexa\\Core\\MVC\\Symfony\\SiteAccess\\Provider\\StaticSiteAccessProvider" + "name": "__second_site_access__" }, { "_media-type": "application/vnd.ibexa.api.SiteAccess+json", - "name": "ger", - "provider": "Ibexa\\Core\\MVC\\Symfony\\SiteAccess\\Provider\\StaticSiteAccessProvider" + "name": "ger" }, { "_media-type": "application/vnd.ibexa.api.SiteAccess+json", - "name": "eng", - "provider": "Ibexa\\Core\\MVC\\Symfony\\SiteAccess\\Provider\\StaticSiteAccessProvider" + "name": "eng" }, { "_media-type": "application/vnd.ibexa.api.SiteAccess+json", - "name": "ku6\"H", - "provider": "Ibexa\\Core\\MVC\\Symfony\\SiteAccess\\Provider\\StaticSiteAccessProvider" + "name": "ku6\"H" } ] } diff --git a/tests/integration/Resources/REST/Snapshots/SiteAccessesList.xml b/tests/integration/Resources/REST/Snapshots/SiteAccessesList.xml index 0f6b502c15..c03df4e75e 100644 --- a/tests/integration/Resources/REST/Snapshots/SiteAccessesList.xml +++ b/tests/integration/Resources/REST/Snapshots/SiteAccessesList.xml @@ -2,22 +2,17 @@ __default_site_access__ - Ibexa\Core\MVC\Symfony\SiteAccess\Provider\StaticSiteAccessProvider __second_site_access__ - Ibexa\Core\MVC\Symfony\SiteAccess\Provider\StaticSiteAccessProvider ger - Ibexa\Core\MVC\Symfony\SiteAccess\Provider\StaticSiteAccessProvider eng - Ibexa\Core\MVC\Symfony\SiteAccess\Provider\StaticSiteAccessProvider ku6"H - Ibexa\Core\MVC\Symfony\SiteAccess\Provider\StaticSiteAccessProvider From 558b550a017623cffd08776b159f2a440a54b863 Mon Sep 17 00:00:00 2001 From: Bartek Wajda Date: Mon, 24 Nov 2025 09:30:24 +0100 Subject: [PATCH 5/5] Applied review remarks --- .../Controller/SiteAccess/SiteAccessController.php | 10 ++++++---- src/bundle/Resources/config/routing_rest.yaml | 4 ++-- .../SiteAccess/SiteAccessesListVisitor.php | 3 +-- tests/integration/REST/GetSiteAccessesListTest.php | 4 ++-- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/bundle/Controller/SiteAccess/SiteAccessController.php b/src/bundle/Controller/SiteAccess/SiteAccessController.php index 8c88eddcce..d3aad1b946 100644 --- a/src/bundle/Controller/SiteAccess/SiteAccessController.php +++ b/src/bundle/Controller/SiteAccess/SiteAccessController.php @@ -22,10 +22,12 @@ public function __construct(SiteaccessResolverInterface $nonAdminSiteAccessResol $this->nonAdminSiteAccessResolver = $nonAdminSiteAccessResolver; } - public function loadNonAdminSiteAccessesForLocation(Location $location): SiteAccessesList + public function loadForLocation(Location $location, string $resolverType = 'non_admin'): SiteAccessesList { - return new SiteAccessesList( - $this->nonAdminSiteAccessResolver->getSiteAccessesListForLocation($location) - ); + switch ($resolverType) { + default: $siteAccesses = $this->nonAdminSiteAccessResolver->getSiteAccessesListForLocation($location); + } + + return new SiteAccessesList($siteAccesses); } } diff --git a/src/bundle/Resources/config/routing_rest.yaml b/src/bundle/Resources/config/routing_rest.yaml index cf69dbdaed..4282977378 100644 --- a/src/bundle/Resources/config/routing_rest.yaml +++ b/src/bundle/Resources/config/routing_rest.yaml @@ -143,8 +143,8 @@ ibexa.rest.content_type.load_field_definitions_from_expression: # ibexa.rest.site_access.load_for_location: - path: /site-access/load-non-admin-for-location/{locationId} - controller: 'Ibexa\Bundle\AdminUi\Controller\SiteAccess\SiteAccessController::loadNonAdminSiteAccessesForLocation' + path: /site-access/by-location/{locationId} + controller: 'Ibexa\Bundle\AdminUi\Controller\SiteAccess\SiteAccessController::loadForLocation' methods: [GET] options: expose: true diff --git a/src/lib/REST/Output/ValueObjectVisitor/SiteAccess/SiteAccessesListVisitor.php b/src/lib/REST/Output/ValueObjectVisitor/SiteAccess/SiteAccessesListVisitor.php index 0a00ee75d7..e99007336a 100644 --- a/src/lib/REST/Output/ValueObjectVisitor/SiteAccess/SiteAccessesListVisitor.php +++ b/src/lib/REST/Output/ValueObjectVisitor/SiteAccess/SiteAccessesListVisitor.php @@ -26,8 +26,7 @@ public function visit(Visitor $visitor, Generator $generator, $data): void foreach ($data->getSiteAccesses() as $siteAccess) { $generator->startObjectElement('SiteAccess'); - $generator->startValueElement('name', $siteAccess->name); - $generator->endValueElement('name'); + $generator->valueElement('name', $siteAccess->name); $generator->endObjectElement('SiteAccess'); } diff --git a/tests/integration/REST/GetSiteAccessesListTest.php b/tests/integration/REST/GetSiteAccessesListTest.php index c967e18d99..0c41e8c682 100644 --- a/tests/integration/REST/GetSiteAccessesListTest.php +++ b/tests/integration/REST/GetSiteAccessesListTest.php @@ -11,7 +11,7 @@ use Ibexa\Contracts\Test\Rest\Request\Value\EndpointRequestDefinition; /** - * Coverage for /site-access/load-non-admin-for-location/{locationId} REST endpoint. + * Coverage for /site-access/by-location/{locationId} REST endpoint. */ final class GetSiteAccessesListTest extends BaseAdminUiRestWebTestCase { @@ -44,7 +44,7 @@ protected static function getEndpointsToTest(): iterable foreach (self::REQUIRED_FORMATS as $format) { yield new EndpointRequestDefinition( 'GET', - '/api/ibexa/v2/site-access/load-non-admin-for-location/2', + '/api/ibexa/v2/site-access/by-location/2?resolver_type=non_admin', 'SiteAccessesList', "application/vnd.ibexa.api.SiteAccessesList+$format", ['HTTP_X-SiteAccess' => 'admin'],