Skip to content

SaaS removals: batch 2 - #3381

Draft
mnocon wants to merge 2 commits into
saas-first-passfrom
saas-batch-2
Draft

SaaS removals: batch 2#3381
mnocon wants to merge 2 commits into
saas-first-passfrom
saas-batch-2

Conversation

@mnocon

@mnocon mnocon commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Removed:

  • How to install DXP sections - SaaS is not installable
  • Remove ddev mentions
  • Remove Twig function reference
  • Remove SeenThis mentions
  • Remove collaborative editing (won't be available on SaaS at all)
  • Remove PHPStorm plugin, rector, bundle conventions etc.
  • Remove AppSwitcher mentions (will be removed)

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown

Preview of modified files

Preview of modified Markdown:

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown

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@19:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@20:[[= include_code('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 48, 58, remove_indent=True) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@21:```

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@29:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@30:[[= include_code('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 61, 61, remove_indent=True) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@31:```

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

docs/content_management/collaborative_editing/collaborative_editing_api.md@35:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@36:[[= include_code('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 62, 62, remove_indent=True) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@37:```

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

docs/content_management/collaborative_editing/collaborative_editing_api.md@43:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@44:[[= include_code('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 65, 66, remove_indent=True) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@45:```

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_code('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 69, 72, remove_indent=True) =]]
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_code('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 148, 148, remove_indent=True) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@63:```

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

docs/content_management/collaborative_editing/collaborative_editing_api.md@71:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@72:[[= include_code('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 81, 93, remove_indent=True) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@73:```

001⫶$user = $this->userService->loadUserByLogin('another_user');
002⫶$internalParticipantCreateStruct = new InternalParticipantCreateStruct(
003⫶ $user,
004⫶ ContentSessionScope::VIEW
005⫶);
006⫶$externalParticipantCreateStruct = new ExternalParticipantCreateStruct(
007⫶ 'external@example.com',
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@79:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@80:[[= include_code('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 96, 102, remove_indent=True) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@81:```

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@89:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@90:[[= include_code('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 105, 105, remove_indent=True) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@91:```

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

docs/content_management/collaborative_editing/collaborative_editing_api.md@97:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@98:[[= include_code('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 108, 111, remove_indent=True) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@99:```

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

docs/content_management/collaborative_editing/collaborative_editing_api.md@107:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@108:[[= include_code('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 114, 117, remove_indent=True) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@109:```

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

docs/content_management/collaborative_editing/collaborative_editing_api.md@117:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@118:[[= include_code('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 127, 127, remove_indent=True) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@119:```

001⫶$invitation = $this->invitationService->getInvitationByParticipant($participant);

docs/content_management/collaborative_editing/collaborative_editing_api.md@125:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@126:[[= include_code('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 130, 135, remove_indent=True) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@127:```

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

docs/content_management/collaborative_editing/collaborative_editing_api.md@135:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@136:[[= include_code('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 138, 141, remove_indent=True) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@137:```

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@143:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@144:[[= include_code('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 144, 145, remove_indent=True) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@145:```

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

docs/content_management/collaborative_editing/collaborative_editing_api.md@151:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@152:[[= include_code('code_samples/collaboration/src/Command/ManageSessionsCommand.php', 120, 125, remove_indent=True) =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@153:```

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⫶}

docs/content_management/collaborative_editing/collaborative_editing_api.md@161:``` php
docs/content_management/collaborative_editing/collaborative_editing_api.md@162:[[= include_code('code_samples/collaboration/src/Command/ManageSessionsCommand.php') =]]
docs/content_management/collaborative_editing/collaborative_editing_api.md@163:```

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


code_samples/collaboration/src/Query/Search.php


code_samples/collaboration/src/Query/Search.php

docs/search/collaboration_search_reference/collaboration_criteria.md@51:``` php hl_lines="11-15"
docs/search/collaboration_search_reference/collaboration_criteria.md@52:[[= include_code('code_samples/collaboration/src/Query/Search.php') =]]
docs/search/collaboration_search_reference/collaboration_criteria.md@53:```

001⫶<?php declare(strict_types=1);
002⫶
003⫶use Ibexa\Contracts\Collaboration\Session\Query\Criterion;
004⫶use Ibexa\Contracts\Collaboration\Session\Query\SortClause;
005⫶use Ibexa\Contracts\Collaboration\Session\SessionQuery;
006⫶use Ibexa\Contracts\CoreSearch\Values\Query\Criterion\FieldValueCriterion;
007⫶use Ibexa\Contracts\CoreSearch\Values\Query\SortClause\FieldValueSortClause;
008⫶
009⫶$lastWeek = new DateTimeImmutable('-7 days');
010⫶$query = new SessionQuery(
011❇️ new Criterion\LogicalAnd(
012❇️ new Criterion\IsActive(true),
013❇️ new Criterion\Type('content'),
014❇️ new Criterion\CreatedAt($lastWeek, FieldValueCriterion::COMPARISON_GTE),
015❇️ ),
016⫶ [
017⫶ new SortClause\CreatedAt(FieldValueSortClause::SORT_DESC),
018⫶ ]
019⫶);
020⫶/** @var \Ibexa\Contracts\Collaboration\SessionServiceInterface $sessionService */
021⫶$sessionList = $sessionService->findSessions($query);

docs/search/collaboration_search_reference/collaboration_sort_clauses.md@36:``` php hl_lines="17"
docs/search/collaboration_search_reference/collaboration_sort_clauses.md@37:[[= include_code('code_samples/collaboration/src/Query/Search.php') =]]
docs/search/collaboration_search_reference/collaboration_sort_clauses.md@38:```

001⫶<?php declare(strict_types=1);
002⫶
003⫶use Ibexa\Contracts\Collaboration\Session\Query\Criterion;
004⫶use Ibexa\Contracts\Collaboration\Session\Query\SortClause;
005⫶use Ibexa\Contracts\Collaboration\Session\SessionQuery;
006⫶use Ibexa\Contracts\CoreSearch\Values\Query\Criterion\FieldValueCriterion;
007⫶use Ibexa\Contracts\CoreSearch\Values\Query\SortClause\FieldValueSortClause;
008⫶
009⫶$lastWeek = new DateTimeImmutable('-7 days');
010⫶$query = new SessionQuery(
011⫶ new Criterion\LogicalAnd(
012⫶ new Criterion\IsActive(true),
013⫶ new Criterion\Type('content'),
014⫶ new Criterion\CreatedAt($lastWeek, FieldValueCriterion::COMPARISON_GTE),
015⫶ ),
016⫶ [
017❇️ new SortClause\CreatedAt(FieldValueSortClause::SORT_DESC),
018⫶ ]
019⫶);
020⫶/** @var \Ibexa\Contracts\Collaboration\SessionServiceInterface $sessionService */
021⫶$sessionList = $sessionService->findSessions($query);


code_samples/templates/field_twig_functions/render_content.html.twig


code_samples/templates/field_twig_functions/render_content.html.twig

docs/templating/twig_function_reference/field_twig_functions.md@38:``` html+twig
docs/templating/twig_function_reference/field_twig_functions.md@39:[[= include_code('code_samples/templates/field_twig_functions/render_content.html.twig') =]]
docs/templating/twig_function_reference/field_twig_functions.md@40:```

001⫶{{ ibexa_render_field(content, 'title') }}
002⫶
003⫶{{ ibexa_render_field(content, 'image', {
004⫶ 'template': '@ibexadesign/fields/image.html.twig',
005⫶ 'attr': {class: 'thumbnail-image'},
006⫶ 'parameters': {
007⫶ 'alias': 'small'
008⫶ }
009⫶}) }}

docs/templating/twig_function_reference/image_twig_functions.md@15:``` html+twig
docs/templating/twig_function_reference/image_twig_functions.md@16:[[= include_code('code_samples/templates/field_twig_functions/render_content.html.twig', 3, 9, remove_indent=True) =]]
docs/templating/twig_function_reference/image_twig_functions.md@17:```

001⫶{{ ibexa_render_field(content, 'image', {
002⫶ 'template': '@ibexadesign/fields/image.html.twig',
003⫶ 'attr': {class: 'thumbnail-image'},
004⫶ 'parameters': {
005⫶ 'alias': 'small'
006⫶ }
007⫶}) }}


code_samples/templates/field_twig_functions/render_product.html.twig


code_samples/templates/field_twig_functions/render_product.html.twig

docs/templating/twig_function_reference/field_twig_functions.md@42:``` html+twig
docs/templating/twig_function_reference/field_twig_functions.md@43:[[= include_code('code_samples/templates/field_twig_functions/render_product.html.twig') =]]
docs/templating/twig_function_reference/field_twig_functions.md@44:```

001⫶{{ ibexa_render_field(product, 'name') }}
002⫶
003⫶{{ ibexa_render_field(product, 'image', {
004⫶ 'template': '@ibexadesign/fields/image.html.twig',
005⫶ 'attr': {class: 'thumbnail-image'},
006⫶ 'parameters': {
007⫶ 'alias': 'small'
008⫶ }
009⫶}) }}

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.

1 participant