Skip to content

Conversation

mnocon
Copy link
Contributor

@mnocon mnocon commented Sep 17, 2025

No description provided.

Copy link

github-actions bot commented Sep 17, 2025

Copy link

code_samples/ change report

Before (on target branch)After (in current PR)

code_samples/collaboration/src/Command/ManageSessionsCommand.php


code_samples/collaboration/src/Command/ManageSessionsCommand.php

docs/content_management/collaborative_editing/collaborative_editing_api.md@21:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@22:[[= include_file('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 69, 81) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@23:```

001⫶ $versionInfo = $this->contentService->loadContent(52)->getVersionInfo();
002⫶ $createStruct = new ContentSessionCreateStruct(
003⫶ $versionInfo,
004⫶ $versionInfo->getInitialLanguage()
005⫶ );
006⫶ $createStruct->setHasPublicLink(false);
007⫶
008⫶ $token = 'my-secret-token-12345';
009⫶ $createStruct->setToken($token);
010⫶
011⫶ $sessionId = $this->sessionService->createSession($createStruct)->getId();

docs/content_management/collaborative_editing/collaborative_editing_api.md@31:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@32:[[= include_file('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 82, 83) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@33:```

001⫶ $session = $this->sessionService->getSession($sessionId);

docs/content_management/collaborative_editing/collaborative_editing_api.md@37:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@38:[[= include_file('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 83, 84) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@39:```

001⫶ $session = $this->sessionService->getSessionByToken($token);

docs/content_management/collaborative_editing/collaborative_editing_api.md@45:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@46:[[= include_file('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 86, 89) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@47:```

001⫶ $sessionQuery = new SessionQuery(new Token($token));
002⫶ $session = $this->sessionService->findSessions($sessionQuery)->getFirst();

docs/content_management/collaborative_editing/collaborative_editing_api.md@53:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@54:[[= include_file('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 90, 95) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@55:```

001⫶ $updateStruct = new ContentSessionUpdateStruct();
002⫶ $updateStruct->setHasPublicLink(true);
003⫶
004⫶ $this->sessionService->updateSession($session, $updateStruct);

docs/content_management/collaborative_editing/collaborative_editing_api.md@61:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@62:[[= include_file('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 96, 101) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@63:```

001⫶ $updateStruct = new ContentSessionUpdateStruct();
002⫶ $updateStruct->setIsActive(false);
003⫶
004⫶ $this->sessionService->updateSession($session, $updateStruct);

docs/content_management/collaborative_editing/collaborative_editing_api.md@69:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@70:[[= include_file('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 169, 170) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@71:```

001⫶ $this->sessionService->deleteSession($session);

docs/content_management/collaborative_editing/collaborative_editing_api.md@79:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@80:[[= include_file('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 102, 116) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@81:```

001⫶ $user = $this->userService->loadUserByLogin('another_user');
002⫶ $internalParticipantCreateStruct = new InternalParticipantCreateStruct(
003⫶ $user,
004⫶ ContentSessionScope::VIEW
005⫶ );
006⫶ $externalParticipantCreateStruct = new ExternalParticipantCreateStruct(
007⫶ '[email protected]',
008⫶ ContentSessionScope::VIEW,
009⫶ 'personal-secret-token-12345'
010⫶ );
011⫶
012⫶ $internalParticipant = $this->sessionService->addParticipant($session, $internalParticipantCreateStruct);
013⫶ $externalParticipant = $this->sessionService->addParticipant($session, $externalParticipantCreateStruct);

docs/content_management/collaborative_editing/collaborative_editing_api.md@87:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@88:[[= include_file('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 117, 125) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@89:```

001⫶ $participant = $this->sessionService
002⫶ ->getSession($session->getId())
003⫶ ->getParticipants()
004⫶ ->getByEmail($user->email);
005⫶
006⫶ $internalParticipantUpdateStruct = new InternalParticipantUpdateStruct(ContentSessionScope::EDIT);
007⫶ $this->sessionService->updateParticipant($session, $participant, $internalParticipantUpdateStruct);

docs/content_management/collaborative_editing/collaborative_editing_api.md@94:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@95:[[= include_file('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 126, 127) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@96:```

001⫶ $this->sessionService->removeParticipant($session, $externalParticipant);

docs/content_management/collaborative_editing/collaborative_editing_api.md@102:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@103:[[= include_file('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 129, 134) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@104:```

001⫶ $this->sessionService->isSessionOwner(
002⫶ $session,
003⫶ $this->userService->loadUserByLogin('another_user')
004⫶ );

docs/content_management/collaborative_editing/collaborative_editing_api.md@112:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@113:[[= include_file('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 135, 140) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@114:```

001⫶ $this->sessionService->isSessionParticipant(
002⫶ $session,
003⫶ $this->permissionResolver->getCurrentUserReference()
004⫶ );

docs/content_management/collaborative_editing/collaborative_editing_api.md@123:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@124:[[= include_file('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 141, 150) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@125:```

001⫶ $invitationQuery = new InvitationQuery(new Session($session));
002⫶ $invitations = $this->invitationService->findInvitations($invitationQuery)->getInvitations();
003⫶
004⫶ foreach ($invitations as $invitation) {
005⫶ $output->writeln('Invitation ID: ' . $invitation->getId() . ' Status: ' . $invitation->getStatus());
006⫶ }
007⫶
008⫶ $invitation = $this->invitationService->getInvitationByParticipant($participant);

docs/content_management/collaborative_editing/collaborative_editing_api.md@157:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@158:[[= include_file('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 151, 158) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@159:```

001⫶ $invitationCreateStruct = new InvitationCreateStruct(
002⫶ $session,
003⫶ $internalParticipant
004⫶ );
005⫶
006⫶ $this->invitationService->createInvitation($invitationCreateStruct);

docs/content_management/collaborative_editing/collaborative_editing_api.md@167:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@168:[[= include_file('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 159, 164) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@169:```

001⫶ $invitationUpdateStruct = new InvitationUpdateStruct();
002⫶ $invitationUpdateStruct->setStatus(InvitationStatus::STATUS_REJECTED);
003⫶
004⫶ $this->invitationService->updateInvitation($invitation, $invitationUpdateStruct);

docs/content_management/collaborative_editing/collaborative_editing_api.md@175:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@176:[[= include_file('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 165, 168) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@177:```

001⫶ $invitation = $this->invitationService->getInvitation(2);
002⫶ $this->invitationService->deleteInvitation($invitation);

docs/content_management/collaborative_editing/collaborative_editing_api.md@189:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@190:[[= include_file('code_samples/collaboration/src/Command/ManageSessionsCommand.php') =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@191:```

001⫶<?php
002⫶
003⫶/**
004⫶ * @copyright Copyright (C) Ibexa AS. All rights reserved.
005⫶ * @license For full copyright and license information view LICENSE file distributed with this source code.
006⫶ */
007⫶declare(strict_types=1);
008⫶
009⫶namespace App\Command;
010⫶
011⫶use Ibexa\Contracts\Collaboration\Invitation\InvitationCreateStruct;
012⫶use Ibexa\Contracts\Collaboration\Invitation\InvitationQuery;
013⫶use Ibexa\Contracts\Collaboration\Invitation\InvitationStatus;
014⫶use Ibexa\Contracts\Collaboration\Invitation\InvitationUpdateStruct;
015⫶use Ibexa\Contracts\Collaboration\Invitation\Query\Criterion\Session;
016⫶use Ibexa\Contracts\Collaboration\InvitationServiceInterface;
017⫶use Ibexa\Contracts\Collaboration\Participant\ExternalParticipantCreateStruct;
018⫶use Ibexa\Contracts\Collaboration\Participant\InternalParticipantCreateStruct;
019⫶use Ibexa\Contracts\Collaboration\Participant\InternalParticipantUpdateStruct;
020⫶use Ibexa\Contracts\Collaboration\Session\Query\Criterion\Token;
021⫶use Ibexa\Contracts\Collaboration\Session\SessionQuery;
022⫶use Ibexa\Contracts\Collaboration\SessionServiceInterface;
023⫶use Ibexa\Contracts\Core\Repository\ContentService;
024⫶use Ibexa\Contracts\Core\Repository\PermissionResolver;
025⫶use Ibexa\Contracts\Core\Repository\UserService;
026⫶use Ibexa\Contracts\Share\Collaboration\ContentSessionCreateStruct;
027⫶use Ibexa\Contracts\Share\Collaboration\ContentSessionScope;
028⫶use Ibexa\Contracts\Share\Collaboration\ContentSessionUpdateStruct;
029⫶use Symfony\Component\Console\Command\Command;
030⫶use Symfony\Component\Console\Input\InputInterface;
031⫶use Symfony\Component\Console\Output\OutputInterface;
032⫶
033⫶final class ManageSessionsCommand extends Command
034⫶{
035⫶ protected static $defaultName = 'app:manage-sessions';
036⫶
037⫶ private InvitationServiceInterface $invitationService;
038⫶
039⫶ private SessionServiceInterface $sessionService;
040⫶
041⫶ private ContentService $contentService;
042⫶
043⫶ private UserService $userService;
044⫶
045⫶ private PermissionResolver $permissionResolver;
046⫶
047⫶ public function __construct(
048⫶ InvitationServiceInterface $invitationService,
049⫶ SessionServiceInterface $sessionService,
050⫶ ContentService $contentService,
051⫶ UserService $userService,
052⫶ PermissionResolver $permissionResolver
053⫶ ) {
054⫶ parent::__construct(self::$defaultName);
055⫶
056⫶ $this->invitationService = $invitationService;
057⫶ $this->sessionService = $sessionService;
058⫶ $this->contentService = $contentService;
059⫶ $this->userService = $userService;
060⫶ $this->permissionResolver = $permissionResolver;
061⫶ }
062⫶
063⫶ public function execute(InputInterface $input, OutputInterface $output): int
064⫶ {
065⫶ $this->permissionResolver->setCurrentUserReference(
066⫶ $this->userService->loadUserByLogin('admin')
067⫶ );
068⫶
069⫶ // Create a sharing session for Content
070⫶ $versionInfo = $this->contentService->loadContent(52)->getVersionInfo();
071⫶ $createStruct = new ContentSessionCreateStruct(
072⫶ $versionInfo,
073⫶ $versionInfo->getInitialLanguage()
074⫶ );
075⫶ $createStruct->setHasPublicLink(false);
076⫶
077⫶ $token = 'my-secret-token-12345';
078⫶ $createStruct->setToken($token);
079⫶
080⫶ $sessionId = $this->sessionService->createSession($createStruct)->getId();
081⫶
082⫶ // Get a session by ID or token
083⫶ $session = $this->sessionService->getSession($sessionId);
084⫶ $session = $this->sessionService->getSessionByToken($token);
085⫶
086⫶ // Find sessions
087⫶ $sessionQuery = new SessionQuery(new Token($token));
088⫶ $session = $this->sessionService->findSessions($sessionQuery)->getFirst();
089⫶
090⫶ // Update a session
091⫶ $updateStruct = new ContentSessionUpdateStruct();
092⫶ $updateStruct->setHasPublicLink(true);
093⫶
094⫶ $this->sessionService->updateSession($session, $updateStruct);
095⫶
096⫶ // Deactivate a session
097⫶ $updateStruct = new ContentSessionUpdateStruct();
098⫶ $updateStruct->setIsActive(false);
099⫶
100⫶ $this->sessionService->updateSession($session, $updateStruct);
101⫶
102⫶ // Manage participants
103⫶ $user = $this->userService->loadUserByLogin('another_user');
104⫶ $internalParticipantCreateStruct = new InternalParticipantCreateStruct(
105⫶ $user,
106⫶ ContentSessionScope::VIEW
107⫶ );
108⫶ $externalParticipantCreateStruct = new ExternalParticipantCreateStruct(
109⫶ '[email protected]',
110⫶ ContentSessionScope::VIEW,
111⫶ 'personal-secret-token-12345'
112⫶ );
113⫶
114⫶ $internalParticipant = $this->sessionService->addParticipant($session, $internalParticipantCreateStruct);
115⫶ $externalParticipant = $this->sessionService->addParticipant($session, $externalParticipantCreateStruct);
116⫶
117⫶ // Get and update participants
118⫶ $participant = $this->sessionService
119⫶ ->getSession($session->getId())
120⫶ ->getParticipants()
121⫶ ->getByEmail($user->email);
122⫶
123⫶ $internalParticipantUpdateStruct = new InternalParticipantUpdateStruct(ContentSessionScope::EDIT);
124⫶ $this->sessionService->updateParticipant($session, $participant, $internalParticipantUpdateStruct);
125⫶
126⫶ // Remove participant
127⫶ $this->sessionService->removeParticipant($session, $externalParticipant);
128⫶
129⫶ // Check ownerships. If no user is provided, current user is used.
130⫶ $this->sessionService->isSessionOwner(
131⫶ $session,
132⫶ $this->userService->loadUserByLogin('another_user')
133⫶ );
134⫶
135⫶ // Check participation
136⫶ $this->sessionService->isSessionParticipant(
137⫶ $session,
138⫶ $this->permissionResolver->getCurrentUserReference()
139⫶ );
140⫶
141⫶ // Manage invitations
142⫶ $invitationQuery = new InvitationQuery(new Session($session));
143⫶ $invitations = $this->invitationService->findInvitations($invitationQuery)->getInvitations();
144⫶
145⫶ foreach ($invitations as $invitation) {
146⫶ $output->writeln('Invitation ID: ' . $invitation->getId() . ' Status: ' . $invitation->getStatus());
147⫶ }
148⫶
149⫶ $invitation = $this->invitationService->getInvitationByParticipant($participant);
150⫶
151⫶ // Create invitation - use when auto-inviting participants is not enabled
152⫶ $invitationCreateStruct = new InvitationCreateStruct(
153⫶ $session,
154⫶ $internalParticipant
155⫶ );
156⫶
157⫶ $this->invitationService->createInvitation($invitationCreateStruct);
158⫶
159⫶ // Update invitation
160⫶ $invitationUpdateStruct = new InvitationUpdateStruct();
161⫶ $invitationUpdateStruct->setStatus(InvitationStatus::STATUS_REJECTED);
162⫶
163⫶ $this->invitationService->updateInvitation($invitation, $invitationUpdateStruct);
164⫶
165⫶ // Delete invitation
166⫶ $invitation = $this->invitationService->getInvitation(2);
167⫶ $this->invitationService->deleteInvitation($invitation);
168⫶
169⫶ // Delete a session
170⫶ $this->sessionService->deleteSession($session);
171⫶
172⫶ return Command::SUCCESS;
173⫶ }
174⫶}

Download colorized diff

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants