A single-page checkout uses one page to display all the elements of a standard checkout process,
- including payment details, billing and shipping addresses, and shipping options.
-
-
-
- {% for child in form %}
- {% if not child.rendered %}
-
-{% endmacro %}
diff --git a/code_samples/shopping_list/add_to_shopping_list/webpack.config.js b/code_samples/shopping_list/add_to_shopping_list/webpack.config.js
deleted file mode 100644
index 45f5b9bb771..00000000000
--- a/code_samples/shopping_list/add_to_shopping_list/webpack.config.js
+++ /dev/null
@@ -1,61 +0,0 @@
-const fs = require('fs');
-const path = require('path');
-const Encore = require('@symfony/webpack-encore');
-const getWebpackConfigs = require('@ibexa/frontend-config/webpack-config/get-configs');
-const customConfigsPaths = require('./var/encore/ibexa.webpack.custom.config.js');
-
-const customConfigs = getWebpackConfigs(Encore, customConfigsPaths);
-const isReactBlockPathCreated = fs.existsSync('./assets/page-builder/react/blocks');
-
-Encore.reset();
-Encore
- .setOutputPath('public/build/')
- .setPublicPath('/build')
- .enableSassLoader()
- .enableReactPreset((options) => {
- options.runtime = 'classic';
- })
- .enableSingleRuntimeChunk()
- .copyFiles({
- from: './assets/images',
- to: 'images/[path][name].[ext]',
- pattern: /\.(png|svg)$/,
- })
- .configureBabelPresetEnv((config) => {
- config.useBuiltIns = 'usage';
- config.corejs = 3;
- });
-
-// Welcome page stylesheets
-Encore.addEntry('welcome-page-css', [
- path.resolve(__dirname, './assets/scss/welcome-page.scss'),
-]);
-
-// Welcome page javascripts
-Encore.addEntry('welcome-page-js', [
- path.resolve(__dirname, './assets/js/welcome.page.js'),
-]);
-
-if (isReactBlockPathCreated) {
- // React Blocks javascript
- Encore.addEntry('react-blocks-js', './assets/js/react.blocks.js');
-}
-
-//Encore.addEntry('app', './assets/app.js');
-
-Encore
- .enableTypeScriptLoader()
- .addAliases({
- '@ibexa-shopping-list': path.resolve('./vendor/ibexa/shopping-list'),
- '@ibexa-admin-ui': path.resolve('./vendor/ibexa/admin-ui'), // @ibexa-admin-ui/…/text.helper dependency
- })
- .addEntry('add-to-shopping-list-js', [
- path.resolve(__dirname, './assets/js/add-to-shopping-list.ts'),
- ])
-;
-
-const projectConfig = Encore.getWebpackConfig();
-
-projectConfig.name = 'app';
-
-module.exports = [...customConfigs, projectConfig];
diff --git a/code_samples/shopping_list/install/schema.mysql.sql b/code_samples/shopping_list/install/schema.mysql.sql
deleted file mode 100644
index 3a26f10d8eb..00000000000
--- a/code_samples/shopping_list/install/schema.mysql.sql
+++ /dev/null
@@ -1,32 +0,0 @@
-CREATE TABLE ibexa_shopping_list (
- id INT AUTO_INCREMENT NOT NULL,
- owner_id INT NOT NULL,
- identifier CHAR(36) NOT NULL COMMENT '(DC2Type:guid)',
- name VARCHAR(190) DEFAULT NULL,
- created_at DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)',
- updated_at DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)',
- is_default TINYINT(1) DEFAULT 0 NOT NULL,
- UNIQUE INDEX ibexa_shopping_list_identifier_idx (identifier),
- INDEX ibexa_shopping_list_owner_idx (owner_id),
- INDEX ibexa_shopping_list_default_idx (is_default),
- PRIMARY KEY(id)
-) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_520_ci` ENGINE = InnoDB;
-CREATE TABLE ibexa_shopping_list_entry (
- id INT AUTO_INCREMENT NOT NULL,
- shopping_list_id INT NOT NULL,
- product_code VARCHAR(64) NOT NULL,
- identifier CHAR(36) NOT NULL COMMENT '(DC2Type:guid)',
- added_at DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)',
- UNIQUE INDEX ibexa_shopping_list_entry_identifier_idx (identifier),
- INDEX ibexa_shopping_list_entry_list_idx (shopping_list_id),
- INDEX ibexa_shopping_list_entry_product_idx (product_code),
- INDEX ibexa_shopping_list_entry_added_at_idx (added_at),
- UNIQUE INDEX ibexa_shopping_list_entry_unique (shopping_list_id, product_code),
- PRIMARY KEY(id)
-) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_520_ci` ENGINE = InnoDB;
-ALTER TABLE ibexa_shopping_list
- ADD CONSTRAINT ibexa_shopping_list_owner_fk FOREIGN KEY (owner_id) REFERENCES ibexa_user (contentobject_id) ON UPDATE CASCADE ON DELETE CASCADE;
-ALTER TABLE ibexa_shopping_list_entry
- ADD CONSTRAINT ibexa_shopping_list_entry_list_fk FOREIGN KEY (shopping_list_id) REFERENCES ibexa_shopping_list (id) ON UPDATE CASCADE ON DELETE CASCADE;
-ALTER TABLE ibexa_shopping_list_entry
- ADD CONSTRAINT ibexa_shopping_list_entry_product_fk FOREIGN KEY (product_code) REFERENCES ibexa_product (code) ON UPDATE CASCADE ON DELETE CASCADE;
diff --git a/code_samples/shopping_list/install/schema.postgresql.sql b/code_samples/shopping_list/install/schema.postgresql.sql
deleted file mode 100644
index f2c3e8f3584..00000000000
--- a/code_samples/shopping_list/install/schema.postgresql.sql
+++ /dev/null
@@ -1,35 +0,0 @@
-CREATE TABLE ibexa_shopping_list (
- id SERIAL NOT NULL,
- owner_id INT NOT NULL,
- identifier UUID NOT NULL,
- name VARCHAR(190) DEFAULT NULL,
- created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL,
- updated_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL,
- is_default BOOLEAN DEFAULT false NOT NULL,
- PRIMARY KEY (id)
-);
-CREATE UNIQUE INDEX ibexa_shopping_list_identifier_idx ON ibexa_shopping_list (identifier);
-CREATE INDEX ibexa_shopping_list_owner_idx ON ibexa_shopping_list (owner_id);
-CREATE INDEX ibexa_shopping_list_default_idx ON ibexa_shopping_list (is_default);
-COMMENT ON COLUMN ibexa_shopping_list.created_at IS '(DC2Type:datetime_immutable)';
-COMMENT ON COLUMN ibexa_shopping_list.updated_at IS '(DC2Type:datetime_immutable)';
-CREATE TABLE ibexa_shopping_list_entry (
- id SERIAL NOT NULL,
- shopping_list_id INT NOT NULL,
- product_code VARCHAR(64) NOT NULL,
- identifier UUID NOT NULL,
- added_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL,
- PRIMARY KEY (id)
-);
-CREATE UNIQUE INDEX ibexa_shopping_list_entry_identifier_idx ON ibexa_shopping_list_entry (identifier);
-CREATE INDEX ibexa_shopping_list_entry_list_idx ON ibexa_shopping_list_entry (shopping_list_id);
-CREATE INDEX ibexa_shopping_list_entry_product_idx ON ibexa_shopping_list_entry (product_code);
-CREATE INDEX ibexa_shopping_list_entry_added_at_idx ON ibexa_shopping_list_entry (added_at);
-CREATE UNIQUE INDEX ibexa_shopping_list_entry_unique ON ibexa_shopping_list_entry (shopping_list_id, product_code);
-COMMENT ON COLUMN ibexa_shopping_list_entry.added_at IS '(DC2Type:datetime_immutable)';
-ALTER TABLE ibexa_shopping_list
- ADD CONSTRAINT ibexa_shopping_list_owner_fk FOREIGN KEY (owner_id) REFERENCES ibexa_user (contentobject_id) ON UPDATE CASCADE ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE;
-ALTER TABLE ibexa_shopping_list_entry
- ADD CONSTRAINT ibexa_shopping_list_entry_list_fk FOREIGN KEY (shopping_list_id) REFERENCES ibexa_shopping_list (id) ON UPDATE CASCADE ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE;
-ALTER TABLE ibexa_shopping_list_entry
- ADD CONSTRAINT ibexa_shopping_list_entry_product_fk FOREIGN KEY (product_code) REFERENCES ibexa_product (code) ON UPDATE CASCADE ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE;
diff --git a/code_samples/shopping_list/install/src/Migrations/Ibexa/migrations/shopping_list_user.yaml b/code_samples/shopping_list/install/src/Migrations/Ibexa/migrations/shopping_list_user.yaml
deleted file mode 100644
index ed3e6784bb5..00000000000
--- a/code_samples/shopping_list/install/src/Migrations/Ibexa/migrations/shopping_list_user.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
-- type: reference
- mode: load
- filename: references/customer_group_references.yml
-
-- type: role
- mode: create
- metadata:
- identifier: Shopping List User
- policies:
- - module: shopping_list
- function: create
- limitations:
- - identifier: ShoppingListOwner
- values: [self]
- - module: shopping_list
- function: view
- limitations:
- - identifier: ShoppingListOwner
- values: [self]
- - module: shopping_list
- function: edit
- limitations:
- - identifier: ShoppingListOwner
- values: [self]
- - module: shopping_list
- function: delete
- limitations:
- - identifier: ShoppingListOwner
- values: [self]
- actions:
- - action: assign_role_to_user_group
- value:
- id: 'reference:ref__checkout__customers_user_group__content_id'
diff --git a/code_samples/shopping_list/php_api/src/Command/ShoppingListFilterCommand.php b/code_samples/shopping_list/php_api/src/Command/ShoppingListFilterCommand.php
deleted file mode 100644
index 9001e099be2..00000000000
--- a/code_samples/shopping_list/php_api/src/Command/ShoppingListFilterCommand.php
+++ /dev/null
@@ -1,69 +0,0 @@
-userService->loadUserByLogin($login);
- $this->permissionResolver->setCurrentUserReference($user);
-
- $list = $this->shoppingListService->createShoppingList(new ShoppingListCreateStruct($name));
-
- $list = $this->shoppingListService->addEntries($list, [new EntryAddStruct($desiredProductCodes[1])]);
-
- $filteredProductCodes = array_filter(
- $desiredProductCodes,
- static fn ($productCode): bool => !$list->getEntries()->hasEntryWithProductCode($productCode)
- );
- $list = $this->shoppingListService->addEntries(
- $list,
- array_map(
- static fn ($productCode): EntryAddStruct => new EntryAddStruct($productCode),
- $filteredProductCodes
- )
- );
-
- $this->displayList($output, $list);
-
- $this->shoppingListService->deleteShoppingList($list);
-
- return Command::SUCCESS;
- }
-
- private function displayList(OutputInterface $output, ShoppingListInterface $list): void
- {
- $output->writeln("{$list->getOwner()->getName()} ({$list->getOwner()->getLogin()})");
- $output->writeln("{$list->getName()} ({$list->getIdentifier()})" . ($list->isDefault() ? ' [default]' : ''));
- $entries = $list->getEntries();
- $output->writeln(count($entries) . (count($entries) > 1 ? ' entries' : ' entry'));
- foreach ($entries as $entry) {
- $output->writeln("- {$entry->getProduct()->getName()} ({$entry->getProduct()->getCode()})");
- }
- }
-}
diff --git a/code_samples/shopping_list/php_api/src/Command/ShoppingListMoveCommand.php b/code_samples/shopping_list/php_api/src/Command/ShoppingListMoveCommand.php
deleted file mode 100644
index 8d02d055b5e..00000000000
--- a/code_samples/shopping_list/php_api/src/Command/ShoppingListMoveCommand.php
+++ /dev/null
@@ -1,75 +0,0 @@
-userService->loadUserByLogin($login);
- $this->permissionResolver->setCurrentUserReference($user);
-
- $sourceList = $this->shoppingListService->createShoppingList(new ShoppingListCreateStruct($prefix . '-source'));
- $targetList = $this->shoppingListService->createShoppingList(new ShoppingListCreateStruct($prefix . '-target'));
-
- $sourceList = $this->shoppingListService->addEntries($sourceList, [new EntryAddStruct($productCodes[0]), new EntryAddStruct($productCodes[1])]);
- $targetList = $this->shoppingListService->addEntries($targetList, [new EntryAddStruct($productCodes[1])]);
-
- $entriesToRemove = [];
- $entriesToAdd = [];
- foreach ($movedProductCodes as $productCode) {
- if ($sourceList->getEntries()->hasEntryWithProductCode($productCode)) {
- $entriesToRemove[] = $sourceList->getEntries()->getEntryWithProductCode($productCode);
- if (!$targetList->getEntries()->hasEntryWithProductCode($productCode)) {
- $entriesToAdd[] = new EntryAddStruct($productCode);
- }
- }
- }
- $sourceList = $this->shoppingListService->removeEntries($sourceList, $entriesToRemove);
- $targetList = $this->shoppingListService->addEntries($targetList, $entriesToAdd);
-
- $this->displayList($output, $sourceList);
- $this->displayList($output, $targetList);
-
- $this->shoppingListService->deleteShoppingList($sourceList);
- $this->shoppingListService->deleteShoppingList($targetList);
-
- return Command::SUCCESS;
- }
-
- private function displayList(OutputInterface $output, ShoppingListInterface $list): void
- {
- $output->writeln("{$list->getOwner()->getName()} ({$list->getOwner()->getLogin()})");
- $output->writeln("{$list->getName()} ({$list->getIdentifier()})" . ($list->isDefault() ? ' [default]' : ''));
- $entries = $list->getEntries();
- $output->writeln(count($entries) . (count($entries) > 1 ? ' entries' : ' entry'));
- foreach ($entries as $entry) {
- $output->writeln("- {$entry->getProduct()->getName()} ({$entry->getProduct()->getCode()})");
- }
- }
-}
diff --git a/code_samples/shopping_list/php_api/src/Controller/CartShoppingListTransferController.php b/code_samples/shopping_list/php_api/src/Controller/CartShoppingListTransferController.php
deleted file mode 100644
index e65fce2e1db..00000000000
--- a/code_samples/shopping_list/php_api/src/Controller/CartShoppingListTransferController.php
+++ /dev/null
@@ -1,96 +0,0 @@
-userService->loadUser($this->permissionResolver->getCurrentUserReference()->getUserId());
- $name = 'cart-shopping-list-transfer-test';
-
- $cartQuery = new CartQuery();
- $cartQuery->setOwnerId($user->getId());
- $cartsList = $this->cartService->findCarts($cartQuery);
- $cart = null;
- foreach ($cartsList->getCarts() as $cartItem) {
- if ($cartItem->getName() === $name) {
- $cart = $cartItem;
- break;
- }
- }
- if (null === $cart) {
- $cart = $this->cartService->createCart(new CartCreateStruct($name, $this->currencyService->getCurrencyByCode($currency), $user));
- }
-
- $lists = $this->shoppingListService->findShoppingLists(new ShoppingListQuery(new NameCriterion($name)));
- if ($lists->getTotalCount() > 0) {
- $list = $lists->getShoppingLists()[0];
- } else {
- $list = $this->shoppingListService->createShoppingList(new ShoppingListCreateStruct($name));
- }
-
- $this->cartService->emptyCart($cart);
- $list = $this->shoppingListService->clearShoppingList($list);
-
- $list = $this->shoppingListService->addEntries($list, [new ShoppingListEntryAddStruct($productCode)]);
-
- $entry = $list->getEntries()->getEntryWithProductCode($productCode)->getIdentifier(); // Get entry's automatically generated identifier
- $cart = $this->cartShoppingListTransferService->addSelectedEntriesToCart($list, [$entry], $cart);
- $cart = $this->cartShoppingListTransferService->addSelectedEntriesToCart($list, [$entry], $cart);
-
- dump(
- $list->getEntries()->hasEntryWithProductCode($productCode), // true as the entry is copied and not moved
- $cart->getEntries()->getEntryForProduct($this->productService->getProduct($productCode))->getQuantity() // 2 as the entry was added twice
- );
-
- $list = $this->shoppingListService->clearShoppingList($list); // Empty the list to avoid duplicate and test the move from cart
-
- $list = $this->cartShoppingListTransferService->moveCartToShoppingList($cart, $list);
- $cart = $this->cartService->getCart($cart->getIdentifier()); // Refresh local object from persistence
-
- dump(
- $list->getEntries()->hasEntryWithProductCode($productCode), // true as, after the clear, the entry is moved from cart
- $cart->getEntries()->hasEntryForProduct($this->productService->getProduct($productCode)) // false as the entry was moved
- );
-
- return new Response('');
- }
-}
diff --git a/code_samples/shopping_list/search/criteria.php b/code_samples/shopping_list/search/criteria.php
deleted file mode 100644
index 18c0ae2429a..00000000000
--- a/code_samples/shopping_list/search/criteria.php
+++ /dev/null
@@ -1,15 +0,0 @@
-getCurrentUserReference()),
- new Query\Criterion\IsDefaultCriterion(false)
- ),
- [
- new Query\SortClause\Name(),
- ]
-);
diff --git a/code_samples/shopping_list/search/sort_clauses.php b/code_samples/shopping_list/search/sort_clauses.php
deleted file mode 100644
index 4927957c09b..00000000000
--- a/code_samples/shopping_list/search/sort_clauses.php
+++ /dev/null
@@ -1,16 +0,0 @@
-findShoppingLists(
- new ShoppingListQuery(
- null,
- [
- new IsDefault(IsDefault::SORT_DESC),
- new Name(),
- ]
- )
-);
diff --git a/code_samples/shopping_list/shopping_list_rest_api.sh b/code_samples/shopping_list/shopping_list_rest_api.sh
deleted file mode 100644
index 416487a9e49..00000000000
--- a/code_samples/shopping_list/shopping_list_rest_api.sh
+++ /dev/null
@@ -1,48 +0,0 @@
-BASE_URL='TODO'
-CUSTOMER_USERNAME='admin'
-CUSTOMER_PASSWORD='publish'
-PRODUCT_CODE='TODO'
-
-# Log in and store CSRF Token
-csrf_token=`curl -s -c cookie.txt -X 'POST' \
- "$BASE_URL/api/ibexa/v2/user/sessions" \
- -H 'accept: application/vnd.ibexa.api.Session+json' \
- -H 'Content-Type: application/vnd.ibexa.api.SessionInput+json' \
- -d "{
- \"SessionInput\": {
- \"login\": \"$CUSTOMER_USERNAME\",
- \"password\": \"$CUSTOMER_PASSWORD\"
- }
-}" | jq -r '.Session.csrfToken'`
-
-# Get default shopping list identifier if it exists
-default_list_identifier=`curl -s -b cookie.txt -X 'GET' \
- "$BASE_URL/api/ibexa/v2/shopping-list?isDefault=true" \
- -H 'accept: application/vnd.ibexa.api.ShoppingListCollection+json' \
- | jq -r '.ShoppingListCollection.ShoppingList[0].identifier'`
-
-# Clear default shopping list
-if [ "" != "$default_list_identifier" ]; then
- curl -s -b cookie.txt -X 'POST' \
- "$BASE_URL/api/ibexa/v2/shopping-list/$default_list_identifier/clear" \
- -H 'accept: application/vnd.ibexa.api.ShoppingList+json' \
- -H "X-CSRF-Token: $csrf_token" | jq
-fi
-
-# Add entries to the default shopping list,
-# create it if it doesn't exist yet,
-# and get the updated data
-curl -s -b cookie.txt -X 'POST' \
- "$BASE_URL/api/ibexa/v2/shopping-list/default/entries" \
- -H 'accept: application/vnd.ibexa.api.ShoppingList+json' \
- -H "X-CSRF-Token: $csrf_token" \
- -H 'Content-Type: application/vnd.ibexa.api.ShoppingListEntriesAdd+json' \
- -d "{
- \"ShoppingListEntriesAdd\": {
- \"entries\": [
- {
- \"productCode\": \"$PRODUCT_CODE\"
- }
- ]
- }
-}" | jq
diff --git a/code_samples/workflow/services/workflow.yaml b/code_samples/workflow/services/workflow.yaml
deleted file mode 100644
index 4c132b05511..00000000000
--- a/code_samples/workflow/services/workflow.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-services:
- App\Checkout\Workflow\Strategy\NewWorkflow:
- tags:
- - name: ibexa.checkout.workflow.strategy
- priority: 100
\ No newline at end of file
diff --git a/code_samples/workflow/strategy/NewWorkflow.php b/code_samples/workflow/strategy/NewWorkflow.php
deleted file mode 100644
index 6d15c010ce9..00000000000
--- a/code_samples/workflow/strategy/NewWorkflow.php
+++ /dev/null
@@ -1,25 +0,0 @@
-getCurrency()->getCode() === 'EUR';
- }
-}
diff --git a/code_samples/workflow/strategy/NewWorkflowConditionalStep.php b/code_samples/workflow/strategy/NewWorkflowConditionalStep.php
deleted file mode 100644
index 1fa93235d73..00000000000
--- a/code_samples/workflow/strategy/NewWorkflowConditionalStep.php
+++ /dev/null
@@ -1,25 +0,0 @@
-getCurrency()->getCode() === 'EUR';
- }
-}
diff --git a/composer.json b/composer.json
index 14ae716c0eb..6279c11be6f 100644
--- a/composer.json
+++ b/composer.json
@@ -22,7 +22,6 @@
"phpunit/phpunit": "^11.0",
"symfony/yaml": "^7.0",
"ibexa/connector-gemini": "6.0.x-dev",
- "ibexa/automated-translation": "6.0.x-dev",
"ibexa/code-style": "~2.0.0",
"friendsofphp/php-cs-fixer": "^3.30",
"phpstan/phpstan": "^2.0",
@@ -30,6 +29,7 @@
"ibexa/doctrine-schema": "6.0.x-dev",
"ibexa/search": "6.0.x-dev",
"ibexa/content-forms": "6.0.x-dev",
+ "ibexa/content-tree": "6.0.x-dev",
"ibexa/design-engine": "6.0.x-dev",
"ibexa/user": "6.0.x-dev",
"ibexa/notifications": "6.0.x-dev",
@@ -43,7 +43,6 @@
"ibexa/connector-openai": "6.0.x-dev",
"ibexa/mcp": "6.0.x-dev",
"ibexa/migrations": "6.0.x-dev",
- "ibexa/cart": "6.0.x-dev",
"ibexa/installer": "6.0.x-dev",
"ibexa/product-catalog": "6.0.x-dev",
"ibexa/graphql": "6.0.x-dev",
@@ -57,18 +56,13 @@
"ibexa/segmentation": "6.0.x-dev",
"ibexa/fieldtype-page": "6.0.x-dev",
"ibexa/page-builder": "6.0.x-dev",
- "ibexa/order-management": "6.0.x-dev",
"ibexa/calendar": "6.0.x-dev",
- "ibexa/payment": "~6.0.x-dev",
- "ibexa/shipping": "6.0.x-dev",
"ibexa/fieldtype-matrix": "6.0.x-dev",
- "ibexa/storefront": "6.0.x-dev",
"ibexa/seo": "6.0.x-dev",
"ibexa/core": "6.0.x-dev",
"ibexa/admin-ui": "6.0.x-dev",
"ibexa/activity-log": "6.0.x-dev",
"ibexa/workflow": "6.0.x-dev",
- "ibexa/checkout": "6.0.x-dev",
"ibexa/elasticsearch": "6.0.x-dev",
"ibexa/oauth2-client": "6.0.x-dev",
"ibexa/oauth2-server": "6.0.x-dev",
@@ -79,8 +73,6 @@
"ibexa/connector-dam": "~6.0.x-dev",
"ibexa/twig-components": "~6.0.x-dev",
"ibexa/tree-builder": "~6.0.x-dev",
- "ibexa/discounts": "~6.0.x-dev",
- "ibexa/discounts-codes": "~6.0.x-dev",
"ibexa/core-search": "~6.0.x-dev",
"ibexa/product-catalog-symbol-attribute": "~6.0.x-dev",
"ibexa/messenger": "~6.0.x-dev",
@@ -88,7 +80,6 @@
"ibexa/share": "~6.0.x-dev",
"ibexa/phpstan": "~6.0.-dev",
"ibexa/connector-quable": "6.0.x-dev",
- "ibexa/shopping-list": "~6.0.x-dev",
"deptrac/deptrac": "^3.0",
"ibexa/cdp": "~6.0.x-dev",
"ibexa/connector-raptor": "~6.0.x-dev",
@@ -100,7 +91,6 @@
"ibexa/site-factory": "~6.0.x-dev",
"ibexa/ckeditor-premium": "~6.0.x-dev",
"ibexa/measurement": "~6.0.x-dev",
- "ibexa/connector-actito": "~6.0.x-dev",
"ibexa/fastly": "~6.0.x-dev",
"ibexa/connect": "~6.0.x-dev",
"ibexa/connector-qualifio": "~6.0.x-dev",
diff --git a/deptrac.baseline.yaml b/deptrac.baseline.yaml
index 4a0b3e6f11d..14b12d28528 100644
--- a/deptrac.baseline.yaml
+++ b/deptrac.baseline.yaml
@@ -2,42 +2,12 @@ deptrac:
skip_violations:
AcmeFeatureBundle:
- Ibexa\Bundle\Core\DependencyInjection\IbexaCoreExtension
- App\AutomatedTranslation\ImageFieldEncoder:
- - Ibexa\Core\FieldType\Image\Value
App\Block\Listener\MyBlockListener:
- Ibexa\FieldTypePage\FieldType\Page\Block\Renderer\BlockRenderEvents
- Ibexa\FieldTypePage\FieldType\Page\Block\Renderer\Event\PreRenderEvent
- Ibexa\FieldTypePage\FieldType\Page\Block\Renderer\Twig\TwigRenderRequest
App\CatalogFilter\ProductNameFilterFormMapper:
- Ibexa\Bundle\ProductCatalog\Form\Type\TagifyType
- App\Checkout\Workflow\Strategy\NewWorkflow:
- - Ibexa\Checkout\Value\Workflow\Workflow
- App\Checkout\Workflow\Strategy\NewWorkflowConditionalStep:
- - Ibexa\Checkout\Value\Workflow\Workflow
- App\Collaboration\Cart\Mapper\CartProxyMapper:
- - Ibexa\Core\Repository\ProxyFactory\ProxyGeneratorInterface
- App\Collaboration\Cart\Mapper\CartSessionDomainMapper:
- - Ibexa\Collaboration\Mapper\Domain\ParticipantCollectionDomainMapperInterface
- - Ibexa\Collaboration\Mapper\Domain\SessionDomainMapperInterface
- - Ibexa\Collaboration\Mapper\Domain\UserProxyDomainMapperInterface
- - Ibexa\Collaboration\Persistence\Values\AbstractSession
- App\Collaboration\Cart\Mapper\CartSessionPersistenceMapper:
- - Ibexa\Collaboration\Mapper\Persistence\SessionPersistenceMapperInterface
- - Ibexa\Collaboration\Persistence\Values\AbstractSessionCreateStruct
- - Ibexa\Collaboration\Persistence\Values\AbstractSessionUpdateStruct
- App\Collaboration\Cart\Persistence\Gateway\DatabaseGateway:
- - Ibexa\Collaboration\Persistence\Session\Inner\GatewayInterface
- - Ibexa\Collaboration\Persistence\Values\AbstractSessionCreateStruct
- - Ibexa\Collaboration\Persistence\Values\AbstractSessionUpdateStruct
- App\Collaboration\Cart\Persistence\Mapper:
- - Ibexa\Collaboration\Persistence\Session\Inner\MapperInterface
- - Ibexa\Collaboration\Persistence\Values\AbstractSession
- App\Collaboration\Cart\Persistence\Values\CartSession:
- - Ibexa\Collaboration\Persistence\Values\AbstractSession
- App\Collaboration\Cart\Persistence\Values\CartSessionCreateStruct:
- - Ibexa\Collaboration\Persistence\Values\AbstractSessionCreateStruct
- App\Collaboration\Cart\Persistence\Values\CartSessionUpdateStruct:
- - Ibexa\Collaboration\Persistence\Values\AbstractSessionUpdateStruct
App\Command\AddMissingAltTextCommand:
- Ibexa\Core\FieldType\Image\Value
- Ibexa\Core\IO\IOBinarydataHandler
@@ -47,26 +17,11 @@ deptrac:
- Ibexa\ProductCatalog\Local\Repository\Values\Catalog\Status
App\Command\CreateImageCommand:
- Ibexa\Core\FieldType\Image\Value
- App\Command\ManageDiscountsCommand:
- - Ibexa\DiscountsCodes\Value\DiscountCondition\IsValidDiscountCode
- - Ibexa\Discounts\Value\DiscountCondition\IsInCurrency
- - Ibexa\Discounts\Value\DiscountCondition\IsInRegions
- - Ibexa\Discounts\Value\DiscountCondition\IsProductInArray
- - Ibexa\Discounts\Value\DiscountRule\FixedAmount
App\Command\MigrationCommand:
- Ibexa\Migration\Repository\Migration
- App\Command\OrderPriceCommand:
- - Ibexa\Discounts\Value\Price\Stamp\DiscountStamp
- - Ibexa\OrderManagement\Discounts\Value\DiscountsData
- - Ibexa\ProductCatalog\Money\IntlMoneyFactory
- App\Command\PaymentMethodCommand:
- - Ibexa\Payment\Values\PaymentMethodType
App\Command\SegmentCommand:
- Ibexa\Segmentation\Value\SegmentCreateStruct
- Ibexa\Segmentation\Value\SegmentGroupCreateStruct
- App\Command\ShippingMethodCommand:
- - Ibexa\ProductCatalog\Local\Repository\Values\Region
- - Ibexa\Shipping\Value\ShippingMethodType
App\Command\ViewCommand:
- Ibexa\Core\MVC\Symfony\View\Builder\ContentViewBuilder
- Ibexa\Core\MVC\Symfony\View\Renderer\TemplateRenderer
@@ -75,12 +30,6 @@ deptrac:
- Ibexa\Core\Pagination\Pagerfanta\LocationSearchAdapter
App\Controller\BreadcrumbController:
- Ibexa\Bundle\Core\Controller
- App\Controller\Checkout\OnePageCheckout:
- - Ibexa\Bundle\Checkout\Controller\AbstractStepController
- App\Controller\Checkout\Step\SelectSeatStepController:
- - Ibexa\Bundle\Checkout\Controller\AbstractStepController
- App\Controller\CustomCheckoutController:
- - Ibexa\Bundle\Core\Controller
App\Controller\CustomController:
- Ibexa\Core\MVC\Symfony\Security\Authorization\Attribute
App\Controller\CustomFilterController:
@@ -89,9 +38,6 @@ deptrac:
App\Controller\PaginationController:
- Ibexa\Bundle\Core\Controller
- Ibexa\Core\Pagination\Pagerfanta\ContentSearchAdapter
- App\Controller\ProductViewController:
- - Ibexa\Core\MVC\Symfony\View\ContentView
- - Ibexa\Core\MVC\Symfony\View\View
App\Controller\RelationController:
- Ibexa\Core\MVC\Symfony\View\View
App\Controller\RideController:
@@ -112,21 +58,11 @@ deptrac:
- Ibexa\CorporateAccount\Persistence\Values\ApplicationStateUpdateStruct
App\DependencyInjection\AddFloatStorageDefinitionTag:
- Ibexa\ProductCatalog\Local\Persistence\Legacy\Attribute\Float\StorageDefinition
- App\Discounts\Condition\IsAccountAnniversary:
- - Ibexa\Discounts\Value\AbstractDiscountExpressionAware
- App\Discounts\Condition\IsAccountAnniversaryConditionFactory:
- - Ibexa\Discounts\Repository\DiscountCondition\DiscountConditionFactoryInterface
- App\Discounts\Rule\PurchasingPowerParityRule:
- - Ibexa\Discounts\Value\AbstractDiscountExpressionAware
- App\Discounts\Rule\PurchasingPowerParityRuleFactory:
- - Ibexa\Discounts\Repository\DiscountRule\DiscountRuleFactoryInterface
App\EventListener\TextAnchorMenuTabListener:
- Ibexa\AdminUi\Menu\ContentEditAnchorMenuBuilder
- Ibexa\AdminUi\Menu\Event\ConfigureMenuEvent
App\EventSubscriber\AuthenticationTokenCreatedSubscriber:
- Ibexa\Core\MVC\Symfony\Security\UserWrapped
- App\EventSubscriber\BreadcrumbsMenuSubscriber:
- - Ibexa\Bundle\Storefront\Menu\Builder\BreadcrumbsMenuBuilder
App\EventSubscriber\FormFieldDefinitionSubscriber:
- Ibexa\FormBuilder\Definition\FieldAttributeDefinitionBuilder
- Ibexa\FormBuilder\Event\FieldDefinitionEvent
@@ -144,8 +80,6 @@ deptrac:
- Ibexa\IntegratedHelp\ProductTour\Block\LinkBlock
- Ibexa\IntegratedHelp\ProductTour\Block\TextBlock
- Ibexa\IntegratedHelp\ProductTour\ProductTourStep
- App\EventSubscriber\ResolveCampaginEventSubscriber:
- - Ibexa\ConnectorActito\Campaign\Campaign
App\Event\RandomBlockListener:
- Ibexa\FieldTypePage\FieldType\Page\Block\Renderer\BlockRenderEvents
- Ibexa\FieldTypePage\FieldType\Page\Block\Renderer\Event\PreRenderEvent
@@ -177,14 +111,6 @@ deptrac:
- Ibexa\FormBuilder\FormSubmission\Converter\BooleanFieldSubmissionConverter
App\FormBuilder\Form\Type\FieldAttribute\AttributeRichtextDescriptionType:
- Ibexa\FieldTypeRichText\Form\Type\RichTextType
- App\Form\FormMapper\PurchasingPowerParityFormMapper:
- - Ibexa\Bundle\Discounts\Form\FormMapper\AbstractFormMapper
- App\Form\Type\DiscountValue\PurchasingPowerParityValueType:
- - Ibexa\Bundle\Discounts\Form\Type\DiscountValueType
- App\Form\Type\OnePageCheckoutType:
- - Ibexa\Bundle\Checkout\Form\Type\AddressType
- - Ibexa\Bundle\Payment\Form\Type\PaymentMethodChoiceType
- - Ibexa\Bundle\Shipping\Form\Type\ShippingMethodChoiceType
App\GraphQL\Schema\MyFieldDefinitionMapper:
- Ibexa\GraphQL\Schema\Domain\Content\Mapper\FieldDefinition\DecoratingFieldDefinitionMapper
App\Migrations\Action\AssignSection:
@@ -255,10 +181,6 @@ deptrac:
- Ibexa\User\UserSetting\Group\AbstractGroup
App\Setting\Unit:
- Ibexa\Core\Base\Exceptions\InvalidArgumentException
- App\ShippingMethodType\Storage\StorageDefinition:
- - Ibexa\Shipping\Persistence\Legacy\ShippingMethod\AbstractOptionsStorageSchema
- App\ShippingMethodType\Storage\StorageSchema:
- - Ibexa\Shipping\Persistence\Legacy\ShippingMethod\AbstractOptionsStorageSchema
App\Tab\Dashboard\Everyone\EveryoneArticleTab:
- Ibexa\AdminUi\Tab\Dashboard\PagerLocationToDataMapper
- Ibexa\Core\Pagination\Pagerfanta\LocationSearchAdapter
diff --git a/docs/administration/back_office/back_office_elements/custom_components.md b/docs/administration/back_office/back_office_elements/custom_components.md
index 37fbab2eb3b..b19cf8fa2d4 100644
--- a/docs/administration/back_office/back_office_elements/custom_components.md
+++ b/docs/administration/back_office/back_office_elements/custom_components.md
@@ -99,45 +99,8 @@ For more information, see [this example using few of those components](component
|---|---|
|`admin-ui-infobar-options-before`| `vendor/ibexa/page-builder/src/bundle/Resources/views/page_builder/infobar/base.html.twig` |
-## Order Management [[% include 'snippets/commerce_badge.md' %]]
-
-| Group name | Template file |
-|---|---|
-|`admin-ui-order-details-summary-stats`| `vendor/ibexa/order-management/src/bundle/Resources/views/themes/admin/order_management/order/details_summary.html.twig` |
-|`admin-ui-order-details-summary-grid`| `vendor/ibexa/order-management/src/bundle/Resources/views/themes/admin/order_management/order/details_summary.html.twig` |
-
-## Payments [[% include 'snippets/commerce_badge.md' %]]
-
-| Group name | Template file |
-|---|---|
-|`admin-ui-payment-method-tabs`| `vendor/ibexa/payment/src/bundle/Resources/views/themes/admin/payment_method/view.html.twig` |
-
-## Shipping [[% include 'snippets/commerce_badge.md' %]]
-
-| Group name | Template file |
-|---|---|
-|`admin-ui-shipment-summary-grid`| `vendor/ibexa/shipping/src/bundle/Resources/views/themes/admin/shipment/tab/summary.html.twig` |
-|`admin-ui-shipping-method-block`| `vendor/ibexa/shipping/src/bundle/Resources/views/themes/admin/shipping/shipping_method/view.html.twig` |
-
## AI Actions
| Group name | Template file |
|---|---|
|`admin-ui-action-configuration-tabs`| `vendor/ibexa/connector-ai/src/bundle/Resources/views/themes/admin/connector_ai/action_configuration/view.html.twig` |
-
-## Discounts [[% include 'snippets/commerce_badge.md' %]]
-
-| Group name | Template file |
-|---|---|
-|`admin-ui-discount-block`| `vendor/ibexa/discounts/src/bundle/Resources/views/themes/admin/discounts/view.html.twig` |
-|`admin-ui-discount-condition-summary`| `vendor/ibexa/discounts/src/bundle/Resources/views/themes/admin/discounts/tab/details.html.twig` |
-|`admin-ui-discount-condition-code-usage-summary`| `vendor/ibexa/discounts/src/bundle/Resources/views/themes/admin/discounts/tab/details.html.twig` |
-|`admin-ui-discount-condition-code-summary`| `vendor/ibexa/discounts/src/bundle/Resources/views/themes/admin/discounts/tab/details.html.twig` |
-|`admin-ui-discount-condition-code-usage-limit-summary`| `vendor/ibexa/discounts/src/bundle/Resources/views/themes/admin/discounts/tab/details.html.twig` |
-
-## Translations management [[% include 'snippets/lts-update_badge.md' %]]
-
-| Group name | Template file |
-|---|---|
-|`admin-ui-content-translation-modal-footer`| `vendor/ibexa/translations-management/src/bundle/Resources/views/themes/admin/translations_management/component/side_by_side_modal_footer.html.twig` |
-|`admin-ui-content-edit-translation-select-footer`| `vendor/ibexa/translations-management/src/bundle/Resources/views/themes/admin/translations_management/component/side_by_side_content_edit_footer.html.twig` |
diff --git a/docs/administration/back_office/notifications.md b/docs/administration/back_office/notifications.md
index 352934598ab..dcef586d5a4 100644
--- a/docs/administration/back_office/notifications.md
+++ b/docs/administration/back_office/notifications.md
@@ -12,8 +12,6 @@ You can send two types of notifications to the users:
- [User notifications](#user-notifications) are sent to a specific user.
They appear in their profile in the back office.
-To send notification to other channels, see [Notification channels](notification_channels.md).
-
## Notification bars
Notifications are displayed as a message bar in the back office.
@@ -78,8 +76,6 @@ The values shown above are the defaults.
To send notification bars, you can also subscribe to a notification with the `browser` channel.
-For more information, see [Notifications channels](notification_channels.md).
-
## User notifications
You can send notifications to users which are displayed in the user menu.
@@ -134,5 +130,3 @@ The example below presents a modified renderer that uses Twig to render a list v
### `ibexa` notification channel
To send user notifications, you can also subscribe to a notification with the `ibexa` channel.
-
-For more information, see [Notifications channels](notification_channels.md).
diff --git a/docs/administration/dashboard/customize_dashboard.md b/docs/administration/dashboard/customize_dashboard.md
index 44e91b00c76..8bd0d5804c1 100644
--- a/docs/administration/dashboard/customize_dashboard.md
+++ b/docs/administration/dashboard/customize_dashboard.md
@@ -7,7 +7,7 @@ edition: experience
!!! note
- The Dashboard Builder is available only in the Experience and Commerce editions.
+ The Dashboard Builder is available only in the Experience edition.
The dashboard from the Headless edition can be customized using [Twig Components](components.md).
You can customize the dashboard depending on your needs using Dashboard Builder.
@@ -31,8 +31,6 @@ While opening Dashboard Builder, layout window appears - you can choose one from
You can also add custom layout that then can be available in Dashboard Builder.
-For more information, see [Customize storefront layout](customize_storefront_layout.md).
-
## Create custom blocks
Dashboard Builder provides set of ready-to-use blocks, for example, Common content, Quick actions, or [[= product_name =]] News.
diff --git a/docs/administration/project_organization/bundles.md b/docs/administration/project_organization/bundles.md
index b374e70b85a..06942cb4886 100644
--- a/docs/administration/project_organization/bundles.md
+++ b/docs/administration/project_organization/bundles.md
@@ -54,7 +54,7 @@ To remove a bundle (either one you created yourself, or an out-of-the-box one th
|[ibexa/http-cache](https://github.com/ibexa/http-cache)|[HTTP cache handling](http_cache.md), using multi tagging|
|[ibexa/i18n](https://github.com/ibexa/i18n)|Centralized translations to ease synchronization with Crowdin|
|[ibexa/messenger](https://github.com/ibexa/messenger)|[Background and asynchronous task processing](background_tasks.md) using Symfony Messenger|
-|[ibexa/notifications](https://github.com/ibexa/notifications)| Sending [notifications to channels](notification_channels.md)|
+|[ibexa/notifications](https://github.com/ibexa/notifications)| Sending notifications to channels|
|[ibexa/post-install](https://github.com/ibexa/post-install)|Apache and nginx templates|
|[ibexa/rest](https://github.com/ibexa/rest)|REST API|
|[ibexa/search](https://github.com/ibexa/search)|Common search functionalities|
@@ -115,30 +115,12 @@ To remove a bundle (either one you created yourself, or an out-of-the-box one th
|ibexa/site-factory|Enables configuration of sites from UI|
|ibexa/engage|Enables integration with [[[= product_name_engage =]]](https://developers.qualifio.com/docs/engage/)|
-## [[= product_name_com =]] packages
-
-|Bundle|Description|
-|---------|-----------|
-|ibexa/experience|Metapackage for Symfony Flex-based [[= product_name =]] Experience installation|
-|ibexa/cart|Main store functionalities|
-|ibexa/checkout|Store checkout functionality|
-|ibexa/corporate-account-commerce-bridge|Additional functionality for [corporate accounts](corporate_admin_panel.md)|
-|ibexa/discounts|Adds [discounts](discounts.md) functionality|
-|ibexa/discounts-codes|Adds the possibility to use discount codes with the [Discounts](discounts.md) functionality|
-|ibexa/storefront|A storefront starting kit|
-|ibexa/order-management|Order management|
-|ibexa/payment|Payment handling|
-|ibexa/shipping|Shipping handling|
-|ibexa/connector-payum|[Payum integration](payum_integration.md)|
-
## Optional packages
The following packages are optional and can be installed independently.
|Bundle|Description|
|---------|-----------|
-|[ibexa/automated-translation](https://github.com/ibexa/automated-translation)|Automated translation of content using [Google Translate or DeepL](automated_translations.md)|
|ibexa/cdp|Integration with [[[= product_name_cdp =]]](../../raptor_cdp/raptor_cdp.md)|
-|[ibexa/cloud](https://github.com/ibexa/cloud)|Integration with [[[= product_name_cloud =]]](/ibexa_cloud/ibexa_cloud.md)|
In addition, you can extend the capabilities of your project by installing additional [LTS Updates](editions.md#lts-updates).
diff --git a/docs/administration/recent_activity/recent_activity.md b/docs/administration/recent_activity/recent_activity.md
index 74cbb4b34d1..4fa9a2bc747 100644
--- a/docs/administration/recent_activity/recent_activity.md
+++ b/docs/administration/recent_activity/recent_activity.md
@@ -75,7 +75,7 @@ The [`activity_log/read`](policies.md#activity-log) policy gives a role the acce
It can be limited to "Only own logs" ([`ActivityLogOwner`](limitation_reference.md#activity-log-owner-limitation)).
The policy should be given to every roles having access to the back office, at least with the `ActivityLogOwner` owner limitation, to allow them to use the "Recent activity" block in the [default dashboard](configure_default_dashboard.md) or their [custom dashboard](customize_dashboard.md).
-This policy is required to view [activity log in user profile]([[= user_doc =]]/getting_started/get_started/#view-and-edit-user-profile), if [profile is enabled](update_from_4.5.md#user-profile).
+This policy is required to view [activity log in user profile]([[= user_doc =]]/getting_started/get_started/#view-and-edit-user-profile), if the user profile is enabled.
!!! caution
diff --git a/docs/api/event_reference/cart_events.md b/docs/api/event_reference/cart_events.md
deleted file mode 100644
index c35ac86f6af..00000000000
--- a/docs/api/event_reference/cart_events.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-description: Events that are triggered when working with carts.
-edition: commerce
-page_type: reference
----
-
-# Cart events
-
-| Event | Dispatched by | Properties |
-|---|---|---|
-|`AddEntryEvent`|`CartService::addEntry`|`CartInterface $cart` `EntryAddStruct $entryAddStruct` `CartInterface $cartResult`|
-|`BeforeAddEntryEvent`|`CartService::addEntry`|`CartInterface $cart` `EntryAddStruct $entryAddStruct` `?CartInterface $cartResult = null`|
-|`BeforeCreateCartEvent`|`CartService::createCart`|`CartCreateStruct $cartCreateStruct` `?CartInterface $cartResult = null`|
-|`BeforeDeleteCartEvent`|`CartService::deleteCart`|`CartInterface $cart`|
-|`BeforeEmptyCartEvent`|`CartService::emptyCart`|`CartInterface $cart`|
-|`BeforeMergeCartsEvent`|`CartService::mergeCarts`|`CartInterface $targetCart` `array $cartsToMerge` `bool $deleteMergedCarts`|
-|`BeforeRemoveEntryEvent`|`CartService::removeEntry`|`CartInterface $cart` `EntryInterface $entry` `?CartInterface $cartResult = null`|
-|`BeforeUpdateCartMetadataEvent`|`CartService::updateCartMetadata`|`CartInterface $cart` `CartMetadataUpdateStruct $cartUpdateStruct` `?CartInterface $cartResult = null`|
-|`BeforeUpdateEntryEvent`|`CartService::updateEntry`|`CartInterface $cart` `EntryInterface $entry` `EntryUpdateStruct $entryUpdateStruct` `?CartInterface $cartResult = null`|
-|`CreateCartEvent`|`CartService::createCart`|`CartCreateStruct $cartCreateStruct` `CartInterface $cartResult`|
-|`DeleteCartEvent`|`CartService::deleteCart`|`CartInterface $cart`|
-|`EmptyCartEvent`|`CartService::emptyCart`|`CartInterface $cart`|
-|`MergeCartsEvent`|`CartService::mergeCarts`|`CartInterface $cartResult`|
-|`RemoveEntryEvent`|`CartService::removeEntry`|`CartInterface $cart` `EntryInterface $entry` `CartInterface $cartResult`|
-|`UpdateCartMetadataEvent`|`CartService::updateCartMetadata`|`CartInterface $cart` `CartMetadataUpdateStruct $cartUpdateStruct` `CartInterface $cartResult`|
-|`UpdateEntryEvent`|`CartService::updateEntry`|`CartInterface $cart` `EntryInterface $entry` `EntryUpdateStruct $entryUpdateStruct` `CartInterface $cartResult`|
diff --git a/docs/api/event_reference/discounts_events.md b/docs/api/event_reference/discounts_events.md
deleted file mode 100644
index d7c400b6306..00000000000
--- a/docs/api/event_reference/discounts_events.md
+++ /dev/null
@@ -1,79 +0,0 @@
----
-description: Events that are triggered when working with discounts.
-page_type: reference
-editions:
- - commerce
-month_change: false
----
-
-# Discounts events
-
-## Discount management
-
-The events below are dispatched when managing [discounts](discounts.md):
-
-| Event | Dispatched by |
-|---|---|
-|[`BeforeCreateDiscountEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-BeforeCreateDiscountEvent.html)| [`DiscountServiceInterface::createDiscount()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountServiceInterface.html#method_createDiscount) |
-|[`CreateDiscountEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-CreateDiscountEvent.html)| [`DiscountServiceInterface::createDiscount()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountServiceInterface.html#method_createDiscount) |
-|[`BeforeEnableDiscountEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-BeforeEnableDiscountEvent.html)| [`DiscountServiceInterface::enableDiscount()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountServiceInterface.html#method_enableDiscount) |
-|[`EnableDiscountEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-EnableDiscountEvent.html)| [`DiscountServiceInterface::enableDiscount()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountServiceInterface.html#method_enableDiscount) |
-|[`BeforeDisableDiscountEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-BeforeDisableDiscountEvent.html)| [`DiscountServiceInterface::disableDiscount()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountServiceInterface.html#method_disableDiscount) |
-|[`DisableDiscountEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-DisableDiscountEvent.html)| [`DiscountServiceInterface::disableDiscount()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountServiceInterface.html#method_disableDiscount) |
-|[`BeforeDeleteDiscountEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-BeforeDeleteDiscountEvent.html)| [`DiscountServiceInterface::deleteDiscount()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountServiceInterface.html#method_deleteDiscount) |
-|[`DeleteDiscountEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-DeleteDiscountEvent.html)| [`DiscountServiceInterface::deleteDiscount()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountServiceInterface.html#method_deleteDiscount) |
-|[`BeforeUpdateDiscountEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-BeforeUpdateDiscountEvent.html)| [`DiscountServiceInterface::updateDiscount()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountServiceInterface.html#method_updateDiscount) |
-|[`UpdateDiscountEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-UpdateDiscountEvent.html)| [`DiscountServiceInterface::updateDiscount()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountServiceInterface.html#method_updateDiscount) |
-
-## Form events
-
-### Form
-
-The events below allow you to [customize the discounts creation wizard](extend_discounts_wizard.md).
-
-| Event | Dispatched by |
-|---|---|
-|[`CreateDiscountCreateStructEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-CreateDiscountCreateStructEvent.html) | [`DiscountFormMapperInterface::mapCreateDataToStruct()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountFormMapperInterface.html#method_mapCreateDataToStruct)|
-|[`CreateDiscountUpdateStructEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-CreateDiscountUpdateStructEvent.html) | [`DiscountFormMapperInterface::mapUpdateDataToStruct()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountFormMapperInterface.html#method_mapUpdateDataToStruct)|
-|[`CreateFormDataEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-CreateFormDataEvent.html) | [`DiscountFormMapperInterface::createFormData()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountFormMapperInterface.html#method_createFormData)|
-|[`MapDiscountToFormDataEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-MapDiscountToFormDataEvent.html) | [`DiscountFormMapperInterface::mapDiscountToFormData()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountFormMapperInterface.html#method_mapDiscountToFormData) |
-
-### Form steps
-
-The following events are dispatched when rendering each step of the discount wizard, allowing you to add new fields to it:
-
-| Event | Event name |
-|---|---|
-|[`CreateFormDataEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-Step-CreateFormDataEvent.html)| `ibexa.discounts.form_mapper..create_form_data`|
-|[`MapCreateDataToStructEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-Step-MapCreateDataToStructEvent.html)|`ibexa.discounts.form_mapper..map_create_data_to_struct`|
-|[`MapDiscountToFormDataEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-Step-MapDiscountToFormDataEvent.html)| `ibexa.discounts.form_mapper..map_discount_to_form_data`|
-|[`MapUpdateDataToStructEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-Step-MapUpdateDataToStructEvent.html)|`ibexa.discounts.form_mapper..map_update_data_to_struct`|
-
-The event classes are shared between steps, but they are dispatched with different names.
-Each step form mapper dispatches its own set of events.
-
-You can use the names specified above or generate them using the `createEventName` method, for example `CreateFormDataEvent::createEventName(GeneralPropertiesInterface::IDENTIFIER)` returns `ibexa.discounts.form_mapper.general_properties.create_form_data`.
-
-| Form mapper | Step identifier |
-|---|---|
-| [`ConditionsMapperInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-FormMapper-ConditionsMapperInterface.html)| [`conditions`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-Form-Data-ConditionsInterface.html#constant_IDENTIFIER) |
-| [`GeneralPropertiesMapperInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-FormMapper-GeneralPropertiesMapperInterface.html)| [`general_properties`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-Form-Data-GeneralPropertiesInterface.html#constant_IDENTIFIER) |
-| [`ProductConditionsMapperInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-FormMapper-ProductConditionsMapperInterface.html)| [`products`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-Form-Data-ProductConditionInterface.html#constant_IDENTIFIER) |
-| [`UserConditionsMapperInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-FormMapper-UserConditionsMapperInterface.html)| [`target_group`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-Form-Data-UserConditionInterface.html#constant_IDENTIFIER) |
-
-### Back office
-
-These events are dispatched by the back office controllers after user chooses the "Save" action when creating or updating a discount.
-
-| Event | Dispatched by | Description |
-|---|---|---|
-|[`PreDiscountCreateEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-Form-Event-PreDiscountCreateEvent.html) | `Ibexa\Bundle\Discounts\Controller\DiscountCreateController` | Dispatched when the discount creation is finished in the back office form |
-|[`PreDiscountUpdateEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-Form-Event-PreDiscountUpdateEvent.html) | `Ibexa\Bundle\Discounts\Controller\DiscountEditController` | Dispatched when the discount modifications is finished in the back office form |
-
-## Discount codes
-
-The event below allows you to inject your custom logic before the discount code is applied to a product in cart:
-
-| Event | Dispatched by | Description |
-|---|---|---|
-|[`BeforeDiscountCodeApplyEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Event-BeforeDiscountCodeApplyEvent.html)|`Ibexa\Bundle\DiscountsCodes\Controller\REST\DiscountCodeController`| Dispatched before a discount code is applied in the cart |
diff --git a/docs/api/event_reference/event_reference.md b/docs/api/event_reference/event_reference.md
index f4e961d0f79..0f9269f1802 100644
--- a/docs/api/event_reference/event_reference.md
+++ b/docs/api/event_reference/event_reference.md
@@ -18,20 +18,16 @@ For example, copying a content item is connected with two events: `BeforeCopyCon
[[= cards([
"api/event_reference/ai_action_events",
- "api/event_reference/cart_events",
"api/event_reference/product_catalog_events",
"api/event_reference/collaboration_events",
"api/event_reference/content_events",
"api/event_reference/content_type_events",
- "api/event_reference/discounts_events",
"api/event_reference/integrated_help_events",
"api/event_reference/language_events",
"api/event_reference/location_events",
"api/event_reference/object_state_events",
- "api/event_reference/order_management_events",
"api/event_reference/other_events",
"api/event_reference/page_events",
- "api/event_reference/payment_events",
"api/event_reference/role_events",
"api/event_reference/section_events",
"api/event_reference/segmentation_events",
diff --git a/docs/api/event_reference/order_management_events.md b/docs/api/event_reference/order_management_events.md
deleted file mode 100644
index f68009e320c..00000000000
--- a/docs/api/event_reference/order_management_events.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-description: Events that are triggered when working with orders.
-edition: commerce
-page_type: reference
----
-
-# Order management events
-
-| Event | Dispatched by | Properties |
-|---|---|---|
-|`BeforeCreateOrderEvent`|`OrderService::createOrder`|`OrderCreateStruct $createStruct` `?OrderInterface $orderResult = null`|
-|`CreateOrderEvent`|`OrderService::createOrder`|`OrderCreateStruct $createStruct` `OrderInterface $orderResult`|
-|`BeforeUpdateOrderEvent`|`OrderService::updateOrder`|`OrderInterface $order` `OrderUpdateStruct $updateStruct` `?OrderInterface $orderResult = null`|
-|`UpdateOrderEvent`|`OrderService::updateOrder`|`OrderInterface $order` `OrderUpdateStruct $updateStruct` `OrderInterface $orderResult`|
-|`BeforeCancelOrderEvent`|`OrderService::cancelOrder`|`OrderInterface $order`|
-|`CancelOrderEvent`|`OrderService::cancelOrder`|`OrderInterface $order`|
diff --git a/docs/api/event_reference/other_events.md b/docs/api/event_reference/other_events.md
index 020996a7b23..1423032a306 100644
--- a/docs/api/event_reference/other_events.md
+++ b/docs/api/event_reference/other_events.md
@@ -71,7 +71,7 @@ For more information, see [Customizing image optimizers with an event](images.md
|---|---|---|
|[`ConfigureImageOptimizersEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ImageEditor-Event-ConfigureImageOptimizersEvent.html)|`SpatieChainOptimizer::` `optimize`|`array $optimizers`|
-## Form Builder [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
+## Form Builder [[% include 'snippets/experience_badge.md' %]]
| Event | Dispatched by | Properties |
|---|---|---|
diff --git a/docs/api/event_reference/payment_events.md b/docs/api/event_reference/payment_events.md
deleted file mode 100644
index 313373447d3..00000000000
--- a/docs/api/event_reference/payment_events.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: Events that are triggered when working with payments and payment methods.
-edition: commerce
-page_type: reference
----
-
-# Payment events
-
-## Payments
-
-| Event | Dispatched by | Properties |
-|---|---|---|
-|`BeforeCreatePaymentEvent`|`PaymentService::createPayment`|`PaymentCreateStruct $createStruct` `?PaymentInterface $paymentResult = null`|
-|`CreatePaymentEvent`|`PaymentService::createPayment`|`PaymentCreateStruct $createStruct` `PaymentInterface $paymentResult`|
-|`BeforeUpdatePaymentEvent`|`PaymentService::updatePayment`|`PaymentInterface $payment` `PaymentUpdateStruct $updateStruct` `?PaymentInterface $paymentResult = null`|
-|`UpdatePaymentEvent`|`PaymentService::updatePayment`|`PaymentInterface $payment` `PaymentUpdateStruct $updateStruct` `PaymentInterface $paymentResult`|
-|`BeforeDeletePaymentEvent`|`PaymentService::DeletePayment`|`PaymentInterface $payment`|
-|`DeletePaymentEvent`|`PaymentService::DeletePayment`|`PaymentInterface $payment`|
-
-## Payment methods
-
-| Event | Dispatched by | Properties |
-|---|---|---|
-|`BeforeCreatePaymentMethodEvent`|`PaymentMethodService::createPaymentMethod`|`PaymentMethodCreateStruct $createStruct` `?PaymentMethodInterface $paymentMethodResult = null`|
-|`CreatePaymentMethodEvent`|`PaymentMethodService::createPaymentMethod`|`PaymentMethodCreateStruct $createStruct` `PaymentMethodInterface $paymentMethodResult`|
-|`BeforeUpdatePaymentMethodEvent`|`PaymentMethodService::updatePaymentMethod`|`PaymentMethodInterface $paymentMethod` `PaymentMethodUpdateStruct $updateStruct` `?PaymentMethodInterface $paymentMethodResult = null`|
-|`UpdatePaymentMethodEvent`|`PaymentMethodService::updatePaymentMethod`|`PaymentMethodInterface $paymentMethod` `PaymentMethodUpdateStruct $updateStruct` `PaymentMethodInterface $paymentMethodResult`|
-|`BeforeDeletePaymentMethodEvent`|`PaymentMethodService::DeletePaymentMethod`|`PaymentMethodInterface $paymentMethod`|
-|`DeletePaymentMethodEvent`|`PaymentMethodService::DeletePaymentMethod`|`PaymentMethodInterface $paymentMethod`|
diff --git a/docs/api/event_reference/shopping_list_events.md b/docs/api/event_reference/shopping_list_events.md
deleted file mode 100644
index 354ff24b1d9..00000000000
--- a/docs/api/event_reference/shopping_list_events.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-description: Events that are triggered while managing shopping lists.
-page_type: reference
-editions: lts-update commerce
-month_change: false
----
-
-# Shopping list events
-
-| Event | Dispatched by | Description |
-|--------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------|
-| [`BeforeCreateShoppingListEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Event-BeforeCreateShoppingListEvent.html) | [`ShoppingListService::` `createShoppingList()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-ShoppingListServiceInterface.html#method_createShoppingList) | Dispatched before a shopping list is created. Allows to modify or prevent creation. |
-| [`CreateShoppingListEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Event-CreateShoppingListEvent.html) | [`ShoppingListService::` `createShoppingList()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-ShoppingListServiceInterface.html#method_createShoppingList) | Dispatched after a shopping list is created. |
-| [`BeforeUpdateShoppingListEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Event-BeforeUpdateShoppingListEvent.html) | [`ShoppingListService::` `updateShoppingList()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-ShoppingListServiceInterface.html#method_updateShoppingList) | Dispatched before a shopping list is updated. Allows to modify or prevent update. |
-| [`UpdateShoppingListEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Event-UpdateShoppingListEvent.html) | [`ShoppingListService::` `updateShoppingList()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-ShoppingListServiceInterface.html#method_updateShoppingList) | Dispatched after a shopping list is updated. |
-| [`BeforeDeleteShoppingListEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Event-BeforeDeleteShoppingListEvent.html) | [`ShoppingListService::` `deleteShoppingList()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-ShoppingListServiceInterface.html#method_deleteShoppingList) | Dispatched before a shopping list is deleted. Allows to prevent deletion. |
-| [`DeleteShoppingListEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Event-DeleteShoppingListEvent.html) | [`ShoppingListService::` `deleteShoppingList()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-ShoppingListServiceInterface.html#method_deleteShoppingList) | Dispatched after a shopping list is deleted. |
-| [`BeforeClearShoppingListEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Event-BeforeClearShoppingListEvent.html) | [`ShoppingListService::` `clearShoppingList()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-ShoppingListServiceInterface.html#method_clearShoppingList) | Dispatched before a shopping list is cleared. Allows to modify or prevent clearing. |
-| [`ClearShoppingListEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Event-ClearShoppingListEvent.html) | [`ShoppingListService::` `clearShoppingList()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-ShoppingListServiceInterface.html#method_clearShoppingList) | Dispatched after a shopping list is cleared. |
-| [`BeforeAddEntriesEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Event-BeforeAddEntriesEvent.html) | [`ShoppingListService::` `addEntries()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-ShoppingListServiceInterface.html#method_addEntries) | Dispatched before entries are added to a shopping list. Allows to modify or prevent addition. |
-| [`AddEntriesEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Event-AddEntriesEvent.html) | [`ShoppingListService::` `addEntries()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-ShoppingListServiceInterface.html#method_addEntries) | Dispatched after entries are added to a shopping list. |
-| [`BeforeRemoveEntriesEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Event-BeforeRemoveEntriesEvent.html) | [`ShoppingListService::` `removeEntries()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-ShoppingListServiceInterface.html#method_removeEntries) | Dispatched before entries are removed from a shopping list. Allows to modify or prevent removal. |
-| [`RemoveEntriesEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Event-RemoveEntriesEvent.html) | [`ShoppingListService::` `removeEntries()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-ShoppingListServiceInterface.html#method_removeEntries) | Dispatched after entries are removed from a shopping list. |
diff --git a/docs/api/notification_channels.md b/docs/api/notification_channels.md
deleted file mode 100644
index c081f8549d9..00000000000
--- a/docs/api/notification_channels.md
+++ /dev/null
@@ -1,299 +0,0 @@
----
-description: Notify users through several channels.
-month_change: false
----
-
-# Notification channels
-
-The `ibexa/notifications` package integrates the [Symfony Notifier]([[= symfony_doc =]]/notifier.html) with [[= product_name =]].
-You can use it to create notifications and send them through various channels such as email, SMS, communication platforms,
-and the [back office user notifications](notifications.md#user-notifications).
-
-These notifications must not be confused with the [notification bars](notifications.md#notification-bars) or the [user notifications](notifications.md#user-notifications):
-
-| Notification category | Sent with | Description |
-|------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------|
-| [Notification bars](notifications.md#notification-bars) | [`TranslatableNotificationHandlerInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-AdminUi-Notification-TranslatableNotificationHandlerInterface.html) | Rendered as a message bar in the bottom-right corner. |
-| [User notifications](notifications.md#user-notifications) | [`NotificationService`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-NotificationService.html) | Rendered as [back office notification]([[= user_doc =]]/getting_started/notifications/). |
-| [Channel-based notifications](#subscribe-to-notifications) | [`NotificationServiceInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Notifications-Service-NotificationServiceInterface.html) | Rendering depends on the channel assigned to the notification type. |
-
-Unlike notification bars and user notifications, channel-based notifications don't have a predefined channel.
-You can configure how they are delivered to the user by using YAML configuration.
-Several channels are provided, and you can create your own.
-
-The [`Ibexa\Contracts\Notifications\Service\NotificationServiceInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Notifications-Service-NotificationServiceInterface.html)
-sends notifications, objects extending the `Symfony\Component\Notifier\Notification\Notification` class.
-You can inject this notification service into your code to send the built-in or custom notification types.
-Channel services implementing `Symfony\Component\Notifier\Channel\ChannelInterface` subscribe to a selection of notification types
-and deliver notifications to users through various transports.
-
-## Subscribe to notifications
-
-Some events generate notifications that you can deliver to the users through one or more channels.
-
-### Available notification types
-
-- [`Ibexa\Contracts\FormBuilder\Notifications\FormSubmitted`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-FormBuilder-Notifications-FormSubmitted.html)
-- [`Ibexa\Contracts\Notifications\SystemNotification\SystemNotification`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Notifications-SystemNotification-SystemNotification.html)
-- [`Ibexa\Contracts\OrderManagement\Notification\OrderStatusChange`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-OrderManagement-Notification-OrderStatusChange.html)
-- [`Ibexa\Contracts\Payment\Notification\PaymentStatusChange`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Payment-Notification-PaymentStatusChange.html)
-- [`Ibexa\Contracts\Shipping\Notification\ShipmentStatusChange`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Shipping-Notification-ShipmentStatusChange.html)
-- [`Ibexa\Contracts\User\Notification\UserInvitation`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-User-Notification-UserInvitation.html)
-- [`Ibexa\Contracts\User\Notification\UserPasswordReset`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-User-Notification-UserPasswordReset.html)
-- [`Ibexa\Contracts\User\Notification\UserRegister`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-User-Notification-UserRegister.html)
-- `Ibexa\Share\Notification\ContentEditInvitationNotification`
-- `Ibexa\Share\Notification\ContentViewInvitationNotification`
-- `Ibexa\Share\Notification\ExternalParticipantContentViewInvitationNotification`
-
-### Available notification channels
-
-You can list the notification channel services with the following command:
-
-```bash
-php bin/console debug:container --tag=notifier.channel
-```
-
-- `actito` - Notification forwarded as [transactional email](transactional_emails.md)
-- `browser` - Notification forwarded as [flash message]([[= symfony_doc =]]/session.html#flash-messages)
-- [`chat`]([[= symfony_doc =]]/notifier.html#chat-channel) - Notification forwarded to a communication platform like Slack, Microsoft Teams, or Google Chat
-- [`desktop`]([[= symfony_doc =]]/notifier.html#desktop-channel) - Notification forwarded to desktop applications like JoliNotif
-- [`email`]([[= symfony_doc =]]/notifier.html#email-channel) - Notification forwarded to email addresses
-- `ibexa` - Notification forwarded as [back office user notifications](notifications.md#user-notifications)
-- [`push`]([[= symfony_doc =]]/notifier.html#push-channel) - Notification forwarded to specific applications
-- [`sms`]([[= symfony_doc =]]/notifier.html#sms-channel) - Notification forwarded to phone numbers
-
-### Subscriptions configuration
-
-You can find the default configuration in `config/packages/ibexa.yaml` and `config/packages/ibexa_admin_ui.yaml`.
-You can modify it to define your own subscriptions.
-This page contains several examples of subscriptions configuration.
-
-!!! caution "Scopes may not merge as expected"
-
- Subscriptions defined for a scope may not merge with subscriptions from other scopes or from other files.
- For example, `default` scope might not be merged within a siteaccess group scope.
- To ensure you don't unsubscribe channels by mistake,
- always use the following command to check subscriptions for a siteaccess before and after any changes:
-
- ```bash
- php bin/console ibexa:debug:config notifications.subscriptions --siteaccess=
- ```
-
-#### Subscription example
-
-The following example shows how you can deliver notifications about Commerce-related activities through Slack:
-
-1. Install the Slack Notifier package:
-
- ```bash
- composer require symfony/slack-notifier
- ```
-
-2. In a .env file, [set the DSN to target a Slack channel or a Slack user](https://github.com/symfony/slack-notifier?tab=readme-ov-file#dsn-example):
-
- ```dotenv
- SLACK_DSN=slack://xoxb-token@default?channel=ibexa-notifications
- ```
-
-3. Subscribe to notification types related to Commerce, such as order, payment, and shipment status changes.
- For example, define the following configuration in a new `config/packages/notifications.yaml` file:
-
- ``` yaml hl_lines="12-20"
- [[= include_code('code_samples/api/notifications/config/packages/notifications.yaml', 1, 20, indent_level=1) =]]
- ```
-
-## Create notification class
-
-You can define a new notification type and assign a new set of channels to it, customizing how it's delivered.
-It must extend the `Symfony\Component\Notifier\Notification\Notification` class
-and can optionally implement interfaces required by specific channels.
-
-- Some channels don't accept the notification if it doesn't implement their specific notification interface.
- These interfaces come with a method to specifically format the notification for the channel.
-- Some channels accept every notification and have a default formatting if the notification doesn't implement their specific notification interface.
-
-| Channel | Specific notification interface | Accepts any notification object |
-|:----------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------|
-| `actito` | `Symfony\Component\Notifier\Notification\EmailNotificationInterface` | **No** |
-| `chat` | `Symfony\Component\Notifier\Notification\ChatNotificationInterface` | Yes |
-| `desktop` | `Symfony\Component\Notifier\Notification\DesktopNotificationInterface` | Yes |
-| `email` | `Symfony\Component\Notifier\Notification\EmailNotificationInterface` | **No** |
-| `ibexa` | [`Ibexa\Contracts\Notifications\SystemNotification\SystemNotificationInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Notifications-SystemNotification-SystemNotificationInterface.html) | **No** |
-| `push` | `Symfony\Component\Notifier\Notification\PushNotificationInterface` | Yes |
-| `sms` | `Symfony\Component\Notifier\Notification\SmsNotificationInterface` | **No** |
-
-The `ibexa` channel sends notifications to users through their profile menu, exactly as [user notifications](notifications.md#user-notifications).
-The [`SystemNotificationChannel` uses the core `NotificationService`](https://github.com/ibexa/notifications/blob/6.0/src/lib/SystemNotification/SystemNotificationChannel.php#L51) to do so.
-
-Some channels don't need a recipient:
-
-- `browser`: Always sends a flash message to the current user
-- `chat`: Always sends a message to the same connection resource
-
-### Notification sending
-
-Use the objects from the [`Ibexa\Contracts\Notifications`](/api/php_api/php_api_reference/namespaces/ibexa-contracts-notifications.html) namespace to work with notifications.
-
-The [`…\Service\NotificationServiceInterface::send()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Notifications-Service-NotificationServiceInterface.html#method_send) expects two arguments:
-
-- The first argument is an [`…\Value\NotificationInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Notifications-Value-NotificationInterface.html).
- This interface is implemented by the [`…\Value\Notification\SymfonyNotificationAdapter`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Notifications-Value-Notification-SymfonyNotificationAdapter.html)
- which allows you to wrap any class extending `Symfony\Component\Notifier\Notification\Notification`.
-- The optional second argument is an array of [`…\Value\RecipientInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Notifications-Value-RecipientInterface.html).
- This interface is implemented by the [`…\Value\Recipent\SymfonyRecipientAdapter`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Notifications-Value-Recipent-SymfonyRecipientAdapter.html)
- used to wrap `Symfony\Component\Notifier\Recipient\RecipientInterface`.
- - This Symfony interface is implemented by [`…\Value\Recipent\UserRecipient`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Notifications-Value-Recipent-UserRecipient.html)
- which can wrap classes implementing the [`Ibexa\Contracts\Core\Repository\Values\User\UserReference` interface](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-User-UserReference.html),
- - The [`UserService` methods to load a user](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-UserService.html#method_loadUser) are returning objects implementing this `UserReference` interface.
- - The [`PermissionResolver::getCurrentUserReference()` method](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-PermissionResolver.html#method_getCurrentUserReference) is returning objects implementing this `UserReference` interface.
-
-For example, to send a notification, you often use a combination like the following:
-
-``` php hl_lines="11-14"
-[[= include_code('code_samples/api/notifications/notification_send.php', 2) =]]
-```
-
-### `CommandExecuted` example
-
-The following example is a command that sends a notification to users on several channels simultaneously.
-This example could be a scheduled task or cron job that warns users about its result.
-
-1. First, create a `CommandExecuted` notification type.
- It supports two channels (`ibexa`, `email`), but could be extended to support more.
- As constructor arguments, an instance takes the command itself, the exit code of the run, and any caught exceptions.
-
- ``` php
- [[= include_code('code_samples/api/notifications/src/Notifications/CommandExecuted.php', indent_level=1) =]]
- ```
-
-2. Assign channels subscribed to this notification in `config/packages/notifications.yaml`:
-
- ``` yaml hl_lines="17-20"
- [[= include_code('code_samples/api/notifications/config/packages/notifications.yaml', 5, 24, indent_level=1) =]]
- ```
-
-3. Create a command sending a `CommandExecuted` notification at the end of execution:
- It randomly succeeds or fails to demonstrate how notifications can communicate different execution results.
- It could be declared as a service to set the list of recipients' logins (`$recipientLogins`) from a configuration file.
-
- ``` php
- [[= include_code('code_samples/api/notifications/src/Command/NotificationSenderCommand.php', indent_level=1) =]]
- ```
-
-When you execute this command, it fails randomly and notifies the Administrator user about the result.
-
-
-
-### `ControllerFeedback` example
-
-The following example shows a custom notification sent by a controller and displayed as a flash message on the corresponding page in the browser.
-
-The following `ControllerFeedback` notification type is a class that only extends the base:
-
-``` php
-[[= include_code('code_samples/api/notifications/src/Notifications/ControllerFeedback.php') =]]
-```
-
-The `ControllerFeedback` notification is sent in a controller action:
-
-``` php
-[[= include_code('code_samples/api/notifications/src/Controller/NotificationSenderController.php') =]]
-```
-
-For the example, the notification is sent in a back office context for all editions and on the front end for Commerce edition.
-An empty template only extending the page layout is used for the demonstration.
-
-`templates/themes/admin/notification-sender-controller.html.twig`:
-
-``` twig
-[[= include_code('code_samples/api/notifications/templates/themes/admin/notification-sender-controller.html.twig') =]]
-```
-
-`templates/themes/storefront/notification-sender-controller.html.twig`:
-
-``` twig
-[[= include_code('code_samples/api/notifications/templates/themes/storefront/notification-sender-controller.html.twig') =]]
-```
-
-In the back office, a notification sent as a flash message has the `ibexa-alert--notification` CSS class.
-This doesn't have a default style.
-For this example, the style is the same as an existing alert message type.
-
-The `assets/scss/notifications.scss` declares the CSS class `ibexa-alert--notification` as being the same as the `ibexa-alert--info` CSS class
-
-``` scss
-[[= include_code('code_samples/api/notifications/assets/scss/notifications.scss') =]]
-```
-
-This `assets/scss/notifications.scss` is added to the Admin UI layout in `webpack.config.js`:
-
-``` javascript
-[[= include_code('code_samples/api/notifications/webpack.config.js', 50) =]]
-```
-
-On the storefront, a notification sent as a flash message has the `ibexa-store-notification--notification` CSS class.
-This class already has a default style applied.
-
-Subscribe to this new notification type in `config/packages/notifications.yaml`:
-
-- In the `admin_group` scope with the `browser` channel
-- For Commerce edition, in the `storefront_group` scope with the `browser` channel
-
-``` yaml hl_lines="13-15 43-45"
-[[= include_code('code_samples/api/notifications/config/packages/notifications.yaml', 5, 6) =]]
- # …
-[[= include_code('code_samples/api/notifications/config/packages/notifications.yaml', 26, 34) =]]
-[[= include_code('code_samples/api/notifications/config/packages/notifications.yaml', 36, 65) =]]
-[[= include_code('code_samples/api/notifications/config/packages/notifications.yaml', 67) =]]
-```
-
-!!! note "Subscriptions for `storefront_group`"
-
- Note that when introducing subscriptions configuration for the `storefront_group` scope that comes with Commerce edition,
- several subscriptions had to be copy-pasted into this SiteAccess group to have the same subscriptions as before
- when it was configured only by the `default` scope.
- For example, the subscriptions for the `site` SiteAccess belonging to this group
- can be checked with the following command during configuration:
- ```bash
- php bin/console ibexa:debug:config notifications.subscriptions --siteaccess=site
- ```
-
-Visiting this controller's route in the back office (at `/admin/notification-sender`) triggers the notification as a flash message in the bottom-right corner:
-
-
-
-Visiting the controller's route in the default SiteAccess on Commerce edition (at `/notification-sender`) also triggers the notification as a flash message in the bottom-right corner:
-
-
-
-## Create custom channel
-
-You may need to create new channels to subscribe to notifications and send them to new destinations.
-For example, you could create a new channel for Slack that takes more than one DSN for finer dispatching.
-
-A channel is a service implementing `Symfony\Component\Notifier\Channel\ChannelInterface`, and tagged `notifier.channel` alongside a `channel` identifier.
-
-The following example is a custom channel that sends notifications to the logger.
-
-``` php
-[[= include_code('code_samples/api/notifications/src/Notifier/Channel/LogChannel.php') =]]
-```
-
-``` yaml
-[[= include_code('code_samples/api/notifications/config/services.yaml') =]]
-```
-
-Now, the [`CommandExecuted` notification](#commandexecuted-example) can be subscribed to the `log` channel:
-
-``` yaml hl_lines="5"
-[[= include_code('code_samples/api/notifications/config/packages/notifications.yaml', 21, 25) =]]
-```
-
-The log contains the notifications
-(in `var/log/dev.log` when run in the `dev` Symfony environment):
-
-```console
-% tail -Fn0 var/log/dev.log | grep --line-buffered CommandExecuted
-[2026-03-26T01:01:23.888014+01:00] app.INFO: ✖app:send_notification {"class":"App\\Notifications\\CommandExecuted","importance":"high","content":""} []
-[2026-03-27T01:02:54.123431+01:00] app.INFO: ✔app:send_notification {"class":"App\\Notifications\\CommandExecuted","importance":"low","content":""} []
-```
diff --git a/docs/commerce/cart/cart.md b/docs/commerce/cart/cart.md
deleted file mode 100644
index be7f71c43d8..00000000000
--- a/docs/commerce/cart/cart.md
+++ /dev/null
@@ -1,134 +0,0 @@
----
-description: The cart component covers adding items to the shopping cart, and previewing or modifying the cart information.
-edition: commerce
----
-
-# Cart
-
-The cart component is a foundation of the Commerce offering delivered as part of [[= product_name_com =]].
-It covers actions related to the creation and handling of a list of products that the buyer intends to purchase.
-
-The component exposes the following:
-
-- [PHP API](cart_api.md) that allows for managing carts and cart entries, or checking cart validity
-- [REST API](/api/rest_api/rest_api_reference/rest_api_reference.html#tag/Cart) that helps get cart and products information over HTTP
-- [Twig functions](cart_twig_functions.md) that enable checking whether product can be added to cart and formatting the price
-
-There is no specific configuration related to the cart component.
-All configuration is done at the checkout and storefront level.
-
-Cart constructor takes the following arguments:
-
-- `userId` - by default, read from the header's meta element with `name="UserId"`, where variable type must be integer
-- `currencyCode` - by default, read from the header's meta element with `name="ActiveCurrencyCode"`
-- `lang` - by default, read from the document element's `lang` attribute
-
-## Cart data handling
-
-Cart data is handled by two storages, depending on whether the buyer is anonymous or has been authenticated.
-Information that relates to anonymous users is stored in the PHP session, while registered user data is stored in a database.
-
-By default, anonymous users can add items to cart, but to display the cart view, they have to log in and transition into an authenticated user.
-
-!!! note
-
- For information about roles and permissions that control access to the cart, see [Permission use cases](permission_use_cases.md#commerce).
-
-### Cart data merging
-
-When a buyer browses the storefront anonymously and fills the cart with items, anonymous cart data is stored in the PHP session storage.
-Then, when an anonymous user logs into the storefront, cart data from the PHP session storage is persisted and merged with any cart information that might already exist in the database for this authenticated user.
-
-If no previous cart data exists, a new cart is created.
-
-### Cart data validation
-
-When a buyer tries to add products to the cart, increase cart item quantity, or proceed to checkout, the cart component performs cart item validation and checks whether:
-
-- the product is available
-- the requested quantity of product is available
-- the product is available at a price in the currency selected for the cart
-
-## Front-end perspective
-
-From the front-end perspective, the cart consists of a main `Cart` object and several widgets.
-`Cart` is a standalone JavaScript object that manages cart data and has no user interface, while widgets consist of JavaScript code and accompanying Twig templates.
-
-### Cart service object
-
-The `Cart` service object stores cart entry data and a cart summary, which contains additional entry data, like, for example, formatted gross price or validation errors.
-The object exposes several methods, which you can use to get and modify cart entries.
-Only one instance of a `Cart` service object can be created.
-
-### Cart events
-
-When cart data is changed or loaded, the `ibexa-cart:cart-data-changed` event is triggered on `body`.
-The reference to the Cart is sent in the event's `detail`.
-
-```js
-document.body.addEventListener(
- 'ibexa-cart:cart-data-changed',
- ({ detail: { cart } }) => {
- refreshMyWidget(cart);
- },
- false,
-);
-```
-
-### Cart service
-
-The Cart package provides `Ibexa\Contracts\Cart\CartServiceInterface` Symfony service, which is the entrypoint for calling the [backend API](cart_api.md).
-
-You can import the service with the following code:
-
-```js
-import * as cartService from '@ibexa-cart/src/bundle/Resources/public/js/service/cart';
-```
-
-Use the service in your code as follows:
-
-```js
-cartService.deleteCartEntry(cartIdentifier, entryIdentifier);
-```
-
-Every cart service function returns a `Promise` object with a parsed response.
-When the request isn't `OK`, it can throw an error with the response `statusText`.
-
-- `loadUserCarts(ownerId)` - loads 10 user carts
-- `loadCartSummary(cartIdentifier)` - load cart summary data
-- `createCart(currencyCode)` - creates a new cart
-- `deleteCart(cartIdentifier)` - deletes the cart
-- `createCartEntry(cartIdentifier, productCode, quantity)` - creates a new cart entry for the specified product
-- `updateProductQuantity(cartIdentifier, entryIdentifier, quantity)` - updates product quantity to a new value
-- `deleteCartEntry(cartIdentifier, entryIdentifier)` - deletes cart entry
-- `emptyCart(cartIdentifier)` - empties cart by removing all entries, returns Promise
-
-To import and initialize cart (without extending it or passing any options), add the following:
-
-```js
-import Cart from '@ibexa-cart/src/bundle/Resources/public/js/component/cart';
-
-new Cart();
-```
-
-### Change request before sending
-
-Before every request is sent by `cartService`, the `ibexa-cart:prepare-request` event is triggered on `document`, so you can change request object by assigning a new one to `detail.request`:
-
-```js
-document.addEventListener(
- 'ibexa-cart:prepare-request',
- (event) => {
- event.detail.request = modifiedRequest;
- },
- false,
-);
-```
-
-### Widgets
-
-[[= product_name =]] comes with a number of components that are interfaces to various functionalities exposed by the Cart.
-For a list of default components available in the storefront, see [Default UI components](storefront.md#default-ui-components).
-
-To customize your store, you can override the Twig templates and extend their logic.
-For more information, see [Customize storefront layout](customize_storefront_layout.md).
diff --git a/docs/commerce/cart/cart_api.md b/docs/commerce/cart/cart_api.md
deleted file mode 100644
index 1b89eec34e7..00000000000
--- a/docs/commerce/cart/cart_api.md
+++ /dev/null
@@ -1,211 +0,0 @@
----
-description: Use PHP API and REST API to work with carts in Commerce, manage cart entries, or validate products.
-edition: commerce
----
-
-# Cart API
-
-!!! tip "Cart REST API"
-
- To learn how to manage carts with the REST API, see the [REST API reference](/api/rest_api/rest_api_reference/rest_api_reference.html#tag/Cart).
-
-To get carts and work with them, use the `Ibexa\Contracts\Cart\CartServiceInterface` interface.
-
-`CartService` uses two storage methods and handles switching between storages:
-
-- carts of registered users use database-based storage
-- anonymous user carts are stored in the PHP session
-
-From the developer's perspective, carts and entries are referenced with a UUID identifier.
-
-## Get single cart by identifier
-
-To access a single cart, use the `CartServiceInterface::getCart` method:
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/CartCommand.php', 64, 66, remove_indent=True) =]]
-```
-
-## Get multiple carts
-
-To fetch multiple carts, use the `CartServiceInterface::findCarts` method.
-It follows the same search Query pattern as other APIs:
-
-``` php
-[[= include_file('code_samples/api/commerce/src/Command/CartCommand.php', 10, 11) =]]
-// ...
-
-[[= include_file('code_samples/api/commerce/src/Command/CartCommand.php', 49, 57) =]]
-```
-
-## Create cart
-
-To create a cart, use the `CartServiceInterface::createCart` method and provide it with `Ibexa\Contracts\Cart\Value\CartCreateStruct` that contains metadata (name, currency, owner):
-
-``` php
-[[= include_file('code_samples/api/commerce/src/Command/CartCommand.php', 8, 9) =]]
-// ...
-
-[[= include_file('code_samples/api/commerce/src/Command/CartCommand.php', 70, 78) =]]
-```
-
-## Update cart metadata
-
-You can update cart metadata after the cart is created.
-You could do it to support a scenario when, for example, the user changes a currency and the cart should recalculate all item prices to a new currency.
-To update cart metadata, use the `CartServiceInterface::updateCartMetadata` method:
-
-``` php
-[[= include_file('code_samples/api/commerce/src/Command/CartCommand.php', 9, 10) =]]
-// ...
-
-[[= include_file('code_samples/api/commerce/src/Command/CartCommand.php', 82, 89) =]]
-```
-
-You can also use this method to change cart ownership:
-
-``` php
-use Ibexa\Contracts\Cart\Value\CartMetadataUpdateStruct;
-
-// ...
-
-/**
- * @var \Ibexa\Contracts\Core\Repository\UserService $userService
- * @var \Ibexa\Contracts\Cart\CartServiceInterface $cartService
- * @var \Ibexa\Contracts\Cart\Value\CartInterface $cart
- */
-$updateMetadataStruct = new CartMetadataUpdateStruct();
-$updateMetadataStruct->setOwner($userService->loadUserByLogin('user'));
-
-$cart = $cartService->updateCartMetadata($cart, $updateMetadataStruct);
-```
-
-## Delete cart
-
-To delete a cart permanently, use the `CartServiceInterface::deleteCart` method and pass the `CartInterface` object:
-
-``` php
-[[= include_file('code_samples/api/commerce/src/Command/CartCommand.php', 63, 64) =]]
-[[= include_file('code_samples/api/commerce/src/Command/CartCommand.php', 124, 125) =]]
-```
-
-## Empty cart
-
-To remove all products from the cart in a single operation, use the `CartServiceInterface::emptyCart` method:
-
-``` php
-[[= include_file('code_samples/api/commerce/src/Command/CartCommand.php', 63, 64) =]]
-[[= include_file('code_samples/api/commerce/src/Command/CartCommand.php', 91, 92) =]]
-```
-
-## Check cart validity
-
-Items in cart can become invalid, for example, when item price is unavailable in cart currency, or the product is no longer available.
-To prevent checking out a cart with invalid items, check cart validity first.
-To validate the cart, use the `CartServiceInterface::validateCart` method.
-Validation is done with help from the `symfony/validator` component, and the method returns a `Symfony\Component\Validator\ConstraintViolationListInterface` object.
-
-``` php
-[[= include_file('code_samples/api/commerce/src/Command/CartCommand.php', 63, 64) =]]
-[[= include_file('code_samples/api/commerce/src/Command/CartCommand.php', 94, 95) =]]
-```
-
-## Add entry to cart
-
-To add entries (products) to the cart, create an `Ibexa\Contracts\Cart\Value\EntryAddStruct`, where you specify the requested quantity of the product.
-Then pass it to the `CartServiceInterface::addEntry` method:
-
-``` php
-[[= include_file('code_samples/api/commerce/src/Command/CartCommand.php', 11, 12) =]]
-// ...
-
-[[= include_file('code_samples/api/commerce/src/Command/CartCommand.php', 63, 64) =]]
-[[= include_file('code_samples/api/commerce/src/Command/CartCommand.php', 99, 106) =]]
-```
-
-## Remove entry from cart
-
-To remove an entry from the cart, use the `CartServiceInterface::removeEntry` method.
-
-``` php
-[[= include_file('code_samples/api/commerce/src/Command/CartCommand.php', 63, 64) =]]
-[[= include_file('code_samples/api/commerce/src/Command/CartCommand.php', 109, 112) =]]
-```
-
-## Update entry metadata
-
-Entries have their own metadata, for example, quantity.
-To change entry metadata, use the `CartServiceInterface::updateEntry` method and provide it with `Ibexa\Contracts\Cart\Value\EntryUpdateStruct`.
-
-``` php
-[[= include_file('code_samples/api/commerce/src/Command/CartCommand.php', 12, 13) =]]
-// ...
-
-[[= include_file('code_samples/api/commerce/src/Command/CartCommand.php', 63, 64) =]]
-[[= include_file('code_samples/api/commerce/src/Command/CartCommand.php', 109, 110) =]]
-[[= include_file('code_samples/api/commerce/src/Command/CartCommand.php', 114, 122) =]]
-```
-
-## Adding context data
-
-Context data is an extra information that you can attach to the cart or cart entries to provide additional details or attributes related to the shopping experience.
-It can include any relevant information that you want to associate with a particular cart or cart entry, for example, coupon codes, custom products attributes, or user preferences.
-
-### Adding context data to cart
-
-To add context data to a cart, follow this example:
-
-``` php
-use Ibexa\Contracts\Cart\Value\CartCreateStruct;
-use Ibexa\Contracts\Core\Collection\ArrayMap;
-use Ibexa\Contracts\ProductCatalog\Values\CurrencyInterface;
-
-/**
- * @var \Ibexa\Contracts\Cart\CartServiceInterface $cartService
- * @var CurrencyInterface $currency
- */
-$createStruct = new CartCreateStruct('My Cart', $currency);
-$createStruct->setContext(new ArrayMap([
- 'coupon_code' => 'X1MF7699',
-]));
-
-$cart = $cartService->createCart($createStruct);
-```
-
-In the above example, you create a cart with the `CartCreateStruct` method, and set the context data with `setContext`.
-You also add "X1MF7699" coupon code as context data to the cart.
-
-### Adding context data to cart entry
-
-To attach context data to a cart entry, proceed as follows:
-
-``` php
-use Ibexa\Contracts\Cart\Value\EntryAddStruct;
-use Ibexa\Contracts\Core\Collection\ArrayMap;
-use Ibexa\ProductCatalog\Local\Repository\Values\Product;
-
-/**
- * @var \Ibexa\Contracts\Cart\CartServiceInterface $cartService
- * @var \Ibexa\Contracts\Cart\Value\CartInterface $cart
- * @var Product $product
- */
-$entryAddStruct = new EntryAddStruct($product);
-$entryAddStruct->setContext(new ArrayMap([
- 'tshirt_text' => 'EqEqEqEq',
-]));
-
- $cartService->addEntry($cart, $entryAddStruct);
-```
-
-In the above example, you create a cart entry by using the `EntryAddStruct` method.
-The `setContext` method allows you to attach context data to the cart entry.
-In this case, you attach a "tshirt_text" attribute to the cart entry, which might represent custom text for a T-shirt.
-
-## Merge carts
-
-To combine the contents of multiple shopping carts into a target cart, use the `CartServiceInterface::mergeCarts` method.
-This operation is helpful when you want to consolidate items from a reorder cart and a current cart into a single order.
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/CartCommand.php', 127, 139, remove_indent=True) =]]
-```
diff --git a/docs/commerce/cart/img/quick_order_add_order.png b/docs/commerce/cart/img/quick_order_add_order.png
deleted file mode 100644
index f0a297cbadc..00000000000
Binary files a/docs/commerce/cart/img/quick_order_add_order.png and /dev/null differ
diff --git a/docs/commerce/cart/img/quick_order_list.png b/docs/commerce/cart/img/quick_order_list.png
deleted file mode 100644
index 407036d6962..00000000000
Binary files a/docs/commerce/cart/img/quick_order_list.png and /dev/null differ
diff --git a/docs/commerce/cart/quick_order.md b/docs/commerce/cart/quick_order.md
deleted file mode 100644
index be5aa30eb3c..00000000000
--- a/docs/commerce/cart/quick_order.md
+++ /dev/null
@@ -1,87 +0,0 @@
----
-description: Allows users to provide or upload a list of products, with their quantities, intended for purchase.
-edition: commerce
----
-
-# Quick order
-
-The quick order form allows users to efficiently process orders with multiple items in bulk through the storefront.
-Customers don't need to browse the countless store pages, they can fill in a provided form with product code (SKU) and quantity, or upload their own list into the system directly.
-Quick order forms can be used by registered and guest users.
-
-## Quick order flows
-
-Customers can use one or both of the following methods to specify products and place a quick order.
-
-### Customer enters individual products
-
-1\. Customer clicks the **Quick order** link.
-
-2\. Provides product code and quantity. At this point, no validation is provided.
-
-
-
-3\. Customer clicks **Add to cart** to add items to the cart and finish an ordering process.
-
-4\. In the cart section, the availability of the entered product is checked, and the customer is informed if any of them is unavailable or quantity is insufficient.
-
-### Customer uploads list of products
-
-1\. Customer clicks the **Quick order** link.
-
-2\. Downloads a sample file from **Add your order** section.
-
-3\. Uses the template to fill in their order with product code and quantity.
-
-4\. Uploads the filled in quick order file back to the system by drag and drop or file selection.
-
-5\. The file name appears in the **Add your order** section. At this point, only file validation is provided. Product codes and availability aren't validated.
-
-
-
-6\. Customer clicks **Add to cart** to add items to the cart and finish an ordering process.
-
-7\. In the cart section, the file format and provided data are validated, the availability of the entered product is checked, and the customer is informed if any of them is unavailable or quantity is insufficient.
-
-## Validation
-
-Orders from quick order are validated in the cart.
-There, the system checks if:
-
-- provided product code is valid
-- provided products are available for purchase
-- requested quantities of products are available
-
-## Layout
-
-To change the quick order form template, go to [customize storefront layout](customize_storefront_layout.md).
-
-## Configuration
-
-You can configure a quick order form in the following ways.
-
-### Size limit
-
-To change the size limit for the uploaded order file, add new value under the `ibexa.system..cart` [configuration key](configuration.md#configuration-files):
-
-```yaml
-ibexa:
- system:
- :
- cart:
- batch_order:
- file_size_limit: 512k
-```
-
-### Processed records limit
-
-To change the size limit for the processed records, add new value under the `ibexa.system..cart` [configuration key](configuration.md#configuration-files):
-
-```yaml
-ibexa:
- system:
- :
- cart:
- batch_order:
- processed_records_limit: 2000
-```
diff --git a/docs/commerce/checkout/checkout.md b/docs/commerce/checkout/checkout.md
deleted file mode 100644
index dc9ff161e90..00000000000
--- a/docs/commerce/checkout/checkout.md
+++ /dev/null
@@ -1,59 +0,0 @@
----
-description: The checkout component covers providing shipping and billing addresses, and selecting payment and shipping methods.
-edition: commerce
----
-
-# Checkout
-
-Checkout is a crucial component of the Commerce offering delivered as part of [[= product_name_com =]].
-In a course of a multi-step process, it collects necessary transaction data, such as billing and shipping addresses, payment and shipping information.
-
-From the front-end perspective, it's a reusable component that provides access to the workflow and allows buyers to place an order for cart items.
-
-
-
-Depending on the model of shopping process that you need to use, the checkout process can range between a straightforward and extremely complicated one.
-To allow for this variation, the component is highly configurable and extensible:
-
-- Like the editorial workflow, it relies on [Symfony Workflow]([[= symfony_doc =]]/workflow.html)
-- It exposes [PHP API](checkout_api.md) that allows for workflow manipulation
-- It exposes Twig functions used for checkout rendering
-
-In a default implementation, users go through a series of steps.
-They first select a billing and shipping address, then select shipping and payment methods, later they review summary, and confirm their choices, to finally receive a simulated order confirmation.
-
-Until the checkout process is complete, at any point of the process, users can go back to the cart and modify cart information, for example, cart item quantities.
-They can also navigate back and forth between checkout steps, with an exception of the "Checkout complete" step, which always ends the process.
-
-You can modify these steps according to your needs.
-For more information, see [Configure checkout](configure_checkout.md).
-
-## Shipping and billing address assignment logic
-
-As far as shipping details are concerned, checkout can behave differently, depending on whether the buyer is a corporate account member, a registered customer, or an individual.
-
-- Corporate account members can see a company's billing address, and several shipping addresses to pick from, as predefined in the company profile.
-- Registered customers are able see and modify the addresses that they defined at registration
-- Individuals are able to enter both addresses at checkout
-
-For more information about shipping and billing addresses, see [Configure checkout](configure_checkout.md#configure-shipping-and-billing-address-field-format).
-
-## Virtual Products checkout
-
-Virtual product is a special type of a [product](products.md). Virtual products are non-tangible items such as memberships, services, warranties.
-They can be sold individually, or as part of a product bundle.
-
-Virtual products don’t require shipment when they're purchased individually.
-While purchasing virtual product, you only have to fill in the billing address and select relevant payment method.
-
-
-
-## Reorder
-
-Reorder functions as the variant for the checkout workflow and is accessible solely to logged-in users.
-It initiates from the user's order history, where they can click **Reorder** and trigger the flow.
-Next, the user is moved to cart where the system validates the order against existing stock.
-If everything is available, customer can move to payment and summary.
-The system uses information from the past order to pre-fill address, shipping method, and payment details.
-
-For more information, see [reorder documentation](reorder.md).
diff --git a/docs/commerce/checkout/checkout_api.md b/docs/commerce/checkout/checkout_api.md
deleted file mode 100644
index cfcdb2655c8..00000000000
--- a/docs/commerce/checkout/checkout_api.md
+++ /dev/null
@@ -1,65 +0,0 @@
----
-description: Use PHP API to work with checkouts in Commerce.
-edition: commerce
----
-
-# Checkout API
-
-To get checkouts and manage them, use the `Ibexa\Contracts\Checkout\CheckoutServiceInterface` interface.
-
-With `CheckoutServiceInterface`, you manipulate checkouts that are stored in sessions.
-Checkouts are containers for the `Ibexa\Contracts\Cart\Value\CartInterface` object and all the data provided at each step of the [configurable checkout process](configure_checkout.md).
-
-The checkout process relies on Symfony Workflow, and you can customize each of its steps.
-Each checkout step has its own controller that allows adding forms and external API calls that process data and pass them to `CheckoutService`.
-Completing a step results in submitting a form and updating the current checkout object.
-At this point Symfony Workflow advances, the next controller takes over, and the whole process continues.
-
-From the developer's perspective, checkouts are referenced with an UUID identifier.
-
-## Get single checkout by identifier
-
-To access a single checkout, use the `CheckoutServiceInterface::getCheckout` method:
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Controller/CustomCheckoutController.php', 29, 29, remove_indent=True) =]]
-```
-
-## Get single checkout for specific cart
-
-To fetch checkout for a cart that already exists, use the `CheckoutServiceInterface::getCheckoutForCart` method.
-You can use it when you want to initiate the checkout process right after products are successfully added to a cart.
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Controller/CustomCheckoutController.php', 23, 26, remove_indent=True) =]]
-```
-
-## Create checkout
-
-To create a checkout, use the `CheckoutServiceInterface::createCheckout` method and provide it with a `CheckoutCreateStruct` struct that contains a `CartInterface` object.
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Controller/CustomCheckoutController.php', 32, 37, remove_indent=True) =]]
-```
-
-## Update checkout
-
-You can update the collected data after the checkout is created.
-The data is stored within the `CheckoutInterface::context` object.
-The last update time and status are also stored.
-
-To update the checkout, use the `CheckoutServiceInterface::updateCheckout` method and provide it with the `CheckoutUpdateStruct` struct that contains data collected at each step of the workflow, and a transition name to identify what step follows.
-
-All data is placed in session storage.
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Controller/CustomCheckoutController.php', 40, 41, remove_indent=True) =]]
-```
-
-## Delete checkout
-
-To delete a checkout from the session, use the `CheckoutServiceInterface::deleteCheckout` method:
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Controller/CustomCheckoutController.php', 44, 44, remove_indent=True) =]]
-```
diff --git a/docs/commerce/checkout/configure_checkout.md b/docs/commerce/checkout/configure_checkout.md
deleted file mode 100644
index 4651b771bf2..00000000000
--- a/docs/commerce/checkout/configure_checkout.md
+++ /dev/null
@@ -1,61 +0,0 @@
----
-description: Configure checkout, modify the default checkout workflow.
-edition: commerce
----
-
-# Configure checkout
-
-When you work with your Commerce implementation, you can review and modify the checkout configuration.
-
-!!! note "Permissions"
-
- When you modify the workflow configuration, make sure you properly set user [permissions](permission_use_cases.md#commerce) to the checkout component.
-
-## Configure checkout workflow
-
-Checkout workflow relies on [Symfony Workflow]([[= symfony_doc =]]/workflow.html).
-Each transition represents a separate checkout step.
-
-By default, the checkout process is configured to render each step based on a separate set of libraries and templates.
-Each checkout step is handled by a controller that you configure in workflow metadata.
-
-Custom workflow implementations are defined under the `framework.workflows` key, and they must support the `Ibexa\Contracts\Checkout\Value\CheckoutInterface`.
-The default fallback workflow is `ibexa_checkout`, which is prepended at bundle level.
-The `checkout.workflow` parameter is repository-aware.
-
-To customize your configuration, place it in a YAML file, under the `framework.workflows.` key, and reference it with `ibexa.repositories..checkout.workflow: your_workflow_name`.
-The system can then identify which of your configured workflows handles the checkout process.
-
-!!! note
-
- When you modify or create a controller, to ensure that no user data is lost, extend the `Ibexa\Bundle\Checkout\Controller\AbstractStep` controller and call the `advance()` method.
-
-Each step configuration includes the following settings:
-
-- `controller` - A mandatory setting pointing to a library that governs the behavior of the process.
-The controller contains all the required business logic and submits the whole step, so that a transition can happen.
-- `next_step` - An optional name of the next workflow transition.
-If not provided, the next workflow-enabled transition is processed.
-- `label` - An optional name of the step that can be displayed in the Twig helper.
-- `translation_domain` - A optional setting that defines the domain for a site with translated content. By default it's set to `checkout`.
-
-### Checkout customization example
-
-For more information about the results you can achieve by customizing checkout, see [Customize checkout](customize_checkout.md).
-
-## Configure shipping and payment methods
-
-You can define the shipping and payment methods in the user interface.
-For more information, see [Work with shipping methods]([[= user_doc =]]/commerce/shipping_management/work_with_shipping_methods/) and [Work with payment methods]([[= user_doc =]]/commerce/payment/work_with_payment_methods/).
-
-## Configure shipping and billing address field format
-
-In your implementation, you may need to create custom format configurations for the shipping or billing address fields, for example, to use different address formats based on the buyer's geographical location.
-
-Field formats for the billing and shipping addresses comply with the [FieldType Address](addressfield.md#formats) specification and can be controlled with the `billing_address_format` and `shipping_address_format` flags.
-They fall back to `billing` and `shipping` predefined formats by default:
-
-- `billing` is part of the `ibexa/corporate-accounts` repository
-- `shipping` is part of the `ibexa/checkout` bundle's default configuration
-
-To modify address formats you create custom ones.
diff --git a/docs/commerce/checkout/customize_checkout.md b/docs/commerce/checkout/customize_checkout.md
deleted file mode 100644
index d6bdbead28e..00000000000
--- a/docs/commerce/checkout/customize_checkout.md
+++ /dev/null
@@ -1,312 +0,0 @@
----
-description: Customize the existing checkout functionality to support additional functions.
-edition: commerce
----
-
-# Customize checkout
-
-When you work with your Commerce implementation, you can review and modify the checkout configuration.
-
-Checkout is an essential component of the Commerce offering.
-It collects data that is necessary to create an order, including:
-
-- payment method
-- shipping method
-- billing / delivery address
-
-It could also collect any other information that you find necessary.
-
-Depending on your needs, the checkout process can be either complex or straightforward.
-For example, if the website is selling airline tickets, you may need several [additional steps](#add-checkout-step) with passengers defining their special needs.
-On the other side of the spectrum would be a store that sells books with personal pickup, where [one page checkout](#create-a-one-page-checkout) would be enough.
-
-Several factors make checkout particularly flexible and customizable:
-
-- it's based on Symfony workflow
-- it exposes a variety of APIs
-- it exposes Twig functions that help you render the steps
-
-The most important contract exposed by the package is the `CheckoutServiceInterface` interface.
-It exposes a number of methods that you can call, for example, to load checkouts based on checkout identifier or for a specific cart.
-Other methods help you create, update, or delete checkouts.
-
-For more information, see [Checkout API](checkout_api.md).
-
-## Add checkout step
-
-By default, [[= product_name =]] comes with a multi-step checkout process, which you can expand by adding steps.
-For example, if you were creating a project for selling theater tickets, you could add a step that allows users to select their seats.
-
-### Define workflow
-
-You can create workflow definitions under the `framework.workflows` [configuration key](configuration.md#configuration-files).
-Each workflow definition consists of a series of steps and a series of transitions between the steps.
-
-To create a new workflow, for example, `seat_selection_checkout`, use the default workflow that comes with the storefront module as a basis, and add a `seat_selected` step.
-
-``` yaml hl_lines="3 15"
-[[= include_file('code_samples/front/shop/checkout/config/packages/checkout.yaml', 17, 19) =]] [[= include_file('code_samples/front/shop/checkout/config/packages/checkout.yaml', 38, 54) =]]
-```
-
-Then, add a list of transitions.
-When defining a new transition, within its metadata, map the transition to its controller, and set other necessary details, such as the next step and label.
-
-``` yaml hl_lines="2 12"
-[[= include_file('code_samples/front/shop/checkout/config/packages/checkout.yaml', 55, 68) =]]
-```
-
-### Create controller
-
-At this point you must add a controller that supports the newly added step.
-In this case, you want users to select seats in the audience.
-
-In the `src/Controller/Checkout/Step` folder, create a file that resembles the following example.
-
-The controller contains a Symfony form that collects user selections.
-It can reuse fields and functions that come from the checkout component, for example, after you check whether the form is valid, use the `AbstractStepController::advance` method to go to the next step of the process.
-
-``` php hl_lines="23 24"
-[[= include_code('code_samples/front/shop/checkout/src/Controller/Checkout/Step/SelectSeatStepController.php') =]]
-```
-
-#### Create a form
-
-In the `src/Form/Type` folder, create a corresponding form:
-
-``` php
-[[= include_code('code_samples/front/shop/checkout/src/Form/Type/SelectSeatType.php') =]]
-```
-
-### Create Twig template
-
-You also need a Twig template to render the Symfony form.
-In `templates/themes/storefront/checkout/step`, create a layout that uses JavaScript to translate clicking into a grid to a change in value:
-
-```html+twig
-[[= include_file('code_samples/front/shop/checkout/templates/themes/storefront/checkout/step/select_seat.html.twig') =]]
-```
-
-In `assets/styles/checkout.css`, add styles required to properly display your template.
-
-```css
-[[= include_file('code_samples/front/shop/checkout/assets/styles/checkout.css', 25, 63) =]]
-```
-
-!!! note
-
- Remember to [add the new asset file to your Webpack configuration](assets.md#configure-assets).
-
-### Select supported workflow
-
-Next, you must inform the application that the configured workflow is used in your repository.
-
-You do it in repository configuration, under the `ibexa.repositories..checkout.workflow` [configuration key](configuration.md#configuration-files):
-
-``` yaml
-ibexa:
- repositories:
- default:
- checkout:
- workflow: seat_selection_checkout
-```
-
-### Restart application
-
-you're now ready to see the results of your work.
-Shut down the application, clear browser cache, and restart the application.
-You should be able to see a different checkout applied after you have added products to a cart.
-
-
-
-## Hide checkout step
-
-By default, [[= product_name =]] comes with a multi-step checkout process, which you can scale down by hiding steps.
-To do it, modify workflow under the `framework.workflows` [configuration key](configuration.md#configuration-files).
-
-This example shows how to hide a 'Billing & shipping address' step.
-It can be used for logged-in users with billing data stored in their accounts.
-
-```yaml hl_lines="14"
-framework:
- workflows:
- ibexa_checkout:
- transitions:
- select_address:
- metadata:
- next_step: select_shipping
- controller: Ibexa\Bundle\Checkout\Controller\CheckoutStep\AddressStepController::renderStepView
- label: 'Billing & shipping address'
- translation_domain: checkout
- physical_products_step: true
- hidden: true
-```
-
-## Create a one page checkout
-
-Another way of customizing the process would be to implement a one page checkout.
-Such solution could work for certain industries, where simplicity is key.
-It's basic advantage is simplified navigation with less clicks to complete the transaction.
-
-### Define workflow
-
-To create a one page checkout, define a workflow that has two steps, `initialized` and `completed`, and one transition, from `initialized` or `completed` to `completed`.
-
-``` yaml hl_lines="3 18 19"
-[[= include_file('code_samples/front/shop/checkout/config/packages/checkout.yaml', 17, 38) =]]
-```
-
-### Create controller
-
-Add a regular Symfony controller in project code, which reuses classes provided by the application.
-Within the controller, create a form that contains all the necessary fields, such as the shipping and billing addresses, together with shipping and billing methods.
-
-In the `src/Controller/Checkout` folder, create a file that resembles the following example:
-
-``` php
-[[= include_code('code_samples/front/shop/checkout/src/Controller/Checkout/OnePageCheckout.php') =]]
-```
-
-The controller can reuse fields and functions that come from the checkout component, for example, after you check whether the form is valid, use the `AbstractStepController::advance` method to go to the next step of the process.
-
-#### Create a form
-
-In the `src/Form/Type` folder, create a corresponding form:
-
-``` php
-[[= include_code('code_samples/front/shop/checkout/src/Form/Type/OnePageCheckoutType.php') =]]
-```
-
-### Create Twig template
-
-Create a Twig template to render the Symfony form.
-In `templates/themes/storefront/checkout`, create a layout that iterates through all the fields and renders them.
-
-```html+twig
-[[= include_file('code_samples/front/shop/checkout/templates/themes/storefront/checkout/checkout.html.twig') =]]
-```
-
-In `assets/styles/checkout.css`, add styles required to properly display your template.
-
-!!! note
-
- Remember to [add the new asset file to your Webpack configuration](assets.md#configure-assets).
-
-### Select supported workflow
-
-Then you have to map the single-step workflow to the repository, by replacing the default `ibexa_checkout` reference with one of `one_page_checkout`:
-
-``` yaml
-[[= include_file('code_samples/front/shop/checkout/config/packages/checkout.yaml', 0, 5) =]]
-```
-
-### Restart application
-
-To see the results of your work, shut down the application, clear browser cache, and restart the application.
-You should be able to see a one page checkout applied after you add products to a cart.
-
-
-
-## Create custom strategy
-
-Create a PHP definition of the new strategy that allows for workflow manipulation.
-In this example, custom checkout workflow applies when specific currency code ('EUR') is used in the cart.
-
-``` php
-[[= include_code('code_samples/workflow/strategy/NewWorkflow.php', 1, 25, remove_indent=True) =]]
-```
-
-### Add conditional step
-
-Defining strategy allows to add conditional step for workflow if needed.
-If you add conditional step, the checkout process uses provided workflow and goes to defined step if the condition described in the strategy is met.
-By default conditional step is set as null.
-
-To use conditional step you need to pass second argument to constructor in the strategy definition:
-
-``` php hl_lines="18"
-[[= include_code('code_samples/workflow/strategy/NewWorkflowConditionalStep.php', 1, 25, remove_indent=True) =]]
-```
-
-### Register strategy
-
-Now, register the strategy as a service:
-
-``` yaml
-[[= include_file('code_samples/workflow/services/workflow.yaml', 0, 5) =]]
-```
-
-### Override default workflow
-
-Next, you must inform the application that the configured workflow is used in your repository.
-
-!!! note
-
- The configuration allows to override the default workflow, but it's not mandatory. Checkout supports multiple workflows.
-
-You do it in repository configuration, under the `ibexa.repositories..checkout.workflow` [configuration key](configuration.md#configuration-files):
-
-``` yaml
-ibexa:
- repositories:
- :
- checkout:
- workflow: new_workflow
-```
-
-## Manage multiple workflows
-
-When you have multiple checkout workflows, you can specify which one to use by passing an argument with the name of the selected checkout workflow to a button or link that triggers the checkout process.
-
-```twig
-{% set checkout_path = path('ibexa.checkout.init', {
- cartIdentifier: cart_identifier,
- checkoutName: 'selected_checkout_name' # Reference your workflow name here
-}) %}
-
-```
-
-With this setup, you can specify which workflow to use by clicking the button or link that starts the checkout.
-The argument passed determines which workflow is used, providing flexibility in workflow selection.
-
-## Define custom Address field type formats
-
-To create custom Address field type formats to be used in checkout, make the following changes in the project configuration files.
-
-First, define custom format configuration keys for `billing_address_format` and `shipping_address_format`:
-
-``` yaml
-ibexa:
- repositories:
- :
- checkout:
- #"billing" by default
- billing_address_format:
- #"shipping" by default
- shipping_address_format:
- #used in registration, uses given shipping/billing addresses to pre-populate address forms in select_address checkout step, "customer" by default
- customer_content_type:
-```
-
-Then, define custom address formats, which, for example, don't include the `locality` field:
-
-``` yaml
-ibexa_field_type_address:
- formats:
- :
- country:
- default:
- - region
- - street
- - postal_code
- - email
- - phone_number
-
- :
- country:
- default:
- - region
- - street
- - postal_code
- - email
- - phone_number
-```
diff --git a/docs/commerce/checkout/img/additional_checkout_step.png b/docs/commerce/checkout/img/additional_checkout_step.png
deleted file mode 100644
index bc8d10c2ac3..00000000000
Binary files a/docs/commerce/checkout/img/additional_checkout_step.png and /dev/null differ
diff --git a/docs/commerce/checkout/img/checkout.png b/docs/commerce/checkout/img/checkout.png
deleted file mode 100644
index 344dd6e5949..00000000000
Binary files a/docs/commerce/checkout/img/checkout.png and /dev/null differ
diff --git a/docs/commerce/checkout/img/reorder_button.png b/docs/commerce/checkout/img/reorder_button.png
deleted file mode 100644
index 91054c67048..00000000000
Binary files a/docs/commerce/checkout/img/reorder_button.png and /dev/null differ
diff --git a/docs/commerce/checkout/img/reorder_timeline.png b/docs/commerce/checkout/img/reorder_timeline.png
deleted file mode 100644
index dce8a988729..00000000000
Binary files a/docs/commerce/checkout/img/reorder_timeline.png and /dev/null differ
diff --git a/docs/commerce/checkout/img/single_page_checkout.png b/docs/commerce/checkout/img/single_page_checkout.png
deleted file mode 100644
index 19712990b8c..00000000000
Binary files a/docs/commerce/checkout/img/single_page_checkout.png and /dev/null differ
diff --git a/docs/commerce/checkout/img/virtual_product_purchase.png b/docs/commerce/checkout/img/virtual_product_purchase.png
deleted file mode 100644
index 771f139ff6a..00000000000
Binary files a/docs/commerce/checkout/img/virtual_product_purchase.png and /dev/null differ
diff --git a/docs/commerce/checkout/reorder.md b/docs/commerce/checkout/reorder.md
deleted file mode 100644
index 96f83c6beda..00000000000
--- a/docs/commerce/checkout/reorder.md
+++ /dev/null
@@ -1,128 +0,0 @@
----
-description: Reorder allows users to easily recreate their past orders.
-edition: commerce
----
-
-# Reorder
-
-The reorder feature allows customers to streamline the process of repeating purchases.
-Based on a past order identifier, the cart is recreated and validated to be eligible for reordering.
-
-## Reorder workflow
-
-Reorder is a variant of the checkout workflow accessible exclusively to logged-in users.
-It has the same [configuration](configure_checkout.md) and [customization](customize_checkout.md) options as checkout.
-
-Customers can use the following workflow to specify orders they want to reorder and complete the purchase.
-
-1\. Logged in customer clicks **Orders** on their personal menu.
-
-2\. Selects order they want to repurchase from the list.
-
-3\. On the order details site, customer clicks **Reorder**.
-
-
-
-4\. A new cart is created based on the past order identifier, and the availability of the products in the cart is validated.
-
-5\. Customer clicks **Checkout**.
-
-6\. The system pre-fills address, shipping method, and payment details using information from the past order.
-
-7\. The customer is redirected to Payment and summary section where they can edit the specified address and the payment method by clicking steps on the workflow timeline.
-
-
-
-8\. The customer pays for the order and completes the workflow.
-
-## Configuration
-
-Reorder is a part of checkout and as such has the same [configuration](configure_checkout.md) and [customization](customize_checkout.md) options as checkout.
-Below, you can find a few examples that demonstrate how you can modify this feature.
-
-### Customize reorder
-
-You can modify workflow under the `framework.workflows` [configuration key](configuration.md#configuration-files).
-Each workflow definition consists of a series of steps and a series of transitions between the steps.
-
-Below example shows how to set up `can_be_reordered` flag for specific order statuses.
-
-```yaml
-framework:
- workflows:
- ibexa_order:
- places:
- !php/const Ibexa\OrderManagement\Value\Status::COMPLETED_PLACE:
- metadata:
- # ...
- can_be_reordered: true
- !php/const Ibexa\OrderManagement\Value\Status::CANCELLED_PLACE:
- metadata:
- # ...
- can_be_reordered: true
-
-```
-
-## Reorder PHP API
-
-You can manage and modify reorder with a dedicated checkout and cart PHP API.
-
-### Checkout PHP API
-
-Reorder comes with the dedicated `Ibexa\Contracts\Checkout\Reorder\ReorderService` interface.
-It contains helper methods and facades added over existing API to ease the order manipulation process.
-The following methods can be used to modify the reorder flow to fit your business needs:
-
-#### `ReorderService:addToCartFromOrder`
-
-Allows you to add items from a previous order to a cart.
-It uses historical data from previously ordered items even if they're no longer available.
-Those items are validated against available stock.
-The method uses the following parameters:
-
-- `$order` (OrderInterface) - the source order from which items are added to the cart
-- `$reorderCart` (CartInterface) - the shopping cart to which items are added
-
-Return value:
-
-- `CartInterface` - the modified shopping cart containing the items from the order
-
-#### `ReorderService:copyContext`
-
-Copies context information from a source order to a target checkout.
-This can include additional information or settings associated with the source order, for example, address.
-The method uses the following parameters:
-
-- `$sourceOrder` (OrderInterface) - the source order from which context is copied
-- `$targetCheckout` (CheckoutInterface) - the target checkout to which context is copied
-
-#### `ReorderService:createReorderCart`
-
-Creates a new shopping cart for reordering items from a past order in the same currency.
-The method uses the following parameters:
-
-- `$order` (OrderInterface) - the order for which a reorder cart is being created
-- `$newCartName` (optional string) - an optional name for the new cart
-
-Return value:
-
-- `CartInterface` - the newly created shopping cart
-
-#### `ReorderService:canBeReordered`
-
-Checks if a given order can be reordered.
-It evaluates criteria such as the order's status to determine reorder eligibility.
-The method uses the following parameters:
-
-- `$order` (OrderInterface) - reorder eligibility
-
-Return value:
-
-- `bool` - true if the order can be reordered, otherwise, false
-
-For more information on how to modify checkout, see [Checkout API documentation](checkout_api.md).
-
-### Cart PHP API
-
-Reorder also facilitates `Ibexa\Contracts\Cart\CartServiceInterface` interface `mergeCarts` method.
-For more information on it, see [Cart API documentation](cart_api.md#merge-carts).
diff --git a/docs/commerce/commerce.md b/docs/commerce/commerce.md
deleted file mode 100644
index 9e84ecfb728..00000000000
--- a/docs/commerce/commerce.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-description: The commerce component of Cohesivo covers various steps of making a transaction from listing available products, through adding products to a cart, to checkout and confirmation.
-edition: commerce
-page_type: landing_page
----
-
-# Commerce
-
-The commerce component of [[= product_name =]] covers various areas of managing an e-commerce presence: from configuring payment and shipping methods, through processing a transaction (listing available products, adding products to a cart, processing checkout, and sending confirmation), all the way to order management.
-
-[[= cards([
- "commerce/cart/cart",
- "commerce/shopping_list/shopping_list",
- "commerce/checkout/checkout",
- "commerce/order_management/order_management",
- "commerce/payment/payment",
- "commerce/shipping_management/shipping_management",
- "commerce/storefront/storefront",
- "commerce/transactional_emails/transactional_emails",
-], columns=4) =]]
-
-## Configure
-
-[[= cards([
- "commerce/checkout/configure_checkout",
- "commerce/order_management/configure_order_management",
- "commerce/payment/configure_payment",
- "commerce/shipping_management/configure_shipment",
- "commerce/storefront/configure_storefront",
-], columns=4) =]]
-
-## Extend
-
-[[= cards([
- "commerce/checkout/customize_checkout",
- "commerce/payment/extend_payment",
- "commerce/shipping_management/extend_shipping",
- "commerce/storefront/extend_storefront",
- "commerce/transactional_emails/extend_transactional_emails",
-], columns=4) =]]
-
-## Explore Commerce API
-
-[[= cards([
- "commerce/cart/cart_api",
- "commerce/checkout/checkout_api",
- "commerce/order_management/order_management_api",
- "commerce/payment/payment_api",
- "commerce/payment/payment_method_api",
- "commerce/shipping_management/shipping_method_api",
- "commerce/shipping_management/shipment_api",
-], columns=4) =]]
diff --git a/docs/commerce/order_management/configure_order_management.md b/docs/commerce/order_management/configure_order_management.md
deleted file mode 100644
index 8e08c038404..00000000000
--- a/docs/commerce/order_management/configure_order_management.md
+++ /dev/null
@@ -1,64 +0,0 @@
----
-description: Configure order processing, modify the default workflow.
-edition: commerce
----
-
-# Configure order processing
-
-When you work with your Commerce implementation, you can modify and customize the order processing configuration.
-
-!!! note "Permissions"
-
- When you modify the workflow configuration, make sure you properly set user [permissions](permission_use_cases.md#commerce) for the Order management component.
-
-## Configure order processing workflow
-
-Order processing workflow relies on a [Symfony Workflow]([[= symfony_doc =]]/workflow.html).
-Each transition represents a separate order processing step.
-
-### Default order processing configuration
-
-The default order processing workflow is called `ibexa_order`.
-To see the default workflow configuration, in your project directory, go to: `vendor/ibexa/order-management/src/bundle/Resources/config/prepend.yaml`.
-
-The default workflow uses keys defined in `Ibexa\OrderManagement\Value\Status` class as place and transition names, for example, `PENDING_PLACE` translates into `pending`.
-
-You can replace the default workflow configuration with a custom one if needed.
-
-### Custom order processing workflows
-
-You define custom workflow implementations under the `framework.workflows` key.
-If your installation supports multiple languages, for each place in the workflow, you can define a label that is pulled from a XLIFF file based on the [translation domain setting](back_office_translations.md).
-You can also define colors that are used for status labels.
-
-To customize your configuration, place it under the `framework.workflows.` [configuration key](configuration.md#configuration-files):
-
-``` yaml
-[[= include_file('code_samples/front/shop/order-management/config/packages/ibexa.yaml', 0, 66) =]]
-```
-
-Then reference it with `ibexa.repositories..order_management.workflow: `, so that the system can identify which of your configured workflows handles the ordering process.
-
-``` yaml
-[[= include_file('code_samples/front/shop/order-management/config/packages/ibexa.yaml', 69, 74) =]]
-```
-
-### Define cancel order
-
-You can define a status and transition in which the order can be canceled by modifying workflow under the `framework.workflows` [configuration key](configuration.md#configuration-files).
-
-```yaml
-framework:
- workflows:
- ibexa_order:
- metadata:
- cancel_status: !php/const Ibexa\OrderManagement\Value\Status::CANCELLED_PLACE
- cancel_transition: !php/const Ibexa\OrderManagement\Value\Status::CANCEL_TRANSITION
-```
-
-### PIM integration
-
-By default, the component integration mechanism reduces product stock values when an order is made (in status "pending") and reverts it to the original value when an order is cancelled.
-In your implementation, you may want the reduction/restoration of stock to happen at other stages of the order fulfillment process.
-For this to happen, place the `reduce_stock: true` and/or `restore_stock: true` keys in other places of the workflow.
-Make sure that either of these keys is used only once.
diff --git a/docs/commerce/order_management/order_management.md b/docs/commerce/order_management/order_management.md
deleted file mode 100644
index 499b4c9f23c..00000000000
--- a/docs/commerce/order_management/order_management.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-description: The order management component covers creating orders and managing their lifecycle.
-edition: commerce
----
-
-# Order management
-
-The order management component enables users to search for orders and filter search results.
-Depending on their role, users can also track the status of their orders, review order details, and cancel orders.
-
-From the development perspective, the component enables customization of the order management workflow and integration with external systems to exchange order information.
-
-The component exposes the following:
-
-- [PHP API](order_management_api.md) that allows for managing orders
-- [REST API](/api/rest_api/rest_api_reference/rest_api_reference.html#tag/Orders) that helps get order information over HTTP
-
-## Order management service
-
-The Order Management package provides the `Ibexa\Contracts\OrderManagement\OrderServiceInterface` service, which is the entrypoint for calling the [backend API](order_management_api.md).
diff --git a/docs/commerce/order_management/order_management_api.md b/docs/commerce/order_management/order_management_api.md
deleted file mode 100644
index 2dd2863c612..00000000000
--- a/docs/commerce/order_management/order_management_api.md
+++ /dev/null
@@ -1,65 +0,0 @@
----
-description: Use PHP API and REST API to manage orders in Commerce.
-edition: commerce
-month_change: false
----
-
-# Order management API
-
-!!! tip "Order management REST API"
-
- To learn how to manage orders with the REST API, see the [REST API reference](/api/rest_api/rest_api_reference/rest_api_reference.html#tag/Orders).
-
-To get orders and manage them, use the [`Ibexa\Contracts\OrderManagement\OrderServiceInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-OrderManagement-OrderServiceInterface.html) interface.
-
-## Get single order
-
-### Get single order by identifier
-
-To access a single order by using its string identifier, use the [`OrderServiceInterface::getOrderByIdentifier`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-OrderManagement-OrderServiceInterface.html#method_getOrderByIdentifier) method:
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/OrderCommand.php', 48, 51, remove_indent=True) =]]
-```
-
-Use the returned [`OrderInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-OrderManagement-Value-Order-OrderInterface.html) value object to access details about the order.
-
-See the [Discounts API](discounts_api.md#retrieve-applied-discounts) to learn how to retrieve applied discount details from the order's context.
-
-### Get single order by ID
-
-To access a single order by using its numerical ID, use the [`OrderServiceInterface::getOrder`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-OrderManagement-OrderServiceInterface.html#method_getOrder) method:
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/OrderCommand.php', 54, 57, remove_indent=True) =]]
-```
-
-## Get multiple orders
-
-To fetch multiple orders, use the [`OrderServiceInterface::findOrders`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-OrderManagement-OrderServiceInterface.html#method_findOrders) method.
-It follows the same search query pattern as other APIs:
-
-``` php
-[[= include_file('code_samples/api/commerce/src/Command/OrderCommand.php', 8, 9) =]][[= include_file('code_samples/api/commerce/src/Command/OrderCommand.php', 10, 14) =]]
-
-// ...
-[[= include_file('code_samples/api/commerce/src/Command/OrderCommand.php', 106, 115) =]]
-```
-
-## Create order
-
-To create an order, use the [`OrderServiceInterface::createOrder`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-OrderManagement-OrderServiceInterface.html#method_createOrder) method and provide it with the [`Ibexa\Contracts\OrderManagement\Value\Struct\OrderCreateStruct`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-OrderManagement-Value-Struct-OrderCreateStruct.html) object that contains a list of products, purchased quantities, product, total prices, and tax amounts.
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/OrderCommand.php', 88, 98, remove_indent=True) =]]
-```
-
-## Update order
-
-You can update the order after it's created.
-You could do it to support a scenario when, for example, the order is processed manually and its status has to be changed in the system.
-To update order information, use the [`OrderServiceInterface::updateOrder`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-OrderManagement-OrderServiceInterface.html#method_updateOrder) method:
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/OrderCommand.php', 101, 104, remove_indent=True) =]]
-```
diff --git a/docs/commerce/payment/configure_payment.md b/docs/commerce/payment/configure_payment.md
deleted file mode 100644
index eb2347031fa..00000000000
--- a/docs/commerce/payment/configure_payment.md
+++ /dev/null
@@ -1,54 +0,0 @@
----
-description: Configure payments, modify the default payment processing workflow.
-edition: commerce
----
-
-# Configure payment
-
-When you work with your Commerce implementation, you can review and modify the payment configuration.
-
-!!! note "Permissions"
-
- When you modify the workflow configuration, make sure you properly set user [permissions](permission_use_cases.md#commerce) for the Payment component.
-
-## Configure payment workflow
-
-Payment workflow relies on a [Symfony Workflow]([[= symfony_doc =]]/workflow.html).
-Each transition represents a separate payment step.
-
-### Default payment workflow configuration
-
-The default payment workflow is called `ibexa_payment`.
-To see the default workflow configuration, in your project directory, go to: `vendor/ibexa/payment/src/bundle/Resources/config/prepend.yaml`.
-
-You can replace the default workflow configuration with a custom one if needed.
-
-### Custom payment workflows
-
-You define custom workflow implementations under the `framework.workflows` key.
-They must support the `Ibexa\Contracts\Checkout\Value\CheckoutInterface`.
-
-If your installation supports multiple languages, for each place in the workflow, you can define a label that is pulled from an XLIFF file based on the translation domain setting.
-You can also define colors that are used for status labels.
-The `primary_color` key defines a color of the font used for the label, while the `secondary_color` key defines a color of its background.
-
-Additionally, you can decide whether users can manually transition between places.
-You do this by setting a value for the `exposed` key.
-If you set it to `true`, a button is displayed in the UI that triggers the transition.
-Otherwise, the transition can only be triggered by means of the API.
-
-``` yaml
-[[= include_file('code_samples/front/shop/payment/config/packages/ibexa.yaml', 7, 39) =]]
-```
-
-After you configure a custom workflow, reference it under the `ibexa.repositories..payment.workflow` [configuration key](configuration.md#configuration-files),
-so that the system can identify which of your workflows handles the payment process.
-
-``` yaml
-[[= include_file('code_samples/front/shop/payment/config/packages/ibexa.yaml', 0, 5) =]]
-```
-
-## Configure payment methods
-
-You can define payment methods [in the UI]([[= user_doc =]]/commerce/payment/work_with_payment_methods/).
-There is only one default payment method type available: `offline`, but you can configure more by [integrating with Payum](payum_integration.md), or [add custom ones](extend_payment.md).
diff --git a/docs/commerce/payment/enable_paypal_payments.md b/docs/commerce/payment/enable_paypal_payments.md
deleted file mode 100644
index 945f4a86068..00000000000
--- a/docs/commerce/payment/enable_paypal_payments.md
+++ /dev/null
@@ -1,45 +0,0 @@
----
-description: Use Payum to integrate the PayPal payment processing service.
-edition: commerce
----
-
-# Enable PayPal payments with Payum
-
-By using Payum to integrate PayPal into your application, you can offer your customers a versatile payment processing service that supports various payment methods, including credit cards, debit cards, Pay Later options, and alternative payment methods.
-
-Before you can proceed with integrating PayPal, you must [create a PayPal business account](https://www.paypal.com/bizsignup/#/singlePageSignup) and obtain API credentials.
-
-Install the PayPal package and the required dependencies:
-
-```bash
-composer require payum/paypal-express-checkout-nvp php-http/guzzle7-adapter php-http/message php-http/message-factory
-```
-
-Then, add the following configuration to your YAML configuration file (`payum.yaml` or similar):
-
-```yaml
-payum:
- gateways:
- pp_express_checkout:
- factory: paypal_express_checkout
- username:
- password:
- signature:
-```
-
-!!! tip
-
- You can replace `pp_express_checkout` with a different unique identifier.
-
-Ensure that the `username`, `password,` and `signature` fields contain the PayPal API credentials obtained from your PayPal business account.
-
-You can now provide language translations for the PayPal payment service name.
-To do it, within the `ibexa_payment_type` namespace in your translation files, use the provided translation key structure for each of your supported languages:
-
-```yaml
-ibexa:
- payment_method:
- type:
- pp_express_checkout:
- name: "Translated PayPal Express Checkout name"
-```
diff --git a/docs/commerce/payment/enable_stripe_payments.md b/docs/commerce/payment/enable_stripe_payments.md
deleted file mode 100644
index 5d03bd88290..00000000000
--- a/docs/commerce/payment/enable_stripe_payments.md
+++ /dev/null
@@ -1,46 +0,0 @@
----
-description: Use Payum to integrate the Stripe payment processing service.
-edition: commerce
----
-
-# Enable Stripe payments with Payum
-
-Stripe is a comprehensive payment platform that offers a suite of tools to handle online and in-person payments, subscriptions, fraud prevention, and more.
-By using Payum to integrate Stripe into your application, you can securely process payments with credit cards, bank transfers, and alternative payment methods.
-
-Before you can proceed with integrating Stripe, [sign up for a Stripe account](https://dashboard.stripe.com/register) and obtain the API keys required for integration.
-
-Install the Stripe package and the required dependencies:
-
-```bash
-composer require payum/stripe php-http/guzzle7-adapter php-http/message php-http/message-factory
-```
-
-Then, add the following configuration to your YAML configuration file (`payum.yaml` or similar):
-
-```yaml
-payum:
- gateways:
- strp_checkout:
- factory: stripe_checkout
- publishable_key:
- secret_key:
-
-```
-
-!!! tip
-
- You can replace `strp_checkout` with a different unique identifier.
-
-Ensure that the `publishable_key` and `secret_key` fields contain the Stripe API keys.
-
-You can now provide language translations for the Stripe payment platform name.
-To do it, within the `ibexa_payment_type` namespace in your translation files, use the provided translation key structure within your translation files:
-
-```yaml
-ibexa:
- payment_method:
- type:
- strp_checkout:
- name: "Translated Stripe Checkout name"
-```
diff --git a/docs/commerce/payment/extend_payment.md b/docs/commerce/payment/extend_payment.md
deleted file mode 100644
index 0b3eacf71a3..00000000000
--- a/docs/commerce/payment/extend_payment.md
+++ /dev/null
@@ -1,104 +0,0 @@
----
-description: Extend Payment with custom payment method types.
-edition: commerce
----
-
-# Extend Payment
-
-You can extend your Payment module implementation:
-
-- by creating a custom payment method type
-- by attaching custom data to a payment
-
-You can also [customize the payment processing workflow](configure_payment.md#custom-payment-workflows).
-
-## Create custom payment method type
-
-If your application needs payment methods of other type than the default `offline` one, or ones offered by Payum, you can create custom payment method types.
-Code samples below show how this could be done if your organization wants to use PayPal independently.
-
-!!! note "Gateway integration requirement"
-
- [[= product_name =]] doesn't come with gateway redirects. Whether you're an integrator or an end customer, it's your responsibility to implement payment gateway integration.
-
-### Define custom payment method type
-
-Create a PHP definition of the payment method type.
-
-``` php
-[[= include_code('code_samples/front/shop/payment/src/PaymentMethodType/PayPal/PayPal.php') =]]
-```
-
-Make sure that `getName()` returns a human-readable name of the payment method type, the way you want it to appear on the list of available payment method types.
-
-Now, register the definition as a service:
-
-``` yaml
-[[= include_file('code_samples/front/shop/payment/config/services.yaml', 0, 5) =]]
-```
-
-As an alternative, instead of creating a custom class, you can use a built-in type factory to define the payment method type in the service definition file:
-
-``` yaml
-[[= include_file('code_samples/front/shop/payment/config/services.yaml', 0, 1) =]][[= include_file('code_samples/front/shop/payment/config/services.yaml', 6, 15) =]]
-```
-
-At this point a custom payment method type should be visible in the user interface.
-
-### Create options form
-
-Create a corresponding form type:
-
-``` php
-[[= include_code('code_samples/front/shop/payment/src/Form/Type/PayPalOptionsType.php') =]]
-```
-
-Next, create a mapper that maps the information that the user inputs in the form into attribute definition.
-
-``` php
-[[= include_code('code_samples/front/shop/payment/src/PaymentMethodType/PayPal/OptionsFormMapper.php') =]]
-```
-
-Then, register `OptionsFormMapper` as a service:
-
-``` yaml
-[[= include_file('code_samples/front/shop/payment/config/services.yaml', 0, 1) =]][[= include_file('code_samples/front/shop/payment/config/services.yaml', 16, 20) =]]
-```
-
-### Create options validator
-
-You might want to make sure that data provided by the user is validated.
-To do that, create an options validator that checks user input against the constraints and dispatches an error when needed.
-
-``` php
-[[= include_code('code_samples/front/shop/payment/src/PaymentMethodType/PayPal/UrlOptionValidator.php') =]]
-```
-
-Then, register the validator as a service:
-
-``` yaml
-[[= include_file('code_samples/front/shop/payment/config/services.yaml', 0, 1) =]][[= include_file('code_samples/front/shop/payment/config/services.yaml', 21, 25) =]]
-```
-
-### Restart application
-
-Shut down the application, clear browser cache, and restart the application.
-Then, try creating a payment of the new type.
-
-
-
-## Attach custom data to payments
-
-When you create a payment, you can attach custom data to it, for example, you can pass an invoice number or a proprietary transaction identifier.
-
-You add custom data by using the `setContext` method:
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/PaymentCommand.php', 78, 89, remove_indent=True) =]]
-```
-
-Then, you retrieve it with the `getContext` method:
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/PaymentCommand.php', 51, 54, remove_indent=True) =]]
-```
diff --git a/docs/commerce/payment/img/custom_payment_type.png b/docs/commerce/payment/img/custom_payment_type.png
deleted file mode 100644
index 8076453d143..00000000000
Binary files a/docs/commerce/payment/img/custom_payment_type.png and /dev/null differ
diff --git a/docs/commerce/payment/img/new_payment_method_type.png b/docs/commerce/payment/img/new_payment_method_type.png
deleted file mode 100644
index fedd15b9612..00000000000
Binary files a/docs/commerce/payment/img/new_payment_method_type.png and /dev/null differ
diff --git a/docs/commerce/payment/payment.md b/docs/commerce/payment/payment.md
deleted file mode 100644
index fd0bd15eafd..00000000000
--- a/docs/commerce/payment/payment.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: The payment component covers defining and managing payment methods, together with managing payments and their lifecycle.
-edition: commerce
----
-
-# Payment
-
-With the Payment component users can define and manage payment methods, create and manage payments, search for payment methods and payments, and filter payment search results.
-Depending on their role, users can also enable or disable payment methods, modify payment information, and cancel payments.
-
-Available payment method types:
-
-- offline – out of the box
-- online payment services – through [integration with Payum](payum_integration.md)
-
-From the development perspective, the component enables [customization of the payment workflow](configure_payment.md#custom-payment-workflows).
-
-The component exposes the following APIs:
-
-- [Payment method PHP API](payment_method_api.md) that allows for managing payment methods
-- [Payment method REST API](/api/rest_api/rest_api_reference/rest_api_reference.html#tag/Payments) that helps manage payment methods over HTTP
-- [Payment PHP API](payment_api.md) that allows for managing payments
-
-## Services
-
-The Payment package provides the following services, which are entry points for calling backend APIs:
-
-- `Ibexa\Contracts\Payment\PaymentMethodServiceInterface`
-- `Ibexa\Contracts\Payment\PaymentServiceInterface`
diff --git a/docs/commerce/payment/payment_api.md b/docs/commerce/payment/payment_api.md
deleted file mode 100644
index a0e4a8d6e41..00000000000
--- a/docs/commerce/payment/payment_api.md
+++ /dev/null
@@ -1,65 +0,0 @@
----
-description: Use PHP API to manage payments in Commerce. You can create, update and delete payments.
-edition: commerce
----
-
-# Payment API
-
-To get payments and manage them, use the `Ibexa\Contracts\Payment\PaymentServiceInterface` interface.
-
-By default, UUID is used to generate payment identifiers.
-You can change that by providing a custom payment identifier in `Ibexa\Contracts\Payment\Payment\PaymentCreateStruct` or `Ibexa\Contracts\Payment\Payment\PaymentUpdateStruct`.
-
-## Get single payment
-
-### Get single payment by ID
-
-To access a single payment by using its numerical ID, use the `PaymentServiceInterface::getPayment` method:
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/PaymentCommand.php', 45, 48, remove_indent=True) =]]
-```
-
-### Get single payment by identifier
-
-To access a single payment by using its string identifier, use the `PaymentServiceInterface::getPaymentByIdentifier` method:
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/PaymentCommand.php', 51, 52, remove_indent=True) =]]
-```
-
-## Get multiple payments
-
-To fetch multiple payments, use the `PaymentServiceInterface::findPayments` method.
-It follows the same search query pattern as other APIs:
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/PaymentCommand.php', 60, 75, remove_indent=True) =]]
-```
-
-## Create payment
-
-To create a payment, use the `PaymentServiceInterface::createPayment` method and provide it with the `Ibexa\Contracts\Payment\Payment\PaymentCreateStruct` object that takes the following arguments: `method`, `order` and `amount`.
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/PaymentCommand.php', 78, 91, remove_indent=True) =]]
-```
-
-## Update payment
-
-You can update payment information after the payment is created.
-You could do it to support a scenario when, for example, an online payment failed, has been processed by using other means, and its status has to be updated in the system.
-The `Ibexa\Contracts\Payment\Payment\PaymentUpdateStruct` object takes the following arguments: `transition`, `identifier`, and `context`.
-To update payment information, use the `PaymentServiceInterface::updatePayment` method:
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/PaymentCommand.php', 94, 99, remove_indent=True) =]]
-```
-
-## Delete payment
-
-To delete a payment from the system, use the `PaymentServiceInterface::deletePayment` method:
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/PaymentCommand.php', 102, 102, remove_indent=True) =]]
-```
diff --git a/docs/commerce/payment/payment_method_api.md b/docs/commerce/payment/payment_method_api.md
deleted file mode 100644
index 998dcd20900..00000000000
--- a/docs/commerce/payment/payment_method_api.md
+++ /dev/null
@@ -1,90 +0,0 @@
----
-description: Use PHP API and REST API to manage payment methods in Commerce. You can create, modify and delete payment methods.
-edition: commerce
----
-
-# Payment method API
-
-!!! tip "Order management REST API"
-
- To learn how to manage payment methods with the REST API, see the [REST API reference](/api/rest_api/rest_api_reference/rest_api_reference.html#tag/Payments).
-
-To get payment methods and manage them, use the `Ibexa\Contracts\Payment\PaymentMethodServiceInterface` interface.
-
-From the developer's perspective, payment methods are referenced with identifiers defined manually at method creation stage in user interface.
-
-!!! note "Support for multilingual applications"
-
- The `getPaymentMethodByIdentifier`, `getPaymentMethod` and `findPaymentMethods` methods take a second argument, `$prioritizedLanguages`, that can be an array of language codes or `null`.
- If there are language codes in an array, methods return payment method name translations in the specified languages.
- Translations come from the database.
-
-## Get single payment method
-
-### Get single payment method by identifier
-
-To access a single payment method by using its string identifier, use the `PaymentMethodService::getPaymentMethodByIdentifier` method:
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/PaymentMethodCommand.php', 47, 50, remove_indent=True) =]]
-```
-
-### Get single payment method by ID
-
-To access a single payment method by using its numerical ID, use the `PaymentMethodService::getPaymentMethod` method:
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/PaymentMethodCommand.php', 41, 44, remove_indent=True) =]]
-```
-
-## Get multiple payment methods
-
-To fetch multiple payment methods, use the `PaymentMethodService::findPaymentMethods` method.
-
-It follows the same search query pattern as other APIs:
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/PaymentMethodCommand.php', 53, 69, remove_indent=True) =]]
-```
-
-## Create payment method
-
-To create a payment method, use the `PaymentMethodService::createPaymentMethod` method and provide it with an `Ibexa\Contracts\Payment\PaymentMethod\PaymentMethodCreateStruct` object that takes the following parameters:
-
-- `identifier` string
-- `type` TypeInterface object
-- `names` array of string values
-- `descriptions` array of string values
-- `enabled` boolean value
-- `options` object.
-
-``` php
-[[= include_file('code_samples/api/commerce/src/Command/PaymentMethodCommand.php', 52, 53) =]][[= include_file('code_samples/api/commerce/src/Command/PaymentMethodCommand.php', 71, 81) =]]
-```
-
-## Update payment method
-
-You can update the payment method after it's created.
-An `Ibexa\Contracts\Payment\PaymentMethod\PaymentMethodUpdateStruct` object can take the following arguments: `identifier` string, `names` array of string values, `descriptions` array of string values, `enabled` boolean value, and an `options` object.
-
-To update payment method information, use the `PaymentMethodServiceInterface::updatePaymentMethod` method:
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/PaymentMethodCommand.php', 84, 93, remove_indent=True) =]]
-```
-
-## Delete payment method
-
-To delete a payment method from the system, use the `PaymentMethodService::deletePayment` method:
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/PaymentMethodCommand.php', 96, 101, remove_indent=True) =]]
-```
-
-## Check whether payment method is used
-
-To check whether a payment method is used, for example, before you delete it, use the `PaymentMethodService::isPaymentMethodUsed` method:
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/PaymentMethodCommand.php', 104, 116, remove_indent=True) =]]
-```
diff --git a/docs/commerce/payment/payment_method_filtering.md b/docs/commerce/payment/payment_method_filtering.md
deleted file mode 100644
index 6121309777c..00000000000
--- a/docs/commerce/payment/payment_method_filtering.md
+++ /dev/null
@@ -1,58 +0,0 @@
----
-description: Implement payment method filtering.
-edition: commerce
----
-
-# Implement payment method filtering
-
-You can use payment method filtering to decide, whether selected payment method can be used and displayed in checkout process.
-To allow this filtering, you need to create a custom payment method type and register new voter.
-
-## Create custom payment method type
-
-You can extend your Payment module implementation in different ways.
-One of them is to [create a custom payment method type](extend_payment.md).
-
-The following example shows, how to create `New Payment Method Type`.
-
-### Define custom payment method type
-
-First, register the new payment method type as a service:
-
-``` yaml
-[[= include_file('code_samples/front/shop/payment/src/bundle/Resources/config/services/payment_method.yaml', 0, 10) =]]
-```
-
-In the `arguments` list provide a name of the payment method type, the way you want it to appear on the list of available payment method types, in the following example: `New Payment Method Type`.
-
-Now new custom payment method type should be visible in **Commerce** -> **Payment methods**.
-
-### Create voter for new payment method type
-
-Next, create a `NewPaymentMethodTypeVoter.php` file with the voter definition for your new payment method type:
-
-``` php
-[[= include_code('code_samples/front/shop/payment/src/lib/PaymentMethod/Voter/NewPaymentMethodTypeVoter.php') =]]
-```
-
-Created voter decides, if selected payment method type can be used and displayed in checkout process.
-
-#### Register new voter
-
-Register new voter as a service:
-
-``` yaml
-[[= include_file('code_samples/front/shop/payment/src/bundle/Resources/config/services/payment_method.yaml', 11, 14) =]]
-```
-
-#### Clear cache
-
-Now, clear the cache by running the following command:
-
-``` bash
-php bin/console cache:clear
-```
-
-Then, you can create a payment of the new type.
-
-
diff --git a/docs/commerce/payment/payum_integration.md b/docs/commerce/payment/payum_integration.md
deleted file mode 100644
index b94b9227069..00000000000
--- a/docs/commerce/payment/payum_integration.md
+++ /dev/null
@@ -1,80 +0,0 @@
----
-description: Add new payment methods through Payum such as Stripe or PayPal.
-edition: commerce
----
-
-# Payum integration
-
-[Payum](https://docs.payum.dev/v2#symfony-payum-bundle) is a payment processing solution that simplifies the integration of various payment services like Stripe and PayPal into your application.
-These services provide security of online transactions, and allow you to accept multiple payment methods while ensuring a seamless experience for the customers.
-By configuring service [gateways](https://docs.payum.dev/v2/supported-gateways), mapping workflow actions and translating payment service names, you streamline the online payment process, and can offer a diverse payment experience.
-
-## General Payum configuration
-
-In your Payum configuration file, for example, `payum.yaml`, set up a payment service gateway by specifying the factory, credentials and other necessary settings.
-Replace `` with a unique identifier of the method provided by the payment service.
-
-```yaml
-payum:
- gateways:
- :
- factory:
- # Add specific configuration fields for the gateway
- credential_1:
- credential_2:
-```
-
-## Workflow mapping
-
-In [[= product_name =]], the default payment workflow has certain places, such as `pending`, `failed`, `paid`, or `cancelled`, and their corresponding transitions.
-
-However, for your application to use other transitions and places, for example, `authorized`, `notified`, or `refunded`, and to present them in the user interface, you need to:
-
-- override the default payment workflow
-- create a custom workflow and enable it by using semantic configuration
-
-For more information, see [Custom payment workflows](configure_payment.md#custom-payment-workflows).
-
-For these places to be supported by the Payum integration, you have to map Payum statuses on the existing or additional places in the workflow, for example:
-
-```yaml
-ibexa_connector_payum:
- status_mapping:
- refunded: cancelled
- captured: pending
- authorized: authorized
-# ...
-```
-
-## Payment service name translations
-
-Within the `ibexa_payment_type` namespace in your translation files, add translations for each payment service that you configure.
-For language translations of payment service names, structure the translation files as follows:
-
-```yaml
-ibexa:
- payment_method:
- type:
- :
- name: "Translated payment service name"
-
-```
-
-!!! note
-
- Replace `` with the identifier used in the Payum configuration.
-
-## Implementation
-
-When you implement the online payment solution, take the following consideration into account:
-
-- To learn what credentials must be provided and what specific settings must be made, refer to the each payment service gateway's specific documentation.
-- To customize the online payment UI, see [Creating custom views](https://docs.payum.dev/v2/symfony/custom-payment-page) in Payum documentation.
-- When you modify the payment process, you may need to subscribe to events dispatched by Payum.
-For a list of events, see [Event dispatcher](https://docs.payum.dev/v2/event-dispatcher) in Payum documentation.
-
-!!! caution
-
- In certain cases, depending on the payment processing service, when a customer closes the payment page in a browser and the bank has not processed the payment yet, the payment status can remain unchanged.
- Depending on how your checkout process is configured, it may result in unwanted effects, for example, cause that the cart doesn't purge after the purchase.
- Make sure that you account for this fact in your implementation.
diff --git a/docs/commerce/shipping_management/configure_shipment.md b/docs/commerce/shipping_management/configure_shipment.md
deleted file mode 100644
index 69b2140091c..00000000000
--- a/docs/commerce/shipping_management/configure_shipment.md
+++ /dev/null
@@ -1,47 +0,0 @@
----
-description: Configure shipping, modify the default shipment workflow.
-edition: commerce
----
-
-# Configure shipping
-
-When you work with your Commerce implementation, you can review and modify the shipping configuration.
-
-!!! note "Permissions"
-
- When you modify the workflow configuration, make sure you properly set user [permissions](permission_use_cases.md#commerce) for the shipping component.
-
-## Configure shipment workflow
-
-Shipment workflow relies on a [Symfony Workflow]([[= symfony_doc =]]/workflow.html).
-Each transition represents a separate shipment step.
-
-The default fallback workflow is `ibexa_shipment`, which is prepended at bundle level.
-
-### Default shipment workflow configuration
-
-The default payment workflow configuration is called `ibexa_shipment`, you can replace it with your custom workflow identifier if needed.
-
-To see the default workflow, in your project directory, navigate to the following file: `vendor/ibexa/shipping/src/bundle/Resources/config/workflow.yaml`.
-
-### Custom shipment workflows
-
-You define custom workflow implementations under the `framework.workflows` [configuration key](configuration.md#configuration-files).
-The `shipping.shipment_workflow` parameter is repository-aware.
-
-To customize your configuration, place it under the `framework.workflows.` [configuration key](configuration.md#configuration-files):
-
-``` yaml
-[[= include_file('code_samples/front/shop/shipping/config/packages/ibexa.yaml', 8, 89) =]]
-```
-
-Reference it with `ibexa.repositories..shipment.workflow: your_workflow_name`, so that the system can then identify which of your configured workflows handles the shipment process.
-
-``` yaml
-[[= include_file('code_samples/front/shop/shipping/config/packages/ibexa.yaml', 0, 5) =]]
-```
-
-## Configure shipping methods
-
-You can define the shipping methods [in the UI]([[= user_doc =]]/commerce/shipping_management/work_with_shipping_methods/).
-The following shipping method types are available by default: `flat rate` and `free`.
diff --git a/docs/commerce/shipping_management/extend_shipping.md b/docs/commerce/shipping_management/extend_shipping.md
deleted file mode 100644
index 92aa657a446..00000000000
--- a/docs/commerce/shipping_management/extend_shipping.md
+++ /dev/null
@@ -1,179 +0,0 @@
----
-description: Extend Shipping with custom shipping method type and other extra features.
-edition: commerce
----
-
-# Extend shipping
-
-You can extend or customize your Shipping module implementation in different ways.
-
-Here, you can learn about the following ideas to make your Commerce solution more powerful:
-
-- create a custom shipping method type
-- toggle shipping method availability in checkout based on a condition
-- display shipping method parameters on the shipping method details page
-
-You can also [customize the shipment processing workflow](configure_shipment.md#custom-shipment-workflows).
-
-## Create custom shipping method type
-
-If your application needs shipping methods of other type than the default ones, you can create custom shipping method types.
-See the code samples below to learn how to do it.
-
-### Define custom shipping method type class
-
-Create a definition of the shipping method type.
-Use a built-in type factory to define the class in `config/services.yaml`:
-
-``` yaml
-[[= include_file('code_samples/front/shop/shipping/config/services.yaml', 0, 1) =]][[= include_file('code_samples/front/shop/shipping/config/services.yaml', 1, 8) =]]
-```
-
-At this point a custom shipping method type should be visible on the **Create shipping method** modal, the **Method type** list.
-
-
-
-### Create options form
-
-To let users create shipping methods of a custom type within the user interface, you need a Symfony form type.
-Create a `src/ShippingMethodType/Form/Type/CustomShippingMethodOptionsType.php` file with a form type.
-
-Next, define a name of the custom shipping method type in the file, by using the `getTranslationMessages` method.
-
-``` php hl_lines="32"
-[[= include_code('code_samples/front/shop/shipping/src/ShippingMethodType/Form/Type/CustomShippingMethodOptionsType.php') =]]
-```
-
-Create a translations file `translations/ibexa_shipping.en.yaml` that stores a name value for the custom shipping method type:
-
-``` yaml
-[[= include_file('code_samples/front/shop/shipping/translations/ibexa_shipping.en.yaml') =]]
-```
-
-Next, use the type factory to define an options form mapper class in `config/services.yaml`:
-
-``` yaml
-[[= include_file('code_samples/front/shop/shipping/config/services.yaml', 0, 1) =]][[= include_file('code_samples/front/shop/shipping/config/services.yaml', 8, 15) =]]
-```
-
-At this point you should be able to create a shipping method based on a custom shipping method type.
-
-
-
-!!! note
-
- To use this example, you must have regions.
- If you don't have regions, refer to [Enable purchasing products](enable_purchasing_products.md) for instructions on how to add them.
-
-### Create options validator
-
-You might want to validate the data provided by the user against certain constraints.
-Here, you create an options validator class that checks whether the user provided the `customer_identifier` value and dispatches an error when needed.
-
-Use the type factory to define a compound validator class in `config/services.yaml`:
-
-``` yaml
-[[= include_file('code_samples/front/shop/shipping/config/services.yaml', 0, 1) =]][[= include_file('code_samples/front/shop/shipping/config/services.yaml', 15, 22) =]]
-```
-
-Then, create a `src/ShippingMethodType/CustomerNotNullValidator.php` file with a validator class:
-
-``` php
-[[= include_code('code_samples/front/shop/shipping/src/ShippingMethodType/CustomerNotNullValidator.php') =]]
-```
-
-Finally, register the validator as a service:
-
-``` yaml
-[[= include_file('code_samples/front/shop/shipping/config/services.yaml', 0, 1) =]][[= include_file('code_samples/front/shop/shipping/config/services.yaml', 22, 25) =]]
-```
-
-Now, when you create a new shipping method and leave the **Customer identifier** field empty, you should see a warning.
-
-
-
-### Create storage converter
-
-Before form data can be stored in database tables, field values must be converted to a storage-specific format.
-Here, the storage converter converts the `customer_identifier` string value into the `customer_id` numerical value.
-
-Create a `src/ShippingMethodType/Storage/StorageConverter.php` file with a storage converter class:
-
-``` php
-[[= include_code('code_samples/front/shop/shipping/src/ShippingMethodType/Storage/StorageConverter.php') =]]
-```
-
-Then, register the storage converter as a service:
-
-``` yaml
-[[= include_file('code_samples/front/shop/shipping/config/services.yaml', 0, 1) =]][[= include_file('code_samples/front/shop/shipping/config/services.yaml', 25, 28) =]]
-```
-
-#### Storage definition
-
-Now, create a storage definition class and a corresponding schema.
-The table stores information specific for the custom shipping method type.
-
-!!! note "Create table"
-
- Before you can proceed, in your database, create a table that has columns present in the storage definition, for example:
-
- `CREATE TABLE ibexa_shipping_method_region_custom(id int auto_increment primary key, customer_id text, shipping_method_region_id int);`
-
-Create a `src/ShippingMethodType/Storage/StorageDefinition.php` file with a storage definition:
-
-``` php
-[[= include_code('code_samples/front/shop/shipping/src/ShippingMethodType/Storage/StorageDefinition.php') =]]
-```
-
-Then, create a `src/ShippingMethodType/Storage/StorageSchema.php` file with a storage schema:
-
-``` php
-[[= include_code('code_samples/front/shop/shipping/src/ShippingMethodType/Storage/StorageSchema.php') =]]
-```
-
-Then, register the storage definition as a service:
-
-``` yaml
-[[= include_file('code_samples/front/shop/shipping/config/services.yaml', 0, 1) =]][[= include_file('code_samples/front/shop/shipping/config/services.yaml', 28, 31) =]]
-```
-
-## Toggle shipping method type availability
-
-When you implement a web store, you can choose if a certain shipping method is available for selection during checkout.
-Here, you limit shipping method availability to customers who meet a specific condition. In this case, they must belong to the Acme company.
-Create a `src/ShippingMethodType/Vote/CustomVoter.php` file with a voter class:
-
-``` php
-[[= include_code('code_samples/front/shop/shipping/src/ShippingMethodType/Voter/CustomVoter.php') =]]
-```
-
-Register the voter as a service:
-
-``` yaml
-[[= include_file('code_samples/front/shop/shipping/config/services.yaml', 0, 1) =]][[= include_file('code_samples/front/shop/shipping/config/services.yaml', 31, 34) =]]
-```
-
-## Display shipping method parameters in details view
-
-You can extend the default shipping method details view by making shipping method visible on the **Cost** tab.
-To do this, create a `src/ShippingMethodType/Cost/CustomCostFormatter.php` file with a formatter class:
-
-``` php
-[[= include_code('code_samples/front/shop/shipping/src/ShippingMethodType/Cost/CustomCostFormatter.php') =]]
-```
-
-Then register the formatter as a service:
-
-``` yaml
-[[= include_file('code_samples/front/shop/shipping/config/services.yaml', 0, 1) =]][[= include_file('code_samples/front/shop/shipping/config/services.yaml', 34, 38) =]]
-```
-
-You should now see the parameter, in this case it's a customer identifier, displayed on the **Cost** tab of the shipping method's details view.
-
-
-
-!!! note "Non-matching label"
-
- This section doesn't discuss overriding the default form, therefore the alphanumerical customer identifier is shown under the **Cost value** label.
- For more information about working with forms, see [Page and Form tutorial](../../tutorials/page_and_form_tutorial/5_create_newsletter_form.md).
diff --git a/docs/commerce/shipping_management/img/custom_shipping_method_type.png b/docs/commerce/shipping_management/img/custom_shipping_method_type.png
deleted file mode 100644
index e3a819107ba..00000000000
Binary files a/docs/commerce/shipping_management/img/custom_shipping_method_type.png and /dev/null differ
diff --git a/docs/commerce/shipping_management/img/custom_shipping_type_validator.png b/docs/commerce/shipping_management/img/custom_shipping_type_validator.png
deleted file mode 100644
index f3ea6433f86..00000000000
Binary files a/docs/commerce/shipping_management/img/custom_shipping_type_validator.png and /dev/null differ
diff --git a/docs/commerce/shipping_management/img/shipping_method_cost_tab.png b/docs/commerce/shipping_management/img/shipping_method_cost_tab.png
deleted file mode 100644
index 42972f11e44..00000000000
Binary files a/docs/commerce/shipping_management/img/shipping_method_cost_tab.png and /dev/null differ
diff --git a/docs/commerce/shipping_management/img/shipping_method_type_selection.png b/docs/commerce/shipping_management/img/shipping_method_type_selection.png
deleted file mode 100644
index 307453c4915..00000000000
Binary files a/docs/commerce/shipping_management/img/shipping_method_type_selection.png and /dev/null differ
diff --git a/docs/commerce/shipping_management/shipment_api.md b/docs/commerce/shipping_management/shipment_api.md
deleted file mode 100644
index 2ea3f1b38d2..00000000000
--- a/docs/commerce/shipping_management/shipment_api.md
+++ /dev/null
@@ -1,63 +0,0 @@
----
-description: Use PHP API to manage shipments in Commerce. Create, update and delete shipments.
-edition: commerce
----
-
-# Shipment API
-
-To get shipments and manage them, use the `Ibexa\Contracts\Shipping\ShipmentServiceInterface` interface.
-
-From the developer's perspective, shipments are referenced with a UUID identifier.
-
-## Get single shipment
-
-### Get single shipment by identifier
-
-To access a single shipment by using its string identifier, use the `ShipmentService::getShipmentByIdentifier` method:
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/ShipmentCommand.php', 58, 66, remove_indent=True) =]]
-```
-
-### Get single shipment by id
-
-To access a single shipment by using its numerical id, use the `ShipmentService::getShipment` method:
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/ShipmentCommand.php', 46, 55, remove_indent=True) =]]
-```
-
-## Get multiple shipments
-
-To fetch multiple shipments, use the `ShipmentService::findShipments` method.
-It follows the same search query pattern as other APIs:
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/ShipmentCommand.php', 69, 87, remove_indent=True) =]]
-```
-
-## Create shipment
-
-To create a shipment, use the `ShipmentService::createShipment` method and provide it with an `Ibexa\Contracts\Shipping\Value\ShipmentCreateStruct` object that takes two parameters, a `shippingMethod` string and a `Money` object.
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/ShipmentCommand.php', 90, 103, remove_indent=True) =]]
-```
-
-## Update shipment
-
-You can update the shipment after it's created.
-You could do it to support a scenario when, for example, the shipment is processed offline and its status has to be updated in the system.
-To update shipment information, use the `ShipmentService::updateShipment` method:
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/ShipmentCommand.php', 106, 116, remove_indent=True) =]]
-```
-
-## Delete shipment
-
-To delete a shipment from the system, use the `ShipmentService::deleteShipment` method:
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/ShipmentCommand.php', 119, 119, remove_indent=True) =]]
-```
diff --git a/docs/commerce/shipping_management/shipping_management.md b/docs/commerce/shipping_management/shipping_management.md
deleted file mode 100644
index 9a3a845bd63..00000000000
--- a/docs/commerce/shipping_management/shipping_management.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-description: The shipping component covers defining and managing shipping methods, together with managing shipments and their lifecycle.
-edition: commerce
----
-
-# Shipping
-
-The shipping component enables users to define and manage shipping methods of different types, create and manage shipments, search for shipments, and filter search results.
-Depending on their role, users can also enable or disable shipping methods, change status of shipments, and cancel shipments.
-
-!!! note "Shipping method types"
-
- Two types of shipping methods are available by default: `flat rate` and `free`.
-
-From the development perspective, the component enables customization of the shipment workflow.
-
-The component exposes the following:
-
-- [Shipping method PHP API](shipping_method_api.md) that allows for managing shipping methods
-- [Shipment PHP API](shipment_api.md) that allows for managing shipments
-
-## Services
-
-The Shipping package provides the following services, which are entry points for calling backend APIs:
-
-- `Ibexa\Contracts\Shipping\ShippingMethodServiceInterface`
-- `Ibexa\Contracts\Shipping\ShipmentServiceInterface`
diff --git a/docs/commerce/shipping_management/shipping_method_api.md b/docs/commerce/shipping_management/shipping_method_api.md
deleted file mode 100644
index 07ffb64da00..00000000000
--- a/docs/commerce/shipping_management/shipping_method_api.md
+++ /dev/null
@@ -1,71 +0,0 @@
----
-description: Use PHP API to manage shipping methods in Commerce. Create and update shipping methods, delete shipping methods and their translations.
-edition: commerce
----
-
-# Shipping method API
-
-To get shipping methods and manage them, use the `Ibexa\Contracts\Shipping\ShippingMethodServiceInterface` interface.
-
-Shipping methods are referenced with identifiers defined manually at method creation stage in user interface.
-
-## Get shipping method
-
-### Get shipping method by identifier
-
-To access a shipping method by using its identifier, use the `ShippingMethodServiceInterface::getShippingMethod` method.
-The method takes a string as `$identifier` parameter and uses a prioritized language from SiteAccess settings unless you pass another language as `forcedLanguage`.
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/ShippingMethodCommand.php', 53, 62, remove_indent=True) =]]
-```
-
-### Get shipping method by ID
-
-To access a shipping method by using its ID, use the `ShippingMethodServiceInterface::getShippingMethod` method.
-The method takes a string as `$id` parameter and uses a prioritized language from SiteAccess settings unless you pass another language as `forcedLanguage`.
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/ShippingMethodCommand.php', 41, 50, remove_indent=True) =]]
-```
-
-## Get multiple shipping methods
-
-To fetch multiple shipping methods, use the `ShippingMethodServiceInterface::getShippingMethod` method.
-It follows the same search query pattern as other APIs:
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/ShippingMethodCommand.php', 65, 82, remove_indent=True) =]]
-```
-
-## Create shipping method
-
-To create a shipping method, use the `ShippingMethodServiceInterface::createShippingMethod` method and provide it with the `Ibexa\Contracts\Shipping\Value\ShippingMethodCreateStruct` object that you created by using the `newShippingMethodCreateStruct` method.
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/ShippingMethodCommand.php', 85, 107, remove_indent=True) =]]
-```
-
-## Update shipping method
-
-To update a shipping method, use the `ShippingMethodServiceInterface::updateShippingMethod` method and provide it with the `Ibexa\Contracts\Shipping\Value\ShippingMethodUpdateStruct` object that you created by using the `newShippingMethodUpdateStruct` method.
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/ShippingMethodCommand.php', 110, 123, remove_indent=True) =]]
-```
-
-## Delete shipping method
-
-To update a shipping method, use the `ShippingMethodServiceInterface::deleteShippingMethod` method.
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/ShippingMethodCommand.php', 126, 131, remove_indent=True) =]]
-```
-
-## Delete shipping method translation
-
-To delete shipping method translation, use the `ShippingMethodServiceInterface::deleteShippingMethodTranslation` method.
-
-``` php
-[[= include_code('code_samples/api/commerce/src/Command/ShippingMethodCommand.php', 134, 142, remove_indent=True) =]]
-```
diff --git a/docs/commerce/shopping_list/img/add_to_cart.png b/docs/commerce/shopping_list/img/add_to_cart.png
deleted file mode 100644
index d956d379162..00000000000
Binary files a/docs/commerce/shopping_list/img/add_to_cart.png and /dev/null differ
diff --git a/docs/commerce/shopping_list/img/add_to_shopping_list_widget.png b/docs/commerce/shopping_list/img/add_to_shopping_list_widget.png
deleted file mode 100644
index c9200688c54..00000000000
Binary files a/docs/commerce/shopping_list/img/add_to_shopping_list_widget.png and /dev/null differ
diff --git a/docs/commerce/shopping_list/img/create_from_management.png b/docs/commerce/shopping_list/img/create_from_management.png
deleted file mode 100644
index 75669841a8b..00000000000
Binary files a/docs/commerce/shopping_list/img/create_from_management.png and /dev/null differ
diff --git a/docs/commerce/shopping_list/img/create_from_product.png b/docs/commerce/shopping_list/img/create_from_product.png
deleted file mode 100644
index 3343d79c00d..00000000000
Binary files a/docs/commerce/shopping_list/img/create_from_product.png and /dev/null differ
diff --git a/docs/commerce/shopping_list/img/create_from_shopping_list.png b/docs/commerce/shopping_list/img/create_from_shopping_list.png
deleted file mode 100644
index 5c230d0369e..00000000000
Binary files a/docs/commerce/shopping_list/img/create_from_shopping_list.png and /dev/null differ
diff --git a/docs/commerce/shopping_list/img/move_to_my_wishlist.png b/docs/commerce/shopping_list/img/move_to_my_wishlist.png
deleted file mode 100644
index 900d7978433..00000000000
Binary files a/docs/commerce/shopping_list/img/move_to_my_wishlist.png and /dev/null differ
diff --git a/docs/commerce/shopping_list/img/shopping_list_belonging_1.png b/docs/commerce/shopping_list/img/shopping_list_belonging_1.png
deleted file mode 100644
index afc5bb4dcc2..00000000000
Binary files a/docs/commerce/shopping_list/img/shopping_list_belonging_1.png and /dev/null differ
diff --git a/docs/commerce/shopping_list/img/shopping_list_belonging_2.png b/docs/commerce/shopping_list/img/shopping_list_belonging_2.png
deleted file mode 100644
index cbad006656e..00000000000
Binary files a/docs/commerce/shopping_list/img/shopping_list_belonging_2.png and /dev/null differ
diff --git a/docs/commerce/shopping_list/install_shopping_list.md b/docs/commerce/shopping_list/install_shopping_list.md
deleted file mode 100644
index 1c5d0829caf..00000000000
--- a/docs/commerce/shopping_list/install_shopping_list.md
+++ /dev/null
@@ -1,100 +0,0 @@
----
-description: Install the Shopping list LTS update.
-editions: lts-update commerce
-month_change: false
----
-
-# Install shopping list
-
-## Install framework
-
-Run the following command to install the package:
-
-``` bash
-composer require ibexa/shopping-list
-```
-
-The associated Symfony Flex recipe configures the bundle and its routes.
-
-Check that the following line has been added by the recipe to `config/bundles.php` file's array:
-
-``` php
-return [
- // ...
- Ibexa\Bundle\ShoppingList\IbexaShoppingListBundle::class => ['all' => true],
-];
-```
-
-And that you have a `config/routes/ibexa_shopping_list.yaml` file configuring the following routes:
-
-```yaml
-ibexa.shopping_list:
- resource: '@IbexaShoppingListBundle/Resources/config/routing.php'
-
-ibexa.rest.shopping_list:
- resource: '@IbexaShoppingListBundle/Resources/config/routing_rest.php'
- prefix: '%ibexa.rest.path_prefix%'
-```
-
-## Modify database schema
-
-Add the tables needed by the bundle:
-
-=== "MySQL"
-
- ```sql
- [[= include_file('code_samples/shopping_list/install/schema.mysql.sql', 0, None, ' ') =]]
- ```
-
-=== "PostgreSQL"
-
- ```sql
- [[= include_file('code_samples/shopping_list/install/schema.postgresql.sql', 0, None, ' ') =]]
- ```
-
-The script creates the required data structures, but doesn't add any data to the database.
-
-The users don't have any shopping lists, not even the default “My Wishlist” list.
-The default shopping list is created automatically when the user triggers the "Add to wishlist" action for the first time.
-
-## Configure
-
-By default, the maximum shopping list count per user is 10 and the maximum entries per list is 100.
-When listing their shopping lists, the user see 25 lists per page
-(and as it's over the shopping list count, there is always one page of shopping lists in this default scenario).
-
-You can override the following parameters to change their values:
-
-```yaml
-parameters:
- ibexa.site_access.config.default.shopping_list.limits.max_lists_per_user: 10
- ibexa.site_access.config.default.shopping_list.limits.max_entries_per_list: 100
- ibexa.site_access.config.default.shopping_list.pagination.list_per_page_limit: 25
-```
-
-!!! caution "Max lists per user and default shopping list"
-
- The customer can always create the default shopping list if it doesn't exist yet, even if they have already reached the limit defined by `max_lists_per_user`.
- So, for 10 as the default limit, the user may have 11 lists if the user created 10 custom lists before creating the default one.
- If you want to restrict users to only the default shopping list, you can set `max_lists_per_user` to 0.
-
-### Shopping list user role
-
-To allow customers to use the shopping list feature, create a new role and assign it to registered customer groups.
-To restrict authenticated users access to only their own lists, you must grant the four functions from the Shopping List module with the limitation 'Shopping List Owner: Self'.
-Otherwise, they will be able to interact with all shopping lists existing in the system.
-Anonymous users can't have shopping lists as they're internally sharing the same account.
-
-To create such role, you can use a [migration file](importing_data.md#roles), for example, with the following content:
-
-``` yaml
-[[= include_file('code_samples/shopping_list/install/src/Migrations/Ibexa/migrations/shopping_list_user.yaml', 4, 29) =]]
-```
-
-On a clean install, you can, for example, assign this "Shopping List User" role to the "Customers" user group.
-
-After placing the migration content in `src/Migrations/Ibexa/migrations/shopping_list_user.yaml`, you can import and execute it with:
-
-```bash
-php bin/console ibexa:migrations:migrate --file=shopping_list_user.yaml --siteaccess=admin
-```
diff --git a/docs/commerce/shopping_list/shopping_list.md b/docs/commerce/shopping_list/shopping_list.md
deleted file mode 100644
index f7cce15c56c..00000000000
--- a/docs/commerce/shopping_list/shopping_list.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-description: Shopping list allows users to save potential purchases, recurring product sets, and other items for future use in the cart.
-page_type: landing_page
-editions: lts-update commerce
----
-
-# Shopping list
-
-A shopping list allows users to save potential purchases, recurring product sets, and other items for future use in the cart.
-A user can have several shopping lists, including a default one named "My Wishlist".
-
-## Getting Started
-
-[[= cards([
-"commerce/shopping_list/shopping_list_guide",
-"commerce/shopping_list/install_shopping_list",
-], columns=2) =]]
-
-## Development
-
-[[= cards([
-"commerce/shopping_list/shopping_list_design",
-"commerce/shopping_list/shopping_list_api",
-("api/php_api/php_api_reference/namespaces/ibexa-contracts-shoppinglist.html", "PHP API Reference", "Ibexa\\Contracts\\ShoppingList"),
-"api/event_reference/shopping_list_events/",
-"search/shopping_list_search_reference/shopping_list_criteria/",
-"search/shopping_list_search_reference/shopping_list_sort_clauses/",
-"permissions/policies/#shopping-lists",
-"permissions/limitation_reference/#shopping-list-limitation",
-("api/rest_api/rest_api_reference/rest_api_reference.html#tag/Shopping-List", "REST API Reference", "commerce/shopping-list resources"),
-], columns=2) =]]
diff --git a/docs/commerce/shopping_list/shopping_list_api.md b/docs/commerce/shopping_list/shopping_list_api.md
deleted file mode 100644
index 3674c8e5ea8..00000000000
--- a/docs/commerce/shopping_list/shopping_list_api.md
+++ /dev/null
@@ -1,149 +0,0 @@
----
-description: Manage shopping lists from PHP API or REST API.
-editions: lts-update commerce
-month_change: false
----
-
-# Shopping list APIs
-
-The shopping list APIs allow managing shopping lists.
-The cart APIs includes methods to move products from cart to shopping list and vice versa.
-
-## About the default shopping list
-
-There is one default shopping list per user. This default shopping list is created only when a user uses it for the first time.
-
-The default shopping list is created by [`\Ibexa\Contracts\ShoppingList\ShoppingListServiceInterface::getOrCreateDefaultShoppingList()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-ShoppingListServiceInterface.html#method_getOrCreateDefaultShoppingList).
-For example, starting to use the default list from REST API will create it if it doesn't exist, as during a call
-to [`POST /shopping-list/default/entries`](/api/rest_api/rest_api_reference/rest_api_reference.html#tag/Shopping-List/operation/api_shopping-listdefaultentries_post)
-or [`POST /cart/{identifier}/move-to-shopping-list`](/api/rest_api/rest_api_reference/rest_api_reference.html#tag/Cart/operation/api_cart_identifiermove-to-shopping-list_post).
-
-Note that `default` isn't the default shopping list identifier. Each user's default shopping list has a unique identifier, a hash string like `01234567-89ab-cdef-0123-456789abcdef`.
-
-When a user has permissions to create shopping lists [`shopping_list/create`](policies.md#shopping-lists),
-they can always create a default shopping list, regardless of the maximum shopping list count per user configuration [`max_lists_per_user`](install_shopping_list.md#configure).
-
-## PHP API
-
-In the [`Ibexa\Contracts\ShoppingList`](/api/php_api/php_api_reference/namespaces/ibexa-contracts-shoppinglist.html) namespace are the interfaces to manipulate shopping lists.
-The [`Ibexa\Contracts\ShoppingList\ShoppingListServiceInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-ShoppingListServiceInterface.html) defines methods to
-create, get, find, update, clear, and delete shopping lists, and to add, get, move, and remove entries.
-
-### List and search shopping lists
-
-Shopping list search can be done with
-[`ShoppingListServiceInterface::findShoppingLists()` method](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-ShoppingListServiceInterface.html#method_findShoppingLists)
-with a [`ShoppingListQuery`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Value-ShoppingListQuery.html)
-built with criteria from the [`Criterion` namespace](/api/php_api/php_api_reference/namespaces/ibexa-contracts-shoppinglist-value-query-criterion.html)
-implementing the [`CriterionInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Value-Query-CriterionInterface.html),
-and with sort clauses from the [`SortClause` namespace](/api/php_api/php_api_reference/namespaces/ibexa-contracts-shoppinglist-value-query-sortclause.html).
-
-To get all shopping lists (of the current user or of the whole repository depending on the current user limitation), use the search method without criterion:
-
-``` php
-use Ibexa\Contracts\ShoppingList\ShoppingListServiceInterface;
-use Ibexa\Contracts\ShoppingList\Value\ShoppingListQuery;
-
-/** @var ShoppingListServiceInterface $shoppingListService */
-$lists = $shoppingListService->findShoppingLists(new ShoppingListQuery());
-```
-
-For more information about the shopping list search,
-see [Shopping list criteria](shopping_list_criteria.md),
-and [Shopping list sort clauses](shopping_list_sort_clauses.md)
-references.
-
-### Manage shopping lists entries
-
-Methods editing the shopping list first store the change in the persistence layer then return the updated shopping list object.
-If you forgot to retrieve this result in your variable, the local object isn't synchronized with the database.
-In the following example, if some assignments (`$list =`) are removed, the dumped `$list` object doesn't contain the stored shopping list at that time.
-If only the middle assignment is removed, the last dumped variable contains the up-to-date shopping list.
-
-``` php
-use Ibexa\Contracts\ShoppingList\ShoppingListServiceInterface;
-use Ibexa\Contracts\ShoppingList\Value\EntryAddStruct;
-
-/**
- * @var ShoppingListServiceInterface $shoppingListService
- * @var string $productCode
- */
-$list = $shoppingListService->getOrCreateDefaultShoppingList();
-dump($list);
-$list = $shoppingListService->clearShoppingList($list);
-dump($list);
-$list = $shoppingListService->addEntries($list, [new EntryAddStruct($productCode)]);
-dump($list);
-```
-
-When adding array of entries with `ShoppingListService::addEntries()`,
-an exception is thrown if at least product is already in the shopping list and no entries are added to the list.
-
-The following example adds products to a shopping list while avoiding error on duplicated entries.
-In this example the duplicates are ignored, but you could extend it to, for example, notify the user about each found duplicate.
-
-``` php
-[[= include_code('code_samples/shopping_list/php_api/src/Command/ShoppingListFilterCommand.php', 40, 50, remove_indent=True) =]]
-```
-
-The following example moves products from a source shopping list to a target shopping list after filtering out products already in the target list:
-
-``` php
-[[= include_code('code_samples/shopping_list/php_api/src/Command/ShoppingListMoveCommand.php', 43, 54, remove_indent=True) =]]
-```
-
-### Transfer between shopping list and cart
-
-Interactions between shopping list and cart are managed by
-[`Ibexa\Contracts\Cart\CartShoppingListTransferServiceInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Cart-CartShoppingListTransferServiceInterface.html)
-
-The following example starts with an empty cart and an empty shopping list,
-then adds a product to the shopping list and copies it twice to the cart.
-It continues with moving the whole cart to an empty list.
-
-``` php
-[[= include_code('code_samples/shopping_list/php_api/src/Controller/CartShoppingListTransferController.php', 70, 92, remove_indent=True) =]]
-```
-
-### Events
-
-When the shopping list service methods are called, event are dispatched before and after the action so its parameters or results can be customized.
-For more information, see [Shopping list event reference](shopping_list_events.md).
-
-There is no specific event for the transfer operations.
-
-- When adding from shopping list to cart, the [`Ibexa\Contracts\Cart\Event\BeforeAddEntryEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Cart-Event-BeforeAddEntryEvent.html) and [`Ibexa\Contracts\Cart\Event\AddEntryEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Cart-Event-AddEntryEvent.html) are dispatched for each entry that wasn't previously in the cart.
-- When moving from cart to shopping list, single [`Ibexa\Contracts\ShoppingList\Event\BeforeAddEntriesEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Event-BeforeAddEntriesEvent.html) and [`Ibexa\Contracts\ShoppingList\Event\AddEntriesEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Event-AddEntriesEvent.html) events are dispatched for the batch of entries,
- then [`Ibexa\Contracts\Cart\Event\BeforeRemoveEntryEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Cart-Event-BeforeRemoveEntryEvent.html) and [`Ibexa\Contracts\Cart\Event\BeforeRemoveEntryEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Cart-Event-RemoveEntryEvent.html) are dispatched for each entry removed from the cart.
-
-## REST API
-
-The REST API provides resources for managing shopping lists and their entries,
-as well as for moving products between the cart and the shopping list.
-
-These resources start with [`/shopping-list/*`](/api/rest_api/rest_api_reference/rest_api_reference.html#tag/Shopping-List).
-In Symfony's `dev` environment, you can consult and test the REST API at `/api/ibexa/v2/doc#/Shopping%20List`.
-
-The following REST example uses `curl` and [`jq`](https://jqlang.org/) to:
-
-- log in a user
-- search for the default shopping list to get its identifier
-- clear the default shopping list if it exists using its identifier
-- add a product to the default shopping list
-
-```bash
-[[= include_file('code_samples/shopping_list/shopping_list_rest_api.sh', 5) =]]
-```
-
-### Transfer between shopping list and cart
-
-You can use:
-
-- [`POST /shopping-list/{identifier}/add-entries-to-cart`](/api/rest_api/rest_api_reference/rest_api_reference.html#tag/Shopping-List/operation/api_shopping-list_identifieradd-entries-to-cart_post) to add some shopping list entries to the default cart
-- [`POST /shopping-list/{identifier}/add-entries-to-cart/{cartIdentifier}`](/api/rest_api/rest_api_reference/rest_api_reference.html#tag/Shopping-List/operation/api_shopping-list_identifieradd-entries-to-cart_cartIdentifier_post) to add some shopping list entries to a specific cart
-- [`POST /shopping-list/{identifier}/add-to-cart`](/api/rest_api/rest_api_reference/rest_api_reference.html#tag/Shopping-List/operation/api_shopping-list_identifieradd-to-cart_post) to add all entries from a shopping list to the default cart
-- [`POST /shopping-list/{identifier}/add-to-cart/{cartIdentifier}`](/api/rest_api/rest_api_reference/rest_api_reference.html#tag/Shopping-List/operation/api_shopping-list_identifieradd-to-cart_cartIdentifier_post) to add all entries from a shopping list to a specific cart
-- [`POST /cart/{identifier}/move-entries-to-shopping-list`](/api/rest_api/rest_api_reference/rest_api_reference.html#tag/Cart/operation/api_cart_identifiermove-entries-to-shopping-list_post) to move some cart entries to the default shopping list
-- [`POST /cart/{identifier}/move-entries-to-shopping-list/{shoppingListIdentifier}`](/api/rest_api/rest_api_reference/rest_api_reference.html#tag/Cart/operation/api_cart_identifiermove-entries-to-shopping-list_shoppingListIdentifier_post) to move some cart entries to a specific shopping list
-- [`POST /cart/{identifier}/move-to-shopping-list`](/api/rest_api/rest_api_reference/rest_api_reference.html#tag/Cart/operation/api_cart_identifiermove-to-shopping-list_post) to move all entries from a cart to the default shopping list
-- [`POST /cart/{identifier}/move-to-shopping-list/{shoppingListIdentifier}`](/api/rest_api/rest_api_reference/rest_api_reference.html#tag/Cart/operation/api_cart_identifiermove-to-shopping-list_shoppingListIdentifier_post) to move all entries from a cart to a specific shopping list
diff --git a/docs/commerce/shopping_list/shopping_list_design.md b/docs/commerce/shopping_list/shopping_list_design.md
deleted file mode 100644
index b7cc250ab4b..00000000000
--- a/docs/commerce/shopping_list/shopping_list_design.md
+++ /dev/null
@@ -1,261 +0,0 @@
----
-description: Learn how to integrate the shopping list features to your own online store design.
-editions: lts-update commerce
-month_change: false
----
-
-# Shopping list design
-
-To integrate the shopping list features to your own online store design, you can
-
-- look at the default shopping list templates for the `standard` theme in
-`vendor/ibexa/shopping-list/src/bundle/Resources/views/themes/standard/shopping_list/` directory
-- look at their overrides and complements in the [`storefront` theme](storefront.md) at
-`vendor/ibexa/storefront/src/bundle/Resources/views/themes/storefront/shopping_list/`
-
-## "Add to shopping list" widget
-
-This widget contains a list of shopping lists indicating whether a product belongs to given list and allows to create a new shopping list on the fly.
-It's used in the `storefront` theme in several places, embedded within a drop-down menu or a modal.
-
-
-You can use the following Twig and TypeScript components to insert an "Add to shopping list" widget for a product into your storefront:
-
-- `vendor/ibexa/shopping-list/src/bundle/Resources/views/themes/standard/shopping_list/component/add_to_shopping_list/add_to_shopping_list.html.twig` displays a list of shopping lists preceded with checkboxes showing if the product is in it.
-- `vendor/ibexa/shopping-list/src/bundle/Resources/public/js/component/add.to.shopping.list.ts` handles the interaction with the list of shopping lists' checkboxes and the new shopping list creation on the fly.
-- `vendor/ibexa/shopping-list/src/bundle/Resources/public/js/component/shopping.list.ts` handles the REST API calls.
-- `vendor/ibexa/shopping-list/src/bundle/Resources/public/js/component/shopping.lists.list.ts` handles the list of shopping lists.
-
-The following example shows the setup of an "Add to shopping list" widget on a product full view page in the `standard` theme without implying the `storefront` theme.
-For a base product, the variants are listed with an instance of the widget to demonstrate that it can be used several time on the same page.
-
-Create an `assets/js/add-to-shopping-list.ts` that initializes the `ShoppingList` object and imports the script handling the widget interactions:
-
-``` ts
-[[= include_file('code_samples/shopping_list/add_to_shopping_list/assets/js/add-to-shopping-list.ts') =]]
-```
-
-Edit the `webpack.config.js` to enable TypeScript, set the aliases used in `add-to-shopping-list.ts`, and create an entry for it:
-
-``` js hl_lines="5-14"
-// […]
-
-[[= include_file('code_samples/shopping_list/add_to_shopping_list/webpack.config.js', 43) =]]
-```
-
-Then, you can use the component in your template as in the following example:
-
-```twig hl_lines="4 5 9-11 14"
-{% block meta %}
- {{ parent() }}
- {# The CSRF token and SiteAccess are needed for the REST API calls #}
-
-
-{% endblock %}
-{% block content %}
- {{ product.name }}
- {% include '@ibexadesign/shopping_list/component/add_to_shopping_list/add_to_shopping_list.html.twig' with {
- product_code: product.code,
- } %}
-{% endblock %}
-{% block javascripts %}
- {{ encore_entry_script_tags('add-to-shopping-list-js') }}
-{% endblock %}
-```
-
-To have a more complete example, let's continue with a product full view template which could work on a fresh installation.
-
-In `src/Controller/ProductViewController.php`, create a new controller to add the variants to the product view:
-
-``` php hl_lines="24-30"
-[[= include_code('code_samples/shopping_list/add_to_shopping_list/src/Controller/ProductViewController.php') =]]
-```
-
-In `templates/themes/standard/full/product.html.twig`, create a template to render the product in full view:
-
-``` twig hl_lines="7 8 16-18 31-33 44"
-[[= include_file('code_samples/shopping_list/add_to_shopping_list/templates/themes/standard/full/product.html.twig') =]]
-```
-
-Because the component uses global variables, it can't be used directly in a macro.
-
-In `config/packages/views.yaml`, configure the controller and template used to render the product full view:
-
-``` yaml hl_lines="7 8"
-[[= include_file('code_samples/shopping_list/add_to_shopping_list/config/packages/views.yaml') =]]
-```
-
-
-
-## `ShoppingList` JS class and `ibexaShoppingList` global
-
-The `ShoppingList` class is responsible for handling the shopping lists data and interactions with the REST API.
-An object of this class contains the shopping lists and their entries, and has methods to manipulate the shopping lists.
-
-An object of this class can be initialized with the `shoppingList.init()` function only once.
-This initialization creates the `window.ibexaShoppingList` global variable pointing to the object.
-If you have several scripts needing an instance of `ShoppingList` class, `window.ibexaShoppingList` is the indicator if it has been initialized already and it points to the object you should use.
-Preferably initialize an object of class `ShoppingList` on the top of the script, then use `window.ibexaShoppingList` in the next lines.
-
-It has the following methods:
-
-- `createShoppingList(name)` creates a new shopping list, updates the local `window.ibexaShoppingList.shoppingLists` property,
- and returns a [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise) resolving to an array with
- - at index 0, the created shopping list
- - at index 1, the whole `ShoppingList` object with all the user's shopping lists
-- `getShoppingLists()` returns the local `window.ibexaShoppingList.shoppingLists` property
-- `loadShoppingLists()` loads the shopping lists from the server, then updates the local `window.ibexaShoppingList.shoppingLists` property, and returns it
-- `loadShoppingList(list_identifier: string)` returns a `Promise` for the shopping list with the given identifier
-- `addShoppingListEntries(list_identifier: string, product_codes: string[])` adds entries to the given shopping list for the given product codes, and returns a `Promise` for the [`Response`](https://developer.mozilla.org/docs/Web/API/Response)
-- `removeShoppingListEntries(list_identifier: string, entry_identifiers: string[])` remove from the given shopping list the given entries, and returns a `Promise` resolving to a `Response`
-
-`window.ibexaShoppingList.shoppingLists` has the following data structure:
-
-```js
-shoppingLists_Mockup = {
- totalCount: 2,
- count: 2,
- ShoppingList: [
- {
- identifier: "12345678-1234-1234-1234-123456789abc",
- name: "My Wishlist",
- isDefault: true,
- owner: {_href: "/api/ibexa/v2/user/users/…", '_media-type': "application/vnd.ibexa.api.User+json"},
- entries: [
- {
- identifier: "…",
- product: {
- _href: "/api/ibexa/v2/product/catalog/products/PRODUCT_CODE",
- '_media-type': "application/vnd.ibexa.api.Product+json",
- code: "PRODUCT_CODE",
- name: "Product name"
- },
- addedAt: "YYYY-MM-DD hh:mm:ss"
- }
- ],
- createdAt: "YYYY-MM-DD hh:mm:ss",
- updatedAt: "YYYY-MM-DD hh:mm:ss"
- },
- {
- identifier: "325d1f8d-877d-40bf-9389-e8eb3e0de58a",
- name: "My own custom list",
- isDefault: false,
- owner: {_href: "/api/ibexa/v2/user/users/…", '_media-type': "application/vnd.ibexa.api.User+json"},
- entries: [
- {
- identifier: "…",
- product: {
- _href: "/api/ibexa/v2/product/catalog/products/ANOTHER_PRODUCT_CODE",
- '_media-type': "application/vnd.ibexa.api.Product+json",
- code: "ANOTHER_PRODUCT_CODE",
- name: "Another product name"
- },
- addedAt: "YYYY-MM-DD hh:mm:ss"
- }
- ],
- createdAt: "YYYY-MM-DD hh:mm:ss",
- updatedAt: "YYYY-MM-DD hh:mm:ss"
- }
- ]
-};
-```
-
-Remember that a `ShoppingList` object like the `window.ibexaShoppingList` has its data updated by the `ShoppingList.createShoppingList` and `ShoppingList.loadShoppingLists` methods.
-
-The following script creates a shopping list, adds a product to it, then refreshes the local `window.ibexaShoppingList.shoppingLists` (as `addShoppingListEntries` method doesn't do it):
-
-```javascript hl_lines="6-8"
-if (!window.ibexaShoppingList) {
- throw new Error('ShoppingList object not initialized, window.ibexaShoppingList not defined');
-}
-let product_code = '';
-let shopping_list_name = '';
-window.ibexaShoppingList.createShoppingList(shopping_list_name).then((data) => {
- window.ibexaShoppingList.addShoppingListEntries(data[0].identifier, [product_code]).then(() => {
- window.ibexaShoppingList.loadShoppingLists(); // Refresh local object
- });
-});
-```
-
-If the "Add to shopping list" widget is used, it could be updated with the following addition to the previous script:
-
-```javascript hl_lines="4-7"
-window.ibexaShoppingList.createShoppingList(shopping_list_name).then((data) => {
- let shopping_list_identifier = data[0].identifier;
- window.ibexaShoppingList.addShoppingListEntries(shopping_list_identifier, [product_code]).then(() => {
- window.ibexaShoppingList.loadShoppingLists().then(() => {
- let selector = '.ibexa-sl-add-to-shopping-list[data-product-code="' + product_code + '"] input[type="checkbox"][value="' + shopping_list_identifier + '"]';
- document.querySelector(selector).checked = true; // Check the new list in product's "Add to shopping list" widget
- });
- });
-});
-```
-
-## JavaScript events
-
-### Shopping lists data changed event
-
-The `ibexa-shopping-list:shopping-lists-data-changed` event is dispatched by the `document.body`
-
-- on `ShoppingList.init()` (and the `window.ibexaShoppingList` global variable is set)
-- on `ShoppingList.createShoppingList()` (and the `window.ibexaShoppingList` global variable is updated)
-- on `ShoppingList.addShoppingListEntries()`
-- on `ShoppingList.removeShoppingListEntries()`
-
-```javascript
-document.body.addEventListener('ibexa-shopping-list:shopping-lists-data-changed', (event) => {
- console.log(event, window.ibexaShoppingList);
-})
-```
-
-### Prepare request event
-
-The `ibexa-shopping-list:prepare-request` event is dispatched by the `document` before each REST API call,
-with the request details in the event's `detail` property.
-
-```javascript
-document.addEventListener('ibexa-shopping-list:prepare-request', (event) => {
- console.log(event, event.detail.request);
-})
-```
-
-## Built-in views
-
-Some routes lead to views (when used with `GET` method) through controllers from the `\Ibexa\Bundle\ShoppingList\Controller` namespace.
-Each uses a template which receives one or several variables, including forms to handle user interactions.
-
-| Route path, name, and controller | Template | Available variables | Description |
-|-------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------|
-| `GET /shopping-list` `ibexa.shopping_list.list` `ShoppingListListController` | `@ibexadesign/shopping_list/list.html.twig` | `shopping_lists` (`Pagerfanta`), `bulk_delete_form`, `filter_form` | List of shopping lists |
-| `GET /shopping-list/create` `ibexa.shopping_list.create` `ShoppingListCreateController` | `@ibexadesign/shopping_list/create.html.twig` | `form` | Form to create a new shopping list |
-| `GET /shopping-list/{identifier}` `ibexa.shopping_list.view` `ShoppingListViewController` | `@ibexadesign/shopping_list/view.html.twig` | `move_entries_form`, `remove_entries_form`, `clear_form`, `delete_form` | Shopping list display |
-| `GET /shopping-list/{identifier}/update` `ibexa.shopping_list.update` `ShoppingListUpdateController` | `@ibexadesign/shopping_list/update.html.twig` | `shopping_list`, `form` | Form to rename a shopping list |
-| `GET /shopping-list/add` `ibexa.shopping_list.add` `AddProductToShoppingListController` | `@ibexadesign/shopping_list/add.html.twig` | `products` ([`ProductListInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Product-ProductListInterface.html)), `forms` (associative array of forms indexed on product code) | List of products with for each the form to add it to a shopping list |
-
-For all those templates (except `add.html.twig`), you'll find two implementations:
-
-- a generic one for the `standard` theme in `vendor/ibexa/shopping-list/src/bundle/Resources/views/themes/standard/`
-- a more advanced demo one for the `storefront` theme in `vendor/ibexa/storefront/src/bundle/Resources/views/themes/storefront/`
-
-Instead of using the `add` route, you should consider using the ["Add to shopping list" widget](#add-to-shopping-list-widget) first.
-
-The following example shows how to link to the shopping list listing page, using a heart icon:
-
-```twig
-
-
-
-```
-
-The `\Ibexa\Bundle\Storefront\EventSubscriber\ShoppingList\DetailsViewSubscriber` passes an additional `selected_entries_form` variable to the template.
-This form allows to have "Add to cart" button for selected entries on top of the shopping list view in `storefront` theme
-through `vendor/ibexa/storefront/src/bundle/Resources/views/themes/storefront/shopping_list/view.html.twig`.
-
-## User menu
-
-The `\Ibexa\Bundle\Storefront\EventSubscriber\ShoppingList\UserMenuSubscriber` is responsible for
-adding the "Shopping lists" item between "Orders" and "Change password" to the user menu
-previously initiated by the `\Ibexa\Bundle\Storefront\Menu\Builder\UserMenuBuilder`.
-You can look at how this subscriber tests that the user isn't anonymous
-and then has the [`shopping_list/view` policy](policies.md#shopping-lists) ([`\Ibexa\Contracts\ShoppingList\Permission\Policy\ShoppingList\View`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Permission-Policy-ShoppingList-View.html))
-before adding the "Shopping lists" item.
diff --git a/docs/commerce/shopping_list/shopping_list_guide.md b/docs/commerce/shopping_list/shopping_list_guide.md
deleted file mode 100644
index 349f0d59601..00000000000
--- a/docs/commerce/shopping_list/shopping_list_guide.md
+++ /dev/null
@@ -1,78 +0,0 @@
----
-description: A shopping list allows users to save potential purchases, recurring product sets, and other items for future use in the cart.
-editions: lts-update commerce
-month_change: false
----
-
-# Shopping list feature guide
-
-Shopping lists give logged-in customers a simple yet powerful way to manage future purchases.
-They can use it to save potential purchases, recurring product sets, and other items for future use in the cart.
-
-## Availability
-
-The shopping list feature is available for [Commerce edition](ibexa_commerce.md) as an [LTS update](editions.md#lts-updates) since v5.0.6.
-
-## Use cases
-
-Shopping lists can be used in various ways, depending on the customer's needs and preferences.
-Here are some examples.
-
-### Recurrent purchases
-
-Every quarter, almost the same consumables must be bought.
-Thanks to a dedicated shopping list, the cart can be quickly drafted and filled with all the necessary products.
-Only quantities need to be adjusted afterward in the cart, for example, depending on what's left from previous quarter and known consumption for the same period from previous years.
-
-### Project wishlist
-
-A customer can store every purchase needed by an incoming project in a dedicated shopping list,
-even several products fulfilling the same purpose to decide later which ones to keep in the final cart.
-
-## Shopping list management overview
-
-Use policies to control rights to create, view, edit, and delete shopping lists.
-Authenticated customers can be granted with these rights, and additionally restricted to interact only with their own shopping lists.
-For more information, see [Shopping list user role](install_shopping_list.md#shopping-list-user-role).
-
-A customer always have a default shopping list named “My Wishlist”
-which is created automatically on first use.
-It can't be renamed and can't be deleted.
-
-You can configure how many shopping lists a customer can have, and how much products they can contain.
-For more information, see [Configure shopping list](install_shopping_list.md#configure).
-
-A shopping list only stores product codes.
-A shopping list doesn't store quantities.
-
-In the out-of-the-box [storefront](storefront.md), a shopping list user can:
-
-- Create a shopping list
- - in shopping lists management interface
- 
- - from catalog when adding a product to a shopping list
- 
- - from a shopping list when adding a product to another shopping list
- 
-- Manage to which shopping lists a product (or product variant) belongs to, from a product page or from a shopping list's product list
-  
-- Rename a shopping list (except the default “My Wishlist”)
-- View the list of their shopping lists
-- View a shopping list and its product list
-- Copy product from a shopping list to cart (product is kept in shopping list while added to the cart, quantity in the cart is incremented by 1 each time)
-- Copy a whole shopping list to cart
- - products are kept in shopping list while added to the cart
- - products out-of-stock aren't copied and the user is warned
- - product quantities are incremented by 1, the user can adjust quantities in the cart
- 
-- Move a product from cart to “My Wishlist” (product is removed from cart and added to the default shopping list)
-- Move the whole cart to “My Wishlist” (products are removed from cart and added to the default shopping list)
- 
-- Delete a shopping list
-
-## Extensibility
-
-The shopping list's [PHP API](shopping_list_api.md#php-api) and [REST API](shopping_list_api.md#rest-api) already offer few functionalities not used in the default storefront,
-such as emptying shopping lists, or moving products from a cart to a specific shopping list.
-
-You can use these APIs to implement custom feature, or extend them even further to cover more use cases.
diff --git a/docs/commerce/storefront/configure_storefront.md b/docs/commerce/storefront/configure_storefront.md
deleted file mode 100644
index 9203b5d5c6c..00000000000
--- a/docs/commerce/storefront/configure_storefront.md
+++ /dev/null
@@ -1,95 +0,0 @@
----
-description: Configure Storefront, including catalogs used, customer groups and user accounts.
-edition: commerce
----
-# Configure Storefront
-
-The Storefront is accessible under the `/product-catalog`.
-
-## Catalog configuration
-
-With the `ibexa/storefront` package, you can configure the product catalog and make it available to your shop users.
-
-Before you start configuring the Storefront, make sure you have created, configured, and published [catalogs]([[= user_doc =]]/product_catalog/work_with_catalogs/#create-catalogs) in the back office.
-
-The configuration is available under the `ibexa.system..storefront.catalog` [configuration key](configuration.md#configuration-files).
-It accepts the following values:
-
-1\. All products available for all users:
-
-```yaml
-ibexa:
- system:
- site:
- storefront:
- catalog: ~
-```
-
-If `null`is provided as the value, the Storefront makes the main product catalog (with all products) visible for all users.
-
-2\. To expose a single catalog with an identifier to all users, provide a string value of the catalog identifier:
-
-```yaml
-ibexa:
- system:
- site:
- storefront:
- catalog: custom_catalog
-```
-
-3\. Specific catalog for the defined customer group
-
-You can expose different catalogs based on a customer group assigned to the current user.
-
-To do it, provide the following configuration:
-
-```yaml
-ibexa:
- system:
- site:
- storefront:
- catalog:
- default: standard
- customer_group:
- retailer: retailer_catalog
- wholesale: wholesaler_catalog
-```
-
-The basic configuration of the Storefront can look as follows:
-
-``` yaml
-[[= include_file('code_samples/front/shop/storefront/config/packages/ibexa.yaml') =]]
-```
-
-## Retrieve catalog assigned to user
-
-The [`\Ibexa\Contracts\Storefront\Repository\CatalogResolverInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Storefront-Repository-CatalogResolverInterface.html) interface allows retrieving the product catalog available for a specific user.
-
-To retrieve catalog assigned for the current user, pass `null`.
-
-### Configure user account
-
-The following user settings mechanisms used in `ibexa/storefront` are reused from `ibexa/user` package:
-
-- [change password feature](passwords.md)
-- user avatar
-
-Settings for a Storefront user are configured under the `ibexa.system..storefront.user_settings_groups` [configuration key](configuration.md#configuration-files):
-
-```yaml
-ibexa:
- system:
- site_group:
- storefront:
- user_settings_groups:
- - location
- - custom_group
-```
-
-By default, only the `location` user settings is provided:
-
-- Currency (from `ibexa/storefront`)
-- Time zone
-- Short date and time format
-- Long date and time format
-- Language
diff --git a/docs/commerce/storefront/extend_storefront.md b/docs/commerce/storefront/extend_storefront.md
deleted file mode 100644
index 317f417e2d3..00000000000
--- a/docs/commerce/storefront/extend_storefront.md
+++ /dev/null
@@ -1,119 +0,0 @@
----
-description: Extend Storefront with new menus.
-edition: commerce
----
-
-# Extend Storefront
-
-## Built-in menus
-
-With the `ibexa/storefront` package come the following built-in menus:
-
-| Item | Value | Description |
-|------------|----------|---------|
-| [Breadcrumbs](#breadcrumbs-menu)| | Renders breadcrumbs for content tree root, Taxonomy Entry, product, user settings, and user settings group |
-| [Taxonomy](#taxonomy-menu)| | It can render a menu for product categories or tags |
-| Currency| `currency_menu` | Renders a menu to change the active currency |
-| Language| `language_menu` | Renders a menu to change the active language |
-| Region | `region_menu` | Renders a menu to change the active region |
-
-Usage example:
-
-```html_twig
-{% set currency_menu = knp_menu_get('ibexa_storefront.menu.currency') %}
-
-{{ knp_menu_render(currency_menu) }}
-```
-
-### Breadcrumbs menu
-
-To modify the items in the menu, you need to use an event subscriber.
-This subscriber replaces the URI under the `Home` link.
-
-Create an event subscriber in `src/EventSubscriber/BreadcrumbsMenuSubscriber.php`:
-
-``` php
-[[= include_code('code_samples/front/shop/storefront/src/EventSubscriber/BreadcrumbsMenuSubscriber.php') =]]
-```
-
-Next, create the `templates/themes/storefront/storefront/knp_menu/breadcrumbs.html.twig` template:
-
-```html+twig
-[[= include_file('code_samples/front/shop/storefront/templates/themes/storefront/storefront/knp_menu/breadcrumbs.html.twig') =]]
-```
-
-Next, extend the `templates/themes/storefront/storefront/product.html.twig` template to include the breadcrumbs:
-
-```html+twig hl_lines="6-12"
-[[= include_file('code_samples/front/shop/storefront/templates/themes/storefront/storefront/product.html.twig') =]]
-```
-
-### Taxonomy menu
-
-You can build a taxonomy menu for, for example, product categories or tags.
-
-See the usage example:
-
-```html+twig
-{% set categories_menu = knp_menu_get(
- 'ibexa_storefront.menu.taxonomy',
- [],
- {
- parent: category,
- depth: 3
- }
-) %}
-
-{{ knp_menu_render(categories_menu) }}
-```
-
-It takes the following parameters:
-
-| Name | Type | Default |
-|------------|----------|-----------------------------------------------|
-| `parent`| `\Ibexa\Contracts\Taxonomy\Value\TaxonomyEntry` | The root entry of the specified taxonomy. |
-| `depth` | `int` | Default: 1 |
-| `taxonomy_name` | `string` | product_categories |
-
-## Create menu items
-
-`\Ibexa\Contracts\Storefront\Menu\ItemFactoryInterface` provides convenient methods to build menu item based on repository objects, including:
-
-- Content
-- Content ID
-- Location
-- Location ID
-- Taxonomy Entry
-- Product
-
-## Generate custom product preview path
-
-By default, the `ProductRenderController` controller passes only the product object for rendering.
-You can modify the controller file to make it pass parameters to the [`path`]([[= symfony_doc =]]/reference/twig_reference.html#path) Twig helper function, which is used by the `product_card.html.twig` and `product_card.html.twig` [templates](customize_storefront_layout.md) to generate the user path.
-After you modify the controller, it can also pass the following parameters:
-
-- `route` - the route, under which product preview is available.
-- `parameters` - parameters to be used, for example, to render the view.
-- `is_relative` - Boolean that decides whether the URL is relative or absolute.
-
-Define your own logic in a custom controller.
-Refer to the code snippet below and create your own file, for example, `CustomProductRenderController.php`:
-
-``` php
-use Ibexa\Contracts\ProductCatalog\Values\ProductInterface;
-use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
-use Symfony\Component\HttpFoundation\Response;
-
-class CustomProductRenderController extends AbstractController
-{
- public function renderAction(ProductInterface $product): Response
- {
- return $this->render('@ibexadesign/storefront/product_card.html.twig', [
- 'content' => $product,
- 'route' => 'some.path',
- 'parameters' => ['some.parameter' => 123],
- 'is_relative' => true,
- ]);
- }
-}
-```
diff --git a/docs/commerce/storefront/storefront.md b/docs/commerce/storefront/storefront.md
deleted file mode 100644
index 4f7232a0f7d..00000000000
--- a/docs/commerce/storefront/storefront.md
+++ /dev/null
@@ -1,45 +0,0 @@
----
-description: Storefront covers actions related to the purchase process.
-edition: commerce
----
-
-# Storefront
-
-The Storefront package provides a starting kit for the developers.
-It's a set of components that serves as a basis, which developers can customize and extend to create their own implementation of a web store.
-
-## Default UI components
-
-The Storefront package contains the following default UI components and widgets.
-You can modify them when you build your own web store.
-
-| Component | Description |
-|------------|----------|
-|Cancel order|Allows logged-in users to cancel their orders in a pending status.|
-| Cart summary | Displays a subtotal net value of cart lines, a shipping cost disclaimer, a series of tax values applicable to products in cart, a composition of different taxes, and a total cart value (gross, shipping and taxes included). |
-| Checkout | Displays a series of screens that allow buyers to place an order for cart items. |
-| Currency menu | Enables selecting between currencies, to dynamically change the contents of the product listing page. |
-| Language menu | Enables selecting between languages, to change an active language. |
-| Login/register page | Provides user interface for the login/registration page that enables buyers to access the Product catalog.|
-| Main cart component | Main UI component of the cart. Displays a list of items selected for purchase and requested cart item quantities. Users can remove individual items. |
-| Mini cart widget | Consists of a counter that displays a total number of items added to a cart. |
-|Orders list|Displays a list of orders with such information as status, date, value, order ID. |
-| Product category page | Displays products that belong to a specific category. |
-| Product filters component | Allows for narrowing the list of products displayed in the listing by using different filters, such as product type, availability, and price. |
-| Product listing page | Allows for browsing through products, displays product name, code, price, and image. |
-| Region menu | Enables selecting between regions, to dynamically change the contents of the product listing page. |
-| Reorder |Allows logged-in users to repurchase previously bought items. |
-|Searching and filtering of orders| Allows logged-in users to search and filter their past orders on the orders page.|
-| Search for specific product component | Allows for searching for products, for example on the product listing page. |
-| Sort products component | Enables sorting products based on different criteria on a product listing page. |
-| Quick order |Enables buyer to provide or upload a list of products, with their quantities, intended for purchase.|
-
-To become familiar with a complete set of templates that covering all functionalities of a store, visit the `vendor/ibexa/storefront/src/bundle/Resources/views/themes/storefront` directory of your installation.
-
-!!! note "Customization and permissions"
-
- For more information about modifying the storefront components, whether by changing their appearance or modifying the underlying logic, see [Customize the storefront layout](../../templating/layout/customize_storefront_layout.md).
-
- For more information about overriding the default checkout component, see [Customize checkout](../checkout/customize_checkout.md).
-
- For information about roles and permissions that control access to various components of the purchase process, see [Permission use cases](permission_use_cases.md#commerce).
diff --git a/docs/commerce/transactional_emails/extend_transactional_emails.md b/docs/commerce/transactional_emails/extend_transactional_emails.md
deleted file mode 100644
index 014288ed1b3..00000000000
--- a/docs/commerce/transactional_emails/extend_transactional_emails.md
+++ /dev/null
@@ -1,164 +0,0 @@
----
-description: Customize transactional emails to meet your specific business requirements.
-edition: commerce
----
-
-# Customize transactional emails
-
-Customizing the transactional email feature allows for better alignment with your specific business requirements.
-
-## Configure workflows
-
-[[= product_name =]] uses workflows to define processes in various Commerce components.
-Predefined workflows exist for [order processing](../order_management/configure_order_management.md#default-order-processing-configuration), [payment](../payment/configure_payment.md#default-payment-workflow-configuration) and [shipment](../shipping_management/configure_shipment.md#default-shipment-workflow-configuration).
-You can customize those workflows to trigger pushing notifications at various places of these workflows, for example:
-
-``` yaml
-framework:
- workflows:
- ibexa_payment:
- # ...
- places:
- pending:
- metadata:
- # ...
- trigger_notification: true # true or false
-```
-
-## Define additional variables
-
-[[= product_name =]] comes with a predefined [set of variables](transactional_emails_parameters.md) that you can use when building a template for your transactional email campaign at Actito.
-If this list isn't sufficient, you can use Events to include additional variables:
-
-``` php
- 'onParametersFactoryEvent',
- ];
- }
-
- public function onParametersFactoryEvent(ParametersFactoryEvent $event): void
- {
- $event->addParameter(
- new SimpleParameter(
- 'newVariable',
- ['value'],
- ),
- );
-
- $event->addParameter(
- new SimpleParameter(
- 'anotherVariable',
- ['multiple', 'values'],
- ),
- );
- }
-}
-```
-
-## Customize Actito end-user profile
-
-The Actito platform offers many features for customer data collection, including segmentation, subscriptions, and interaction tracking.
-This information can be later user for generating statistics, establishing trends, or used to calculate recommendations.
-To use these features you need to provide profile data to API requests yourself.
-You do it by means of events that are triggered during profile building.
-
-For example, the `Ibexa\Contracts\ConnectorActito\Event\TransactionalMailRequest\ProfileFactoryEvent` event is triggered for every transactional notification, and it lets you set required data that is passed to Actito API:
-
-``` php
- 'onProfileFactoryEvent',
- ];
- }
-
- public function onProfileFactoryEvent(ProfileFactoryEvent $event): void
- {
- $recipient = $event->getRecipient();
- $profile = $event->getProfile();
- $user = $recipient->getUser();
-
- // Provide additional data if your profile has more attributes:
- $attributes = $profile->getAttributes();
- $attributes[] = new Attribute('name', $user->getName());
- $profile->setAttributes($attributes);
-
- // Passing segmentation data to the profile
- $segmentations = [
- new Segmentation(
- 'Frequent visitors',
- 'storefront_users',
- true,
- ),
- ];
- $profile->setSegmentations($segmentations);
-
- // Use the same mechanism to pass other profile data
- // $profile->setSubscriptions($subscriptions);
- // $profile->setDataCollection($dataCollection);
- }
-}
-```
-
-## Send emails in language of commerce presence
-
-Actito supports sending out emails in one language only per campaign.
-To send emails in different languages from one notification, for example, because your application serves end-users from different locales, for each notification and language pair, you must create a separate campaign.
-You could do it by adding a language suffix to a campaign name.
-
-On [[= product_name =]] side, to support this scenario, you must use an Event Subscriber on `Ibexa\Contracts\ConnectorActito\Event\ResolveCampaignEvent`:
-
-``` php
- 'onCampaignResolve',
- ];
- }
-
- public function onCampaignResolve(ResolveCampaignEvent $event): void
- {
- // you can use below data in your logic
- $resolvedCampaign = $event->getCampaign();
- $recipient = $event->getRecipient();
- $notification = $event->getNotification();
-
- // when new campaign was determined, set it to the event
- $campaign = new Campaign('new_order_created_12-2023_en-US');
- $event->setCampaign($campaign);
- }
-}
-```
diff --git a/docs/commerce/transactional_emails/transactional_emails.md b/docs/commerce/transactional_emails/transactional_emails.md
deleted file mode 100644
index 23df8abdca7..00000000000
--- a/docs/commerce/transactional_emails/transactional_emails.md
+++ /dev/null
@@ -1,104 +0,0 @@
----
-description: With transactional emails you can notify end users about changes in the status of user registration, password recovery, orders, payments, shipments, and more.
-edition: commerce
----
-
-# Transactional emails
-
-Transactional emails are messages that [[= product_name =]] can send through [Actito](https://actito.com/en) gateway to your end-users to notify them about changes in the status of various actions taken in relation to your commerce presence.
-
-By default, notifications are sent in relation to the following events, to an email address of the end-user who has originated these events:
-
-- Order processing:
- - order is created
- - order is processing
- - order is completed
- - order is cancelled
-- Payment:
- - payment failed
- - payment has been cancelled
-- Shipment:
- - order is shipped
-- User registration:
- - user has been registered
-- Password reset:
- - password reset request has been submitted
-
-You can [change the events](extend_transactional_emails.md#configure-workflows) that trigger sending a transactional email.
-
-## Configure transactional emails
-
-### Install package
-
-Transactional email support comes as an additional package that needs to be downloaded separately:
-
-```bash
-composer require ibexa/connector-actito
-```
-
-Symfony Flex installs and activates the package.
-
-### Configure Actito integration
-
-Before you can start configuring the notifier engine to process and dispatch notifications to be forwarded as transactional emails, you must first obtain and configure an [Actito license](https://actito.com/en/pricing/).
-
-Once you gain access to the Actito dashboard:
-
-1\. Configure the API to make calls with the GET method.
-
-2\. Get the [API key](https://cdn3.actito.com/fe/actito-documentation/docs/Managing_API_users/) and entity name.
-
-3\. Set these values in the YAML configuration files, under the `ibexa.system.default.connector_actito` key:
-
-``` yaml
-ibexa:
- system:
- default:
- connector_actito:
- api_key: 12ea56789o1ea56789012ea56789o12e
- entity:
-```
-
-4\. Define profile table in Actito database for storing notification attributes.
-
-!!! note
-
- By default, a trigger message coming from [[= product_name =]] contains the following attributes with information about the end-user: name, surname, and email.
-
- Those attributes can then be used to present statistics in the Actito dashboard.
- If this set of attributes is insufficient for your needs, you can [add more attributes to the trigger message](extend_transactional_emails.md#customize-actito-end-user-profile).
-
-### Create email campaigns
-
-Create campaigns of transactional email type, one for each notification type that you want to deliver.
-When you build a campaign template, make sure that you use the variables supported by [[= product_name =]].
-For a complete list of parameters, see [Transactional email variables reference](transactional_emails_parameters.md).
-
-!!! tip
-
- When you invent names for your campaigns, keep them simple, and don't use special characters or spaces.
-
-Campaign emails can be sent in one language only.
-To send emails in different languages, for example, because your application serves end-users from different locales, for each notification and language pair, you must create a separate campaign and [extend the solution to support that](extend_transactional_emails.md#send-emails-in-language-of-commerce-presence).
-
-### Configure mapping
-
-After you create and configure campaigns in Actito user interface, one for each type of notifications coming from [[= product_name =]], in YAML configuration files, under the `ibexa.system.default.connector_actito.campaign_mapping` key, you define mappings between notifications and email campaigns, for example:
-
-``` yaml
-campaign_mapping:
- Ibexa\Contracts\Payment\Notification\PaymentWorkflowStateChange:
- campaign:
-
- Ibexa\Contracts\OrderManagement\Notification\OrderWorkflowStateChange:
- campaign:
-
- Ibexa\Contracts\Shipping\Notification\ShipmentWorkflowStateChange:
- campaign:
-
- Ibexa\Contracts\User\Notification\UserPasswordReset:
- campaign:
-
- Ibexa\Contracts\User\Notification\UserRegister:
- campaign:
-```
diff --git a/docs/commerce/transactional_emails/transactional_emails_parameters.md b/docs/commerce/transactional_emails/transactional_emails_parameters.md
deleted file mode 100644
index e76f85f9535..00000000000
--- a/docs/commerce/transactional_emails/transactional_emails_parameters.md
+++ /dev/null
@@ -1,65 +0,0 @@
----
-description: You use transactional email variables when building an Actito campaign template.
-edition: commerce
----
-
-# Transactional email variables reference
-
-The following variables are provided with an installation of [[= product_name_base =]].
-You can use them when you create a template within an Actito transactional email campaign.
-If this extensive list of variables isn't sufficient, you can [extend it to include additional variables](extend_transactional_emails.md#define-additional-variables).
-
-|Category|Variable|Description|Example values|Notes|
-|:----|:----|:----|:----|:----|
-|Order processing|orderId|Order numerical ID|123| |
-| |orderIdentifier|Order identifier|660575f7-aa75-47af-b4d3-db2693f7e37c| |
-| |orderCurrency|Currency code|EUR| |
-| |orderSource|Order source|storefront| |
-| |orderValueNet|Total value (net)|€700,00| |
-| |orderValueGross|Total value (gross)|€749,50| |
-| |orderValueVat|Vat value|€49,50| |
-| |shippingAddressCountry|Country code|US| |
-| |shippingAddressRegion|Region|California| |
-| |shippingAddressLocality|City|Los Angeles| |
-| |shippingAddressStreet|Street|10250 Santa Monica Blvd| |
-| |shippingAddressPostalCode|Postal code|90067| |
-| |shippingAddressFirstName|Addressee's first name|John| |
-| |shippingAddressLastName|Addressee's last name|Doe| |
-| |shippingAddressEmail|E-mail address|user@example.com| |
-| |shippingAddressPhoneNumber|Phone number|123456789| |
-| |billingAddressCountry|Country code|US| |
-| |billingAddressTaxId|Tax Identification Number i.e. VAT|12345678| |
-| |billingAddressRegion|Region|California| |
-| |billingAddressLocality|City|Los Angeles| |
-| |billingAddressStreet|Street|10250 Santa Monica Blvd| |
-| |billingAddressPostalCode|Postal code|90067| |
-| |billingAddressFirstName|Payer's first name|John| |
-| |billingAddressLastName|Payer's last name|Doe| |
-| |billingAddressEmail|E-mail address|user@example.com| |
-| |billingAddressPhoneNumber|Phone number|123456789| |
-|Payment|paymentMethodIdentifier|Technical identifier of payment method| | |
-| |paymentMethodName|Human readable name of payment method| | |
-| |paymentMethodDescription|Human readable description of payment method|Prepaid cards and gift cards (offline version)| |
-| |paymentMethodTypeName|Human readable name of payment method type|Offline| |
-| |paymentStatus|Technical identifier of payment status|pending, failed|Only available in PaymentStatusChange notification|
-|Shipment|shippingMethodIdentifier|Technical identifier of shipping method| | |
-| |shippingMethodName|Human readable name of shipping method| | |
-| |shippingMethodDescription|Human readable description of shipping method| | |
-| |shippingMethodTypeName|Technical name of shipping method type| | |
-| |shipmentStatus|Technical identifier of shipment status| |Only available in ShipmentStatusChange notification|
-|Product information|products.id|Product numerical ID|123| |
-| |products.code|Product code (SKU)|123456| |
-| |products.name|Product name|iPhone 15 Pro 256GB Space Gray| |
-| |products.url|Product view URL|https://example.com/product/iphone-15-pro-256gb-space-gray/| |
-| |products.thumbnail|Product thumbnail URL|https://example.com/assets/images/iphone-15-pro-256gb-space-gray.jpg| |
-| |products.quantity|Quantity|5| |
-| |products.unitPriceNet|Unit price (net)|€700,00| |
-| |products.unitPriceGross|Unit Price (gross)|€749,50| |
-| |products.subtotalPriceNet|Subtotal price (net), quantity * unit price (net)|€2700,00| |
-| |products.subtotalPriceGross|Subtotal price (gross), quantity * unit price (gross)|€2749,50| |
-|User information|userId|Numerical ID|255| |
-| |userLogin|User login|john.doe| |
-| |userEmail|User e-mail address|john.doe@example.com| |
-| |userName|User name|John Doe| |
-|Password reset|token|Token used to reset password|5bcc871f1a966db58c06187369813447| |
-| |passwordResetUrl|Absolute URL to reset password|http://example.com/user/reset-password/5bcc871f1a966db58c06187369813447| |
diff --git a/docs/content_management/collaborative_editing/collaborative_editing.md b/docs/content_management/collaborative_editing/collaborative_editing.md
index ccf5388ec1a..c5f32e889c3 100644
--- a/docs/content_management/collaborative_editing/collaborative_editing.md
+++ b/docs/content_management/collaborative_editing/collaborative_editing.md
@@ -30,7 +30,6 @@ This feature also introduces new dashboard tabs for managing shared drafts and j
"content_management/collaborative_editing/collaborative_editing_api",
"api/event_reference/collaboration_events",
("https://doc.ibexa.co/en/6.0/api/rest_api/rest_api_reference/rest_api_reference.html#tag/Collaboration-Sessions", "REST API Reference", "See the available endpoints for Collaborative editing"),
-"content_management/collaborative_editing/extend_collaborative_editing",
"search/collaboration_search_reference/collaboration_criteria",
"search/collaboration_search_reference/collaboration_sort_clauses",
], columns=4) =]]
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 065d9656e11..00000000000
--- a/docs/content_management/collaborative_editing/extend_collaborative_editing.md
+++ /dev/null
@@ -1,322 +0,0 @@
----
-description: Extend Collaborative editing
-month_change: false
----
-
-# Extend Collaborative editing
-
-Thanks to the ability to extend the [Collaborative editing](collaborative_editing_guide.md) feature, you can introduce additional functionalities to enhance workflows not only in the context of content editing but also when working with products.
-The example below demonstrates how to extend the feature to enable a shared Cart functionality in the Commerce system.
-
-!!! tip
-
- If you prefer learning from videos, watch the Ibexa Summit 2025 presentation that covers the Collaborative editing feature:
-
- [_Collaboration: greater than the sum of the parts_](https://www.youtube.com/watch?v=dRB-SDlgX0I) by Marek Nocoń
-
-## Create tables to hold Cart session data
-
-First, set up the database layer and define the collaboration context, in this example, Cart.
-Create the necessary tables to store the data and to link the collaboration session with the Cart you want to share.
-
-In the `data/schema.sql` file, create a database table to store a reference to the session context.
-In this example, the context is a shopping Cart, identified by `cart_identifier` and linked to the collaboration session through the Cart’s numeric ID stored in the database.
-
-=== "MySQL"
-
- ``` sql
- [[= include_file('code_samples/collaboration/ibexa_collaboration_cart.mysql.sql', 0, None, ' ') =]]
- ```
-
-=== "PostgreSQL"
-
- ``` sql
- [[= include_file('code_samples/collaboration/ibexa_collaboration_cart.postgresql.sql', 0, None, ' ') =]]
- ```
-
-## Set up persistence layer
-
-Now you need to prepare the persistence layer, which is responsible for storing, retrieving, and managing collaboration session and Cart data in the database.
-
-It ensures that when a user creates, joins, or updates a Cart session, the system can track session status, participants, and permissions.
-
-### Implement persistence gateway
-
-The Gateway is the layer that connects the collaboration feature to the database.
-It handles all the create, read, update, and delete operations for collaboration sessions, ensuring that session data is stored and retrieved correctly.
-
-It also uses a Discriminator to specify the session type.
-Based on the type, the Gateway interacts with the appropriate tables and data structures.
-This way, the system uses the correct Gateway to get or save data for each session type.
-
-When creating the Database Gateways and mappers, you can use the built-in service tag:
-
-- `ibexa.collaboration.persistence.session.gateway` - for the database gateway:
-
- ```yaml
- tags:
- - { name: 'ibexa.collaboration.persistence.session.gateway', discriminator: 'my_session_type' }
- ```
-
-- `ibexa.collaboration.persistence.session.mapper` - for the mapper that creates a session from a persistence raw row:
-
- ```yaml
- tags:
- - { name: 'ibexa.collaboration.persistence.session.mapper', discriminator: 'my_session_type' }
- ```
-
-- `ibexa.collaboration.service.session.domain.mapper` - for the mapper that creates a session from a persistence object:
-
- ```yaml
- tags:
- - { name: 'ibexa.collaboration.service.session.domain.mapper', type: App\…\MyPersistentSession }
- ```
-
-- `ibexa.collaboration.service.session.persistence.mapper` - for the mapper that converts a session into a structure used to create or update persistence:
-
- ```yaml
- tags:
- - { name: 'ibexa.collaboration.service.session.persistence.mapper', type: 'my_session_type' }
- ```
-
-In the `src/Collaboration/Cart/Persistence/Gateway/` directory, create the following files:
-
-- `DatabaseSchema` - defines the database tables needed to store shared Cart collaboration session data:
-
-``` php
-[[= include_code('code_samples/collaboration/src/Collaboration/Cart/Persistence/Gateway/DatabaseSchema.php') =]]
-```
-
-- `DatabaseGateway` - implements the gateway logic for getting and retrieving shared Cart collaboration data from the database. It uses a Discriminator to identify the type of session (in this case, a Cart session):
-
-``` php
-[[= include_code('code_samples/collaboration/src/Collaboration/Cart/Persistence/Gateway/DatabaseGateway.php') =]]
-```
-
-### Define persistence Value objects
-
-Value objects describe how collaboration session data is represented in the database.
-Persistence gateway uses them to store, retrieve, and manipulate session information, such as the session ID, associated Cart, participants, and scopes.
-
-``` yaml
-[[= include_file('code_samples/collaboration/config/services.yaml', 33, 38) =]]
-```
-
-In the `src/Collaboration/Cart/Persistence/Values/` directory, create the following Value Objects:
-
-- `CartSession` - represents the Cart collaboration session data:
-
-``` php
-[[= include_code('code_samples/collaboration/src/Collaboration/Cart/Persistence/Values/CartSession.php') =]]
-```
-
-- `CartSessionCreateStruct` - defines the data needed to create a new Cart collaboration session:
-
-``` php
-[[= include_code('code_samples/collaboration/src/Collaboration/Cart/Persistence/Values/CartSessionCreateStruct.php') =]]
-```
-
-- `CartSessionUpdateStruct` - defines the data used to update an existing Cart collaboration session:
-
-``` php
-[[= include_code('code_samples/collaboration/src/Collaboration/Cart/Persistence/Values/CartSessionUpdateStruct.php') =]]
-```
-
-### Create Cart session Struct objects
-
-The next step is to integrate the Public API with the database so that it can store and retrieve data from the tables created earlier.
-You need to create new files to define the data that is passed into the public API.
-This data is then used by the [`SessionService`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Collaboration-SessionServiceInterface.html) and public API handlers.
-
-In the `src/Collaboration/Cart/` directory, create the following Session Structs:
-
-- `CartSessionCreateStruct` - holds all necessary properties (like session token, participants, scopes, and the Cart reference) needed by the `SessionService` to create the shared Cart session:
-
-``` php
-[[= include_code('code_samples/collaboration/src/Collaboration/Cart/CartSessionCreateStruct.php') =]]
-```
-
-- `CartSessionUpdateStruct` - defines the properties used to update an existing Cart collaboration session, including participants, scopes, and metadata:
-
-``` php
-[[= include_code('code_samples/collaboration/src/Collaboration/Cart/CartSessionUpdateStruct.php') =]]
-```
-
-- `CartSession` - represents a Cart collaboration session, storing its ID, token, associated Cart, participants, and scope:
-
-``` php
-[[= include_code('code_samples/collaboration/src/Collaboration/Cart/CartSession.php') =]]
-```
-
-- `CartSessionType` - defines the type of the collaboration session (in this case it indicates it’s a Cart session):
-
-``` php
-[[= include_code('code_samples/collaboration/src/Collaboration/Cart/CartSessionType.php') =]]
-```
-
-## Create mappers
-
-Mappers convert session data into the format required by the database and pass it to the repository.
-
-In the `src/Collaboration/Cart/Mapper/` directory, create following mappers:
-
-- `CartProxyMapper` - creates a simplified version of the Cart with only the necessary data to reduce memory usage in collaboration sessions:
-
-``` php
-[[= include_code('code_samples/collaboration/src/Collaboration/Cart/Mapper/CartProxyMapper.php') =]]
-```
-
-- `CartProxyMapperInterface` - defines how a Cart should be converted into a simplified object that is used in collaboration session and specifies what methods the mapper must implement:
-
-``` php
-[[= include_code('code_samples/collaboration/src/Collaboration/Cart/Mapper/CartProxyMapperInterface.php') =]]
-```
-
-- `CartSessionDomainMapper` - builds the session object from persistence object:
-
-``` php
-[[= include_code('code_samples/collaboration/src/Collaboration/Cart/Mapper/CartSessionDomainMapper.php') =]]
-```
-
-- `CartSessionPersistenceMapper` - prepares session data to be saved or updated in the database:
-
-``` php
-[[= include_code('code_samples/collaboration/src/Collaboration/Cart/Mapper/CartSessionPersistenceMapper.php') =]]
-```
-
-Then, in the `src/Collaboration/Cart/Persistence/` directory, create the following mapper:
-
-- `Persistence/Mapper` - builds the session object from persistence row:
-
-``` php
-[[= include_code('code_samples/collaboration/src/Collaboration/Cart/Persistence/Mapper.php') =]]
-```
-
-In `services.yaml`, declare and tags the gateway and the mappers:
-
-``` yaml
-services:
- # …
-[[= include_file('code_samples/collaboration/config/services.yaml', 21, 42) =]]
-```
-
-## Allow participants to access Cart
-
-To enable collaboration, you must configure the appropriate permissions.
-This involves decorating the `PermissionResolver` and `CartResolver`.
-
-This ensures that when a Cart is part of a Cart collaboration session, users can access it based on the defined permissions.
-In all other cases, the system falls back to the default implementation.
-
-!!! caution "Decorating permissions"
-
- When decorating permissions, be careful to change the behavior only as necessary, to ensure that the Cart is shared only with the intended users.
-
-In the `src/Collaboration/Cart/` directory, create the following files:
-
-- `PermissionResolverDecorator` – customizes the permission resolver to handle access rules for Cart collaboration sessions. It allows participants to view or edit shared Carts while preserving default permission checks for all other cases. Here you can decide what scope is available for this collaboration session by choosing between `view` or `edit`:
-
-``` php
-[[= include_code('code_samples/collaboration/src/Collaboration/Cart/PermissionResolverDecorator.php') =]]
-```
-
-- `CartResolverDecorator` – resolves the shared Carts in collaboration sessions by checking if a Cart belongs to a collaboration session:
-
-``` php
-[[= include_code('code_samples/collaboration/src/Collaboration/Cart/CartResolverDecorator.php') =]]
-```
-
-In `services.yaml`, declare those decorator services associated with what they decorate:
-
-``` yaml
-services:
- # …
-[[= include_file('code_samples/collaboration/config/services.yaml', 43) =]]
-```
-
-## Build dedicated controllers to manage Cart sharing flow
-
-To support Cart sharing, create controllers which handle the collaboration flow.
-They are responsible for starting a sharing session, adding participants, and allowing users to join an existing shared Cart.
-
-You need to create two controllers:
-
-- `ShareCartCreateController` - creates the Cart collaboration session and adds participants
-- `ShareCartJoinController` - allows to join the session
-
-### `ShareCartCreateController`
-
-This controller handles the request when you enter an email address of the user that you want to invite and submit it.
-It captures the email address and checks whether the form has been submitted.
-If yes, the form data is retrieved, and the `cartResolver` verifies whether there is currently a shared Cart.
-
-If a shared Cart exists, the Cart is retrieved and a session is created (`$cart` becomes the session context).
-In the `addParticipant` step, the user whose email address was provided is added to the session and assigned a scope (either `view` or `edit`).
-
-``` php
-[[= include_code('code_samples/collaboration/src/Controller/ShareCartCreateController.php') =]]
-```
-
-### `ShareCartJoinController`
-
-It enables joining a Cart session.
-The session token created earlier is passed in the URL, and in the `join` action, the system attempts to retrieve the session associated with that token.
-If the token is invalid, an exception is thrown to indicate that the session cannot be accessed.
-If the session exists, the session parameter (`collaboration_session`) is retrieved and the session stores the token.
-Finally, `redirectToRoute` redirects the user to the Cart view and passes the identifier of the shared Cart.
-
-``` php
-[[= include_code('code_samples/collaboration/src/Controller/ShareCartJoinController.php') =]]
-```
-
-!!! caution "Session parameter"
-
- Avoid using a generic session parameter name such as `collaboration_session` (it's used here only for example purposes).
- The user can participate in multiple sessions simultaneously (of one or many types), so using such name would cause the parameter to be constantly overwritten.
- Therefore, active sessions should not be resolved based on such parameter.
-
-## Integrate with Symfony forms by adding forms and templates
-
-To support inviting users to a shared Cart, you need to create a dedicated form and a data class.
-The form collects the email address of the user that you want to invite, and the data class is used to safely pass that information from the form to the controller.
-
-- `ShareCartType` - a simple form for entering an email address of the user you want to invite to share the Cart. The form contains a single input field where you enter the email address manually:
-
-``` php
-[[= include_code('code_samples/collaboration/src/Form/Type/ShareCartType.php') =]]
-```
-
-- `ShareCartData` - a class that holds the email address submitted through the form and passes it to the controller:
-
-``` php
-[[= include_code('code_samples/collaboration/src/Form/Data/ShareCartData.php') =]]
-```
-
-The last step is to integrate the new session type into your application by adding templates.
-In this step, the view is rendered.
-
-You need to add the following Twig templates in the `src/templates/themes/storefront/cart/` directory:
-
-- `share` - defines the view for the Cart sharing form. It renders the form where a user can enter an email address to invite someone to collaborate on the Cart:
-
-``` php
-[[= include_file('code_samples/collaboration/templates/themes/storefront/cart/share.html.twig') =]]
-```
-
-
-
-- `share_result` - renders the result page after a Cart has been shared. If the shared Cart exists in the system, the created session object is passed to the view and displayed. A message like "Cart has been shared…" is displayed, along with a link to access the session:
-
-``` php
-[[= include_file('code_samples/collaboration/templates/themes/storefront/cart/share_result.html.twig') =]]
-```
-
-
-
-- `view` - shows the Cart page. It displays the Cart content and includes the “Share Cart” button:
-
-``` php
-[[= include_file('code_samples/collaboration/templates/themes/storefront/cart/view.html.twig') =]]
-```
-
-
diff --git a/docs/content_management/data_migration/importing_data.md b/docs/content_management/data_migration/importing_data.md
index 995701b8af9..6f2f0bfb65c 100644
--- a/docs/content_management/data_migration/importing_data.md
+++ b/docs/content_management/data_migration/importing_data.md
@@ -56,13 +56,10 @@ The following data migration step modes are available:
| `content` | ✔ | ✔ | ✔ | | |
| `currency` | ✔ | ✔ | ✔ | | |
| `customer_group` | ✔ | ✔ | ✔ | | |
-| `discount` | ✔ | ✔ | | | |
-| `discount_code` | ✔ | | | | |
| `language` | ✔ | ✔ | | | |
| `location` | | ✔ | | ✔ | ✔ |
| `object_state` | ✔ | | | | |
| `object_state_group` | ✔ | | | | |
-| `payment_method` | ✔ | | | | |
| `product_asset` | ✔ | | | | |
| `product_availability` | ✔ | | | | |
| `product_price` | ✔ | | | | |
@@ -72,7 +69,6 @@ The following data migration step modes are available:
| `segment` | ✔ | ✔ | ✔ | | |
| `segment_group` | ✔ | ✔ | ✔ | | |
| `setting` | ✔ | ✔ | ✔ | | |
-| `shipping_method` | ✔ | | | | |
| `user` | ✔ | ✔ | | | |
| `user_group` | ✔ | ✔ | ✔ | | |
@@ -584,25 +580,7 @@ The following example shows how to create a currency:
[[= include_file('code_samples/data_migration/examples/create_currency.yaml') =]]
```
-### Commerce [[% include 'snippets/commerce_badge.md' %]]
-
-#### Payment methods
-
-The following example shows how to create a payment method:
-
-``` yaml
-[[= include_file('code_samples/data_migration/examples/create_payment_method.yaml') =]]
-```
-
-#### Shipping methods
-
-The following example shows how to create a shipping method:
-
-``` yaml
-[[= include_file('code_samples/data_migration/examples/create_shipping_method.yaml') =]]
-```
-
-### Segments [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
+### Segments [[% include 'snippets/experience_badge.md' %]]
The following example shows how to create a segment group and add segments in it:
@@ -671,31 +649,6 @@ When updating a content type, use:
[[= include_file('code_samples/data_migration/examples/ai/action_configuration_delete.yaml') =]]
```
-### Discounts
-
-The following example shows how you can create a new [discount](discounts_guide.md) in your system:
-
-``` yaml
-[[= include_file('code_samples/data_migration/examples/discounts/discount_create.yaml') =]]
-```
-
-Use the `update` mode to modify an existing discount as in the example below.
-The provided conditions overwrite any already existing ones.
-
-``` yaml
-[[= include_file('code_samples/data_migration/examples/discounts/discount_update.yaml') =]]
-```
-
-For a list of available conditions, see [Discounts API](discounts_api.md#conditions).
-
-### Discount codes
-
-You can create a discount code as in the following example:
-
-``` yaml
-[[= include_file('code_samples/data_migration/examples/discounts/discount_code_create.yaml') =]]
-```
-
## Criteria
When using `update` or `delete` modes, you can use criteria to identify the objects to operate on.
diff --git a/docs/content_management/images/add_image_asset_from_dam.md b/docs/content_management/images/add_image_asset_from_dam.md
index b8a8271fe27..570e53e0492 100644
--- a/docs/content_management/images/add_image_asset_from_dam.md
+++ b/docs/content_management/images/add_image_asset_from_dam.md
@@ -25,7 +25,7 @@ You can use the provided example DAM connector for [Unsplash](https://unsplash.c
To add the Unsplash connector to your system, add the `ibexa/connector-unsplash` bundle to your installation.
-## Add Image Asset in Page Builder [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
+## Add Image Asset in Page Builder [[% include 'snippets/experience_badge.md' %]]
To add Image Assets directly in the Page Builder, you can do it by using the Embed block.
The example below shows how to add images from [Unsplash](https://unsplash.com/).
diff --git a/docs/content_management/locations.md b/docs/content_management/locations.md
index 06aba8b18a0..585fb7a4fe3 100644
--- a/docs/content_management/locations.md
+++ b/docs/content_management/locations.md
@@ -73,7 +73,7 @@ which can be viewed by selecting the **Users** tab in the **Admin** Panel.
The default ID number of the **Users** location is 5.
It contains user group content items.
-### Forms [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
+### Forms [[% include 'snippets/experience_badge.md' %]]
**Forms** is the top level location that is intended for Forms created using the [Form Builder]([[= user_doc =]]/content_management/work_with_forms/#create-forms).
diff --git a/docs/content_management/pages/page_builder_guide.md b/docs/content_management/pages/page_builder_guide.md
index c788655ffc6..97e62c442ee 100644
--- a/docs/content_management/pages/page_builder_guide.md
+++ b/docs/content_management/pages/page_builder_guide.md
@@ -221,8 +221,4 @@ B. **PIM** blocks:
- Product collection - displays a list of specifically selected products.
- Product embed - displays a specific product.
-C. **Commerce** blocks:
-
-- Orders - displays a list of orders associated with a particular company or individual customer.
-
-D. [**Recommendations** blocks](recommendation_blocks.md) - presents content recommendations delivered by Raptor integration.
+C. [**Recommendations** blocks](recommendation_blocks.md) - presents content recommendations delivered by Raptor integration.
diff --git a/docs/css/pills.css b/docs/css/pills.css
index e8286967eec..11650e1c044 100644
--- a/docs/css/pills.css
+++ b/docs/css/pills.css
@@ -21,13 +21,6 @@
.pill--experience::after {
content: "Experience";
}
-.pill--commerce {
- color: #A32768;
- border-color: #A32768;
-}
-.pill--commerce::after {
- content: "Commerce";
-}
.pill--lts-update {
color: #5DA7C0;
border-color: #5DA7C0;
diff --git a/docs/customer_management/customer_portal_guide.md b/docs/customer_management/customer_portal_guide.md
index b81e830a90d..5fdb5470ee0 100644
--- a/docs/customer_management/customer_portal_guide.md
+++ b/docs/customer_management/customer_portal_guide.md
@@ -15,7 +15,7 @@ With this feature, your customers can self-register, edit their organization inf
## Availability
-Customer Portal is available in [[= product_name_exp =]]. It's also compatible with Product catalog, Commerce and [[= product_name_connect =]].
+Customer Portal is available in [[= product_name_exp =]]. It's also compatible with Product catalog and [[= product_name_connect =]].
## How does Customer Portal work?
diff --git a/docs/discounts/configure_discounts.md b/docs/discounts/configure_discounts.md
deleted file mode 100644
index 449cebfb605..00000000000
--- a/docs/discounts/configure_discounts.md
+++ /dev/null
@@ -1,87 +0,0 @@
----
-description: Customize the behavior of the Discounts feature.
-month_change: false
-editions:
- - commerce
----
-
-# Customize Discounts
-
-You can customize the behavior of the Discounts feature by using the following [configuration](configuration.md):
-
-## Back Office pagination
-
-Use the built-in SiteAccess-aware parameters to change the default pagination settings.
-
-The following parameters are available:
-
-- `list_per_page_limit` controls the number of discounts displayed on a single page in discount list view
-- `products_list_per_page_limit` controls the number of products displayed on a single page in a discount details view
-
-You can set them as in the following example:
-
-``` yaml
-ibexa:
- system:
- admin_group:
- discounts:
- pagination:
- list_per_page_limit: 10
- products_list_per_page_limit: 15
-```
-
-## Discount re-indexing
-
-Discounts feature uses [[= product_name_base =]] Messenger to reindex discounts and product prices as [background tasks](background_tasks.md).
-This way changes are processed efficiently without slowing down the system and disrupting the user experience.
-
-When triggered periodically, the `ibexa:discounts:reindex` command identifies discounts that require re-indexing, ensuring prices always remain up-to-date.
-If there are edits to discounts that should result in changed product catalog prices, messages are dispatched to the [[= product_name_base =]] Messenger's queue and consumed by a background worker.
-The worker passes the messages to the handler, which then starts the re-indexing process at the most convenient moment.
-
-To run discount re-indexing in the background:
-
-1\. Make sure that the transport layer is [defined properly](background_tasks.md#configure-package) in [[= product_name_base =]] Messenger configuration.
-
-2\. Make sure that the [worker starts](background_tasks.md#start-worker) together with the application to watch the transport bus:
-
-``` bash
-php bin/console messenger:consume ibexa.messenger.transport --bus=ibexa.messenger.bus
-```
-
-3\. Run the following command periodically, at least once a day:
-
-``` bash
-php bin/console ibexa:discounts:reindex
-```
-
-For more information about command scheduling, see [Additional scheduled tasks and advanced usage](install_cohesivo.md#additional-scheduled-tasks-and-advanced-usage).
-
-!!! note "Deploying Symfony Messenger"
-
- For more information about deploying the Messenger to production, see [Symfony documentation]([[= symfony_doc =]]/messenger.html#deploying-to-production).
-
-## Rate limiting
-
-To prevent malicious actors from trying all the possible discount code combinations using brute-force attacks, the [`/discounts_codes/{cartIdentifier}/apply` endpoint](/api/rest_api/rest_api_reference/rest_api_reference.html#discount-codes-apply-discount-to-cart) is rate limited using the [Rate Limiter Symfony component]([[= symfony_doc =]]/rate_limiter.html).
-
-You can adjust the default configuration by modifying the `config/packages/ibexa_discounts_codes.yaml` file created during installation process.
-
-The limiter uses the following pattern: `user_%d_ip_%s`, using Customer ID and Customer IP address to track usage of both logged-in and anonymous customers.
-To cover additional use cases, you can add your own logic by listening to the [`BeforeDiscountCodeApplyEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Event-BeforeDiscountCodeApplyEvent.html) event.
-
-## Checkout error-handling
-
-A discount can be valid when customer enters the cart, but later become invalid before the checkout process is completed.
-
-For example, this event could occur if the discount expired, was modified, disabled, or deleted before the customer completed the checkout process.
-
-To prevent customers from placing such orders, the Discounts feature comes with built-in error-handling.
-Once it detects that a discount that can no longer be used is applied to a product, it stops the checkout process and informs the customer.
-
-This error handling is provided by two event subscribers:
-
-- `Ibexa\Bundle\Checkout\EventSubscriber\DiscountsHaveChangedExceptionSubscriber`
-- `Ibexa\Bundle\DiscountsCodes\EventSubscriber\DiscountCodeUnusableExceptionSubscriber`
-
-You can disable this behavior by setting the `ibexa_checkout.error_handlers.enabled` container parameter to `false`, which allows you to provide your own solution for these cases.
diff --git a/docs/discounts/discounts.md b/docs/discounts/discounts.md
deleted file mode 100644
index 15614718866..00000000000
--- a/docs/discounts/discounts.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-description: Discounts help store managers reduce prices on products or product categories.
-page_type: landing_page
-editions:
- - commerce
-month_change: false
----
-
-# Discounts
-
-With the Discounts feature, store managers can reduce prices on specific products or categories for all or selected customers.
-After you install it, temporary or permanent discounts can be applied against items from the product catalog or cart.
-
-You can also extend the feature, for example, by creating custom pricing rules, application conditions, or changing discount priorities.
-
-## Getting Started
-
-[[= cards([
-"discounts/discounts_guide",
-"discounts/configure_discounts",
-("permissions/policies#discounts", "Policies", "Learn about the available Discounts policies"),
-("https://doc.ibexa.co/projects/userguide/en/5.0/commerce/discounts/work_with_discounts/", "Work with Discounts", "Create and edit discounts, toggle discount status."),
-], columns=2) =]]
-
-## Development
-
-[[= cards([
-"discounts/discounts_api",
-"discounts/extend_discounts",
-"discounts/extend_discounts_wizard",
-"api/event_reference/discounts_events",
-("https://doc.ibexa.co/en/5.0/api/rest_api/rest_api_reference/rest_api_reference.html#tag/Discounts", "REST API Reference", "See the available endpoints for Discounts"),
-"templating/twig_function_reference/discounts_twig_functions",
-"search/discounts_search_reference/discounts_criteria",
-"search/discounts_search_reference/discounts_sort_clauses",
-("content_management/data_migration/importing_data#discounts", "Importing Discounts", "Learn how to manage Discounts using data migrations"),
-], columns=4) =]]
diff --git a/docs/discounts/discounts_api.md b/docs/discounts/discounts_api.md
deleted file mode 100644
index 544391cc217..00000000000
--- a/docs/discounts/discounts_api.md
+++ /dev/null
@@ -1,185 +0,0 @@
----
-description: Discounts enable reducing prices on products or product categories based on a detailed logic resolution.
-month_change: false
-editions:
- - commerce
----
-
-# Discounts API
-
-## Manage discounts and discount codes
-
-By integrating with the [Discount feature](discounts_guide.md) you can automate the process of managing discounts, streamlining the whole process and automating business rules.
-
-For example, you can automatically create a discount when a customer places their 3rd order, encouraging them to make another purchase and increase their chances of becoming a loyal customer.
-
-You can manage discounts using [data migrations](importing_data.md#discounts), [REST API](/api/rest_api/rest_api_reference/rest_api_reference.html#discounts), or the PHP API by using the [`Ibexa\Contracts\Discounts\DiscountServiceInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountServiceInterface.html) service.
-
-The core concepts when working with discounts through the APIs are listed below.
-
-### Types
-
-When using the PHP API, the discount type defines where the discount can be applied.
-
-Discounts are applied in two places, listed in the [`DiscountType`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-DiscountType.html) class:
-
-- **Product catalog** - `catalog` discounts are activated when browsing the product catalog and do not require any action from the customer to be activated
-- **Cart** - `cart` discounts can activate when entering the [cart](cart.md), if the right conditions are met. They may also require entering a discount code to be activated
-
-Regardless of activation place, discounts always apply to products and reduce their base price.
-
-To define when a discount activates and how the price is reduced, use rules and conditions.
-They use the [Symfony Expression language]([[= symfony_doc=]]/expression_language.html) to express their logic.
-
-### Rules
-
-Discount rules define how to calculate the price reduction.
-The following discount rule types are available in the `\Ibexa\Discounts\Value\DiscountRule` namespace:
-
-| Rule type (identifier) | Description | Required expression value |
-|---|---|---|
-| `FixedAmount` (`fixed_amount`) | Deducts the specified amount, for example 10 EUR, from the base price | `discount_amount` |
-| `Percentage` (`percentage`) | Deducts the specified percentage, for example -10%, from the base price | `discount_percentage` |
-
-Only a single discount can be applied to a given product, and a discount can only have a single rule.
-
-When creating a rule, not with the user interface but an API, you must pass the required expression values for the rule to be valid:
-
-- using PHP, the values are passed through the constructor which converts them into an expression variable
-- using data migrations and the REST API, the values are specified using the `expressionValues` key
-
-See the following examples for data migrations and the REST API usage:
-
-- creating discounts with [data migrations](importing_data.md#discounts):
-
-``` yaml hl_lines="4-7"
-[[= include_file('code_samples/data_migration/examples/discounts/discount_create.yaml', 0, 2) =]]# ...
-[[= include_file('code_samples/data_migration/examples/discounts/discount_create.yaml', 18, 22) =]]
-```
-
-- parsing responses from the [REST API](https://doc.ibexa.co/en/4.6/api/rest_api/rest_api_reference/rest_api_reference.html#discounts):
-
-``` json hl_lines="16-21"
-[[= include_file('code_samples/discounts/REST/Discount.json', 0, 21) =]]
-[[= include_file('code_samples/discounts/REST/Discount.json', 44, 45) =]]
-```
-
-### Conditions
-
-With conditions you can narrow down the scenarios in which the discount applies. The following conditions are available in the `\Ibexa\Discounts\Value\DiscountCondition` and `\Ibexa\DiscountsCodes\Value\DiscountCondition` namespaces:
-
-| Condition (identifier) | Applies to | Description | Required expression values |
-|---|---|---|---|
-| `IsInCategory` (`is_in_category`) | Cart, Catalog | Checks if the product belongs to specified [product categories]([[= user_doc =]]/product_catalog/work_with_product_categories/) | `categories` |
-| `IsInCurrency` (`is_in_currency`) | Cart, Catalog | Checks if the product has price in the specified currency | `currency_code` |
-| `IsInRegions` (`is_in_regions`) | Cart, Catalog | Checks if the customer is making the purchase in one of the specified regions | `regions` |
-| `IsProductInArray` (`is_product_in_array`) | Cart, Catalog | Checks if the product belongs to the group of selected products | `product_codes` |
-| `IsUserInCustomerGroup` (`is_user_in_customer_group`) | Cart, Catalog | Check if the customer belongs to specified [customer groups](customer_groups.md) | `customer_groups` |
-| `IsProductInQuantityInCart` (`is_product_in_quantity_in_cart`) | Cart | Checks if the required minimum quantity of a given product is present in the cart | `quantity` |
-| `MinimumPurchaseAmount` (`minimum_purchase_amount`) | Cart | Checks if purchase amount in the cart exceeds the specified minimum | `minimum_purchase_amount` |
-| `IsValidDiscountCode` (`is_valid_discount_code`) | Cart | Checks if the correct discount code has been provided and how many times it was used by the customer | `discount_code`, `usage_count` |
-
-When multiple conditions are specified, all of them must be met.
-
-As with rules, when creating a condition through other means than the user interface, you must pass the required expression values for the condition to be valid:
-
-- using PHP, the values are passed through the constructor which converts them into an expression variable
-- using data migrations and the REST API, the values are specified using the `expressionValues` key
-
-See the following examples for data migrations and the REST API usage:
-
-- creating discounts with [data migrations](importing_data.md#discounts):
-
-``` yaml hl_lines="4-14"
-[[= include_file('code_samples/data_migration/examples/discounts/discount_create.yaml', 0, 2) =]]# ...
-[[= include_file('code_samples/data_migration/examples/discounts/discount_create.yaml', 22, 33) =]]
-```
-
-- parsing responses from the [REST API](https://doc.ibexa.co/en/4.6/api/rest_api/rest_api_reference/rest_api_reference.html#discounts):
-
-``` json hl_lines="16-23"
-[[= include_file('code_samples/discounts/REST/Discount.json', 0, 15) =]][[= include_file('code_samples/discounts/REST/Discount.json', 21, 29) =]]
-[[= include_file('code_samples/discounts/REST/Discount.json', 44, 45) =]]
-```
-
-### Priority
-
-You can set discount priority as a number between 1 and 10 to indicate which discount should have [higher priority](discounts_guide.md#discounts-priority) when choosing the one to apply.
-
-### Start and end date
-
-Discounts can be permanent, or valid only in a specified time frame.
-
-Every discount has a start date, which defaults to the date when the discount was created.
-The end date can be set to `null` to make the discount permanent.
-
-### Status
-
-You can disable a discount anytime to stop it from being active, even if the conditions enforced by start and end date are met.
-
-Only disabled discounts can be deleted.
-
-### Discount translations
-
-The discount has four properties that can be translated:
-
-| Property | Usage |
-|---|---|
-| Name | Internal information for store managers |
-| Description | Internal information for store managers |
-| Promotion label | Information displayed to customers |
-| Promotion description | Information displayed to customers |
-
-Use the [`DiscountTranslationStruct`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Struct-DiscountTranslationStruct.html) to provide translations for discounts.
-
-### Discount codes
-
-To activate a cart discount only after a proper discount code is provided, you need to:
-
-1. Create a discount code using the [`DiscountCodeServiceInterface::createDiscountCode()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-DiscountCodeServiceInterface.html#method_createDiscountCode) method
-1. Attach it to a discount by using the `IsValidDiscountCode` condition
-
-Set the [`usedLimit`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Value-Struct-DiscountCodeCreateStruct.html#method___construct) property to the number of times a single customer can use this code, or to `null` to make the usage unlimited.
-
-The [`DiscountCodeServiceInterface::registerUsage()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-DiscountCodeServiceInterface.html#method_registerUsage) method is used to track the number of times a discount code has been used.
-
-### Example API usage
-
-The example below contains a Command creating a cart discount. The discount:
-
-- has the highest possible [priority](#priority) value
-- [rule](#rules) deducts 10 EUR from the base price of the product
-- is [permanent](#start-and-end-date)
-- [depends](#conditions) on
- - being bought from Germany or France
- - 2 products
- - a `summer10` [discount code](#discount-codes) which can be used only 10 times, but a single customer can use the code multiple times
-
-``` php hl_lines="46-53 55-81 83"
-[[= include_code('code_samples/discounts/src/Command/ManageDiscountsCommand.php') =]]
-```
-
-Similarly, use the `deleteDiscount`, `deleteTranslation`, `disableDiscount`, `enableDiscount`, and `updateDiscount` methods from the [DiscountServiceInterface](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountServiceInterface.html) to manage the discounts. You can always attach additional logic to the Discounts API by listening to the [available events](discounts_events.md).
-
-## Search
-
-You can search for Discounts using the [`DiscountServiceInterface::findDiscounts()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountServiceInterface.html#method_findDiscounts) method.
-To learn more about the available search options, see Discounts' [Search Criteria](discounts_criteria.md) and [Sort Clauses](discounts_sort_clauses.md).
-
-For discount codes, you can query the database for discount code usage using [`DiscountCodeServiceInterface::findCodeUsages()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-DiscountCodeServiceInterface.html#method_findCodeUsages) and [`DiscountCodeUsageQuery`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Value-Query-DiscountCodeUsageQuery.html).
-
-## Retrieve applied discounts
-
-The applied discounts change final product pricing.
-To learn more about working with prices, see [Price API](price_api.md#prices).
-
-The example below shows how you can use:
-
-- [`ProductPriceServiceInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-ProductPriceServiceInterface.html) to query for base product prices
-- [`PriceResolverInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-PriceResolverInterface.html) to query for final product prices
-- [`PriceEnvelopeInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Price-PriceEnvelopeInterface.html) to retrieve applied discounts
-- [`OrderServiceInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-OrderManagement-OrderServiceInterface.html) to display discount details for [orders](order_management.md)
-
-``` php hl_lines="51-52 58-59 61-74 78-104"
-[[= include_code('code_samples/discounts/src/Command/OrderPriceCommand.php') =]]
-```
diff --git a/docs/discounts/discounts_guide.md b/docs/discounts/discounts_guide.md
deleted file mode 100644
index 0b9a7d26a91..00000000000
--- a/docs/discounts/discounts_guide.md
+++ /dev/null
@@ -1,173 +0,0 @@
----
-description: Discount enable reducing prices on products or product categories based on a detailed logic resolution.
-month_change: false
-editions:
- - commerce
----
-
-# Discounts product guide
-
-## What are discounts
-
-Just like brick-and-mortar shops, online stores use clever strategies to attract new customers, keep loyal ones, boost sales, highlight special products, and clear out inventory.
-
-One powerful technique that helps achieve these goals is offering discounts.
-Discounts allow online stores to temporarily or permanently reduce prices on specific products or categories, making deals more attractive to potential buyers.
-They can be used to encourage first-time purchases, reward loyal customers, promote new or slow-moving items, or drive sales during seasonal events.
-By displaying discounted prices clearly in the catalog or cart, businesses can create a sense of urgency, increase customer satisfaction, and ultimately boost revenue.
-
-[[= product_name =]] comes equipped with the Discounts feature that introduces a highly extensible solution for building price reductions.
-
-Store managers can create general discounts that apply for products from the product catalog or specific discounts that apply for products in the customer's shopping cart.
-They can choose how the discount is calculated and set conditions to decide when their discounts are applied.
-
-The conditions used to limit the applicability of a discount include, for example, rules that check whether:
-
-- the product belongs to a specific category
-- the customer belongs to a specific customer group
-- minimum purchase amount (total cart value) is met
-- minimum purchase quantity (per product) is met
-
-!!! note "Difference between discounts and price rules"
-
- Unlike flexible and highly configurable discounts, [prices applied to customer groups](prices.md#custom-pricing) cannot have time limits, only apply to specific customer groups, and do not offer flexibility to adjust prices at cart level.
-
-## Availability
-
-Discounts are available as part of the [[[= product_name_com =]]](../ibexa_products/ibexa_commerce.md) edition.
-
-## How it works
-
-The Discounts feature hooks into the price resolving logic of products, allowing you to modify it before it's displayed to the customers.
-
-### Core concepts
-
-#### Discounts
-
-Discounts are reductions in the price of a product, typically implemented as part of a marketing campaign.
-
-Discounts are applied in two places:
-
-- **Product catalog** - catalog discounts are activated when browsing the product catalog and do not require any action from the customer to be activated
-- **Cart** - cart discounts can activate when entering the [cart](cart.md), if the right conditions are met. They may also require entering a discount code to be activated
-
-A shopping cart can have multiple active discounts, but a specific product can only have a single discount applied to it at a time.
-
-#### Discounts priority
-
-When two or more discounts can be applied to a single product, the system evaluates the following properties to choose the right one:
-
-- discount code existence (discounts with discount codes have priority over the others)
-- discount activation place (cart discounts rank higher over catalog discounts)
-- discount priority (higher priority ranks higher)
-- discount creation date (newer discounts rank higher)
-
-The properties are evaluated in the order given above until a single discount is selected.
-
-#### Discount properties
-
-After choosing where the discount applies (catalog or cart), you can choose the discount type:
-
-- **Fixed amount** - where a specified amount of money, for example, 5 Euro, is deducted from the base price of the product
-- **Percentage** - where a specified percentage, for example, 10%, is used to calculate the deducted amount from the product's base price
-
-Discounts are translatable and you can limit them to specific [regions](product_catalog_guide.md#regions) or a single currency.
-They can be permanent or be active only in a specified time frame.
-Regardless of the specified dates, you can disable a discount at any time to prevent customers from using it.
-
-The discount data is split into two parts:
-
-- name and description add internal information for the store managers
-- promotion information add additional information displayed to the customers
-
-#### Target groups
-
-With discounts, you can target your entire customer base or only a subset of it belonging to specified [customer groups](customer_groups.md).
-
-#### Product selection
-
-All products, including [product variants](product_catalog_guide.md#product-variants), can be selected when creating a discount.
-You can also limit this choice to a subset of products:
-
-- belonging to selected [product categories](product_catalog_guide.md#product-categories)
-- hand-picked manually for special cases
-
-#### Conditions
-
-Use conditions to limit the applicability of a discount, for example by checking that:
-
-- the product belongs to a specific category
-- the customer belongs to a specific customer group
-
-before applying the discount.
-
-For **cart discounts**, you can specify additional conditions that must be met for the discount to apply.
-
-These conditions can include:
-
-- minimum purchase quantity (per product)
-- minimum purchase amount (total cart value)
-- special [discount codes](#discount-codes)
-
-See [the built-in list of conditions](discounts_api.md#conditions) and [creating custom conditions](extend_discounts.md#implement-custom-condition) for more information.
-
-##### Discount codes
-
-For **cart discounts**, you can specify an additional text value that needs to be entered in the cart for the discount to apply.
-
-The discount code usage can be limited globally, for example by making the discount valid only for the first 10 customers before it expires.
-You can also limit the usage per customer:
-
-- single use: every customer can use this code only once
-- limited use: every customer can use the code a specified number of times
-- unlimited
-
-### Discount re-indexing
-
-Discounts affect the prices shown in the product catalog.
-When a discount is created, updated, or expires, the product catalog must be re-indexed to ensure that the search results and product listings display correct prices.
-
-To prevent performance disruptions which could occur if re-indexing occurred immediately, [[= product_name =]] uses the [[= product_name_base =]] Messenger's [background queue](background_tasks.md) to process re-indexing tasks in the background.
-
-By [configuring the process](configure_discounts.md#discount-re-indexing), you ensure that re-indexing is performed at the most convenient time to maintain your application's overall stability.
-
-## Capabilities
-
-### Management
-
-Users with the appropriate permissions, governed by role-based policies, can control the lifecycle of discounts by creating, editing, and deleting them.
-Additionally, discount configurations can be enabled or disabled depending on the organization's needs.
-
-
-
-An intuitive discounts interface displays a list of all available discounts.
-Here, you can search for specific discounts and filter them by type, status, or more.
-By accessing the detailed view of individual discounts, you can quickly review all their parameters.
-
-### Extensibility
-
-Built-in discount types offer a good starting point, but the real power of the discounts lies in extensibility.
-Extending discounts opens up new possibilities for building promotional campaigns that help move stock and attach customers.
-
-For example, [[= product_name =]] could apply a special discount when a customer places their 1st, 3rd, or 100th order in the storefront.
-This encourages first-time purchases and drives long-term customer loyalty.
-
-## Use cases
-
-Out of the box, the [[= product_name_base =]] Discounts feature comes with multiple discount types that can be applied in the following use cases.
-
-### End of Season Sale
-
-Create a permanent discount for products manufactured last season to increase attention for them.
-
-### Temporary sales
-
-Create urgency by offering promoted sales that are active only in a specified time frame to attract new customers or increase conversation, for example during events like Black Week or Cyber Monday.
-
-### Reward loyal customers
-
-Make your newsletters readers or chosen customer groups feel special by providing them with a dedicated discount that applies only to them, either by manually selecting a target audience, or by using a discount code.
-
-### Reward large purchases
-
-Encourage larger purchases and increase the average order size by applying an automatic discount when the purchase amount or quantity exceeds specified threshold.
diff --git a/docs/discounts/extend_discounts.md b/docs/discounts/extend_discounts.md
deleted file mode 100644
index 36180af2229..00000000000
--- a/docs/discounts/extend_discounts.md
+++ /dev/null
@@ -1,231 +0,0 @@
----
-description: Extend Discounts by adding your own rules and conditions
-month_change: false
-edition: commerce
----
-
-# Extend Discounts
-
-By extending [Discounts](discounts_guide.md), you can increase flexibility and control over how promotions are applied to suit your unique business rules.
-Together with the existing [events](event_reference.md) and the [Discounts PHP API](discounts_api.md), extending discounts gives you the ability to cover additional use cases related to selling products.
-
-!!! tip
-
- If you prefer learning from videos, two presentations from Ibexa Summit 2025 cover the Discounts feature:
-
- - [_Introduction to the Discounts system in Ibexa DXP_](https://www.youtube.com/watch?v=kTgtxY38srw) by Konrad Oboza
- - [_Extending new Discounts to suit your needs_](https://www.youtube.com/watch?v=pDJxEKJLwPs) by Paweł Niedzielski
-
-## Create custom conditions and rules
-
-With custom [conditions](discounts_api.md#conditions) and [rules](discounts_api.md#rules) you can create more advanced discounts that apply only in specific scenarios.
-
-For both of them, you need to specify their logic with [Symfony's expression language]([[= symfony_doc =]]/expression_language.html).
-
-### Available expressions
-
-You can use the following built-in expressions (variables and functions) in your own custom conditions and rules.
-You can also [create your own](#custom-expressions).
-
-| Type | Name | Value | Available for |
-| --- | --- | --- | --- |
-| Function | `get_current_region()` | [Region object](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-RegionInterface.html) of the current siteaccess.| Conditions, rules |
-| Function | `is_in_category()` | `true/false`, depending if a product belongs to given [product categories](product_catalog_guide.md#product-categories).| Conditions, rules |
-| Function | `is_user_in_customer_group()` | `true/false`, depending if an user belongs to given [customer groups](customer_groups.md). | Conditions, rules |
-| Function | `calculate_purchase_amount()` | Purchase amount, calculated for all products in the cart before the discounts are applied.| Conditions, rules |
-| Function | `is_product_in_product_codes()` | Parameters: - [Product object](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-ProductInterface.html) - array of product codes Returns `true` if the product is part of the given list.| Conditions, rules |
-| Function | `is_valid_discount_code()` | Parameter: discount code (string). Returns `true` if the discount code is valid for current user.| Conditions, rules |
-| Variable | `cart` | [Cart object](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Cart-Value-CartInterface.html) associated with current context.| Conditions, rules |
-| Variable | `currency` | [Currency object](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-CurrencyInterface.html) of the current siteaccess. | Conditions, rules |
-| Variable | `customer_group` | [Customer group object](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-CustomerGroupInterface.html) associated with given price context or the current user.| Conditions, rules |
-| Variable | `product` | [Product object](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-ProductInterface.html)| Conditions, rules |
-| Variable | `amount` | Original price of the product | Rules |
-
-### Custom expressions
-
-You can create your own variables and functions to make creating the conditions easier.
-The examples below show how to add an additional variable and a function to the available ones:
-
-- New variable: `current_user_registration_date`
-
-It's a [`DateTime`](https://www.php.net/manual/en/class.datetime.php) object with the registration date of the currently logged-in user.
-
-To add it, create a class implementing the [`DiscountVariablesResolverInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountVariablesResolverInterface.html):
-
-``` php
-[[= include_code('code_samples/discounts/src/Discounts/ExpressionProvider/CurrentUserRegistrationDateResolver.php') =]]
-```
-
-And mark it as a service using the `ibexa.discounts.expression_language.variable_resolver` service tag:
-
-``` yaml
- App\Discounts\ExpressionProvider\CurrentUserRegistrationDateResolver:
- tags:
- - ibexa.discounts.expression_language.variable_resolver
-```
-
-- New function: `is_anniversary()`
-
-It's a function returning a boolean value indicating if today is the anniversary of the date passed as an argument.
-The function accepts an optional argument, `tolerance`, allowing you to extend the range of dates that are accepted as anniversaries.
-This implementation is simplified and does not cover the approach for accounts created on February 29 during leap years.
-
-``` php
-[[= include_code('code_samples/discounts/src/Discounts/ExpressionProvider/IsAnniversaryResolver.php') =]]
-```
-
-Mark it as a service using the `ibexa.discounts.expression_language.function` service tag and specify the function name in the service definition.
-
-``` yaml
- App\Discounts\ExpressionProvider\IsAnniversaryResolver:
- tags:
- - name: ibexa.discounts.expression_language.function
- function: is_anniversary
-```
-
-Two new expressions are now available for use in custom conditions and rules.
-
-When deciding whether to register a new custom variable or function, consider the following:
-
-- variables are always evaluated by the expression engine and the result is available for all the rules and conditions specified in the discount
-- functions are invoked only when the rule or condition using them is evaluated. If there are multiple conditions using them, they will be invoked multiple times
-
-For performance reasons, it's recommended to:
-
-- use variables only for lightweight calculations
-- use functions for resource-intensive calculations (for example, checking customer's order history)
-- implement caching (for example, in-memory) for function results to avoid redundant calculations when multiple discounts expressions might use the function
-- specify the most resource-intensive conditions as the last to evaluate. As all conditions must be met for the discount to apply, it's possible to skip evaluating them if the previous ones won't be met
-
-In a production implementation, you should consider refactoring the `current_user_registration_date` variable into a `get_current_user_registration_date` function to avoid always loading the current user object and improve performance.
-
-### Implement custom condition
-
-The following example creates a new discount condition.
-It allows you to offer a special discount for customers on the date when their account was created, making use of the expressions added above.
-
-Create the condition by creating a class implementing the [`DiscountConditionInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-DiscountConditionInterface.html):
-
-``` php hl_lines="29-32"
-[[= include_code('code_samples/discounts/src/Discounts/Condition/IsAccountAnniversary.php') =]]
-```
-
-This condition can be used in both catalog and cart discounts.
-To implement a cart-only discount, additionally implement the marker [`CartDiscountConditionInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-CartDiscountConditionInterface.html) interface.
-
-The `tolerance` option is made available for usage in the expression by passing it in the constructor.
-The `getExpression()` method contains the logic of the condition, expressed using the variables and functions available in the expression engine.
-The expression must evaluate to `true` or `false`, indicating whether the condition is met.
-
-The example uses three expressions:
-
-- the custom `is_anniversary()` function, returning a value indicating whether today is user's registration anniversary
-- the custom `current_user_registration_date` variable, holding the value of current user's registration date
-- the custom `tolerance` variable, holding the acceptable tolerance (in days) for the calculation
-
-For each custom condition class, you must create a dedicated condition factory, a class implementing the `\Ibexa\Discounts\Repository\DiscountCondition\DiscountConditionFactoryInterface` interface.
-
-This allows you to create conditions when working in the context of the Symfony service container.
-
-``` php
-[[= include_code('code_samples/discounts/src/Discounts/Condition/IsAccountAnniversaryConditionFactory.php') =]]
-```
-
-Mark it as a service using the `ibexa.discounts.condition.factory` service tag and specify the condition's identifier.
-
-``` yaml
- App\Discounts\Condition\IsAccountAnniversaryConditionFactory:
- tags:
- - name: ibexa.discounts.condition.factory
- discriminator: !php/const App\Discounts\Condition\IsAccountAnniversary::IDENTIFIER
-```
-
-You can now use the condition, for example by using the PHP API or data migrations:
-
-``` yaml hl_lines="16-19"
-[[= include_file('code_samples/data_migration/examples/discounts/discount_create.yaml', 0, 2) =]]# ...
-[[= include_file('code_samples/data_migration/examples/discounts/discount_create.yaml', 22, 33) =]]
- -
- identifier: is_account_anniversary
- expressionValues:
- tolerance: 5
-```
-
-To learn how to integrate it into the back office, see [Extend Discounts wizard](extend_discounts_wizard.md).
-
-### Implement custom rules
-
-The following example implements a [purchasing power parity](https://en.wikipedia.org/wiki/Purchasing_power_parity) discount, adjusting product's price in the cart based on buyer's region.
-You could use it, for example, in regions sharing the same currency and apply the rule only to them by using the [`IsInRegions` condition](discounts_api.md#conditions).
-
-To implement a custom rule, create a class implementing the [`DiscountRuleInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-DiscountRuleInterface.html).
-
-``` php hl_lines="35-38"
-[[= include_code('code_samples/discounts/src/Discounts/Rule/PurchasingPowerParityRule.php') =]]
-```
-
-The `getExpression()` method contains the logic of the rule, expressed using the variables and functions available in the expression engine.
-The expression must return the new price of the product.
-
-It uses three expressions:
-
-- the built-in `amount` variable, holding the purchase amount
-- the built-in `get_current_region()` function, returning the current region
-- a custom `power_parity_map` variable, holding the purchasing power parity map. It's defined in the constructor
-
-As with conditions, create a dedicated rule factory:
-
-``` php
-[[= include_code('code_samples/discounts/src/Discounts/Rule/PurchasingPowerParityRuleFactory.php') =]]
-```
-
-Then, mark it as a service using the `ibexa.discounts.rule.factory` service tag and specify the rule's type.
-
-``` yaml
- App\Discounts\Rule\PurchasingPowerParityRuleFactory:
- tags:
- - name: ibexa.discounts.rule.factory
- discriminator: !php/const App\Discounts\Rule\PurchasingPowerParityRule::TYPE
-```
-
-You can now use the rule with the PHP API, but to use it within the back office and storefront you need to:
-
-- [integrate it into the Discounts wizard](extend_discounts_wizard.md)
-- implement a new value formatter
-
-### Custom discount value formatting
-
-You can adjust how each discount type is displayed when using the [`ibexa_discounts_render_discount_badge` Twig function](discounts_twig_functions.md#ibexa_discounts_render_discount_badge) by implementing a custom formatter.
-
-You must implement a custom formatter for each custom rule.
-
-To do it, create a class implementing the [`DiscountValueFormatterInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountValueFormatterInterface.html) and use the `ibexa.discounts.value.formatter` service tag:
-
-``` php
-[[= include_code('code_samples/discounts/src/Discounts/Rule/PurchaseParityValueFormatter.php') =]]
-```
-
-``` yaml
- App\Discounts\Rule\PurchaseParityValueFormatter:
- tags:
- - name: ibexa.discounts.value.formatter
- rule_type: !php/const App\Discounts\Rule\PurchasingPowerParityRule::TYPE
-```
-
-## Change discount priority
-
-You can change the [the default discount priority](discounts_guide.md#discounts-priority) by creating a class implementing the [`DiscountPrioritizationStrategyInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountPrioritizationStrategyInterface.html) and aliasing to it the default implementation.
-
-The example below decorates the default implementation to prioritize recently updated discounts above all the others.
-It uses one of the existing [discount search criteria](discounts_criteria.md).
-
-``` php
-[[= include_code('code_samples/discounts/src/Discounts/RecentDiscountPrioritizationStrategy.php') =]]
-```
-
-``` yaml
- App\Discounts\RecentDiscountPrioritizationStrategy:
- decorates: Ibexa\Contracts\Discounts\DiscountPrioritizationStrategyInterface
- arguments:
- $inner: '@.inner'
-```
diff --git a/docs/discounts/extend_discounts_wizard.md b/docs/discounts/extend_discounts_wizard.md
deleted file mode 100644
index 7cfcb262a22..00000000000
--- a/docs/discounts/extend_discounts_wizard.md
+++ /dev/null
@@ -1,174 +0,0 @@
----
-description: Integrate custom rules and conditions into the back office forms.
-month_change: false
-edition: commerce
----
-
-# Extend Discounts wizard
-
-## Introduction
-
-For the store managers to use your [custom conditions and rules](extend_discounts.md#implement-custom-condition), you need to integrate them into the back office discounts creation form.
-
-This form is built using [Symfony Forms]([[= symfony_doc=]]/forms.html) and the [`DiscountFormMapperInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountFormMapperInterface.html) interface is at the core of the implementation.
-
-It provides a two-way mapping between the form structures (used to render the form) and the PHP API values used to create the discounts by offering methods related to:
-
-- form rendering
-- data structure mapping
-
-Form rendering methods return objects implementing the [`DiscountDataInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-Form-Data-DiscountDataInterface.html), allowing you to access and modify the form data.
-They include:
-
-- [`createFormData()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountFormMapperInterface.html#method_createFormData) renders the form before the discount is created
-- [`mapDiscountToFormData()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountFormMapperInterface.html#method_mapDiscountToFormData) renders the form when the discount already exists. It fills the discount edit form with the saved discount details
-
-The data mapping methods are responsible for transforming the form data into structures compatible with the [Discount's PHP API](discounts_api.md) services like [`DiscountServiceInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountServiceInterface.html) and [`DiscountCodeServiceInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-DiscountCodeServiceInterface.html).
-They include:
-
-- [`mapCreateDataToStruct()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountFormMapperInterface.html#method_mapCreateDataToStruct) creates the [`DiscountCreateStruct`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Struct-DiscountCreateStruct.html) object to create the discount
-- [`mapUpdateDataToStruct()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountFormMapperInterface.html#method_mapUpdateDataToStruct) creates the [`DiscountUpdateStruct`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Struct-DiscountUpdateStruct.html) object to update the discount
-- [`mapEditTranslateDataToStruct()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountFormMapperInterface.html#method_mapEditTranslateDataToStruct) creates the [`TranslationStruct`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Struct-DiscountTranslationStruct.html) objects for [translating the discounts](discounts_api.md#discount-translations)
-
-In the UI, the discounts wizard consists of several steps:
-
-- General properties
-- Target group
-- Products
-- Conditions (only for Cart discounts)
-- Discount value
-- Summary
-
-Each of these steps is represented by its own form mappers, data classes, and form types in the code.
-
-In addition, the main form mapper and the form mappers responsible for each step in the wizard dispatch events that you can use to add your custom logic.
-See [discount's form events](discounts_events.md#form-events) for a list of the available events.
-
-## Integrate custom conditions
-
-This example continues the [anniversary discount condition example](extend_discounts.md#implement-custom-condition), integrating the condition with the wizard by adding a dedicated step with condition options.
-The example limits the new step to cart discounts only.
-
-To add a custom step, create a value object representing the step.
-It contains the step identifier, properties for storing form data, and extends the [`AbstractDiscountStep`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-Form-Data-AbstractDiscountStep.html):
-
-``` php
-[[= include_code('code_samples/discounts/src/Discounts/Step/AnniversaryConditionStep.php') =]]
-```
-
-Then, create a new event listener listening to the [`CreateFormDataEvent` and `MapDiscountToFormDataEvent` events](discounts_events.md#form):
-
-``` php hl_lines="18-19 26-50"
-[[= include_code('code_samples/discounts/src/Discounts/Step/Step1/AnniversaryConditionStepEventSubscriber.php') =]]
-```
-
-Attaching the `addAnniversaryConditionStep()` method to both these events adds the custom step both in discount creation and edit forms.
-
-The method first verifies if the form renders the cart discount wizard, according to assumptions of this example.
-
-Then, it creates the `AnniversaryConditionStep` object.
-If the discount existed already and is being edited, the saved values are used to populate the form.
-
-Finally, the new step is added to the wizard using the `withStep()` method, using `45` as step priority.
-Each of the existing form steps has its own priority, allowing you to add your custom steps between them.
-
-| Step name | Priority |
-|---| ---|
-| General properties | 50|
-| Target group | -20 |
-| Products | -30 |
-| Conditions | -40 |
-| Discount value | -50 |
-| Summary | -1000 |
-
-The custom step is added between the "Conditions" and "Discount value" steps.
-
-To add form fields to it, create an event listener adding your fields and a custom form type:
-
-``` php
-[[= include_code('code_samples/discounts/src/Discounts/Step/AnniversaryConditionStepFormListener.php') =]]
-```
-
-``` php
-[[= include_code('code_samples/discounts/src/Form/Type/AnniversaryConditionStepType.php') =]]
-```
-
-The new form step, including its form fields, are now part of the discounts wizard.
-
-The last task is making sure that the form data is correctly saved by attaching it to the discounts API structs.
-
-Expand the previously created `AnniversaryConditionStepEventSubscriber` to listen to two additional events:
-
-- [`CreateDiscountCreateStructEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-CreateDiscountCreateStructEvent.html)
-- [`CreateDiscountUpdateStructEvent`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-CreateDiscountUpdateStructEvent.html)
-
-and add the `addStepDataToStruct()` method:
-
-``` php hl_lines="23-24 57-70"
-[[= include_code('code_samples/discounts/src/Discounts/Step/Step2/AnniversaryConditionStepEventSubscriber.php') =]]
-```
-
-When the form is submitted, this method extracts information whether the store manager enabled the anniversary discount in the form and adds the condition to make sure this data is properly saved.
-
-The custom condition is now integrated with the discounts wizard and can be used by store managers to attract new customers.
-
-## Integrate custom rules
-
-This example continues the [purchasing power parity rule example](extend_discounts.md#implement-custom-rules), integrating the rule with the wizard.
-
-First, create a new service implementing the `DiscountValueMapperInterface` interface, responsible for handling the new rule type:
-
-``` php hl_lines="59-60"
-[[= include_code('code_samples/discounts/src/Form/FormMapper/PurchasingPowerParityValueMapper.php') =]]
-```
-
-It uses an `PurchasingPowerParityValue` object to store the form data:
-
-``` php
-[[= include_code('code_samples/discounts/src/Form/Data/PurchasingPowerParityValue.php') =]]
-```
-
-This value mapper is used by a new form mapper, dedicated to the new rule type:
-
-``` php
-[[= include_code('code_samples/discounts/src/Form/FormMapper/PurchasingPowerParityFormMapper.php') =]]
-```
-
-Link them together when defining the services:
-
-``` yaml
- App\Form\FormMapper\PurchasingPowerParityValueMapper: ~
-
- App\Form\FormMapper\PurchasingPowerParityFormMapper:
- arguments:
- $discountValueMapper: '@App\Form\FormMapper\PurchasingPowerParityValueMapper'
-```
-
-The [`DiscountFormMapperInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountFormMapperInterface.html) acts as a registry, finding a form mapper dedicated for given rule type and delegating to the responsibility of building the form.
-
-As each rule type might have a different rule calculation logic, each rule must have a different "Discount value" step in the form.
-
-To create it, create a dedicated class implementing the [`DiscountValueFormTypeMapperInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-Form-DiscountValueFormTypeMapperInterface.html)
-
-``` php
-[[= include_code('code_samples/discounts/src/Form/FormMapper/PurchasingPowerParityDiscountValueFormTypeMapper.php') =]]
-```
-
-and add a dedicated value type class:
-
-``` php hl_lines="26-38 45-59 71"
-[[= include_code('code_samples/discounts/src/Form/Type/DiscountValue/PurchasingPowerParityValueType.php') =]]
-```
-
-In the example above, the discount value step is used to display a read-only field with regions the discount is limited to.
-The `$availableRegionHandler` callback function extracts the selected regions and modifies the form as needed, using the `FormEvents::PRE_SET_DATA` and `FormEvents::POST_SUBMIT` events.
-
-The last step consists of providing all the required translations.
-Specify them in `translations/ibexa_discount.en.yaml`:
-
-``` yaml
-ibexa.discount.type.purchasing_power_parity: Purchasing Power Parity
-discount.rule_type.purchasing_power_parity: Purchasing Power Parity
-```
-
-The custom rule is now integrated with the discounts wizard and can be used by store managers to offer new discounts.
diff --git a/docs/discounts/img/discount_list.png b/docs/discounts/img/discount_list.png
deleted file mode 100644
index 119abfa48f6..00000000000
Binary files a/docs/discounts/img/discount_list.png and /dev/null differ
diff --git a/docs/getting_started/getting_started.md b/docs/getting_started/getting_started.md
index 84eace2204c..d8a7971da76 100644
--- a/docs/getting_started/getting_started.md
+++ b/docs/getting_started/getting_started.md
@@ -8,7 +8,6 @@ page_type: landing_page
To get started working with [[= product_name =]], see how you can get an installation and what first steps to take to familiarize yourself with the platform.
[[= cards([
- "getting_started/requirements",
"getting_started/install_cohesivo",
"getting_started/first_steps",
], columns=3) =]]
diff --git a/docs/getting_started/install_cohesivo.md b/docs/getting_started/install_cohesivo.md
index d9a319d839b..a3ae0f50af7 100644
--- a/docs/getting_started/install_cohesivo.md
+++ b/docs/getting_started/install_cohesivo.md
@@ -29,8 +29,6 @@ Additional requirements:
For production, you need to [configure an HTTP server](#configure-an-http-server), Apache or nginx (Apache is used as an example below).
-Before getting started, make sure you review other [requirements](requirements.md) to see the systems that are supported and used for testing.
-
### Get Composer
Install a recent stable version of Composer, the PHP command line dependency manager.
@@ -127,12 +125,6 @@ To use Composer to instantly create a project in the current folder with all the
composer create-project ibexa/experience-skeleton .
```
-=== "[[= product_name_com =]]"
-
- ``` bash
- composer create-project ibexa/commerce-skeleton .
- ```
-
??? note "Using PHP versions other than 8.3"
If you aren't using PHP 8.3 but are using PHP 8.4, PHP 8.2, or any older version, use a different set of commands:
@@ -151,13 +143,6 @@ To use Composer to instantly create a project in the current folder with all the
composer update
```
- === "[[= product_name_com =]]"
-
- ``` bash
- composer create-project ibexa/commerce-skeleton --no-install .
- composer update
- ```
-
!!! tip "Authentication token"
If you added credentials to the `COMPOSER_AUTH` variable, at this point add this variable to `auth.json` (for example, by running `echo $COMPOSER_AUTH > auth.json`).
@@ -174,18 +159,6 @@ To use Composer to instantly create a project in the current folder with all the
composer create-project ibexa/experience-skeleton:[[= latest_tag_5_0 =]] .
```
-!!! note "[[= product_name_cloud =]]"
-
- If you're deploying your installation on [Upsun](https://fixed.docs.upsun.com/guides/ibexa/deploy.html), run the following commands:
-
- ``` bash
- composer require ibexa/cloud
- php bin/console ibexa:cloud:setup --upsun
- ```
-
- These commands add the necessary package and provide the required configuration for using Upsun.
- For more information, see [Install on Ibexa Cloud](install_on_ibexa_cloud.md).
-
#### Add project to version control
It's recommended to add your project to version control.
@@ -457,19 +430,11 @@ Here are some additional tasks that require scheduling:
- To use the [Link manager](url_management.md), schedule the URL validation command `ibexa:check-urls`.
- To control the [recent activity log size](recent_activity.md#log-retention), schedule the `ibexa:activity-log:truncate` command.
-- To re-index [discounts](discounts_guide.md#discount-re-indexing), schedule the `ibexa:discounts:reindex` command.
-
- !!! note
-
- You must first set up [[= product_name_base =]] Messenger.
- For more information, see [Discount re-indexing configuration](configure_discounts.md#discount-re-indexing).
-
The following example schedules these commands separately:
- `ibexa:cron:run` [every minute](https://crontab.guru/every-minute)
- `ibexa:check-urls` [every week](https://crontab.guru/weekly) on Sunday at midnight
- `ibexa:activity-log:truncate` [every hour](https://crontab.guru/every-hour) at minute 0
-- `ibexa:discounts:reindex` [every day](https://crontab.guru/every-day) at midnight
This shell script creates a temporary file with the job lines, then replaces the existing crontab for the web server user:
@@ -477,7 +442,6 @@ This shell script creates a temporary file with the job lines, then replaces the
echo '* * * * * cd ; php bin/console ibexa:cron:run --quiet --env=prod' > ibexa_cron.txt
echo '0 0 * * 0 cd ; php bin/console ibexa:check-urls --quiet --env=prod' >> ibexa_cron.txt
echo '0 * * * * cd ; php bin/console ibexa:activity-log:truncate --quiet --env=prod' >> ibexa_cron.txt
-echo '0 0 * * * cd ; php bin/console ibexa:discounts:reindex --quiet --env=prod' >> ibexa_cron.txt
crontab -u www-data ibexa_cron.txt
rm ibexa_cron.txt
```
@@ -504,10 +468,6 @@ services:
Ibexa\Bundle\ActivityLog\Command\TruncateLogCommand:
tags:
- { name: ibexa.cron.job, schedule: '0 * * * *', priority: -2 }
-
- Ibexa\Bundle\Discounts\Command\ReIndexDiscountProductCommand:
- tags:
- - { name: ibexa.cron.job, schedule: '0 0 * * *' }
```
The `ibexa.cron.job` tag accepts the following options:
@@ -550,11 +510,4 @@ services:
Enable Ibexa Messenger for background tasks.
Make sure that its [worker starts with the server](background_tasks.md#start-worker).
-A list of processes that use [[= product_name_base =]] Messenger includes at least these two:
-
-- [[[= product_name_cdp =]] data export](/raptor_cdp/raptor_cdp_activation/raptor_cdp_data_export.md#ibexa-messenger-support-for-large-batches-of-data)
-- [Discount re-indexing](configure_discounts.md#discount-re-indexing)
-
-## [[= product_name_cloud =]]
-
-If you want to host your application on [[= product_name_cloud =]], follow the [Ibexa Cloud](install_on_ibexa_cloud.md) procedure.
+Processes that use [[= product_name_base =]] Messenger include, for example, [[[= product_name_cdp =]] data export](/raptor_cdp/raptor_cdp_activation/raptor_cdp_data_export.md#ibexa-messenger-support-for-large-batches-of-data).
diff --git a/docs/getting_started/install_with_ddev.md b/docs/getting_started/install_with_ddev.md
index 95ff254877a..274ac3e6a4a 100644
--- a/docs/getting_started/install_with_ddev.md
+++ b/docs/getting_started/install_with_ddev.md
@@ -271,7 +271,7 @@ The following example shows the use of `.env.local` with database configuration:
- Modify step [5. Create [[= product_name =]] project](#5-create-project) to insert the database setting:
```bash
- ddev composer create-project ibexa/commerce-skeleton --no-install;
+ ddev composer create-project ibexa/experience-skeleton --no-install;
echo "DATABASE_URL=mysql://db:db@db:3306/db" >> .env.local;
ddev composer install;
```
@@ -467,12 +467,11 @@ If the local project needs to answer to real production domains (for example, to
As this feature modifies domain resolution, the real website may be unreachable until the `hosts` file is manually cleaned.
-### Cluster or [[= product_name_cloud =]]
+### Cluster
You can use DDEV to locally simulate a production cluster.
-- See [Clustering with DDEV](clustering_with_ddev.md) to add Elasticsearch, Solr, or Redis to your DDEV installation.
-- See [DDEV and Ibexa Cloud](ddev_and_ibexa_cloud.md) to locally run a [[= product_name =]] project by using DDEV.
+See [Clustering with DDEV](clustering_with_ddev.md) to add Elasticsearch, Solr, or Redis to your DDEV installation.
## Stop or remove the project
diff --git a/docs/getting_started/requirements.md b/docs/getting_started/requirements.md
deleted file mode 100644
index a52012002d7..00000000000
--- a/docs/getting_started/requirements.md
+++ /dev/null
@@ -1,399 +0,0 @@
----
-description: System, component and package requirements for running Cohesivo.
-month_change: false
----
-
-
-
-# Requirements
-
-This document covers all supported versions of the product.
-To review the requirements, select the specific version of [[= product_name =]] you're interested in.
-
-The following server requirements cover both running the software on-premise and on third-party PaaS providers.
-
-!!! note "[[= product_name_cloud =]]"
-
- For running on [[[= product_name_cloud =]]](https://www.ibexa.co/products/ibexa-cloud), where recommended configuration and support is provided out of the box, see separate [[[= product_name_cloud =]] section](#ibexa-cloud-requirements-and-setup) for further reading on its requirements.
-
-The minimal setup requires PHP, MySQL/MariaDB, Apache/Nginx, Node.js and `yarn`.
-For production setups it's recommended that you use Varnish/Fastly, Redis/Valkey, NFS/EFS/S3 and Solr/Elasticsearch in a [clustered setup](clustering.md).
-
-!!! caution "Recommended versions"
-
- Review all the recommended versions carefully.
- If you see a "+" next to the product version, it means that we recommend this version or higher within the same major release.
- For example, "1.18+" means any 1.x version higher or equal to 1.18, but not 2.x.
-
- Using the latest listed version of each product or component is recommended.
- Always use a version that receives security updates, either by the vendor themselves or by a trusted third party, such as the distribution vendor.
-
-## Operating system
-
-=== "[[= product_name =]] v5.0"
-
- |Name|Version|
- |---|---|
- |Debian 11 "Bullseye"|11.0-11.7+|
- |Ubuntu "Noble Numbat"| 24.04 |
- |RHEL / CentOS / CentOS Stream | 8.1-9.5+ |
-
- If you see a "+" next to the product version, it indicates a recommended version or higher within the same major release.
- For example, "1.18+" means any 1.x version equal to or higher than 1.18, but not 2.x.
-
-=== "[[= product_name =]] v4.6"
-
- |Name|Version|
- |---|---|
- |Debian 10 "Buster" |10.0-10.13+|
- |Debian 11 "Bullseye"|11.0-11.7+|
- |Ubuntu "Focal Fossa" | 20.04 |
- |Ubuntu "Jammy Jellyfish"| 22.04 |
- |Ubuntu "Noble Numbat"| 24.04 |
- |RHEL / CentOS / CentOS Stream | 8.1-9.5+ |
-
- If you see a "+" next to the product version, it indicates a recommended version or higher within the same major release.
- For example, "1.18+" means any 1.x version equal to or higher than 1.18, but not 2.x.
-
-## Web server
-
-=== "[[= product_name =]] v5.0"
-
- - Nginx 1.27+
- - Apache 2.4 (with required modules `mod_rewrite`, `mod_env` and recommended: `mod_setenvif`, `mod_expires`;
- event MPM is recommended, if you need to use prefork you also need the `mod_php` module)
-
- If you see a "+" next to the product version, it indicates a recommended version or higher within the same major release.
- For example, "1.18+" means any 1.x version equal to or higher than 1.18, but not 2.x.
-
-=== "[[= product_name =]] v4.6"
-
- - Nginx 1.18-1.25+
- - Apache 2.4 (with required modules `mod_rewrite`, `mod_env` and recommended: `mod_setenvif`, `mod_expires`;
- event MPM is recommended, if you need to use prefork you also need the `mod_php` module)
-
- If you see a "+" next to the product version, it indicates a recommended version or higher within the same major release.
- For example, "1.18+" means any 1.x version equal to or higher than 1.18, but not 2.x.
-
-## DBMS
-
-=== "[[= product_name =]] v5.0"
-
- - MariaDB 10.11+ or 11.4
- - MySQL 8.4
- - PostgreSQL 14 or 18
-
- If you see a "+" next to the product version, it indicates a recommended version or higher within the same major release.
- For example, "1.18+" means any 1.x version equal to or higher than 1.18, but not 2.x.
-
-=== "[[= product_name =]] v4.6"
-
- - MariaDB 10.3-10.11+ or 11.4
- - MySQL 8.0 or 8.4
- - PostgreSQL 14 or 18
-
- If you see a "+" next to the product version, it indicates a recommended version or higher within the same major release.
- For example, "1.18+" means any 1.x version equal to or higher than 1.18, but not 2.x.
-
-## PHP
-
-=== "[[= product_name =]] v5.0"
-
- - 8.4
- - 8.3
-
-=== "[[= product_name =]] v4.6"
-
- - 8.4
- - 8.3
- - 8.2
- - 8.1 (PHP 8.1 has reached its End of Life. Unless you have extended support from vendors like Debian or Zend, you should use PHP 8.2)
- - 8.0 (PHP 8.0 has reached its End of Life. Security fixes for several Symfony dependencies are not available. Unless you have extended support from vendors like Debian or Zend, you should use PHP 8.2)
- - 7.4 (PHP 7.4 has reached its End of Life. Security fixes for several Symfony dependencies are not available. Unless you have extended support from vendors like Debian or Zend, you should use PHP 8.2)
-
-### PHP extensions
-
-=== "[[= product_name =]] v5.0"
-
- - `php-cli`
- - `php-fpm`
- - `php-mysql` (`php-mysqlnd`) or `php-pgsql`
- - `php-xml`
- - `php-mbstring`
- - `php-process` (on RHEL/CentOS)
- - `php-intl`
- - `php-curl`
- - `php-pear` (optional, provides pecl)
- - `php-gd` or `php-imagick` (via pecl on RHEL/CentOS)
- - `php-sodium`
- - `php-bcmath`
-
-=== "[[= product_name =]] v4.6"
-
- - `php-cli`
- - `php-fpm`
- - `php-mysql` (`php-mysqlnd`) or `php-pgsql`
- - `php-xml`
- - `php-mbstring`
- - `php-json`
- - `php-process` (on RHEL/CentOS)
- - `php-intl`
- - `php-curl`
- - `php-pear` (optional, provides pecl)
- - `php-gd` or `php-imagick` (via pecl on RHEL/CentOS)
- - `php-sodium`
- - `php-bcmath`
-
-### Cluster PHP extensions
-
-=== "[[= product_name =]] v5.0"
-
- - `php-redis`
-
-=== "[[= product_name =]] v4.6"
-
- - `php-redis` or `php-memcached`
-
-## Search
-
-=== "[[= product_name =]] v5.0"
-
- |Name|Version|
- |---|---|
- |Solr|8.11.1+ or 9.8.1+|
- |Elasticsearch| 7.16.2+ or 8.19+ |
-
- If you see a "+" next to the product version, it indicates a recommended version or higher within the same major release.
- For example, "1.18+" means any 1.x version equal to or higher than 1.18, but not 2.x.
-
-=== "[[= product_name =]] v4.6"
-
- |Name|Version|
- |---|---|
- |Solr|7.7+, 8.11.1+ or 9.8.1+|
- |Elasticsearch| 7.16.2+ or 8.19+ |
-
- If you see a "+" next to the product version, it indicates a recommended version or higher within the same major release.
- For example, "1.18+" means any 1.x version equal to or higher than 1.18, but not 2.x.
-
-## Graphic Handler
-
-=== "[[= product_name =]] v5.0"
-
- - GraphicsMagick
- - ImageMagick
- - GD
-
- Optionally, if you intend to edit [PNG, SVG, GIF or WEBP files in the Image Editor](images.md#image-optimization), or use it with image variations:
-
- - JpegOptim
- - Optipng
- - Pngquant 2
- - SVGO 1
- - Gifsicle
- - cwebp
-
-=== "[[= product_name =]] v4.6"
-
- - GraphicsMagick
- - ImageMagick
- - GD
-
- Optionally if you intend to edit [PNG, SVG, GIF or WEBP files in the Image Editor](images.md#image-optimization), or use it with image variations:
-
- - JpegOptim
- - Optipng
- - Pngquant 2
- - SVGO 1
- - Gifsicle
- - cwebp
-
-## [Clustering](clustering.md)
-
-=== "[[= product_name =]] v5.0"
-
- - Linux NFS or S3/EFS (for IO, aka binary files stored in content repository, not supported with legacy)
- - Redis 7.2+, 8.4+, or Valkey 9.0+ (separate instances for session and cache, both using a `volatile-*` [eviction policy](https://redis.io/docs/latest/develop/reference/eviction/), session instance configured for persistence)
- - [Varnish](https://www.varnish.org/) 6.0LTS or 7.1 with [varnish-modules](https://github.com/varnish/varnish-modules/blob/master/README.md) or [Fastly](https://www.fastly.com/) using [the provided bundle](http_cache.md) (for HTTP Cache)
-
- If you see a "+" next to the product version, it indicates a recommended version or higher within the same major release.
- For example, "1.18+" means any 1.x version equal to or higher than 1.18, but not 2.x.
-
-=== "[[= product_name =]] v4.6"
-
- - Linux NFS or S3/EFS (for IO, aka binary files stored in content repository, not supported with legacy)
- - Redis 4.0+, 5.0+, 7.2+, 8.4+, or Valkey 9.0+ (separate instances for session and cache, both using a `volatile-*` [eviction policy](https://redis.io/docs/latest/develop/reference/eviction/), session instance configured for persistence), or [Memcached](https://memcached.org/) 1.5 or higher
- - [Varnish](https://www.varnish.org/) 6.0LTS or 7.1 with [varnish-modules](https://github.com/varnish/varnish-modules/blob/master/README.md) or [Fastly](https://www.fastly.com/) using [the provided bundle](http_cache.md) (for HTTP Cache)
-
- If you see a "+" next to the product version, it indicates a recommended version or higher within the same major release.
- For example, "1.18+" means any 1.x version equal to or higher than 1.18, but not 2.x.
-
-=== "[[= product_name =]] v3.3"
-
- - Linux NFS or S3/EFS (for IO, aka binary files stored in content repository, not supported with legacy)
- - Redis 4.0+ or 5.0+ (separate instances for session and cache, both using a `volatile-*` [eviction policy](https://redis.io/docs/latest/develop/reference/eviction/), session instance configured for persistence) or [Memcached](https://memcached.org/) 1.5 or higher
- - [Varnish](https://www.varnish.org/) 6.0LTS with [varnish-modules](https://github.com/varnish/varnish-modules/blob/master/README.md) or [Fastly](https://www.fastly.com/) using [the provided bundle](https://doc.ibexa.co/en/3.3/guide/cache/http_cache/) (for HTTP Cache)
-
- If you see a "+" next to the product version, it indicates a recommended version or higher within the same major release.
- For example, "1.18+" means any 1.x version equal to or higher than 1.18, but not 2.x.
-
-## Filesystem
-
-=== "[[= product_name =]] v5.0"
-
- - Linux ext4 / XFS
-
-=== "[[= product_name =]] v4.6"
-
- - Linux ext4 / XFS
-
-## Package manager
-
-=== "[[= product_name =]] v5.0"
-
- - Composer: 2.8+
-
- If you see a "+" next to the product version, it indicates a recommended version or higher within the same major release.
- For example, "1.18+" means any 1.x version equal to or higher than 1.18, but not 2.x.
-
-=== "[[= product_name =]] v4.6"
-
- - Composer: 2.7+
-
- If you see a "+" next to the product version, it indicates a recommended version or higher within the same major release.
- For example, "1.18+" means any 1.x version equal to or higher than 1.18, but not 2.x.
-
-## Asset manager
-
-=== "[[= product_name =]] v5.0"
-
- - `Node.js` 22+
- - `yarn` 1.15.2+
-
- If you see a "+" next to the product version, it indicates a recommended version or higher within the same major release.
- For example, "1.18+" means any 1.x version equal to or higher than 1.18, but not 2.x.
-
-=== "[[= product_name =]] v4.6"
-
- - `Node.js` 18+, 20+, 22+
- - `yarn` 1.15.2+
-
- If you see a "+" next to the product version, it indicates a recommended version or higher within the same major release.
- For example, "1.18+" means any 1.x version equal to or higher than 1.18, but not 2.x.
-
-## Browser
-
-=== "[[= product_name =]] v5.0"
-
- [[= product_name =]] is developed to work with *any* web browser that supports modern standards, on *any* screen resolution suitable for web, running on *any* device.
- However, for the Editorial and Administration User Interfaces, you need: a minimum of 1366-by-768 screen resolution, a desktop or tablet device, and a recommended/supported browser among the ones found below.
-
- - Mozilla® Firefox® most recent stable version (recommended)
- - Google Chrome™ most recent stable version (recommended)
- - Chromium™ based browsers such as Microsoft® Edge® and Opera®, most recent stable version, desktop *and* tablet
- - Apple® Safari® most recent stable version, desktop *and* tablet
-
-=== "[[= product_name =]] v4.6"
-
- [[= product_name =]] is developed to work with *any* web browser that supports modern standards, on *any* screen resolution suitable for web, running on *any* device.
- However for the Editorial and Administration User Interfaces you need: a minimum of 1366-by-768 screen resolution, a desktop or tablet device, and a recommended/supported browser among the ones found below.
-
- - Mozilla® Firefox® most recent stable version (recommended)
- - Google Chrome™ most recent stable version (recommended)
- - Chromium™ based browsers such as Microsoft® Edge® and Opera®, most recent stable version, desktop *and* tablet
- - Apple® Safari® most recent stable version, desktop *and* tablet
-
-## [[= product_name_cloud =]] requirements and setup
-
-=== "[[= product_name =]] v5.0"
-
- ### Cloud hosting with [[= product_name_cloud =]] and Upsun
-
- In general, [[= product_name_cloud =]] supports all features and services of [Upsun](https://fixed.docs.upsun.com/add-services.html#available-services) that are compatible and supported by the [[= product_name =]] version you use.
-
- For example:
-
- - Upsun provides Redis support for versions 7.2, 7.0, and 6.2. [[= product_name =]] supports Redis version 7.2.
- As a result, Redis is supported on [[= product_name_cloud =]] in versions 7.2.
-
- Features or services supported by [[= product_name =]] but not covered by Upsun may be possible by means of a [custom integration](#custom-integrations).
-
- ### [[= product_name_cloud =]] Setup support matrix
-
- All [[= product_name =]] features are supported in accordance with the example above.
-
- !!! note
-
- As Upsun doesn't support a configuration with multiple PostgreSQL databases, for [[= product_name_cloud =]] / Upsun it's impossible to have a DFS table in a separate database.
-
- ### Recommended [[= product_name_cloud =]] setup
-
- For more details on recommended setup configuration see bundled `.platform.app.yaml` and `.platform/` configuration files.
-
- These files are kept up-to-date with latest recommendations and can be improved through contributions.
-
- ### Supported [[= product_name_cloud =]] setup
-
- Because of the large range of possible configurations of [[= product_name =]], there are many possibilities beyond what is provided in the default recommended configuration.
-
- Make sure to set aside time and budget for:
-
- - Verifying your requirements and ensuring they're supported by Upsun
- - Additional time for adaptation and configuration work, and testing by your development team
- - Additional consulting/onboarding time with Upsun, Ibexa technical services, and/or one of the many partners with prior experience in using Upsun with [[= product_name =]]
-
- The cost and effort of this isn't included in [[= product_name_cloud =]] subscription and is vary depending on the project.
-
- ### Custom integrations
-
- Features supported by [[= product_name =]], but not natively by Upsun, can in many cases be used by means of custom integrations with external services.
-
- For example, you can create an integration with S3 by means of setting up your own S3 bucket and configuring the relevant parts of [[= product_name =]].
- We recommend giving the development team working on the project access to the bucket to ensure work is done in a DevOps way without depending on external teams when changes are needed.
-
-=== "[[= product_name =]] v4.6"
-
- ### Cloud hosting with [[= product_name_cloud =]] and Upsun
-
- In general, [[= product_name_cloud =]] supports all features and services of [Upsun](https://fixed.docs.upsun.com/add-services.html#available-services) that are compatible and supported by the [[= product_name =]] version you use.
-
- For example:
-
- - Upsun provides Redis support for versions 7.2, 7.0, and 6.2. [[= product_name =]] supports Redis in versions 4.0, 5.0, and 7.2.
- As a result, Redis is supported on [[= product_name_cloud =]] in version 7.2.
-
- Features or services supported by [[= product_name =]] but not covered by Upsun may be possible by means of a [custom integration](#custom-integrations).
-
- ### [[= product_name_cloud =]] Setup support matrix
-
- All [[= product_name =]] features are supported in accordance with the example above.
- For example: As Legacy Bridge isn't supported with v3, it's not supported on [[= product_name_cloud =]] either.
-
- !!! note
-
- As Upsun doesn't support a configuration with multiple PostgreSQL databases, for [[= product_name_cloud =]] / Upsun it's impossible to have a DFS table in a separate database.
-
- ### Recommended [[= product_name_cloud =]] setup
-
- For more details on recommended setup configuration see bundled `.platform.app.yaml` and `.platform/` configuration files.
-
- These files are kept up-to-date with latest recommendations and can be improved through contributions.
-
- ### Supported [[= product_name_cloud =]] setup
-
- Because of the large range of possible configurations of [[= product_name =]], there are many possibilities beyond what is provided in the default recommended configuration.
-
- Make sure to set aside time and budget for:
-
- - Verifying your requirements and ensuring they're supported by Upsun
- - Additional time for adaptation and configuration work, and testing by your development team
- - Additional consulting/onboarding time with Upsun, Ibexa technical services, and/or one of the many partners with prior experience in using Upsun with [[= product_name =]]
-
- The cost and effort of this isn't included in [[= product_name_cloud =]] subscription and is vary depending on the project.
-
- ### Custom integrations
-
- Features supported by [[= product_name =]], but not natively by Upsun, can in many cases be used by means of custom integrations with external services.
-
- For example, you can create an integration with S3 by means of setting up your own S3 bucket and configuring the relevant parts of [[= product_name =]].
- We recommend giving the development team working on the project access to the bucket to ensure work is done in a DevOps way without depending on external teams when changes are needed.
diff --git a/docs/ibexa_cloud/ddev_and_ibexa_cloud.md b/docs/ibexa_cloud/ddev_and_ibexa_cloud.md
deleted file mode 100644
index 22907cd08a6..00000000000
--- a/docs/ibexa_cloud/ddev_and_ibexa_cloud.md
+++ /dev/null
@@ -1,111 +0,0 @@
----
-description: Use DDEV to run an Ibexa Cloud project locally.
-month_change: false
----
-
-# DDEV and Ibexa Cloud
-
-Two ways are available to run an [[= product_name_cloud =]] project locally with DDEV:
-
-- [by using the `ddev-upsun` and `ddev-ibexa-cloud` add-ons](#with-ibexa-cloud-add-ons)
-- [like other existing project, without these add-ons](#without-ibexa-cloud-add-ons).
-
-!!! note
-
- The following examples use [[[= product_name_cloud =]] CLI (`ibexa_cloud`)](https://cli.ibexa.cloud/).
- For more information and examples, see [[[= product_name_cloud =]] CLI](ibexa_cloud_cli.md).
-
-## With Ibexa Cloud add-ons
-
-To configure [`ddev/ddev-upsun` add-on](https://github.com/ddev/ddev-upsun) and [`ddev/ddev-ibexa-cloud` add-on](https://github.com/ddev/ddev-ibexa-cloud), you need a [Upsun API Token](https://fixed.docs.upsun.com/administration/cli/api-tokens.html).
-
-The `ddev/ddev-upsun` add-on configures the document root, the PHP version, the database, and the cache pool according to the [[= product_name_cloud =]] configuration.
-About the search engine, the add-on can configure Elasticsearch but can't configure Solr.
-If you use Solr on [[= product_name_cloud =]] and want to add it to your DDEV stack, see [Clustering with DDEV and `ibexa/ddev-solr` add-on](clustering_with_ddev.md#solr).
-
-The `ddev/ddev-ibexa-cloud` add-on integrates the `ibexa_cloud` command inside the container,
-and eases the pull of cloud contents into the local installation.
-
-`env:COMPOSER_AUTH` from Upsun can't be used, because JSON commas are incorrectly interpreted by `--web-environment-add`, which sees them as multiple variable separators.
-But the variable must exist for Upsun `hooks` scripts to work.
-To use an `auth.json` file for this purpose, see [Using `auth.json`](install_with_ddev.md#using-authjson).
-
-The following sequence of commands:
-
-1. Downloads the [[= product_name_cloud =]] project from the default environment "production"
- into a new directory (for example `my-ddev-project`), using the [`ibexa_cloud` command](https://cli.ibexa.cloud/).
- (Replace `` with the hash of your own project.
-See [`ibexa_cloud help get`](https://fixed.docs.upsun.com/administration/cli.html#3-use) for options like selecting another environment).
-1. Configures a new DDEV project.
-1. Configures the `ddev/ddev-ibexa-cloud` add-on with ``, environment name (for example, `production`),
- and application name (for example, `app` from `name: app` line in `.platform.app.yaml` file).
-1. Configures `ibexa_cloud` command token. See [Create an API token](https://fixed.docs.upsun.com/administration/cli/api-tokens.html#2-create-an-api-token) for more information.
-1. Ignores `.ddev/` directory from Git.
- (Some DDEV config could be committed like in [this documentation](https://docs.ddev.com/en/stable/users/extend/customization-extendibility/#extending-configyaml-with-custom-configyaml-files).)
-1. Sets Composer authentication by using an already existing `auth.json` file.
-1. Installs the `ddev/ddev-upsun` add-on which prompts for the Upsun API token, project ID and environment name.
-1. Changes `maxmemory-policy` from default `allkeys-lfu` to a [value accepted by the `RedisTagAwareAdapter`](https://github.com/symfony/cache/blob/5.4/Adapter/RedisTagAwareAdapter.php#L95).
- (Check `.ddev/config.upsun.yaml` and adapt if needed. For example, you may have to comment out New Relic.)
-1. Installs the `ddev/ddev-ibexa-cloud` add-on.
-1. Starts the project.
-1. Gets the content from [[= product_name_cloud =]], both database and binary files by using `ddev pull ibexa-cloud` feature from the add-on.
-1. Displays information about the project services.
-1. Opens the project in a browser.
-
-```bash
-ibexa_cloud project:get my-ddev-project && cd my-ddev-project
-ddev config --project-type=php --php-version 8.3 --web-environment-add COMPOSER_AUTH='',DATABASE_URL=mysql://db:db@db:3306/db
-ddev config --web-environment-add IBEXA_PROJECT=,IBEXA_ENVIRONMENT=production,IBEXA_APP=app
-ddev config --web-environment-add IBEXA_CLI_TOKEN=
-echo '.ddev/' >> .gitignore
-mkdir -p .ddev/homeadditions/.composer && cp /auth.json .ddev/homeadditions/.composer
-ddev add-on get ddev/ddev-upsun
-sed -i 's/maxmemory-policy allkeys-lfu/maxmemory-policy volatile-lfu/' .ddev/redis/redis.conf
-ddev add-on get ddev/ddev-ibexa-cloud
-ddev start
-ddev pull ibexa-cloud -y
-ddev describe
-ddev launch
-```
-
-!!! note
-
- The Upsun API token is set at user profile level, therefore it's stored globally under current user root as `PLATFORMSH_CLI_TOKEN` in `~/.ddev/global_config.yaml`.
-
-## Without Ibexa Cloud add-ons
-
-The following example adapts the [manual method to run an already existing project](install_with_ddev.md#run-an-already-existing-project) to the Upsun case:
-
-The following sequence of commands:
-
-1. Downloads the [[= product_name_cloud =]] Upsun project from the default environment "production" into a new directory, using the [[[= product_name_cloud =]] CLI](https://cli.ibexa.cloud/).
-(Replace `` with the hash of your own project. See [`ibexa_cloud help get`](https://fixed.docs.upsun.com/administration/cli.html#3-use) for options like selecting another environment).
-1. Configures a new DDEV project.
-1. Ignores `.ddev/` directory from Git.
-(Some DDEV config could be committed like in [this documentation](https://docs.ddev.com/en/stable/users/extend/customization-extendibility/#extending-configyaml-with-custom-configyaml-files).)
-1. Starts the DDEV project.
-1. Sets Composer authentication.
-1. [Gets the database content from Upsun](https://fixed.docs.upsun.com/add-services/mysql.html#exporting-data).
-1. [Imports this database content into DDEV project's database](https://docs.ddev.com/en/stable/users/usage/database-management/#database-imports).
-1. [Downloads the Upsun public/var locally](https://fixed.docs.upsun.com/development/file-transfer.html#transfer-a-file-from-a-mount) to have the content binary files.
-1. Install the dependencies and run post-install scripts.
-1. Displays information about the project services.
-1. Opens the DDEV project in a browser.
-
-```bash
-ibexa_cloud project:get my-ddev-project && cd my-ddev-project
-ddev config --project-type=php --php-version 8.3 --docroot=public --web-environment-add DATABASE_URL=mysql://db:db@db:3306/db
-echo '.ddev/' >> .gitignore
-ddev start
-ddev composer config --global http-basic.updates.ibexa.co
-ibexa_cloud db:dump --gzip --file=production.sql.gz
-ddev import-db --file=production.sql.gz && rm production.sql.gz
-ibexa_cloud mount:download --mount public/var --target public/var
-ddev composer install
-ddev describe
-ddev launch
-```
-
-From there, services can be added to get closer to [[= product_name_cloud =]] architecture.
-`.platform/services.yaml` indicates the services used.
-For more information, see [Clustering with DDEV](clustering_with_ddev.md).
diff --git a/docs/ibexa_cloud/environment_variables.md b/docs/ibexa_cloud/environment_variables.md
deleted file mode 100644
index a49e1ca93a0..00000000000
--- a/docs/ibexa_cloud/environment_variables.md
+++ /dev/null
@@ -1,144 +0,0 @@
----
-description: Automatically generated environment variables based on Ibexa Cloud relationships and routes.
----
-
-# Environment variables on Ibexa Cloud
-
-[[= product_name_cloud =]] automatically generates environment variables based on the configuration of relationships and routes in Upsun.
-It parses `PLATFORM_RELATIONSHIPS` and `PLATFORM_ROUTES` environment variables and exposes them as application-specific variables.
-
-Environment variable prefixes are created by converting relationship names to uppercase and replacing hyphens with underscores.
-
-When multiple endpoints are defined for a single relationship, numerical indices are used for all entries except the first one, for example: `SOLR`, `SOLR_1`, `SOLR_2`.
-When multiple services of the same type are present, environment variables are exposed for each service accordingly based on their relationship names.
-
-!!! caution "Environment variables in configuration files"
-
- To prevent Symfony container initialization failures, you must define placeholder values for [[= product_name_cloud =]] environment variables in your `.env` file when referencing them in configuration files.
-
- Do it only for the variables that are required for the Symfony container to build.
-
- For example, if your `doctrine.yaml` uses a [database variable](#database-variables) created for a relationship named `pgsql`:
-
- ``` yaml
- doctrine:
- dbal:
- url: '%env(resolve:PGSQL_URL)%'
- ```
-
- You must define a placeholder value in `.env`:
-
- ``` env
- PGSQL_URL="placeholder"
- ```
-
- The actual value of the environment variable is provided by [[= product_name_cloud =]] at runtime.
- The placeholder in `.env` is only required to prevent Symfony container compilation errors during build.
-
-## Relationship naming conventions
-
-You can choose relationship names freely in `.platform.app.yaml` for most services.
-
-The only required names are:
-
-- `dfs_database` - DFS database (required for DFS functionality)
-- `redissession` or `valkeysession` - Redis/Valkey for sessions (required for dedicated session storage)
-
-Common relationship name include:
-
-- `database` - main application database
-- `rediscache` - Redis for cache
-- `elasticsearch` - Elasticsearch search service
-- `solr` - Solr search service
-
-## Database variables
-
-For MySQL and PostgreSQL databases, the following variables are generated based on the relationship name (for example, `database`):
-
-- `{RELATIONSHIP_NAME}_URL` - full database URL with charset and server version
-- `{RELATIONSHIP_NAME}_USER` / `{RELATIONSHIP_NAME}_USERNAME` - database user
-- `{RELATIONSHIP_NAME}_PASSWORD` - database password
-- `{RELATIONSHIP_NAME}_HOST` - database host
-- `{RELATIONSHIP_NAME}_PORT` - database port
-- `{RELATIONSHIP_NAME}_NAME` / `{RELATIONSHIP_NAME}_DATABASE` - database name
-- `{RELATIONSHIP_NAME}_DRIVER` - database driver
-- `{RELATIONSHIP_NAME}_SERVER` - database server
-
-For example, for a relationship called `database`, the environment variables are named `DATABASE_URL`, `DATABASE_HOST`, `DATABASE_USER`, etc.
-
-For more information about database configuration, see [Databases](databases.md).
-
-## DFS database variables
-
-When using [distributed file storage (DFS) that uses a separate database](clustering.md#dfs-io-handler), you must use the relationship name `dfs_database`.
-In addition to the database variables listed above, additional DFS-specific variables are available when `PLATFORMSH_DFS_NFS_PATH` is set:
-
-- `DFS_NFS_PATH` - NFS path for DFS storage
-- `DFS_DATABASE_CHARSET` - database character set
-- `DFS_DATABASE_COLLATION` - database collation
-
-## Cache variables
-
-For Redis and Valkey cache services, you can use the following variables:
-
-- `{RELATIONSHIP_NAME}_URL`
-- `{RELATIONSHIP_NAME}_HOST`
-- `{RELATIONSHIP_NAME}_PORT`
-- `{RELATIONSHIP_NAME}_SCHEME`
-
-In addition, you can use the following global variables:
-
-- `CACHE_POOL` - `cache.redis` for both Redis and Valkey
-- `CACHE_DSN` - cache connection string
-
-For more information about persistence cache configuration, see [Persistence cache](persistence_cache.md).
-
-## Session variables
-
-For Redis-based session storage, the following variables are available.
-
-- `SESSION_HANDLER_ID` - session handler class name
-- `SESSION_SAVE_PATH` - Redis connection in `host:port` format
-
-The system looks for relationships named `redissession` or `valkeysession` first.
-If not found, it uses the first available Redis-compatible service.
-
-For more information about session configuration, see [Sessions](sessions.md).
-
-## Search engine variables
-
-### Solr
-
-For Solr search engine configuration, you can use the following variables:
-
-- `SEARCH_ENGINE` - set to `solr`
-- `SOLR_DSN` - Solr connection string
-- `SOLR_CORE` - Solr core name
-- `{RELATIONSHIP_NAME}_HOST`
-- `{RELATIONSHIP_NAME}_PORT`
-- `{RELATIONSHIP_NAME}_NAME` / `{RELATIONSHIP_NAME}_DATABASE`
-
-For more information, see [Solr search engine](solr_overview.md).
-
-### Elasticsearch
-
-For Elasticsearch search engine configuration, you can use the following variables:
-
-- `SEARCH_ENGINE` - set to `elasticsearch`
-- `ELASTICSEARCH_DSN` - Elasticsearch connection string
-- `{RELATIONSHIP_NAME}_URL`
-- `{RELATIONSHIP_NAME}_HOST`
-- `{RELATIONSHIP_NAME}_PORT`
-- `{RELATIONSHIP_NAME}_SCHEME`
-
-For more information, see [Elasticsearch](elasticsearch_overview.md).
-
-## HTTP cache variables (Varnish)
-
-For Varnish-based HTTP caching, the following variables are available.
-
-- `HTTPCACHE_PURGE_TYPE` - set to `varnish`
-- `HTTPCACHE_PURGE_SERVER` - Varnish server address
-- `HTTPCACHE_VARNISH_INVALIDATE_TOKEN` - token for cache invalidation
-
-For more information about HTTP cache and Varnish configuration, see [HTTP cache](http_cache.md).
diff --git a/docs/ibexa_cloud/ibexa_cloud.md b/docs/ibexa_cloud/ibexa_cloud.md
deleted file mode 100644
index f285dbc6187..00000000000
--- a/docs/ibexa_cloud/ibexa_cloud.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-description: Host your Ibexa projects on the cloud.
-page_type: landing_page
-month_change: false
----
-
-# [[= product_name_cloud =]]
-
-[[= product_name_cloud =]] is a cloud hosting platform that enables you to host your application in the cloud by using the Upsun service.
-
-[[= cards([
- "ibexa_cloud/ibexa_cloud_guide",
- "ibexa_cloud/install_on_ibexa_cloud",
- "ibexa_cloud/ibexa_cloud_cli",
- "ibexa_cloud/environment_variables",
- "ibexa_cloud/ddev_and_ibexa_cloud",
-], columns=3) =]]
diff --git a/docs/ibexa_cloud/ibexa_cloud_cli.md b/docs/ibexa_cloud/ibexa_cloud_cli.md
deleted file mode 100644
index b85785e5448..00000000000
--- a/docs/ibexa_cloud/ibexa_cloud_cli.md
+++ /dev/null
@@ -1,78 +0,0 @@
----
-description: Use the [[= product_name_cloud =]] CLI to manage your I[[= product_name_cloud =]] projects from the command line.
-month_change: true
----
-
-# [[= product_name_cloud =]] CLI
-
-The [[= product_name_cloud =]] CLI (`ibexa_cloud`) is a command-line tool for managing your [[= product_name_cloud =]] projects.
-It's based on the [Upsun CLI](https://developer.upsun.com/cli) and shares the same commands.
-
-## Installation
-
-Follow the installation instructions at [cli.ibexa.cloud](https://cli.ibexa.cloud/).
-
-After installation, authenticate with your [[= product_name_cloud =]] account:
-
-```bash
-ibexa_cloud auth:browser-login
-```
-
-## Command reference
-
-To get started, try the following commands:
-
-- `ibexa_cloud list` lists all available commands
-- `ibexa_cloud ssh` opens an SSH session to the current environment, or executes a command remotely
-- `ibexa_cloud log` reads an environment's logs
-- `ibexa_cloud rel` shows an environment's service relationships
-- `ibexa_cloud var` lists environment variables
-
-To get help and see usage examples for any command, run:
-
-```bash
-ibexa_cloud --help
-```
-
-For the full list of available commands, run `ibexa_cloud list` or see the [Upsun CLI reference](https://developer.upsun.com/cli/reference).
-In all examples, replace `upsun` with `ibexa_cloud`.
-
-## Examples
-
-### Run a SQL script
-
-To execute a SQL upgrade script on a [[= product_name_cloud =]] environment, pass it to `ibexa_cloud sql`:
-
-=== "MySQL"
-
- ```bash
- ibexa_cloud sql < vendor/ibexa/installer/upgrade/db/mysql/ibexa-x.x.x-to-x.x.y.sql
- ```
-
-=== "PostgreSQL"
-
- ```bash
- ibexa_cloud sql < vendor/ibexa/installer/upgrade/db/postgresql/ibexa-x.x.x-to-x.x.y.sql
- ```
-
-### Connect with a SQL client
-
-To connect to the database using any SQL client, start SSH tunnels to all services (database, Redis, Solr, and others except Varnish) by running the following command in the project directory:
-
-```bash
-ibexa_cloud tunnel:open
-```
-
-The command outputs connection details for each service, for example:
-
-``` shell-session
-SSH tunnel opened to database at: mysql://user:@127.0.0.1:30000/main
-```
-
-Use the displayed host, port, database name, username, and password to configure your SQL client.
-
-When you're done, close the tunnels:
-
-```bash
-ibexa_cloud tunnel:close
-```
diff --git a/docs/ibexa_cloud/ibexa_cloud_guide.md b/docs/ibexa_cloud/ibexa_cloud_guide.md
deleted file mode 100644
index 4468974dab7..00000000000
--- a/docs/ibexa_cloud/ibexa_cloud_guide.md
+++ /dev/null
@@ -1,131 +0,0 @@
----
-description: Learn how to host your application and improve your business processes by using Ibexa Cloud hosting platform.
-month_change: false
----
-
-# Ibexa Cloud product guide
-
-## What is [[= product_name_cloud =]]
-
-[[= product_name_cloud =]] is a cloud hosting platform that enables you to host your application in the cloud by using the [Upsun](https://upsun.com/) service.
-It also establishes the framework for the potential growth and improves project delivery.
-As a diverse Platform as a Service (PaaS), it's designed to allow you to focus on the crucial things.
-
-[[= product_name_cloud =]] complements the capabilities of [[= product_name =]] - a software that is designed to provide your business with all the features, functionality, and support your need to transform your business for the digital age.
-
-![Ibexa Cloud - part of [[= product_name =]]](../getting_started/img/ibexa_cloud_dxp.png)
-
-## Availability
-
-[[= product_name_cloud =]] is available for all [[= product_name =]] editions.
-
-## How does [[= product_name_cloud =]] work
-
-[[= product_name_cloud =]], as a hosting platform, is designed to streamline the development and testing processes, allowing you to deliver new features faster.
-It ensures that developers dedicate more time to important development activities rather than maintaining databases, queues, search engines, and operating systems.
-It shifts the focus away from fundamental operations and toward improving your digital services with additional features and capabilities.
-
-
-
-## [[= product_name_cloud =]] account
-
-If you want to use [[= product_name_cloud =]], you need to check the [requirements](requirements.md#ibexa-cloud-requirements-and-setup) and follow [installation process](install_on_ibexa_cloud.md).
-
-To use [[= product_name_cloud =]], you must make arrangements with [[= product_name_base =]] to get and set up a user account.
-To do so, contact your Partner Manager, or Sales representatives team, or fill out the form available at this link: https://www.ibexa.co/about-ibexa/contact-us.
-
-When you have an account, you can log in to https://console.ibexa.cloud.
-
-## Capabilities
-
-### Platform as a Service
-
-[[= product_name_cloud =]] is a PaaS provider.
-It's a cloud-based subscription service that you can use for developing, managing, and running applications without infrastructure concerns.
-This cloud computing approach gives users access to a full cloud platform, including hardware, software, and infrastructure.
-PaaS eliminates the requirement to buy and install the necessary hardware and software.
-All you have to do is access it and you can start deploying resources and developing right away.
-
-
-
-### Performance management
-
-Make your applications more effective, scalable, and effective by using the [Observability Suite](https://developer.upsun.com/docs/observability).
-This package gives you the ability to test, profile, and monitor your application before putting it into production.
-Observability Suite comes with each [[= product_name_cloud =]] subscription.
-
-### Automation
-
-[[= product_name_cloud =]] automates time-consuming testing processes and encourages ongoing QA testing, so your projects are ready for deployment much faster.
-For further protection and simple rollbacks, it also automates your backup procedures.
-This guarantees that the developers are working within a framework that is adaptable, safe, and responsive to their requirements.
-Thanks to built-in CI/CD features, you can also reduce the need for manual testing and accelerate your development.
-
-
-
-### Digital tool
-
-[[= product_name_cloud =]] is a digital tool - it's a perfect starting step toward your company's digital transformation.
-What's more, [[= product_name_cloud =]] as an end-to-end cloud hosting platform, it's scalable, requires little up-front expenditure, and no ongoing maintenance.
-[[= product_name_cloud =]] as a PaaS solution enables you to start constructing effective digital systems that provide great consumer experiences.
-
-## Benefits
-
-### Safety and simplicity
-
-Comprehensive data security procedures guarantee that you maintain complete ownership of your client's data, defining where it's stored.
-You can be sure that the safety protocols are compliant with all applicable legislation.
-What's more, all updates to your code and infrastructure are fully auditable.
-Global CDN (Content Delivery Network) is included and fully managed.
-[[= product_name_cloud =]], thanks to extensive [[= product_name_base =]] support, enables effortless deployment.
-You can create a clone not only of the code, but also data and the infrastructure.
-As the infrastructure is exactly the same as what's currently in production, you can be sure that everything works well when you conduct your release and push it live.
-
-### High availability and compatibility
-
-[[= product_name_cloud =]] is compatible with your choice of public cloud server and supports a variety of hosting platforms.
-It's a Git-native development - compatible with Git Flow.
-[[= product_name_cloud =]] deployment integrates naturally at the end of your existing production chain, including staging, and work in progress branch preview.
-You can also integrate with, for example, Bitbucket, GitHub, GitLab.
-You can instantly clone every branch of both your code and infrastructure configuration.
-Upsun (and [[= product_name_cloud =]], by extension) uses the [Infrastructure as Code approach](https://fixed.docs.upsun.com/learn/overview.html#infrastructure-as-code).
-It means that the infrastructure is described in the code and that is what allows you to clone both code and infrastructure configuration at the same time.
-If you want to work with services such as [MySQL](https://fixed.docs.upsun.com/add-services/mysql.html) or [Elasticsearch](https://fixed.docs.upsun.com/add-services/elasticsearch.html), you can add them with a line of code.
-What's more, you can run in your chosen cloud, like Microsoft Azure, Orange, or Google Cloud Platform.
-
-### Great customer experience
-
-The [[= product_name_cloud =]] as a PaaS solution enables your company to begin developing effective digital systems that provide exceptional client experiences.
-It gives the user access to all of [[= product_name =]]'s features while hosting them in a cloud environment.
-
-### Increase in developer productivity
-
-Thanks to [[= product_name_cloud =]], there is around 40% increase in developer productivity, 15% faster user acceptance testing, and 20% more deployments.
-Developer can focus more on important development activities.
-Apps can be developed and hosted more quickly and without the risk of infrastructure-related delays.
-
-### A single provider to manage
-
-[[= product_name_cloud =]], as a hosting infrastructure, comes together with a software provided by [[= product_name =]] in a single package.
-Management thus becomes much easier.
-
-### Scalability and flexibility
-
-[[= product_name_cloud =]] allows for effortless scaling of resources to meet changing workload demands, ensuring high availability and performance.
-
-### Marketing friendly tool
-
-With instant previews, the marketing team can collaborate better with developers.
-Team members can also see and provide input on the new feature's actual appearance.
-
-### Integrated customer support
-
-Support integration is a part of the combined Upsun and [[= product_name_base =]] service.
-In case of an issue, you only have to submit one ticket, no matter whether it has to do with [[= product_name =]] or the cloud infrastructure.
-When you submit a ticket with [[= product_name_cloud =]], the support team looks into the issue and assigns it to the appropriate expert.
-
-### Lower cost
-
-With PaaS solution there is no need to purchase and maintain hardware or software infrastructure. This reduces the total cost of ownership and operational expenses.
-According to Forrester Total Economic Impact report from March 2022, a company that uses Upsun for three years achieves an investment return of 219%.
-According to this in-depth analysis, Upsun reduces operating expenses for developers and IT by $1 million over the course of three years, and in as little as seven months, break-even point can be reached.
diff --git a/docs/ibexa_cloud/install_on_ibexa_cloud.md b/docs/ibexa_cloud/install_on_ibexa_cloud.md
deleted file mode 100644
index c41b94cf8e6..00000000000
--- a/docs/ibexa_cloud/install_on_ibexa_cloud.md
+++ /dev/null
@@ -1,118 +0,0 @@
----
-description: Install and configure Cohesivo to run in cloud using [[= product_name_cloud =]].
-month_change: false
----
-
-# Install on Ibexa Cloud
-
-[[= product_name_cloud =]] enables you to host your application in the cloud by using the [Upsun](https://upsun.com/) service.
-
-## 1. Prepare configuration files
-
-If you didn't add cloud configuration during installation, run the following commands now:
-
-``` bash
-composer require ibexa/cloud
-php bin/console ibexa:cloud:setup --upsun
-```
-
-These commands add the necessary package and configuration files required for [[= product_name_cloud =]].
-
-You can adapt the configuration in the following places:
-
-- `.platform.app.yaml` - main configuration
-- `.platform/services.yml` - additional [services](https://fixed.docs.upsun.com/add-services.html) such as search engines or cache
-- `.platform/routes.yml` - routes to define how [Upsun handles incoming web requests](https://fixed.docs.upsun.com/define-routes.html)
-
-For details about available configuration settings, refer to [Upsun documentation](https://fixed.docs.upsun.com/create-apps.html).
-
-### Disk space
-
-The total disk space depends on your [[= product_name_cloud =]] subscription level.
-You can assign disk space to the main app container under the `disk` key.
-You can distribute the remaining space between other containers (for example, the database) or search engine in `.platform/services.yaml`, under the individual service definitions.
-
-### Build and deploy process
-
-Configuration under `hooks` defines the process of building and deploying your project.
-
-!!! note
-
- During the build phase (defined in the `hooks.build` configuration), files in the project have read/write permissions (can be modified).
-
- During deployment (defined in the `hooks.deploy` configuration), all files in the project are read-only.
-
-### Additional services
-
-`.platform/services.yaml` contains preconfigured setting blocks that you can uncomment to enable services such as Solr or Elasticsearch, or persistent Redis session storage.
-
-For information about available services, see [Upsun documentation](https://fixed.docs.upsun.com/add-services.html#available-services).
-
-If you enable any of the services, you must uncomment the relevant relationship under the `relationship` key in `.platform.app.yaml` as well.
-
-For information about environment variables automatically generated based on your service configuration, see [Environment variables on [[= product_name_cloud =]]](environment_variables.md).
-
-## 2. Create an account
-
-Log in to https://console.ibexa.cloud or create an account if you don't have one yet.
-
-Create a project and select its region.
-
-!!! caution
-
- Don't use https://console.upsun.com/ (or former https://console.platform.sh/) which don't list [[= product_name_cloud =]] projects.
- Use https://console.ibexa.cloud to manage your [[= product_name_cloud =]] projects.
-
-## 3. Prepare for hosting
-
-After the project is created, the website walks you through preparing your project for hosting.
-This includes adding an SSH key, and adding Upsun as a git remote.
-
-Add your Composer authentication token to the project before pushing it to Upsun.
-You can set this token as an environment variable.
-
-When you do, make sure the **Visible during runtime** box in [[= product_name_cloud =]] configuration is unchecked.
-This ensures that the token isn't exposed.
-
-### Composer authentication using the web console
-
-In **Settings** (top right gear icon) -> **Project Settings** -> **Variables** -> **+ Create variable**
-
-
-
-### Composer authentication using the CLI command
-
-Use [[[= product_name_cloud =]] CLI](ibexa_cloud_cli.md) to create the variable:
-
-```bash
-ibexa_cloud variable:create --level project --name env:COMPOSER_AUTH \
- --json true --visible-runtime false --sensitive true --visible-build true \
- --value '{"http-basic": {"updates.ibexa.co": {"username": "", "password": ""}}}'
-```
-
-## 4. Push the project
-
-When you're done with configuration, push your project to the Upsun remote:
-
-``` bash
-git push -u main
-```
-
-You can also use the [[[= product_name_cloud =]] CLI](https://cli.ibexa.cloud/) to push your code.
-
-``` bash
-ibexa_cloud push main
-```
-
-The [database installer](install_cohesivo.md#create-a-database) runs in non-interactive mode and keeps the default password for the `admin` user.
-Modify this password after the installation, for example, by using [data migrations](importing_data.md#users) or the [user management command](update_basic_user_data.md#change-password).
-
-!!! note
-
- `main` is the Upsun name for the production branch.
-
-!!! caution
-
- Don't use Upsun CLI (`upsun`), instead, use the [[[= product_name_cloud =]] CLI (`ibexa_cloud`)](https://cli.ibexa.cloud/) instead.
-
- For more information, see [[[= product_name_cloud =]] CLI](ibexa_cloud_cli.md).
diff --git a/docs/ibexa_products/editions.md b/docs/ibexa_products/editions.md
index f73fcf8f0eb..a87f21cfe75 100644
--- a/docs/ibexa_products/editions.md
+++ b/docs/ibexa_products/editions.md
@@ -10,7 +10,6 @@ Three [[= product_name =]] product editions are available to help you accelerate
[[= cards([
"ibexa_products/ibexa_headless",
"ibexa_products/ibexa_experience",
- "ibexa_products/ibexa_commerce",
], columns=3) =]]
## Feature comparison
@@ -50,14 +49,6 @@ Compare all features available in [[= product_name_headless =]], [[= product_nam
| [Recent activity](recent_activity.md) | | ✔ | ✔ |
| [[[= product_name_engage =]] add-on]([[= user_doc =]]/qualifio/qualifio/) | | ✔ | ✔ |
| [[[= product_name_cdp =]] (Customer Data Platform) add-on](/raptor_cdp/raptor_cdp_guide.md) | | ✔ | ✔ |
-| [Order management](order_management.md) | | | ✔ |
-| [Payment management](payment.md) | | | ✔ |
-| [Shipping management](shipping_management.md) | | | ✔ |
-| [Cart](cart.md) | | | ✔ |
-| [Checkout](checkout.md) | | | ✔ |
-| [Storefront](storefront.md) | | | ✔ |
-| [Transactional emails](transactional_emails.md) | | | ✔ |
-| [Discounts](discounts.md) | | | ✔ |
## LTS Updates
@@ -70,5 +61,4 @@ The features brought by LTS Updates become standard parts of the next LTS releas
| [Google Gemini connector](configure_ai_actions.md#install-google-gemini-connector) | ✔ | ✔ | ✔ |
| [Integrated help](integrated_help.md) | ✔ | ✔ | ✔ |
| [MCP servers](mcp_guide.md) | ✔ | ✔ | ✔ |
-| [Shopping list](shopping_list_guide.md) | | | ✔ |
| [Translations management](translations_management_guide.md) | ✔ | ✔ | ✔ |
diff --git a/docs/ibexa_products/ibexa_commerce.md b/docs/ibexa_products/ibexa_commerce.md
deleted file mode 100644
index 1bf730a7a17..00000000000
--- a/docs/ibexa_products/ibexa_commerce.md
+++ /dev/null
@@ -1,129 +0,0 @@
----
-description: Explore all of the key features, functionalities, and advantages of Ibexa Commerce, the most powerful edition that Cohesivo has to offer.
-month_change: false
----
-
-# [[= product_name_com =]] edition product guide
-
-## What is [[= product_name_com =]]
-
-[[= product_name_com =]] is the most powerful edition offered by [[= product_name_base =]].
-
-It assists you in managing each aspect of your customers' journey by combining content management, customization, and commerce functions into a single, dedicated solution.
-
-[[= product_name_com =]] offers a streamlined, unified platform where you can personalize each aspect of the online shopping experience.
-You can completely revamp your online stores and give your consumers exceptional purchasing experiences, from first contact to post-purchase support.
-
-
-
-## Availability
-
-To start using [[= product_name_com =]], you need to purchase a product license.
-
-For more information, see [Ibexa Commerce license pricing](https://www.ibexa.co/products/pricing?tab=3).
-You can also [contact us](https://www.ibexa.co/about-ibexa/contact-us) or [one of our partners](https://www.ibexa.co/partners).
-
-## How it works
-
-### Technical backstage
-
-With an active license, you can start the [installation process](install_cohesivo.md) that uses the Composer.
-
-[[= product_name_com =]] is based on [Symfony]([[= symfony_doc =]]).
-With a help of documentation and trainings, any developer familiar with Symfony or even PHP alone can learn how to use available extension points and extend the platform.
-
-Version control systems and environment variables allow you to deploy your extensions and settings on several environments, such as [Ibexa Cloud](ibexa_cloud_guide.md).
-
-[[= product_name_com =]] is built on [[[= product_name_exp =]]](ibexa_experience.md) and includes all bundles, APIs, and features that come with both [[[= product_name_headless =]]](ibexa_headless.md#core-features) and [[[= product_name_exp =]]](ibexa_experience.md#core-features) editions.
-
-## Capabilities and benefits
-
-With [[= product_name_com =]] you can focus on accelerating your transformation into a fully-fledged eCommerce.
-It comes with all the necessary tools: customized catalogs, integration with CDP, personalized checkout workflows, payment gateway integration, transactional emails, and more.
-
-### Core features
-
-[[= product_name_com =]] includes all the features you need to launch your online store and reduce the time it takes to go live.
-
-#### Order management
-
-With the advanced [Order management]([[= user_doc =]]/commerce/order_management/order_management/) tools, you can manage orders with ease.
-Depending on your permissions, you can search for orders, review their details and updates, track completion status, and cancel orders that are created when store customers purchase products.
-When searching for orders, you can use filters to save time and reduce effort.
-Order management is strongly connected with other components of the Commerce offering, such as [Cart](cart.md) and [Checkout](checkout.md), so users can speed up the process by uploading an order list or repeating previous transactions.
-
-
-
-#### Payment management
-
-The [Payment](payment.md) component allows users to search for payment methods and payments, create new and manage existing payments and payment methods, and filter search results.
-Users can also enable or disable payment methods, change payment details, and cancel payments, depending on their role.
-
-
-
-#### Shipping management
-
-With the [Shipping](shipping_management.md) component users can create and manage shipments, search for shipments, filter search results, and define and manage various shipping methods.
-Depending on their role, users can also enable or disable shipping methods, change status of shipments, and cancel shipments.
-
-
-
-#### Storefront
-
-The [Storefront](storefront.md) package includes a starter kit for developers.
-It's a foundational set of components that developers can customize and extend to create their own web store implementations.
-It contains default UI components and widgets that can be modified to [create a customized web store](customize_storefront_layout.md).
-
-#### Relevant faceted search
-
-Search becomes crucial when your product catalog is extensive.
-Products can be sorted according to a variety of criteria using faceted search.
-The value it brings makes it a vital component in merchandising.
-You can set up your search engine using [[= product_name_com =]] to help clients find what they're looking for more easily, which could result in more purchases.
-
-#### Catalog management
-
-[[= product_name_com =]] gives you the ability to manage your product repository - [Product catalog](product_catalog_guide.md), and construct an infinite number of catalogs, each with unique prices, to further customize the experience for your customers.
-
-#### Transactional emails
-
-Commerce allows you to send transactional emails - messages that [[= product_name_base =]] can send through the [Actito](https://actito.com/en) gateway to your end-users.
-These emails include notifications about changes in the status of various actions taken in relation to your commerce presence.
-With this feature you can also [create email campaigns](transactional_emails.md#create-email-campaigns) to engage users and increase sales.
-
-### Use cases
-
-#### Create personalized shipping experience
-
-Use [Raptor recommendations connector](raptor_connector_guide.md) to transform your online stores and give your consumers great buying experiences, from initial contact to post-purchase support.
-No matter how complicated your product or sales process are, you can present your offer in an approachable way.
-Creating engaging and personalized shopping experiences with targeted offers and recommendations helps you boost sales.
-Within eCommerce, product recommendations can assist users in finding the exact item that meets their needs.
-Recommendations can be used to propose related, alternative, or complimentary products to users who are unsure what to buy.
-
-#### Use effective merchandising
-
-Merchandising assists in keeping the consistency of the brand and providing customized product recommendations with captivating visuals and powerful search features.
-You can engage your customers with eye-catching graphics and information.
-The search engine makes it easy to find what they're looking for by providing quick and easy access to the product catalogs.
-
-The customer experience takes an important step forward by facilitating financial transactions through the use of powerful, individualized product suggestions provided by [[= product_name_com =]] and unique pricing for various customer groups.
-
-#### Launch consumer-facing web stores
-
-[[= product_name_com =]] comes with all the features you need to launch and manage your web store, like storefront starter kit, real-time cart management, stock inventory, catalog management, and more.
-
-This edition is designed for complex enterprises and is fully customizable.
-It enables you to design flawless sales experiences regardless of the complexity of your business model.
-You can create online store that really fits your needs.
-
-#### Increase B2B sales
-
-[[= product_name_com =]] contains the best B2B features to help you speed up your digital transformation, such as corporate account management, tailored catalogs, customized workflows, effortless reordering, custom pricing, and more.
-
-#### Automate business processes
-
-With [[= product_name_com =]], the automation process becomes easier, which is essential if your company wants to do more with less effort.
-It comes with all capabilities, including order and inventory management, customer data, and custom pricing, which are needed to achieve it.
-You can integrate with over 1,300 standard apps, including your CRM, ERP, PIM, and DAM systems, and build custom connectors.
-Also, you can use the ready-to-use pre-designed templates.
diff --git a/docs/ibexa_products/ibexa_experience.md b/docs/ibexa_products/ibexa_experience.md
index 73d1e0a7149..b95fb482a3b 100644
--- a/docs/ibexa_products/ibexa_experience.md
+++ b/docs/ibexa_products/ibexa_experience.md
@@ -102,7 +102,7 @@ You can assign users to different recommendation groups and create advanced logi
#### [[= product_name_cdp =]] (Customer Data Platform)
-[[[= product_name_cdp =]]](/raptor_cdp/raptor_cdp_guide.md) is an add-on available for both Experience and [Commerce](ibexa_commerce.md) editions of [[= product_name =]].
+[[[= product_name_cdp =]]](/raptor_cdp/raptor_cdp_guide.md) is an add-on available for the Experience edition of [[= product_name =]].
To use it, you must make arrangements with [[= product_name_base =]] to define the initial configuration.
Once you activate [[= product_name_cdp =]], you can create complete customer profiles, including their interactions, behavior, and preferences.
It helps you improve user engagement, conversion rates, and return on investment by segmenting your audience and delivering tailored campaigns and experiences.
@@ -114,7 +114,7 @@ This central data storage supports business growth with a scalable infrastructur
#### [[= product_name_engage =]]
-Another add-on available for Experience and [Commerce](ibexa_commerce.md) edition is [[[= product_name_engage =]]](/qualifio/qualifio.md).
+Another add-on available for the Experience edition is [[[= product_name_engage =]]](/qualifio/qualifio.md).
To use it, you must make arrangements with [[= product_name_base =]] to define the initial configuration, and then get and set up a user account.
[[= product_name_engage =]] is a data collection tool.
It gives you the ability to use the [Qualifio](https://qualifio.com/) tools to engage your audiences. You can use Qualifio's existing templates and interactive elements, such as quizzes, pools, and forms, to create visually appealing, customized campaigns and collect important data.
diff --git a/docs/index.md b/docs/index.md
index d349b297380..efc1c00a1f7 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -199,23 +199,6 @@
-
diff --git a/docs/infrastructure_and_maintenance/background_tasks.md b/docs/infrastructure_and_maintenance/background_tasks.md
index cc5f5bc567c..534832b4d8e 100644
--- a/docs/infrastructure_and_maintenance/background_tasks.md
+++ b/docs/infrastructure_and_maintenance/background_tasks.md
@@ -114,12 +114,25 @@ services:
```
``` php
-[[= include_code('code_samples/background_tasks/src/Dispatcher/SomeClassThatSchedulesExecutionInTheBackground.php', 1, 3) =]]
+bus->dispatch(new SomeMessage());
+ }
+}
```
3\. [Route the message to the background queue](#route-message-to-background-queue).
@@ -154,10 +167,12 @@ On top of the supported Symfony stamps, [[= product_name =]] provides the follow
The following example shows how you can attach the `SudoStamp` to the message:
``` php
-[[= include_code('code_samples/background_tasks/src/Dispatcher/SomeClassThatSchedulesExecutionInTheBackground.php', 7, 7, remove_indent=True) =]]
-[[= include_code('code_samples/background_tasks/src/Dispatcher/SomeClassThatSchedulesExecutionInTheBackground.php', 9, 10, remove_indent=True) =]]
+use App\Message\SomeMessage;
+use Ibexa\Contracts\Messenger\Stamp\SudoStamp;
+use Symfony\Component\Messenger\MessageBusInterface;
-[[= include_code('code_samples/background_tasks/src/Dispatcher/SomeClassThatSchedulesExecutionInTheBackground.php', 25, 25, remove_indent=True) =]]
+/** @var MessageBusInterface $bus */
+$bus->dispatch(new SomeMessage(), [new SudoStamp()]);
```
#### UserPermissionStamp
@@ -171,10 +186,16 @@ By combing this stamp with [`SudoStamp`](#sudostamp), you can set the repository
The following example shows how you can use `UserPermissionStamp` to preserve the current repository user after the message is dispatched.
``` php
-[[= include_code('code_samples/background_tasks/src/Dispatcher/SomeClassThatSchedulesExecutionInTheBackground.php', 5, 5, remove_indent=True) =]]
-[[= include_code('code_samples/background_tasks/src/Dispatcher/SomeClassThatSchedulesExecutionInTheBackground.php', 8, 10, remove_indent=True) =]]
+use App\Message\SomeMessage;
+use Ibexa\Contracts\Core\Repository\PermissionResolver;
+use Ibexa\Contracts\Messenger\Stamp\UserPermissionStamp;
+use Symfony\Component\Messenger\MessageBusInterface;
+
+/** @var PermissionResolver $permissionResolver */
+$currentUserId = $permissionResolver->getCurrentUserReference()->getUserId();
-[[= include_code('code_samples/background_tasks/src/Dispatcher/SomeClassThatSchedulesExecutionInTheBackground.php', 23, 24, remove_indent=True) =]]
+/** @var MessageBusInterface $bus */
+$bus->dispatch(new SomeMessage(), [new UserPermissionStamp($currentUserId)]);
```
#### SiteAccessStamp
diff --git a/docs/infrastructure_and_maintenance/cache/http_cache/reverse_proxy.md b/docs/infrastructure_and_maintenance/cache/http_cache/reverse_proxy.md
index e3a85faef6b..084f549aba4 100644
--- a/docs/infrastructure_and_maintenance/cache/http_cache/reverse_proxy.md
+++ b/docs/infrastructure_and_maintenance/cache/http_cache/reverse_proxy.md
@@ -168,7 +168,7 @@ If you want to use Basic Auth with Fastly on [[= product_name_cloud =]], please
In such situation, use strong, secure hash and make sure to keep the token secret.
-### Ensure proper Captcha behavior [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
+### Ensure proper Captcha behavior [[% include 'snippets/experience_badge.md' %]]
If your installation uses Varnish and you want users to be able to configure and use Captcha in their forms, you must enable sending Captcha data as a response to an Ajax request.
Otherwise, Varnish doesn't allow for the transfer of Captcha data to the form, and as a result, users see an empty image.
@@ -184,7 +184,7 @@ ibexa:
use_ajax: true
```
-### Update custom Captcha block [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
+### Update custom Captcha block [[% include 'snippets/experience_badge.md' %]]
If you created a custom Captcha block for your site by overriding the default file (`vendor/gregwar/captcha-bundle/Resources/views/captcha.html.twig`), you must make the following changes to the custom block template file:
diff --git a/docs/infrastructure_and_maintenance/cache/persistence_cache.md b/docs/infrastructure_and_maintenance/cache/persistence_cache.md
index 0ac23f7f8fe..215e9fedbe3 100644
--- a/docs/infrastructure_and_maintenance/cache/persistence_cache.md
+++ b/docs/infrastructure_and_maintenance/cache/persistence_cache.md
@@ -156,10 +156,6 @@ Depending on the number of lookups and latency to cache server this might affect
A default example that you can use out-of-the-box is found in `config/packages/cache_pool/cache.redis.yaml`.
-!!! note "[[= product_name_cloud =]]"
-
- For [[= product_name_cloud =]] installations, the [`ibexa/cloud` package](install_on_ibexa_cloud.md) performs configuration based on the `.platform.app.yaml` file.
-
For anything else, you can enable it with environment variables.
For instance, if you set the following environment variables `export CACHE_POOL="cache.redis" CACHE_DSN="secret@example.com:1234/13"`, it results in config like this:
diff --git a/docs/infrastructure_and_maintenance/clustering/clustering.md b/docs/infrastructure_and_maintenance/clustering/clustering.md
index 475500bee46..5a86765dfee 100644
--- a/docs/infrastructure_and_maintenance/clustering/clustering.md
+++ b/docs/infrastructure_and_maintenance/clustering/clustering.md
@@ -22,15 +22,13 @@ The minimal requirements are:
- Shared database (using MySQL/MariaDB)
- [Shared binary files](#shared-binary-files) (using NFS, or S3)
-For more information on requirements, see [Requirements page](requirements.md).
-
It's also recommended to use:
- [Solr](solr_overview.md) or [Elasticsearch](elasticsearch_overview.md) for better search and performance
- a CDN for improved performance and faster ping time worldwide
- you can use Fastly, which has native support as HTTP cache and CDN.
- active/passive database for failover
-- more recent versions of PHP and MySQL/MariaDB within [what is supported](requirements.md) for your [[= product_name =]] version to get more performance out of each server. Numbers might vary so make sure to test this when upgrading.
+- more recent versions of PHP and MySQL/MariaDB supported by your [[= product_name =]] version to get more performance out of each server. Numbers might vary so make sure to test this when upgrading.
### Shared persistence cache
diff --git a/docs/infrastructure_and_maintenance/clustering/clustering_with_ddev.md b/docs/infrastructure_and_maintenance/clustering/clustering_with_ddev.md
index c7fe91fb5a4..1500102e00c 100644
--- a/docs/infrastructure_and_maintenance/clustering/clustering_with_ddev.md
+++ b/docs/infrastructure_and_maintenance/clustering/clustering_with_ddev.md
@@ -26,8 +26,6 @@ The `ddev config --php-version` option should set the same PHP version as the pr
Discover more commands in [DDEV documentation](https://docs.ddev.com/en/stable/users/usage/commands/).
-To run an [[= product_name_cloud =]] project locally, you may refer to [DDEV and Ibexa Cloud](ddev_and_ibexa_cloud.md) instead.
-
## Install reverse proxy
A reverse proxy can be added to the cluster to enable [HTTP caching](http_cache.md).
@@ -110,7 +108,7 @@ x-cache-hits: 5
x-cache-ttl: 87654.321
x-debug-token: 012345
x-debug-token-link: https://.ddev.site://_profiler/012345
-x-powered-by: Ibexa Commerce v5
+x-powered-by: Ibexa Experience v5
x-robots-tag: noindex
x-varnish: 12345 67890
xkey: ez-all c52 ct42 l2 pl1 p1 p2
diff --git a/docs/infrastructure_and_maintenance/logging.md b/docs/infrastructure_and_maintenance/logging.md
deleted file mode 100644
index d028c27a5c2..00000000000
--- a/docs/infrastructure_and_maintenance/logging.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-description: Ensure that your logs are secure and GDPR compliant by clearing them of sensitive user data.
----
-
-# Logging
-
-## Sensitive user data
-
-Some logs can contain personal information such as User ID or password.
-
-By default, [[= product_name =]] doesn't log User IDs.
-You can change this behavior by modifying the following setting:
-
-``` yaml
-ibexa.commerce.site_access.config.core.default.gdpr.store_user_id_in_logs: false
-```
-
-If the email text contains a password that should not be logged in the DB, you have to specify this password as a template parameter.
-
-`MailHelperService` replaces the template parameter `password` with `***`.
diff --git a/docs/infrastructure_and_maintenance/security/security_checklist.md b/docs/infrastructure_and_maintenance/security/security_checklist.md
index bba7e1c09dd..b7b5cfeae90 100644
--- a/docs/infrastructure_and_maintenance/security/security_checklist.md
+++ b/docs/infrastructure_and_maintenance/security/security_checklist.md
@@ -117,7 +117,7 @@ Reduce your attack surface by exposing only what you must.
- If possible, make the back office unavailable on the open internet.
- [Symfony FOSJsRoutingBundle](https://github.com/FriendsOfSymfony/FOSJsRoutingBundle) is required in those releases where it's included, to expose routes to JavaScript. It exposes only the required routes, nothing more. It's only required in the back office SiteAccess though, so you can consider blocking it in other SiteAccesses. You should also go through your own custom routes, and decide for each if you need to expose them or not. See the documentation on [YAML route definitions for exposure](https://github.com/FriendsOfSymfony/FOSJsRoutingBundle/blob/master/Resources/doc/usage.rst#generating-uris).
-- By default, a [Powered-By header](update_db_to_2.5.md#powered-by-header) is set. It specifies what version of [[= product_name =]] is running. For example, `x-powered-by: [[= product_name_exp =]] v4`. This doesn't expose anything that couldn't be detected through other means. But if you wish to obscure this, you can either omit the version number, or disable the header entirely by setting `enabled: false`.
+- By default, a Powered-By header is set. It specifies what version of [[= product_name =]] is running. For example, `x-powered-by: [[= product_name_exp =]] v4`. This doesn't expose anything that couldn't be detected through other means. But if you wish to obscure this, you can either omit the version number, or disable the header entirely by setting `enabled: false`.
```yaml
ibexa_system_info:
@@ -302,8 +302,6 @@ CAA is configured in your DNS zone file.
If you're using MySQL/MariaDB, use the UTF8MB4 database character set and related collation.
The older UTF8 can lead to truncation with 4-byte characters, like some emoji, which may have unpredictable side effects.
-See [Change from UTF8 to UTF8MB4](update_db_to_2.5.md#change-from-utf8-to-utf8mb4).
-
### Secure access
Secure the database access with strong passwords, keys, firewall, encryption in transit, encryption at rest, and so on, as needed.
diff --git a/docs/infrastructure_and_maintenance/sessions.md b/docs/infrastructure_and_maintenance/sessions.md
index b93f7afc145..75c4a028e51 100644
--- a/docs/infrastructure_and_maintenance/sessions.md
+++ b/docs/infrastructure_and_maintenance/sessions.md
@@ -90,10 +90,6 @@ Alternatively if you have needs to configure the servers dynamically:
- Set `%ibexa.session.handler_id%` (or `SESSION_HANDLER_ID` env var) to `Ibexa\Bundle\Core\Session\Handler\NativeSessionHandler`
- Set `%ibexa.session.save_path%` (or `SESSION_SAVE_PATH` env var) to [`save_path` config for Redis](https://github.com/phpredis/phpredis/blob/6.2.0/README.md#php-session-handler)
-!!! note "[[= product_name_cloud =]]"
-
- For [[= product_name_cloud =]] installations, the [`ibexa/cloud` package](install_on_ibexa_cloud.md) performs configuration based on the `.platform.app.yaml` file.
-
If you're on `php-redis` v4.2.0 and higher, you can optionally tweak [`php-redis` settings](https://github.com/phpredis/phpredis/blob/6.2.0/README.md#session-locking) for session locking.
Ideally keep [persistence cache](persistence_cache.md) and session data separated:
diff --git a/docs/multisite/languages/automated_translations.md b/docs/multisite/languages/automated_translations.md
deleted file mode 100644
index d5dc1ca5664..00000000000
--- a/docs/multisite/languages/automated_translations.md
+++ /dev/null
@@ -1,151 +0,0 @@
----
-description: With the automated translation add-on, users can translate content items into multiple languages with Google Translate or DeepL.
-month_change: false
----
-
-# Automated content translation
-
-With the automated translation add-on package, users can translate their content items into multiple languages automatically by using either Google Translate or DeepL external translation engine.
-The package integrates with [[= product_name =]], and allows users to [request from the UI]([[= user_doc =]]/content_management/translate_content/#add-translations) that a content item is translated.
-However, you can also run a Console Command to translate a specific content item.
-Either way, as a result, a new version of the content item is created.
-
-The following field types are supported out of the box:
-
-- [TextLine](textlinefield.md)
-- [TextBlock](textblockfield.md)
-- [RichText](richtextfield.md)
-- [Page](pagefield.md): the content of `text` and `richtext` [block attributes](page_block_attributes.md#block-attribute-types)
-
-See [adding a custom field or block attribute encoder](#create-custom-field-or-block-attribute-encoder) for more information on how you can extend this list.
-
-!!! note
-
- If you're currently using Automated translations, consider migrating to [Translations management](translations_management_guide.md).
-
-## Configure automated content translation
-
-### Install package
-
-The automated content translation feature comes as an additional package that you must download and install separately:
-
-```bash
-composer require ibexa/automated-translation
-```
-
-!!! caution "Modify the default configuration"
-
- Symfony Flex installs and activates the package.
- However, you must modify the `config/bundles.php` file to change the bundle loading order so that `IbexaAutomatedTranslationBundle` is loaded before `IbexaAdminUiBundle`:
-
- ``` php
- ['all' => true],
- Ibexa\Bundle\AdminUi\IbexaAdminUiBundle::class => ['all' => true],
- // ...
- ];
- ```
-
-### Configure access to translation services
-
-Before you can start using the feature, you must configure access to your Google and/or DeepL account.
-
-1\. Get the [Google API key](https://developers.google.com/maps/documentation/javascript/get-api-key) and/or [DeepL Pro key](https://support.deepl.com/hc/en-us/articles/360020695820-API-key-for-DeepL-API).
-
-2\. Set these values in the YAML configuration files, under the `ibexa_automated_translation.system.default.configurations` key:
-
-``` yaml
-ibexa_automated_translation:
- system:
- default:
- configurations:
- google:
- apiKey: "google-api-key"
- deepl:
- authKey: "deepl-pro-key"
-```
-
-The configuration is SiteAccess-aware, therefore, you can configure different engines to be used for different sites.
-
-## Translate content items with CLI
-
-To create a machine translation of a specific content item, you can use the `ibexa:automated:translate` command.
-
-The following arguments and options are supported:
-
-- `--from` - the source language
-- `--to` - the target language
-- `contentId` - ID of the content to translate
-- `serviceName` - the service to use for translation
-
-For example, to translate the root content item from English to French with the help of Google Translate, run:
-
-``` bash
-php bin/console ibexa:automated:translate --from=eng-GB --to=fre-FR 52 google
-```
-
-## Extend automated content translations
-
-### Add a custom machine translation service
-
-By default, the automated translation package can connect to Google Translate or DeepL, but you can configure it to use a custom machine translation service.
-You would do it, for example, when a new service emerges on the market, or your company requires that a specific service is used.
-
-The following example adds a new translation service.
-It uses the [AI actions framework](ai_actions.md) and assumes a custom `TranslateAction` AI Action exists.
-To learn how to build custom AI actions see [Extending AI actions](extend_ai_actions.md#custom-action-type-use-case).
-
-1. Create a service that implements the [`\Ibexa\AutomatedTranslation\Client\ClientInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-AutomatedTranslation-Client-ClientInterface.html) interface:
-
-``` php hl_lines="31-48"
-[[= include_code('code_samples/multisite/automated_translation/src/AutomatedTranslation/AiClient.php') =]]
-```
-
-2\. Tag the service as `ibexa.automated_translation.client` in the Symfony container:
-
-``` yaml
-[[= include_file('code_samples/multisite/automated_translation/config/services.yaml', 15, 18) =]]
-```
-
-3\. Specify the configuration under the `ibexa_automated_translation.system.default.configurations` key:
-
-``` yaml
-[[= include_file('code_samples/multisite/automated_translation/config/services.yaml', 23, 32) =]]
-```
-
-### Create custom field or block attribute encoder
-
-You can expand the list of supported field types and block attributes for automated translation, adding support for even more use cases than the ones built into [[= product_name =]].
-
-The whole automated translation process consists of 3 phases:
-
-1. **Encoding** - data is extracted from the field types and block attributes and serialized into XML format
-1. **Translating** - the serialized XML is sent into specified translation service
-1. **Decoding** - the translated response is deserialized into the original data structures for storage in [[= product_name =]]
-
-The following example adds support for automatically translating alternative text in image fields.
-
-1. Create a class implementing the [`FieldEncoderInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-AutomatedTranslation-Encoder-Field-FieldEncoderInterface.html) and add the required methods:
-
-``` php hl_lines="11-14 16-19 21-27 33-38"
-[[= include_code('code_samples/multisite/automated_translation/src/AutomatedTranslation/ImageFieldEncoder.php') =]]
-```
-
-In this example, the methods are responsible for:
-
-- `canEncode` - deciding whether the field to be encoded is an [Image](imagefield.md) field
-- `canDecode` - deciding whether the field to be decoded is an [Image](imagefield.md) field
-- `encode` - extracting the alternative text from the field type
-- `decode` - saving the translated alternative text in the field type's value object
-
-2\. Register the class as a service.
-If you're not using [Symfony's autoconfiguration]([[= symfony_doc =]]/service_container.html#the-autoconfigure-option), use the `ibexa.automated_translation.field_encoder` service tag.
-
-``` yaml
-[[= include_file('code_samples/multisite/automated_translation/config/services.yaml', 19, 22) =]]
-```
-
-For custom block attributes, the appropriate interface is [`BlockAttributeEncoderInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-AutomatedTranslation-Encoder-BlockAttribute-BlockAttributeEncoderInterface.html) and the service tag is `ibexa.automated_translation.block_attribute_encoder`.
diff --git a/docs/multisite/multisite_configuration.md b/docs/multisite/multisite_configuration.md
index 7954c0486c6..1945fa281ac 100644
--- a/docs/multisite/multisite_configuration.md
+++ b/docs/multisite/multisite_configuration.md
@@ -131,7 +131,7 @@ ibexa:
Identifier\ContentType: [article]
```
-### SiteAccesses and Page Builder [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
+### SiteAccesses and Page Builder [[% include 'snippets/experience_badge.md' %]]
To define which SiteAccesses are available in the submenu in Page Builder, use the following configuration:
diff --git a/docs/multisite/siteaccess/siteaccess_matching.md b/docs/multisite/siteaccess/siteaccess_matching.md
index 3fc8d0e884f..299ce702c4b 100644
--- a/docs/multisite/siteaccess/siteaccess_matching.md
+++ b/docs/multisite/siteaccess/siteaccess_matching.md
@@ -149,7 +149,7 @@ Example host name `www.page.com` matches SiteAccess `event`.
!!! note
- If you encounter problems with the `Map\Host` matcher, make sure that your installation is [properly configured to use token-based authentication](ez_platform_v2.4.md#update-ez-enterprise-v24-to-v242).
+ If you encounter problems with the `Map\Host` matcher, make sure that your installation is properly configured to use token-based authentication.
### `Map\URI`
@@ -185,7 +185,7 @@ ibexa:
Example URL `http://my_site.com:8080/content` matches SiteAccess `site`.
-### `Ibexa\SiteFactory\SiteAccessMatcher` [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
+### `Ibexa\SiteFactory\SiteAccessMatcher` [[% include 'snippets/experience_badge.md' %]]
Enables the use of [Site Factory](site_factory.md).
Doesn't take any parameters in configuration:
diff --git a/docs/multisite/translations_management/extend_translations_management.md b/docs/multisite/translations_management/extend_translations_management.md
index 1f1944e8e26..c3085fb8fda 100644
--- a/docs/multisite/translations_management/extend_translations_management.md
+++ b/docs/multisite/translations_management/extend_translations_management.md
@@ -154,27 +154,3 @@ This interface is not registered for [Symfony autoconfiguration]([[= symfony_doc
[[= include_code('code_samples/translations_management/config/services.yaml', 1, 1) =]]
[[= include_code('code_samples/translations_management/config/services.yaml', 15, 18) =]]
```
-
-## Use Twig component extension points
-
-Two [Twig component groups](custom_components.md#translations-management) allow you to inject custom UI elements into the translation interface without the need to override their templates.
-
-Such custom element could be, for example, a disclaimer or policy notice that the editor must acknowledge before a translation is created.
-
-The two groups behave differently:
-
-- `admin-ui-content-translation-modal-footer` — if any of the [components](components.md) renders output that is not empty, it entirely replaces the default footer buttons.
-Your component template must therefore include its own action buttons.
-- `admin-ui-content-edit-translation-select-footer` — component output is inserted between the existing **Edit** and **Discard** buttons of the content edit confirmation screen.
-
-Register a component with the `ibexa.twig.component` tag:
-
-``` yaml
-[[= include_code('code_samples/translations_management/config/services.yaml', 1, 1) =]]
-[[= include_code('code_samples/translations_management/config/services.yaml', 24, 28) =]]
-```
-
-!!! note
-
- The `admin-ui-content-translation-modal-footer` group receives a `location` variable that may be `null` for an unpublished draft.
- Always check for `null` before you access location properties in your component template.
diff --git a/docs/multisite/translations_management/translations_management_guide.md b/docs/multisite/translations_management/translations_management_guide.md
index f01b85c7cab..3062385e203 100644
--- a/docs/multisite/translations_management/translations_management_guide.md
+++ b/docs/multisite/translations_management/translations_management_guide.md
@@ -21,14 +21,6 @@ The package integrates with the [AI Actions framework](ai_actions_guide.md) to s
Administrators can manage providers and configure default provider-to-language-pair mappings directly in [[= product_name =]]'s back office, while editors can trigger machine translation from the content editing interface.
-!!! note
-
- Translations management is a standalone set of features.
- Although some views are similar to those delivered by the [Automated translations](automated_translations.md) opt-in package, Translations management does not require the `ibexa/automated-translation` package to run.
- These two packages use different namespaces, service tags, and provider interfaces.
-
- If you're currently using Automated translations, consider migrating to Translations management.
-
## Availability
Translations management is an opt-in capability available as an [LTS Update](editions.md#lts-updates) for all [[= product_name =]] editions, starting with the v5.0.10 version.
@@ -77,7 +69,7 @@ Editors can:
Content types that are editable in [Page builder](page_builder_guide.md) or [Form builder](form_builder_guide.md) are excluded from side-by-side editing.
- Products are editable in the side-by-side view, but [product attributes aren;t translatable](products.md#product-attributes).
+ Products are editable in the side-by-side view, but [product attributes aren't translatable](products.md#product-attributes).
### Command-line translation
diff --git a/docs/permissions/limitation_reference.md b/docs/permissions/limitation_reference.md
index b8582b99568..412f783c77f 100644
--- a/docs/permissions/limitation_reference.md
+++ b/docs/permissions/limitation_reference.md
@@ -42,17 +42,6 @@ The Activity log Owner (`ActivityLogOwner`) limitation specifies if a user can s
|-------|-----------------|--------------------------------------------------------------|
| `1` | "Only own logs" | Current user can only access their own activity log entries. |
-## Cart Owner limitation
-
-The Cart Owner (`CartOwner`) limitation specifies whether the user can modify a cart.
-
-### Possible values
-
-|Value|UI value|Description|
-|------|------|------|
-|"self"|"self"|Only the user who is the owner of the cart gets access.|
-|`null`| none |User can access all carts.|
-
## Change Owner limitation
The Change Owner (`ChangeOwner`) limitation specifies whether the user can change the owner of a content item.
@@ -103,16 +92,6 @@ The Public Link (`PublicLink`) limitation specifies whether the user can manage
|"Off"|"off"| User can't manage the settings|
|"On"|"on"| User can manage the settings|
-## Discount Owner limitation [[% include 'snippets/commerce_badge.md' %]]
-
-The Discount Owner (`DiscountOwner`) limitation specifies whether the user can interact with a [discount](discounts.md).
-
-### Possible values
-
-|Value|UI value|Description|
-|------|------|------|
-|"self"|"self"|Only the user who is the owner of the discount gets access.|
-
## Content type Group limitation
The Content Type Group (`UserGroup`) limitation specifies that only users with at least one common *direct* user group with the owner of content get the selected access right.
@@ -156,7 +135,7 @@ If you also combine it with `Owner of Parent` limitation, you effectively limit
|------|------|------|
|``|``|All valid content type IDs can be set as value(s)|
-## Field Group limitation [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
+## Field Group limitation [[% include 'snippets/experience_badge.md' %]]
A Field Group (`FieldGroup`) limitation specifies whether the user can work with content fields belonging to a specific group.
A user with this limitation is allowed to edit fields belonging to the indicated group.
@@ -229,16 +208,6 @@ The Object State (`ObjectState`) limitation specifies whether the user has acces
|------|------|------|
|``|``|All valid Object state IDs can be set as value(s)|
-## Order Owner limitation
-
-The Order Owner (`OrderOwner`) limitation specifies whether the user can modify an order.
-
-### Possible values
-
-|Value|UI value|Description|
-|------|------|------|
-|"self"|"self"|Users can access only their own orders. |
-
## Owner limitation
The Owner (`Owner`) limitation specifies that only the owner of the content item gets the selected access right.
@@ -271,17 +240,6 @@ The Parent Depth (`ParentDepth`) limitation specifies whether the user has acces
|------|------|------|
|``|``|All valid integers can be set as value(s)|
-## PaymentOwner limitation
-
-The Payment Owner (`PaymentOwner`) limitation specifies whether the user can modify a payment.
-
-### Possible values
-
-|Value|UI value|Description|
-|------|------|------|
-|"self"|"self"|Users can access only their own payments. |
-|"all"| none |Users can access all payments.|
-
## Product Type limitation
The Product Type (`ProductType`) limitation specifies whether the user has access to products belonging to a specific product type.
@@ -308,7 +266,7 @@ This limitation can be used as a role limitation.
|------|------|------|
|``|``|All valid session IDs can be set as value(s)|
-## Segment group limitation [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
+## Segment group limitation [[% include 'snippets/experience_badge.md' %]]
The segment group (`SegmentGroup`) limitation specifies whether the user has access segments within a specific segment group.
@@ -320,17 +278,6 @@ This limitation can be used as a role limitation.
|------|------|------|
|``|``|All valid segment group IDs can be set as value(s).|
-## Shopping list limitation [[% include 'snippets/lts-update_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-The Shopping List Owner (`ShoppingListOwner`) limitation specifies whether the user can modify a [shopping list](shopping_list.md).
-
-### Possible values
-
-| Value | UI value | Description |
-|--------|----------|------------------------------------------------------------------|
-| "self" | "self" | Only the user who is the owner of the shopping list gets access. |
-| `null` | none | User can access all shopping lists. |
-
## SiteAccess limitation
The SiteAccess (`SiteAccess`) limitation specifies to which SiteAccesses a certain permission applies, used by `user/login`.
@@ -345,16 +292,6 @@ The SiteAccess (`SiteAccess`) limitation specifies to which SiteAccesses a certa
`SiteAccess` limitation is deprecated and isn't used actively in public PHP API, but is allowed for being able to read / create limitations for legacy.
-## Shipment Owner limitation
-
-The Shipment Owner (`ShipmentOwner`) limitation specifies whether the user can modify a shipment.
-
-### Possible values
-
-|Value|UI value|Description|
-|------|------|------|
-|"self"|"self"|Users can access only their own shipments. |
-
## Subtree limitation
The subtree (`Subtree`) limitation specifies whether the user has access to content within a specific subtree of location, in case of `content/create` the parent subtree of location is evaluated.
diff --git a/docs/permissions/permission_use_cases.md b/docs/permissions/permission_use_cases.md
index c29c5b32ea3..649e56b2346 100644
--- a/docs/permissions/permission_use_cases.md
+++ b/docs/permissions/permission_use_cases.md
@@ -18,7 +18,7 @@ To allow the user to enter the back office interface and view all content, set t
These policies are necessary for all other cases below that require access to the content structure.
-## Create content without publishing [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
+## Create content without publishing [[% include 'snippets/experience_badge.md' %]]
You can use this option together with [[= product_name_exp =]]'s content review options.
Users assigned with these policies can create content, but cannot publish it.
@@ -228,115 +228,3 @@ Permissions for the product catalog override permissions for content, therefore,
- `product/create`
- `product/view`
- `product/edit`
-
-## Commerce [[% include 'snippets/commerce_badge.md' %]]
-
-To control which commerce functionalities are available to store users, you can grant or prevent them access to individual components.
-
-Out of the box, [[= product_name_com =]] comes with the *Storefront User* role that is assigned to anonymous users and grants them the following permissions:
-
-- `product/view`, `product_type/view` and `catalog/view`, to allow them to view a product list and product details
-- `cart/view`, `cart/create` and `cart/edit` with the `CartOwner` limitation set to `self`, to allow them to add items to their own shopping cart, modify their cart, and delete it
-- `checkout/view`, `checkout/create`, `checkout/update` and `checkout/delete`, to allow them to proceed to checkout and interact with the checkout process
-
-You can modify the default roles by preventing anonymous users from being able to proceed with the checkout process, and creating the *Registered Buyer* role that enables logged-in users to purchase products.
-
-You could do this by moving permissions that relate to checkout from the *Storefront User* role to the *Registered Buyer* role, and granting *Registered Buyer* with the `user/register` and `user/login` permissions which control access to registration and login.
-
-See below for a detailed listing of permissions that apply to Commerce, together with their meaning.
-
-!!! note "Owner limitation"
-
- For anonymous users, orders, shipments, and/or payments are saved with a 'null' user reference.
- Therefore, when you apply the `Owner/self` limitation to any of the permissions below, anonymous users aren't allowed to interact with any of these entities.
-
-### Cart
-
-Set the following permissions to decide what actions are available when users interact with carts:
-
-- `cart/view` - to allow user to view their cart
-- `cart/delete` - to delete cart, for example, after successful checkout
-- `cart/create` - to create a new cart
-- `cart/edit` - to allow user to add products to their cart
-
-To further control access to a cart, you can use the `CartOwner` limitation and set its value to `self`
-This way users can only interact with their own carts.
-
-### Checkout
-
-Set the following permissions to decide what actions are available when users interact with checkout:
-
-- `checkout/view` - to control user access to checkout
-- `checkout/create` - to allow starting the checkout process, by proceeding from cart
-- `checkout/update` - to allow users to modify existing information, for example item quantity
-- `checkout/delete` - to delete checkout
-
-### Discount management
-
-Set the following permissions to decide what actions are available when users interact with [discounts](discounts.md) in the back office:
-
-- `discount/create` - to allow the user to create a new discount
-- `discount/update` - to allow the user to change the parameters of an existing discount
-- `discount/view` - to allow the user to view discounts data
-- `discount/delete` - to delete an existing discount
-- `discount/enable` - to allow the user to enable an existing discount
-- `discount/disable` - to allow the user to disable an existing discount
-
-To further control access to a discount, you can use the `DiscountOwner` limitation and set its value to `self`.
-This way users can only interact with their own discounts.
-
-Store users do not need any permissions to use discounts in the buying process.
-
-### Order management
-
-Set the following permissions to decide what actions are available when users interact with orders:
-
-- `order/create` - to allow the user to create a new order
-- `order/view` - to allow the user to view orders
-- `order/update` - to allow the user to change status of an existing order
-- `order/cancel` - to allow the user to cancel an existing order
-
-To further control access to an order, you can use the `OrderOwner` limitation and set its value to `self`.
-This way users can only interact with their own orders.
-
-### Shipping management
-
-Set the following permissions to decide what actions are available when users interact with shipping methods and shipments.
-
-#### Shipping methods
-
-- `shipping_method/create` - to allow the user to create a new shipping method
-- `shipping_method/view` - to allow the user to view shipping methods
-- `shipping_method/edit` - to allow the user to modify an existing shipping method
-- `shipping_method/delete` - to allow the user to delete an existing shipping method
-
-#### Shipments
-
-- `shipment/create` - to allow the user to create a new shipment
-- `shipment/view` - to allow the user to view shipments
-- `shipment/update` - to allow the user to change status of an existing shipment
-- `shipment/delete` - to allow the user to cancel an existing shipment
-
-To further control access to a shipment, you can use the `ShipmentOwner` limitation and set its value to `self`.
-This way users can only interact with their own shipments.
-
-### Payment management
-
-Set the following permissions to decide what actions are available when users interact with payment methods and payments.
-
-#### Payment methods
-
-- `payment_method/create` - to allow the user to create a new payment method
-- `payment_method/view` - to allow the user to view payment methods
-- `payment_method/edit` - to allow the user to modify an existing payment method
-- `payment_method/delete` - to allow the user to delete an existing payment method
-
-#### Payments
-
-- `payment/create` - to allow the user to create a new payment
-- `payment/view` - to allow the user to view payments
-- `payment/edit` - to allow the user to modify an existing payment
-- `payment/delete` - to allow the user to delete an existing payment
-
-To further control access to a payment, you can use the `PaymentOwner` limitation and set its value to `self`.
-This way users can only interact with their own payments.
diff --git a/docs/permissions/policies.md b/docs/permissions/policies.md
index e8fed7ad9a4..15b405b6649 100644
--- a/docs/permissions/policies.md
+++ b/docs/permissions/policies.md
@@ -59,6 +59,25 @@ Each role you assign to user or user group consists of policies which define, wh
| | `read` | view the roles list in Admin. Required for all other role-related policies | |
| | `update` | modify existing roles | |
+#### Segments
+
+| Module | Function | Effect | Possible limitations |
+|------------------------|-------------------------------|--------------------------|-------------------------------------------------------------------|
+| `segment` | `assign_to_user` | assign segments to users | [Segment Group](limitation_reference.md#segment-group-limitation) |
+| | `create` | create segments | [Segment Group](limitation_reference.md#segment-group-limitation) |
+| | `read` | load segment information | [Segment Group](limitation_reference.md#segment-group-limitation) |
+| | `remove` | remove segments | [Segment Group](limitation_reference.md#segment-group-limitation) |
+| | `update` | update segments | [Segment Group](limitation_reference.md#segment-group-limitation) |
+
+#### Segment groups
+
+| Module | Function | Effect | Possible limitations |
+|------------------------------|-----------------------|--------------------------------|----------------------|
+| `segment_group` | `create` | create segment groups | |
+| | `read` | load segment group information | |
+| | `remove` | remove segment groups | |
+| | `update` | update segment groups | |
+
#### Setup
| Module | Function | Effect | Possible limitations |
@@ -68,7 +87,7 @@ Each role you assign to user or user group consists of policies which define, wh
| | `setup` | unused | |
| | `system_info` | view the **System Information** tab in Admin | |
-#### Sites [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
+#### Sites [[% include 'snippets/experience_badge.md' %]]
| Module | Function | Effect | Possible limitations |
|---------------------|------------------------------|-------------------------------------------------------------------------------------------------------|----------------------|
@@ -91,124 +110,6 @@ Each role you assign to user or user group consists of policies which define, wh
| | `register` | register using the `/register` route | |
| | `selfedit` | unused | |
-### Commerce
-
-#### Cart [[% include 'snippets/commerce_badge.md' %]]
-
-| Module | Function | Effect | Possible limitations |
-|---------------------|-----------------------|---------------------------------------------------------------------|-----------------------------------------------------------|
-| `cart` | `create` | create a cart | [CartOwner](limitation_reference.md#cart-owner-limitation) |
-| | `delete` | delete cart, for example, after successful checkout | [CartOwner](limitation_reference.md#cart-owner-limitation) |
-| | `edit` | change cart metadata (name, currency, owner), add/remove cart items | [CartOwner](limitation_reference.md#cart-owner-limitation) |
-| | `view` | view a cart | [CartOwner](limitation_reference.md#cart-owner-limitation) |
-
-#### Checkout [[% include 'snippets/commerce_badge.md' %]]
-
-| Module | Function | Effect | Possible limitations |
-|-------------------------|-----------------------|---------------------------------------------------------------------|----------------------|
-| `checkout` | `create` | create new checkout, for example, after workflow fails to complete | |
-| | `delete` | delete checkout, for example, after workflow completes successfully | |
-| | `update` | change currency, quantity | |
-| | `view` | access checkout | |
-
-#### Currencies and regions
-
-| Module | Function | Effect | Possible limitations |
-|-------------------------|-------------------------|-------------------|----------------------|
-| `commerce` | `currency` | manage currencies | |
-| | `region` | manage regions | |
-
-#### Discounts [[% include 'snippets/commerce_badge.md' %]]
-
-The [discount](discounts.md) policies decide which actions can be executed by given user or user group.
-
-!!! caution "Customers and discount policies"
-
- Customers don't need any policies to use the discounts on the [storefront](storefront.md).
- Even the `discount/view` policy would allow them to access all the discount details, including the coupon codes to activate them, which could lead to system abuse.
-
-| Module | Function | Effect | Possible limitations |
-|----------------------|--------------------------|-----------------------------|----------------------------------------------------|
-| `discount` | `create` | create a discount | [DiscountOwner](limitation_reference.md#discount-owner-limitation) |
-| | `update` | modify discount parameters | [DiscountOwner](limitation_reference.md#discount-owner-limitation) |
-| | `view` | view discounts (including its details) | [DiscountOwner](limitation_reference.md#discount-owner-limitation) |
-| | `delete` | delete a discount | [DiscountOwner](limitation_reference.md#discount-owner-limitation) |
-| | `enable` | enable a discount | [DiscountOwner](limitation_reference.md#discount-owner-limitation) |
-| | `disable` | disable a discount | [DiscountOwner](limitation_reference.md#discount-owner-limitation) |
-
-#### Orders [[% include 'snippets/commerce_badge.md' %]]
-
-| Module | Function | Effect | Possible limitations |
-|----------------------|-----------------------|---------------------------|--------------------------------------------------------------|
-| `order` | `cancel` | cancel an order | [OrderOwner](limitation_reference.md#order-owner-limitation) |
-| | `create` | create an order | [OrderOwner](limitation_reference.md#order-owner-limitation) |
-| | `update` | change status of an order | [OrderOwner](limitation_reference.md#order-owner-limitation) |
-| | `view` | view orders | [OrderOwner](limitation_reference.md#order-owner-limitation) |
-
-#### Payments [[% include 'snippets/commerce_badge.md' %]]
-
-| Module | Function | Effect | Possible limitations |
-|------------------------|-----------------------|------------------|-----------------------------------------------------------------|
-| `payment` | `create` | create a payment | [PaymentOwner](limitation_reference.md#paymentowner-limitation) |
-| | `delete` | delete a payment | [PaymentOwner](limitation_reference.md#paymentowner-limitation) |
-| | `edit` | modify a payment | [PaymentOwner](limitation_reference.md#paymentowner-limitation) |
-| | `view` | view payments | [PaymentOwner](limitation_reference.md#paymentowner-limitation) |
-
-#### Payment methods [[% include 'snippets/commerce_badge.md' %]]
-
-| Module | Function | Effect | Possible limitations |
-|-------------------------------|-----------------------|-------------------------|----------------------|
-| `payment_method` | `create` | create a payment method | |
-| | `delete` | delete a payment method | |
-| | `edit` | modify a payment method | |
-| | `view` | view payment methods | |
-
-#### Segments [[% include 'snippets/commerce_badge.md' %]]
-
-| Module | Function | Effect | Possible limitations |
-|------------------------|-------------------------------|--------------------------|-------------------------------------------------------------------|
-| `segment` | `assign_to_user` | assign segments to users | [Segment Group](limitation_reference.md#segment-group-limitation) |
-| | `create` | create segments | [Segment Group](limitation_reference.md#segment-group-limitation) |
-| | `read` | load segment information | [Segment Group](limitation_reference.md#segment-group-limitation) |
-| | `remove` | remove segments | [Segment Group](limitation_reference.md#segment-group-limitation) |
-| | `update` | update segments | [Segment Group](limitation_reference.md#segment-group-limitation) |
-
-#### Segment groups [[% include 'snippets/commerce_badge.md' %]]
-
-| Module | Function | Effect | Possible limitations |
-|------------------------------|-----------------------|--------------------------------|----------------------|
-| `segment_group` | `create` | create segment groups | |
-| | `read` | load segment group information | |
-| | `remove` | remove segment groups | |
-| | `update` | update segment groups | |
-
-#### Shipments [[% include 'snippets/commerce_badge.md' %]]
-
-| Module | Function | Effect | Possible limitations |
-|-------------------------|-----------------------|-----------------------------|--------------------------------------------------------------------|
-| `shipment` | `create` | create a shipment | [ShipmentOwner](limitation_reference.md#shipment-owner-limitation) |
-| | `delete` | delete a shipment | [ShipmentOwner](limitation_reference.md#shipment-owner-limitation) |
-| | `update` | change status of a shipment | [ShipmentOwner](limitation_reference.md#shipment-owner-limitation) |
-| | `view` | view shipments | [ShipmentOwner](limitation_reference.md#shipment-owner-limitation) |
-
-#### Shipping methods [[% include 'snippets/commerce_badge.md' %]]
-
-| Module | Function | Effect | Possible limitations |
-|--------------------------------|-----------------------|--------------------------|----------------------|
-| `shipping_method` | `create` | create a shipping method | |
-| | `delete` | delete a shipping method | |
-| | `update` | modify a shipping method | |
-| | `view` | view shipping methods | |
-
-#### Shopping lists [[% include 'snippets/lts-update_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-| Module | Function | Effect | Possible limitations |
-|------------------------------|-----------------------|------------------------|-----------------------------------------------------------------------|
-| `shopping_list` | `create` | create a shopping list | [ShoppingListOwner](limitation_reference.md#shopping-list-limitation) |
-| | `delete` | delete a shopping list | [ShoppingListOwner](limitation_reference.md#shopping-list-limitation) |
-| | `edit` | modify a shopping list | [ShoppingListOwner](limitation_reference.md#shopping-list-limitation) |
-| | `view` | view shopping lists | [ShoppingListOwner](limitation_reference.md#shopping-list-limitation) |
-
### Content management
#### Content
@@ -291,6 +192,13 @@ The [discount](discounts.md) policies decide which actions can be executed by gi
| | `edit` | edit a catalog | |
| | `view` | view catalogs | |
+#### Currencies and regions
+
+| Module | Function | Effect | Possible limitations |
+|-------------------------|-------------------------|-------------------|----------------------|
+| `commerce` | `currency` | manage currencies | |
+| | `region` | manage regions | |
+
#### Products
| Module | Function | Effect | Possible limitations |
diff --git a/docs/product_catalog/price_api.md b/docs/product_catalog/price_api.md
index 180dead7d94..f9bcf8f3b70 100644
--- a/docs/product_catalog/price_api.md
+++ b/docs/product_catalog/price_api.md
@@ -66,13 +66,12 @@ For example, to create a new price for a given currency, use `ProductPriceServic
### Resolve prices
-To display a product price on a product page or in the cart, you must calculate its value based on a base price and the context.
+To display a product price on a product page, you must calculate its value based on a base price and the context.
Context contains information about any price modifiers that may apply to a specific customer group.
To determine the final price, or resolve the price, use the [`PriceResolverInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-PriceResolverInterface.html) service, which takes the following conditions into account:
1. Existence of base price for the product in the specified currency
2. Existence of customer group-related modifiers
-3. Existence of applicable [discounts](discounts.md)
If the base price in the specified currency is missing, the return value is `null`.
diff --git a/docs/product_catalog/prices.md b/docs/product_catalog/prices.md
index 61090938860..90315eab2d2 100644
--- a/docs/product_catalog/prices.md
+++ b/docs/product_catalog/prices.md
@@ -8,13 +8,11 @@ The price engine is responsible for calculating prices for products in the [prod
## Custom pricing
-You can set up basic price rules depending on [customer groups](customer_groups.md), or use [Discounts](discounts.md) for more control over the price reduction.
+You can set up basic price rules depending on [customer groups](customer_groups.md).
-Use the first option for basic use cases, for example to globally manage custom prices for your resellers.
+Use this option to globally manage custom prices, for example for your resellers.
Each customer group can have a default price discount that applies to all products.
-With the Discounts feature, you can create time-limited offers that apply only to specified regions, currencies, products, customers, and more.
-
### Assign prices dynamically
You could create a customer group resolver that provides custom price logic, for example, by retrieving user address from the customer profile, and assigning a customer group to the customer based on the address.
diff --git a/docs/product_catalog/product_catalog_guide.md b/docs/product_catalog/product_catalog_guide.md
index fe00bfd7778..703be82a908 100644
--- a/docs/product_catalog/product_catalog_guide.md
+++ b/docs/product_catalog/product_catalog_guide.md
@@ -86,9 +86,8 @@ Product types in [[= product_name =]] can be either virtual or physical:
- **Physical products** are tangible items that require shipping (for example: books, clothing, electronics).
- **Virtual products** are items that don't require physical delivery (for example: software licenses, e-books, online courses, digital downloads, additional warranty, tickets for an event).
-
This product type property can affect the checkout process.
-A cart of only virtual products skips the [shipping step](shipping_management.md) during checkout.
+For example, a cart of only virtual products can skip the shipping step during checkout.
To learn more about working with virtual products, see [Virtual products]([[= user_doc =]]/product_catalog/create_virtual_product/) in the User Documentation.
### Currencies
@@ -117,8 +116,6 @@ Each customer group can have a default price discount that applies to all produc
For example, you can offer a 10% discount for all products in the catalog to users who belong to the Resellers customer group.
You can also set different prices for specific products or product variants for different customer groups.
-You can extend these capabilities even further by using [Discounts](discounts_guide.md) that are available for [[= product_name_com =]].
-
### Product completeness
Created product has its own list of the tasks required for product configuration: attributes, assets, content, prices, availability, and more.
@@ -176,11 +173,6 @@ With remote PIM support, you can take advantage of the following capabilities:
Use the product information coming from another system in your marketing campaigns to promote certain products or brands.
By embedding the products within content items and landing pages, you can leverage [[= product_name =]] marketing capabilities to showcase products.
-##### Purchasing
-
-Remote PIM systems can integrate with [Commerce features](commerce.md).
-This versatility allows for a consistent and user-friendly purchasing workflow regardless of the product's origin.
-
##### Pricing, stock and availability
A product can only be ordered when it has defined [availability]([[= user_doc =]]/product_catalog/manage_availability_and_stock/), stock and [pricing information]([[= user_doc =]]/product_catalog/manage_prices/).
diff --git a/docs/product_catalog/quable/quable_api.md b/docs/product_catalog/quable/quable_api.md
index ed05d9c35d7..cad33bc9be3 100644
--- a/docs/product_catalog/quable/quable_api.md
+++ b/docs/product_catalog/quable/quable_api.md
@@ -73,5 +73,3 @@ For information stored outside of [[= pim_product_name =]], such as [product ava
// Manage prices
[[= include_file('code_samples/api/product_catalog/src/Command/ProductPriceCommand.php', 69, 75, remove_indent=True) =]]
```
-
-For advanced pricing strategies, use the [Discounts API](discounts_api.md) to specify prices for [[= pim_product_name =]]'s products.
diff --git a/docs/product_catalog/quable/quable_guide.md b/docs/product_catalog/quable/quable_guide.md
index e4af8d6f06c..dc8c3692a5b 100644
--- a/docs/product_catalog/quable/quable_guide.md
+++ b/docs/product_catalog/quable/quable_guide.md
@@ -63,7 +63,6 @@ Marketing teams can create pages and enrich content using up-to-date product inf
The integration with [[= pim_product_name =]] has the following known limitations:
-- It's not compatible with [Commerce](commerce.md) functionalities. [Carts](cart.md), [order management](order_management.md), and [shopping lists](shopping_list.md) can't be used with products coming from [[= pim_product_name =]].
- [Catalogs](product_catalog_guide.md#catalogs) can't be created from [[= pim_product_name =]] products.
- [Product assets](product_catalog_guide.md#product-assets) are not fully synchronized. Only the main product thumbnail from [[= pim_product_name =]] is used.
- [Product-level access restrictions](policies.md#products) based on product type are not supported.
diff --git a/docs/product_guides/product_guides.md b/docs/product_guides/product_guides.md
index 3f0a53f5030..4e2582c5d74 100644
--- a/docs/product_guides/product_guides.md
+++ b/docs/product_guides/product_guides.md
@@ -12,7 +12,6 @@ Discover the primary ones with the help of product guides. Condensed content all
[[= cards([
"users/user_management_guide",
"content_management/content_management_guide",
- "discounts/discounts_guide",
"content_management/rich_text/online_editor_guide",
"content_management/pages/page_builder_guide",
"content_management/forms/form_builder_guide",
@@ -20,8 +19,6 @@ Discover the primary ones with the help of product guides. Condensed content all
"customer_management/customer_portal",
"product_catalog/product_catalog_guide",
"product_catalog/quable/quable_guide",
- "commerce/shopping_list/shopping_list_guide",
- "ibexa_cloud/ibexa_cloud_guide",
"raptor_cdp/raptor_cdp_guide",
"recommendations/raptor_integration/raptor_connector_guide",
"ai/ai_actions/ai_actions_guide",
diff --git a/docs/raptor_cdp/raptor_cdp_data_customization.md b/docs/raptor_cdp/raptor_cdp_data_customization.md
index c4755bc5ee9..af390636c0e 100644
--- a/docs/raptor_cdp/raptor_cdp_data_customization.md
+++ b/docs/raptor_cdp/raptor_cdp_data_customization.md
@@ -26,6 +26,8 @@ The following example adds a custom date of birth field to the exported data:
Register your processor as a Symfony service and tag it with `ibexa.cdp.export.user.item_processor`:
``` yaml
+services:
+
App\Export\User\DateOfBirthUserItemProcessor:
parent: Ibexa\Contracts\Cdp\Export\User\AbstractUserItemProcessor
arguments:
diff --git a/docs/recommendations/raptor_integration/tracking_php_api.md b/docs/recommendations/raptor_integration/tracking_php_api.md
index 1cd07227f42..f37955cad64 100644
--- a/docs/recommendations/raptor_integration/tracking_php_api.md
+++ b/docs/recommendations/raptor_integration/tracking_php_api.md
@@ -93,5 +93,5 @@ It reacts to specific events in the application and triggers tracking logic with
[[= include_code('code_samples/recommendations/EventSubscriber.php') =]]
```
-You can also use [[= product_name =]] events, for example `CreateOrderEvent` from [Order management events](order_management_events.md).
+You can also use [[= product_name =]] events.
For more information, see [Event reference](event_reference.md).
diff --git a/docs/release_notes.md b/docs/release_notes.md
new file mode 100644
index 00000000000..f4dc31b777c
--- /dev/null
+++ b/docs/release_notes.md
@@ -0,0 +1,30 @@
+---
+description: Ibexa DXP v5.0 incorporates features brought by LTS Updates from previous versions, brings upgrades to the tech stack and improvements to developer experience.
+title: Ibexa DXP v5.0 LTS
+month_change: true
+---
+
+
+
+[[= release_notes_filters('Ibexa DXP v5.0 LTS', ['Headless', 'Experience', 'LTS Update', 'New feature', 'First release']) =]]
+
+
+
+[[% set version = 'v5.0.9' %]]
+[[% set date = '2026-07-01' %]]
+
+[[= release_note_entry_begin(
+ 'TODO: Release notes for SaaS',
+ date,
+ ['Headless', 'Experience', 'LTS Update', 'New feature']
+) =]]
+
+
+### Highlights
+
+- ASD
+- QWE
+
+[[= release_note_entry_end() =]]
+
+
diff --git a/docs/release_notes/cohesivo_v6.0_deprecations.md b/docs/release_notes/cohesivo_v6.0_deprecations.md
deleted file mode 100644
index d2a538c01b4..00000000000
--- a/docs/release_notes/cohesivo_v6.0_deprecations.md
+++ /dev/null
@@ -1,48 +0,0 @@
----
-description: Adapt your project for the Cohesivo v6.0 release.
-month_change: true
----
-
-
-
-
-# Cohesivo v6.0 renames, deprecations and removals
-
-## Cohesivo v6.0
-
-!!! note "Cohesivo v6.0 isn't released yet"
-
- This page is published ahead of the Cohesivo v6.0 release to give you time to prepare your code for the upcoming changes.
-
- As the work on Cohesivo 6.0 is in progress, this page **isn't exhaustive and will evolve with time**.
-
-As announced during Ibexa Summit 2026, [Ibexa DXP will be renamed to Cohesivo](https://www.ibexa.co/blog/redefining-the-dxp-from-execution-to-orchestration) to support the new [orchestration platform approach](https://www.ibexa.co/blog/the-orchestration-era).
-
-To learn more about the new brand, visit the [Cohesivo official site](https://cohesivo.com).
-
-To make the update process between v5 and v6 easier, there are no plans for a large-scale renaming of `Ibexa` to `Cohesivo` in the code, database, or other parts of the product.
-
-This page lists backwards compatibility breaks introduced in Cohesivo v6.0.
-
-## PHP API changes
-
-### ibexa/http-cache
-
-| Deprecated since | Entity | Change |
-| --- |---------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| N/A | `\Ibexa\HttpCache\ResponseTagger\Delegator\DispatcherTagger` | With `kernel.debug` enabled, [`DispatcherTagger`](content_aware_cache.md#dispatchertagger) will throw an exception when you pass an unsupported value instead of silently ignoring it. |
-| v5.0.7 | [`ResponseTagger::supports`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-HttpCache-ResponseTagger-ResponseTagger.html#) | Method added to the interface. All implementations must specify [the value they support for tagging](content_aware_cache.md#delegator-and-value-taggers). |
-
-### ibexa/core
-
-| Deprecated since | Entity | Change |
-| --- |-------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| N/A | [`ValidationError::getTranslatableMessage`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-FieldType-ValidationError.html#method_getTranslatableMessage) | Return type narrowed from [`Translation`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Translation.html) to [`Message`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Translation-Message.html) \| [`Plural`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Translation-Plural.html). Custom `ValidationError` implementations must update their return type. |
-
-### ibexa/messenger
-
-| Deprecated since | Entity | Change |
-| --- |------------------------------------------------------------------------------------|-----------------------------------------------------------|
-| v5.0.9 | [`\Ibexa\Contracts\Messenger\Stamp\SudoStamp`](background_tasks.md#sudostamp) | No longer attached automatically to every dispatched message. For messages that should be processed without taking permissions into account, always attach the SudoStamp manually. |
-| v5.0.9 | `\Ibexa\Bundle\Messenger\Stamp\DeduplicateStamp` | Moved to [`\Ibexa\Contracts\Messenger\Stamp\DeduplicateStamp`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Messenger-Stamp-DeduplicateStamp.html). Covered by [[[= product_name_base =]] Rector](../resources/rector.md) refactoring rules. |
-| v5.0.10 | [`\Ibexa\Contracts\Messenger\Stamp\DeduplicateStamp`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Messenger-Stamp-DeduplicateStamp.html) | Replaced in v6.0 with [`\Symfony\Component\Messenger\Stamp\DeduplicateStamp`]([[= symfony_doc =]]/messenger.html#message-deduplication). A Rector rule will be available for the Cohesivo 6.0 upgrade. Until then, keep using the deprecated `\Ibexa\Contracts\Messenger\Stamp\DeduplicateStamp`, as Ibexa DXP 5.0 doesn't handle the native Symfony stamp. |
diff --git a/docs/release_notes/ez_platform_v1.10.0.md b/docs/release_notes/ez_platform_v1.10.0.md
deleted file mode 100644
index 32d47bdf96c..00000000000
--- a/docs/release_notes/ez_platform_v1.10.0.md
+++ /dev/null
@@ -1,112 +0,0 @@
-
-
-# eZ Platform v1.10.0
-
-**The FAST TRACK v1.10.0 release of eZ Platform and eZ Platform Enterprise Edition is available as of June 28, 2017.**
-
-If you're looking for the Long Term Support (LTS) release, see [eZ Platform 1.7 release notes](ez_platform_v1.7.0_lts.md).
-
-## Notable changes since v1.9.0
-
-### eZ Platform
-
-#### Online Editor: Table editing support
-
-This release introduces the ability to add tables in the RichText editor, enabling you to list up tabular data using table headings, merged table cells and more.
-
-
-
-This is a first step. We aim to provide more in terms of table support in the editor later. For the time being images and embedding aren't supported within the table, as you won't be able to move them out or edit them. We also don't provide yet ability to style the table within the editor.
-
-#### New Design Engine
-
-This is a new way to handle design, theming and design overrides, similar to what we had in eZ Publish. It enables you to define different Themes which are collections of assets and templates. You can then assemble Themes (that can override each other) to define Designs, and eventually, assign a Design to a SiteAccess. This is a powerful concept that we aim to use in our out-of-the-box templates and demo sites. It comes especially handy when using eZ Platform for a multisite installation and willing to reuse design parts.
-
-For more information, see [Bundle documentation](https://github.com/ezsystems/ezplatform-design-engine/tree/v1.0/doc).
-
-
-
-#### API: Simplified usage with translations
-
-As part of ongoing effort to simplify everyday aspects of the API for v2, you can now simpler deal with SiteAccess languages and translations.
-
-##### Example
-
-For objects such as content, content type, field definitions and more, to get translated name, description or fields you would before this change have to do the following in PHP and Twig:
-
-**Typical use of API prior to v1.10:**
-
-``` bash
-$content = $this->contentService->loadContent(
- 42,
- $this->configResolver->getParameter('languages')
-);
-
-$name = $this->translationHelper->getTranslatedContentName($content);
-$field = $this->translationHelper->getTranslatedField($content, 'body');
-$value = $field->value;
-```
-
-As long as languages are provided to API when retrieving a given object, this can now be simplified to:
-
-**As of v1.10:**
-
-``` bash
-$content = $this->contentService->loadContent(
- 42,
- $this->configResolver->getParameter('languages')
-);
-
-$name = $content->getName();
-$value = $content->getFieldValue('body');
-```
-
-#### SOLR: Index time boosting & Improved Facets support
-
-One of the new features in 1.10 *(Solr Bundle 1.4)* is the possibility to [configure index time boosting](https://doc.ibexa.co/en/2.1/guide/solr/#boost-configuration), which enables you to properly tune the search results to be relevant for your content architecture.
-
-In addition to that, we made progress on providing native support for faceted search within eZ Platform when using the Solr Bundle. You can now use facets based on ContentTypes, Sections and Users, see [Performing a Faceted Search](https://doc.ibexa.co/en/2.2/api/public_php_api_search/#performing-a-faceted-search) page for how to use them. We plan to provide more facets natively in the coming releases.
-
-#### Cluster migration script
-
-EXPERIMENTAL FEATURE
-
-Starting with 1.10, a new command `ezplatform:io:migrate-files` has been added, allowing you to migrate files from one storage to another, for instance file system to S3, or S3 to NFS or opposite. For documentation check the [technical feature documentation](https://github.com/ezsystems/ezpublish-kernel/blob/6.7/doc/specifications/io/io_migration_script.md) for now.
-
-#### Miscellaneous
-
-- Kernel: Don't store full User object in Sessions anymore, just User Id
-
-### eZ Platform Enterprise Edition - Studio
-
-- Form deletion is managed more gracefully, including warnings and the option to download collected data before deleting a form
-
-
-
-- Schedule block logic has been updated and improved.
-
-### eZ Platform Enterprise Edition - Studio Demo
-
-- [NovaeZSEOBundle](https://github.com/Novactive/NovaeZSEOBundle/) is now included in Studio Demo. NovaeZSEOBundle includes a new field type that lets you manage your SEO strategy in very advanced and powerful ways.
-- We also improved the way we provide personalization in the site using a profiling block and letting the end user manage their preferences by themselves. In this new version, the end user, once logged on the site, can access a page where they can define their content preferences.
-
-## Full list of new features, improvements and bug fixes since v1.9.0
-
-| eZ Platform | eZ Studio |
-|-------------|-----------|
-| [List of changes for final of eZ Platform v1.10.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v1.10.0) | [List of changes for final for eZ Platform Enterprise Edition v1.10.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v1.10.0) |
-| [List of changes for rc2 of eZ Platform v1.10.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v1.10.0-rc2) | [List of changes for rc1 for eZ Platform Enterprise Edition v1.10.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v1.10.0-rc1) |
-| [List of changes for beta3 of eZ Platform v1.10.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v1.10.0-beta3) | [List of changes for beta1 of eZ Platform Enterprise Edition v1.10.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v1.10.0-beta1) |
-
-### Acknowledgements
-
-Kudos to [@emodric](https://twitter.com/emodric) for the Tags bundle, [@pspanja](https://twitter.com/pspanja) for the work Solr index-time boosting, [@plopix](https://twitter.com/Plopix) for the NovaeZSEOBundle, [@jvieilledent](https://twitter.com/jvieilledent) for the initial work on the design engine and to all others who contributed bug reports, feedback and comments that made this release possible.
-
-### Download
-
-#### eZ Enterprise
-
-- [Customers: eZ Enterprise subscription (BUL License)](https://support.ibexa.co/)
-- Partners: Test & Trial software access (TTL License)
-
-If you would like to become familiar with the products, [request a demo](https://www.ibexa.co/forms/request-a-demo).
diff --git a/docs/release_notes/ez_platform_v1.11.0.md b/docs/release_notes/ez_platform_v1.11.0.md
deleted file mode 100644
index caa6f5ec0df..00000000000
--- a/docs/release_notes/ez_platform_v1.11.0.md
+++ /dev/null
@@ -1,94 +0,0 @@
-
-
-# eZ Platform v1.11.0
-
-**The FAST TRACK v1.11.0 release of eZ Platform and eZ Platform Enterprise Edition is available as of August 24, 2017.**
-
-If you're looking for the Long Term Support (LTS) release, see [eZ Platform 1.7 release notes](ez_platform_v1.7.0_lts.md).
-
-## Notable changes since v1.10.0
-
-### eZ Platform
-
-#### Improved way of writing field type gateways
-
-You now have access to the Doctrine connection instead of
-the Zeta Components Database connection-like object which has been exposed to field types until now.
-The former way will be removed in a future major version.
-
-#### Content type limitation for Relation (single) field
-
-You can now specify a content type limitation for the Relation field,
-just like with the Relation List field. This enables you to limit what kind of relations Editors can select also on singular relation fields.
-
-
-
-This has been made possible by initial legacy contribution from [@peterkeung](https://github.com/peterkeung), and [@slaci](https://github.com/slaci) who ported this feature over to eZ Platform so that both could go in.
-
-#### API endpoint for removing translations
-
-You can now use an API endpoint to remove a given translation completely from a content item.
-
-### eZ Platform Enterprise Edition
-
-#### Collection block
-
-New Collection block is available in the landing page editor.
-It enables you to manually select a set of content items to be displayed.
-
-
-
-!!! note
-
- To enable adding content to a Collection block in a clean installation,
- you need to configure the views for the block and define which content types can be embedded in it.
-
- For more information and an example, see [block templates](https://doc.ibexa.co/en/3.3/guide/page/page_blocks/#block-templates).
-
-#### RecommendationBundle adapted for YooChoose v2
-
-In the RecommendationBundle, the id generation of a visitor was changed to use a persistent cookie value
-instead of a new one each time a visitor arrives at the site.
-
-Fetching recommendations was also refactored to use the v2 of the Recommendation API.
-With this step the *clickrecommended* event now includes detailed feedback information about how recommendations were generated.
-This is very important for the analysis of statistics to measure the performance of recommendations.
-
-#### Official Enterprise Support for Legacy Bridge
-
-Starting with this release we are going to officially support an alternative *(and perhaps simpler)* way to gradually migrate
-from eZ Publish to eZ Platform. From now on, also as an Enterprise user, you can use **Legacy Bridge**.
-
-There is a corresponding new eZ Publish legacy release called 2017.08 available for this, for both community and enterprise users.
-Unlike eZ Publish 5.4LTS, this should be seen as a Fast Track release of legacy: it's tailored for those that want
-a more modern eZ Platform and Symfony version to take advantage of all new features of the platform and facilitate
-the migration. More info on this in a separate blog post soon. As with eZ Platform itself, Enterprise users will receive the same
-full support, maintenance, and priority security patch handling as they're used to for this setup.
-
-!!! note
-
- Not supported for clean/new installs, intended for use with migrations. The Legacy Bridge integration doesn't have same performance,
- scalability or integrated experience as pure Platform setup. There are known edge cases where for instance cache or search index
- cannot always be immediately updated across the two systems using the bridge, which is one of the many reasons why we recommend
- a pure Platform setup where that is possible.
-
-## Full list of new features, improvements and bug fixes since v1.10.0
-
-| eZ Platform | eZ Enterprise |
-|--------------|------------|
-| [List of changes for final of eZ Platform v1.11.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v1.11.0) | [List of changes for final for eZ Platform Enterprise Edition v1.11.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v1.11.0) |
-| [List of changes for rc1 of eZ Platform v1.11.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v1.11.0-rc1) | [List of changes for rc1 for eZ Platform Enterprise Edition v1.11.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v1.11.0-rc1) |
-| [List of changes for beta1 of eZ Platform v1.11.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v1.11.0-beta1) | [List of changes for beta1 of eZ Platform Enterprise Edition v1.11.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v1.11.0-beta1) |
-
-### Download
-
-#### eZ Enterprise
-
-- [Customers: eZ Enterprise subscription (BUL License)](https://support.ibexa.co/)
-- Partners: Test & Trial software access (TTL License)
-
-If you would like to become familiar with the products, [request a demo](https://www.ibexa.co/forms/request-a-demo).
-
-### Updating
-
-To update the product, follow the [updating guide](https://doc.ibexa.co/en/latest/updating/updating/).
diff --git a/docs/release_notes/ez_platform_v1.12.0.md b/docs/release_notes/ez_platform_v1.12.0.md
deleted file mode 100644
index 7549985d21e..00000000000
--- a/docs/release_notes/ez_platform_v1.12.0.md
+++ /dev/null
@@ -1,91 +0,0 @@
-
-
-# eZ Platform v1.12.0
-
-**The FAST TRACK v1.12.0 release of eZ Platform and eZ Platform Enterprise Edition is available as of October 31, 2017.**
-
-If you're looking for the Long Term Support (LTS) release, see [eZ Platform 1.7 release notes](ez_platform_v1.7.0_lts.md).
-
-## Notable changes since v1.11.0
-
-### New Options in the Rich Text editor
-
-The Rich Text editor now enables you to add both ordered and unordered lists.
-
-You also have new options to format your text using subscript, superscript, quote and strikethrough.
-
-
-
-### Improved full text search capabilities
-
-Added support for full-text search query syntax in Solr.
-
-### Deleting translations
-
-You can now remove translations from content item Versions through the PHP API.
-
-For more information, see the section on [deleting translations](https://doc.ibexa.co/en/5.0/content_management/content_api/creating_content/#deleting-a-translation).
-
-You also have a new endpoint available for deleting a single Version.
-
-### Improved Security for password storage
-
-1.12 introduces and enables by default more secure user passwords hashing using bcrypt,
-and is future-proofed for new hashing formats being added to PHP, like Argon2i coming with PHP 7.2.
-
-This feature is added both in eZ Platform and the accompanying eZ Publish legacy 2017.10 release for projects looking to migrate to a newer version of Platform and take advantage of the new features.
-
-### Improved Varnish performance
-
-This release switches default HTTPCache usage to use ezplatform-http-cache package, which uses Varnish xkey allowing: soft purge, better cache clearing logic and longer ttl.
-
-For Varnish users be aware thus change implies new VCL and requirement for varnish-moduels package, see [below](#updating).
-
-## Full list of new features, improvements and bug fixes since v1.11.0
-
-| eZ Platform | eZ Enterprise |
-|--------------|------------|
-| [List of changes for final of eZ Platform v1.12.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v1.12.0) | [List of changes for final for eZ Platform Enterprise Edition v1.12.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v1.12.0) |
-| [List of changes for rc1 of eZ Platform v1.12.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v1.12.0-rc1) | [List of changes for rc1 for eZ Platform Enterprise Edition v1.12.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v1.12.0-rc1) |
-| [List of changes for beta2 of eZ Platform v1.12.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v1.12.0-beta2) | [List of changes for beta2 of eZ Platform Enterprise Edition v1.12.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v1.12.0-beta2) |
-
-### Download
-
-#### eZ Enterprise
-
-- [Customers: eZ Enterprise subscription (BUL License)](https://support.ibexa.co/)
-- Partners: Test & Trial software access (TTL License)
-
-If you would like to become familiar with the products, [request a demo](https://www.ibexa.co/forms/request-a-demo).
-
-### Updating
-
-To update to this version, follow the [updating guide](https://doc.ibexa.co/en/latest/updating/updating/).
-
-!!! caution "BC: Change for Varnish users"
-
- This release enables the [ezplatform-http-cache](https://github.com/ezsystems/ezplatform-http-cache) Bundle by default as it has a more future-proof approach for HttpCache:
- - Cache tagging is more reliable at clearing all affected cache on, for instance, subtree operations
- - More performant using [xkey](https://github.com/varnish/varnish-modules/blob/varnish-modules-0.10.2/docs/vmod_xkey.rst) _("Surrogate Key")_ and soft purging, over BAN and growing ban list
-
- This means:
- - There is a new VCL
- - Requires Varnish 4.1+ with `varnish-modules` _(incl. xkey)_, or Varnish Plus where it's built in
-
- For more information, see [doc/varnish/varnish.md](https://github.com/ezsystems/ezplatform/blob/master/doc/varnish/varnish.md).
-
- #### How to still use the old VCL and the old X-Location-Id headers
-
- In all 1.x releases you're still able to revert this and use the old deprecated system if you need to. To do that:
- - Keep using the VCL for BAN
- - Disable _(comment out)_ `EzSystemsPlatformHttpCacheBundle` in `app/AppKernel.php`
- - Change `app/AppCache.php` back to extend `eZ\Bundle\EzPublishCoreBundle\HttpCache`
-
- That's it, other changes added in 1.12 like increased cache ttl and `fos_http_cache` cache control rules for error pages should work also with BAN setup, and are thus optional.
-
-!!! note "React"
-
- This release changes the way of loading React to avoid a case where it was loaded twice and caused errors.
- Take this into consideration if you user React in your own implementation.
-
- For more information, see [this PR](https://github.com/ezsystems/PlatformUIBundle/pull/906).
diff --git a/docs/release_notes/ez_platform_v1.13.0_lts.md b/docs/release_notes/ez_platform_v1.13.0_lts.md
deleted file mode 100644
index 00cb0562907..00000000000
--- a/docs/release_notes/ez_platform_v1.13.0_lts.md
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-# eZ Platform v1.13.0
-
-**The Long Term Support v1.13.0 release of eZ Platform and eZ Platform Enterprise Edition is available as of December 22, 2017.**
-
-!!! note "v2 release"
-
- Parallel to this v1.13.0 LTS version we are releasing a fast-track version in a new architecture:
- [v2.0.0](ez_platform_v2.0.0.md).
-
-## Notable changes since v1.12.0
-
-### Link manager
-
-The new Link manager enables you to manage all links to external websites that are embedded in the whole site,
-whether in Rich Text or in URL Field.
-You can edit a link in the manager and it's updated automatically in all content items.
-
-
-
-### Copying subtrees in the back office
-
-You can now copy a content item with all of its sub-items in the back office.
-
-The maximum number of content items that can be copied this way can be set in configuration, see [Copy subtree limit](https://doc.ibexa.co/en/5.0/administration/back_office/back_office_configuration/#copy-subtree-limit).
-
-
-
-### REST API improvements
-
-- Added a REST endpoint for deleting a translation from all versions of a content item.
-- Added s a `fieldTypeIdentifier` field to the REST response for Version, which provides the field type.
-
-### ezplatform-http-cache extensibility
-
-Made ezplatform-http-cache extensible in third party bundles.
-
-### Fastly
-
-You can [serve Varnish through Fastly](https://doc.ibexa.co/en/2.2/guide/http_cache/#serving-varnish-through-fastly).
-
-## Full list of new features, improvements and bug fixes since v1.12.0
-
-| eZ Platform | eZ Enterprise |
-|--------------|------------|
-| [List of changes for final of eZ Platform v1.13.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v1.13.0) | [List of changes for final for eZ Platform Enterprise Edition v1.13.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v1.13.0) |
-| [List of changes for rc1 of eZ Platform v1.13.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v1.13.0-rc1) | [List of changes for rc1 for eZ Platform Enterprise Edition v1.13.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v1.13.0-rc1) |
-| [List of changes for beta2 of eZ Platform v1.13.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v1.13.0-beta2) | [List of changes for beta2 of eZ Platform Enterprise Edition v1.13.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v1.13.0-beta2) |
-
-### Download
-
-#### eZ Enterprise
-
-- [Customers: eZ Enterprise subscription (BUL License)](https://support.ibexa.co/)
-- Partners: Test & Trial software access (TTL License)
-
-If you would like to become familiar with the products, [request a demo](https://www.ibexa.co/forms/request-a-demo).
-
-### Updating
-
-To update the product, follow the [updating guide](https://doc.ibexa.co/en/latest/updating/updating/).
diff --git a/docs/release_notes/ez_platform_v1.7.0_lts.md b/docs/release_notes/ez_platform_v1.7.0_lts.md
deleted file mode 100644
index e5b4d212b89..00000000000
--- a/docs/release_notes/ez_platform_v1.7.0_lts.md
+++ /dev/null
@@ -1,102 +0,0 @@
-
-
-# eZ Platform v1.7.0 LTS
-
-**The v1.7.0 release of eZ Platform and eZ Platform Enterprise Edition is available as of December 15, 2016.**
-
-LTS Info
-
-eZ Platform Enterprise Edition v1.7.0 is the first version of the 2017 Long Term Support ("LTS") release which is maintained and supported until December 2019.
-
-As of v1.7.0, PHP requirements have been updated to remove PHP 5.5, leaving PHP 5.6 and 7.0 as supported PHP versions.
-
-With the LTS release, the new product naming takes effect: "eZ Platform" for the Open Source edition, and "eZ Platform Enterprise Edition" for subscribers.
-
-## Notable Changes Since v1.6.0
-
-### eZ Platform (Open Source)
-
-- **i18n! Internationalization of the eZ Platform** User Interface is now possible. The new system selects the language to use based on the browser settings of the end user.
-The system makes it possible to create translations for eZ Platform UI.
-Studio internationalization and translations ready to use are shipped in further releases.
-Community members are more than welcome to contribute to the translation process.
-
-
-
-
-
-- **Universal Discovery Widget** ("UDW") provides a range of small improvements. The most noticeable one is the preview of content which is more usable and also provides a way to get a full preview of the content object.
-
-
-
-- The **Admin** panel now provides a way to get a clean **digest view of content types** configured in the system, with the ability to clearly get access to properties and field definitions.
-
-
-
-- The online editor also brings a range of improvements that improve the editorial experience. The most noticeable one is to offer the possibility to switch from Headings to Paragraph styles for the same element.
-
-#### Notable technical improvements
-
-- Search:
- - Solr Search Engine: Plugins, extend the Solr index with custom data on Content, Translation and Location block level
- - For when you need to extend the index with additional data not applicable for FieldType custom fields feature
- - *[See Solr Bundle documentation for more info](https://doc.ibexa.co/en/2.5/guide/search/solr/)*
- - Solr Search Engine: Support for FieldRelation on location search
- - Legacy Search Engine: Improve word boundaries detection
- - ezplatform:reindex added, a generic command for reindexing search index on the SiteAccess configured search engine
-- Extensibility:
- - QueryType's now support using alias when being used as service so you can define several services with same QueryType class
- - Example: Generic location child QueryType being reused several times for specific services for article or blog post listings
-- API:
- - New method:`Location->getSortClauses()` to get Sort Clauses based on what kind of sorting has been set on the Location
- - Add Content Version archives limit by configuration & enforce on publish
-- Debug:
- - ez-support-tools:dump-info command now able to dump system info in several formats, and default is now json
- - *Making it more useful for attaching system info when reporting issues*
- - Add SiteAccess collector to debug toolbar
- - Make IO exceptions more user friendly
- - Make it possible to retrieve original exception when repo->commit() fails
-
-*For more fixes and improvements scroll down for full change log.*
-
-### eZ Platform Enterprise Edition (with Studio)
-
-- You can now use eZ Personalization service to create highly personalized landing pages.
-The Studio **Personalization Block** available out of the box lets the editor create a block that renders a list of content items personalized to each and every visitor.
-The interface lets the editor decide which of the Personalization scenarios configured in the eZ Personalization back end, and also the template for rendering, should be used.
-
-- You can now take advantage of the **Date-Based Publishing** feature – when editing a draft, instead of publishing the content immediately you can select the date and time at which it's automatically published.
-All your content scheduled to be published are accessible in a dedicated widget on the dashboard.
-
-
-
-- Create forms in your landing page with the **Form Builder**.
-A special Form Block allows you to add forms with different types of fields to the landing page.
-This system has been designed to be extended, so that you can create your own form fields.
-The system also provide an interface to access the data that has been collected, and download it as CSV files.
-
-
-
-Submitted results can be previewed in the UI or downloaded in a CSV file, and a designated person is notified of submissions by email.
-
-### Updated Demo Sites
-
-The Enterprise demo site has been significantly improved featuring a new **Product content type** that is used to show products in the Tasteful Planet demo.
-The product we used are meals that, in a non-demo ideal world, would be available to order and consume.
-This ordering part isn't in the demo, nevertheless, the content looks really yummy...
-Other improvements includes the good setup of all content type field categories and the demonstration of basic SEO field types. Demo content itself has also been upgraded with more content to better demonstrate the capabilities.
-
-
-
-### Download
-
-#### eZ Enterprise
-
-- [Customers: eZ Enterprise subscription (BUL License)](https://support.ibexa.co/)
-- Partners: Test & Trial software access (TTL License)
-
-If you would like to become familiar with the products, [request a demo](https://www.ibexa.co/forms/request-a-demo).
-
-### Updating
-
-To update the product, follow the [updating guide](https://doc.ibexa.co/en/latest/updating/updating/).
diff --git a/docs/release_notes/ez_platform_v1.8.0.md b/docs/release_notes/ez_platform_v1.8.0.md
deleted file mode 100644
index 69f5cd77ff1..00000000000
--- a/docs/release_notes/ez_platform_v1.8.0.md
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-# eZ Platform v1.8.0
-
-**The FAST TRACK v1.8.0 release of eZ Platform and eZ Platform Enterprise Edition is available as of February 16, 2017.**
-
-If you're looking for the Long Term Support (LTS) release, see [eZ Platform 1.7 release notes](ez_platform_v1.7.0_lts.md).
-
-## Notable Changes Since v1.7.0 LTS
-
-### eZ Platform
-
-#### User Interface
-
-- In Universal Discovery Widget (UDW) the browse view now uses a completely new browser widget, which replaces Treeview. This solves limitations on how many items you can browse for, and provides a more intuitive user experience.
-
-
-
-- Improvements in the Online Editor:
- - You now have the ability to rearrange elements in the editor by moving them up and down.
- - You can now add links to internal content items in the Online Editor, decide in which tab the link should open, and set link title:
-- Improvements to the Sub-Items view of a content item: You can now sort content items by clicking column headings
-
-
-
-- The main titles of the ContentTypeView now expand and retract with an accordion function
-- Updated and added icons for the Admin Interface
-- The whole interface of PlatformUI is now translatable using Crowdin, including in-context translation where you can navigate the interface while translating. A glossary has been established to aid in unified usage of terminology throughout. [Contributions welcome](https://crowdin.com/project/ezplatform)!
-
-#### Under the Hood
-
-- New opt-in approach to HttpCache to improve usability and performance by means of:
- - Cache multi-tagging: allowing you to tag pages with, for example, path, location, type, or parent, so the repository can clear cache in a more targeted, accurate, and flexible way, getting rid of any "clear all" situations on complex operations.
- - For Varnish this uses [xkey](https://github.com/varnish/varnish-modules/blob/varnish-modules-0.10.2/docs/vmod_xkey.rst) instead of BAN, enabling greater performance by allowing you to control grace time.
- - This also places HttpCache in a separate repo, allowing it to grow independently: see
-- New `content/publish` policy to be able to configure `content/edit` rights independently from publish rights
-- Community-provided translations of the user interface may be imported individually to conserve resources
-- Replaced deprecated templating helper assets with assets packages service
-- Localization of handlebar templates
-- Also part of v1.7.1 from the end of January:
- - Solr: Solving last issues in UI hindering relative ranking of search results from working properly
- - API: Respect `defaultAlwaysAvailable` setting on `newContentCreateStruct` solving issues with for instance Kaliop Migrations bundle use
- - Landing pages: Better support for wider range of multi-site setups
- - Online Editor: Ability to change a paragraph to header and back
-
- *For the complete list of fixes and improvements, see the GitHub release notes: *
-
-### eZ Platform Enterprise Edition
-
-#### Studio
-
-- New fields are available for the Form Builder:
- - URL
- - Date
- - Checkbox
- - Radio
- - Dropdown
- - Captcha
- - File Upload
-
-
-
-#### Under the Hood
-
-- StudioUI is now fully ready for Internationalization
-
-### Updated eZ Platform/EE Demo Distributions
-
-- You can now search and filter products in the Product Page of the EE Demo distribution:
-
-
-
-## Full list of new features, improvements and bug fixes since v1.7.0 LTS
-
-| eZ Platform | eZ Studio |
-|--------------|------------|
-| [List of changes for final of eZ Platform v1.8.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v1.8.0) | [List of changes for final for eZ Platform Enterprise Edition v1.8.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v1.8.0) |
-| [List of changes for rc1 of eZ Platform v1.8.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v1.8.0-rc1) | [List of changes for rc1 for eZ Platform Enterprise Edition v1.8.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v1.8.0-rc1) |
-| [List of changes for beta1 of eZ Platform v1.8.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v1.8.0-beta1) | [List of changes for beta2 of eZ Platform Enterprise Edition v1.8.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v1.8.0-beta2) |
-
-### Download
-
-#### eZ Enterprise
-
-- [Customers: eZ Enterprise subscription (BUL License)](https://support.ibexa.co/)
-- Partners: Test & Trial software access (TTL License)
-
-If you would like to become familiar with the products, [request a demo](https://www.ibexa.co/forms/request-a-demo).
-
-### Updating
-
-To update the product, follow the [updating guide](https://doc.ibexa.co/en/latest/updating/updating/).
diff --git a/docs/release_notes/ez_platform_v1.9.0.md b/docs/release_notes/ez_platform_v1.9.0.md
deleted file mode 100644
index 8d7ddac93da..00000000000
--- a/docs/release_notes/ez_platform_v1.9.0.md
+++ /dev/null
@@ -1,82 +0,0 @@
-
-
-# eZ Platform v1.9.0
-
-**The FAST TRACK v1.9.0 release of eZ Platform and eZ Platform Enterprise Edition is available as of April 19, 2017.**
-
-If you're looking for the Long Term Support (LTS) release, see [eZ Platform 1.7 release notes](ez_platform_v1.7.0_lts.md).
-
-## Notable changes since v1.8.0
-
-### eZ Platform
-
-#### Multifile upload
-
-You can now create collections of content quickly: upload multiple files in bulk and they're imported directly into the content repository.
-The files are automatically imported as content using the content type that matches their MIME type.
-Go to the content view, drag and drop or select multiple files in the sub-items area and you get direct access for further editing.
-As ever, this solution can be customized so that you create your own matching rules.
-
-
-
-#### Content browser
-
-In version 1.8 we introduced a new Content Browser in the Universal Discovery Widget (UDW).
-This Content Browser is now used to browse content everywhere, also when accessing the content tree through the left pane in Platform UI.
-This allows users to reach the entire repository from this toolbar (which was previously limited in terms of number of items per level), it also provides a much more consistent user experience.
-To reflect this change, the content tree button has been renamed **Content browse**.
-
-
-
-#### Miscellaneous
-
-- The **Details** tab in content view now provides information about the Section the content item belongs to.
-
-
-
-- You can now edit a content item directly from its parent's Sub-items table, and sort the table:
-
-
-
-- You can now restore from Trash content whose original Location has been deleted.
-- Pasted thead/tfood tags are now kept in RichText field type, and its Online Editor
-- Solr 6 is now supported in [Solr Bundle](https://doc.ibexa.co/en/2.2/guide/solr/)
-
-### eZ Platform Enterprise Edition - Studio
-
-- It's now possible to configure landing page blocks used by the landing page editor in a simpler way. The configuration is done in a YAML file
-- *..lots of other bug fixes and smaller improvements..*
-
-### eZ Platform Enterprise Edition - Studio Demo
-
-#### Tag and taxonomy management
-
-The eZ Enterprise Demo now uses the [Netgen Tags bundle](https://github.com/netgen/TagsBundle). This bundle was recently ported to eZ Platform and provides a powerful, solid and user-friendly way to categorize content using tags. The solution lets editors and administrators define their taxonomies in a dedicated interface. These taxonomies that are immediately available for editors working on content who want to categorize any content types.
-
-
-
-#### Miscellaneous
-
-- As an editor, I want to personalize content based on user persona
-- As an editor, I want to embed a video
-
-## Full list of new features, improvements and bug fixes since v1.8.0
-
-| eZ Platform | eZ Studio |
-|--------------|------------|
-| [List of changes for final of eZ Platform v1.9.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v1.9.0) | [List of changes for final for eZ Platform Enterprise Edition v1.9.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v1.9.0) |
-| [List of changes for rc1 of eZ Platform v1.9.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v1.9.0-rc1) | [List of changes for rc1 for eZ Platform Enterprise Edition v1.9.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v1.9.0-rc1) |
-| [List of changes for beta2 of eZ Platform v1.9.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v1.9.0-beta2) | [List of changes for beta1 of eZ Platform Enterprise Edition v1.9.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v1.9.0-beta1) |
-
-### Download
-
-#### eZ Enterprise
-
-- [Customers: eZ Enterprise subscription (BUL License)](https://support.ibexa.co/)
-- Partners: Test & Trial software access (TTL License)
-
-If you would like to become familiar with the products, [request a demo](https://www.ibexa.co/forms/request-a-demo).
-
-### Updating
-
-To update the product, follow the [updating guide](https://doc.ibexa.co/en/latest/updating/updating/).
diff --git a/docs/release_notes/ez_platform_v2.0.0.md b/docs/release_notes/ez_platform_v2.0.0.md
deleted file mode 100644
index ab6e8b66939..00000000000
--- a/docs/release_notes/ez_platform_v2.0.0.md
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-# eZ Platform v2.0.0
-
-**Version number**: v2.0.0
-
-**Release date**: December 22, 2017
-
-**Release type**: Fast Track
-
-!!! note "LTS release"
-
- Parallel to this v2.0.0 version we are releasing a Long Term Support (LTS) version based on 1.x:
- [v1.13.0](ez_platform_v1.13.0_lts.md).
-
-## Notable changes
-
-eZ Platform v2.0.0 introduces significant changes to the architecture, especially to the back-office interface.
-
-### Symfony 3
-
-eZ Platform has become a pure Symfony application, based on Symfony 3, which brings with it many enhancements.
-
-!!! note
-
- The move to [Symfony 3](https://symfony.com/releases/3.4) causes some changes, for example to the project's directory structure.
-
- Among others, the `var` directory now contains cache and logs.
- The `bin` directory is now used to call the `console` command, so use `bin/console` instead of `app/console`.
-
-### Back-office interface
-
-The back-office interface no longer uses YUI, and is instead based on React components and Bootstrap, which makes it easier to extend.
-Explore the Extending section in the menu to learn how to extend the new version of the UI.
-
-The features of eZ Platform remain the same as in 1.x versions. However, the look of the interface has changed significantly.
-
-
-
-### Studio
-
-The StudioUI still uses the 1.x interface. It will be rewritten to the new architecture in an upcoming version.
-
-### Changed requirements
-
-eZ Platform v2.0.0 requires PHP version 7.1, instead of 5.6, as before. Together with improved architecture, this ensures that the application can work up to several times more quickly than before.
-
-## Installation
-
-[Installation guide](https://doc.ibexa.co/en/2.5/getting_started/install_ez_platform/)
-
-[Technical requirements](https://doc.ibexa.co/en/2.5/getting_started/requirements/)
diff --git a/docs/release_notes/ez_platform_v2.1.0.md b/docs/release_notes/ez_platform_v2.1.0.md
deleted file mode 100644
index 4b7ced828ac..00000000000
--- a/docs/release_notes/ez_platform_v2.1.0.md
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
-# eZ Platform v2.1.0
-
-**Version number**: v2.1.0
-
-**Release date**: March 27, 2018
-
-**Release type**: Fast Track
-
-## Notable changes
-
-### Custom Tags
-
-You can now add custom tags to RichText fields.
-
-Custom tags enable you to extend the menu of available elements when editing a RichText field with the Online Editor.
-
-For more information, see [Custom tags](https://doc.ibexa.co/en/2.5/guide/extending/extending_online_editor/#custom-tags).
-
-### Object states
-
-Object states enable you to create sets of custom states and then assign them to Content.
-
-
-
-Object states can be used in conjunction with [permissions](https://doc.ibexa.co/en/2.5/guide/limitation_reference/#state-limitation).
-
-### Content on the fly
-
-Content on the fly enables you to create new Content anywhere in the application from the Universal Discovery widget.
-
-
-
-### URL alias management
-
-You can now add custom URL aliases to content items from the URL tab. Aliases can be set per language of the content item.
-
-
-
-### REST: GET Location that matches URL alias
-
-You can now translate URL aliases into Locations with `urlAlias` parameter provided. When user provides parameter in URL, Location with given URL Alias is returned via `GET /content/locations`.
-
-### Password management
-
-You can now change your password, or request a new one if you forgot it.
-
-
-
-!!! caution
-
- The reaction time when requesting a reset of the password varies depending on whether an account with the provided email exists in the database or not.
- This could be misused to confirm existing email addresses.
- To avoid this, set Swift Mailer to `spool` mode.
-
-### Simplified filtered search
-
-During search you can now filter the results by content type, Section, Modified and Created dates.
-
-
-
-### REST: search with FieldCriterion
-
-You can now perform REST search via `POST /views` using custom `FieldCriterion`. This allows you to build custom content logic queries with nested logical operators OR/AND/NOT.
-
-### Other UI improvements
-
-- When accessing the back office from a link to a specific content item, after logging in you're now redirected to the proper content view.
-- In edit mode you can now preview content as it looks in any SiteAccess it's available in.
-- When you start editing a content item that already has an open draft, you can see a draft conflict screen:
-
-
-
-## Full list of new features, improvements and bug fixes since v2.0.0
-
-| eZ Platform | eZ Enterprise |
-|--------------|------------|
-| [List of changes for final of eZ Platform v2.1.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v2.1.0) | [List of changes for final for eZ Platform Enterprise Edition v2.1.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v2.1.0) |
-| [List of changes for rc1 of eZ Platform v2.1.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v2.1.0-rc1) | [List of changes for rc1 for eZ Platform Enterprise Edition v2.1.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v2.1.0-rc1) |
-| [List of changes for beta1 of eZ Platform v2.1.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v2.1.0-beta1) | [List of changes for beta1 of eZ Platform Enterprise Edition v2.1.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v2.1.0-beta1) |
-
-## Installation
-
-[Installation guide](https://doc.ibexa.co/en/2.5/getting_started/install_ez_platform/)
-
-[Technical requirements](https://doc.ibexa.co/en/2.5/getting_started/requirements/)
diff --git a/docs/release_notes/ez_platform_v2.2.0.md b/docs/release_notes/ez_platform_v2.2.0.md
deleted file mode 100644
index 368a5052abd..00000000000
--- a/docs/release_notes/ez_platform_v2.2.0.md
+++ /dev/null
@@ -1,138 +0,0 @@
-
-
-# eZ Platform v2.2.0
-
-**Version number**: v2.2.0
-
-**Release date**: June 29, 2018
-
-**Release type**: Fast Track
-
-## Notable changes
-
-### Page Builder
-
-This version introduces the **Page Builder** which replaces the landing page editor from earlier versions.
-
-
-
-!!! note
-
- The Page Builder doesn't offer all blocks that landing page editor did.
- The removed blocks include Schedule and Form blocks.
- They will be included again in a future release.
-
- The Places Page Builder block has been removed from the clean installation and will only be available in the demo out of the box.
- If you had been using this block in your site, re-apply its configuration based on [the demo](https://github.com/ezsystems/ezplatform-ee-demo/blob/2.2/app/config/blocks.yml).
-
-#### Modifying the Page content type
-
-You can edit the new Page content type by adding Fields and create new content types with the Page field type.
-
-
-
-#### Page block design
-
-In the Page block config you can now specify the CSS class with its own style for the specific block:
-
-
-
-!!! caution "Updating to 2.2"
-
- Refer to [Updating eZ Platform](https://doc.ibexa.co/en/2.2/releases/updating_ez_platform/) for a database update script.
-
- To update to 2.2 with existing Content you need a [dedicated script for converting the landing page into the new Page](https://doc.ibexa.co/en/2.2/releases/updating_ez_platform/#migrate-landing-pages).
-
-### Bookmarks
-
-Bookmark service allows you to create bookmarks for Locations by selecting a star located next to the content type name as shown in the screenshot below. Each Location can only be bookmarked once, multiple bookmarks on one Location cause an error.
-
-
-
-You can find the list of all bookmarks in *Browse content* section. There, you can manage bookmarks by deleting them or by checking if specific Location has been bookmarked.
-
-### Image placeholders
-
-[Placeholder generator](https://doc.ibexa.co/en/2.5/guide/images/#setting-placeholder-generator) enables you to replace any missing image with downloaded or generated image placeholder. It can be used when you're working on an existing database and you're not able to download uploaded images to your local development environment because of their large size.
-
-
-
-### Standard design
-
-eZ Platform now comes with two designs that use the [design engine](https://doc.ibexa.co/en/2.5/guide/design_engine/): `standard` for content view and `admin` for the back office.
-For more information, see [default designs](https://doc.ibexa.co/en/2.5/guide/design_engine/#default-designs).
-
-!!! caution
-
- If you encounter problems during upgrading, disable the override
- by setting `ez_platform_standard_design.override_kernel_templates` to `false`.
-
-### Previewing user and user group permissions
-
-When viewing user or user group content items you can now preview what permissions are assigned to them.
-
-
-
-You can also [select which content types are treated the same way as user of user group](https://doc.ibexa.co/en/2.5/guide/config_repository/#user-identifiers) for these purposes.
-
-### Change from UTF8 to UTF8MB4
-
-Database charset is changed from UTF8 to UTF8MB4, to support 4-byte characters.
-
-!!! caution
-
- To cover this change when upgrading, follow the instructions in the [update guide](https://doc.ibexa.co/en/2.5/update_and_migration/from_1.x_2.x/update_db_to_2.5/#a-update-to-v22).
-
-### URL generation pattern
-
-You can now select the pattern that is used to generate URL patterns.
-
-For more information about the available settings, see [URL alias patterns](https://doc.ibexa.co/en/2.5/guide/url_management/#url-alias-patterns).
-
-!!! caution "Default URL generation pattern"
-
- The default URL generation pattern changes from `urlalias` to `urlalias_lowercase`.
- This change only applies to new Content.
- Pay attention to the new `url_alias.slug_converter.transformation` setting in the meta-repository when updating your installation.
-
-### Choosing installation types
-
-Installation types used with the `ezplatform:install` command are now more consistent:
-
-- `ezplatform-clean`
-- `ezplatform-demo`
-- `ezplatform-ee-clean`
-- `ezplatform-ee-demo`
-
-You can also use the new `composer ezplatform-install` command which automatically chooses a correct installation type for the given meta-repository.
-
-## API changes
-
-### Notifications
-
-Notification Bundle is now moved into CoreBundle of [EzPublishKernel](https://github.com/ezsystems/ezpublish-kernel). This allows whole community to get access to eZ notification system.
-
-### Bookmarks
-
-New Bookmark service had been added. Bookmark operations are now available via the REST API.
-
-### Simplified use of Content and languages in API
-
-This release introduces a few notable simplifications to API use. Here are some highlights:
-
-- [Location object now gives access to Content](https://doc.ibexa.co/en/2.5/api/public_php_api_browsing/#getting-content-from-a-location)
-- [Optional SiteAccessAware Repository](https://doc.ibexa.co/en/2.5/api/public_php_api_browsing/#siteaccess-aware-repository)
-
-## Full list of new features, improvements and bug fixes since v2.1.0
-
-| eZ Platform | eZ Enterprise |
-|--------------|------------|
-| [List of changes for final of eZ Platform v2.2.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v2.2.0) | [List of changes for final for eZ Platform Enterprise Edition v2.2.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v2.2.0) |
-| [List of changes for rc1 of eZ Platform v2.2.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v2.2.0-rc1) | [List of changes for rc1 for eZ Platform Enterprise Edition v2.2.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v2.2.0-rc1) |
-| [List of changes for beta1 of eZ Platform v2.2.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v2.2.0-beta1) | [List of changes for beta1 of eZ Platform Enterprise Edition v2.2.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v2.2.0-beta1) |
-
-## Installation
-
-[Installation guide](https://doc.ibexa.co/en/2.5/getting_started/install_ez_platform/)
-
-[Technical requirements](https://doc.ibexa.co/en/2.5/getting_started/requirements/)
diff --git a/docs/release_notes/ez_platform_v2.3.md b/docs/release_notes/ez_platform_v2.3.md
deleted file mode 100644
index 7b222674c25..00000000000
--- a/docs/release_notes/ez_platform_v2.3.md
+++ /dev/null
@@ -1,119 +0,0 @@
-
-
-# eZ Platform v2.3
-
-**Version number**: v2.3
-
-**Release date**: October 5, 2018
-
-**Release type**: Fast Track
-
-## Notable changes
-
-### Content scheduling
-
-!!! note
-
- You can now schedule content on a Page to become visible at a specific time in the future.
-
- To do this you can use the **Schedule** tab in any block's configuration or a special Content Scheduler block.
-
- In the **Schedule** tab you can define when any block becomes visible and when it disappears from a Page.
-
- 
-
- Content Scheduler is a special block with a queue of content items, each with its own airtime.
- The Content becomes available at the airtime, and is replaced with new content items coming in from the queue.
-
- 
-
- All changes to scheduled content on a Page are visible in the timeline.
-
- 
-
- The timeline also shows other events, such a Content published with the date-based publisher.
-
-For more information, see [advanced publishing options](https://doc.ibexa.co/projects/userguide/en/2.5/publishing/advanced_publishing_options/) in User Documentation.
-
-### Form Builder
-
-!!! note
-
- The new Form Builder enables you to create Form content items with multiple form fields.
-
- 
-
- You can preview and download submissions in the back office.
-
- 
-
- See [Extending Form Builder](https://doc.ibexa.co/en/2.5/guide/extending/extending_form_builder/) for information on how to modify and create Form fields.
-
-For more information, see [forms](https://doc.ibexa.co/projects/userguide/en/2.5/creating_content_advanced/#forms) in User Documentation.
-
-### ImageAsset field type
-
-You can now create a single source media library with images that can be reused across the system.
-
-For more information, see [Reusing images](https://doc.ibexa.co/en/2.5/guide/images/#reusing-images) and [ImageAsset field type reference](https://doc.ibexa.co/en/2.5/api/field_types_reference/imageassetfield/).
-
-
-
-### Regenerating URL aliases
-
-A new `ezplatform:urls:regenerate-aliases` command enables you to regenerate all URL aliases.
-You can use it after changing URL alias configuration, or in case of database corruption.
-
-For more information, see [Regenerating URL aliases](https://doc.ibexa.co/en/2.5/guide/url_management/#regenerating-url-aliases).
-
-### User preferences
-
-You can now access and set user preferences in the user menu.
-
-
-
-It's covered by the `user/preferences` policy.
-
-### Dates in preferred timezone
-
-eZ Platform can now display dates across the system using timezone from User Settings.
-
-### Improved selection in UDW
-
-Selection of content in Universal Discovery Widget has seen improvements,
-in particular when selecting multiple content items.
-
-
-
-### API improvements
-
-Improvements to the API cover:
-
-- [`UserPreferenceService`](https://github.com/ezsystems/ezpublish-kernel/blob/v7.3.0/eZ/Publish/API/Repository/UserPreferenceService.php)
-- [`ASSET` Relation type](https://github.com/ezsystems/ezpublish-kernel/blob/v7.3.0-rc2/eZ/Publish/Core/REST/Client/Input/Parser/Relation.php#L84)
-- `TrashItem->trashed` timestamp covers when a content item was placed in Trash
-
-#### Back office translations
-
-There are three new ways you can now contribute to back office translations:
-
-- translate in-context with bookmarks
-- translate in-context with console
-- translate directly on the Crowdin website
-
-For more information, see [How to translate the interface using Crowdin](https://doc.ibexa.co/en/2.5/community_resources/translations/#how-to-translate-the-interface-using-crowdin).
-
-## Full list of new features, improvements and bug fixes since v2.2.0
-
-| eZ Platform | eZ Enterprise |
-|--------------|------------|
-| [List of changes for final of eZ Platform v2.3.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v2.3.0) | [List of changes for final for eZ Platform Enterprise Edition v2.3.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v2.3.0) |
-| [List of changes for rc2 of eZ Platform v2.3.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v2.3.0-rc2) | [List of changes for rc2 for eZ Platform Enterprise Edition v2.3.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v2.3.0-rc2) |
-| [List of changes for rc1 of eZ Platform v2.3.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v2.3.0-rc1) | [List of changes for rc1 for eZ Platform Enterprise Edition v2.3.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v2.3.0-rc1) |
-| [List of changes for beta1 of eZ Platform v2.3.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v2.3.0-beta1) | [List of changes for beta1 of eZ Platform Enterprise Edition v2.3.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v2.3.0-beta1) |
-
-## Installation
-
-[Installation guide](https://doc.ibexa.co/en/2.5/getting_started/install_ez_platform/)
-
-[Technical requirements](https://doc.ibexa.co/en/2.5/getting_started/requirements/)
diff --git a/docs/release_notes/ez_platform_v2.4.md b/docs/release_notes/ez_platform_v2.4.md
deleted file mode 100644
index d90e115528b..00000000000
--- a/docs/release_notes/ez_platform_v2.4.md
+++ /dev/null
@@ -1,240 +0,0 @@
-
-
-# eZ Platform v2.4
-
-**Version number**: v2.4
-
-**Release date**: December 21, 2018
-
-**Release type**: Fast Track
-
-## Notable changes
-
-!!! DXP
-
- ### Editorial workflow
-
- [Editorial Workflow](https://doc.ibexa.co/en/2.5/guide/workflow/) enables you to pass content through a series of stages.
-
- Each step can be used to represent for example contributions and approval of different teams and editors.
- For instance, an article can pass through draft, design and proofreading stages.
-
- The workflow mechanism is [permission-aware](https://doc.ibexa.co/en/2.5/guide/workflow/#permissions).
- You can limit access to content in different workflow stages, or the ability to pass content through specific transitions.
-
- 
-
- Workflow Engine is located in the ezplatform-workflow bundle.
-
-### RichText
-
-#### RichText field type
-
-RichText field type has been extracted to a separate bundle, [ezsystems/ezplatform-richtext](https://github.com/ezsystems/ezplatform-richtext). Relying on any class from the `eZ\Publish\Core\FieldType\RichText` namespace is deprecated.
-
-If you're implementing any interface or extending any base class from the old namespace, refer to its PHPDoc to see what to implement or extend instead.
-Make sure to enable the new eZ Platform RichTextBundle.
-
-See [RichText field type Reference](https://doc.ibexa.co/en/2.5/api/field_types_reference/richtextfield/).
-
-#### RichText block
-
-In the Page Builder you can make use of the RichText block.
-It enables you to insert text created using the Online Editor with all features of a RichText Field.
-
-
-
-#### Improved styling in Online Editor
-
-Online Editor has been improved with new styling.
-
-
-
-#### Images in RichText
-
-You can now attach links to images in the Online Editor:
-
-
-
-#### Formatted text in RichText
-
-You can now use formatted text in RichText Fields (provided by means of a `literal` tag).
-
-
-
-#### Inline embedding in RichText
-
-The new `embed-inline` built-in view type enables embedding content items within a block element in RichText.
-
-#### Custom tag - `ezcontent`
-
-The `ezcontent` property is now editable in the UI and can be used to store the output/preview of a custom tag.
-To learn how it works, see [FactBox tag](https://doc.ibexa.co/en/2.5/guide/extending/extending_online_editor/#example-factbox-tag).
-
-### Content type translation
-
-You can now translate content type names and Field definitions.
-
-This possibility is available automatically when you have the target language configured
-(in the same way as for translating content, see [Languages](https://doc.ibexa.co/en/2.5/guide/internationalization/)).
-
-
-
-When you translate Content of this type, the content type information is displayed in the new language.
-
-
-
-### Multi-file management
-
-New multi-file content management functionalities enable you to move and delete multiple files at the same time.
-
-For more information, see[Multi-file content management](https://doc.ibexa.co/projects/userguide/en/2.5/multi_file_content_management/#multi-file-content-management).
-
-!!! DXP
-
- ### Forms
-
- #### Create form on the fly
-
- You can now create Forms on the fly from the Universal Discovery Widget.
-
- 
-
- #### Embedding forms in Pages
-
- You can use the new Form block to embed an existing form on a Page.
-
-### Draft list
-
-The list of all drafts can now be found in the **Administrator User** menu under **Drafts**.
-
-
-
-For more information, see [Reviewing a draft](https://doc.ibexa.co/projects/userguide/en/2.5/publishing/flex_workflow/#reviewing-a-draft).
-
-### Subtree search filter
-
-A new filter enables you to filter search results by Subtree.
-
-For more information, see [Simplified Filtered search](https://doc.ibexa.co/projects/userguide/en/2.5/search/#simplified-filtered-search).
-
-### Sub-items limit
-
-You can now set a number of items displayed in the table with the **Sub-items** setting in your User Settings.
-
-
-
-### Policy labels update
-
-The outdated policy labels are now updated:
-
-|Old|New|
-|---|---|
-|class|Content type|
-|ParentClass|Content type of Parent|
-|node|Location|
-|parentdepth|Parent Depth|
-|parentgroup|Content type Group of Parent|
-|parentowner|Owner of Parent|
-|subtree|Subtree of Location|
-
-
-
-### API improvements
-
-#### Simplified use of content type objects
-
-This release introduces a few simplifications to API use for content types:
-
-- Exposes `content->getContentType()` for easier use, including from Twig as `content.contentType`. When iterating over the result set of content/Locations these are effectively loaded all at once.
-- Adds a possibility to load several content types in bulk with `ContentTypeService->loadContentTypeList()`.
-- `UserService` now exposes `isUser()` and `isUserGroup()`. They don't need to do a lookup to the database to tell if a content item is of type user or user group.
-
-#### Load multiple locations
-
-You're now able to load multiple locations at once, with `LocationService->loadLocationList()`.
-The biggest benefit of this feature is saving load time on complex landing pages when HTTP cache is cold or disabled, including when in development mode.
-
-### BC breaks and important behavior changes
-
-- Online Editor format for `ezlink` inside `ezembed` tag changed to an anchor tag. See [ezplatform-richtext/pull/20](https://github.com/ezsystems/ezplatform-richtext/pull/20).
-- The merge order of content edit forms has been changed. It can affect you if you extended the content edit template. See [ezplatform-admin-ui/pull/720](https://github.com/ezsystems/ezplatform-admin-ui/pull/720).
-- Changes to the handling of multilingual content types, see [BC notes in the kernel](https://github.com/ezsystems/ezpublish-kernel/blob/7.5/doc/bc/changes-7.4.md).
-
-## Full list of new features, improvements and bug fixes since v2.3
-
-| eZ Platform | eZ Enterprise |
-|--------------|------------|
-| [List of changes for final of eZ Platform v2.4.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v2.4.0) | [List of changes for final for eZ Platform Enterprise Edition v2.4.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v2.4.0) |
-| [List of changes for rc1 of eZ Platform v2.4.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v2.4.0-rc1) | [List of changes for rc1 for eZ Platform Enterprise Edition v2.4.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v2.4.0-rc1) |
-| [List of changes for beta1 of eZ Platform v2.4.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v2.4.0-beta1) | [List of changes for beta1 of eZ Platform Enterprise Edition v2.4.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v2.4.0-beta1) |
-
-## eZ Platform v2.4.2
-
-!!! DXP
-
- ### Update eZ Enterprise v2.4 to v2.4.2
-
- This release brings full support for Map\Host matcher when SiteAccesses are configured for different domains.
-
- Token-based authentication (based on JSON Web Token specification) replaced cookie-based authentication that did not work with SiteAccesses configured for a different domains in the Page Builder.
- Authentication mechanizm is enabled by default in v2.4.2, however, the following steps are required during upgrade from v2.4 to v2.4.2+ Enterprise installation:
-
- 1\. Register `LexikJWTAuthenticationBundle` bundle in `/app/AppKernel.php`
-
- ``` php {skip-validation}
- public function registerBundles()
- {
- $bundles = array(
- // ...
- new Lexik\Bundle\JWTAuthenticationBundle\LexikJWTAuthenticationBundle(),
- // Ibexa
- // ...
- );
- }
- ```
-
- 2\. Add the following configuration to `/app/config/config.yml`
-
- ``` yaml
- lexik_jwt_authentication:
- secret_key: '%secret%'
- encoder:
- signature_algorithm: HS256
- # Disabled by default, because Page Builder uses custom extractor
- token_extractors:
- authorization_header:
- enabled: false
- cookie:
- enabled: false
- query_parameter:
- enabled: false
- ```
-
- By default `HS256` is used as signature algorithm for generated token but we strongly recommend switching to SSH keys.
-
- For more information, see [`LexikJWTAuthenticationBundle` installation instruction](https://github.com/lexik/LexikJWTAuthenticationBundle/blob/1.x/Resources/doc/index.md).
-
- 3\. Add `EzSystems\EzPlatformPageBuilder\Security\EditorialMode\TokenAuthenticator` authentication provider to `ezpublish_front` firewall before `form_login` in `app/config/security.yml`:
-
- ``` yaml
- security:
- # ...
- firewalls:
- ezpublish_front:
- # ...
- simple_preauth:
- authenticator: 'EzSystems\EzPlatformPageBuilder\Security\EditorialMode\TokenAuthenticator'
- form_login:
- require_previous_session: false
- # ...
- ```
-
- 4\. Make sure that parameter `page_builder.token_authenticator.enabled` has value `true`. If the parameter isn't present, add it to `/app/config/config.yml`:
-
- ``` yaml
- # ...
- parameters:
- # ...
- page_builder.token_authenticator.enabled: true
- ```
diff --git a/docs/release_notes/ez_platform_v2.5.md b/docs/release_notes/ez_platform_v2.5.md
deleted file mode 100644
index 66b847b1018..00000000000
--- a/docs/release_notes/ez_platform_v2.5.md
+++ /dev/null
@@ -1,281 +0,0 @@
----
-description: eZ Platform v2.5 is the last Long Term Support release in the v2 line, currently after End of Maintenance.
----
-
-
-# eZ Platform v2.5
-
-**Version number**: v2.5
-
-**Release date**: March 29, 2019
-
-**Release type**: Long Term Supported
-
-## Notable changes
-
-### Content tree
-
-You can now navigate through your website with a content tree.
-It allows you to easily browse your content in the back office.
-Each content item has a unique icon that helps you identify it without opening.
-
-
-
-For more information on custom configuration, see [content tree](https://doc.ibexa.co/en/2.5/guide/config_back_office/#content-tree) in Developer Documentation.
-
-For full description of the interface, see [content tree](https://doc.ibexa.co/projects/userguide/en/2.5/content_model/#content-tree) in User Documentation.
-
-### Webpack Encore
-
-This release introduces [Webpack Encore]([[= symfony_doc =]]/frontend.html#webpack-encore)
-as the preferred tool for asset management.
-This leads to [changes in requirements](#requirements-changes).
-
-Assetic is still in use, but it will be deprecated in a future version.
-
-### PostgreSQL
-
-This release enables you to [use PostgreSQL](https://doc.ibexa.co/en/2.5/guide/databases/#using-postgresql) for database instead of the default MySQL.
-
-Database schema is now created based on [YAML configuration](https://github.com/ezsystems/ezpublish-kernel/blob/master/eZ/Bundle/EzPublishCoreBundle/Resources/config/storage/legacy/schema.yaml).
-
-### GraphQL
-
-You can now take advantage of [GraphQL](https://doc.ibexa.co/en/2.5/api/graphql/) to query and operate on content.
-It uses a domain schema based on your content model.
-
-For more information, see [GraphQL documentation](https://graphql.org/).
-
-### Matrix field type
-
-The new [Matrix field type](https://doc.ibexa.co/en/2.5/api/field_types_reference/matrixfield/) enables you to store a table of data.
-Columns in the matrix are defined in the field definition.
-
-
-
-#### Migration of legacy XML format
-
-You can now migrate your content from legacy XML format to a new `ezmatrix` value with the following command:
-
-```bash
-bin/console ezplatform:migrate:legacy_matrix
-```
-
-### User bundle
-
-The new [ezplatform-user](https://github.com/ezsystems/ezplatform-user) bundle now centralizes
-all features related to user management, such as user accounts, registering, or changing passwords.
-
-!!! DXP
-
- ### Workflow improvements
-
- You can now preview a diagram of the configured workflows in the **Admin** panel.
-
- 
-
- After selecting configured workflow administrator, the user is now able to see all content items under review for it.
-
- 
-
-### Online editor improvements
-
-#### Anchors in Rich Text field
-
-You can now link fragments of text by adding Anchors in Rich Text fields.
-
-#### Inline custom tags
-
-You can now create [inline custom tags](https://doc.ibexa.co/en/2.5/guide/extending/extending_online_editor/#inline-custom-tags) in Rich Text fields.
-
-#### Custom CK Editor plugins
-
-You can now easily use [custom CK Editor plugins](https://doc.ibexa.co/en/2.5/guide/extending/extending_online_editor/#custom-plugins) in AlloyEditor.
-
-### Hiding and revealing content
-
-You can now hide and reveal content items from the back office.
-Hidden content is unavailable on the front page regardless of permissions or [Location visibility](https://doc.ibexa.co/en/2.5/guide/content_management/#location-visibility).
-
-
-
-### Product version preview
-
-The Dashboard now shows the version of eZ Platform you're running.
-
-
-
-### Expanded User Settings
-
-The User Settings menu has been expanded with the following options:
-
-- Preferred language of the back office
-- Preferred date format
-- Option to enable or disable a character counter for Rich Text fields
-
-
-
-### Various back office improvements
-
-This release introduced several back office improvements to facilitate editorial experience, including:
-
-- [Icons for content types and the ability to define them](https://doc.ibexa.co/en/2.5/guide/extending/extending_back_office/#custom-content-type-icons)
-- Ability to collapse and expand content preview to have easier access to the Sub-items list
-- Responsive Sub-items table with selectable column layout
-- Simpler assigning of object states to content
-
-
-
-### Permissions
-
-#### `Content/Create` policy for users
-
-You can now define a 'Content/Create' policy for a user or a user group.
-It enables or disables (if not set) the **Create** button in your dashboard.
-
-#### Universal Discovery Widget
-
-`allowed_content_types` can now limit selection in UDW search and browse sections to specified content types.
-
-
-
-### API improvements
-
-New API improvements include:
-
-- `sudo()` exposed officially in API to make it more clear how you can skip permission checks when needed
-- `AssignSectionToSubtreeSignal` to assign Sections to subtrees
-- new `loadLanguageListByCode()` and `loadLanguageListById()` endpoints for bulk loading of languages
-- new method `ContentService->loadContentInfoList()` for bulk loading Content information
- - it can be used with `ContentService->loadContentListByContentInfo()` to bulk load Content
- - v2.5 also takes advantage of it in, for example, `RelationList` and `ParameterProvider`
-- now Persistence cache layer also caches selected metadata objects in-memory
-- indexation of related objects in the full text search
-
-## Requirements changes
-
-Due to using Webpack Encore, you now need [Node.js and yarn](https://doc.ibexa.co/en/2.5/update_and_migration/from_1.x_2.x/update_app_to_2.5/#c-fix-other-conflicts)
-to install or update eZ Platform.
-
-This release also changes support for versions of the following third-party software:
-
-- Solr 4 is no longer supported. Use Solr 6 instead (Solr 6.6LTS recommended).
-- Apache 2.2 is no longer supported. Use Apache 2.4 instead.
-- Varnish 4 is no longer supported. Use Varnish 5.1 or higher (6.0LTS recommended).
-
-For full list of supported versions, see [Requirements](https://doc.ibexa.co/en/2.5/getting_started/requirements/).
-
-### Password requirements
-
-This version introduces stricter default password quality requirements.
-
-Passwords must be at least 10 characters long, and must include upper and lower case letters, and digits.
-Existing passwords aren't changed.
-
-See [backwards compatibility changes](https://github.com/ezsystems/ezpublish-kernel/blob/7.5/doc/bc/changes-7.5.md)
-for detailed information.
-
-## Full changelog
-
-| eZ Platform | eZ Enterprise |
-|--------------|------------|
-| [eZ Platform v2.5.0](https://github.com/ezsystems/ezplatform/releases/tag/v2.5.0) | [eZ Enterprise v2.5.0](https://github.com/ezsystems/ezplatform-ee/releases/tag/v2.5.0) |
-| [eZ Platform v2.5.0-rc2](https://github.com/ezsystems/ezplatform/releases/tag/v2.5.0-rc2) | [eZ Enterprise v2.5.0-rc2](https://github.com/ezsystems/ezplatform-ee/releases/tag/v2.5.0-rc2) |
-| [eZ Platform v2.5.0-rc1](https://github.com/ezsystems/ezplatform/releases/tag/v2.5.0-rc1) | [eZ Enterprise v2.5.0-rc1](https://github.com/ezsystems/ezplatform-ee/releases/tag/v2.5.0-rc1) |
-| [eZ Platform v2.5.0-beta2](https://github.com/ezsystems/ezplatform/releases/tag/v2.5.0-beta2) | [eZ Enterprise v2.5.0-beta2](https://github.com/ezsystems/ezplatform-ee/releases/tag/v2.5.0-beta2) |
-| [eZ Platform v2.5.0-beta1](https://github.com/ezsystems/ezplatform/releases/tag/v2.5.0-beta1) | [eZ Enterprise v2.5.0-beta1](https://github.com/ezsystems/ezplatform-ee/releases/tag/v2.5.0-beta1) |
-
-## eZ Platform v2.5.2
-
-### Updating
-
-The `leafo/scssphp` package had to be replaced by `scssphp/scssphp` due to maintainability.
-If you use classes from the `Leafo\ScssPhp` namespace, change them to `ScssPhp\ScssPhp`.
-
-### SolrCloud
-
-You can now take advantage of [SolrCloud in eZ Platform Solr search engine](https://doc.ibexa.co/en/2.5/guide/search/solr/#solrcloud).
-It enables you to set up a cluster of Solr servers for highly available and fault tolerant environment.
-
-### Online Editor
-
-#### Custom attributes
-
-It's now possible to add [custom data attributes and CSS classes](https://doc.ibexa.co/en/2.5/guide/extending/extending_online_editor/#custom-data-attributes-and-classes) to elements in the Online Editor.
-
-#### Translatable custom tag choice attributes
-
-You can now translate labels of choice attributes in Custom tags using the `ezrichtext.custom_tags..attributes..choices..label` configuration key.
-
-### URL Wildcards
-
-[URL wildcards](https://doc.ibexa.co/en/2.5/guide/url_management/#url-wildcards) enable you to set up global URL redirections.
-
-## eZ Platform v2.5.3
-
-### API improvements
-
-`SectionService::loadSection` has been improved to return a filtered list when user doesn't have access to a Section,
-instead of throwing an exception.
-
-## eZ Platform v2.5.4
-
-### Permission improvements
-
-`RoleService` methods have been improved to return a filtered list when user doesn't have access to content,
-instead of throwing an exception. The following methods are affected:
-
-- `RoleService::loadRoles`
-- `RoleService::getRoleAssignmentsForUser`
-- `RoleService::getRoleAssignmentsForUserGroup`
-
-`content/cleantrash` policy now allows the user to empty the trash
-even if they would not have access to the trashed content.
-
-### Docker environment
-
-BCMath PHP extension has been added to the Docker environments to enable the Allure reporting tool.
-
-### Deprecated features
-
-This section provides a list of deprecated features to be removed in eZ Platform v3.0.
-
-#### Custom Installers
-
-- The `\EzSystems\PlatformInstallerBundle\Installer\CleanInstaller` class and its service container definition (`ezplatform.installer.clean_installer`) have been deprecated in favor of `EzSystems\PlatformInstallerBundle\Installer\CoreInstaller` which requires the [Doctrine Schema Bundle](https://github.com/ezsystems/doctrine-dbal-schema) to be enabled.
-- The `ezplatform.installer.db_based_installer` service container definition has been deprecated in favor of its FQCN-named equivalent (`EzSystems\PlatformInstallerBundle\Installer\DbBasedInstaller`).
-- `vendor/ezsystems/ezpublish-kernel/data/mysql/schema.sql` has been deprecated and isn't used by the installation process anymore.
-
-## eZ Platform v2.5.6
-
-### Configuration through `ezplatform`
-
-In YAML configuration, you can now use `ezplatform` and `ezpublish` as the main configuration key.
-
-### API improvements
-
-The following PHP API methods have been added:
-
-- `ContentService::countContentDrafts` returns the number of all drafts for the provided user
-- `ContentService::loadContentDraftList` returns a list of all drafts for the provided user
-- `ContentService::countReverseRelations` returns the number of all reverse relations for a content item
-- `ContentService::loadReverseRelationList` returns a list of all reverse relations for a content item
-
-### Solr 7.7
-
-With v2.5.6 you can optionally use Solr 7.7. To enable it:
-
-1. Update the `ezplatform-solr-search-engine` package version to ~2.0.
-2. Follow [Solr upgrade documentation](https://solr.apache.org/guide/7_7/solr-upgrade-notes.html).
-3. Reindex your content.
-4. Clear cache.
-
-## eZ Platform v2.5.9
-
-### Search result improvements
-
-When searching in the back office you can now select languages to filter results through.
-
-### Searchable Matrix field
-
-The Matrix field isn't fully searchable.
diff --git a/docs/release_notes/ez_platform_v3.0.md b/docs/release_notes/ez_platform_v3.0.md
deleted file mode 100644
index 88ff55a2402..00000000000
--- a/docs/release_notes/ez_platform_v3.0.md
+++ /dev/null
@@ -1,340 +0,0 @@
-
-
-# eZ Platform v3.0
-
-**Version number**: v3.0
-
-**Release date**: April 2, 2020
-
-**Release type**: Fast Track
-
-## Overview
-
-## Notable changes
-
-### Symfony 5
-
-The version 3.0 moves eZ Platform to Symfony 5.0 from the previously used Symfony 3.4.
-
-This entails several changes to the way projects are organized.
-For details, see [Symfony 4.0](https://github.com/symfony/symfony/blob/4.0/UPGRADE-4.0.md)
-and [Symfony 5.0 upgrade documentation](https://github.com/symfony/symfony/blob/5.0/UPGRADE-5.0.md)
-
-### Using Events instead of SignalSlots
-
-The application now uses Symfony Events instead of SignalSlots.
-The application triggers two Events per operation: one before and one after the relevant thing happens
-(see for example [BookmarkService](https://github.com/ezsystems/ezplatform-kernel/blob/v1.0.0/eZ/Publish/Core/Event/BookmarkService.php)).
-
-To use Symfony Events, create [Event Listeners]([[= symfony_doc =]]/event_dispatcher.html) in your code.
-
-### New bundles
-
-The list of bundles in v3.0 has been extended by the following ones:
-
-- `ezplatform-calendar`
-- [`ezplatform-content-forms`](https://github.com/ezsystems/ezplatform-content-forms)
-- [`ezplatform-kernel`](https://github.com/ezsystems/ezplatform-kernel)
-- [`ezplatform-rest`](https://github.com/ezsystems/ezplatform-rest)
-- `ezplatform-site-factory`
-- `ezplatform-version-comparison`
-
-For details, see [Bundles](https://doc.ibexa.co/en/3.3/guide/bundles/).
-
-## New features
-
-!!! DXP
-
- ### Site Factory
-
- The new Site management User Interface is now integrated with back office.
- It enables you to easily create and manage multiple sites from the back office without editing the configuration files.
-
- For more information about enabling and configuring, see [Enable Site Factory](https://doc.ibexa.co/en/3.3/guide/multisite/site_factory/#enable-site-factory).
-
- For more information about using the Site Factory, see [User Documentation]([[= user_doc =]]/site_organization/site_factory)
-
- ### Scheduling
-
- #### Schedule calendar
-
- You can now easily view and perform scheduling actions with the Calendar widget that is available in the back office.
- By default, the widget displays content items scheduled for future publication, but custom events can be configured as well.
- You can also filter displayed events and toggle through a day, week, and month view.
-
- #### Manage planned publications with Dashboard
-
- You can now reschedule or cancel planned future publications right from the Dashboard.
-
- #### Schedule hiding a content item
-
- You can now schedule hiding content items.
- Using Calendar widget available in the back office you can also reschedule or cancel hiding a content item.
-
- ### Defining buttons in Online Editor
-
- You can now reorder and disable buttons in Online Editor using [YAML configuration](https://doc.ibexa.co/en/3.3/extending/extending_online_editor/#rearrange-buttons).
-
- ### Workflow improvements
-
- #### Workflow actions
-
- You can now configure your workflows to [automatically publish content](https://doc.ibexa.co/en/3.3/guide/workflow/workflow/#content-publishing).
-
- You can also create [custom workflow actions](https://doc.ibexa.co/en/3.3/guide/workflow/workflow/#custom-actions).
-
- #### Reviewers
-
- When sending content through a workflow, the user can now select reviewers.
- You can require the user to select reviewers when sending content through the workflow.
-
- In the configuration, you can also set the workflow to [automatically notify the selected reviewers](https://doc.ibexa.co/en/3.3/guide/workflow/workflow/#notifications).
-
- #### Quick review
-
- A built-in Quick Review offers a quick workflow configuration for your basic needs.
-
- #### Custom transition color
-
- You can configure a custom color for each of the transitions defined in the Workflow.
-
- ## Version comparison
-
- You can now compare two versions of the same content item and preview changes in their Fields:
-
- 
-
-### Universal Discovery Widget
-
-The Universal Discovery Widget (UDW) has been re-designed and re-written.
-New functionalities and changes include:
-
-- new configuration
-- filtered search
-- resizable column with custom sort order
-- editing content from UDW (Enterprise only)
-
-For full list of changes, see [Backwards compatibility doc](https://doc.ibexa.co/en/3.3/release_notes/ez_platform_v3.0_deprecations/#universal-discovery-widget) and [Configuration](https://doc.ibexa.co/en/3.3/extending/extending_udw/#configuration).
-
-### Field types
-
-#### Content query field type
-
-The new [Content query field type](https://doc.ibexa.co/en/3.3/api/field_types_reference/contentqueryfield/)
-enables you to configure a Content query that uses parameters from a Field definition.
-
-#### Field type creation
-
-You can now use [Generic field type](https://doc.ibexa.co/en/3.3/api/field_type/create_custom_generic_field_type/) as a template for your custom field types.
-
-#### Keyword field type
-
-The `keyword` field type can now recognize versions of a content item.
-
-### Login and password options
-
-#### Login by User name or email
-
-You can now give your users the ability to [log in with User name or with email](https://doc.ibexa.co/en/3.3/guide/users/login_methods/).
-
-#### Password rules
-
-You can now set [password expiration rules](https://doc.ibexa.co/en/3.3/guide/users/passwords/#password-rules)
-for user passwords.
-
-### Duplicate a role
-
-You can now duplicate a role with a single click in the back office.
-
-
-
-### REST API reference
-
-The REST reference has been moved from Kernel to a new page, [eZ Platform REST API](https://web.archive.org/web/20201015232625/https://ezsystems.github.io/ezplatform-rest-reference/).
-
-### Search Criteria
-
-The following new Search Criteria have been added:
-
-|Search Criterion|Search based on|
-|-----|-----|
-|[IsUserBased](https://doc.ibexa.co/en/3.3/guide/search/criteria_reference/isuserbased_criterion/)|Whether content represents a User account|
-|[IsUserEnabled](https://doc.ibexa.co/en/3.3/guide/search/criteria_reference/isuserenabled_criterion/)|Whether a User account is enabled|
-|[ObjectStateIdentifier](https://doc.ibexa.co/en/3.3/guide/search/criteria_reference/objectstateidentifier_criterion/)|Object state Identifier|
-|[SectionId](https://doc.ibexa.co/en/3.3/guide/search/criteria_reference/sectionid_criterion/)|ID of the Section content is assigned to|
-|[SectionIdentifier](https://doc.ibexa.co/en/3.3/guide/search/criteria_reference/sectionidentifier_criterion/)|Identifier of the Section content is assigned to|
-|[UserEmail](https://doc.ibexa.co/en/3.3/guide/search/criteria_reference/useremail_criterion/)|Email address of a User account|
-|[Sibling](https://doc.ibexa.co/en/3.3/guide/search/criteria_reference/sibling_criterion/)|Locations that are children of the same parent|
-|[UserId](https://doc.ibexa.co/en/3.3/guide/search/criteria_reference/userid_criterion/)|User ID|
-|[UserLogin](https://doc.ibexa.co/en/3.3/guide/search/criteria_reference/userlogin_criterion/)|User login|
-
-### Random sorting
-
-The list of common Sort Clauses has been extended by the Random sorting option.
-
-### Contextual Twig variables
-
-You can now create [custom Twig variables](https://doc.ibexa.co/en/3.3/guide/content_rendering/templates/templates/#custom-template-variables) for use in templates.
-They can be defined per SiteAccess, or per content view.
-
-### Built-in Query Types
-
-Five built-in ready-to-use Query Types have been added: `Children`, `Siblings`, `Ancestors`, `RelatedToContent`, and `GeoLocation`.
-
-You can now use the `ez_render_content_query` and `ez_render_location_query` Twig functions
-to make use of Query Types that don't use the current content or Location.
-
-### Grouping blocks in Page Builder
-
-You can now assign Page Builder blocks to groups using the `ezplatform_page_fieldtype.blocks..category` setting.
-
-### Bulk actions in Sub-items list
-
-You can now use the Sub-items list to quickly hide, reveal, to add Locations to multiple content items.
-
-### Tooltips
-
-You can now add custom tooltips to provide more information for the users when they hover over, focus on, or tap an element.
-
-### Thumbnails
-
-The new thumbnails API allows you to easily choose an image for each content.
-
-For more information, see [Extending thumbnails](https://doc.ibexa.co/en/3.3/extending/extending_thumbnails/).
-
-### Type hints for public PHP API
-
-Strict types have been added to public PHP API methods. For a complete list, see [backwards compatibility breaks](https://doc.ibexa.co/en/3.3/release_notes/ez_platform_v3.0_deprecations/#strict-types-for-php-api).
-
-## Other changes
-
-### GraphQL
-
-In GraphQL, you can now [query Locations and their children](https://doc.ibexa.co/en/3.3/api/graphql_queries/#querying-locations).
-
-### Translations
-
-#### Improved translating of notifications
-
-`TranslationService` isn't injected into the `NotificationService`.
-You can now use `TranslatableNotificationHandlerInterface` for translated notifications.
-
-#### Multilingual content route
-
-New multilingual content route for internal translations has been added.
-
-### Renamed templates and parameters
-
-Templates and parameters used by the back office have been renamed for consistency.
-For A full list of changes, see [Backwards compatibility doc](https://doc.ibexa.co/en/3.3/releases/ez_platform_v3.0_deprecations/).
-
-### HTTP Cache
-
-HTTP cache bundle now uses FOS Cache Bundle v2.
-For a full list of changes this entails, see [Backwards compatibility doc](https://doc.ibexa.co/en/3.3/release_notes/ez_platform_v3.0_deprecations/#ezplatform-http-cache).
-
-### Helpers
-
-New helper method `window.eZ.helpers.contentType.getContentTypeName` replaces deprecated `ContentTypeNames`.
-
-### User field type
-
-User data is now treated as an external storage.
-
-### SiteAccess-aware Repository
-
-The Repository now uses the SiteAccess-aware layer by default.
-This means that Repository objects are now loaded in the translation corresponding to the SiteAccess.
-
-### REST API
-
-Revealing and hiding content can now be performed via REST API.
-
-### PHP API
-
-New methods have been introduced to the PHP API:
-
-`\eZ\Publish\API\Repository\Values\Content\ContentInfo::getContentType`
-`\eZ\Publish\API\Repository\Values\Content\ContentInfo::getSection`
-`\eZ\Publish\API\Repository\Values\Content\ContentInfo::getMainLanguage`
-`\eZ\Publish\API\Repository\Values\Content\ContentInfo::getMainLocation`
-`\eZ\Publish\API\Repository\Values\Content\ContentInfo::getOwner`
-`\eZ\Publish\API\Repository\Values\Content\VersionInfo::getCreator`
-`\eZ\Publish\API\Repository\Values\Content\VersionInfo::getInitialLanguage`
-`\eZ\Publish\API\Repository\Values\Content\VersionInfo::getLanguages`
-`\eZ\Publish\API\Repository\Values\Content\Location::getParentLocation`
-
-## Deprecations and removals
-
-For full list of deprecations and removals, see [eZ Platform v3.0 deprecations and backwards compatibility breaks](https://doc.ibexa.co/en/3.3/releases/ez_platform_v3.0_deprecations/).
-
-### SignalSlots
-
-SignalSlots are removed from the application.
-Use [Event Listeners]([[= symfony_doc =]]/event_dispatcher.html) in your code instead.
-
-### Deprecated field types
-
-The deprecated `ezprice` and `ezpage` field types have been removed.
-Nameable field type interface has been removed and replaced by `eZ\Publish\SPI\FieldType\FieldType::getName`.
-For a full list of changes on field types, see [Backwards compatibility doc](https://doc.ibexa.co/en/3.3/release_notes/ez_platform_v3.0_deprecations/#field-types).
-
-### Elasticsearch
-
-Elasticsearch support has been dropped.
-
-### REST server
-
-REST-related code has been moved from Kernel to a new [`ezsystems/ezplatform-rest`](https://github.com/ezsystems/ezplatform-rest) package.
-Following the change, the REST client has been removed from Kernel.
-
-### Kernel
-
-`ezpublish-kernel` has been replaced by [`ezplatform-kernel`](https://github.com/ezsystems/ezplatform-kernel).
-
-### Online Editor
-
-Online Editor front-end code and assets have been moved to the `ezplatform-richtext` repository.
-For a full list of resulting changes, see [Backwards compatibility doc](https://doc.ibexa.co/en/3.3/release_notes/ez_platform_v3.0_deprecations/#online-editor).
-
-### Configuration through `ezplatform`
-
-In YAML configuration, the main configuration key is now `ezplatform` instead of `ezpublish`.
-
-### Content forms
-
-The new `ezplatform-content-forms` package contains forms for content creation moved from `repository-forms`,
-while content type editing has been moved to `ezplatform-admin-ui` from `repository-forms`.
-
-### Custom Installers
-
-The Symfony Service definitions, providing extension point to create custom installers, have been removed.
-
-## Requirements changes
-
-eZ Platform now requires using PHP 7.3. For full list of, see [eZ Platform requirements](https://doc.ibexa.co/en/3.3/getting_started/requirements/).
-
-!!! note
-
- Some OS-es, such as Ubuntu 10.x or CentoOS 8.x come with PHP 7.2.
- In such cases remember to manually update the PHP version.
-
-## Updating
-
-For the upgrade details, see [eZ Platform v3.0 project update instructions](https://doc.ibexa.co/en/3.3/update_and_migration/update_ibexa_dxp/).
-
-## Full changelog
-
-| eZ Platform | eZ Enterprise |
-|--------------|------------|
-| [List of changes for final of eZ Platform v3.0.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v3.0.0) | [List of changes for final for eZ Platform Enterprise Edition v3.0.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v3.0.0) |
-| [List of changes for rc1 of eZ Platform v3.0.0 on GitHub](https://github.com/ezsystems/ezplatform/releases/tag/v3.0.0-rc1) | [List of changes for rc1 for eZ Platform Enterprise Edition v3.0.0 on GitHub](https://github.com/ezsystems/ezplatform-ee/releases/tag/v3.0.0-rc1) |
-
-## eZ Platform v3.0.2
-
-### Sort Trash items
-
-Public PHP API `SortClause` has been exposed for `TrashService` queries:
-`eZ\Publish\API\Repository\Values\Content\Query\SortClause\Trash\DateTrashed`
-(to be used by `\eZ\Publish\API\Repository\TrashService::findTrashItems` only).
-It enables you to sort Trash items by date.
diff --git a/docs/release_notes/ez_platform_v3.0_deprecations.md b/docs/release_notes/ez_platform_v3.0_deprecations.md
deleted file mode 100644
index 7347eeca0eb..00000000000
--- a/docs/release_notes/ez_platform_v3.0_deprecations.md
+++ /dev/null
@@ -1,975 +0,0 @@
-
-
-# eZ Platform v3.0 deprecations and backwards compatibility breaks
-
-This page lists backwards compatibility breaks and deprecations introduced in eZ Platform v3.0.
-
-!!! tip "Upgrade to v3"
-
- For a guide on moving your project to v3,
- see [eZ Platform v3.0 project update instructions](https://doc.ibexa.co/en/3.3/update_and_migration/update_ibexa_dxp/).
-
-## Symfony 5
-
-v3.0 now uses Symfony 5 instead of Symfony 3.
-Refer to [Symfony changelog for 4.0](https://github.com/symfony/symfony/blob/5.0/CHANGELOG-4.0.md), [for 5.0](https://github.com/symfony/symfony/blob/5.0/CHANGELOG-5.0.md), [Symfony upgrade guides for 4.0](https://github.com/symfony/symfony/blob/4.0/UPGRADE-4.0.md), and [for 5.0](https://github.com/symfony/symfony/blob/5.0/UPGRADE-5.0.md) to learn about all changes it entails.
-
-See [v3.0 project update](adapt_code_to_v3.md) for the steps you need to take to update your project to Symfony 5.
-See also [full requirements for installing eZ Platform](https://doc.ibexa.co/en/3.3/getting_started/requirements/).
-
-### Template configuration
-
-Following the upgrade to Symfony 5, [the templating component integration is now deprecated](https://symfony.com/blog/new-in-symfony-4-3-deprecated-the-templating-component-integration).
-As a result, the way to indicate a template path has changed.
-
-Example 1:
-
-- Now: `"@@EzPlatformUser/user_settings/list.html.twig"`
-- Formerly: `"EzPlatformUserBundle:user_settings:list.html.twig"`
-
-Example 2:
-
-- Now: `{% extends "@EzPublishCore/content_fields.html.twig" %}`
-- Formerly: `{% extends "EzPublishCoreBundle::content_fields.html.twig" %}`
-
-### Clustering configuration
-
-Following the upgrade to Symfony 5, the DFS IO handler must be configured in a different way.
-
-For more information, see the Doctrine connection configuration example in the [Clustering](https://doc.ibexa.co/en/3.3/guide/clustering/#configuring-the-dfs-io-handler) article.
-
-## Field types
-
-The following tags used to register field type features in the [service container](https://doc.ibexa.co/en/3.3/api/public_php_api/#service-container) have been renamed:
-
-|Former name|New name|
-|-----------|--------|
-|`ezpublish.fieldType`|`ezplatform.field_type`|
-|`ezpublish.fieldType.indexable`|`ezplatform.field_type.indexable`|
-|`ezpublish.storageEngine.legacy.converter`|`ezplatform.field_type.legacy_storage.converter`|
-|`ezpublish.fieldType.parameterProvider`|`ezplatform.field_type.parameter_provider`|
-|`ezpublish_rest.field_type_processor`|`ibexa.rest.field_type.processor`|
-|`ez.fieldFormMapper.value`|`ezplatform.field_type.form_mapper.value`|
-|`ez.fieldFormMapper.definition`|`ezplatform.field_type.form_mapper.definition`|
-|`ezpublish.fieldType.externalStorageHandler`|`ezplatform.field_type.external_storage_handler`|
-|`ezpublish.fieldType.externalStorageHandler.gateway`|`ezplatform.field_type.external_storage_handler.gateway`|
-
-Deprecated method `eZ\Publish\SPI\FieldType\FieldType::getName` is now supported with a new signature similar to `eZ\Publish\SPI\FieldType\Nameable::getFieldName()`, which has been removed.
-
-For more information, see [eZ Platform v3.0 project update](https://doc.ibexa.co/en/3.3/update_and_migration/from_2.5/update_code/3_update_field_types/).
-
-The deprecated `eZ\Publish\Core\FieldType\RichText` namespace has been removed, as it was moved to a separate bundle in v2.4.
-
-The following classes and namespaces have been deprecated and dropped:
-
-- `eZ\Publish\SPI\FieldType\EventListener`
-- `eZ\Publish\SPI\FieldType\Event`
-- `eZ\Publish\SPI\FieldType\Events\**`
-
-Deprecated `ezprice` and `ezpage` field types have been removed.
-
-## Configuration through `ezplatform`
-
-In YAML configuration, `ezplatform` is now used instead of `ezpublish` as the main configuration key.
-
-## Assetic support
-
-Assetic support has been dropped.
-
-## Installers
-
-### Custom Installers
-
-The following Symfony Service definitions that provide extension point to create custom installers have been removed:
-
-- `ezplatform.installer.clean_installer`
-- `ezplatform.installer.db_based_installer`
-
-### Enterprise Edition installer
-
-The `ezstudio.installer.studio_installer` service has been renamed to the FQCN-named
-service `EzSystems\EzPlatformEnterpriseEditionInstallerBundle\Installer\Installer`.
-Deprecated `ezplatform.ee.installer.class` [service container](https://doc.ibexa.co/en/3.3/api/public_php_api/#service-container) parameter has been removed.
-
-See [eZ Platform v3.0 project update instructions](https://doc.ibexa.co/en/3.3/update_and_migration/from_2.5/update_code/8_update_rest/#custom-installers) for upgrade details.
-
-## ezplatform-admin-ui
-
-### Functions renamed
-
-|Former name|New name|
-|-----------|--------|
-|`ez_is_field_empty`|`ez_field_is_empty`|
-|`ezplatform_admin_ui_component_group`|`ez_render_component_group`|
-|`ez_platform_tabs`|`ez_render_tab_group`|
-|`ez_render_fielddefinition_edit`|`ez_render_field_definition_edit`|
-|`ez_path_string_to_locations`|`ez_path_to_locations`|
-|`ez_image_asset_content_field_identifier`|`ez_content_field_identifier_image_asset`|
-|`encode_field`|`ez_field_encode`|
-|`ez_http_tag_location`|`ez_http_cache_tag_location`|
-|`ez_first_filled_image_field_identifier`|`ez_content_field_identifier_first_filled_image`|
-|`ez_render_fielddefinition_settings`|`ez_render_field_definition_settings`|
-|`encode_block_value`|`ez_block_value_encode`|
-|`ezplatform_page_builder_cross_origin_helper`|`ez_page_builder_cross_origin_helper`|
-
-### Twig helper renamed
-
-Selected Twig helpers names have been changed.
-
-Additionally, the `ez_trans_prop` Twig function has been removed.
-
-### Global variables renamed
-
-|Former name|New name|
-|-----------|--------|
-|`admin_ui_config`|`ez_admin_ui_config`|
-|`ezpublish`|`ezplatform`|
-
-### Filters renamed
-
-|Former name|New name|
-|-----------|--------|
-|`richtext_to_html5`|`ez_richtext_to_html5`|
-|`richtext_to_html5_edit`|`ez_richtext_to_html5_edit`|
-
-### JavaScript
-
-#### Event names changed
-
-Selected event names have been changed.
-
-|Former name|New name|
-|-----------|--------|
-|`invalidFileSize`|`ez-invalid-file-size`|
-|`addressNotFound`|`ez-address-not-found`|
-|`cancelErrors`|`ez-cancel-errors`|
-|`ezsettings.default.content_type.about`|`ezsettings.admin_group.content_type.about`|
-|`ezsettings.default.content_type.article`|`ezsettings.admin_group.content_type.article`|
-|`ezsettings.default.content_type.blog`|`ezsettings.admin_group.content_type.blog`|
-|`ezsettings.default.content_type.blog_post`|`ezsettings.admin_group.content_type.blog_post`|
-|`ezsettings.default.content_type.folder`|`ezsettings.admin_group.content_type.folder`|
-|`ezsettings.default.content_type.form`|`ezsettings.admin_group.content_type.form`|
-|`ezsettings.default.content_type.place`|`ezsettings.admin_group.content_type.place`|
-|`ezsettings.default.content_type.product`|`ezsettings.admin_group.content_type.product`|
-|`ezsettings.default.content_type.field`|`ezsettings.admin_group.content_type.field`|
-|`ezsettings.default.content_type.user`|`ezsettings.admin_group.content_type.user`|
-|`ezsettings.default.content_type.user_group`|`ezsettings.admin_group.content_type.user_group`|
-|`ezsettings.default.content_type.file`|`ezsettings.admin_group.content_type.file`|
-|`ezsettings.default.content_type.gallery`|`ezsettings.admin_group.content_type.gallery`|
-|`ezsettings.default.content_type.image`|`ezsettings.admin_group.content_type.image`|
-|`ezsettings.default.content_type.video`|`ezsettings.admin_group.content_type.video`|
-|`ezsettings.default.content_type.landing_page`|`ezsettings.admin_group.content_type.landing_page`|
-|`ezsettings.default.content_type.default-config`|`ezsettings.admin_group.content_type.default-config`|
-|`ezsettings.default.pagination.search_limit`|`ezsettings.admin_group.pagination.search_limit`|
-|`ezsettings.default.pagination.trash_limit`|`ezsettings.admin_group.pagination.trash_limit`|
-|`ezsettings.default.pagination.section_limit`|`ezsettings.admin_group.pagination.section_limit`|
-|`ezsettings.default.pagination.language_limit`|`ezsettings.admin_group.pagination.language_limit`|
-|`ezsettings.default.pagination.role_limit`|`ezsettings.admin_group.pagination.role_limit`|
-|`ezsettings.default.pagination.content_type_group_limit`|`ezsettings.admin_group.pagination.content_type_group_limit`|
-|`ezsettings.default.pagination.content_type_limit`|`ezsettings.admin_group.pagination.content_type_limit`|
-|`ezsettings.default.pagination.role_assignment_limit`|`ezsettings.admin_group.pagination.role_assignment_limit`|
-|`ezsettings.default.pagination.policy_limit`|`ezsettings.admin_group.pagination.policy_limit`|
-|`ezsettings.default.pagination.version_draft_limit`|`ezsettings.admin_group.pagination.version_draft_limit`|
-|`ezsettings.default.pagination.content_system_url_limit`|`ezsettings.admin_group.pagination.content_system_url_limit`|
-|`ezsettings.default.pagination.content_custom_url_limit`|`ezsettings.admin_group.pagination.content_custom_url_limit`|
-|`ezsettings.default.pagination.content_role_limit`|`ezsettings.admin_group.pagination.content_role_limit`|
-|`ezsettings.default.pagination.content_policy_limit`|`ezsettings.admin_group.pagination.content_policy_limit`|
-|`ezsettings.default.pagination.bookmark_limit`|`ezsettings.admin_group.pagination.bookmark_limit`|
-|`ezsettings.default.pagination.notification_limit`|`ezsettings.admin_group.pagination.notification_limit`|
-|`ezsettings.default.pagination.content_draft_limit`|`ezsettings.admin_group.pagination.content_draft_limit`|
-|`ezsettings.default.security.token_interval_spec`|`ezsettings.admin_group.security.token_interval_spec`|
-|`ezsettings.default.user_content_type_identifier`|`ezsettings.admin_group.user_content_type_identifier`|
-|`ezsettings.default.user_group_content_type_identifier`|`ezsettings.admin_group.user_group_content_type_identifier`|
-|`ezsettings.default.subtree_operations.copy_subtree.limit`|`ezsettings.admin_group.subtree_operations.copy_subtree.limit`|
-|`ezsettings.default.notifications.error.timeout`|`ezsettings.admin_group.notifications.error.timeout`|
-|`ezsettings.default.notifications.warning.timeout`|`ezsettings.admin_group.notifications.warning.timeout`|
-|`ezsettings.default.notifications.success.timeout`|`ezsettings.admin_group.notifications.success.timeout`|
-|`ezsettings.default.notifications.info.timeout`|`ezsettings.admin_group.notifications.info.timeout`|
-|`ezsettings.default.content_tree_module.load_more_limit`|`ezsettings.admin_group.content_tree_module.load_more_limit`|
-|`ezsettings.default.content_tree_module.children_load_max_limit`|`ezsettings.admin_group.content_tree_module.children_load_max_limit`|
-|`ezsettings.default.content_tree_module.tree_max_depth`|`ezsettings.admin_group.content_tree_module.tree_max_depth`|
-|`ezsettings.default.content_tree_module.allowed_content_types`|`ezsettings.admin_group.content_tree_module.allowed_content_types`|
-|`ezsettings.default.content_tree_module.ignored_content_types`|`ezsettings.admin_group.content_tree_module.ignored_content_types`|
-|`ezsettings.default.content_tree_module.tree_root_location_id`|`ezsettings.admin_group.content_tree_module.tree_root_location_id`|
-
-### Template organization
-
-#### Templates renamed
-
-The following templates used in the back office have been renamed:
-
-|Former name|New name|
-|-----------|--------|
-|admin/systeminfo/composer.html.twig|admin/system_info/composer.html.twig|
-|admin/systeminfo/database.html.twig|admin/system_info/database.html.twig|
-|admin/systeminfo/hardware.html.twig|admin/system_info/hardware.html.twig|
-|admin/systeminfo/info.html.twig|admin/system_info/info.html.twig|
-|admin/systeminfo/php.html.twig|admin/system_info/php.html.twig|
-|admin/systeminfo/symfony_kernel.html.twig|admin/system_info/symfony_kernel.html.twig|
-|content/content_edit/parts/javascripts.html.twig|content/content_edit/part/javascripts.html.twig|
-|content/content_edit/parts/stylesheets.html.twig|content/content_edit/part/stylesheets.html.twig|
-|content/locationview.html.twig|content/location_view.html.twig|
-|content/widgets/content_create.html.twig|content/widget/content_create.html.twig|
-|content/widgets/content_edit.html.twig|content/widget/content_edit.html.twig|
-|content/widgets/user_edit.html.twig|content/widget/user_edit.html.twig|
-|errors/403.html.twig|error/403.html.twig|
-|errors/404.html.twig|error/404.html.twig|
-|errors/error.html.twig|error/error.html.twig|
-|fieldtypes/edit/binary_base.html.twig|field_type/edit/binary_base.html.twig|
-|fieldtypes/edit/binary_base_fields.html.twig|field_type/edit/binary_base_fields.html.twig|
-|fieldtypes/edit/ezauthor.html.twig|field_type/edit/ezauthor.html.twig|
-|fieldtypes/edit/ezbinaryfile.html.twig|field_type/edit/ezbinaryfile.html.twig|
-|fieldtypes/edit/ezboolean.html.twig|field_type/edit/ezboolean.html.twig|
-|fieldtypes/edit/ezdate.html.twig|field_type/edit/ezdate.html.twig|
-|fieldtypes/edit/ezdatetime.html.twig|field_type/edit/ezdatetime.html.twig|
-|fieldtypes/edit/ezgmaplocation.html.twig|field_type/edit/ezgmaplocation.html.twig|
-|fieldtypes/edit/ezimage.html.twig|field_type/edit/ezimage.html.twig|
-|fieldtypes/edit/ezimageasset.html.twig|field_type/edit/ezimageasset.html.twig|
-|fieldtypes/edit/ezkeyword.html.twig|field_type/edit/ezkeyword.html.twig|
-|fieldtypes/edit/ezmedia.html.twig|field_type/edit/ezmedia.html.twig|
-|fieldtypes/edit/ezobjectrelation.html.twig|field_type/edit/ezobjectrelation.html.twig|
-|fieldtypes/edit/ezobjectrelationlist.html.twig|field_type/edit/ezobjectrelationlist.html.twig|
-|fieldtypes/edit/ezrichtext.html.twig|field_type/edit/ezrichtext.html.twig|
-|fieldtypes/edit/ezselection.html.twig|field_type/edit/ezselection.html.twig|
-|fieldtypes/edit/eztime.html.twig|field_type/edit/eztime.html.twig|
-|fieldtypes/edit/ezuser.html.twig|field_type/edit/ezuser.html.twig|
-|fieldtypes/edit/relation_base.html.twig|field_type/edit/relation_base.html.twig|
-|fieldtypes/preview/content_fields.html.twig|field_type/preview/content_fields.html.twig|
-|fieldtypes/preview/ezimageasset.html.twig|field_type/preview/ezimageasset.html.twig|
-|fieldtypes/preview/ezobjectrelationlist_row.html.twig|field_type/preview/ezobjectrelationlist_row.html.twig|
-|Limitation/null_limitation_values.html.twig|limitation/null_limitation_values.html.twig|
-|Limitation/udw_limitation_value.html.twig|limitation/udw_limitation_value.html.twig|
-|Limitation/udw_limitation_value_list_item.html.twig|limitation/udw_limitation_value_list_item.html.twig|
-|parts/breadcrumbs.html.twig|part/breadcrumbs.html.twig|
-|parts/form/assign_section_widget.html.twig|part/form/assign_section_widget.html.twig|
-|parts/form/flat_widgets.html.twig|part/form/flat_widgets.html.twig|
-|parts/location_bookmark.html.twig|part/location_bookmark.html.twig|
-|parts/menu/sidebar_base.html.twig|part/menu/sidebar_base.html.twig|
-|parts/menu/sidebar_right.html.twig|part/menu/sidebar_right.html.twig|
-|parts/menu/sidebar_left.html.twig|part/menu/sidebar_left.html.twig|
-|parts/menu/top_menu.html.twig|part/menu/top_menu.html.twig|
-|parts/menu/top_menu_2nd_level.html.twig|part/menu/top_menu_2nd_level.html.twig|
-|parts/menu/top_menu_base.html.twig|part/menu/top_menu_base.html.twig|
-|parts/menu/user_menu.html.twig|part/menu/user_menu.html.twig|
-|parts/navigation.html.twig|part/navigation.html.twig|
-|parts/notification.html.twig|part/notification.html.twig|
-|parts/page_title.html.twig|part/page_title.html.twig|
-|parts/path.html.twig|part/path.html.twig|
-|parts/tab/content_type.html.twig|part/tab/content_type.html.twig|
-|parts/tab/default.html.twig|part/tab/default.html.twig|
-|parts/tab/locationview.html.twig|part/tab/location_view.html.twig|
-|parts/tab/system_info.html.twig|part/tab/system_info.html.twig|
-|parts/table_header.html.twig|part/table_header.html.twig|
-|parts/tag.html.twig|part/tag.html.twig|
-|Security/base.html.twig|security/base.html.twig|
-|Security/forgot_user_password/index.html.twig|security/forgot_user_password/index.html.twig|
-|Security/forgot_user_password/success.html.twig|security/forgot_user_password/success.html.twig|
-|Security/forgot_user_password/with_login.html.twig|security/forgot_user_password/with_login.html.twig|
-|Security/form_fields.html.twig|security/form_fields.html.twig|
-|Security/login.html.twig|security/login.html.twig|
-|Security/mail/forgot_user_password.html.twig|security/mail/forgot_user_password.html.twig|
-|Security/reset_user_password/index.html.twig|security/reset_user_password/index.html.twig|
-|Security/reset_user_password/invalid_link.html.twig|security/reset_user_password/invalid_link.html.twig|
-|Security/reset_user_password/success.html.twig|security/reset_user_password/success.html.twig|
-|user-profile/change_user_password.html.twig|user_profile/change_user_password.html.twig|
-|user-profile/form_fields.html.twig|user_profile/form_fields.html.twig|
-
-#### Templates relocated
-
-The `@ezdesign/account/error/credentials_expired.html.twig` has been relocated from `src/bundle/Resources/views/Security/error` to `src/bundle/Resources/views/themes/admin/account/error`.
-
-### Universal Discovery Widget
-
-The UDW configuration has been changed.
-For the full list of UDW configuration keys and their descriptions, see [UDW configuration](https://doc.ibexa.co/en/3.3/extending/extending_udw/#configuration).
-
-### Online Editor
-
-All Online Editor front-end code and assets (such as JS, CSS, or fonts) have been moved from `ezplatform-admin-ui` to `ezplatform-richtext`.
-
-### Adding new tabs in the back office
-
-The way of adding custom tab groups in the back office has changed.
-You now need to [make use of the `TabsComponent`](https://doc.ibexa.co/en/3.3/extending/tabs/back_office_tabs/).
-
-### Content type forms
-
-Content type editing, including Action Dispatchers, Form Processors, Types and Data classes related to content types/Limitations,
-has been moved to `ezplatform-admin-ui` from `repository-forms`.
-
-### Code cleanup in back office
-
-The following deprecated items have been removed:
-
-|Removed code|Belongs to|Use instead|
-|------------|----------|-----------|
-|`canEdit`|`EzSystems\EzPlatformAdminUiBundle\Controller\LanguageController::viewAction`|`can_administrate`|
-|`canAssign`|`EzSystems\EzPlatformAdminUiBundle\Controller\LanguageController::viewAction`|`can_administrate`|
-|`baseLanguage`|`EzSystems\EzPlatformAdminUi\EventListener\ContentTranslateViewFilterParametersListener::onFilterViewParameters`|`base_language`|
-|`contentType`|`EzSystems\EzPlatformAdminUi\EventListener\ContentTranslateViewFilterParametersListener::onFilterViewParameters`|`content_type`|
-|`isPublished`|`EzSystems\EzPlatformAdminUi\EventListener\ContentTranslateViewFilterParametersListener::onFilterViewParameters`|`ContentInfo::isPublished`|
-|`fieldDefinitionsByGroup`|`EzSystems\EzPlatformAdminUi\Tab\LocationView\ContentTab`| `field_definitions_by_group` |
-|`full`|`window.eZ.adminUiConfig.dateFormat`| `fullDateTime` |
-|`short`|`window.eZ.adminUiConfig.dateFormat`| `shortDateTime` |
-|`limit`|`EzSystems\EzPlatformAdminUi\UI\Module\Subitems\ContentViewParameterSupplier`| |
-|`contentTypeNames`|`window.eZ.adminUiConfig`|`contentTypes`|
-
-Following the upgrade to Symfony 5, the following event classes have been deprecated:
-
-|Deprecated|Use instead|
-|----------|-----------|
-|`Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent`|`Symfony\Component\HttpKernel\Event\ExceptionEvent`|
-|`Symfony\Component\HttpKernel\Event\GetResponseEvent`|`Symfony\Component\HttpKernel\Event\RequestEvent`|
-
-Also, as of Symfony 5, the `transchoice` Twig filter has been replaced with `trans`.
-New translation strings are required.
-
-### SubtreeQuery
-
-Deprecated `SubtreeQuery` class has been removed. In v3.0, it was replaced by `EzSystems\EzPlatformAdminUi\QueryType\SubtreeQueryType`.
-
-### Permission Choice Loaders
-
-The following choiceLoaders classes deprecated in v2.5 have been removed:
-
-- `EzSystems\EzPlatformAdminUi\Form\Type\ChoiceList\Loader\PermissionAwareContentTypeChoiceLoader`
-- `EzSystems\EzPlatformAdminUi\Form\Type\ChoiceList\Loader\PermissionAwareLanguageChoiceLoader`
-
-Instead, use the following classes:
-
-- `EzSystems\EzPlatformAdminUi\Form\Type\ChoiceList\Loader\ContentCreateContentTypeChoiceLoader`
-- `EzSystems\EzPlatformAdminUi\Form\Type\ChoiceList\Loader\ContentCreateLanguageChoiceLoader`
-
-### Universal Discovery Widget
-
-The deprecated `universal_discovery_widget_module.default_location_id` setting has been replaced with `universal_discovery_widget_module.configuration.default.starting_location_id`.
-
-## ezplatform-admin-ui-modules
-
-This package is deprecated. Its code has been moved to [`ezplatform-admin-ui`](#ezplatform-admin-ui).
-
-## ezplatform-content-forms
-
-This new package contains forms for content creation moved from `repository-forms`.
-
-## ezplatform-design-engine
-
-### Code cleanup in Design Engine
-
-- The deprecated `Twig\Loader\ExistsLoaderInterface` has been removed.
-- The deprecated `Twig_Profiler_Profile` Twig class has been replaced with `Twig\Profiler\Profile`.
-- The deprecated `Twig_Environment` Twig class has been replaced with `Twig\Environment`
-
-## ezplatform-form-builder
-
-### JavaScript
-
-#### Event names changed
-
-The following event names have been changed:
-
-|Former name|New name|
-|-----------|--------|
-|`openUdw`|`ez-open-udw`|
-|`updateFieldName`|`ez-update-field-name`|
-|`fbFormBuilderLoaded`|`ez-form-builder-loaded`|
-|`fbFormBuilderUnloaded`|`ez-form-builder-unloaded`|
-
-## ezplatform-http-cache
-
-### FOS Cache Bundle v2
-
-HTTP cache bundle now uses FOS Cache Bundle v2.
-
-This entails that:
-
-- `EzSystems\PlatformHttpCacheBundle\Proxy\TagAwareStore` has been removed.
-- `EzSystems\PlatformHttpCacheBundle\Handler\TagHandler` has been changed so that the tag is now provided as an option in `header_formatter`.
-- `tagResponse()` from `tagHandler` has been replaced by `tagSymfonyResponse()`.
-- Deprecated `EzSystems\PlatformHttpCacheBundle\Handler\TagHandlerInterface` has been removed.
-- `EzSystems\PlatformHttpCacheBundle\PurgeClient\PurgeClientInterface` now only accepts an array as argument in the `purge()` method, instead of an int.
-- The `X-User-Hash` header for recognizing user context has been changed to `X-User-Context-Hash`.
-- The `key` header for purging tags has been changed to `xkey-softpurge`.
-- The `PURGE` method has been changed to `PURGEKEY`.
-- The `ezplatform.http_cache.tags.header` parameter has been removed. Configuration now relies on FOS Cache configuration and its default values.
-
-### Code cleanup in HTTP Cache
-
-Instances of the following deprecated event classes have been replaced:
-
-|Deprecated class|Replaced with|
-|----------------|-------------|
-|`Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent`|`Symfony\Component\HttpKernel\Event\ExceptionEvent`|
-|`Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent`|`Symfony\Component\HttpKernel\Event\ViewEvent`|
-|`Symfony\Component\HttpKernel\Event\FilterResponseEvent`|`Symfony\Component\HttpKernel\Event\ResponseEvent`|
-|`Symfony\Component\HttpKernel\Event\GetResponseEvent`|`Symfony\Component\HttpKernel\Event\RequestEvent`|
-|`Twig_Extension`|`Twig\Extension\AbstractExtension`|
-|`Twig_SimpleFunction`|`Twig\TwigFunction`|
-
-Selected deprecated Role Service and permission-related methods have been removed.
-For details, see [code cleanup in kernel](#code-cleanup-in-ez-platform-kernel).
-
-## ezplatform-kernel replacing ezpublish-kernel
-
-### ezplatform-kernel package
-
-eZ Platform now makes use of [`ezplatform-kernel`](https://github.com/ezsystems/ezplatform-kernel) instead of `ezpublish-kernel`.
-This change is introduced without BC breaks.
-
-### API methods
-
-Following API methods have been removed:
-
-- `\eZ\Publish\API\Repository\ContentService::removeTranslation`
-- `\eZ\Publish\API\Repository\UserService::loadAnonymousUser`
-- `\eZ\Publish\API\Repository\Repository::getCurrentUser`
-- `\eZ\Publish\API\Repository\Repository::getCurrentUserReference`
-- `\eZ\Publish\API\Repository\Repository::setCurrentUser`
-- `\eZ\Publish\API\Repository\Repository::hasAccess`
-- `\eZ\Publish\API\Repository\Repository::canUser`
-- `\eZ\Publish\API\Repository\RoleService::updateRole`
-- `\eZ\Publish\API\Repository\RoleService::addPolicy`
-- `\eZ\Publish\API\Repository\RoleService::deletePolicy`
-- `\eZ\Publish\API\Repository\RoleService::updatePolicy`
-- `\eZ\Publish\API\Repository\RoleService::loadPoliciesByUserId`
-- `\eZ\Publish\API\Repository\RoleService::unassignRoleFromUser`
-- `\eZ\Publish\API\Repository\RoleService::unassignRoleFromUserGroup`
-- `\eZ\Publish\API\Repository\Values\Content\Query\Criterion::createFromQueryBuilder`
-- `\eZ\Publish\API\Repository\Values\Content\Query\Criterion\Ancestor::createFromQueryBuilder`
-- `\eZ\Publish\API\Repository\Values\Content\Query\Criterion\ContentId::createFromQueryBuilder`
-- `\eZ\Publish\API\Repository\Values\Content\Query\Criterion\ContentTypeGroupId::createFromQueryBuilder`
-- `\eZ\Publish\API\Repository\Values\Content\Query\Criterion\ContentTypeId::createFromQueryBuilder`
-- `\eZ\Publish\API\Repository\Values\Content\Query\Criterion\ContentTypeIdentifier::createFromQueryBuilder`
-- `\eZ\Publish\API\Repository\Values\Content\Query\Criterion\FieldRelation::createFromQueryBuilder`
-- `\eZ\Publish\API\Repository\Values\Content\Query\Criterion\FullText::createFromQueryBuilder`
-- `\eZ\Publish\API\Repository\Values\Content\Query\Criterion\LanguageCode::createFromQueryBuilder`
-- `\eZ\Publish\API\Repository\Values\Content\Query\Criterion\LocationId::createFromQueryBuilder`
-- `\eZ\Publish\API\Repository\Values\Content\Query\Criterion\LocationRemoteId::createFromQueryBuilder`
-- `\eZ\Publish\API\Repository\Values\Content\Query\Criterion\MatchAll::createFromQueryBuilder`
-- `\eZ\Publish\API\Repository\Values\Content\Query\Criterion\MatchNone::createFromQueryBuilder`
-- `\eZ\Publish\API\Repository\Values\Content\Query\Criterion\MoreLikeThis::createFromQueryBuilder`
-- `\eZ\Publish\API\Repository\Values\Content\Query\Criterion\ObjectStateId::createFromQueryBuilder`
-- `\eZ\Publish\API\Repository\Values\Content\Query\Criterion\ParentLocationId::createFromQueryBuilder`
-- `\eZ\Publish\API\Repository\Values\Content\Query\Criterion\RemoteId::createFromQueryBuilder`
-- `\eZ\Publish\API\Repository\Values\Content\Query\Criterion\SectionId::createFromQueryBuilder`
-- `\eZ\Publish\API\Repository\Values\Content\Query\Criterion\Subtree::createFromQueryBuilder`
-- `\eZ\Publish\API\Repository\Values\Content\Query\Criterion\Visibility::createFromQueryBuilder`
-
-### SPI methods
-
-Following SPI methods have been removed:
-
-- `\eZ\Publish\SPI\Persistence\Content\Handler::removeTranslationFromContent`
-
-### Dynamic settings
-
-Using dynamic settings (through `$setting$`) and getting settings from the [ConfigResolver](https://doc.ibexa.co/en/3.3/guide/configuration/config_dynamic/#configresolver) in a class constructor
-or method call has been dropped.
-
-You should use the ConfigResolver instead.
-Don't store the values globally. Every time the value is needed call `ConfigResolverInterface::getParameter`.
-
-### Controllers
-
-#### AbstractController
-
-The `eZ\Bundle\EzPublishCoreBundle\Controller` now extends `Symfony\Bundle\FrameworkBundle\Controller\AbstractController` instead of `Symfony\Bundle\FrameworkBundle\Controller\Controller` which has limited access to the [service container](https://doc.ibexa.co/en/3.3/api/public_php_api/#service-container).
-For details, see [Service Subscribers Locators]([[= symfony_doc =]]/service_container/subscribers_locators.html).
-
-The `Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand` is deprecated, use `Symfony\Component\Console\Command\Command` instead.
-
-#### ViewController
-
-Deprecated `viewLocation` and `embedLocation` actions of the `ViewController` have been removed, along with related route `_ezpublishLocation`.
-Use:
-
-- `viewAction` instead of `viewLocation`
-- `embedAction` instead of `embedLocation`
-
-### Elasticsearch
-
-Experimental, deprecated and unsupported code for Elasticsearch 1.4.2 has been dropped from kernel,
-to be replaced with a dedicated bundle for the latest Elastic version in the future.
-
-### Field types
-
-#### Star Rating
-
-The unused `ezsrrating` field type has been removed along with the related database storage and clean installation entries.
-
-#### RichText
-
-The `ezrichtext` field type has been removed from `ezplatform-kernel`.
-Use [`ezplatform-richtext`](https://github.com/ezsystems/ezplatform-richtext) instead.
-
-Following this change:
-
-- The `eZ\Publish\Core\FieldType\RichText` namespace has been dropped. All classes are available in `ezplatform-richtext`.
-- The only correct configuration (recommended as of v2.4) looks the following way:
-
-Now (as of v3.0):
-
-``` yaml
-ezrichtext:
-```
-
-Formerly (deprecated as of v2.4, removed as of v3.0)
-
-``` yaml
-ezpublish:
- ezrichtext
-```
-
-#### Tags
-
-Deprecated `ezpublish.query_type` tag has been removed in favour of `ezplatform.query_type` tag.
-
-### Signal Slots
-
-Signal Slots have been replaced by [Symfony Events and Event Listeners]([[= symfony_doc =]]/event_dispatcher.html).
-
-The application triggers two Events per operation: one before and one after the relevant thing happens
-(see for example [Bookmark events](https://github.com/ezsystems/ezplatform-kernel/blob/v1.0.0/eZ/Publish/Core/Event/BookmarkService.php)).
-
-### Legacy Storage Gateways
-
-The following deprecated (since v6.11) Legacy Storage Gateways have been removed:
-
-- `eZ\Publish\Core\FieldType\BinaryFile\BinaryBaseStorage\Gateway\LegacyStorage`
-- `eZ\Publish\Core\FieldType\BinaryFile\BinaryFileStorage\Gateway\LegacyStorage`
-- `eZ\Publish\Core\FieldType\MapLocation\MapLocationStorage\Gateway\LegacyStorage`
-- `eZ\Publish\Core\FieldType\Image\ImageStorage\Gateway\LegacyStorage`
-- `eZ\Publish\Core\FieldType\Keyword\KeywordStorage\Gateway\LegacyStorage`
-- `eZ\Publish\Core\FieldType\Media\MediaStorage\Gateway\LegacyStorage`
-- `eZ\Publish\Core\FieldType\Url\UrlStorage\Gateway\LegacyStorage`
-- `eZ\Publish\Core\FieldType\User\UserStorage\Gateway\LegacyStorage`
-
-Use `DoctrineStorage` Gateways from the same namespace instead.
-The removed classes refer to External Storage for core field types only.
-
-### REST server
-
-Transfer of REST code from kernel to a separate package results in the following change:
-
-- The `eZ\Publish\Core\REST` and `eZ\Publish\Core\REST\Common\` namespaces have been replaced by `EzSystems\EzPlatformRest`.
-- REST client has been dropped.
-
-### SiteAccess-aware Repository
-
-The Repository now uses the SiteAccess-aware layer by default.
-This means Repository objects are now loaded in the translation corresponding to the SiteAccess.
-To load an object with all its translations, explicitly pass `eZ\Publish\API\Repository\Values\Content\Language::ALL`
-as the prioritized languages list.
-
-### SiteAccess matching
-
-When matching SiteAccesses using custom services, the SiteAccess matcher service must be now tagged with `ezplatform.siteaccess.matcher`.
-
-### Search Indexers
-
-Service Provider abstracts for Search Engine Indexer implementations (`\eZ\Publish\Core\Search\Common\IncrementalIndexer` and `\eZ\Publish\Core\Search\Common\Indexer`) now accept `\Doctrine\DBAL\Connection $connection` instead of `\eZ\Publish\Core\Persistence\Database\DatabaseHandler $databaseHandler`.
-Inject them via `@ezpublish.persistence.connection`.
-
-The methods `getContentLocationIds` and `logWarning` of `\eZ\Publish\Core\Search\Common\Indexer` have been dropped.
-Use Location SPI Persistence Handler in place of `getContentLocationIds`. Use Logger directly in place of `logWarning`.
-
-### Database
-
-The following obsolete tables have been removed from the database schema:
-
-??? note "Removed database tables"
-
- - ezapprove_items
- - ezbasket
- - ezcollab_group
- - ezcollab_item
- - ezcollab_item_group_link
- - ezcollab_item_message_link
- - ezcollab_item_participant_link
- - ezcollab_item_status
- - ezcollab_notification_rule
- - ezcollab_profile
- - ezcollab_simple_message
- - ezcomment
- - ezcomment_notification
- - ezcomment_subscriber
- - ezcomment_subscription
- - ezcontentbrowserecent
- - ezcurrencydata
- - ezdiscountrule
- - ezdiscountsubrule
- - ezdiscountsubrule_value
- - ezenumobjectvalue
- - ezenumvalue
- - ezforgot_password
- - ezgeneral_digest_user_settings
- - ezinfocollection
- - ezinfocollection_attribute
- - ezisbn_group
- - ezisbn_group_range
- - ezisbn_registrant_range
- - ezm_block
- - ezm_pool
- - ezmessage
- - ezmodule_run
- - ezmultipricedata
- - eznotificationcollection
- - eznotificationcollection_item
- - eznotificationevent
- - ezoperation_memento
- - ezorder
- - ezorder_item
- - ezorder_nr_incr
- - ezorder_status
- - ezorder_status_history
- - ezpaymentobject
- - ezpdf_export
- - ezpending_actions
- - ezprest_authcode
- - ezprest_authorized_clients
- - ezprest_clients
- - ezprest_token
- - ezproductcategory
- - ezproductcollection
- - ezproductcollection_item
- - ezproductcollection_item_opt
- - ezpublishingqueueprocesses
- - ezrss_export
- - ezrss_export_item
- - ezrss_import
- - ezscheduled_script
- - ezsearch_search_phrase
- - ezsession
- - ezsubtree_notification_rule
- - eztipafriend_counter
- - eztipafriend_request
- - eztrigger
- - ezuservisit
- - ezuser_discountrule
- - ezvatrule
- - ezvatrule_product_category
- - ezvattype
- - ezview_counter
- - ezwaituntildatevalue
- - ezwishlist
- - ezworkflow
- - ezworkflow_assign
- - ezworkflow_event
- - ezworkflow_group
- - ezworkflow_group_link
- - ezworkflow_process
-
-You can drop unused tables from your database by executing:
-
-``` sql
-DROP TABLE ;
-```
-
-- The "Setup" folder and Section have been removed from clean installation data.
-- The "Design" Section has been removed from clean installation data.
-- The `ezkeyword_attribute_link` table now has a `version` column.
-
-#### Content type Update handlers
-
-The following obsolete handler has been removed:
-
-- `DeferredLegacy` content type Update handler
-(`eZ\Publish\Core\Persistence\Legacy\Content\Type\Update\Handler\DeferredLegacy`) with its optional Symfony Container Service (`ezpublish.persistence.legacy.content_type.update_handler.deferred`)
-
-Subscribe to eZ Platform Symfony Events to handle deferring of updating of content items after their content type update instead.
-
-### Symfony Services
-
-The `date_based_publisher.permission_resolver` Symfony Service deprecated in v2.5 has been removed.
-Instead, you can inject `eZ\Publish\API\Repository\PermissionResolver` and rely on auto-wiring.
-
-### Symfony MIME component
-
-The deprecated `Symfony\Component\HttpFoundation\File\MimeType\ExtensionGuesserInterface` has been replaced with `Symfony\Component\Mime\MimeTypesInterface`.
-
-### Symfony service container
-
-The deprecated Symfony [service container](https://doc.ibexa.co/en/3.3/api/public_php_api/#service-container) parameters ending with `.class` have been removed, services relying on them now have their classes defined explicitly.
-To properly decorate a Symfony service, use the `decorates` attribute instead.
-For the full list of the dropped parameters, see
-[kernel documentation](https://github.com/ezsystems/ezpublish-kernel/blob/master/doc/bc/1.0/dropped-container-parameters.md).
-
-### Template parameter names
-
-The SiteAccess-aware `pagelayout` setting is deprecated in favor of `page_layout`.
-
-View parameter `pagelayout` set by `pagelayout` setting is deprecated in favor of `page_layout`.
-
-### Code cleanup in eZ Platform Kernel
-
-Instances of the deprecated code have been replaced:
-
-|Deprecated|Replaced with|
-|----------|-------------|
-|`Symfony\Component\Security\Core\User\AdvancedUserInterface`|`Symfony\Component\Security\Core\User\UserInterface`|
-|`Symfony\Component\HttpKernel\Event\FilterResponseEvent`|`Symfony\Component\HttpKernel\Event\ResponseEvent`|
-|`Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent`|`Symfony\Component\HttpKernel\Event\ViewEvent`|
-|`Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent`|`Symfony\Component\HttpKernel\Event\ExceptionEvent`|
-|`Symfony\Component\HttpKernel\Event\GetResponseEvent`|`Symfony\Component\HttpKernel\Event\RequestEvent`|
-|`Symfony\Component\HttpKernel\Event\FilterControllerArgumentsEvent`|`Symfony\Component\HttpKernel\Event\ControllerEvent`|
-
-Also, as of Symfony 5, the `transchoice` Twig filter has been replaced with `trans`.
-New translation strings are required.
-
-The deprecated `eZ\Publish\Core\MVC\Symfony\Matcher\MatcherInterface` interface has been dropped.
-The following deprecated classes relying on that interface have been removed as well:
-
-- `eZ\Publish\Core\MVC\Symfony\Matcher\AbstractMatcherFactory`
-- `eZ\Publish\Core\MVC\Symfony\Matcher\ContentBasedMatcherFactory`
-- `eZ\Publish\Core\MVC\Symfony\Matcher\ContentMatcherFactory`
-- `eZ\Publish\Core\MVC\Symfony\Matcher\LocationMatcherFactory`
-
-### Twig classes
-
-The following deprecated Twig classes have been replaced:
-
-|Deprecated|Replaced with|
-|----------|-------------|
-|`Twig_Extensions_Extension_Intl`|`Twig\Extensions\IntlExtension`|
-|`Twig_Template`|`Twig\Template`|
-|`Twig_Node`|`Twig\Node\Node`|
-
-### Twig intl extension
-
-Twig intl extension [has been dropped](https://github.com/twigphp/Twig-extensions/blob/master/README.rst).
-
-### EzPublishMigration
-
-The `EzPublishMigration` bundle has been dropped.
-
-### EzMigrationBundle
-
-As of v3.3.3, the `ezsystems/EzMigrationBundle` bundle has been dropped. Use `ibexa/migrations` instead.
-
-### Password hashes
-
-Insecure password hash types deprecated since v1.13 have been removed:
-
-- `PASSWORD_HASH_MD5_PASSWORD`
-- `PASSWORD_HASH_MD5_USER`
-- `PASSWORD_HASH_MD5_SITE`
-- `PASSWORD_HASH_PLAINTEXT`
-
-Login with the removed hashes doesn't longer work.
-Users can use the "Forgot password" feature to request a new, valid password.
-
-### Strict types for PHP API
-
-Strict types have been added to public PHP API methods.
-
-### Zeta Components (eZc) Database handler
-
-The deprecated Zeta Components (eZc) Database handler has been dropped.
-All classes and interfaces from `eZ\Publish\Core\Persistence\Database` and `eZ\Publish\Core\Persistence\Doctrine` namespaces have been removed.
-
-`ezpublish.connection` has been removed. Use `ezpublish.persistence.connection` instead.
-
-The signature of the `\eZ\Publish\Core\Persistence\Legacy\URL\Query\CriterionHandler::handle` contract
-now accepts `\Doctrine\DBAL\Query\QueryBuilder` instead of `\eZ\Publish\Core\Persistence\Database\SelectQuery` and has the following form:
-
-``` php {skip-validation}
-use \Doctrine\DBAL\Query\QueryBuilder;
-use \eZ\Publish\Core\Persistence\Legacy\URL\Query\CriteriaConverter;
-use \eZ\Publish\API\Repository\Values\URL\Query\Criterion;
-public function handle(CriteriaConverter $converter, QueryBuilder $query, Criterion $criterion);
-```
-
-`ezpublish.api.search_engine.legacy.dbhandler` and `ezpublish.api.storage_engine.legacy.dbhandler`
-have been removed.
-Inject `\Doctrine\DBAL\Connection` via `ezpublish.persistence.connection` instead.
-
-#### Field type External Storage Handlers
-
-The field type External Storage Handlers `$context` arrays no longer have the "connection" key.
-You should rely on injected Connection instead.
-
-The `$context` array of `\eZ\Publish\SPI\FieldType\FieldStorage` methods (`storeFieldData`,
-`getFieldData`, `deleteFieldData`, `getIndexData`) is deprecated and will be dropped in the next
-major version.
-You should rely on injected Connection instead.
-
-## ezplatform-page-builder
-
-### JavaScript
-
-#### Event names changed
-
-The following event names have been changed:
-
-|Former name|New name|
-|-----------|--------|
-|`openUdw`|`ez-open-udw`|
-|`openAirtimePopup`|`ez-open-airtime-popup`|
-|`postUpdateBlocksPreview`|`ez-post-update-blocks-preview`|
-|`pbIframeLoaded`|`ez-page-builder-iframe-loaded`|
-|`pbHideTools`|`ez-page-builder-hide-tools`|
-
-Additionally, the listener for `pbPreviewReloaded` has been removed.
-
-## ezplatform-page-fieldtype
-
-### Namespace location update
-
-The following namespaces have been changed:
-
-|Namespace|Former location|New location|
-|---------|------------|---------------|
-|`FieldData`|`EzSystems\RepositoryForms\Data\Content\`|`EzSystems\EzPlatformContentForms\Data\Content\`|
-|`FieldValueFormMapperInterface`|`EzSystems\RepositoryForms\FieldType\`|`EzSystems\EzPlatformContentForms\FieldType\`|
-
-## ezplatform-rest
-
-### Code cleanup in eZ Platform REST
-
-Selected deprecated Role Service and permission-related methods have been removed.
-For details, see [code cleanup in kernel](#code-cleanup-in-ez-platform-kernel).
-
-Using the Criteria element in REST input query (search view) payload has been deprecated since eZ Platform v1.6 and was dropped in this release.
-
-## ezplatform-richtext
-
-### Code cleanup in eZ Platform RichText
-
-Selected deprecated permission-related methods have been removed.
-For details, see [code cleanup in kernel](#code-cleanup-in-ez-platform-kernel).
-
-### Input and output converters
-
-Following the removal of the `ezrichtext` field type from kernel, the following deprecated converter tags have been changed:
-
-|Formerly|Currently|
-|--------|---------|
-|`ezpublish.ezrichtext.converter.output.xhtml5`|`ezrichtext.converter.output.xhtml5`|
-|`ezpublish.ezrichtext.converter.input.xhtml5`|`ezrichtext.converter.input.xhtml5`|
-
-### Online Editor
-
-Configuration providers exposing the following JavaScript variables have been dropped:
-
-- `eZ.adminUiConfig.alloyEditor` replaced by `eZ.richText.alloyEditor`
-- `eZ.adminUiConfig.richTextCustomTags` replaced by `eZ.richText.customTags`
-- `eZ.adminUiConfig.richTextCustomStyles` replaced by `eZ.richText.customStyles`
-
-The following Webpack Encore entries have been changed:
-
-- `ezplatform-admin-ui-alloyeditor-css` replaced by `ezplatform-richtext-onlineeditor-css`
-- `ezplatform-admin-ui-alloyeditor-js` replaced by `ezplatform-richtext-onlineeditor-js`
-
-All Online Editor front-end code and assets (such as JS, CSS, or fonts) have been moved from `ezplatform-admin-ui` to `ezplatform-richtext`.
-
-#### Custom button configuration
-
-Configuring custom Online Editor buttons with `ezrichtext.alloy_editor.extra_buttons` is deprecated.
-Use [`ezplatform.system..fieldtypes.ezrichtext.toolbars..buttons`](https://doc.ibexa.co/en/3.3/extending/online_editor_button/) instead.
-
-### View matching
-
-When matching views using custom services, the services must be now tagged with `ezplatform.view.matcher`.
-The matching must be configured in the following way:
-
-``` yaml
-content_view:
- full:
- folder:
- template: folder.html.twig
- match:
- '@App\Matcher\MyMatcher': ~
-```
-
-### Service tags
-
-The following `ezrichtext` service tags have been extended to be consistent with other service tags:
-
-|Currently|Formerly|
-|---------|--------|
-|`ezplatform.ezrichtext.converter.output.xhtml5`|`ezrichtext.converter.output.xhtml5`|
-|`ezplatform.ezrichtext.converter.input.xhtml5`|`ezrichtext.converter.input.xhtml5`|
-|`ezplatform.ezrichtext.validator.input.ezxhtml5`|`ezrichtext.validator.input.ezxhtml5`|
-
-## ezplatform-solr-search-engine
-
-The `ezplatform:solr_create_index` command has been removed.
-Use `ezplatform:reindex` instead.
-
-## ezplatform-user
-
-### User settings
-
-As a result of moving user settings to the [`ezplatform-user`](https://github.com/ezsystems/ezplatform-user) package,
-the following deprecated code for handling the settings has been dropped:
-
-- `EzSystems\EzPlatformAdminUi\UserSetting\`
-- `EzSystems\EzPlatformAdminUi\Pagination\Pagerfanta\UserSettingsAdapter`
-- `EzSystems\EzPlatformAdminUi\Form\Type\User\Setting\UserSettingUpdateType`
-- `EzSystems\EzPlatformAdminUiBundle\Controller\UserProfile\UserPasswordChangeController`
-- `EzSystems\EzPlatformAdminUiBundle\Controller\User\{UserSettingsController,UserForgotPasswordController}`
-
-### Code cleanup in eZ Platform User
-
-The deprecated `Symfony\Bundle\FrameworkBundle\Controller\Controller` has been replaced with `Symfony\Bundle\FrameworkBundle\Controller\AbstractController`.
-
-## flex-workflow
-
-This package is deprecated. Its functionality has been moved to `ezplatform-workflow`.
-
-## repository-forms
-
-Forms located in `repository-forms` have been moved to other packages.
-
-Content type editing, including Action Dispatchers, Form Processors, Types and Data classes related to content types/Limitations,
-has been moved to `ezplatform-admin-ui`.
-
-The following locations have been changed:
-
-|Former location|New location|
-|---------------|------------|
-|`EzSystems\RepositoryForms\Data\FieldDefinitionData`| `EzSystems\EzPlatformAdminUi\Form\Data\FieldDefinitionData`|
-|`EzSystems\RepositoryForms\FieldType\FieldDefinitionFormMapperInterface`|`EzSystems\EzPlatformAdminUi\FieldType\FieldDefinitionFormMapperInterface` |
-|`EzSystems\RepositoryForms\Limitation\LimitationFormMapperInterface`|`EzSystems\EzPlatformAdminUi\Limitation\LimitationFormMapperInterface`|
-|`EzSystems\RepositoryForms\Limitation\LimitationValueMapperInterface`|`EzSystems\EzPlatformAdminUi\Limitation\LimitationValueMapperInterface`|
-
-Forms for content creation have been moved to a new `ezplatform-content-forms` package.
-
-`repository-forms` remains as an additional layer ensuring that your custom implementations that use the package still work.
-To use this repository, you have to add the package manually to your `composer.json`.
-
-## eZ Platform v3.0.2
-
-### ezplatform-admin-ui v3.0.2
-
-The following classes have been moved to `EzPlatformContentFormsBundle`:
-
-|Former location|Current location|
-|------------|-------------|
-|`EzSystems\EzPlatformAdminUi\Form\Data\User\UserPasswordChangeData`|`EzSystems\EzPlatformUser\Form\Data\UserPasswordChangeData`|
-|`EzSystems\EzPlatformAdminUi\Form\Data\User\UserPasswordForgotData`|`EzSystems\EzPlatformUser\Form\Data\UserPasswordForgotData`|
-|`EzSystems\EzPlatformAdminUi\Form\Data\User\UserPasswordResetData`|`EzSystems\EzPlatformUser\Form\Data\UserPasswordResetData`|
-|`EzSystems\EzPlatformAdminUi\Form\Type\User\UserPasswordChangeType`|`EzSystems\EzPlatformUser\Form\Type\UserPasswordChangeType`|
-|`EzSystems\EzPlatformAdminUi\Form\Type\User\UserPasswordForgotType`|`EzSystems\EzPlatformUser\Form\Type\UserPasswordForgotType`|
-|`EzSystems\EzPlatformAdminUi\Form\Type\User\UserPasswordForgotWithLoginType`|`EzSystems\EzPlatformUser\Form\Type\UserPasswordForgotWithLoginType`|
-|`EzSystems\EzPlatformAdminUi\Form\Type\User\UserPasswordResetType`|`EzSystems\EzPlatformUser\Form\Type\UserPasswordResetType`|
-|`EzSystems\EzPlatformAdminUi\Validator\Constraints\Password`|`EzSystems\EzPlatformUser\Validator\Constraints\Password`|
-|`EzSystems\EzPlatformAdminUi\Validator\ConstraintsPasswordValidator`|`EzSystems\EzPlatformUser\Validator\Constraints\PasswordValidator`|
-|`EzSystems\EzPlatformAdminUi\Validator\Constraints\UserPassword`|`EzSystems\EzPlatformUser\Validator\Constraints\UserPassword`|
-|`EzSystems\EzPlatformAdminUi\Validator\Constraints\UserPasswordValidator`|`EzSystems\EzPlatformUser\Validator\Constraints\UserPasswordValidator\ValidationErrorsProcessor`|
-
-The following methods have been moved to `EzPlatformUserBundle`:
-
-|Former method|Current method|
-|------------|-------------|
-|`EzSystems\EzPlatformAdminUi\Form\Factory\FormFactory::changeUserPassword`|`EzSystems\EzPlatformUser\Form\Factory\FormFactory::changeUserPassword`|
-|`EzSystems\EzPlatformAdminUi\Form\Factory\FormFactory::forgotUserPassword`|`EzSystems\EzPlatformUser\Form\Factory\FormFactory::forgotUserPassword`|
-|`EzSystems\EzPlatformAdminUi\Form\Factory\FormFactory::resetUserPassword`|`EzSystems\EzPlatformUser\Form\Factory\FormFactory::resetUserPassword`|
-|`EzSystems\EzPlatformAdminUi\Form\Factory\FormFactory::updateUserSetting`|`EzSystems\EzPlatformUser\Form\Factory\FormFactory::updateUserSetting`|
-
-The following classes have been moved to `EzPlatformContentFormsBundle`.
-
-|Former location|Current location|
-|------------|-------------|
-|`EzSystems\EzPlatformAdminUi\Validator\ValidationErrorsProcessor`|`EzSystems\EzPlatformContentForms\Validator\ValidationErrorsProcessor`|
-|`EzSystems\EzPlatformAdminUi\Validator\Constraints\FieldTypeValidator`|`EzSystems\EzPlatformContentForms\Validator\Constraints\FieldTypeValidator`|
diff --git a/docs/release_notes/ez_platform_v3.1.md b/docs/release_notes/ez_platform_v3.1.md
deleted file mode 100644
index 0429865ac58..00000000000
--- a/docs/release_notes/ez_platform_v3.1.md
+++ /dev/null
@@ -1,154 +0,0 @@
-
-
-# eZ Platform v3.1
-
-**Version number**: v3.1
-
-**Release date**: July 15, 2020
-
-**Release type**: Fast Track
-
-## Notable changes
-
-[eZ Commerce](https://github.com/ezsystems/ezcommerce) now uses Symfony 5 and is fully integrated into the eZ Platform back office.
-
-## New features
-
-This release of eZ Platform introduces the following new features:
-
-!!! DXP
-
- ### Site Factory
-
- #### Site skeleton
-
- You can now create multiple content structures that can be used as Site skeletons for the new sites.
-
- For more information about Site skeleton, see [Configure Site skeleton](https://doc.ibexa.co/en/3.1/guide/site_factory/#configure-site-skeleton).
-
- #### Defining parent Location
-
- You can now define the parent Location for every new site in the template configuration.
-
- For more information about defining parent Location, see [Configure parent Location](https://doc.ibexa.co/en/3.1/guide/site_factory/#configure-parent-location).
-
- ### Elasticsearch
-
- You can now use [Elasticsearch](https://www.elastic.co/) in your eZ Platform installation
- through the `PlatformElasticSearchEngineBundle`.
-
- See [Elasticsearch documentation](https://doc.ibexa.co/en/3.1/guide/search/elastic/) to learn how to set up, configure and user Elasticsearch with eZ Platform.
-
- ### Page Builder
-
- You can now filter elements in the sidebar during site creation process to get to the desired blocks faster.
-
- 
-
- ### Field group permissions
-
- The new [field group limitation](https://doc.ibexa.co/en/3.1/guide/limitation_reference/#field-group-limitation)
- enables you to control who can edit content fields per field group.
-
- ### Version comparison
-
- You can now compare additional fields in version comparison of content item:
-
- - Content Relation and Content Relations
- - Image Asset and Image
- - Matrix
- - Media
-
- For overview of additional fields, see [User documentation on Comparing versions](https://doc.ibexa.co/projects/userguide/en/3.1/publishing/publishing/#comparing-versions).
-
-### URL management UI
-
-You can now manage URL addresses and URL wildcards with a comfortable user interface that is available in the back office.
-You can create, modify or delete URL wildcards, and decide if the user should be redirected to the new address on clicking the link.
-
-!!! note
-
- As of this release, the Link manager is no longer part of the Content panel, and now it belongs to the **Admin** panel of the back office.
-
-
-
-For more information on how to manage URLs, see [URL management](https://doc.ibexa.co/en/3.1/guide/url_management/).
-
-### Tree view in the Universal Discovery Widget
-
-The Universal Discovery Widget, referred to as the Content Browser in User Documentation, has been updated by adding the Tree view.
-You can now switch between the Grid, Panels and Tree views to browse and manage user accounts, media files, content items and forms.
-Selections that you make in one view survive when you switch to the other view.
-
-
-
-For more information about configuring the Universal Discovery Widget, see [Extending Universal Discovery Widget](https://doc.ibexa.co/en/3.1/extending/extending_udw/).
-
-### Field group display
-
-Display of field groups has been improved in content preview and editing.
-
-When editing, field groups are now presented in tabs:
-
-
-
-In Content preview, the group sections are collapsible:
-
-
-
-### Saving incomplete draft
-
-When users create or edit a content item or a Page, they can now save it without completing all the required fields.
-They can then return to editing, or pass the content to another contributor.
-Validation that used to happen at each save operation now, by default, happens when you click the **Publish** button.
-
-The `ContentService::validate()` method has been added that you can use to trigger validation of individual fields
-or whole content items for completeness at other stages of the editing process.
-
-### Search
-
-#### ezplatform-search
-
-[`ezplatform-search`](https://github.com/ezsystems/ezplatform-search) is a new repository
-that contains search functionalities that aren't dependent on the search engine.
-
-#### Search controller
-
-A customizable search controller has been extracted and placed in `ezplatform-search`.
-
-#### Searching in trash
-
-You can now search through the contents of Trash and sort the search results based on a number of Search Criteria and Sort Clauses that can be used by the `\eZ\Publish\API\Repository\TrashService::findTrashItems` method only.
-
-For more information, see [Search in trash](https://doc.ibexa.co/en/3.1/api/public_php_api_search/#searching-in-trash).
-
-### Repository filtering
-
-[Repository filtering](https://doc.ibexa.co/en/3.1/api/public_php_api_search/#repository-filtering) enables you to filter content and Locations using a defined Filter,
-without the `SearchService`.
-
-### PermissionResolver
-
-You can now have a Service that provides both `PermissionResolver` and `PermissionCriterionResolver` by injecting `eZ\Publish\API\Repository\PermissionService`.
-
-## Behavior changes
-
-### Landing page drafts
-
-When you start creating a landing page, a new draft is now automatically created.
-
-## Deprecations
-
-### Search engine tags
-
-The `ezpublish.searchEngine` and `ezpublish.searchEngineIndexer` tags have been deprecated
-in favor of `ezplatform.search_engine` and `ezplatform.search_engine.indexer`.
-
-## Full changelog
-
-| eZ Platform | eZ Enterprise |
-|--------------|------------|
-| [eZ Platform v3.1.0](https://github.com/ezsystems/ezplatform/releases/tag/v3.1.0) | [eZ Enterprise v3.1.0](https://github.com/ezsystems/ezplatform-ee/releases/tag/v3.1.0) |
-| [eZ Platform v3.1.0-rc2](https://github.com/ezsystems/ezplatform/releases/tag/v3.1.0-rc2) | [eZ Enterprise v3.1.0-rc2](https://github.com/ezsystems/ezplatform-ee/releases/tag/v3.1.0-rc2) |
-| [eZ Platform v3.1.0-rc1](https://github.com/ezsystems/ezplatform/releases/tag/v3.1.0-rc1) | [eZ Enterprise v3.1.0-rc1](https://github.com/ezsystems/ezplatform-ee/releases/tag/v3.1.0-rc1) |
-| [eZ Platform v3.1.0-beta1](https://github.com/ezsystems/ezplatform/releases/tag/v3.1.0-beta1) | [eZ Enterprise v3.1.0-beta1](https://github.com/ezsystems/ezplatform-ee/releases/tag/v3.1.0-beta1) |
diff --git a/docs/release_notes/ibexa_dxp_v3.2.md b/docs/release_notes/ibexa_dxp_v3.2.md
deleted file mode 100644
index d517efb0af7..00000000000
--- a/docs/release_notes/ibexa_dxp_v3.2.md
+++ /dev/null
@@ -1,115 +0,0 @@
-
-
-# Ibexa DXP v3.2
-
-**Version number**: v3.2
-
-**Release date**: October 23, 2020
-
-**Release type**: Fast Track
-
-## Notable changes
-
-
-
-### New UI
-
-This version offers a completely reworked user interface, covering all of the back office,
-including eCommerce administration.
-
-
-
-
-
-### DAM connector
-
-You can now [connect your installation to a Digital Asset Management (DAM) system](https://doc.ibexa.co/en/3.2/guide/config_connector/#dam-configuration)
-and use assets such as images directly from the DAM in your content.
-
-### Autosave
-
-[[= product_name_base =]] Platform can now save your edits in a content item or product automatically to help you preserve the progress in an event of a failure.
-
-For more information, see [Autosave](https://doc.ibexa.co/projects/userguide/en/3.2/publishing/publishing/#autosave).
-
-### Aggregation API
-
-When using Solr or Elasticsearch search engines you can now use aggregations
-to group search results and get the count of results per aggregation type.
-
-You can aggregate results by general conditions such as content type or Section,
-or by Field aggregations such as the value of specific Fields.
-
-For more information, see [Aggregation API](https://doc.ibexa.co/en/3.2/api/public_php_api_search/#aggregation).
-
-### Targeting block and Segmentation API [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-Targeting block for the Page Builder enables you to display different content items to different users
-depending on the Segments they belong to.
-
-
-
-You can [configure Segments](https://doc.ibexa.co/en/3.2/guide/admin_panel/#segments) in the back office.
-
-[Segmentation API](https://doc.ibexa.co/en/3.2/api/public_php_api_managing_users/#segments) enables you to create and edit Segments and Segment Groups, and assign Users to Segments.
-
-### Twig helpers for content rendering
-
-Three new Twig helpers are available to make rendering content easier.
-
-Use `ez_render_content(content)` and `ez_render_location(location)` to render the selected content item.
-
-You can also use `ez_render()` and provide it with either a content or Location object.
-
-For more information, see [Using `ez_render` Twig helpers](https://doc.ibexa.co/en/3.2/guide/templates/#using-ez_render-twig-helpers).
-
-### JWT authentication
-
-You can now use JWT tokens to authenticate in [REST API](https://doc.ibexa.co/en/3.2/api/general_rest_usage/#jwt-authentication)
-and [GraphQL](https://doc.ibexa.co/en/3.2/api/graphql/#jwt-authentication).
-
-See [JWT authentication](https://doc.ibexa.co/en/3.2/guide/security/#jwt-authentication) to learn how to configure this authentication method.
-
-### Searching in [[= product_name_com =]] with Elasticsearch [[% include 'snippets/commerce_badge.md' %]]
-
-You can now use Elasticsearch for searching in [[= product_name_com =]].
-
-See [Install Ibexa Platform](https://doc.ibexa.co/en/3.2/getting_started/install_ez_platform/#install-and-configure-a-search-engine) to learn how to install and configure the search engine.
-
-## Other changes
-
-### Site Factory improvements [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-You can now define user group skeletons where you define policies and limitations that apply to a specific user group.
-You can then associate a number of such skeletons with a site template.
-User group skeletons survive deleting a site.
-
-For more information, see [Configure user group skeleton](https://doc.ibexa.co/en/3.2/guide/site_factory/#configure-user-group-skeletons).
-
-### Calendar widget improvements
-
-You can now see the scheduled blocks in the calendar after you configure the reveal and/or hide dates for them.
-This way you can envision what content will be available in the future.
-
-Also, you can now apply new filters that are intended to help you declutter the calendar view.
-
-For more information, see [Calendar widget](https://doc.ibexa.co/projects/userguide/en/3.3/publishing/advanced_publishing_options/#calendar-widget).
-
-### Cloning content types
-
-When creating content types in the back office, you don't have to start from scratch.
-You can now clone an existing content type instead.
-
-To do this, click the **Copy** icon located next to the content type that you want to clone.
-Then, refresh the view to see an updated list of content types.
-
-### Object state API improvements
-
-You can now use `ObjectStateService::loadObjectStateByIdentifier()` and `ObjectStateService::loadObjectStateGroupByIdentifier()`
-to [get object states and object state groups](https://doc.ibexa.co/en/3.2/api/public_php_api_managing_repository/#getting-object-state-information) in the PHP API.
-
-## Full changelog
-
-| Ibexa Platform | Ibexa DXP | [[= product_name_com =]] |
-|--------------|------------|------------|
-| [Ibexa Platform v3.2.0](https://github.com/ezsystems/ezplatform/releases/tag/v3.2.0) | [Ibexa DXP v3.2.0](https://github.com/ezsystems/ezplatform-ee/releases/tag/v3.2.0) | [[[= product_name_com =]] v3.2.0](https://github.com/ezsystems/ezcommerce/releases/tag/v3.2.0) |
diff --git a/docs/release_notes/ibexa_dxp_v3.3.md b/docs/release_notes/ibexa_dxp_v3.3.md
deleted file mode 100644
index 443dec7bc0d..00000000000
--- a/docs/release_notes/ibexa_dxp_v3.3.md
+++ /dev/null
@@ -1,94 +0,0 @@
----
-description: Ibexa DXP v3.3 is a Long Term Support release that offers a new Personalization UI, Image Editor and a data migration bundle.
----
-
-
-
-# Ibexa DXP v3.3
-
-**Version number**: v3.3
-
-**Release date**: January 18, 2021
-
-**Release type**: [Long Term Support](https://support.ibexa.co/Public/service-life)
-
-## Notable changes
-
-### New Personalization UI
-
-This release brings a completely reconstructed user interface of the Personalization feature.
-
-### Symfony Flex
-
-Ibexa DXP is now installed using [Symfony Flex](https://symfony.com/tour/flex-recipes).
-
-See [the updated installation instruction](https://doc.ibexa.co/en/3.3/getting_started/install_ez_platform/) for a new guide to installing the product.
-
-### Image Editor
-
-With the Image Editor, users can now perform basic operations, such as cropping or flipping an image,
-or setting a point of focus.
-The Image Editor is available when browsing the Media library, or creating or editing content items
-that contain an `ezimage` or `ezimageasset` Field.
-
-You can modify the Image Editor's default settings to change its appearance or behavior.
-
-For more information, see [Configuring the Image Editor](https://doc.ibexa.co/en/3.3/guide/image_editor/).
-
-### Migration bundle
-
-The new [migration bundle](https://doc.ibexa.co/en/3.3/guide/data_migration/data_migration/) enables you to export and import your Repository data by using YAML files.
-
-## Other changes
-
-### Extended Search API capabilities
-
-Search API has been extended with the following capabilities:
-
-- [Score Sort Clause](https://doc.ibexa.co/en/3.3/guide/search/sort_clause_reference/score_sort_clause/) orders search results by their score.
-- [CustomField Sort Clause](https://doc.ibexa.co/en/3.3/guide/search/sort_clause_reference/customfield_sort_clause/) sorts search results by raw search index fields.
-- [ContentTranslatedName Sort Clause](https://doc.ibexa.co/en/3.3/guide/search/sort_clause_reference/contenttranslatedname_sort_clause/) sorts search results by the content items' translated names.
-
-You can now access [additional search result data from PagerFanta](https://doc.ibexa.co/en/3.3/api/public_php_api_search/#additional-search-result-data).
-
-### PHP API improvements
-
-You can now use the following new PHP API methods:
-
-- [`UserService::loadUserGroupByRemoteId`](https://github.com/ezsystems/ezplatform-kernel/blob/1.3/eZ/Publish/API/Repository/UserService.php#L71)
-- [`PasswordHashService::getDefaultHashType`](https://github.com/ezsystems/ezplatform-kernel/blob/1.3/eZ/Publish/API/Repository/PasswordHashService.php#L18)
-- [`PasswordHashService::getSupportedHashTypes`](https://github.com/ezsystems/ezplatform-kernel/blob/1.3/eZ/Publish/API/Repository/PasswordHashService.php#L25)
-- [`PasswordHashService::isHashTypeSupported`](https://github.com/ezsystems/ezplatform-kernel/blob/1.3/eZ/Publish/API/Repository/PasswordHashService.php#L30)
-- [`PasswordHashService::createPasswordHash`](https://github.com/ezsystems/ezplatform-kernel/blob/1.3/eZ/Publish/API/Repository/PasswordHashService.php#L37)
-- [`PasswordHashService::isValidPassword`](https://github.com/ezsystems/ezplatform-kernel/blob/1.3/eZ/Publish/API/Repository/PasswordHashService.php#L44)
-
-### Query Field Location handling
-
-The [Query field type](https://doc.ibexa.co/en/3.3/guide/content_rendering/queries_and_controllers/content_queries/#content-query-field) now enables getting results for the current Location of a content item.
-
-## Deprecations
-
-### Trusted proxy configuration
-
-If you configure trusted proxies in the `.env` file, you now need to add them to the configuration in the following way:
-
-``` yaml
-framework:
- trusted_proxies: '%env(TRUSTED_PROXIES)%'
-```
-
-## Full changelog
-
-See [list of changes in Symfony 5.2](https://symfony.com/blog/symfony-5-2-curated-new-features).
-
-| [[= product_name_content =]] | [[= product_name_exp =]] | [[= product_name_com =]] |
-|--------------|------------|------------|
-| [[[= product_name_content =]] v3.3.0](https://github.com/ibexa/content/releases/tag/v3.3.0) | [[[= product_name_exp =]] v3.3.0](https://github.com/ibexa/experience/releases/tag/v3.3.0) | [[[= product_name_com =]] v3.3.0](https://github.com/ibexa/commerce/releases/tag/v3.3.0)|
-
-## v3.3.15
-
-### Symfony 5.4
-
-The version v3.3.15 moves Ibexa DXP to Symfony 5.4.
-
-For more information, see [Symfony 5.4 documentation](https://symfony.com/releases/5.4) and [update documentation](update_from_3.3.md#v3315).
diff --git a/docs/release_notes/ibexa_dxp_v4.0.md b/docs/release_notes/ibexa_dxp_v4.0.md
deleted file mode 100644
index d524a669b02..00000000000
--- a/docs/release_notes/ibexa_dxp_v4.0.md
+++ /dev/null
@@ -1,119 +0,0 @@
-
-
-# Ibexa DXP v4.0
-
-**Version number**: v4.0
-
-**Release date**: February 4, 2022
-
-**Release type**: [Fast Track](https://support.ibexa.co/Public/service-life)
-
-## Notable changes
-
-### Redesigned user interface
-
-The the back office has undergone a complete redesign, including revised look and feel,
-simplified navigation and more streamlined workflows.
-
-
-
-!!! tip
-
- Read more about the rationale and process for the redesign on [Ibexa blog](https://www.ibexa.co/blog/ibexa-dxp-v4.0-preview-redesigned-user-interface-elevates-the-user-experience).
-
-### New product catalog
-
-New product catalog enables easy management of products, stock and prices.
-
-Products are now organized into product types, each offering a specific set of attributes
-that you can use to provide information about a product.
-You can also set VAT rates per product type.
-
-
-
-#### Price management
-
-You can now configure prices with discounts per product and per customer group.
-Separate currencies enable you to set different price rules for different currencies.
-
-
-
-### Taxonomy management
-
-You can now organize content adding tags and create taxonomy categories to make it easy for your
-site users to browse and to deliver content appropriate for them.
-
-### Separate recommendations for different websites
-
-Personalization service has been enhanced to allow returning separate recommendations
-for different websites.
-This way you can eliminate irrelevant recommendations when you set up stores that
-operate on different markets or under different brands.
-
-## Other changes
-
-### Draft locking
-
-You can now configure and use the locking feature to lock a draft of a content item,
-so that only an assigned person can edit it, and no other user can take it over.
-
-For more information, see the [Draft locking](https://doc.ibexa.co/en/4.0/guide/workflow/workflow/#draft-locking)
-and relevant [User Documentation](https://doc.ibexa.co/projects/userguide/en/4.0/publishing/editorial_workflow/#releasing-locked-drafts).
-
-### Online Editor is now based on CKEditor
-
-You can now edit content of RichText Fields using CKEditor and extend its functionality with many elements.
-
-For more information, see [Extend Online Editor](https://doc.ibexa.co/en/4.0/extending/extending_online_editor/).
-
-### Enhanced GraphQL location handling
-
-GraphQL now enables better querying of Locations and URLs.
-
-### Migration API
-
-You can now manage [data migrations](https://doc.ibexa.co/en/4.0/guide/data_migration/data_migration/) by using the PHP API,
-including getting migration information and running individual migration files.
-
-See [Managing migrations](https://doc.ibexa.co/en/4.0/api/public_php_api_managing_migrations/) for more information.
-
-### Decide whether alternative text for Image field is optional
-
-Alternative text for an Image field is now optional by default.
-You can set it as required when adding the Image field to a content type.
-
-### Configure what elements are available in the Page Builder for the content type [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-You can now select which page blocks, page layout and what edit mode are available in the Editor mode for the content type.
-
-For more information, see [Working with Page](https://doc.ibexa.co/projects/userguide/en/4.0/site_organization/working_with_page/#configure-block-display).
-
-### Purge all submissions of given form [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-You can purge all submissions of a given form.
-
-For more information, see [Forms](https://doc.ibexa.co/en/4.0/guide/form_builder/forms/#form-submission-purging).
-
-### External datasource handling
-
-Personalization has been given an option to fetch content feed from external sources.
-
-### Category exclusion
-
-Personalization service has been enhanced with a feature which allows to exclude categories from the recommendation response.
-
-## Deprecations
-
-### Code cleanup results
-
-v4.0 sees significant code cleanup, including renaming of namespaces, services, REST API endpoints
-and many other internal names.
-
-Refer to [Ibexa DXP v4.0 deprecations and backwards compatibility breaks](ibexa_dxp_v4.0_deprecations.md)
-for full details of changes and how they influence your project.
-
-## Full changelog
-
-| [[= product_name_content =]] | [[= product_name_exp =]] | [[= product_name_com =]] |
-|--------------|------------|------------|
-| [[[= product_name_content =]] v4.0](https://github.com/ibexa/content/releases/tag/v4.0.0) | [[[= product_name_exp =]] v4.0](https://github.com/ibexa/experience/releases/tag/v4.0.0) | [[[= product_name_com =]] v4.0](https://github.com/ibexa/commerce/releases/tag/v4.0.0) |
diff --git a/docs/release_notes/ibexa_dxp_v4.0_deprecations.md b/docs/release_notes/ibexa_dxp_v4.0_deprecations.md
deleted file mode 100644
index aaefd0814aa..00000000000
--- a/docs/release_notes/ibexa_dxp_v4.0_deprecations.md
+++ /dev/null
@@ -1,272 +0,0 @@
-
-
-# Ibexa DXP v4.0 deprecations and backwards compatibility breaks
-
-Ibexa DXP v4.0 introduces changes to significant parts of the code
-to align with the product name change from earlier eZ Platform.
-
-These changes include changing repository names, namespaces, filenames, function names, and others.
-
-A backwards compatibility layer ensures that custom implementations and extensions
-using the older naming should function without change.
-
-## Namespaces
-
-Namespaces in the product which referred to old product names now use the [[= product_name_base =]] name.
-
-All namespace changes are listed in the `ibexa/compatibility-layer` repository.
-
-Refer to [mapping reference](https://github.com/ibexa/compatibility-layer/tree/4.0/src/bundle/Resources/mappings)
-for a full comparison of old and new bundle names and namespaces.
-
-!!! tip
-
- To make sure your code is up to date with the new namespaces,
- you can use the [Ibexa PhpStorm plugin](phpstorm_plugin.md).
- The plugin indicates deprecated namespaces and suggests updating them to new ones.
-
-### Richtext namespace
-
-The internal format of richtext has changed.
-
-All namespace changes are listed in the
-[richtext](https://github.com/ibexa/fieldtype-richtext/blob/bf45e57ea1d2933cc02eb8d8bff76c0925de92de/src/bundle/Resources/config/default_settings.yaml#L60-L67) repository.
-
-## Configuration keys
-
-`ezplatform` and `ezpublish` configuration keys have been replaced with `ibexa`.
-
-Other package-specific configuration keys have also been updated.
-
-| Old name | New name |
-| --- | --- |
-| `ezplatform` | `ibexa` |
-| `ezpublish` | `ibexa` |
-| `ez_doctrine_schema` | `ibexa_doctrine_schema` |
-| `ez_io` | `ibexa_io` |
-| `ez_platform_fastly_cache` | `ibexa_fastly` |
-| `ez_platform_http_cache` | `ibexa_http_cache` |
-| `ez_platform_page_builder` | `ibexa_page_builder` |
-| `ez_platform_standard_design` | `ibexa_standard_design` |
-| `ez_search_engine_legacy` | `ibexa_legacy_search_engine` |
-| `ez_search_engine_solr` | `ibexa_solr` |
-| `ezdesign` | `ibexa_design_engine` |
-| `ezplatform_elastic_search_engine` | `ibexa_elasticsearch` |
-| `ezplatform_form_builder` | `ibexa_form_builder` |
-| `ezplatform_graphql` | `ibexa_graphql` |
-| `ezplatform_page_fieldtype` | `ibexa_fieldtype_page` |
-| `ezplatform_support_tools` | `ibexa_system_info` |
-| `ezrecommendation` | `ibexa_personalization_client` |
-| `ezrichtext` | `ibexa_fieldtype_richtext` |
-| `ezrichtext.custom_styles..is_inline` | `ibexa_fieldtype_richtext.custom_styles..inline` |
-| `ibexa_platform_commerce_field_types` | `ibexa_commerce_field_types` |
-| `one_sky` | `ibexa_commerce_one_sky` |
-| `ses_specificationstypefieldtype` | `ibexa_commerce_specifications_type` |
-| `shop_price_engine_plugin` | `ibexa_commerce_price_engine` |
-| `silversolutions_eshop` | `ibexa_commerce_eshop` |
-| `silversolutions_tools` | `ibexa_commerce_shop_tools` |
-| `silversolutions_translation` | `ibexa_commerce_translation` |
-| `siso_admin_erp` | `ibexa_commerce_erp_admin` |
-| `siso_basket` | `ibexa_commerce_basket` |
-| `siso_checkout` | `ibexa_commerce_checkout` |
-| `siso_comparison` | `ibexa_commerce_comparison` |
-| `siso_content_plugin` | `ibexa_commerce_base_design` |
-| `siso_ez_studio` | `ibexa_commerce_ez_studio` |
-| `siso_local_order_management` | `ibexa_commerce_local_order_management` |
-| `siso_newsletter` | `ibexa_commerce_newsletter` |
-| `siso_order_history` | `ibexa_commerce_order_history` |
-| `siso_payment` | `ibexa_commerce_payment` |
-| `siso_price` | `ibexa_commerce_price` |
-| `siso_quick_order` | `ibexa_commerce_quick_order` |
-| `siso_search` | `ibexa_commerce_search` |
-| `siso_shop_frontend` | `ibexa_commerce_shop_frontend` |
-| `siso_test` | `ibexa_commerce_test_tools` |
-| `siso_tools` | `ibexa_commerce_tools` |
-| `siso_voucher` | `ibexa_commerce_voucher` |
-
-## Service names
-
-Service names which referred to old product names now use the [[= product_name_base =]] name.
-
-All service name changes are listed in the `ibexa/compatibility-layer` repository.
-
-Refer to [mapping reference](https://github.com/ibexa/compatibility-layer/blob/4.0/src/bundle/Resources/mappings/services-to-fqcn-map.php)
-for a full comparison of old and new names.
-
-## Service tags
-
-Service tag which referred to old product names now use the [[= product_name_base =]] name.
-
-All service tag changes are listed in the `ibexa/compatibility-layer` repository.
-
-Refer to [mapping reference](https://github.com/ibexa/compatibility-layer/blob/4.0/src/bundle/Resources/mappings/symfony-service-tag-name-map.php)
-for a full comparison of old and new service tags.
-
-## CSS classes for back office
-
-CSS classes with the `ez-` prefix have been modified with an `ibexa-` prefix.
-
-## JavaScript event names
-
-JavaScript event names with the `ez-` prefix have been modified with an `ibexa-` prefix, for example:
-
-`ez-notify` > `ibexa-notify`
-`ez-content-tree-refresh` > `ibexa-content-tree-refresh`
-
-## REST API
-
-REST API route prefix has changed from `/api/ezp/v2/` to `/api/ibexa/v2/`.
-
-REST API media types have changed from `application/vnd.ez.api.*` to `application/vnd.ibexa.api.*`.
-
-## Twig functions and filters
-
-The following Twig functions and filter have been renamed, including:
-
-| Old name | New name |
-| --- | --- |
-| `ez_content_name` | `ibexa_content_name` |
-| `ez_render_field` | `ibexa_render_field` |
-| `ez_render` | `ibexa_render` |
-| `ez_field` | `ibexa_field` |
-| `ez_image_alias` | `ibexa_image_alias` |
-
-??? note "Full list of changed Twig function and filter names"
-
- | Old name | New name |
- | --- | --- |
- | `calculate_shipping` | `ibexa_commerce_calculate_shipping` |
- | `code_label` | `ibexa_commerce_code_label` |
- | `date_format` | `ibexa_commerce_date_format` |
- | `ez_content_field_identifier_first_filled_image` | `ibexa_content_field_identifier_first_filled_image` |
- | `ez_content_field_identifier_image_asset` | `ibexa_content_field_identifier_image_asset` |
- | `ez_content_name` | `ibexa_content_name` |
- | `ez_content_type_icon` | `ibexa_content_type_icon` |
- | `ez_data_attributes_serialize` | `ibexa_data_attributes_serialize` |
- | `ez_datetime_diff` | `ibexa_datetime_diff` |
- | `ez_field_description` | `ibexa_field_description` |
- | `ez_field_is_empty` | `ibexa_field_is_empty` |
- | `ez_field_name` | `ibexa_field_name` |
- | `ez_field_value` | `ibexa_field_value` |
- | `ez_field` | `ibexa_field` |
- | `ez_file_size` | `ibexa_file_size` |
- | `ez_full_date` | `ibexa_full_date` |
- | `ez_full_datetime` | `ibexa_full_datetime` |
- | `ez_full_time` | `ibexa_full_time` |
- | `ez_http_cache_tag_location` | `ibexa_http_cache_tag_location` |
- | `ez_http_tag_location` | `ibexa_http_cache_tag_location` |
- | `ez_http_tag_relation_ids` | `ibexa_http_cache_tag_relation_ids` |
- | `ez_http_tag_relation_location_ids` | `ibexa_http_cache_tag_relation_location_ids` |
- | `ez_image_alias` | `ibexa_image_alias` |
- | `ez_page_layout` | `ibexa_page_layout` |
- | `ez_path_to_locations` | `ibexa_path_to_locations` |
- | `ez_path` | `ibexa_path` |
- | `ez_recommendation_enabled` | `ibexa_recommendation_enabled` |
- | `ez_recommendation_track_user` | `ibexa_recommendation_track_user` |
- | `ez_render_*_query_*` | `ibexa_render_*_query_` |
- | `ez_render_*_query` | `ibexa_render_*_query` |
- | `ez_render_comparison_result` | `ibexa_render_comparison_result `|
- | `ez_render_content` | `ibexa_render_content` |
- | `ez_render_field_definition_settings` | `ibexa_render_field_definition_settings` |
- | `ez_render_field` | `ibexa_render_field` |
- | `ez_render_limitation_value` | `ibexa_render_limitation_value` |
- | `ez_render_location` | `ibexa_render_location` |
- | `ez_render` | `ibexa_render` |
- | `ez_richtext_to_html5_edit` | `ibexa_richtext_to_html5_edit` |
- | `ez_richtext_to_html5` | `ibexa_richtext_to_html5` |
- | `ez_richtext_youtube_extract_id` | `ibexa_richtext_youtube_extract_id` |
- | `ez_route` | `ibexa_route` |
- | `ez_short_date` | `ibexa_short_date` |
- | `ez_short_datetime` | `ibexa_short_datetime` |
- | `ez_short_time` | `ibexa_short_time` |
- | `ez_url` | `ibexa_url` |
- | `get_characteristics_b2b` | `ibexa_commerce_get_characteristics_b2b` |
- | `get_relation_content` | `ibexa_commerce_get_relation_content` |
- | `get_search_query` | `ibexa_commerce_get_search_query` |
- | `get_shipping_free_value` | `ibexa_commerce_get_shipping_free_value` |
- | `get_siteaccess_locale` | `ibexa_commerce_get_siteaccess_locale` |
- | `get_stored_baskets` | `ibexa_commerce_get_stored_baskets` |
- | `ibexa_commerce_render_stock` | `ibexa_commerce_render_stock` |
- | `ibexa_platform_asset` | `ibexa_dam_asset` |
- | `ibexa_platform_dam_image_transformation` | `ibexa_dam_image_transformation` |
- | `is_shipping_free` | `ibexa_commerce_is_shipping_free` |
- | `price_format` | `ibexa_commerce_price_format` |
- | `ses_assets_by_group` | `ibexa_commerce_assets_by_group` |
- | `ses_assets_image_list` | `ibexa_commerce_assets_image_list` |
- | `ses_assets_main_image` | `ibexa_commerce_assets_main_image` |
- | `ses_basket` | `ibexa_commerce_basket` |
- | `ses_check_product_in_comparison` | `ibexa_commerce_check_product_in_comparison` |
- | `ses_check_product_in_wish_list` | `ibexa_commerce_check_product_in_wish_list` |
- | `ses_comparison_category` | `ibexa_commerce_comparison_category` |
- | `ses_config_parameter` | `ibexa_commerce_config_parameter` |
- | `ses_contains_basket_vouchers` | `ibexa_commerce_contains_basket_vouchers` |
- | `ses_content_pagination` | `ibexa_commerce_content_pagination` |
- | `ses_correct_url` | `ibexa_commerce_correct_url` |
- | `ses_erp_to_default` | `ibexa_commerce_erp_to_default` |
- | `ses_format_args` | `ibexa_commerce_format_args` |
- | `ses_get_basket_vouchers` | `ibexa_commerce_get_basket_vouchers` |
- | `ses_invoice_number` | `ibexa_commerce_invoice_number` |
- | `ses_navigation` | `ibexa_commerce_navigation` |
- | `ses_pagination` | `ibexa_commerce_pagination` |
- | `ses_product` | `ibexa_commerce_product` |
- | `ses_render_field` | `ibexa_commerce_render_field` |
- | `ses_render_price` | `ibexa_commerce_render_price` |
- | `ses_render_specification_matrix` | `ibexa_commerce_render_specification_matrix` |
- | `ses_render_stock` | `ibexa_commerce_render_stock` |
- | `ses_scope_request_active` | `ibexa_commerce_scope_request_active` |
- | `ses_to_float` | `ibexa_commerce_to_float` |
- | `ses_total_comparison` | `ibexa_commerce_total_comparison` |
- | `ses_track_base` | `ibexa_commerce_track_base` |
- | `ses_track_basket` | `ibexa_commerce_track_basket` |
- | `ses_track_product` | `ibexa_commerce_track_product` |
- | `ses_user_menu` | `ibexa_commerce_user_menu` |
- | `ses_variant_product_by_sku` | `ibexa_commerce_variant_product_by_sku` |
- | `ses_wish_list` | `ibexa_commerce_wish_list` |
- | `sort_characteristic_codes` | `ibexa_commerce_sort_characteristic_codes` |
- | `sort_characteristics` | `ibexa_commerce_sort_characteristics` |
- | `st_image` | `ibexa_commerce_image` |
- | `st_imageconverter` | `ibexa_commerce_imageconverter` |
- | `st_resolve_template` | `ibexa_commerce_resolve_template` |
- | `st_siteaccess_lang` | `ibexa_commerce_siteaccess_lang` |
- | `st_siteaccess_path` | `ibexa_commerce_siteaccess_path` |
- | `st_siteaccess_url` | `ibexa_commerce_siteaccess_url` |
- | `st_tag` | `ibexa_commerce_tag` |
- | `st_translate` | `ibexa_commerce_translate` |
- | `truncate` | `ibexa_commerce_truncate` |
- | `unserialize` | `ibexa_commerce_unserialize` |
- | `youtube_video_id` | `ibexa_commerce_youtube_video_id` |
-
-## URL Alias route name
-
-URL Alias route name has changed from `ez_urlalias` to `ibexa.url.alias`.
-
-## Configuration file names
-
-Built-in configuration files starting with `ezplatform` now use names with `ibexa`, including:
-
-| Old name | New name |
-| --- | --- |
-| `ezplatform.yaml` | `ibexa.yaml` |
-| `ezplatform_admin_ui.yaml` | `ibexa_admin_ui.yaml` |
-| `ezplatform_assets.yaml` | `ibexa_assets.yaml` |
-| `ezplatform_doctrine_schema.yaml` | `ibexa_doctrineschema.yaml` |
-| `ezplatform_elastic_search_engine.yaml` | `ibexa_elasticsearch.yaml` |
-| `ezplatform_form_builder.yaml` | `ibexa_form_builder.yaml` |
-| `ezplatform_http_cache.yaml` | `ibexa_http_cache.yaml` |
-| `ezplatform_http_cache_fastly.yaml` | `ibexa_fastly.yaml` |
-| `ezplatform_page_builder.yaml` | `ibexa_page_builder.yaml` |
-| `ezplatform_site_factory.yaml` | `ibexa_site_factory.yaml` |
-| `ezplatform_solr.yaml` | `ibexa_solr.yaml` |
-| `ezplatform_welcome_page.yaml` | `ibexa_welcome_page.yaml` |
-
-## Minor changes
-
-- `AbstractBuilder::createMenuItem` return type is now `ItemInterface` only.
-- Meaningless properties added to the Doctrine schema now throw an exception.
-This is prevents indexes from being placed erroneously in the root table.
-- The following deprecated service tags have been dropped: `ezsystems.platformui.application_config_provider`,
-`ezpublish.content_view_provider`, `ezpublish.fieldType`, `ezpublish.fieldType.parameterProvider`,
-`ezpublish.fieldType.indexable`, `ezpublish.fieldType.externalStorageHandler`, `ezpublish.fieldType.externalStorageHandler.gateway`,
-`ezpublish.location_view_provider`, `ezpublish.query_type`, `ezpublish.searchEngineIndexer`,
-`ezpublish.searchEngine`, `ezpublish.storageEngine.legacy.converter`
-- `Ibexa\Contracts\Core\MVC\EventSubscriber\onConfigScopeChange::onConfigScopeChange` now takes `ScopeChangeEvent $event` instead of `SiteAccess $siteAccess` as argument.
diff --git a/docs/release_notes/ibexa_dxp_v4.1.md b/docs/release_notes/ibexa_dxp_v4.1.md
deleted file mode 100644
index c3edab8e286..00000000000
--- a/docs/release_notes/ibexa_dxp_v4.1.md
+++ /dev/null
@@ -1,91 +0,0 @@
----
-description: Ibexa DXP v4.1 enhances the product catalog capabilities, adds a Measurement field type and attribute and a Dynamic Targeting block for the Page Builder.
----
-
-
-# Ibexa DXP v4.1
-
-**Version number**: v4.1
-
-**Release date**: April 15, 2022
-
-**Release type**: [Fast Track](https://support.ibexa.co/Public/service-life)
-
-## Notable changes
-
-### Product catalog enhancements
-
-With this release, product catalog brings new PHP APIs, productivity boost from new product Search Criteria and Sort classes, advanced filtering in REST endpoints, auto-generated identifiers, product list sorting, and more.
-
-You can now use [advanced filtering on products, product types, attributes, and others in REST endpoints](https://doc.ibexa.co/en/4.1/api/rest_api_reference/rest_api_reference.html#product-catalog-filter-currencies).
-
-Currencies, regions and customer groups can now be resolved automatically in the PHP API
-based on the current context (for example, selected locale).
-
-A new Color attribute enables adding a product attribute that uses the color picker to select a precise color.
-
-The product catalog is now fully integrated with the transactional system integration, enabling a full purchasing process.
-
-### Measurement field type and attribute
-
-With the new Measurement field type users can now add a Measurement Field, with different pre-built units, to content:
-
-
-
-The new Measurement product attribute enables describing products with different types and units of measurement:
-
-
-
-### Dynamic targeting block [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-[Dynamic targeting block](https://doc.ibexa.co/projects/userguide/en/4.1/site_organization/working_with_page/#dynamic-targeting-block) for the Page Builder provides recommendation items based on users related to the configured Segments.
-
-
-
-### User interface improvements
-
-Several improvements to the back office interface enhance the user experience.
-These include:
-
-- "Go to top" button
-- new DateTime widget
-- view switcher between lists, grids and calendar.
-
-Several new options have been added to the content tree's contextual menu, including Hide/Reveal, Create, Edit and Add translation, Add/Remove from bookmarks.
-
-
-
-## Other changes
-
-### GraphlQL
-
-Product catalog is now fully covered in GraphQL API.
-
-### Taxonomy language switcher
-
-A language switcher in Taxonomy view enables quick switching between different translations of the tag tree.
-
-
-
-### Image optimization
-
-Images modified in the Image Editor are now optimized for reduced file size.
-You can use external libraries to [optimize different image formats](https://doc.ibexa.co/en/4.1/guide/images/images/#support-for-svg-images).
-
-### Expanded data migrations
-
-[Data migration](data_migration.md) now covers additional objects:
-
-- [database settings](https://doc.ibexa.co/en/4.1/guide/data_migration/importing_data/#settings)
-- [segments](https://doc.ibexa.co/en/4.1/guide/data_migration/importing_data/#segments)
-- [prices](https://doc.ibexa.co/en/4.1/guide/data_migration/importing_data/#prices) with `create` mode
-- [settings](https://doc.ibexa.co/en/4.1/guide/data_migration/importing_data/#settings)
-
-Data migration now also offers a locking capability,
-which prevents multiple processes from executing the same migration and causing duplicated records.
-
-## Full changelog
-
-| [[= product_name_content =]] | [[= product_name_exp =]] | [[= product_name_com =]] |
-|--------------|------------|------------|
-| [[[= product_name_content =]] v4.1](https://github.com/ibexa/content/releases/tag/v4.1.0) | [[[= product_name_exp =]] v4.1](https://github.com/ibexa/experience/releases/tag/v4.1.0) | [[[= product_name_com =]] v4.1](https://github.com/ibexa/commerce/releases/tag/v4.1.0) |
diff --git a/docs/release_notes/ibexa_dxp_v4.2.md b/docs/release_notes/ibexa_dxp_v4.2.md
deleted file mode 100644
index df5cd8f3e82..00000000000
--- a/docs/release_notes/ibexa_dxp_v4.2.md
+++ /dev/null
@@ -1,271 +0,0 @@
----
-description: Ibexa DXP v4.2 adds the Customer Portal and user management capabilities, and enriches the product catalog with catalogs, product variants and product assets.
----
-
-
-
-# Ibexa DXP v4.2
-
-**Version number**: v4.2
-
-**Release date**: August 9, 2022
-
-**Release type**: [Fast Track](https://support.ibexa.co/Public/service-life)
-
-**Update**: [v4.1.x to v4.2](https://doc.ibexa.co/en/4.2/update_and_migration/from_4.1/update_from_4.1/)
-
-## Notable changes
-
-### Customer Portal [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-The new Customer Portal allows you to create and manage a business account for your company.
-With this new feature, you can easily manage members of your organization,
-your shipping information and view your past orders.
-You can invite members to your company, activate or deactivate their accounts,
-assign them specific roles and limitations, such as a buyer, or sales representative, and group them into teams.
-
-
-
-For more information, see [back office company management documentation](https://doc.ibexa.co/projects/userguide/en/4.2/shop_administration/manage_users/).
-
-On their personal accounts in Customer Portal, members of your organisation can view their order history,
-other members of their team and information regarding their company, for example, billing addresses.
-They can also edit their profile information.
-
-
-
-For more information, see [Customer Portal documentation](https://doc.ibexa.co/projects/userguide/en/4.2/shop_administration/customer_portal/).
-
-### User management
-
-#### Inviting users
-
-You can [invite users to create their account](https://doc.ibexa.co/projects/userguide/en/4.2/user_management/manage_users/#invite-users) in the frontend as customers or in the back office as members of your team.
-
-
-
-#### Configure register form
-
-Register forms for new users can now be [configured straight in the YAML file](https://doc.ibexa.co/en/4.2/templating/layout/create_user_registration_form/#configure-existing-form).
-
-### Catalogs
-
-You can now create catalogs containing sub-sets of products.
-Choose products for a catalog by applying filters which enable you to select products,
-for example, by product type, price range, availability or category.
-
-
-
-Catalogs are useful when creating special lists for B2B and B2C uses, for retailers and distributors or for different regions,
-or other situations where you need to present a selected set of products.
-
-### Product variants
-
-To cover use cases of products with variable characteristics (such as colors, technical parameters or sizes),
-you can now create product variants based on selected attributes.
-The system automatically generates variants for the attribute values you select.
-
-
-
-You can set prices, including custom pricing, availability, and stock for each variant separately.
-
-### Product assets
-
-To provide your products with images, you can now upload multiple assets to each product.
-Assets are grouped into collections based on attribute values
- and, in this way, are connected to product variants which have these attributes.
-
-
-
-### Product completeness
-
-The new product completeness tab, in product view, lists all the parts of a product you can configure, for example, attributes, assets, prices, and availability.
-You can use it to get a quick overview of missing parts in the product configuration and to instantly move to the proper screen to fill the gaps.
-
-
-
-!!! note "No impact on availability"
-
- Product completeness helps ensure that product data is complete.
- It does not impact product availability or visibility on the storefront.
- As long as a product meets availability and stock requirements, it can be published and made available for purchase regardless of its completeness score.
-
-### Product categories
-
-With product categories, you can organize products that populate the Product Catalog.
-You do it, for example, to assist users in searching for products.
-
-For more information, see [Product categories](https://doc.ibexa.co/projects/userguide/en/4.2/shop_administration/product_categories/).
-
-
-
-### Cross-content type (CCT) recommendations
-
-If a recommendation scenario has more than one content type configured, with cross-content type (CCT) parameter in the request,
-you can now get recommendations for all these content types.
-
-### Taxonomy field type
-
-Taxonomy is now [configured with a field type](https://doc.ibexa.co/projects/userguide/en/4.2/content_management/taxonomy/work_with_tags/#add-tag),
-so you can use many Fields to add different taxonomy categories, for example, tags and product categories in the same content type.
-
-### Address field type
-
-With the [new Address field type](https://doc.ibexa.co/en/4.2/content_management/field_types/field_type_reference/addressfield/), you can now customize address Fields and configure them per country.
-
-
-
-### Repeatable migration steps
-
-Data migration now offers [repeatable migration steps](https://doc.ibexa.co/en/4.2/content_management/data_migration/importing_data/#repeatable-steps),
-especially useful when creating large amounts of data, for example for testing.
-
-You can vary the migration values by using the iteration counter, or by generating random data by using [`FakerPHP`](https://fakerphp.org/).
-
-## Other changes
-
-### New product Search Criteria and Sort Clauses
-
-New Search Criteria and Sort Clauses help better fine-tune searches for products.
-
-Price-related Search Criteria enable you to search by base or custom product price:
-
-- [BasePrice](https://doc.ibexa.co/en/4.2/guide/search/criteria_reference/baseprice_criterion/)
-- [CustomPrice](https://doc.ibexa.co/en/4.2/guide/search/criteria_reference/customprice_criterion/)
-
-Attribute Criteria search for products based on their attribute values, per attribute type:
-
-- [CheckboxAttribute](https://doc.ibexa.co/en/4.2/guide/search/criteria_reference/checkboxattribute_criterion/)
-- [ColorAttribute](https://doc.ibexa.co/en/4.2/guide/search/criteria_reference/colorattribute_criterion/)
-- [FloatAttribute](https://doc.ibexa.co/en/4.2/guide/search/criteria_reference/floatattribute_criterion/)
-- [IntegerAttribute](https://doc.ibexa.co/en/4.2/guide/search/criteria_reference/integerattribute_criterion/)
-- [SelectionAttribute](https://doc.ibexa.co/en/4.2/guide/search/criteria_reference/selectionattribute_criterion/)
-- SimpleMeasurementAttribute
-- RangeMeasurementAttributeMinimum
-- RangeMeasurementAttributeMaximum
-
-Creation date Criteria and Sort Clauses allow searching by date of the product's creation:
-
-- [CreatedAt](https://doc.ibexa.co/en/4.2/guide/search/criteria_reference/createdat_criterion/)
-- [CreatedAtRange](https://doc.ibexa.co/en/4.2/guide/search/criteria_reference/createdatrange_criterion/)
-- [CreatedAt](https://doc.ibexa.co/en/4.2/guide/search/sort_clause_reference/createdat_sort_clause/)
-
-Finally, you can search product by product category:
-
-- [ProductCategory](https://doc.ibexa.co/en/4.2/guide/search/criteria_reference/productcategory_criterion/)
-
-### API improvements
-
-#### GraphQL
-
-Taxonomy is now covered with GraphQL API.
-
-Querying product attributes with GraphQL is improved with the option to [query by attribute type](https://doc.ibexa.co/en/4.2/api/graphql/graphql_queries/#querying-product-attributes).
-
-### New ways to add images in Online Editor
-
-You can now drag and drop images directly into the Online Editor.
-To achieve the same result, you can also click the **Upload image** button and select a file from the disk.
-Images that you upload this way are automatically added to the Media library.
-
-!!! note
-
- In Media library, to avoid potential conflicts,
- if several images are added with identical file names,
- each of them is modified by appending a unique prefix.
-
-
-
-### Content edit tabs
-
-Content editing screen is now enriched with a [tab switcher](https://doc.ibexa.co/en/4.2/administration/back_office/content_tab_switcher/), allowing easy access to metadata such as taxonomies.
-The view can be extended with custom tabs.
-
-
-
-### Grouped attributes in Page block
-
-If a Page block has multiple attributes, you can now group them with the [`nested_attribute` parameter](https://doc.ibexa.co/en/4.2/content_management/pages/page_block_attributes/#nested-attribute-configuration).
-
-
-
-### Search in URL wildcards
-
-You can now search through the **URL wildcards** table in the back office.
-
-### Product price events
-
-The price engine now dispatches [events related to creating, updating and deleting prices](https://doc.ibexa.co/en/4.2/api/event_reference/catalog_events/#price).
-
-### Data migration
-
-#### Migrations for attributes and attribute groups
-
-Data migration now supports `attribute` and `attribute_group` types when generating migration files.
-
-#### Hide and reveal content actions
-
-You can now hide and reveal content items in data migrations by using the [`hide` and `reveal` actions](https://doc.ibexa.co/en/4.2/content_management/data_migration/data_migration_actions/#available-migration-actions).
-
-### Fastly shielding
-
-Ibexa DXP now supports Fastly shielding.
-
-## Deprecations
-
-### Segmentation
-
-- `SegmentationService::loadSegmentGroup()` and `SegmentationService::loadSegment()` are now deprecated.
-Use `SegmentationService::loadSegmentGroupByIdentifier()` and `SegmentationService::loadSegmentByIdentifier()` instead,
-which take `SegmentGroup` and `Segment` identifier respectively, instead of numerical IDs.
-- `SegmentationService::updateSegmentGroup()` and `SegmentationService::updateSegment()` now take
-a `SegmentGroup` and `Segment` objects respectively, instead of numerical IDs.
-
-## Full changelog
-
-| [[= product_name_content =]] | [[= product_name_exp =]] | [[= product_name_com =]] |
-|--------------|------------|------------|
-| [[[= product_name_content =]] v4.2](https://github.com/ibexa/content/releases/tag/v4.2.0) | [[[= product_name_exp =]] v4.2](https://github.com/ibexa/experience/releases/tag/v4.2.0) | [[[= product_name_com =]] v4.2](https://github.com/ibexa/commerce/releases/tag/v4.2.0)|
-
-## v4.2.1
-
-### [[= product_name_cdp =]]
-
-[[= product_name_base =]] Customer Data Center allows you to collect, connect and organize customer data from multiple sources.
-You can use them to build segments that allow you to create personalized customer experience for your brand.
-
-This is a standalone package that you can install along every product edition (Content, Experience, Commerce).
-[[= product_name_cdp =]] is also compatible with [[= product_name_base =]] v3.3.
-
-
-
-For more information, see [Customer Data Platform](https://doc.ibexa.co/en/4.2/cdp/cdp/).
-
-### SEO
-
-With Search Engine Optimization (SEO) tool, you can optimize your website or online store for both visitors and search engines.
-The implementation of SEO brings in more organic traffic and improves your website visibility in SERPs. This is a core feature of Digital Experience Platform.
-SEO bundle provides meta tags and meta titles with a description which helps to control search result's appearance of your website on the search engine pages.
-Now you can share your content on the social networks using OpenGraph and Twitter cards.
-
-### Separate product edition directories
-
-Thanks to splitting SQL upgrade files into separate product editions, the product update is easier.
-
-### Event layer for TaxonomyService
-
-Now, events are sent while performing operations within Taxonomy, which considerably extends the Taxonomy feature.
-
-### Protected segment groups
-
-You can now set existing [segment groups](https://doc.ibexa.co/en/4.2/administration/admin_panel/#segments) as protected, and prevent them from being modified through the user interface.
-It's intended to stop users from breaking data integrity of segments/segment groups maintained by other features or external system integrations, such as [Customer Portal](https://doc.ibexa.co/projects/userguide/en/latest/customer_management/customer_portal/) and [CDP](https://doc.ibexa.co/en/4.2/cdp/cdp/).
-
-To do it, in your configuration, add the following key for each segment group that you intend to protect:
-
-`ibexa.system.default.segmentation.segment_groups.list..protected`
-
-When you change a value of the setting to `true`, users are no longer able to:
-
-- remove the segment group or change its name or identifier
-- add/remove/modify segments that belong to the segment group
diff --git a/docs/release_notes/ibexa_dxp_v4.3.md b/docs/release_notes/ibexa_dxp_v4.3.md
deleted file mode 100644
index dc3c3a150cb..00000000000
--- a/docs/release_notes/ibexa_dxp_v4.3.md
+++ /dev/null
@@ -1,171 +0,0 @@
----
-description: Ibexa DXP v4.3 adds the improvements to the Customer Portal, product catalog and SEO.
----
-
-
-# Ibexa DXP v4.3
-
-**Version number**: v4.3
-
-**Release date**: November 10, 2022
-
-**Release type**: [Fast Track](https://support.ibexa.co/Public/service-life)
-
-**Update**: [v4.2.x to v4.3](https://doc.ibexa.co/en/4.3/update_and_migration/from_4.2/update_from_4.2/)
-
-## Notable changes
-
-### Customer Portal [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-#### Company self-registration
-
-Now, a prospective buyer can apply to [create a company account](https://doc.ibexa.co/projects/userguide/en/4.3/shop_administration/company_self_registration/) on a seller's website.
-
-The application goes through an approval process
-where admin specifies the customer group and sales representative for the new company account.
-Finally, the invitation link is sent back to the applicant to finish the registration process
-and give them access to the Customer Portal.
-
-For more information, see [Customer Portal applications documentation](cp_applications.md).
-
-
-
-#### Customization of approval process
-
-You can now [customize the approval process](cp_applications.md#customization-of-an-approval-process) for company self-registration.
-By adding additional steps and options, you can build a process that perfectly meets your business needs.
-
-### SEO configuration exposed
-
-SEO configuration gains a more prominent place on the content type editing screen.
-For example, to enable SEO, you now have to edit the content type that you want to modify,
-scroll down to the SEO section and switch the **Enable SEO for this content type** toggle.
-
-For more information, see [Work with SEO](https://doc.ibexa.co/projects/userguide/en/4.3/search_engine_optimization/work_with_seo/).
-
-!!! note
-
- This change is also implemented in v4.2.
-
-## Other changes
-
-### Product catalog improvements
-
-#### Price Sort Clauses
-
-When querying for products, you can now use one of two price-related Sort Clauses:
-
-- [`BasePrice` Sort Clause](https://doc.ibexa.co/en/5.0/search/sort_clause_reference/baseprice_sort_clause/) sorts results by the products' base prices
-- [`CustomPrice` Sort Clause](https://doc.ibexa.co/en/5.0/search/sort_clause_reference/customprice_sort_clause/) enables sorting by the custom price configured for the provided customer group.
-
-#### Usability improvements
-
-This release also includes a number of usability improvements in the product catalog,
-such as full information about available attribute values or improved display of Selection attributes.
-
-You can now move assets between collections by using drag and drop.
-
-
-
-From product's **Completeness** tab you can now jump directly to editing the product prices in all configured currencies.
-
-
-
-#### Catalog filters
-
-In catalogs, you can now [configure default filters](https://doc.ibexa.co/en/4.3/pim/pim_configuration/#catalog-filters) that are always added to a catalog, define filter order, and group custom filters.
-Built-in filters are also divided into groups now for easier browsing.
-
-Filtering by the Color attribute is now possible.
-
-#### Integration with recommendation engine
-
-Now, during product creation, edition, or deletion, information about the selected product categories (Taxonomies) is sent to the recommendation engine as an attribute
-and can be used for recommendation engine filtering.
-
-### Users
-
-#### New User content type
-
-This release brings you a new content type for private customers registering from the front page.
-We also prepared a migration command for already existing users to ease your upgrade process.
-
-For more information, refer to upgrade documentation.
-
-### API improvements
-
-The catalogs functionality in the product catalog is now covered in REST API, including:
-
-- [Getting catalog list](https://doc.ibexa.co/en/4.3/api/rest_api/rest_api_reference/rest_api_reference.html#product-catalog-filter-catalogs)
-- [Creating, modifying, copying and deleting catalogs](https://doc.ibexa.co/en/4.3/api/rest_api/rest_api_reference/rest_api_reference.html#product-catalog-create-catalog)
-- [Changing catalog status](https://doc.ibexa.co/en/4.3/api/rest_api/rest_api_reference/rest_api_reference.html#product-catalog-update-catalog)
-- [Getting catalog filters and sorting options](https://doc.ibexa.co/en/4.3/api/rest_api/rest_api_reference/rest_api_reference.html#product-catalog-load-catalog-filters)
-
-### Personalization improvements
-
-Now, as a Personalization admin, after editing a model in the back office,
-you can build this model, use the **Trigger model build** button to build this model with your modifications.
-
-### Taxonomy improvements
-
-Objects of `Ibexa\Contracts\Taxonomy\Value\TaxonomyEntry` type,
-which are returned by `TaxonomyService`, now contain the information about nesting level in the tree.
-
-The `TaxonomyEntryId` Search Criterion isn't available in Legacy search Engine.
-
-### Other improvements
-
-- You can now [customize Elasticsearch index structure](https://doc.ibexa.co/en/5.0/search/extensibility/customize_elasticsearch_index_structure/) to manage how documents in the index are grouped.
-- A new [`ibexa_seo_is_empty()` Twig function](https://doc.ibexa.co/en/5.0/templating/twig_function_reference/content_twig_functions/#ibexa_content_name) checks whether SEO data is available for a content item.
-
-## Full changelog
-
-| [[= product_name_content =]] | [[= product_name_exp =]] | [[= product_name_com =]] |
-|--------------|------------|------------|
-| [[[= product_name_content =]] v4.3](https://github.com/ibexa/content/releases/tag/v4.3.0) | [[[= product_name_exp =]] v4.3](https://github.com/ibexa/experience/releases/tag/v4.3.0) | [[[= product_name_com =]] v4.3](https://github.com/ibexa/commerce/releases/tag/v4.3.0)|
-
-## v4.3.1
-
-### New REST API endpoints
-
-You can now use new REST API routes that confirm whether the User is logged in,
-without invoking any other route:
-
-- GET `/user/current` - redirects to current User API load.
-- GET `/user/sessions/current` - returns a current User Session object.
-
-You can retrieve, add and remove users from a Segment with:
-
-- GET `/user/users/{userId}/segments` - retrieves Segments for a given User.
-- POST `/user/users/{userId}/segments` - assigns User to one or more Segments.
-- DELETE `/user/users/{userId}/segments/{segmentIdentifier}` - unassigns User from a Segment.
-
-You can retrieve the defined languages with:
-
-- GET `/languages`- returns a defined language list.
-- GET `/languages/{languageCode}` - returns a single language.
-
-### New service for token-based authentication
-
-The new release adds `Ibexa\Contracts\Rest\Security\AuthorizationHeaderRESTRequestMatcher` service that can be used instead of `Ibexa\AdminUi\REST\Security\NonAdminRESTRequestMatcher`.
-It allows REST API endpoints to work with cookie-based authentication.
-
-### Product catalog improvements
-
-#### HTTP cache support for product-related responses
-
-Customer group is now part of user context, which enables HTTP cache to support
-product-related responses.
-
-#### Ability to retrieve a customer group
-
-You can now retrieve customer group by implementing the `Ibexa\Contracts\ProductCatalog\CustomerGroupResolverInterface` interface and tagging it with `ibexa.product_catalog.customer_group.resolver`.
-
-## v4.3.5
-
-- When `UserService::updateUserPassword` method throws `ContentFieldValidationException`,
-it now uses the format accessible via `ContentFieldValidationException::getFieldErrors`:
-
-```text
-array<, array<, array<\Ibexa\Contracts\Core\FieldType\ValidationError>>>
-```
diff --git a/docs/release_notes/ibexa_dxp_v4.4.md b/docs/release_notes/ibexa_dxp_v4.4.md
deleted file mode 100644
index a459605c600..00000000000
--- a/docs/release_notes/ibexa_dxp_v4.4.md
+++ /dev/null
@@ -1,152 +0,0 @@
----
-description: Ibexa DXP v4.4 adds the improvements to the Welcome Page, All-new Ibexa Commerce packages and Fastly IO.
----
-
-
-# Ibexa DXP v4.4
-
-**Version number**: v4.4
-
-**Release date**: February 2, 2023
-
-**Release type**: [Fast Track](https://support.ibexa.co/Public/service-life)
-
-**Update**: [v4.3.x to v4.4](https://doc.ibexa.co/en/4.4/update_and_migration/from_4.3/update_from_4.3/)
-
-## Notable changes
-
-### New welcome page
-
-A new welcome page greets you when opening Ibexa Digital Experience Platform.
-
-
-
-### All-new [[= product_name_com =]] packages [[% include 'snippets/commerce_badge.md' %]]
-
-This release deprecates all Commerce packages that you've known from previous releases and brings a redesigned and reconstructed Commerce offering:
-
-- `ibexa/cart`
-- `ibexa/checkout`
-- `ibexa/storefront`
-
-As part of this effort, two all-new components have been created: Cart and Checkout, that you can use to build your own e-commerce presence.
-
-
-
-
-
-For more information, see [Commerce](https://doc.ibexa.co/en/4.4/commerce/commerce/).
-
-#### Storefront
-
-Another addition is the Storefront package that provides a starting kit for the developers.
-It's a working set of components, which you can use to test the new capabilities, and then customize and extend to create your own implementation of a web store.
-
-For more information, see [Storefront](https://doc.ibexa.co/en/4.4/commerce/storefront/storefront/).
-
-### Fastly Image Optimizer (Fastly IO)
-
-You can now use Fastly IO to serve optimized versions of your images in real time and cache them.
-Fastly can perform multiple transformations on your image, for example, cropping, resizing, and trimming before serving it to end user.
-Fastly is an external service that requires a separate subscription, to learn more see, [Fastly Image Optimizer website](https://www.fastly.com/documentation/guides/full-site-delivery/image-optimization/about-fastly-image-optimizer/).
-
-If you already have Fastly IO subscription, you can move to [Fastly IO configuration in Ibexa DXP](https://doc.ibexa.co/en/4.4/content_management/images/fastly_io/).
-
-#### Fastly VCL upload
-
-With this release, you can manipulate your Fastly VCL configuration directly from the command line.
-For example, you can define formats or source path for images.
-
-### New page blocks [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-This release introduces new page blocks that rely on Personalization and product catalog features to let editors visually organize products on a page:
-
-- Catalog block - displays products from a specific catalog to a selected customer group.
-- Last purchased - displays a list of products that were recently purchased, either generally, or by a specific user.
-- Last viewed - displays a list of products that were recently viewed.
-- Product collection - displays a collection of specifically selected products.
-- Recently added - displays a list of products that were recently added to the product catalog.
-
-### Personalization improvements
-
-#### Automated way of creating Personalization service account
-
-The Personalization service has been enhanced to speed up the process of creating a new customer account.
-Now, to create an account in the new, automated way, you have to fill out the form, select an account type, and send a request to the Personalization endpoint.
-Shortly after, you receive the credentials.
-
-#### New models in Personalization engine
-
-Personalization engine introduces two new recommendation models: predictive and recurring purchase.
-These two new models, based on mathematical approach, help to predict clients behavior and
-provide the best recommendations.
-
-## [[= product_name_connect =]]
-
-You can now take advantage of [[[= product_name_connect =]]](https://www.ibexa.co/products/features/integration-and-automation),
-an iPaaS (integration platform-as-a-service) which allows you to connect Ibexa DXP with third-party applications.
-[[= product_name_connect =]] features a low-code drag-and-drop interface and hundreds of connectors to different services that help you automate business processes.
-
-See [[[= product_name_connect =]] documentation]([[= connect_doc =]]/).
-
-
-
-## Other changes
-
-### Flysystem v2
-
-The codebase has undergone significant upgrades to rely on Flysystem v2.
-The Flysystem Adapter implementation now supports dynamic paths described by complex settings resolvable for the SiteAccess context.
-
-For more information, see [Configuring the DFS IO handler](https://doc.ibexa.co/en/4.4/infrastructure_and_maintenance/clustering/clustering/#configuring-the-dfs-io-handler).
-
-If your custom project relies directly on a Flysystem features instead of using our IO abstraction, it requires an upgrade as well, performed according to [these instructions](https://flysystem.thephpleague.com/docs/upgrade-from-1.x/).
-
-### Dedicated migration type for Corporate Accounts
-
-To simplify data migration, you can now create a corporate account with underlying objects such as members group and address book.
-You can also extract those objects as references.
-
-For more information on data migration actions, see [Data migration actions](https://doc.ibexa.co/en/4.4/content_management/data_migration/data_migration_actions/#data-migration-actions).
-
-### API improvements
-
-### Item age in Recently added model
-
-In a Recently added model (previously Random model), you can now manually set the age of items which are displayed in recommendations.
-
-### Deprecations
-
-#### Commerce packages
-
-The following Commerce packages are deprecated as of this release and will be removed in v5:
-
-- `ibexa/commerce-admin-ui`
-- `ibexa/commerce-erp-admin`
-- `ibexa/commerce-order-history`
-- `ibexa/commerce-page-builder`
-- `ibexa/commerce-rest`
-- `ibexa/commerce-transaction`
-- `ibexa/commerce-base-design`
-- `ibexa/commerce-checkout`
-- `ibexa/commerce-fieldtypes`
-- `ibexa/commerce-price-engine`
-- `ibexa/commerce-shop`
-- `ibexa/commerce-shop-ui`
-
-They will be maintained by [[= product_name_name =]] with fixes, including security fixes, but they won't be further developed.
-Old packages are replaced by [the all-new [[= product_name_com =]] packages](#all-new-ibexa-commerce-packages) with more
-to come in the upcoming releases.
-
-#### Flysystem
-
-- Support for overwriting existing files has been dropped (catch block of `\Ibexa\Core\IO\IOBinarydataHandler\Flysystem::create` and test).
-The new native Flysystem v2 Local Adapter performs this out of the box.
-- Support for no last modified timestamp has been dropped (in the form of a test case).
-The new Flysystem v2 throws `UnableToRetrieveMetadata` exception in such case.
-
-## Full changelog
-
-| [[= product_name_content =]] | [[= product_name_exp =]] | [[= product_name_com =]] |
-|------------------------|---------------------------|-------------------------|
-| [[[= product_name_content =]] v4.4](https://github.com/ibexa/content/releases/tag/v4.4.0) | [[[= product_name_exp =]] v4.4](https://github.com/ibexa/experience/releases/tag/v4.4.0) | [[[= product_name_com =]] v4.4](https://github.com/ibexa/commerce/releases/tag/v4.4.0) |
diff --git a/docs/release_notes/ibexa_dxp_v4.5.md b/docs/release_notes/ibexa_dxp_v4.5.md
deleted file mode 100644
index 98efacf7da5..00000000000
--- a/docs/release_notes/ibexa_dxp_v4.5.md
+++ /dev/null
@@ -1,252 +0,0 @@
----
-description: Ibexa DXP v4.5 adds new features to Ibexa Commerce, translation comparison, and a number of improvements to Customer Portal and Personalization.
----
-
-
-
-# Ibexa DXP v4.5
-
-**Version number**: v4.5
-
-**Release date**: May 12, 2023
-
-**Release type**: [Fast Track](https://support.ibexa.co/Public/service-life)
-
-**Update**: [v4.4.x to v4.5](https://doc.ibexa.co/en/4.6/update_and_migration/from_4.4/update_from_4.4/)
-
-## Notable changes
-
-### All-new [[= product_name_com =]] packages [[% include 'snippets/commerce_badge.md' %]]
-
-This release brings new packages to complement the redesigned and reconstructed Commerce offering.
-You can use them to further enhance your e-commerce presence:
-
-- `ibexa/order-management`
-- `ibexa/payment`
-- `ibexa/shipping`
-
-Modules can interact with each other, for example, to decrease stock as a result of a sale, or cancel shipments and payments when orders are cancelled.
-
-#### Order management
-
-With order management in place, it's now possible to create orders, configure and customize the order processing workflow, and manage orders by using the APIs.
-
-New screens added to the back office user interface let Ibexa DXP users search for orders and filter search results.
-Users can also review order details and completion status, and cancel orders.
-
-
-
-#### Payment
-
-The all-new Payment module brings a possibility of tracking payment progress and defining a custom payment processing workflow.
-New back office screens allow users to search for payment methods and payments, and also define, enable, and disable offline payment methods.
-
-Additionally, new APIs are available, which can be used for managing payment methods and payments.
-
-
-
-#### Shipping
-
-With the arrival of the Shipping module, it's now possible to define and manage shipping methods of different types, together with their related costs, on a dedicated back office screen.
-You can now also configure and customize the shipment workflow.
-
-New APIs enable managing shipping methods and payments, while an extension point can be used to expand the default list of shipping method types.
-
-
-
-For more information, see [Commerce](https://doc.ibexa.co/en/4.5/commerce/commerce/).
-
-### New commerce page blocks [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-This release introduces new page blocks:
-
-- Bestsellers block displays a list of products from the product catalog that were recently a bestseller.
-
-
-
-- [React app block](https://doc.ibexa.co/en/4.5/content_management/pages/react_app_block/) allows an editor to embed a preconfigured React application in a page. React app block requires configuration. For more information, see [React App Block configuration](https://doc.ibexa.co/en/4.5/content_management/pages/react_app_block/#react-app-block-configuration).
-
-
-
-### Translation comparison
-
-With this release, you can compare different versions of translations of a content item, including comparison between different languages.
-
-You can now choose between two new options of the view:
-
-- Split - default, side by side view to compare versions of the same or different languages
-- Unified - single column view to compare versions of the same language
-
-Now, when you compare different versions within the same language, the system highlights the changes using colors:
-
-- yellow - content updated
-- blue - content added
-- red - content deleted
-
-
-
-For more information, see [Translation comparison](https://doc.ibexa.co/projects/userguide/en/4.5/content_management/translate_content/#translation-comparison).
-
-### Page Builder for B2B portals [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-With this release, you're able to use Page Builder to create custom Customer Portals for your clients.
-With new Sales rep page block and using all available blocks from the original Page Builder, you can create a unique experience for each customer group.
-Additionally, you can assign each customer group to a specific Customer Portal or create an availability hierarchy based on rules and configuration.
-
-
-
-For more information, see [backend configuration](https://doc.ibexa.co/en/4.5/customer_management/cp_page_builder/)
-and [user guide](https://doc.ibexa.co/projects/userguide/en/4.5/customer_management/build_customer_portal/) on how to create and edit Customer Portals.
-
-### Personalization improvements
-
-#### New B2B models in Personalization engine
-
-Personalization engine introduces two new types of models: last clicked and last purchased B2B, and B2B recurring purchase models, dedicated to B2B users.
-Built on the fly, and based on segment groups, the models return actual items clicked by users with the same segment ID and actual bought items.
-B2B recurring purchase model anticipates and predicts purchase of products that were bought recursively within the same segment ID.
-
-### Segment management
-
-Now you can use segmentation logic with operators to build complex segment groups which enable precise filtering.
-With intuitive drag-and-drop interface, define rules, add logic operators and nest segments in segment
-groups to get the most accurate, precise and targeted recommendations for your customers.
-
-
-
-## Other changes
-
-### Customer Data Platform (CDP) configuration
-
-In this release, the CDP configuration becomes more generic
-and allows supporting other transport types accepted by CDP.
-Currently, only `stream_file` transport is supported and can be initialized from the configuration.
-
-Ibexa DXP v4.5 adds the abstraction that allows you to implement other transport types from third parties.
-
-For more information, see [CDP configuration](https://doc.ibexa.co/en/4.5/cdp/cdp_activation/#configuration).
-
-### API improvements
-
-#### REST API for company accounts [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-This release adds new endpoints that allow you to manage companies in your platform with REST API:
-
-- GET `/corporate/companies` - supports pagination and existing Content Criteria and Sort Clauses but via query parameters
-- POST `/corporate/companies` - creates a company
-- GET `/corporate/companies/{companyId}` - loads a company
-- DELETE `/corporate/companies/{companyId}` - deletes a company
-- PATCH `/corporate/companies/{companyId}` - updates company data
-- GET `/corporate/companies/{companyId}/members` - supports filtering, sorting, and pagination
-- POST `/corporate/companies/{companyId}/members` - creates new member in a company
-- GET `/corporate/companies/{companyId}/members/{memberId}` - loads a member from a company
-- DELETE `/corporate/companies/{companyId}/members/{memberId}` - deletes a member from a company
-- PATCH `/corporate/companies/{companyId}/members/{memberId}` - updates member data
-
-#### PHP API for company accounts [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-To create a company with proper structure and shipping address by using PHP API, we recommend new
-`\Ibexa\Contracts\CorporateAccount\Service\CorporateAccountService::createCompany` service instead of
-`\Ibexa\Contracts\CorporateAccount\Service\CompanyService::createCompany`.
-
-#### REST API for order management [[% include 'snippets/commerce_badge.md' %]]
-
-This release adds new endpoints that allow you to manage orders by using REST API:
-
-- GET `/orders/orders` - loads a list of orders
-- POST `/orders/orders` - creates an order
-- GET `/orders/order` - loads an order by its identifier
-- GET `/orders/order/{id}` - loads an order
-- POST `/orders/orders/{id}` - cancels an order
-- PATCH `/orders/orders/{id}` - updates an order
-
-#### PHP API for order management [[% include 'snippets/commerce_badge.md' %]]
-
-The Order Management package provides the `Ibexa\Contracts\OrderManagement\OrderServiceInterface` service, which is the entrypoint for calling the backend API for managing orders.
-
-#### PHP API for shipping methods and shipments [[% include 'snippets/commerce_badge.md' %]]
-
-The Checkout package provides the following services that are entrypoints to the backend API:
-
-- `Ibexa\Contracts\Shipping\ShipmentServiceInterface` for managing shipments
-- `Ibexa\Contracts\Shipping\ShippingMethodServiceInterface` for managing shipment methods
-
-#### PHP API for payment methods and payments [[% include 'snippets/commerce_badge.md' %]]
-
-The Payment package provides the following services that are entrypoints to the backend API:
-
-- `Ibexa\Contracts\Payment\PaymentServiceInterface` for managing payments
-- `Ibexa\Contracts\Payment\PaymentMethodServiceInterface` for managing payment methods
-
-### Category filter in product search
-
-To help users search for products, products in the main catalog view can now be filtered by product category.
-
-
-
-### Product aggregations
-
-Product search now supports aggregations, with the following aggregations available:
-
-- [Product attribute](https://doc.ibexa.co/en/4.5/search/aggregation_reference/product_attribute_aggregations/) - based on product attribute values
-- [ProductAvailabilityTerm](https://doc.ibexa.co/en/4.5/search/aggregation_reference/productavailabilityterm_aggregation/) - based on product availability
-- [ProductPriceRange](https://doc.ibexa.co/en/4.5/search/aggregation_reference/productpricerange_aggregation/) - based on product price
-- [ProductTypeTerm](https://doc.ibexa.co/en/4.5/search/aggregation_reference/producttypeterm_aggregation/) - based on product type
-
-The new [TaxonomyEntryIdAggregation](https://doc.ibexa.co/en/4.5/search/aggregation_reference/taxonomyentryid_aggregation/) aggregates results based on content taxonomy entries or product categories.
-
-### Tag identifiers
-
-The taxonomy entry identifier uniqueness has been changed from globally unique to unique per taxonomy.
-It's no longer necessary to take other taxonomies into account when creating tags in a taxonomy.
-
-### Password security
-
-You can now enhance password security with a setting that prevents using passwords that have been exposed in a public breach.
-To do it, the system checks the password against known password dumps by using the https://haveibeenpwned.com/ API.
-
-For more information, see [Breached passwords](https://doc.ibexa.co/en/4.5/users/passwords/#breached-passwords).
-
-### [[= product_name_connect =]]
-
-For list of changes in [[= product_name_connect =]], see [Ibexa app release notes]([[= connect_doc =]]/general/ibexa_app_release_notes/).
-
-### Deprecations
-
-#### `ibexa/admin-ui`
-
-Changes:
-
-- `\Ibexa\PageBuilder\Siteaccess\SiteaccessService::resolveSiteAccessForContent` moved to `\Ibexa\AdminUi\Siteaccess\SiteaccessResolverInterface`
-
-Deprecations:
-
-- `\Ibexa\AdminUi\Siteaccess\SiteaccessResolverInterface::getSiteaccessesForLocation`
- replaced by `\Ibexa\AdminUi\Siteaccess\SiteaccessResolverInterface::getSiteAccessesList`
-- `\Ibexa\AdminUi\Siteaccess\SiteaccessResolverInterface::getSiteaccesses` replaced by `\Ibexa\AdminUi\Siteaccess\SiteaccessResolverInterface::getSiteAccessesListForLocation`
-
-## Full changelog
-
-| [[= product_name_content =]] | [[= product_name_exp =]] | [[= product_name_com =]]|
-|---------------|------------------|---------------|
-| [[[= product_name_content =]] v4.5](https://github.com/ibexa/content/releases/tag/v4.5.0) | [[[= product_name_exp =]] v4.5](https://github.com/ibexa/experience/releases/tag/v4.5.0) | [[[= product_name_com =]] v4.5](https://github.com/ibexa/commerce/releases/tag/v4.5.0) |
-
-## v4.5.1
-
-### Product category tree filter
-
-In the main catalog view, the tree of categories now has a search input to reduce the tree to matching categories.
-
-
-
-### Product stock criteria and aggregation
-
-Product search now supports stock availability:
-
-- [ProductStock Criterion](https://doc.ibexa.co/en/4.5/search/criteria_reference/productstock_criterion/) - searches for products with a stock compared to a given number
-- [ProductStockRange Criterion](https://doc.ibexa.co/en/4.5/search/criteria_reference/productstockrange_criterion/) - searches for products with a stock in a given range
-- [ProductStockRangeAggregation](https://doc.ibexa.co/en/4.5/search/aggregation_reference/productstockrange_aggregation/) - aggregates search results by products' stock ranges
-
-### `X-Expected-User` REST request header
-
-The [`X-Expected-User` header](https://doc.ibexa.co/en/4.5/api/rest_api/rest_api_usage/rest_requests/#expected-user) checks that the REST request is executed with the desired user (and not, for example, the Anonymous user because of an expired authentication).
diff --git a/docs/release_notes/ibexa_dxp_v4.6.md b/docs/release_notes/ibexa_dxp_v4.6.md
deleted file mode 100644
index 5b276fc682c..00000000000
--- a/docs/release_notes/ibexa_dxp_v4.6.md
+++ /dev/null
@@ -1,1985 +0,0 @@
----
-description: Ibexa DXP v4.6 brings improvements to Commerce, product catalog and Personalization offerings, and a number of changes in CDP and Ibexa Connect.
-title: Ibexa DXP v4.6 LTS
-month_change: false
----
-
-
-
-[[= release_notes_filters('Ibexa DXP v4.6 LTS', ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature', 'First release']) =]]
-
-
-
-[[% set version = 'v4.6.32' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2026-08-20', ['Headless', 'Experience', 'Commerce']) =]]
-
-
-### Security
-
-This release includes security fixes.
-To learn more, see the [corresponding security advisory].
-
-### SiteAccess-aware background tasks
-
-[[= product_name_base =]] Messenger now attaches a [`SiteAccessStamp`](https://doc.ibexa.co/en/4.6/infrastructure_and_maintenance/background_tasks/#siteaccessstamp) to every dispatched message.
-With this, one worker process can handle messages coming from different SiteAccesses.
-
-### Labels and descriptions for custom tags
-
-You can now provide the label and description of a Rich Text custom tag, and the labels of its attributes, directly in the custom tag configuration.
-
-For more information, see [Provide translations for custom tags](https://doc.ibexa.co/en/4.6/content_management/rich_text/extend_online_editor/#provide-translations-for-custom-tags).
-
-### Developer experience
-
-#### PHP API
-
-The following additions were made to the PHP API:
-
-- [`Ibexa\Contracts\DoctrineSchema\Database`](https://ez-systems-developer-documentation--3358.com.readthedocs.build/en/3358/api/php_api/php_api_reference/namespaces/ibexa-contracts-doctrineschema-database.html)
-- [`Ibexa\Contracts\DoctrineSchema\Database\DatabasePlatformName`](https://ez-systems-developer-documentation--3358.com.readthedocs.build/en/3358/api/php_api/php_api_reference/classes/Ibexa-Contracts-DoctrineSchema-Database-DatabasePlatformName.html)
-- [`Ibexa\Contracts\DoctrineSchema\Database\DatabasePlatformResolver`](https://ez-systems-developer-documentation--3358.com.readthedocs.build/en/3358/api/php_api/php_api_reference/classes/Ibexa-Contracts-DoctrineSchema-Database-DatabasePlatformResolver.html)
-- [`Ibexa\Contracts\Messenger\Stamp`](https://ez-systems-developer-documentation--3358.com.readthedocs.build/en/3358/api/php_api/php_api_reference/namespaces/ibexa-contracts-messenger-stamp.html)
-- [`Ibexa\Contracts\Messenger\Stamp\SiteAccessStamp`](https://ez-systems-developer-documentation--3358.com.readthedocs.build/en/3358/api/php_api/php_api_reference/classes/Ibexa-Contracts-Messenger-Stamp-SiteAccessStamp.html)
-
-### Full changelog
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.31' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2026-07-01', ['Headless', 'Experience', 'Commerce', ]) =]]
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.30' %]]
-[[% set date = '2026-05-21' %]]
-
-[[= release_note_entry_begin(
- product_name + ' ' + version,
- date,
- ['Headless', 'Experience', 'Commerce', 'New feature']
-) =]]
-
-
-### Security
-
-This release includes security fixes.
-To learn more, see the [corresponding security advisory](https://developers.ibexa.co/security-advisories/ibexa-sa-2026-003-vulnerabilities-in-forms-submissions-rest-sessions-and-solr-logs).
-
-### Gaussian blur optimization in Image Editor
-
-The [Image Editor]([[= user_doc =]]/image_management/edit_images/) now supports configuring the strength of the gaussian blur that is used for image optimization.
-You can adjust the blur level to balance between file size reduction and image sharpness.
-For more information, see [Configure image editor](https://doc.ibexa.co/en/4.6/content_management/images/configure_image_editor/#gaussian-blur-strength).
-
-### Developer experience
-
-#### Twig Component group
-
-New [Twig Component group](https://doc.ibexa.co/en/5.0/templating/components/) is available in the back office:
-
-- `admin-ui-content-column-end`
-
-For more information, see [available Admin UI Twig Component groups](https://doc.ibexa.co/en/5.0/administration/back_office/back_office_elements/custom_components/#admin-ui).
-
-#### PHP API
-
-##### Product API: Computed availability for products
-
-[`AvailabilityInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Availability-AvailabilityInterface.html) now uses separate values for availability and computed availability:
-
-- `getAvailability()` returns whether the product or variant is manually set as available
-- `getComputedAvailability()` returns whether the product or variant can be ordered, for example, based on its stock level
-
-For more information, see [Availability and computed availability](https://doc.ibexa.co/en/4.6/pim/products/#product-availability-and-stock).
-
-##### Workflow API: new `loadWorkflowMetadataForVersionInfo` method
-
-The new [`WorkflowServiceInterface::loadWorkflowMetadataForVersionInfo`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Workflow-Service-WorkflowServiceInterface.html#method_loadWorkflowMetadataForVersionInfo) method loads workflow information directly from a [`VersionInfo`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Content-VersionInfo.html) object, without loading the content item.
-
-For more information, see [Workflow API](https://doc.ibexa.co/en/5.0/content_management/workflow/workflow_api/#getting-workflow-information).
-
-### Full changelog
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.29' %]]
-[[% set date = null %]]
-
-[[= release_note_entry_begin(
- "Integrated help " + version,
- '2026-04-20',
- ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature']
-) =]]
-
-### Product tour
-
-The product tour is a new Integrated help feature that helps back office contributors to discover Ibexa DXP.
-
-With product tours, you can create customized onboarding journeys.
-This accelerates user adoption, reduces training time, and helps users confidently navigate the platform.
-
-For more information, see [Product tour](https://doc.ibexa.co/en/4.6/administration/back_office/product_tour/).
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin(
- "Ibexa DXP " + version,
- '2026-04-20',
- ['Headless', 'Experience', 'Commerce', 'New feature']
-) =]]
-
-### Developer experience
-
-#### Taxonomy search
-
-One [taxonomy search](https://doc.ibexa.co/en/4.6/content_management/taxonomy/taxonomy_api/) search criterion is added:
-
-- [`TaxonomyNoEntries`](https://doc.ibexa.co/en/4.6/search/criteria_reference/taxonomy_no_entries/) to find content items to which no taxonomy entries have been assigned.
-
-#### Custom parameters in `ibexa_render()`
-
-You can now pass custom parameters to templates when using the `ibexa_render()` Twig function with the new `params` option, similar to how you can with `render(controller())`.
-
-This allows you to provide additional context or data to your view templates:
-
-``` html+twig
-{{ ibexa_render(content, {
- 'viewType': 'line',
- 'method': 'inline',
- 'params': {
- 'custom_param': 'custom_value',
- 'another_param': 'another_value'
- }
-}) }}
-```
-
-The parameters are available in your template as regular variables.
-
-For more information, see [`ibexa_render()` Twig function](https://doc.ibexa.co/en/4.6/templating/twig_function_reference/content_twig_functions/#ibexa_render).
-
-#### PHP API
-
-The following additions were made to the PHP API:
-
-- [`Ibexa\Contracts\Core\FieldType\ReferenceAwareExternalStorage`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-FieldType-ReferenceAwareExternalStorage.html)
-- [`Ibexa\Contracts\Core\Options\Context`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Options-Context.html)
-- [`Ibexa\Contracts\CorporateAccount\Order`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/namespaces/ibexa-contracts-corporateaccount-order.html)
-- [`Ibexa\Contracts\CorporateAccount\Order\OrderStatusLabelProviderInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-CorporateAccount-Order-OrderStatusLabelProviderInterface.html)
-- [`Ibexa\Contracts\Taxonomy\Search\Query\Criterion\TaxonomyNoEntries`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Taxonomy-Search-Query-Criterion-TaxonomyNoEntries.html)
- For more information, see [search criteria reference entry](https://doc.ibexa.co/en/4.6/search/criteria_reference/taxonomy_no_entries/).
-- [`Ibexa\Contracts\IntegratedHelp` namespace](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/namespaces/ibexa-contracts-integratedhelp.html) from the [Integrated help LTS-Update](https://doc.ibexa.co/en/4.6/administration/back_office/integrated_help/)
-
-### Full changelog
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.28' %]]
-
-[[= release_note_entry_begin(
- "Ibexa DXP " + version,
- '2026-03-05',
- ['Headless', 'Experience', 'Commerce']
-) =]]
-
-### Infrastructure
-
-#### PHP 8.4 support
-
-PHP 8.4 is now [officially supported](https://doc.ibexa.co/en/4.6/getting_started/requirements/#php).
-
-### Developer experience
-
-#### PHP API
-
-The following event have been added to the PHP API:
-
-- [`Ibexa\Contracts\ImageEditor\Event\ConfigureImageOptimizersEvent`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ImageEditor-Event-ConfigureImageOptimizersEvent.html)
-
-### Full changelog
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.27' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2026-02-03', ['Headless', 'Experience', 'Commerce']) =]]
-
-### Added support for Elasticsearch 8
-
-Elasticsearch 8 is now officially supported.
-If you're currently using Elasticsearch 7, which is [no longer maintained](https://www.elastic.co/support/eol), it's recommended to upgrade.
-See the [update instructions](https://doc.ibexa.co/en/4.6/update_and_migration/from_4.6/update_from_4.6/#elasticsearch-8-support) for more information.
-
-### Added asynchronous processing of data in Ibexa DXP
-
-You can now process requests from [[[= product_name_cdp =]]](https://doc.ibexa.co/en/4.6/cdp/cdp/) asynchronously, in the background.
-Use it to improve performance and prevent data loss.
-
-To enable this behavior, install and configure the [Ibexa Messenger package](https://doc.ibexa.co/en/4.6/infrastructure_and_maintenance/background_tasks/).
-Then, set the batch size that triggers asynchronous processing:
-
-``` yaml
-ibexa_cdp:
- bulk_async_threshold: 100
-```
-
-When the number of [audience](https://content.raptorservices.com/help-center/how-to-build-audiences-in-the-customer-data-platform) changes coming from [Raptor](https://www.raptorservices.com/) exceeds this number, the changes are sent to the queue and processed in the background.
-Otherwise, they are processed synchronously.
-
-### Improved HTTP caching for Page Builder and dashboard blocks [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-You can now indicate which [query parameters](https://en.wikipedia.org/wiki/Query_string) must be used as keys when generating [HTTP cache](https://doc.ibexa.co/en/4.6/infrastructure_and_maintenance/cache/http_cache/http_cache/) for block requests.
-
-This allows you to improve performance for blocks by utilizing HTTP cache more effectively, for example, for paginated blocks in the [dashboard](https://doc.ibexa.co/en/4.6/administration/dashboard/customize_dashboard/).
-
-To set it up, use the new `cacheable_query_params` [block setting](https://doc.ibexa.co/en/4.6/content_management/pages/page_blocks/#block-configuration).
-
-Then, adjust your [layouts](https://doc.ibexa.co/en/4.6/templating/render_content/render_page/#configure-layout) and pass the parameters to [Symfony's `controller function`]([[= symfony_doc =]]/reference/twig_reference.html#controller) by using the new `ibexa_append_cacheable_query_params` Twig function, as in the example below:
-
-``` html+twig
-{{ render_esi(controller('Ibexa\\Bundle\\FieldTypePage\\Controller\\BlockController::renderAction',
- {
- 'locationId': locationId,
- 'contentId': contentInfo.id,
- 'blockId': block.id,
- 'versionNo': versionInfo.versionNo,
- 'languageCode': field.languageCode
- },
- ibexa_append_cacheable_query_params(block)
-)) }}
-```
-
-### Developer experience
-
-#### Easier debugging of Page Builder blocks
-
-In Symfony's `dev` environment, use the "Open profiler" action to quickly debug Page Builder's block rendering failures.
-
-
-
-#### Improved logging for Ibexa CDP
-
-You can configure the new `ibexa.cdp.webhook` Monolog channels to direct all CDP webhook logs to specific output for easier separation of logs.
-
-Example configuration:
-
-```yaml
-when@prod:
- monolog:
- handlers:
- cdp_webhook:
- type: stream
- path: "%kernel.logs_dir%/cdp_webhook_%kernel.environment%.log"
- level: debug
- channels: [ 'ibexa.cdp.webhook' ]
-```
-
-#### Simplified creation of product types
-
-Use the new [`ProductTypeCreateStruct::setNames()`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Local-Values-ProductType-ProductTypeCreateStruct.html#method_setNames) method to set names, in multiple languages, of a product type during its creation.
-
-See [creating product types](https://doc.ibexa.co/en/4.6/pim/product_api/#creating-product-types) for an example.
-
-#### PHP API
-
-The PHP API has been enhanced with the following classes and interfaces:
-
-- [`Ibexa\Contracts\Core\Search\Embedding\EmbeddingProviderExceptionInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Search-Embedding-EmbeddingProviderExceptionInterface.html)
-- [`Ibexa\Contracts\Taxonomy\Embedding\Exception\TaxonomyEmbeddingConfigurationException`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Taxonomy-Embedding-Exception-TaxonomyEmbeddingConfigurationException.html)
-
-### Full changelog
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.26' %]]
-
-[[= release_note_entry_begin("Integrated help " + version, '2025-12-10', ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature', 'First release']) =]]
-
-Integrated help, a new [LTS Update](https://doc.ibexa.co/en/4.6/ibexa_products/editions/#lts-updates), brings contextual documentation, guidance, and partner-specific resources right into the user interface of Ibexa DXP.
-It helps editors, store managers, and developers to quickly access relevant content, training and resources without leaving the UI, narrowing the gap between product and documentation.
-
-The default help menu can be modified to include links to internal editorial guidelines, custom tutorials, or support pages.
-
-
-
-For more information, see [Integrated help](https://doc.ibexa.co/en/4.6/administration/back_office/integrated_help/).
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin("Collaboration " + version, '2025-12-10', ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature']) =]]
-
-#### Real-time collaborative editing
-
-Real-time editing is now part of the [Collaborative editing](https://doc.ibexa.co/en/4.6/content_management/collaborative_editing/collaborative_editing/) feature.
-
-By using it, users can edit and review content in real time, making teamwork faster, more efficient, and streamlining the content review process.
-The system automatically tracks changes, allowing seamless collaboration within a single content item.
-
-This extends the already existing capabilities allowing editors to work on the same content created in Ibexa DXP simultaneously, streamlining the content creation and review process.
-
-
-
-For more information, see how to [install Collaborative editing](https://doc.ibexa.co/en/4.6/content_management/collaborative_editing/install_collaborative_editing).
-
-#### PHP API
-
-The PHP API has been enhanced with the following classes and interfaces:
-
-- [`Ibexa\Contracts\Collaboration\Invitation\Query\Criterion\ParticipantScope`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Collaboration-Invitation-Query-Criterion-ParticipantScope.html)
-- [`Ibexa\Contracts\Collaboration\Invitation\Query\Criterion\ParticipantType`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Collaboration-Invitation-Query-Criterion-ParticipantType.html)
-- [`Ibexa\Contracts\Collaboration\Participant\ParticipantDiscriminator`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Collaboration-Participant-ParticipantDiscriminator.html)
-- [`Ibexa\Contracts\FieldTypeRichTextRTE\ChannelIdGeneratorInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-FieldTypeRichTextRTE-ChannelIdGeneratorInterface.html)
-- [`Ibexa\Contracts\FieldTypeRichTextRTE\Config\LicenseKeyProviderInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-FieldTypeRichTextRTE-Config-LicenseKeyProviderInterface.html)
-- [`Ibexa\Contracts\FieldTypeRichTextRTE\Config\LocalStorageInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-FieldTypeRichTextRTE-Config-LocalStorageInterface.html)
-- [`Ibexa\Contracts\FieldTypeRichTextRTE\TokenServiceInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-FieldTypeRichTextRTE-TokenServiceInterface.html)
-- [`Ibexa\Contracts\FieldTypeRichTextRTE\ToS\LicenseTermsStatusServiceInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-FieldTypeRichTextRTE-ToS-LicenseTermsStatusServiceInterface.html)
-- [`Ibexa\Contracts\FieldTypeRichTextRTE\ToS\NoResponseException`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-FieldTypeRichTextRTE-ToS-NoResponseException.html)
-- [`Ibexa\Contracts\FieldTypeRichTextRTE\ToS\Status`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-FieldTypeRichTextRTE-ToS-Status.html)
-- [`Ibexa\Contracts\FieldTypeRichTextRTE\ToS\ToSServiceInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-FieldTypeRichTextRTE-ToS-ToSServiceInterface.html)
-- [`Ibexa\Contracts\Share\Mapper\Action\ShareActionItemsMapperInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Share-Mapper-Action-ShareActionItemsMapperInterface.html)
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin("AI Actions " + version, '2025-12-10', ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature']) =]]
-
-#### Taxonomy suggestions for faster content classification
-
-You can now speed up taxonomy assignment with AI-powered taxonomy suggestions.
-
-Instead of manually browsing through large taxonomy trees and selecting categories or tags one by one, editors can choose from automatically generated suggestions based on the product or content information, for example name and description.
-
-This approach reduces manual effort, minimizes errors, and significantly improves the speed and consistency of content and product classification.
-
-
-
-For more information, see [Taxonomy suggestions](https://doc.ibexa.co/en/4.6/content_management/taxonomy/taxonomy/#taxonomy-suggestions).
-
-#### PHP API
-
-The PHP API has been enhanced with the following classes:
-
-- [`Ibexa\Contracts\ConnectorAi\Action\DataType\Taxonomy`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-DataType-Taxonomy.html)
-- [`Ibexa\Contracts\ConnectorAi\Action\DataType\TaxonomyEntry`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-DataType-TaxonomyEntry.html)
-- [`Ibexa\Contracts\ConnectorAi\Action\DataType\TaxonomySuggestion`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-DataType-TaxonomySuggestion.html)
-- [`Ibexa\Contracts\ConnectorAi\Action\DataType\TaxonomySuggestionInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-DataType-TaxonomySuggestionInterface.html)
-- [`Ibexa\Contracts\ConnectorAi\Action\DataType\TextToTaxonomyInput`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-DataType-TextToTaxonomyInput.html)
-- [`Ibexa\Contracts\ConnectorAi\Action\Response\TaxonomyResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-Response-TaxonomyResponse.html)
-- [`Ibexa\Contracts\ConnectorAi\Action\SuggestTaxonomyAction`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-SuggestTaxonomyAction.html)
-- [`Ibexa\Contracts\ConnectorAi\Action\TextToTaxonomy\Action`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-TextToTaxonomy-Action.html)
-- [`Ibexa\Contracts\ConnectorAi\Action\TextToTaxonomy\ActionResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-TextToTaxonomy-ActionResponse.html)
-- [`Ibexa\Contracts\ConnectorAi\Action\TextToTaxonomy\ActionType`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-TextToTaxonomy-ActionType.html)
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2025-12-10', ['Headless', 'Experience', 'Commerce', 'New feature']) =]]
-
-#### Security
-
-This release includes security fixes.
-To learn more, see the [corresponding security advisory](https://developers.ibexa.co/security-advisories/ibexa-sa-2025-005-password-change-and-xss-vulnerabilities-in-back-office).
-
-#### Infrastructure
-
-- MariaDB 11.4 is now [officially supported](https://doc.ibexa.co/en/4.6/getting_started/requirements/#dbms)
-
-#### Developer experience
-
-##### PHP API
-
-The PHP API has been enhanced with the following classes and interfaces:
-
-- [`Ibexa\Contracts\Core\Repository\Values\Content\EmbeddingQuery`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Content-EmbeddingQuery.html)
-- [`Ibexa\Contracts\Core\Repository\Values\Content\EmbeddingQueryBuilder`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Content-EmbeddingQueryBuilder.html)
-- [`Ibexa\Contracts\Core\Repository\Values\ContentType\Query\Criterion\ContentTypeGroupName`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-ContentType-Query-Criterion-ContentTypeGroupName.html)
-- [`Ibexa\Contracts\Core\Repository\Values\Content\Query\Embedding`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Content-Query-Embedding.html)
-- [`Ibexa\Contracts\Core\Repository\Values\Content\QueryValidatorInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Content-QueryValidatorInterface.html)
-- [`Ibexa\Contracts\Core\Search\Embedding\EmbeddingConfigurationInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Search-Embedding-EmbeddingConfigurationInterface.html)
-- [`Ibexa\Contracts\Core\Search\Embedding\EmbeddingProviderInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Search-Embedding-EmbeddingProviderInterface.html)
-- [`Ibexa\Contracts\Core\Search\Embedding\EmbeddingProviderRegistryInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Search-Embedding-EmbeddingProviderRegistryInterface.html)
-- [`Ibexa\Contracts\Core\Search\Embedding\EmbeddingProviderResolverInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Search-Embedding-EmbeddingProviderResolverInterface.html)
-- [`Ibexa\Contracts\Core\Search\Embedding\EmbeddingResolverNotFoundException`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Search-Embedding-EmbeddingResolverNotFoundException.html)
-- [`Ibexa\Contracts\Core\Search\FieldType\EmbeddingField`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Search-FieldType-EmbeddingField.html)
-- [`Ibexa\Contracts\Core\Search\FieldType\EmbeddingFieldFactory`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Search-FieldType-EmbeddingFieldFactory.html)
-- [`Ibexa\Contracts\Elasticsearch\Query\EmbeddingVisitor`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Elasticsearch-Query-EmbeddingVisitor.html)
-- [`Ibexa\Contracts\AdminUi\ContentType\ContentTypeFieldsByExpressionServiceInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-AdminUi-ContentType-ContentTypeFieldsByExpressionServiceInterface.html)
-- [`Ibexa\Contracts\Solr\Query\EmbeddingVisitor`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Solr-Query-EmbeddingVisitor.html)
-- [`Ibexa\Contracts\Taxonomy\Embedding\TaxonomyEmbeddingConfigurationInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Taxonomy-Embedding-TaxonomyEmbeddingConfigurationInterface.html)
-- [`Ibexa\Contracts\Taxonomy\Embedding\TaxonomyEmbeddingFieldProviderInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Taxonomy-Embedding-TaxonomyEmbeddingFieldProviderInterface.html)
-- [`Ibexa\Contracts\Taxonomy\Search\Query\Value\TaxonomyEmbedding`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Taxonomy-Search-Query-Value-TaxonomyEmbedding.html)
-- [`Ibexa\Contracts\User\PasswordReset\NotifierInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-User-PasswordReset-NotifierInterface.html)
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.25' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2024-10-17', ['Headless', 'Experience', 'Commerce']) =]]
-
-#### Security
-
-This release includes security fixes.
-To learn more, see the [corresponding security advisory](https://developers.ibexa.co/security-advisories/ibexa-sa-2025-004-xss-and-enumeration-vulnerabilities-in-back-office).
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.24' %]]
-
-[[= release_note_entry_begin("Collaboration " + version, '2025-09-09', ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature', 'First release']) =]]
-
-#### Collaboration
-
-The new [Collaborative editing](https://doc.ibexa.co/en/4.6/content_management/collaborative_editing/collaborative_editing_guide/) LTS Update allows multiple users to preview, review, and edit the same content, improving teamwork and streamlining the review process.
-Internal and external users can be invited to a collaboration session, through different sharing options.
-
-With Real-time editing, more advanced part of the feature, users can see each other’s changes in the real time, or work on the content asynchronously.
-
-Additionally, shared drafts can be accessed and managed through new dashboard tabs: **My shared drafts** and **Drafts shared with me**, helping users stay organized.
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin("AI Actions " + version, '2025-09-09', ['Headless', 'Experience', 'Commerce', 'LTS Update']) =]]
-
-#### Chat GPT 5.0 support
-
-With improved reasoning and greater accuracy in mind, the AI Connector package has been enhanced by adding ChatGPT 5.0 to its list of supported LLMs.
-
-
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin("Discounts " + version, '2025-09-09', ['Commerce', 'LTS Update']) =]]
-
-#### Discount indexing
-
-Discounts now allow scheduling a re-indexing of discounted product catalog prices at the most convenient time by using the Ibexa Messenger package.
-Ibexa Messenger is a customization of the Symfony Messenger package, created to adjust it to Ibexa DXP's needs.
-
-Once properly configured, it uses a background queue to trigger price re-indexing, ensuring efficient use of system resources without causing performance disruptions.
-
-##### PHP API
-
-The following additions were made to the Discounts PHP API:
-
-??? note "Events"
- - [`Ibexa\Contracts\Discounts\Event\EnableDiscountEvent`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-EnableDiscountEvent.html)
- - [`Ibexa\Contracts\Discounts\Event\BeforeDisableDiscountEvent`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-BeforeDisableDiscountEvent.html)
- - [`Ibexa\Contracts\Discounts\Event\BeforeEnableDiscountEvent`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-BeforeEnableDiscountEvent.html)
- - [`Ibexa\Contracts\Discounts\Event\DisableDiscountEvent`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-DisableDiscountEvent.html)
-
-??? note "Search criteria"
- - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\IndexedAtCriterion`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-IndexedAtCriterion.html)
- - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\UpdatedAtCriterion`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-UpdatedAtCriterion.html)
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2025-09-09', ['Headless', 'Experience', 'Commerce', 'New feature']) =]]
-
-#### Improvements to notifications
-
-An improved notifications system is now more intuitive.
-Developers can now create and configure their own notification types, while users can now browse through a list of notifications, where they can either act on them or dismiss them.
-
-
-
-#### Developer experience
-
-##### New packages
-
-The only package that has been introduced in Ibexa DXP v4.6.24 is ibexa/messenger.
-
-##### New version of PHP Storm Plugin
-
-To further improve your experience with Ibexa DXP, a 1.14.0 version of [PHP Storm Plugin](https://doc.ibexa.co/en/4.6/resources/phpstorm_plugin/) has been released, which brings the following changes:
-
-- Added support for Ibexa DXP v5.0
-- Added compatibility with PhpStorm 2024.3.6+
-- Added file template for Twig Component class
-- Added code completion for Twig Component Groups in YAML config files and AsTwigComponent attribute
-- Added code completion for Twig Component Types in YAML config files
-
-##### Infrastructure
-
-- Redis 7.2+ is now [officially supported](https://doc.ibexa.co/en/4.6/getting_started/requirements/)
-
-##### PHP API
-
-The PHP API has been enhanced with the following:
-
-??? note "PHP API classes and interfaces"
- - [`Ibexa\Contracts\AdminUi\Exception`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/namespaces/ibexa-contracts-adminui-exception.html)
- - [`Ibexa\Contracts\AdminUi\Exception\UnresolvedPreviewUrlException`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-AdminUi-Exception-UnresolvedPreviewUrlException.html)
- - [`Ibexa\Contracts\AdminUi\PreviewUrlResolver`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/namespaces/ibexa-contracts-adminui-previewurlresolver.html)
- - [`Ibexa\Contracts\AdminUi\PreviewUrlResolver\VersionPreviewUrlResolverInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-AdminUi-PreviewUrlResolver-VersionPreviewUrlResolverInterface.html)
- - [`Ibexa\Contracts\Core\Validation\Constraint`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/namespaces/ibexa-contracts-core-validation-constraint.html)
- - [`Ibexa\Contracts\Core\Validation\Constraint\UniqueIdentifier`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Validation-Constraint-UniqueIdentifier.html)
- - [`Ibexa\Contracts\Core\Validation\Constraint\UniqueIdentifierValidator`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Validation-Constraint-UniqueIdentifierValidator.html)
- - [`Ibexa\Contracts\Messenger`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/namespaces/ibexa-contracts-messenger.html)
- - [`Ibexa\Contracts\Messenger\Transport`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/namespaces/ibexa-contracts-messenger-transport.html)
- - [`Ibexa\Contracts\Messenger\Transport\MessageProviderInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Messenger-Transport-MessageProviderInterface.html)
- - [`Ibexa\Contracts\ProductCatalog\Values\Product\Query\AttributeCriterionBuilder`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/namespaces/ibexa-contracts-productcatalog-values-product-query-attributecriterionbuilder.html)
- - [`Ibexa\Contracts\ProductCatalog\Values\Product\Query\AttributeCriterionBuilderRegistry`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Product-Query-AttributeCriterionBuilderRegistry.html)
- - [`Ibexa\Contracts\ProductCatalog\Values\Product\Query\AttributeCriterionBuilderRegistryInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Product-Query-AttributeCriterionBuilderRegistryInterface.html)
- - [`Ibexa\Contracts\ProductCatalog\Values\Product\Query\AttributeCriterionBuilder\AttributeCriterionBuilderInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Product-Query-AttributeCriterionBuilder-AttributeCriterionBuilderInterface.html)
- - [`Ibexa\Contracts\ProductCatalog\Values\Product\Query\AttributeCriterionBuilder\CheckboxBuilder`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Product-Query-AttributeCriterionBuilder-CheckboxBuilder.html)
- - [`Ibexa\Contracts\ProductCatalog\Values\Product\Query\AttributeCriterionBuilder\ColorBuilder`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Product-Query-AttributeCriterionBuilder-ColorBuilder.html)
- - [`Ibexa\Contracts\ProductCatalog\Values\Product\Query\AttributeCriterionBuilder\FloatBuilder`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Product-Query-AttributeCriterionBuilder-FloatBuilder.html)
- - [`Ibexa\Contracts\ProductCatalog\Values\Product\Query\AttributeCriterionBuilder\IntegerBuilder`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Product-Query-AttributeCriterionBuilder-IntegerBuilder.html)
- - [`Ibexa\Contracts\ProductCatalog\Values\Product\Query\AttributeCriterionBuilder\SelectionBuilder`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Product-Query-AttributeCriterionBuilder-SelectionBuilder.html)
-
-??? note "Events"
- - [`Ibexa\Contracts\AdminUi\Event\ResolveVersionPreviewUrlEvent`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-AdminUi-Event-ResolveVersionPreviewUrlEvent.html)
-
-#### Full changelog
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.23' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2025-08-19', ['Headless', 'Experience', 'Commerce', 'New feature']) =]]
-
-#### Base price column added to a Product Picker view
-
-The Product Picker tool that, for example, lets you [select products eligible for discounts]([[= user_doc =]]/commerce/discounts/work_with_discounts/#create-new-discount), now displays a **Base price** column for products and product variants.
-
-#### Full changelog
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.22' %]]
-
-[[= release_note_entry_begin("Symbol attribute " + version, '2025-08-05', ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature', 'First release']) =]]
-
-The Symbol attribute allows you to store standardized identifiers of your products in the [product catalog](https://doc.ibexa.co/en/4.6/pim/pim_guide/).
-
-For more information, see [Symbol attribute type](https://doc.ibexa.co/en/4.6/pim/attributes/symbol_attribute_type/).
-
-#### PHP API
-
-The PHP API has been enhanced with the following new classes:
-
-- [`Ibexa\Contracts\ProductCatalogSymbolAttribute\Search\Criterion\SymbolAttribute`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalogSymbolAttribute-Search-Criterion-SymbolAttribute.html)
-- [`Ibexa\Contracts\ProductCatalogSymbolAttribute\Value\ChecksumInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalogSymbolAttribute-Value-ChecksumInterface.html)
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin("Discounts " + version, '2025-08-05', ['Commerce', 'LTS Update']) =]]
-
-#### Global discount codes limits
-
-- You can now [limit the number of times](https://doc.ibexa.co/en/4.6/discounts/discounts_guide/#discount-codes) a discount code can be used before it expires. The discounts created before this release are set to unlimited global usage
-
-#### Discount codes prioritization
-
-- Discounts with discount codes now have priority over the other discounts
-
-#### Discount codes migrations
-
-- You can now create discount codes using [data migrations](https://doc.ibexa.co/en/4.6/content_management/data_migration/importing_data/#discount-codes)
-
-#### PHP API
-
-The PHP API has been enhanced with the following new classes:
-
-- [`Ibexa\Contracts\Discounts\Value\DiscountConditionsInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-DiscountConditionsInterface.html)
-- [`Ibexa\Contracts\Discounts\Value\Query\SortClause\OverridePrioritization`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-OverridePrioritization.html)
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2025-08-05', ['Headless', 'Experience', 'Commerce', 'New feature']) =]]
-
-#### Special characters in online editor
-
-The [online editor](https://doc.ibexa.co/en/4.6/content_management/rich_text/online_editor_guide/) now allows to easily enter special characters like currency symbols.
-It uses the [special characters plugin](https://ckeditor.com/docs/ckeditor5/latest/features/special-characters.html).
-
-
-
-#### Support for Solr 9
-
-With this release, Ibexa DXP starts supporting [Solr 9](https://doc.ibexa.co/en/4.6/getting_started/requirements/#search).
-
-Solr 9 comes with support for [Dense Vector Search](https://solr.apache.org/guide/solr/latest/query-guide/dense-vector-search.html), paving the way for incoming improvements to the [AI Actions](https://doc.ibexa.co/en/4.6/ai_actions/ai_actions/) feature.
-
-#### Improved content creation interface
-
-The editing interface of the back office has been improved to better highlight the language, creator, and the publication date when working with content items.
-
-
-
-#### Twig Components
-
-With the latest changes to [Twig Components](https://doc.ibexa.co/en/4.6/templating/components/), you can:
-
-- set component priority when using YAML configuration
-- render a menu with help of the new Menu component
-
-The list of built-in Twig Component groups has been expanded and includes:
-
-- one new group for the [back office](https://doc.ibexa.co/en/4.6/administration/back_office/back_office_elements/custom_components/) (`admin-ui-versions-table-before`)
-- eight new groups for [storefront](https://doc.ibexa.co/en/4.6/templating/layout/customize_storefront_layout/#customize-with-twig-components)
-
-#### Taxonomy Subtree limitation
-
-You can now manage access to [taxonomy items](https://doc.ibexa.co/en/4.6/content_management/taxonomy/taxonomy/) more effectively by using the new [Taxonomy Subtree limitation](https://doc.ibexa.co/en/4.6/permissions/limitation_reference/#taxonomy-subtree-limitation).
-
-In addition, you can now use the [Taxonomy limitation](https://doc.ibexa.co/en/4.6/permissions/limitation_reference/#taxonomy-limitation) together with the `taxonomy/assign` policy.
-
-#### Pagination for ezobjectrelationlist in GraphQL
-
-To improve performance and gain greater control over the returned responses from the [GraphQL API](https://doc.ibexa.co/en/4.6/api/graphql/graphql/), you can now [enable pagination](https://doc.ibexa.co/en/4.6/content_management/field_types/field_type_reference/relationlistfield#enable-pagination-in-graphql) of relations specified using the RelationList field type.
-
-#### Breaking changes
-
-- The `Ibexa\FieldTypeRichText\RichText\Validator\CustomTagsValidator` class has been renamed to `Ibexa\FieldTypeRichText\RichText\Validator\CustomTemplateValidator`, expanding its responsibility to validate both [custom tags](https://doc.ibexa.co/en/4.6/content_management/rich_text/extend_online_editor/#configure-custom-tags) and [custom styles](https://doc.ibexa.co/en/4.6/content_management/rich_text/extend_online_editor/#configure-custom-styles)
-- The `Ibexa\Contracts\AdminUi\Permission\PermissionCheckContextProviderInterface` interface has been removed
-- The `Ibexa\Contracts\AdminUi\Values\PermissionCheckContext` class has been removed
-
-#### PHP API
-
-The PHP API has been enhanced with the following new classes:
-
-- [`Ibexa\Contracts\Cart\Exception\VatCalculationExceptionInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Cart-Exception-VatCalculationExceptionInterface.html)
-- [`Ibexa\Contracts\Core\Repository\Values\Notification\CriterionHandlerInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Notification-CriterionHandlerInterface.html)
-- [`Ibexa\Contracts\Core\Repository\Values\Notification\Query\CriterionInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Notification-Query-CriterionInterface.html)
-- [`Ibexa\Contracts\Core\Repository\Values\Notification\Query\Criterion\DateCreated`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Notification-Query-Criterion-DateCreated.html)
-- [`Ibexa\Contracts\Core\Repository\Values\Notification\Query\NotificationQuery`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Notification-Query-NotificationQuery.html)
-- [`Ibexa\Contracts\ProductCatalog\Values\Product\Query\Criterion\AbstractPriceRange`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Product-Query-Criterion-AbstractPriceRange.html)
-- [`Ibexa\Contracts\ProductCatalog\Values\Product\Query\Criterion\CustomPriceRange`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Product-Query-Criterion-CustomPriceRange.html)
-
-#### Full changelog
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.21' %]]
-
-[[= release_note_entry_begin("Discounts " + version, '2025-06-11', ['Commerce', 'LTS Update']) =]]
-
-#### REST API
-
-- Discounts can now be [managed through the REST API](https://doc.ibexa.co/en/4.6/api/rest_api/rest_api_reference/rest_api_reference.html#discounts)
-
-#### PHP API
-
-The PHP API has been enhanced with the following new classes:
-
-- [`Ibexa\Contracts\Discounts\Exception\DiscountValueResolutionException`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Exception-DiscountValueResolutionException.html)
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2025-06-11', ['Headless', 'Experience', 'Commerce']) =]]
-
-#### Security
-
-- This release includes security fixes.
-To learn more, see the [security advisory IBEXA-SA-2025-003](https://developers.ibexa.co/security-advisories/ibexa-sa-2025-003-xss-vulnerabilities-in-back-office)
-
-#### PHP API
-
-The PHP API has been enhanced with the following new classes:
-
-- [`Ibexa\Contracts\Checkout\Exception\CheckoutException`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Checkout-Exception-CheckoutException.html)
-- [`Ibexa\Contracts\Checkout\Discounts\DiscountsValidationFailedException`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Checkout-Discounts-DiscountsValidationFailedException.html)
-
-#### Full changelog
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.20' %]]
-
-[[= release_note_entry_begin("Discounts " + version, '2025-05-28', ['Commerce', 'LTS Update']) =]]
-
-#### Features
-
-- With the introduction of discount code usage limits, you can now limit the number of times a customer can use a discount code before it becomes invalid
-- You can now provide your own form themes for the discounts form by using the extension point in [`ibexa_discounts_form_themes` Twig function](https://doc.ibexa.co/en/4.6/templating/twig_function_reference/discounts_twig_functions/#ibexa_discounts_form_themes)
-
-#### PHP API
-
-The PHP API has been enhanced with the following new classes:
-
-- [`Ibexa\Contracts\Discounts\Admin\Form\DiscountValueFormTypeMapperInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-Form-DiscountValueFormTypeMapperInterface.html)
-- [`Ibexa\Contracts\Discounts\Admin\Form\FormThemeProviderInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-Form-FormThemeProviderInterface.html)
-- [`Ibexa\Contracts\DiscountsCodes\Exception\DiscountCodeUnusableException`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Exception-DiscountCodeUnusableException.html)
-- [`Ibexa\Contracts\DiscountsCodes\Exception\DiscountCodeUserInvalidArgumentException`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Exception-DiscountCodeUserInvalidArgumentException.html)
-- [`Ibexa\Contracts\DiscountsCodes\Value\DiscountCodeUsageInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Value-DiscountCodeUsageInterface.html)
-- [`Ibexa\Contracts\DiscountsCodes\Value\DiscountCodeUser`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Value-DiscountCodeUser.html)
-- [`Ibexa\Contracts\DiscountsCodes\Value\Query\DiscountCodeUsageQuery`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Value-Query-DiscountCodeUsageQuery.html )
-
-To update to the latest version, see the [update instructions](https://doc.ibexa.co/en/4.6/update_and_migration/from_4.6/update_from_4.6/#lts-updates).
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2025-05-27', ['Headless', 'Experience', 'Commerce']) =]]
-
-#### Twig Components
-
-- The new [Twig Components](https://doc.ibexa.co/en/4.6/templating/components/) feature allow you to effortlessly build customizable and reusable Twig templates in Ibexa DXP
-
-#### Extending Sub-items view
-
-- Thanks to the new extension point, you can now [add new views or overwrite existing ones in the Sub-items list](https://doc.ibexa.co/en/4.6/administration/back_office/subitems_list/#create-custom-sub-items-list-view)
-
-#### Infrastructure
-
-- MySQL 8.4, Node 20 and Node 22 are now [officially supported](https://doc.ibexa.co/en/4.6/getting_started/requirements/)
-
-#### PHP API
-
-The PHP API has been enhanced with the following new classes:
-
-- [`Ibexa\Contracts\AdminUi\Menu\AbstractActionBuilder`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-AdminUi-Menu-AbstractActionBuilder.html)
-- [`Ibexa\Contracts\TwigComponents\ComponentInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-TwigComponents-ComponentInterface.html)
-- [`Ibexa\Contracts\TwigComponents\ComponentRegistryInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-TwigComponents-ComponentRegistryInterface.html)
-- [`Ibexa\Contracts\TwigComponents\Event\RenderGroupEvent`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-TwigComponents-Event-RenderGroupEvent.html)
-- [`Ibexa\Contracts\TwigComponents\Event\RenderSingleEvent`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-TwigComponents-Event-RenderSingleEvent.html)
-- [`Ibexa\Contracts\TwigComponents\Exception\InvalidArgumentException`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-TwigComponents-Exception-InvalidArgumentException.html)
-- [`Ibexa\Contracts\TwigComponents\Renderer\RendererInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-TwigComponents-Renderer-RendererInterface.html)
-
-#### Full changelog
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.19' %]]
-
-[[= release_note_entry_begin("Discounts " + version, '2025-04-09', ['Commerce', 'LTS Update', 'New feature', 'First release']) =]]
-
-With the Discounts LTS Update, you can temporarily or permanently reduce prices on specific products or categories, making deals more attractive to potential buyers.
-
-Use them to encourage first-time purchases, reward loyal customers, promote new or slow-moving items, or drive sales during seasonal events.
-
-By displaying discounted prices clearly in the catalog or cart, businesses can create a sense of urgency, increase customer satisfaction, and ultimately boost revenue.
-
-
-
-For more information, see [Discounts product guide](https://doc.ibexa.co/en/4.6/discounts/discounts_guide/).
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin("AI Actions " + version, '2025-04-09', ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature']) =]]
-
-#### Features
-
-AI Actions can now integrate with [Ibexa Connect]([[= connect_doc =]]/), giving you an opportunity to build complex data transformation workflows without having to rely on custom code.
-To learn more, see the [setup instructions for this integration](https://doc.ibexa.co/en/4.6/ai_actions/install_ai_actions/#configure-access-to-ibexa-connect).
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.19' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2025-04-09', ['Headless', 'Experience', 'Commerce']) =]]
-
-#### Security
-
-- This release includes security fixes.
-To learn more, see the [published security advisory IBEXA-SA-2025-002](https://developers.ibexa.co/security-advisories/ibexa-sa-2025-002-xxe-vulnerability-in-richtext)
-
-#### Features
-
-- The [CartSummary endpoint](https://doc.ibexa.co/en/4.6/api/rest_api/rest_api_reference/rest_api_reference.html#managing-commerce-carts-cart-summary) now supports a new `Accept` header: `application/vnd.ibexa.api.ShortCartSummary`, returning only the essential data about products in the cart
-- Added a new repository setting: [grace period for archived versions](https://doc.ibexa.co/en/4.6/administration/configuration/repository_configuration/#grace-period-for-archived-versions)
-- Added a new `group_remote_id` setting for [controlling the user group in which registering users are created](https://doc.ibexa.co/en/4.6/users/user_registration/#user-groups)
-
-#### Ibexa Rector
-
-- The [Ibexa Rector package](https://github.com/ibexa/rector/tree/4.6?tab=readme-ov-file#ibexa-dxp-rector) has been released, allowing you to automatically refactor your code and remove deprecations.
-To learn how to use it, see the [update instructions](https://doc.ibexa.co/en/4.6/update_and_migration/from_4.6/update_from_4.6/#ibexa-rector)
-
-#### PHP API
-
-The PHP API has been enhanced with the following new classes:
-
-- [`Ibexa\Contracts\Connect\Ai\ActionHandlerDataStructureAwareInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Ai-ActionHandlerDataStructureAwareInterface.html)
-- [`Ibexa\Contracts\Connect\Resource\CustomPropertyStructure\CustomPropertyStructureCreateStruct`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Resource-CustomPropertyStructure-CustomPropertyStructureCreateStruct.html)
-- [`Ibexa\Contracts\Connect\Resource\CustomPropertyStructure\CustomPropertyStructureFilter`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Resource-CustomPropertyStructure-CustomPropertyStructureFilter.html)
-- [`Ibexa\Contracts\Connect\Resource\CustomPropertyStructure\CustomPropertyStructureItemCreateStruct`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Resource-CustomPropertyStructure-CustomPropertyStructureItemCreateStruct.html)
-- [`Ibexa\Contracts\Connect\Resource\CustomPropertyStructureInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Resource-CustomPropertyStructureInterface.html)
-- [`Ibexa\Contracts\Connect\Resource\Scenario\CustomPropertiesDataFillInStruct`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Resource-Scenario-CustomPropertiesDataFillInStruct.html)
-- [`Ibexa\Contracts\Connect\Response\CustomPropertyStructure\CreateItemResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-CustomPropertyStructure-CreateItemResponse.html)
-- [`Ibexa\Contracts\Connect\Response\CustomPropertyStructure\CreateResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-CustomPropertyStructure-CreateResponse.html)
-- [`Ibexa\Contracts\Connect\Response\CustomPropertyStructure\DeleteItemResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-CustomPropertyStructure-DeleteItemResponse.html)
-- [`Ibexa\Contracts\Connect\Response\CustomPropertyStructure\ListItemResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-CustomPropertyStructure-ListItemResponse.html)
-- [`Ibexa\Contracts\Connect\Response\CustomPropertyStructure\ListResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-CustomPropertyStructure-ListResponse.html)
-- [`Ibexa\Contracts\Connect\Response\CustomPropertyStructure\RetrieveItemResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-CustomPropertyStructure-RetrieveItemResponse.html)
-- [`Ibexa\Contracts\Connect\Response\CustomPropertyStructure\RetrieveResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-CustomPropertyStructure-RetrieveResponse.html)
-- [`Ibexa\Contracts\Connect\Response\Scenario\RetrieveCustomPropertiesDataResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-Scenario-RetrieveCustomPropertiesDataResponse.html)
-- [`Ibexa\Contracts\Core\Repository\Events\Notification\BeforeMarkNotificationAsUnreadEvent`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Events-Notification-BeforeMarkNotificationAsUnreadEvent.html)
-- [`Ibexa\Contracts\Core\Repository\Events\Notification\MarkNotificationAsUnreadEvent`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Events-Notification-MarkNotificationAsUnreadEvent.html)
-- [`Ibexa\Contracts\ProductCatalog\CustomerGroupAssignedItemsServiceDecorator`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-CustomerGroupAssignedItemsServiceDecorator.html)
-- [`Ibexa\Contracts\ProductCatalog\CustomerGroupAssignedItemsServiceInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-CustomerGroupAssignedItemsServiceInterface.html)
-- [`Ibexa\Contracts\ProductCatalog\Events\CustomerGroupCanBeDeletedEvent`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Events-CustomerGroupCanBeDeletedEvent.html)
-- [`Ibexa\Contracts\ProductCatalog\Values\CustomerGroup\AssignedItem`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-CustomerGroup-AssignedItem.html)
-- [`Ibexa\Contracts\ProductCatalog\Values\CustomerGroup\AssignedItemInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-CustomerGroup-AssignedItemInterface.html)
-
-#### Full changelog
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.18' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2025-03-06', ['Headless', 'Experience', 'Commerce']) =]]
-
-#### PHP API
-
-The PHP API has been enhanced with the following new classes:
-
-- [`Ibexa\Contracts\ProductCatalog\Form\Data\ProductSelectorData`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Form-Data-ProductSelectorData.html)
-- [`Ibexa\Contracts\ProductCatalog\Form\Data\ProductsSelectorData`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Form-Data-ProductsSelectorData.html)
-- [`Ibexa\Contracts\ProductCatalog\Form\Type\ProductSelectorType`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Form-Type-ProductSelectorType.html)
-
-#### Full changelog
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin("Date and time attribute " + version, '2025-03-04', ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature', 'First release']) =]]
-
-The Date and time attributes allow you to represent date and time values as part of the product specification in the [product catalog](https://doc.ibexa.co/en/4.6/pim/pim_guide/).
-
-For more information, see [Date and time attributes](https://doc.ibexa.co/en/4.6/pim/attributes/date_and_time/).
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.17' %]]
-
-[[= release_note_entry_begin("AI Actions " + version, '2025-03-04', ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature']) =]]
-
-#### Features
-
-You can now [duplicate AI actions]([[= user_doc =]]/ai_actions/work_with_ai_actions/#duplicate-ai-actions) in the AI actions list.
-
-#### PHP API
-
-The PHP API has been expanded with the following classes and interfaces:
-
-- [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\ActionConfigurationCopyStruct`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-ActionConfigurationCopyStruct.html)
-- [`Ibexa\Contracts\ConnectorAi\ActionHandlerRegistryInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionHandlerRegistryInterface.html)
-- [`Ibexa\Contracts\ConnectorAi\Prompt\PromptFactory`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Prompt-PromptFactory.html)
-- [`Ibexa\Contracts\ConnectorAi\Prompt\PromptInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Prompt-PromptInterface.html)
-- [`Ibexa\Contracts\ConnectorAi\PromptResolverInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-PromptResolverInterface.html)
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2025-03-04', ['Headless', 'Experience', 'Commerce', 'New feature']) =]]
-
-#### Security
-
-This release includes security fixes.
-To learn more, see the [corresponding security advisory](https://developers.ibexa.co/security-advisories/ibexa-sa-2025-001-vulnerabilities-in-shopping-cart-and-publish-unscheduling).
-
-#### Features
-
-- New REST API endpoints for [Segments](https://doc.ibexa.co/en/4.6/api/rest_api/rest_api_reference/rest_api_reference.html#segments) and [Segment Groups](https://doc.ibexa.co/en/4.6/api/rest_api/rest_api_reference/rest_api_reference.html#segment-groups)
-- PHP API Client ([`Ibexa\Contracts\Connect\ConnectClientInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-ConnectClientInterface.html)) for [Ibexa Connect]([[= connect_doc =]]/)
-- The following Twig functions now additionally support objects implementing the [`ContentAwareInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Content-ContentAwareInterface.html) as arguments:
- - [`ibexa_content_field_identifier_first_filled_image`](https://doc.ibexa.co/en/4.6/templating/twig_function_reference/image_twig_functions/#ibexa_content_field_identifier_first_filled_image)
- - [`ibexa_content_name`](https://doc.ibexa.co/en/4.6/templating/twig_function_reference/content_twig_functions/#ibexa_content_name)
- - [`ibexa_field_is_empty`](https://doc.ibexa.co/en/4.6/templating/twig_function_reference/field_twig_functions/#ibexa_field_is_empty)
- - [`ibexa_field_description`](https://doc.ibexa.co/en/4.6/templating/twig_function_reference/field_twig_functions/#ibexa_field_description)
- - [`ibexa_field_name`](https://doc.ibexa.co/en/4.6/templating/twig_function_reference/field_twig_functions/#ibexa_field_name)
- - [`ibexa_field_value`](https://doc.ibexa.co/en/4.6/templating/twig_function_reference/field_twig_functions/#ibexa_field_value)
- - [`ibexa_field`](https://doc.ibexa.co/en/4.6/templating/twig_function_reference/field_twig_functions/#ibexa_field)
- - [`ibexa_has_field`](https://doc.ibexa.co/en/4.6/templating/twig_function_reference/field_twig_functions/#ibexa_has_field)
- - [`ibexa_render_field`](https://doc.ibexa.co/en/4.6/templating/twig_function_reference/field_twig_functions/#ibexa_render_field)
- - [`ibexa_seo_is_empty`](https://doc.ibexa.co/en/4.6/templating/twig_function_reference/content_twig_functions/#ibexa_seo_is_empty)
- - [`ibexa_seo`](https://doc.ibexa.co/en/4.6/templating/twig_function_reference/content_twig_functions/#ibexa_seo)
- - [`ibexa_taxonomy_entries_for_content`](https://doc.ibexa.co/en/4.6/templating/twig_function_reference/content_twig_functions/#ibexa_taxonomy_entries_for_content-filter)
-- Added new Twig filter for product attributes grouping: [`ibexa_product_catalog_group_attributes`](https://doc.ibexa.co/en/4.6/templating/twig_function_reference/product_twig_functions/#ibexa_product_catalog_group_attributes)
-
-#### PHP API
-
-The PHP API has been enhanced with the following new classes and interfaces:
-
-- `Ibexa\Contracts\Cart`:
- - [`Value\Query\Criterion\LogicalAnd`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Cart-Value-Query-Criterion-LogicalAnd.html)
- - [`Value\Query\Criterion\OwnerCriterion`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Cart-Value-Query-Criterion-OwnerCriterion.html)
- - [`Value\Query\CriterionInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Cart-Value-Query-CriterionInterface.html)
-- `Ibexa\Contracts\Segmentation`:
- - [`Exception\ValidationFailedExceptionInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Segmentation-Exception-ValidationFailedExceptionInterface.html)
-- `Ibexa\Contracts\ProductCatalog`:
- - [`Iterator\BatchIteratorAdapter\RegionFetchAdapter`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Iterator-BatchIteratorAdapter-RegionFetchAdapter.html)
-- `Ibexa\Contracts\Connect`:
- - [`ConnectClientInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-ConnectClientInterface.html)
- - [`Exception\BadResponseException`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Exception-BadResponseException.html)
- - [`Exception\UnserializablePayload`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Exception-UnserializablePayload.html)
- - [`Exception\UnserializableResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Exception-UnserializableResponse.html)
- - [`PaginationInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-PaginationInterface.html)
- - [`Resource\DataStructure\DataStructureBuilder`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Resource-DataStructure-DataStructureBuilder.html)
- - [`Resource\DataStructure\DataStructureCreateStruct`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Resource-DataStructure-DataStructureCreateStruct.html)
- - [`Resource\DataStructure\DataStructureFilter`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Resource-DataStructure-DataStructureFilter.html)
- - [`Resource\DataStructure\DataStructureProperty`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Resource-DataStructure-DataStructureProperty.html)
- - [`Resource\DataStructure\DataStructurePropertyType`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Resource-DataStructure-DataStructurePropertyType.html)
- - [`Resource\DataStructureInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Resource-DataStructureInterface.html)
- - [`Resource\Hook\HookCreateStruct`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Resource-Hook-HookCreateStruct.html)
- - [`Resource\Hook\HookFilter`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Resource-Hook-HookFilter.html)
- - [`Resource\Hook\HookSetDetailsStruct`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Resource-Hook-HookSetDetailsStruct.html)
- - [`Resource\HookInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Resource-HookInterface.html)
- - [`Resource\Scenario\ScenarioCreateStruct`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Resource-Scenario-ScenarioCreateStruct.html)
- - [`Resource\Scenario\ScenarioFilter`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Resource-Scenario-ScenarioFilter.html)
- - [`Resource\ScenarioInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Resource-ScenarioInterface.html)
- - [`Resource\Team\TeamVariableCreateStruct`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Resource-Team-TeamVariableCreateStruct.html)
- - [`Resource\Team\TeamVariableFilter`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Resource-Team-TeamVariableFilter.html)
- - [`Resource\Team\TeamVariableUpdateStruct`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Resource-Team-TeamVariableUpdateStruct.html)
- - [`Resource\TeamInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Resource-TeamInterface.html)
- - [`Resource\Template\TemplateCreateStruct`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Resource-Template-TemplateCreateStruct.html)
- - [`Resource\Template\TemplateFilter`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Resource-Template-TemplateFilter.html)
- - [`Resource\TemplateInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Resource-TemplateInterface.html)
- - [`Response\DataStructure\CreateResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-DataStructure-CreateResponse.html)
- - [`Response\DataStructure\ListResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-DataStructure-ListResponse.html)
- - [`Response\DataStructure\RetrieveResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-DataStructure-RetrieveResponse.html)
- - [`Response\Hook\CreateResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-Hook-CreateResponse.html)
- - [`Response\Hook\ListResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-Hook-ListResponse.html)
- - [`Response\Hook\RetrieveResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-Hook-RetrieveResponse.html)
- - [`Response\Hook\SetDetailsResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-Hook-SetDetailsResponse.html)
- - [`Response\Scenario\CreateResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-Scenario-CreateResponse.html)
- - [`Response\Scenario\ListResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-Scenario-ListResponse.html)
- - [`Response\Scenario\RetrieveResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-Scenario-RetrieveResponse.html)
- - [`Response\Team\TeamVariableCreateResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-Team-TeamVariableCreateResponse.html)
- - [`Response\Team\TeamVariableListResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-Team-TeamVariableListResponse.html)
- - [`Response\Team\TeamVariableRetrieveResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-Team-TeamVariableRetrieveResponse.html)
- - [`Response\Team\TeamVariableUpdateResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-Team-TeamVariableUpdateResponse.html)
- - [`Response\Template\BlueprintResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-Template-BlueprintResponse.html)
- - [`Response\Template\CreateResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-Template-CreateResponse.html)
- - [`Response\Template\ListResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-Template-ListResponse.html)
- - [`Response\Template\RetrieveResponse`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Response-Template-RetrieveResponse.html)
- - [`ResponseInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-ResponseInterface.html)
- - [`TransportInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-TransportInterface.html)
- - [`Value\Blueprint\Flow`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Value-Blueprint-Flow.html)
- - [`Value\Blueprint\Metadata\Scenario`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Value-Blueprint-Metadata-Scenario.html)
- - [`Value\Blueprint\Metadata`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Value-Blueprint-Metadata.html)
- - [`Value\Blueprint\Module\CustomWebhook`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Value-Blueprint-Module-CustomWebhook.html)
- - [`Value\Blueprint\Module\JsonCreate`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Value-Blueprint-Module-JsonCreate.html)
- - [`Value\Blueprint\Module\ModuleDesigner`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Value-Blueprint-Module-ModuleDesigner.html)
- - [`Value\Blueprint\Module\WebhookRespond`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Value-Blueprint-Module-WebhookRespond.html)
- - [`Value\Blueprint`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Value-Blueprint.html)
- - [`Value\Controller`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Value-Controller.html)
- - [`Value\Scheduling`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Connect-Value-Scheduling.html)
-
-#### Full changelog
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.16' %]]
-
-[[= release_note_entry_begin("AI Actions " + version, '2025-01-16', ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature']) =]]
-
-#### Features
-
-The new AI Assistant allows you to use the AI capabilities in additional places, including RichText, Text line, Text Block fields, and certain Page Builder blocks.
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2025-01-16', ['Headless', 'Experience', 'Commerce']) =]]
-
-#### PHP API
-
-The PHP API has been enhanced with the following new classes:
-
-- [`Ibexa\Contracts\Share\Permission\PermissionCheckContextProviderInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Share-Permission-PermissionCheckContextProviderInterface.html)
-- [`Ibexa\Contracts\Share\Values\PermissionCheckContext`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Share-Values-PermissionCheckContext.html)
-- [`Ibexa\Contracts\Checkout\Discounts\DataMapper\DiscountsDataMapperInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Checkout-Discounts-DataMapper-DiscountsDataMapperInterface.html)
-- [`Ibexa\Contracts\Seo\Resolver\FieldValueResolverInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Seo-Resolver-FieldValueResolverInterface.html)
-
-#### Full changelog
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.15' %]]
-
-[[= release_note_entry_begin("AI Actions " + version, '2024-12-13', ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature']) =]]
-
-#### REST API
-
-The REST API has been extended to include endpoints for:
-
-- [Action Configurations](https://doc.ibexa.co/en/4.6/api/rest_api/rest_api_reference/rest_api_reference.html#ai-actions-list-action-configurations)
-- [Action Types](https://doc.ibexa.co/en/4.6/api/rest_api/rest_api_reference/rest_api_reference.html#ai-actions-list-action-types)
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2024-12-13', ['Headless', 'Experience', 'Commerce', 'New feature']) =]]
-
-### Features
-
-You can now reuse Page Builder blocks between landing pages using the ["Copy block" action]([[= user_doc =]]/content_management/create_edit_pages/#copy-blocks).
-
-#### PHP API
-
-The PHP API has been enhanced with the following new classes and interfaces:
-
-- [`Ibexa\Contracts\ProductCatalog\Values\Price\PriceEnvelopeInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Price-PriceEnvelopeInterface.html)
-- [`Ibexa\Contracts\ProductCatalog\Values\Price\PriceStampInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Price-PriceStampInterface.html)
-- [`Ibexa\Contracts\ProductCatalog\Values\StampInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-StampInterface.html)
-
-#### Full changelog
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.14' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2024-11-28', ['Headless', 'Experience', 'Commerce']) =]]
-
-#### Security
-
-This release includes security fixes.
-To learn more, see the [corresponding security advisory](https://developers.ibexa.co/security-advisories/ibexa-sa-2024-006-vulnerabilities-in-content-name-pattern-commerce-shop-and-varnish-vhost-templates).
-
-#### UX Improvements
-
-- The identifiers for content types and field definitions are now autogenerated based on the provided name
-- You can now search in [Trash]([[= user_doc =]]/content_management/content_organization/copy_move_hide_content/#remove-content) by content's name
-
-#### Search
-
-- New search criterion: [IsUserEnabled](https://doc.ibexa.co/en/4.6/search/criteria_reference/isuserenabled_criterion/)
-
-#### PHP API
-
-The PHP API has been enhanced with the following new classes and interfaces:
-
-- [`Ibexa\Contracts\Core\Validation\AbstractValidationStructWrapper`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Validation-AbstractValidationStructWrapper.html)
-- [`Ibexa\Contracts\Core\Validation\StructValidator`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Validation-StructValidator.html)
-- [`Ibexa\Contracts\Core\Validation\StructWrapperValidator`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Validation-StructWrapperValidator.html)
-- [`Ibexa\Contracts\Core\Validation\ValidationFailedException`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Validation-ValidationFailedException.html)
-- [`Ibexa\Contracts\Core\Validation\ValidationStructWrapperInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Validation-ValidationStructWrapperInterface.html)
-- [`Ibexa\Contracts\Notifications\SystemNotification\SystemMessage`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Notifications-SystemNotification-SystemMessage.html)
-- [`Ibexa\Contracts\Notifications\SystemNotification\SystemNotification`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Notifications-SystemNotification-SystemNotification.html)
-- [`Ibexa\Contracts\Notifications\SystemNotification\SystemNotificationInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Notifications-SystemNotification-SystemNotificationInterface.html)
-- [`Ibexa\Contracts\Notifications\Value\Recipent\UserRecipientInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Notifications-Value-Recipent-UserRecipientInterface.html)
-- [`Ibexa\Contracts\ProductCatalog\ProductReferencesResolverStrategy`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-ProductReferencesResolverStrategy.html)
-- [`Ibexa\Contracts\ProductCatalog\Values\Product\Query\Criterion\UpdatedAt`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Product-Query-Criterion-UpdatedAt.html)
-- [`Ibexa\Contracts\ProductCatalog\Values\Product\Query\Criterion\UpdatedAtRange`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Product-Query-Criterion-UpdatedAtRange.html)
-
-#### Full changelog
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.13' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2024-10-22', ['Headless', 'Experience', 'Commerce']) =]]
-
-#### PHP API
-
-The PHP API has been enhanced with the following new classes and interfaces:
-
-- [Ibexa\Contracts\CoreSearch\Persistence\CriterionMapper\AbstractCompositeCriterionMapper](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-CoreSearch-Persistence-CriterionMapper-AbstractCompositeCriterionMapper.html)
-- [Ibexa\Contracts\CoreSearch\Persistence\CriterionMapper\AbstractFieldCriterionMapper](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-CoreSearch-Persistence-CriterionMapper-AbstractFieldCriterionMapper.html)
-- [Ibexa\Contracts\Rest\Output\Exceptions\AbstractExceptionVisitor](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Rest-Output-Exceptions-AbstractExceptionVisitor.html)
-- [Ibexa\Contracts\CoreSearch\Values\Query\CriterionMapper](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-CoreSearch-Values-Query-CriterionMapper.html)
-
-#### Full changelog
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.12' %]]
-
-[[= release_note_entry_begin("AI Actions " + version, '2024-10-04', ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature', 'First release']) =]]
-
-The AI Actions LTS update enhances the usability and flexibility of [[=product_name=]] v4.6 LTS by harnessing the potential of artificial intelligence to automate time-consuming editorial tasks.
-By default, the AI Actions feature can help users with their work in following scenarios:
-
-- Refining text: when editing a content item, users can request that a passage selected in online editor is modified, for example, by adjusting the length of the text, changing its tone, or correcting linguistic errors.
-- Generating alternative text: when working with images, users can ask AI to generate alternative text for them, which helps improve accessibility and SEO.
-
-
-
-For more information, see [AI Actions product guide](https://doc.ibexa.co/en/4.6/ai_actions/ai_actions_guide/).
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2024-10-04', ['Headless', 'Experience', 'Commerce']) =]]
-
-#### PHP API
-
-The PHP API has been enhanced with the following new classes and interfaces:
-
-- [Ibexa\Contracts\AdminUi\Menu\AbstractFormContextMenuBuilder](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-AdminUi-Menu-AbstractFormContextMenuBuilder.html)
-- [Ibexa\Contracts\AdminUi\Menu\CopyFormContextMenuBuilder](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-AdminUi-Menu-CopyFormContextMenuBuilder.html)
-- [Ibexa\Contracts\AdminUi\Menu\CreateFormContextMenuBuilder](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-AdminUi-Menu-CreateFormContextMenuBuilder.html)
-- [Ibexa\Contracts\AdminUi\Menu\MenuItemFactoryInterface](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-AdminUi-Menu-MenuItemFactoryInterface.html)
-- [Ibexa\Contracts\AdminUi\Menu\UpdateFormContextMenuBuilder](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-AdminUi-Menu-UpdateFormContextMenuBuilder.html)
-- [Ibexa\Contracts\Core\Pool\Pool](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Pool-Pool.html)
-- [Ibexa\Contracts\Core\Pool\PoolInterface](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Pool-PoolInterface.html)
-- [Ibexa\Contracts\CoreSearch\Values\Query\AbstractCriterionQuery](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-CoreSearch-Values-Query-AbstractCriterionQuery.html)
-- [Ibexa\Contracts\CoreSearch\Values\Query\AbstractSortClause](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-CoreSearch-Values-Query-AbstractSortClause.html)
-- [Ibexa\Contracts\CoreSearch\Values\Query\Criterion\AbstractCompositeCriterion](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-CoreSearch-Values-Query-Criterion-AbstractCompositeCriterion.html)
-- [Ibexa\Contracts\CoreSearch\Values\Query\Criterion\CriterionInterface](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-CoreSearch-Values-Query-Criterion-CriterionInterface.html)
-- [Ibexa\Contracts\CoreSearch\Values\Query\Criterion\FieldValueCriterion](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-CoreSearch-Values-Query-Criterion-FieldValueCriterion.html)
-- [Ibexa\Contracts\CoreSearch\Values\Query\Criterion\LogicalAnd](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-CoreSearch-Values-Query-Criterion-LogicalAnd.html)
-- [Ibexa\Contracts\CoreSearch\Values\Query\Criterion\LogicalOr](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-CoreSearch-Values-Query-Criterion-LogicalOr.html)
-- [Ibexa\Contracts\CoreSearch\Values\Query\CriterionMapper](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-CoreSearch-Values-Query-CriterionMapper.html)
-- [Ibexa\Contracts\CoreSearch\Values\Query\CriterionMapperInterface](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-CoreSearch-Values-Query-CriterionMapperInterface.html)
-- [Ibexa\Contracts\CoreSearch\Values\Query\SortClause\FieldValueSortClause](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-CoreSearch-Values-Query-SortClause-FieldValueSortClause.html)
-- [Ibexa\Contracts\CoreSearch\Values\Query\SortDirection](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-CoreSearch-Values-Query-SortDirection.html)
-- [Ibexa\Contracts\ProductCatalog\Local\Attribute\ContextAwareValueValidatorInterface](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Local-Attribute-ContextAwareValueValidatorInterface.html)
-
-#### Full changelog
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.11' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2024-09-16', ['Headless', 'Experience', 'Commerce']) =]]
-
-#### Search
-
-- New search criterion: [`IsBookmarked`](https://doc.ibexa.co/en/4.6/search/criteria_reference/isbookmarked_criterion/)
-
-#### PHP API
-
-The PHP API has been enhanced with the following new classes and interfaces:
-
-- [`Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\Location\IsBookmarked`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Content-Query-Criterion-Location-IsBookmarked.html)
-
-And the new methods are:
-
-- [`Ibexa\Contracts\Core\Persistence\Bookmark\Handler::loadUserIdsByLocation()`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Persistence-Bookmark-Handler.html#method_loadUserIdsByLocation)
-- [`Ibexa\Contracts\ProductCatalog\Local\LocalProductTypeServiceDecorator::addContentTypeFieldDefinition()`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Local-LocalProductTypeServiceDecorator.html#method_addContentTypeFieldDefinition)
-- [`Ibexa\Contracts\ProductCatalog\Local\LocalProductTypeServiceDecorator::removeContentTypeFieldDefinition()`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Local-LocalProductTypeServiceDecorator.html#method_removeContentTypeFieldDefinition)
-- [`Ibexa\Contracts\ProductCatalog\Local\LocalProductTypeServiceInterface::addContentTypeFieldDefinition()`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Local-LocalProductTypeServiceInterface.html#methods)
-- [`Ibexa\Contracts\ProductCatalog\Local\LocalProductTypeServiceInterface::removeContentTypeFieldDefinition()`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Local-LocalProductTypeServiceInterface.html#method_removeContentTypeFieldDefinition)
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.10' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2024-08-14', ['Headless', 'Experience', 'Commerce']) =]]
-
-#### Security
-
-This release includes security fixes.
-To learn more, see the [corresponding security advisory](https://developers.ibexa.co/security-advisories/ibexa-sa-2024-005-persistent-xss-in-richtext).
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.9' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2024-07-31', ['Headless', 'Experience', 'Commerce']) =]]
-
-#### Security
-
-This release includes security fixes.
-To learn more, see the [corresponding security advisory](https://developers.ibexa.co/security-advisories/ibexa-sa-2024-004-dom-based-xss-in-file-upload).
-
-#### PHP API
-
-The PHP API has been enhanced with the following new classes and interfaces:
-
-- [`Ibexa\Contracts\ConnectorQualifio\Exception\QualifioException`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorQualifio-Exception-QualifioException.html)
-- [`Ibexa\Contracts\ConnectorQualifio\Exception\CampaignFeedNotFoundException`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorQualifio-Exception-CampaignFeedNotFoundException.html)
-- [`Ibexa\Contracts\ConnectorQualifio\Exception\CommunicationException`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorQualifio-Exception-CommunicationException.html)
-- [`Ibexa\Contracts\ConnectorQualifio\Exception\NotConfiguredException`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorQualifio-Exception-NotConfiguredException.html)
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.8' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2024-07-11', ['Headless', 'Experience', 'Commerce']) =]]
-
-#### PHP API
-
-The PHP API has been enhanced with the following new class:
-
-- [`Ibexa\Contracts\FieldTypeRichText\Configuration\ProviderConfiguratorInterface`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-FieldTypeRichText-Configuration-ProviderConfiguratorInterface.html)
-
-#### Full changelog
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.7' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2024-06-10', ['Headless', 'Experience', 'Commerce']) =]]
-
-#### PHP API
-
-The PHP API has been enhanced with the following new classes:
-
-- [`Ibexa\Contracts\Calendar\EventAction\EventActionCollection`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Calendar-EventAction-EventActionCollection.html)
-- [`Ibexa\Contracts\Calendar\EventSource\InMemoryEventSource`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Calendar-EventSource-InMemoryEventSource.html)
-- [`Ibexa\Contracts\Core\Event\Mapper\ResolveMissingFieldEvent`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Event-Mapper-ResolveMissingFieldEvent.html)
-- [`Ibexa\Contracts\Core\FieldType\DefaultDataFieldStorage`](https://doc.ibexa.co/en/4.6/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-FieldType-DefaultDataFieldStorage.html)
-
-#### Full changelog
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.6' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2024-05-17', ['Headless', 'Experience', 'Commerce']) =]]
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.5' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2024-05-14', ['Headless', 'Experience', 'Commerce']) =]]
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.4' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2024-05-13', ['Headless', 'Experience', 'Commerce', 'New feature']) =]]
-
-#### Security
-
-This release includes security fixes.
-To learn more, see the [corresponding security advisory](https://developers.ibexa.co/security-advisories/ibexa-sa-2024-003-vulnerability-in-image-optimizer-dependency).
-
-### Ibexa Engage
-
-[Ibexa Engage](https://doc.ibexa.co/en/4.6/ibexa_engage/ibexa_engage/) is a data collection tool you can use to engage your audiences.
-
-#### Full changelog
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.3' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2024-04-11', ['Headless', 'Experience', 'Commerce']) =]]
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.2' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2024-03-20', ['Headless', 'Experience', 'Commerce']) =]]
-
-#### Security
-
-This release includes security fixes.
-To learn more, see the [corresponding security advisory](https://developers.ibexa.co/security-advisories/ibexa-sa-2024-002-file-validation-and-workflow-stages).
-
-#### Full changelog
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.1' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2024-02-28', ['Headless', 'Experience', 'Commerce']) =]]
-
-[[% include 'snippets/release_46.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v4.6.0' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2024-02-13', ['Headless', 'Experience', 'Commerce', 'New feature', 'First release']) =]]
-
-### Notable changes
-
-#### [[= product_name_headless =]]
-
-[[= product_name_content =]] changes name to [[= product_name_headless =]] to emphasize [[= product_name_base =]]'s capacity for headless architecture.
-
-The feature set and capabilities of the product remain the same.
-
-#### Customizable dashboard [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-Users can now customize the dashboard depending on their needs and preferences, select required blocks, and easily access important information.
-This solution uses an online editor - Dashboard Builder.
-It improves productivity, allows to enhance the default dashboard with additional widgets,
-and helps to make better business decisions based on data.
-
-
-
-For more information, see [Customizable dashboard](https://doc.ibexa.co/projects/userguide/en/4.6/getting_started/dashboard/dashboard/#customizable-dashboard).
-
-#### UX and UI improvements
-
-Several improvements to the back office interface enhance the user experience.
-
-##### Page Builder improvements [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-Page Builder user interface has new functionalities and improvements.
-
-Here are the most important changes:
-
-- new design of Page Builder interface, including block settings window,
-- two main toolboxes: **Elements** and **Structure view**,
-- quick preview of a structure of the page with the possibility of reorganizing the blocks,
-- new visual feedback indicates the correct drop locations,
-- intuitive dragging makes it easier for users to interact with the Page Builder,
-- new actions added in the block settings toolbox,
-- user can now adjust the size of the block settings window,
-- **Undo** and **Redo** buttons.
-
-
-
-For more information, see [Page Builder interface](https://doc.ibexa.co/projects/userguide/en/4.6/content_management/create_edit_pages/#page-builder-interface).
-
-##### Editing embedded content items
-
-User can now edit embedded content items without leaving current window.
-This function is available in the Rich Text Field when creating content items, for selected blocks in the Page Builder,
-and while adding or modifying a Content relation.
-
-
-
-For more information, see [Edit embedded content items](https://doc.ibexa.co/projects/userguide/en/4.6/content_management/create_edit_content_items/#edit-embedded-content-items).
-
-##### Focus mode
-
-With multiple changes to the back office UI intended to expose the most important information and actions, editors can now better focus on their work.
-The UI is now more friendly and appealing for marketers and editors, with simplified Content structure, designed with new and non-advanced users in mind.
-
-For more information, see [Focus mode](https://doc.ibexa.co/projects/userguide/en/4.6/getting_started/discover_ui/#focus-mode).
-
-
-
-As part of this effort, some other changes were introduced that apply to both regular and Focus mode:
-
-- In content item details view, tabs have been reordered by their relevance
-- **Authors** and **Sub-items** are now separate tabs in content item details view
-- Former **Details** tab is now called **Technical details** and changed its position
-- Preview is available in many new places, such as the **View** tab in content item details view, or as miniatures when you hover over the content tree
-- `ibexa_is_focus_mode_on` and `ibexa_is_focus_mode_off` Twig helpers have been introduced, which check whether focus mode is enabled or not.
-
-
-
-##### Ability to change site context
-
-With a drop-down list added to the top bar, which changes the site context, editors can choose that the content tree shows only those content items that belong to the selected website.
-And if content items belong to multiple websites but use different designs or languages depending on the SiteAccess settings, their previews also change.
-
-As part of this effort, the name of the "Sites" area of the main menu has changed to "Site management".
-
-
-
-##### Distraction free mode
-
-While editing Rich Text Fields, user can switch to distraction free mode.
-It expands the workspace to full screen and shows only editor toolbar.
-
-
-
-For more information, see [Distraction free mode](https://doc.ibexa.co/projects/userguide/en/4.6/content_management/create_edit_content_items/#distraction-free-mode).
-
-##### Simplified user actions
-
-Button text now precisely describes actions, so that users who create or edit content understand the purpose of each button.
-
-
-
-##### Draft section added to Content
-
-For streamlining purpose, the **Draft** section is now situated under **Content**.
-Users can now easily find and manage their drafts and published content from one area.
-
-
-
-##### User profile and new options in user settings
-
-With personal touch in mind, editors can now upload their photos (avatar), and provide the following information in their user profiles:
-
-- Email
-- Department
-- Position
-- Location
-- Signature
-- Roles the user is assigned to
-- Recent activity
-
-
-
-Also, editors and other users can customize their experience even better, with new preferences that have been added to user settings.
-
-For more information, see [user profile and settings documentation](https://doc.ibexa.co/projects/userguide/en/4.6/getting_started/get_started/#view-and-edit-user-profile).
-
-##### Recent activity log
-
-Several actions on the repository or the application are logged.
-In the back office, last activity logs can be listed on a dedicated interface (Admin -> Activity list),
-on the dashboard within Recent activity block, or on the user profile.
-
-
-
-For more information, see feature's [User Documentation](https://doc.ibexa.co/projects/userguide/en/4.6/recent_activity/recent_activity/), and [Developer Documentation](https://doc.ibexa.co/en/5.0/administration/recent_activity/recent_activity/).
-
-##### Back office search
-
-###### Search bar, suggestions, autocompletion, and spellcheck
-
-The search bar can be focused with the shortcut Ctrl+/ (Windows, Linux) or Command+/ (Mac).
-
-While typing text in the bar, autocompletion suggestions is made under the bar itself.
-If a relevant suggestion occurs, it can be clicked, or navigated too with up/down keys then selected with Enter, and the content is be directly opened.
-
-In the search result page, a spellcheck suggestion can be made.
-
-For example, if the searched text is "Comany", the result page may ask "Did you mean company?", which is clickable to relaunch the search with this word.
-
-
-For more information, see [User Documentation](https://doc.ibexa.co/projects/userguide/en/4.6/search/search_for_content/), and how to [customize autocompletion suggestions](https://doc.ibexa.co/en/5.0/administration/back_office/customize_search_suggestion/).
-
-###### Filtering and sorting
-
-The search result page can be sorted in other orders than relevance. Name, publication of modification dates, this can be extended.
-
-Filters can be applied to the search page to narrow down the results.
-
-For more information, see [User Documentation](https://doc.ibexa.co/projects/userguide/en/4.6/search/search_for_content/#filtered-search), and how to [customize search sorting](https://doc.ibexa.co/en/5.0/administration/back_office/customize_search_sorting/).
-
-##### New and updated content type icons
-
-To help users quickly identify different content types in the back office, all content type references are now accompanied with icons.
-Also, content type icons have changed slightly.
-
-
-
-#### Ibexa Image picker
-
-Editors can now use a Digital Asset Management platform that enables storing media assets in a central location, organizing, distributing, and sharing them across many channels.
-
-For more information, see [Ibexa DAM](https://doc.ibexa.co/projects/userguide/en/4.6/dam/ibexa_dam/).
-
-#### New features and improvements in product catalog
-
-##### Remote PIM support
-
-This release introduces a foundation for connecting Ibexa DXP's product catalog capabilities to external Product Information Management (PIM) systems.
-You can use it to implement a custom solution and connect to external PIM or ERP systems, import product data, and present it side-by-side with your organization's existing content, while managing product data in a remote system of your choice.
-
-Here are the most important benefits of Remote PIM support:
-
-- Integration with external data sources: your organization can utilize Ibexa DXP's features, without having to migrate data to a new environment.
-- Increased accessibility of product information: customers and users can access product data through different channels, including Ibexa DXP.
-- Centralized product data management: product information can be maintained and edited in one place, which then serves as a single source of truth for different applications.
-
-Among other things, the Remote PIM support feature allows Ibexa DXP customers to:
-
-- let their users purchase products by following a regular or quick order path,
-- manage certain aspects of product data,
-- define and use product types,
-- use product attributes for filtering,
-- build product catalogs based on certain criteria, such as type, availability, or product attributes,
-- use Customer Groups to apply different prices to products,
-- define and use currencies.
-
-For more information about Remote PIM support and the solution's limitations, see [Product catalog](https://doc.ibexa.co/en/5.0/product_catalog/product_catalog_guide/#limitations).
-
-##### Virtual products
-
-With this feature, you can create virtual products - non-tangible items such as memberships, services, warranties.
-Default Checkout and Order workflows have been adjusted to allow purchase of virtual products.
-
-For more information, see [Create virtual products](https://doc.ibexa.co/projects/userguide/en/4.6/pim/create_virtual_product/).
-
-##### Product page URLs
-
-When you're creating a new product type, you can set up a product URL alias name pattern.
-With this feature, you can also create custom URL and URL alias name pattern field based on product attributes.
-Customized URLs are easier to remember, help with SEO optimization and reduce bounce rates on the website.
-
-For more information, see [Product page URLs](https://doc.ibexa.co/projects/userguide/en/4.6/pim/work_with_product_page_urls/).
-
-##### Improved UX of VAT rate assignment
-
-Users who are creating or editing a product type are less likely to forget about setting VAT rates, because they now have a more prominent place.
-
-
-
-For more information, see [Create product types](https://doc.ibexa.co/projects/userguide/en/4.6/pim/create_product_types/).
-
-##### Updated VAT configuration
-
-VAT rates configuration has been extended to accept additional flags under the `extras` key.
-Developers can use them, for example, to pass additional information to the UI, or define special exclusion rules.
-
-For more information, see [VAT rates](https://doc.ibexa.co/en/5.0/product_catalog/product_catalog_configuration/#vat-rates).
-
-##### Ability to search through products in a catalog
-
-When you're reviewing catalog details, on the **Products** tab, you can now see what criteria are used to include products in the catalog, and search for a specific product in the catalog.
-
-##### New Twig functions
-
-The `ibexa_is_pim_local` Twig helper has been introduced, which can be used in templates to [check whether product data comes from a local or remote data source](https://doc.ibexa.co/en/5.0/templating/twig_function_reference/product_twig_functions/#ibexa_is_pim_local), and adjust their behavior accordingly.
-Also, several new Twig functions have been implemented that help [get product availability information](https://doc.ibexa.co/en/5.0/templating/twig_function_reference/product_twig_functions/#ibexa_has_product_availability).
-
-##### New and modified query types
-
-The `ProductContentAwareListQueryType` has been created to allow finding products that come from a local database, while `ProductListQueryType` has been modified to find products from an external source of truth.
-
-##### New Search Criterion
-
-With `IsVirtual` criterion that searches for virtual or physical products, product search now supports products of virtual and physical type.
-
-##### Product migration
-
-[Product variants](https://doc.ibexa.co/en/5.0/content_management/data_migration/importing_data/#product-variants) and [product assets](https://doc.ibexa.co/en/5.0/content_management/data_migration/importing_data/#product-assets) can now be created through [data migration](https://doc.ibexa.co/en/5.0/content_management/data_migration/data_migration/).
-
-#### New features and improvements in Commerce [[% include 'snippets/commerce_badge.md' %]]
-
-##### Reorder
-
-With the new Reorder feature, customers can effortlessly repurchase previously bought items
-directly from their order history with a single click, eliminating the need for manual item selection.
-The system streamlines the process by recreating the cart, retrieving shipping information, and pre-filling payment details from past orders.
-This feature is exclusively accessible to logged-in users, ensuring a secure and personalized shopping experience.
-
-For more information, see [reorder documentation](https://doc.ibexa.co/en/5.0/commerce/checkout/reorder/).
-
-##### Orders block
-
-Orders block displays a list of orders associated with a specific company or an individual customer.
-This block allows users to configure orders statuses, columns, number of orders, and sorting order.
-
-For more information, see [Orders block documentation](https://doc.ibexa.co/projects/userguide/en/4.6/content_management/block_reference/#orders-block).
-
-##### Quick order
-
-The quick order form allows users to streamline the process of placing orders
-with multiple items in bulk directly from the storefront.
-Customers don't need to browse through products in the catalog.
-They can fill in a provided form with products' code and quantity,
-or upload their own list directly into the system.
-Quick order form is available to both registered and guest users.
-
-
-
-For more information, see [Quick order documentation](https://doc.ibexa.co/en/5.0/commerce/cart/quick_order/).
-
-##### Cancel order
-
-This version allows you to customize order cancellations by defining a specific order status and related transition.
-
-For more information, see [Define cancel order](https://doc.ibexa.co/en/5.0/commerce/order_management/configure_order_management/#define-cancel-order).
-
-##### Integrate with payment gateways
-
-Ibexa DXP can now be configured to integrate with various payment gateways, like Stripe and PayPal, by using the solution provided by [Payum](https://github.com/Payum).
-
-##### Shipments
-
-Users can now work with the shipments: view and modify their status, filter shipments in shipment lists and check all the details.
-You can access shipments for your own orders or all the shipments that exist in the system, depending on your permissions.
-
-
-
-For more information, see [Work with shipments](https://doc.ibexa.co/projects/userguide/en/4.6/commerce/shipping_management/work_with_shipments/).
-
-##### Owner criterion
-
-Orders and shipments search now supports user reference:
-
-- `OwnerCriterion` Criterion searches for orders based on the user reference.
-- `Owner` Criterion searches for shipments based on the user reference.
-
-##### Customize checkout workflow
-
-You can create a PHP definition of the new strategy that allows for workflow manipulation.
-Defining strategy allows to add conditional steps for workflow if needed.
-When a conditional step is added, the checkout process uses the specified workflow and proceeds to the defined step.
-
-For more information, see [Create custom strategy](https://doc.ibexa.co/en/5.0/commerce/checkout/customize_checkout/#create-custom-strategy).
-
-##### Manage multiple checkout workflows
-
-When working with multiple checkout workflows, you can now specify the desired workflow by passing its name as an argument to the checkout initiation button or link.
-
-For more information, see [Manage multiple workflows](https://doc.ibexa.co/en/5.0/commerce/checkout/customize_checkout/#manage-multiple-workflows).
-
-##### Adding context data to cart
-
-Attach context data to both the Cart and its individual Cart Entries.
-This feature enhances the flexibility and customization of your e-commerce application,
-enabling you to associate additional information with your cart and its contents.
-By leveraging context data, such as promo codes or custom texts,
-you can tailor the shopping experience for your customers and enhance the capabilities of your application.
-
-For more information, see [Adding context data](https://doc.ibexa.co/en/5.0/commerce/cart/cart_api/#adding-context-data).
-
-#### New features and improvements in Personalization
-
-##### Triggers
-
-Triggers are push messages delivered to end users.
-With triggers, store managers can increase the engagement of their visitors and customers by delivering recommendations straight to their devices or mailboxes.
-While they experience improved fulfillment of their needs, more engaged customers mean bigger income for the store.
-The feature requires that your organization exposes an endpoint that passes data to an internal message delivery system and supports the following use cases:
-
-- Inducing a purchase by pushing a message with cart contents or equivalents, when the customer's cart status remains unchanged for a set time.
-- Inviting a customer to come back to the site by pushing a message with recommendations, when they haven't returned to the site for a set time.
-- Reviving the customer's interest by pushing a message with products that are similar to the ones the customer has already seen.
-- Inducing a purchase by pushing a message when a price of the product from the customer's wishlist decreases.
-
-##### Multiple attributes in recommendation computation
-
-With this feature, you get an option to combine several attribute types when computing recommendations.
-As a result, users can be presented with recommendations from an intersection of submodel results.
-
-##### New scenario filter
-
-Depending on a setting that you make when defining a scenario, the recommendation response can now include either product variants or base products only.
-This way you can deliver more accurate recommendations and avoid showing multiple variants of the same product to the client.
-
-### Other changes
-
-#### Expression Language
-
-New `project_dir()` expression language function that allows you to reference current project directory in YAML migration files.
-
-#### Site Factory events
-
-Site Factory events have been moved from the `Ibexa\SiteFactory\ServiceEvent\Events` namespace to the `Ibexa\Contracts\SiteFactory\Events` namespace, keeping the backward compatibility.
-For a full list of events, see [Site events](https://doc.ibexa.co/en/4.6/api/event_reference/site_events/).
-
-Event handling system was improved with the addition of listeners based on `CreateSiteEvent`, `DeleteSiteEvent`, and `UpdateSiteEvent`.
-New listeners automatically grant permissions to log in to a site, providing a more seamless site management experience.
-
-#### Integration with Actito
-
-By using the Actito gateway you can send emails to the end-users about changes in the status of various operations in your commerce presence.
-
-#### Integration with Qualifio Engage
-
-Use Qualifio Engage integration to create engaging marketing experiences to your customers.
-
-#### Integration with SeenThis!
-
-Unlike conventional streaming services, integration with SeenThis! service provides an adaptive streaming technology with no limitations.
-It allows you to preserve the best video quality with a minimum amount of data transfer.
-
-For more information, see [SeenThis! block](https://doc.ibexa.co/projects/userguide/en/4.6/content_management/block_reference/#seenthis-block).
-
-#### API improvements
-
-##### REST API
-
-###### REST API for shipping [[% include 'snippets/commerce_badge.md' %]]
-
-Endpoints that allow you to manage shipping methods and shipments by using REST API:
-
-- GET `/shipments` - loads a list of shipments
-- GET `/shipments/{identifier}` - loads a single shipment based on its identifier
-- PATCH `/shipments/{identifier}` - updates a shipment
-- GET `/shipping/methods` - loads shipping methods
-- GET `/shipping/methods/{identifier}` - loads shipping methods based on their identifiers
-- GET `/shipping/method-types` - loads shipping methods types
-- GET `/shipping/method-types/{identifier}` - loads shipping methods type based on their identifiers
-- GET `/orders/order/{identifier}/shipments` - loads a list of shipments
-
-###### REST API for company accounts [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-Endpoints that allow you to manage companies in your platform with REST API:
-
-- GET `/sales-representatives` - returns paginated list of available sales representatives
-
-###### REST API for prices
-
-Endpoints that allow you to manage prices in your platform with REST API:
-
-- GET `/product/catalog/products/{code}/prices` - loads a list of product prices
-- GET `/product/catalog/products/{code}/prices/{currencyCode}` - loads a list of product prices for a given currency
-- GET `/product/catalog/products/{code}/prices/{currencyCode}/customer-group/{identifier}` - loads a list of product prices for a given currency and customer group
-- POST `/product/catalog/products/{code}/prices` - creates price or custom price for a given product
-- PATCH `/product/catalog/products/{code}/prices/{id}` - updates price or custom price for a given product
-- DELETE `/product/catalog/products/{code}/prices/{id}` - deletes price for a given product
-
-###### New method signature
-
-A signature for the `\Ibexa\Contracts\Rest\Output\Generator::startValueElement` method has been updated to the following:
-
-``` php {skip-validation}
- /**
- * @phpstan-param scalar $value
- * @phpstan-param array $attributes
- */
- abstract public function startValueElement(string $name, $value, array $attributes = []): void;
-```
-
-Any third party code that extends `\Ibexa\Contracts\Rest\Output\Generator` needs to update the method signature accordingly.
-
-#### Helpers
-
-A new helper method `ibexa.helpers.contentType.getContentTypeDataByHref` has been introduced to help you get content type data in JavaScript.
-
-#### [[= product_name_connect =]]
-
-For a list of changes in [[= product_name_connect =]], see [Ibexa app release notes]([[= connect_doc =]]/general/ibexa_app_release_notes/).
-
-##### Scenario block
-
-New [[= product_name_connect =]] scenario block retrieves and displays data from an [[= product_name_connect =]] webhook.
-Scenario block is a regular Page block and can be configured on field definition level as any other block.
-You also need to configure scenario block in the Page Builder. To do it, you need to provide name for the block, enter webhook link for the [[= product_name_connect =]] webhook and select the template to be used to present the webhook.
-
-For more information, see [[[= product_name_connect =]] scenario block](https://doc.ibexa.co/en/5.0/content_management/pages/ibexa_connect_scenario_block/).
-
-#### DDEV
-
-[Ibexa DXP can officially be run on DDEV](https://docs.ddev.com/en/stable/users/quickstart/#ibexa-dxp).
-
-For more information, see the [DDEV guide](https://doc.ibexa.co/en/5.0/getting_started/install_with_ddev/), which offers a step-by-step walkthrough for installing Ibexa DXP.
-
-#### Customer Data Platform (CDP)
-
-In this release, the CDP configuration allows you to automate the process of exporting data.
-Users can now export not only Content, but also Users and Products data.
-
-For more information, see [CDP Activation](https://doc.ibexa.co/en/5.0/cdp/cdp_activation/cdp_activation/).
-
-### Developer experience
-
-#### New packages
-
-The following packages have been introduced in Ibexa DXP v4.6.0:
-
-- [ibexa/oauth2-server](https://doc.ibexa.co/en/4.6/users/oauth_server/) (optional)
-- ibexa/site-context
-- ibexa/activity-log
-- ibexa/notifications
-- ibexa/dashboard
-- ibexa/connector-seenthis (optional)
-- ibexa/connector-actito (optional)
-- ibexa/connector-qualifio (optional)
-- ibexa/connector-payum
-- ibexa/image-picker
-- ibexa/core-persistence
-- ibexa/corporate-account-commerce-bridge
-
-!!! note
-
- The ibexa/content package has been renamed to ibexa/headless.
-
-#### REST APIs
-
-Ibexa DXP v4.6.0 adds REST API coverage for the following features:
-
-- Price engine
-- Shipping
-- Corporate accounts
-- Activity Log
-- UDW configuration (internal)
-
-##### Endpoints list
-
-The following endpoints have been added in 4.6.0 release (27 endpoints in total):
-
-| Endpoint | Functions | | | Parameters |
-|-:----------------------------------------------------------------------|-:---------|-:---|-:---|-:-------------------------------------------------------------------------------------------------------------------|
-| `ibexa.activity_log.rest.activity_log.list` | GET/POST | ANY | ANY | `/api/ibexa/v2/activity-log/list` |
-| `ibexa.udw.location.data` | GET | ANY | ANY | `/api/ibexa/v2/module/universal-discovery/location/{locationId}` |
-| `ibexa.udw.location.gridview.data` | GET | ANY | ANY | `/api/ibexa/v2/module/universal-discovery/location/{locationId}/gridview` |
-| `ibexa.udw.locations.data` | GET | ANY | ANY | `/api/ibexa/v2/module/universal-discovery/locations` |
-| `ibexa.udw.accordion.data` | GET | ANY | ANY | `/api/ibexa/v2/module/universal-discovery/accordion/{locationId}` |
-| `ibexa.udw.accordion.gridview.data` | GET | ANY | ANY | `/api/ibexa/v2/module/universal-discovery/accordion/{locationId}/gridview` |
-| `ibexa.rest.application_config` | GET | ANY | ANY | `/api/ibexa/v2/application-config` |
-| `ibexa.cart.authorize` | POST | ANY | ANY | `/api/ibexa/v2/cart/authorize` |
-| `ibexa.rest.corporate_account.sales_representatives.get` | GET | ANY | ANY | `/api/ibexa/v2/corporate/sales-representatives` |
-| `ibexa.product_catalog.rest.prices.create` | POST | ANY | ANY | `/api/ibexa/v2/product/catalog/products/{productCode}/prices` |
-| `ibexa.product_catalog.rest.prices.list` | GET | ANY | ANY | `/api/ibexa/v2/product/catalog/products/{productCode}/prices` |
-| `ibexa.product_catalog.rest.prices.get.custom_price` | GET | ANY | ANY | `/api/ibexa/v2/product/catalog/products/{productCode}/prices/{currencyCode}/customer-group/{customerGroupIdentifier}` |
-| `ibexa.product_catalog.rest.prices.get.base_price` | GET | ANY | ANY | `/api/ibexa/v2/product/catalog/products/{productCode}/prices/{currencyCode}` |
-| `ibexa.product_catalog.rest.prices.update` | PATCH | ANY | ANY | `/api/ibexa/v2/product/catalog/products/{productCode}/prices/{id}` |
-| `ibexa.product_catalog.rest.prices.delete` | DELETE | ANY | ANY | `/api/ibexa/v2/product/catalog/products/{productCode}/prices/{id}` |
-| `ibexa.product_catalog.personalization.rest.product_variant.get_by_code` | GET | ANY | ANY | `/api/ibexa/v2/personalization/v1/product_variant/code/{code}` |
-| `ibexa.product_catalog.personalization.rest.product_variant_list` | GET | ANY | ANY | `/api/ibexa/v2/personalization/v1/product_variant/list/{codes}` |
-| `ibexa.shipping.rest.shipping_method.type.list` | GET | ANY | ANY | `/api/ibexa/v2/shipping/method-types` |
-| `ibexa.shipping.rest.shipping_method.type.get` | GET | ANY | ANY | `/api/ibexa/v2/shipping/method-types/{identifier}` |
-| `ibexa.shipping.rest.shipping_method.get` | GET | ANY | ANY | `/api/ibexa/v2/shipping/methods/{identifier}` |
-| `ibexa.shipping.rest.shipping_method.find` | GET | ANY | ANY | `/api/ibexa/v2/shipping/methods` |
-| `ibexa.shipping.rest.shipment.get` | GET | ANY | ANY | `/api/ibexa/v2/shipments/{shipmentIdentifier}` |
-| `ibexa.shipping.rest.shipment.delete` | DELETE | ANY | ANY | `/api/ibexa/v2/shipments/{shipmentIdentifier}` |
-| `ibexa.shipping.rest.shipment.all.find` | GET | ANY | ANY | `/api/ibexa/v2/shipments` |
-| `ibexa.shipping.rest.shipment.order.find` | GET | ANY | ANY | `/api/ibexa/v2/orders/order/{orderIdentifier}/shipments` |
-| `ibexa.shipping.rest.shipment.create` | POST | ANY | ANY | `/api/ibexa/v2/orders/order/{orderIdentifier}/shipments` |
-| `ibexa.shipping.rest.shipment.update` | PATCH | ANY | ANY | `/api/ibexa/v2/shipments/{shipmentIdentifier}` |
-
-#### PHP API
-
-- Autosave API (`\Ibexa\Contracts\AdminUi\Autosave\AutosaveServiceInterface`)
-- Activity Log API
-- Spellchecking API
-- Site Context API (`\Ibexa\Contracts\SiteContext\SiteContextServiceInterface`)
-- Dashboard API (`\Ibexa\Contracts\Dashboard\DashboardServiceInterface`)
-- Price resolver API (`\Ibexa\Contracts\ProductCatalog\PriceResolverInterface`)
-- Location Preview URL resolver (`\Ibexa\Contracts\SiteContext\PreviewUrlResolver\LocationPreviewUrlResolverInterface`)
-- ContentAware API (`\Ibexa\Contracts\Core\Repository\Values\Content\ContentAwareInterface`)
-- Sorting Definition API (`\Ibexa\Contracts\Search\SortingDefinition`)
-
-#### Search Criteria
-
-Content
-
-- `\Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\ContentName`
-- Image criteria:
- - `\Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\Image\Dimensions`
- - `\Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\Image\FileSize`
- - `\Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\Image\Height`
- - `\Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\Image\MimeType`
- - `\Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\Image\Orientation`
- - `\Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\Image\Width`
-
-Product
-
-- `\Ibexa\Contracts\ProductCatalog\Values\Product\Query\Criterion\IsVirtual`
-- `ProductStock` and `ProductStockRange`
-
-#### Sort Clauses
-
-- `\Ibexa\Contracts\ProductCatalog\Values\Product\Query\SortClause\ProductStock`
-
-#### Aggregations
-
-- Aggregation API for product catalog
-- Labeled ranges
-- Range::INF to improve readability of unbounded ranges
-- Added support for creating range aggregations from generator (see `\Ibexa\Contracts\Core\Repository\Values\Content\Query\Aggregation\Ranges\RangesGeneratorInterface`) and built-in step generators:
- - `\Ibexa\Contracts\Core\Repository\Values\Content\Query\Aggregation\Ranges\DateTimeStepRangesGenerator`
- - `\Ibexa\Contracts\Core\Repository\Values\Content\Query\Aggregation\Ranges\FloatStepRangesGenerator`
- - `\Ibexa\Contracts\Core\Repository\Values\Content\Query\Aggregation\Ranges\IntegerStepRangesGenerator`
-- Allowed direct access to aggregation keys from results
- - `\Ibexa\Contracts\Core\Repository\Values\Content\Search\AggregationResult\TermAggregationResult::getKeys`
- - `\Ibexa\Contracts\Core\Repository\Values\Content\Search\AggregationResult\RangeAggregationResult::getKeys`
-
-#### Events
-
-The following events have been added in the v4.6.0 release (39 events in total):
-
-- ibexa/activity-log
- - `\Ibexa\Contracts\ActivityLog\Event\PostActivityListLoadEvent`
-- ibexa/admin-ui
- - `\Ibexa\Contracts\AdminUi\Event\FocusModeChangedEvent`
-- ibexa/cart
- - `\Ibexa\Contracts\AdminUi\Event\FocusModeChangedEvent`
- - `\Ibexa\Contracts\Cart\Event\BeforeMergeCartsEvent`
-- ibexa/core
- - URL and name schema resolving events:
- - `\Ibexa\Contracts\Core\Event\NameSchema\ResolveUrlAliasSchemaEvent`
- - `\Ibexa\Contracts\Core\Event\NameSchema\ResolveNameSchemaEvent`
- - `\Ibexa\Contracts\Core\Event\NameSchema\ResolveContentNameSchemaEvent`
- - Tokens
- - `\Ibexa\Contracts\Core\Repository\Events\Token\BeforeRevokeTokenByIdentifierEvent`
- - `\Ibexa\Contracts\Core\Repository\Events\Token\BeforeRevokeTokenEvent`
- - `\Ibexa\Contracts\Core\Repository\Events\Token\RevokeTokenByIdentifierEvent`
- - `\Ibexa\Contracts\Core\Repository\Events\Token\RevokeTokenEvent`
-- ibexa/migration
- - `\Ibexa\Contracts\Migration\Event\BeforeMigrationEvent`
- - `\Ibexa\Contracts\Migration\Event\MigrationEvent`
-- ibexa/page-builder
- - `\Ibexa\Contracts\PageBuilder\Event\GenerateContentPreviewUrlEvent`
-- ibexa/search:
- - `\Ibexa\Contracts\Search\Event\Service\BeforeSuggestEvent`
- - `\Ibexa\Contracts\Search\Event\Service\SuggestEvent`
-- ibexa/segmentation
- - `\Ibexa\Contracts\Segmentation\Event\AssignUserToSegmentEvent`
- - `\Ibexa\Contracts\Segmentation\Event\BeforeAssignUserToSegmentEvent`
- - `\Ibexa\Contracts\Segmentation\Event\BeforeCreateSegmentEvent`
- - `\Ibexa\Contracts\Segmentation\Event\BeforeCreateSegmentGroupEvent`
- - `\Ibexa\Contracts\Segmentation\Event\BeforeRemoveSegmentEvent`
- - `\Ibexa\Contracts\Segmentation\Event\BeforeRemoveSegmentGroupEvent`
- - `\Ibexa\Contracts\Segmentation\Event\BeforeUnassignUserFromSegmentEvent`
- - `\Ibexa\Contracts\Segmentation\Event\BeforeUpdateSegmentEvent`
- - `\Ibexa\Contracts\Segmentation\Event\BeforeUpdateSegmentGroupEvent`
- - `\Ibexa\Contracts\Segmentation\Event\CreateSegmentEvent`
- - `\Ibexa\Contracts\Segmentation\Event\CreateSegmentGroupEvent`
- - `\Ibexa\Contracts\Segmentation\Event\RemoveSegmentEvent`
- - `\Ibexa\Contracts\Segmentation\Event\RemoveSegmentGroupEvent`
- - `\Ibexa\Contracts\Segmentation\Event\UnassignUserFromSegmentEvent`
- - `\Ibexa\Contracts\Segmentation\Event\UpdateSegmentEvent`
- - `\Ibexa\Contracts\Segmentation\Event\UpdateSegmentGroupEvent`
-- ibexa/site-context
- - `\Ibexa\Contracts\SiteContext\Event\ResolveLocationPreviewUrlEvent`
-- ibexa/site-factory
- - `\Ibexa\Contracts\SiteFactory\Events\BeforeCreateSiteEvent`
- - `\Ibexa\Contracts\SiteFactory\Events\BeforeDeleteSiteEvent`
- - `\Ibexa\Contracts\SiteFactory\Events\BeforeUpdateSiteEvent`
- - `\Ibexa\Contracts\SiteFactory\Events\CreateSiteEvent`
- - `\Ibexa\Contracts\SiteFactory\Events\DeleteSiteEvent`
- - `\Ibexa\Contracts\SiteFactory\Events\UpdateSiteEvent`
-
-#### Twig functions
-
-- `ibexa_is_user_profile_available`
-- `ibexa_is_focus_mode_on`
-- `ibexa_is_focus_mode_off`
-- `ibexa_is_pim_local`
-- `ibexa_current_user`
-- `ibexa_is_current_user`
-- `ibexa_get_user_preference_value`
-- `ibexa_has_user_preference`
-- `ibexa_has_field`
-- `ibexa_field_group_name`
-- `ibexa_render_activity_log`
-- `ibexa_render_activity_log_group`
-- `ibexa_choices_as_facets`
-- `ibexa_taxonomy_entries_for_content`
-- `ibexa_url` / `ibexa_path` (support for content wrappers)
-
-#### View matchers
-
-The following view matchers have been introduced in Ibexa DXP v4.6.0:
-
-- `\Ibexa\Core\MVC\Symfony\Matcher\ContentBased\IsPreview`
-- `\Ibexa\Taxonomy\View\Matcher\TaxonomyEntryBased\Id`
-- `\Ibexa\Taxonomy\View\Matcher\TaxonomyEntryBased\Identifier`
-- `\Ibexa\Taxonomy\View\Matcher\TaxonomyEntryBased\Level`
-- `\Ibexa\Taxonomy\View\Matcher\TaxonomyEntryBased\Taxonomy`
-
-### Full changelog
-
-[[% include 'snippets/release_46.md' %]]
-
-To update your application, see the [update instructions](https://doc.ibexa.co/en/4.6/update_and_migration/from_4.6/update_from_4.6/).
-
-[[= release_note_entry_end() =]]
-
-
diff --git a/docs/release_notes/ibexa_dxp_v5.0.md b/docs/release_notes/ibexa_dxp_v5.0.md
deleted file mode 100644
index eae78243985..00000000000
--- a/docs/release_notes/ibexa_dxp_v5.0.md
+++ /dev/null
@@ -1,1377 +0,0 @@
----
-description: Ibexa DXP v5.0 incorporates features brought by LTS Updates from previous versions, brings upgrades to the tech stack and improvements to developer experience.
-title: Ibexa DXP v5.0 LTS
-month_change: false
----
-
-
-
-[[= release_notes_filters('Ibexa DXP v5.0 LTS', ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature', 'First release']) =]]
-
-
-
-[[% set version = 'v5.0.10' %]]
-[[% set date = '2026-08-20' %]]
-
-[[= release_note_entry_begin(
- 'Translations management ' + version,
- date,
- ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature', 'First release']
-) =]]
-
-Translations management is a new LTS Update that extends Ibexa DXP's built-in language management tools with machine translation, a side-by-side editing view, and a command-line translation utility.
-
-
-### Machine translation providers
-
-Translation providers are the services that perform the actual text translation.
-Translations management uses two provider types to connect to the translation services:
-
-- REST API-based providers: Google Translate and DeepL, configured with API keys
-- AI-based providers: OpenAI, Anthropic Claude, and Google Gemini, routed through AI Actions
-
-For more information, see [Configure translation providers](https://doc.ibexa.co/en/5.0/multisite/translations_management/configure_translations_management/#configure-translation-providers).
-
-### Side-by-side translation view
-
-A [side-by-side translation view]([[= user_doc =]]/content_management/translate_content/#side-by-side-translation-view) displays the source and target text of the content item or product on one screen.
-Editors can translate or compare source and target content, copy all content from the source column to the target column in a single action, and use the distraction-free mode for focused editing of individual fields.
-
-For more information, see [User Documentation]([[= user_doc =]]/content_management/translate_content/#side-by-side-translation-view).
-
-### CLI translation command
-
-A new console command translates content items from the command line, enabling batch processing and automated workflows.
-
-For more information, see [Translate content items with CLI](https://doc.ibexa.co/en/5.0/multisite/translations_management/translate_with_cli/).
-
-### Translation review
-
-When a draft is created through automatic translation, it receives the "For review" status.
-Editors can accept or reject the translation in the side-by-side view, which displays a review bar.
-Accepted translations are given the "Translated" status.
-
-The **Versions** tab shows a **Translation status** column with review status badges for draft translations created with automatic translation.
-
-For more information, see [Translation review](https://doc.ibexa.co/en/5.0/multisite/translations_management/translations_management_guide/#translation-review).
-
-### Developer experience
-
-The Translations management package brings multiple new classes and interfaces as part of the [`Ibexa\Contracts\TranslationsManagement` namespace](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/namespaces/ibexa-contracts-translationsmanagement.html).
-
-Changes include multiple extension points, including:
-
-- [`TranslationProviderInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Provider-TranslationProviderInterface.html) for creating custom translation providers
-- [`FieldValueTransformerInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-AutoTranslate-Transformer-Field-FieldValueTransformerInterface.html) for enabling custom field type support
-- [`SideBySideExclusionRuleInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-TranslationsManagement-SideBySide-Service-SideBySideExclusionRuleInterface.html) for defining custom content type exclusion rules
-
-For more information, see [Extend translations management](https://doc.ibexa.co/en/5.0/multisite/translations_management/extend_translations_management/).
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin(
- 'MCP Servers ' + version,
- date,
- ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature']
-) =]]
-
-### Tools and configuration
-
-- Added `create_content_type_draft` [built-in tool](https://doc.ibexa.co/en/5.0/ai/mcp/mcp_config/#built-in-tools) to create a draft for an existing content type.
-- [MCP server's session storage configuration](https://doc.ibexa.co/en/5.0/ai/mcp/mcp_config/#session-storage) now has a default value to use the default cache service out-of-the-box equivalent to the following:
-
- ```yaml
- ibexa:
- repositories:
- :
- mcp:
- :
- session:
- type: psr16
- service: ibexa.cache_pool
- ```
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin(
- product_name + ' ' + version,
- date,
- ['Headless', 'Experience', 'Commerce', 'New feature']
-) =]]
-
-### Security
-
-This release includes security fixes.
-To learn more, see the corresponding [security advisory](https://developers.ibexa.co/security-advisories/ibexa-sa-2026-004-firewall-access-control-issue-and-xss-vulnerabilities).
-
-### Cohesivo v6.0 deprecations
-
-As announced during Ibexa Summit 2026, the upcoming 6.0 version will be renamed to Cohesivo.
-
-To prepare your project ahead of the release, see the newly available [Cohesivo v6.0 renames, deprecations and removals](https://doc.ibexa.co/en/5.0/release_notes/cohesivo_v6.0_deprecations/).
-
-### SiteAccess-aware background tasks
-
-[[= product_name_base =]] Messenger now attaches a [`SiteAccessStamp`](https://doc.ibexa.co/en/5.0/infrastructure_and_maintenance/background_tasks/#siteaccessstamp) to every dispatched message.
-With this, one worker process can handle messages coming from different SiteAccesses.
-
-### Labels and descriptions for custom tags
-
-You can now provide the label and description of a Rich Text custom tag, and the labels of its attributes, directly in the custom tag configuration.
-
-For more information, see [Provide translations for custom tags](https://doc.ibexa.co/en/5.0/content_management/rich_text/extend_online_editor/#provide-translations-for-custom-tags).
-
-### Updating languages in data migrations
-
-The `language` migration step now supports the `update` mode.
-Use it to rename an existing language or change its enabled state.
-
-For more information, see [Importing data](https://doc.ibexa.co/en/5.0/content_management/data_migration/importing_data/#languages).
-
-### New translation key in the block configuration
-
-You can now add the new `name.help` translation key.
-It’s rendered as a helper text under the **Name** field in the block configuration form in the Page Builder.
-
-For more information and an example of block configuration, see [Block name and help text](https://doc.ibexa.co/en/5.0/content_management/pages/page_blocks/#block-name-and-help-text).
-
-### Full changelog
-
-[[% include 'snippets/release_50.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v5.0.9' %]]
-[[% set date = '2026-07-01' %]]
-
-[[= release_note_entry_begin(
- 'MCP Servers ' + version,
- date,
- ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature']
-) =]]
-
-
-### Tools
-
-Several new experimental content type tools were added to the MCP Servers feature:
-
-- `create_content_type`
-- `get_content_type`
-- `get_content_type_by_identifier`
-- `get_content_type_list`
-- `get_content_type_draft`
-- `publish_content_type_draft`
-- `add_field_definition`
-- `remove_field_definition`
-- `update_field_definition`
-- `get_content_type_groups`
-
-Among translation tools:
-
-- `list_non_translated_content_ids` tool is added
-- `list_content_translations` is now renamed to `list_content_languages`
-
-For more information, see [Built-in tools](https://doc.ibexa.co/en/5.0/ai/mcp/mcp_config/#built-in-tools).
-
-### Configuration
-
-- An `allowed_hosts` parameter is added to configuration to restrict access to an MCP server. It's default value covers only few cases for local development. For more information, see [Allowed hosts](https://doc.ibexa.co/en/5.0/ai/mcp/mcp_config/#allowed-hosts).
-- A `title` property is added to capability attributes to optionally provide a friendly UI label. For more information, see [MCP server capabilities](https://doc.ibexa.co/en/5.0/ai/mcp/mcp_usage/#mcp-server-capabilities).
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin(
- "Ibexa DXP " + version,
- date,
- ['Headless', 'Experience', 'Commerce', 'New feature']
-) =]]
-
-### Raptor connector
-
-#### Hybrid tracking
-
-New `hybrid` tracking mode is available alongside [`client` and `server`](tracking_functions.md).
-In this mode, the browser uses a first-party tracking shim provided by the DXP instance.
-Tracking events are forwarded through a same-origin endpoint and processed server side before being sent to Raptor, helping reduce the impact of ad blockers while preserving client side event tracking.
-
-For more information, see [hybrid tracking](https://doc.ibexa.co/en/5.0/recommendations/raptor_integration/hybrid_tracking/).
-
-#### New recommendation blocks [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-Two new recommendation blocks are available in Page Builder:
-
-- **Items of Customized Feeds sorted by personal preferences and popularity or trendiness** sorts items from Customized Feeds based on user preferences, popularity, and current trends
-- **Merchandising content sorted by personal preferences and popularity** uses merchandising content and sorts it by personal preferences and popularity
-
-For more information, see [recommendation blocks](https://doc.ibexa.co/en/5.0/recommendations/raptor_integration/recommendation_blocks/).
-
-### Developer experience
-
-#### PHP API
-
-The following additions were made to the PHP API:
-
-- [`Ibexa\Contracts\ConnectorRaptor\Message\TrackProxiedEventMessage`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorRaptor-Message-TrackProxiedEventMessage.html)
-- [`Ibexa\Contracts\ConnectorRaptor\Tracking\ContextProvider\WebsiteIdContextProviderInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorRaptor-Tracking-ContextProvider-WebsiteIdContextProviderInterface.html)
-- [`Ibexa\Contracts\ConnectorRaptor\Tracking\TrackingBehaviorProviderInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorRaptor-Tracking-TrackingBehaviorProviderInterface.html)
-- [`Ibexa\Contracts\Messenger\Stamp\DeduplicateStamp`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Messenger-Stamp-DeduplicateStamp.html)
-- [`Ibexa\Contracts\Messenger\Stamp\SudoStamp`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Messenger-Stamp-SudoStamp.html)
-- [`Ibexa\Contracts\Messenger\Stamp\UserPermissionStamp`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Messenger-Stamp-UserPermissionStamp.html)
-
-### Full changelog
-
-[[% include 'snippets/release_50.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v5.0.8' %]]
-[[% set date = '2026-05-21' %]]
-
-[[= release_note_entry_begin(
- 'MCP Servers ' + version,
- date,
- ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature', 'First release']
-) =]]
-
-MCP servers make it easier for AI agents to discover the available interactions with Ibexa DXP.
-With the MCP Servers feature, you can configure multiple MCP servers with their specific sets of tools.
-
-For more information, see [MCP Servers product guide](https://doc.ibexa.co/en/5.0/ai/mcp/mcp_guide/).
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin(
- product_name + ' ' + version,
- date,
- ['Headless', 'Experience', 'Commerce', 'New feature']
-) =]]
-
-### Security
-
-This release includes security fixes.
-To learn more, see the [corresponding security advisory](https://developers.ibexa.co/security-advisories/ibexa-sa-2026-003-vulnerabilities-in-forms-submissions-rest-sessions-and-solr-logs).
-
-### Raptor connector
-
-#### New recommendation blocks [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-Four new recommendation blocks are available in Page Builder:
-
-- **User's content history** compiles a chronological list of recently interacted content or a list of most interacted content
-- **Items associated with the given Content** generates a list of complementary and relevant products that customers often view with a given content
-- **The Personal Shopping Assistant (additional sales)** encourages additional purchases by suggesting complementary cross-selling items
-- **The Personal Shopping Assistant (conversion)** helps users discover better product matches by suggesting similar items based on their activity
-
-For more information, see [recommendation blocks](https://doc.ibexa.co/en/5.0/recommendations/raptor_integration/recommendation_blocks/).
-
-#### Category parameter for product events
-
-You can now configure which product category is sent in tracking events.
-
-Raptor accepts only a single category value.
-By default, the connector uses the first category assigned to a product, but you can override this behavior and select a different category to be included in tracking events.
-
-To learn more, see [category parameter for product events](https://doc.ibexa.co/en/5.0/recommendations/raptor_integration/tracking_php_api/#category-parameter-for-product-events).
-
-#### Cookie lifetime configuration
-
-A new `cookie_id_lifetime_days` configuration option controls the lifetime in days of the server-side tracking identifier cookie.
-
-For more information, see [connector installation and configuration](https://doc.ibexa.co/en/5.0/recommendations/raptor_integration/connector_installation_configuration/).
-
-### Anonymous user segmentation in [[= product_name_cdp =]] [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-[[= product_name_cdp =]] can now build audiences for anonymous visitors.
-Use them in Ibexa DXP to deliver personalized experiences even before users log in.
-
-For more information, see [Anonymous user segmentation](https://doc.ibexa.co/en/5.0/cdp/cdp_activation/cdp_configuration/#anonymous-user-segmentation).
-
-### Gaussian blur optimization in Image Editor
-
-The [Image Editor]([[= user_doc =]]/image_management/edit_images/) now supports configuring the strength of the gaussian blur that is used for image optimization.
-You can adjust the blur level to balance between file size reduction and image sharpness.
-For more information, see [Configure image editor](https://doc.ibexa.co/en/5.0/content_management/images/configure_image_editor/#gaussian-blur-strength).
-
-### Developer experience
-
-#### Repeatable migration steps with items
-
-The `repeatable` migration type now supports an `items` key, allowing you to provide a list of items to iterate over, similar to a `foreach` loop.
-
-For more information, see [Repeatable steps with items](https://doc.ibexa.co/en/5.0/content_management/data_migration/importing_data/#repeatable-steps-with-items).
-
-#### Twig Component groups
-
-Three new [Twig Component groups](https://doc.ibexa.co/en/5.0/templating/components/) are added to the back office:
-
-- `admin-ui-content-column-end`
-- `admin-ui-content-translations-row-actions`
-- `admin-ui-form-product-add-translation-body`
-
-For more information, see [available Admin UI Twig Component groups](https://doc.ibexa.co/en/5.0/administration/back_office/back_office_elements/custom_components/#admin-ui).
-
-#### PHP API
-
-##### Product API: Computed availability for products
-
-[`AvailabilityInterface`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Availability-AvailabilityInterface.html) now uses separate values for availability and computed availability:
-
-- `getAvailability()` returns whether the product or variant is manually set as available
-- `getComputedAvailability()` returns whether the product or variant can be ordered, for example, based on its stock level
-
-For more information, see [Availability and computed availability](https://doc.ibexa.co/en/5.0/product_catalog/products/#product-availability-and-stock).
-
-##### Workflow API: new `loadWorkflowMetadataForVersionInfo` method
-
-The new [`WorkflowServiceInterface::loadWorkflowMetadataForVersionInfo`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Workflow-Service-WorkflowServiceInterface.html#method_loadWorkflowMetadataForVersionInfo) method loads workflow information directly from a [`VersionInfo`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Content-VersionInfo.html) object, without loading the content item.
-
-For more information, see [Workflow API](https://doc.ibexa.co/en/5.0/content_management/workflow/workflow_api/#getting-workflow-information).
-
-##### Addition summary
-
-The following additions were made to the PHP API:
-
-- [`Ibexa\Contracts\Cdp\Exception\MembershipApiException`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Cdp-Exception-MembershipApiException.html)
-- [`Ibexa\Contracts\Cdp\Membership`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/namespaces/ibexa-contracts-cdp-membership.html)
-- [`Ibexa\Contracts\ConnectorRaptor\Message\TrackServerSideEventMessage`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorRaptor-Message-TrackServerSideEventMessage.html)
-- [`Ibexa\Contracts\ConnectorRaptor\Tracking\Event\PageViewEventData`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorRaptor-Tracking-Event-PageViewEventData.html)
-- [`Ibexa\Contracts\ConnectorRaptor\Tracking\PageViewTrackerInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorRaptor-Tracking-PageViewTrackerInterface.html)
-- [`Ibexa\Contracts\Mcp`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/namespaces/ibexa-contracts-mcp.html)
-
-### Full changelog
-
-[[% include 'snippets/release_50.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v5.0.7' %]]
-[[% set date = null %]]
-
-[[= release_note_entry_begin(
- "Google Gemini connector " + version,
- '2026-04-20',
- ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature', 'First release']
-) =]]
-
-This release introduces a new AI connector that allows you to integrate [AI Actions](https://doc.ibexa.co/en/5.0/ai/ai_actions/ai_actions/) with [Google Gemini](https://gemini.google/overview/#what-gemini-is).
-You can also use it as an alternative embeddings provider for the [taxonomy suggestions feature](taxonomy.md#taxonomy-suggestions).
-
-For more information, see how to [install and configure the Google Gemini connector](https://doc.ibexa.co/en/5.0/ai/ai_actions/configure_ai_actions/#install-google-gemini-connector).
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin(
- "Integrated help " + version,
- '2026-04-20',
- ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature']
-) =]]
-
-### Product tour
-
-The product tour is a new Integrated help feature that helps back office contributors to discover Ibexa DXP.
-
-With product tours, you can create customized onboarding journeys.
-This accelerates user adoption, reduces training time, and helps users confidently navigate the platform.
-
-For more information, see [Product tour](https://doc.ibexa.co/en/5.0/administration/back_office/product_tour/).
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin(
- "Ibexa DXP " + version,
- '2026-04-20',
- ['Headless', 'Experience', 'Commerce', 'New feature']
-) =]]
-
-### Security
-
-This release includes security fixes.
-To learn more, see the [corresponding security advisory](https://developers.ibexa.co/security-advisories/ibexa-sa-2026-002-access_control-in-security.yaml-not-working).
-
-### Raptor connector
-
-The Raptor connector provides a seamless integration between Ibexa DXP and [Raptor Recommendation Engine](https://www.raptorservices.com/website-recommendations/).
-
-For more information, see [Raptor connector](https://doc.ibexa.co/en/5.0/recommendations/raptor_integration/raptor_connector/).
-
-#### Tracking
-
-This add-on includes two Twig functions to ease tracking setting:
-
-- `ibexa_tracking_script` to load the JavaScript tracking code
-- `ibexa_tracking_track_event` to send tracking events from your pages
-
-For more information, see [Raptor tracking functions](https://doc.ibexa.co/en/5.0/recommendations/raptor_integration/tracking_functions/).
-
-#### Recommendations blocks [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-This add-on introduces a set of recommendation blocks available in the [Page Builder](https://doc.ibexa.co/en/5.0/content_management/pages/page_builder_guide/), designed to suggest relevant content or products to users, such as the most popular items or viewed by others.
-
-For more information about Recommendation blocks in Page Builder, see the relevant [Developer Documentation](https://doc.ibexa.co/en/5.0/recommendations/raptor_integration/recommendation_blocks/) and [User Documentation](https://doc.ibexa.co/projects/userguide/en/5.0/recommendations/raptor_integration/raptor_recommendation_blocks/).
-
-### [[= pim_product_name =]]
-
-The [[= pim_product_name =]] integration add-on allows you to connect Ibexa DXP with [[[= pim_product_name =]] Product Information Management (PIM)](https://www.quable.com/en), making [[= pim_product_name =]] the authoritative source of product information for every website powered by Ibexa DXP.
-
-[[= pim_product_name =]] can serve as the single source of truth for all product data, including attributes, classifications, variants, and translations.
-Ibexa DXP consumes this data and makes it available for use in content and digital experiences.
-
-For more information, see [[[= pim_product_name =]] Integration](https://doc.ibexa.co/en/5.0/product_catalog/quable/quable/).
-
-### AI Actions in Page Builder blocks [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-You can now use the [refining text AI Actions](https://doc.ibexa.co/en/5.0/ai/ai_actions/ai_actions_guide/#refining-text) in Page Builder blocks string and text inputs.
-
-### Developer experience
-
-#### Symfony 7.4
-
-Symfony is upgraded from 7.3 to 7.4.
-It's the latest [LTS release](https://symfony.com/releases#long-term-support-release), maintained till November 2029.
-See [what's new in Symfony 7.4](https://symfony.com/blog/category/living-on-the-edge/8.0-7.4) and [how to update Symfony within Ibexa DXP](https://doc.ibexa.co/en/5.0/update_and_migration/from_5.0/update_from_5.0/#update-symfony-from-73-to-74).
-
-#### Taxonomy search
-
-One [taxonomy search](https://doc.ibexa.co/en/5.0/content_management/taxonomy/taxonomy_api/#search) criterion is added:
-
-- [`TaxonomyNoEntries`](https://doc.ibexa.co/en/5.0/search/criteria_reference/taxonomy_no_entries/) to find content items to which no taxonomy entries have been assigned.
-
-#### Custom parameters in `ibexa_render()`
-
-You can now pass custom parameters to templates when using the `ibexa_render()` Twig function with the new `params` option, similar to how you can with `render(controller())`.
-
-This allows you to provide additional context or data to your view templates:
-
-``` html+twig
-{{ ibexa_render(content, {
- 'viewType': 'line',
- 'method': 'inline',
- 'params': {
- 'custom_param': 'custom_value',
- 'another_param': 'another_value'
- }
-}) }}
-```
-
-The parameters are available in your template as regular variables.
-
-For more information, see [`ibexa_render()` Twig function](https://doc.ibexa.co/en/5.0/templating/twig_function_reference/content_twig_functions/#ibexa_render).
-
-#### Try-catch support in data migrations
-
-Data migrations now support try-catch error handling, allowing you to wrap migration steps with exception handling logic.
-You can use it for migrations that might fail under certain conditions but should not break the entire migration process.
-
-For example, you can create languages without checking if they already exist:
-
-``` yaml
-[[= include_file('code_samples/data_migration/examples/try_catch_step.yaml') =]]
-```
-
-The `try_catch` step allows you to specify which exceptions to catch and whether to continue executing remaining steps after an exception occurs.
-
-For more information, see [Error handling with try-catch](https://doc.ibexa.co/en/5.0/content_management/data_migration/importing_data/#error-handling-with-try-catch).
-
-#### Translation-related Twig Component groups
-
-Four new [Twig component groups](https://doc.ibexa.co/en/5.0/templating/components/) related to Admin UI translation are added:
-
-- `admin-ui-product-translation-modal-footer`
-- `admin-ui-product-translations-actions-modal`
-- `admin-ui-product-translations-actions`
-- `admin-ui-product-translations-row-actions`
-
-For more information, see [available Admin UI Twig Component groups](https://doc.ibexa.co/en/5.0/administration/back_office/back_office_elements/custom_components/#admin-ui).
-
-#### REST API
-
-You can now find examples for some REST request bodies in the [OpenAPI REST API](rest_api_usage.md#openapi-support):
-
-- in the right column of the [online reference](https://doc.ibexa.co/en/5.0/api/rest_api/rest_api_reference/rest_api_reference.html),
- and in the downloadable OpenAPI specification files
-- on your dev instance at `/api/ibexa/v2/doc` in an “Example Value” tab of the "Request Body" section, alongside the "Schema" tab
-- in the generated JSON or YAML OpenAPI specifications when running `ibexa:openapi` command
-
-#### PHP API
-
-The following additions were made to the PHP API:
-
-- [`Ibexa\Contracts\Core\FieldType\ReferenceAwareExternalStorage`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-FieldType-ReferenceAwareExternalStorage.html)
-- [`Ibexa\Contracts\Core\Options\Context`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Options-Context.html)
-- [`Ibexa\Contracts\CorporateAccount\Order\OrderStatusLabelProviderInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-CorporateAccount-Order-OrderStatusLabelProviderInterface.html)
-- [`Ibexa\Contracts\ProductCatalog\Events\ProductAttributeRenderEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Events-ProductAttributeRenderEvent.html)
-- [`Ibexa\Contracts\Taxonomy\Search\Query\Criterion\TaxonomyNoEntries`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Taxonomy-Search-Query-Criterion-TaxonomyNoEntries.html)
- For more information, see [search criteria reference entry](https://doc.ibexa.co/en/5.0/search/criteria_reference/taxonomy_no_entries/).
-- [`Ibexa\Contracts\ConnectorRaptor` namespace](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/namespaces/ibexa-contracts-connectorraptor.html) from the [Raptor connector add-on](https://doc.ibexa.co/en/5.0/recommendations/raptor_integration/raptor_connector/)
-- [`Ibexa\Contracts\IntegratedHelp` namespace](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/namespaces/ibexa-contracts-integratedhelp.html) from the [Integrated help LTS-Update](https://doc.ibexa.co/en/5.0/administration/back_office/integrated_help/)
-
-### Full changelog
-
-[[% include 'snippets/release_50.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v5.0.6' %]]
-
-[[= release_note_entry_begin(
- 'Shopping Lists ' + version,
- '2026-03-05',
- ['Commerce', 'LTS Update', 'New feature']
-) =]]
-
-Shopping list is a new feature that allows users to save products into wishlists.
-An authenticated customer has a default "My wishlist", and can create custom shopping lists to organize their potential or recurrent purchases.
-Products can be moved from cart to shopping list, from a shopping list to another shopping list, and copied from a shopping list to the cart.
-
-For more information, see [Shopping list feature guide](https://doc.ibexa.co/en/5.0/commerce/shopping_list/shopping_list_guide/).
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin(
- "Ibexa DXP " + version,
- '2026-03-05',
- ['Headless', 'Experience', 'Commerce', 'New feature']
-) =]]
-
-### Security
-
-This release includes security fixes.
-To learn more, see the [corresponding security advisory](https://developers.ibexa.co/security-advisories/ibexa-sa-2026-001-insufficient-main-landing-page-access-control).
-
-### Improved product variant querying
-
-Product variant querying now supports filtering by variant codes and product attribute criteria.
-
-You can now use the [`ProductServiceInterface::findVariants()`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-ProductServiceInterface.html#method_findVariants) method to search for variants across all products, regardless of their base product.
-
-For more information, see [Product API - Searching variants](https://doc.ibexa.co/en/5.0/product_catalog/product_api/#searching-for-variants-across-all-products).
-
-### Infrastructure
-
-#### Ibexa Cloud package
-
-A new `ibexa/cloud` package is now available for [[= product_name_cloud =]] deployments.
-This package replaces the previous `composer ibexa:setup --platformsh` command with a dedicated console command.
-
-The package automatically generates environment variables based on the configuration of relationships and routes in [[= product_name_cloud =]],
-making it easier to configure services like databases, cache, search engines, and session storage.
-
-For more information, see [Install on Ibexa Cloud](https://doc.ibexa.co/en/5.0/ibexa_cloud/install_on_ibexa_cloud/) and [Environment variables on Ibexa Cloud](https://doc.ibexa.co/en/5.0/ibexa_cloud/environment_variables/).
-
-#### PHP 8.4 support
-
-PHP 8.4 is now [officially supported](https://doc.ibexa.co/en/5.0/getting_started/requirements/#php).
-
-### Query subtree limit configuration
-
-A new `query_subtree.limit` configuration option improves performance when working with large content trees by limiting count operations.
-This prevents performance degradation from database queries when determining if locations have children or calculating subtree sizes.
-
-For more information, see [Subtree operations configuration](https://doc.ibexa.co/en/5.0/administration/back_office/back_office_configuration/#subtree-operations).
-
-### Improved HTTP caching for Page Builder and dashboard blocks [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-You can now indicate which [query parameters](https://en.wikipedia.org/wiki/Query_string) must be used as keys when generating [HTTP cache](https://doc.ibexa.co/en/5.0/infrastructure_and_maintenance/cache/http_cache/http_cache/) for block requests.
-
-This allows you to improve performance for blocks by utilizing HTTP cache more effectively, for example, for paginated blocks in the [dashboard](https://doc.ibexa.co/en/5.0/administration/dashboard/customize_dashboard/).
-
-To set it up, use the new `cacheable_query_params` [block setting](https://doc.ibexa.co/en/5.0/content_management/pages/page_blocks/#block-configuration).
-
-Then, adjust your [layouts](https://doc.ibexa.co/en/5.0/templating/render_content/render_page/#configure-layout) and pass the parameters to [Symfony's `controller function`]([[= symfony_doc =]]/reference/twig_reference.html#controller) by using the new `ibexa_append_cacheable_query_params` Twig function, as in the example below:
-
-``` html+twig
-{{ render_esi(controller('Ibexa\\Bundle\\FieldTypePage\\Controller\\BlockController::renderAction',
- {
- 'locationId': locationId,
- 'contentId': contentInfo.id,
- 'blockId': block.id,
- 'versionNo': versionInfo.versionNo,
- 'languageCode': field.languageCode
- },
- ibexa_append_cacheable_query_params(block)
-)) }}
-```
-
-### Developer experience
-
-#### PHP API
-
-The following additions were made to the PHP API:
-
-- [`Ibexa\Contracts\Cdp\Value\Webhook\PersonIdType`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Cdp-Value-Webhook-PersonIdType.html)
-- [`Ibexa\Contracts\Cdp\Webhook`](/api/php_api/php_api_reference/namespaces/ibexa-contracts-cdp-webhook.html)
-- [`Ibexa\Contracts\Core\Persistence\Filter\Query`](/api/php_api/php_api_reference/namespaces/ibexa-contracts-core-persistence-filter-query.html)
-- [`Ibexa\Contracts\ImageEditor\Event`](/api/php_api/php_api_reference/namespaces/ibexa-contracts-imageeditor-event.html)
-- [`Ibexa\Contracts\ProductCatalog\Config`](/api/php_api/php_api_reference/namespaces/ibexa-contracts-productcatalog-config.html)
-- [`Ibexa\Contracts\ShoppingList`](/api/php_api/php_api_reference/namespaces/ibexa-contracts-shoppinglist.html)
-- [`Ibexa\Contracts\Taxonomy\Embedding\Exception`](/api/php_api/php_api_reference/namespaces/ibexa-contracts-taxonomy-embedding-exception.html)
-
-### Full changelog
-
-[[% include 'snippets/release_50.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v5.0.5' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2026-01-15', ['Headless', 'Experience', 'Commerce']) =]]
-
-### Infrastructure
-
-#### Added support for Elasticsearch 8
-
-Elasticsearch 8 is now officially supported.
-If you're currently using Elasticsearch 7, which is [no longer maintained](https://www.elastic.co/support/eol), it's recommended to upgrade.
-See the [update instructions](https://doc.ibexa.co/en/5.0/update_and_migration/from_5.0/update_from_5.0/#update-elasticsearch-server) for more information.
-
-#### Added support for Valkey
-
-Valkey is now [officially supported](https://doc.ibexa.co/en/5.0/getting_started/requirements/) alongside Redis.
-
-#### Added support for PostgreSQL 18
-
-PostgreSQL 18 is now [officially supported](https://doc.ibexa.co/en/5.0/getting_started/requirements#dbms).
-
-### Developer experience
-
-#### Easier debugging of Page Builder blocks
-
-In Symfony's `dev` environment, use the "Open profiler" action to quickly debug Page Builder's block rendering failures.
-
-
-
-#### Improved logging for Ibexa CDP
-
-You can configure the new `ibexa.cdp.webhook` Monolog channels to direct all CDP webhook logs to specific output for easier separation of logs.
-
-Example configuration:
-
-```yaml
-when@prod:
- monolog:
- handlers:
- cdp_webhook:
- type: stream
- path: "%kernel.logs_dir%/cdp_webhook_%kernel.environment%.log"
- level: debug
- channels: [ 'ibexa.cdp.webhook' ]
-```
-
-#### Added OpenAPI support for Collaborative editing REST API
-
-The [Collaborative editing](https://doc.ibexa.co/en/5.0/content_management/collaborative_editing/collaborative_editing/) REST API endpoints are now included in the [OpenAPI-based REST API reference](https://doc.ibexa.co/en/5.0/api/rest_api/rest_api_reference/rest_api_reference.html#tag/Collaboration-Sessions).
-
-### Full changelog
-
-[[% include 'snippets/release_50.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v5.0.4' %]]
-
-[[= release_note_entry_begin("Integrated help " + version, '2025-12-10', ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature', 'First release']) =]]
-
-Integrated help brings contextual documentation, guidance, and partner-specific resources right into the user interface of Ibexa DXP.
-It helps editors, store managers, and developers to quickly access relevant content, training and resources without leaving the UI, narrowing the gap between product and documentation.
-
-The default help menu can be modified to include links to internal editorial guidelines, custom tutorials, or support pages.
-
-
-
-For more information, see [Integrated help](https://doc.ibexa.co/en/5.0/administration/back_office/integrated_help/).
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin("Anthropic connector " + version, '2025-12-10', ['Headless', 'Experience', 'Commerce', 'LTS Update', 'New feature', 'First release']) =]]
-
-This release introduces a new AI connector that allows you to integrate [AI Actions](https://doc.ibexa.co/en/5.0/ai/ai_actions/ai_actions/) with [Anthropic Claude](https://claude.com/product/overview).
-
-For more information, see how to [install Anthropic connector](https://doc.ibexa.co/en/5.0/ai/ai_actions/configure_ai_actions#install-anthropic-connector).
-
-[[= release_note_entry_end() =]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2025-12-10', ['Headless', 'Experience', 'Commerce', 'New feature']) =]]
-
-### Security
-
-This release includes security fixes.
-To learn more, see the [corresponding security advisory](https://developers.ibexa.co/security-advisories/ibexa-sa-2025-005-password-change-and-xss-vulnerabilities-in-back-office).
-
-### Real-time collaborative editing
-
-Real-time editing is now part of the [Collaborative editing](https://doc.ibexa.co/en/5.0/content_management/collaborative_editing/collaborative_editing/) feature.
-
-By using it, users can edit and review content in real time, making teamwork faster, more efficient, and streamlining the content review process.
-The system automatically tracks changes, allowing seamless collaboration within a single content item.
-
-This extends the already existing capabilities allowing editors to work on the same content created in Ibexa DXP simultaneously, streamlining the content creation and review process.
-
-
-
-For more information, see how to [configure Collaborative editing](https://doc.ibexa.co/en/5.0/content_management/collaborative_editing/configure_collaborative_editing/).
-
-### Taxonomy suggestions for faster content classification
-
-You can now speed up taxonomy assignment with AI-powered taxonomy suggestions.
-
-Instead of manually browsing through large taxonomy trees and selecting categories or tags one by one, editors can choose from automatically generated suggestions based on the product or content information, for example name and description.
-
-This approach reduces manual effort, minimizes errors, and significantly improves the speed and consistency of content and product classification.
-
-
-
-For more information, see [Taxonomy suggestions](https://doc.ibexa.co/en/5.0/content_management/taxonomy/taxonomy/#taxonomy-suggestions).
-
-### Infrastructure
-
-- MariaDB 11.4 is now [officially supported](https://doc.ibexa.co/en/5.0/getting_started/requirements/#dbms)
-
-### Developer experience
-
-#### PHP API
-
-The following additions were made to the PHP API:
-
-##### Real-time collaborative editing
-
-- [`Ibexa\Contracts\Collaboration\Invitation\Query\Criterion\ParticipantScope`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Collaboration-Invitation-Query-Criterion-ParticipantScope.html)
-- [`Ibexa\Contracts\Collaboration\Invitation\Query\Criterion\ParticipantType`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Collaboration-Invitation-Query-Criterion-ParticipantType.html)
-- [`Ibexa\Contracts\Collaboration\Participant\ParticipantDiscriminator`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Collaboration-Participant-ParticipantDiscriminator.html)
-- [`Ibexa\Contracts\FieldTypeRichTextRTE\ChannelIdGeneratorInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-FieldTypeRichTextRTE-ChannelIdGeneratorInterface.html)
-- [`Ibexa\Contracts\FieldTypeRichTextRTE\Config\LicenseKeyProviderInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-FieldTypeRichTextRTE-Config-LicenseKeyProviderInterface.html)
-- [`Ibexa\Contracts\FieldTypeRichTextRTE\Config\LocalStorageInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-FieldTypeRichTextRTE-Config-LocalStorageInterface.html)
-- [`Ibexa\Contracts\FieldTypeRichTextRTE\TokenServiceInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-FieldTypeRichTextRTE-TokenServiceInterface.html)
-- [`Ibexa\Contracts\FieldTypeRichTextRTE\ToS\LicenseTermsStatusServiceInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-FieldTypeRichTextRTE-ToS-LicenseTermsStatusServiceInterface.html)
-- [`Ibexa\Contracts\FieldTypeRichTextRTE\ToS\NoResponseException`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-FieldTypeRichTextRTE-ToS-NoResponseException.html)
-- [`Ibexa\Contracts\FieldTypeRichTextRTE\ToS\Status`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-FieldTypeRichTextRTE-ToS-Status.html)
-- [`Ibexa\Contracts\FieldTypeRichTextRTE\ToS\ToSServiceInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-FieldTypeRichTextRTE-ToS-ToSServiceInterface.html)
-- [`Ibexa\Contracts\Share\Mapper\Action\ShareActionItemsMapperInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Share-Mapper-Action-ShareActionItemsMapperInterface.html)
-
-##### AI Taxonomy suggestions
-
-- [`Ibexa\Contracts\ConnectorAi\Action\DataType\Taxonomy`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-DataType-Taxonomy.html)
-- [`Ibexa\Contracts\ConnectorAi\Action\DataType\TaxonomyEntry`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-DataType-TaxonomyEntry.html)
-- [`Ibexa\Contracts\ConnectorAi\Action\DataType\TaxonomySuggestion`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-DataType-TaxonomySuggestion.html)
-- [`Ibexa\Contracts\ConnectorAi\Action\DataType\TaxonomySuggestionInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-DataType-TaxonomySuggestionInterface.html)
-- [`Ibexa\Contracts\ConnectorAi\Action\DataType\TextToTaxonomyInput`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-DataType-TextToTaxonomyInput.html)
-- [`Ibexa\Contracts\ConnectorAi\Action\Response\TaxonomyResponse`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-Response-TaxonomyResponse.html)
-- [`Ibexa\Contracts\ConnectorAi\Action\SuggestTaxonomyAction`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-SuggestTaxonomyAction.html)
-- [`Ibexa\Contracts\ConnectorAi\Action\TextToTaxonomy\Action`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-TextToTaxonomy-Action.html)
-- [`Ibexa\Contracts\ConnectorAi\Action\TextToTaxonomy\ActionResponse`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-TextToTaxonomy-ActionResponse.html)
-- [`Ibexa\Contracts\ConnectorAi\Action\TextToTaxonomy\ActionType`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-TextToTaxonomy-ActionType.html)
-- [`Ibexa\Contracts\Core\Repository\Values\Content\EmbeddingQuery`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Content-EmbeddingQuery.html)
-- [`Ibexa\Contracts\Core\Repository\Values\Content\EmbeddingQueryBuilder`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Content-EmbeddingQueryBuilder.html)
-- [`Ibexa\Contracts\Core\Repository\Values\Content\Query\Embedding`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Content-Query-Embedding.html)
-- [`Ibexa\Contracts\Core\Repository\Values\Content\QueryValidatorInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-Content-QueryValidatorInterface.html)
-- [`Ibexa\Contracts\Core\Repository\Values\ContentType\Query\Criterion\ContentTypeGroupName`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-ContentType-Query-Criterion-ContentTypeGroupName.html)
-- [`Ibexa\Contracts\Core\Search\Embedding\EmbeddingConfigurationInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Search-Embedding-EmbeddingConfigurationInterface.html)
-- [`Ibexa\Contracts\Core\Search\Embedding\EmbeddingProviderInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Search-Embedding-EmbeddingProviderInterface.html)
-- [`Ibexa\Contracts\Core\Search\Embedding\EmbeddingProviderRegistryInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Search-Embedding-EmbeddingProviderRegistryInterface.html)
-- [`Ibexa\Contracts\Core\Search\Embedding\EmbeddingProviderResolverInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Search-Embedding-EmbeddingProviderResolverInterface.html)
-- [`Ibexa\Contracts\Core\Search\Embedding\EmbeddingResolverNotFoundException`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Search-Embedding-EmbeddingResolverNotFoundException.html)
-- [`Ibexa\Contracts\Core\Search\FieldType\EmbeddingField`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Search-FieldType-EmbeddingField.html)
-- [`Ibexa\Contracts\Core\Search\FieldType\EmbeddingFieldFactory`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Search-FieldType-EmbeddingFieldFactory.html)
-- [`Ibexa\Contracts\Elasticsearch\Query\EmbeddingVisitor`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Elasticsearch-Query-EmbeddingVisitor.html)
-- [`Ibexa\Contracts\Solr\Query\EmbeddingVisitor`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Solr-Query-EmbeddingVisitor.html)
-- [`Ibexa\Contracts\Taxonomy\Embedding\TaxonomyEmbeddingConfigurationInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Taxonomy-Embedding-TaxonomyEmbeddingConfigurationInterface.html)
-- [`Ibexa\Contracts\Taxonomy\Embedding\TaxonomyEmbeddingFieldProviderInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Taxonomy-Embedding-TaxonomyEmbeddingFieldProviderInterface.html)
-- [`Ibexa\Contracts\Taxonomy\Search\Query\Value\TaxonomyEmbedding`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Taxonomy-Search-Query-Value-TaxonomyEmbedding.html)
-
-##### Search
-
-- [`Ibexa\Contracts\AdminUi\ContentType\ContentTypeFieldsByExpressionServiceInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-AdminUi-ContentType-ContentTypeFieldsByExpressionServiceInterface.html)
-- [`Ibexa\Contracts\CoreSearch\Values\Query\PaginationAwareInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-CoreSearch-Values-Query-PaginationAwareInterface.html)
-- [`Ibexa\Contracts\SiteFactory\Values\Query\Criterion\MatchTreeRootLocationIds`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-SiteFactory-Values-Query-Criterion-MatchTreeRootLocationIds.html)
-
-##### Other
-
-- [`Ibexa\Contracts\ProductCatalog\CapabilitiesEnum`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-CapabilitiesEnum.html)
-- [`Ibexa\Contracts\ProductCatalog\CapabilitiesServiceInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-CapabilitiesServiceInterface.html)
-- [`Ibexa\Contracts\User\PasswordReset\NotifierInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-User-PasswordReset-NotifierInterface.html)
-
-[[% include 'snippets/release_50.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v5.0.3' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2024-10-17', ['Headless', 'Experience', 'Commerce']) =]]
-
-### Security
-
-This release includes security fixes.
-To learn more, see the [corresponding security advisory](https://developers.ibexa.co/security-advisories/ibexa-sa-2025-004-xss-and-enumeration-vulnerabilities-in-back-office).
-
-### Developer experience
-
-#### PHP API
-
-The PHP API has been expanded with the following:
-
-??? note "PHP API classes and interfaces"
- - [`Ibexa\Contracts\ContentForms\Event`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/namespaces/ibexa-contracts-contentforms-event.html)
- - [`Ibexa\Contracts\Core\Persistence\Content\Type\CriterionHandlerInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Persistence-Content-Type-CriterionHandlerInterface.html)
- - [`Ibexa\Contracts\Core\Repository\Values\ContentType\Query`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/namespaces/ibexa-contracts-core-repository-values-contenttype-query.html)
- - [`Ibexa\Contracts\Core\Repository\Values\ContentType\Query\ContentTypeQuery`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-ContentType-Query-ContentTypeQuery.html)
- - [`Ibexa\Contracts\Core\Repository\Values\ContentType\Query\Criterion`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/namespaces/ibexa-contracts-core-repository-values-contenttype-query-criterion.html)
- - [`Ibexa\Contracts\Core\Repository\Values\ContentType\Query\CriterionInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-ContentType-Query-CriterionInterface.html)
- - [`Ibexa\Contracts\Core\Repository\Values\ContentType\Query\SortClause`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-ContentType-Query-SortClause.html)
- - [`Ibexa\Contracts\Core\Repository\Values\ContentType\Query\SortClause`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/namespaces/ibexa-contracts-core-repository-values-contenttype-query-sortclause.html)
- - [`Ibexa\Contracts\Core\Repository\Values\ContentType\SearchResult`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-ContentType-SearchResult.html)
-
-??? note "Events"
- - [`Ibexa\Contracts\ContentForms\Event\AutosaveEnabled`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ContentForms-Event-AutosaveEnabled.html)
-
-??? note "Search criteria"
- - [`Ibexa\Contracts\Core\Repository\Values\ContentType\Query\Criterion\ContainsFieldDefinitionId`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-ContentType-Query-Criterion-ContainsFieldDefinitionId.html)
- - [`Ibexa\Contracts\Core\Repository\Values\ContentType\Query\Criterion\ContentTypeGroupId`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-ContentType-Query-Criterion-ContentTypeGroupId.html)
- - [`Ibexa\Contracts\Core\Repository\Values\ContentType\Query\Criterion\ContentTypeId`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-ContentType-Query-Criterion-ContentTypeId.html)
- - [`Ibexa\Contracts\Core\Repository\Values\ContentType\Query\Criterion\ContentTypeIdentifier`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-ContentType-Query-Criterion-ContentTypeIdentifier.html)
- - [`Ibexa\Contracts\Core\Repository\Values\ContentType\Query\Criterion\IsSystem`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-ContentType-Query-Criterion-IsSystem.html)
- - [`Ibexa\Contracts\Core\Repository\Values\ContentType\Query\Criterion\LogicalAnd`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-ContentType-Query-Criterion-LogicalAnd.html)
- - [`Ibexa\Contracts\Core\Repository\Values\ContentType\Query\Criterion\LogicalNot`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-ContentType-Query-Criterion-LogicalNot.html)
- - [`Ibexa\Contracts\Core\Repository\Values\ContentType\Query\Criterion\LogicalOperator`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-ContentType-Query-Criterion-LogicalOperator.html)
- - [`Ibexa\Contracts\Core\Repository\Values\ContentType\Query\Criterion\LogicalOr`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-ContentType-Query-Criterion-LogicalOr.html)
-
-??? note "Sort clauses"
- - [`Ibexa\Contracts\Core\Repository\Values\ContentType\Query\SortClause\Id`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-ContentType-Query-SortClause-Id.html)
- - [`Ibexa\Contracts\Core\Repository\Values\ContentType\Query\SortClause\Identifier`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-ContentType-Query-SortClause-Identifier.html)
- - [`Ibexa\Contracts\Core\Repository\Values\ContentType\Query\SortClause\Name`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Repository-Values-ContentType-Query-SortClause-Name.html)
-
-[[% include 'snippets/release_50.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v5.0.2' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2025-09-09', ['Headless', 'Experience', 'Commerce', 'New feature']) =]]
-
-### Collaboration
-
-The new [Collaborative editing feature](https://doc.ibexa.co/en/5.0/content_management/collaborative_editing/collaborative_editing_guide/) allows multiple users to preview, review, and edit the same content, improving teamwork and streamlining the review process.
-Internal and external users can be invited to a collaboration session, through different sharing options.
-
-With Real-time editing, more advanced part of the feature, users can see each other’s changes in the real time, or work on the content asynchronously.
-
-Additionally, shared drafts can be accessed and managed through new dashboard tabs: **My shared drafts** and **Drafts shared with me**, helping users stay organized.
-
-### Discount indexing
-
-Discounts now allow scheduling a re-indexing of discounted product catalog prices at the most convenient time by using the Ibexa Messenger package.
-Ibexa Messenger is a customization of the Symfony Messenger package, created to adjust it to Ibexa DXP's needs.
-
-Once properly configured, it uses a background queue to trigger price re-indexing, ensuring efficient use of system resources without causing performance disruptions.
-
-### Improvements to notifications
-
-An improved notifications system is now more intuitive.
-Developers can now create and configure their own notification types, while users can now [browse through a list of notifications](https://doc.ibexa.co/projects/userguide/en/5.0/getting_started/notifications/), where they can either act on them or dismiss them.
-
-
-
-### Chat GPT 5.0 support
-
-With improved reasoning and greater accuracy in mind, the AI Connector package has been enhanced by adding ChatGPT 5.0 to its list of supported LLMs.
-
-
-
-### Developer experience
-
-#### New packages
-
-The following packages have been introduced in Ibexa DXP v5.0.2:
-
-- ibexa/collaboration
-- ibexa/messenger
-
-#### New version of PHP Storm Plugin
-
-To further improve your experience with Ibexa DXP, a 1.14.0 version of [PHP Storm Plugin](https://doc.ibexa.co/en/5.0/resources/phpstorm_plugin/) has been released, which brings the following changes:
-
-- Added support for Ibexa DXP v5.0
-- Added compatibility with PhpStorm 2024.3.6+
-- Added file template for Twig Component class
-- Added code completion for Twig Component Groups in YAML config files and AsTwigComponent attribute
-- Added code completion for Twig Component Types in YAML config files
-
-#### REST APIs
-
-Ibexa DXP v5.0.2 adds REST API coverage for the following features:
-
-- Collaboration:
- - Invitation
- - CollaborationSession
- - Participant
- - ParticipantList
-- AI Actions
- - Action
- - ActionType
- - ActionTypeList
- - ActionConfiguration
- - ActionConfigurationList
-- Discounts
- - Discount
- - DiscountList
-
-#### PHP API
-
-The PHP API has been expanded with the following:
-
-??? note "PHP API classes and interfaces"
- - [`Ibexa\Contracts\AdminUi\Exception`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/namespaces/ibexa-contracts-adminui-exception.html)
- - [`Ibexa\Contracts\AdminUi\Exception\UnresolvedPreviewUrlException`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-AdminUi-Exception-UnresolvedPreviewUrlException.html)
- - [`Ibexa\Contracts\AdminUi\PreviewUrlResolver`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/namespaces/ibexa-contracts-adminui-previewurlresolver.html)
- - [`Ibexa\Contracts\AdminUi\PreviewUrlResolver\VersionPreviewUrlResolverInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-AdminUi-PreviewUrlResolver-VersionPreviewUrlResolverInterface.html)
- - [`Ibexa\Contracts\AutomatedTranslation\Exception`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/namespaces/ibexa-contracts-automatedtranslation-exception.html)
- - [`Ibexa\Contracts\AutomatedTranslation\Exception\ClientNotConfiguredException`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-AutomatedTranslation-Exception-ClientNotConfiguredException.html)
- - [`Ibexa\Contracts\Collaboration\Configuration\ShareableUserConfigurationInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Collaboration-Configuration-ShareableUserConfigurationInterface.html)
- - [`Ibexa\Contracts\Collaboration\Security`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/namespaces/ibexa-contracts-collaboration-security.html)
- - [`Ibexa\Contracts\Collaboration\Security\ShareableLinkMatcherStrategyInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Collaboration-Security-ShareableLinkMatcherStrategyInterface.html)
- - [`Ibexa\Contracts\Collaboration\Session\JoinSessionRedirectResolverInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Collaboration-Session-JoinSessionRedirectResolverInterface.html)
- - [`Ibexa\Contracts\Collaboration\Session\LeaveSessionRedirectResolverInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Collaboration-Session-LeaveSessionRedirectResolverInterface.html)
- - [`Ibexa\Contracts\Core\Validation\Constraint`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/namespaces/ibexa-contracts-core-validation-constraint.html)
- - [`Ibexa\Contracts\Core\Validation\Constraint\UniqueIdentifier`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Validation-Constraint-UniqueIdentifier.html)
- - [`Ibexa\Contracts\Core\Validation\Constraint\UniqueIdentifierValidator`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Core-Validation-Constraint-UniqueIdentifierValidator.html)
- - [`Ibexa\Contracts\Messenger`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/namespaces/ibexa-contracts-messenger.html)
- - [`Ibexa\Contracts\Messenger\Transport`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/namespaces/ibexa-contracts-messenger-transport.html)
- - [`Ibexa\Contracts\Messenger\Transport\MessageProviderInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Messenger-Transport-MessageProviderInterface.html)
- - [`Ibexa\Contracts\ProductCatalog\Values\Product\Query\AttributeCriterionBuilder`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/namespaces/ibexa-contracts-productcatalog-values-product-query-attributecriterionbuilder.html)
- - [`Ibexa\Contracts\ProductCatalog\Values\Product\Query\AttributeCriterionBuilderRegistry`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Product-Query-AttributeCriterionBuilderRegistry.html)
- - [`Ibexa\Contracts\ProductCatalog\Values\Product\Query\AttributeCriterionBuilderRegistryInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Product-Query-AttributeCriterionBuilderRegistryInterface.html)
- - [`Ibexa\Contracts\ProductCatalog\Values\Product\Query\AttributeCriterionBuilder\AttributeCriterionBuilderInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Product-Query-AttributeCriterionBuilder-AttributeCriterionBuilderInterface.html)
- - [`Ibexa\Contracts\ProductCatalog\Values\Product\Query\AttributeCriterionBuilder\CheckboxBuilder`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Product-Query-AttributeCriterionBuilder-CheckboxBuilder.html)
- - [`Ibexa\Contracts\ProductCatalog\Values\Product\Query\AttributeCriterionBuilder\ColorBuilder`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Product-Query-AttributeCriterionBuilder-ColorBuilder.html)
- - [`Ibexa\Contracts\ProductCatalog\Values\Product\Query\AttributeCriterionBuilder\FloatBuilder`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Product-Query-AttributeCriterionBuilder-FloatBuilder.html)
- - [`Ibexa\Contracts\ProductCatalog\Values\Product\Query\AttributeCriterionBuilder\IntegerBuilder`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Product-Query-AttributeCriterionBuilder-IntegerBuilder.html)
- - [`Ibexa\Contracts\ProductCatalog\Values\Product\Query\AttributeCriterionBuilder\SelectionBuilder`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Product-Query-AttributeCriterionBuilder-SelectionBuilder.html)
- - [`Ibexa\Contracts\Share\Permission\Mapper`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/namespaces/ibexa-contracts-share-permission-mapper.html)
-
-??? note "Events"
- - [`Ibexa\Contracts\AdminUi\Event\ResolveVersionPreviewUrlEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-AdminUi-Event-ResolveVersionPreviewUrlEvent.html)
- - [`Ibexa\Contracts\Collaboration\Session\Event\JoinSessionEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Collaboration-Session-Event-JoinSessionEvent.html)
- - [`Ibexa\Contracts\Collaboration\Session\Event\SessionPublicPreviewEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Collaboration-Session-Event-SessionPublicPreviewEvent.html)
- - [`Ibexa\Contracts\Discounts\Event\EnableDiscountEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-EnableDiscountEvent.html)
- - [`Ibexa\Contracts\Discounts\Event\BeforeDisableDiscountEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-BeforeDisableDiscountEvent.html)
- - [`Ibexa\Contracts\Discounts\Event\BeforeEnableDiscountEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-BeforeEnableDiscountEvent.html)
- - [`Ibexa\Contracts\Discounts\Event\DisableDiscountEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-DisableDiscountEvent.html)
- - [`Ibexa\Contracts\Share\Event\UsersWithPermissionInfoMappedEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Share-Event-UsersWithPermissionInfoMappedEvent.html)
-
-??? note "Search criteria"
- - [`Ibexa\Contracts\Collaboration\Session\Query\Criterion\ParticipantToken`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Collaboration-Session-Query-Criterion-ParticipantToken.html)
- - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\IndexedAtCriterion`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-IndexedAtCriterion.html)
- - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\UpdatedAtCriterion`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-UpdatedAtCriterion.html)
-
-??? note "Sort clauses"
- - [`Ibexa\Contracts\Collaboration\Invitation\Query\SortClause\CreatedAt`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Collaboration-Invitation-Query-SortClause-CreatedAt.html)
- - [`Ibexa\Contracts\Collaboration\Invitation\Query\SortClause\Id`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Collaboration-Invitation-Query-SortClause-Id.html)
- - [`Ibexa\Contracts\Collaboration\Invitation\Query\SortClause\Status`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Collaboration-Invitation-Query-SortClause-Status.html)
- - [`Ibexa\Contracts\Collaboration\Invitation\Query\SortClause\UpdatedAt`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Collaboration-Invitation-Query-SortClause-UpdatedAt.html)
- - [`Ibexa\Contracts\Collaboration\Session\Query\SortClause\CreatedAt`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Collaboration-Session-Query-SortClause-CreatedAt.html)
- - [`Ibexa\Contracts\Collaboration\Session\Query\SortClause\Id`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Collaboration-Session-Query-SortClause-Id.html)
- - [`Ibexa\Contracts\Collaboration\Session\Query\SortClause\UpdatedAt`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Collaboration-Session-Query-SortClause-UpdatedAt.html)
-
-### Full changelog
-
-[[% include 'snippets/release_50.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v5.0.1' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2025-08-19', ['Headless', 'Experience', 'Commerce', 'New feature']) =]]
-
-### Special characters in online editor
-
-The [online editor](https://doc.ibexa.co/en/5.0/content_management/rich_text/online_editor_guide/) now allows to easily enter special characters like currency symbols.
-It uses the [special characters plugin](https://ckeditor.com/docs/ckeditor5/latest/features/special-characters.html).
-
-
-
-### Support for Solr 9
-
-With this release, Ibexa DXP starts supporting [Solr 9](https://doc.ibexa.co/en/5.0/getting_started/requirements/#search).
-
-Solr 9 comes with support for [Dense Vector Search](https://solr.apache.org/guide/solr/latest/query-guide/dense-vector-search.html), paving the way for incoming improvements to the [AI Actions](https://doc.ibexa.co/en/5.0/ai/ai_actions/ai_actions/) feature.
-
-### Improved content creation interface
-
-The editing interface of the back office is now improved to better highlight the language, creator, and the publication date when working with content items.
-
-
-
-### Taxonomy Subtree limitation
-
-You can now manage access to [taxonomy items](https://doc.ibexa.co/en/5.0/content_management/taxonomy/taxonomy/) more effectively by using the new [Taxonomy Subtree limitation](https://doc.ibexa.co/en/5.0/permissions/limitation_reference/#taxonomy-subtree-limitation).
-
-In addition, you can now use the [Taxonomy limitation](https://doc.ibexa.co/en/5.0/permissions/limitation_reference/#taxonomy-limitation) together with the `taxonomy/assign` policy.
-
-### Base price column added to a Product Picker view
-
-The Product Picker tool that, for example, lets you [select products eligible for discounts]([[= user_doc =]]/commerce/discounts/work_with_discounts/#create-new-discount), now displays a **Base price** column for products and product variants.
-
-### PHP API
-
-The PHP API has been enhanced with the following new classes:
-
-[`Ibexa\Contracts\Cart\Exception\VatCalculationExceptionInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Cart-Exception-VatCalculationExceptionInterface.html)
-[`Ibexa\Contracts\ProductCatalog\Values\Product\Query\Criterion\AbstractPriceRange`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Product-Query-Criterion-AbstractPriceRange.html)
-[`Ibexa\Contracts\ProductCatalog\Values\Product\Query\Criterion\CustomPriceRange`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalog-Values-Product-Query-Criterion-CustomPriceRange.html)
-
-This release brings additional minor improvements to the developer's experience that result from capabilities offered by PHP in version 8.3.
-
-### Full changelog
-
-[[% include 'snippets/release_50.md' %]]
-
-[[= release_note_entry_end() =]]
-
-[[% set version = 'v5.0.0' %]]
-
-[[= release_note_entry_begin("Ibexa DXP " + version, '2025-07-22', ['Headless', 'Experience', 'Commerce', 'New feature', 'First release']) =]]
-
-### Notable changes
-
-This version incorporates into the product numerous features brought by LTS Updates from previous versions, brings upgrades to the tech stack and improvements to developer experience.
-
-#### AI Actions
-
-The AI Actions feature enhances the usability and flexibility of Ibexa DXP by harnessing the potential of artificial intelligence to automate time-consuming editorial tasks.
-By default, the AI Actions feature can help users with their work in following scenarios:
-
-- Refining text: when editing a content item, users can request that a passage selected in online editor is modified, for example, by adjusting the length of the text, changing its tone, or correcting linguistic errors
-- Generating alternative text: when working with images, users can ask AI to generate alternative text for them, which helps improve accessibility and SEO
-
-
-
-AI Actions integrate with [Ibexa Connect]([[= connect_doc =]]/), giving you an opportunity to build complex data transformation workflows without having to rely on custom code.
-
-For more information, see [AI Actions product guide](https://doc.ibexa.co/en/5.0/ai/ai_actions/ai_actions_guide/).
-
-#### Discounts [[% include 'snippets/commerce_badge.md' %]]
-
-With Discounts, you can temporarily or permanently reduce prices on specific products or categories, making deals more attractive to potential buyers.
-
-Use them to encourage first-time purchases, reward loyal customers, promote new or slow-moving items, or drive sales during seasonal events.
-
-By displaying discounted prices clearly in the catalog or cart, businesses can create a sense of urgency, increase customer satisfaction, and ultimately boost revenue.
-
-
-
-For more information, see [Discounts product guide](https://doc.ibexa.co/en/5.0/discounts/discounts_guide/).
-
-#### Date and time attribute
-
-The Date and time attributes allow you to represent date and time values as part of the product specification in the [product catalog](https://doc.ibexa.co/en/5.0/product_catalog/product_catalog_guide).
-
-For more information, see [Date and time attributes](https://doc.ibexa.co/en/5.0/product_catalog/attributes/date_and_time/).
-
-#### Symbol attribute
-
-The Symbol attributes allow you to efficiently represent the string-based data as part of the product specification in the [product catalog](https://doc.ibexa.co/en/5.0/product_catalog/product_catalog_guide).
-
-For more information, see [Symbol attributes](https://doc.ibexa.co/en/5.0/product_catalog/attributes/symbol_attribute_type/).
-
-#### Collaboration
-
-With Collaboration, multiple users can invite each other to work on the same content.
-It is a starting point for future functionalities in the collaboration domain.
-
-
-
-For more information, see [Collaboration PHP API](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/namespaces/ibexa-contracts-collaboration.html) and [Share PHP API](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/namespaces/ibexa-contracts-share.html).
-
-### Software architecture upgrades
-
-With improved compatibility, performance and increased security, as well as better developer experience in mind, [[= product_name_base =]] decided to introduce several significant tech stack upgrades.
-
-For a full list of updated system requirements, see [Requirements](https://doc.ibexa.co/en/5.0/getting_started/requirements/).
-
-#### Symfony 7.3
-
-With this release, Ibexa DXP moves to Symfony 7.3 from the previously used versions of Symfony.
-
-For details, see [Symfony 7.3](https://symfony.com/blog/symfony-7-3-curated-new-features).
-
-#### Doctrine DBAL 3.9
-
-By moving to Doctrine DBAL 3.9, Ibexa DXP brings developers better performance, cleaner code, and stronger foundation for a more modern and maintainable application.
-
-#### PHP 8.3
-
-With performance, coding safety and security in mind, with this version, Ibexa DXP moves to [PHP 8.3](https://www.php.net/releases/8.3/en.php) and drops support for lower versions of the language.
-
-#### OpenAPI support
-
-Adding support for generating the [OpenAPI](https://www.openapis.org/) specification for our REST API makes future changes more manageable, and helps our partners automatically generate REST API clients.
-
-For more information, see [REST API usage](https://doc.ibexa.co/en/5.0/api/rest_api/rest_api_usage/rest_api_usage/#openapi-support).
-
-Support for serialization and deserialization of REST payloads with the [Symfony Serializer](https://symfony.com/doc/current/serializer.html) component improves data reliability and simplifies debugging.
-
-#### React 19
-
-Ibexa DXP's Back Office now uses [React 19](https://react.dev/blog/2024/12/05/react-19).
-This upgrade enhances maintainability, unlocks new UI capabilities, and simplifies future feature development.
-
-### Developer experience
-
-#### New packages
-
-The following packages have been introduced in Ibexa DXP v5.0.0:
-
-- ibexa/collaboration
-- ibexa/connector-ai
-- ibexa/connector-openai
-- ibexa/discounts
-- ibexa/discounts-codes
-- ibexa/product-catalog-date-time-attribute
-- ibexa/product-catalog-symbol-attribute
-- ibexa/share
-
-#### REST APIs
-
-Ibexa DXP v5.0.0 adds REST API coverage for the following features:
-
-- AI Actions:
- - Action Configurations
- - Action Types
-- Discounts
-- Collaboration
-
-#### PHP API
-
-The PHP API has been expanded with the following classes and interfaces:
-
-??? note "AI Actions"
-
- - [`Ibexa\Contracts\ConnectorAi\Action\Action`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-Action.html)
- - [`Ibexa\Contracts\ConnectorAi\Action\ActionContext`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-ActionContext.html)
- - [`Ibexa\Contracts\ConnectorAi\Action\ActionFactoryInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-ActionFactoryInterface.html)
- - [`Ibexa\Contracts\ConnectorAi\Action\ActionHandlerInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-ActionHandlerInterface.html)
- - [`Ibexa\Contracts\ConnectorAi\Action\ActionHandlerResolverInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-ActionHandlerResolverInterface.html)
- - [`Ibexa\Contracts\ConnectorAi\Action\GenerateAltTextAction`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-GenerateAltTextAction.html)
- - [`Ibexa\Contracts\ConnectorAi\Action\LLMBaseActionTypeInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-LLMBaseActionTypeInterface.html)
- - [`Ibexa\Contracts\ConnectorAi\Action\RefineTextAction`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-RefineTextAction.html)
- - [`Ibexa\Contracts\ConnectorAi\Action\RuntimeContext`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-RuntimeContext.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\ActionConfigurationCreateStruct`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-ActionConfigurationCreateStruct.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\ActionConfigurationCopyStruct`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-ActionConfigurationCopyStruct.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\ActionConfigurationListInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-ActionConfigurationListInterface.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\ActionConfigurationOptions`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-ActionConfigurationOptions.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\ActionConfigurationQuery`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-ActionConfigurationQuery.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\ActionConfigurationUpdateStruct`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-ActionConfigurationUpdateStruct.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\ActionHandlerOptionsFormMapperInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-ActionHandlerOptionsFormMapperInterface.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\ActionTypeOptionsFormMapperInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-ActionTypeOptionsFormMapperInterface.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\OptionsFormatterInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-OptionsFormatterInterface.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionType\ActionTypeFactoryInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionType-ActionTypeFactoryInterface.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionType\ActionTypeInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionType-ActionTypeInterface.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionType\ActionTypeRegistryInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionType-ActionTypeRegistryInterface.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionType\OptionsValidatorError`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionType-OptionsValidatorError.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionType\OptionsValidatorInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionType-OptionsValidatorInterface.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionType\OptionsValidatorRegistryInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionType-OptionsValidatorRegistryInterface.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionConfigurationInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfigurationInterface.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionConfigurationServiceDecorator`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfigurationServiceDecorator.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionConfigurationServiceInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfigurationServiceInterface.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionHandlerRegistryInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionHandlerRegistryInterface.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionInterface.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionResponseInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionResponseInterface.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionServiceDecorator`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionServiceDecorator.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionServiceInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionServiceInterface.html)
- - [`Ibexa\Contracts\ConnectorAi\AdapterAwareActionInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-AdapterAwareActionInterface.html)
- - [`Ibexa\Contracts\ConnectorAi\DataType`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-DataType.html)
- - [`Ibexa\Contracts\ConnectorAi\PromptResolverInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-PromptResolverInterface.html)
- - [`Ibexa\Contracts\ConnectorAi\Prompt\PromptFactory`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Prompt-PromptFactory.html)
- - [`Ibexa\Contracts\ConnectorAi\Prompt\PromptInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Prompt-PromptInterface.html)
- - [`Ibexa\Contracts\ConnectorAi\PromptResolverInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-PromptResolverInterface.html)
- - [`Ibexa\Contracts\ConnectorOpenAi\ClientProviderInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorOpenAi-ClientProviderInterface.html)
-
-??? note "Discounts"
-
- - [`Ibexa\Contracts\Discounts\DiscountConditionCriterionMapperInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountConditionCriterionMapperInterface.html)
- - [`Ibexa\Contracts\Discounts\DiscountFormMapperInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountFormMapperInterface.html)
- - [`Ibexa\Contracts\Discounts\DiscountPrioritizationStrategyInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountPrioritizationStrategyInterface.html)
- - [`Ibexa\Contracts\Discounts\DiscountServiceDecorator`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountServiceDecorator.html)
- - [`Ibexa\Contracts\Discounts\DiscountServiceInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountServiceInterface.html)
- - [`Ibexa\Contracts\Discounts\DiscountValueFormatterInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountValueFormatterInterface.html)
- - [`Ibexa\Contracts\Discounts\DiscountVariablesResolverInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-DiscountVariablesResolverInterface.html)
- - [`Ibexa\Contracts\Discounts\Admin\Form\DiscountValueFormTypeMapperInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-Form-DiscountValueFormTypeMapperInterface.html)
- - [`Ibexa\Contracts\Discounts\Admin\Form\FormThemeProviderInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-Form-FormThemeProviderInterface.html)
- - [`Ibexa\Contracts\Discounts\Admin\FormMapper\ConditionsMapperInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-FormMapper-ConditionsMapperInterface.html)
- - [`Ibexa\Contracts\Discounts\Admin\FormMapper\DiscountValueMapperInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-FormMapper-DiscountValueMapperInterface.html)
- - [`Ibexa\Contracts\Discounts\Admin\FormMapper\GeneralPropertiesMapperInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-FormMapper-GeneralPropertiesMapperInterface.html)
- - [`Ibexa\Contracts\Discounts\Admin\FormMapper\ProductConditionsMapperInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-FormMapper-ProductConditionsMapperInterface.html)
- - [`Ibexa\Contracts\Discounts\Admin\FormMapper\StepDataObjectMapperInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-FormMapper-StepDataObjectMapperInterface.html)
- - [`Ibexa\Contracts\Discounts\Admin\FormMapper\UserConditionsMapperInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-FormMapper-UserConditionsMapperInterface.html)
- - [`Ibexa\Contracts\Discounts\Exception\DiscountConditionNotFoundException`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Exception-DiscountConditionNotFoundException.html)
- - [`Ibexa\Contracts\Discounts\Exception\DiscountExpressionInvalidArgumentException`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Exception-DiscountExpressionInvalidArgumentException.html)
- - [`Ibexa\Contracts\Discounts\Exception\DiscountExpressionRuntimeException`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Exception-DiscountExpressionRuntimeException.html)
- - [`Ibexa\Contracts\Discounts\Exception\DiscountNotFoundException`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Exception-DiscountNotFoundException.html)
- - [`Ibexa\Contracts\Discounts\Exception\DiscountRuleNotFoundException`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Exception-DiscountRuleNotFoundException.html)
- - [`Ibexa\Contracts\Discounts\Exception\DiscountValueResolutionException`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Exception-DiscountValueResolutionException.html)
- - [`Ibexa\Contracts\Discounts\Policy\AbstractDiscountPolicy`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Policy-AbstractDiscountPolicy.html)
- - [`Ibexa\Contracts\Discounts\Policy\Create`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Policy-Create.html)
- - [`Ibexa\Contracts\Discounts\Policy\Delete`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Policy-Delete.html)
- - [`Ibexa\Contracts\Discounts\Policy\Disable`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Policy-Disable.html)
- - [`Ibexa\Contracts\Discounts\Policy\Enable`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Policy-Enable.html)
- - [`Ibexa\Contracts\Discounts\Policy\Update`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Policy-Update.html)
- - [`Ibexa\Contracts\Discounts\Policy\View`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Policy-View.html)
- - [`Ibexa\Contracts\Discounts\Value\CartDiscountConditionInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-CartDiscountConditionInterface.html)
- - [`Ibexa\Contracts\Discounts\Value\DiscountConditionInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-DiscountConditionInterface.html)
- - [`Ibexa\Contracts\Discounts\Value\DiscountExpressionAwareInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-DiscountExpressionAwareInterface.html)
- - [`Ibexa\Contracts\Discounts\Value\DiscountInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-DiscountInterface.html)
- - [`Ibexa\Contracts\Discounts\Value\DiscountListInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-DiscountListInterface.html)
- - [`Ibexa\Contracts\Discounts\Value\DiscountRuleInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-DiscountRuleInterface.html)
- - [`Ibexa\Contracts\Discounts\Value\DiscountTranslationInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-DiscountTranslationInterface.html)
- - [`Ibexa\Contracts\Discounts\Value\DiscountType`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-DiscountType.html)
- - [`Ibexa\Contracts\Discounts\Value\DiscountValueInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-DiscountValueInterface.html)
- - [`Ibexa\Contracts\Discounts\Value\Struct\DiscountCreateStruct`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Struct-DiscountCreateStruct.html)
- - [`Ibexa\Contracts\Discounts\Value\Struct\DiscountStructInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Struct-DiscountStructInterface.html)
- - [`Ibexa\Contracts\Discounts\Value\DiscountTranslationStruct`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Struct-DiscountTranslationStruct.html)
- - [`Ibexa\Contracts\Discounts\Value\DiscountUpdateStruct`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Struct-DiscountUpdateStruct.html)
- - [`Ibexa\Contracts\Discounts\Value\TranslationAwareDiscountStructInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Struct-TranslationAwareDiscountStructInterface.html)
- - [`Ibexa\Contracts\Discounts\Value\TranslationAwareDiscountStructTrait`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Struct-TranslationAwareDiscountStructTrait.html)
- - [`Ibexa\Contracts\DiscountsCodes\Exception\DiscountCodeNotFoundException`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Exception-DiscountCodeNotFoundException.html)
- - [`Ibexa\Contracts\DiscountsCodes\Exception\DiscountCodeRateLimitExceededException`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Exception-DiscountCodeRateLimitExceededException.html)
- - [`Ibexa\Contracts\DiscountsCodes\Exception\DiscountCodeUnusableException`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Exception-DiscountCodeUnusableException.html)
- - [`Ibexa\Contracts\DiscountsCodes\Exception\DiscountCodeUserInvalidArgumentException`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Exception-DiscountCodeUserInvalidArgumentException.html)
- - [`Ibexa\Contracts\DiscountsCodes\Value\DiscountCodeUsageInterface`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Value-DiscountCodeUsageInterface.html)
- - [`Ibexa\Contracts\DiscountsCodes\Value\DiscountCodeUser`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Value-DiscountCodeUser.html)
- - [`Ibexa\Contracts\DiscountsCodes\Value\Query\DiscountCodeUsageQuery`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Value-Query-DiscountCodeUsageQuery.html)
- - [`Ibexa\Contracts\DiscountsCodes\Value\Struct\DiscountCodeCreateStruct `](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Value-Struct-DiscountCodeCreateStruct.html)
- - [`Ibexa\Contracts\DiscountsCodes\Value\StructDiscountCodeUpdateStruct `](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Value-Struct-DiscountCodeUpdateStruct.html)
-
-??? note "Product catalog attributes"
-
- - [`Ibexa\Contracts\ProductCatalogDateTimeAttribute`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/namespaces/ibexa-contracts-productcatalogdatetimeattribute.html)
- - [`Ibexa\Contracts\ProductCatalogSymbolAttribute`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/namespaces/ibexa-contracts-productcatalogsymbolattribute.html)
-
-#### Search Criteria
-
-The following search criteria have been added in the v5.0 release:
-
-??? note "AI Actions"
-
- - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\Query\Criterion\Enabled`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Query-Criterion-Enabled.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\Query\Criterion\Identifier`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Query-Criterion-Identifier.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\Query\Criterion\LogicalAnd`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Query-Criterion-LogicalAnd.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\Query\Criterion\LogicalOr`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Query-Criterion-LogicalOr.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\Query\Criterion\Name`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Query-Criterion-Name.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\Query\Criterion\Type`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Query-Criterion-Type.html)
-
-??? note "Discounts"
-
- - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\CreatedAtCriterion`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-CreatedAtCriterion.html)
- - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\CreatorCriterion`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-CreatorCriterion.html)
- - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\EndDateCriterion`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-EndDateCriterion.html)
- - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\IdentifierCriterion`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-IdentifierCriterion.html)
- - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\IsEnabledCriterion`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-IsEnabledCriterion.html)
- - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\LogicalAnd`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-LogicalAnd.html)
- - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\LogicalOr`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-LogicalOr.html)
- - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\NameCriterion`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-NameCriterion.html)
- - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\PriorityCriterion`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-PriorityCriterion.html)
- - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\StartDateCriterion`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-StartDateCriterion.html)
- - [`Ibexa\Contracts\Discounts\Value\Query\Criterion\TypeCriterion`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-TypeCriterion.html)
-
-??? note "Product catalog attributes"
-
- - [`Ibexa\Contracts\ProductCatalogDateTimeAttribute\Search\Criterion\DateTimeAttribute`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalogDateTimeAttribute-Search-Criterion-DateTimeAttribute.html)
- - [`Ibexa\Contracts\ProductCatalogDateTimeAttribute\Search\Criterion\DateTimeAttributeRange`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalogDateTimeAttribute-Search-Criterion-DateTimeAttributeRange.html)
- - [`Ibexa\Contracts\ProductCatalogSymbolAttribute\Search\Criterion\SymbolAttribute`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ProductCatalogSymbolAttribute-Search-Criterion-SymbolAttribute.html)
-
-#### Sort Clauses
-
-The following sort clauses have been added in the v5.0 release:
-
-??? note "AI Actions"
-
- - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\Query\SortClause\Enabled`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Query-SortClause-Enabled.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\Query\SortClause\Id`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Query-SortClause-Id.html)
- - [`Ibexa\Contracts\ConnectorAi\ActionConfiguration\Query\SortClause\Identifier`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Query-SortClause-Identifier.html)
-
-??? note "Discounts"
-
- - [`Ibexa\Contracts\Discounts\Value\Query\SortClause\CreatedAt`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-CreatedAt.html)
- - [`Ibexa\Contracts\Discounts\Value\Query\SortClause\EndDate`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-EndDate.html)
- - [`Ibexa\Contracts\Discounts\Value\Query\SortClause\Id`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-Id.html)
- - [`Ibexa\Contracts\Discounts\Value\Query\SortClause\Identifier`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-Identifier.html)
- - [`Ibexa\Contracts\Discounts\Value\Query\SortClause\Priority`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-Priority.html)
- - [`Ibexa\Contracts\Discounts\Value\Query\SortClause\StartDate`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-StartDate.html)
- - [`Ibexa\Contracts\Discounts\Value\Query\SortClause\Type`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-Type.html)
- - [`Ibexa\Contracts\Discounts\Value\Query\SortClause\UpdatedAt`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-UpdatedAt.html)
-
-#### Events
-
-The following events have been added in the v5.0 release:
-
-??? note "AI Actions"
-
- - [`\Ibexa\Contracts\ConnectorAi\Action\Event\BeforeExecuteEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-Event-BeforeExecuteEvent.html)
- - [`\Ibexa\Contracts\ConnectorAi\Action\Event\ExecuteEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Action-Event-ExecuteEvent.html)
- - [`\Ibexa\Contracts\ConnectorAi\ActionConfiguration\Event\BeforeCreateActionConfigurationEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Event-BeforeCreateActionConfigurationEvent.html)
- - [`\Ibexa\Contracts\ConnectorAi\ActionConfiguration\Event\CreateActionConfigurationEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Event-CreateActionConfigurationEvent.html)
- - [`\Ibexa\Contracts\ConnectorAi\ActionConfiguration\Event\BeforeUpdateActionConfigurationEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Event-BeforeUpdateActionConfigurationEvent.html)
- - [`\Ibexa\Contracts\ConnectorAi\ActionConfiguration\Event\UpdateActionConfigurationEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Event-UpdateActionConfigurationEvent.html)
- - [`\Ibexa\Contracts\ConnectorAi\ActionConfiguration\Event\BeforeDeleteActionConfigurationEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Event-BeforeDeleteActionConfigurationEvent.html)
- - [`\Ibexa\Contracts\ConnectorAi\ActionConfiguration\Event\DeleteActionConfigurationEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-ActionConfiguration-Event-DeleteActionConfigurationEvent.html)
- - [`Ibexa\Contracts\ConnectorAi\Events\ContextEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Events-ContextEvent.html)
- - [`Ibexa\Contracts\ConnectorAi\Events\ResolveActionConfigurationWidgetConfigEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Events-ResolveActionConfigurationWidgetConfigEvent.html)
- - [`Ibexa\Contracts\ConnectorAi\Events\ResolveActionHandlerEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-ConnectorAi-Events-ResolveActionHandlerEvent.html)
-
-??? note "Discounts"
-
- - [`\Ibexa\Contracts\Discounts\Event\BeforeCreateDiscountEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-BeforeCreateDiscountEvent.html)
- - [`\Ibexa\Contracts\Discounts\Event\CreateDiscountEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-CreateDiscountEvent.html)
- - [`\Ibexa\Contracts\Discounts\Event\BeforeDeleteDiscountEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-BeforeDeleteDiscountEvent.html)
- - [`\Ibexa\Contracts\Discounts\Event\DeleteDiscountEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-DeleteDiscountEvent.html)
- - [`\Ibexa\Contracts\Discounts\Event\BeforeUpdateDiscountEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-BeforeUpdateDiscountEvent.html)
- - [`\Ibexa\Contracts\Discounts\Event\UpdateDiscountEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-UpdateDiscountEvent.html)
- - [`\Ibexa\Contracts\Discounts\Event\CreateDiscountCreateStructEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-CreateDiscountCreateStructEvent.html)
- - [`\Ibexa\Contracts\Discounts\Event\CreateDiscountUpdateStructEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-CreateDiscountUpdateStructEvent.html)
- - [`\Ibexa\Contracts\Discounts\Event\CreateFormDataEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-CreateFormDataEvent.html)
- - [`\Ibexa\Contracts\Discounts\Event\MapDiscountToFormDataEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-MapDiscountToFormDataEvent.html)
- - [`\Ibexa\Contracts\Discounts\Event\Step\CreateFormDataEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-CreateFormDataEvent.html)
- - [`\Ibexa\Contracts\Discounts\Event\Step\MapCreateDataToStructEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-Step-MapCreateDataToStructEvent.html)
- - [`\Ibexa\Contracts\Discounts\Event\Step\MapDiscountToFormDataEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-MapDiscountToFormDataEvent.html)
- - [`\Ibexa\Contracts\Discounts\Event\Step\MapUpdateDataToStructEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Event-Step-MapUpdateDataToStructEvent.html)
- - [`\Ibexa\Contracts\Discounts\Admin\Form\Event\PreDiscountCreateEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Admin-Form-Event-PreDiscountCreateEvent.html)
- - [`\Ibexa\Contracts\DiscountsCodes\Event\BeforeDiscountCodeApplyEvent`](https://doc.ibexa.co/en/5.0/api/php_api/php_api_reference/classes/Ibexa-Contracts-DiscountsCodes-Event-BeforeDiscountCodeApplyEvent.html)
-
-#### Twig functions
-
-The following Twig functions have been added in the v5.0 release:
-
-- [`ibexa_ai_config`](https://doc.ibexa.co/en/5.0/templating/twig_function_reference/ai_actions_twig_functions#ibexa_ai_config)
-- [`ibexa_render_discount_rule_type`](https://doc.ibexa.co/en/5.0/templating/twig_function_reference/discounts_twig_functions#ibexa_render_discount_rule_type)
-- [`ibexa_discounts_render_discount_badge`](https://doc.ibexa.co/en/5.0/templating/twig_function_reference/discounts_twig_functions#ibexa_discounts_render_discount_badge)
-- [`ibexa_get_original_price`](https://doc.ibexa.co/en/5.0/templating/twig_function_reference/discounts_twig_functions#ibexa_get_original_price)
-- [`ibexa_format_discount_value`](https://doc.ibexa.co/en/5.0/templating/twig_function_reference/discounts_twig_functions#ibexa_format_discount_value)
-- [`ibexa_discounts_is_active`](https://doc.ibexa.co/en/5.0/templating/twig_function_reference/discounts_twig_functions#ibexa_discounts_is_active)
-- [`ibexa_discounts_form_themes`](https://doc.ibexa.co/en/5.0/templating/twig_function_reference/discounts_twig_functions#ibexa_discounts_form_themes)
-- [`ibexa_discounts_can_edit`](https://doc.ibexa.co/en/5.0/templating/twig_function_reference/discounts_twig_functions#ibexa_discounts_can_edit)
-- [`ibexa_discounts_can_enable`](https://doc.ibexa.co/en/5.0/templating/twig_function_reference/discounts_twig_functions#ibexa_discounts_can_enable)
-- [`ibexa_discounts_can_disable`](https://doc.ibexa.co/en/5.0/templating/twig_function_reference/discounts_twig_functions#ibexa_discounts_can_disable)
-- [`ibexa_discounts_can_delete`](https://doc.ibexa.co/en/5.0/templating/twig_function_reference/discounts_twig_functions#ibexa_discounts_can_delete)
-
-#### Other upgrades
-
-This release brings other minor upgrades intended to improve the developer's experience:
-
-- To improve code clarity, reliability, and error detection, type hint declarations that specify the expected data type have been added in multiple places throughout the product
-- In anticipation of [changes coming with PHP 8.4](https://php.watch/versions/8.4/implicitly-marking-parameter-type-nullable-deprecated), implicit nullable type declarations have been replaced with nullable type declarations throughout the product code. It's recommended that you update your custom code in the same way
-- Developer experience has improved with capabilities offered by PHP in version 8.3. For example, the `AsTwigComponent` attribute [facilitates autoconfiguration](https://doc.ibexa.co/en/5.0/templating/components/#php-code) of Twig components
-- With protection against breaking changes and easier refactoring in mind, [TypeScript](https://www.typescriptlang.org/) can now be used to extend the Back Office
-- [[[= product_name_base =]] Rector package](https://github.com/ibexa/rector) has been introduced that is based on [Rector](https://github.com/rectorphp) and comes with additional rules for working with Ibexa code. You can use it to get rid of PHP code deprecations
-- [New icons](https://doc.ibexa.co/en/5.0/templating/twig_function_reference/icon_twig_functions#icons-reference) replace the ones found in previous versions and serve as a highlight of a future system design
-
-### Deprecations
-
-Refer to [Ibexa DXP v5.0 renames, deprecations and removals](https://doc.ibexa.co/en/5.0/release_notes/ibexa_dxp_v5.0_deprecations/) for a full list of changes and how they influence your project.
-
-### Full changelog
-
-[[% include 'snippets/release_50.md' %]]
-
-To update your application, see the [update instructions](https://doc.ibexa.co/en/5.0/update_and_migration/from_4.6/update_to_5.0/).
-
-[[= release_note_entry_end() =]]
-
-
diff --git a/docs/release_notes/ibexa_dxp_v5.0_deprecations.md b/docs/release_notes/ibexa_dxp_v5.0_deprecations.md
deleted file mode 100644
index 44d3b4c9b66..00000000000
--- a/docs/release_notes/ibexa_dxp_v5.0_deprecations.md
+++ /dev/null
@@ -1,690 +0,0 @@
-
-
-# Ibexa DXP v5.0 renames, deprecations and removals
-
-This page lists backwards compatibility breaks and deprecations introduced in Ibexa DXP v5.0.
-
-!!! tip "Upgrade to v5"
-
- For a guide on moving your project to v5.0,
- see [Update and migration instructions](../update_and_migration/from_4.6/update_to_5.0.md).
-
-Ibexa DXP v5.0 introduces further modifications to significant parts of the code to align with the ones introduced in previous versions.
-
-These changes include dropped packages, changing database table and column names, field identifiers, namespaces, function names, and others.
-
-## Dropped packages
-
-Ibexa DXP v5.0 no longer includes legacy Commerce packages.
-The solution has been replaced with [Commerce](commerce.md) that is included as standard and has been continuously developed since v4.4.
-
-Also, packages `compatibility-layer` and `icons` have been dropped.
-
-## Database table and column names
-
-A number of database table and column names have changed.
-If your custom code directly queries them, you need to update the code.
-
-| Old name | New name |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `ezbinaryfile` | `ibexa_binary_file` |
-| `ezcobj_state` | `ibexa_object_state` |
-| `ezcobj_state_group` | `ibexa_object_state_group` |
-| `ezcobj_state_group_language` | `ibexa_object_state_group_language` |
-| `ezcobj_state_language` | `ibexa_object_state_language` |
-| `ezcobj_state_link` | `ibexa_object_state_link` |
-| `ezcontent_language` | `ibexa_content_language` |
-| `ezcontentbrowsebookmark` | `ibexa_content_bookmark` |
-| `ezcontentclass` | `ibexa_content_type` |
-| `ezcontentclass_attribute` | `ibexa_content_type_field_definition` |
-| `ezcontentclass_attribute.contentclass_id` | `ibexa_content_type_field_definition.content_type_id` |
-| `ezcontentclass_attribute_ml` | `ibexa_content_type_field_definition_ml` |
-| `ezcontentclass_attribute_ml.contentclass_attribute_id` | `ibexa_content_type_field_definition_ml.content_type_field_definition_id` |
-| `ezcontentclass_classgroup` | `ibexa_content_type_group_assignment` |
-| `ezcontentclass_classgroup.contentclass_id` | `ibexa_content_type_group_assignment.content_type_id` |
-| `ezcontentclass_name` | `ibexa_content_type_name` |
-| `ezcontentclass_name.contentclass_id` | `ibexa_content_type_name.content_type_id` |
-| `ezcontentclassgroup` | `ibexa_content_type_group` |
-| `ezcontentobject` | `ibexa_content` |
-| `ezcontentobject.contentclass_id` | `ibexa_content.content_type_id` |
-| `ezcontentobject_attribute` | `ibexa_content_field` |
-| `ezcontentobject_attribute.contentclassattribute_id` | `ibexa_content_field.content_type_field_definition_id` |
-| `ezcontentobject_link` | `ibexa_content_relation` |
-| `ezcontentobject_link.contentclassattribute_id` | `ibexa_content_relation.content_type_field_definition_id` |
-| `ezcontentobject_name` | `ibexa_content_name` |
-| `ezcontentobject_trash` | `ibexa_content_trash` |
-| `ezcontentobject_tree` | `ibexa_content_tree` |
-| `ezcontentobject_version` | `ibexa_content_version` |
-| `ezdatebasedpublisher_scheduled_entries` | `ibexa_scheduler_scheduled_entries` |
-| `ezdfsfile` | `ibexa_dfs_file` |
-| `ezeditorialworkflow_markings` | `ibexa_workflow_markings` |
-| `ezeditorialworkflow_transitions` | `ibexa_workflow_transitions` |
-| `ezeditorialworkflow_workflows` | `ibexa_workflow_workflows` |
-| `ezform_field_attributes` | `ibexa_form_field_attributes` |
-| `ezform_field_validators` | `ibexa_form_field_validators` |
-| `ezform_fields` | `ibexa_form_fields` |
-| `ezform_form_submission_data` | `ibexa_form_form_submission_data` |
-| `ezform_form_submissions` | `ibexa_form_form_submissions` |
-| `ezform_forms` | `ibexa_form_forms` |
-| `ezgmaplocation` | `ibexa_map_location` |
-| `ezimagefile` | `ibexa_image_file` |
-| `ezkeyword` | `ibexa_keyword` |
-| `ezkeyword_attribute_link` | `ibexa_keyword_field_link` |
-| `ezmedia` | `ibexa_media` |
-| `eznode_assignment` | `ibexa_node_assignment` |
-| `eznotification` | `ibexa_notification` |
-| `ezpackage` | `ibexa_package` |
-| `ezpage_attributes` | `ibexa_page_attributes` |
-| `ezpage_blocks` | `ibexa_page_blocks` |
-| `ezpage_blocks_design` | `ibexa_page_blocks_design` |
-| `ezpage_blocks_visibility` | `ibexa_page_blocks_visibility` |
-| `ezpage_map_attributes_blocks` | `ibexa_page_map_attributes_blocks` |
-| `ezpage_map_blocks_zones` | `ibexa_page_map_blocks_zones` |
-| `ezpage_map_zones_pages` | `ibexa_page_map_zones_pages` |
-| `ezpage_pages` | `ibexa_page_pages` |
-| `ezpage_zones` | `ibexa_page_zones` |
-| `ezpolicy` | `ibexa_policy` |
-| `ezpolicy_limitation` | `ibexa_policy_limitation` |
-| `ezpolicy_limitation_value` | `ibexa_policy_limitation_value` |
-| `ezpreferences` | `ibexa_preferences` |
-| `ezrole` | `ibexa_role` |
-| `ezsearch_object_word_link` | `ibexa_search_object_word_link` |
-| `ezsearch_object_word_link.contentclass_id` | `ibexa_search_object_word_link.content_type_id` |
-| `ezsearch_object_word_link.contentclass_attribute_id` | `ibexa_search_object_word_link.content_type_field_definition_id` |
-| `ezsearch_word` | `ibexa_search_word` |
-| `ezsection` | `ibexa_section` |
-| `ezsite` | `ibexa_site` |
-| `ezsite_data` | `ibexa_site_data` |
-| `ezsite_public_access` | `ibexa_site_public_access` |
-| `ezurl` | `ibexa_url` |
-| `ezurl_object_link` | `ibexa_url_content_link` |
-| `ezurlalias` | `ibexa_url_alias` |
-| `ezurlalias_ml` | `ibexa_url_alias_ml` |
-| `ezurlalias_ml_incr` | `ibexa_url_alias_ml_incr` |
-| `ezurlwildcard` | `ibexa_url_wildcard` |
-| `ezuser` | `ibexa_user` |
-| `ezuser_accountkey` | `ibexa_user_accountkey` |
-| `ezuser_role` | `ibexa_user_role` |
-| `ezuser_setting` | `ibexa_user_setting` |
-
-## Field type identifiers
-
-Several field type identifiers have changed.
-
-| Old identifier (`legacy_alias`) | New identifier (`alias`) |
-|:--------------------------------|:--------------------------------|
-| `ezauthor` | `ibexa_author` |
-| `ezbinaryfile` | `ibexa_binaryfile` |
-| `ezboolean` | `ibexa_boolean` |
-| `ezcontentquery` | `ibexa_content_query` |
-| `ezcountry` | `ibexa_country` |
-| `ezdate` | `ibexa_date` |
-| `ezdatetime` | `ibexa_datetime` |
-| `ezemail` | `ibexa_email` |
-| `ezfloat` | `ibexa_float` |
-| `ezform` | `ibexa_form` |
-| `ezgmaplocation` | `ibexa_gmap_location` |
-| `ezimage` | `ibexa_image` |
-| `ezimageasset` | `ibexa_image_asset` |
-| `ezinteger` | `ibexa_integer` |
-| `ezisbn` | `ibexa_isbn` |
-| `ezkeyword` | `ibexa_keyword` |
-| `ezlandingpage` | `ibexa_landing_page` |
-| `ezmatrix` | `ibexa_matrix` |
-| `ezmedia` | `ibexa_media` |
-| `ezobjectrelation` | `ibexa_object_relation` |
-| `ezobjectrelationlist` | `ibexa_object_relation_list` |
-| `ezrichtext` | `ibexa_richtext` |
-| `ezselection` | `ibexa_selection` |
-| `ezstring` | `ibexa_string` |
-| `eztext` | `ibexa_text` |
-| `eztime` | `ibexa_time` |
-| `ezurl` | `ibexa_url` |
-| `ezuser` | `ibexa_user` |
-
-## PHP API classes and methods
-
-!!! note "[[= product_name_base =]] Rector"
-
- [[[= product_name_base =]] Rector package](https://github.com/ibexa/rector) has been introduced that is based on [Rector](https://github.com/rectorphp) and comes with additional rules for working with Ibexa code.
- You can use it to get rid of PHP code deprecations.
-
-### `ibexa/admin-ui`
-
-| Old FQN | New FQN / Comment |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `\Ibexa\Contracts\AdminUi\Permission\PermissionCheckerInterface::getContentCreateLimitations`| `\Ibexa\AdminUi\Permission\LimitationResolverInterface::getContentCreateLimitations` |
-| `\Ibexa\Contracts\AdminUi\Permission\PermissionCheckerInterface::getContentUpdateLimitations` | `\Ibexa\AdminUi\Permission\LimitationResolverInterface::getContentUpdateLimitations` |
-| `\Ibexa\Contracts\AdminUi\UniversalDiscovery\Provider::getRestFormat` | Removed |
-| `\Ibexa\AdminUi\Form\Type\Search\DateIntervalType` | `\Ibexa\AdminUi\Form\Type\Date\DateIntervalType`|
-| `\Ibexa\AdminUi\Siteaccess\SiteaccessResolverInterface::getSiteaccessesForLocation`| `\Ibexa\AdminUi\Siteaccess\SiteaccessResolverInterface::getSiteAccessesList`|
-| `\Ibexa\AdminUi\Siteaccess\SiteaccessResolverInterface::getSiteaccesses`| `\Ibexa\AdminUi\Siteaccess\SiteaccessResolverInterface::getSiteAccessesList`|
-| `\Ibexa\AdminUi\Specification\AbstractSpecification`| `\Ibexa\Contracts\Core\Specification\AbstractSpecification`|
-| `\Ibexa\AdminUi\Specification\AndSpecification` | `\Ibexa\Contracts\Core\Specification\AndSpecification` |
-| `\Ibexa\AdminUi\Specification\NotSpecification` | `\Ibexa\Contracts\Core\Specification\NotSpecification` |
-| `\Ibexa\AdminUi\Specification\OrSpecification` | `\Ibexa\Contracts\Core\Specification\OrSpecification` |
-| `\Ibexa\AdminUi\Specification\SpecificationInterface` | `\Ibexa\Contracts\Core\Specification\SpecificationInterface` |
-| `\Ibexa\AdminUi\Tab\Dashboard\PagerContentToDataMapper` | `\Ibexa\AdminUi\Tab\Dashboard\PagerLocationToDataMapper` |
-| `\Ibexa\AdminUi\Translation\Extractor\LimitationTranslationExtractor` | Removed |
-| `\Ibexa\AdminUi\Translation\Extractor\PolicyTranslationExtractor` | Removed |
-| `\Ibexa\AdminUi\UI\Dataset\ContentDraftsDataset` | `\Ibexa\AdminUi\UI\Dataset\ContentDraftListDataset` |
-| `\Ibexa\AdminUi\UI\Dataset\DatasetFactory::relations` | `\Ibexa\AdminUi\UI\Dataset\DatasetFactory::relationList` |
-| `\Ibexa\AdminUi\UI\Dataset\DatasetFactory::contentDrafts` | `\Ibexa\AdminUi\UI\Dataset\DatasetFactory::contentDraftList` |
-| `\Ibexa\AdminUi\UI\Value\ValueFactory::createRelation` | `\Ibexa\AdminUi\UI\Value\ValueFactory::createRelationItem` |
-| `\Ibexa\AdminUi\Validator\ValidationErrorsProcessor` | `\Ibexa\ContentForms\Validator\ValidationErrorsProcessor` |
-| `\Ibexa\AdminUi\Validator\Constraints\FieldTypeValidator` | `\Ibexa\ContentForms\Validator\Constraints\FieldTypeValidator` |
-
-### `ibexa/cart`
-
-| Old FQN | New FQN / Comment |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `\Ibexa\Cart\Money\MoneyFactory`| `\Ibexa\ProductCatalog\Money\IntlMoneyFactory`|
-
-### `ibexa/content-forms`
-
-| Old FQN | New FQN / Comment |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `\Ibexa\Bundle\ContentForms\Controller\UserRegisterController`| `\Ibexa\Bundle\User\Controller\UserRegisterController`|
-| `\Ibexa\ContentForms\User\View\UserRegisterConfirmView`| `\Ibexa\User\View\UserRegisterConfirmView`|
-| `\Ibexa\ContentForms\User\View\UserRegisterFormView`| `\Ibexa\User\View\UserRegisterFormView`|
-
-### `ibexa/core`
-
-Support for facet search has been dropped, use the `Aggregation` API instead.
-
-| Old FQN | New FQN / Comment |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `\Ibexa\Bundle\Core\DependencyInjection\Security\PolicyProvider\RepositoryPolicyProvider`| Removed |
-| `\Ibexa\Bundle\Core\Imagine\VariationPathGenerator`| `\Ibexa\Contracts\Core\Variation\VariationPathGenerator`|
-| `\Ibexa\ContentForms\User\View\UserRegisterFormView`| `\Ibexa\User\View\UserRegisterFormView`|
-| `/Ibexa\Bundle\Debug\Collector\PersistenceCacheCollector::getCount` | `\Ibexa\Bundle\Debug\Collector\PersistenceCacheCollector::getStats` |
-| `\Ibexa\Bundle\RepositoryInstaller\Installer\Installer::createConfiguration` | Deprecated |
-| `\Ibexa\Contracts\Core\FieldType\FieldStorage::getIndexData` | `\Ibexa\Contracts\Core\FieldType\Indexable` |
-| `\Ibexa\Contracts\Core\FieldType\BinaryBase\PathGenerator` | `\Ibexa\Contracts\Core\FieldType\BinaryBase\PathGeneratorInterface` |
-| `\Ibexa\Contracts\Core\IO\BinaryFile::$mimeType` | `\Ibexa\Core\IO\IOMetadataHandler::getMimeType` |
-| `\Ibexa\Contracts\Core\Persistence\Handler::beginTransaction` | `\Ibexa\Contracts\Core\Persistence\TransactionHandler::beginTransaction` |
-| `\Ibexa\Contracts\Core\Persistence\Handler::commit` | `\Ibexa\Contracts\Core\Persistence\TransactionHandler::commit` |
-| `\Ibexa\Contracts\Core\Persistence\Handler::rollback` | `\Ibexa\Contracts\Core\Persistence\TransactionHandler::rollback` |
-| `\Ibexa\Contracts\Core\Persistence\Bookmark\Bookmark::$name` | Removed |
-| `\Ibexa\Contracts\Core\Persistence\Bookmark\CreateStruct::$name` | Removed |
-| `\Ibexa\Contracts\Core\Persistence\Content\ContentInfo::STATUS_ARCHIVED` | `\Ibexa\Contracts\Core\Persistence\Content\ContentInfo::STATUS_TRASHED` |
-| `\Ibexa\Contracts\Core\Persistence\Content\ContentInfo::$isPublished` | Removed. Use `ContentInfo::$status` with value `STATUS_PUBLISHED`. |
-| `\Ibexa\Contracts\Core\Persistence\Content\LoadStruct` | Removed |
-| `\Ibexa\Contracts\Core\Persistence\Content\Location::$pathIdentificationString` | Removed |
-| `\Ibexa\Contracts\Core\Persistence\Content\Location\CreateStruct::$pathIdentificationString` | Removed |
-| `\Ibexa\Contracts\Core\Persistence\Content\Location\Handler::markSubtreeModified` | Removed |
-| `\Ibexa\Contracts\Core\Persistence\FieldType\IsEmptyValue` | Removed |
-| `\Ibexa\Contracts\Core\Persistence\User\Handler::loadPoliciesByUserId` | Removed |
-| `\Ibexa\Contracts\Core\Repository\ContentService::loadContentDrafts` | `\Ibexa\Contracts\Core\Repository\ContentService::loadContentDraftList` |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Location::SORT_FIELD_MODIFIED_SUBNODE` | Removed |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\FacetBuilder` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\LogicalOperator::getSpecifications` | Removed |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\Location\IsMainLocation::createFromQueryBuilder` | Removed. Use the constructor directly. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\Location\Priority::createFromQueryBuilder` | Removed. Use the constructor directly. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\FacetBuilder\ContentTypeFacetBuilder` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\FacetBuilder\CriterionFacetBuilder` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\FacetBuilder\DateRangeFacetBuilder` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\FacetBuilder\FieldFacetBuilder` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\FacetBuilder\FieldRangeFacetBuilder` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\FacetBuilder\Location` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\FacetBuilder\LocationFacetBuilder` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\FacetBuilder\SectionFacetBuilder` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\FacetBuilder\TermFacetBuilder` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\FacetBuilder\UserFacetBuilder` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Query\FacetBuilder\Location\LocationFacetBuilder` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\Facet` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\SearchResult::$facets` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\SearchResult::$spellSuggestion` | `\Ibexa\Contracts\Core\Repository\Values\Content\Search\SearchResult::$spellcheck` |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\Facet\ContentTypeFacet` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\Facet\CriterionFacet` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\Facet\DateRangeFacet` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\Facet\FieldFacet` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\Facet\FieldRangeFacet` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\Facet\LocationFacet` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\Facet\RangeFacetEntry` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\Facet\SectionFacet` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\Facet\TermFacet` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Search\Facet\UserFacet` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Contracts\Core\Repository\Values\Content\Trash\SearchResult::$count` | `\Ibexa\Contracts\Core\Repository\Values\Content\Trash\SearchResult::$totalCount` |
-| `\Ibexa\Contracts\Core\Repository\Values\ContentType\ContentType::@$isContainer` | `\Ibexa\Contracts\Core\Repository\Values\ContentType\ContentType::isContainer` |
-| `\Ibexa\Contracts\Core\User\Identity` | Removed. Use the `FOSHttpCacheBundle` user context feature. |
-| `\Ibexa\Core\Event\UserService` | Listen to `BeforeUpdateUserPasswordEvent` instead of `BeforeUpdateUserEvent`. |
-| `\Ibexa\Core\Event\UserService` | Listen to `UpdateUserPasswordEvent` instead of `UpdateUserEvent`. |
-| `\Ibexa\Core\FieldType\GatewayBasedStorage` | `\Ibexa\Contracts\Core\FieldType\GatewayBasedStorage` |
-| `\Ibexa\Core\FieldType\StorageGateway` | `\Ibexa\Contracts\Core\FieldType\StorageGatewayInterface` |
-| `\Ibexa\Core\FieldType\Image\Value::@$path` | Equivalent to `$id` or `$inputUri`, depending on which one is set. |
-| `\Ibexa\Core\FieldType\Image\Value::fromString` | `\Ibexa\Core\FieldType\FieldType::acceptValue` |
-| `\Ibexa\Core\Helper\FieldHelper::getFieldDefinition` | If content exists, use `$content->getContentType()->getFieldDefinition($identifier)`. |
-| `\Ibexa\Core\Helper\PreviewLocationProvider::loadMainLocation` | `\Ibexa\Core\Helper\PreviewLocationProvider::loadMainLocationByContent` |
-| `\Ibexa\Core\IO\IOServiceInterface::getExternalPath` | `\Ibexa\Core\IO\IOServiceInterface::loadBinaryFileByUri` |
-| `\Ibexa\Core\IO\IOServiceInterface::getInternalPath` | Removed. Use the `uri` property. |
-| `\Ibexa\Core\IO\MetadataHandler` | Removed |
-| `\Ibexa\Core\IO\MetadataHandler\ImageSize` | Removed |
-| `\Ibexa\Core\IO\Values\BinaryFile::$mimeType` | `\Ibexa\Core\IO\IOServiceInterface::getMimeType` |
-| `\Ibexa\Core\MVC\Symfony\MVCEvents::CACHE_CLEAR_CONTENT` | Removed |
-| `\Ibexa\Core\MVC\Symfony\Event\ContentCacheClearEvent` | Removed |
-| `\Ibexa\Core\MVC\Symfony\Locale\LocaleConverterInterface::convertToEz` | `\Ibexa\Core\MVC\Symfony\Locale\LocaleConverterInterface::convertToRepository` |
-| `\Ibexa\Core\MVC\Symfony\SiteAccess\Matcher\Regex\Host` | Removed |
-| `\Ibexa\Core\MVC\Symfony\SiteAccess\Matcher\Regex\URI` | Removed |
-| `\Ibexa\Core\MVC\Symfony\View\Provider\Content` | Removed |
-| `\Ibexa\Core\MVC\Symfony\View\Provider\Location` | Removed |
-| `\Ibexa\Core\Persistence\Cache\PersistenceLogger::getCount` | `\Ibexa\Core\Persistence\Cache\PersistenceLogger::getStats` |
-| `\Ibexa\Core\Persistence\Legacy\Handler::beginTransaction` | Removed. Use `\Ibexa\Contracts\Core\Persistence\TransactionHandler\TransactionHandler::beginTransaction`. |
-| `\Ibexa\Core\Persistence\Legacy\Handler::commit` | Removed. Use `\Ibexa\Contracts\Core\Persistence\TransactionHandler\TransactionHandler::commit`. |
-| `\Ibexa\Core\Persistence\Legacy\Handler::rollback` | Removed. Use `\Ibexa\Contracts\Core\Persistence\TransactionHandler\TransactionHandler::rollback`. |
-| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\AuthorConverter::create` | Removed. Use the default constructor. |
-| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\BinaryFileConverter::create` | Removed. Use the default constructor. |
-| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\CheckboxConverter::create` | Removed. Use the default constructor. |
-| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\CountryConverter::create` | Removed. Use the default constructor. |
-| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\DateAndTimeConverter::create` | Removed. Use the default constructor. |
-| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter` | Removed the `timestamp` property. |
-| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\DateConverter` | Removed the `timestamp` property. |
-| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\DateConverter::create` | Removed. Use the default constructor. |
-| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\EmailAddressConverter::create` | Removed. Use the default constructor. |
-| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\FloatConverter::create` | Removed. Use the default constructor. |
-| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\IntegerConverter::create` | Removed. Use the default constructor. |
-| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\ISBNConverter::create` | Removed. Use the default constructor. |
-| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\KeywordConverter::create` | Removed. Use the default constructor. |
-| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\MapLocationConverter::create` | Removed. Use the default constructor. |
-| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\MediaConverter::create` | Removed. Use the default constructor. |
-| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\NullConverter::create` | Removed. Use the default constructor. |
-| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\RelationConverter::create` | Removed. Use the default constructor. |
-| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\SelectionConverter::create` | Removed. Use the default constructor. |
-| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\TextBlockConverter::create` | Removed. Use the default constructor. |
-| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\TextLineConverter::create` | Removed. Use the default constructor. |
-| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\TimeConverter::create` | Removed. Use the default constructor. |
-| `\Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\UrlConverter::create` | Removed. Use the default constructor. |
-| `\Ibexa\Core\Persistence\Legacy\Content\Language\MaskGenerator::generateLanguageMask` | `\Ibexa\Core\Persistence\Legacy\Content\Language\MaskGenerator::generateLanguageMaskFromLanguageCodes` |
-| `\Ibexa\Core\Repository\PermissionsCriterionHandler` | Removed |
-| `\Ibexa\Core\Repository\SectionService::countAssignedContents` | Deprecated. Use `SearchService` with `Section` criterion. |
-| `\Ibexa\Core\Repository\Helper\NameSchemaService` | `\Ibexa\Contracts\Core\Repository\NameSchema\NameSchemaServiceInterface` |
-| `\Ibexa\Core\Repository\Helper\RoleDomainMapper` | Removed |
-| `\Ibexa\Core\Repository\Mapper\ContentTypeDomainMapper::buildSPIFieldDefinitionUpdate` | `\Ibexa\Core\Repository\Mapper\ContentTypeDomainMapper::buildSPIFieldDefinitionFromUpdateStruct` |
-| `\Ibexa\Core\Repository\Mapper\ContentTypeDomainMapper::buildSPIFieldDefinitionCreate` | `\Ibexa\Core\Repository\Mapper\ContentTypeDomainMapper::buildSPIFieldDefinitionFromCreateStruct` |
-| `\Ibexa\Core\Repository\User\PasswordHashServiceInterface` | `\Ibexa\Contracts\Core\Repository\PasswordHashService` |
-| `\Ibexa\Core\Search\Common\FieldNameResolver::getFieldNamesget` | `\Ibexa\Core\Search\Common\FieldNameResolver::getFieldTypes` |
-| `\Ibexa\Core\Search\Common\IncrementalIndexer::createSearchIndex` | Removed |
-| `\Ibexa\Tests\Integration\Core\Repository\BaseTest::isVersion4` | Removed |
-| `\Ibexa\Tests\Integration\Core\Repository\SearchServiceTest::testDeprecatedCriteriaProperty` | Removed |
-| `\Ibexa\Tests\Core\Repository\Service\Mock\PermissionsCriterionHandlerTest` | Removed |
-| `\Ibexa\Contracts\Core\Repository\Values\Translation` | Implementations must implement `\Stringable` interface. |
-| `\Ibexa\Bundle\Core\ApiLoader\RepositoryConfigurationProvider` | Deprecated. Use `\Ibexa\Contracts\Core\Container\ApiLoader\RepositoryConfigurationProviderInterface`. |
-| `\Ibexa\Bundle\Core\ApiLoader\RepositoryFactory` | Deprecated. Use `\Ibexa\Core\Base\Container\ApiLoader\RepositoryFactory`.|
-
-!!! note "Dropped single colon notation"
-
- [[= product_name_base =]]-named controllers can no longer be referenced using a single-colon notation.
- For example, `ibexa_content:viewAction` must be changed to `ibexa_content::viewAction`.
-
- The change affects the following controllers:
-
- - ibexa_content
- - ibexa_query
- - ibexa_query_render
- - ibexa.controller.content.preview
-
-### ibexa/corporate-account
-
-| Old FQN | New FQN / Comment |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `\Ibexa\Bundle\CorporateAccount\Controller\ApplicationController\PersistenceCacheCollector::alreadyExistsAction`| Removed |
-
-### ibexa/design-engine
-
-| Old FQN | New FQN / Comment |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `\Ibexa\DesignEngine\Templating\TemplateNameResolverInterface::EZ_DESIGN_NAMESPACE`| Removed. Use the `\Ibexa\Contracts\DesignEngine\DesignAwareInterface::DESIGN_NAMESPACE` constant. |
-
-### ibexa/elasticsearch
-
-Support for facets in `ibexa/elasticsearch` has been dropped, use the `Aggregation` API instead.
-
-| Old FQN | New FQN / Comment |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `\Ibexa\Contracts\Elasticsearch\Query\FacetBuilderVisitor` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Contracts\Elasticsearch\Query\FacetResultExtractor` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Elasticsearch\Query\FacetBuilderVisitor\AbstractTermsVisitor` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Elasticsearch\Query\FacetBuilderVisitor\ContentTypeVisitor` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Elasticsearch\Query\FacetBuilderVisitor\DispatcherVisitor` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Elasticsearch\Query\FacetBuilderVisitor\FilteredFacetVisitorDecorator` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Elasticsearch\Query\FacetBuilderVisitor\GlobalFacetVisitorDecorator` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Elasticsearch\Query\FacetBuilderVisitor\SectionVisitor` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Elasticsearch\Query\FacetBuilderVisitor\UserVisitor` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Elasticsearch\Query\ResultExtractor\FacetResultExtractor\AbstractTermsResultExtractor` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Elasticsearch\Query\ResultExtractor\FacetResultExtractor\ContentTypeResultExtractor` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Elasticsearch\Query\ResultExtractor\FacetResultExtractor\DispatcherResultExtractor` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Elasticsearch\Query\ResultExtractor\FacetResultExtractor\FilteredFacetResultExtractorDecorator` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Elasticsearch\Query\ResultExtractor\FacetResultExtractor\GlobalFacetResultExtractorDecorator` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Elasticsearch\Query\ResultExtractor\FacetResultExtractor\SectionResultExtractor` | Removed. Use the `Aggregation` API. |
-| `\Ibexa\Elasticsearch\Query\ResultExtractor\FacetResultExtractor\UserResultExtractor` | Removed. Use the `Aggregation` API. |
-
-### ibexa/fieldtype-page
-
-| Old FQN | New FQN / Comment |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `\Ibexa\Bundle\FieldTypePage\DependencyInjection\Compiler\AbstractConfigurationAwareCompilerPass::EXTENSION_CONFIG_KEY` | Removed. Use the `\Ibexa\Bundle\FieldTypePage\DependencyInjection\IbexaFieldTypePageExtension::EXTENSION_NAME` constant. |
-| `\Ibexa\Bundle\FieldTypePage\DependencyInjection\Compiler\BlockDefinitionConfigurationCompilerPass::EXTENSION_CONFIG_KEY` | Removed. Use the `\Ibexa\Bundle\FieldTypePage\DependencyInjection\IbexaFieldTypePageExtension::EXTENSION_NAME` constant. |
-| `\Ibexa\FieldTypePage\FieldType\Page\Block\Renderer\Event\Listener\PreviewTemplateEventSubscriber` | Removed |
-| `\Ibexa\FieldTypePage\ScheduleBlock\ScheduleService::distributeItems` | Removed |
-
-### ibexa/fieldtype-query
-
-| Old FQN | New FQN / Comment |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `\Ibexa\FieldTypeQuery\QueryFieldPaginationService` | Removed |
-| `\Ibexa\FieldTypeQuery\Persistence\Legacy\Content\FieldValue\Converter\QueryConverter::create` | Removed. Use the default constructor. |
-
-### ibexa/fieldtype-richtext
-
-| Old FQN | New FQN / Comment |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `\Ibexa\FieldTypeRichText\Translation\Extractor\OnlineEditorCustomAttributesExtractor` | Removed |
-| `\Ibexa\FieldTypeQuery\Persistence\Legacy\Content\FieldValue\Converter\QueryConverter::create` | Removed. Use the default constructor. |
-
-!!! note "Missing custom tag configuration error"
-
- If the stored RichText record includes any custom tags that aren’t configured or recognized, saving the content will cause a validation error.
-
-### ibexa/form-builder
-
-| Old FQN | New FQN / Comment |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `\Ibexa\Bundle\FormBuilder\DependencyInjection\Configuration::TREE_ROOT` | Removed. Use the `\Ibexa\Bundle\FormBuilder\DependencyInjection\IbexaFormBuilderExtension::EXTENSION_NAME` constant. |
-| `\Ibexa\FormBuilder\FieldType\Storage\FormStorage::getIndexData` | Removed |
-
-### ibexa/graphql
-
-| Old FQN | New FQN / Comment |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `\Ibexa\GraphQL\Schema\ImagesVariationsBuilder` | Removed |
-| `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::domainContentCollectionField` | `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::itemConnectionField` |
-| `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::domainContentName` | `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::itemName` |
-| `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::domainContentConnection` | `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::itemConnectionName` |
-| `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::domainContentCreateInputName` | `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::itemCreateInputName` |
-| `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::domainContentUpdateInputName` | `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::itemUpdateInputName` |
-| `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::domainContentTypeName` | `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::itemUpdateInputName` |
-| `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::domainContentField` | `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::itemField` |
-| `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::domainMutationCreateContentField` | `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::itemMutationCreateItemField` |
-| `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::domainMutationUpdateContentField` | `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::itemMutationUpdateItemField` |
-| `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::domainGroupName` | `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::itemGroupName` |
-| `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::domainGroupTypesName` | `\Ibexa\GraphQL\Schema\Domain\Content\NameHelper::itemGroupTypesName` |
-| `\Ibexa\GraphQL\Schema\Domain\Content\Mapper\FieldDefinition\FieldDefinitionArgsBuilderMapper` | `\Ibexa\Contracts\GraphQL\Schema\Domain\Content\Mapper\FieldDefinition\FieldDefinitionMapper` |
-| `\Ibexa\GraphQL\Schema\Domain\Content\Mapper\FieldDefinition\FieldDefinitionInputMapper` | `\Ibexa\Contracts\GraphQL\Schema\Domain\Content\Mapper\FieldDefinition\FieldDefinitionMapper` |
-
-### ibexa/measurement
-
-!!! note "Dropped `measurement` product attribute"
-
- The deprecated product attribute `measurement` has been removed.
- The change does not affect the [measurement field type](measurementfield.md).
-
-### ibexa/migrations
-
-| Old FQN | New FQN / Comment |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `\Ibexa\Migration\ValueObject\ContentType\Matcher::CONTENT_TYPE_IDENTIFIER` | Removed. Use the `\Ibexa\Migration\StepExecutor\ContentType\IdentifierFinder::CONTENT_TYPE_IDENTIFIER` constant. |
-
-### ibexa/product-catalog
-
-| Old FQN | New FQN / Comment |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `\Ibexa\ProductCatalog\Bridge` | Migrate data to a local product catalog. |
-
-### ibexa/page-builder
-
-| Old FQN | New FQN / Comment |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `\Ibexa\Bundle\PageBuilder\DependencyInjection\IbexaPageBuilderExtension::SESSION_KEY_SITEACCESS` | Removed |
-| `\Ibexa\PageBuilder\PageBuilder\PreviewLanguageCodeResolver` | Removed |
-| `\Ibexa\PageBuilder\Siteaccess\SiteaccessService::resolveSiteAccessForLocation` | `\Ibexa\AdminUi\Siteaccess\SiteaccessResolverInterface::getSiteAccessesListForLocation` |
-| `\Ibexa\PageBuilder\Siteaccess\SiteaccessService::resolveSiteAccessForContent` | `\Ibexa\Contracts\PageBuilder\Siteaccess\SiteAccessResolver::resolveSiteAccessForContent` |
-| `\Ibexa\PageBuilder\Siteaccess\SiteaccessService::resolveSiteAccessBasedOnLanguage` | Removed |
-
-### ibexa/rest
-
-| Old FQN | New FQN / Comment |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `\Ibexa\Bundle\Rest\EventListener\CsrfListener::isLoginRequest` | Add `csrf_protection: false` attribute to route definition. |
-| `\Ibexa\Bundle\Rest\EventListener\CsrfListener::isSessionRoute` | Add `csrf_protection: false` attribute to route definition. |
-| `\Ibexa\Bundle\Rest\EventListener\RequestListener::REST_PREFIX_PATTERN` | Use `\Ibexa\Contracts\Rest\UriParser\UriParserInterface::isRestRequest` function. |
-| `\Ibexa\Bundle\Rest\EventListener\RequestListener::hasRestPrefix` | Use `\Ibexa\Contracts\Rest\UriParser\UriParserInterface::isRestRequest` function. |
-| `\Ibexa\Bundle\Rest\RequestParser\Router` | `\Ibexa\Contracts\Rest\UriParser\UriParserInterface` |
-| `\Ibexa\Contracts\Rest\Output\Generator::generateMediaType` | `\Ibexa\Contracts\Rest\Output\Generator::generateMediaTypeWithVendor` |
-| `\Ibexa\Rest\Output\FieldTypeSerializer::serializeFieldValue` | `\Ibexa\Rest\Output\FieldTypeSerializer::serializeContentFieldValue` |
-| `\Ibexa\Rest\Server\Controller\Content::createView` | Forwards the request to the new `/views` location, but returns a 301. |
-| `\Ibexa\Rest\Server\Controller\User::$csrfTokenStorage` | Removed |
-| `\Ibexa\Rest\Server\Controller\User::$sessionController` | Removed |
-| `\Ibexa\Rest\Server\Controller\User::createSession` | `\Ibexa\Rest\Server\Controller\SessionController::refreshSessionAction` |
-| `\Ibexa\Rest\Server\Controller\User::refreshSession` | `\Ibexa\Rest\Server\Controller\SessionController::refreshSessionAction` |
-| `\Ibexa\Rest\Server\Controller\User::deleteSession` | `\Ibexa\Rest\Server\Controller\SessionController::refreshSessionAction` |
-
-To create a [JWT token](rest_api_authentication.md#jwt-authentication), XML isn't supported anymore.
-
-### ibexa/scheduler
-
-| Old FQN | New FQN / Comment |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `\Ibexa\Bundle\Rest\EventListener\CsrfListener::isLoginRequest` | Add `csrf_protection: false` attribute to route definition. |
-
-### ibexa/site-factory
-
-| Old FQN | New FQN / Comment |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `\Ibexa\Bundle\SiteFactory\DependencyInjection\Configuration::TREE_ROOT` | Removed. Use the `\Ibexa\Bundle\SiteFactory\DependencyInjection\IbexaSiteFactoryExtension::EXTENSION_NAME` constant. |
-| `\Ibexa\SiteFactory\Event\EventDispatcher` | Removed |
-| `\Ibexa\SiteFactory\ServiceDecorator\SiteServiceDecorator` | Removed |
-| `\Ibexa\SiteFactory\ServiceEvent\Events\BeforeCreateSiteEvent` | Removed |
-| `\Ibexa\SiteFactory\ServiceEvent\Events\BeforeDeleteSiteEvent` | Removed |
-| `\Ibexa\SiteFactory\ServiceEvent\Events\BeforeUpdateSiteEvent` | Removed |
-| `\Ibexa\SiteFactory\ServiceEvent\Events\CreateSiteEvent` | Removed |
-| `\Ibexa\SiteFactory\ServiceEvent\Events\DeleteSiteEvent` | Removed |
-| `\Ibexa\SiteFactory\ServiceEvent\Events\UpdateSiteEvent` | Removed |
-
-### ibexa/solr
-
-Support for facet search has been dropped, use the `Aggregation` API instead.
-
-| Old FQN | New FQN / Comment |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `\Ibexa\Solr\Handler::$resultExtractor` | Use `$contentResultExtractor` or `$locationResultExtractor`. |
-| `\Ibexa\Solr\Gateway\UpdateSerializer` | `\Ibexa\Solr\Gateway\UpdateSerializer\XmlUpdateSerializer` |
-| `\Ibexa\Solr\Query\FacetBuilderVisitor` | Use `Aggregation API`. |
-| `\Ibexa\Solr\Query\FacetFieldVisitor` | Use `Aggregation API`. |
-| `\Ibexa\Solr\Query\Common\FacetBuilderVisitor\Aggregate` | Use `Aggregation API`. |
-| `\Ibexa\Solr\Query\Common\FacetBuilderVisitor\ContentType` | Use `Aggregation API`. |
-| `\Ibexa\Solr\Query\Common\FacetBuilderVisitor\Section` | Use `Aggregation API`. |
-| `\Ibexa\Solr\Query\Common\FacetBuilderVisitor\User` | Use `Aggregation API`. |
-| `\Ibexa\Solr\Query\Content\CriterionVisitor\Field` | `\Ibexa\Solr\Query\Common\CriterionVisitor\Field` |
-
-### ibexa/storefront
-
-| Old FQN | New FQN / Comment |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `\Ibexa\Contracts\Storefront\Repository\TaxonomyTreeServiceInterface::getPath` | `\Ibexa\Contracts\Taxonomy\Service\TaxonomyServiceInterface::getPath` |
-
-### ibexa/system-info
-
-| Old FQN | New FQN / Comment |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `\Ibexa\Bundle\SystemInfo\SystemInfo\Collector\IbexaSystemInfoCollector::CONTENT_PACKAGES` | Removed. Use the `\Ibexa\Bundle\SystemInfo\SystemInfo\Collector\IbexaSystemInfoCollector::HEADLESS_PACKAGES` constant. |
-| `\Ibexa\Bundle\SystemInfo\SystemInfo\Collector\IbexaSystemInfoCollector::ENTERPRISE_PACKAGES` | Removed. Use `IbexaSystemInfoCollector::EXPERIENCE_PACKAGES` or `IbexaSystemInfoCollector::HEADLESS_PACKAGES` constant. |
-| `\Ibexa\Bundle\SystemInfo\SystemInfo\Value\IbexaSystemInfo::$stability` | `\Ibexa\Bundle\SystemInfo\SystemInfo\Value\IbexaSystemInfo` is considered internal. |
-
-### ibexa/workflow
-
-| Old FQN | New FQN / Comment |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `\Ibexa\Contracts\Workflow\Service\WorkflowServiceInterface::loadWorkflowMetadataOriginatedByUser` | Removed |
-| `\Ibexa\Contracts\Workflow\Service\WorkflowServiceInterface::loadAllWorkflowMetadata` | Removed |
-
-## PHP method parameters
-
-The `ValueObject` argument was replaced by `object` in a number of interfaces in `core` and `migrations` package.
-In `core`, this change improves extensibility by enabling the use of custom object types to be interpreted by `PermissionResolver`.
-In `migrations`, it makes it easier to integrate custom data types, especially when using `AbstractStepFactory`.
-
-!!! note "Change examples"
-
- Below the lists you may find examples of changes in those interfaces or classes that you are most likely to use in your work.
-
-### ibexa/core
-
-| PHP Interface or class | Methods |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `Ibexa\Contracts\Core\Repository\PermissionResolver` | `canUser`, `lookupLimitations` |
-| `Ibexa\Contracts\Core\Limitation/TargetAwareType` | `evaluate` |
-| `Ibexa\Contracts\Core\Limitation/Type` | `evaluate` |
-| `Ibexa\Core\Limitation\BlockingLimitationType` | `evaluate` |
-| `Ibexa\Core\Limitation\ChangeOwnerLimitationType` | `evaluate` |
-| `Ibexa\Core\Limitation\ContentTypeLimitationType` | `evaluate` |
-| `Ibexa\Core\Limitation\LanguageLimitationType` | `evaluate` |
-| `Ibexa\Core\Limitation\LocationLimitationType` | `evaluate` |
-| `Ibexa\Core\Limitation\MemberOfLimitationType` | `evaluate` |
-| `Ibexa\Core\Limitation\NewObjectStateLimitationType` | `evaluate` |
-| `Ibexa\Core\Limitation\NewSectionLimitationType` | `evaluate` |
-| `Ibexa\Core\Limitation\ObjectStateLimitationType` | `evaluate` |
-| `Ibexa\Core\Limitation\OwnerLimitationType` | `evaluate` |
-| `Ibexa\Core\Limitation\ParentContentTypeLimitationType` | `evaluate` |
-| `Ibexa\Core\Limitation\ParentDepthLimitationType` | `evaluate` |
-| `Ibexa\Core\Limitation\ParentOwnerLimitationType` | `evaluate` |
-| `Ibexa\Core\Limitation\ParentUserGroupLimitationType` | `evaluate` |
-| `Ibexa\Core\Limitation\RoleLimitationType` | `evaluate` |
-| `Ibexa\Core\Limitation\SectionLimitationType` | `evaluate` |
-| `Ibexa\Core\Limitation\SiteAccessLimitationType` | `evaluate` |
-| `Ibexa\Core\Limitation\StatusLimitationType` | `evaluate` |
-| `Ibexa\Core\Limitation\SubtreeLimitationType` | `evaluate` |
-| `Ibexa\Core\Limitation\UserGroupLimitationType` | `evaluate` |
-| `Ibexa\Core\Repository\Permission\CachedPermissionService` | `canUser`, `lookupLimitations` |
-| `Ibexa\Core\Repository\Permission\PermissionResolver` | `canUser`, `lookupLimitations` |
-
-??? note "Changes in `src/contracts/Repository/PermissionResolver.php`"
-
- 
-
-### ibexa/migrations
-
-| PHP Interface or class | Methods |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `Ibexa\Contracts\Migration\StepExecutor\AbstractStepExecutor` | `doCollectReferences`, `handleActions` |
-| `Ibexa\Migration\Generator\Content\StepBuilder\Create` | `build` |
-| `Ibexa\Migration\Generator\Content\StepBuilder\Delete` | `build` |
-| `Ibexa\Migration\Generator\Content\StepBuilder\Factory` | `prepareLogMessage` |
-| `Ibexa\Migration\Generator\Content\StepBuilder\Update` | `build` |
-| `Ibexa\Migration\Generator\ContentTypeGroup\StepBuilder\Create` | `build` |
-| `Ibexa\Migration\Generator\ContentTypeGroup\StepBuilder\Delete` | `build` |
-| `Ibexa\Migration\Generator\ContentTypeGroup\StepBuilder\Factory` | `prepareLogMessage` |
-| `Ibexa\Migration\Generator\ContentTypeGroup\StepBuilder\Update` | `build` |
-| `Ibexa\Migration\Generator\Language\StepBuilder\Create` | `build` |
-| `Ibexa\Migration\Generator\Language\StepBuilder\Factory` | `prepareLogMessage` |
-| `Ibexa\Migration\Generator\Location\StepBuilder\Factory` | `prepareLogMessage` |
-| `Ibexa\Migration\Generator\Location\StepBuilder\Update` | `build` |
-| `Ibexa\Migration\Generator\ObjectState\StepBuilder\Create` | `build` |
-| `Ibexa\Migration\Generator\ObjectState\StepBuilder\Factory` | `prepareLogMessage` |
-| `Ibexa\Migration\Generator\ObjectStateGroup\StepBuilder\Create` | `build` |
-| `Ibexa\Migration\Generator\ObjectStateGroup\StepBuilder\Factory` | `prepareLogMessage` |
-| `Ibexa\Migration\Generator\Role\StepBuilder\RoleCreateStepBuilder` | `build` |
-| `Ibexa\Migration\Generator\Role\StepBuilder\RoleDeleteStepBuilder` | `build` |
-| `Ibexa\Migration\Generator\Role\StepBuilder\RoleStepFactory` | `prepareLogMessage` |
-| `Ibexa\Migration\Generator\Role\StepBuilder\RoleUpdateStepBuilder` | `build` |
-| `Ibexa\Migration\Generator\Section\StepBuilder\Create` | `build` |
-| `Ibexa\Migration\Generator\Section\StepBuilder\Factory` | `prepareLogMessage` |
-| `Ibexa\Migration\Generator\Section\StepBuilder\Update` | `build` |
-| `Ibexa\Migration\Generator\StepBuilder\AbstractStepFactory` | `create`, `log`, `prepareLogMessage` |
-| `Ibexa\Migration\Generator\StepBuilder\ContentTypeCreateStepBuilder` | `build` |
-| `Ibexa\Migration\Generator\StepBuilder\ContentTypeDeleteStepBuilder` | `build` |
-| `Ibexa\Migration\Generator\StepBuilder\ContentTypeStepFactory` | `prepareLogMessage` |
-| `Ibexa\Migration\Generator\StepBuilder\ContentTypeUpdateStepBuilder` | `build` |
-| `Ibexa\Migration\Generator\StepBuilder\LoggerContentTypeCreateStepBuilder` | `build` |
-| `Ibexa\Migration\Generator\StepBuilder\StepBuilderInterface` | `build` |
-| `Ibexa\Migration\Generator\StepBuilder\StepFactoryInterface` | `build` |
-| `Ibexa\Migration\Generator\User\StepBuilder\Create` | `build` |
-| `Ibexa\Migration\Generator\User\StepBuilder\Factory` | `prepareLogMessage` |
-| `Ibexa\Migration\Generator\User\StepBuilder\Update` | `build` |
-| `Ibexa\Migration\Generator\UserGroup\StepBuilder\Create` | `build` |
-| `Ibexa\Migration\Generator\UserGroup\StepBuilder\Delete` | `build` |
-| `Ibexa\Migration\Generator\UserGroup\StepBuilder\Factory` | `prepareLogMessage` |
-| `Ibexa\Migration\Generator\UserGroup\StepBuilder\Update` | `build` |
-| `Ibexa\Migration\StepExecutor\ReferenceDefinition\Resolver` | `resolve` |
-| `Ibexa\Migration\StepExecutor\ReferenceDefinition\ResolverInterface` | `resolve` |
-
-??? note "Changes in `Ibexa\Migration\Generator\StepBuilder\StepFactoryInterface`"
-
- 
-
-??? note "Changes in `Ibexa\Migration\StepExecutor\ReferenceDefinition\ResolverInterface`"
-
- 
-
-??? note "Changes in `Ibexa\Migration\Generator\StepBuilder\AbstractStepFactory`"
-
- 
-
-## Services
-
-The following service definitions have been removed:
-
-| Service name | Comment |
-|:------------------------------------------------------|:------------------------------------------------------------------------|
-| `ibexa.cart.number_formatter.currency.factory` | Removed |
-
-## JavaScript classes and functions
-
-|Old class or function|New class or function|
-|:----|:----|
-| `formatLine` const in `/src/bundle/Resources/public/js/scripts/helpers/form.error.helper.js` | Removed |
-| `parseAll` const in `/src/bundle/Resources/public/js/scripts/helpers/middle.ellipsis.js` | Removed |
-| `fileSizeToString` const in `src/bundle/ui-dev/src/modules/multi-file-upload/helpers/text.helper.js` | Use `fileSizeToString` function from `/src/bundle/ui-dev/src/modules/common/helpers/text.helper.js`. |
-| `src/bundle/ui-dev/src/modules/common/components/backdrop/backdrop.js` | Use the `ibexa.core.Backdrop` component. |
-| `src/bundle/ui-dev/src/modules/page-builder/components/block/sidebar.block.js` | `src/bundle/ui-dev/src/modules/page-builder/components/block/block.js` |
-| `src/bundle/ui-dev/src/modules/page-builder/components/block/sidebar.blocks.group.js` | `src/bundle/ui-dev/src/modules/page-builder/components/block/blocks.group.js` |
-| `src/bundle/ui-dev/src/modules/page-builder/components/sidebar/sidebar.js` | `src/bundle/ui-dev/src/modules/page-builder/components/toolbox.js` |
-| `src/bundle/ui-dev/src/modules/tree-builder/components/indentation-vertical/indentation.vertical.js)`| `src/bundle/ui-dev/src/modules/tree-builder/components/indentation-horizontal/indentation.horizontal.js` |
-| `src/bundle/ui-dev/src/modules/tree-builder/components/portal-provider/portal.provider.js` | `tree-builder/src/bundle/ui-dev/src/modules/tree-builder/components/portal/portal.js` |
-| `src/bundle/ui-dev/src/modules/tree-builder/hooks/usePortal.js` | `tree-builder/src/bundle/ui-dev/src/modules/tree-builder/components/portal/portal.js` |
-
-## Configuration keys
-
-| Old name | New name |
-|:----|:----|
-| `ibexa.system.*.database.*` | `ibexa.repositories` |
-| `ibexa.system.*.pagelayout` | `ibexa.system.*.page_layout` |
-| `ibexa.system.*.session_name` | `ibexa.system.*.session.name` |
-| `ibexa.site_access.config.default.user_registration.group_id` | `ibexa.site_access.config.default.user_registration.group_remote_id` |
-| `ezpublish_http_basic` | Use `http_basic` in `security.yml` directly. |
-
-## Session prefix
-
-The default prefix used for [SiteAccess sessions](sessions.md) has been renamed.
-
-| Old prefix | New prefix |
-|:----|:----|
-| `eZSESSID` | `IBX_SESSION_ID` |
-
-## CSS settings
-
-|Old setting|New setting|
-|:----|:----|
-| `ibexa-alert--complementary` | `ibexa-alert--info` |
-| `sidebar-drag-items` | `toolbox-drag-items` |
-| `sidebar-drag-items-group` | `toolbox-drag-items-group` |
-| `sidebar-drag-item` | `tooblox-drag-item` |
-| `/src/bundle/Resources/public/scss/mixins/_font.scss` | Removed |
-| `/src/bundle/Resources/public/scss/_iframe-backdrop.scss` | Removed |
-
-## Twig templates, functions and filters
-
-The global Twig variable `ez_richtext_config` has been renamed to `ibexa_richtext_config`.
-
-| Old name| New name / Comment |
-|:----|:----|
-| `\Ibexa\Core\MVC\Symfony\Templating\Twig\Extension\` | Removed `ezplatform` variable, use the `ibexa` global variable. |
-| `\Ibexa\Core\MVC\Symfony\View\ParametersInjector\ViewbaseLayout\` | Removed `pagelayout` variable, use `page_layout`. |
-| `/src/bundle/Resources/views/themes/admin/account/form_fields.html.twig` | Deprecated, extend `@ibexadesign/ui/form_fields.html.twig` directly. |
-| `/src/bundle/Resources/views/themes/admin/content/edit/content_header.html.twig` | Removed |
-| `/src/bundle/Resources/views/themes/admin/ui/footer.html.twig` | Deprecated |
-| `/src/bundle/Resources/views/themes/corporate/customer_portal/registration/registration_already_exists.html.twig` | Removed |
-| `/src/bundle/Resources/views/block_preview.html.twig` | Removed |
-| `\Ibexa\Scheduler\Dashboard\AllScheduledTab` | Removed `type` variable. Use `content_type.name`. |
-| `\Ibexa\Scheduler\Dashboard\MyScheduledTab` | Removed `type` variable. Use `content_type.name`. |
-| `\Ibexa\Bundle\User\Controller\DefaultProfileImageController` | Removed `type` variable. Use `text_color`. Remove `default(text)` from `initials.svg.twig`. |
-| `\Ibexa\Bundle\User\Controller\DefaultProfileImageController` | Removed `background` variable, use `background_color`. Remove `default(background)` from `initials.svg.twig`. |
diff --git a/docs/release_notes/img/2.1_object_state_lock.png b/docs/release_notes/img/2.1_object_state_lock.png
deleted file mode 100644
index 3cc9f73c5a7..00000000000
Binary files a/docs/release_notes/img/2.1_object_state_lock.png and /dev/null differ
diff --git a/docs/release_notes/img/2.2_block_settings_styling.png b/docs/release_notes/img/2.2_block_settings_styling.png
deleted file mode 100644
index fa72112f64d..00000000000
Binary files a/docs/release_notes/img/2.2_block_settings_styling.png and /dev/null differ
diff --git a/docs/release_notes/img/2.2_page_builder.png b/docs/release_notes/img/2.2_page_builder.png
deleted file mode 100644
index 58a4c9cfb3e..00000000000
Binary files a/docs/release_notes/img/2.2_page_builder.png and /dev/null differ
diff --git a/docs/release_notes/img/2.2_page_builder_edit_fields.png b/docs/release_notes/img/2.2_page_builder_edit_fields.png
deleted file mode 100644
index 0fefebe5a7a..00000000000
Binary files a/docs/release_notes/img/2.2_page_builder_edit_fields.png and /dev/null differ
diff --git a/docs/release_notes/img/2.2_permissions_in_user_view.png b/docs/release_notes/img/2.2_permissions_in_user_view.png
deleted file mode 100644
index 52620f6b045..00000000000
Binary files a/docs/release_notes/img/2.2_permissions_in_user_view.png and /dev/null differ
diff --git a/docs/release_notes/img/2.2_placeholder_generic_provider.png b/docs/release_notes/img/2.2_placeholder_generic_provider.png
deleted file mode 100644
index fd79cdb7ef2..00000000000
Binary files a/docs/release_notes/img/2.2_placeholder_generic_provider.png and /dev/null differ
diff --git a/docs/release_notes/img/2.3_content_scheduler.png b/docs/release_notes/img/2.3_content_scheduler.png
deleted file mode 100644
index ed188408259..00000000000
Binary files a/docs/release_notes/img/2.3_content_scheduler.png and /dev/null differ
diff --git a/docs/release_notes/img/2.3_form_builder.png b/docs/release_notes/img/2.3_form_builder.png
deleted file mode 100644
index c4c63f9edc1..00000000000
Binary files a/docs/release_notes/img/2.3_form_builder.png and /dev/null differ
diff --git a/docs/release_notes/img/2.3_form_builder_submissions.png b/docs/release_notes/img/2.3_form_builder_submissions.png
deleted file mode 100644
index 1421f35c823..00000000000
Binary files a/docs/release_notes/img/2.3_form_builder_submissions.png and /dev/null differ
diff --git a/docs/release_notes/img/2.3_image_asset.png b/docs/release_notes/img/2.3_image_asset.png
deleted file mode 100644
index 13dfb647478..00000000000
Binary files a/docs/release_notes/img/2.3_image_asset.png and /dev/null differ
diff --git a/docs/release_notes/img/2.3_schedule_tab.png b/docs/release_notes/img/2.3_schedule_tab.png
deleted file mode 100644
index 3300e60f3db..00000000000
Binary files a/docs/release_notes/img/2.3_schedule_tab.png and /dev/null differ
diff --git a/docs/release_notes/img/2.3_timeline_list.png b/docs/release_notes/img/2.3_timeline_list.png
deleted file mode 100644
index 20e97d827bd..00000000000
Binary files a/docs/release_notes/img/2.3_timeline_list.png and /dev/null differ
diff --git a/docs/release_notes/img/2.3_udw_selection.png b/docs/release_notes/img/2.3_udw_selection.png
deleted file mode 100644
index fc4c3393925..00000000000
Binary files a/docs/release_notes/img/2.3_udw_selection.png and /dev/null differ
diff --git a/docs/release_notes/img/2.3_user_preferences.png b/docs/release_notes/img/2.3_user_preferences.png
deleted file mode 100644
index 8d2722f6689..00000000000
Binary files a/docs/release_notes/img/2.3_user_preferences.png and /dev/null differ
diff --git a/docs/release_notes/img/2.4_content_type_translations.png b/docs/release_notes/img/2.4_content_type_translations.png
deleted file mode 100644
index 00e8ade1532..00000000000
Binary files a/docs/release_notes/img/2.4_content_type_translations.png and /dev/null differ
diff --git a/docs/release_notes/img/2.4_drafts_admin_user.png b/docs/release_notes/img/2.4_drafts_admin_user.png
deleted file mode 100644
index fd5e66f3634..00000000000
Binary files a/docs/release_notes/img/2.4_drafts_admin_user.png and /dev/null differ
diff --git a/docs/release_notes/img/2.4_form_on_the_fly.png b/docs/release_notes/img/2.4_form_on_the_fly.png
deleted file mode 100644
index 4d9b89bb16d..00000000000
Binary files a/docs/release_notes/img/2.4_form_on_the_fly.png and /dev/null differ
diff --git a/docs/release_notes/img/2.4_formatted_text.png b/docs/release_notes/img/2.4_formatted_text.png
deleted file mode 100644
index 953bc0a0074..00000000000
Binary files a/docs/release_notes/img/2.4_formatted_text.png and /dev/null differ
diff --git a/docs/release_notes/img/2.4_link_in_image.png b/docs/release_notes/img/2.4_link_in_image.png
deleted file mode 100644
index a374cc5f836..00000000000
Binary files a/docs/release_notes/img/2.4_link_in_image.png and /dev/null differ
diff --git a/docs/release_notes/img/2.4_oe_menu.png b/docs/release_notes/img/2.4_oe_menu.png
deleted file mode 100644
index 52ee946786e..00000000000
Binary files a/docs/release_notes/img/2.4_oe_menu.png and /dev/null differ
diff --git a/docs/release_notes/img/2.4_policy_verbs.png b/docs/release_notes/img/2.4_policy_verbs.png
deleted file mode 100644
index f041d6f9f89..00000000000
Binary files a/docs/release_notes/img/2.4_policy_verbs.png and /dev/null differ
diff --git a/docs/release_notes/img/2.4_rich_text_block.png b/docs/release_notes/img/2.4_rich_text_block.png
deleted file mode 100644
index eda5fd9d51c..00000000000
Binary files a/docs/release_notes/img/2.4_rich_text_block.png and /dev/null differ
diff --git a/docs/release_notes/img/2.4_subitems_limit_pref.png b/docs/release_notes/img/2.4_subitems_limit_pref.png
deleted file mode 100644
index 440dc62db81..00000000000
Binary files a/docs/release_notes/img/2.4_subitems_limit_pref.png and /dev/null differ
diff --git a/docs/release_notes/img/2.4_translated_ct.png b/docs/release_notes/img/2.4_translated_ct.png
deleted file mode 100644
index df4a42464bc..00000000000
Binary files a/docs/release_notes/img/2.4_translated_ct.png and /dev/null differ
diff --git a/docs/release_notes/img/2.4_workflow_events_timeline.png b/docs/release_notes/img/2.4_workflow_events_timeline.png
deleted file mode 100644
index 3dba9675848..00000000000
Binary files a/docs/release_notes/img/2.4_workflow_events_timeline.png and /dev/null differ
diff --git a/docs/release_notes/img/2.5_back_office_improvements.png b/docs/release_notes/img/2.5_back_office_improvements.png
deleted file mode 100644
index 152af37a3b5..00000000000
Binary files a/docs/release_notes/img/2.5_back_office_improvements.png and /dev/null differ
diff --git a/docs/release_notes/img/2.5_create_button.png b/docs/release_notes/img/2.5_create_button.png
deleted file mode 100644
index f9c7e776b4d..00000000000
Binary files a/docs/release_notes/img/2.5_create_button.png and /dev/null differ
diff --git a/docs/release_notes/img/2.5_hide_content_icon.png b/docs/release_notes/img/2.5_hide_content_icon.png
deleted file mode 100644
index d6fc8118ea6..00000000000
Binary files a/docs/release_notes/img/2.5_hide_content_icon.png and /dev/null differ
diff --git a/docs/release_notes/img/2.5_matrix_ft.png b/docs/release_notes/img/2.5_matrix_ft.png
deleted file mode 100644
index 4a04326085a..00000000000
Binary files a/docs/release_notes/img/2.5_matrix_ft.png and /dev/null differ
diff --git a/docs/release_notes/img/2.5_product_version.png b/docs/release_notes/img/2.5_product_version.png
deleted file mode 100644
index cbcd782ee03..00000000000
Binary files a/docs/release_notes/img/2.5_product_version.png and /dev/null differ
diff --git a/docs/release_notes/img/2.5_user_settings.png b/docs/release_notes/img/2.5_user_settings.png
deleted file mode 100644
index a5357123ac5..00000000000
Binary files a/docs/release_notes/img/2.5_user_settings.png and /dev/null differ
diff --git a/docs/release_notes/img/2.5_workflow_diagram.png b/docs/release_notes/img/2.5_workflow_diagram.png
deleted file mode 100644
index fa4ff976239..00000000000
Binary files a/docs/release_notes/img/2.5_workflow_diagram.png and /dev/null differ
diff --git a/docs/release_notes/img/3.0_duplicate_roles.png b/docs/release_notes/img/3.0_duplicate_roles.png
deleted file mode 100644
index 77fb3b895b0..00000000000
Binary files a/docs/release_notes/img/3.0_duplicate_roles.png and /dev/null differ
diff --git a/docs/release_notes/img/3.1_collapsible_fields.png b/docs/release_notes/img/3.1_collapsible_fields.png
deleted file mode 100644
index e7cfe166a35..00000000000
Binary files a/docs/release_notes/img/3.1_collapsible_fields.png and /dev/null differ
diff --git a/docs/release_notes/img/3.1_collapsible_fields_edit.png b/docs/release_notes/img/3.1_collapsible_fields_edit.png
deleted file mode 100644
index 6c83e662ace..00000000000
Binary files a/docs/release_notes/img/3.1_collapsible_fields_edit.png and /dev/null differ
diff --git a/docs/release_notes/img/3.2_commerce_cockpit.png b/docs/release_notes/img/3.2_commerce_cockpit.png
deleted file mode 100644
index 1d0fbf1627a..00000000000
Binary files a/docs/release_notes/img/3.2_commerce_cockpit.png and /dev/null differ
diff --git a/docs/release_notes/img/3.2_new_login_page.png b/docs/release_notes/img/3.2_new_login_page.png
deleted file mode 100644
index 5506400f4a7..00000000000
Binary files a/docs/release_notes/img/3.2_new_login_page.png and /dev/null differ
diff --git a/docs/release_notes/img/3.2_new_ui_content_structure.png b/docs/release_notes/img/3.2_new_ui_content_structure.png
deleted file mode 100644
index e3847b35074..00000000000
Binary files a/docs/release_notes/img/3.2_new_ui_content_structure.png and /dev/null differ
diff --git a/docs/release_notes/img/3.2_targeting_block.png b/docs/release_notes/img/3.2_targeting_block.png
deleted file mode 100644
index 38f168ecd6b..00000000000
Binary files a/docs/release_notes/img/3.2_targeting_block.png and /dev/null differ
diff --git a/docs/release_notes/img/3.3_perso_ui.png b/docs/release_notes/img/3.3_perso_ui.png
deleted file mode 100644
index cc80ce45381..00000000000
Binary files a/docs/release_notes/img/3.3_perso_ui.png and /dev/null differ
diff --git a/docs/release_notes/img/3_1_Content_browser_Tree_view.png b/docs/release_notes/img/3_1_Content_browser_Tree_view.png
deleted file mode 100644
index 11a908630ea..00000000000
Binary files a/docs/release_notes/img/3_1_Content_browser_Tree_view.png and /dev/null differ
diff --git a/docs/release_notes/img/3_1_URL_Management.png b/docs/release_notes/img/3_1_URL_Management.png
deleted file mode 100644
index 11900d0421b..00000000000
Binary files a/docs/release_notes/img/3_1_URL_Management.png and /dev/null differ
diff --git a/docs/release_notes/img/3_1_filter_elements.png b/docs/release_notes/img/3_1_filter_elements.png
deleted file mode 100644
index 97045433b3f..00000000000
Binary files a/docs/release_notes/img/3_1_filter_elements.png and /dev/null differ
diff --git a/docs/release_notes/img/4.0_catalog.png b/docs/release_notes/img/4.0_catalog.png
deleted file mode 100644
index 19fb0be1514..00000000000
Binary files a/docs/release_notes/img/4.0_catalog.png and /dev/null differ
diff --git a/docs/release_notes/img/4.0_new_ui.png b/docs/release_notes/img/4.0_new_ui.png
deleted file mode 100644
index bdf40db3bf4..00000000000
Binary files a/docs/release_notes/img/4.0_new_ui.png and /dev/null differ
diff --git a/docs/release_notes/img/4.0_product_price.png b/docs/release_notes/img/4.0_product_price.png
deleted file mode 100644
index 4c6c8f76c5e..00000000000
Binary files a/docs/release_notes/img/4.0_product_price.png and /dev/null differ
diff --git a/docs/release_notes/img/4.1_content_tree.png b/docs/release_notes/img/4.1_content_tree.png
deleted file mode 100644
index f45eeaa263c..00000000000
Binary files a/docs/release_notes/img/4.1_content_tree.png and /dev/null differ
diff --git a/docs/release_notes/img/4.1_measurement_attribute.png b/docs/release_notes/img/4.1_measurement_attribute.png
deleted file mode 100644
index adce55c735f..00000000000
Binary files a/docs/release_notes/img/4.1_measurement_attribute.png and /dev/null differ
diff --git a/docs/release_notes/img/4.1_measurement_ft.png b/docs/release_notes/img/4.1_measurement_ft.png
deleted file mode 100644
index 60f7cd4469b..00000000000
Binary files a/docs/release_notes/img/4.1_measurement_ft.png and /dev/null differ
diff --git a/docs/release_notes/img/4.1_page_builder_dynamic_targeting.png b/docs/release_notes/img/4.1_page_builder_dynamic_targeting.png
deleted file mode 100644
index b3314b87635..00000000000
Binary files a/docs/release_notes/img/4.1_page_builder_dynamic_targeting.png and /dev/null differ
diff --git a/docs/release_notes/img/4.1_taxonomy_lang_switcher.png b/docs/release_notes/img/4.1_taxonomy_lang_switcher.png
deleted file mode 100644
index 89d48786268..00000000000
Binary files a/docs/release_notes/img/4.1_taxonomy_lang_switcher.png and /dev/null differ
diff --git a/docs/release_notes/img/4.2_address_field_type.png b/docs/release_notes/img/4.2_address_field_type.png
deleted file mode 100644
index 7c4dd2338f0..00000000000
Binary files a/docs/release_notes/img/4.2_address_field_type.png and /dev/null differ
diff --git a/docs/release_notes/img/4.2_catalogs_product_list.png b/docs/release_notes/img/4.2_catalogs_product_list.png
deleted file mode 100644
index 53f5498aef6..00000000000
Binary files a/docs/release_notes/img/4.2_catalogs_product_list.png and /dev/null differ
diff --git a/docs/release_notes/img/4.2_cdp_control_panel.png b/docs/release_notes/img/4.2_cdp_control_panel.png
deleted file mode 100644
index 51a253a083d..00000000000
Binary files a/docs/release_notes/img/4.2_cdp_control_panel.png and /dev/null differ
diff --git a/docs/release_notes/img/4.2_content_edit_tabs.png b/docs/release_notes/img/4.2_content_edit_tabs.png
deleted file mode 100644
index e86d14f3b6b..00000000000
Binary files a/docs/release_notes/img/4.2_content_edit_tabs.png and /dev/null differ
diff --git a/docs/release_notes/img/4.2_customer_center.png b/docs/release_notes/img/4.2_customer_center.png
deleted file mode 100644
index a8b8bdab626..00000000000
Binary files a/docs/release_notes/img/4.2_customer_center.png and /dev/null differ
diff --git a/docs/release_notes/img/4.2_customer_portal.png b/docs/release_notes/img/4.2_customer_portal.png
deleted file mode 100644
index 6c962367256..00000000000
Binary files a/docs/release_notes/img/4.2_customer_portal.png and /dev/null differ
diff --git a/docs/release_notes/img/4.2_invite_users.png b/docs/release_notes/img/4.2_invite_users.png
deleted file mode 100644
index 82c4bc91c2d..00000000000
Binary files a/docs/release_notes/img/4.2_invite_users.png and /dev/null differ
diff --git a/docs/release_notes/img/4.2_online_editor_dnd_image.png b/docs/release_notes/img/4.2_online_editor_dnd_image.png
deleted file mode 100644
index 3e01d71802d..00000000000
Binary files a/docs/release_notes/img/4.2_online_editor_dnd_image.png and /dev/null differ
diff --git a/docs/release_notes/img/4.2_page_block_nested.png b/docs/release_notes/img/4.2_page_block_nested.png
deleted file mode 100644
index f274c0e8cb7..00000000000
Binary files a/docs/release_notes/img/4.2_page_block_nested.png and /dev/null differ
diff --git a/docs/release_notes/img/4.2_product_assets.png b/docs/release_notes/img/4.2_product_assets.png
deleted file mode 100644
index d897fff72c4..00000000000
Binary files a/docs/release_notes/img/4.2_product_assets.png and /dev/null differ
diff --git a/docs/release_notes/img/4.2_product_categories_rn.png b/docs/release_notes/img/4.2_product_categories_rn.png
deleted file mode 100644
index b820597217a..00000000000
Binary files a/docs/release_notes/img/4.2_product_categories_rn.png and /dev/null differ
diff --git a/docs/release_notes/img/4.2_product_completeness.png b/docs/release_notes/img/4.2_product_completeness.png
deleted file mode 100644
index c2d1c4e67ff..00000000000
Binary files a/docs/release_notes/img/4.2_product_completeness.png and /dev/null differ
diff --git a/docs/release_notes/img/4.2_product_variants_generate.png b/docs/release_notes/img/4.2_product_variants_generate.png
deleted file mode 100644
index 1a9422b84ec..00000000000
Binary files a/docs/release_notes/img/4.2_product_variants_generate.png and /dev/null differ
diff --git a/docs/release_notes/img/4.3_collection_dnd.png b/docs/release_notes/img/4.3_collection_dnd.png
deleted file mode 100644
index 5af07f88a8f..00000000000
Binary files a/docs/release_notes/img/4.3_collection_dnd.png and /dev/null differ
diff --git a/docs/release_notes/img/4.3_edit_product_price.png b/docs/release_notes/img/4.3_edit_product_price.png
deleted file mode 100644
index 4f75e2abb9b..00000000000
Binary files a/docs/release_notes/img/4.3_edit_product_price.png and /dev/null differ
diff --git a/docs/release_notes/img/4.3_self_registration.png b/docs/release_notes/img/4.3_self_registration.png
deleted file mode 100644
index 92e981de47c..00000000000
Binary files a/docs/release_notes/img/4.3_self_registration.png and /dev/null differ
diff --git a/docs/release_notes/img/4.4_connect_scenario_example.png b/docs/release_notes/img/4.4_connect_scenario_example.png
deleted file mode 100644
index 1951b3cce92..00000000000
Binary files a/docs/release_notes/img/4.4_connect_scenario_example.png and /dev/null differ
diff --git a/docs/release_notes/img/4.4_new_cart.png b/docs/release_notes/img/4.4_new_cart.png
deleted file mode 100644
index 0923a6ebcec..00000000000
Binary files a/docs/release_notes/img/4.4_new_cart.png and /dev/null differ
diff --git a/docs/release_notes/img/4.4_new_checkout.png b/docs/release_notes/img/4.4_new_checkout.png
deleted file mode 100644
index dbe6fdccd70..00000000000
Binary files a/docs/release_notes/img/4.4_new_checkout.png and /dev/null differ
diff --git a/docs/release_notes/img/4.4_welcome_page.png b/docs/release_notes/img/4.4_welcome_page.png
deleted file mode 100644
index a69bc67f235..00000000000
Binary files a/docs/release_notes/img/4.4_welcome_page.png and /dev/null differ
diff --git a/docs/release_notes/img/4.5_bestsellers_block.png b/docs/release_notes/img/4.5_bestsellers_block.png
deleted file mode 100644
index 74f55c3465e..00000000000
Binary files a/docs/release_notes/img/4.5_bestsellers_block.png and /dev/null differ
diff --git a/docs/release_notes/img/4.5_comparison_view.png b/docs/release_notes/img/4.5_comparison_view.png
deleted file mode 100644
index faec3b0c1fa..00000000000
Binary files a/docs/release_notes/img/4.5_comparison_view.png and /dev/null differ
diff --git a/docs/release_notes/img/4.5_order_list.png b/docs/release_notes/img/4.5_order_list.png
deleted file mode 100644
index 15389d0039e..00000000000
Binary files a/docs/release_notes/img/4.5_order_list.png and /dev/null differ
diff --git a/docs/release_notes/img/4.5_page_builder_b2b.png b/docs/release_notes/img/4.5_page_builder_b2b.png
deleted file mode 100644
index c5459742180..00000000000
Binary files a/docs/release_notes/img/4.5_page_builder_b2b.png and /dev/null differ
diff --git a/docs/release_notes/img/4.5_payment_methods.png b/docs/release_notes/img/4.5_payment_methods.png
deleted file mode 100644
index e0c52ac2a55..00000000000
Binary files a/docs/release_notes/img/4.5_payment_methods.png and /dev/null differ
diff --git a/docs/release_notes/img/4.5_product_categories.png b/docs/release_notes/img/4.5_product_categories.png
deleted file mode 100644
index a7c0f437ac1..00000000000
Binary files a/docs/release_notes/img/4.5_product_categories.png and /dev/null differ
diff --git a/docs/release_notes/img/4.5_product_category_tree.png b/docs/release_notes/img/4.5_product_category_tree.png
deleted file mode 100644
index b9d0cd8bdf1..00000000000
Binary files a/docs/release_notes/img/4.5_product_category_tree.png and /dev/null differ
diff --git a/docs/release_notes/img/4.5_react_app_block.png b/docs/release_notes/img/4.5_react_app_block.png
deleted file mode 100644
index 563a5b32474..00000000000
Binary files a/docs/release_notes/img/4.5_react_app_block.png and /dev/null differ
diff --git a/docs/release_notes/img/4.5_segment_management.png b/docs/release_notes/img/4.5_segment_management.png
deleted file mode 100644
index 8f7ac1dcdc3..00000000000
Binary files a/docs/release_notes/img/4.5_segment_management.png and /dev/null differ
diff --git a/docs/release_notes/img/4.5_shipping_methods.png b/docs/release_notes/img/4.5_shipping_methods.png
deleted file mode 100644
index 3b1a83a89fb..00000000000
Binary files a/docs/release_notes/img/4.5_shipping_methods.png and /dev/null differ
diff --git a/docs/release_notes/img/4.6_activity_list.png b/docs/release_notes/img/4.6_activity_list.png
deleted file mode 100644
index 2da3b5bec5a..00000000000
Binary files a/docs/release_notes/img/4.6_activity_list.png and /dev/null differ
diff --git a/docs/release_notes/img/4.6_catalog_vat_rates.png b/docs/release_notes/img/4.6_catalog_vat_rates.png
deleted file mode 100644
index afef5f51c76..00000000000
Binary files a/docs/release_notes/img/4.6_catalog_vat_rates.png and /dev/null differ
diff --git a/docs/release_notes/img/4.6_content_type_icons.png b/docs/release_notes/img/4.6_content_type_icons.png
deleted file mode 100644
index 3a88446b5fd..00000000000
Binary files a/docs/release_notes/img/4.6_content_type_icons.png and /dev/null differ
diff --git a/docs/release_notes/img/4.6_customizable_dashboard.png b/docs/release_notes/img/4.6_customizable_dashboard.png
deleted file mode 100644
index 815ca2a480f..00000000000
Binary files a/docs/release_notes/img/4.6_customizable_dashboard.png and /dev/null differ
diff --git a/docs/release_notes/img/4.6_discounts.png b/docs/release_notes/img/4.6_discounts.png
deleted file mode 100644
index 7036a77770e..00000000000
Binary files a/docs/release_notes/img/4.6_discounts.png and /dev/null differ
diff --git a/docs/release_notes/img/4.6_distraction_free_mode.png b/docs/release_notes/img/4.6_distraction_free_mode.png
deleted file mode 100644
index cc6f127722c..00000000000
Binary files a/docs/release_notes/img/4.6_distraction_free_mode.png and /dev/null differ
diff --git a/docs/release_notes/img/4.6_drafts.png b/docs/release_notes/img/4.6_drafts.png
deleted file mode 100644
index 04fc9a543eb..00000000000
Binary files a/docs/release_notes/img/4.6_drafts.png and /dev/null differ
diff --git a/docs/release_notes/img/4.6_editing_embedded_content_items.png b/docs/release_notes/img/4.6_editing_embedded_content_items.png
deleted file mode 100644
index 5c3822fec27..00000000000
Binary files a/docs/release_notes/img/4.6_editing_embedded_content_items.png and /dev/null differ
diff --git a/docs/release_notes/img/4.6_focus_mode.png b/docs/release_notes/img/4.6_focus_mode.png
deleted file mode 100644
index dfc960edd06..00000000000
Binary files a/docs/release_notes/img/4.6_focus_mode.png and /dev/null differ
diff --git a/docs/release_notes/img/4.6_improved_editing.png b/docs/release_notes/img/4.6_improved_editing.png
deleted file mode 100644
index b514cd145d1..00000000000
Binary files a/docs/release_notes/img/4.6_improved_editing.png and /dev/null differ
diff --git a/docs/release_notes/img/4.6_page_builder_interface.png b/docs/release_notes/img/4.6_page_builder_interface.png
deleted file mode 100644
index a7a2d3243a5..00000000000
Binary files a/docs/release_notes/img/4.6_page_builder_interface.png and /dev/null differ
diff --git a/docs/release_notes/img/4.6_publishing_options.png b/docs/release_notes/img/4.6_publishing_options.png
deleted file mode 100644
index 5359dafe0ae..00000000000
Binary files a/docs/release_notes/img/4.6_publishing_options.png and /dev/null differ
diff --git a/docs/release_notes/img/4.6_quick_order.png b/docs/release_notes/img/4.6_quick_order.png
deleted file mode 100644
index fd5abfa399e..00000000000
Binary files a/docs/release_notes/img/4.6_quick_order.png and /dev/null differ
diff --git a/docs/release_notes/img/4.6_shipments.png b/docs/release_notes/img/4.6_shipments.png
deleted file mode 100644
index fc1b0a2adcc..00000000000
Binary files a/docs/release_notes/img/4.6_shipments.png and /dev/null differ
diff --git a/docs/release_notes/img/4.6_site_selector.png b/docs/release_notes/img/4.6_site_selector.png
deleted file mode 100644
index ae4b622f9bf..00000000000
Binary files a/docs/release_notes/img/4.6_site_selector.png and /dev/null differ
diff --git a/docs/release_notes/img/4.6_special_characters.png b/docs/release_notes/img/4.6_special_characters.png
deleted file mode 100644
index 37f278b2f3e..00000000000
Binary files a/docs/release_notes/img/4.6_special_characters.png and /dev/null differ
diff --git a/docs/release_notes/img/4.6_sub_items_tab.png b/docs/release_notes/img/4.6_sub_items_tab.png
deleted file mode 100644
index eee2a7685ac..00000000000
Binary files a/docs/release_notes/img/4.6_sub_items_tab.png and /dev/null differ
diff --git a/docs/release_notes/img/5.0_Repository.PermissionResolver.png b/docs/release_notes/img/5.0_Repository.PermissionResolver.png
deleted file mode 100644
index 46f7327e9ef..00000000000
Binary files a/docs/release_notes/img/5.0_Repository.PermissionResolver.png and /dev/null differ
diff --git a/docs/release_notes/img/5.0_StepBuilder.AbstractStepFactory.png b/docs/release_notes/img/5.0_StepBuilder.AbstractStepFactory.png
deleted file mode 100644
index 0dbc8bee336..00000000000
Binary files a/docs/release_notes/img/5.0_StepBuilder.AbstractStepFactory.png and /dev/null differ
diff --git a/docs/release_notes/img/5.0_StepBuilder.StepFactoryInterface.png b/docs/release_notes/img/5.0_StepBuilder.StepFactoryInterface.png
deleted file mode 100644
index 12f05b56303..00000000000
Binary files a/docs/release_notes/img/5.0_StepBuilder.StepFactoryInterface.png and /dev/null differ
diff --git a/docs/release_notes/img/5.0_StepExecutor.ReferenceDefinition.ResolverInterface.png b/docs/release_notes/img/5.0_StepExecutor.ReferenceDefinition.ResolverInterface.png
deleted file mode 100644
index c4499821842..00000000000
Binary files a/docs/release_notes/img/5.0_StepExecutor.ReferenceDefinition.ResolverInterface.png and /dev/null differ
diff --git a/docs/release_notes/img/5.0_collaborative_invitation.jpg b/docs/release_notes/img/5.0_collaborative_invitation.jpg
deleted file mode 100644
index 20c2b3976ec..00000000000
Binary files a/docs/release_notes/img/5.0_collaborative_invitation.jpg and /dev/null differ
diff --git a/docs/release_notes/img/5.0_open_in_profiler.png b/docs/release_notes/img/5.0_open_in_profiler.png
deleted file mode 100644
index f31ec3ffd8b..00000000000
Binary files a/docs/release_notes/img/5.0_open_in_profiler.png and /dev/null differ
diff --git a/docs/release_notes/img/502_ai_connector_gpt_50.png b/docs/release_notes/img/502_ai_connector_gpt_50.png
deleted file mode 100644
index 39a24a6440f..00000000000
Binary files a/docs/release_notes/img/502_ai_connector_gpt_50.png and /dev/null differ
diff --git a/docs/release_notes/img/502_notifications_screen.png b/docs/release_notes/img/502_notifications_screen.png
deleted file mode 100644
index 1b06d5f98c4..00000000000
Binary files a/docs/release_notes/img/502_notifications_screen.png and /dev/null differ
diff --git a/docs/release_notes/img/Palpha1.gif b/docs/release_notes/img/Palpha1.gif
deleted file mode 100644
index c5e9067c8b6..00000000000
Binary files a/docs/release_notes/img/Palpha1.gif and /dev/null differ
diff --git a/docs/release_notes/img/add_translation.gif b/docs/release_notes/img/add_translation.gif
deleted file mode 100644
index 956f96a136a..00000000000
Binary files a/docs/release_notes/img/add_translation.gif and /dev/null differ
diff --git a/docs/release_notes/img/bookmark.png b/docs/release_notes/img/bookmark.png
deleted file mode 100644
index 37cbad55442..00000000000
Binary files a/docs/release_notes/img/bookmark.png and /dev/null differ
diff --git a/docs/release_notes/img/button.png b/docs/release_notes/img/button.png
deleted file mode 100644
index e541889d92e..00000000000
Binary files a/docs/release_notes/img/button.png and /dev/null differ
diff --git a/docs/release_notes/img/catsfromtheMET.gif b/docs/release_notes/img/catsfromtheMET.gif
deleted file mode 100644
index cce517a11a7..00000000000
Binary files a/docs/release_notes/img/catsfromtheMET.gif and /dev/null differ
diff --git a/docs/release_notes/img/collection_block.png b/docs/release_notes/img/collection_block.png
deleted file mode 100644
index 948ba7b97df..00000000000
Binary files a/docs/release_notes/img/collection_block.png and /dev/null differ
diff --git a/docs/release_notes/img/compare_results.png b/docs/release_notes/img/compare_results.png
deleted file mode 100644
index 8c2a3927359..00000000000
Binary files a/docs/release_notes/img/compare_results.png and /dev/null differ
diff --git a/docs/release_notes/img/content_download.PNG b/docs/release_notes/img/content_download.PNG
deleted file mode 100644
index 0138c133a00..00000000000
Binary files a/docs/release_notes/img/content_download.PNG and /dev/null differ
diff --git a/docs/release_notes/img/contentbrowse.gif b/docs/release_notes/img/contentbrowse.gif
deleted file mode 100644
index bee54b780a5..00000000000
Binary files a/docs/release_notes/img/contentbrowse.gif and /dev/null differ
diff --git a/docs/release_notes/img/contenttypeviews.png b/docs/release_notes/img/contenttypeviews.png
deleted file mode 100644
index 085df6bc6b8..00000000000
Binary files a/docs/release_notes/img/contenttypeviews.png and /dev/null differ
diff --git a/docs/release_notes/img/copy_subtree_button.png b/docs/release_notes/img/copy_subtree_button.png
deleted file mode 100644
index 8a1233f9086..00000000000
Binary files a/docs/release_notes/img/copy_subtree_button.png and /dev/null differ
diff --git a/docs/release_notes/img/cotf.png b/docs/release_notes/img/cotf.png
deleted file mode 100644
index bfa54edb482..00000000000
Binary files a/docs/release_notes/img/cotf.png and /dev/null differ
diff --git a/docs/release_notes/img/delete-form.gif b/docs/release_notes/img/delete-form.gif
deleted file mode 100644
index e53c75df5e8..00000000000
Binary files a/docs/release_notes/img/delete-form.gif and /dev/null differ
diff --git a/docs/release_notes/img/demo-product-filters.png b/docs/release_notes/img/demo-product-filters.png
deleted file mode 100644
index 45c3dc3c2e8..00000000000
Binary files a/docs/release_notes/img/demo-product-filters.png and /dev/null differ
diff --git a/docs/release_notes/img/draft_conflict.png b/docs/release_notes/img/draft_conflict.png
deleted file mode 100644
index 97d371c2a22..00000000000
Binary files a/docs/release_notes/img/draft_conflict.png and /dev/null differ
diff --git a/docs/release_notes/img/eztags.gif b/docs/release_notes/img/eztags.gif
deleted file mode 100644
index 8bd7799fe0e..00000000000
Binary files a/docs/release_notes/img/eztags.gif and /dev/null differ
diff --git a/docs/release_notes/img/filtered_search.png b/docs/release_notes/img/filtered_search.png
deleted file mode 100644
index 490ad986660..00000000000
Binary files a/docs/release_notes/img/filtered_search.png and /dev/null differ
diff --git a/docs/release_notes/img/forgot_password.png b/docs/release_notes/img/forgot_password.png
deleted file mode 100644
index 8584fd4227e..00000000000
Binary files a/docs/release_notes/img/forgot_password.png and /dev/null differ
diff --git a/docs/release_notes/img/form-builder-1.png b/docs/release_notes/img/form-builder-1.png
deleted file mode 100644
index abe7c3a3d35..00000000000
Binary files a/docs/release_notes/img/form-builder-1.png and /dev/null differ
diff --git a/docs/release_notes/img/formb.png b/docs/release_notes/img/formb.png
deleted file mode 100644
index 4ecec3caf55..00000000000
Binary files a/docs/release_notes/img/formb.png and /dev/null differ
diff --git a/docs/release_notes/img/future_publication_window.png b/docs/release_notes/img/future_publication_window.png
deleted file mode 100644
index 5fd489de42f..00000000000
Binary files a/docs/release_notes/img/future_publication_window.png and /dev/null differ
diff --git a/docs/release_notes/img/i18n.png b/docs/release_notes/img/i18n.png
deleted file mode 100644
index 63741b4dee1..00000000000
Binary files a/docs/release_notes/img/i18n.png and /dev/null differ
diff --git a/docs/release_notes/img/left_menu_tree.png b/docs/release_notes/img/left_menu_tree.png
deleted file mode 100644
index 430c683822e..00000000000
Binary files a/docs/release_notes/img/left_menu_tree.png and /dev/null differ
diff --git a/docs/release_notes/img/link-options-oe.png b/docs/release_notes/img/link-options-oe.png
deleted file mode 100644
index 3bc758121b4..00000000000
Binary files a/docs/release_notes/img/link-options-oe.png and /dev/null differ
diff --git a/docs/release_notes/img/link_manager.png b/docs/release_notes/img/link_manager.png
deleted file mode 100644
index 8c6fc7595c2..00000000000
Binary files a/docs/release_notes/img/link_manager.png and /dev/null differ
diff --git a/docs/release_notes/img/newdesigntable.png b/docs/release_notes/img/newdesigntable.png
deleted file mode 100644
index aafbb0c2d80..00000000000
Binary files a/docs/release_notes/img/newdesigntable.png and /dev/null differ
diff --git a/docs/release_notes/img/notifications.gif b/docs/release_notes/img/notifications.gif
deleted file mode 100644
index bbbf4e7c28e..00000000000
Binary files a/docs/release_notes/img/notifications.gif and /dev/null differ
diff --git a/docs/release_notes/img/oe-formatting-new-options.png b/docs/release_notes/img/oe-formatting-new-options.png
deleted file mode 100644
index 416ecc3c0c4..00000000000
Binary files a/docs/release_notes/img/oe-formatting-new-options.png and /dev/null differ
diff --git a/docs/release_notes/img/participants_list.png b/docs/release_notes/img/participants_list.png
deleted file mode 100644
index ee033ed945c..00000000000
Binary files a/docs/release_notes/img/participants_list.png and /dev/null differ
diff --git a/docs/release_notes/img/personalizationblock.png b/docs/release_notes/img/personalizationblock.png
deleted file mode 100644
index e3a31dcab47..00000000000
Binary files a/docs/release_notes/img/personalizationblock.png and /dev/null differ
diff --git a/docs/release_notes/img/platformui-table.gif b/docs/release_notes/img/platformui-table.gif
deleted file mode 100644
index fb136761a41..00000000000
Binary files a/docs/release_notes/img/platformui-table.gif and /dev/null differ
diff --git a/docs/release_notes/img/productcontenttype.png b/docs/release_notes/img/productcontenttype.png
deleted file mode 100644
index 287a5e1ddc7..00000000000
Binary files a/docs/release_notes/img/productcontenttype.png and /dev/null differ
diff --git a/docs/release_notes/img/relation_single_allowed_cts.png b/docs/release_notes/img/relation_single_allowed_cts.png
deleted file mode 100644
index 2c97c7fc536..00000000000
Binary files a/docs/release_notes/img/relation_single_allowed_cts.png and /dev/null differ
diff --git a/docs/release_notes/img/search.png b/docs/release_notes/img/search.png
deleted file mode 100644
index 3dc8facce23..00000000000
Binary files a/docs/release_notes/img/search.png and /dev/null differ
diff --git a/docs/release_notes/img/section-details.png b/docs/release_notes/img/section-details.png
deleted file mode 100644
index e6bc506817b..00000000000
Binary files a/docs/release_notes/img/section-details.png and /dev/null differ
diff --git a/docs/release_notes/img/sub-items-improved.png b/docs/release_notes/img/sub-items-improved.png
deleted file mode 100644
index 0fd27034625..00000000000
Binary files a/docs/release_notes/img/sub-items-improved.png and /dev/null differ
diff --git a/docs/release_notes/img/subitem-sorting.png b/docs/release_notes/img/subitem-sorting.png
deleted file mode 100644
index 4d72da11b5a..00000000000
Binary files a/docs/release_notes/img/subitem-sorting.png and /dev/null differ
diff --git a/docs/release_notes/img/taxonomy_suggestions_content.png b/docs/release_notes/img/taxonomy_suggestions_content.png
deleted file mode 100644
index 7e0524cbb24..00000000000
Binary files a/docs/release_notes/img/taxonomy_suggestions_content.png and /dev/null differ
diff --git a/docs/release_notes/img/udw.png b/docs/release_notes/img/udw.png
deleted file mode 100644
index c90f6748a6e..00000000000
Binary files a/docs/release_notes/img/udw.png and /dev/null differ
diff --git a/docs/release_notes/img/udwre.png b/docs/release_notes/img/udwre.png
deleted file mode 100644
index 0a17baa3df5..00000000000
Binary files a/docs/release_notes/img/udwre.png and /dev/null differ
diff --git a/docs/release_notes/img/url_aliases.png b/docs/release_notes/img/url_aliases.png
deleted file mode 100644
index 6fee26327d2..00000000000
Binary files a/docs/release_notes/img/url_aliases.png and /dev/null differ
diff --git a/docs/release_notes/img/user_profile_preview.png b/docs/release_notes/img/user_profile_preview.png
deleted file mode 100644
index 93842e35d08..00000000000
Binary files a/docs/release_notes/img/user_profile_preview.png and /dev/null differ
diff --git a/docs/release_notes/img/v2_general_screen.png b/docs/release_notes/img/v2_general_screen.png
deleted file mode 100644
index 5e390bd88f4..00000000000
Binary files a/docs/release_notes/img/v2_general_screen.png and /dev/null differ
diff --git a/docs/release_notes/img/workflow_content_under_review.png b/docs/release_notes/img/workflow_content_under_review.png
deleted file mode 100644
index 9a91478d6bb..00000000000
Binary files a/docs/release_notes/img/workflow_content_under_review.png and /dev/null differ
diff --git a/docs/release_notes/release_notes.md b/docs/release_notes/release_notes.md
deleted file mode 100644
index c8991814274..00000000000
--- a/docs/release_notes/release_notes.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-description: Learn about the latest releases of Cohesivo.
-page_type: landing_page
----
-
-# Release notes
-
-The latest stable and LTS (Long Term Support) version of [[= product_name =]] is [Ibexa DXP v5.0](ibexa_dxp_v5.0.md).
-
-[[= cards([
- "release_notes/ibexa_dxp_v5.0",
- "release_notes/ibexa_dxp_v4.6",
-], columns=2) =]]
diff --git a/docs/resources/contributing/package_structure.md b/docs/resources/contributing/package_structure.md
index 75ef6dc899c..3035acfe700 100644
--- a/docs/resources/contributing/package_structure.md
+++ b/docs/resources/contributing/package_structure.md
@@ -21,10 +21,10 @@ Define [[= product_name =]] core PHP code in a namespace with the following pref
namespace Ibexa;
```
-A package which groups some [[= product_name =]] features can use an additional prefix, for example:
+A package which groups some [[= product_name =]] features can use an additional prefix:
``` php {skip-validation}
-namespace Ibexa\Commerce;
+namespace Ibexa\;
```
## Packages
@@ -55,10 +55,6 @@ Examples:
namespace Ibexa\Search;
```
-``` php {skip-validation}
-namespace Ibexa\Commerce\Shop;
-```
-
### Bundles
The bundle class definition in the `src/bundle` directory must be:
@@ -77,12 +73,6 @@ namespace Ibexa\Bundle\Search;
class IbexaSearchBundle // ...
```
-``` php {skip-validation}
-namespace Ibexa\Bundle\Commerce\Shop;
-
-class IbexaCommerceShopBundle // ...
-```
-
### Contracts
A package may introduce a namespace for contracts, to be consumed by first and third party packages and projects, which must be prefixed as:
@@ -101,10 +91,6 @@ namespace Ibexa\Contracts\Kernel;
namespace Ibexa\Contracts\SiteFactory;
```
-``` php {skip-validation}
-namespace Ibexa\Contracts\Commerce\Shop;
-```
-
That namespace needs to be mapped to the `src/contracts` directory of a package.
!!! note
diff --git a/docs/resources/new_in_doc.md b/docs/resources/new_in_doc.md
index 6bc6bf78d0c..09b06e3f445 100644
--- a/docs/resources/new_in_doc.md
+++ b/docs/resources/new_in_doc.md
@@ -91,7 +91,7 @@ Combined, these changes make the documentation easier to use with AI Agents.
### Notifications
-- Covered the [notification channels](notification_channels.md) feature from `ibexa/notifications` package
+- Covered the [notification channels](https://doc.ibexa.co/en/6.0/api/notification_channels/) feature from `ibexa/notifications` package
- Revamped the [back office notifications documentation](notifications.md)
### Users
@@ -170,11 +170,11 @@ Combined, these changes make the documentation easier to use with AI Agents.
#### Modified 5.0 update instructions
-To [update from v5.0.x to v5.0.latest](update_from_5.0.md), you have to ensure that Yarn dependencies are up-to-date before running Composer.
+To [update from v5.0.x to v5.0.latest](https://doc.ibexa.co/en/5.0/update_and_migration/from_5.0/update_from_5.0/), you have to ensure that Yarn dependencies are up-to-date before running Composer.
#### [[= product_name_cloud =]]
-- Added documentation describing [how to use the new `ibexa/cloud` package](install_on_ibexa_cloud.md) and the [environment variables it provides](environment_variables.md)
+- Added documentation describing [how to use the new `ibexa/cloud` package](https://doc.ibexa.co/en/5.0/ibexa_cloud/install_on_ibexa_cloud/) and the [environment variables it provides](https://doc.ibexa.co/en/5.0/ibexa_cloud/environment_variables/)
#### DFS configuration
@@ -210,16 +210,16 @@ This promotes skipping the rebuild of the Symfony container when environment var
### Search
- Added support for Elasticsearch 8.19+:
- - Updated the [requirements](requirements.md)
+ - Updated the [requirements](https://doc.ibexa.co/en/5.0/getting_started/requirements/)
- Updated the [Elasticsearch overview](elasticsearch_overview.md)
- Modified the [configuration instructions](configure_elasticsearch.md)
- Modified the [installation instructions](install_elasticsearch.md)
- - Modified the [system update instructions](update_from_5.0.md)
+ - Modified the [system update instructions](https://doc.ibexa.co/en/5.0/update_and_migration/from_5.0/update_from_5.0/)
### Infrastructure and maintenance
- Added [reverse proxy installation instructions](clustering_with_ddev.md#install-reverse-proxy) to DDEV cluster description
-- Modified the [system update instructions](update_from_5.0.md) to account for numerous changes in the product
+- Modified the [system update instructions](https://doc.ibexa.co/en/5.0/update_and_migration/from_5.0/update_from_5.0/) to account for numerous changes in the product
- Detailed the Varnish [reverse proxy configuration instructions](reverse_proxy.md#vcl-base-files) by mentioning specific VCL files that must be used
## December 2025
@@ -248,7 +248,7 @@ This promotes skipping the rebuild of the Symfony container when environment var
### Infrastructure
-- [MariaDB 11.4 is officially supported on v5 and v4.6](requirements.md#dbms)
+- [MariaDB 11.4 is officially supported on v5 and v4.6](https://doc.ibexa.co/en/5.0/getting_started/requirements/#dbms)
### Taxonomy
@@ -371,11 +371,11 @@ We want to thank
### Background operations
- Added documentation for handling [background tasks](background_tasks.md) using the new integration with Symfony Messenger
-- Described the configuration required to [asynchronously reindex discounted product prices](configure_discounts.md#discount-re-indexing) and the new discount [events](discounts_events.md) and [search criteria](discounts_criteria.md)
+- Described the configuration required to [asynchronously reindex discounted product prices](https://doc.ibexa.co/en/5.0/discounts/configure_discounts/#discount-re-indexing) and the new discount [events](https://doc.ibexa.co/en/5.0/api/event_reference/discounts_events/) and [search criteria](https://doc.ibexa.co/en/5.0/search/discounts_search_reference/discounts_criteria/)
### Revamped notifications
-- Updated the [notifications](notifications.md) page after recent [improvements to notifications](ibexa_dxp_v4.6.md#improvements-to-notifications), including the [new notification criteria](notification_search_criteria.md)
+- Updated the [notifications](notifications.md) page after recent [improvements to notifications](https://doc.ibexa.co/en/4.6/release_notes/ibexa_dxp_v4.6/#improvements-to-notifications), including the [new notification criteria](notification_search_criteria.md)
### Custom Page Builder blocks
@@ -396,7 +396,7 @@ We want to thank
### Infrastructure
-- Marked Redis 7.2 as supported in the [requirements for Ibexa DXP 4.6](requirements.md#clustering)
+- Marked Redis 7.2 as supported in the [requirements for Ibexa DXP 4.6](https://doc.ibexa.co/en/4.6/getting_started/requirements/#clustering)
### PHP API
@@ -586,7 +586,7 @@ We want to thank [todomagichere](https://github.com/todomagichere) and [hgieseno
### Infrastructure and maintenance
-- Announced [v4.6.19 release notes](ibexa_dxp_v4.6.md#ibexa-dxp-v4619) and [v4.6.19 upgrade instructions](update_from_4.6.md#v4619) with an important security notice about RichText XML, and introducing [Ibexa Rector](update_from_4.6.md#ibexa-rector) to help to maintain custom code
+- Announced [v4.6.19 release notes](https://doc.ibexa.co/en/4.6/release_notes/ibexa_dxp_v4.6/#ibexa-dxp-v4619) and [v4.6.19 upgrade instructions](https://doc.ibexa.co/en/4.6/update_and_migration/from_4.6/update_from_4.6/#v4619) with an important security notice about RichText XML, and introducing [Ibexa Rector](https://doc.ibexa.co/en/4.6/update_and_migration/from_4.6/update_from_4.6/#ibexa-rector) to help to maintain custom code
## March 2025
diff --git a/docs/resources/phpstorm_plugin.md b/docs/resources/phpstorm_plugin.md
index 78e0bc10eaa..5a33d0ee7d3 100644
--- a/docs/resources/phpstorm_plugin.md
+++ b/docs/resources/phpstorm_plugin.md
@@ -60,10 +60,9 @@ To do it, select **File** > **New Project...** > **Ibexa DXP**.
In project settings form you can choose:
- Location of the project
-- Product edition: [[= product_name_oss =]], [[= product_name_headless =]], [[= product_name_exp =]], [[= product_name_com =]]
-- Authentication token (for Content, Experience and Commerce editions)
+- Product edition: [[= product_name_oss =]], [[= product_name_headless =]], [[= product_name_exp =]]
+- Authentication token (for Content and Experience editions)
- Product version: Default (latest LTS version), Latest (fast track or LTS), Latest LTS and "Next 3.x" (unstable, based on the 3.x branch) and "Next 4.x" (unstable, based on the 4.x branch)
-- Generate [Ibexa Cloud configuration](install_on_ibexa_cloud.md)
- Composer settings

diff --git a/docs/search/criteria_reference/order_company_associated_criterion.md b/docs/search/criteria_reference/order_company_associated_criterion.md
deleted file mode 100644
index 84e95296144..00000000000
--- a/docs/search/criteria_reference/order_company_associated_criterion.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-description: Order IsCompanyAssociated Search Criterion
-edition: commerce
----
-
-# Order IsCompanyAssociated Criterion
-
-The `IsCompanyAssociatedCriterion` Search Criterion searches for orders based on whether the customer represents a business company.
-
-## Arguments
-
-- `value` - boolean that shows whether the customer represents a business company
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion;
-use Ibexa\Contracts\OrderManagement\Value\Order\OrderQuery;
-
-$query = new OrderQuery(
- new \Ibexa\Contracts\OrderManagement\Value\Order\Query\Criterion\IsCompanyAssociatedCriterion(true)
-);
-```
diff --git a/docs/search/criteria_reference/order_company_name_criterion.md b/docs/search/criteria_reference/order_company_name_criterion.md
deleted file mode 100644
index 170fd0eaaa0..00000000000
--- a/docs/search/criteria_reference/order_company_name_criterion.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-description: Order CompanyName Search Criterion
-edition: commerce
----
-
-# Order CompanyName Criterion
-
-The `CompanyNameCriterion` Search Criterion searches for orders based on the name of the company.
-
-## Arguments
-
-- `company_name` - string that represents a name of the company
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion;
-use Ibexa\Contracts\OrderManagement\Value\Order\OrderQuery;
-
-$query = new OrderQuery(
- new \Ibexa\Contracts\OrderManagement\Value\Order\Query\Criterion\CompanyNameCriterion('IBM')
-);
-```
diff --git a/docs/search/criteria_reference/order_created_criterion.md b/docs/search/criteria_reference/order_created_criterion.md
deleted file mode 100644
index ac566ca2e67..00000000000
--- a/docs/search/criteria_reference/order_created_criterion.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: Order CreatedAt Search Criterion
-edition: commerce
----
-
-# Order CreatedAt Criterion
-
-The `CreatedAtCriterion` Search Criterion searches for orders based on the date when they were created.
-
-## Arguments
-
-- `createdAt` - date to be matched, provided as a `DateTimeInterface` object
-- `operator` - optional operator string (EQ, GT, GTE, LT, LTE)
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\OrderManagement\Value\Order\OrderQuery;
-use Ibexa\Contracts\ProductCatalog\Values\Product\Query\Criterion;
-
-$criteria = new \Ibexa\Contracts\OrderManagement\Value\Order\Query\Criterion\CreatedAtCriterion(
- new DateTime('2023-03-01'),
- 'GTE'
-);
-
-$orderQuery = new OrderQuery($criteria);
-```
diff --git a/docs/search/criteria_reference/order_currency_code_criterion.md b/docs/search/criteria_reference/order_currency_code_criterion.md
deleted file mode 100644
index 9f0b5f639c5..00000000000
--- a/docs/search/criteria_reference/order_currency_code_criterion.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-description: Order CurrencyCode Search Criterion
-edition: commerce
----
-
-# Order CurrencyCode Criterion
-
-The `CurrencyCodeCriterion` Search Criterion searches for orders based on the currency code.
-
-## Arguments
-
-- `currency_code` - string that represents a currency code
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion;
-use Ibexa\Contracts\OrderManagement\Value\Order\OrderQuery;
-
-$query = new OrderQuery(
- new \Ibexa\Contracts\OrderManagement\Value\Order\Query\Criterion\CurrencyCodeCriterion('USD')
-);
-```
diff --git a/docs/search/criteria_reference/order_customer_name_criterion.md b/docs/search/criteria_reference/order_customer_name_criterion.md
deleted file mode 100644
index 6f72425cc1c..00000000000
--- a/docs/search/criteria_reference/order_customer_name_criterion.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-description: Order CustomerName Search Criterion
-edition: commerce
----
-
-# Order CustomerName Criterion
-
-The `CustomerNameCriterion` Search Criterion searches for orders based on the name of the customer.
-
-## Arguments
-
-- `user_name` - string that represents a name of the customer
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion;
-use Ibexa\Contracts\OrderManagement\Value\Order\OrderQuery;
-
-$query = new OrderQuery(
- new \Ibexa\Contracts\OrderManagement\Value\Order\Query\Criterion\CustomerNameCriterion('john')
-);
-```
diff --git a/docs/search/criteria_reference/order_identifier_criterion.md b/docs/search/criteria_reference/order_identifier_criterion.md
deleted file mode 100644
index 107c4fa62df..00000000000
--- a/docs/search/criteria_reference/order_identifier_criterion.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-description: Order Identifier Search Criterion
-edition: commerce
----
-
-# Order Identifier Criterion
-
-The `IdentifierCriterion` Search Criterion searches for orders based on the order identifier.
-
-## Arguments
-
-- `identifier` - string that represents the order identifier
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion;
-use Ibexa\Contracts\OrderManagement\Value\Order\OrderQuery;
-
-$query = new OrderQuery(
- new \Ibexa\Contracts\OrderManagement\Value\Order\Query\Criterion\IdentifierCriterion('f7578972-e7f4-4cae-85dc-a7c74610204e')
-);
-```
diff --git a/docs/search/criteria_reference/order_owner_criterion.md b/docs/search/criteria_reference/order_owner_criterion.md
deleted file mode 100644
index 4b977a1e093..00000000000
--- a/docs/search/criteria_reference/order_owner_criterion.md
+++ /dev/null
@@ -1,48 +0,0 @@
----
-description: Order OwnerCriterion Search Criterion
-edition: commerce
----
-
-# Owner Criterion
-
-The `OwnerCriterion` Criterion searches for orders based on the user reference.
-
-## Arguments
-
-- `UserReference` object - new \Ibexa\Core\Repository\Values\User\UserReference(int $userId)
-
-## Example
-
-``` php
-use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion;
-use Ibexa\Contracts\OrderManagement\Value\Order\OrderQuery;
-
-/** @var \Ibexa\Contracts\Core\Repository\UserService $userService */
-$user = $userService->loadUserByLogin('user');
-
-$query = new OrderQuery(
- new \Ibexa\Contracts\OrderManagement\Value\Order\Query\Criterion\OwnerCriterion(
- $user
- )
-);
-```
-
-`OwnerCriterion` Criterion accepts also multiple values:
-
-``` php
-use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion;
-use Ibexa\Contracts\OrderManagement\Value\Order\OrderQuery;
-
-/** @var \Ibexa\Contracts\Core\Repository\UserService $userService */
-$user1 = $userService->loadUser(12345);
-$user2 = $userService->loadUserByLogin('user');
-
-$query = new OrderQuery(
- new \Ibexa\Contracts\OrderManagement\Value\Order\Query\Criterion\OwnerCriterion(
- [
- $user1,
- $user2,
- ]
- )
-);
-```
diff --git a/docs/search/criteria_reference/order_price_criterion.md b/docs/search/criteria_reference/order_price_criterion.md
deleted file mode 100644
index e72f32c77b1..00000000000
--- a/docs/search/criteria_reference/order_price_criterion.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: Order Price Search Criterion
-edition: commerce
----
-
-# Order Price Criterion
-
-The `PriceCriterion` searches for orders by their total net value.
-
-## Arguments
-
-- `value` - value to be matched, represents total net order value
-- (optional) `operator` - optional operator string (EQ, GT, GTE, LT, LTE)
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion;
-use Ibexa\Contracts\OrderManagement\Value\Order\OrderQuery;
-
-$criteria = new \Ibexa\Contracts\OrderManagement\Value\Order\Query\Criterion\PriceCriterion(
- 12900,
- 'GTE'
-);
-
-$orderQuery = new OrderQuery($criteria);
-```
diff --git a/docs/search/criteria_reference/order_search_criteria.md b/docs/search/criteria_reference/order_search_criteria.md
deleted file mode 100644
index 7ec7153def8..00000000000
--- a/docs/search/criteria_reference/order_search_criteria.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-description: Order Search Criteria
-edition: commerce
----
-
-# Order Search Criteria reference
-
-Order Search Criteria are only supported by [Order Search (`OrderService::findOrders`)](order_management_api.md#get-multiple-orders).
-
-With these Criteria you can filter orders, for example, by their order identifier, order creation date, order status, customer name, or customer status.
-
-## Order Search Criteria
-
-|Search Criterion|Search based on|
-|-----|-----|
-|[CompanyNameCriterion](order_company_name_criterion.md)|Name of the company|
-|[CreatedAtCriterion](order_created_criterion.md)|Date and time when order was created|
-|[CurrencyCodeCriterion](order_currency_code_criterion.md)|Currency code|
-|[CustomerNameCriterion](order_customer_name_criterion.md)|Customer's user name|
-|[IdentifierCriterion](order_identifier_criterion.md)|Order identifier|
-|[IsCompanyAssociatedCriterion](order_company_associated_criterion.md)|Whether the customer represents a company|
-|[OwnerCriterion](order_owner_criterion.md)|Owner based on the user reference|
-|[PriceCriterion](order_price_criterion.md)|Total value of the order|
-|[SourceCriterion](order_source_criterion.md)|Source of the order|
-|[StatusCriterion](order_status_criterion.md)|Status of the order|
diff --git a/docs/search/criteria_reference/order_source_criterion.md b/docs/search/criteria_reference/order_source_criterion.md
deleted file mode 100644
index 956fae1ec38..00000000000
--- a/docs/search/criteria_reference/order_source_criterion.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-description: Order Source Search Criterion
-edition: commerce
----
-
-# Order Source Criterion
-
-The `SourceCriterion` Search Criterion searches for orders based on the source of the order.
-
-## Arguments
-
-- `source` - string that represents the source of the order
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion;
-use Ibexa\Contracts\OrderManagement\Value\Order\OrderQuery;
-
-$query = new OrderQuery(
- new \Ibexa\Contracts\OrderManagement\Value\Order\Query\Criterion\SourceCriterion('local_shop')
-);
-```
diff --git a/docs/search/criteria_reference/order_status_criterion.md b/docs/search/criteria_reference/order_status_criterion.md
deleted file mode 100644
index 237b2026940..00000000000
--- a/docs/search/criteria_reference/order_status_criterion.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-description: Order Status Search Criterion
-edition: commerce
----
-
-# Order Status Criterion
-
-The `StatusCriterion` Search Criterion searches for orders based on order status.
-
-## Arguments
-
-- `status` - string that represents the status of the order, takes values defined in order management workflow
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion;
-use Ibexa\Contracts\OrderManagement\Value\Order\OrderQuery;
-
-$query = new OrderQuery(
- new \Ibexa\Contracts\OrderManagement\Value\Order\Query\Criterion\StatusCriterion('pending')
-);
-```
diff --git a/docs/search/criteria_reference/payment_createdat_criterion.md b/docs/search/criteria_reference/payment_createdat_criterion.md
deleted file mode 100644
index 66c1130db3d..00000000000
--- a/docs/search/criteria_reference/payment_createdat_criterion.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-description: Payment CreatedAt Search Criterion
-edition: commerce
----
-
-# Payment CreatedAt Criterion
-
-The `CreatedAt` Search Criterion searches for payments based on the date when they were created.
-
-## Arguments
-
-- `createdAt` - date to be matched, provided as a `DateTimeInterface` object
-- `operator` - optional operator string (EQ, GT, GTE, LT, LTE)
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Payment\Payment\PaymentQuery;
-use Ibexa\Contracts\ProductCatalog\Values\Product\Query\Criterion;
-
-$criteria = new \Ibexa\Contracts\Payment\Payment\Query\Criterion\CreatedAt(
- new DateTime('2023-03-01')
-);
-$query = new PaymentQuery($criteria);
-```
diff --git a/docs/search/criteria_reference/payment_currency_criterion.md b/docs/search/criteria_reference/payment_currency_criterion.md
deleted file mode 100644
index 59829269d6c..00000000000
--- a/docs/search/criteria_reference/payment_currency_criterion.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-description: Payment Currency Search Criterion
-edition: commerce
----
-
-# Payment Currency Criterion
-
-The `Currency` Search Criterion searches for payments based on the currency code.
-
-## Arguments
-
-- `currency` - string that represents a currency code
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Payment\Payment\PaymentQuery;
-
-$query = new PaymentQuery(
- new \Ibexa\Contracts\Payment\Payment\Query\Criterion\Currency('EUR')
-);
-```
diff --git a/docs/search/criteria_reference/payment_id_criterion.md b/docs/search/criteria_reference/payment_id_criterion.md
deleted file mode 100644
index 6c1a9bfeb3d..00000000000
--- a/docs/search/criteria_reference/payment_id_criterion.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-description: Payment Id Search Criterion
-edition: commerce
----
-
-# Payment Id Criterion
-
-The `Id` Search Criterion searches for payments based on the payment ID.
-
-## Arguments
-
-- `id` - integer that represents the payment ID
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Payment\Payment\PaymentQuery;
-
-$query = new PaymentQuery(
- new \Ibexa\Contracts\Payment\Payment\Query\Criterion\Id(2)
-);
-```
diff --git a/docs/search/criteria_reference/payment_identifier_criterion.md b/docs/search/criteria_reference/payment_identifier_criterion.md
deleted file mode 100644
index 7de17744f0a..00000000000
--- a/docs/search/criteria_reference/payment_identifier_criterion.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-description: Payment Identifier Search Criterion
-edition: commerce
----
-
-# Payment Identifier Criterion
-
-The `Identifier` Search Criterion searches for payments based on the payment identifier.
-
-## Arguments
-
-- `identifier` - string that represents the payment identifier
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Payment\Payment\PaymentQuery;
-
-$query = new PaymentQuery(
- new \Ibexa\Contracts\Payment\Payment\Query\Criterion\Identifier('f7578972-e7f4-4cae-85dc-a7c74610204e')
-);
-```
diff --git a/docs/search/criteria_reference/payment_logicaland_criterion.md b/docs/search/criteria_reference/payment_logicaland_criterion.md
deleted file mode 100644
index 1d947d8c0cd..00000000000
--- a/docs/search/criteria_reference/payment_logicaland_criterion.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: Payment LogicalAnd Search Criterion
-edition: commerce
----
-
-# Payment LogicalAnd Criterion
-
-The `LogicalAnd` Search Criterion matches payments if all provided Criteria match.
-
-## Arguments
-
-- `criterion` - a set of Criteria combined by the logical operator
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Payment\Payment\PaymentQuery;
-use Ibexa\Contracts\Payment\Payment\Query\Criterion\CreatedAt;
-use Ibexa\Contracts\Payment\Payment\Query\Criterion\Currency;
-use Ibexa\Contracts\Payment\Payment\Query\Criterion\LogicalAnd;
-
-$query = new PaymentQuery();
-$query->setQuery(new LogicalAnd(
- new CreatedAt(new DateTime('2023-03-01')),
- new Currency('USD'),
-));
-```
diff --git a/docs/search/criteria_reference/payment_logicalor_criterion.md b/docs/search/criteria_reference/payment_logicalor_criterion.md
deleted file mode 100644
index e20bc93559e..00000000000
--- a/docs/search/criteria_reference/payment_logicalor_criterion.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: Payment LogicalOr Search Criterion
-edition: commerce
----
-
-# Payment LogicalOr Criterion
-
-The `LogicalOr` Search Criterion matches payments if at least one of the provided Criteria matches.
-
-## Arguments
-
-- `criterion` - a set of Criteria combined by the logical operator
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Payment\Payment\PaymentQuery;
-use Ibexa\Contracts\Payment\Payment\Query\Criterion\CreatedAt;
-use Ibexa\Contracts\Payment\Payment\Query\Criterion\Currency;
-use Ibexa\Contracts\Payment\Payment\Query\Criterion\LogicalOr;
-
-$query = new PaymentQuery();
-$query->setQuery(new LogicalOr(
- new CreatedAt(new DateTime('2023-03-01')),
- new Currency('USD'),
-));
-```
diff --git a/docs/search/criteria_reference/payment_method_createdat_criterion.md b/docs/search/criteria_reference/payment_method_createdat_criterion.md
deleted file mode 100644
index fd2280a011a..00000000000
--- a/docs/search/criteria_reference/payment_method_createdat_criterion.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-description: Payment Method CreatedAt Search Criterion
-edition: commerce
----
-
-# Payment Method CreatedAt Criterion
-
-The `CreatedAt` Search Criterion searches for payment methods based on the date when they were created.
-
-## Arguments
-
-- `createdAt` - date to be matched, provided as a `DateTimeInterface` object
-- `operator` - optional operator string (EQ, GT, GTE, LT, LTE)
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Payment\PaymentMethod\PaymentMethodQuery;
-use Ibexa\Contracts\ProductCatalog\Values\Product\Query\Criterion;
-
-$criteria = new \Ibexa\Contracts\Payment\PaymentMethod\Query\Criterion\CreatedAt(
- new DateTime('2023-03-01')
-);
-$query = new PaymentMethodQuery($criteria);
-```
diff --git a/docs/search/criteria_reference/payment_method_enabled_criterion.md b/docs/search/criteria_reference/payment_method_enabled_criterion.md
deleted file mode 100644
index 2447da755f1..00000000000
--- a/docs/search/criteria_reference/payment_method_enabled_criterion.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-description: Payment Method Enabled Search Criterion
-edition: commerce
----
-
-# Payment Method Enabled Criterion
-
-The `Enabled` Search Criterion searches for payment methods based on whether the payment method is enabled or not.
-
-## Arguments
-
-- `value` - whether the payment method is enabled
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Payment\PaymentMethod\PaymentMethodQuery;
-
-$query = new PaymentMethodQuery(
- new \Ibexa\Contracts\Payment\PaymentMethod\Query\Criterion\Enabled(true)
-);
-```
diff --git a/docs/search/criteria_reference/payment_method_id_criterion.md b/docs/search/criteria_reference/payment_method_id_criterion.md
deleted file mode 100644
index 2a2a7fb661a..00000000000
--- a/docs/search/criteria_reference/payment_method_id_criterion.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-description: Payment Method Id Search Criterion
-edition: commerce
----
-
-# Payment Method Id Criterion
-
-The `Id` Search Criterion searches for payment methods based on the payment method ID.
-
-## Arguments
-
-- `id` - integer that represents the payment method ID
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Payment\PaymentMethod\PaymentMethodQuery;
-
-$query = new PaymentMethodQuery(
- new \Ibexa\Contracts\Payment\PaymentMethod\Query\Criterion\Id(2)
-);
-```
diff --git a/docs/search/criteria_reference/payment_method_identifier_criterion.md b/docs/search/criteria_reference/payment_method_identifier_criterion.md
deleted file mode 100644
index 809cf68adc9..00000000000
--- a/docs/search/criteria_reference/payment_method_identifier_criterion.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-description: Payment Method Identifier Search Criterion
-edition: commerce
----
-
-# Payment Method Identifier Criterion
-
-The `Identifier` Search Criterion searches for payment methods based on the payment method identifier.
-
-## Arguments
-
-- `identifier` - string that represents the payment method identifier
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Payment\PaymentMethod\PaymentMethodQuery;
-
-$query = new PaymentMethodQuery(
- new \Ibexa\Contracts\Payment\PaymentMethod\Query\Criterion\Identifier('f7578972-e7f4-4cae-85dc-a7c74610204e')
-);
-```
diff --git a/docs/search/criteria_reference/payment_method_logicaland_criterion.md b/docs/search/criteria_reference/payment_method_logicaland_criterion.md
deleted file mode 100644
index 2ebc5e2ef5b..00000000000
--- a/docs/search/criteria_reference/payment_method_logicaland_criterion.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: Payment Method LogicalAnd Search Criterion
-edition: commerce
----
-
-# Payment Method LogicalAnd Criterion
-
-The `LogicalAnd` Search Criterion matches payment methods if all provided Criteria match.
-
-## Arguments
-
-- `criteria` - a set of Criteria combined by the logical operator
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Payment\PaymentMethod\PaymentMethodQuery;
-use Ibexa\Contracts\Payment\PaymentMethod\Query\Criterion\CreatedAt;
-use Ibexa\Contracts\Payment\PaymentMethod\Query\Criterion\Enabled;
-use Ibexa\Contracts\Payment\PaymentMethod\Query\Criterion\LogicalAnd;
-
-$query = new PaymentMethodQuery();
-$query->setQuery(new LogicalAnd(
- new CreatedAt(new DateTime('2023-03-01')),
- new Enabled(true),
-));
-```
diff --git a/docs/search/criteria_reference/payment_method_logicalor_criterion.md b/docs/search/criteria_reference/payment_method_logicalor_criterion.md
deleted file mode 100644
index 3798f927455..00000000000
--- a/docs/search/criteria_reference/payment_method_logicalor_criterion.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-description: Payment Method LogicalOr Search Criterion
-edition: commerce
----
-
-# Payment Method LogicalOr Criterion
-
-The `LogicalOr` Search Criterion matches payment methods if at least one of the provided Criteria matches.
-
-## Arguments
-
-- `criteria` - a set of Criteria combined by the logical operator
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Payment\PaymentMethod\PaymentMethodQuery;
-use Ibexa\Contracts\Payment\PaymentMethod\Query\Criterion\CreatedAt;
-use Ibexa\Contracts\Payment\PaymentMethod\Query\Criterion\LogicalOr;
-
-$query = new PaymentMethodQuery();
-$query->setQuery(new LogicalOr(
- new CreatedAt(new DateTime('2023-03-01')),
- new CreatedAt(new DateTime('2023-05-01')),
-));
-```
diff --git a/docs/search/criteria_reference/payment_method_name_criterion.md b/docs/search/criteria_reference/payment_method_name_criterion.md
deleted file mode 100644
index 95499b72c6f..00000000000
--- a/docs/search/criteria_reference/payment_method_name_criterion.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-description: Payment Method Name Search Criterion
-edition: commerce
----
-
-# Payment Method Name Criterion
-
-The `Name` Search Criterion searches for payment methods based on the existing payment method name.
-
-## Arguments
-
-- `name` - string that represents the payment method name
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Payment\PaymentMethod\PaymentMethodQuery;
-
-$query = new PaymentMethodQuery(
- new \Ibexa\Contracts\Payment\PaymentMethod\Query\Criterion\Name('Credit Card')
-);
-```
diff --git a/docs/search/criteria_reference/payment_method_search_criteria.md b/docs/search/criteria_reference/payment_method_search_criteria.md
deleted file mode 100644
index 42aa35b1d20..00000000000
--- a/docs/search/criteria_reference/payment_method_search_criteria.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-description: Payment Method Search Criteria
-edition: commerce
-page_type: reference
----
-
-# Payment Method Search Criteria reference
-
-Payment Method Search Criteria are only supported by [Payment Method Search (`PaymentMethodService::findPaymentMethods`)](payment_method_api.md#get-multiple-payment-methods).
-
-With these Criteria you can filter payment methods by their payment method identifier, payment method creation date, payment method type, status, and more.
-
-## Payment method Search Criteria
-
-|Search Criterion|Search based on|
-|-----|-----|
-|[CreatedAt](payment_method_createdat_criterion.md)|Date and time when payment method was created|
-|[Enabled](payment_method_enabled_criterion.md)|Status of the payment method|
-|[Id](payment_method_id_criterion.md)|Payment method ID|
-|[Identifier](payment_method_identifier_criterion.md)|Payment method identifier|
-|[LogicalAnd](payment_method_logicaland_criterion.md)|Logical AND criterion that matches if all the provided Criteria match|
-|[LogicalOr](payment_method_logicalor_criterion.md)|Logical OR criterion that matches if at least one of the provided Criteria matches|
-|[Name](payment_method_name_criterion.md)|Payment method name|
-|[Type](payment_method_type_criterion.md)|Type of the payment method|
-|[UpdatedAt](payment_method_updatedat_criterion.md)|Date and time when payment method status was updated|
diff --git a/docs/search/criteria_reference/payment_method_type_criterion.md b/docs/search/criteria_reference/payment_method_type_criterion.md
deleted file mode 100644
index 72524ab9623..00000000000
--- a/docs/search/criteria_reference/payment_method_type_criterion.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-description: Payment Method Type Search Criterion
-edition: commerce
----
-
-# Payment Method Type Criterion
-
-The `Type` Search Criterion searches for payment methods based on payment method type.
-
-## Arguments
-
-- `type` - string that represents a payment method type
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Payment\PaymentMethod\PaymentMethodQuery;
-
-/** @var \Ibexa\Contracts\Payment\PaymentMethod\Type\TypeRegistryInterface $paymentMethodTypeRegistry */
-$paymentMethodType = $paymentMethodTypeRegistry->getPaymentMethodType('offline');
-
-$query = new PaymentMethodQuery(
- new \Ibexa\Contracts\Payment\PaymentMethod\Query\Criterion\Type($paymentMethodType)
-);
-```
diff --git a/docs/search/criteria_reference/payment_method_updatedat_criterion.md b/docs/search/criteria_reference/payment_method_updatedat_criterion.md
deleted file mode 100644
index 13a04438f65..00000000000
--- a/docs/search/criteria_reference/payment_method_updatedat_criterion.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-description: Payment Method UpdatedAt Search Criterion
-edition: commerce
----
-
-# Payment Method UpdatedAt Criterion
-
-The `UpdatedAt` Search Criterion searches for payment methods based on the date when their status was updated.
-
-## Arguments
-
-- `updatedAt` - date to be matched, provided as a `DateTimeInterface` object
-- `operator` - optional operator string (EQ, GT, GTE, LT, LTE)
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion;
-use Ibexa\Contracts\Payment\PaymentMethod\PaymentMethodQuery;
-
-$criteria = new \Ibexa\Contracts\Payment\PaymentMethod\Query\Criterion\UpdatedAt(
- new DateTime('2023-03-01')
-);
-$query = new PaymentMethodQuery($criteria);
-```
diff --git a/docs/search/criteria_reference/payment_order_criterion.md b/docs/search/criteria_reference/payment_order_criterion.md
deleted file mode 100644
index 3eaf0045660..00000000000
--- a/docs/search/criteria_reference/payment_order_criterion.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-description: Payment Order Search Criterion
-edition: commerce
----
-
-# Payment Order Criterion
-
-The `Order` Search Criterion searches for payments based on an ID of an associated order.
-
-## Arguments
-
-- `order_id` - integer that represents an ID of an associated order
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Payment\Payment\PaymentQuery;
-
-/** @var \Ibexa\Contracts\OrderManagement\OrderServiceInterface $orderService */
-$order = $orderService->getOrder(4);
-
-$query = new PaymentQuery(
- new \Ibexa\Contracts\Payment\Payment\Query\Criterion\Order($order)
-);
-```
diff --git a/docs/search/criteria_reference/payment_payment_method_criterion.md b/docs/search/criteria_reference/payment_payment_method_criterion.md
deleted file mode 100644
index 98d7d033c3c..00000000000
--- a/docs/search/criteria_reference/payment_payment_method_criterion.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-description: Payment PaymentMethod Search Criterion
-edition: commerce
----
-
-# Payment PaymentMethod Criterion
-
-The `PaymentMethod` Search Criterion searches for payments based on a payment method applied to them.
-
-## Arguments
-
-- `method_id` - integer that represents an ID of the payment method that you want to match
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Payment\Payment\PaymentQuery;
-
-/** @var \Ibexa\Contracts\Payment\PaymentMethodServiceInterface $paymentMethodService */
-$paymentMethod = $paymentMethodService->getPaymentMethod(2);
-
-$query = new PaymentQuery(
- new \Ibexa\Contracts\Payment\Payment\Query\Criterion\PaymentMethod($paymentMethod)
-);
-```
diff --git a/docs/search/criteria_reference/payment_search_criteria.md b/docs/search/criteria_reference/payment_search_criteria.md
deleted file mode 100644
index f71208e0134..00000000000
--- a/docs/search/criteria_reference/payment_search_criteria.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-description: Payment Search Criteria
-edition: commerce
-page_type: reference
----
-
-# Payment Search Criteria reference
-
-Payment Search Criteria are only supported by [Payment Search (`PaymentServiceInterface::findPayments`)](payment_api.md#get-multiple-payments).
-
-With these Criteria you can filter payments by their payment identifier, payment creation date, payment status, payment method, order, and more.
-
-## Payment Search Criteria
-
-|Search Criterion|Search based on|
-|-----|-----|
-|[CreatedAt](payment_createdat_criterion.md)|Date and time when payment was created|
-|[Currency](payment_currency_criterion.md)|Currency code|
-|[Id](payment_id_criterion.md)|Payment ID|
-|[Identifier](payment_identifier_criterion.md)|Payment identifier|
-|[LogicalAnd](payment_logicaland_criterion.md)|Logical AND criterion that matches if all the provided Criteria match|
-|[LogicalOr](payment_logicalor_criterion.md)|Logical OR criterion that matches if at least one of the provided Criteria matches|
-|[Order](payment_order_criterion.md)|ID of an associated order|
-|[PaymentMethod](payment_payment_method_criterion.md)|Payment method applied to the payment|
-|[Status](payment_status_criterion.md)|Status of the payment|
-|[UpdatedAt](payment_updatedat_criterion.md)|Date and time when payment status was updated|
diff --git a/docs/search/criteria_reference/payment_status_criterion.md b/docs/search/criteria_reference/payment_status_criterion.md
deleted file mode 100644
index deb1d6d8f2c..00000000000
--- a/docs/search/criteria_reference/payment_status_criterion.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-description: Payment Status Search Criterion
-edition: commerce
----
-
-# Payment Status Criterion
-
-The `Status` Search Criterion searches for payments based on payment status.
-
-## Arguments
-
-- `status` - string that represents the status of the payment, takes values defined in payment processing workflow
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Payment\Payment\PaymentQuery;
-
-$query = new PaymentQuery(
- new \Ibexa\Contracts\Payment\Payment\Query\Criterion\Status('failed')
-);
-```
diff --git a/docs/search/criteria_reference/payment_updatedat_criterion.md b/docs/search/criteria_reference/payment_updatedat_criterion.md
deleted file mode 100644
index 8257b614ac7..00000000000
--- a/docs/search/criteria_reference/payment_updatedat_criterion.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-description: Payment UpdatedAt Search Criterion
-edition: commerce
----
-
-# Payment UpdatedAt Criterion
-
-The `UpdatedAt` Search Criterion searches for payments based on the date when their status was updated.
-
-## Arguments
-
-- `updatedAt` - date to be matched, provided as a `DateTimeInterface` object
-- `operator` - optional operator string (EQ, GT, GTE, LT, LTE)
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion;
-use Ibexa\Contracts\Payment\Payment\PaymentQuery;
-
-$criteria = new \Ibexa\Contracts\Payment\Payment\Query\Criterion\UpdatedAt(
- new DateTime('2023-03-01')
-);
-$query = new PaymentQuery($criteria);
-```
diff --git a/docs/search/criteria_reference/price_logicaland_criterion.md b/docs/search/criteria_reference/price_logicaland_criterion.md
index 7693f7a8e52..5d234ee1ac7 100644
--- a/docs/search/criteria_reference/price_logicaland_criterion.md
+++ b/docs/search/criteria_reference/price_logicaland_criterion.md
@@ -1,6 +1,5 @@
---
description: Price LogicalAnd Search Criterion
-edition: commerce
---
# Price LogicalAnd Criterion
diff --git a/docs/search/criteria_reference/price_logicalor_criterion.md b/docs/search/criteria_reference/price_logicalor_criterion.md
index 246a4e14ec8..b650b87a80b 100644
--- a/docs/search/criteria_reference/price_logicalor_criterion.md
+++ b/docs/search/criteria_reference/price_logicalor_criterion.md
@@ -1,6 +1,5 @@
---
description: Price LogicalOr Search Criterion
-edition: commerce
---
# Price LogicalOr Criterion
diff --git a/docs/search/criteria_reference/shipment_createdat_criterion.md b/docs/search/criteria_reference/shipment_createdat_criterion.md
deleted file mode 100644
index e0574ebb9ae..00000000000
--- a/docs/search/criteria_reference/shipment_createdat_criterion.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: Shipment CreatedAt Search Criterion
-edition: commerce
----
-
-# Shipment CreatedAt Criterion
-
-The `CreatedAt` Search Criterion searches for shipments based on the date when they were created.
-
-## Arguments
-
-- `createdAt` - date to be matched, provided as a `DateTimeInterface` object
-- `operator` - optional operator string (EQ, GT, GTE, LT, LTE)
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\ProductCatalog\Values\Product\Query\Criterion;
-use Ibexa\Contracts\Shipping\Shipment\ShipmentQuery;
-
-$criteria = new \Ibexa\Contracts\Shipping\Shipment\Query\Criterion\CreatedAt(
- new DateTime('2023-03-01 14:07:02'),
- 'GTE'
-);
-
-$query = new ShipmentQuery($criteria);
-```
diff --git a/docs/search/criteria_reference/shipment_currency_criterion.md b/docs/search/criteria_reference/shipment_currency_criterion.md
deleted file mode 100644
index 3081565e852..00000000000
--- a/docs/search/criteria_reference/shipment_currency_criterion.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-description: Shipment Currency Search Criterion
-edition: commerce
----
-
-# Shipment Currency Criterion
-
-The `Currency` Search Criterion searches for shipments based on the currency code.
-
-## Arguments
-
-- `currency` - an array of string currency codes
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion;
-use Ibexa\Contracts\Shipping\Shipment\ShipmentQuery;
-
-$query = new ShipmentQuery(
- new \Ibexa\Contracts\Shipping\Shipment\Query\Criterion\Currency(['USD', 'CZK'])
-);
-```
diff --git a/docs/search/criteria_reference/shipment_id_criterion.md b/docs/search/criteria_reference/shipment_id_criterion.md
deleted file mode 100644
index 36a7fb04794..00000000000
--- a/docs/search/criteria_reference/shipment_id_criterion.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-description: Shipment Id Search Criterion
-edition: commerce
----
-
-# Shipment Id Criterion
-
-The `Id` Search Criterion searches for shipments based on the shipment ID.
-
-## Arguments
-
-- `id` - integer that represents the shipment ID
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion;
-use Ibexa\Contracts\Shipping\Shipment\ShipmentQuery;
-
-$query = new ShipmentQuery(
- new \Ibexa\Contracts\Shipping\Shipment\Query\Criterion\Id(2)
-);
-```
diff --git a/docs/search/criteria_reference/shipment_identifier_criterion.md b/docs/search/criteria_reference/shipment_identifier_criterion.md
deleted file mode 100644
index db55e3c6587..00000000000
--- a/docs/search/criteria_reference/shipment_identifier_criterion.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-description: Shipment Identifier Search Criterion
-edition: commerce
----
-
-# Shipment Identifier Criterion
-
-The `Identifier` Search Criterion searches for shipments based on the shipment identifier.
-
-## Arguments
-
-- `identifier` - string that represents the shipment identifier
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion;
-use Ibexa\Contracts\Shipping\Shipment\ShipmentQuery;
-
-$query = new ShipmentQuery(
- new \Ibexa\Contracts\Shipping\Shipment\Query\Criterion\Identifier('f1t7z-3rb3rt')
-);
-```
diff --git a/docs/search/criteria_reference/shipment_logicaland_criterion.md b/docs/search/criteria_reference/shipment_logicaland_criterion.md
deleted file mode 100644
index 387e4c3bcf6..00000000000
--- a/docs/search/criteria_reference/shipment_logicaland_criterion.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-description: Shipment LogicalAnd Search Criterion
-edition: commerce
----
-
-# Shipment LogicalAnd Criterion
-
-The `LogicalAnd` Search Criterion matches shipments if all provided Criteria match.
-
-## Arguments
-
-- `criterion` - a set of Criteria combined by the logical operator
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Shipping\Shipment\ShipmentQuery;
-
-/** @var \Ibexa\Contracts\Shipping\Value\ShippingMethod\ShippingMethodInterface $shippingMethod */
-$query = new ShipmentQuery(
- new \Ibexa\Contracts\Shipping\Shipment\Query\Criterion\LogicalAnd(
- new \Ibexa\Contracts\Shipping\Shipment\Query\Criterion\CreatedAt(new DateTime('2023-03-01')),
- new \Ibexa\Contracts\Shipping\Shipment\Query\Criterion\ShippingMethod($shippingMethod)
- )
-);
-```
diff --git a/docs/search/criteria_reference/shipment_logicalor_criterion.md b/docs/search/criteria_reference/shipment_logicalor_criterion.md
deleted file mode 100644
index 16a07037ff1..00000000000
--- a/docs/search/criteria_reference/shipment_logicalor_criterion.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-description: Shipment LogicalOr Search Criterion
-edition: commerce
----
-
-# Shipment LogicalOr Criterion
-
-The `LogicalOr` Search Criterion matches shipments if at least one of the provided Criteria matches.
-
-## Arguments
-
-- `criterion` - a set of Criteria combined by the logical operator
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Shipping\Shipment\ShipmentQuery;
-
-/** @var \Ibexa\Contracts\Shipping\Value\ShippingMethod\ShippingMethodInterface $shippingMethod */
-$query = new ShipmentQuery(
- new \Ibexa\Contracts\Shipping\Shipment\Query\Criterion\LogicalOr(
- new \Ibexa\Contracts\Shipping\Shipment\Query\Criterion\CreatedAt(new DateTime('2023-03-01')),
- new \Ibexa\Contracts\Shipping\Shipment\Query\Criterion\ShippingMethod($shippingMethod)
- )
-);
-```
diff --git a/docs/search/criteria_reference/shipment_owner_criterion.md b/docs/search/criteria_reference/shipment_owner_criterion.md
deleted file mode 100644
index d836ff406d5..00000000000
--- a/docs/search/criteria_reference/shipment_owner_criterion.md
+++ /dev/null
@@ -1,45 +0,0 @@
----
-description: Shipment Owner Search Criterion
-edition: commerce
----
-
-# Owner Criterion
-
-The `Owner` Criterion searches for shipments based on the user reference.
-
-## Arguments
-
-- `UserReference` object - new \Ibexa\Core\Repository\Values\User\UserReference(int $userId)
-
-## Example
-
-``` php
-use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion;
-use Ibexa\Contracts\Shipping\Shipment\ShipmentQuery;
-
-$query = new ShipmentQuery(
- new \Ibexa\Contracts\Shipping\Shipment\Query\Criterion\Owner(
- new \Ibexa\Core\Repository\Values\User\UserReference(14)
- )
-);
-```
-
-`Owner` Criterion accepts also multiple values:
-
-``` php
-use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion;
-use Ibexa\Contracts\Shipping\Shipment\ShipmentQuery;
-
-/** @var \Ibexa\Contracts\Core\Repository\UserService $userService */
-$user1 = $userService->loadUser(12345);
-$user2 = $userService->loadUserByLogin('user');
-
-$query = new ShipmentQuery(
- new \Ibexa\Contracts\Shipping\Shipment\Query\Criterion\Owner(
- [
- $user1,
- $user2,
- ]
- )
-);
-```
diff --git a/docs/search/criteria_reference/shipment_search_criteria.md b/docs/search/criteria_reference/shipment_search_criteria.md
deleted file mode 100644
index f1a6ae306b5..00000000000
--- a/docs/search/criteria_reference/shipment_search_criteria.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-description: Shipment Search Criteria
-edition: commerce
----
-
-# Shipment Search Criteria reference
-
-Shipment Search Criteria are only supported by [Shipment Search (`ShipmentService::findShipments`)](shipment_api.md#get-multiple-shipments).
-
-With these Criteria you can filter shipments by their shipment identifier, shipment creation date, shipment status, shipping method, and more.
-
-## Shipment Search Criteria
-
-|Search Criterion|Search based on|
-|-----|-----|
-|[CreatedAt](shipment_createdat_criterion.md)|Date and time when shipment was created|
-|[Currency](shipment_currency_criterion.md)|Currency code|
-|[Id](shipment_id_criterion.md)|Shipment ID|
-|[Identifier](shipment_identifier_criterion.md)|Shipment identifier|
-|[LogicalAnd](shipment_logicaland_criterion.md)|Logical AND criterion that matches if all the provided Criteria match|
-|[LogicalOr](shipment_logicalor_criterion.md)|Logical OR criterion that matches if at least one of the provided Criteria matches|
-|[Owner](shipment_owner_criterion.md)|Owner based on the user reference|
-|[ShippingMethod](shipment_shipping_method_criterion.md)|Shipping method applied to the shipment|
-|[Status](shipment_status_criterion.md)|Status of the shipment|
-|[UpdatedAt](shipment_updatedat_criterion.md)|Date and time when status of the shipment was updated|
diff --git a/docs/search/criteria_reference/shipment_shipping_method_criterion.md b/docs/search/criteria_reference/shipment_shipping_method_criterion.md
deleted file mode 100644
index 447b71602be..00000000000
--- a/docs/search/criteria_reference/shipment_shipping_method_criterion.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-description: Shipment ShippingMethod Search Criterion
-edition: commerce
----
-
-# Shipment ShippingMethod Criterion
-
-The `ShippingMethod` Search Criterion searches for shipments based on a shipping method applied to them.
-
-## Arguments
-
-- `value` - one or an array of `ShippingMethodInterface` objects that indicate the shipping methods
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion;
-use Ibexa\Contracts\Shipping\Shipment\ShipmentQuery;
-
-/** @var \Ibexa\Contracts\Shipping\Value\ShippingMethod\ShippingMethodInterface $shippingMethod */
-$query = new ShipmentQuery(
- new \Ibexa\Contracts\Shipping\Shipment\Query\Criterion\ShippingMethod($shippingMethod)
-);
-```
diff --git a/docs/search/criteria_reference/shipment_status_criterion.md b/docs/search/criteria_reference/shipment_status_criterion.md
deleted file mode 100644
index 05b0ec1a51c..00000000000
--- a/docs/search/criteria_reference/shipment_status_criterion.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-description: Shipment Status Search Criterion
-edition: commerce
----
-
-# Shipment Status Criterion
-
-The `Status` Search Criterion searches for shipments based on shipment status.
-
-## Arguments
-
-- `status` - string that represents the status of the shipment, takes values defined in shipment processing workflow
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion;
-use Ibexa\Contracts\Shipping\Shipment\ShipmentQuery;
-
-$query = new ShipmentQuery(
- new \Ibexa\Contracts\Shipping\Shipment\Query\Criterion\Status('pending')
-);
-```
diff --git a/docs/search/criteria_reference/shipment_updatedat_criterion.md b/docs/search/criteria_reference/shipment_updatedat_criterion.md
deleted file mode 100644
index 72763c3c488..00000000000
--- a/docs/search/criteria_reference/shipment_updatedat_criterion.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: Shipment UpdatedAt Search Criterion
-edition: commerce
----
-
-# Shipment UpdatedAt Criterion
-
-The `UpdatedAt` Search Criterion searches for shipments based on the date when their status was updated.
-
-## Arguments
-
-- `updatedAt` - date to be matched, provided as a `DateTimeInterface` object
-- `operator` - optional operator string (EQ, GT, GTE, LT, LTE)
-
-## Example
-
-### PHP
-
-``` php
-use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion;
-use Ibexa\Contracts\Shipping\Shipment\ShipmentQuery;
-
-$criteria = new \Ibexa\Contracts\Shipping\Shipment\Query\Criterion\UpdatedAt(
- new DateTime('2023-03-01'),
- 'GTE'
-);
-
-$query = new ShipmentQuery($criteria);
-```
diff --git a/docs/search/discounts_search_reference/discounts_criteria.md b/docs/search/discounts_search_reference/discounts_criteria.md
deleted file mode 100644
index ff024157d13..00000000000
--- a/docs/search/discounts_search_reference/discounts_criteria.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-month_change: false
-editions:
- - commerce
-description: Search Criteria available for Discounts search
----
-
-# Discounts Search Criterion reference
-
-Search Criteria are found in the [`Ibexa\Contracts\Discounts\Value\Query\Criterion`](/api/php_api/php_api_reference/namespaces/ibexa-contracts-discounts-value-query-criterion.html) namespace, implementing the [CriterionInterface](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-CriterionInterface.html) interface:
-
-| Criterion | Description |
-|---|---|
-| [CreatedAtCriterion](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-CreatedAtCriterion.html) | Find discounts with given creation date |
-| [CreatorCriterion](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-CreatorCriterion.html) | Find discounts created by specific users |
-| [EndDateCriterion](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-EndDateCriterion.html) | Find discounts by their end date. For permanent discounts, the end date is set to `null` |
-| [IndexedAtCriterion](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-IndexedAtCriterion.html) | Find discounts based on the date and time when they were indexed |
-| [IdentifierCriterion](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-IdentifierCriterion.html) | Find discounts by their identifier |
-| [IsEnabledCriterion](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-IsEnabledCriterion.html) | Find discounts by their status |
-| [LogicalAnd](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-LogicalAnd.html) | Composite criterion to group multiple criteria using the AND condition |
-| [LogicalOr](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-LogicalOr.html) | Composite criterion to group multiple criteria using the OR condition |
-| [NameCriterion](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-NameCriterion.html) | Find discounts by their name |
-| [PriorityCriterion](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-PriorityCriterion.html) | Find discounts by their priority |
-| [StartDateCriterion](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-StartDateCriterion.html) | Find discounts with given start date |
-| [TypeCriterion](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-TypeCriterion.html) | Find cart or catalog discounts by using constants from the [DiscountType](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-DiscountType.html) class |
-| [UpdatedAtCriterion](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-Criterion-UpdatedAtCriterion.html) | Find discounts based on the date and time when they were updated |
-
-You can use the [FieldValueCriterion's constants](/api/php_api/php_api_reference/classes/Ibexa-Contracts-CoreSearch-Values-Query-Criterion-FieldValueCriterion.html#constants) like `FieldValueCriterion::COMPARISON_CONTAINS` or `FieldValueCriterion::COMPARISON_STARTS_WITH` to specify the operator for the condition.
-
-Use the `limit` and `offset` properties of [DiscountQuery](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-DiscountQuery.html#constants) to limit the number of results and implement pagination.
-
-The following example shows how you can use the criteria to find all the currently active discounts:
-
-``` php hl_lines="13-20"
-[[= include_code('code_samples/discounts/src/Query/Search.php') =]]
-```
-
-The criteria limit the result set to discounts matching all of the conditions listed below:
-
-- discount must be enabled
-- discount start date is not after the current date
-- discount end date is not before the current date or is not specified
diff --git a/docs/search/discounts_search_reference/discounts_sort_clauses.md b/docs/search/discounts_search_reference/discounts_sort_clauses.md
deleted file mode 100644
index 2a77025ad21..00000000000
--- a/docs/search/discounts_search_reference/discounts_sort_clauses.md
+++ /dev/null
@@ -1,36 +0,0 @@
----
-month_change: false
-editions:
- - commerce
-description: Sort Clauses available for Discounts search
----
-
-# Discounts Search Sort Clauses reference
-
-Sort Clauses are found in the [`Ibexa\Contracts\Discounts\Value\Query\SortClause`](/api/php_api/php_api_reference/namespaces/ibexa-contracts-discounts-value-query-sortclause.html) namespace, implementing the [SortClauseInterface](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClauseInterface.html) interface:
-
-| Name | Description |
-| --- | --- |
-| [CreatedAt](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-CreatedAt.html)| Sort by discount's creation date |
-| [EndDate](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-EndDate.html)| Sort by discount's end date |
-| [Id](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-Id.html)| Sort by discount's database ID |
-| [Identifier](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-Identifier.html)| Sort by discount identifier |
-| [OverridePrioritization](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-OverridePrioritization.html)| Sort prioritizing discounts with discount code over automatic ones |
-| [Priority](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-Priority.html)| Sort by discount priority |
-| [StartDate](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-StartDate.html)| Sort by discount start date |
-| [Type](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-Type.html)| Sort by the place where the discount activates: catalog or cart. When sorting with ascending order, cart discounts are returned first. |
-| [UpdatedAt](/api/php_api/php_api_reference/classes/Ibexa-Contracts-Discounts-Value-Query-SortClause-UpdatedAt.html)| Sort by discount modification date |
-
-The following example shows how to use them to sort the searched discounts:
-
-``` php hl_lines="22-24"
-[[= include_code('code_samples/discounts/src/Query/Search.php') =]]
-```
-
-The returned active discounts are sorted by:
-
-- the place where they activate: catalog or cart, with `cart` discounts returned first
-- priority (descending)
-- creation date (descending)
-
-You can change the default sorting order by using the `SORT_ASC` and `SORT_DESC` constants from [`AbstractSortClause`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-CoreSearch-Values-Query-AbstractSortClause.html#constants).
diff --git a/docs/search/shopping_list_search_reference/shopping_list_criteria.md b/docs/search/shopping_list_search_reference/shopping_list_criteria.md
deleted file mode 100644
index da4130e18dc..00000000000
--- a/docs/search/shopping_list_search_reference/shopping_list_criteria.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-description: Shopping list search criteria help define and fine-tune search queries for shopping lists.
-editions: lts-update commerce
-month_change: false
----
-
-# Shopping list search criteria reference
-
-The criteria are in the [`Ibexa\Contracts\ShoppingList\ShoppingList\Query\Criterion` namespace](/api/php_api/php_api_reference/namespaces/ibexa-contracts-shoppinglist-value-query-criterion.html)
-and implement the [`Ibexa\Contracts\ShoppingList\Value\Query\CriterionInterface` interface](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Value-Query-CriterionInterface.html).
-
-| Criterion | Description |
-|-----------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------|
-| [`CreatedAtCriterion`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Value-Query-Criterion-CreatedAtCriterion.html) | Find shopping lists created before or after a given date. |
-| [`IsDefaultCriterion`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Value-Query-Criterion-IsDefaultCriterion.html) | Find shopping lists that are (or are not) the default one. |
-| [`LogicalAnd`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Value-Query-Criterion-LogicalAnd.html) | Combine the criteria passed as arguments. |
-| [`NameCriterion`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Value-Query-Criterion-NameCriterion.html) | Find shopping lists with a name containing the given string. |
-| [`OwnerCriterion`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Value-Query-Criterion-OwnerCriterion.html) | Find shopping lists belonging to the given user or one of the given users. |
-| [`ProductCodeCriterion`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Value-Query-Criterion-ProductCodeCriterion.html) | Find shopping lists containing an entry with the given product code. |
-| [`UpdatedAtCriterion`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Value-Query-Criterion-UpdatedAtCriterion.html) | Find shopping lists updated before or after a given date. |
-
-The following example query returns all shopping lists available to the current user.
-If the user’s permissions include the [`ShoppingListOwner` `self` limitation](limitation_reference.md#shopping-list-limitation), the query returns only lists created by that user.
-Otherwise, it returns all shopping lists in the system.
-
-``` php
-use Ibexa\Contracts\ShoppingList\Value\ShoppingListQuery;
-
-$query = new ShoppingListQuery();
-```
-
-The following example query returns current user's shopping lists, excluding the default one, and sorts them by name:
-
-``` php hl_lines="7-8"
-[[= include_code('code_samples/shopping_list/search/criteria.php', 3, remove_indent=True) =]]
-```
-
-For more information about shopping lists search, see [List and search shopping lists](shopping_list_api.md#list-and-search-shopping-lists).
diff --git a/docs/search/shopping_list_search_reference/shopping_list_sort_clauses.md b/docs/search/shopping_list_search_reference/shopping_list_sort_clauses.md
deleted file mode 100644
index 85353150abd..00000000000
--- a/docs/search/shopping_list_search_reference/shopping_list_sort_clauses.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-description: Shopping list search sort clauses help define result order of search queries for shopping lists.
-editions: lts-update commerce
-month_change: false
----
-
-# Shopping list search sort clauses reference
-
-The sort clauses are in the [`Ibexa\Contracts\ShoppingList\Value\Query\SortClause` namespace](/api/php_api/php_api_reference/namespaces/ibexa-contracts-shoppinglist-value-query-sortclause.html).
-
-| Sort clause | Description |
-|--------------------------------------------------------------------------------------------------------------------------|--------------------------------|
-| [`CreatedAt`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Value-Query-SortClause-CreatedAt.html) | Sort by creation date |
-| [`IsDefault`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Value-Query-SortClause-IsDefault.html) | Sort by being default or not |
-| [`Name`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Value-Query-SortClause-Name.html) | Sort by name |
-| [`UpdatedAt`](/api/php_api/php_api_reference/classes/Ibexa-Contracts-ShoppingList-Value-Query-SortClause-UpdatedAt.html) | Sort by last modification date |
-
-The following example returns all the shopping lists available to the current user.
-The returned shopping list are sorted with the default shopping list on top, followed by the rest sorted by their name.
-
-``` php hl_lines="10-11"
-[[= include_code('code_samples/shopping_list/search/sort_clauses.php', 3, remove_indent=True) =]]
-```
-
-For more information about shopping lists search, see [List and search shopping lists](shopping_list_api.md#list-and-search-shopping-lists).
diff --git a/docs/search/sort_clause_reference/order_created_sort_clause.md b/docs/search/sort_clause_reference/order_created_sort_clause.md
deleted file mode 100644
index 20a3a1f8c29..00000000000
--- a/docs/search/sort_clause_reference/order_created_sort_clause.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: Order Created Sort Clause
-edition: commerce
----
-
-# Order Created Sort Clause
-
-The `Created` Sort Clause sorts search results by the date and time when the order was created.
-
-## Arguments
-
-- (optional) `sortDirection` - `Created` constant, either `Created::SORT_ASC` or `Created::SORT_DESC`
-
-## Example
-
-``` php
-use Ibexa\Contracts\OrderManagement\Value\Order\OrderQuery;
-
-$criteria = null;
-
-$orderQuery = new OrderQuery(
- $criteria,
- [
- new \Ibexa\Contracts\OrderManagement\Value\Order\Query\SortClause\Created(
- \Ibexa\Contracts\OrderManagement\Value\Order\Query\SortClause\Created::SORT_ASC
- ),
- ]
-);
-```
diff --git a/docs/search/sort_clause_reference/order_id_sort_clause.md b/docs/search/sort_clause_reference/order_id_sort_clause.md
deleted file mode 100644
index 74db82f0b95..00000000000
--- a/docs/search/sort_clause_reference/order_id_sort_clause.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: Order Id Sort Clause
-edition: commerce
----
-
-# Order Id Sort Clause
-
-The `Id` Sort Clause sorts search results by order Id.
-
-## Arguments
-
-- (optional) `sortDirection` - `Id` constant, either `Id::SORT_ASC` or `Id::SORT_DESC`
-
-## Example
-
-``` php
-use Ibexa\Contracts\OrderManagement\Value\Order\OrderQuery;
-
-$criteria = null;
-
-$orderQuery = new OrderQuery(
- $criteria,
- [
- new \Ibexa\Contracts\OrderManagement\Value\Order\Query\SortClause\Id(
- \Ibexa\Contracts\OrderManagement\Value\Order\Query\SortClause\Id::SORT_ASC
- ),
- ]
-);
-```
diff --git a/docs/search/sort_clause_reference/order_sort_clauses.md b/docs/search/sort_clause_reference/order_sort_clauses.md
deleted file mode 100644
index 3ebdf9f95a1..00000000000
--- a/docs/search/sort_clause_reference/order_sort_clauses.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-description: Order Sort Clauses
-edition: commerce
----
-
-# Order Sort Clauses
-
-Order Sort Clauses are only supported by [Order Search (`OrderService::findOrders`)](order_management_api.md#get-multiple-orders).
-
-By using Sort Clauses you can sort orders by specific attributes, for example: creation date, status, and more.
-
-| Sort Clause | Sorting based on |
-|-----|-----|
-|[Id](order_id_sort_clause.md)|Order ID|
-|[Created](order_created_sort_clause.md)|Date and time when order was created|
-|[Updated](order_updated_sort_clause.md)|Date and time when order status was updated|
-|[Status](order_status_sort_clause.md)|Order status|
diff --git a/docs/search/sort_clause_reference/order_status_sort_clause.md b/docs/search/sort_clause_reference/order_status_sort_clause.md
deleted file mode 100644
index 3173d9bf18d..00000000000
--- a/docs/search/sort_clause_reference/order_status_sort_clause.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: Order Status Sort Clause
-edition: commerce
----
-
-# Order Status Sort Clause
-
-The `Status` Sort Clause sorts search results by order status.
-
-## Arguments
-
-- (optional) `sortDirection` - `Status` constant, either `Status::SORT_ASC` or `Status::SORT_DESC`
-
-## Example
-
-``` php
-use Ibexa\Contracts\OrderManagement\Value\Order\OrderQuery;
-
-$criteria = null;
-
-$orderQuery = new OrderQuery(
- $criteria,
- [
- new \Ibexa\Contracts\OrderManagement\Value\Order\Query\SortClause\Status(
- \Ibexa\Contracts\OrderManagement\Value\Order\Query\SortClause\Status::SORT_ASC
- ),
- ]
-);
-```
diff --git a/docs/search/sort_clause_reference/order_updated_sort_clause.md b/docs/search/sort_clause_reference/order_updated_sort_clause.md
deleted file mode 100644
index 87a3a63d8c7..00000000000
--- a/docs/search/sort_clause_reference/order_updated_sort_clause.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: Order Updated Sort Clause
-edition: commerce
----
-
-# Order Updated Sort Clause
-
-The `Updated` Sort Clause sorts search results by the date and time when order status was updated.
-
-## Arguments
-
-- (optional) `sortDirection` - `Updated` constant, either `Updated::SORT_ASC` or `Updated::SORT_DESC`
-
-## Example
-
-``` php
-use Ibexa\Contracts\OrderManagement\Value\Order\OrderQuery;
-
-$criteria = null;
-
-$orderQuery = new OrderQuery(
- $criteria,
- [
- new \Ibexa\Contracts\OrderManagement\Value\Order\Query\SortClause\Updated(
- \Ibexa\Contracts\OrderManagement\Value\Order\Query\SortClause\Updated::SORT_ASC
- ),
- ]
-);
-```
diff --git a/docs/search/sort_clause_reference/payment_createdat_sort_clause.md b/docs/search/sort_clause_reference/payment_createdat_sort_clause.md
deleted file mode 100644
index 5c9c6572bc4..00000000000
--- a/docs/search/sort_clause_reference/payment_createdat_sort_clause.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: Payment CreatedAt Sort Clause
-edition: commerce
----
-
-# Payment CreatedAt Sort Clause
-
-The `CreatedAt` Sort Clause sorts search results by the date and time when the payment was created.
-
-## Arguments
-
-- (optional) `sortDirection` - `CreatedAt` constant, either `CreatedAt::SORT_ASC` or `CreatedAt::SORT_DESC`
-
-## Example
-
-``` php
-use Ibexa\Contracts\Payment\Payment\PaymentQuery;
-
-$criteria = null;
-
-$paymentQuery = new PaymentQuery(
- $criteria,
- [
- new \Ibexa\Contracts\Payment\Payment\Query\SortClause\CreatedAt(
- \Ibexa\Contracts\Payment\Payment\Query\SortClause\CreatedAt::SORT_ASC
- ),
- ]
-);
-```
diff --git a/docs/search/sort_clause_reference/payment_id_sort_clause.md b/docs/search/sort_clause_reference/payment_id_sort_clause.md
deleted file mode 100644
index b1ae85c22fc..00000000000
--- a/docs/search/sort_clause_reference/payment_id_sort_clause.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: Payment Id Sort Clause
-edition: commerce
----
-
-# Payment Id Sort Clause
-
-The `Id` Sort Clause sorts search results by payment ID.
-
-## Arguments
-
-- (optional) `sortDirection` - `Id` constant, either `Id::SORT_ASC` or `Id::SORT_DESC`
-
-## Example
-
-``` php
-use Ibexa\Contracts\Payment\Payment\PaymentQuery;
-
-$criteria = null;
-
-$paymentQuery = new PaymentQuery(
- $criteria,
- [
- new \Ibexa\Contracts\Payment\Payment\Query\SortClause\Id(
- \Ibexa\Contracts\Payment\Payment\Query\SortClause\Id::SORT_ASC
- ),
- ]
-);
-```
diff --git a/docs/search/sort_clause_reference/payment_identifier_sort_clause.md b/docs/search/sort_clause_reference/payment_identifier_sort_clause.md
deleted file mode 100644
index 9eb188771b3..00000000000
--- a/docs/search/sort_clause_reference/payment_identifier_sort_clause.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: Payment Identifier Sort Clause
-edition: commerce
----
-
-# Payment Identifier Sort Clause
-
-The `Identifier` Sort Clause sorts search results by payment identifier.
-
-## Arguments
-
-- (optional) `sortDirection` - `Identifier` constant, either `Identifier::SORT_ASC` or `Identifier::SORT_DESC`
-
-## Example
-
-``` php
-use Ibexa\Contracts\Payment\Payment\PaymentQuery;
-
-$criteria = null;
-
-$paymentQuery = new PaymentQuery(
- $criteria,
- [
- new \Ibexa\Contracts\Payment\Payment\Query\SortClause\Identifier(
- \Ibexa\Contracts\Payment\Payment\Query\SortClause\Identifier::SORT_ASC
- ),
- ]
-);
-```
diff --git a/docs/search/sort_clause_reference/payment_method_createdat_sort_clause.md b/docs/search/sort_clause_reference/payment_method_createdat_sort_clause.md
deleted file mode 100644
index e9b386d399f..00000000000
--- a/docs/search/sort_clause_reference/payment_method_createdat_sort_clause.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: Payment Method CreatedAt Sort Clause
-edition: commerce
----
-
-# Payment Method CreatedAt Sort Clause
-
-The `CreatedAt` Sort Clause sorts search results by the date and time when the payment method was created.
-
-## Arguments
-
-- (optional) `sortDirection` - `CreatedAt` constant, either `CreatedAt::SORT_ASC` or `CreatedAt::SORT_DESC`
-
-## Example
-
-``` php
-use Ibexa\Contracts\Payment\PaymentMethod\PaymentMethodQuery;
-
-$criteria = null;
-
-$paymentMethodQuery = new PaymentMethodQuery(
- $criteria,
- [
- new \Ibexa\Contracts\Payment\PaymentMethod\Query\SortClause\CreatedAt(
- \Ibexa\Contracts\Payment\PaymentMethod\Query\SortClause\CreatedAt::SORT_ASC
- ),
- ]
-);
-```
diff --git a/docs/search/sort_clause_reference/payment_method_enabled_sort_clause.md b/docs/search/sort_clause_reference/payment_method_enabled_sort_clause.md
deleted file mode 100644
index 85e7f6e3e33..00000000000
--- a/docs/search/sort_clause_reference/payment_method_enabled_sort_clause.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: Payment Method Enabled Sort Clause
-edition: commerce
----
-
-# Payment Method Enabled Sort Clause
-
-The `Enabled` Sort Clause sorts search results by payment method status.
-
-## Arguments
-
-- (optional) `sortDirection` - `Enabled` constant, either `Enabled::SORT_ASC` or `Enabled::SORT_DESC`
-
-## Example
-
-``` php
-use Ibexa\Contracts\Payment\PaymentMethod\PaymentMethodQuery;
-
-$criteria = null;
-
-$paymentMethodQuery = new PaymentMethodQuery(
- $criteria,
- [
- new \Ibexa\Contracts\Payment\PaymentMethod\Query\SortClause\Enabled(
- \Ibexa\Contracts\Payment\PaymentMethod\Query\SortClause\Enabled::SORT_DESC
- ),
- ]
-);
-```
diff --git a/docs/search/sort_clause_reference/payment_method_id_sort_clause.md b/docs/search/sort_clause_reference/payment_method_id_sort_clause.md
deleted file mode 100644
index 5173b48c3e4..00000000000
--- a/docs/search/sort_clause_reference/payment_method_id_sort_clause.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: Payment Method Id Sort Clause
-edition: commerce
----
-
-# Payment Method Id Sort Clause
-
-The `Id` Sort Clause sorts search results by payment method ID.
-
-## Arguments
-
-- (optional) `sortDirection` - `Id` constant, either `Id::SORT_ASC` or `Id::SORT_DESC`
-
-## Example
-
-``` php
-use Ibexa\Contracts\Payment\PaymentMethod\PaymentMethodQuery;
-
-$criteria = null;
-
-$paymentMethodQuery = new PaymentMethodQuery(
- $criteria,
- [
- new \Ibexa\Contracts\Payment\PaymentMethod\Query\SortClause\Id(
- \Ibexa\Contracts\Payment\PaymentMethod\Query\SortClause\Id::SORT_ASC
- ),
- ]
-);
-```
diff --git a/docs/search/sort_clause_reference/payment_method_identifier_sort_clause.md b/docs/search/sort_clause_reference/payment_method_identifier_sort_clause.md
deleted file mode 100644
index 8a70fd9bd2e..00000000000
--- a/docs/search/sort_clause_reference/payment_method_identifier_sort_clause.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: Payment Method Identifier Sort Clause
-edition: commerce
----
-
-# Payment Method Identifier Sort Clause
-
-The `Identifier` Sort Clause sorts search results by payment method identifier.
-
-## Arguments
-
-- (optional) `sortDirection` - `Identifier` constant, either `Identifier::SORT_ASC` or `Identifier::SORT_DESC`
-
-## Example
-
-``` php
-use Ibexa\Contracts\Payment\PaymentMethod\PaymentMethodQuery;
-
-$criteria = null;
-
-$paymentMethodQuery = new PaymentMethodQuery(
- $criteria,
- [
- new \Ibexa\Contracts\Payment\PaymentMethod\Query\SortClause\Identifier(
- \Ibexa\Contracts\Payment\PaymentMethod\Query\SortClause\Identifier::SORT_ASC
- ),
- ]
-);
-```
diff --git a/docs/search/sort_clause_reference/payment_method_sort_clauses.md b/docs/search/sort_clause_reference/payment_method_sort_clauses.md
deleted file mode 100644
index dd468083346..00000000000
--- a/docs/search/sort_clause_reference/payment_method_sort_clauses.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-description: Payment Method Sort Clauses
-edition: commerce
-page_type: reference
----
-
-
-# Payment Method Sort Clauses
-
-Payment Method Sort Clauses are only supported by [Payment Method Search (`PaymentMethodService::findPaymentMethods`)](payment_method_api.md#get-multiple-payment-methods).
-
-By using Sort Clauses you can sort payment methods by specific attributes, for example: creation date, ID, and more.
-
-| Sort Clause | Sorting based on |
-|-----|-----|
-|[CreatedAt](payment_method_createdat_sort_clause.md)|Date and time when payment method was created|
-|[Enabled](payment_method_enabled_sort_clause.md)|Payment method status|
-|[Id](payment_method_id_sort_clause.md)|Payment method ID|
-|[Identifier](payment_method_identifier_sort_clause.md)|Payment method identifier|
-|[UpdatedAt](payment_method_updatedat_sort_clause.md)|Date and time when payment method status was updated|
diff --git a/docs/search/sort_clause_reference/payment_method_updatedat_sort_clause.md b/docs/search/sort_clause_reference/payment_method_updatedat_sort_clause.md
deleted file mode 100644
index da117cf6c32..00000000000
--- a/docs/search/sort_clause_reference/payment_method_updatedat_sort_clause.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: Payment Method UpdatedAt Sort Clause
-edition: commerce
----
-
-# Payment Method UpdatedAt Sort Clause
-
-The `UpdatedAt` Sort Clause sorts search results by the date and time when payment method status was updated.
-
-## Arguments
-
-- (optional) `sortDirection` - `UpdatedAt` constant, either `UpdatedAt::SORT_ASC` or `UpdatedAt::SORT_DESC`
-
-## Example
-
-``` php
-use Ibexa\Contracts\Payment\PaymentMethod\PaymentMethodQuery;
-
-$criteria = null;
-
-$paymentMethodQuery = new PaymentMethodQuery(
- $criteria,
- [
- new \Ibexa\Contracts\Payment\PaymentMethod\Query\SortClause\UpdatedAt(
- \Ibexa\Contracts\Payment\PaymentMethod\Query\SortClause\UpdatedAt::SORT_DESC
- ),
- ]
-);
-```
diff --git a/docs/search/sort_clause_reference/payment_sort_clauses.md b/docs/search/sort_clause_reference/payment_sort_clauses.md
deleted file mode 100644
index 1f480abdfd6..00000000000
--- a/docs/search/sort_clause_reference/payment_sort_clauses.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-description: Payment Sort Clauses
-edition: commerce
----
-
-
-# Payment Sort Clauses
-
-Payment Sort Clauses are only supported by [Payment Search (`PaymentServiceInterface::findPayments`)](payment_api.md#get-multiple-payments).
-
-By using Sort Clauses you can sort payments by specific attributes, for example: creation date, status, and more.
-
-| Sort Clause | Sorting based on |
-|-----|-----|
-|[Id](payment_id_sort_clause.md)|Payment ID|
-|[Identifier](payment_identifier_sort_clause.md)|Payment identifier|
-|[CreatedAt](payment_createdat_sort_clause.md)|Date and time when payment was created|
-|[UpdatedAt](payment_updatedat_sort_clause.md)|Date and time when payment status was updated|
-|[Status](payment_status_sort_clause.md)|Payment status|
diff --git a/docs/search/sort_clause_reference/payment_status_sort_clause.md b/docs/search/sort_clause_reference/payment_status_sort_clause.md
deleted file mode 100644
index d7f805f5241..00000000000
--- a/docs/search/sort_clause_reference/payment_status_sort_clause.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: Payment Status Sort Clause
-edition: commerce
----
-
-# Payment Status Sort Clause
-
-The `Status` Sort Clause sorts search results by payment status.
-
-## Arguments
-
-- (optional) `sortDirection` - `Status` constant, either `Status::SORT_ASC` or `Status::SORT_DESC`
-
-## Example
-
-``` php
-use Ibexa\Contracts\Payment\Payment\PaymentQuery;
-
-$criteria = null;
-
-$paymentQuery = new PaymentQuery(
- $criteria,
- [
- new \Ibexa\Contracts\Payment\Payment\Query\SortClause\Status(
- \Ibexa\Contracts\Payment\Payment\Query\SortClause\Status::SORT_ASC
- ),
- ]
-);
-```
diff --git a/docs/search/sort_clause_reference/payment_updatedat_sort_clause.md b/docs/search/sort_clause_reference/payment_updatedat_sort_clause.md
deleted file mode 100644
index 344505ba417..00000000000
--- a/docs/search/sort_clause_reference/payment_updatedat_sort_clause.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-description: Payment UpdatedAt Sort Clause
-edition: commerce
----
-
-# Payment UpdatedAt Sort Clause
-
-The `UpdatedAt` Sort Clause sorts search results by the date and time when payment status was updated.
-
-## Arguments
-
-- (optional) `sortDirection` - `UpdatedAt` constant, either `UpdatedAt::SORT_ASC` or `UpdatedAt::SORT_DESC`
-
-## Example
-
-``` php
-use Ibexa\Contracts\Payment\Payment\PaymentQuery;
-
-$criteria = null;
-
-$paymentQuery = new PaymentQuery(
- $criteria,
- [
- new \Ibexa\Contracts\Payment\Payment\Query\SortClause\UpdatedAt(
- \Ibexa\Contracts\Payment\Payment\Query\SortClause\UpdatedAt::SORT_ASC
- ),
- ]
-);
-```
diff --git a/docs/search/sort_clause_reference/shipment_createdat_sort_clause.md b/docs/search/sort_clause_reference/shipment_createdat_sort_clause.md
deleted file mode 100644
index b8526a0aa28..00000000000
--- a/docs/search/sort_clause_reference/shipment_createdat_sort_clause.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-description: Shipment CreatedAt Sort Clause
-edition: commerce
----
-
-# Shipment CreatedAt Sort Clause
-
-The `CreatedAt` Sort Clause sorts search results by the date and time when the shipment was created.
-
-## Arguments
-
-- (optional) `sortDirection` - `CreatedAt` constant, either `CreatedAt::SORT_ASC` or `CreatedAt::SORT_DESC`
-
-## Example
-
-``` php
-use Ibexa\Contracts\Shipping\Shipment\ShipmentQuery;
-
-/** @var \Ibexa\Contracts\Shipping\Shipment\Query\CriterionInterface $criteria */
-$shipmentQuery = new ShipmentQuery(
- $criteria,
- [
- new \Ibexa\Contracts\Shipping\Shipment\Query\SortClause\CreatedAt(
- \Ibexa\Contracts\Shipping\Shipment\Query\SortClause\CreatedAt::SORT_ASC
- ),
- ]
-);
-```
diff --git a/docs/search/sort_clause_reference/shipment_id_sort_clause.md b/docs/search/sort_clause_reference/shipment_id_sort_clause.md
deleted file mode 100644
index 55f63a65609..00000000000
--- a/docs/search/sort_clause_reference/shipment_id_sort_clause.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-description: Shipment Id Sort Clause
-edition: commerce
----
-
-# Shipment Id Sort Clause
-
-The `Id` Sort Clause sorts search results by shipment Id.
-
-## Arguments
-
-- (optional) `sortDirection` - `Id` constant, either `Id::SORT_ASC` or `Id::SORT_DESC`
-
-## Example
-
-``` php
-use Ibexa\Contracts\Shipping\Shipment\ShipmentQuery;
-
-/** @var \Ibexa\Contracts\Shipping\Shipment\Query\CriterionInterface $criteria */
-$shipmentQuery = new ShipmentQuery(
- $criteria,
- [
- new \Ibexa\Contracts\Shipping\Shipment\Query\SortClause\Id(
- \Ibexa\Contracts\Shipping\Shipment\Query\SortClause\Id::SORT_ASC
- ),
- ]
-);
-```
diff --git a/docs/search/sort_clause_reference/shipment_identifier_sort_clause.md b/docs/search/sort_clause_reference/shipment_identifier_sort_clause.md
deleted file mode 100644
index 18a93a034ea..00000000000
--- a/docs/search/sort_clause_reference/shipment_identifier_sort_clause.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-description: Shipment Identifier Sort Clause
-edition: commerce
----
-
-# Shipment Identifier Sort Clause
-
-The `Identifier` Sort Clause sorts search results by shipment identifier.
-
-## Arguments
-
-- (optional) `sortDirection` - `Identifier` constant, either `Identifier::SORT_ASC` or `Identifier::SORT_DESC`
-
-## Example
-
-``` php
-use Ibexa\Contracts\Shipping\Shipment\ShipmentQuery;
-
-/** @var \Ibexa\Contracts\Shipping\Shipment\Query\CriterionInterface $criteria */
-$shipmentQuery = new ShipmentQuery(
- $criteria,
- [
- new \Ibexa\Contracts\Shipping\Shipment\Query\SortClause\Identifier(
- \Ibexa\Contracts\Shipping\Shipment\Query\SortClause\Identifier::SORT_ASC
- ),
- ]
-);
-```
diff --git a/docs/search/sort_clause_reference/shipment_sort_clauses.md b/docs/search/sort_clause_reference/shipment_sort_clauses.md
deleted file mode 100644
index 394b16658fc..00000000000
--- a/docs/search/sort_clause_reference/shipment_sort_clauses.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-description: Shipment Sort Clauses
-edition: commerce
-page_type: reference
-
----
-
-# Shipment Sort Clauses
-
-Shipment Sort Clauses are only supported by [Shipment Search (`ShipmentService::findShipments`)](shipment_api.md#get-multiple-shipments).
-
-By using Sort Clauses you can sort shipments by specific attributes, for example, creation date or status.
-
-| Sort Clause | Sorting based on |
-|-----|-----|
-|[Id](shipment_id_sort_clause.md)|Shipment ID|
-|[Identifier](shipment_identifier_sort_clause.md)|Shipment identifier|
-|[CreatedAt](shipment_createdat_sort_clause.md)|Date and time when shipment was created|
-|[UpdatedAt](shipment_updatedat_sort_clause.md)|Date and time when shipment status was updated|
-|[Status](shipment_status_sort_clause.md)|Shipment status|
diff --git a/docs/search/sort_clause_reference/shipment_status_sort_clause.md b/docs/search/sort_clause_reference/shipment_status_sort_clause.md
deleted file mode 100644
index f4a48e908ae..00000000000
--- a/docs/search/sort_clause_reference/shipment_status_sort_clause.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-description: Shipment Status Sort Clause
-edition: commerce
----
-
-# Shipment Status Sort Clause
-
-The `Status` Sort Clause sorts search results by shipment status.
-
-## Arguments
-
-- (optional) `sortDirection` - `Status` constant, either `Status::SORT_ASC` or `Status::SORT_DESC`
-
-## Example
-
-``` php
-use Ibexa\Contracts\Shipping\Shipment\ShipmentQuery;
-
-/** @var \Ibexa\Contracts\Shipping\Shipment\Query\CriterionInterface $criteria */
-$shipmentQuery = new ShipmentQuery(
- $criteria,
- [
- new \Ibexa\Contracts\Shipping\Shipment\Query\SortClause\Status(
- \Ibexa\Contracts\Shipping\Shipment\Query\SortClause\Status::SORT_ASC
- ),
- ]
-);
-```
diff --git a/docs/search/sort_clause_reference/shipment_updatedat_sort_clause.md b/docs/search/sort_clause_reference/shipment_updatedat_sort_clause.md
deleted file mode 100644
index 412a4521135..00000000000
--- a/docs/search/sort_clause_reference/shipment_updatedat_sort_clause.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-description: Shipment UpdatedAt Sort Clause
-edition: commerce
----
-
-# Shipment UpdatedAt Sort Clause
-
-The `UpdatedAt` Sort Clause sorts search results by the date and time when shipment status was updated.
-
-## Arguments
-
-- (optional) `sortDirection` - `UpdatedAt` constant, either `UpdatedAt::SORT_ASC` or `UpdatedAt::SORT_DESC`
-
-## Example
-
-``` php
-use Ibexa\Contracts\Shipping\Shipment\ShipmentQuery;
-
-/** @var \Ibexa\Contracts\Shipping\Shipment\Query\CriterionInterface $criteria */
-$shipmentQuery = new ShipmentQuery(
- $criteria,
- [
- new \Ibexa\Contracts\Shipping\Shipment\Query\SortClause\UpdatedAt(
- \Ibexa\Contracts\Shipping\Shipment\Query\SortClause\UpdatedAt::SORT_ASC
- ),
- ]
-);
-```
diff --git a/docs/snippets/catalog_permissions_note.md b/docs/snippets/catalog_permissions_note.md
deleted file mode 100644
index bcea114516c..00000000000
--- a/docs/snippets/catalog_permissions_note.md
+++ /dev/null
@@ -1,4 +0,0 @@
-!!! note
-
- By default, the anonymous user doesn't have permissions to view products.
- To change this, add the `Product/View` Policy to the Anonymous role.
diff --git a/docs/snippets/commerce_badge.md b/docs/snippets/commerce_badge.md
deleted file mode 100644
index 94a50a63cc4..00000000000
--- a/docs/snippets/commerce_badge.md
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/docs/snippets/release_46.md b/docs/snippets/release_46.md
deleted file mode 100644
index 669a4a13cba..00000000000
--- a/docs/snippets/release_46.md
+++ /dev/null
@@ -1,13 +0,0 @@
-[[% if version is not defined %]]
- [[% set version = '' %]]
-[[% endif %]]
-
-To learn more about all the included changes, see the full release change logs:
-
-- [[[= product_name_headless =]] [[= version =]]](https://github.com/ibexa/headless/releases/tag/[[= version =]])
-- [[[= product_name_exp =]] [[= version =]]](https://github.com/ibexa/experience/releases/tag/[[= version =]])
-- [[[= product_name_com =]] [[= version =]]](https://github.com/ibexa/commerce/releases/tag/[[= version =]])
-
-[[% if version != 'v4.6.0' %]]
-To update your application, see the [update instructions](https://doc.ibexa.co/en/4.6/update_and_migration/from_4.6/update_from_4.6/#[[= version_to_anchor(version) =]]).
-[[% endif %]]
diff --git a/docs/snippets/release_50.md b/docs/snippets/release_50.md
deleted file mode 100644
index fe6221fb630..00000000000
--- a/docs/snippets/release_50.md
+++ /dev/null
@@ -1,13 +0,0 @@
-[[% if version is not defined %]]
- [[% set version = '' %]]
-[[% endif %]]
-
-To learn more about all the included changes, see the full release change logs:
-
-- [[[= product_name_headless =]] [[= version =]]](https://github.com/ibexa/headless/releases/tag/[[= version =]])
-- [[[= product_name_exp =]] [[= version =]]](https://github.com/ibexa/experience/releases/tag/[[= version =]])
-- [[[= product_name_com =]] [[= version =]]](https://github.com/ibexa/commerce/releases/tag/[[= version =]])
-
-[[% if version != 'v5.0.0' %]]
-To update your application, see the [update instructions](https://doc.ibexa.co/en/5.0/update_and_migration/from_5.0/update_from_5.0/#[[= version_to_anchor(version) =]]).
-[[% endif %]]
diff --git a/docs/snippets/update/check_out_version.md b/docs/snippets/update/check_out_version.md
deleted file mode 100644
index ded92fc1221..00000000000
--- a/docs/snippets/update/check_out_version.md
+++ /dev/null
@@ -1,88 +0,0 @@
-### A. Create branch
-
-Create a new branch for handling update changes from the branch you're updating on:
-
-``` bash
-git checkout -b update-[[= target_version =]]
-```
-
-This creates a new project branch (`update-[[= target_version =]]`) for the update based on your current project branch.
-
-### B. Add `upstream` remote
-
-If it's not added as a remote yet, add an `upstream` remote:
-
-=== "ezplatform"
-
- ``` bash
- git remote add upstream http://github.com/ezsystems/ezplatform.git
- ```
-
-=== "ezplatform-ee"
-
- ``` bash
- git remote add upstream http://github.com/ezsystems/ezplatform-ee.git
- ```
-
-=== "ezcommerce"
-
- ``` bash
- git remote add upstream http://github.com/ezsystems/ezcommerce.git
- ```
-
-### C. Prepare for pulling changes
-
-??? note "Adding `sort-packages` option when updating from <=v1.13.4, v2.2.3, v2.3.2"
-
- Composer sorts packages listed in `composer.json`.
- If your packages aren't sorted yet, you should prepare for this update to make it clearer which changes you introduce.
-
- Assuming you have installed packages on your installation (`composer install`), do the following steps:
-
- 1\. Add [sort-packages](https://getcomposer.org/doc/06-config.md#sort-packages) to the `config` section in `composer.json`.
-
- ``` json hl_lines="3"
- "config": {
- "bin-dir": "bin",
- "sort-packages": true,
- "preferred-install": {
- "ezsystems/*": "dist"
- }
- },
- ```
-
- 2\. Use `composer require` to get Composer to sort your packages.
-
- The following example updates a few requirements with what you can expect in the upcoming change:
-
- ``` bash hl_lines="1 2 4"
- composer require --no-scripts --no-update doctrine/doctrine-bundle:^1.9.1
- composer require --dev --no-scripts --no-update behat/behat:^3.5.0
- # The upcoming change also moves security-advisories to dev as advised by the package itself
- composer require --dev --no-scripts --no-update roave/security-advisories:dev-master
- ```
-
- 3\. Check that you can install/update packages.
-
- ``` bash
- composer update
- ```
-
- If Composer says there were no updates, or if it updates packages without stopping with conflicts,
- your preparation was successful.
-
- 4\. Save your work.
-
- ``` bash
- git commit -am "Sort my existing composer packages in anticipation of update with sorted merge"
- ```
-
-### D. Pull the tag into your branch
-
-Pull the latest v[[= target_version =]] tag into the `update-[[= target_version =]]` branch with the following command:
-
-``` bash
-git pull upstream v[[= latest_tag =]]
-```
-
-At this stage you may get conflicts, which are a normal part of the update procedure.
diff --git a/docs/snippets/update/db/db_backup_warning.md b/docs/snippets/update/db/db_backup_warning.md
deleted file mode 100644
index 42b9737e0a4..00000000000
--- a/docs/snippets/update/db/db_backup_warning.md
+++ /dev/null
@@ -1,9 +0,0 @@
-!!! caution
-
- Always back up your data before running any database update scripts.
-
- After updating the database, clear the cache.
-
- Don't use `--force` argument for `mysql` / `psql` commands when performing update queries.
- If there is any problem during the update, it's best if the query fails immediately, so you can fix the underlying problem before you execute the update again.
- If you leave this for later you risk ending up with an incompatible database, though the problems might not surface immediately.
diff --git a/docs/snippets/update/db/update_db_2.5-3.3.md b/docs/snippets/update/db/update_db_2.5-3.3.md
deleted file mode 100644
index 69aab951660..00000000000
--- a/docs/snippets/update/db/update_db_2.5-3.3.md
+++ /dev/null
@@ -1,23 +0,0 @@
-Apply the following database update script:
-
-``` bash
-mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/ezplatform-2.5-to-ibexa-3.3.0.sql
-```
-
-If you're updating from an installation based on the `ezsystems/ezplatform-ee` metarepository, run the following command to upgrade your database:
-
-``` bash
-php bin/console ibexa:upgrade
-```
-
-!!! caution
-
- You can only run this command once.
-
-Check the location ID of the "Components" content item and set it as a value of the `content_tree_module.contextual_tree_root_location_ids` key in `config/ezplatform.yaml`:
-
-```yaml
-- 60 # Components
-```
-
-If you're upgrading between [[= product_name_com =]] versions, add the `content/read` policy with the Owner limitation set to `self` to the "Ecommerce registered users" role.
diff --git a/docs/snippets/update/finish_the_update.md b/docs/snippets/update/finish_the_update.md
deleted file mode 100644
index 5edf59aacd9..00000000000
--- a/docs/snippets/update/finish_the_update.md
+++ /dev/null
@@ -1,62 +0,0 @@
-### A. Platform.sh changes
-
-If you're hosting your site on [[= product_name_cloud =]] be aware of the fact that Varnish is enabled by default as of v1.13.5, v2.4.3 and v2.5.0.
-If you're using Fastly, read about [how to disable Varnish](https://fixed.docs.upsun.com/guides/ibexa/fastly.html#remove-varnish-configuration).
-### B. Dump assets
-
-Dump web assets if you're using the `prod` environment. In `dev` this happens automatically:
-
-``` sh
-yarn install
-yarn encore prod
-```
-
-If you encounter problems, additionally clear the cache and install assets:
-
-``` sh
-php bin/console cache:clear -e prod
-php bin/console assets:install --symlink -e prod
-yarn install
-yarn encore prod
-```
-
-### C. Commit, test and merge
-
-When you resolve all conflicts and update `composer.lock`, commit the merge.
-
-You may or may not keep `composer.lock`, depending on your version management workflow.
-If you don't want to keep it, run `git reset HEAD composer.lock` to remove it from the changes.
-Run `git commit`, and adapt the message if necessary.
-
-Go back to `master`, and merge the `update-[[= target_version =]]` branch:
-
-``` sh
-git checkout master
-git merge update-[[= target_version =]]
-```
-
-!!! note "Insecure password hashes"
-
- To ensure that no users have unsupported, insecure password hashes, run the following command:
-
- ``` bash
- # In v1 and v2:
- php bin/console ezplatform:user:validate-password-hashes
- # In v3:
- php bin/console ibexa:user:validate-password-hashes
- ```
-
- This command checks if all user hashes are up-to-date and informs you if any of them need to be updated.
-
-### D. Complete the update
-
-Complete the update by running the following commands:
-
-``` bash
-# In v2.5:
-php bin/console ezplatform:graphql:generate-schema
-# In v3:
-php bin/console ibexa:graphql:generate-schema
-
-composer run post-install-cmd
-```
diff --git a/docs/snippets/update/merge_composer.md b/docs/snippets/update/merge_composer.md
deleted file mode 100644
index b67373edf4a..00000000000
--- a/docs/snippets/update/merge_composer.md
+++ /dev/null
@@ -1,54 +0,0 @@
-### A. Resolve conflicts
-
-If you get a lot of conflicts and you installed from the [support.ez.no / support.ibexa.co](https://support.ibexa.co) tarball or from ezplatform.com, you may have incomplete history.
-
-To load the full history, run `git fetch upstream --unshallow` from the `update-[[= target_version =]]` branch, and run the merge again.
-
-Ignore the conflicts in `composer.lock`, because this file is regenerated when you execute `composer update` later.
-It's easiest to check out the version of `composer.lock` from the tag and add it to the changes:
-
-``` bash
-git checkout --theirs composer.lock && git add composer.lock
-```
-
-If you don't keep a copy of `composer.lock` in the branch, you may also remove it by running:
-
-``` bash
-git rm composer.lock
-```
-
-### B. Resolve conflicts in `composer.json`
-
-You need to fix conflicts in `composer.json` manually.
-
-If you're not familiar with the diff output, you may check out the tag's version from the `update-[[= target_version =]]` branch and inspect the changes.
-
-``` bash
-git checkout --theirs composer.json && git diff HEAD composer.json
-```
-
-This command shows the differences between the target `composer.json` and your own in the diff output.
-
-Updating `composer.json` changes the requirements for all of the `ezsystems` / `ibexa` packages.
-Keep those changes.
-The other changes remove what you added for your own project.
-Use `git checkout -p` to selectively cancel those changes (and retain your additions):
-
-``` bash
-git checkout -p composer.json
-```
-
-Answer `no` (don't discard) to the requirement changes of `ezsystems` / `ibexa` dependencies.
-Answer `yes` (discard) to removals of your changes.
-
-After you're done, inspect the file (you can use an editor or run `git diff composer.json`).
-You may also test the file with `composer validate`, and test the dependencies by running `composer update --dry-run` (it outputs what it would do to the dependencies, without applying the changes).
-
-When finished, run `git add composer.json` and commit.
-
-### C. Fix other conflicts
-
-Depending on the local changes you have done, you may get other conflicts, for example, on configuration files or kernel.
-
-For each change, edit the file, identify the conflicting changes, and resolve the conflict.
-Run `git add ` to add the changes.
diff --git a/docs/snippets/update/notify_support.md b/docs/snippets/update/notify_support.md
deleted file mode 100644
index 1cf8b2a459e..00000000000
--- a/docs/snippets/update/notify_support.md
+++ /dev/null
@@ -1,6 +0,0 @@
-## Notify support
-
-Inform the support team that you have updated your installation.
-They update your Service portal to match the new version.
-This ensures that you receive notifications about new maintenance releases and security advisories for the correct version.
-You can contact the support team at support@ibexa.co or through your [Service portal](https://support.ibexa.co).
diff --git a/docs/snippets/update/temporary_v4_conflicts.md b/docs/snippets/update/temporary_v4_conflicts.md
deleted file mode 100644
index 610269f8040..00000000000
--- a/docs/snippets/update/temporary_v4_conflicts.md
+++ /dev/null
@@ -1,10 +0,0 @@
-!!! caution "Temporary need of Composer `conflict`"
-
- To go through this update, [map the conflicting packages](https://getcomposer.org/doc/04-schema.md#conflict) in your `composer.json` file as following:
- ```json
- "conflict": {
- "jms/serializer": ">=3.30.0",
- "gedmo/doctrine-extensions": ">=3.12.0"
- },
- ```
- These entries can be removed after fully upgrading to v4.6 LTS.
diff --git a/docs/snippets/update/update_app.md b/docs/snippets/update/update_app.md
deleted file mode 100644
index 7ae7e0e15c4..00000000000
--- a/docs/snippets/update/update_app.md
+++ /dev/null
@@ -1,14 +0,0 @@
-At this point, you should have a `composer.json` file with the correct requirements and you can update dependencies.
-
-If you want to first test how the update proceeds without actually updating any packages, you can try the command with the `--dry-run` switch:
-
-``` bash
-composer update --dry-run
-```
-
-Then, run `composer update` to update the dependencies.
-
-``` bash
-composer update
-```
-
diff --git a/docs/snippets/update/vcl_configuration_for_fastly_v3.md b/docs/snippets/update/vcl_configuration_for_fastly_v3.md
deleted file mode 100644
index 77b066f4a83..00000000000
--- a/docs/snippets/update/vcl_configuration_for_fastly_v3.md
+++ /dev/null
@@ -1,13 +0,0 @@
-If you use Fastly, deploy the most up-to-date VCL configuration.
-
-Locate the `vendor/ezsystems/ezplatform-http-cache-fastly/fastly/ez_main.vcl` file, make sure that it has been updated with the following changes, and upload it to your Fastly:
-
-- Add the following lines:
-
-``` vcl
-if (req.restarts == 0 && resp.status == 301 && req.http.x-fos-original-url) {
- set resp.http.location = regsub(resp.http.location, "/_fos_user_context_hash", req.http.x-fos-original-url);
-}
-```
-
-- Move the `#FASTLY recv` macro call to a new location, right after the `Preserve X-Forwarded-For in all requests` section.
diff --git a/docs/snippets/update/vcl_configuration_for_fastly_v4.md b/docs/snippets/update/vcl_configuration_for_fastly_v4.md
deleted file mode 100644
index 59945512412..00000000000
--- a/docs/snippets/update/vcl_configuration_for_fastly_v4.md
+++ /dev/null
@@ -1,14 +0,0 @@
-If you use Fastly, deploy the most up-to-date VCL configuration.
-
-Locate the `vendor/ibexa/fastly/fastly/ez_main.vcl` file,
-make sure that it has been updated with the following changes, and upload it to your Fastly:
-
-- Add the following lines:
-
-``` vcl
-if (req.restarts == 0 && resp.status == 301 && req.http.x-fos-original-url) {
- set resp.http.location = regsub(resp.http.location, "/_fos_user_context_hash", req.http.x-fos-original-url);
-}
-```
-
-- Move the `#FASTLY recv` macro call to a new location, right after the `Preserve X-Forwarded-For in all requests` section.
diff --git a/docs/templating/components.md b/docs/templating/components.md
index 258d7f8e23d..d90421734e4 100644
--- a/docs/templating/components.md
+++ b/docs/templating/components.md
@@ -8,10 +8,7 @@ month_change: false
Twig Components are widgets (for example, **My dashboard** blocks from Headless edition) and HTML code (for example, a tag for loading JS or CSS files) that you can inject into the existing templates to customize and extend the user interface.
They are combined into groups that are rendered in designated templates.
-Twig Component groups are available for:
-
-- [back office](custom_components.md)
-- [storefront](customize_storefront_layout.md)
+Twig Component groups are available for the [back office](custom_components.md).
To learn which groups are available in a given view, use the [integration Symfony Profiler](#symfony-profiler-integration).
diff --git a/docs/templating/layout/customize_storefront_layout.md b/docs/templating/layout/customize_storefront_layout.md
deleted file mode 100644
index 04d4313bf25..00000000000
--- a/docs/templating/layout/customize_storefront_layout.md
+++ /dev/null
@@ -1,277 +0,0 @@
----
-description: Customize templates for the storefront.
-edition: commerce
----
-
-# Customize storefront layout
-
-The built-in storefront offers a set of templates covering all functionalities of a shop, divided into smaller components.
-
-To customize your shop, you can override either whole templates, or specific components.
-The built-in templates belong to the `storefront` [theme](design_engine.md).
-To override any of them, copy its directory structure in your template directory.
-
-## Customize with Twig Components
-
-You can customize parts of the storefront by using [Twig components](components.md).
-It allows you to inject your own widgets, extending the storefront behavior.
-
-The available groups for the storefront are:
-
-| Group name | Template file |
-|---|---|
-| `storefront-before-maincart` | `vendor/ibexa/storefront/src/bundle/Resources/views/themes/storefront/cart/component/maincart/maincart.html.twig` |
-| `storefront-after-maincart` | `vendor/ibexa/storefront/src/bundle/Resources/views/themes/storefront/cart/component/maincart/maincart.html.twig` |
-| `storefront-before-minicart` | `vendor/ibexa/storefront/src/bundle/Resources/views/themes/storefront/cart/component/minicart/minicart.html.twig` |
-| `storefront-after-minicart` | `vendor/ibexa/storefront/src/bundle/Resources/views/themes/storefront/cart/component/minicart/minicart.html.twig` |
-| `storefront-before-add-to-cart` | `vendor/ibexa/storefront/src/bundle/Resources/views/themes/storefront/cart/component/add_to_cart/add_to_cart.html.twig` |
-| `storefront-after-add-to-cart` | `vendor/ibexa/storefront/src/bundle/Resources/views/themes/storefront/cart/component/add_to_cart/add_to_cart.html.twig` |
-| `storefront-before-summary` | `vendor/ibexa/storefront/src/bundle/Resources/views/themes/storefront/cart/component/summary/summary.html.twig` |
-| `storefront-after-summary` | `vendor/ibexa/storefront/src/bundle/Resources/views/themes/storefront/cart/component/summary/summary.html.twig` |
-
-## Template customization example
-
-As an example, to change the cart display when it contains no products, you need to override the `vendor/ibexa/storefront/src/bundle/Resources/views/themes/storefront/cart/component/maincart/maincart_empty_cart.html.twig` template.
-
-To do it, create your own template in `templates/theme/storefront/cart/component/maincart/maincart_empty_cart.html.twig`.
-
-You can customize it, for example, to remove a "Continue shopping" button in the following way:
-
-``` html+twig
-{% trans_default_domain 'ibexa_cart' %}
-
-{% block empty_content %}
-
- {{ 'cart_view.empty.headline'|trans|desc('Your shopping cart is empty') }}
-
-{% endblock %}
-```
-
-## Available templates
-
-All the storefront templates are located in `vendor/ibexa/storefront/src/bundle/Resources/view/themes/storefront`.
-
-The most important templates are:
-
-|Template|Component|
-|---|---|
-|`storefront/layout.html.twig`|main layout of the storefront|
-
-### User
-
-|Template|Component|
-|---|---|
-|`storefront/security/layout.html.twig`|main layout for the login and registration pages|
-|`storefront/security/login.html.twig`|user login page|
-|`storefront/security/register.html.twig`|user registration page|
-
-### General components
-
-|Template|Component|
-|---|---|
-|`component/logo.html.twig`|shop logo|
-|`component/region_switcher.html.twig`|switcher for regions|
-|`component/language_switcher.html.twig`|switcher for regions|
-|`component/currency_switcher.html.twig`|switcher for currencies|
-
-### Cart
-
-|Template|Component|
-|---|---|
-|`cart/component/maincart/maincart.html.twig`|general view of the main cart|
-|`cart/component/minicart/minicart.html.twig`|minicart (cart icon displayed at the top of the page)|
-|`cart/component/add_to_cart/add_to_cart.html.twig`|"add to cart" element|
-|`cart/component/summary/summary.html.twig`|cart summary|
-|`cart/component/quick_order/quick_order.html.twig`|quick order|
-
-#### Extend Twig template
-
-```html+twig
-{% extends '@IbexaCart/themes/standard/cart/component/minicart/minicart.html.twig' %}
-
-{% block content %}
-
- {{ parent() }}
-{% endblock %}
-```
-
-To avoid self-reference, `@IbexaCart` is used instead of `@ibexadesign`.
-
-Built-in components aren't styled, so you can freely customize them according to your needs.
-You can add CSS classes to the base Twig by using attribute objects.
-For example, to add custom CSS classes to quantity input in the "Add to Cart" component, use the following:
-
-```html+twig
-{% set quantity_input_attr = {
- class: 'ibexa-store-input ibexa-store-input--number ibexa-store-add-to-cart__quantity-input',
-} %}
-```
-
-Every element is also inside its own block so you can override the whole block.
-
-#### Extending JavaScript
-
-In case of the JavaScript component, you should import the original class and extend it:
-
-```js
-import Minicart from '@ibexa-cart/src/bundle/Resources/public/js/component/minicart';
-
-export default class StorefrontMinicart extends Minicart {}
-```
-
-The example below shows how to add a "Clear" button support to the maincart:
-
-```js
-import Maincart from '@ibexa-cart/src/bundle/Resources/public/js/component/maincart';
-
-export default class StorefrontMaincart extends Maincart {
- constructor(options) {
- super(options);
-
- this.clearCartBtn = this.container.querySelector('.ibexa-store-maincart__clear-cart-btn');
-
- this.onCartClear = this.onCartClear.bind(this);
- }
-
- attachStorefrontMaincartListeners() {
- this.clearCartBtn.addEventListener('click', this.onCartClear, false);
- }
-
- onCartClear() {
- this.cart.empty();
- }
-}
-```
-
-Next, add the button in the Twig file.
-
-### Main cart
-
-You must customize the base widget for the main cart view, because out-of-the-box it consists only of the container with items.
-Each item consists of `
` wrappers with quantity input and remove item button.
-With customization you can add layout containers and items' data such as title or price.
-
-Available Twigs:
-
-- `@IbexaCart/themes/standard/cart/component/maincart/maincart.html.twig`
-
-with parameters:
-
-- `attr`
-- `item_template_attr`
-- `items_container_attr`
-- `item_template_params`
-- `item_template_path`
-- `net_price_template`
-
-- `@IbexaCart/themes/standard/cart/component/maincart/maincart_item.html.twig`
-
-with parameters:
-
-- `cart_entry_quantity`
-- `item_attr`
-- `quantity_input_attr`
-- `remove_item_btn_attr`
-
-JavaScript class:
-
-- `@ibexa-cart/src/bundle/Resources/public/js/component/maincart`
-
-### Add to Cart
-
-You could extend this widget by adding variant selectors.
-
-Available Twig:
-
-- `@IbexaCart/themes/standard/cart/component/add_to_cart/add_to_cart.html.twig`
-
-with parameters:
-
-- `is_disabled`
-- `attr`
-- `product_code`
-- `quantity_input_attr`
-- `add_to_cart_btn_attr`
-
-JavaScript class:
-
-- `@ibexa-cart/src/bundle/Resources/public/js/component/summary`
-
-### Minicart
-
-You could modify the minicart widget by changing its icon, title or other elements.
-
-Available Twig:
-
-- `@IbexaCart/themes/standard/cart/component/minicart/minicart.html.twig`
-
-with parameters:
-
-- `count`
-- `attr`
-- `counter_attr`
-
-### Checkout
-
-|Template|Component|
-|---|---|
-|`checkout/layout.html.twig`|main checkout layout|
-|`checkout/component/step.html.twig`|individual checkout step|
-|`checkout/component/quick_summary.html.twig`|checkout summary|
-
-!!! tip
-
- For templates related to product rendering, see [Customize product view](customize_product_view.md#available-templates).
-
-### Summary
-
-You could extend the summary widget to let buyers navigate from this view, for example, to checkout, or back to shopping, by adding respective buttons.
-
-|Template|Component|
-|---|---|
-|`cart/component/summary/summary.html.twig`|main summary layout|
-|`cart/component/summary/summary_item.html.twig`|item summary layout|
-
-### Quick order
-
-You can modify the quick order page by changing its form, title or other elements.
-
-Available Twigs:
-
-- `@IbexaCart/themes/standard/cart/component/quick_order/quick_order.html.twig` with parameters:
- - `form_themes`
- - `form_start_attr`
- - `form_start_vars`
- - `main_widget_vars`
- - `add_to_cart_btn_attr`
- - `form_end_vars`
-
-- `@IbexaCart/themes/standard/cart/component/quick_order/quick_order_form_fields.html.twig` with parameters per block, block's names are generated based on fields in Symfony form:
- - `quick_order_widget` block
- - `main_attr`
- - `widget_attr`
- - `quick_order_file_row` block
- - `file_attr`
- - `file_vars`
- - `quick_order_entries_row` block
- - `entries_wrapper_attr`
- - `add_entry_btn_attr`
- - `quick_order_entries_widget` block
- - `entries_attr`
- - `form_widget_vars`
- - `quick_order_entry_row` block
- - `entry_attr`
- - `delete_entry_btn_attr`
- - `code_attr`
- - `code_vars`
- - `quantity_attr`
- - `quantity_vars`
- - `errors_vars`
-
-JavaScript class:
-
-- `@ibexa-cart/src/bundle/Resources/public/js/component/quick.order`
diff --git a/docs/templating/render_content/customize_product_view.md b/docs/templating/render_content/customize_product_view.md
deleted file mode 100644
index 49495cb936a..00000000000
--- a/docs/templating/render_content/customize_product_view.md
+++ /dev/null
@@ -1,76 +0,0 @@
----
-description: Customize templates for rendering products from the catalog.
-edition: commerce
----
-
-# Customize product view
-
-The built-in storefront offers a set of templates covering all functionalities of a shop, divided into smaller components.
-
-To customize your shop, you can override either whole templates, or specific components.
-The built-in templates belong to the `storefront` [theme](design_engine.md).
-To override any of them, copy its directory structure in your template directory.
-
-[[% include 'snippets/catalog_permissions_note.md' %]]
-
-## Template customization example
-
-As an example, to modify the template used to display the product price,
-you need to override the `vendor/ibexa/storefront/src/bundle/Resources/views/themes/storefront/storefront/component/price/price.html.twig` template.
-
-To do it, create your own template in `templates/themes/storefront/storefront/component/price/price.html.twig` file:
-
-``` html+twig hl_lines="10-12"
-{% trans_default_domain 'storefront' %}
-
-{% set price = product.price %}
-
-{% if price is not null %}
-
- {{ 'ibexa_storefront.product_card.price.unavailable'|trans()|desc('price currently unavailable') }}
-
-{% endif %}
-```
-
-This template adds a "price currently unavailable" label when a product doesn't have a price specified.
-
-## Available templates
-
-All the storefront templates are located in `vendor/ibexa/storefront/src/bundle/Resources/view/themes/storefront`.
-
-The most important templates related to product rendering are:
-
-|Template|Component|
-|---|---|
-|`storefront/catalog.html.twig`|main catalog and category view|
-|`storefront/component/product_view.html.twig`|full-screen view of a single product|
-
-### Single product view
-
-|Template|Component|
-|---|---|
-|`storefront/component/product_assets.html.twig`|image asset preview and thumbnail list|
-|`storefront/component/product_attributes.html.twig`|listing of product attributes|
-
-### Product list
-
-|Template|Component|
-|---|---|
-|`storefront/component/product_grid.html.twig`|grid for presenting products in the catalog|
-|`storefront/component/product_search_filters.html.twig`|panel with search filters|
-|`storefront/component/product_search_query.html.twig`|search box|
-|`storefront/component/product_search_sort.html.twig`|sorting drop-down|
-
-### Images
-
-|Template|Component|
-|---|---|
-|`storefront/component/image_placeholder.svg.twig`|product image placeholder|
-
-!!! tip
-
- For templates related to general storefront layout, cart and checkout, see [Customize storefront layout](customize_storefront_layout.md#available-templates).
diff --git a/docs/templating/twig_function_reference/cart_twig_functions.md b/docs/templating/twig_function_reference/cart_twig_functions.md
deleted file mode 100644
index 2637a5d7836..00000000000
--- a/docs/templating/twig_function_reference/cart_twig_functions.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-description: Cart Twig functions enable checking whether product can be added to cart and formatting the price.
-edition: commerce
-page_type: reference
----
-
-# Cart Twig functions
-
-You can use cart Twig functions to check whether products can be added to cart, or to format the price value.
-
-## `ibexa_can_be_added_to_cart()`
-
-The `ibexa_can_be_added_to_cart()` function checks whether the provided product can be added to cart.
-It eliminates products that aren't available, products that don't have a price that corresponds to a currency selected for the cart, and products, for which VAT category isn't set.
-It also eliminates products that have variants but aren't one of those variants.
-
-``` html+twig
-{% set is_disabled = (is_disabled or ibexa_can_be_added_to_cart(product) == false)|default(false) %}
-```
diff --git a/docs/templating/twig_function_reference/checkout_twig_functions.md b/docs/templating/twig_function_reference/checkout_twig_functions.md
deleted file mode 100644
index b228b118472..00000000000
--- a/docs/templating/twig_function_reference/checkout_twig_functions.md
+++ /dev/null
@@ -1,78 +0,0 @@
----
-description: Checkout Twig functions return information about the checkout process, and total values related to cart and cart items.
-edition: commerce
-page_type: reference
----
-
-# Checkout Twig functions
-
-You can use checkout Twig functions to get information about the checkout process, and total values related to cart and cart items.
-
-## `ibexa_checkout_step_label()`
-
-The `ibexa_checkout_step_label()` function returns a name of the step (configured in `framework.workflows.workflow.ibexa_checkout.transitions..metadata.label`).
-
-``` html+twig
-{% block title %}
-
{{ ibexa_checkout_step_label(checkout, step) }}
-{% endblock %}
-```
-
-## `ibexa_checkout_steps()`
-
-The `ibexa_checkout_steps()` function returns a list of steps configured in `framework.workflows.workflow.ibexa_checkout.transitions`).
-
-``` html+twig
-{% for step in ibexa_checkout_steps(checkout) %}
- // ...
-{% endfor %}
-```
-
-## `ibexa_checkout_step_path()`
-
-The `ibexa_checkout_step_path()` function returns a path to the step.
-
-``` html+twig
-{{ }}
-```
-
-## `ibexa_checkout_step_url()`
-
-The `ibexa_checkout_step_url()` function returns a URL address of the step.
-By setting the optional argument to `true` you can decide whether the function returns a relative or absolute URL of the checkout step.
-The default value of the optional argument is `false`, which stands for the absolute URL.
-
-``` html+twig
-{{ }}
-```
-
-## `ibexa_checkout_step_number()`
-
-The `ibexa_checkout_step_number` function returns a sequential number of the step (based on configuration under `framework.workflows.workflow.ibexa_checkout.transitions`).
-
-``` html+twig
-{% block page_number %}
-
{{ ibexa_checkout_step_number(checkout, step) }}
-{% endblock %}
-```
-
-## `ibexa_checkout_summary_entries()`
-
-The `ibexa_checkout_summary_entries` function takes in a single argument, a cart summary object, and returns the checkout summary.
-
-``` html+twig
-{% block items %}
- {% for entry in ibexa_checkout_summary_entries(summary) %}
- // ...
- {% endfor %}
-{% endblock %}
-```
-
-## `ibexa_checkout_summary_vat_summaries()`
-
-The `ibexa_checkout_summary_vat_summaries()` function takes in a single argument, a cart summary object, and returns an array of VAT summary objects for the cart.
-Each VAT summary relates to a certain VAT rate, and contains information about the VAT rate, and the VAT value.
-
-``` html+twig
-{% set vat_summaries = ibexa_checkout_summary_vat_summaries(summary) %}
-```
diff --git a/docs/templating/twig_function_reference/discounts_twig_functions.md b/docs/templating/twig_function_reference/discounts_twig_functions.md
deleted file mode 100644
index 93c0b2b763c..00000000000
--- a/docs/templating/twig_function_reference/discounts_twig_functions.md
+++ /dev/null
@@ -1,101 +0,0 @@
----
-description: Discounts Twig Functions allow you to operate on discounts in your templates.
-page_type: reference
-month_change: false
-editions:
- - commerce
----
-
-# Discounts Twig functions
-
-Discounts Twig Functions allow you to operate on discounts in your templates.
-
-## Filters
-
-### `ibexa_render_discount_rule_type`
-
-This filter transforms the discount type (`fixed_amount` or `percentage`) into a human-friendly and translated label.
-
-``` html+twig
-{% set rule_type = discount.getRule().getType() %}
-
-
-
- {{ rule_type|ibexa_render_discount_rule_type }}
-
-```
-
-## Functions
-
-### `ibexa_discounts_render_discount_badge()`
-
-Use the `ibexa_discounts_render_discount_badge` to render a badge indicating the discounted amount, for example on product cards.
-
-``` html+twig
-{% if ibexa_storefront_are_discounts_enabled() %}
- {% block product_discount_price_info %}
-
- {% endblock %}
-{% endif %}
-```
-
-### `ibexa_get_original_price()`
-
-Displays the product price before the discount was applied.
-
-``` html+twig
-{{ ibexa_get_original_price(product)|ibexa_format_price ?: '-' }}
-```
-
-### `ibexa_format_discount_value()`
-
-Formats the discount value for each discount type, for example by displaying `-10 EUR` or `-10%`.
-
-``` html+twig
-content: ibexa_format_discount_value(discount),
-```
-
-### `ibexa_discounts_is_active()`
-
-Helper function returning whether the discount is currently active.
-
-``` html+twig
-{% if ibexa_discounts_is_active(discount) %}
-
-```
-
-## `ibexa_storefront_get_active_currency()`
-
-`ibexa_storefront_get_active_currency()` returns the active currency object (`Ibexa\Contracts\ProductCatalog\Values\CurrencyInterface`).
-
-``` html+twig
-{% set currency = ibexa_storefront_get_active_currency() %}
-
-
Active currency code: {{ currency.code }}
-```
-
-## `ibexa_storefront_get_language_name_by_code()`
-
-`ibexa_storefront_get_language_name_by_code()` displays language name based on its code or locale.
-
-``` html+twig
-{% set languageName = ibexa_storefront_get_language_name_by_code(languageCode) %}
-
-
Language name: {{ languageName }}
-```
-
-## `ibexa_storefront_get_product_render_action()`
-
-`ibexa_storefront_get_product_render_action()` returns a rendering action to be used, as defined in [settings](configure_storefront.md).
-It serves as an alternative for `ibexa_render` which heavily relies on content objects being not present within context of remote PIM.
-You can use this, for example, to [parametrize the display of products by using a custom controller](extend_storefront.md#generate-custom-product-preview-path).
-
-``` html+twig
-{% if ibexa_is_pim_local() %}
- {{ ibexa_render(product, { method: 'esi', viewType: 'card' }) }}
-{% else %}
- {{ render(
- controller(ibexa_storefront_get_product_render_action(), {
- product: product
- })
- ) }}
-{% endif %}
-```
-
-## `ibexa_get_anonymous_user_id()`
-
-`ibexa_get_anonymous_user_id()` returns the configured user ID for the anonymous user (configured in `ibexa.system..anonymous_user_id`).
-
-``` html+twig
-{{ ibexa_get_anonymous_user_id() }}
-```
-
-## `ibexa_storefront_are_discounts_enabled()`
-
-This function detects if the [Discounts](discounts_guide.md) feature is present.
-
-``` html+twig
-{% if ibexa_storefront_are_discounts_enabled() %}
-
- {{- product_price_original_subtotal -}}
-
-{% endif %}
-```
diff --git a/docs/templating/twig_function_reference/twig_function_reference.md b/docs/templating/twig_function_reference/twig_function_reference.md
index 3cce94c01be..abf6dba50a7 100644
--- a/docs/templating/twig_function_reference/twig_function_reference.md
+++ b/docs/templating/twig_function_reference/twig_function_reference.md
@@ -8,9 +8,7 @@ page_type: landing_page
In addition to the [native functions provided by Twig](https://twig.symfony.com/doc/3.x/functions/index.html), and [Twig extensions provided by Symfony]([[= symfony_doc =]]/reference/twig_reference.html), [[= product_name =]] offers the following custom Twig functions and filters:
[[= cards([
- "templating/twig_function_reference/cart_twig_functions",
"templating/twig_function_reference/catalog_twig_functions",
- "templating/twig_function_reference/checkout_twig_functions",
"templating/twig_function_reference/content_twig_functions",
"templating/twig_function_reference/component_twig_functions",
"templating/twig_function_reference/field_twig_functions",
@@ -18,12 +16,10 @@ In addition to the [native functions provided by Twig](https://twig.symfony.com/
"templating/twig_function_reference/product_twig_functions",
"templating/twig_function_reference/recommendations_twig_functions",
"templating/twig_function_reference/site_context_twig_functions",
- "templating/twig_function_reference/storefront_twig_functions",
"templating/twig_function_reference/icon_twig_functions",
"templating/twig_function_reference/image_twig_functions",
"templating/twig_function_reference/url_twig_functions",
"templating/twig_function_reference/date_twig_filters",
"templating/twig_function_reference/ai_actions_twig_functions",
- "templating/twig_function_reference/discounts_twig_functions",
"templating/twig_function_reference/quable_twig_functions"
], columns=4) =]]
diff --git a/docs/templating/urls_and_routes/custom_breadcrumbs.md b/docs/templating/urls_and_routes/custom_breadcrumbs.md
deleted file mode 100644
index 0c5254bc611..00000000000
--- a/docs/templating/urls_and_routes/custom_breadcrumbs.md
+++ /dev/null
@@ -1,72 +0,0 @@
----
-description: Customize breadcrumb rendering in shop front page.
----
-
-# Custom breadcrumbs
-
-## Breadcrumbs for custom routes
-
-To configure breadcrumbs for a custom route you need to configure `breadcrumb_path` and `breadcrumb_names`:
-
-``` yaml hl_lines="5 6"
-custom_blog_index:
- path: /blog/index
- defaults:
- _controller: App\Controller\BlogController::indexAction
- breadcrumb_path: custom_blog_index
- breadcrumb_names: Blog List
-```
-
-Both `breadcrumb_path` and `breadcrumb_names` must be configured for the breadcrumbs to render correctly.
-
-|Option|Description|
-|--- |--- |
-|`breadcrumb_path`|Valid route identifier which exists in at least one of the routing YAML files.|
-|`breadcrumb_names`|Name for the breadcrumb element. If the translation isn't set, there is a fallback to route translation. In the example above if the `Blog List` key has no translation, the fallback key is custom_blog_index | breadcrumb.|
-
-### Multi-part routes
-
-If you want breadcrumbs to have more than one part, you can specify more paths and names with the `/` delimiter.
-Both `breadcrumb_path` and `breadcrumb_names` must contain two parts.
-
-In the example below breadcrumbs are generated with two elements (Profile and Blog list):
-
-``` yaml hl_lines="5 6"
-custom_blog_index:
- path: /blog/index
- defaults:
- _controller: App\Controller\BlogController::indexAction
- breadcrumb_path: blog/custom_blog_index
- breadcrumb_names: Profile/Blog List
-```
-
-!!! note "Restricting HTTP methods"
-
- When using breadcrumbs for custom routes you cannot restrict the HTTP method for the controller in the routing file.
-
- To see the correct breadcrumb, you have to check the method in the controller itself:
-
- ``` php
- use Symfony\Component\HttpFoundation\Request;
- use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
-
- /** @var \Symfony\Component\HttpFoundation\Request $request */
- if ($request->getMethod() != Request::METHOD_POST) {
- throw new NotFoundHttpException();
- }
- ```
-
-## Custom breadcrumb generator
-
-To create a custom breadcrumb generator you have to write a generator class and register it as a service tagged as `ibexa.commerce.breadcrumbs.generator`.
-
-The generator must implement `BreadcrumbsGeneratorInterface` and its two methods.
-
-You can use `AbstractWhiteOctoberBreadcrumbsGenerator` which implements this interface and provides access to the WhiteOctober breadcrumbs library.
-
-Every breadcrumb generator has to add a `translationParameters` array with `type`, `identifier` and `content_type_id`.
-Always create all three keys and leave the elements empty if not needed.
-
-If you can't or don't want to use `AbstractWhiteOctoberBreadcrumbsGenerator`, your generator's `renderBreadcrumbs()` method must handle rendering the HTML code for the breadcrumbs.
-
-The highest priority generator which matches `canRender()` renders the breadcrumbs for the current request.
diff --git a/docs/templating/urls_and_routes/urls_and_routes.md b/docs/templating/urls_and_routes/urls_and_routes.md
index 4ec00ae01a4..99cc365e392 100644
--- a/docs/templating/urls_and_routes/urls_and_routes.md
+++ b/docs/templating/urls_and_routes/urls_and_routes.md
@@ -96,20 +96,13 @@ The following built-in routes are available for the front of the website.
|Route name|Path|Description|
|---|---|---|
|`login` | `/login` | [Login form](add_login_form.md) |
-|`logout` `ibexa.commerce.customer.logout` | `/logout` `/profile/logout` | Logging out the current user |
-
-### Profile
-
-|Route name|Path|Description|
-|---|---|---|
-| `ibexa.commerce.customer.detail` | `/profile` | User profile |
-| `ibexa.commerce.address.book.list` | `/profile/address_book` | User address book |
+|`logout` | `/logout` | Logging out the current user |
### Password
|Route name|Path|Description|
|---|---|---|
-| `ibexa.user_profile.change_password` `ibexa.commerce.password_change` | `/user/change-password` `/change_password` | Form for password change|
+| `ibexa.user_profile.change_password` | `/user/change-password` | Form for password change|
| `ibexa.user.forgot_password` | `/user/forgot-password` | [Form for password resetting](add_forgot_password_option.md) |
| `ibexa.user.forgot_password.migration` | `/user/forgot-password/migration` | Form for resetting password after expiration|
| `ibexa.user.forgot_password.login` | `/user/forgot-password/login` | Form for resetting password based on login instead of email address |
diff --git a/docs/tutorials/generic_field_type/1_implement_the_point2d_value_class.md b/docs/tutorials/generic_field_type/1_implement_the_point2d_value_class.md
index 3b6d096731b..6020470971f 100644
--- a/docs/tutorials/generic_field_type/1_implement_the_point2d_value_class.md
+++ b/docs/tutorials/generic_field_type/1_implement_the_point2d_value_class.md
@@ -7,7 +7,7 @@ description: Learn how to create a Value class that stores the value of the fiel
## Project installation
To start the tutorial, you need to make a clean [[= product_name =]] installation.
-Follow the guide for your system to [Install [[= product_name =]]](../../getting_started/install_cohesivo.md), [configure a server](requirements.md), and [start the web server](../../getting_started/install_cohesivo.md#use-phps-built-in-server).
+Follow the guide for your system to [Install [[= product_name =]]](../../getting_started/install_cohesivo.md) and [start the web server](../../getting_started/install_cohesivo.md#use-phps-built-in-server).
Remember to install using the `dev` environment.
Open your project with a clean installation and create the base directory for a new Point 2D field type in `src/FieldType/Point2D`.
diff --git a/docs/update_and_migration/from_1.x_2.x/update_app_to_2.5.md b/docs/update_and_migration/from_1.x_2.x/update_app_to_2.5.md
deleted file mode 100644
index d2f19f71a86..00000000000
--- a/docs/update_and_migration/from_1.x_2.x/update_app_to_2.5.md
+++ /dev/null
@@ -1,39 +0,0 @@
----
-target_version: '2.5'
-latest_tag: '2.5.30'
----
-
-# Update app to v2.5
-
-## 1. Check out a version
-
-[[% include 'snippets/update/check_out_version.md' %]]
-
-## 2. Resolve conflicts
-
-[[% include 'snippets/update/merge_composer.md' %]]
-
-## 3. Update the app
-
-If `EzSystemsPlatformEEAssetsBundle` is present in `app/AppKernel.php`,
-disable it by removing the `new EzSystems\PlatformEEAssetsBundle\EzSystemsPlatformEEAssetsBundle(),` entry.
-
-Since v2.5 eZ Platform uses [Webpack Encore]([[= symfony_doc =]]/frontend.html#webpack-encore) for asset management.
-You need to install [Node.js](https://nodejs.org/en) and [Yarn](https://classic.yarnpkg.com/en/docs/install) to update to this version.
-
-In v2.5 it's still possible to use Assetic, like in earlier versions.
-However, if you're using the latest Bootstrap version, [`scssphp`](https://github.com/leafo/scssphp)
-doesn't compile correctly with Assetic.
-In this case, use Webpack Encore.
-
-For more information, see [Importing assets from a bundle](importing_assets_from_bundle.md).
-
-If you experience issues during the update, see [Troubleshooting](troubleshooting.md#cloning-failed-using-an-ssh-key).
-
-### Run composer update
-
-[[% include 'snippets/update/update_app.md' %]]
-
-## Next steps
-
-Now, proceed to the next step, [updating the database to v2.5](update_db_to_2.5.md).
diff --git a/docs/update_and_migration/from_1.x_2.x/update_db_to_2.5.md b/docs/update_and_migration/from_1.x_2.x/update_db_to_2.5.md
deleted file mode 100644
index 945c1cad294..00000000000
--- a/docs/update_and_migration/from_1.x_2.x/update_db_to_2.5.md
+++ /dev/null
@@ -1,949 +0,0 @@
----
-target_version: '2.5'
-latest_tag: '2.5.30'
----
-
-# Update database to v2.5
-
-## 4. Update the database
-
-Before you start this procedure, make sure you have completed the previous step,
-[Updating the app to v2.5](update_app_to_2.5.md).
-
-[[% include 'snippets/update/db/db_backup_warning.md' %]]
-
-!!! note
-
- If you're starting from version v2.2 or later, skip to the relevant section.
-
-### A. Update to v2.2
-
-#### Change from UTF8 to UTF8MB4
-
-In v2.2 the character set for MySQL/MariaDB database tables changes from `utf8` to `utf8mb4` to support 4-byte characters.
-
-To apply this change, use the following database update script:
-
-``` bash
-mysql -u -p < vendor/ezsystems/ezpublish-kernel/data/update/mysql/dbupdate-7.1.0-to-7.2.0.sql
-```
-
-If you use DFS Cluster, also execute the following database update script:
-
-``` bash
-mysql -u -p < vendor/ezsystems/ezpublish-kernel/data/update/mysql/dbupdate-7.1.0-to-7.2.0-dfs.sql
-```
-
-Be aware that these upgrade statements may fail due to index collisions.
-This is because the indexes have been shortened, so duplicates may occur.
-If that happens, you must remove the duplicates manually, and then repeat the statements that failed.
-
-After successfully running those statements, change the character set and collation for each table, as described in [kernel upgrade documentation](https://github.com/ezsystems/ezpublish-kernel/blob/7.5/doc/upgrade/7.2.md).
-
-You should also change the character set that is specified in the application config:
-
-In `app/config/config.yml`, set the following:
-
-``` yaml
-doctrine:
- dbal:
- connections:
- default:
- charset: utf8mb4
-```
-
-Also make the corresponding change in `app/config/dfs/dfs.yml`.
-
-#### Migrate landing pages
-
-To update to v2.2 with existing landing pages, you need to use a dedicated script.
-The script is contained in the `ezplatform-page-migration` bundle and **works since version v2.2.2**.
-To use the script:
-
-1. Run `composer require ezsystems/ezplatform-page-migration`
-2. Add the bundle to `app/AppKernel.php`: `new EzSystems\EzPlatformPageMigrationBundle\EzPlatformPageMigrationBundle(),`
-3. Run command `bin/console ezplatform:page:migrate`
-
-!!! tip
-
- This script uses the layout defined in your landing page.
- To migrate successfully, you need to copy your zone configuration
- from `ez_systems_landing_page_field_type` under `ezplatform_page_fieldtype` in the new config.
- Otherwise the script encounters errors.
-
-You can remove the bundle after the migration is complete.
-
-The `ezplatform:page:migrate` command migrates landing pages created in eZ Platform v1.x, v2.0 and v2.1 to new Pages.
-The operation is transactional and rolls back in case of errors.
-
-!!! caution "Avoid exception when migrating from eZ Publish"
-
- If you [migrated to v1.13 from eZ Publish](migrating_from_ez_publish.md), and want to upgrade to v2.5, an exception occurs when you run the `bin/console ezplatform:page:migrate` command and the database contains internal drafts of landing pages.
-
- To avoid this exception, you must first [remove all internal drafts before you migrate](migrating_from_ez_publish.md#migration_exception).
-
-##### Block migration
-
-In v2.2 Page Builder doesn't offer all blocks that landing page editor did. The removed blocks include Keyword, Schedule, and Form blocks.
-The Places block has been removed from the clean installation and is only available in the demo out of the box.
-If you use this block in your site, re-apply its configuration based on the [demo](https://github.com/ezsystems/ezplatform-ee-demo/blob/v2.2.2/app/config/blocks.yml).
-
-Later versions of Page Builder come with a Content Scheduler block and new Form Blocks, but migration of Schedule blocks to Content Scheduler blocks and of Form Blocks isn't supported.
-
-If there are missing block definitions, such as Form Block or Schedule Block,
-you have an option to continue, but migrated landing pages come without those blocks.
-
-!!! tip
-
- If you use different repositories with different SiteAccesses, use the `--siteaccess` switch
- to migrate them separately.
-
-!!! tip
-
- You can use the `--dry-run` switch to test the migration.
-
-After the migration is finished, you need to clear the cache.
-
-###### Migrate layouts
-
-The `ez_block::renderBlockAction` controller used in layout templates has been replaced by `EzPlatformPageFieldTypeBundle:Block:render`. This controller has two additional parameters, `locationId` and `languageCode`. Only `languageCode` is required.
-Also, the HTML class `data-studio-zone` has been replaced with `data-ez-zone-id`
-See [documentation](render_page.md#render-a-layout) for an example on usage of the new controller.
-
-###### Migrate custom blocks
-
-Landing page blocks (from v2.1 and earlier) were defined using a class implementing `EzSystems\LandingPageFieldTypeBundle\FieldType\LandingPage\Model\AbstractBlockType`.
-In Page Builder (from v2.2 onwards), this interface is no longer present. Instead the logic of your block must be implemented in a [Listener](page_blocks.md#block-events).
-Typically, what you previously would do in `getTemplateParameters()`, you now do in the `onBlockPreRender()` event handler.
-
-The definition of block parameters has to be moved from `createBlockDefinition()` to the [YAML configuration](create_custom_page_block.md) for your custom blocks.
-
-For more information about how custom blocks are implemented in Page Builder, see [Creating custom Page blocks](create_custom_page_block.md) for your custom blocks.
-
-For the migration of blocks from landing page to Page Builder, you need to provide a converter for attributes of custom blocks. For simple blocks you can use `\EzSystems\EzPlatformPageMigration\Converter\AttributeConverter\DefaultConverter`.
-Custom converters must implement the `\EzSystems\EzPlatformPageMigration\Converter\AttributeConverter\ConverterInterface` interface.
-`convert()` parses XML `\DOMNode $node` and return an array of `\EzSystems\EzPlatformPageFieldType\FieldType\LandingPage\Model\Attribute` objects.
-
-Below is an example of a simple converter for a custom block:
-
-``` yaml
-app.block.foobar.converter:
- class: EzSystems\EzPlatformPageMigration\Converter\AttributeConverter\DefaultConverter
- tags:
- - { name: ezplatform.fieldtype.ezlandingpage.migration.attribute.converter, block_type: foobar }
-```
-
-Notice service tag `ezplatform.fieldtype.ezlandingpage.migration.attribute.converter` that must be used for attribute converters.
-
-This converter is only needed when running the `ezplatform:page:migrate` script and can be removed once that has completed.
-
-###### Page migration example
-
-Below is an example how to migrate a landing page Layout and Block to new Page Builder. The code is based on the Random block
-defined in the [Enterprise Beginner tutorial](page_and_form_tutorial.md)
-
-??? tip "Landing page code"
-
- `app/Resources/views/layouts/sidebar.html.twig`:
-
- ```html+twig
-
-
- {% if zones[0].blocks %}
- {% for block in zones[0].blocks %}
-
-
- {% if zones[0].blocks %}
- {% set locationId = parameters.location is not null ? parameters.location.id : contentInfo.mainLocationId %}
- {% for block in zones[0].blocks %}
-
- ```
-
- `app/config/layouts.yml`:
-
- ``` yaml
- ezplatform_page_fieldtype:
- layouts:
- sidebar:
- identifier: sidebar
- name: Right sidebar
- description: Main section with sidebar on the right
- thumbnail: assets/images/layouts/sidebar.png
- template: layouts/sidebar.html.twig
- zones:
- first:
- name: First zone
- second:
- name: Second zone
- ```
-
- `src/AppBundle/Block/Event/Listener/RandomBlockListener.php` in place of `src/AppBundle/Block/RandomBlock.php`:
-
- ``` php {skip-validation}
- contentService = $contentService;
- $this->locationService = $locationService;
- $this->searchService = $searchService;
- }
-
- /**
- * @return array The event names to listen to
- */
- public static function getSubscribedEvents()
- {
- return [
- BlockRenderEvents::getBlockPreRenderEventName('random') => 'onBlockPreRender',
- ];
- }
-
- /**
- * @param \EzSystems\EzPlatformPageFieldType\FieldType\Page\Block\Renderer\Event\PreRenderEvent $event
- *
- * @throws \eZ\Publish\API\Repository\Exceptions\NotFoundException
- * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException
- */
- public function onBlockPreRender(PreRenderEvent $event)
- {
- //BlockDefinitionFactory
- $blockValue = $event->getBlockValue();
- $renderRequest = $event->getRenderRequest();
- $contentInfo = $this->contentService->loadContentInfo($blockValue->getAttribute('parentContentId')->getValue());
-
- $randomContent = $this->getRandomContent(
- $this->getQuery($contentInfo->mainLocationId)
- );
-
- $parameters = $renderRequest->getParameters();
- $parameters['content'] = $randomContent;
-
- $renderRequest->setParameters($parameters);
- }
-
- /**
- * Returns random picked Content.
- *
- * @param \eZ\Publish\API\Repository\Values\Content\LocationQuery $query
- *
- * @return \eZ\Publish\API\Repository\Values\Content\Content
- * @throws \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
- */
- private function getRandomContent(LocationQuery $query)
- {
- $results = $this->searchService->findLocations($query);
- $searchHits = $results->searchHits;
- if (count($searchHits) > 0) {
- shuffle($searchHits);
-
- return $this->contentService->loadContentByContentInfo(
- $searchHits[0]->valueObject->contentInfo
- );
- }
-
- return null;
- }
-
- /**
- * Returns LocationQuery object based on given arguments.
- *
- * @param int $parentLocationId
- *
- * @return \eZ\Publish\API\Repository\Values\Content\LocationQuery
- */
- private function getQuery($parentLocationId)
- {
- $query = new LocationQuery();
- $query->query = new Criterion\LogicalAnd([
- new Criterion\Visibility(Criterion\Visibility::VISIBLE),
- new Criterion\ParentLocationId($parentLocationId),
- ]);
-
- return $query;
- }
- }
- ```
-
- `src/AppBundle/DependencyInjection/AppExtension.php`:
-
- ``` php {skip-validation}
- load('services.yml');
- }
-
- public function prepend(ContainerBuilder $container)
- {
- $configFile = __DIR__ . '/../Resources/config/blocks.yml';
- $config = Yaml::parse(file_get_contents($configFile));
- $container->prependExtensionConfig('ezplatform_page_fieldtype', $config);
- $container->addResource(new FileResource($configFile));
- }
- }
- ```
-
- `src/AppBundle/Resources/config/blocks.yml`:
-
- ``` yaml
- blocks:
- random:
- name: Random
- category: default
- thumbnail: assets/images/layouts/sidebar.png
- #configuration_template: blocks/random_config.html.twig
- views:
- random:
- template: AppBundle:blocks:random.html.twig
- name: Random Content Block View
- attributes:
- parentContentId:
- type: embed
- name: Parent Location ID
- validators:
- not_blank:
- message: Please provide parent node
- ```
-
- `src/AppBundle/Resources/config/services.yml`:
-
- ``` yaml
- services:
- _defaults:
- autowire: true
- autoconfigure: true
- public: false
-
- AppBundle\Block\Event\Listener\RandomBlockListener: ~
-
- app.block.random.converter:
- class: EzSystems\EzPlatformPageMigration\Converter\AttributeConverter\DefaultConverter
- tags:
- - { name: ezplatform.fieldtype.ezlandingpage.migration.attribute.converter, block_type: random }
- ```
-
-### B. Update to v2.3
-
-#### Database update script
-
-Apply the following database update script:
-
-``` bash
-mysql -u -p < vendor/ezsystems/ezpublish-kernel/data/update/mysql/dbupdate-7.2.0-to-7.3.0.sql
-```
-
-#### Form Builder
-
-In an Enterprise installation, to create the *Forms* container under the content tree root use the following command:
-
-``` bash
-php bin/console ezplatform:form-builder:create-forms-container
-```
-
-You can also specify content type, Field values and language code of the container, for example:
-
-``` bash
-php bin/console ezplatform:form-builder:create-forms-container --content-type custom --field title --value 'My Forms' --field description --value 'Custom container for the forms' --language-code eng-US
-```
-
-You also need to run a script to add database tables for the Form Builder.
-You can find it in https://github.com/ezsystems/ezplatform-ee-installer/blob/2.3/Resources/sql/schema.sql#L136
-
-!!! caution "Form (ezform) field type"
-
- After the update, to create forms, you have to add a new content type (for example, named "Form") that contains `Form` field (this content type can contain other fields
- as well). After that you can use forms inside landing pages via Embed block.
-
-### C. Update to v2.4
-
-#### Workflow
-
-When updating an Enterprise installation, you need to [run a script](https://github.com/ezsystems/ezplatform-ee-installer/blob/2.4/Resources/sql/schema.sql#L198)
-to add database tables for the Editorial Workflow.
-
-#### Changes to the Forms folder
-
-The built-in Forms folder is located in the Form Section in versions 2.4+.
-
-If you're updating your Enterprise installation, you need to add this Section manually and move the folder to it.
-
-To allow anonymous users to access Forms, you also need to add the `content/read` policy with the *Form* Section to the Anonymous User.
-
-#### Changes to custom tags
-
-v2.4 changed the way of configuring custom tags.
-They're no longer configured under the `ezpublish` key, but one level higher in the YAML structure:
-
-``` yaml
-ezpublish:
- system:
- :
- fieldtypes:
- ezrichtext:
- custom_tags: [exampletag]
-
-ezrichtext:
- custom_tags:
- exampletag:
- # ...
-```
-
-The old configuration is deprecated, so if you use custom tags, you need to modify your config accordingly.
-
-### D. Update to v2.5
-
-#### Database update script
-
-Apply the following database update script:
-
-``` bash
-mysql -u -p < vendor/ezsystems/ezpublish-kernel/data/update/mysql/dbupdate-7.4.0-to-7.5.0.sql
-```
-
-##### v2.5.3
-
-To update to v2.5.3, additionally run the following script:
-
-``` bash
-mysql -u -p < vendor/ezsystems/ezpublish-kernel/data/update/mysql/dbupdate-7.5.2-to-7.5.3.sql
-```
-
-##### v2.5.6
-
-To update to v2.5.6, additionally run the following script:
-
-``` bash
-mysql -u -p < vendor/ezsystems/ezpublish-kernel/data/update/mysql/dbupdate-7.5.4-to-7.5.5.sql
-```
-
-or for PostgreSQL:
-
-``` bash
-psql < vendor/ezsystems/ezpublish-kernel/data/update/postgres/dbupdate-7.5.4-to-7.5.5.sql
-```
-
-##### v2.5.9
-
-To update to v2.5.9, additionally run the following script:
-
-``` bash
-mysql -u -p < vendor/ezsystems/ezpublish-kernel/data/update/mysql/dbupdate-7.5.6-to-7.5.7.sql
-```
-
-or for PostgreSQL:
-
-``` bash
-psql < vendor/ezsystems/ezpublish-kernel/data/update/postgres/dbupdate-7.5.6-to-7.5.7.sql
-```
-
-Additionally, reindex the content:
-
-``` bash
-php bin/console ezplatform:reindex
-```
-
-#### Changes to database schema
-
-The introduction of [support for PostgreSQL](databases.md#using-postgresql) includes a change in the way database schema is generated.
-
-It's now created based on [YAML configuration](https://github.com/ezsystems/ezpublish-kernel/blob/master/eZ/Bundle/EzPublishCoreBundle/Resources/config/storage/legacy/schema.yaml), using the new [`DoctrineSchemaBundle`](https://github.com/ezsystems/doctrine-dbal-schema).
-
-If you're updating your application according to the usual procedure, no additional actions are required.
-However, if you don't update your meta-repository, you need to take two additional steps:
-
-- enable `EzSystems\DoctrineSchemaBundle\DoctrineSchemaBundle()` in `AppKernel.php`
-- add [`ez_doctrine_schema`](https://github.com/ezsystems/ezplatform/blob/2.5/app/config/config.yml#L33) configuration
-
-#### Changes to Matrix field type
-
-To migrate your content from legacy XML format to a new `ezmatrix` value use the following command:
-
-```bash
-bin/console ezplatform:migrate:legacy_matrix
-```
-
-#### Required manual cache clearing if using Redis
-
-If you're using Redis as your persistence cache storage you should always clear it manually after an upgrade.
-You can do it in two ways, by using `redis-cli` and executing the following command:
-
-```bash
-FLUSHALL
-```
-
-or by executing the following command:
-
-```bash
-bin/console cache:pool:clear cache.redis
-```
-
-#### Updating to 2.5.3
-
-##### Page Builder
-
-This step is only required when updating an Enterprise installation from versions higher than v2.2 and lower than v2.5.3.
-In case of versions lower than 2.2, skip this step or ignore the information that indexes from a script below already exist.
-
-When updating to v2.5.3, you need to run the following SQL commands to add missing indexes:
-
-``` bash
-CREATE INDEX ezpage_map_zones_pages_zone_id ON ezpage_map_zones_pages(zone_id);
-CREATE INDEX ezpage_map_zones_pages_page_id ON ezpage_map_zones_pages(page_id);
-CREATE INDEX ezpage_map_blocks_zones_block_id ON ezpage_map_blocks_zones(block_id);
-CREATE INDEX ezpage_map_blocks_zones_zone_id ON ezpage_map_blocks_zones(zone_id);
-CREATE INDEX ezpage_map_attributes_blocks_attribute_id ON ezpage_map_attributes_blocks(attribute_id);
-CREATE INDEX ezpage_map_attributes_blocks_block_id ON ezpage_map_attributes_blocks(block_id);
-CREATE INDEX ezpage_blocks_design_block_id ON ezpage_blocks_design(block_id);
-CREATE INDEX ezpage_blocks_visibility_block_id ON ezpage_blocks_visibility(block_id);
-CREATE INDEX ezpage_pages_content_id_version_no ON ezpage_pages(content_id, version_no);
-```
-
-#### Updating to 2.5.16
-
-##### Powered-By header
-
-To promote use of eZ Platform, `ezsystems/ez-support-tools` v1.0.10, as of eZ Platform v2.5.16, sets the Powered-By header.
-It's enabled by default and generates a header like `Powered-By: eZ Platform Enterprise v2`.
-
-To omit the version number, use the following configuration:
-
-``` yaml
-ezplatform_support_tools:
- system_info:
- powered_by:
- release: "none"
-```
-
-To opt out of the whole feature, disable it with the following configuration:
-
-``` yaml
-ezplatform_support_tools:
- system_info:
- powered_by:
- enabled: false
-```
-
-#### Updating to v2.5.18
-
-To update to v2.5.18, if you're using MySQL, additionally run the following update SQL command:
-
-``` sql
-ALTER TABLE ezpage_attributes MODIFY value LONGTEXT;
-```
-
-##### Update entity managers
-
-Version v2.5.18 introduces new entity managers.
-To ensure that they work in multi-repository setups, you must update the GraphQL schema.
-You do this manually by following this procedure:
-
-1. Update your project to v2.5.18 and run the `php bin/console cache:clear` command to generate the [service container](php_api.md#service-container).
-
-1. Run the following command to discover the names of the new entity managers.
- Take note of the names that you discover:
-
- `php bin/console debug:container --parameter=doctrine.entity_managers --format=json | grep ibexa_`
-
-1. For every entity manager prefixed with `ibexa_`, run the following command:
-
- `php bin/console doctrine:schema:update --em= --dump-sql`
-
-1. Review the queries and ensure that there are no harmful changes that could affect your data.
-
-1. For every entity manager prefixed with `ibexa_`, run the following command to run queries on the database:
-
- `php bin/console doctrine:schema:update --em= --force`
-
-###### VCL configuration for Fastly
-
-[[% include 'snippets/update/vcl_configuration_for_fastly_v3.md' %]]
-
-##### Optimize workflow queries
-
-Run the following SQL queries to optimize workflow performance:
-
-``` sql
-CREATE INDEX idx_workflow_co_id_ver ON ezeditorialworkflow_workflows(content_id, version_no);
-CREATE INDEX idx_workflow_name ON ezeditorialworkflow_workflows(workflow_name);
-```
-
-## 5. Finish the update
-
-[[% include 'snippets/update/finish_the_update.md' %]]
-
-[[% include 'snippets/update/notify_support.md' %]]
-
-??? tip "`defaultLayout` setting not available"
-
- If you migrated you installation from eZ Publish Platform,
- in Page Builder you can encounter an issue where the **Default layout** dropdown is disabled
- with a "Layout '' for setting 'defaultLayout' is not available" error message.
-
- If this happens, add the following temporary configuration to `app/config/ezplatform.yml`:
-
- ``` yaml
- ezpublish:
- system:
- global:
- ezpage:
- layouts:
- GlobalZoneLayout:
- name: Global zone layout
- template: globalzonelayout.tpl
- 2ZonesLayout1:
- name: 2 zones (layout 1)
- template: 2zoneslayout1.tpl
- 2ZonesLayout2:
- name: 2 zones (layout 2)
- template: 2zoneslayout2.tpl
- 2ZonesLayout3:
- name: 2 zones (layout 3)
- template: 2zoneslayout3.tpl
- 3ZonesLayout1:
- name: 3 zones (layout 1)
- template: 3zoneslayout1.tpl
- 3ZonesLayout2:
- name: 3 zones (layout 2)
- template: 3zoneslayout2.tpl
- CallForActionLayout:
- name: Call For Action zone layout
- template: callforactionlayout.tpl
- ```
-
- Clear the cache and refresh the page. The dropdown should now be active.
- Select any option in the dropdown and save the content type.
-
- You should now be able to remove the field definition from the content type.
-
- Afterwards, you can remove the configuration above from `ezplatform.yml`.
-
-## Update to v3.3
-
-It's strongly recommended to also [update to the latest LTS, v3.3](update_from_2.5.md).
diff --git a/docs/update_and_migration/from_1.x_2.x/update_from_1.x_2.x.md b/docs/update_and_migration/from_1.x_2.x/update_from_1.x_2.x.md
deleted file mode 100644
index 7a84c569b40..00000000000
--- a/docs/update_and_migration/from_1.x_2.x/update_from_1.x_2.x.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-description: Update your installation to the latest v2.5 version from v1.13 or earlier v2 version.
-target_version: '2.5'
-latest_tag: '2.5.30'
----
-
-# From 1.13 and 2.x
-
-This update procedure applies if you're using:
-
-- v1.13
-- v2.x
-- v2.5 lower than the latest v2.5.x
-
-Go through the following steps to update to the latest v2.5 LTS (v[[= latest_tag =]]).
-
-1. [Check out a version](update_app_to_2.5.md#1-check-out-a-version)
-1. [Resolve conflicts](update_app_to_2.5.md#2-resolve-conflicts)
-1. [Update the app](update_app_to_2.5.md#3-update-the-app)
-1. [Update the database](update_db_to_2.5.md#4-update-the-database)
-1. [Finish the update](update_db_to_2.5.md#5-finish-the-update)
diff --git a/docs/update_and_migration/from_2.5/adapt_code_to_v3.md b/docs/update_and_migration/from_2.5/adapt_code_to_v3.md
deleted file mode 100644
index 5e2a2b9db5e..00000000000
--- a/docs/update_and_migration/from_2.5/adapt_code_to_v3.md
+++ /dev/null
@@ -1,103 +0,0 @@
-# Update code to v3
-
-Before you start this procedure, make sure you have completed the previous step,
-[Updating to v3.2](to_3.2.md).
-
-## 4. Update the code
-
-To adapt you installation to v3, you need to make a number of modifications to your code.
-
-### New project structure
-
-!!! tip
-
- If you run into issues, for details on all changes related to the switch to Symfony 5,
- see [Symfony upgrade guide for 4.0](https://github.com/symfony/symfony/blob/4.4/UPGRADE-4.0.md)
- and [for 5.0](https://github.com/symfony/symfony/blob/5.0/UPGRADE-5.0.md)
-
-The latest Symfony versions changed the organization of your project into folders and bundles.
-When updating to eZ Platform v3 you need to move your files and modify file paths and namespace references.
-
-
-
-#### Configuration
-
-Configuration files have been moved from `app/Resources/config` to `config`.
-Package-specific configuration is placed in `config/packages` (for example, `config/packages/ezplatform_admin_ui.yaml`).
-This folder also contains `config/packages/ezplatform.yaml`, which contains all settings coming in from Kernel.
-
-#### PHP code and bundle organization
-
-Since Symfony 4 `src/` code is no longer organized in bundles, `AppBundle` has been removed from the default eZ Platform install.
-To adapt, you need to move all your PHP code, such as controllers or event listeners, to the `src` folder and use the `App` namespace for your custom code instead.
-
-!!! tip "How to make AppBundle continue to work, for now"
-
- Refactoring bundles for `src/` folder can involve extensive changes, if you want to make your `src/AppBundle` continue to work, follow [an Autoloading src/AppBundle guide on Symfony Casts](https://symfonycasts.com/screencast/symfony4-upgrade/flex-composer.json).
-
- You can also follow [Using a "path" Repository guide](https://symfonycasts.com/screencast/symfony-bundle/extracting-bundle), to create a [composer path repository](https://getcomposer.org/doc/05-repositories.md#path).
- If you have several bundles you can move them into a `packages/` directory and load them all with:
-
- ```
- "repositories": [
- { "type": "path", "url": "packages/*" },
- ],
- ```
-
- Once you're ready to refactor the code to `App` namespace, follow [Bye Bye AppBundle](https://symfonycasts.com/screencast/symfony4-upgrade/bye-appbundle) article.
-
-#### View templates
-
-Templates are no longer stored in `app/Resources/views`.
-You need to move all your templates to the `templates` folder in your project's root.
-
-#### Translations
-
-Translation files have been moved out of `app/Resources/translations` into `translations` in your project's root.
-
-#### `web` and assets
-
-Content of the `web` folder is now placed in `public`.
-Content of `app/Resources/assets` has been moved to `assets`.
-
-!!! note
-
- You also need to update paths that refer to the old location,
- for example in [`webpack.config.js`](project_organization.md#importing-configuration-from-a-bundle).
-
-!!! note "Full list of deprecations"
-
- If you encounter any issue during the upgrade,
- see [eZ Platform v3.0 deprecations](ez_platform_v3.0_deprecations.md#template-organization)
- for details of all required changes to your code.
-
-### Third-party dependencies
-
-Because eZ Platform v3 is based on Symfony 5, you need to make sure all additional third-party dependencies
-that your project uses have been adapted to Symfony 5.
-
-### Automatic code refactoring (optional)
-
-To simplify the process of adapting your code to Symfony 5, you can use [Rector, a reconstructor tool](https://github.com/rectorphp/rector)
-that automatically refactors your Symfony and PHPUnit code.
-
-To properly refactor your code, you might need to run the Rector `process` command for each Symfony version from 4.0 to 5.0 in turn:
-
-`vendor/bin/rector process src --set symfony40`
-
-You can find all the available sets in [the Rector repository](https://github.com/rectorphp/rector/tree/v0.7.65/config/set).
-Keep in mind that after automatic refactoring finishes there might be some code chunks that you need to fix manually.
-
-### Update code for specific parts of the system
-
-Now, go through the following steps and ensure all your code is up to date with v3:
-
-- [1. Update templates](update_code/1_update_templates.md)
-- [2. Update configuration](update_code/2_update_configuration.md)
-- [3. Update field types](update_code/3_update_field_types.md)
-- [4. Update Signal Slots](update_code/4_update_signal_slots.md)
-- [5. Update Online Editor](update_code/5_update_online_editor.md)
-- [6. Update workflow](update_code/6_update_workflow.md)
-- [7. Update extended code](update_code/7_update_extensions.md)
-- [8. Update REST](update_code/8_update_rest.md)
-- [9. Other code updates](update_code/9_update_other.md)
diff --git a/docs/update_and_migration/from_2.5/to_3.2.md b/docs/update_and_migration/from_2.5/to_3.2.md
deleted file mode 100644
index 8c0e441b840..00000000000
--- a/docs/update_and_migration/from_2.5/to_3.2.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-target_version: '3.2'
-latest_tag: '3.2.8'
----
-
-# Update the app to v3.2
-
-!!! caution
-
- Before you start updating to v3.3, make sure that you're currently using the latest version of v2.5 (v[[= latest_tag_2_5 =]]).
- If not, refer to the [update guide for v2.5](update_db_to_2.5.md#d-update-to-v25).
-
-To move from v2.5 to v3.3, first, you need to bring the app to version v3.2.
-
-## 1. Check out a version
-
-[[% include 'snippets/update/check_out_version.md' %]]
-
-## 2. Resolve conflicts
-
-[[% include 'snippets/update/merge_composer.md' %]]
-
-## 3. Update the app
-
-[[% include 'snippets/update/update_app.md' %]]
-
-## Next steps
-
-Now, proceed to the next step, [updating the code to v3.0](adapt_code_to_v3.md).
diff --git a/docs/update_and_migration/from_2.5/to_3.3.md b/docs/update_and_migration/from_2.5/to_3.3.md
deleted file mode 100644
index 4a58c15259f..00000000000
--- a/docs/update_and_migration/from_2.5/to_3.3.md
+++ /dev/null
@@ -1,162 +0,0 @@
----
-target_version: '3.3'
-month_change: false
----
-
-# Update the app to v3.3
-
-Before you start this procedure, make sure you have completed the previous step,
-[Updating code to v3](adapt_code_to_v3.md).
-
-## 5. Update to v3.3
-
-Ibexa DXP v3.3 uses [Symfony Flex](https://symfony.com/tour/flex-recipes).
-When updating from v3.2 to v3.3, you need to follow a special update procedure.
-
-!!! note
-
- Ibexa DXP v3.3 requires Composer 2.0.13 or higher.
-
-First, create an update branch `update-[[=target_version=]]` in git and commit your work.
-
-If you haven't done it before, add the relevant meta-repository as an `upstream` remote:
-
-=== "ezplatform"
-
- ``` bash
- git remote add upstream http://github.com/ezsystems/ezplatform.git
- ```
-
-=== "ezplatform-ee"
-
- ``` bash
- git remote add upstream http://github.com/ezsystems/ezplatform-ee.git
- ```
-
-=== "ezcommerce"
-
- ``` bash
- git remote add upstream http://github.com/ezsystems/ezcommerce.git
- ```
-
-!!! tip
-
- It's good practice to make git commits after every step of the update procedure.
-
-### A. Merge project skeleton
-
-Merge the current skeleton into your project:
-
-=== "[[= product_name_content =]]t"
-
- ``` bash
- git remote add content-skeleton https://github.com/ibexa/content-skeleton.git
- git fetch content-skeleton --tags
- git merge v[[= latest_tag_3_3 =]] --allow-unrelated-histories
- ```
-
-=== "[[= product_name_exp =]]"
-
- ``` bash
- git remote add experience-skeleton https://github.com/ibexa/experience-skeleton.git
- git fetch experience-skeleton --tags
- git merge v[[= latest_tag_3_3 =]] --allow-unrelated-histories
- ```
-
-=== "[[= product_name_com =]]"
-
- ``` bash
- git remote add commerce-skeleton https://github.com/ibexa/commerce-skeleton.git
- git fetch commerce-skeleton --tags
- git merge v[[= latest_tag_3_3 =]] --allow-unrelated-histories
- ```
-
-This introduces changes from the relevant website skeleton and results in conflicts.
-
-Resolve the conflicts in the following way:
-
-- Make sure all automatically added `ezsystems/*` packages are removed. If you explicitly added any packages that aren't part of the standard installation, retain them.
-- Review the rest of the packages. If your project requires a package, keep it.
-- If a package is only used as a dependency of an `ezsystems` package, remove it. You can check how the package is used with `composer why `.
-- Keep the dependencies listed in the website skeleton.
-
-!!! tip
-
- You can also approach resolving conflicts differently:
- run `git checkout --theirs composer.json` to get a clean `composer.json` from the skeleton
- and then manually add any necessary changes from your project.
-
-!!! caution
-
- It's impossible to update an Enterprise edition (`ezsystems/ezplatform-ee`)
- to an [[= product_name_content =]] edition.
-
- Also, make sure that `composer.json` has the following `repositories` entry:
-
- ```json
- "ibexa": {
- "type": "composer",
- "url": "https://updates.ibexa.co"
- }
- ```
-
-### B. Update the app
-
-Update Symfony Flex, then update the dependencies:
-
-``` bash
-composer update symfony/flex --no-plugins --no-scripts
-composer update
-```
-
-!!! caution
-
- Composer repository changes between 3.2 and 3.3 from `updates.ez.no` to `updates.ibexa.co`, therefore your credentials might be outdated.
-
- `username` and `password` don't change.
- The repository they're used on changes.
-
- See [Composer authentication documentation](https://getcomposer.org/doc/articles/authentication-for-private-packages.md) to find the precedure that suits the way you're passing credentials.
-
- In production, replace the old repository with the new one.
- But as a developer, you may need to go back to an earlier version, and should keep the old repository as well.
- For example, your `auth.json` may look like this:
-
- ```json
- {
- "http-basic": {
- "updates.ibexa.co": {
- "username": "abcdefghijklmnopqrstuvwxyz012345",
- "password": "6789abcdefghijklmnopqrstuvwxyz01"
- },
- "updates.ez.no": {
- "username": "abcdefghijklmnopqrstuvwxyz012345",
- "password": "6789abcdefghijklmnopqrstuvwxyz01"
- }
- }
- }
- ```
-
-### C. Configure the web server
-
-Add the following rewrite rule to your web server configuration:
-
-=== "Apache"
-
- ```
- RewriteRule ^/build/ - [L]
- ```
-
-=== "nginx"
-
- ```
- rewrite "^/build/(.*)" "/build/$1" break;
- ```
-
-## 6. Update the database
-
-[[% include 'snippets/update/db/update_db_2.5-3.3.md' %]]
-
-## 7. Update to the latest patch version
-
-Now, proceed to the last step, [updating to the latest v3.3 patch version](update_from_3.3.md).
diff --git a/docs/update_and_migration/from_2.5/update_code/1_update_templates.md b/docs/update_and_migration/from_2.5/update_code/1_update_templates.md
deleted file mode 100644
index a955a0ededd..00000000000
--- a/docs/update_and_migration/from_2.5/update_code/1_update_templates.md
+++ /dev/null
@@ -1,45 +0,0 @@
-# 4.1. Update templates
-
-## Back-Office templates
-
-The naming and location of templates in the back office have been changed.
-If you extend or modify these templates, you need to adapt your code.
-
-For the full list of template changes, see [the list of removals and deprecations](ez_platform_v3.0_deprecations.md#template-organization).
-
-## Twig functions and filters
-
-A number of [Twig functions, filters and helpers have been renamed](ez_platform_v3.0_deprecations.md#functions-renamed).
-If your templates use them, you need to update them.
-
-## Templating component
-
-[The templating component integration is now deprecated.](https://symfony.com/blog/new-in-symfony-4-3-deprecated-the-templating-component-integration)
-As a result, the way to indicate a template path has changed.
-
-For example:
-
-- **Use:** `"@@EzPlatformUser/user_settings/list.html.twig"` **instead of:** `"EzPlatformUserBundle:user_settings:list.html.twig"`
-- **Use:** `{% extends "@EzPublishCore/content_fields.html.twig" %}` **instead of:** `{% extends "EzPublishCoreBundle::content_fields.html.twig" %}`
-
-## Form templates
-
-Content type editing has been [moved from `repository-forms` to `ezplatform-admin-ui`](ez_platform_v3.0_deprecations.md#content-type-forms).
-
-Forms for content creation have been [moved from `repository-forms` to `ezplatform-content-forms`](ez_platform_v3.0_deprecations.md#repository-forms).
-
-If your templates extend any of those built-in templates, you need to update their paths.
-
-## Deprecated controller actions
-
-If your templates still use the deprecated `viewLocation` and `embedLocation` actions of `ViewController`,
-you need to rewrite them to use `viewAction` and `embedAction` respectively.
-
-## Referencing controller actions
-
-To reference a controller, you now need to use `serviceOrFqcn::method` syntax instead of
-`bundle:controller:action`:
-
-**Use:** `controller: My\ExampleBundle\Controller\DefaultController::articleViewAction`
-
-**Instead of:** `controller: AcmeExampleBundle:Default:articleView`
diff --git a/docs/update_and_migration/from_2.5/update_code/2_update_configuration.md b/docs/update_and_migration/from_2.5/update_code/2_update_configuration.md
deleted file mode 100644
index b0853d7e1ed..00000000000
--- a/docs/update_and_migration/from_2.5/update_code/2_update_configuration.md
+++ /dev/null
@@ -1,66 +0,0 @@
-# 4.2. Update configuration
-
-## `ezpublish` configuration key
-
-The main YAML configuration key is now [`ezplatform` instead of `ezpublish`](ez_platform_v3.0_deprecations.md#configuration-through-ezplatform).
-You need to change your configuration files to make use of the new key. For example:
-
-**Use:**
-
-``` yaml
-ezplatform:
- system:
- default:
- # ...
-```
-
-**instead of:**
-
-``` yaml
-ezpublish:
- system:
- default:
- # ...
-```
-
-## Resolving settings
-
-If you used dynamic settings (through `$setting$`),
-or got settings from the [ConfigResolver](dynamic_configuration.md#configresolver) in a class constructor,
-you now need to rewrite your code to inject the ConfigResolver and get the relevant setting:
-
-**Use:**
-
-``` php {skip-validation}
-use eZ\Publish\Core\MVC\ConfigResolverInterface;
-
-class MyService
-{
- /** @var \eZ\Publish\Core\MVC\ConfigResolverInterface */
- private $configResolver;
-
- public function __construct(ConfigResolverInterface $configResolver)
- {
- $this->configResolver = $configResolver;
- }
-
- public function myMethodWhichUsesSetting(): void
- {
- $setting = $this->configResolver->getParameter('setting');
- }
-}
-```
-
-**instead of:**
-
-``` php {skip-validation}
-use eZ\Publish\Core\MVC\ConfigResolverInterface;
-
-class MyService
-{
- public function __construct(ConfigResolverInterface $configResolver)
- {
- $this->setting = $configResolver->getParameter('setting');
- }
-}
-```
diff --git a/docs/update_and_migration/from_2.5/update_code/3_update_field_types.md b/docs/update_and_migration/from_2.5/update_code/3_update_field_types.md
deleted file mode 100644
index d2fc28f0143..00000000000
--- a/docs/update_and_migration/from_2.5/update_code/3_update_field_types.md
+++ /dev/null
@@ -1,55 +0,0 @@
-# 4.3. Update field types
-
-You need to adapt your custom field types to the new field type architecture.
-
-## `eZ\Publish\SPI\FieldType\FieldType` interface
-
-The `eZ\Publish\SPI\FieldType\FieldType` interface is now an abstract class.
-You need to replace `implements FieldType` in your field type code with `extends FieldType`.
-
-## Deprecated `getName` method
-
-The deprecated method `getName` from the `eZ\Publish\SPI\FieldType\FieldType` interface has been changed.
-Now it accepts two additional parameters: `FieldDefinition $fieldDefinition` and `string $languageCode`.
-
-In your code you need to change the `getName` signature
-to `function getName(Value $value, FieldDefinition $fieldDefinition, string $languageCode): string;`.
-
-## `eZ\Publish\SPI\FieldType\Nameable` interface
-
-The `eZ\Publish\SPI\FieldType\Nameable` interface has been removed.
-In your code you need to remove implementations of `Nameable` and replace them with
-`eZ\Publish\SPI\FieldType\FieldType::getName`.
-
-## Deprecated tags
-
-You need to replace deprecated tags in service configuration:
-
-|Deprecated tag|Current tag|
-|---|---|
-|ezpublish.fieldType.parameterProvider|ezplatform.field_type.parameter_provider|
-|ezpublish.fieldType.externalStorageHandler|ezplatform.field_type.external_storage_handler|
-|ezpublish.fieldType.externalStorageHandler.gateway|ezplatform.field_type.external_storage_handler.gateway|
-|ezpublish.fieldType|ezplatform.field_type|
-|ezpublish.fieldType.indexable|ezplatform.field_type.indexable|
-|ezpublish.storageEngine.legacy.converter|ezplatform.field_type.legacy_storage.converter|
-|ez.fieldFormMapper.definition|ezplatform.field_type.form_mapper.definition|
-|ez.fieldFormMapper.value|ezplatform.field_type.form_mapper.value|
-
-## Moved classes
-
-You need to replace importing the following classes:
-
-|Previous location|Current location|
-|---|---|
-|EzSystems\RepositoryForms\Data\Content\FieldData|EzSystems\EzPlatformContentForms\Data\Content\FieldData|
-|EzSystems\RepositoryForms\Data\FieldDefinitionData|EzSystems\EzPlatformAdminUi\Form\Data\FieldDefinitionData|
-|EzSystems\RepositoryForms\FieldType\FieldDefinitionFormMapperInterface|EzSystems\EzPlatformAdminUi\FieldType\FieldDefinitionFormMapperInterface|
-|EzSystems\RepositoryForms\FieldType\FieldValueFormMapperInterface|EzSystems\EzPlatformContentForms\FieldType\FieldValueFormMapperInterface|
-
-## Extending field type templates
-
-If you extended templates for `ezobjectrelationlist_field`, `ezimageasset_field`, or `ezobjectrelation_field` fields
-using `{% extends "@EzPublishCore/content_fields.html.twig" %}`,
-you now need to extend `EzSystemsPlatformHttpCache` instead, if you wish to make use of cache:
-`{% extends "@EzSystemsPlatformHttpCache/content_fields.html.twig" %}`.
diff --git a/docs/update_and_migration/from_2.5/update_code/4_update_signal_slots.md b/docs/update_and_migration/from_2.5/update_code/4_update_signal_slots.md
deleted file mode 100644
index 0eef89a9d19..00000000000
--- a/docs/update_and_migration/from_2.5/update_code/4_update_signal_slots.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# 4.4. Update Signal Slots
-
-If you used Signal Slots to listen for events in you custom code,
-you need to rewrite them using Symfony Events and Listeners instead.
-
-The application now triggers two Events per operation: one before and one after the relevant thing happens
-(see for example [Bookmark events](https://github.com/ezsystems/ezplatform-kernel/blob/v1.0.0/eZ/Publish/Core/Event/BookmarkService.php)).
-
-To use them, create [Event Listeners]([[= symfony_doc =]]/event_dispatcher.html) in your code,
-for example:
-
-**Use:**
-
-``` php {skip-validation}
-public static function getSubscribedEvents(): array
-{
- return [
- CreateBookmarkEvent::class => 'onCreateBookmark',
- ];
-}
-
-public function onCreateBookmark(CreateBookmarkEvent $event): void
-{
- /// your code
-}
-```
-
-**instead of:**
-
-``` php {skip-validation}
-public function receive(Signal $signal)
-{
- if (!($signal instanceof CreateBookmarkSignal)) {
- return;
- }
-
- // your code
-}
-```
diff --git a/docs/update_and_migration/from_2.5/update_code/5_update_online_editor.md b/docs/update_and_migration/from_2.5/update_code/5_update_online_editor.md
deleted file mode 100644
index 5a2cb515af6..00000000000
--- a/docs/update_and_migration/from_2.5/update_code/5_update_online_editor.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# 4.5. Update Online Editor
-
-## RichText
-
-Deprecated code related to the RichText field type has been removed from `ezpublish-kernel`.
-
-If your code still relies on the `eZ\Publish\Core\FieldType\RichText` namespace, you need to rewrite it
-to use `EzSystems\EzPlatformRichText\eZ\RichText` instead.
-
-## Extra buttons
-
-Configuring custom Online Editor buttons with `ezrichtext.alloy_editor.extra_buttons` is deprecated.
-
-If you added custom buttons in this way, you need to rewrite your code to use
-`ezplatform.system..fieldtypes.ezrichtext.toolbars..buttons` instead.
diff --git a/docs/update_and_migration/from_2.5/update_code/6_update_workflow.md b/docs/update_and_migration/from_2.5/update_code/6_update_workflow.md
deleted file mode 100644
index 8bfc861349b..00000000000
--- a/docs/update_and_migration/from_2.5/update_code/6_update_workflow.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# 4.6. Update workflow
-
-[`flex-workflow` has been combined with `ezplatform-workflow`](ez_platform_v3.0_deprecations.md#flex-workflow) in the form of a Quick Review functionality.
-
-If you used custom subscribers for events in workflow, you can now rewrite this code
-to use [custom actions](add_custom_workflow_action.md).
-
-To migrate your content which had been using Flex Workflow to the new Quick Review workflow,
-run the following command:
-
-`php bin/console ezplatform:migrate:flex-workflow`
diff --git a/docs/update_and_migration/from_2.5/update_code/7_update_extensions.md b/docs/update_and_migration/from_2.5/update_code/7_update_extensions.md
deleted file mode 100644
index 3aff7545eb5..00000000000
--- a/docs/update_and_migration/from_2.5/update_code/7_update_extensions.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# 4.7. Update extended code
-
-## Universal Discovery Widget
-
-If you extended the Universal Discovery Widget
-(for example, added your own tabs or triggered opening the UDW for your own customizations),
-you need to rewrite this extension using the [new YAML configuration](https://doc.ibexa.co/en/3.3/extending/extending_udw/).
-
-## Back office extensibility
-
-If you added custom tab groups in the back office,
-you now need to [make use of the `TabsComponent`](back_office_tabs.md#tab-groups).
diff --git a/docs/update_and_migration/from_2.5/update_code/8_update_rest.md b/docs/update_and_migration/from_2.5/update_code/8_update_rest.md
deleted file mode 100644
index c349353cf12..00000000000
--- a/docs/update_and_migration/from_2.5/update_code/8_update_rest.md
+++ /dev/null
@@ -1,57 +0,0 @@
-# 4.8. Update REST
-
-If your code extends the REST API, you need to modify namespaces.
-The `eZ\Publish\Core\REST` and `eZ\Publish\Core\REST\Common\` namespaces have been replaced by `EzSystems\EzPlatformRest`.
-This is due to the fact that REST code has been moved from Kernel to a new `ezpublish-rest` package.
-
-## Custom installers
-
-eZ Platform provides extension point to create named custom installer which can be used instead of the native one.
-To use it, execute the Symfony command:
-
-``` bash
-php ./bin/console ezplatform:install
-```
-
-In eZ Platform v3.0, service definitions around that extension point have changed:
-
-1\. The deprecated Clean Installer has been dropped from `ezpublish-kernel` package.
-If your project uses custom installer and has relied on Clean Installer service definition (`ezplatform.installer.clean_installer`)
-you need to switch to Core Installer.
-
-**Use:**
-
-``` yaml
-services:
- Acme\App\Installer\MyCustomInstaller:
- parent: EzSystems\PlatformInstallerBundle\Installer\CoreInstaller
-```
-
-**instead of**:
-
-``` yaml
-services:
- Acme\App\Installer\MyCustomInstaller:
- parent: ezplatform.installer.clean_installer
-```
-
-`CoreInstaller` relies on [`DoctrineSchemaBundle`](https://github.com/ezsystems/doctrine-dbal-schema).
-Custom schema can be installed defining Symfony Event Subscriber subscribing to `EzSystems\DoctrineSchema\API\Event\SchemaBuilderEvents::BUILD_SCHEMA` event.
-
-2\. The deprecated Symfony Service definition `ezplatform.installer.db_based_installer` has been removed in favor of its FQCN-named definition.
-
-**Use:**
-
-``` yaml
-services:
- Acme\App\Installer\MyCustomInstaller:
- parent: EzSystems\PlatformInstallerBundle\Installer\DbBasedInstaller
-```
-
-**instead of:**
-
-``` yaml
-services:
- Acme\App\Installer\MyCustomInstaller:
- parent: ezplatform.installer.db_based_installer
-```
diff --git a/docs/update_and_migration/from_2.5/update_code/9_update_other.md b/docs/update_and_migration/from_2.5/update_code/9_update_other.md
deleted file mode 100644
index 37c32953800..00000000000
--- a/docs/update_and_migration/from_2.5/update_code/9_update_other.md
+++ /dev/null
@@ -1,68 +0,0 @@
-# 4.9 Other code updates
-
-## HTTP cache
-
-HTTP cache bundle now uses FOS Cache Bundle v2.
-If your code makes use of HTTP cache bundle, see [the list of changes and deprecations](ez_platform_v3.0_deprecations.md#ezplatform-http-cache).
-
-## User checker
-
-Add the user checker to firewall by adding the following line to `config/packages/security.yaml`:
-
-``` yaml hl_lines="5"
-security:
- firewalls:
- ezpublish_front:
- # ...
- user_checker: eZ\Publish\Core\MVC\Symfony\Security\UserChecker
- # ...
-```
-
-## Commands
-
-The `ContainerAwareCommand` class isn't available in Symfony 5. Therefore, if your custom commands use `Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand`
-as a base class, you must rewrite them to use `Symfony\Component\Console\Command\Command` instead.
-
-## Permissions
-
-Some [permission choice loaders](ez_platform_v3.0_deprecations.md#code-cleanup-in-ez-platform-kernel) have been removed.
-If your code uses them, you must rewrite it to use the permission resolver.
-
-## Service container parameters
-
-A number of Symfony [service container](php_api.md#service-container) parameters [have been dropped](https://github.com/ezsystems/ezplatform-kernel/blob/v1.0.0/doc/bc/1.0/dropped-container-parameters.md).
-
-Check if your code uses such invalid parameters: search for them by using the `ezpublish\..*\.class` regular expression pattern.
-When found, replace all the occurrences with fully-qualified class names.
-
-## QueryTypes
-
-If your code relies on automatically registering QueryTypes through the naming convention `\QueryType\*QueryType`,
-you need to register your QueryTypes as services and tag them with `ezpublish.query`, or enable their automatic configuration (`autoconfigure: true`).
-
-## Symfony namespaces
-
-A number of Symfony namespaces have changed, and you must update your code if it uses them.
-For example, the following namespaces are now different:
-
-|Use|Instead of|
-|---|---|
-|Symfony\Contracts\Translation\TranslatorInterface|Symfony\Component\Translation\TranslatorInterface|
-|Symfony\Contracts\EventDispatcher\Event|Symfony\Component\EventDispatcher\Event|
-
-For more information, search for removed classes in Symfony [version 4.0](https://github.com/symfony/symfony/blob/4.4/UPGRADE-4.0.md) and [version 5.0](https://github.com/symfony/symfony/blob/5.0/UPGRADE-5.0.md) documentation.
-
-## Apache/Nginx configuration
-
-Make sure that your Apache/Nginx configuration is up to date with Symfony 5.
-Refer to [the provided `vhost.template`](https://github.com/ezsystems/ezplatform/blob/master/doc/apache2/vhost.template)
-for an example.
-
-## Deprecations
-
-Due to a number of compatibility breaks and deprecations introduced in eZ Platform v3.0, the changes that result from the above considerations might not be sufficient.
-Make sure that you review your code and account for all changes listed in [Deprecations and backwards compatibility breaks](ez_platform_v3.0_deprecations.md).
-
-## Next steps
-
-Now, proceed to the next step, [updating to v3.3](../to_3.3.md).
diff --git a/docs/update_and_migration/from_2.5/update_from_2.5.md b/docs/update_and_migration/from_2.5/update_from_2.5.md
deleted file mode 100644
index 56cbb8572a7..00000000000
--- a/docs/update_and_migration/from_2.5/update_from_2.5.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-description: Update your installation to the latest v3.3 version from v2.5.
-target_version: '3.2'
----
-
-# From 2.5
-
-This update procedure applies if you're using v2.5.
-
-Go through the following steps to update to the v3.3 LTS (v[[= latest_tag_3_3 =]]).
-
-Afterwards, it's strongly recommended to also [update to the latest v4.6 LTS](to_4.0.md).
-
-1. [Check out a version](to_3.2.md)
-1. [Resolve conflicts](to_3.2.md#2-resolve-conflicts)
-1. [Update the app](to_3.2.md#3-update-the-app)
-1. [Update code to v3](adapt_code_to_v3.md)
-1. [Update to v3.3](to_3.3.md)
-1. [Update the database](to_3.3.md#6-update-the-database)
-1. [Update to the latest patch version](update_from_3.3.md)
-1. [Finish the update](update_from_3.3.md#finish-the-update)
diff --git a/docs/update_and_migration/from_3.3/to_4.0.md b/docs/update_and_migration/from_3.3/to_4.0.md
deleted file mode 100644
index cfea9da1758..00000000000
--- a/docs/update_and_migration/from_3.3/to_4.0.md
+++ /dev/null
@@ -1,289 +0,0 @@
----
-description: Update your installation to v4.0 from the latest v3.3 version.
-month_change: false
----
-
-# Update from v3.3.x to v4.0
-
-This update procedure applies if you're using v3.3.
-
-Go through the following steps to update to v4.0.
-
-Besides updating the application and database, you need to account for changes related to code refactoring and numerous namespace changes.
-See [a list of all changed namespaces, configuration key, service names, and other changes](ibexa_dxp_v4.0_deprecations.md).
-
-An additional compatibility layer makes the process of updating your code easier.
-
-[[% include 'snippets/update/temporary_v4_conflicts.md' %]]
-
-!!! note "Symfony 5.4"
-
- If you're using Symfony 5.3, you need to update your installation to Symfony 5.4.
- To do this, update your composer.json to refer to `5.4.*` instead or `5.3.*`.
-
- Refer to the relevant website skeleton for an example: [content](https://github.com/ibexa/content-skeleton/blob/v4.0.1/composer.json), [experience](https://github.com/ibexa/experience-skeleton/blob/v4.0.1/composer.json), [commerce](https://github.com/ibexa/commerce-skeleton/blob/v4.0.1/composer.json).
-
-## Update the app to v4.0
-
-First, run:
-
-=== "[[= product_name_content =]]"
-
- ``` bash
- composer require ibexa/content:[[= latest_tag_4_0 =]] --with-all-dependencies --no-scripts
- ```
-
-=== "[[= product_name_exp =]]"
-
- ``` bash
- composer require ibexa/experience:[[= latest_tag_4_0 =]] --with-all-dependencies --no-scripts
- ```
-
-=== "[[= product_name_com =]]"
-
- ``` bash
- composer require ibexa/commerce:[[= latest_tag_4_0 =]] --with-all-dependencies --no-scripts
- ```
-
-### Update Flex server
-
-The `flex.ibexa.co` Flex server has been disabled.
-If you're using v4.0.2 or earlier v4.0 version, you need to update your Flex server.
-
-To do it, in your `composer.json` check whether the `https://flex.ibexa.co` endpoint is still listed in `extra.symfony.endpoint`.
-If so, replace it with the new [`https://api.github.com/repos/ibexa/recipes/contents/index.json?ref=flex/main`](https://github.com/ibexa/website-skeleton/blob/v4.0.7/composer.json#L98) endpoint.
-
-If your `composer.json` still uses the `https://flex.ibexa.co` endpoint in `extra.symfony.endpoint`,
-replace it with the new [`https://api.github.com/repos/ibexa/recipes/contents/index.json?ref=flex/main`](https://github.com/ibexa/website-skeleton/blob/v4.0.7/composer.json#L96) endpoint.
-
-You can do it manually, or by running the following command:
-
-``` bash
-composer config extra.symfony.endpoint "https://api.github.com/repos/ibexa/recipes/contents/index.json?ref=flex/main"
-```
-
-Next, continue with updating the app:
-
-=== "[[= product_name_content =]]"
-
- ``` bash
- composer recipes:install ibexa/content --force -v
- ```
-
-=== "[[= product_name_exp =]]"
-
- ``` bash
- composer recipes:install ibexa/experience --force -v
- ```
-
-=== "[[= product_name_com =]]"
-
- ``` bash
- composer recipes:install ibexa/commerce --force -v
- ```
-
-The `recipes:install` command installs new YAML configuration files,
-which have been [renamed in this release](ibexa_dxp_v4.0_deprecations.md#configuration-file-names).
-
-Look through the old YAML files and move your custom configuration to the relevant new files.
-
-In `bundles.php`, remove all entries starting with `eZ`, `EzSystems`, `Ibexa\Platform`, `Silversolutions` and `Siso`.
-Leave only third-party entries and entries added by the `recipes:install` command, starting with `Ibexa\Bundle`.
-
-## Add compatibility layer package
-
-You can use the provided compatibility layer to speed up adaptation of your custom code to the new namespaces.
-
-Add the compatibility layer package using Composer:
-
-``` bash
-composer require ibexa/compatibility-layer
-composer recipes:install ibexa/compatibility-layer --force
-```
-
-Make sure that `Ibexa\Bundle\CompatibilityLayer\IbexaCompatibilityLayerBundle` is last in your bundle list in `config/bundles.php`.
-
-Next, clear the cache:
-
-``` bash
-php bin/console cache:clear
-```
-
-## Update the database
-
-Apply the following database update script:
-
-### Ibexa DXP
-
-=== "MySQL"
- ``` bash
- mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/ibexa-3.3.latest-to-4.0.0.sql
- ```
-
-=== "PostgreSQL"
-
- ``` bash
- psql < vendor/ibexa/installer/upgrade/db/postgresql/ibexa-3.3.latest-to-4.0.0.sql
- ```
-
-### Ibexa Open Source
-
-If you have no access to Ibexa DXP's `ibexa/installer` package, apply the following database upgrade script:
-
-=== "MySQL"
- ``` sql
- ALTER TABLE `ezcontentclassgroup` ADD COLUMN `is_system` BOOLEAN NOT NULL DEFAULT false;
- ```
-
-=== "PostgreSQL"
- ``` sql
- ALTER TABLE "ezcontentclassgroup" ADD "is_system" boolean DEFAULT false NOT NULL;
- ```
-
-### Prepare new database tables
-
-For every database connection you have configured, perform the following steps:
-
-1. Run `php bin/console doctrine:schema:update --dump-sql --em=ibexa_{connection}`
-2. Check the queries and verify that they're safe and don't damage the data.
-3. Run `php bin/console doctrine:schema:update --dump-sql --em=ibexa_{connection} --force`
-
-Next, run the following commands to import necessary data migration scripts:
-
-``` bash
-php bin/console ibexa:migrations:import vendor/ibexa/taxonomy/src/bundle/Resources/install/migrations/content_types.yaml --name=000_taxonomy_content_types.yml
-php bin/console ibexa:migrations:import vendor/ibexa/taxonomy/src/bundle/Resources/install/migrations/sections.yaml --name=001_taxonomy_sections.yml
-php bin/console ibexa:migrations:import vendor/ibexa/taxonomy/src/bundle/Resources/install/migrations/content.yaml --name=002_taxonomy_content.yml
-php bin/console ibexa:migrations:import vendor/ibexa/taxonomy/src/bundle/Resources/install/migrations/permissions.yaml --name=003_taxonomy_permissions.yml
-php bin/console ibexa:migrations:import vendor/ibexa/product-catalog/src/bundle/Resources/migrations/product_catalog.yaml --name=001_product_catalog.yaml
-php bin/console ibexa:migrations:import vendor/ibexa/product-catalog/src/bundle/Resources/migrations/currencies.yaml --name=001_currencies.yaml
-```
-
-Run `php bin/console ibexa:migrations:migrate -v --dry-run` to ensure that all migrations are ready to be performed.
-If the dry run is successful, run:
-
-``` bash
-php bin/console ibexa:migrations:migrate
-```
-
-## Update your custom code
-
-### GraphQL
-
-Some GraphQL names have changed. Adapt your queries according to the table below.
-
-| 3.3 name | 4.0 name |
-|:--------------------------------------------------|:--------------------------------------------|
-| `id` argument | `contentId` argument |
-| `_info` content item property | `_contentInfo` content item property |
-| `Content` (example: `FolderContent`) | `Item` (example: `FolderItem`) |
-
-Example of an updated query:
-
-
-
-Notice that the argument have been updated to `contentId` while the `id` property keeps its name.
-
-While revisiting GraphQL queries, you may consider the new feature `item`
-allowing to fetch a content item without knowing its content type.
-For more information, see [Get a content item](graphql_queries.md#get-a-content-item).
-
-### Back office customization
-
-The v4 version of Ibexa DXP is using Bootstrap 5 in the back office. If you were using Bootstrap 4 for styling, you need to update and adjust all custom back office components [following the migration guide from Bootstrap 4](https://getbootstrap.com/docs/5.0/migration/).
-
-### Online editor
-
-#### Custom plugins and buttons
-
-If you added your own Online Editor plugins or buttons, you need to rewrite them
-using [CKEditor 5's extensibility](https://ckeditor.com/docs/ckeditor5/latest/framework/tutorials/crash-course/plugins.html#creating-custom-plugins).
-
-#### Custom tags
-
-If you created a custom tag, you need to adapt it to the new configuration, for example:
-
-``` yaml
-ibexa:
- system:
- admin_group:
- fieldtypes:
- ezrichtext:
- custom_tags: [ezfactbox]
- toolbar:
- custom_tags_group:
- buttons:
- ezfactbox:
- priority: 5
-```
-
-### Personalization
-
-In Personalization, the `included_content_types` configuration key has changed to `included_item_types`.
-Update your configuration, if it applies.
-
-## Finish update
-
-Adapt your `composer.json` file according to [`manifest.json`](https://github.com/ibexa/recipes/blob/master/ibexa/commerce/4.0/manifest.json#L170-L171), by adding the following lines:
-
-``` json hl_lines="2-3"
-"yarn install": "script",
-"ibexa:encore:compile --config-name app": "symfony-cmd",
-"bazinga:js-translation:dump %PUBLIC_DIR%/assets --merge-domains": "symfony-cmd",
-"ibexa:encore:compile": "symfony-cmd"
-```
-
-Then, finish the update process:
-
-``` bash
-composer run post-install-cmd
-```
-
-Finally, generate the new GraphQl schema:
-
-``` bash
-php bin/console ibexa:graphql:generate-schema
-```
-
-### Ibexa Cloud
-
-Update Platform.sh configuration and scripts.
-
-Generate new configuration with the following command:
-
-```bash
-composer ibexa:setup --platformsh
-```
-
-Review the changes applied to `.platform.app.yaml`, `.platform/` and `bin/platformsh_prestart_cacheclear.sh`,
-merge with your custom settings if needed, and commit them to Git.
diff --git a/docs/update_and_migration/from_3.3/update_from_3.3.md b/docs/update_and_migration/from_3.3/update_from_3.3.md
deleted file mode 100644
index f75b2a118c8..00000000000
--- a/docs/update_and_migration/from_3.3/update_from_3.3.md
+++ /dev/null
@@ -1,559 +0,0 @@
----
-description: Update your installation to the latest v3.3 version from an earlier v3.3 version.
-month_change: false
----
-
-# Update from v3.3.x to v3.3.latest
-
-This update procedure applies if you're using a v3.3 installation without the latest maintenance release.
-To update from an 3.2 to 3.3, see [Updating the app to v3.3](to_3.3.md).
-From older version, explore [this section](update_system.md).
-
-Go through the following steps to update to the latest maintenance release of v3.3 (v[[= latest_tag_3_3 =]]).
-
-!!! note
-
- You can only update to the latest patch release of 3.3.x.
-
-## Update the application
-
-!!! note
-
- If you're using v3.3.15 or earlier v3.3 version, or encounter an error related to flex.ibexa.co, you need to [update your Flex server](#update-flex-server) first.
-
-Run:
-
-=== "[[= product_name_content =]]"
-
- ``` bash
- composer require ibexa/content:[[= latest_tag_3_3 =]] --with-all-dependencies --no-scripts
- ```
-
-=== "[[= product_name_exp =]]"
-
- ``` bash
- composer require ibexa/experience:[[= latest_tag_3_3 =]] --with-all-dependencies --no-scripts
- ```
-
-=== "[[= product_name_com =]]"
-
- ``` bash
- composer require ibexa/commerce:[[= latest_tag_3_3 =]] --with-all-dependencies --no-scripts
- ```
-
-To avoid deprecations when updating from an older PHP version to PHP 8.2 or 8.3, run the following commands:
-
-``` bash
-composer config extra.runtime.error_handler "\\Ibexa\\Contracts\\Core\\MVC\\Symfony\\ErrorHandler\\Php82HideDeprecationsErrorHandler"
-composer dump-autoload
-```
-
-### Update Flex server
-
-The `flex.ibexa.co` Flex server has been disabled.
-If you're using v3.3.15 or earlier v3.3 version, you need to update your Flex server.
-In your `composer.json` check whether the `https://flex.ibexa.co` endpoint is still listed in `extra.symfony.endpoint`.
-If that's the case, you need to perform the following update procedure.
-
-First, update the `symfony/flex` bundle to handle the new endpoint:
-
-```bash
-composer update symfony/flex --no-plugins --no-scripts;
-```
-
-Then, replace the `https://flex.ibexa.co` endpoint with the new [`https://api.github.com/repos/ibexa/recipes/contents/index.json?ref=flex/main`](https://github.com/ibexa/website-skeleton/blob/v3.3.20/composer.json#L98) endpoint in `composer.json` under `extra.symfony.endpoint`.
-
-You can do it manually, or by running the following command:
-
-```bash
-composer config extra.symfony.endpoint "https://api.github.com/repos/ibexa/recipes/contents/index.json?ref=flex/main"
-```
-
-Next, continue with updating the app:
-
-=== "[[= product_name_content =]]"
-
- ``` bash
- composer recipes:install ibexa/content --force -v
- composer run post-install-cmd
- ```
-
-=== "[[= product_name_exp =]]"
-
- ``` bash
- composer recipes:install ibexa/experience --force -v
- composer run post-install-cmd
- ```
-
-=== "[[= product_name_com =]]"
-
- ``` bash
- composer recipes:install ibexa/commerce --force -v
- composer run post-install-cmd
- ```
-
-Review the changes to make sure your custom configuration wasn't affected.
-
-Remove the `vendor` folder to prevent issues related to the [new Flex server](#update-flex-server).
-
-Then, perform a database upgrade and other steps relevant to the version you're updating to.
-
-!!! caution "Clear Redis cache"
-
- If you're using Redis as your persistence cache storage you should always clear it manually after an upgrade.
- You can do it by executing the following command:
-
- ```bash
- php bin/console cache:pool:clear cache.redis
- ```
-
-### v3.3.2
-
-#### Update entity managers
-
-Version v3.3.2 introduces new entity managers.
-To ensure that they work in multi-repository setups, you must update the Doctrine schema.
-You do this manually by following this procedure:
-
-1. Update your project to v3.3.2 and run the `php bin/console cache:clear` command to generate the service container.
-
-1. Run the following command to discover the names of the new entity managers.
- Take note of the names that you discover:
-
- `php bin/console debug:container --parameter=doctrine.entity_managers --format=json | grep ibexa_`
-
-1. For every entity manager prefixed with `ibexa_`, run the following command:
-
- `php bin/console doctrine:schema:update --em= --dump-sql`
-
-1. Review the queries and ensure that there are no harmful changes that could affect your data.
-
-1. For every entity manager prefixed with `ibexa_`, run the following command to run queries on the database:
-
- `php bin/console doctrine:schema:update --em= --force`
-
-#### VCL configuration for Fastly
-
-[[% include 'snippets/update/vcl_configuration_for_fastly_v3.md' %]]
-
-#### Optimize workflow queries
-
-Run the following SQL queries to optimize workflow performance:
-
-``` sql
-CREATE INDEX idx_workflow_co_id_ver ON ezeditorialworkflow_workflows(content_id, version_no);
-CREATE INDEX idx_workflow_name ON ezeditorialworkflow_workflows(workflow_name);
-```
-
-#### Enable Commerce features
-
-Commerce features in Experience and Content editions are disabled by default.
-If you use these features, after the update enable Commerce features by going to `config/packages/ecommerce.yaml`
-and setting the following:
-
-``` yaml
-ezplatform:
- system:
- default:
- commerce:
- enabled: true
-```
-
-Next, run the following command:
-
-``` bash
-php bin/console ibexa:upgrade --force
-```
-
-#### Database update
-
-If you're using MySQL, run the following update script:
-
-``` sql
-mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/ibexa-3.3.1-to-3.3.2.sql
-```
-
-
-
-### v3.3.4
-
-#### Migration Bundle
-
-Remove `Kaliop\eZMigrationBundle\eZMigrationBundle::class => ['all' => true],`
-from `config/bundles.php` before running `composer require`.
-
-Then, in `composer.json`, set minimum stability to `stable`:
-
-``` json
-"minimum-stability": "stable",
-```
-
-### v3.3.6
-
-#### Symfony 5.3
-
-To update to Symfony 5.3, update the following package versions in your `composer.json`,
-including the Symfony version (line 9):
-
-``` json hl_lines="9"
-"symfony/flex": "^1.3.1"
-"sensio/framework-extra-bundle": "^6.1",
-"symfony/runtime": "*",
-"doctrine/doctrine-bundle": "^2.4"
-"symfony/maker-bundle": "^1.0",
-
-"symfony": {
- "allow-contrib": true,
- "require": "5.3.*",
- "endpoint": "https://flex.ibexa.co"
-},
-```
-
-See https://github.com/ibexa/website-skeleton/pull/5/files for details of the package version change.
-
-### v3.3.7
-
-#### Commerce configuration
-
-If you're using Commerce, run the following migration action to update the way Commerce configuration is stored:
-
-``` bash
-mkdir --parent src/Migrations/Ibexa/migrations
-cp vendor/ibexa/installer/src/bundle/Resources/install/migrations/content/Components/move_configuration_to_settings.yaml src/Migrations/Ibexa/migrations/
-php bin/console ibexa:migrations:migrate --file=move_configuration_to_settings.yaml
-```
-
-#### Database update
-
-Run the following scripts:
-
-=== "MySQL"
-
- ```bash
- mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/ibexa-3.3.6-to-3.3.7.sql
- ```
-
-=== "PostgreSQL"
-
- ```bash
- psql < vendor/ibexa/installer/upgrade/db/postgresql/ibexa-3.3.6-to-3.3.7.sql
- ```
-
-### Ibexa Open Source
-
-If you have no access to Ibexa DXP's `ibexa/installer` package, apply the following database upgrade script:
-
-=== "MySQL"
-
- ``` sql
- DROP TABLE IF EXISTS `ibexa_setting`;
- CREATE TABLE `ibexa_setting` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `group` varchar(128) COLLATE utf8mb4_unicode_520_ci NOT NULL,
- `identifier` varchar(128) COLLATE utf8mb4_unicode_520_ci NOT NULL,
- `value` text COLLATE utf8mb4_unicode_520_ci NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `ibexa_setting_group_identifier` (`group`, `identifier`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
- ```
-
-=== "PostgreSQL"
-
- ``` sql
- DROP TABLE IF EXISTS ibexa_setting;
- CREATE TABLE ibexa_setting (
- id SERIAL NOT NULL,
- "group" varchar(128) NOT NULL,
- identifier varchar(128) NOT NULL,
- value json NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT ibexa_setting_group_identifier UNIQUE ("group", identifier)
- );
- ```
-
-### v3.3.9
-
-#### Database update
-
-Run the following scripts:
-
-=== "MySQL"
-
- ```bash
- mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/ibexa-3.3.8-to-3.3.9.sql
- ```
-
-=== "PostgreSQL"
-
- ```bash
- psql < vendor/ibexa/installer/upgrade/db/postgresql/ibexa-3.3.8-to-3.3.9.sql
- ```
-
-### v3.3.13
-
-!!! note "Symfony 5.4"
-
- Prior to v3.3.13, Symfony 5.3 was used by default.
-
- If you're still using Symfony 5.3, you need to update your installation to Symfony 5.4.
- To do this, update your `composer.json` to refer to `5.4.*` instead or `5.3.*`.
-
- Refer to the relevant website skeleton: [content](https://github.com/ibexa/content-skeleton/blob/v3.3.13/composer.json), [experience](https://github.com/ibexa/experience-skeleton/blob/v3.3.13/composer.json), [commerce](https://github.com/ibexa/commerce-skeleton/blob/v3.3.13/composer.json).
-
- The following `sed` commands should update the relevant lines.
- Use them with caution and properly check the result:
-
- ```bash
- sed -i -E 's/"symfony\/(.+)": "5.3.*"/"symfony\/\1": "5.4.*"/' composer.json;
- sed -i -E 's/"require": "5.3.*"/"require": "5.4.*"/' composer.json;
- ```
-
- After this `composer.json` update, run `composer update "symfony/*"`.
-
- You may need to adapt configuration to fit the new minor version of Symfony.
- For example, you might have to remove `timeout` related config from `nelmio_solarium` bundle config:
-
- ```bash
- sed -i -E '/ *timeout: [0-9]+/d' ./config/packages/nelmio_solarium.yaml ./config/packages/ezcommerce/ezcommerce_advanced.yaml
- composer update "symfony/*"
- ```
-
-#### Ibexa Cloud
-
-Update Platform.sh configuration and scripts.
-
-Generate new configuration with the following command:
-
-```bash
-composer ibexa:setup --platformsh
-```
-
-Review the changes applied to `.platform.app.yaml`, `.platform/` and `bin/platformsh_prestart_cacheclear.sh`,
-merge with your custom settings if needed, and commit them to Git.
-
-### v3.3.14
-
-#### VCL configuration
-
-Update your Varnish VCL file to align with [`docs/varnish/vcl/varnish5.vcl`](https://github.com/ezsystems/ezplatform-http-cache/blob/2.3/docs/varnish/vcl/varnish5.vcl).
-Make sure it contains the highlighted additions.
-
-``` vcl hl_lines="4-7 16"
-// Compressing the content
-// ...
-
-// Modify xkey header to add translation suffix
-if (beresp.http.xkey && beresp.http.x-lang) {
- set beresp.http.xkey = beresp.http.xkey + " " + regsuball(beresp.http.xkey, "(\S+)", "\1" + beresp.http.x-lang);
-}
-
-// ...
-
-if (client.ip ~ debuggers) {
-/// ...
-} else {
- // Remove tag headers when delivering to non debug client
- unset resp.http.xkey;
- unset resp.http.x-lang;
- // Sanity check to prevent ever exposing the hash to a non debug client.
- unset resp.http.x-user-context-hash;
-}
-```
-
-### v3.3.15
-
-Adapt your `composer.json` file according to [`manifest.json`](https://github.com/ibexa/recipes/blob/master/ibexa/commerce/3.3/manifest.json#L167-L168), by adding and moving the following lines:
-
-``` diff
- "composer-scripts": {
- "cache:clear": "symfony-cmd",
- "assets:install %PUBLIC_DIR%": "symfony-cmd",
-- "bazinga:js-translation:dump %PUBLIC_DIR%/assets --merge-domains": "symfony-cmd",
- "yarn install": "script",
-+ "ibexa:encore:compile --config-name app": "symfony-cmd",
-+ "bazinga:js-translation:dump %PUBLIC_DIR%/assets --merge-domains": "symfony-cmd",
- "ibexa:encore:compile": "symfony-cmd"
- }
-```
-
-### v3.3.16
-
-See [Update Flex server](#update-flex-server).
-
-### v3.3.24
-
-#### VCL configuration for Fastly
-
-Ibexa DXP now supports Fastly shielding. If you're using Fastly and want to use shielding, you need to update your VCL files.
-
-!!! tip
-
- Even if you don't plan to use Fastly shielding, it's recommended to update the VCL files for future compatibility.
-
-1. Locate the `vendor/ezsystems/ezplatform-http-cache-fastly/fastly/ez_main.vcl` file and update your VCL file with the recent changes.
-2. Do the same with `vendor/ezsystems/ezplatform-http-cache-fastly/fastly/ez_user_hash.vcl`.
-3. Upload a new `snippet_re_enable_shielding.vcl` snippet file, based on `vendor/ezsystems/ezplatform-http-cache-fastly/fastly/snippet_re_enable_shielding.vcl`.
-
-### v3.3.25
-
-#### Database update
-
-On Experience or Commerce edition, run the following scripts:
-
-=== "MySQL"
-
- ```bash
- mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/ibexa-3.3.24-to-3.3.25.sql
- ```
-
-=== "PostgreSQL"
-
- ```bash
- psql < vendor/ibexa/installer/upgrade/db/postgresql/ibexa-3.3.24-to-3.3.25.sql
- ```
-
-### v3.3.28
-
-#### Ensure password safety
-
-Following [Security advisory: IBEXA-SA-2022-009](https://developers.ibexa.co/security-advisories/ibexa-sa-2022-009-critical-vulnerabilities-in-graphql-role-assignment-ct-editing-and-drafts-tooltips),
-unless you can verify based on your log files that the vulnerability hasn't been exploited, you should revoke passwords for all affected users.
-
-### v3.3.34
-
-#### Database update
-
-Run the following scripts:
-
-=== "MySQL"
-
- ``` sql
- mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/ibexa-3.3.33-to-3.3.34.sql
- ```
-
-=== "PostgreSQL"
-
- ``` sql
- psql < vendor/ibexa/installer/upgrade/db/postgresql/ibexa-3.3.33-to-3.3.34.sql
- ```
-
-### v3.3.40
-
-No additional steps needed.
-
-### v3.3.41
-
-#### Security
-
-This release contains security fixes.
-For more information, see [the published security advisory](https://developers.ibexa.co/security-advisories/ibexa-sa-2024-006-vulnerabilities-in-content-name-pattern-commerce-shop-and-varnish-vhost-templates).
-For each of the following fixes, evaluate the vulnerability to determine whether you might have been affected.
-If so, take appropriate action, for example by revoking passwords for all affected users.
-
-##### BREACH vulnerability
-
-The [BREACH](https://www.breachattack.com/) attack is a security vulnerability against HTTPS when using HTTP compression.
-
-If you're using Varnish, update the VCL configuration to stop compressing both the Ibexa DXP's REST API and JSON responses from your backend.
-Fastly users are not affected.
-
-=== "Varnish on [[= product_name_cloud =]]"
-
- Update the Varnish configuration.
-
- Generate new configuration with the following command:
-
- ```bash
- composer ibexa:setup --platformsh
- ```
-
- Review the changes, merge with your custom settings if needed, and commit them to Git before deployment.
-
-=== "Varnish 6"
-
- Update your Varnish VCL file to align it with the [`vendor/ezsystems/ezplatform-http-cache/docs/varnish/vcl/varnish5.vcl`](https://github.com/ezsystems/ezplatform-http-cache/blob/2.3/docs/varnish/vcl/varnish5.vcl) file.
-
-=== "Varnish 7"
-
- Update your Varnish VCL file to align it with the [`vendor/ezsystems/ezplatform-http-cache/docs/varnish/vcl/varnish7.vcl`](https://github.com/ezsystems/ezplatform-http-cache/blob/2.3/docs/varnish/vcl/varnish7.vcl) file.
- ```
-
-If you're not using a reverse proxy like Varnish or Fastly, adjust the compressed `Content-Type` in the web server configuration.
-For more information, see the [updated Apache and nginx template configuration](https://github.com/ibexa/post-install/pull/86/files).
-
-##### Outdated version of jQuery in ezsystems/ezcommerce-shop package
-
-There are no additional update steps to execute.
-
-#### Other changes
-
-##### Remove duplicated entries in `ezcontentobject_attribute` table
-
-This release comes with a command to clean up duplicated entries in the `ezcontentobject_attribute` table, which were created due to an issue related to previewing content in different languages.
-
-If you're affected, remove the duplicated entries by running the following command:
-
-``` bash
-php bin/console ibexa:content:remove-duplicate-fields
-```
-
-!!! caution
-
- Remember about [**proper database backup**](backup.md) before running the command in the production environment.
-
-You can customize the behavior of the command with the following options:
-
-- `--batch-size` or `-b` - number of attributes affected per iteration. Default value = 10000.
-- `--max-iterations` or `-i` - maximum iterations count. Default value = -1 (unlimited).
-- `--sleep` or `-s` - wait time between iterations, in milliseconds. Default value = 0.
-
-##### Update web server configuration
-
-Adjust the web server configuration to prevent direct access to the `index.php` file when using URLs consisting of multiple path segments.
-
-See [the updated Apache and nginx template files](https://github.com/ibexa/post-install/pull/70/files) for more information.
-
-#### Removed `symfony/serializer-pack` dependency
-
-This release no longer directly requires the `symfony/serializer-pack` Composer dependency, which can remove some dependencies from your project during the update process.
-
-If you rely on them in your project, for example by using Symfony's `ObjectNormalizer` to create your own REST endpoints, run the following command before updating [[= product_name_base =]] packages:
-
-``` bash
-composer require symfony/serializer-pack
-```
-
-Then, verify that Symfony Flex installed the versions you were using before.
-
-### v3.3.42
-
-#### Security
-
-This release fixes a critical vulnerability in the [RichText field type](richtextfield.md).
-By entering a maliciously crafted input into the RichText field type's XML, the attacker could perform an attack using [XML external entity (XXE) injection](https://portswigger.net/web-security/xxe).
-To exploit this vulnerability, an attacker would need to have edit permission to content with RichText fields.
-
-For more information, see the [published security advisory IBEXA-SA-2025-002](https://developers.ibexa.co/security-advisories/ibexa-sa-2025-002-xxe-vulnerability-in-richtext).
-
-Evaluate the vulnerability to determine whether you might have been affected.
-If so, take appropriate action.
-There are no additional update steps to execute.
-
-### v3.3.43
-
-#### Security
-
-This security advisory resolves XSS vulnerabilities in several parts of the back office of Ibexa DXP.
-Back office access and varying levels of editing and management permissions are required to exploit these vulnerabilities.
-
-For more information, see the [security advisory IBEXA-SA-2025-003](https://developers.ibexa.co/security-advisories/ibexa-sa-2025-003-xss-vulnerabilities-in-back-office).
-
-Evaluate the vulnerability to determine whether you might have been affected.
-If so, take appropriate action.
-There are no additional update steps to execute.
-
-## Finish the update
-
-[[% include 'snippets/update/finish_the_update.md' %]]
-
-[[% include 'snippets/update/notify_support.md' %]]
diff --git a/docs/update_and_migration/from_4.0/to_4.1.md b/docs/update_and_migration/from_4.0/to_4.1.md
deleted file mode 100644
index 1dc1a43ac05..00000000000
--- a/docs/update_and_migration/from_4.0/to_4.1.md
+++ /dev/null
@@ -1,303 +0,0 @@
----
-description: Update your installation to the latest v4.1 version from v4.0.
----
-
-# Update from v4.0.x to v4.1
-
-This update procedure applies if you're using v4.0.0.
-
-Go through the following steps to update to v4.1.
-
-[[% include 'snippets/update/temporary_v4_conflicts.md' %]]
-
-!!! note
-
- During the update process you can encounter the following error:
-
- `Failed to create closure from callable: class 'Ibexa\Bundle\Commerce\Eshop\Twig\SilvercommonExtension' doesn't have a method 'getNavigation'`
-
- You can ignore this error, it doesn't require any action on your part.
-
-## Update the app to latest version of v4.0
-
-First, update your application to the latest version of v4.0: v4.0.8.
-
-### Update Flex server
-
-The `flex.ibexa.co` Flex server has been disabled.
-If you're using earlier v4.x versions, and you haven't done it before,
-you have to update your Flex server.
-
-To do it, in your `composer.json`, check whether the `https://flex.ibexa.co` endpoint is still listed in `extra.symfony.endpoint`.
-If so, replace it with the new [`https://api.github.com/repos/ibexa/recipes/contents/index.json?ref=flex/main`](https://github.com/ibexa/website-skeleton/blob/v4.1.5/composer.json#L96) endpoint.
-
-You can do it manually, or by running the following command:
-
-``` bash
-composer config extra.symfony.endpoint "https://api.github.com/repos/ibexa/recipes/contents/index.json?ref=flex/main"
-```
-
-Perform the update:
-
-=== "[[= product_name_content =]]"
-
- ``` bash
- composer require ibexa/content:[[= latest_tag_4_0 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/content --force -v
- ```
-
-=== "[[= product_name_exp =]]"
-
- ``` bash
- composer require ibexa/experience:[[= latest_tag_4_0 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/experience --force -v
- ```
-
-=== "[[= product_name_com =]]"
-
- ``` bash
- composer require ibexa/commerce:[[= latest_tag_4_0 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/commerce --force -v
- ```
-
-Next, run:
-
-``` bash
-composer run post-install-cmd
-mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/ibexa-4.0.3-to-4.0.4.sql
-```
-
-## Update the app to v4.1.0
-
-When you have the v4.0 version, you can update to v4.1.0:
-
-=== "[[= product_name_content =]]"
-
- ``` bash
- composer require ibexa/content:4.1.0 --with-all-dependencies --no-scripts
- composer recipes:install ibexa/content --force -v
- ```
-
-=== "[[= product_name_exp =]]"
-
- ``` bash
- composer require ibexa/experience:4.1.0 --with-all-dependencies --no-scripts
- composer recipes:install ibexa/experience --force -v
- ```
-
-=== "[[= product_name_com =]]"
-
- ``` bash
- composer require ibexa/commerce:4.1.0 --with-all-dependencies --no-scripts
- composer recipes:install ibexa/commerce --force -v
- ```
-
-The `recipes:install` command installs new YAML configuration files. Look through the old YAML files and move your custom configuration to the relevant new files.
-
-Next, run:
-
-``` bash
-composer run post-install-cmd
-```
-
-### Update the database
-
-[[% include 'snippets/update/db/db_backup_warning.md' %]]
-
-Apply the following database update scripts:
-
-=== "MySQL"
- ``` bash
- mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/ibexa-4.0.0-to-4.1.0.sql
- ```
-
-=== "PostgreSQL"
-
- ``` bash
- psql < vendor/ibexa/installer/upgrade/db/postgresql/ibexa-4.0.0-to-4.1.0.sql
- ```
-
-#### Ibexa Open Source
-
-If you're using Ibexa OSS and have no access to Ibexa DXP's `ibexa/installer` package, database upgrade isn't necessary.
-
-## Update the app to latest version of v4.1
-
-Now, update the application to the latest version of v4.1: [[= latest_tag_4_1 =]].
-
-=== "[[= product_name_content =]]"
-
- ``` bash
- composer require ibexa/content:[[= latest_tag_4_1 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/content --force -v
- ```
-
-=== "[[= product_name_exp =]]"
-
- ``` bash
- composer require ibexa/experience:[[= latest_tag_4_1 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/experience --force -v
- ```
-
-=== "[[= product_name_com =]]"
-
- ``` bash
- composer require ibexa/commerce:[[= latest_tag_4_1 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/commerce --force -v
- ```
-
-Next, run:
-
-``` bash
-composer run post-install-cmd
-```
-
-### Update the database
-
-Apply the following database update scripts:
-
-=== "MySQL"
- ``` bash
- mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/ibexa-4.1.0-to-4.1.1.sql
- ```
-
-=== "PostgreSQL"
-
- ``` bash
- psql < vendor/ibexa/installer/upgrade/db/postgresql/ibexa-4.1.0-to-4.1.1.sql
- ```
-
-## Configure the product catalog
-
-!!! caution
-
- Always back up your data before you perform any actions on the product catalog.
-
-Regardless of whether your application already uses the product catalog or you want
-to start using this functionality, you can choose to use the old features,
-present in v4.0.x, or upgrade to the all new product catalog that v4.1.x brings.
-
-To use the legacy solution, in the `config/packages` folder,
-in YAML files with shop configuration, under the `parameters` key,
-make sure that the `ibexa.commerce.site_access.config.eshop.default.catalog_data_provider` parameter is set to `ez5`.
-
-To use the new product catalog, since the new solution doesn't support the old
-price engine out of the box, in your price engine configuration,
-you must update the following parameters by providing the
-`Ibexa\\ProductCatalog\\Bridge\\PriceProvider` value in the `ibexa_setting` table,
-`commerce` group, `config` identifier:
-
-```yaml
-ibexa.commerce.site_access.config.price.default.price_service_chain.basket
-ibexa.commerce.site_access.config.price.default.price_service_chain.wish_list
-ibexa.commerce.site_access.config.price.default.price_service_chain.comparison
-ibexa.commerce.site_access.config.price.default.price_service_chain.wish_list
-ibexa.commerce.site_access.config.price.default.price_service_chain.comparison
-ibexa.commerce.site_access.config.price.default.price_service_chain.quick_order
-ibexa.commerce.site_access.config.price.default.price_service_chain.search_list
-ibexa.commerce.site_access.config.price.default.price_service_chain.product_list
-ibexa.commerce.site_access.config.price.default.price_service_chain.stored_basket
-ibexa.commerce.site_access.config.price.default.price_service_chain.basket_variant
-ibexa.commerce.site_access.config.price.default.price_service_chain.product_detail
-ibexa.commerce.site_access.config.price.default.price_service_chain.bestseller_list
-ibexa.commerce.site_access.config.price.default.price_service_chain.slider_product_list
-ibexa.commerce.site_access.config.price.default.price_service_chain.quick_order_line_preview
-```
-
-You can do it by using the `UPDATE ibexa_setting` command.
-
-??? note "Example of price engine configuration"
-
- ``` bash
- UPDATE ibexa_setting SET value =
- '{"ibexa.commerce.site_access.config.basket.default.validHours": 120,
- "ibexa.commerce.site_access.config.core.default.category_view": "product_list",
- "ibexa.commerce.site_access.config.core.default.currency_list": {"CAD": "1.55686", "EUR": "1", "GBP": "0.86466", "USD": "1.23625"},
- "ibexa.commerce.site_access.config.basket.default.stock_in_column": true,
- "ibexa.commerce.site_access.config.core.default.shipping_vat_code": "19",
- "ibexa.commerce.site_access.config.basket.default.description_limit": 50,
- "ibexa.commerce.site_access.config.core.default.bestseller_threshold": 1,
- "ibexa.commerce.site_access.config.checkout.de.payment_method.invoice": true,
- "ibexa.commerce.site_access.config.checkout.en.payment_method.invoice": true,
- "ibexa.commerce.site_access.config.eshop.default.erp.variant_handling": "SKU_ONLY",
- "ibexa.commerce.site_access.config.wishlist.default.description_limit": 50,
- "ibexa.commerce.site_access.config.eshop.default.webconnector.password": "passwo",
- "ibexa.commerce.site_access.config.eshop.default.webconnector.username": "admin",
- "ibexa.commerce.site_access.config.checkout.de.shipping_method.standard": true,
- "ibexa.commerce.site_access.config.checkout.en.shipping_method.standard": true,
- "ibexa.commerce.site_access.config.core.default.marketing.olark_chat.id": "6295-386-10-7457", "ibexa.commerce.site_access.config.newsletter.default.newsletter_active": false,
- "ibexa.commerce.site_access.config.basket.default.recalculatePricesAfter": "3 hours",
- "ibexa.commerce.site_access.config.basket.stored.default.stock_in_column": true,
- "ibexa.commerce.site_access.config.core.default.currency_rate_changed_at": "01.01.2018",
- "ibexa.commerce.site_access.config.core.default.template_debitor_country": "DE",
- "ibexa.commerce.site_access.config.eshop.default.webconnector.erpTimeout": 5,
- "ibexa.commerce.site_access.config.eshop.default.webconnector.soapTimeout": 5,
- "ibexa.commerce.site_access.config.basket.stored.default.description_limit": 50,
- "ibexa.commerce.site_access.config.checkout.default.payment_method.invoice": true,
- "ibexa.commerce.site_access.config.eshop.default.catalog_description_limit": 50,
- "ibexa.commerce.site_access.config.newsletter.default.unsubscribe_globally": true,
- "ibexa.commerce.site_access.config.price.default.price_service_chain.basket": ["Ibexa\\\\ProductCatalog\\\\Bridge\\\\PriceProvider"],
- "ibexa.commerce.site_access.config.basket.default.refreshCatalogElementAfter": "1 hours",
- "ibexa.commerce.site_access.config.checkout.default.shipping_method.standard": true,
- "ibexa.commerce.site_access.config.core.default.enable_customer_number_login": false,
- "ibexa.commerce.site_access.config.newsletter.default.newsletter2go_auth_key": "",
- "ibexa.commerce.site_access.config.newsletter.default.newsletter2go_password": "",
- "ibexa.commerce.site_access.config.newsletter.default.newsletter2go_username": "",
- "ibexa.commerce.site_access.config.core.default.automatic_currency_conversion": true,
- "ibexa.commerce.site_access.config.erp.default.web_connector.service_location": "http://webconnproxy.silver-eshop.de?config=harmony_wc3_noop_mapping",
- "ibexa.commerce.site_access.config.core.default.marketing.olark_chat.activated": false,
- "ibexa.commerce.site_access.config.price.default.price_service_chain.wish_list": ["Ibexa\\\\ProductCatalog\\\\Bridge\\\\PriceProvider"],
- "ibexa.commerce.site_access.config.checkout.de.shipping_method.express_delivery": true,
- "ibexa.commerce.site_access.config.checkout.en.shipping_method.express_delivery": true,
- "ibexa.commerce.site_access.config.order.management.local.default.shipping_cost": "",
- "ibexa.commerce.site_access.config.order.management.local.default.shipping_free": "",
- "ibexa.commerce.site_access.config.price.default.price_service_chain.comparison": ["Ibexa\\\\ProductCatalog\\\\Bridge\\\\PriceProvider"],
- "ibexa.commerce.site_access.config.core.default.bestseller_limit_on_catalog_page": 6,
- "ibexa.commerce.site_access.config.price.default.price_service_chain.quick_order": ["Ibexa\\\\ProductCatalog\\\\Bridge\\\\PriceProvider"],
- "ibexa.commerce.site_access.config.price.default.price_service_chain.search_list": ["Ibexa\\\\ProductCatalog\\\\Bridge\\\\PriceProvider"],
- "ibexa.commerce.site_access.config.basket.default.additional_text_for_basket_line": false,
- "ibexa.commerce.site_access.config.core.default.bestseller_limit_in_silver_module": 6,
- "ibexa.commerce.site_access.config.price.default.price_service_chain.product_list": ["Ibexa\\\\ProductCatalog\\\\Bridge\\\\PriceProvider"],
- "ibexa.commerce.site_access.config.price.default.price_service_chain.stored_basket": ["Ibexa\\\\ProductCatalog\\\\Bridge\\\\PriceProvider"],
- "ibexa.commerce.site_access.config.core.de.standard_price_factory.fallback_currency": "EUR",
- "ibexa.commerce.site_access.config.core.default.bestseller_limit_on_bestseller_page": 6,
- "ibexa.commerce.site_access.config.core.default.use_template_debitor_contact_number": false,
- "ibexa.commerce.site_access.config.core.en.standard_price_factory.fallback_currency": "EUR",
- "ibexa.commerce.site_access.config.price.default.price_service_chain.basket_variant": ["Ibexa\\\\ProductCatalog\\\\Bridge\\\\PriceProvider"],
- "ibexa.commerce.site_access.config.price.default.price_service_chain.product_detail": ["Ibexa\\\\ProductCatalog\\\\Bridge\\\\PriceProvider"],
- "ibexa.commerce.site_access.config.checkout.default.shipping_method.express_delivery": false,
- "ibexa.commerce.site_access.config.core.default.standard_price_factory.base_currency": "EUR",
- "ibexa.commerce.site_access.config.core.default.use_template_debitor_customer_number": true,
- "ibexa.commerce.site_access.config.price.default.price_service_chain.bestseller_list": ["Ibexa\\\\ProductCatalog\\\\Bridge\\\\PriceProvider"],
- "ibexa.commerce.site_access.config.checkout.de.payment_method.paypal_express_checkout": true,
- "ibexa.commerce.site_access.config.checkout.en.payment_method.paypal_express_checkout": true,
- "ibexa.commerce.site_access.config.core.default.price_requests_without_customer_number": true,
- "ibexa.commerce.site_access.config.eshop.default.last_viewed_products_in_session_limit": 10,
- "ibexa.commerce.site_access.config.basket.default.discontinued_products_listener_active": true,
- "ibexa.commerce.site_access.config.core.default.standard_price_factory.fallback_currency": "EUR",
- "ibexa.commerce.site_access.config.price.default.price_service_chain.slider_product_list": ["Ibexa\\\\ProductCatalog\\\\Bridge\\\\PriceProvider"],
- "ibexa.commerce.site_access.config.checkout.default.order_confirmation.sales_email_address": "",
- "ibexa.commerce.site_access.config.checkout.default.payment_method.paypal_express_checkout": true,
- "ibexa.commerce.site_access.config.basket.default.additional_text_for_basket_line_input_limit": 30,
- "ibexa.commerce.site_access.config.price.default.price_service_chain.quick_order_line_preview": ["Ibexa\\\\ProductCatalog\\\\Bridge\\\\PriceProvider"],
- "ibexa.commerce.site_access.config.newsletter.default.display_newsletter_box_for_logged_in_users": true,
- "ibexa.commerce.site_access.config.basket.default.discontinued_products_listener_consider_packaging_unit": true}' WHERE `group` = 'commerce' AND identifier = 'config';
- ```
-
-After you update the settings, you can proceed to working with your products.
-
-## Finish update
-
-Finish the update process:
-
-``` bash
-composer run post-install-cmd
-```
-
-Finally, generate the new GraphQL schema:
-
-``` bash
-php bin/console ibexa:graphql:generate-schema
-```
-
-YAML files with the schema are located in `config/graphql/types/ibexa`.
diff --git a/docs/update_and_migration/from_4.1/update_from_4.1.md b/docs/update_and_migration/from_4.1/update_from_4.1.md
deleted file mode 100644
index ad45d2ceabc..00000000000
--- a/docs/update_and_migration/from_4.1/update_from_4.1.md
+++ /dev/null
@@ -1,148 +0,0 @@
----
-description: Update your installation to the v4.2.latest version from an v4.1 version.
----
-
-# Update from v4.1.x to v4.2
-
-This update procedure applies if you're using a v4.1 installation.
-
-[[% include 'snippets/update/temporary_v4_conflicts.md' %]]
-
-## Update from v4.1.x to v4.1.latest
-
-Before you update to v4.2, you need to go through the following steps to update to the latest maintenance release of v4.1 (v[[= latest_tag_4_1 =]]).
-
-### Update the application
-
-Run:
-
-=== "[[= product_name_content =]]"
-
- ``` bash
- composer require ibexa/content:[[= latest_tag_4_1 =]] --with-all-dependencies --no-scripts
- ```
-
-=== "[[= product_name_exp =]]"
-
- ``` bash
- composer require ibexa/experience:[[= latest_tag_4_1 =]] --with-all-dependencies --no-scripts
- ```
-
-=== "[[= product_name_com =]]"
-
- ``` bash
- composer require ibexa/commerce:[[= latest_tag_4_1 =]] --with-all-dependencies --no-scripts
- ```
-
-### VCL configuration for Fastly
-
-The Fastly `.vcl` configuration files have changed.
-Follow the upgrade steps below to update them:
-
-1. Locate the `vendor/ibexa/fastly/fastly/ez_main.vcl` file and update your VCL file with the recent changes.
-2. Do the same with `vendor/ibexa/fastly/fastly/ez_user_hash.vcl`.
-3. Upload a new `snippet_re_enable_shielding.vcl` snippet file, based on `vendor/ibexa/fastly/fastly/snippet_re_enable_shielding.vcl`.
-
-Once the VCL configuration has been updated,
-you may enable [Fastly Shielding](https://www.fastly.com/documentation/guides/getting-started/hosts/shielding/) if you prefer.
-
-## Update from v4.1.latest to v4.2
-
-When you have the latest version of v4.1, you can update to v4.2.
-
-### Update the application
-
-First, run:
-
-=== "[[= product_name_content =]]"
-
- ``` bash
- composer require ibexa/content:[[= latest_tag_4_2 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/content --force -v
- ```
-
-=== "[[= product_name_exp =]]"
-
- ``` bash
- composer require ibexa/experience:[[= latest_tag_4_2 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/experience --force -v
- ```
-
-=== "[[= product_name_com =]]"
-
- ``` bash
- composer require ibexa/commerce:[[= latest_tag_4_2 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/commerce --force -v
- ```
-
-The `recipes:install` command installs new YAML configuration files.
-Review the old YAML files and move your custom configuration to the relevant new files.
-
-#### Run data migration
-
-Next, run data migration required by Product Categories:
-
-``` bash
-php bin/console ibexa:migrations:import vendor/ibexa/product-catalog/src/bundle/Resources/migrations/2022_06_23_09_39_product_categories.yaml --name=013_product_categories.yaml
-```
-
-If you're using [[= product_name_exp =]] or [[= product_name_com =]], run data migration required by the Customer portal feature:
-
-``` bash
-php bin/console ibexa:migrations:import vendor/ibexa/corporate-account/src/bundle/Resources/migrations/corporate_account.yaml --name=001_corporate_account.yaml
-```
-
-If you're using [[= product_name_com =]], additionally run:
-
-``` bash
-php bin/console ibexa:migrations:import vendor/ibexa/corporate-account/src/bundle/Resources/migrations/corporate_account_commerce.yaml --name=002_corporate_account_commerce.yaml
-```
-
-Run `php bin/console ibexa:migrations:migrate -v --dry-run` to ensure that all migrations are ready to be performed.
-If the dry run is successful, run:
-
-``` bash
-php bin/console ibexa:migrations:migrate
-```
-
-### Update the database
-
-Next, update the database.
-
-[[% include 'snippets/update/db/db_backup_warning.md' %]]
-
-Apply the following database update scripts:
-
-=== "MySQL"
-
- ``` bash
- mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/ibexa-4.1.latest-to-4.2.0.sql
- mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/ibexa-4.2.2-to-4.2.3.sql
- ```
-
-=== "PostgreSQL"
-
- ``` bash
- psql < vendor/ibexa/installer/upgrade/db/postgresql/ibexa-4.1.latest-to-4.2.0.sql
- psql < vendor/ibexa/installer/upgrade/db/postgresql/ibexa-4.2.2-to-4.2.3.sql
- ```
-
-#### Ibexa Open Source
-
-If you have no access to Ibexa DXP's `ibexa/installer` package, database upgrade isn't necessary.
-
-## Ensure password safety
-
-Following [Security advisory: IBEXA-SA-2022-009](https://developers.ibexa.co/security-advisories/ibexa-sa-2022-009-critical-vulnerabilities-in-graphql-role-assignment-ct-editing-and-drafts-tooltips),
-unless you can verify based on your log files that the vulnerability has not been exploited,
-you should [revoke passwords](https://doc.ibexa.co/en/4.6/users/passwords/#revoking-passwords) for all affected users.
-
-## Remove `node_modules` and `yarn.lock`
-
-Next, remove `node_modules` and `yarn.lock` before running `composer run post-update-cmd`,
-otherwise you can encounter errors during compiling.
-
-``` bash
-rm -Rf node_modules
-rm -Rf yarn.lock
-```
diff --git a/docs/update_and_migration/from_4.2/update_from_4.2.md b/docs/update_and_migration/from_4.2/update_from_4.2.md
deleted file mode 100644
index 63d326d2cb7..00000000000
--- a/docs/update_and_migration/from_4.2/update_from_4.2.md
+++ /dev/null
@@ -1,172 +0,0 @@
----
-description: Update your installation to the latest v4.3 version from v4.2.x.
----
-
-# Update from v4.2.x to v4.3
-
-This update procedure applies if you're using a v4.2 installation.
-
-[[% include 'snippets/update/temporary_v4_conflicts.md' %]]
-
-## Update from v4.2.x to v4.2.latest
-
-Before you update to v4.3, you need to go through the following steps to update to the latest maintenance release of v4.2 (v[[= latest_tag_4_2 =]]).
-
-### Update the application
-
-Run:
-
-=== "[[= product_name_content =]]"
-
- ``` bash
- composer require ibexa/content:[[= latest_tag_4_2 =]] --with-all-dependencies --no-scripts
- ```
-
-=== "[[= product_name_exp =]]"
-
- ``` bash
- composer require ibexa/experience:[[= latest_tag_4_2 =]] --with-all-dependencies --no-scripts
- ```
-
-=== "[[= product_name_com =]]"
-
- ``` bash
- composer require ibexa/commerce:[[= latest_tag_4_2 =]] --with-all-dependencies --no-scripts
- ```
-
-## Update from v4.2.latest to v4.3
-
-When you have the latest version of v4.2, you can update to v4.3.
-
-### Update the application
-
-First, run:
-
-=== "[[= product_name_content =]]"
-
- ``` bash
- composer require ibexa/content:[[= latest_tag_4_3 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/content --force -v
- ```
-
-=== "[[= product_name_exp =]]"
-
- ``` bash
- composer require ibexa/experience:[[= latest_tag_4_3 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/experience --force -v
- ```
-
-=== "[[= product_name_com =]]"
-
- ``` bash
- composer require ibexa/commerce:[[= latest_tag_4_3 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/commerce --force -v
- ```
-
-The `recipes:install` command installs new YAML configuration files.
-Review the old YAML files and move your custom configuration to the relevant new files.
-
-### Run data migration
-
-#### Customer Portal self-registration
-
-If you're using [[= product_name_exp =]] or [[= product_name_com =]],
-run data migration required by the Customer Portal self-registration feature:
-
-```bash
-php bin/console ibexa:migrations:import vendor/ibexa/corporate-account/src/bundle/Resources/migrations/corporate_account_registration.yaml --name=012_corporate_account_registration.yaml
-```
-
-#### Migration to `customer` content type
-
-This step is required if you have users in your installation that need to be transferred to a new User content type: `customer`.
-This content type is dedicated to registered frontend customers.
-This migration is intended for all product versions.
-If there are no users that are customers in your platform, you can skip this step and move on to [executing migrations](#execute-migrations).
-
-##### Basic migration
-
-Use this option to define a user group that should be migrated to a new content type.
-
-```bash
-php bin/console ibexa:migrate:customers --input-user-group=3a3beb3d09ae0dacebf1d324f61bbc34 --create-content-type
-```
-
-- `--input-user-group` - represents the remote ID of a user group you want to migrate to a new content type.
-After migration, this is also the ID of a new Private Customer user group.
-- `--create-content-type` - if you add this parameter, the system creates the new content type based on the one defined in `--input-user-content-type`
-
-##### Additional parameters
-
-Use the parameters below if you need to change a content type name during migration, for example because you already have a `customer` content type,
-or you want to define different source content type.
-If you don't have custom User content types, use the basic migration.
-
-- `--input-user-content-type` - defines input content type
-- `--output-user-content-type` - defines output content type
-- `--user` - defines the user that this command should be executed as, default is Admin
-- `--batch-limit` - defines data limit for migration of one batch, default value is 25
-
-!!! caution
-
- This improvement prevents logged in backend users from making purchases in the frontend store.
-
-#### Execute migrations
-
-Run `php bin/console ibexa:migrations:migrate -v --dry-run` to ensure that all migrations are ready to be performed.
-If the dry run is successful, run the following command to execute the above migrations:
-
-``` bash
-php bin/console ibexa:migrations:migrate
-```
-
-### Update the database
-
-Next, update the database.
-
-[[% include 'snippets/update/db/db_backup_warning.md' %]]
-
-Apply the following database update scripts:
-
-=== "MySQL"
-
- ``` bash
- mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/ibexa-4.2.latest-to-4.3.0.sql
- ```
-
-=== "PostgreSQL"
-
- ``` bash
- psql < vendor/ibexa/installer/upgrade/db/postgresql/ibexa-4.2.latest-to-4.3.0.sql
- ```
-
-#### Ibexa Open Source
-
-If you have no access to Ibexa DXP's `ibexa/installer` package, database upgrade isn't necessary.
-
-### Clean-up taxonomy database
-
-Run the following command for each of your taxonomies to ensure that there are no [content items orphaned during deletion of subtrees](https://doc.ibexa.co/en/4.6/content_management/taxonomy/taxonomy/#remove-orphaned-content-items):
-
-`php bin/console ibexa:taxonomy:remove-orphaned-content --force`
-
-For example:
-
-```bash
-php bin/console ibexa:taxonomy:remove-orphaned-content tags --force
-php bin/console ibexa:taxonomy:remove-orphaned-content product_categories --force
-```
-
-## Ensure password safety
-
-Following [Security advisory: IBEXA-SA-2022-009](https://developers.ibexa.co/security-advisories/ibexa-sa-2022-009-critical-vulnerabilities-in-graphql-role-assignment-ct-editing-and-drafts-tooltips),
-unless you can verify based on your log files that the vulnerability has not been exploited,
-you should [revoke passwords](https://doc.ibexa.co/en/4.6/users/passwords/#revoking-passwords) for all affected users.
-
-## Finish update
-
-Finish the update process:
-
-``` bash
-composer run post-install-cmd
-```
diff --git a/docs/update_and_migration/from_4.3/update_from_4.3.md b/docs/update_and_migration/from_4.3/update_from_4.3.md
deleted file mode 100644
index 346361e03e2..00000000000
--- a/docs/update_and_migration/from_4.3/update_from_4.3.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-description: Update your installation to the latest v4.4 version from v4.3.x.
----
-
-# Update from v4.3.x to v4.4
-
-This update procedure applies if you're using the newest v4.3 installation.
-
-This release deprecates all Commerce packages in Ibexa DXP. They will be removed in v5.
-Until that time, they will be maintained by Ibexa with fixes, including security fixes, but they won't be further developed.
-Old packages are replaced by [the all-new Ibexa Commerce packages](ibexa_dxp_v4.4.md#all-new-ibexa-commerce-packages).
-
-For that reason, there are two update routes you can take.
-
-A. If you don't use Commerce functionalities, you can proceed with removing them.
-
-B. If you use Commerce functionalities based on the deprecated packages, you can continue to use them for the time being.
-
-[[= cards([
- "update_and_migration/from_4.3/update_from_4.3_new_commerce",
- "update_and_migration/from_4.3/update_from_4.3_old_commerce",
-], columns=2) =]]
diff --git a/docs/update_and_migration/from_4.3/update_from_4.3_new_commerce.md b/docs/update_and_migration/from_4.3/update_from_4.3_new_commerce.md
deleted file mode 100644
index 2f2f2ad6d91..00000000000
--- a/docs/update_and_migration/from_4.3/update_from_4.3_new_commerce.md
+++ /dev/null
@@ -1,433 +0,0 @@
----
-description: Update procedure to v4.4 for people who don't use Commerce packages and can remove them.
-month_change: false
----
-# Update with new Commerce packages
-
-This update procedure applies if you have a v4.3 installation, and you don't use Commerce packages.
-
-[[% include 'snippets/update/temporary_v4_conflicts.md' %]]
-
-## Update from v4.3.x to v4.3.latest
-
-Before you update to v4.4, you need to go through the following steps to update to the latest maintenance release of v4.3 (v[[= latest_tag_4_3 =]]).
-
-### Update the application to v4.3.latest
-
-Run:
-
-=== "[[= product_name_content =]]"
-
- ``` bash
- composer require ibexa/content:[[= latest_tag_4_3 =]] --with-all-dependencies --no-scripts
- ```
-=== "[[= product_name_exp =]]"
-
- ``` bash
- composer require ibexa/experience:[[= latest_tag_4_3 =]] --with-all-dependencies --no-scripts
- ```
-=== "[[= product_name_com =]]"
-
- ``` bash
- composer require ibexa/commerce:[[= latest_tag_4_3 =]] --with-all-dependencies --no-scripts
- ```
-
-## Remove deprecated field types
-
-By default, every v4.3 installation has a set of built-in content types.
-Some of them use field types deprecated in v4.4, which need to be removed manually.
-Make sure to remove all occurrences of `sesspecificationstype`, `uivarvarianttype`, `sesselection`, `sesprofiledata` field types from your content types.
-
-This step should be performed on the working installation, omitting it results in an error during update:
-
-```text
- [Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\Exception\NotFound (404)]
- Could not find 'Persistence Field Value Converter' with identifier 'sesspecificationstype'
-```
-
-In that case, you can use [Null field type](nullfield.md) to define a replacement for deprecated field types in `config/services.yaml`:
-
-```yaml
-services:
- ibexa.field_type.sesspecificationstype:
- class: Ibexa\Core\FieldType\Null\Type
- arguments: [sesspecificationstype]
- tags: [{name: ibexa.field_type, alias: sesspecificationstype}]
- ibexa.field_type.sesspecificationstype.converter:
- class: Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\NullConverter
- tags: [{name: ibexa.field_type.storage.legacy.converter, alias: sesspecificationstype}]
- ibexa.field_type.sesspecificationstype.indexable:
- class: Ibexa\Core\FieldType\Unindexed
- tags: [{name: ibexa.field_type.indexable, alias: sesspecificationstype}]
-
- ibexa.field_type.uivarvarianttype:
- class: Ibexa\Core\FieldType\Null\Type
- arguments: [uivarvarianttype]
- tags: [{name: ibexa.field_type, alias: uivarvarianttype}]
- ibexa.field_type.uivarvarianttype.converter:
- class: Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\NullConverter
- tags: [{name: ibexa.field_type.storage.legacy.converter, alias: uivarvarianttype}]
- ibexa.field_type.uivarvarianttype.indexable:
- class: Ibexa\Core\FieldType\Unindexed
- tags: [{name: ibexa.field_type.indexable, alias: uivarvarianttype}]
-
- ibexa.field_type.sesselection:
- class: Ibexa\Core\FieldType\Null\Type
- arguments: [sesselection]
- tags: [{name: ibexa.field_type, alias: sesselection}]
- ibexa.field_type.sesselection.converter:
- class: Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\NullConverter
- tags: [{name: ibexa.field_type.storage.legacy.converter, alias: sesselection}]
- ibexa.field_type.sesselection.indexable:
- class: Ibexa\Core\FieldType\Unindexed
- tags: [{name: ibexa.field_type.indexable, alias: sesselection}]
-
- ibexa.field_type.sesprofiledata:
- class: Ibexa\Core\FieldType\Null\Type
- arguments: [sesprofiledata]
- tags: [{name: ibexa.field_type, alias: sesprofiledata}]
- ibexa.field_type.sesprofiledata.converter:
- class: Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter\NullConverter
- tags: [{name: ibexa.field_type.storage.legacy.converter, alias: sesprofiledata}]
- ibexa.field_type.sesprofiledata.indexable:
- class: Ibexa\Core\FieldType\Unindexed
- tags: [{name: ibexa.field_type.indexable, alias: sesprofiledata}]
-```
-
-## Update from v4.3.latest to v4.4
-
-When you have the latest version of v4.3, you can update to v4.4.
-
-### Update the application to v4.4
-
-First, run:
-
-=== "[[= product_name_content =]]"
-
- ``` bash
- composer require ibexa/content:[[= latest_tag_4_4 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/content --force -v
- ```
-=== "[[= product_name_exp =]]"
-
- ``` bash
- composer require ibexa/experience:[[= latest_tag_4_4 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/experience --force -v
- ```
-=== "[[= product_name_com =]]"
-
- ``` bash
- composer require ibexa/commerce:[[= latest_tag_4_4 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/commerce --force -v
- ```
-
-The `recipes:install` command installs new YAML configuration files.
-Review the old YAML files and move your custom configuration to the relevant new files
-
-### Flysystem v2
-
-Local adapters' `directory` key changed to `location`.
-It's defined in `config/packages/oneup_flysystem.yaml`:
-
-```yaml
-oneup_flysystem:
- adapters:
- default_adapter:
- local:
- location: '%kernel.cache_dir%/flysystem'
-```
-
-If you haven't applied custom changes to that file,
-you can reset the third-party `oneup/flysystem-bundle` recipe by executing:
-
-```bash
-composer recipe:install --force --reset -- oneup/flysystem-bundle
-```
-
-### Remove `ibexa/commerce-*` packages with dependencies
-
-Remove the following bundles from `config/bundles.php`.
-You don't have to remove third-party bundles (`FOS\` to `JMS\`) if they're used by your installation.
-
-=== "[[= product_name_content =]]"
-
- ``` text
- FOS\CommentBundle\FOSCommentBundle
- Tedivm\StashBundle\TedivmStashBundle
- WhiteOctober\BreadcrumbsBundle\WhiteOctoberBreadcrumbsBundle
- Nelmio\SolariumBundle\NelmioSolariumBundle
- JMS\Payment\CoreBundle\JMSPaymentCoreBundle
- Joli\ApacheTikaBundle\ApacheTikaBundle
- JMS\JobQueueBundle\JMSJobQueueBundle
- FOS\RestBundle\FOSRestBundle
- JMS\SerializerBundle\JMSSerializerBundle
- Ibexa\Bundle\Commerce\Eshop\IbexaCommerceEshopBundle
- Ibexa\Bundle\Commerce\ShopTools\IbexaCommerceShopToolsBundle
- Ibexa\Bundle\Commerce\Translation\IbexaCommerceTranslationBundle
- Ibexa\Bundle\Commerce\Payment\IbexaCommercePaymentBundle
- Ibexa\Bundle\Commerce\Price\IbexaCommercePriceBundle
- Ibexa\Bundle\Commerce\Tools\IbexaCommerceToolsBundle
- Ibexa\Bundle\Commerce\Search\IbexaCommerceSearchBundle
- Ibexa\Bundle\Commerce\PriceEngine\IbexaCommercePriceEngineBundle
- Ibexa\Bundle\Commerce\SpecificationsType\IbexaCommerceSpecificationsTypeBundle
- Ibexa\Bundle\Commerce\BaseDesign\IbexaCommerceBaseDesignBundle
- Ibexa\Bundle\Commerce\FieldTypes\IbexaCommerceFieldTypesBundle
- Ibexa\Bundle\Commerce\Checkout\IbexaCommerceCheckoutBundle
- Ibexa\Bundle\Commerce\ShopUi\IbexaCommerceShopUiBundle
- ```
-
-=== "[[= product_name_exp =]]"
-
- ``` text
- FOS\CommentBundle\FOSCommentBundle
- Tedivm\StashBundle\TedivmStashBundle
- WhiteOctober\BreadcrumbsBundle\WhiteOctoberBreadcrumbsBundle
- Nelmio\SolariumBundle\NelmioSolariumBundle
- JMS\Payment\CoreBundle\JMSPaymentCoreBundle
- Joli\ApacheTikaBundle\ApacheTikaBundle
- JMS\JobQueueBundle\JMSJobQueueBundle
- FOS\RestBundle\FOSRestBundle
- JMS\SerializerBundle\JMSSerializerBundle
- Ibexa\Bundle\Commerce\Eshop\IbexaCommerceEshopBundle
- Ibexa\Bundle\Commerce\ShopTools\IbexaCommerceShopToolsBundle
- Ibexa\Bundle\Commerce\Translation\IbexaCommerceTranslationBundle
- Ibexa\Bundle\Commerce\Payment\IbexaCommercePaymentBundle
- Ibexa\Bundle\Commerce\Price\IbexaCommercePriceBundle
- Ibexa\Bundle\Commerce\Tools\IbexaCommerceToolsBundle
- Ibexa\Bundle\Commerce\Search\IbexaCommerceSearchBundle
- Ibexa\Bundle\Commerce\PriceEngine\IbexaCommercePriceEngineBundle
- Ibexa\Bundle\Commerce\SpecificationsType\IbexaCommerceSpecificationsTypeBundle
- Ibexa\Bundle\Commerce\BaseDesign\IbexaCommerceBaseDesignBundle
- Ibexa\Bundle\Commerce\FieldTypes\IbexaCommerceFieldTypesBundle
- Ibexa\Bundle\Commerce\Checkout\IbexaCommerceCheckoutBundle
- Ibexa\Bundle\Commerce\ShopUi\IbexaCommerceShopUiBundle
- ```
-
-=== "[[= product_name_com =]]"
-
- ``` text
- FOS\CommentBundle\FOSCommentBundle
- Tedivm\StashBundle\TedivmStashBundle
- WhiteOctober\BreadcrumbsBundle\WhiteOctoberBreadcrumbsBundle
- Nelmio\SolariumBundle\NelmioSolariumBundle
- JMS\Payment\CoreBundle\JMSPaymentCoreBundle
- Joli\ApacheTikaBundle\ApacheTikaBundle
- JMS\JobQueueBundle\JMSJobQueueBundle
- FOS\RestBundle\FOSRestBundle
- JMS\SerializerBundle\JMSSerializerBundle
- Ibexa\Bundle\Commerce\Eshop\IbexaCommerceEshopBundle
- Ibexa\Bundle\Commerce\ShopTools\IbexaCommerceShopToolsBundle
- Ibexa\Bundle\Commerce\Translation\IbexaCommerceTranslationBundle
- Ibexa\Bundle\Commerce\Payment\IbexaCommercePaymentBundle
- Ibexa\Bundle\Commerce\Price\IbexaCommercePriceBundle
- Ibexa\Bundle\Commerce\Tools\IbexaCommerceToolsBundle
- Ibexa\Bundle\Commerce\Search\IbexaCommerceSearchBundle
- Ibexa\Bundle\Commerce\PriceEngine\IbexaCommercePriceEngineBundle
- Ibexa\Bundle\Commerce\SpecificationsType\IbexaCommerceSpecificationsTypeBundle
- Ibexa\Bundle\Commerce\BaseDesign\IbexaCommerceBaseDesignBundle
- Ibexa\Bundle\Commerce\FieldTypes\IbexaCommerceFieldTypesBundle
- Ibexa\Bundle\Commerce\Checkout\IbexaCommerceCheckoutBundle
- Ibexa\Bundle\Commerce\ShopUi\IbexaCommerceShopUiBundle
- # ...
- Ibexa\Bundle\Commerce\OneSky\IbexaCommerceOneSkyBundle
- Ibexa\Bundle\Commerce\EzStudio\IbexaCommerceEzStudioBundle
- Ibexa\Bundle\Commerce\Comparison\IbexaCommerceComparisonBundle
- Ibexa\Bundle\Commerce\QuickOrder\IbexaCommerceQuickOrderBundle
- Ibexa\Bundle\Commerce\TestTools\IbexaCommerceTestToolsBundle
- Ibexa\Bundle\Commerce\Voucher\IbexaCommerceVoucherBundle
- Ibexa\Bundle\Commerce\LocalOrderManagement\IbexaCommerceLocalOrderManagementBundle
- Ibexa\Bundle\Commerce\Newsletter\IbexaCommerceNewsletterBundle
- Ibexa\Bundle\Commerce\OrderHistory\IbexaCommerceOrderHistoryBundle
- Ibexa\Bundle\Commerce\ErpAdmin\IbexaCommerceErpAdminBundle
- Ibexa\Bundle\Commerce\ShopFrontend\IbexaCommerceShopFrontendBundle
- Ibexa\Bundle\Commerce\Basket\IbexaCommerceBasketBundle::class
- Ibexa\Bundle\Commerce\Rest\IbexaCommerceRestBundle::class
- Ibexa\Bundle\Commerce\AdminUi\IbexaCommerceAdminUiBundle::class
- Ibexa\Bundle\Commerce\PageBuilder\IbexaCommercePageBuilderBundle::class
- EWZ\Bundle\RecaptchaBundle\EWZRecaptchaBundle::class
- ```
-
-Next, remove related extensions' configuration.
-You don't have to remove third-party bundles (for example `config/packages/fos_rest.yaml`) if they're used by your installation.
-
-=== "[[= product_name_content =]]"
-
- ```
- config/packages/commerce.yaml
- config/packages/commerce/autogenerated/.gitkeep
- config/packages/commerce/commerce.yaml
- config/packages/commerce/commerce_advanced.yaml
- config/packages/commerce/commerce_common.yaml
- config/packages/commerce/commerce_demo.yaml
- config/packages/commerce/commerce_parameters.yaml
- config/packages/nelmio_solarium.yaml
- ```
-
-=== "[[= product_name_exp =]]"
-
- ```
- config/packages/commerce.yaml
- config/packages/commerce/autogenerated/.gitkeep
- config/packages/commerce/commerce.yaml
- config/packages/commerce/commerce_advanced.yaml
- config/packages/commerce/commerce_common.yaml
- config/packages/commerce/commerce_demo.yaml
- config/packages/commerce/commerce_parameters.yaml
- config/packages/nelmio_solarium.yaml
- ```
-
-=== "[[= product_name_com =]]"
-
- ```
- config/packages/commerce.yaml
- config/packages/commerce/autogenerated/.gitkeep
- config/packages/commerce/commerce.yaml
- config/packages/commerce/commerce_advanced.yaml
- config/packages/commerce/commerce_common.yaml
- config/packages/commerce/commerce_demo.yaml
- config/packages/commerce/commerce_parameters.yaml
- config/packages/dev/ewz_recaptcha.yaml
- config/packages/dev/jms_serializer.yaml
- config/packages/ewz_recaptcha.yaml
- config/packages/ezcommerce/autogenerated/commerce_repository_parameters.yaml
- config/packages/fos_rest.yaml
- config/packages/google_recaptcha.yaml
- config/packages/jms_serializer.yaml
- config/packages/nelmio_solarium.yaml
- config/packages/prod/jms_serializer.yaml
- ```
-
-Finally, remove related routes by deleting `config/routes/ibexa_commerce.yaml` file.
-
-### Update the database
-
-Next, update the database if you're using [[= product_name_com =]].
-[[= product_name_content =]] and [[= product_name_exp =]] don't require the database update.
-
-[[% include 'snippets/update/db/db_backup_warning.md' %]]
-
-Apply the following database update scripts:
-
-=== "MySQL"
-
- ``` bash
- mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/commerce/ibexa-4.3.latest-to-4.4.0.sql
- ```
-
-=== "PostgreSQL"
-
- ``` bash
- psql < vendor/ibexa/installer/upgrade/db/postgresql/commerce/ibexa-4.3.latest-to-4.4.0.sql
- ```
-
-If you used old Commerce packages before, and have migrated everything, you can remove the old tables.
-The tables that can be removed are prefixed with `ses_` and `sve_`.
-
-=== "MySQL"
-
- To switch to the right database, issue the following command:
- ``` sql
- USE ;
- ```
-
- Then, to remove all the old tables, run the following queries:
- ``` sql
- DROP TABLE IF EXISTS ses_basket;
- DROP TABLE IF EXISTS ses_basket_line;
- DROP TABLE IF EXISTS ses_content_modification_queue;
- DROP TABLE IF EXISTS ses_customer_prices;
- DROP TABLE IF EXISTS ses_customer_sku;
- DROP TABLE IF EXISTS ses_download;
- DROP TABLE IF EXISTS ses_externaldata;
- DROP TABLE IF EXISTS ses_gdpr_log;
- DROP TABLE IF EXISTS ses_invoice;
- DROP TABLE IF EXISTS ses_log_erp;
- DROP TABLE IF EXISTS ses_log_mail;
- DROP TABLE IF EXISTS ses_log_search;
- DROP TABLE IF EXISTS ses_payment_basket_map;
- DROP TABLE IF EXISTS ses_price;
- DROP TABLE IF EXISTS ses_shipping_cost;
- DROP TABLE IF EXISTS ses_stat_sessions;
- DROP TABLE IF EXISTS ses_stock;
- DROP TABLE IF EXISTS ses_token;
- DROP TABLE IF EXISTS sve_class;
- DROP TABLE IF EXISTS sve_class_attributes;
- DROP TABLE IF EXISTS sve_object;
- DROP TABLE IF EXISTS sve_object_attributes;
- DROP TABLE IF EXISTS sve_object_attributes_tmp;
- DROP TABLE IF EXISTS sve_object_catalog;
- DROP TABLE IF EXISTS sve_object_catalog_tmp;
- DROP TABLE IF EXISTS sve_object_tmp;
- DROP TABLE IF EXISTS sve_object_urls;
- DROP TABLE IF EXISTS sve_object_urls_tmp;
- ```
-
-=== "PostgreSQL"
-
- To switch to the right database, issue the following command:
- ``` sql
- \connect ;
- ```
-
-
- Then, to remove all the old tables, run the following queries:
- ``` sql
- DROP TABLE IF EXISTS ses_basket;
- DROP TABLE IF EXISTS ses_basket_line;
- DROP TABLE IF EXISTS ses_content_modification_queue;
- DROP TABLE IF EXISTS ses_customer_prices;
- DROP TABLE IF EXISTS ses_customer_sku;
- DROP TABLE IF EXISTS ses_download;
- DROP TABLE IF EXISTS ses_externaldata;
- DROP TABLE IF EXISTS ses_gdpr_log;
- DROP TABLE IF EXISTS ses_invoice;
- DROP TABLE IF EXISTS ses_log_erp;
- DROP TABLE IF EXISTS ses_log_mail;
- DROP TABLE IF EXISTS ses_log_search;
- DROP TABLE IF EXISTS ses_payment_basket_map;
- DROP TABLE IF EXISTS ses_price;
- DROP TABLE IF EXISTS ses_shipping_cost;
- DROP TABLE IF EXISTS ses_stat_sessions;
- DROP TABLE IF EXISTS ses_stock;
- DROP TABLE IF EXISTS ses_token;
- DROP TABLE IF EXISTS sve_class;
- DROP TABLE IF EXISTS sve_class_attributes;
- DROP TABLE IF EXISTS sve_object;
- DROP TABLE IF EXISTS sve_object_attributes;
- DROP TABLE IF EXISTS sve_object_attributes_tmp;
- DROP TABLE IF EXISTS sve_object_catalog;
- DROP TABLE IF EXISTS sve_object_catalog_tmp;
- DROP TABLE IF EXISTS sve_object_tmp;
- DROP TABLE IF EXISTS sve_object_urls;
- DROP TABLE IF EXISTS sve_object_urls_tmp;
- ```
-
-#### Ibexa Open Source
-
-If you have no access to Ibexa DXP's `ibexa/installer` package, database upgrade isn't necessary.
-
-## Ensure password safety
-
-Following [Security advisory: IBEXA-SA-2022-009](https://developers.ibexa.co/security-advisories/ibexa-sa-2022-009-critical-vulnerabilities-in-graphql-role-assignment-ct-editing-and-drafts-tooltips),
-unless you can verify based on your log files that the vulnerability has not been exploited,
-you should [revoke passwords](https://doc.ibexa.co/en/4.6/users/passwords/#revoking-passwords) for all affected users.
-
-## Finish code update
-
-Finish the code update by running:
-
-```bash
-composer run post-install-cmd
-```
-
-## Run data migration
-
-### Customer Portal self-registration
-
-If you're using [[= product_name_exp =]] or [[= product_name_com =]],
-you can now run data migration required by the Customer Portal applications feature to finish the update process:
-
-```bash
-php bin/console ibexa:migrations:import vendor/ibexa/corporate-account/src/bundle/Resources/migrations/application_internal_fields.yaml --name=2022_11_07_22_46_application_internal_fields.yaml
-php bin/console ibexa:migrations:migrate --file=2022_11_07_22_46_application_internal_fields.yaml
-```
diff --git a/docs/update_and_migration/from_4.3/update_from_4.3_old_commerce.md b/docs/update_and_migration/from_4.3/update_from_4.3_old_commerce.md
deleted file mode 100644
index a9e20078a9c..00000000000
--- a/docs/update_and_migration/from_4.3/update_from_4.3_old_commerce.md
+++ /dev/null
@@ -1,224 +0,0 @@
----
-description: Update procedure to v4.4 for people who use deprecated Commerce packages and want to keep them.
----
-
-# Update with old Commerce packages
-
-This update procedure applies if you have a v4.3 installation, you use Commerce packages and would like to continue to use them.
-
-All commerce packages as of v4.4 are deprecated and will be removed in v5.
-Until that time, they will be maintained by Ibexa with fixes, including security fixes, but they won't be further developed.
-Old packages are replaced by [the all-new Ibexa Commerce packages](ibexa_dxp_v4.4.md#all-new-ibexa-commerce-packages).
-
-[[% include 'snippets/update/temporary_v4_conflicts.md' %]]
-
-## Update from v4.3.x to v4.3.latest
-
-Before you update to v4.4, you need to go through the following steps to update to the latest maintenance release of v4.3 (v[[= latest_tag_4_3 =]]).
-
-### Update the application to v4.3.latest
-
-Run:
-
-=== "[[= product_name_content =]]"
-
- ``` bash
- composer require ibexa/content:[[= latest_tag_4_3 =]] --with-all-dependencies --no-scripts
- ```
-
-=== "[[= product_name_exp =]]"
-
- ``` bash
- composer require ibexa/experience:[[= latest_tag_4_3 =]] --with-all-dependencies --no-scripts
- ```
-
-=== "[[= product_name_com =]]"
-
- ``` bash
- composer require ibexa/commerce:[[= latest_tag_4_3 =]] --with-all-dependencies --no-scripts
- ```
-
-## Update from v4.3.latest to v4.4
-
-When you have the latest version of v4.3, you can update to v4.4.
-
-### Update the application to v4.4
-
-First, run:
-
-=== "[[= product_name_content =]]"
-
- ``` bash
- composer require ibexa/content:[[= latest_tag_4_4 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/content --force -v
- ```
-
-=== "[[= product_name_exp =]]"
-
- ``` bash
- composer require ibexa/experience:[[= latest_tag_4_4 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/experience --force -v
- ```
-
-=== "[[= product_name_com =]]"
-
- ``` bash
- composer require ibexa/commerce:[[= latest_tag_4_4 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/commerce --force -v
- ```
-
-The `recipes:install` command installs new YAML configuration files.
-Review the old YAML files and move your custom configuration to the relevant new files.
-
-#### Flysystem v2
-
-Local adapters' `directory` key changed to `location`.
-It's defined in `config/packages/oneup_flysystem.yaml`:
-
-```yaml
-oneup_flysystem:
- adapters:
- default_adapter:
- local:
- location: '%kernel.cache_dir%/flysystem'
-```
-
-If you haven't applied custom changes to that file,
-you can reset third-party `oneup/flysystem-bundle` recipe by executing:
-
-```bash
-composer recipe:install --force --reset -- oneup/flysystem-bundle
-```
-
-### Add `ibexa/commerce-*` packages dependencies
-
-Add the following dependencies in the `require` section in `composer.json`:
-
-=== "[[= product_name_content =]]"
-
- ``` json
- "require":{
- "ibexa/commerce-base-design": "4.4.0",
- "ibexa/commerce-checkout": "4.4.0",
- "ibexa/commerce-fieldtypes": "4.4.0",
- "ibexa/commerce-price-engine": "4.4.0",
- "ibexa/commerce-shop": "4.4.0",
- "ibexa/commerce-shop-ui": "4.4.0",
- "ezsystems/apache-tika-bundle": "^2.0",
- "ezsystems/comment-bundle": "^3.1",
- "ezsystems/job-queue-bundle": "^4.0",
- "ezsystems/payment-core-bundle": "^3.0",
- "ezsystems/stash-bundle": "^0.9",
- }
- ```
-
-=== "[[= product_name_exp =]]"
-
- ``` json
- "require":{
- "ibexa/commerce-base-design": "4.4.0",
- "ibexa/commerce-checkout": "4.4.0",
- "ibexa/commerce-fieldtypes": "4.4.0",
- "ibexa/commerce-price-engine": "4.4.0",
- "ibexa/commerce-shop": "4.4.0",
- "ibexa/commerce-shop-ui": "4.4.0",
- "ezsystems/apache-tika-bundle": "^2.0",
- "ezsystems/comment-bundle": "^3.1",
- "ezsystems/job-queue-bundle": "^4.0",
- "ezsystems/payment-core-bundle": "^3.0",
- "ezsystems/stash-bundle": "^0.9",
- }
- ```
-
-=== "[[= product_name_com =]]"
-
- ``` json
- "require":{
- "ibexa/commerce-base-design": "4.4.0",
- "ibexa/commerce-checkout": "4.4.0",
- "ibexa/commerce-fieldtypes": "4.4.0",
- "ibexa/commerce-price-engine": "4.4.0",
- "ibexa/commerce-shop": "4.4.0",
- "ibexa/commerce-shop-ui": "4.4.0",
- "ezsystems/apache-tika-bundle": "^2.0",
- "ezsystems/comment-bundle": "^3.1",
- "ezsystems/job-queue-bundle": "^4.0",
- "ezsystems/payment-core-bundle": "^3.0",
- "ezsystems/stash-bundle": "^0.9",
- "ibexa/commerce-admin-ui": "4.4.0",
- "ibexa/commerce-erp-admin": "4.4.0",
- "ibexa/commerce-order-history": "4.4.0",
- "ibexa/commerce-page-builder": "4.4.0",
- "ibexa/commerce-rest": "4.4.0",
- "ibexa/commerce-transaction": "4.4.0"
- }
- ```
-
-Next, remove the entries with new packages alongside with routing and configuration in `config/routes/ibexa_cart.yaml`, `config/routes/ibexa_checkout.yaml` and `config/routes/ibexa_storefront.yaml`:
-
-``` php {skip-validation}
- Ibexa\Bundle\Cart\IbexaCartBundle::class => ['all' => true],
- Ibexa\Bundle\Checkout\IbexaCheckoutBundle::class => ['all' => true],
- Ibexa\Bundle\Storefront\IbexaStorefrontBundle::class => ['all' => true],
-```
-
-Finally, remove the new `storefront_group` SiteAccess from `config/packages/ibexa.yaml`:
-
-```yaml
-ibexa:
- siteaccess:
- groups:
- site_group: [import, site]
- storefront_group: [site]
-```
-
-### Update the database
-
-Next, update the database if you're using [[= product_name_com =]].
-[[= product_name_content =]] and [[= product_name_exp=]] don't require the database update.
-
-[[% include 'snippets/update/db/db_backup_warning.md' %]]
-
-Apply the following database update scripts:
-
-=== "MySQL"
-
- ``` bash
- mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/commerce/ibexa-4.3.latest-to-4.4.0.sql
- ```
-
-=== "PostgreSQL"
-
- ``` bash
- psql < vendor/ibexa/installer/upgrade/db/postgresql/commerce/ibexa-4.3.latest-to-4.4.0.sql
- ```
-
-#### Ibexa Open Source
-
-If you have no access to Ibexa DXP's `ibexa/installer` package, database upgrade isn't necessary.
-
-## Ensure password safety
-
-Following [Security advisory: IBEXA-SA-2022-009](https://developers.ibexa.co/security-advisories/ibexa-sa-2022-009-critical-vulnerabilities-in-graphql-role-assignment-ct-editing-and-drafts-tooltips),
-unless you can verify based on your log files that the vulnerability has not been exploited,
-you should [revoke passwords](https://doc.ibexa.co/en/4.6/users/passwords/#revoking-passwords) for all affected users.
-
-## Finish code update
-
-Finish the code update by running:
-
-``` bash
-composer run post-install-cmd
-```
-
-## Run data migration
-
-### Customer Portal self-registration
-
-If you're using [[= product_name_exp =]] or [[= product_name_com =]],
-run data migration required by the Customer Portal applications feature:
-
-```bash
-php bin/console ibexa:migrations:import vendor/ibexa/corporate-account/src/bundle/Resources/migrations/application_internal_fields.yaml --name=2022_11_07_22_46_application_internal_fields.yaml
-php bin/console ibexa:migrations:migrate --file=2022_11_07_22_46_application_internal_fields.yaml
-```
diff --git a/docs/update_and_migration/from_4.4/update_from_4.4.md b/docs/update_and_migration/from_4.4/update_from_4.4.md
deleted file mode 100644
index 1e5b78fc9f7..00000000000
--- a/docs/update_and_migration/from_4.4/update_from_4.4.md
+++ /dev/null
@@ -1,246 +0,0 @@
----
-description: Update your installation to the latest v4.5 version from v4.4.x.
----
-
-# Update from v4.4.x to v4.5
-
-This update procedure applies if you're using a v4.4 installation.
-
-## Update from v4.4.x to v4.4.latest
-
-Before you update to v4.5, you need to go through the following steps to update to the latest maintenance release of v4.4 (v[[= latest_tag_4_4 =]]).
-
-### Update the application to v4.4.latest
-
-[[% include 'snippets/update/temporary_v4_conflicts.md' %]]
-
-Run:
-
-=== "[[= product_name_content =]]"
-
- ``` bash
- composer require ibexa/content:[[= latest_tag_4_4 =]] --with-all-dependencies --no-scripts
- ```
-=== "[[= product_name_exp =]]"
-
- ``` bash
- composer require ibexa/experience:[[= latest_tag_4_4 =]] --with-all-dependencies --no-scripts
- ```
-=== "[[= product_name_com =]]"
-
- ``` bash
- composer require ibexa/commerce:[[= latest_tag_4_4 =]] --with-all-dependencies --no-scripts
- ```
-
-!!! note "Remove temporary Composer `conflict`"
-
- You can now remove the temporary Composer `conflict` entries from your `composer.json` file:
- ```diff
- "conflict": {
- - "jms/serializer": ">=3.30.0",
- - "gedmo/doctrine-extensions": ">=3.12.0"
- },
- ```
-
-## Update from v4.4.latest to v4.5
-
-When you have the latest version of v4.4, you can update to v4.5.
-
-### Update the application
-
-First, run:
-
-=== "[[= product_name_content =]]"
-
- ``` bash
- composer require ibexa/content:[[= latest_tag_4_5 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/content --force -v
- ```
-=== "[[= product_name_exp =]]"
-
- ``` bash
- composer require ibexa/experience:[[= latest_tag_4_5 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/experience --force -v
- ```
-=== "[[= product_name_com =]]"
-
- ``` bash
- composer require ibexa/commerce:[[= latest_tag_4_5 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/commerce --force -v
- ```
-
-The `recipes:install` command installs new YAML configuration files.
-Review the old YAML files and move your custom configuration to the relevant new files.
-
-### Define measurement base unit in configuration
-
-If your installation has defined measurement units in the configuration,
-you need to specify one of them as base unit in the `config/packages/ibexa_measurement.yaml` file:
-
-```yaml
-ibexa_measurement:
- types:
- my_type:
- my_unit: { symbol: my, is_base_unit: true }
-```
-
-Next, add unit conversion to `src/bundle/Resources/config/services/conversion.yaml`.
-
-For more information, see [Modify and add Measurement types and units](measurementfield.md#modify-and-add-measurement-types-and-units).
-
-### Update the database
-
-Next, update the database:
-
-[[% include 'snippets/update/db/db_backup_warning.md' %]]
-
-Apply the following database update scripts:
-
-=== "MySQL"
-
- ``` bash
- mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/ibexa-4.4.latest-to-4.5.0.sql
-
- ```
-
-=== "PostgreSQL"
-
- ``` bash
- psql < vendor/ibexa/installer/upgrade/db/postgresql/ibexa-4.4.latest-to-4.5.0.sql
- ```
-
-#### Migrate richtext namespaces
-
-If you earlier upgraded from v3.3 to v4.x and haven't run the migrate script yet, do it now, run:
-
-```bash
-php bin/console ibexa:migrate:richtext-namespaces
-```
-
-#### Ibexa Open Source
-
-If you have no access to Ibexa DXP's `ibexa/installer` package, apply the following database update:
-
-=== "MySQL"
-
- ``` sql
- CREATE TABLE ibexa_token_type
- (
- id int(11) NOT NULL AUTO_INCREMENT,
- identifier varchar(64) NOT NULL,
- PRIMARY KEY (id),
- UNIQUE KEY ibexa_token_type_unique (identifier)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
-
- CREATE TABLE ibexa_token
- (
- id int(11) NOT NULL AUTO_INCREMENT,
- type_id int(11) NOT NULL,
- token varchar(255) NOT NULL,
- identifier varchar(128) DEFAULT NULL,
- created int(11) NOT NULL DEFAULT 0,
- expires int(11) NOT NULL DEFAULT 0,
- PRIMARY KEY (id),
- UNIQUE KEY ibexa_token_unique (token,identifier,type_id),
- CONSTRAINT ibexa_token_type_id_fk
- FOREIGN KEY (type_id) REFERENCES ibexa_token_type (id)
- ON DELETE CASCADE
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
- ```
-
-=== "PostgreSQL"
-
- ``` sql
- CREATE TABLE ibexa_token_type
- (
- id serial PRIMARY KEY,
- identifier varchar(64) NOT NULL
- );
-
- CREATE TABLE ibexa_token
- (
- id serial PRIMARY KEY,
- type_id int NOT NULL
- CONSTRAINT ibexa_token_type_id_fk
- REFERENCES ibexa_token_type (id)
- ON DELETE CASCADE,
- token varchar(255) NOT NULL,
- identifier varchar(128) DEFAULT NULL,
- created int NOT NULL DEFAULT 0,
- expires int NOT NULL DEFAULT 0
- );
- ```
-
-### Clean-up taxonomy database
-
-If you didn't run it already when [migrating from 4.2 to 4.3](update_from_4.2.md#clean-up-taxonomy-database), run the following command for each of your taxonomies to ensure that there are no [content items orphaned during deletion of subtrees](https://doc.ibexa.co/en/4.6/content_management/taxonomy/taxonomy/#remove-orphaned-content-items) inherited from the earlier version's database:
-
-`php bin/console ibexa:taxonomy:remove-orphaned-content --force`
-
-For example:
-
-```bash
-php bin/console ibexa:taxonomy:remove-orphaned-content tags --force
-php bin/console ibexa:taxonomy:remove-orphaned-content product_categories --force
-```
-
-## Finish code update
-
-Finish the code update by running:
-
-```bash
-composer run post-install-cmd
-```
-
-## Run data migration
-
-If you're using [[= product_name_exp =]] or [[= product_name_com =]],
-you can now run data migration required by the Customer Portal and Commerce features to finish the update process:
-
-- Customer Portal [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-```bash
-php bin/console ibexa:migrations:import vendor/ibexa/corporate-account/src/bundle/Resources/migrations/customer_portal.yaml --name=2023_03_06_13_00_customer_portal.yaml
-php bin/console ibexa:migrations:migrate --file=2023_03_06_13_00_customer_portal.yaml
-```
-
-- Corporate access role update [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-```bash
-php bin/console ibexa:migrations:import vendor/ibexa/corporate-account/src/bundle/Resources/migrations/2023_05_09_12_40_corporate_access_role_update.yaml --name=2023_05_09_12_40_corporate_access_role_update.yaml
-php bin/console ibexa:migrations:migrate --file=2023_05_09_12_40_corporate_access_role_update.yaml
-```
-
-- Corporate account [[% include 'snippets/commerce_badge.md' %]]
-
-This migration allows all company members to shop in the frontend shop. If you have implemented business logic that depends on keeping company members out of the frontend shop, you can skip it:
-
-```bash
-php bin/console ibexa:migrations:import vendor/ibexa/storefront/src/bundle/Resources/migrations/2023_04_27_10_30_corporate_account.yaml --name=2023_04_27_10_30_corporate_account.yaml
-php bin/console ibexa:migrations:migrate --file=2023_04_27_10_30_corporate_account.yaml
-```
-
-- Storefront user update [[% include 'snippets/commerce_badge.md' %]]
-
-```bash
-php bin/console ibexa:migrations:import vendor/ibexa/storefront/src/bundle/Resources/migrations/2023_04_27_11_20_storefront_user_role_update.yaml --name=2023_04_27_11_20_storefront_user_role_update.yaml
-php bin/console ibexa:migrations:migrate --file=2023_04_27_11_20_storefront_user_role_update.yaml
-```
-
-- Shipment permissions [[% include 'snippets/commerce_badge.md' %]]
-
-```bash
-php bin/console ibexa:migrations:import vendor/ibexa/shipping/src/bundle/Resources/install/migrations/shipment_permissions.yaml --name=shipment_permissions.yaml
-php bin/console ibexa:migrations:migrate --file=shipment_permissions.yaml
-```
-
-- Order permissions [[% include 'snippets/commerce_badge.md' %]]
-
-```bash
-php bin/console ibexa:migrations:import vendor/ibexa/order-management/src/bundle/Resources/install/migrations/order_permissions.yaml --name=order_permissions.yaml
-php bin/console ibexa:migrations:migrate --file=order_permissions.yaml
-```
-
-## Update to v4.5.latest
-
-You can now continue applying the instructions for the 4.5 patch releases, starting with [v4.5.2](update_from_4.5.md#v452).
diff --git a/docs/update_and_migration/from_4.5/update_from_4.5.md b/docs/update_and_migration/from_4.5/update_from_4.5.md
deleted file mode 100644
index 0901c8213ca..00000000000
--- a/docs/update_and_migration/from_4.5/update_from_4.5.md
+++ /dev/null
@@ -1,496 +0,0 @@
----
-description: Update your installation to the latest v4.6 version from v4.5.x.
----
-
-# Update from v4.5.x to v4.6
-
-This update procedure applies if you're using a v4.5 installation.
-
-## Update from v4.5.x to v4.5.latest
-
-Before you update to v4.6, you need to go through the following steps to update to the latest maintenance release of v4.5 (v[[= latest_tag_4_5 =]]).
-
-Note which version you actually have before starting.
-
-### Update the application to v4.5.latest
-
-Run:
-
-=== "[[= product_name_content =]]"
-
- ``` bash
- composer require ibexa/content:[[= latest_tag_4_5 =]] --with-all-dependencies --no-scripts
- ```
-=== "[[= product_name_exp =]]"
-
- ``` bash
- composer require ibexa/experience:[[= latest_tag_4_5 =]] --with-all-dependencies --no-scripts
- ```
-=== "[[= product_name_com =]]"
-
- ``` bash
- composer require ibexa/commerce:[[= latest_tag_4_5 =]] --with-all-dependencies --no-scripts
- ```
-
-### v4.5.2
-
-#### Database update
-
-Run the following scripts:
-
-=== "MySQL"
-
- ``` bash
- mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/ibexa-4.5.1-to-4.5.2.sql
- ```
-
-=== "PostgreSQL"
-
- ``` bash
- psql < vendor/ibexa/installer/upgrade/db/postgresql/ibexa-4.5.1-to-4.5.2.sql
- ```
-
-### v4.5.3
-
-#### Database update [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-Run the following scripts:
-
-=== "MySQL"
-
- ``` bash
- mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/ibexa-4.5.2-to-4.5.3.sql
- ```
-
-=== "PostgreSQL"
-
- ``` bash
- psql < vendor/ibexa/installer/upgrade/db/postgresql/ibexa-4.5.2-to-4.5.3.sql
- ```
-
-### v4.5.4
-
-#### Database update
-
-Run the following scripts:
-
-=== "MySQL"
-
- ``` bash
- mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/ibexa-4.5.3-to-4.5.4.sql
- ```
-
-=== "PostgreSQL"
-
- ``` bash
- psql < vendor/ibexa/installer/upgrade/db/postgresql/ibexa-4.5.3-to-4.5.4.sql
- ```
-
-### v4.5.5
-
-No additional steps needed.
-
-### v4.5.6
-
-#### Database update
-
-Run the following scripts:
-
-=== "MySQL"
-
- ``` bash
- mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/ibexa-4.5.5-to-4.5.6.sql
- ```
-
-=== "PostgreSQL"
-
- ``` bash
- psql < vendor/ibexa/installer/upgrade/db/postgresql/ibexa-4.5.5-to-4.5.6.sql
- ```
-
-### v4.5.7
-
-No additional steps needed.
-
-## Update from v4.5.latest to v4.6
-
-When you have the latest version of v4.5, you can update to v4.6.
-Check [the requirements](../../getting_started/requirements.md) first.
-This version adds support for PHP 8.2 and 8.3, but requires using at least Node 18.
-
-### Update the application
-
-First, run:
-
-=== "[[= product_name_headless =]] (formerly [[= product_name_content =]])"
-
- ``` bash
- composer remove ibexa/content --no-update --no-scripts
- # Avoid recipes conflict between configuring ibexa/headless and unconfiguring ibexa/content
- rm symfony.lock
- composer require ibexa/headless:[[= latest_tag_4_6 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/headless --force -v
- # Update CKEditor dependencies
- yarn add @ckeditor/ckeditor5-alignment@^40.1.0 @ckeditor/ckeditor5-build-inline@^40.1.0 @ckeditor/ckeditor5-dev-utils@^39.0.0 @ckeditor/ckeditor5-widget@^40.1.0 @ckeditor/ckeditor5-theme-lark@^40.1.0 @ckeditor/ckeditor5-code-block@^40.1.0
- ```
-=== "[[= product_name_exp =]]"
-
- ``` bash
- composer require ibexa/experience:[[= latest_tag_4_6 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/experience --force -v
- # Update CKEditor dependencies
- yarn add @ckeditor/ckeditor5-alignment@^40.1.0 @ckeditor/ckeditor5-build-inline@^40.1.0 @ckeditor/ckeditor5-dev-utils@^39.0.0 @ckeditor/ckeditor5-widget@^40.1.0 @ckeditor/ckeditor5-theme-lark@^40.1.0 @ckeditor/ckeditor5-code-block@^40.1.0
- ```
-=== "[[= product_name_com =]]"
-
- ``` bash
- composer require ibexa/commerce:[[= latest_tag_4_6 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/commerce --force -v
- # Update CKEditor dependencies
- yarn add @ckeditor/ckeditor5-alignment@^40.1.0 @ckeditor/ckeditor5-build-inline@^40.1.0 @ckeditor/ckeditor5-dev-utils@^39.0.0 @ckeditor/ckeditor5-widget@^40.1.0 @ckeditor/ckeditor5-theme-lark@^40.1.0 @ckeditor/ckeditor5-code-block@^40.1.0
- ```
-
-The `recipes:install` command installs new YAML configuration files.
-Review the old YAML files and move your custom configuration to the relevant new files.
-
-If you're using [custom CKEditor plugins](extend_online_editor.md#add-ckeditor-plugins), update them as well to use the same version range for all CKEditor dependencies.
-
-## Remove `node_modules` and `yarn.lock`
-
-Next, remove `node_modules` and `yarn.lock` before running `composer run post-update-cmd`,
-otherwise you can encounter errors during compiling.
-
-``` bash
-rm -Rf node_modules
-rm yarn.lock
-```
-
-## Finish code update
-
-Finish the code update by running:
-
-```bash
-composer run post-install-cmd
-```
-
-### Known issues
-
-You may encounter one of the following errors during the process.
-
-#### Non-existent parameter
-
-If you encounter a `You have requested a non-existent parameter` error
-(like, for example, `You have requested a non-existent parameter "ibexa.dashboard.ibexa_news.limit".`),
-this is due to incorrect order of entries in `config/bundles.php`.
-To fix this, use the order from the skeleton you're using, and add any extra bundles again.
-
-=== "[[= product_name_headless =]]"
- Use [https://github.com/ibexa/headless-skeleton/blob/v[[= latest_tag_4_6 =]]/config/bundles.php](https://github.com/ibexa/headless-skeleton/blob/v[[= latest_tag_4_6 =]]/config/bundles.php) as a reference.
-
-=== "[[= product_name_exp =]]"
- Use [https://github.com/ibexa/experience-skeleton/blob/v[[= latest_tag_4_6 =]]/config/bundles.php](https://github.com/ibexa/experience-skeleton/blob/v[[= latest_tag_4_6 =]]/config/bundles.php) as a reference.
-
-=== "[[= product_name_com =]]"
- Use [https://github.com/ibexa/commerce-skeleton/blob/v[[= latest_tag_4_6 =]]/config/bundles.php](https://github.com/ibexa/commerce-skeleton/blob/v[[= latest_tag_4_6 =]]/config/bundles.php) as a reference.
-
-#### Non-existent service
-
-If you encounter the `You have requested a non-existent service "payum.storage.doctrine.orm".` error,
-replace the config/packages/payum.yaml file with the contents from https://github.com/ibexa/recipes-dev/blob/master/ibexa/commerce/4.6/config/packages/payum.yaml.
-
-## Update the database
-
-Next, update the database:
-
-[[% include 'snippets/update/db/db_backup_warning.md' %]]
-
-Apply the following database update scripts:
-
-=== "MySQL"
-
- ``` bash
- mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/ibexa-4.5.latest-to-4.6.0.sql
- ```
-
-=== "PostgreSQL"
-
- ``` bash
- psql < vendor/ibexa/installer/upgrade/db/postgresql/ibexa-4.5.latest-to-4.6.0.sql
- ```
-
-### Update [[= product_name_com =]] database [[% include 'snippets/commerce_badge.md' %]]
-
-For [[= product_name_com =]] installations, you also need to run the following command line:
-
-=== "MySQL"
-
- ``` bash
- mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/commerce/ibexa-4.5.latest-to-4.6.0.sql
- ```
-
-=== "PostgreSQL"
-
- ``` bash
- psql < vendor/ibexa/installer/upgrade/db/postgresql/commerce/ibexa-4.5.latest-to-4.6.0.sql
- ```
-
-And apply the following database script:
-
-=== "MySQL"
-
- ``` sql
- CREATE TABLE ibexa_payment_token (
- hash VARCHAR(255) NOT NULL,
- afterUrl VARCHAR(255) DEFAULT NULL,
- targetUrl VARCHAR(255) NOT NULL,
- gatewayName VARCHAR(255) NOT NULL,
- details LONGTEXT DEFAULT NULL COMMENT '(DC2Type:object)',
- PRIMARY KEY(hash)
- ) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_520_ci` ENGINE = InnoDB;
- ```
-
-=== "PostgreSQL"
-
- ``` sql
- CREATE TABLE ibexa_payment_token
- (
- hash VARCHAR(255) NOT NULL,
- afterurl VARCHAR(255) DEFAULT NULL,
- targeturl VARCHAR(255) NOT NULL,
- gatewayname VARCHAR(255) NOT NULL,
- details TEXT DEFAULT NULL,
- PRIMARY KEY(hash)
- );
- COMMENT ON COLUMN ibexa_payment_token.details IS '(DC2Type:object)';
- ```
-
-## Run data migration
-
-### Image picker migration
-
-The new Image picker by default expects an `ezkeyword` field type to exist in the `image` content type.
-
-You can add it running the following commands:
-
-```bash
-php bin/console ibexa:migrations:import vendor/ibexa/image-picker/src/bundle/Resources/migrations/2023_12_06_15_00_image_content_type.yaml --name=2023_12_06_15_00_image_content_type.yaml
-php bin/console ibexa:migrations:migrate --file=2023_12_06_15_00_image_content_type.yaml
-```
-
-### Dashboard migration [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-If you're using [[= product_name_exp =]] or [[= product_name_com =]],
-you must run data migration required by the dashboard and other features to finish the upgrade process:
-
-```bash
-php bin/console ibexa:migrations:import vendor/ibexa/dashboard/src/bundle/Resources/migrations/structure.yaml --name=2023_09_23_14_15_dashboard_structure.yaml
-php bin/console ibexa:migrations:import vendor/ibexa/dashboard/src/bundle/Resources/migrations/permissions.yaml --name=2023_10_10_16_14_dashboard_permissions.yaml
-php bin/console ibexa:migrations:import vendor/ibexa/activity-log/src/bundle/Resources/migrations/dashboard_structure.yaml --name=2023_12_04_13_34_activity_log_dashboard_structure.yaml
-php bin/console ibexa:migrations:import vendor/ibexa/personalization/src/bundle/Resources/migrations/dashboard_structure.yaml --name=2023_12_05_17_00_personalization_dashboard_structure.yaml
-php bin/console ibexa:migrations:import vendor/ibexa/product-catalog/src/bundle/Resources/migrations/dashboard_structure.yaml --name=2023_11_20_21_32_product_catalog_dashboard_structure.yaml
-php bin/console ibexa:migrations:migrate --file=2023_09_23_14_15_dashboard_structure.yaml --file=2023_10_10_16_14_dashboard_permissions.yaml --file=2023_12_04_13_34_activity_log_dashboard_structure.yaml --file=2023_12_05_17_00_personalization_dashboard_structure.yaml --file=2023_11_20_21_32_product_catalog_dashboard_structure.yaml
-```
-
-!!! caution
-
- The `2023_10_10_16_14_dashboard_permissions.yaml` migration creates a role dedicated for dashboard management and assigns it to the Editors user group.
- If you have custom user groups which need to manipulate dashboards, you need to skip this migration, copy it to your migrations folder (by default, `src/Migrations/Ibexa/migrations`) and adjust it according to your needs before execution.
-
-For [[= product_name_com =]] there's an additional migration:
-
-``` bash
-php bin/console ibexa:migrations:import vendor/ibexa/order-management/src/bundle/Resources/install/migrations/dashboard_structure.yaml --name=2023_11_20_14_33_order_dashboard_structure.yaml
-php bin/console ibexa:migrations:migrate --file=2023_11_20_14_33_order_dashboard_structure.yaml
-```
-
-### Ibexa Open Source
-
-If you don't have access to Ibexa DXP's `ibexa/installer` package and cannot apply the scripts from `vendor/ibexa/installer` directory, apply the following database update instead:
-
-=== "MySQL"
-
- ``` sql
- ALTER TABLE `ibexa_token`
- ADD COLUMN `revoked` BOOLEAN NOT NULL DEFAULT false;
- ```
-
-=== "PostgreSQL"
-
- ``` sql
- ALTER TABLE "ibexa_token"
- ADD "revoked" BOOLEAN DEFAULT false NOT NULL;
- ```
-
-## Revisit configuration
-
-### Revisit mandatory configuration
-
-#### Dashboard configuration [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-Define "Dashboards" location as contextual tree root:
-
-```yaml
-ibexa:
- system:
- # ...
- admin_group:
- content_tree_module:
- contextual_tree_root_location_ids:
- #...
- - 67 # Dashboards (clean installation)
-```
-
-#### User profile
-
-Ibexa DXP v4.6 introduced user profile for Backoffice users, allowing users to upload avatars, and provide personal information.
-
-This feature is optional, and you can disable it by setting `enabled` flag to `false` in `ibexa.system..user_profile` configuration:
-
-```yaml
-# /config/packages/ibexa_admin_ui.yaml
-ibexa:
- system:
- # ...
- admin_group:
- user_profile:
- enabled: false
-```
-
-To enable the user profile, you must specify content type identifiers which represent the "editor" user, and field groups to be rendered in the user profile summary:
-
-```yaml
-# /config/packages/ibexa_admin_ui.yaml
-ibexa:
- system:
- # ...
- admin_group:
- user_profile:
- enabled: true
- content_types: ['editor']
- field_groups: ['about', 'contact']
-```
-
-You can use your own content type that represents the back office user, or use the default one provided by Ibexa DXP:
-
-```bash
-php bin/console ibexa:migrations:import vendor/ibexa/installer/src/bundle/Resources/install/migrations/2023_12_07_20_23_editor_content_type.yaml --name=2023_12_07_20_23_editor_content_type.yaml
-php bin/console ibexa:migrations:import vendor/ibexa/installer/src/bundle/Resources/install/migrations/2024_01_09_22_23_editor_permissions.yaml --name=2024_01_09_22_23_editor_permissions.yaml
-php bin/console ibexa:migrations:migrate --file=2023_12_07_20_23_editor_content_type.yaml --file=2024_01_09_22_23_editor_permissions.yaml
-```
-
-#### Site context
-
-Site context is used in content tree to display only those content items that belong to the selected website.
-
-You can add locations that shouldn't be publicly accessible to the list of excluded paths:
-
-```yaml
-# /config/packages/ibexa_site_context.yaml
-ibexa:
- system:
- # ...
- admin_group:
- site_context:
- excluded_paths:
- - /1/5/ # Users
- - /1/43/ # Media
- - /1/55/ # Forms
- - /1/56/ # Site skeletons
- - /1/67/ # Dashboards
- - /1/61/ # Product categorises
- - /1/65/ # Corporate Account
- - /1/57/ # Tags
-```
-
-### Revisit optional configuration
-
-#### Activity log [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-By default, activity log keeps entries for 30 days.
-You can change this value by setting `ibexa.repositories..activity_log.truncate_after_days` parameter:
-
-```yaml
-ibexa:
- repositories:
- default:
- # ...
- activity_log:
- truncate_after_days: 10
-```
-
-### Revisit permissions
-
-#### Recent activity [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-You must add the `Activity Log / Read` policy (`activity_log/read`) to every role that has access to the back office, at least with the "Only own log" limitation.
-This policy is mandatory to display the "Recent activity" block in [dashboards](#dashboard-migration), and the "Recent activity" block in [user profiles](#user-profile).
-
-The following migration example allows users with the `Editor` role to access their own activity log:
-
-```yaml
-- type: role
- mode: update
- match:
- field: identifier
- value: 'Editor'
- policies:
- mode: append
- list:
- - module: activity_log
- function: read
- limitations:
- - identifier: activity_log_owner
- values: []
-```
-
-## Update Solr configuration
-
-Solr configuration changes with the addition of spellchecking feature.
-
-Configure the `spellcheck` component in `solrconfig.xml`:
-
-```xml
-
-
- default
- meta_content__text_t
- solr.DirectSolrSpellChecker
- internal
- 0.5
- 2
- 1
- 5
- 4
- 0.01
-
-
-```
-
-Add this `spellcheck` component to the `/select` request handler:
-
-```xml
-
-
- spellcheck
-
-
-
-```
-
-!!! note
-
- You can [generate new Solr configuration files using `generate-solr-config.sh`](install_solr.md#generate-solr-configuration-automatically),
- and merge `spellcheck` configuration by comparing new files with your existing setup.
-
-Restart Solr for `solrconfig.xml` changes to take effect.
-
-## Update Elasticsearch schema
-
-Elasticsearch schema's templates change, for example, with the addition of new features such as spellchecking.
-When this happens, you need to erase the index, update the schema, and rebuild the index.
-
-[[% include 'snippets/elasticsearch_clear_index.md' %]]
-
-## Update to v4.6.latest
-
-Now, proceed to the last step, [updating to the latest v4.6 patch version](update_from_4.6.md).
diff --git a/docs/update_and_migration/from_4.6/sql/ibexa_oss_4.6.latest-to-5.0.0_mysql.sql b/docs/update_and_migration/from_4.6/sql/ibexa_oss_4.6.latest-to-5.0.0_mysql.sql
deleted file mode 100644
index 1217d5c9d3c..00000000000
--- a/docs/update_and_migration/from_4.6/sql/ibexa_oss_4.6.latest-to-5.0.0_mysql.sql
+++ /dev/null
@@ -1,252 +0,0 @@
--- Rename core related schema
-ALTER TABLE ezbinaryfile RENAME TO ibexa_binary_file;
-
-ALTER TABLE ezcobj_state RENAME TO ibexa_object_state;
-ALTER TABLE ibexa_object_state RENAME INDEX ezcobj_state_priority TO ibexa_object_state_priority;
-ALTER TABLE ibexa_object_state RENAME INDEX ezcobj_state_lmask TO ibexa_object_state_lmask;
-ALTER TABLE ibexa_object_state RENAME INDEX ezcobj_state_identifier TO ibexa_object_state_identifier;
-
-ALTER TABLE ezcobj_state_group RENAME TO ibexa_object_state_group;
-ALTER TABLE ibexa_object_state_group RENAME INDEX ezcobj_state_group_lmask TO ibexa_object_state_group_lmask;
-ALTER TABLE ibexa_object_state_group RENAME INDEX ezcobj_state_group_identifier TO ibexa_object_state_group_identifier;
-
-ALTER TABLE ezcobj_state_group_language RENAME TO ibexa_object_state_group_language;
-
-ALTER TABLE ezcobj_state_language RENAME TO ibexa_object_state_language;
-
-ALTER TABLE ezcobj_state_link RENAME TO ibexa_object_state_link;
-
-ALTER TABLE ezcontent_language RENAME TO ibexa_content_language;
-ALTER TABLE ibexa_content_language RENAME INDEX ezcontent_language_name TO ibexa_content_language_name;
-
-ALTER TABLE ezcontentbrowsebookmark RENAME TO ibexa_content_bookmark;
-ALTER TABLE ibexa_content_bookmark RENAME INDEX ezcontentbrowsebookmark_location TO ibexa_content_bookmark_location;
-ALTER TABLE ibexa_content_bookmark RENAME INDEX ezcontentbrowsebookmark_user TO ibexa_content_bookmark_user;
-ALTER TABLE ibexa_content_bookmark RENAME INDEX ezcontentbrowsebookmark_user_location TO ibexa_content_bookmark_user_location;
-
-ALTER TABLE ezcontentclass RENAME TO ibexa_content_type;
-ALTER TABLE ibexa_content_type RENAME INDEX ezcontentclass_version TO ibexa_content_type_version;
-ALTER TABLE ibexa_content_type RENAME INDEX ezcontentclass_identifier TO ibexa_content_type_identifier;
-
-ALTER TABLE ezcontentclass_attribute RENAME TO ibexa_content_type_field_definition;
-ALTER TABLE ibexa_content_type_field_definition RENAME INDEX ezcontentclass_attr_ccid TO ibexa_content_type_field_definition_ct_id;
-ALTER TABLE ibexa_content_type_field_definition RENAME INDEX ezcontentclass_attr_dts TO ibexa_content_type_field_definition_dts;
-
-ALTER TABLE ezcontentclass_attribute_ml RENAME TO ibexa_content_type_field_definition_ml;
-ALTER TABLE ibexa_content_type_field_definition_ml DROP FOREIGN KEY ezcontentclass_attribute_ml_lang_fk;
-ALTER TABLE ibexa_content_type_field_definition_ml ADD CONSTRAINT ibexa_content_type_field_definition_ml_lang_fk FOREIGN KEY (language_id) REFERENCES ibexa_content_language(id) ON DELETE CASCADE ON UPDATE CASCADE;
-
-ALTER TABLE ezcontentclass_classgroup RENAME TO ibexa_content_type_group_assignment;
-
-ALTER TABLE ezcontentclass_name RENAME TO ibexa_content_type_name;
-
-ALTER TABLE ezcontentclassgroup RENAME TO ibexa_content_type_group;
-
-ALTER TABLE ezcontentobject_tree RENAME TO ibexa_content_tree;
-ALTER TABLE ibexa_content_tree RENAME INDEX ezcontentobject_tree_p_node_id TO ibexa_content_tree_p_node_id;
-ALTER TABLE ibexa_content_tree RENAME INDEX ezcontentobject_tree_path_ident TO ibexa_content_tree_path_ident;
-ALTER TABLE ibexa_content_tree RENAME INDEX ezcontentobject_tree_contentobject_id_path_string TO ibexa_content_tree_contentobject_id_path_string;
-ALTER TABLE ibexa_content_tree RENAME INDEX ezcontentobject_tree_co_id TO ibexa_content_tree_co_id;
-ALTER TABLE ibexa_content_tree RENAME INDEX ezcontentobject_tree_depth TO ibexa_content_tree_depth;
-ALTER TABLE ibexa_content_tree RENAME INDEX ezcontentobject_tree_path TO ibexa_content_tree_path;
-ALTER TABLE ibexa_content_tree RENAME INDEX modified_subnode TO ibexa_content_modified_subnode;
-ALTER TABLE ibexa_content_tree RENAME INDEX ezcontentobject_tree_remote_id TO ibexa_content_tree_remote_id;
-
-ALTER TABLE ibexa_content_bookmark DROP FOREIGN KEY ezcontentbrowsebookmark_location_fk;
-ALTER TABLE ibexa_content_bookmark ADD CONSTRAINT ibexa_content_bookmark_location_fk FOREIGN KEY (node_id) REFERENCES ibexa_content_tree(node_id) ON DELETE CASCADE;
-
-ALTER TABLE ezcontentobject RENAME TO ibexa_content;
-ALTER TABLE ibexa_content RENAME INDEX ezcontentobject_classid TO ibexa_content_type_id;
-ALTER TABLE ibexa_content RENAME INDEX ezcontentobject_lmask TO ibexa_content_lmask;
-ALTER TABLE ibexa_content RENAME INDEX ezcontentobject_pub TO ibexa_content_pub;
-ALTER TABLE ibexa_content RENAME INDEX ezcontentobject_section TO ibexa_content_section;
-ALTER TABLE ibexa_content RENAME INDEX ezcontentobject_currentversion TO ibexa_content_currentversion;
-ALTER TABLE ibexa_content RENAME INDEX ezcontentobject_owner TO ibexa_content_owner;
-ALTER TABLE ibexa_content RENAME INDEX ezcontentobject_status TO ibexa_content_status;
-ALTER TABLE ibexa_content RENAME INDEX ezcontentobject_remote_id TO ibexa_content_remote_id;
-
-ALTER TABLE ezcontentobject_attribute RENAME TO ibexa_content_field;
-ALTER TABLE ibexa_content_field RENAME INDEX ezcontentobject_attribute_co_id_ver_lang_code TO ibexa_content_field_co_id_ver_lang_code;
-ALTER TABLE ibexa_content_field RENAME INDEX ezcontentobject_classattr_id TO ibexa_content_field_classattr_id;
-ALTER TABLE ibexa_content_field RENAME INDEX ezcontentobject_attribute_language_code TO ibexa_content_field_language_code;
-ALTER TABLE ibexa_content_field RENAME INDEX ezcontentobject_attribute_co_id_ver TO ibexa_content_field_co_id_ver;
-
-ALTER TABLE ezcontentobject_link RENAME TO ibexa_content_relation;
-ALTER TABLE ibexa_content_relation RENAME INDEX ezco_link_to_co_id TO ibexa_content_relation_to_co_id;
-ALTER TABLE ibexa_content_relation RENAME INDEX ezco_link_from TO ibexa_content_relation_from;
-ALTER TABLE ibexa_content_relation RENAME INDEX ezco_link_cca_id TO ibexa_content_relation_cca_id;
-
-ALTER TABLE ezcontentobject_name RENAME TO ibexa_content_name;
-ALTER TABLE ibexa_content_name RENAME INDEX ezcontentobject_name_lang_id TO ibexa_content_name_lang_id;
-ALTER TABLE ibexa_content_name RENAME INDEX ezcontentobject_name_cov_id TO ibexa_content_name_cov_id;
-ALTER TABLE ibexa_content_name RENAME INDEX ezcontentobject_name_name TO ibexa_content_name_name;
-
-ALTER TABLE ezcontentobject_trash RENAME TO ibexa_content_trash;
-ALTER TABLE ibexa_content_trash RENAME INDEX ezcobj_trash_depth TO ibexa_content_trash_depth;
-ALTER TABLE ibexa_content_trash RENAME INDEX ezcobj_trash_p_node_id TO ibexa_content_trash_p_node_id;
-ALTER TABLE ibexa_content_trash RENAME INDEX ezcobj_trash_path_ident TO ibexa_content_trash_path_ident;
-ALTER TABLE ibexa_content_trash RENAME INDEX ezcobj_trash_co_id TO ibexa_content_trash_co_id;
-ALTER TABLE ibexa_content_trash RENAME INDEX ezcobj_trash_modified_subnode TO ibexa_content_trash_modified_subnode;
-ALTER TABLE ibexa_content_trash RENAME INDEX ezcobj_trash_path TO ibexa_content_trash_path;
-
-ALTER TABLE ezcontentobject_version RENAME TO ibexa_content_version;
-ALTER TABLE ibexa_content_version RENAME INDEX ezcobj_version_status TO ibexa_content_version_status;
-ALTER TABLE ibexa_content_version RENAME INDEX idx_object_version_objver TO ibexa_content_version_idx_ver;
-ALTER TABLE ibexa_content_version RENAME INDEX ezcontobj_version_obj_status TO ibexa_content_version_idx_status;
-ALTER TABLE ibexa_content_version RENAME INDEX ezcobj_version_creator_id TO ibexa_content_version_creator_id;
-
-ALTER TABLE ezdfsfile RENAME TO ibexa_dfs_file;
-ALTER TABLE ibexa_dfs_file RENAME INDEX ezdfsfile_name_trunk TO ibexa_dfs_file_name_trunk;
-ALTER TABLE ibexa_dfs_file RENAME INDEX ezdfsfile_expired_name TO ibexa_dfs_file_expired_name;
-ALTER TABLE ibexa_dfs_file RENAME INDEX ezdfsfile_name TO ibexa_dfs_file_name;
-ALTER TABLE ibexa_dfs_file RENAME INDEX ezdfsfile_mtime TO ibexa_dfs_file_mtime;
-
-ALTER TABLE ezgmaplocation RENAME TO ibexa_map_location;
-ALTER TABLE ibexa_map_location RENAME INDEX latitude_longitude_key TO ibexa_map_location_latitude_longitude_key;
-
-ALTER TABLE ezimagefile RENAME TO ibexa_image_file;
-ALTER TABLE ibexa_image_file RENAME INDEX ezimagefile_file TO ibexa_image_file_file;
-ALTER TABLE ibexa_image_file RENAME INDEX ezimagefile_coid TO ibexa_image_file_coid;
-
-ALTER TABLE ezkeyword RENAME TO ibexa_keyword;
-ALTER TABLE ibexa_keyword RENAME INDEX ezkeyword_keyword TO ibexa_keyword_keyword;
-
-ALTER TABLE ezkeyword_attribute_link RENAME TO ibexa_keyword_field_link;
-ALTER TABLE ibexa_keyword_field_link RENAME INDEX ezkeyword_attr_link_oaid TO ibexa_keyword_field_link_oaid;
-ALTER TABLE ibexa_keyword_field_link RENAME INDEX ezkeyword_attr_link_kid_oaid TO ibexa_keyword_field_link_kid_oaid;
-ALTER TABLE ibexa_keyword_field_link RENAME INDEX ezkeyword_attr_link_oaid_ver TO ibexa_keyword_field_link_oaid_ver;
-
-ALTER TABLE ezmedia RENAME TO ibexa_media;
-
-ALTER TABLE eznode_assignment RENAME TO ibexa_node_assignment;
-ALTER TABLE ibexa_node_assignment RENAME INDEX eznode_assignment_is_main TO ibexa_node_assignment_is_main;
-ALTER TABLE ibexa_node_assignment RENAME INDEX eznode_assignment_coid_cov TO ibexa_node_assignment_coid_cov;
-ALTER TABLE ibexa_node_assignment RENAME INDEX eznode_assignment_parent_node TO ibexa_node_assignment_parent_node;
-ALTER TABLE ibexa_node_assignment RENAME INDEX eznode_assignment_co_version TO ibexa_node_assignment_co_version;
-
-ALTER TABLE eznotification RENAME TO ibexa_notification;
-ALTER TABLE ibexa_notification RENAME INDEX eznotification_owner_is_pending TO ibexa_notification_owner_is_pending;
-ALTER TABLE ibexa_notification RENAME INDEX eznotification_owner TO ibexa_notification_owner;
-
-ALTER TABLE ezpackage RENAME TO ibexa_package;
-
-ALTER TABLE ezpolicy RENAME TO ibexa_policy;
-ALTER TABLE ibexa_policy RENAME INDEX ezpolicy_role_id TO ibexa_policy_role_id;
-ALTER TABLE ibexa_policy RENAME INDEX ezpolicy_original_id TO ibexa_policy_original_id;
-
-ALTER TABLE ezpolicy_limitation RENAME TO ibexa_policy_limitation;
-ALTER TABLE ibexa_policy_limitation RENAME INDEX policy_id TO ibexa_policy_id;
-
-ALTER TABLE ezpolicy_limitation_value RENAME TO ibexa_policy_limitation_value;
-ALTER TABLE ibexa_policy_limitation_value RENAME INDEX ezpolicy_limit_value_limit_id TO ibexa_policy_limit_value_limit_id;
-ALTER TABLE ibexa_policy_limitation_value RENAME INDEX ezpolicy_limitation_value_val TO ibexa_policy_limitation_value_val;
-
-ALTER TABLE ezpreferences RENAME TO ibexa_user_preference;
-ALTER TABLE ibexa_user_preference RENAME INDEX ezpreferences_user_id_idx TO ibexa_user_preference_user_id_idx;
-ALTER TABLE ibexa_user_preference RENAME INDEX ezpreferences_name TO ibexa_user_preference_name;
-
-ALTER TABLE ezrole RENAME TO ibexa_role;
-
-ALTER TABLE ezsearch_object_word_link RENAME TO ibexa_search_object_word_link;
-ALTER TABLE ibexa_search_object_word_link RENAME INDEX ezsearch_object_word_link_object TO ibexa_search_object_word_link_object;
-ALTER TABLE ibexa_search_object_word_link RENAME INDEX ezsearch_object_word_link_identifier TO ibexa_search_object_word_link_identifier;
-ALTER TABLE ibexa_search_object_word_link RENAME INDEX ezsearch_object_word_link_integer_value TO ibexa_search_object_word_link_integer_value;
-ALTER TABLE ibexa_search_object_word_link RENAME INDEX ezsearch_object_word_link_word TO ibexa_search_object_word_link_word;
-ALTER TABLE ibexa_search_object_word_link RENAME INDEX ezsearch_object_word_link_frequency TO ibexa_search_object_word_link_frequency;
-
-ALTER TABLE ezsearch_word RENAME TO ibexa_search_word;
-ALTER TABLE ibexa_search_word RENAME INDEX ezsearch_word_word_i TO ibexa_search_word_word_i;
-ALTER TABLE ibexa_search_word RENAME INDEX ezsearch_word_obj_count TO ibexa_search_word_obj_count;
-
-ALTER TABLE ezsection RENAME TO ibexa_section;
-
-ALTER TABLE ezsite_data RENAME TO ibexa_site_data;
-
-ALTER TABLE ezurl RENAME TO ibexa_url;
-ALTER TABLE ibexa_url RENAME INDEX ezurl_url TO ibexa_url_url;
-
-ALTER TABLE ezurl_object_link RENAME TO ibexa_url_content_link;
-ALTER TABLE ibexa_url_content_link RENAME INDEX ezurl_ol_coa_id TO ibexa_url_ol_coa_id;
-ALTER TABLE ibexa_url_content_link RENAME INDEX ezurl_ol_url_id TO ibexa_url_ol_url_id;
-ALTER TABLE ibexa_url_content_link RENAME INDEX ezurl_ol_coa_version TO ibexa_url_ol_coa_version;
-ALTER TABLE ibexa_url_content_link RENAME INDEX ezurl_ol_coa_id_cav TO ibexa_url_ol_coa_id_cav;
-
-ALTER TABLE ezurlalias RENAME TO ibexa_url_alias;
-ALTER TABLE ibexa_url_alias RENAME INDEX ezurlalias_source_md5 TO ibexa_url_alias_source_md5;
-ALTER TABLE ibexa_url_alias RENAME INDEX ezurlalias_wcard_fwd TO ibexa_url_alias_wcard_fwd;
-ALTER TABLE ibexa_url_alias RENAME INDEX ezurlalias_forward_to_id TO ibexa_url_alias_forward_to_id;
-ALTER TABLE ibexa_url_alias RENAME INDEX ezurlalias_imp_wcard_fwd TO ibexa_url_alias_imp_wcard_fwd;
-ALTER TABLE ibexa_url_alias RENAME INDEX ezurlalias_source_url TO ibexa_url_alias_source_url;
-ALTER TABLE ibexa_url_alias RENAME INDEX ezurlalias_desturl TO ibexa_url_alias_desturl;
-
-ALTER TABLE ezurlalias_ml RENAME TO ibexa_url_alias_ml;
-ALTER TABLE ibexa_url_alias_ml RENAME INDEX ezurlalias_ml_actt_org_al TO ibexa_url_alias_ml_actt_org_al;
-ALTER TABLE ibexa_url_alias_ml RENAME INDEX ezurlalias_ml_text_lang TO ibexa_url_alias_ml_text_lang;
-ALTER TABLE ibexa_url_alias_ml RENAME INDEX ezurlalias_ml_par_act_id_lnk TO ibexa_url_alias_ml_par_act_id_lnk;
-ALTER TABLE ibexa_url_alias_ml RENAME INDEX ezurlalias_ml_par_lnk_txt TO ibexa_url_alias_ml_par_lnk_txt;
-ALTER TABLE ibexa_url_alias_ml RENAME INDEX ezurlalias_ml_act_org TO ibexa_url_alias_ml_act_org;
-ALTER TABLE ibexa_url_alias_ml RENAME INDEX ezurlalias_ml_text TO ibexa_url_alias_ml_text;
-ALTER TABLE ibexa_url_alias_ml RENAME INDEX ezurlalias_ml_link TO ibexa_url_alias_ml_link;
-ALTER TABLE ibexa_url_alias_ml RENAME INDEX ezurlalias_ml_id TO ibexa_url_alias_ml_id;
-
-ALTER TABLE ezurlalias_ml_incr RENAME TO ibexa_url_alias_ml_incr;
-
-ALTER TABLE ezurlwildcard RENAME TO ibexa_url_wildcard;
-
-ALTER TABLE ezuser RENAME TO ibexa_user;
-ALTER TABLE ibexa_user RENAME INDEX ezuser_login TO ibexa_user_login;
-
-ALTER TABLE ezuser_accountkey RENAME TO ibexa_user_accountkey;
-
-ALTER TABLE ezuser_role RENAME TO ibexa_user_role;
-ALTER TABLE ibexa_user_role RENAME INDEX ezuser_role_role_id TO ibexa_user_role_role_id;
-ALTER TABLE ibexa_user_role RENAME INDEX ezuser_role_contentobject_id TO ibexa_user_role_contentobject_id;
-
-ALTER TABLE ezuser_setting RENAME TO ibexa_user_setting;
-
-ALTER TABLE ibexa_content_bookmark DROP FOREIGN KEY ezcontentbrowsebookmark_user_fk;
-ALTER TABLE ibexa_content_bookmark ADD CONSTRAINT ibexa_content_bookmark_user_fk FOREIGN KEY (user_id) REFERENCES ibexa_user(contentobject_id) ON DELETE CASCADE;
-
--- Rename contentclass_id column
-ALTER TABLE ibexa_content_type_field_definition RENAME COLUMN contentclass_id TO content_type_id;
-ALTER TABLE ibexa_content_type_group_assignment RENAME COLUMN contentclass_id TO content_type_id;
-ALTER TABLE ibexa_content_type_name RENAME COLUMN contentclass_id TO content_type_id;
-ALTER TABLE ibexa_content RENAME COLUMN contentclass_id TO content_type_id;
-ALTER TABLE ibexa_search_object_word_link RENAME COLUMN contentclass_id TO content_type_id;
-
--- Update content type version to status
-ALTER TABLE ibexa_content_type RENAME INDEX ibexa_content_type_version TO ibexa_content_type_status;
-ALTER TABLE ibexa_content_type RENAME COLUMN version TO status;
-
-ALTER TABLE ibexa_content_type_field_definition RENAME COLUMN version TO status;
-
-ALTER TABLE ibexa_content_type_field_definition_ml RENAME COLUMN version TO status;
-
-ALTER TABLE ibexa_content_type_group_assignment RENAME COLUMN contentclass_version TO content_type_status;
-ALTER TABLE ibexa_content_type_name RENAME COLUMN contentclass_version TO content_type_status;
-
--- Rename user invitations tables
-ALTER TABLE ibexa_user_invitations RENAME TO ibexa_user_invitation;
-ALTER TABLE ibexa_user_invitation RENAME INDEX ibexa_user_invitations_email_idx TO ibexa_user_invitation_email_idx;
-ALTER TABLE ibexa_user_invitation RENAME INDEX ibexa_user_invitations_hash_idx TO ibexa_user_invitation_hash_idx;
-ALTER TABLE ibexa_user_invitation RENAME INDEX ibexa_user_invitations_email_uindex TO ibexa_user_invitation_email_uindex;
-ALTER TABLE ibexa_user_invitation RENAME INDEX ibexa_user_invitations_hash_uindex TO ibexa_user_invitation_hash_uindex;
-
-ALTER TABLE ibexa_user_invitations_assignments RENAME TO ibexa_user_invitation_assignment;
-ALTER TABLE ibexa_user_invitation_assignment DROP FOREIGN KEY ibexa_user_invitations_assignments_ibexa_user_invitations_id_fk;
-ALTER TABLE ibexa_user_invitation_assignment ADD CONSTRAINT ibexa_user_invitation_assignment_ibexa_user_invitation_id_fk
- FOREIGN KEY (invitation_id) REFERENCES ibexa_user_invitation(id) ON DELETE CASCADE ON UPDATE CASCADE;
-
--- Rename content type field definition ML columns
-ALTER TABLE ibexa_content_type_field_definition_ml RENAME COLUMN contentclass_attribute_id TO content_type_field_definition_id;
-
--- Rename content field columns and indexes
-ALTER TABLE ibexa_content_field RENAME COLUMN contentclassattribute_id TO content_type_field_definition_id;
-ALTER TABLE ibexa_content_field RENAME INDEX ibexa_content_field_classattr_id TO ibexa_content_field_field_definition_id;
-
--- Update content relation columns and indexes
-ALTER TABLE ibexa_content_relation RENAME COLUMN contentclassattribute_id TO content_type_field_definition_id;
-ALTER TABLE ibexa_content_relation RENAME INDEX ibexa_content_relation_cca_id TO ibexa_content_relation_ccfd_id;
-
--- Update search object word link columns
-ALTER TABLE ibexa_search_object_word_link RENAME COLUMN contentclass_attribute_id TO content_type_field_definition_id;
diff --git a/docs/update_and_migration/from_4.6/sql/ibexa_oss_4.6.latest-to-5.0.0_postgresql.sql b/docs/update_and_migration/from_4.6/sql/ibexa_oss_4.6.latest-to-5.0.0_postgresql.sql
deleted file mode 100644
index 9d0ebd1dc2a..00000000000
--- a/docs/update_and_migration/from_4.6/sql/ibexa_oss_4.6.latest-to-5.0.0_postgresql.sql
+++ /dev/null
@@ -1,285 +0,0 @@
--- Rename core related schema
-ALTER TABLE ezbinaryfile RENAME TO ibexa_binary_file;
-
-ALTER TABLE ezcobj_state RENAME TO ibexa_object_state;
-ALTER INDEX ezcobj_state_priority RENAME TO ibexa_object_state_priority;
-ALTER INDEX ezcobj_state_lmask RENAME TO ibexa_object_state_lmask;
-ALTER INDEX ezcobj_state_identifier RENAME TO ibexa_object_state_identifier;
-
-ALTER TABLE ezcobj_state_group RENAME TO ibexa_object_state_group;
-ALTER INDEX ezcobj_state_group_lmask RENAME TO ibexa_object_state_group_lmask;
-ALTER INDEX ezcobj_state_group_identifier RENAME TO ibexa_object_state_group_identifier;
-
-ALTER TABLE ezcobj_state_group_language RENAME TO ibexa_object_state_group_language;
-
-ALTER TABLE ezcobj_state_language RENAME TO ibexa_object_state_language;
-
-ALTER TABLE ezcobj_state_link RENAME TO ibexa_object_state_link;
-
-ALTER TABLE ezcontent_language RENAME TO ibexa_content_language;
-ALTER INDEX ezcontent_language_name RENAME TO ibexa_content_language_name;
-
-ALTER TABLE ezcontentbrowsebookmark RENAME TO ibexa_content_bookmark;
-ALTER INDEX ezcontentbrowsebookmark_location RENAME TO ibexa_content_bookmark_location;
-ALTER INDEX ezcontentbrowsebookmark_user RENAME TO ibexa_content_bookmark_user;
-ALTER INDEX ezcontentbrowsebookmark_user_location RENAME TO ibexa_content_bookmark_user_location;
-
-ALTER TABLE ezcontentclass RENAME TO ibexa_content_type;
-ALTER INDEX ezcontentclass_version RENAME TO ibexa_content_type_version;
-ALTER INDEX ezcontentclass_identifier RENAME TO ibexa_content_type_identifier;
-
-ALTER TABLE ezcontentclass_attribute RENAME TO ibexa_content_type_field_definition;
-ALTER INDEX ezcontentclass_attr_ccid RENAME TO ibexa_content_type_field_definition_ct_id;
-ALTER INDEX ezcontentclass_attr_dts RENAME TO ibexa_content_type_field_definition_dts;
-
-ALTER TABLE ezcontentclass_attribute_ml RENAME TO ibexa_content_type_field_definition_ml;
-ALTER TABLE ibexa_content_type_field_definition_ml DROP CONSTRAINT ezcontentclass_attribute_ml_lang_fk;
-ALTER TABLE ibexa_content_type_field_definition_ml ADD CONSTRAINT ibexa_content_type_field_definition_ml_lang_fk FOREIGN KEY (language_id) REFERENCES ibexa_content_language(id) ON DELETE CASCADE ON UPDATE CASCADE;
-
-ALTER TABLE ezcontentclass_classgroup RENAME TO ibexa_content_type_group_assignment;
-
-ALTER TABLE ezcontentclass_name RENAME TO ibexa_content_type_name;
-
-ALTER TABLE ezcontentclassgroup RENAME TO ibexa_content_type_group;
-
-ALTER TABLE ezcontentobject_tree RENAME TO ibexa_content_tree;
-ALTER INDEX ezcontentobject_tree_p_node_id RENAME TO ibexa_content_tree_p_node_id;
-ALTER INDEX ezcontentobject_tree_path_ident RENAME TO ibexa_content_tree_path_ident;
-ALTER INDEX ezcontentobject_tree_contentobject_id_path_string RENAME TO ibexa_content_tree_contentobject_id_path_string;
-ALTER INDEX ezcontentobject_tree_co_id RENAME TO ibexa_content_tree_co_id;
-ALTER INDEX ezcontentobject_tree_depth RENAME TO ibexa_content_tree_depth;
-ALTER INDEX ezcontentobject_tree_path RENAME TO ibexa_content_tree_path;
-ALTER INDEX modified_subnode RENAME TO ibexa_content_modified_subnode;
-ALTER INDEX ezcontentobject_tree_remote_id RENAME TO ibexa_content_tree_remote_id;
-
-ALTER TABLE ibexa_content_bookmark DROP CONSTRAINT ezcontentbrowsebookmark_location_fk;
-ALTER TABLE ibexa_content_bookmark ADD CONSTRAINT ibexa_content_bookmark_location_fk FOREIGN KEY (node_id) REFERENCES ibexa_content_tree(node_id) ON DELETE CASCADE;
-
-ALTER TABLE ezcontentobject RENAME TO ibexa_content;
-ALTER INDEX ezcontentobject_classid RENAME TO ibexa_content_type_id;
-ALTER INDEX ezcontentobject_lmask RENAME TO ibexa_content_lmask;
-ALTER INDEX ezcontentobject_pub RENAME TO ibexa_content_pub;
-ALTER INDEX ezcontentobject_section RENAME TO ibexa_content_section;
-ALTER INDEX ezcontentobject_currentversion RENAME TO ibexa_content_currentversion;
-ALTER INDEX ezcontentobject_owner RENAME TO ibexa_content_owner;
-ALTER INDEX ezcontentobject_status RENAME TO ibexa_content_status;
-ALTER INDEX ezcontentobject_remote_id RENAME TO ibexa_content_remote_id;
-
-ALTER TABLE ezcontentobject_attribute RENAME TO ibexa_content_field;
-ALTER INDEX ezcontentobject_attribute_co_id_ver_lang_code RENAME TO ibexa_content_field_co_id_ver_lang_code;
-ALTER INDEX ezcontentobject_classattr_id RENAME TO ibexa_content_field_classattr_id;
-ALTER INDEX ezcontentobject_attribute_language_code RENAME TO ibexa_content_field_language_code;
-ALTER INDEX ezcontentobject_attribute_co_id_ver RENAME TO ibexa_content_field_co_id_ver;
-
-ALTER TABLE ezcontentobject_link RENAME TO ibexa_content_relation;
-ALTER INDEX ezco_link_to_co_id RENAME TO ibexa_content_relation_to_co_id;
-ALTER INDEX ezco_link_from RENAME TO ibexa_content_relation_from;
-ALTER INDEX ezco_link_cca_id RENAME TO ibexa_content_relation_cca_id;
-
-ALTER TABLE ezcontentobject_name RENAME TO ibexa_content_name;
-ALTER INDEX ezcontentobject_name_lang_id RENAME TO ibexa_content_name_lang_id;
-ALTER INDEX ezcontentobject_name_cov_id RENAME TO ibexa_content_name_cov_id;
-ALTER INDEX ezcontentobject_name_name RENAME TO ibexa_content_name_name;
-
-ALTER TABLE ezcontentobject_trash RENAME TO ibexa_content_trash;
-ALTER INDEX ezcobj_trash_depth RENAME TO ibexa_content_trash_depth;
-ALTER INDEX ezcobj_trash_p_node_id RENAME TO ibexa_content_trash_p_node_id;
-ALTER INDEX ezcobj_trash_path_ident RENAME TO ibexa_content_trash_path_ident;
-ALTER INDEX ezcobj_trash_co_id RENAME TO ibexa_content_trash_co_id;
-ALTER INDEX ezcobj_trash_modified_subnode RENAME TO ibexa_content_trash_modified_subnode;
-ALTER INDEX ezcobj_trash_path RENAME TO ibexa_content_trash_path;
-
-ALTER TABLE ezcontentobject_version RENAME TO ibexa_content_version;
-ALTER INDEX ezcobj_version_status RENAME TO ibexa_content_version_status;
-ALTER INDEX idx_object_version_objver RENAME TO ibexa_content_version_idx_ver;
-ALTER INDEX ezcontobj_version_obj_status RENAME TO ibexa_content_version_idx_status;
-ALTER INDEX ezcobj_version_creator_id RENAME TO ibexa_content_version_creator_id;
-
-ALTER TABLE ezdfsfile RENAME TO ibexa_dfs_file;
-ALTER INDEX ezdfsfile_name_trunk RENAME TO ibexa_dfs_file_name_trunk;
-ALTER INDEX ezdfsfile_expired_name RENAME TO ibexa_dfs_file_expired_name;
-ALTER INDEX ezdfsfile_name RENAME TO ibexa_dfs_file_name;
-ALTER INDEX ezdfsfile_mtime RENAME TO ibexa_dfs_file_mtime;
-
-ALTER TABLE ezgmaplocation RENAME TO ibexa_map_location;
-ALTER INDEX latitude_longitude_key RENAME TO ibexa_map_location_latitude_longitude_key;
-
-ALTER TABLE ezimagefile RENAME TO ibexa_image_file;
-ALTER INDEX ezimagefile_file RENAME TO ibexa_image_file_file;
-ALTER INDEX ezimagefile_coid RENAME TO ibexa_image_file_coid;
-
-ALTER TABLE ezkeyword RENAME TO ibexa_keyword;
-ALTER INDEX ezkeyword_keyword RENAME TO ibexa_keyword_keyword;
-
-ALTER TABLE ezkeyword_attribute_link RENAME TO ibexa_keyword_field_link;
-ALTER INDEX ezkeyword_attr_link_oaid RENAME TO ibexa_keyword_field_link_oaid;
-ALTER INDEX ezkeyword_attr_link_kid_oaid RENAME TO ibexa_keyword_field_link_kid_oaid;
-ALTER INDEX ezkeyword_attr_link_oaid_ver RENAME TO ibexa_keyword_field_link_oaid_ver;
-
-ALTER TABLE ezmedia RENAME TO ibexa_media;
-
-ALTER TABLE eznode_assignment RENAME TO ibexa_node_assignment;
-ALTER INDEX eznode_assignment_is_main RENAME TO ibexa_node_assignment_is_main;
-ALTER INDEX eznode_assignment_coid_cov RENAME TO ibexa_node_assignment_coid_cov;
-ALTER INDEX eznode_assignment_parent_node RENAME TO ibexa_node_assignment_parent_node;
-ALTER INDEX eznode_assignment_co_version RENAME TO ibexa_node_assignment_co_version;
-
-ALTER TABLE eznotification RENAME TO ibexa_notification;
-ALTER INDEX eznotification_owner_is_pending RENAME TO ibexa_notification_owner_is_pending;
-ALTER INDEX eznotification_owner RENAME TO ibexa_notification_owner;
-
-ALTER TABLE ezpackage RENAME TO ibexa_package;
-
-ALTER TABLE ezpolicy RENAME TO ibexa_policy;
-ALTER INDEX ezpolicy_role_id RENAME TO ibexa_policy_role_id;
-ALTER INDEX ezpolicy_original_id RENAME TO ibexa_policy_original_id;
-
-ALTER TABLE ezpolicy_limitation RENAME TO ibexa_policy_limitation;
-ALTER INDEX policy_id RENAME TO ibexa_policy_id;
-
-ALTER TABLE ezpolicy_limitation_value RENAME TO ibexa_policy_limitation_value;
-ALTER INDEX ezpolicy_limit_value_limit_id RENAME TO ibexa_policy_limit_value_limit_id;
-ALTER INDEX ezpolicy_limitation_value_val RENAME TO ibexa_policy_limitation_value_val;
-
-ALTER TABLE ezpreferences RENAME TO ibexa_user_preference;
-ALTER INDEX ezpreferences_user_id_idx RENAME TO ibexa_user_preference_user_id_idx;
-ALTER INDEX ezpreferences_name RENAME TO ibexa_user_preference_name;
-
-ALTER TABLE ezrole RENAME TO ibexa_role;
-
-ALTER TABLE ezsearch_object_word_link RENAME TO ibexa_search_object_word_link;
-ALTER INDEX ezsearch_object_word_link_object RENAME TO ibexa_search_object_word_link_object;
-ALTER INDEX ezsearch_object_word_link_identifier RENAME TO ibexa_search_object_word_link_identifier;
-ALTER INDEX ezsearch_object_word_link_integer_value RENAME TO ibexa_search_object_word_link_integer_value;
-ALTER INDEX ezsearch_object_word_link_word RENAME TO ibexa_search_object_word_link_word;
-ALTER INDEX ezsearch_object_word_link_frequency RENAME TO ibexa_search_object_word_link_frequency;
-
-ALTER TABLE ezsearch_word RENAME TO ibexa_search_word;
-ALTER INDEX ezsearch_word_word_i RENAME TO ibexa_search_word_word_i;
-ALTER INDEX ezsearch_word_obj_count RENAME TO ibexa_search_word_obj_count;
-
-ALTER TABLE ezsection RENAME TO ibexa_section;
-
-ALTER TABLE ezsite_data RENAME TO ibexa_site_data;
-
-ALTER TABLE ezurl RENAME TO ibexa_url;
-ALTER INDEX ezurl_url RENAME TO ibexa_url_url;
-
-ALTER TABLE ezurl_object_link RENAME TO ibexa_url_content_link;
-ALTER INDEX ezurl_ol_coa_id RENAME TO ibexa_url_ol_coa_id;
-ALTER INDEX ezurl_ol_url_id RENAME TO ibexa_url_ol_url_id;
-ALTER INDEX ezurl_ol_coa_version RENAME TO ibexa_url_ol_coa_version;
-ALTER INDEX ezurl_ol_coa_id_cav RENAME TO ibexa_url_ol_coa_id_cav;
-
-ALTER TABLE ezurlalias RENAME TO ibexa_url_alias;
-ALTER INDEX ezurlalias_source_md5 RENAME TO ibexa_url_alias_source_md5;
-ALTER INDEX ezurlalias_wcard_fwd RENAME TO ibexa_url_alias_wcard_fwd;
-ALTER INDEX ezurlalias_forward_to_id RENAME TO ibexa_url_alias_forward_to_id;
-ALTER INDEX ezurlalias_imp_wcard_fwd RENAME TO ibexa_url_alias_imp_wcard_fwd;
-ALTER INDEX ezurlalias_source_url RENAME TO ibexa_url_alias_source_url;
-ALTER INDEX ezurlalias_desturl RENAME TO ibexa_url_alias_desturl;
-
-ALTER TABLE ezurlalias_ml RENAME TO ibexa_url_alias_ml;
-ALTER INDEX ezurlalias_ml_actt_org_al RENAME TO ibexa_url_alias_ml_actt_org_al;
-ALTER INDEX ezurlalias_ml_text_lang RENAME TO ibexa_url_alias_ml_text_lang;
-ALTER INDEX ezurlalias_ml_par_act_id_lnk RENAME TO ibexa_url_alias_ml_par_act_id_lnk;
-ALTER INDEX ezurlalias_ml_par_lnk_txt RENAME TO ibexa_url_alias_ml_par_lnk_txt;
-ALTER INDEX ezurlalias_ml_act_org RENAME TO ibexa_url_alias_ml_act_org;
-ALTER INDEX ezurlalias_ml_text RENAME TO ibexa_url_alias_ml_text;
-ALTER INDEX ezurlalias_ml_link RENAME TO ibexa_url_alias_ml_link;
-ALTER INDEX ezurlalias_ml_id RENAME TO ibexa_url_alias_ml_id;
-
-ALTER TABLE ezurlalias_ml_incr RENAME TO ibexa_url_alias_ml_incr;
-
-ALTER TABLE ezurlwildcard RENAME TO ibexa_url_wildcard;
-
-ALTER TABLE ezuser RENAME TO ibexa_user;
-ALTER INDEX ezuser_login RENAME TO ibexa_user_login;
-
-ALTER TABLE ezuser_accountkey RENAME TO ibexa_user_accountkey;
-
-ALTER TABLE ezuser_role RENAME TO ibexa_user_role;
-ALTER INDEX ezuser_role_role_id RENAME TO ibexa_user_role_role_id;
-ALTER INDEX ezuser_role_contentobject_id RENAME TO ibexa_user_role_contentobject_id;
-
-ALTER TABLE ezuser_setting RENAME TO ibexa_user_setting;
-
-ALTER TABLE ibexa_content_bookmark DROP CONSTRAINT ezcontentbrowsebookmark_user_fk;
-ALTER TABLE ibexa_content_bookmark ADD CONSTRAINT ibexa_content_bookmark_user_fk FOREIGN KEY (user_id) REFERENCES ibexa_user(contentobject_id) ON DELETE CASCADE;
-
--- Rename contentclass_id column
-ALTER TABLE ibexa_content_type_field_definition RENAME COLUMN contentclass_id TO content_type_id;
-ALTER TABLE ibexa_content_type_group_assignment RENAME COLUMN contentclass_id TO content_type_id;
-ALTER TABLE ibexa_content_type_name RENAME COLUMN contentclass_id TO content_type_id;
-ALTER TABLE ibexa_content RENAME COLUMN contentclass_id TO content_type_id;
-ALTER TABLE ibexa_search_object_word_link RENAME COLUMN contentclass_id TO content_type_id;
-
--- Update content type version to status
-ALTER INDEX ibexa_content_type_version RENAME TO ibexa_content_type_status;
-ALTER TABLE ibexa_content_type RENAME COLUMN version TO status;
-
-ALTER TABLE ibexa_content_type_field_definition RENAME COLUMN version TO status;
-
-ALTER TABLE ibexa_content_type_field_definition_ml RENAME COLUMN version TO status;
-
-ALTER TABLE ibexa_content_type_group_assignment RENAME COLUMN contentclass_version TO content_type_status;
-ALTER TABLE ibexa_content_type_name RENAME COLUMN contentclass_version TO content_type_status;
-
--- Rename user invitations tables
-ALTER TABLE ibexa_user_invitations RENAME TO ibexa_user_invitation;
-ALTER INDEX ibexa_user_invitations_email_idx RENAME TO ibexa_user_invitation_email_idx;
-ALTER INDEX ibexa_user_invitations_hash_idx RENAME TO ibexa_user_invitation_hash_idx;
-ALTER INDEX ibexa_user_invitations_email_uindex RENAME TO ibexa_user_invitation_email_uindex;
-ALTER INDEX ibexa_user_invitations_hash_uindex RENAME TO ibexa_user_invitation_hash_uindex;
-
-ALTER TABLE ibexa_user_invitations_assignments RENAME TO ibexa_user_invitation_assignment;
-ALTER TABLE ibexa_user_invitation_assignment DROP CONSTRAINT ibexa_user_invitations_assignments_ibexa_user_invitations_id_fk;
-ALTER TABLE ibexa_user_invitation_assignment ADD CONSTRAINT ibexa_user_invitation_assignment_ibexa_user_invitation_id_fk
- FOREIGN KEY (invitation_id) REFERENCES ibexa_user_invitation(id) ON DELETE CASCADE ON UPDATE CASCADE;
-
--- Rename content type field definition ML columns
-ALTER TABLE ibexa_content_type_field_definition_ml RENAME COLUMN contentclass_attribute_id TO content_type_field_definition_id;
-
--- Rename content field columns and indexes
-ALTER TABLE ibexa_content_field RENAME COLUMN contentclassattribute_id TO content_type_field_definition_id;
-ALTER INDEX ibexa_content_field_classattr_id RENAME TO ibexa_content_field_field_definition_id;
-
--- Update content relation columns and indexes
-ALTER TABLE ibexa_content_relation RENAME COLUMN contentclassattribute_id TO content_type_field_definition_id;
-ALTER INDEX ibexa_content_relation_cca_id RENAME TO ibexa_content_relation_ccfd_id;
-
--- Update search object word link columns
-ALTER TABLE ibexa_search_object_word_link RENAME COLUMN contentclass_attribute_id TO content_type_field_definition_id;
-
--- Rename core sequence names to match new table names
-ALTER SEQUENCE ezcobj_state_group_id_seq RENAME TO ibexa_object_state_group_id_seq;
-ALTER SEQUENCE ezcobj_state_id_seq RENAME TO ibexa_object_state_id_seq;
-ALTER SEQUENCE ezcontentbrowsebookmark_id_seq RENAME TO ibexa_content_bookmark_id_seq;
-ALTER SEQUENCE ezcontentclass_attribute_id_seq RENAME TO ibexa_content_type_field_definition_id_seq;
-ALTER SEQUENCE ezcontentclass_id_seq RENAME TO ibexa_content_type_id_seq;
-ALTER SEQUENCE ezcontentclassgroup_id_seq RENAME TO ibexa_content_type_group_id_seq;
-ALTER SEQUENCE ezcontentobject_attribute_id_seq RENAME TO ibexa_content_field_id_seq;
-ALTER SEQUENCE ezcontentobject_id_seq RENAME TO ibexa_content_id_seq;
-ALTER SEQUENCE ezcontentobject_link_id_seq RENAME TO ibexa_content_relation_id_seq;
-ALTER SEQUENCE ezcontentobject_tree_node_id_seq RENAME TO ibexa_content_tree_node_id_seq;
-ALTER SEQUENCE ezcontentobject_version_id_seq RENAME TO ibexa_content_version_id_seq;
-ALTER SEQUENCE ezimagefile_id_seq RENAME TO ibexa_image_file_id_seq;
-ALTER SEQUENCE ezkeyword_attribute_link_id_seq RENAME TO ibexa_keyword_field_link_id_seq;
-ALTER SEQUENCE ezkeyword_id_seq RENAME TO ibexa_keyword_id_seq;
-ALTER SEQUENCE eznode_assignment_id_seq RENAME TO ibexa_node_assignment_id_seq;
-ALTER SEQUENCE eznotification_id_seq RENAME TO ibexa_notification_id_seq;
-ALTER SEQUENCE ezpackage_id_seq RENAME TO ibexa_package_id_seq;
-ALTER SEQUENCE ezpolicy_id_seq RENAME TO ibexa_policy_id_seq;
-ALTER SEQUENCE ezpolicy_limitation_id_seq RENAME TO ibexa_policy_limitation_id_seq;
-ALTER SEQUENCE ezpolicy_limitation_value_id_seq RENAME TO ibexa_policy_limitation_value_id_seq;
-ALTER SEQUENCE ezpreferences_id_seq RENAME TO ibexa_user_preference_id_seq;
-ALTER SEQUENCE ezrole_id_seq RENAME TO ibexa_role_id_seq;
-ALTER SEQUENCE ezsearch_object_word_link_id_seq RENAME TO ibexa_search_object_word_link_id_seq;
-ALTER SEQUENCE ezsearch_word_id_seq RENAME TO ibexa_search_word_id_seq;
-ALTER SEQUENCE ezsection_id_seq RENAME TO ibexa_section_id_seq;
-ALTER SEQUENCE ezurl_id_seq RENAME TO ibexa_url_id_seq;
-ALTER SEQUENCE ezurlalias_id_seq RENAME TO ibexa_url_alias_id_seq;
-ALTER SEQUENCE ezurlalias_ml_incr_id_seq RENAME TO ibexa_url_alias_ml_incr_id_seq;
-ALTER SEQUENCE ezurlwildcard_id_seq RENAME TO ibexa_url_wildcard_id_seq;
-ALTER SEQUENCE ezuser_accountkey_id_seq RENAME TO ibexa_user_accountkey_id_seq;
-ALTER SEQUENCE ezuser_role_id_seq RENAME TO ibexa_user_role_id_seq;
diff --git a/docs/update_and_migration/from_4.6/update_from_4.6.md b/docs/update_and_migration/from_4.6/update_from_4.6.md
deleted file mode 100644
index 4170303c0be..00000000000
--- a/docs/update_and_migration/from_4.6/update_from_4.6.md
+++ /dev/null
@@ -1,1005 +0,0 @@
----
-description: Update your installation to the latest v4.6 version from an earlier v4.6 version.
-month_change: false
----
-
-# Update from v4.6.x to v4.6.latest
-
-## Update the application
-
-Note which version you actually have before starting.
-
-First, run:
-
-=== "[[= product_name_headless =]]"
-
- ``` bash
- composer require ibexa/headless:[[= latest_tag_4_6 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/headless --force -v
- ```
-=== "[[= product_name_exp =]]"
-
- ``` bash
- composer require ibexa/experience:[[= latest_tag_4_6 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/experience --force -v
- ```
-=== "[[= product_name_com =]]"
-
- ``` bash
- composer require ibexa/commerce:[[= latest_tag_4_6 =]] --with-all-dependencies --no-scripts
- composer recipes:install ibexa/commerce --force -v
- ```
-
-Then execute the instructions below starting from the version you're upgrading from.
-
-!!! caution "Deprecation messages on PHP 8.2 and newer"
-
- To avoid deprecations when using PHP 8.2, 8.3, or 8.4, run the following commands:
-
- ``` bash
- composer config extra.runtime.error_handler "\\Ibexa\\Contracts\\Core\\MVC\\Symfony\\ErrorHandler\\Php82HideDeprecationsErrorHandler"
- composer dump-autoload
- ```
-
-
-
-!!! caution "Security advisories"
-
- If you encounter security advisories that prevent the update, see [Package security advisories](security_advisories.md#package-security-advisories).
-
-## v4.6.1
-
-No additional steps needed.
-
-## v4.6.2
-
-### Database update
-
-Run the following scripts:
-
-=== "MySQL"
-
- ``` bash
- mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/ibexa-4.6.1-to-4.6.2.sql
- ```
-
-=== "PostgreSQL"
-
- ``` bash
- psql < vendor/ibexa/installer/upgrade/db/postgresql/ibexa-4.6.1-to-4.6.2.sql
- ```
-
-## v4.6.3
-
-### Notification config update
-
-The configuration of the package `ibexa/notifications` has changed.
-This package is required by other packages, such as `ibexa/connector-actito` for [Transactional emails](https://doc.ibexa.co/en/4.6/commerce/transactional_emails/transactional_emails/), `ibexa/payment`, or `ibexa/user`.
-
-If you are customizing the configuration of the `ibexa/notifications` package, and using SiteAccess aware configuration to change the `Notification` subscriptions, you have to manually change your configuration by using the new node name `notifier` instead of the old `notifications`.
-
-For example, the following v4.6.2 config:
-
-```yaml hl_lines="4"
-ibexa:
- system:
- my_siteacces_name:
- notifications: # old
- subscriptions:
- Ibexa\Contracts\Shipping\Notification\ShipmentStatusChange:
- channels:
- - sms
-```
-
-becomes the following from v4.6.3:
-
-```yaml hl_lines="4"
-ibexa:
- system:
- my_siteacces_name:
- notifier: # new
- subscriptions:
- Ibexa\Contracts\Shipping\Notification\ShipmentStatusChange:
- channels:
- - sms
-```
-
-## v4.6.4
-
-### Database update
-
-Run the following scripts:
-
-=== "MySQL"
-
- ``` bash
- mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/ibexa-4.6.3-to-4.6.4.sql
- ```
-
-=== "PostgreSQL"
-
- ``` bash
- psql < vendor/ibexa/installer/upgrade/db/postgresql/ibexa-4.6.3-to-4.6.4.sql
- ```
-
-## v4.6.5
-
-No additional steps needed.
-
-## v4.6.6
-
-No additional steps needed.
-
-## v4.6.7
-
-No additional steps needed.
-
-## v4.6.8
-
-No additional steps needed.
-
-## v4.6.9
-
-No additional steps needed.
-
-## v4.6.10
-
-No additional steps needed.
-
-## v4.6.11
-
-### Ibexa Cloud
-
-Update Platform.sh configuration for PHP and Varnish.
-
-Generate new configuration with the following command:
-
-```bash
-composer ibexa:setup --platformsh
-```
-
-Review the changes applied to `.platform.app.yaml` and `.platform/`,
-merge with your custom settings if needed, and commit them to Git.
-
-## v4.6.12
-
-If the new bundle `ibexa/core-search` has not been added by the recipes, enable it by adding the following line in `config/bundles.php`:
-
-``` php
-return [
- // ...
- Ibexa\Bundle\CoreSearch\IbexaCoreSearchBundle::class => ['all' => true],
-];
-```
-
-## v4.6.13
-
-This release comes with a command to clean up duplicated entries in the `ezcontentobject_attribute` table, which were created due to an issue related to previewing content in different languages.
-
-If you're affected, remove the duplicated entries by running the following command:
-
-``` bash
-php bin/console ibexa:content:remove-duplicate-fields
-```
-
-!!! caution
-
- Remember about [**proper database backup**](backup.md) before running the command in the production environment.
-
-You can customize the behavior of the command with the following options:
-
-- `--batch-size` or `-b` - number of attributes affected per iteration. Default value = 10000.
-- `--max-iterations` or `-i` - maximum iterations count. Default value = -1 (unlimited).
-- `--sleep` or `-s` - wait time between iterations, in milliseconds. Default value = 0.
-
-## v4.6.14
-
-### Security
-
-This release contains security fixes.
-For more information, see [the published security advisory](https://developers.ibexa.co/security-advisories/ibexa-sa-2024-006-vulnerabilities-in-content-name-pattern-commerce-shop-and-varnish-vhost-templates).
-For each of the following fixes, evaluate the vulnerability to determine whether you might have been affected.
-If so, take appropriate action, for example by [revoking passwords](https://doc.ibexa.co/en/4.6/users/passwords/#revoking-passwords) for all affected users.
-
-#### BREACH vulnerability
-
-The [BREACH](https://www.breachattack.com/) attack is a security vulnerability against HTTPS when using HTTP compression.
-
-If you're using Varnish, update the VCL configuration to stop compressing both the Ibexa DXP's REST API and JSON responses from your backend.
-Fastly users are not affected.
-
-=== "Varnish on [[= product_name_cloud =]]"
-
- Update Platform.sh configuration and scripts.
-
- Generate new configuration with the following command:
-
- ```bash
- composer ibexa:setup --platformsh
- ```
-
- Review the changes, merge with your custom settings if needed, and commit them to Git before deployment.
-
-=== "Varnish 6"
-
- Update your Varnish VCL file to align it with the [`vendor/ibexa/http-cache/docs/varnish/vcl/varnish6.vcl`](https://github.com/ibexa/http-cache/blob/4.6/docs/varnish/vcl/varnish6.vcl) file.
-
-=== "Varnish 7"
-
- Update your Varnish VCL file to align it with the [`vendor/ibexa/http-cache/docs/varnish/vcl/varnish7.vcl`](https://github.com/ibexa/http-cache//blob/4.6/docs/varnish/vcl/varnish7.vcl) file.
- ```
-
-If you're not using a reverse proxy like Varnish or Fastly, adjust the compressed `Content-Type` in the web server configuration.
-For more information, see the [updated Apache and nginx template configuration](https://github.com/ibexa/post-install/pull/86/files).
-
-#### XSS in Content name pattern
-
-There are no additional update steps to execute.
-
-#### Outdated version of jQuery in ibexa/commerce-shop package
-
-Only users of the [old Commerce solution](update_from_4.3_old_commerce.md) are affected.
-There are no additional update steps to execute.
-
-### Other changes
-
-#### Disable translations of identifiers in Product Catalog's categories
-
-The possibility of translating identifiers and parent information for the Categories in Product Catalog might lead to data consistency issues.
-
-Disable it by running the following migration:
-
-``` bash
-php bin/console ibexa:migrations:import vendor/ibexa/product-catalog/src/bundle/Resources/migrations/2024_07_25_07_00_non_translatable_product_categories.yaml --name=2024_07_25_07_00_non_translatable_product_categories.yaml
-php bin/console ibexa:migrations:migrate --file=2024_07_25_07_00_non_translatable_product_categories.yaml
-```
-
-#### Update web server configuration
-
-Adjust the web server configuration to prevent direct access to the `index.php` file when using URLs consisting of multiple path segments.
-
-See [the updated Apache and nginx template files](https://github.com/ibexa/post-install/pull/70/files) for more information.
-
-## v4.6.15
-
-### Removed `symfony/orm-pack` and `symfony/serializer-pack` dependencies
-
-This release no longer directly requires the `symfony/orm-pack` and `symfony/serializer-pack` Composer dependencies, which can remove some dependencies from your project during the update process.
-
-If you rely on them in your project, for example by using Symfony's `ObjectNormalizer` to create your own REST endpoints, run the following command before updating [[= product_name_base =]] packages:
-
-``` bash
-composer require symfony/serializer-pack symfony/orm-pack
-```
-
-Then, verify that Symfony Flex installed the versions you were using before.
-
-## v4.6.16
-
-No additional steps needed.
-
-## v4.6.17
-
-### Security
-
-This release contains security fixes.
-For more information, see [the published security advisory](https://developers.ibexa.co/security-advisories/ibexa-sa-2025-001-vulnerabilities-in-shopping-cart-and-publish-unscheduling).
-For each of the following fixes, evaluate the vulnerability to determine whether you might have been affected.
-If so, take appropriate action.
-
-#### CartOwner permission limitation exposes carts
-
-This release fixes a critical vulnerability in the REST API regarding shopping carts.
-There are no additional update steps to execute.
-
-#### Unauthorized user can cancel scheduled publish events
-
-This release fixes vulnerability in publish scheduling, ensures that `edit/create` policies are correctly checked.
-There are no additional update steps to execute.
-
-#### Dependency upgrades
-
-This release upgrades the requirements for [Twig to v3.19](https://github.com/twigphp/Twig/security/advisories/GHSA-3xg3-cgvq-2xwr) and [PHPSpreadsheet to v1.29.9](https://github.com/PHPOffice/PhpSpreadsheet/security), resolving several vulnerabilities of varying severity in those dependencies.
-There are no additional update steps to execute.
-
-## v4.6.18
-
-No additional steps needed.
-
-## v4.6.19
-
-### Security
-
-This release fixes a critical vulnerability in the [RichText field type](richtextfield.md).
-By entering a maliciously crafted input into the RichText field type's XML, the attacker could perform an attack using [XML external entity (XXE) injection](https://portswigger.net/web-security/xxe).
-To exploit this vulnerability, an attacker would need to have edit permission to content with RichText fields.
-
-For more information, see the [published security advisory IBEXA-SA-2025-002](https://developers.ibexa.co/security-advisories/ibexa-sa-2025-002-xxe-vulnerability-in-richtext).
-
-Evaluate the vulnerability to determine whether you might have been affected.
-If so, take appropriate action.
-There are no additional update steps to execute.
-
-### [[= product_name_base =]] Rector
-
-The new [Ibexa Rector](https://github.com/ibexa/rector/) package is now available.
-It's an optional package based on [Rector](https://getrector.com/) and comes with additional rules for working with Ibexa code.
-
-You can use it to get rid of PHP code deprecations and start preparing your project for the next major release.
-
-!!! note
-
- [[= product_name_base =]] Rector requires PHP 8.3 and you must upgrade your codebase first.
- To do it, you can use Rector and the [existing PHP upgrade sets](https://getrector.com/documentation/integration-to-new-project#content-2-upgrade-php-first).
-
-To get started with [[= product_name_base =]] Rector, execute the following steps:
-
-1\. Add the Composer dependency:
-
-``` bash
-composer require --dev ibexa/rector:^4.6
-```
-
-2\. Adjust the created `rector.php` configuration file to match your project structure
-
-3\. Run Rector in the dry-run mode to preview the changes:
-
-``` bash
-vendor/bin/rector --dry-run
-```
-
-4\. Run Rector:
-
-``` bash
-vendor/bin/rector
-```
-
-## v4.6.20
-
-No additional steps needed.
-
-## v4.6.21
-
-### Security
-
-This security advisory resolves XSS vulnerabilities in several parts of the back office of Ibexa DXP.
-Back office access and varying levels of editing and management permissions are required to exploit these vulnerabilities.
-
-For more information, see the [security advisory IBEXA-SA-2025-003](https://developers.ibexa.co/security-advisories/ibexa-sa-2025-003-xss-vulnerabilities-in-back-office).
-
-Evaluate the vulnerability to determine whether you might have been affected.
-If so, take appropriate action.
-There are no additional update steps to execute.
-
-### Database update
-
-Run the following scripts:
-
-=== "MySQL"
-
- ``` bash
- mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/ibexa-4.6.20-to-4.6.21.sql
- ```
-
-=== "PostgreSQL"
-
- ``` bash
- psql < vendor/ibexa/installer/upgrade/db/postgresql/ibexa-4.6.20-to-4.6.21.sql
- ```
-
-## v4.6.22
-
-### Added support for Solr 9
-
-This release adds support for [Solr 9](requirements.md#search).
-
-To update Solr within an existing Ibexa DXP project, first refer to the [Solr 9 upgrade planning](https://solr.apache.org/guide/solr/latest/upgrade-notes/major-changes-in-solr-9.html) instructions.
-
-Then, follow the [instructions for setting up Solr 9 with Ibexa DXP](https://doc.ibexa.co/en/4.6/search/search_engines/solr_search_engine/install_solr/#configure-and-start-solr) and merge them with your custom configuration.
-
-Changes include:
-
-1. Configuration files
-
- - the `schema.xml` configuration file became [`managed-schema.xml`](https://solr.apache.org/guide/solr/latest/upgrade-notes/major-changes-in-solr-6.html#managed-schema-is-now-the-default)
- - the [removed `LatLonType` field is replaced by the `LatLonPointSpatialField` field](https://solr.apache.org/guide/solr/latest/upgrade-notes/major-changes-in-solr-7.html#deprecations-and-removed-features)
-
-2. New [Solr version parameter](install_solr.md#configure-solr-version)
-
-Once Solr 9 is fully configured, [refresh the search index](reindex_search.md).
-
-### Set character set for activity log tables [[% include 'snippets/experience_badge.md' %]] [[% include 'snippets/commerce_badge.md' %]]
-
-When using MySQL or MariaDB, run the following script to ensure correct character set for activity log tables:
-
-=== "MySQL"
-
- ``` bash
- mysql -u -p < vendor/ibexa/installer/upgrade/db/mysql/ibexa-4.6.21-to-4.6.22.sql
- ```
-
-## v4.6.23
-
-No additional steps needed.
-
-## v4.6.24
-
-### Database update
-
-=== "MySQL"
-
- ``` bash
- mysql -u -p