Skip to content
180 changes: 180 additions & 0 deletions docs/dam/integration_with_dxp.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
---

Check warning on line 1 in docs/dam/integration_with_dxp.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/dam/integration_with_dxp.md#L1

[Ibexa.ReadingLevel] The grade level is 6.18. Aim for 8th grade or lower by using shorter sentences and words.
Raw output
{"message": "[Ibexa.ReadingLevel] The grade level is 6.18. Aim for 8th grade or lower by using shorter sentences and words.", "location": {"path": "docs/dam/integration_with_dxp.md", "range": {"start": {"line": 1, "column": 1}}}, "severity": "WARNING"}
description: Integrate DAM with your Ibexa DXP project to use an effective tool for managing marketing assets.
---


# Integrate DAM with DXP

DAM integration with [[= product_name =]] is dedicated to [[= product_name_base =]] users who also use Actito services. It enables using assets repository stored in the DXP in the Actito platform to build and insert marketing assets into campaign emails.
For more information, see [Actito documentation](https://cdn3.actito.com/fe/actito-documentation/docs/Using_Assets_from_a_DAM/#connection-to-ibexa).

## Enable Elasticsearch or Solr

To ensure proper indexing and search results, DAM requires one of
the following search engines on your server:

- [Elasticsearch](install_elastic_search.md)
- [Solr](install_solr.md)


## Enable OAuth Servers

Next, enable 0Auth Server authentication. To do it, follow steps up to the [Client section](oauth_server.md).

## Install DAM package

Install dedicated DAM `ibexa/dam-user` package into your [[= product_name =]] instance.

To install, run the following command:

```bash
composer require ibexa/dam-user
```

Add the `ibexa_dam_oauth2_client_user` table to the database:

```bash
php bin/console ibexa:doctrine:schema:dump-sql vendor/ibexa/dam-user/src/bundle/Resources/config/schema.yaml | mysql -u <username> -p <database_name>
```

Next, add technical users, required by DAM to your [[= product_name =]] instance.

To do it, first, import the migration file:

```bash
php bin/console ibexa:migrations:import vendor/ibexa/dam-user/src/bundle/Resources/migrations/2024_07_11_09_10_dam_technical_users.yaml
```

Next, run migrations:

```bash
php bin/console ibexa:migrations:migrate
```

Two new user roles and users should be now visibile in the Back Office.

Check warning on line 54 in docs/dam/integration_with_dxp.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/dam/integration_with_dxp.md#L54

[Ibexa.DontCapitalize] Don't capitalize 'Back Office' if inside the sentence.
Raw output
{"message": "[Ibexa.DontCapitalize] Don't capitalize 'Back Office' if inside the sentence.", "location": {"path": "docs/dam/integration_with_dxp.md", "range": {"start": {"line": 54, "column": 60}}}, "severity": "WARNING"}

Create OAuth2 client for the DXP user:

```bash
php bin/console ibexa:dam:create-oauth2-client <client-name> <user-identifier>
```

## Override admin-ui

Add the following configuration in the `yaml` file, for example, `ibexa_admin_ui_settings.yaml`:

??? note "`ibexa_admin_ui_settings.yaml`"

```yaml
parameters:
# Content Tree Module
ibexa.site_access.config.site_group.content_tree_module.load_more_limit: 30
ibexa.site_access.config.site_group.content_tree_module.children_load_max_limit: 200
ibexa.site_access.config.site_group.content_tree_module.tree_max_depth: 10
ibexa.site_access.config.site_group.content_tree_module.allowed_content_types: []
ibexa.site_access.config.site_group.content_tree_module.ignored_content_types: []
ibexa.site_access.config.site_group.content_tree_module.tree_root_location_id: ~

# Pagination limits
ibexa.site_access.config.site_group.pagination.search_limit: 10
ibexa.site_access.config.site_group.pagination.trash_limit: 10
ibexa.site_access.config.site_group.pagination.section_limit: 10
ibexa.site_access.config.site_group.pagination.language_limit: 10
ibexa.site_access.config.site_group.pagination.role_limit: 10
ibexa.site_access.config.site_group.pagination.content_type_group_limit: 10
ibexa.site_access.config.site_group.pagination.content_type_limit: 10
ibexa.site_access.config.site_group.pagination.role_assignment_limit: 10
ibexa.site_access.config.site_group.pagination.policy_limit: 10
ibexa.site_access.config.site_group.pagination.version_draft_limit: 5
ibexa.site_access.config.site_group.pagination.reverse_relation_limit: 10
ibexa.site_access.config.site_group.pagination.content_system_url_limit: 5
ibexa.site_access.config.site_group.pagination.content_custom_url_limit: 5
ibexa.site_access.config.site_group.pagination.content_role_limit: 5
ibexa.site_access.config.site_group.pagination.content_policy_limit: 5
ibexa.site_access.config.site_group.pagination.bookmark_limit: 10
ibexa.site_access.config.site_group.pagination.notification_limit: 5
ibexa.site_access.config.site_group.pagination.user_settings_limit: 10
ibexa.site_access.config.site_group.pagination.content_draft_limit: 10
ibexa.site_access.config.site_group.pagination.location_limit: 10
ibexa.site_access.config.site_group.pagination.url_wildcards: 10

# Security
ibexa.site_access.config.site_group.security.token_interval_spec: PT1H

# User identifier
ibexa.site_access.config.site_group.user_content_type_identifier: ['user']

# User Group identifier
ibexa.site_access.config.site_group.user_group_content_type_identifier: ['user_group']

# Subtree Operations
ibexa.site_access.config.site_group.subtree_operations.copy_subtree.limit: 100

# Notifications
ibexa.site_access.config.site_group.notifications.error.timeout: 0
ibexa.site_access.config.site_group.notifications.warning.timeout: 0
ibexa.site_access.config.site_group.notifications.success.timeout: 5000
ibexa.site_access.config.site_group.notifications.info.timeout: 0
```

## Add CROSS-ORIGIN config

To integrate DAM you need to add in the `config/packages/nelmio_cors.yaml` following configuration:

```yaml
nelmio_cors:
defaults:
origin_regex: true
allow_origin: ['%env(CORS_ALLOW_ORIGIN)%']
allow_methods: ['GET', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE', 'PUBLISH', 'COPY']
allow_headers: ['Content-Type', 'Authorization', 'X-HTTP-Method-Override']
expose_headers: ['Link']
max_age: 3600
paths:
'^/api/ibexa/v2/':
allow_methods: ['GET', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE', 'PUBLISH', 'COPY']
allow_headers: ['Content-Type', 'Authorization', 'X-HTTP-Method-Override']
```

Next, in the `.env` file provide path with a regular expression:

`CORS_ALLOW_ORIGIN='^https?://(localhost|127\.0\.0\.1|(.+\.acme\.(com|eu)))?(:[0-9]+)?$'`


### Override `nelmio` settings

config/services.yaml

```yaml
nelmio_cors.options_provider.config:
class: '%nelmio_cors.options_provider.config.class%'
arguments:
$paths: '%nelmio_cors.map%'
$defaults: '%nelmio_cors.defaults%'
tags:
-
name: nelmio_cors.options_provider
priority: 255
```

Set the `location ID` to `51`.
```yaml
parameters:
ibexa.dam_app.image.root_location_id: 51
```

Add DAM `ConfigProvider`:

```yaml
app.config.provider.dam_app:
class: Ibexa\AdminUi\UI\Config\Provider\Value
arguments:
$value:
imageRootLocationId: '%ibexa.dam_app.image.root_location_id%'
tags:
- { name: ibexa.admin_ui.config.provider, key: 'damApp' }
```

!!! caution

Check warning on line 179 in docs/dam/integration_with_dxp.md

View workflow job for this annotation

GitHub Actions / vale

[vale] docs/dam/integration_with_dxp.md#L179

[Ibexa.EOLWhitespace] Remove whitespace characters from the end of the line.
Raw output
{"message": "[Ibexa.EOLWhitespace] Remove whitespace characters from the end of the line.", "location": {"path": "docs/dam/integration_with_dxp.md", "range": {"start": {"line": 179, "column": 1}}}, "severity": "WARNING"}
Location ID must be set to 51, if you provide different location ID, your asset library won't be accessible from DAM.
2 changes: 2 additions & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -451,6 +451,8 @@ nav:
- CDP add client-side tracking: cdp/cdp_activation/cdp_add_clientside_tracking.md
- CDP data export schedule: cdp/cdp_data_export_schedule.md
- CDP data customization: cdp/cdp_data_customization.md
- DAM:
- Integration with DXP: dam/integration_with_dxp.md
- Search:
- Search: search/search.md
- Search engines:
Expand Down