Skip to content

Update with new Commerce packages

This update procedure applies if you have a v4.3 installation, and you don't use Commerce packages.

Temporary need of Composer conflict

To go through this update, map the conflicting packages in your composer.json file as following:

1
2
3
4
"conflict": {
    "jms/serializer": ">=3.30.0",
    "gedmo/doctrine-extensions": ">=3.12.0"
},
These entries can be removed after fully upgrading to v4.6 LTS.

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 (v4.3.5).

Update the application to v4.3.latest

Run:

1
composer require ibexa/content:4.3.5 --with-all-dependencies --no-scripts
1
composer require ibexa/experience:4.3.5 --with-all-dependencies --no-scripts
1
composer require ibexa/commerce:4.3.5 --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:

1
2
  [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 to define a replacement for deprecated field types in config/services.yaml:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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:

1
2
composer require ibexa/content:4.4.4 --with-all-dependencies --no-scripts
composer recipes:install ibexa/content --force -v
1
2
composer require ibexa/experience:4.4.4 --with-all-dependencies --no-scripts
composer recipes:install ibexa/experience --force -v
1
2
composer require ibexa/commerce:4.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:

1
2
3
4
5
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:

1
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.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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.

1
2
3
4
5
6
7
8
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
1
2
3
4
5
6
7
8
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
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
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 Ibexa Commerce. Ibexa Content and Ibexa Experience don't require the database update.

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.

Apply the following database update scripts:

1
mysql -u <username> -p <password> <database_name> < vendor/ibexa/installer/upgrade/db/mysql/commerce/ibexa-4.3.latest-to-4.4.0.sql
1
psql <database_name> < 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_.

To switch to the right database, issue the following command:

1
USE <database_name>;

Then, to remove all the old tables, run the following queries:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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;

To switch to the right database, issue the following command:

1
\connect <database_name>;

Then, to remove all the old tables, run the following queries:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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, unless you can verify based on your log files that the vulnerability has not been exploited, you should revoke passwords for all affected users.

Finish code update

Finish the code update by running:

1
composer run post-install-cmd

Run data migration

Customer Portal self-registration

If you're using Ibexa Experience or Ibexa Commerce, you can now run data migration required by the Customer Portal applications feature to finish the update process:

1
2
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