From 6a822f8adad6f2bab90e82a9d93f0c351a45488e Mon Sep 17 00:00:00 2001 From: julitafalcondusza Date: Thu, 20 Mar 2025 13:17:54 +0100 Subject: [PATCH 01/12] collaboration events skeleton added --- .../event_reference/collaboration_events.md | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 docs/api/event_reference/collaboration_events.md diff --git a/docs/api/event_reference/collaboration_events.md b/docs/api/event_reference/collaboration_events.md new file mode 100644 index 0000000000..5747e1a226 --- /dev/null +++ b/docs/api/event_reference/collaboration_events.md @@ -0,0 +1,40 @@ +--- +description: Events that are triggered when working with collaborative editing feature. +page_type: reference +month_change: false +--- + +# Collaboration events + +## Invitation events + +| Event | Dispatched by | +|---|---| +|[BeforeCreateInvitationEvent](../php_api/php_api_reference/classes/)|[InvitationServicenterface](../php_api/php_api_reference/classes/.html)| +|[BeforeDeleteInvitationEvent](../php_api/php_api_reference/classes/)|[InvitationServicenterface](../php_api/php_api_reference/classes/.html)| +|[BeforeUpdateInvitationEvent](../php_api/php_api_reference/classes/)|[[InvitationServicenterface](../php_api/php_api_reference/classes/.html)| +|[CreateInvitationEvent](../php_api/php_api_reference/classes/)|[InvitationServiceInterface](../php_api/php_api_reference/classes/.html)| +|[DeleteInvitationEvent](../php_api/php_api_reference/classes/)|[InvitationServiceInterface](../php_api/php_api_reference/classes/.html)| +|[UpdateInvitationEvent](../php_api/php_api_reference/classes/)|[InvitationServiceInterface](../php_api/php_api_reference/classes/.html)| + +## Participant events + +| Event | Dispatched by | +|---|---| +|[AddParticipantEvent](../php_api/php_api_reference/classes/)|[SessionServiceInterface](../php_api/php_api_reference/classes/.html)| +|[BeforeAddParticipantEvent](../php_api/php_api_reference/classes/)|[SessionServiceInterface](../php_api/php_api_reference/classes/.html)| +|[BeforeRemoveParticipantEvent](../php_api/php_api_reference/classes/)|[SessionServiceInterface](../php_api/php_api_reference/classes/.html)| +|[BeforeUpdateParticipantEvent](../php_api/php_api_reference/classes/)|[SessionServiceInterface](../php_api/php_api_reference/classes/.html)| +|[RemoveParticipantEvent](../php_api/php_api_reference/classes/)|[SessionServiceInterface](../php_api/php_api_reference/classes/.html)| +|[UpdateParticipantEvent](../php_api/php_api_reference/classes/)|[SessionServiceInterface](../php_api/php_api_reference/classes/.html)| + +## Session events + +| Event | Dispatched by | +|---|---|---| +|[BeforeCreateSessionEvent](../php_api/php_api_reference/classes/)|[SessionServiceInterface](../php_api/php_api_reference/classes/.html)| +|[BeforeDeleteSessionEvent](../php_api/php_api_reference/classes/)|[SessionServiceInterface](../php_api/php_api_reference/classes/.html)| +|[BeforeUpdateSessionEvent](../php_api/php_api_reference/classes/)|[SessionServiceInterface](../php_api/php_api_reference/classes/.html)| +|[CreateSessionEvent](../php_api/php_api_reference/classes/)|[SessionServiceInterface](../php_api/php_api_reference/classes/.html)| +|[DeleteSessionEvent](../php_api/php_api_reference/classes/)|[SessionServiceInterface](../php_api/php_api_reference/classes/.html)| +|[UpdateSessionEvent](../php_api/php_api_reference/classes/)|[SessionServiceInterface](../php_api/php_api_reference/classes/.html)| \ No newline at end of file From b52ac68d93852fe027cccbee904b5ac923025bd4 Mon Sep 17 00:00:00 2001 From: julitafalcondusza Date: Wed, 9 Apr 2025 14:47:46 +0200 Subject: [PATCH 02/12] services description added --- .../collaborative_editing_api | 56 +++++++++++ .../collaborative_editing/invitation_api.md | 96 +++++++++++++++++++ .../collaborative_editing/session_api.md | 0 3 files changed, 152 insertions(+) create mode 100644 docs/content_management/collaborative_editing/collaborative_editing_api create mode 100644 docs/content_management/collaborative_editing/invitation_api.md create mode 100644 docs/content_management/collaborative_editing/session_api.md diff --git a/docs/content_management/collaborative_editing/collaborative_editing_api b/docs/content_management/collaborative_editing/collaborative_editing_api new file mode 100644 index 0000000000..c08f2838bc --- /dev/null +++ b/docs/content_management/collaborative_editing/collaborative_editing_api @@ -0,0 +1,56 @@ +--- +description: Use PHP API to manage invitations and sessions while using collaborative editing feature. +month_change: false +--- + +# Collaborative editing API + +[[= product_name =]]'s Collaborative editing API provides two services for managing sessions and invitations, which differ in function: + +- [`InvitationServiceInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-(?)-InvitationServiceInterface.html) is used to request product data +- [`SessionServiceInterface`](../api/php_api/php_api_reference/classes/Ibexa-Contracts-(?)-SessionServiceInterface.html) is used to modify products + +``` php + +/** + * @copyright Copyright (C) Ibexa AS. All rights reserved. + * @license For full copyright and license information view LICENSE file distributed with this source code. + */ +declare(strict_types=1); + +namespace Ibexa\Tests\Integration\Collaboration; + +use DateTimeImmutable; +use Ibexa\Contracts\Collaboration\Invitation\InvitationCreateStruct; +use Ibexa\Contracts\Collaboration\Invitation\InvitationInterface; +use Ibexa\Contracts\Collaboration\Invitation\InvitationQuery; +use Ibexa\Contracts\Collaboration\Invitation\InvitationStatus; +use Ibexa\Contracts\Collaboration\Invitation\InvitationUpdateStruct; +use Ibexa\Contracts\Collaboration\Invitation\Query\Criterion; +use Ibexa\Contracts\Collaboration\Invitation\Query\SortClause; +use Ibexa\Contracts\Collaboration\InvitationServiceInterface; +use Ibexa\Contracts\Collaboration\SessionServiceInterface; +use Ibexa\Contracts\Core\Repository\Exceptions\InvalidArgumentException; +use Ibexa\Contracts\Core\Repository\Exceptions\NotFoundException; +use Ibexa\Contracts\Core\Test\IbexaKernelTestTrait; +use Ibexa\Contracts\CoreSearch\Values\Query\SortDirection; +use Ibexa\Contracts\Test\Core\IbexaKernelTestCase; + +final class InvitationServiceTest extends IbexaKernelTestCase +{ + use IbexaKernelTestTrait; + + private const EXAMPLE_SESSION_ID = 1; + private const EXAMPLE_INVITATION_ID = 1; + private const EXAMPLE_PARTICIPANT_ID = 1; + + private const EXAMPLE_INVITATION_A = 1; + private const EXAMPLE_INVITATION_B = 2; + private const EXAMPLE_INVITATION_C = 3; + + protected function setUp(): void + { + self::bootKernel(); + self::setAdministratorUser(); + } +``` \ No newline at end of file diff --git a/docs/content_management/collaborative_editing/invitation_api.md b/docs/content_management/collaborative_editing/invitation_api.md new file mode 100644 index 0000000000..b7de7712dd --- /dev/null +++ b/docs/content_management/collaborative_editing/invitation_api.md @@ -0,0 +1,96 @@ +--- +description: You can use the PHP API to create new invitation, update existing one, read or delete it. +--- + +# Invitation API + +[`InvitationService`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-InvitationService.html) enables you to read, add, update, and remove invitation for collaborative editing session. + +## Create invitation + +You can create new invitation for the collaborative session using the [`InvitationkService::createInvitation`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-InvitationService.html#method_createInvitation) method: + +``` php +{ + $session = self::getSessionService()->getSession(self::EXAMPLE_SESSION_ID); + $participant = $session->getParticipants()->getById(self::EXAMPLE_PARTICIPANT_ID); + + $createStruct = new InvitationCreateStruct($session, $participant); + $createStruct->setContext([ + 'message' => 'Hello, would you like to join my session?', + ]); + + $invitation = $this->getInvitationService()->createInvitation($createStruct); + + self::assertEquals(InvitationStatus::STATUS_PENDING, $invitation->getStatus()); + self::assertEquals([ + 'message' => 'Hello, would you like to join my session?', + ], $invitation->getContext()); +} +``` + +## Read invitation + +You can read an invitation with [`InvitationService::getInvitation`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-InvitationService.html#method_deleteInvitation): + +``` php + $this->getInvitationService()->getInvitation(self::EXAMPLE_INVITATION_ID); +``` + +You can select the parameter that you can read from an invitaion: + +- Invitation ID: + +``` php + self::assertEquals(self::EXAMPLE_INVITATION_ID, $invitation->getId()); +``` + +- Session ID: + +``` php + self::assertEquals(self::EXAMPLE_SESSION_ID, $invitation->getSession()->getId()); +``` + +- Participant ID: + +``` php + self::assertEquals(self::EXAMPLE_PARTICIPANT_ID, $invitation->getParticipant()->getId()); +``` + +- Invitation status: + +``` php + self::assertEquals(InvitationStatus::STATUS_PENDING, $invitation->getStatus()); +``` + +## Find invitation + +You can find an invitation with [`InvitationService::findInvitation`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-InvitationService.html#method_deleteInvitation) by: + +- Invitation ID: + +``` php +[[= include_file('code_samples/api/public_php_api/src/Command/(?).php', , ) =]] +``` + +- Session ID: + +- Participant ID: + +- Invitation status: + +## Update invitation + +You can update existing invitation with [`InvitationService::deleteInvitation`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-InvitationService.html#method_deleteInvitation): + +``` php +$invitation = $this->getInvitationService()->getInvitation(self::EXAMPLE_INVITATION_ID); +``` + +## Delete invitation + +You can delete an invitation with [`InvitationService::deleteInvitation`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-InvitationService.html#method_deleteInvitation): + +``` php + $this->getInvitationService()->deleteInvitation($invitation); +``` \ No newline at end of file diff --git a/docs/content_management/collaborative_editing/session_api.md b/docs/content_management/collaborative_editing/session_api.md new file mode 100644 index 0000000000..e69de29bb2 From e22c0d99942dca7fb09d89b2c6c4d6ffaf4af982 Mon Sep 17 00:00:00 2001 From: julitafalcondusza Date: Wed, 9 Apr 2025 14:48:54 +0200 Subject: [PATCH 03/12] session api added --- .../collaborative_editing/session_api.md | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/docs/content_management/collaborative_editing/session_api.md b/docs/content_management/collaborative_editing/session_api.md index e69de29bb2..c25405b733 100644 --- a/docs/content_management/collaborative_editing/session_api.md +++ b/docs/content_management/collaborative_editing/session_api.md @@ -0,0 +1,29 @@ +--- +description: You can use the PHP API to view the bookmark list, and add or remove content from it. +--- + +# Session API + +[`BookmarkService`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-BookmarkService.html) enables you to read, add and remove bookmarks from content. + +!!! tip "Bookmark REST API" + + To learn how to manage bookmarks using the REST API, see [REST API reference](../../api/rest_api/rest_api_reference/rest_api_reference.html#managing-bookmarks). + +To view a list of all bookmarks, use [`BookmarkService::loadBookmarks`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-BookmarkService.html#method_loadBookmarks): + +``` php +[[= include_file('code_samples/api/public_php_api/src/Command/BookmarkCommand.php', 43, 50) =]] +``` + +You can add a bookmark to a content item by providing its Location object to the [`BookmarkService::createBookmark`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-BookmarkService.html#method_createBookmark) method: + +``` php +[[= include_file('code_samples/api/public_php_api/src/Command/BookmarkCommand.php', 37, 40) =]] +``` + +You can remove a bookmark from a location with [`BookmarkService::deleteBookmark`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-BookmarkService.html#method_deleteBookmark): + +``` php +[[= include_file('code_samples/api/public_php_api/src/Command/BookmarkCommand.php', 52, 53) =]] +``` From d8203ca4e82bce6f68e47b8065c2565fc2052bda Mon Sep 17 00:00:00 2001 From: julitafalcondusza Date: Tue, 22 Apr 2025 13:22:19 +0200 Subject: [PATCH 04/12] Session & invitation API - skeleton --- .../collaborative_editing/invitation_api.md | 2 +- .../collaborative_editing/session_api.md | 84 ++++++++++++++++--- 2 files changed, 75 insertions(+), 11 deletions(-) diff --git a/docs/content_management/collaborative_editing/invitation_api.md b/docs/content_management/collaborative_editing/invitation_api.md index b7de7712dd..85ffb6ac9d 100644 --- a/docs/content_management/collaborative_editing/invitation_api.md +++ b/docs/content_management/collaborative_editing/invitation_api.md @@ -8,7 +8,7 @@ description: You can use the PHP API to create new invitation, update existing o ## Create invitation -You can create new invitation for the collaborative session using the [`InvitationkService::createInvitation`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-InvitationService.html#method_createInvitation) method: +You can create new invitation for the collaborative session using the [`InvitationService::createInvitation`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-InvitationService.html#method_createInvitation) method: ``` php { diff --git a/docs/content_management/collaborative_editing/session_api.md b/docs/content_management/collaborative_editing/session_api.md index c25405b733..72ba3551bd 100644 --- a/docs/content_management/collaborative_editing/session_api.md +++ b/docs/content_management/collaborative_editing/session_api.md @@ -1,29 +1,93 @@ --- -description: You can use the PHP API to view the bookmark list, and add or remove content from it. +description: You can use the PHP API to create new session, update existing one, find or delete it, and add or remove participants. --- # Session API -[`BookmarkService`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-BookmarkService.html) enables you to read, add and remove bookmarks from content. +[`SessionService`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-SessionService.html) enables you work with the collaborative session, for example, create a new one, update or delete existing one, and add or remove new participants to join collaborative session. -!!! tip "Bookmark REST API" +## Create session - To learn how to manage bookmarks using the REST API, see [REST API reference](../../api/rest_api/rest_api_reference/rest_api_reference.html#managing-bookmarks). +You can create new collaboration session with given id with [`SessionService::createSession`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-SessionService.html#method_createSession): -To view a list of all bookmarks, use [`BookmarkService::loadBookmarks`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-BookmarkService.html#method_loadBookmarks): +``` php + $this->innerService->createSession($createStruct); +``` +## Get session + +You can return existing collaboration session with [`SessionService::getSession`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-SessionService.html#method_getSession): + +- using given id: + +``` php + $this->innerService->getSession($id); +``` + +- using given token: + +``` php + $this->innerService->getSessionByToken($token); +``` + +- matching the given query: + +``` php + $this->innerService->findSessions($query); +``` + +## Find session + +You can find an existing session with [`SessionService::findSession`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-SessionService.html#method_findSession) by: + +``` php + $this->innerService->findSessions($query); +``` + +## Update session + +You can update existing invitation with [`SessionService::updateSession`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-SessionService.html#method_updateSession): ``` php -[[= include_file('code_samples/api/public_php_api/src/Command/BookmarkCommand.php', 43, 50) =]] + $this->innerService->updateSession($session, $updateStruct); ``` -You can add a bookmark to a content item by providing its Location object to the [`BookmarkService::createBookmark`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-BookmarkService.html#method_createBookmark) method: +## Delete session + +You can delete session with [`SessionService::deleteSession`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-SessionService.html#method_deleteSession): ``` php -[[= include_file('code_samples/api/public_php_api/src/Command/BookmarkCommand.php', 37, 40) =]] + $this->innerService->deleteSession($session); ``` -You can remove a bookmark from a location with [`BookmarkService::deleteBookmark`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-BookmarkService.html#method_deleteBookmark): +# Participant API + +## Add participant + +You can add participant to the collaboration session with [`SessionService::addParticipant`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-SessionService.html#method_addParticipant): ``` php -[[= include_file('code_samples/api/public_php_api/src/Command/BookmarkCommand.php', 52, 53) =]] + $this->innerService->addParticipant($session, $createStruct); ``` + +## Update participant + +You can update participant added to the collaboration session with [`SessionService::updateParticipant`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-SessionService.html#method_updateParticipant): + +``` php + $this->innerService->updateParticipant($session, $participant, $updateStruct); +``` +## Remove participant + +You can remove participant from the collaboration session with [`SessionService::removeParticipant`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-SessionService.html#method_removeParticipant): + +``` php + $this->innerService->removeParticipant($session, $participant); +``` + +## Check session Owner + +You can check the Owner of the collaboration session with [`SessionService::removeParticipant`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-SessionService.html#method_removeParticipant): + +``` php + $this->innerService->isSessionOwner($session, $user); +``` \ No newline at end of file From 3b4f1d5c7525753b520859b0479407244438f64c Mon Sep 17 00:00:00 2001 From: julitafalcondusza Date: Fri, 25 Apr 2025 14:46:37 +0200 Subject: [PATCH 05/12] Collaborative editing - installation --- .../collaborative_editing.md | 19 +++++++ ...iting_api => collaborative_editing_api.md} | 0 .../install_collaborative_editing.md | 52 +++++++++++++++++++ mkdocs.yml | 5 ++ 4 files changed, 76 insertions(+) create mode 100644 docs/content_management/collaborative_editing/collaborative_editing.md rename docs/content_management/collaborative_editing/{collaborative_editing_api => collaborative_editing_api.md} (100%) create mode 100644 docs/content_management/collaborative_editing/install_collaborative_editing.md diff --git a/docs/content_management/collaborative_editing/collaborative_editing.md b/docs/content_management/collaborative_editing/collaborative_editing.md new file mode 100644 index 0000000000..ddff28b3be --- /dev/null +++ b/docs/content_management/collaborative_editing/collaborative_editing.md @@ -0,0 +1,19 @@ +--- +description: Collaborative editing enables multiple users to work on the same content simultaneously. +page_type: landing_page +month_change: true +--- + +# Collaborative editing + +With Collaborative editing LTS multiple users can work on the same content created in [[= product_name =]] simultaneously. +They can collaborate and use a real-time editor to write and review content in a live mode thanks to CKEditor. + +You can also extend this feature to adjust it to your needs. + +[[= cards([ +"content_management/collaborative_editing/collaborative_editing", +"content_management/collaborative_editing/collaborative_editing_api", +"content_management/collaborative_editing/invitation_api", +"content_management/collaborative_editing/session_api" +], columns=4) =]] diff --git a/docs/content_management/collaborative_editing/collaborative_editing_api b/docs/content_management/collaborative_editing/collaborative_editing_api.md similarity index 100% rename from docs/content_management/collaborative_editing/collaborative_editing_api rename to docs/content_management/collaborative_editing/collaborative_editing_api.md diff --git a/docs/content_management/collaborative_editing/install_collaborative_editing.md b/docs/content_management/collaborative_editing/install_collaborative_editing.md new file mode 100644 index 0000000000..6401eb8ca6 --- /dev/null +++ b/docs/content_management/collaborative_editing/install_collaborative_editing.md @@ -0,0 +1,52 @@ +--- +description: Install the Collaborative editing LTS update. +month_change: false +--- + +# Install Collaborative editing + +Collaborative editing feature is available as an LTS update to [[= product_name =]] starting with version v5.0 or higher, regardless of its edition. +To use this feature you must first install the packages and configure them. + +## Install packages + +Run the following commands to install the packages: + +``` bash +composer require ibexa/collaboration +composer require ibexa/share +composer require ibexa/fieldtype-richtext-rte +``` + +This command adds the new real-time editing functionality to the Rich Text field type. +It also modifies the permission system to account for the new functionality. + +## Configure Collaborative editing + +Once the packages are installed, before you can start Collaborative editing feature, you must enable it by following these instructions. + +### Add tables to the database + +To add the tables to the database, run the following command: + +``` bash +php bin/console ibexa:doctrine:schema:dump-sql vendor/ibexa/collaboration/src/bundle/Resources/config/schema.yaml | mysql -u -p +php bin/console ibexa:doctrine:schema:dump-sql vendor/ibexa/share/src/bundle/Resources/config/schema.yaml | mysql -u -p +``` + +### Modify the bundles file + +Then, in the `config/bundles.php` file, add the following code: + +``` php + ['all' => true], + Ibexa\Bundle\Share\IbexaShareBundle::class => ['all' => true], + Ibexa\Bundle\FieldTypeRichTextRTE\IbexaFieldTypeRichTextRTEBundle::class => ['all' => true], +]; +``` + +You can now restart you application and start [working with the Collaborative editing feature]([[= user_doc =]]/content_management/collaborative_editing/work_with_collaborative_editing/). \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 264c8307ed..70851670fe 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -274,6 +274,11 @@ nav: - Time field type: content_management/field_types/field_type_reference/timefield.md - URL field type: content_management/field_types/field_type_reference/urlfield.md - User field type: content_management/field_types/field_type_reference/userfield.md + - Collaborative editing: + - Collaborative editing: content_management/collaborative_editing/collaborative_editing.md + - Collaborative editing API: content_management/collaborative_editing/collaborative_editing_api.md + - Invitation API: content_management/collaborative_editing/invitation_api.md + - Session API: content_management/collaborative_editing/session_api.md - Templating: - Templating: templating/templating.md - Render content: From 3207ed317cd7d2e86edf264d18114fed94a54b6a Mon Sep 17 00:00:00 2001 From: julitafalcondusza Date: Mon, 26 May 2025 12:58:52 +0200 Subject: [PATCH 06/12] Updates, content added --- .../extend_collaborative_editing.md | 14 ++++++++++++ .../content_id_criterion.md | 19 ++++++++++++++++ .../content_session_criterion.md | 22 +++++++++++++++++++ .../created_at_criterion.md | 19 ++++++++++++++++ .../email_criterion.md | 19 ++++++++++++++++ .../id_criterion.md | 19 ++++++++++++++++ .../is_active_criterion.md | 19 ++++++++++++++++ .../language_id_criterion.md | 19 ++++++++++++++++ .../logical_and_criterion.md | 14 ++++++++++++ .../logical_or_criterion.md | 14 ++++++++++++ .../owner_criterion.md | 22 +++++++++++++++++++ .../token_criterion.md | 19 ++++++++++++++++ .../type_criterion.md | 19 ++++++++++++++++ .../updated_at_criterion.md | 19 ++++++++++++++++ .../user_id_criterion.md | 22 +++++++++++++++++++ .../version_no_criterion.md | 19 ++++++++++++++++ 16 files changed, 298 insertions(+) create mode 100644 docs/content_management/collaborative_editing/extend_collaborative_editing.md create mode 100644 docs/search/collaborative_editing_search_reference/content_id_criterion.md create mode 100644 docs/search/collaborative_editing_search_reference/content_session_criterion.md create mode 100644 docs/search/collaborative_editing_search_reference/created_at_criterion.md create mode 100644 docs/search/collaborative_editing_search_reference/email_criterion.md create mode 100644 docs/search/collaborative_editing_search_reference/id_criterion.md create mode 100644 docs/search/collaborative_editing_search_reference/is_active_criterion.md create mode 100644 docs/search/collaborative_editing_search_reference/language_id_criterion.md create mode 100644 docs/search/collaborative_editing_search_reference/logical_and_criterion.md create mode 100644 docs/search/collaborative_editing_search_reference/logical_or_criterion.md create mode 100644 docs/search/collaborative_editing_search_reference/owner_criterion.md create mode 100644 docs/search/collaborative_editing_search_reference/token_criterion.md create mode 100644 docs/search/collaborative_editing_search_reference/type_criterion.md create mode 100644 docs/search/collaborative_editing_search_reference/updated_at_criterion.md create mode 100644 docs/search/collaborative_editing_search_reference/user_id_criterion.md create mode 100644 docs/search/collaborative_editing_search_reference/version_no_criterion.md diff --git a/docs/content_management/collaborative_editing/extend_collaborative_editing.md b/docs/content_management/collaborative_editing/extend_collaborative_editing.md new file mode 100644 index 0000000000..ce47649cf8 --- /dev/null +++ b/docs/content_management/collaborative_editing/extend_collaborative_editing.md @@ -0,0 +1,14 @@ +--- +description: Extend Collaborative editing feature by creating custom session or participant type. +month_change: false +--- + +# Extend Collaborative editing + +## Custom Session Type use case + +### Create custom Session Type + +## Custom Participant Type use case + +### Create custom Participant Type \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/content_id_criterion.md b/docs/search/collaborative_editing_search_reference/content_id_criterion.md new file mode 100644 index 0000000000..781467d58a --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/content_id_criterion.md @@ -0,0 +1,19 @@ +# ContentID Criterion + +The `ContentID` Search Criterion searches for content sessions based on content item ID. + +## Arguments + +- `value` - integer(s) representing the content item id(s) + +## Example + +```php +$criteria = new Ibexa\Share\Session\Query\Criterion\ContentId(1); + +OR + +$criteria = new Ibexa\Share\Session\Query\Criterion\ContentId([1, 2]); + +$query = new SessionQuery($criteria); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/content_session_criterion.md b/docs/search/collaborative_editing_search_reference/content_session_criterion.md new file mode 100644 index 0000000000..36c6bdd83a --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/content_session_criterion.md @@ -0,0 +1,22 @@ +# ContentSession Criterion + +The `ContentSession` Search Criterion searches for contentId, versionNo, languageId. + +## Arguments + +- `contentId` - integer representing content item ID +- `versionNo` - integer representing version number +- `languageId` - integer representing language ID + +## Example + +```php +$criteria = new Ibexa\Share\Session\Query\Criterion\ContentSession(1, 2, 3); + +OR + +$versionInfo = $this->contentService->loadVersionInfoById(1); +$criteria = new Ibexa\Share\Session\Query\Criterion\ContentSession::fromVersionInfo($versionInfo); + +$query = new SessionQuery($criteria); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/created_at_criterion.md b/docs/search/collaborative_editing_search_reference/created_at_criterion.md new file mode 100644 index 0000000000..db7b908c95 --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/created_at_criterion.md @@ -0,0 +1,19 @@ +# CreatedAt Criterion + +The `CreatedAtCriterion` Search Criterion searches for sessions based on the date when they were created. + +## Arguments + +- `value` - date to be matched, provided as a DateTimeInterface object +- `operator` - optional operator string (EQ, GT, GTE, LT, LTE) + +## Example + +```php +$criteria = new Ibexa\Contracts\Collaboration\Session\Query\Criterion\CreatedAt( + new DateTime('2025-05-01 14:07:02'), + 'GTE' +); + +$query = new SessionQuery($criteria); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/email_criterion.md b/docs/search/collaborative_editing_search_reference/email_criterion.md new file mode 100644 index 0000000000..57e3b806dc --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/email_criterion.md @@ -0,0 +1,19 @@ +# Email Criterion + +The `Email` Search Criterion searches for sessions based on participant email. + +## Arguments + +- `value` - string(s) representing the Participant email(s) + +## Example + +```php +$criteria = new Ibexa\Contracts\Collaboration\Session\Query\Criterion\Email('participant@link.invalid'); + +OR + +$criteria = new Ibexa\Contracts\Collaboration\Session\Query\Criterion\Email(['participant1@link.invalid', 'participant2@link.invalid']); + +$query = new SessionQuery($criteria); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/id_criterion.md b/docs/search/collaborative_editing_search_reference/id_criterion.md new file mode 100644 index 0000000000..1b4152c7c4 --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/id_criterion.md @@ -0,0 +1,19 @@ +# ID Criterion + +The `ID` Search Criterion searches for sessions based on session ID. + +## Arguments + +- `value` - integer(s) representing the Session id(s) + +## Example + +```php +$criteria = new Ibexa\Contracts\Collaboration\Session\Query\Criterion\Id(1); + +OR + +$criteria = new Ibexa\Contracts\Collaboration\Session\Query\Criterion\Id([1, 2]); + +$query = new SessionQuery($criteria); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/is_active_criterion.md b/docs/search/collaborative_editing_search_reference/is_active_criterion.md new file mode 100644 index 0000000000..c2e8a5a1a3 --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/is_active_criterion.md @@ -0,0 +1,19 @@ +# IsActive Criterion + +The `IsActive` Search Criterion searches for sessions based on active status. + +## Arguments + +- (optional) `value` - bool representing the whether to search for active (default true) or inactive (false) sessions. + +## Example + +```php +$criteria = new Ibexa\Contracts\Collaboration\Session\Query\Criterion\IsActive(); + +OR + +$criteria = new Ibexa\Contracts\Collaboration\Session\Query\Criterion\IsActive(false); + +$query = new SessionQuery($criteria); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/language_id_criterion.md b/docs/search/collaborative_editing_search_reference/language_id_criterion.md new file mode 100644 index 0000000000..bdde8d9a25 --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/language_id_criterion.md @@ -0,0 +1,19 @@ +# LanguageID Criterion + +The `LanguageID` Search Criterion searches for content sessions based on language ID of content item. + +## Arguments + +- `value` - integer(s) representing language id(s) + +## Example + +```php +$criteria = new Ibexa\Share\Session\Query\Criterion\LanguageId(1); + +OR + +$criteria = new Ibexa\Share\Session\Query\Criterion\LanguageId([1, 2]); + +$query = new SessionQuery($criteria); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/logical_and_criterion.md b/docs/search/collaborative_editing_search_reference/logical_and_criterion.md new file mode 100644 index 0000000000..3a14381f3c --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/logical_and_criterion.md @@ -0,0 +1,14 @@ +# LogicalAnd Criterion + +The `LogicalAnd` Search Criterion matches combined by the logical operator. + +## Example + +```php +$criteria = Ibexa\Contracts\Collaboration\Session\Query\Criterion\LogicalAnd( + new Ibexa\Contracts\Collaboration\Session\Query\Criterion\IsActive(), + new Ibexa\Contracts\Collaboration\Session\Query\Criterion\Type('content') +); + +$query = new SessionQuery($criteria); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/logical_or_criterion.md b/docs/search/collaborative_editing_search_reference/logical_or_criterion.md new file mode 100644 index 0000000000..1bafe11a68 --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/logical_or_criterion.md @@ -0,0 +1,14 @@ +# LogicalOr Criterion + +The `LogicalOr` Search Criterion matches combined by the logical operator. + +## Example + +```php +$criteria = Ibexa\Contracts\Collaboration\Session\Query\Criterion\LogicalOr( , + new Ibexa\Contracts\Collaboration\Session\Query\Criterion\Id(1), + new Ibexa\Contracts\Collaboration\Session\Query\Criterion\Token('12345-12345-12345-12345') +); + +$query = new SessionQuery($criteria); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/owner_criterion.md b/docs/search/collaborative_editing_search_reference/owner_criterion.md new file mode 100644 index 0000000000..7d4a6ed56c --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/owner_criterion.md @@ -0,0 +1,22 @@ +# Owner Criterion + +The `Owner` Search Criterion searches for sessions based on session Owner. + +## Arguments + +- `value` - user(s) to be matched, provided as a UserReference object + +## Example + +```php +$user = $this->userService->loadUserByLogin('foo'); +$currentUser = $this->permissionResolver->getCurrentUserReference(); + +$criteria = new Ibexa\Contracts\Collaboration\Session\Query\Criterion\Owner($user); + +OR + +$criteria = new Ibexa\Contracts\Collaboration\Session\Query\Criterion\Owner([$user, $currentUser]); + +$query = new SessionQuery($criteria); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/token_criterion.md b/docs/search/collaborative_editing_search_reference/token_criterion.md new file mode 100644 index 0000000000..f4a32d6168 --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/token_criterion.md @@ -0,0 +1,19 @@ +# Token Criterion + +The `Token` Search Criterion searches for sessions based on session token. + +## Arguments + +- `value` - string(s) representing the session token(s) + +## Example + +```php +$criteria = new Ibexa\Contracts\Collaboration\Session\Query\Criterion\Token('12345-12345-12345-12345-12345'); + +OR + +$criteria = new Ibexa\Contracts\Collaboration\Session\Query\Criterion\Token(['12345-12345-12345-12345-12345', '12345-67890-098765-54321-12345']); + +$query = new SessionQuery($criteria); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/type_criterion.md b/docs/search/collaborative_editing_search_reference/type_criterion.md new file mode 100644 index 0000000000..526affb2de --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/type_criterion.md @@ -0,0 +1,19 @@ +# Type Criterion + +The `Type` Search Criterion searches for sessions based on session type. + +## Arguments + +- `value` - string(s) representing the session type(s) + +## Example + +```php +$criteria = new Ibexa\Contracts\Collaboration\Session\Query\Criterion\Type('content'); + +OR + +$criteria = new Ibexa\Contracts\Collaboration\Session\Query\Criterion\Type(['content', 'product']); + +$query = new SessionQuery($criteria); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/updated_at_criterion.md b/docs/search/collaborative_editing_search_reference/updated_at_criterion.md new file mode 100644 index 0000000000..38085ea451 --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/updated_at_criterion.md @@ -0,0 +1,19 @@ +# UpdatedAt Criterion + +The `UpdatedAt` Search Criterion searches for sessions based on the date when they were updated. + +## Arguments + +- `value` - date to be matched, provided as a DateTimeInterface object +- `operator` - optional operator string (EQ, GT, GTE, LT, LTE) + +## Example + +```php +$criteria = new Ibexa\Contracts\Collaboration\Session\Query\Criterion\UpdatedAt( + new DateTime('2025-05-01 14:07:02'), + 'GTE' +); + +$query = new SessionQuery($criteria); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/user_id_criterion.md b/docs/search/collaborative_editing_search_reference/user_id_criterion.md new file mode 100644 index 0000000000..56d2b58e1d --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/user_id_criterion.md @@ -0,0 +1,22 @@ +# UserID Criterion + +The `UserID` Search Criterion searches for sessions based on internal participants. + +## Arguments + +- `value` - user(s) to be matched, provided as a UserReference object + +## Example + +```php +$user = $this->userService->loadUserByLogin('foo'); +$currentUser = $this->permissionResolver->getCurrentUserReference(); + +$criteria = new Ibexa\Contracts\Collaboration\Session\Query\Criterion\UserId($user); + +OR + +$criteria = new Ibexa\Contracts\Collaboration\Session\Query\Criterion\UserId([$user, $currentUser]); + +$query = new SessionQuery($criteria); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/version_no_criterion.md b/docs/search/collaborative_editing_search_reference/version_no_criterion.md new file mode 100644 index 0000000000..3cab93e278 --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/version_no_criterion.md @@ -0,0 +1,19 @@ +# VersionNo Criterion + +The `VersionNo` Search Criterion searches for content sessions based on version number of content item. + +## Arguments + +- `value` - integer(s) representing version number(s) + +## Example + +```php +$criteria = new Ibexa\Share\Session\Query\Criterion\VersionNo(1); + +OR + +$criteria = new Ibexa\Share\Session\Query\Criterion\VersionNo([1, 2]); + +$query = new SessionQuery($criteria); +``` \ No newline at end of file From e65c54b9b6eae3b721f66e73b85eb11485182d8a Mon Sep 17 00:00:00 2001 From: julitafalcondusza Date: Tue, 2 Sep 2025 12:12:07 +0200 Subject: [PATCH 07/12] new criterions and sort clauses, fixes --- .../extend_collaborative_editing.md | 14 ---------- .../email_criterion.md | 19 -------------- .../created_at_invitation_criterion.md | 23 ++++++++++++++++ .../created_at_invitation_sort_clause.md | 19 ++++++++++++++ .../invitation/id_invitation_criterion.md | 23 ++++++++++++++++ .../invitation_id_invitation_sort_clause.md | 19 ++++++++++++++ ...nvitation_status_invitation_sort_clause.md | 19 ++++++++++++++ .../logical_and_invitation_criterion.md | 20 ++++++++++++++ .../logical_or_invitation_criterion.md | 18 +++++++++++++ .../invitation/sender_invitation_criterion.md | 26 +++++++++++++++++++ .../session_invitation_criterion.md | 26 +++++++++++++++++++ .../invitation/status_invitation_criterion.md | 23 ++++++++++++++++ .../updated_at_invitation_criterion.md | 23 ++++++++++++++++ .../updated_at_invitation_sort_clause.md | 19 ++++++++++++++ .../content_id_session_criterion.md} | 4 +++ .../content_session_criterion.md | 4 +++ .../created_at_session_criterion.md} | 6 ++++- .../session/created_at_session_sort_clause.md | 19 ++++++++++++++ .../session/email_session_criterion.md | 23 ++++++++++++++++ .../id_session_criterion.md} | 10 ++++--- .../is_active_session_criterion.md} | 4 +++ .../language_id_session_criterion.md} | 4 +++ .../logical_and_session_criterion.md} | 6 ++++- .../logical_or_session_criterion.md} | 6 ++++- .../owner_session_criterion.md} | 4 +++ .../session/session_id_session_sort_clause.md | 19 ++++++++++++++ .../token_session_criterion.md} | 4 +++ .../type_session_criterion.md} | 4 +++ .../updated_at_session_criterion.md} | 6 ++++- .../session/updated_at_session_sort_clause.md | 19 ++++++++++++++ .../user_id_session_criterion.md} | 8 ++++-- .../version_no_session_criterion.md} | 4 +++ 32 files changed, 403 insertions(+), 42 deletions(-) delete mode 100644 docs/content_management/collaborative_editing/extend_collaborative_editing.md delete mode 100644 docs/search/collaborative_editing_search_reference/email_criterion.md create mode 100644 docs/search/collaborative_editing_search_reference/invitation/created_at_invitation_criterion.md create mode 100644 docs/search/collaborative_editing_search_reference/invitation/created_at_invitation_sort_clause.md create mode 100644 docs/search/collaborative_editing_search_reference/invitation/id_invitation_criterion.md create mode 100644 docs/search/collaborative_editing_search_reference/invitation/invitation_id_invitation_sort_clause.md create mode 100644 docs/search/collaborative_editing_search_reference/invitation/invitation_status_invitation_sort_clause.md create mode 100644 docs/search/collaborative_editing_search_reference/invitation/logical_and_invitation_criterion.md create mode 100644 docs/search/collaborative_editing_search_reference/invitation/logical_or_invitation_criterion.md create mode 100644 docs/search/collaborative_editing_search_reference/invitation/sender_invitation_criterion.md create mode 100644 docs/search/collaborative_editing_search_reference/invitation/session_invitation_criterion.md create mode 100644 docs/search/collaborative_editing_search_reference/invitation/status_invitation_criterion.md create mode 100644 docs/search/collaborative_editing_search_reference/invitation/updated_at_invitation_criterion.md create mode 100644 docs/search/collaborative_editing_search_reference/invitation/updated_at_invitation_sort_clause.md rename docs/search/collaborative_editing_search_reference/{content_id_criterion.md => session/content_id_session_criterion.md} (88%) rename docs/search/collaborative_editing_search_reference/{ => session}/content_session_criterion.md (91%) rename docs/search/collaborative_editing_search_reference/{created_at_criterion.md => session/created_at_session_criterion.md} (71%) create mode 100644 docs/search/collaborative_editing_search_reference/session/created_at_session_sort_clause.md create mode 100644 docs/search/collaborative_editing_search_reference/session/email_session_criterion.md rename docs/search/collaborative_editing_search_reference/{id_criterion.md => session/id_session_criterion.md} (58%) rename docs/search/collaborative_editing_search_reference/{is_active_criterion.md => session/is_active_session_criterion.md} (90%) rename docs/search/collaborative_editing_search_reference/{language_id_criterion.md => session/language_id_session_criterion.md} (88%) rename docs/search/collaborative_editing_search_reference/{logical_and_criterion.md => session/logical_and_session_criterion.md} (70%) rename docs/search/collaborative_editing_search_reference/{logical_or_criterion.md => session/logical_or_session_criterion.md} (71%) rename docs/search/collaborative_editing_search_reference/{owner_criterion.md => session/owner_session_criterion.md} (92%) create mode 100644 docs/search/collaborative_editing_search_reference/session/session_id_session_sort_clause.md rename docs/search/collaborative_editing_search_reference/{token_criterion.md => session/token_session_criterion.md} (91%) rename docs/search/collaborative_editing_search_reference/{type_criterion.md => session/type_session_criterion.md} (90%) rename docs/search/collaborative_editing_search_reference/{updated_at_criterion.md => session/updated_at_session_criterion.md} (84%) create mode 100644 docs/search/collaborative_editing_search_reference/session/updated_at_session_sort_clause.md rename docs/search/collaborative_editing_search_reference/{user_id_criterion.md => session/user_id_session_criterion.md} (61%) rename docs/search/collaborative_editing_search_reference/{version_no_criterion.md => session/version_no_session_criterion.md} (89%) diff --git a/docs/content_management/collaborative_editing/extend_collaborative_editing.md b/docs/content_management/collaborative_editing/extend_collaborative_editing.md deleted file mode 100644 index ce47649cf8..0000000000 --- a/docs/content_management/collaborative_editing/extend_collaborative_editing.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -description: Extend Collaborative editing feature by creating custom session or participant type. -month_change: false ---- - -# Extend Collaborative editing - -## Custom Session Type use case - -### Create custom Session Type - -## Custom Participant Type use case - -### Create custom Participant Type \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/email_criterion.md b/docs/search/collaborative_editing_search_reference/email_criterion.md deleted file mode 100644 index 57e3b806dc..0000000000 --- a/docs/search/collaborative_editing_search_reference/email_criterion.md +++ /dev/null @@ -1,19 +0,0 @@ -# Email Criterion - -The `Email` Search Criterion searches for sessions based on participant email. - -## Arguments - -- `value` - string(s) representing the Participant email(s) - -## Example - -```php -$criteria = new Ibexa\Contracts\Collaboration\Session\Query\Criterion\Email('participant@link.invalid'); - -OR - -$criteria = new Ibexa\Contracts\Collaboration\Session\Query\Criterion\Email(['participant1@link.invalid', 'participant2@link.invalid']); - -$query = new SessionQuery($criteria); -``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/invitation/created_at_invitation_criterion.md b/docs/search/collaborative_editing_search_reference/invitation/created_at_invitation_criterion.md new file mode 100644 index 0000000000..c4f80dedba --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/invitation/created_at_invitation_criterion.md @@ -0,0 +1,23 @@ +--- +description: CreatedAt Search Criterion +--- + +# CreatedAt Search Criterion + +The `CreatedAt` Search Criterion searches for invitations based on the date they were created. + +## Arguments + +- `value` - date to be matched, provided as a DateTimeInterface object +- `operator` - optional operator string (EQ, GT, GTE, LT, LTE) + +## Example + +```php +$criteria = new \Ibexa\Contracts\Collaboration\Invitation\Query\Criterion\CreatedAt( + new DateTime('2025-05-01 14:07:02'), + 'GTE' +); + +$query = new InvitationQuery($criteria); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/invitation/created_at_invitation_sort_clause.md b/docs/search/collaborative_editing_search_reference/invitation/created_at_invitation_sort_clause.md new file mode 100644 index 0000000000..d9308d9d04 --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/invitation/created_at_invitation_sort_clause.md @@ -0,0 +1,19 @@ +--- +description: CreatedAt Sort Clause +--- + +# CreatedAt Sort Clause + +The `CreatedAt` Sort Clause sorts search results by the date and time of the creation of invitation. + +## Arguments + +- (optional) `direction` - SortDirection constant, either SortDirection::ASC or SortDirection::DESC. + +## Example + +```php +$sortClause = [new \Ibexa\Contracts\Collaboration\Invitation\Query\SortClause\CreatedAt(SortDirection::DESC)]); + +$query = new InvitationQuery($criteria, sortClause); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/invitation/id_invitation_criterion.md b/docs/search/collaborative_editing_search_reference/invitation/id_invitation_criterion.md new file mode 100644 index 0000000000..7a44e27af4 --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/invitation/id_invitation_criterion.md @@ -0,0 +1,23 @@ +--- +description: Id Search Criterion +--- + +# Id Criterion + +The `Id` Search Criterion searches for invitations based on invitation ID. + +## Arguments + +- `value` - integer(s) representing the Invitation ID(s) + +## Example + +```php +$criteria = new \Ibexa\Contracts\Collaboration\Invitation\Query\Criterion\Id(1); + +OR + +$criteria = new \Ibexa\Contracts\Collaboration\Invitation\Query\Criterion\Id([1, 2]); + +$query = new SessionQuery($criteria); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/invitation/invitation_id_invitation_sort_clause.md b/docs/search/collaborative_editing_search_reference/invitation/invitation_id_invitation_sort_clause.md new file mode 100644 index 0000000000..2b5af37d6f --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/invitation/invitation_id_invitation_sort_clause.md @@ -0,0 +1,19 @@ +--- +description: InvitationId Sort Clause +--- + +# InvitationId Sort Clause + +The `InvitationId` Sort Clause sorts search results by invitation ID. + +## Arguments + +- (optional) `direction` - SortDirection constant, either SortDirection::ASC or SortDirection::DESC. + +## Example + +```php +$sortClause = [new \Ibexa\Contracts\Collaboration\Invitation\Query\SortClause\Id(SortDirection::DESC)]); + +$query = new InvitationQuery($criteria, sortClause); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/invitation/invitation_status_invitation_sort_clause.md b/docs/search/collaborative_editing_search_reference/invitation/invitation_status_invitation_sort_clause.md new file mode 100644 index 0000000000..e097d7eadb --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/invitation/invitation_status_invitation_sort_clause.md @@ -0,0 +1,19 @@ +--- +description: InvitationStatus Sort Clause +--- + +# InvitationStatus Sort Clause + +The `InvitationStatus` Sort Clause sorts search results by invitation status. + +## Arguments + +- (optional) `direction` - SortDirection constant, either SortDirection::ASC or SortDirection::DESC. + +## Example + +```php +$sortClause = [new \Ibexa\Contracts\Collaboration\Invitation\Query\SortClause\Status(SortDirection::DESC)]); + +$query = new InvitationQuery($criteria, sortClause); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/invitation/logical_and_invitation_criterion.md b/docs/search/collaborative_editing_search_reference/invitation/logical_and_invitation_criterion.md new file mode 100644 index 0000000000..9c109c1dab --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/invitation/logical_and_invitation_criterion.md @@ -0,0 +1,20 @@ +--- +description: LogicalAnd Search Criterion +--- + +# LogicalAnd Criterion + +The `LogicalAnd` Search Criterion matches combined invitations by the logical operator. + +## Example + +```php +$currentUser = $this->permissionResolver->getCurrentUserReference(); + +$criteria = \Ibexa\Contracts\Collaboration\Invitation\Query\Criterion\LogicalAnd( + new \Ibexa\Contracts\Collaboration\Invitation\Query\Criterion\Status('pending'), + new \Ibexa\Contracts\Collaboration\Invitation\Query\Criterion\Sender($currentUser) +); + +$query = new InvitationQuery($criteria); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/invitation/logical_or_invitation_criterion.md b/docs/search/collaborative_editing_search_reference/invitation/logical_or_invitation_criterion.md new file mode 100644 index 0000000000..22f78914d0 --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/invitation/logical_or_invitation_criterion.md @@ -0,0 +1,18 @@ +--- +description: LogicalOr Search Criterion +--- + +# LogicalOr Criterion + +The `LogicalOr` Search Criterion matches combined invitations by the logical operator. + +## Example + +```php +$criteria = \Ibexa\Contracts\Collaboration\Invitation\Query\Criterion\LogicalOr( , + new \Ibexa\Contracts\Collaboration\Invitation\Query\Criterion\Id(1), + new \Ibexa\Contracts\Collaboration\Invitation\Query\Criterion\Status('pending') +); + +$query = new InvitationQuery($criteria); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/invitation/sender_invitation_criterion.md b/docs/search/collaborative_editing_search_reference/invitation/sender_invitation_criterion.md new file mode 100644 index 0000000000..5c6a21850c --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/invitation/sender_invitation_criterion.md @@ -0,0 +1,26 @@ +--- +description: Sender Search Criterion +--- + +# Sender Search Criterion + +The `Sender` Search Criterion searches for invitations based on invitation sender. + +## Arguments + +- `value` - user(s) to be matched, provided as a UserReference object + +## Example + +```php +$user = $this->userService->loadUserByLogin('foo'); +$currentUser = $this->permissionResolver->getCurrentUserReference(); + +$criteria = new \Ibexa\Contracts\Collaboration\Invitation\Query\Criterion\Owner($user); + +OR + +$criteria = new \Ibexa\Contracts\Collaboration\Invitation\Query\Criterion\Owner([$user, $currentUser]); + +$query = new InvitationQuery($criteria); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/invitation/session_invitation_criterion.md b/docs/search/collaborative_editing_search_reference/invitation/session_invitation_criterion.md new file mode 100644 index 0000000000..21646bc637 --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/invitation/session_invitation_criterion.md @@ -0,0 +1,26 @@ +--- +description: Session Search Criterion +--- + +# Session Search Criterion + +The `Session` Search Criterion searches for invitations based on session. + +## Arguments + +- `value` - objects(s) representing the session(s) and implementing `\Ibexa\Contracts\Collaboration\Session\SessionInterface` + +## Example + +```php +$firstSession = $this->sessionService->getSession(1); +$secondSession = $this->sessionService->getSession(2); + +$criteria = new \Ibexa\Contracts\Collaboration\Invitation\Query\Criterion\Session($firstSession); + +OR + +$criteria = new \Ibexa\Contracts\Collaboration\Invitation\Query\Criterion\Session([$firstSession, $secondSession]); + +$query = new InvitationQuery($criteria); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/invitation/status_invitation_criterion.md b/docs/search/collaborative_editing_search_reference/invitation/status_invitation_criterion.md new file mode 100644 index 0000000000..25f4b731fe --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/invitation/status_invitation_criterion.md @@ -0,0 +1,23 @@ +--- +description: Status Search Criterion +--- + +# Status Search Criterion + +The `Status` Search Criterion searches for invitations based on status. + +## Arguments + +- `value` - string(s) representing the invitation status(es) + +## Example + +```php +$criteria = new \Ibexa\Contracts\Collaboration\Invitation\Query\Criterion\Type('pending'); + +OR + +$criteria = new \Ibexa\Contracts\Collaboration\Invitation\Query\Criterion\Type(['pending', 'accepted']); + +$query = new InvitationQuery($criteria); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/invitation/updated_at_invitation_criterion.md b/docs/search/collaborative_editing_search_reference/invitation/updated_at_invitation_criterion.md new file mode 100644 index 0000000000..c56ed9671a --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/invitation/updated_at_invitation_criterion.md @@ -0,0 +1,23 @@ +--- +description: UpdatedAt Search Criterion +--- + +# UpdatedAt Criterion + +The `UpdatedAt` Search Criterion searches for invitations based on the date they were updated. + +## Arguments + +- `value` - date to be matched, provided as a DateTimeInterface object +- `operator` - optional operator string (EQ, GT, GTE, LT, LTE) + +## Example + +```php +$criteria = new \Ibexa\Contracts\Collaboration\Invitation\Query\Criterion\UpdatedAt( + new DateTime('2025-05-01 14:07:02'), + 'GTE' +); + +$query = new InvitationQuery($criteria); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/invitation/updated_at_invitation_sort_clause.md b/docs/search/collaborative_editing_search_reference/invitation/updated_at_invitation_sort_clause.md new file mode 100644 index 0000000000..0d52a0b86f --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/invitation/updated_at_invitation_sort_clause.md @@ -0,0 +1,19 @@ +--- +description: UpdatedAt Sort Clause +--- + +# UpdatedAt Sort Clause + +The UpdatedAt Sort Clause sorts search results by the date and time when invitation was updated. + +## Arguments + +- (optional) `direction` - SortDirection constant, either SortDirection::ASC or SortDirection::DESC. + +## Example + +```php +$sortClause = [new \Ibexa\Contracts\Collaboration\Invitation\Query\SortClause\UpdatedAt(SortDirection::DESC)]); + +$query = new InvitationQuery($criteria, sortClause); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/content_id_criterion.md b/docs/search/collaborative_editing_search_reference/session/content_id_session_criterion.md similarity index 88% rename from docs/search/collaborative_editing_search_reference/content_id_criterion.md rename to docs/search/collaborative_editing_search_reference/session/content_id_session_criterion.md index 781467d58a..3a3bffe5e1 100644 --- a/docs/search/collaborative_editing_search_reference/content_id_criterion.md +++ b/docs/search/collaborative_editing_search_reference/session/content_id_session_criterion.md @@ -1,3 +1,7 @@ +--- +description: ContentID Search Criterion +--- + # ContentID Criterion The `ContentID` Search Criterion searches for content sessions based on content item ID. diff --git a/docs/search/collaborative_editing_search_reference/content_session_criterion.md b/docs/search/collaborative_editing_search_reference/session/content_session_criterion.md similarity index 91% rename from docs/search/collaborative_editing_search_reference/content_session_criterion.md rename to docs/search/collaborative_editing_search_reference/session/content_session_criterion.md index 36c6bdd83a..d01c731414 100644 --- a/docs/search/collaborative_editing_search_reference/content_session_criterion.md +++ b/docs/search/collaborative_editing_search_reference/session/content_session_criterion.md @@ -1,3 +1,7 @@ +--- +description: ContentSession Search Criterion +--- + # ContentSession Criterion The `ContentSession` Search Criterion searches for contentId, versionNo, languageId. diff --git a/docs/search/collaborative_editing_search_reference/created_at_criterion.md b/docs/search/collaborative_editing_search_reference/session/created_at_session_criterion.md similarity index 71% rename from docs/search/collaborative_editing_search_reference/created_at_criterion.md rename to docs/search/collaborative_editing_search_reference/session/created_at_session_criterion.md index db7b908c95..7183bc8025 100644 --- a/docs/search/collaborative_editing_search_reference/created_at_criterion.md +++ b/docs/search/collaborative_editing_search_reference/session/created_at_session_criterion.md @@ -1,6 +1,10 @@ +--- +description: CreatedAt Search Criterion +--- + # CreatedAt Criterion -The `CreatedAtCriterion` Search Criterion searches for sessions based on the date when they were created. +The `CreatedAt` Search Criterion searches for sessions based on the date when they were created. ## Arguments diff --git a/docs/search/collaborative_editing_search_reference/session/created_at_session_sort_clause.md b/docs/search/collaborative_editing_search_reference/session/created_at_session_sort_clause.md new file mode 100644 index 0000000000..ec7dadfcab --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/session/created_at_session_sort_clause.md @@ -0,0 +1,19 @@ +--- +description: CreatedAt Sort Clause +--- + +# CreatedAt Sort Clause + +The `CreatedAt` Sort Clause sorts search results by the date and time of the creation of session. + +## Arguments + +- (optional) `direction` - SortDirection constant, either SortDirection::ASC or SortDirection::DESC. + +## Example + +```php +$sortClause = [new \Ibexa\Contracts\Collaboration\Session\Query\SortClause\CreatedAt(SortDirection::DESC)]); + +$query = new SessionQuery($criteria, sortClause); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/session/email_session_criterion.md b/docs/search/collaborative_editing_search_reference/session/email_session_criterion.md new file mode 100644 index 0000000000..dfb75b00fe --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/session/email_session_criterion.md @@ -0,0 +1,23 @@ +--- +description: Email Search Criterion +--- + +# Email Criterion + +The `Email` Search Criterion searches for sessions based on external participant email. + +## Arguments + +- `value` - string(s) representing the Participant email(s) + +## Example + +```php +$criteria = new Ibexa\Contracts\Collaboration\Session\Query\Criterion\Email('participant@link.invalid'); + +OR + +$criteria = new \Ibexa\Contracts\Collaboration\Session\Query\Criterion\Email(...['participant1@link.invalid', 'participant2@link.invalid']); + +$query = new SessionQuery($criteria); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/id_criterion.md b/docs/search/collaborative_editing_search_reference/session/id_session_criterion.md similarity index 58% rename from docs/search/collaborative_editing_search_reference/id_criterion.md rename to docs/search/collaborative_editing_search_reference/session/id_session_criterion.md index 1b4152c7c4..172511fbac 100644 --- a/docs/search/collaborative_editing_search_reference/id_criterion.md +++ b/docs/search/collaborative_editing_search_reference/session/id_session_criterion.md @@ -1,10 +1,14 @@ -# ID Criterion +--- +description: Id Search Criterion +--- -The `ID` Search Criterion searches for sessions based on session ID. +# Id Criterion + +The `Id` Search Criterion searches for sessions based on session ID. ## Arguments -- `value` - integer(s) representing the Session id(s) +- `value` - integer(s) representing the Session ID(s) ## Example diff --git a/docs/search/collaborative_editing_search_reference/is_active_criterion.md b/docs/search/collaborative_editing_search_reference/session/is_active_session_criterion.md similarity index 90% rename from docs/search/collaborative_editing_search_reference/is_active_criterion.md rename to docs/search/collaborative_editing_search_reference/session/is_active_session_criterion.md index c2e8a5a1a3..e4b0d298e2 100644 --- a/docs/search/collaborative_editing_search_reference/is_active_criterion.md +++ b/docs/search/collaborative_editing_search_reference/session/is_active_session_criterion.md @@ -1,3 +1,7 @@ +--- +description: IsActive Search Criterion +--- + # IsActive Criterion The `IsActive` Search Criterion searches for sessions based on active status. diff --git a/docs/search/collaborative_editing_search_reference/language_id_criterion.md b/docs/search/collaborative_editing_search_reference/session/language_id_session_criterion.md similarity index 88% rename from docs/search/collaborative_editing_search_reference/language_id_criterion.md rename to docs/search/collaborative_editing_search_reference/session/language_id_session_criterion.md index bdde8d9a25..8ab3c9996b 100644 --- a/docs/search/collaborative_editing_search_reference/language_id_criterion.md +++ b/docs/search/collaborative_editing_search_reference/session/language_id_session_criterion.md @@ -1,3 +1,7 @@ +--- +description: LanguageID Search Criterion +--- + # LanguageID Criterion The `LanguageID` Search Criterion searches for content sessions based on language ID of content item. diff --git a/docs/search/collaborative_editing_search_reference/logical_and_criterion.md b/docs/search/collaborative_editing_search_reference/session/logical_and_session_criterion.md similarity index 70% rename from docs/search/collaborative_editing_search_reference/logical_and_criterion.md rename to docs/search/collaborative_editing_search_reference/session/logical_and_session_criterion.md index 3a14381f3c..3308e7390d 100644 --- a/docs/search/collaborative_editing_search_reference/logical_and_criterion.md +++ b/docs/search/collaborative_editing_search_reference/session/logical_and_session_criterion.md @@ -1,6 +1,10 @@ +--- +description: LogicalAnd Search Criterion +--- + # LogicalAnd Criterion -The `LogicalAnd` Search Criterion matches combined by the logical operator. +The `LogicalAnd` Search Criterion matches combined sessions by the logical operator. ## Example diff --git a/docs/search/collaborative_editing_search_reference/logical_or_criterion.md b/docs/search/collaborative_editing_search_reference/session/logical_or_session_criterion.md similarity index 71% rename from docs/search/collaborative_editing_search_reference/logical_or_criterion.md rename to docs/search/collaborative_editing_search_reference/session/logical_or_session_criterion.md index 1bafe11a68..fcad1ef9b0 100644 --- a/docs/search/collaborative_editing_search_reference/logical_or_criterion.md +++ b/docs/search/collaborative_editing_search_reference/session/logical_or_session_criterion.md @@ -1,6 +1,10 @@ +--- +description: LogicalOr Search Criterion +--- + # LogicalOr Criterion -The `LogicalOr` Search Criterion matches combined by the logical operator. +The `LogicalOr` Search Criterion matches combined sessions by the logical operator. ## Example diff --git a/docs/search/collaborative_editing_search_reference/owner_criterion.md b/docs/search/collaborative_editing_search_reference/session/owner_session_criterion.md similarity index 92% rename from docs/search/collaborative_editing_search_reference/owner_criterion.md rename to docs/search/collaborative_editing_search_reference/session/owner_session_criterion.md index 7d4a6ed56c..e86c31b6b3 100644 --- a/docs/search/collaborative_editing_search_reference/owner_criterion.md +++ b/docs/search/collaborative_editing_search_reference/session/owner_session_criterion.md @@ -1,3 +1,7 @@ +--- +description: Owner Search Criterion +--- + # Owner Criterion The `Owner` Search Criterion searches for sessions based on session Owner. diff --git a/docs/search/collaborative_editing_search_reference/session/session_id_session_sort_clause.md b/docs/search/collaborative_editing_search_reference/session/session_id_session_sort_clause.md new file mode 100644 index 0000000000..9f00e2b1f3 --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/session/session_id_session_sort_clause.md @@ -0,0 +1,19 @@ +--- +description: SessionId Sort Clause +--- + +# SessionId Sort Clause + +The `SessionId` Sort Clause sorts search results by session ID. + +## Arguments + +- (optional) `direction` - SortDirection constant, either SortDirection::ASC or SortDirection::DESC. + +## Example + +```php +$sortClause = [new \Ibexa\Contracts\Collaboration\Session\Query\SortClause\Id(SortDirection::DESC)]); + +$query = new SessionQuery($criteria, sortClause); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/token_criterion.md b/docs/search/collaborative_editing_search_reference/session/token_session_criterion.md similarity index 91% rename from docs/search/collaborative_editing_search_reference/token_criterion.md rename to docs/search/collaborative_editing_search_reference/session/token_session_criterion.md index f4a32d6168..05c4b6f55c 100644 --- a/docs/search/collaborative_editing_search_reference/token_criterion.md +++ b/docs/search/collaborative_editing_search_reference/session/token_session_criterion.md @@ -1,3 +1,7 @@ +--- +description: Token Search Criterion +--- + # Token Criterion The `Token` Search Criterion searches for sessions based on session token. diff --git a/docs/search/collaborative_editing_search_reference/type_criterion.md b/docs/search/collaborative_editing_search_reference/session/type_session_criterion.md similarity index 90% rename from docs/search/collaborative_editing_search_reference/type_criterion.md rename to docs/search/collaborative_editing_search_reference/session/type_session_criterion.md index 526affb2de..5ee59b10ea 100644 --- a/docs/search/collaborative_editing_search_reference/type_criterion.md +++ b/docs/search/collaborative_editing_search_reference/session/type_session_criterion.md @@ -1,3 +1,7 @@ +--- +description: Type Search Criterion +--- + # Type Criterion The `Type` Search Criterion searches for sessions based on session type. diff --git a/docs/search/collaborative_editing_search_reference/updated_at_criterion.md b/docs/search/collaborative_editing_search_reference/session/updated_at_session_criterion.md similarity index 84% rename from docs/search/collaborative_editing_search_reference/updated_at_criterion.md rename to docs/search/collaborative_editing_search_reference/session/updated_at_session_criterion.md index 38085ea451..5d120bab9f 100644 --- a/docs/search/collaborative_editing_search_reference/updated_at_criterion.md +++ b/docs/search/collaborative_editing_search_reference/session/updated_at_session_criterion.md @@ -1,6 +1,10 @@ +--- +description: UpdatedAt Search Criterion +--- + # UpdatedAt Criterion -The `UpdatedAt` Search Criterion searches for sessions based on the date when they were updated. +The `UpdatedAt` Search Criterion searches for sessions based on the date they were updated. ## Arguments diff --git a/docs/search/collaborative_editing_search_reference/session/updated_at_session_sort_clause.md b/docs/search/collaborative_editing_search_reference/session/updated_at_session_sort_clause.md new file mode 100644 index 0000000000..7fd80dc04d --- /dev/null +++ b/docs/search/collaborative_editing_search_reference/session/updated_at_session_sort_clause.md @@ -0,0 +1,19 @@ +--- +description: UpdatedAt Sort Clause +--- + +# UpdatedAt Sort Clause + +The `UpdatedAt` Sort Clause sorts search results by the date and time when session was updated. + +## Arguments + +- (optional) `direction` - SortDirection constant, either SortDirection::ASC or SortDirection::DESC. + +## Example + +```php +$sortClause = [new \Ibexa\Contracts\Collaboration\Session\Query\SortClause\UpdatedAt(SortDirection::DESC)]); + +$query = new SessionQuery($criteria, sortClause); +``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/user_id_criterion.md b/docs/search/collaborative_editing_search_reference/session/user_id_session_criterion.md similarity index 61% rename from docs/search/collaborative_editing_search_reference/user_id_criterion.md rename to docs/search/collaborative_editing_search_reference/session/user_id_session_criterion.md index 56d2b58e1d..4bae389868 100644 --- a/docs/search/collaborative_editing_search_reference/user_id_criterion.md +++ b/docs/search/collaborative_editing_search_reference/session/user_id_session_criterion.md @@ -1,3 +1,7 @@ +--- +description: UserID Search Criterion +--- + # UserID Criterion The `UserID` Search Criterion searches for sessions based on internal participants. @@ -12,11 +16,11 @@ The `UserID` Search Criterion searches for sessions based on internal participan $user = $this->userService->loadUserByLogin('foo'); $currentUser = $this->permissionResolver->getCurrentUserReference(); -$criteria = new Ibexa\Contracts\Collaboration\Session\Query\Criterion\UserId($user); +$criteria = new \Ibexa\Contracts\Collaboration\Session\Query\Criterion\UserId($user); OR -$criteria = new Ibexa\Contracts\Collaboration\Session\Query\Criterion\UserId([$user, $currentUser]); +$criteria = new \Ibexa\Contracts\Collaboration\Session\Query\Criterion\UserId(…[$user, $currentUser]); $query = new SessionQuery($criteria); ``` \ No newline at end of file diff --git a/docs/search/collaborative_editing_search_reference/version_no_criterion.md b/docs/search/collaborative_editing_search_reference/session/version_no_session_criterion.md similarity index 89% rename from docs/search/collaborative_editing_search_reference/version_no_criterion.md rename to docs/search/collaborative_editing_search_reference/session/version_no_session_criterion.md index 3cab93e278..a92f0114ae 100644 --- a/docs/search/collaborative_editing_search_reference/version_no_criterion.md +++ b/docs/search/collaborative_editing_search_reference/session/version_no_session_criterion.md @@ -1,3 +1,7 @@ +--- +description: VersionNo Search Criterion +--- + # VersionNo Criterion The `VersionNo` Search Criterion searches for content sessions based on version number of content item. From c0a31b622c37854525c7bd84f76d045c67bbac81 Mon Sep 17 00:00:00 2001 From: julitafalcondusza Date: Tue, 2 Sep 2025 12:23:07 +0200 Subject: [PATCH 08/12] mkdocs updated --- mkdocs.yml | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/mkdocs.yml b/mkdocs.yml index 70851670fe..7ee38878db 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -657,6 +657,33 @@ nav: - ObjectNameCriterion: search/activity_log_search_reference/object_name_criterion.md - UserCriterion: search/activity_log_search_reference/user_criterion.md - Action Configuration Search Criteria: search/ai_actions_search_reference/action_configuration_criteria.md + - Collaborative editing Search Criteria: + - Session: + - ContentId: search/collaborative_editing_search_reference/session/content_id_session_criterion.md + - Content: search/collaborative_editing_search_reference/session/content_session_criterion.md + - CreatedAt: search/collaborative_editing_search_reference/session/created_at_session_criterion.md + - Email: search/collaborative_editing_search_reference/session/email_session_criterion.md + - Id: search/collaborative_editing_search_reference/session/id_session_criterion.md + - IsActive: search/collaborative_editing_search_reference/session/is_active_session_criterion.md + - LanguageId: search/collaborative_editing_search_reference/session/language_id_session_criterion.md + - LogicalAnd: search/collaborative_editing_search_reference/session/logical_and_session_criterion.md + - LogicalOr: search/collaborative_editing_search_reference/session/logical_or_session_criterion.md + - Owner: search/collaborative_editing_search_reference/session/owner_session_criterion.md + - Token: search/collaborative_editing_search_reference/session/token_session_criterion.md + - Type: search/collaborative_editing_search_reference/session/type_session_criterion.md + - UpdatedAt: search/collaborative_editing_search_reference/session/updated_at_session_criterion.md + - UserId: search/collaborative_editing_search_reference/session/user_id_session_criterion.md + - VersionNo: search/collaborative_editing_search_reference/session/version_no_session_criterion.md + - Invitation: + - CreatedAt: search/collaborative_editing_search_reference/invitation/created_at_invitation_criterion.md + - Id: search/collaborative_editing_search_reference/invitation/id_invitation_criterion.md + - Invitation Id: search/collaborative_editing_search_reference/invitation/invitation_id_invitation_criterion.md + - LogicalAnd: search/collaborative_editing_search_reference/invitation/logical_and_invitation_criterion.md + - LogicalOr: search/collaborative_editing_search_reference/invitation/logical_or_invitation_criterion.md + - Sender: search/collaborative_editing_search_reference/invitation/sender_invitation_criterion.md + - Session: search/collaborative_editing_search_reference/invitation/session_invitation_criterion.md + - Status: search/collaborative_editing_search_reference/invitation/status_invitation_criterion.md + - UpdatedAt: search/collaborative_editing_search_reference/invitation/updated_at_invitation_criterion.md - Sort Clause reference: - General Sort Clauses: - General Sort Clause reference: search/sort_clause_reference/sort_clause_reference.md @@ -723,6 +750,16 @@ nav: - Id Sort Clause: search/url_search_reference/id_url_sort_clause.md - Url Sort Clause: search/url_search_reference/url_url_sort_clause.md - Activity Log Sort Clauses: search/activity_log_search_reference/activity_log_sort_clauses.md + - Collaborative editing Sort Clauses: + - Session: + - CreatedAt: search/collaborative_editing_search_reference/session/created_at_session_sort_clause.md + - SessionId: search/collaborative_editing_search_reference/session/session_id_session_sort_clause.md + - UpdatedAt: search/collaborative_editing_search_reference/session/updated_at_session_sort_clause.md + - Invitation: + - CreatedAt: search/collaborative_editing_search_reference/invitation/created_at_invitation_sort_clause.md + - InvitationId: search/collaborative_editing_search_reference/invitation/invitation_id_invitation_sort_clause.md + - InvitationStatus: search/collaborative_editing_search_reference/invitation/invitation_status_invitation_sort_clause.md + - UpdatedAt: search/collaborative_editing_search_reference/invitation/updated_at_invitation_sort_clause.md - Action Configuration Sort Clauses: search/ai_actions_search_reference/action_configuration_sort_clauses.md - Aggregation reference: # Content aggregations From cc33bc58fcd0282e97cf5b558b9e9498ba20c1b4 Mon Sep 17 00:00:00 2001 From: julitafalcondusza Date: Thu, 4 Sep 2025 09:10:20 +0200 Subject: [PATCH 09/12] collaboration events file removed from PR --- .../event_reference/collaboration_events.md | 40 ------------------- 1 file changed, 40 deletions(-) delete mode 100644 docs/api/event_reference/collaboration_events.md diff --git a/docs/api/event_reference/collaboration_events.md b/docs/api/event_reference/collaboration_events.md deleted file mode 100644 index 5747e1a226..0000000000 --- a/docs/api/event_reference/collaboration_events.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -description: Events that are triggered when working with collaborative editing feature. -page_type: reference -month_change: false ---- - -# Collaboration events - -## Invitation events - -| Event | Dispatched by | -|---|---| -|[BeforeCreateInvitationEvent](../php_api/php_api_reference/classes/)|[InvitationServicenterface](../php_api/php_api_reference/classes/.html)| -|[BeforeDeleteInvitationEvent](../php_api/php_api_reference/classes/)|[InvitationServicenterface](../php_api/php_api_reference/classes/.html)| -|[BeforeUpdateInvitationEvent](../php_api/php_api_reference/classes/)|[[InvitationServicenterface](../php_api/php_api_reference/classes/.html)| -|[CreateInvitationEvent](../php_api/php_api_reference/classes/)|[InvitationServiceInterface](../php_api/php_api_reference/classes/.html)| -|[DeleteInvitationEvent](../php_api/php_api_reference/classes/)|[InvitationServiceInterface](../php_api/php_api_reference/classes/.html)| -|[UpdateInvitationEvent](../php_api/php_api_reference/classes/)|[InvitationServiceInterface](../php_api/php_api_reference/classes/.html)| - -## Participant events - -| Event | Dispatched by | -|---|---| -|[AddParticipantEvent](../php_api/php_api_reference/classes/)|[SessionServiceInterface](../php_api/php_api_reference/classes/.html)| -|[BeforeAddParticipantEvent](../php_api/php_api_reference/classes/)|[SessionServiceInterface](../php_api/php_api_reference/classes/.html)| -|[BeforeRemoveParticipantEvent](../php_api/php_api_reference/classes/)|[SessionServiceInterface](../php_api/php_api_reference/classes/.html)| -|[BeforeUpdateParticipantEvent](../php_api/php_api_reference/classes/)|[SessionServiceInterface](../php_api/php_api_reference/classes/.html)| -|[RemoveParticipantEvent](../php_api/php_api_reference/classes/)|[SessionServiceInterface](../php_api/php_api_reference/classes/.html)| -|[UpdateParticipantEvent](../php_api/php_api_reference/classes/)|[SessionServiceInterface](../php_api/php_api_reference/classes/.html)| - -## Session events - -| Event | Dispatched by | -|---|---|---| -|[BeforeCreateSessionEvent](../php_api/php_api_reference/classes/)|[SessionServiceInterface](../php_api/php_api_reference/classes/.html)| -|[BeforeDeleteSessionEvent](../php_api/php_api_reference/classes/)|[SessionServiceInterface](../php_api/php_api_reference/classes/.html)| -|[BeforeUpdateSessionEvent](../php_api/php_api_reference/classes/)|[SessionServiceInterface](../php_api/php_api_reference/classes/.html)| -|[CreateSessionEvent](../php_api/php_api_reference/classes/)|[SessionServiceInterface](../php_api/php_api_reference/classes/.html)| -|[DeleteSessionEvent](../php_api/php_api_reference/classes/)|[SessionServiceInterface](../php_api/php_api_reference/classes/.html)| -|[UpdateSessionEvent](../php_api/php_api_reference/classes/)|[SessionServiceInterface](../php_api/php_api_reference/classes/.html)| \ No newline at end of file From 13a094bb33aa258a35c05240639319373f71f586 Mon Sep 17 00:00:00 2001 From: julitafalcondusza Date: Mon, 8 Sep 2025 13:52:55 +0200 Subject: [PATCH 10/12] content updated --- .../collaborative_editing.md | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/docs/content_management/collaborative_editing/collaborative_editing.md b/docs/content_management/collaborative_editing/collaborative_editing.md index ddff28b3be..7462e6a4e6 100644 --- a/docs/content_management/collaborative_editing/collaborative_editing.md +++ b/docs/content_management/collaborative_editing/collaborative_editing.md @@ -6,14 +6,20 @@ month_change: true # Collaborative editing -With Collaborative editing LTS multiple users can work on the same content created in [[= product_name =]] simultaneously. -They can collaborate and use a real-time editor to write and review content in a live mode thanks to CKEditor. +With Collaborative editing feature multiple users can work on the same content created in [[= product_name =]] simultaneously. +This feature allows multiple users to work together on the same content item in real time, streamlining the content creation and review process. -You can also extend this feature to adjust it to your needs. +Users can invite both internal and external collaborators to a session, giving them access for editing or previewing. + +Additionaly, they can collaborate using a Real-time collaboration premium feature to write and review content in a live mode thanks to CKEditor. +Real-time collaboration syncs changes instantly and shows user avatars and colored tags to indicate who is editing each part of the content. + +This feature also introduces new dashboard tabs for managing shared drafts and joining collaboration sessions easily. [[= cards([ "content_management/collaborative_editing/collaborative_editing", "content_management/collaborative_editing/collaborative_editing_api", "content_management/collaborative_editing/invitation_api", -"content_management/collaborative_editing/session_api" -], columns=4) =]] +"content_management/collaborative_editing/session_api", +"content_management/collaborative_editing/collaborative_editing_guide" +], columns=3) =]] From 1a774246d60755cb724a80397f7f1d448df0f09d Mon Sep 17 00:00:00 2001 From: julitafalcondusza Date: Wed, 10 Sep 2025 14:08:09 +0200 Subject: [PATCH 11/12] batch of fixes --- .../install_collaborative_editing.md | 11 +++- .../collaborative_editing/invitation_api.md | 53 +++++++++---------- 2 files changed, 34 insertions(+), 30 deletions(-) diff --git a/docs/content_management/collaborative_editing/install_collaborative_editing.md b/docs/content_management/collaborative_editing/install_collaborative_editing.md index 6401eb8ca6..ee55eca752 100644 --- a/docs/content_management/collaborative_editing/install_collaborative_editing.md +++ b/docs/content_management/collaborative_editing/install_collaborative_editing.md @@ -27,7 +27,7 @@ Once the packages are installed, before you can start Collaborative editing feat ### Add tables to the database -To add the tables to the database, run the following command: +To add the tables to the database, run the following commands: ``` bash php bin/console ibexa:doctrine:schema:dump-sql vendor/ibexa/collaboration/src/bundle/Resources/config/schema.yaml | mysql -u -p @@ -49,4 +49,13 @@ return [ ]; ``` +### Add migration file and execute migration + +Last step is to add migration file and execute migration with the following commands: + +``` bash +php bin/console ibexa:migrations:import vendor/ibexa/collaboration/src/bundle/Resources/migrations/2025_08_26_10_14_shareable_user.yaml +php bin/console ibexa:migrations:migrate --file=2025_08_26_10_14_shareable_user.yaml +``` + You can now restart you application and start [working with the Collaborative editing feature]([[= user_doc =]]/content_management/collaborative_editing/work_with_collaborative_editing/). \ No newline at end of file diff --git a/docs/content_management/collaborative_editing/invitation_api.md b/docs/content_management/collaborative_editing/invitation_api.md index 85ffb6ac9d..2451ea3cfa 100644 --- a/docs/content_management/collaborative_editing/invitation_api.md +++ b/docs/content_management/collaborative_editing/invitation_api.md @@ -12,79 +12,73 @@ You can create new invitation for the collaborative session using the [`Invitati ``` php { - $session = self::getSessionService()->getSession(self::EXAMPLE_SESSION_ID); - $participant = $session->getParticipants()->getById(self::EXAMPLE_PARTICIPANT_ID); - + $session = $this->sessionService->getSession(1); + $participant = $session->getParticipants()->getByEmail('foo@link.invalid'); $createStruct = new InvitationCreateStruct($session, $participant); $createStruct->setContext([ 'message' => 'Hello, would you like to join my session?', ]); - - $invitation = $this->getInvitationService()->createInvitation($createStruct); - - self::assertEquals(InvitationStatus::STATUS_PENDING, $invitation->getStatus()); - self::assertEquals([ - 'message' => 'Hello, would you like to join my session?', - ], $invitation->getContext()); + $invitation = $this->invitationService->createInvitation($createStruct); } ``` -## Read invitation +## Get invitation by ID -You can read an invitation with [`InvitationService::getInvitation`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-InvitationService.html#method_deleteInvitation): +You can get an invitation by ID with [`InvitationService::getInvitation`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-InvitationService.html#method_deleteInvitation): ``` php - $this->getInvitationService()->getInvitation(self::EXAMPLE_INVITATION_ID); + $this->invitationService->getInvitation(1); ``` -You can select the parameter that you can read from an invitaion: +You can select the parameter that you can read from an invitation: - Invitation ID: ``` php - self::assertEquals(self::EXAMPLE_INVITATION_ID, $invitation->getId()); + $invitation->getId(); ``` - Session ID: ``` php - self::assertEquals(self::EXAMPLE_SESSION_ID, $invitation->getSession()->getId()); + $invitation->getSession()->getId(); ``` - Participant ID: ``` php - self::assertEquals(self::EXAMPLE_PARTICIPANT_ID, $invitation->getParticipant()->getId()); + $invitation->getParticipant()->getId(); ``` - Invitation status: ``` php - self::assertEquals(InvitationStatus::STATUS_PENDING, $invitation->getStatus()); + $invitation->getStatus(); ``` -## Find invitation +## Get invitation by participant -You can find an invitation with [`InvitationService::findInvitation`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-InvitationService.html#method_deleteInvitation) by: - -- Invitation ID: +You can get an invitation by participant with [`InvitationService::getInvitationByParticipant`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-InvitationService.html#method_getInvitationByParticipant): ``` php -[[= include_file('code_samples/api/public_php_api/src/Command/(?).php', , ) =]] + $this->innerService->getInvitationByParticipant($participant); ``` -- Session ID: +## Find invitations -- Participant ID: +You can find an invitation with [`InvitationService::findInvitation`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-InvitationService.html#method_deleteInvitation). -- Invitation status: +To learn more about the available search options, see Search Criteria and Sort Clauses for Collaborative editing. ## Update invitation -You can update existing invitation with [`InvitationService::deleteInvitation`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-InvitationService.html#method_deleteInvitation): +You can update existing invitation with [`InvitationService::updateInvitation`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-InvitationService.html#method_deleteInvitation): ``` php -$invitation = $this->getInvitationService()->getInvitation(self::EXAMPLE_INVITATION_ID); + $invitation = $this->invitationService->getInvitation(1); + $updateStruct = new InvitationUpdateStruct(); + $updateStruct->setStatus(InvitationStatus::STATUS_ACCEPTED); + $invitation = $this->invitationService->updateInvitation($invitation, $updateStruct); ``` ## Delete invitation @@ -92,5 +86,6 @@ $invitation = $this->getInvitationService()->getInvitation(self::EXAMPLE_INVITAT You can delete an invitation with [`InvitationService::deleteInvitation`](../../api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-InvitationService.html#method_deleteInvitation): ``` php - $this->getInvitationService()->deleteInvitation($invitation); + $invitation = $this->invitationService->getInvitation(1); + $this->invitationService->deleteInvitation($invitation); ``` \ No newline at end of file From 4f949ca06cf38bd1e3a66bc2230a848b9e6549b2 Mon Sep 17 00:00:00 2001 From: julitafalcondusza Date: Wed, 17 Sep 2025 10:39:13 +0200 Subject: [PATCH 12/12] work in progress --- .../collaborative_editing/collaborative_editing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content_management/collaborative_editing/collaborative_editing.md b/docs/content_management/collaborative_editing/collaborative_editing.md index 7462e6a4e6..476d81463c 100644 --- a/docs/content_management/collaborative_editing/collaborative_editing.md +++ b/docs/content_management/collaborative_editing/collaborative_editing.md @@ -11,7 +11,7 @@ This feature allows multiple users to work together on the same content item in Users can invite both internal and external collaborators to a session, giving them access for editing or previewing. -Additionaly, they can collaborate using a Real-time collaboration premium feature to write and review content in a live mode thanks to CKEditor. +Additionaly, they can collaborate using a Real-time collaboration, an advanced part of the collaboration feature, to write and review content in a live mode thanks to CKEditor. Real-time collaboration syncs changes instantly and shows user avatars and colored tags to indicate who is editing each part of the content. This feature also introduces new dashboard tabs for managing shared drafts and joining collaboration sessions easily.