From 04aebc3352f871b9b618098ad6fc0bfbc2a8e747 Mon Sep 17 00:00:00 2001 From: Adrien Dupuis <61695653+adriendupuis@users.noreply.github.com> Date: Fri, 15 Nov 2024 14:25:16 +0100 Subject: [PATCH 1/8] ViewContentMetaDataCommand.php: Fix arg type Fix "Argument #1 ($contentId) must be of type int, string given" --- .../public_php_api/src/Command/ViewContentMetaDataCommand.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code_samples/api/public_php_api/src/Command/ViewContentMetaDataCommand.php b/code_samples/api/public_php_api/src/Command/ViewContentMetaDataCommand.php index 2d3cdf92d5..769a973779 100644 --- a/code_samples/api/public_php_api/src/Command/ViewContentMetaDataCommand.php +++ b/code_samples/api/public_php_api/src/Command/ViewContentMetaDataCommand.php @@ -53,7 +53,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int $user = $this->userService->loadUserByLogin('admin'); $this->permissionResolver->setCurrentUserReference($user); - $contentId = $input->getArgument('contentId'); + $contentId = (int) $input->getArgument('contentId'); // Metadata $contentInfo = $this->contentService->loadContentInfo($contentId); From 5bb1f2d0f0f5f5af882264b182f720fbc81475cb Mon Sep 17 00:00:00 2001 From: Adrien Dupuis <61695653+adriendupuis@users.noreply.github.com> Date: Fri, 15 Nov 2024 15:06:23 +0100 Subject: [PATCH 2/8] browsing_content.md: Use loadRelationList instead of loadRelations loadRelations is deprecated in 4.5, and removed in 5.0 Fix "Call to an undefined method Ibexa\Contracts\Core\Repository\ContentService::loadRelations()." on PHPStan + 5.0 --- .../src/Command/ViewContentMetaDataCommand.php | 9 +++++---- .../content_api/browsing_content.md | 13 +++++++------ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/code_samples/api/public_php_api/src/Command/ViewContentMetaDataCommand.php b/code_samples/api/public_php_api/src/Command/ViewContentMetaDataCommand.php index 769a973779..c9c5ed1490 100644 --- a/code_samples/api/public_php_api/src/Command/ViewContentMetaDataCommand.php +++ b/code_samples/api/public_php_api/src/Command/ViewContentMetaDataCommand.php @@ -99,10 +99,11 @@ protected function execute(InputInterface $input, OutputInterface $output): int // Relations $versionInfo = $this->contentService->loadVersionInfo($contentInfo); - $relations = $this->contentService->loadRelations($versionInfo); - foreach ($relations as $relation) { - $name = $relation->destinationContentInfo->name; - $output->writeln('Relation to content ' . $name); + $relationCount = $this->contentService->countRelations($versionInfo); + $relationList = $this->contentService->loadRelationList($versionInfo, 0, $relationCount); + foreach ($relationList as $relationListItem) { + $name = $relationListItem->getRelation()->destinationContentInfo->name; + $output->writeln("Relation to content '$name'"); } // Owner diff --git a/docs/content_management/content_api/browsing_content.md b/docs/content_management/content_api/browsing_content.md index 5fa8eecf96..a8b34725a6 100644 --- a/docs/content_management/content_api/browsing_content.md +++ b/docs/content_management/content_api/browsing_content.md @@ -103,11 +103,11 @@ to get only versions of a specific status, e.g.: Content Relations are versioned. To list Relations to and from your content, -you need to pass a `VersionInfo` object to the [`ContentService::loadRelations`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-ContentService.html#method_loadRelations) method. +you need to pass a `VersionInfo` object to the [`ContentService::loadRelationList`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-ContentService.html#method_loadRelationList) method. You can get the current version's `VersionInfo` using [`ContentService::loadVersionInfo`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-ContentService.html#method_loadVersionInfo). ``` php -[[= include_file('code_samples/api/public_php_api/src/Command/ViewContentMetaDataCommand.php', 100, 106) =]] +[[= include_file('code_samples/api/public_php_api/src/Command/ViewContentMetaDataCommand.php', 100, 107) =]] ``` You can also specify the version number as the second argument to get Relations for a specific version: @@ -116,7 +116,8 @@ You can also specify the version number as the second argument to get Relations $versionInfo = $this->contentService->loadVersionInfo($contentInfo, 2); ``` -`loadRelations` provides an array of [`Relation`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Content-Relation.html) objects. +`loadRelationList` provides an iterable [`RelationList`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Content-RelationList.html) object +listing [`Relation`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Content-Relation.html) objects. `Relation` has two main properties: `destinationContentInfo`, and `sourceContentInfo`. It also holds the [relation type](content_relations.md), and the optional Field this relation is made with. @@ -126,7 +127,7 @@ and the optional Field this relation is made with. You can use the `getOwner` method of the `ContentInfo` object to load the content item's owner as a `User` value object. ``` php -[[= include_file('code_samples/api/public_php_api/src/Command/ViewContentMetaDataCommand.php', 108, 109) =]] +[[= include_file('code_samples/api/public_php_api/src/Command/ViewContentMetaDataCommand.php', 109, 110) =]] ``` To get the creator of the current version and not the content item's owner, @@ -139,7 +140,7 @@ the [`getSection`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-C of the ContentInfo object: ``` php -[[= include_file('code_samples/api/public_php_api/src/Command/ViewContentMetaDataCommand.php', 111, 112) =]] +[[= include_file('code_samples/api/public_php_api/src/Command/ViewContentMetaDataCommand.php', 112, 113) =]] ``` !!! note @@ -155,7 +156,7 @@ You need to provide it with the Object state group. All Object state groups can be retrieved through [`loadObjectStateGroups`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-ObjectStateService.html#method_loadObjectStateGroups). ``` php -[[= include_file('code_samples/api/public_php_api/src/Command/ViewContentMetaDataCommand.php', 114, 119) =]] +[[= include_file('code_samples/api/public_php_api/src/Command/ViewContentMetaDataCommand.php', 115, 120) =]] ``` ## Viewing content with Fields From da094da4c3aec4c9fe85cbf9e7dc2a56d679bd47 Mon Sep 17 00:00:00 2001 From: Adrien Dupuis <61695653+adriendupuis@users.noreply.github.com> Date: Fri, 15 Nov 2024 15:25:33 +0100 Subject: [PATCH 3/8] RelationController.php: Use loadRelationList instead of loadRelations loadRelations is deprecated in 4.5, and removed in 5.0 Fix "Call to an undefined method Ibexa\Contracts\Core\Repository\ContentService::loadRelations()." on PHPStan + 5.0 --- .../embed_content/src/Controller/RelationController.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code_samples/front/embed_content/src/Controller/RelationController.php b/code_samples/front/embed_content/src/Controller/RelationController.php index 129a0369a3..2578231531 100644 --- a/code_samples/front/embed_content/src/Controller/RelationController.php +++ b/code_samples/front/embed_content/src/Controller/RelationController.php @@ -25,13 +25,13 @@ public function showContentAction(View $view, $locationId): View $location = $this->locationService->loadLocation($locationId); $contentInfo = $location->getContentInfo(); $versionInfo = $this->contentService->loadVersionInfo($contentInfo); - $relations = $this->contentService->loadRelations($versionInfo); + $relationList = $this->contentService->loadRelationList($versionInfo); $items = []; - foreach ($relations as $relation) { - if (in_array($relation->getDestinationContentInfo()->getContentType()->identifier, $acceptedContentTypes)) { - $items[] = $this->contentService->loadContentByContentInfo($relation->getDestinationContentInfo()); + foreach ($relationList as $relationListItem) { + if (in_array($relationListItem->getRelation()->getDestinationContentInfo()->getContentType()->identifier, $acceptedContentTypes)) { + $items[] = $this->contentService->loadContentByContentInfo($relationListItem->getRelation()->getDestinationContentInfo()); } } From cfa1c89aace3c1a635bc5baa42b50da3abf0747e Mon Sep 17 00:00:00 2001 From: Adrien Dupuis <61695653+adriendupuis@users.noreply.github.com> Date: Fri, 15 Nov 2024 19:57:41 +0100 Subject: [PATCH 4/8] code_samples_usage_diff2html.php: escape < and > --- tools/code_samples/code_samples_usage_diff2html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/code_samples/code_samples_usage_diff2html.php b/tools/code_samples/code_samples_usage_diff2html.php index 965cd3f6ae..f15f6fe28c 100644 --- a/tools/code_samples/code_samples_usage_diff2html.php +++ b/tools/code_samples/code_samples_usage_diff2html.php @@ -33,7 +33,7 @@ continue; } $statusChar = strlen($diffLine) ? $diffLine[0] : ''; - $realLine = $str = substr($diffLine, 1); + $realLine = str_replace(['<', '>'], ['<', '>'], substr($diffLine, 1)); if ($previousStatusChar !== $statusChar) { switch ("$previousStatusChar$statusChar") { case ' +': From aba03c3aa4bd0f57ed1bda896d3cac4126e2bf26 Mon Sep 17 00:00:00 2001 From: Adrien Dupuis <61695653+adriendupuis@users.noreply.github.com> Date: Wed, 20 Nov 2024 15:50:54 +0100 Subject: [PATCH 5/8] Update code_samples/api/public_php_api/src/Command/ViewContentMetaDataCommand.php --- .../public_php_api/src/Command/ViewContentMetaDataCommand.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code_samples/api/public_php_api/src/Command/ViewContentMetaDataCommand.php b/code_samples/api/public_php_api/src/Command/ViewContentMetaDataCommand.php index c9c5ed1490..6037ae2515 100644 --- a/code_samples/api/public_php_api/src/Command/ViewContentMetaDataCommand.php +++ b/code_samples/api/public_php_api/src/Command/ViewContentMetaDataCommand.php @@ -102,7 +102,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int $relationCount = $this->contentService->countRelations($versionInfo); $relationList = $this->contentService->loadRelationList($versionInfo, 0, $relationCount); foreach ($relationList as $relationListItem) { - $name = $relationListItem->getRelation()->destinationContentInfo->name; + $name = $relationListItem->hasRelation() ? $relationListItem->getRelation()->destinationContentInfo->name : '(Unauthorized)'; $output->writeln("Relation to content '$name'"); } From 7b7cd9a375a1d5845cfb6b341e5076cd72979b9d Mon Sep 17 00:00:00 2001 From: Adrien Dupuis <61695653+adriendupuis@users.noreply.github.com> Date: Thu, 21 Nov 2024 09:50:36 +0100 Subject: [PATCH 6/8] Update docs/content_management/content_api/browsing_content.md --- docs/content_management/content_api/browsing_content.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content_management/content_api/browsing_content.md b/docs/content_management/content_api/browsing_content.md index a8b34725a6..73571c9ea8 100644 --- a/docs/content_management/content_api/browsing_content.md +++ b/docs/content_management/content_api/browsing_content.md @@ -103,7 +103,7 @@ to get only versions of a specific status, e.g.: Content Relations are versioned. To list Relations to and from your content, -you need to pass a `VersionInfo` object to the [`ContentService::loadRelationList`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-ContentService.html#method_loadRelationList) method. +you need to pass a `VersionInfo` object to the [`ContentService::loadRelationList`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-ContentService.html#method_loadRelationList) method which is paginated. You can get the current version's `VersionInfo` using [`ContentService::loadVersionInfo`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-ContentService.html#method_loadVersionInfo). ``` php From f7ff82705e8ee88356bc2bf2d817b87bcde730b5 Mon Sep 17 00:00:00 2001 From: Adrien Dupuis <61695653+adriendupuis@users.noreply.github.com> Date: Tue, 26 Nov 2024 12:21:54 +0100 Subject: [PATCH 7/8] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Marek Nocoń --- docs/content_management/content_api/browsing_content.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content_management/content_api/browsing_content.md b/docs/content_management/content_api/browsing_content.md index 73571c9ea8..8ffeb40861 100644 --- a/docs/content_management/content_api/browsing_content.md +++ b/docs/content_management/content_api/browsing_content.md @@ -103,7 +103,7 @@ to get only versions of a specific status, e.g.: Content Relations are versioned. To list Relations to and from your content, -you need to pass a `VersionInfo` object to the [`ContentService::loadRelationList`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-ContentService.html#method_loadRelationList) method which is paginated. +you need to pass a `VersionInfo` object to the [`ContentService::loadRelationList`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-ContentService.html#method_loadRelationList) method. This method loads only the specified subset of relations to improve performance and was created with pagination in mind. You can get the current version's `VersionInfo` using [`ContentService::loadVersionInfo`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-ContentService.html#method_loadVersionInfo). ``` php From 9bb32509deb08e48c167027a0fbaa28d0d3f94ee Mon Sep 17 00:00:00 2001 From: Adrien Dupuis <61695653+adriendupuis@users.noreply.github.com> Date: Tue, 26 Nov 2024 16:59:58 +0100 Subject: [PATCH 8/8] Update code_samples/front/embed_content/src/Controller/RelationController.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Marek Nocoń --- .../front/embed_content/src/Controller/RelationController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code_samples/front/embed_content/src/Controller/RelationController.php b/code_samples/front/embed_content/src/Controller/RelationController.php index 2578231531..b0cd9aa5be 100644 --- a/code_samples/front/embed_content/src/Controller/RelationController.php +++ b/code_samples/front/embed_content/src/Controller/RelationController.php @@ -30,7 +30,7 @@ public function showContentAction(View $view, $locationId): View $items = []; foreach ($relationList as $relationListItem) { - if (in_array($relationListItem->getRelation()->getDestinationContentInfo()->getContentType()->identifier, $acceptedContentTypes)) { + if ($relationListItem->hasRelation() && in_array($relationListItem->getRelation()->getDestinationContentInfo()->getContentType()->identifier, $acceptedContentTypes)) { $items[] = $this->contentService->loadContentByContentInfo($relationListItem->getRelation()->getDestinationContentInfo()); } }