Upgrading to 2025.2

Important changes have been introduced in this version at several levels. Please take the time to review the changelog carefully.

Pay special attention to the following sections:

  • PACKAGED_Portal: Default configuration updates

  • Security

 

Structures changes

asset (UPDATED) & assetgrouping (ADDED)

Improvements introduced for unlinked asset copies, paving the way for future asset grouping features.

If you're looking to implement asset linking when copying between a DAM and a creative workflow, here are the steps to follow.:

asset

Fields changes

  • copietravail

    • Tags:

      • Added: rest_api_mass_import_copy_ignore

  • uid

    • Tags:

      • Added: rest_api_mass_import_copy_ignore

  • version

    • Tags:

      • Added: rest_api_mass_import_copy_ignore

  • ai_captionde

    • Tags:

      • Added: rest_api_include

  • tmpsource

    • Tags:

      • Added: rest_api_mass_import_copy_ignore

  • spaces

    • Tags:

      • Added: rest_api_mass_import_copy_ignore

  • portals

    • Tags:

      • Added: rest_api_mass_import_copy_ignore

  • versionsdata

    • Tags:

      • Added: rest_api_mass_import_copy_ignore

  • grouping (added)

    • Type: child

    • Nature: assetgrouping

    • Label:

    • Default value:

    • Order: 7500

    • Remote name:

    • Max size: 0

    • Attachment:

    • In list:

    • Editable: false

    • Viewable: false

    • Mandatory: false

    • Null if empty: false

    • Auto carriage return: false

    • Index: Indexed and stored

    • i18n: false

    • i18n for:

    • Tags: rest_api_mass_import_copy_to_published

  • groupingmaster (added)

    • Type: child

    • Nature: activated

    • Label:

    • Default value: 2

    • Order: 7600

    • Remote name:

    • Max size: 0

    • Attachment:

    • In list:

    • Editable: false

    • Viewable: false

    • Mandatory: false

    • Null if empty: false

    • Auto carriage return: false

    • Index: Not indexed

    • i18n: false

    • i18n for:

    • Tags:


assetgrouping (ADDED)


collaborativespace

https://crossmedia.atlassian.net/browse/WXM-17380

https://crossmedia.atlassian.net/browse/WXM-17602

The UI on space creation/edition has been improved and users are now allowed to transfer space’s ownership and management to an other user.
For these updates, we changed the structure of collaborativespace, primarily reorganizing fields and adding separators.

More info about the UI improvements : Creative workflow installation guide | Add specific properties to spaces structure (collaborativespace)

More info about the space owner transfer : How does Creative Workflow works | Owner transfer (since 2025.2)

Fields changes

  • owner

    • Order: 400 --> 2100

  • parent

    • Order: 500 --> 400

  • child

    • Order: 600 --> 500

  • status

    • Order: 700 --> 600

  • brieffiles

    • Order: 1700 --> 1900

  • itemsapprovals

    • Order: 1800 --> 1700

  • separator_space (added)

    • Type: data

    • Nature:

    • Label:

    • Default value:

    • Order: 700

    • Remote name:

    • Max size: 0

    • Attachment:

    • In list:

    • Editable: false

    • Viewable: false

    • Mandatory: false

    • Null if empty: false

    • Auto carriage return: false

    • Index: Not indexed

    • i18n: false

    • i18n for:

    • Tags:

  • separator_documents (added)

    • Type: data

    • Nature:

    • Label:

    • Default value:

    • Order: 1800

    • Remote name:

    • Max size: 0

    • Attachment:

    • In list:

    • Editable: false

    • Viewable: false

    • Mandatory: false

    • Null if empty: false

    • Auto carriage return: false

    • Index: Not indexed

    • i18n: false

    • i18n for:

    • Tags:

  • separator_ownership (added)

    • Type: data

    • Nature:

    • Label:

    • Default value:

    • Order: 2000

    • Remote name:

    • Max size: 0

    • Attachment:

    • In list:

    • Editable: false

    • Viewable: false

    • Mandatory: false

    • Null if empty: false

    • Auto carriage return: false

    • Index: Not indexed

    • i18n: false

    • i18n for:

    • Tags:

  • separator_otherprops (added)

    • Type: data

    • Nature:

    • Label:

    • Default value:

    • Order: 2200

    • Remote name:

    • Max size: 0

    • Attachment:

    • In list:

    • Editable: false

    • Viewable: false

    • Mandatory: false

    • Null if empty: false

    • Auto carriage return: false

    • Index: Not indexed

    • i18n: false

    • i18n for:

    • Tags:

Faces

Selector

Old selector

Collection<String> faces = new HashSet<String>(); faces.add("mandatory"); faces.add("not_editable"); return faces;

New selector

Collection<String> faces = new HashSet<String>(); faces.add("mandatory"); faces.add("not_editable"); // if user is on BO (params is filled only from the Front-end app) if(params == null || params.isEmpty()) { faces.add("not_editable_bo"); } return faces;
Configuration
  • not_editable_bo

    • added

      • owner

        • Editable: false

        • Viewable: false

        • Mandatory: false

      • owner

        • Editable: false

        • Viewable: false

        • Mandatory: false


massimportitem

Updates made for the asset copy feature : https://crossmedia.atlassian.net/browse/WXM-17538

More info here : Upgrading to 2025.2 | Media Copy to Workspace: MassImport API Update

Fields changes

  • originassetid (added)

    • Type: data

    • Nature:

    • Label:

    • Default value:

    • Order: 7000

    • Remote name:

    • Max size: 0

    • Attachment:

    • In list:

    • Editable: false

    • Viewable: false

    • Mandatory: false

    • Null if empty: false

    • Auto carriage return: false

    • Index: Indexed and stored

    • i18n: false

    • i18n for:

    • Tags:

  • publishedassetid (added)

    • Type: data

    • Nature:

    • Label:

    • Default value:

    • Order: 7100

    • Remote name:

    • Max size: 0

    • Attachment:

    • In list:

    • Editable: false

    • Viewable: false

    • Mandatory: false

    • Null if empty: false

    • Auto carriage return: false

    • Index: Indexed and stored

    • i18n: false

    • i18n for:

    • Tags:

  • itemtype (added)

    • Type: data

    • Nature:

    • Label:

    • Default value: index

    • Order: 7200

    • Remote name:

    • Max size: 0

    • Attachment:

    • In list:

    • Editable: false

    • Viewable: false

    • Mandatory: false

    • Null if empty: false

    • Auto carriage return: false

    • Index: Indexed and stored

    • i18n: false

    • i18n for:

    • Tags:


resolution

https://crossmedia.atlassian.net/browse/WXM-17778

Fields changes

  • name

    • Mandatory: false --> true

  • shortname

    • Mandatory: false --> true

  • nature

    • Mandatory: false --> true

  • variation

    • Mandatory: false --> true

 


userregistration & user

https://crossmedia.atlassian.net/browse/WXM-17900

userregistration

Faces

Selector

Old selector

New selector

final Set<String> faces = new HashSet<String>(); faces.add("mandatory"); return faces;
Configuration
  • _hidden

    • removed

      • role

        • Editable: false

        • Viewable: false

        • Mandatory: false

  • group

    • removed

      • role

        • Editable: false

        • Viewable: false

        • Mandatory: false

  • user

    • removed

      • role

        • Editable: false

        • Viewable: true

        • Mandatory: true

  • user_role_4

    • removed

      • role

        • Editable: true

        • Viewable: true

        • Mandatory: true

  • mandatory

    • added

      • role

        • Editable: true

        • Viewable: true

        • Mandatory: true


user

Faces

Configuration
  • user

    • updated

      • role

        • Editable: true

        • Viewable: true

        • Mandatory: true

 

PACKAGED_Portal : Default config update

The list of available actions on assets selection has been updated through all the domain presenting assets (dam, boards, portals).

The list of available actions on asset’s detail view has also been updated

Please check the configuration changes below.

board

  • explore

    • footer

      • selection

        • actions UPDATED (Reordered):

          • Before:

            • [ "downloadSelection", "boardToggleItems", "damLandingPage", "updateAssetStatus", "boardItemsRemove" ]
          • After:

            • [ "addTo", "downloadSelection", "updateAssetStatus", "damCopyToWorkspace", "boardItemsRemove" ]
        • max-displayed-actions UPDATED : "3" → "2"

common

  • cursors (Cursors have been added)

    • collaborate-search-users ADDED

      • staticQuery

        • type

          • eq: 1

    • count-my-workspaces ADDED

      • path: "massimport/data/space"

      • staticQuery

        • activated

          • eq: true

      • withData: false

    • transfer-owner-search-users ADDED

      • path: "dam/data/user"

      • props: "id,avatar,name,role,status"

      • staticQuery

        • activated

          • eq: true

        • pkgroletemplate

          • neq: "999"

        • type

          • eq: 1

  • named-actions (Actions have been added)

    • dam-copy-to-workspace ADDED

      • action: "dam/copyToWorkspace"

      • checkEnabledGetter: "spaces/hasWorkspaces"

      • checkEnabledAction: "spaces/fetchHasWorkspaces"

      • i18n: "copyToWorkspace.general.tooltip"

      • icon: "fal fa-screen-users"

      • onlyIfAllFeaturesActive: ["spaces"]

      • i18nDisabledTooltip: "copyToWorkspace.general.disabledTooltip"

    • upload-preview ADDED

      • action: "upload/setPreview"

      • i18n: "action.upload.preview"

      • icon: "fal fa-eye"

dam-import

  • items

    • actions UPDATED

      • Added uploadPreview as the 3rd item

        • [ "damImportChangeCollection", "damImportChangeStatus", "uploadPreview" ]
  • upload

    • transfer-to-user UPDATED

      • and UPDATED

        • Added type

          • eq: 1

        • Added role

          • in

            • id: [4, 27, 28]

      • New value of transfer-to-user:

        • { "and":[ { "activated": { "eq": true } }, { "id": { "neq": "${surfer.id}" } }, { "type": { "eq": 1 } }, { "role": { "in":{ "id": [4, 27, 28] } } } ] }

dam

  • details

    • actions UPDATED

      • actions (Reordered & new action added)

        • Before:

          • [ "damDownload", "addTo", "damEdit", "damComposePicture", "damComposeVideo", "damEmbed", "damReverseSearch", "damShare" ]
        • After:

          • [ "damDownload", "addTo", "damEdit", "damCopyToWorkspace", "damComposePicture", "damComposeVideo", "damEmbed", "damReverseSearch", "damShare" ]
        • Added damCopyToWorkspace as the 4th item

  • explore

    • footer

      • selection

        • actions UPDATED (Reordered)

          • Before:

            • [ "downloadSelection", "damSendByMailSelection", "damBoard", "damLandingPage", "updateAssetStatus", "damBulkEdit" ]
          • After:

            • [ "addTo", "downloadSelection", "damSendByMailSelection", "updateAssetStatus", "damBulkEdit", "damCopyToWorkspace" ]
            •  

        • max-displayed-actions UPDATED : "3" → "2"

portals

  • edit-sections

    • explore

      • footer

        • selection

          • max-displayed-actions UPDATED : "2" → "1"

  • explore

    • footer

      • selection

        • actions UPDATED (Reordered)

          • Before:

            • [ "portalsDownloadZip", "damBoard", "damLandingPage", "updateAssetStatus", "damSendByMailSelection", "damBulkEdit" ]
          • After:

            • [ "addTo", "portalsDownloadZip", "updateAssetStatus", "damSendByMailSelection", "damBulkEdit", "damCopyToWorkspace" ]
        • max-displayed-actions UPDATED : "3" → "2"

  • named-filters

    • portals-roles UPDATED (label update for creator option in filter)

      • config

        • i18n : "general.owner" → "general.creator"

        • constraintKey : "or:portalrole.owner" → "or:portalrole.creator"

spaces

  • details ADDED

    • collapsed-form

      • space

        • collaborate

          • searchUsersCursor: "transferOwnerSearchUsers"

        • default-opened-groups: ["space"]

  • named-filters

    • spaces-roles UPDATED (label update for creator option in filter)

      • config

        • i18n : "general.owner" → "general.creator"

        • constraintKey : "or:spacerole.owner" → "or:spacerole.creator"

 

image-20250409-071112.png

 

@startjson <style> .removed { BackgroundColor pink FontColor red } .added { BackgroundColor lightgreen FontColor darkgreen } </style> #highlight "dam-import" / "upload" / "transfer-to-user" / "and" / "2" / "role" <<removed>> #highlight "dam-import" / "upload" / "transfer-to-user" / "and" / "2" / "role" / "in" <<removed>> #highlight "dam-import" / "upload" / "transfer-to-user" / "and" / "2" / "role" / "in" / "id" <<removed>> #highlight "dam-import" / "upload" / "transfer-to-user" / "and" / "2" / "role" / "in" / "id" / "0" <<removed>> #highlight "dam-import" / "upload" / "transfer-to-user" / "and" / "2" / "role" / "in" / "id" / "1" <<removed>> #highlight "dam-import" / "upload" / "transfer-to-user" / "and" / "2" / "role" / "in" / "id" / "2" <<removed>> #highlight "common" / "cursors" / "collaborate-search-users" / "staticQuery" / "type" <<added>> #highlight "common" / "cursors" / "collaborate-search-users" / "staticQuery" / "type" / "eq" <<added>> #highlight "common" / "cursors" / "count-my-workspaces" <<added>> #highlight "common" / "cursors" / "count-my-workspaces" / "path" <<added>> #highlight "common" / "cursors" / "count-my-workspaces" / "staticQuery" <<added>> #highlight "common" / "cursors" / "count-my-workspaces" / "staticQuery" / "activated" <<added>> #highlight "common" / "cursors" / "count-my-workspaces" / "staticQuery" / "activated" / "eq" <<added>> #highlight "common" / "cursors" / "count-my-workspaces" / "withData" <<added>> #highlight "common" / "cursors" / "transfer-owner-search-users" <<added>> #highlight "common" / "cursors" / "transfer-owner-search-users" / "path" <<added>> #highlight "common" / "cursors" / "transfer-owner-search-users" / "props" <<added>> #highlight "common" / "cursors" / "transfer-owner-search-users" / "staticQuery" <<added>> #highlight "common" / "cursors" / "transfer-owner-search-users" / "staticQuery" / "activated" <<added>> #highlight "common" / "cursors" / "transfer-owner-search-users" / "staticQuery" / "activated" / "eq" <<added>> #highlight "common" / "cursors" / "transfer-owner-search-users" / "staticQuery" / "pkgroletemplate" <<added>> #highlight "common" / "cursors" / "transfer-owner-search-users" / "staticQuery" / "pkgroletemplate" / "neq" <<added>> #highlight "common" / "cursors" / "transfer-owner-search-users" / "staticQuery" / "type" <<added>> #highlight "common" / "cursors" / "transfer-owner-search-users" / "staticQuery" / "type" / "eq" <<added>> #highlight "common" / "named-actions" / "dam-copy-to-workspace" <<added>> #highlight "common" / "named-actions" / "dam-copy-to-workspace" / "action" <<added>> #highlight "common" / "named-actions" / "dam-copy-to-workspace" / "checkEnabledGetter" <<added>> #highlight "common" / "named-actions" / "dam-copy-to-workspace" / "checkEnabledAction" <<added>> #highlight "common" / "named-actions" / "dam-copy-to-workspace" / "i18n" <<added>> #highlight "common" / "named-actions" / "dam-copy-to-workspace" / "icon" <<added>> #highlight "common" / "named-actions" / "dam-copy-to-workspace" / "onlyIfAllFeaturesActive" <<added>> #highlight "common" / "named-actions" / "dam-copy-to-workspace" / "onlyIfAllFeaturesActive" / "0" <<added>> #highlight "common" / "named-actions" / "dam-copy-to-workspace" / "i18nDisabledTooltip" <<added>> #highlight "common" / "named-actions" / "upload-preview" <<added>> #highlight "common" / "named-actions" / "upload-preview" / "action" <<added>> #highlight "common" / "named-actions" / "upload-preview" / "i18n" <<added>> #highlight "common" / "named-actions" / "upload-preview" / "icon" <<added>> #highlight "dam-import" / "items" / "actions" / "2" <<added>> #highlight "dam-import" / "upload" / "transfer-to-user" / "and" / "2" / "type" <<added>> #highlight "dam-import" / "upload" / "transfer-to-user" / "and" / "2" / "type" / "eq" <<added>> #highlight "dam-import" / "upload" / "transfer-to-user" / "and" / "3" <<added>> #highlight "dam-import" / "upload" / "transfer-to-user" / "and" / "3" / "role" <<added>> #highlight "dam-import" / "upload" / "transfer-to-user" / "and" / "3" / "role" / "in" <<added>> #highlight "dam-import" / "upload" / "transfer-to-user" / "and" / "3" / "role" / "in" / "id" <<added>> #highlight "dam-import" / "upload" / "transfer-to-user" / "and" / "3" / "role" / "in" / "id" / "0" <<added>> #highlight "dam-import" / "upload" / "transfer-to-user" / "and" / "3" / "role" / "in" / "id" / "1" <<added>> #highlight "dam-import" / "upload" / "transfer-to-user" / "and" / "3" / "role" / "in" / "id" / "2" <<added>> #highlight "dam" / "details" / "actions" / "actions" / "8" <<added>> #highlight "spaces" / "details" <<added>> #highlight "spaces" / "details" / "collapsed-form" <<added>> #highlight "spaces" / "details" / "collapsed-form" / "space" <<added>> #highlight "spaces" / "details" / "collapsed-form" / "space" / "collaborate" <<added>> #highlight "spaces" / "details" / "collapsed-form" / "space" / "collaborate" / "searchUsersCursor" <<added>> #highlight "spaces" / "details" / "collapsed-form" / "space" / "default-opened-groups" <<added>> #highlight "spaces" / "details" / "collapsed-form" / "space" / "default-opened-groups" / "0" <<added>> #highlight "board" / "explore" / "footer" / "selection" / "actions" / "0" #highlight "board" / "explore" / "footer" / "selection" / "actions" / "1" #highlight "board" / "explore" / "footer" / "selection" / "actions" / "2" #highlight "board" / "explore" / "footer" / "selection" / "actions" / "3" #highlight "board" / "explore" / "footer" / "selection" / "max-displayed-actions" #highlight "common" / "cursors" / "collaborate-search-users" / "staticQuery" / "type" #highlight "common" / "cursors" / "count-my-workspaces" #highlight "common" / "cursors" / "transfer-owner-search-users" #highlight "common" / "named-actions" / "dam-copy-to-workspace" #highlight "common" / "named-actions" / "upload-preview" #highlight "dam-import" / "items" / "actions" / "2" #highlight "dam-import" / "upload" / "transfer-to-user" / "and" / "2" / "type" #highlight "dam-import" / "upload" / "transfer-to-user" / "and" / "3" #highlight "dam" / "details" / "actions" / "actions" / "3" #highlight "dam" / "details" / "actions" / "actions" / "4" #highlight "dam" / "details" / "actions" / "actions" / "5" #highlight "dam" / "details" / "actions" / "actions" / "6" #highlight "dam" / "details" / "actions" / "actions" / "7" #highlight "dam" / "details" / "actions" / "actions" / "8" #highlight "dam" / "explore" / "footer" / "selection" / "actions" / "0" #highlight "dam" / "explore" / "footer" / "selection" / "actions" / "1" #highlight "dam" / "explore" / "footer" / "selection" / "actions" / "2" #highlight "dam" / "explore" / "footer" / "selection" / "actions" / "3" #highlight "dam" / "explore" / "footer" / "selection" / "actions" / "4" #highlight "dam" / "explore" / "footer" / "selection" / "actions" / "5" #highlight "dam" / "explore" / "footer" / "selection" / "max-displayed-actions" #highlight "portals" / "edit-sections" / "explore" / "footer" / "selection" / "max-displayed-actions" #highlight "portals" / "explore" / "footer" / "selection" / "actions" / "0" #highlight "portals" / "explore" / "footer" / "selection" / "actions" / "1" #highlight "portals" / "explore" / "footer" / "selection" / "actions" / "2" #highlight "portals" / "explore" / "footer" / "selection" / "actions" / "3" #highlight "portals" / "explore" / "footer" / "selection" / "actions" / "4" #highlight "portals" / "explore" / "footer" / "selection" / "actions" / "5" #highlight "portals" / "explore" / "footer" / "selection" / "max-displayed-actions" #highlight "portals" / "named-filters" / "portals-roles" / "config" / "0" / "1" / "i18n" #highlight "portals" / "named-filters" / "portals-roles" / "config" / "0" / "1" / "constraintKey" #highlight "spaces" / "details" #highlight "spaces" / "named-filters" / "spaces-roles" / "config" / "0" / "1" / "i18n" #highlight "spaces" / "named-filters" / "spaces-roles" / "config" / "0" / "1" / "constraintKey" { "board": { "explore": { "footer": { "selection": { "actions": [ "addTo <s:red>downloadSelection", "downloadSelection <s:red>boardToggleItems", "updateAssetStatus <s:red>damLandingPage", "damCopyToWorkspace <s:red>updateAssetStatus", "boardItemsRemove" ], "max-displayed-actions": "3 <s:red>2" } } } }, "common": { "cursors": { "collaborate-search-users": { "path": "dam/data/user", "props": "id,avatar,name,role,status", "staticQuery": { "activated": { "eq": true }, "id": { "nin": "${surfer.id}" }, "type": { "eq": 1 } } }, "count-my-workspaces": { "path": "massimport/data/space", "staticQuery": { "activated": { "eq": true } }, "withData": false }, "transfer-owner-search-users": { "path": "dam/data/user", "props": "id,avatar,name,role,status", "staticQuery": { "activated": { "eq": true }, "pkgroletemplate": { "neq": "999" }, "type": { "eq": 1 } } } }, "named-actions": { "dam-copy-to-workspace": { "action": "dam/copyToWorkspace", "checkEnabledGetter": "spaces/hasWorkspaces", "checkEnabledAction": "spaces/fetchHasWorkspaces", "i18n": "copyToWorkspace.general.tooltip", "icon": "fal fa-screen-users", "onlyIfAllFeaturesActive": [ "spaces" ], "i18nDisabledTooltip": "copyToWorkspace.general.disabledTooltip" }, "upload-preview": { "action": "upload/setPreview", "i18n": "action.upload.preview", "icon": "fal fa-eye" } } }, "dam-import": { "items": { "actions": [ "damImportChangeCollection", "damImportChangeStatus", "uploadPreview" ] }, "upload": { "transfer-to-user": { "and": [ { "activated": { "eq": true } }, { "id": { "neq": "${surfer.id}" } }, { "role": { "in": { "id": [ 4, 27, 28 ] } }, "type": { "eq": 1 } }, { "role": { "in": { "id": [ 4, 27, 28 ] } } } ] } } }, "dam": { "details": { "actions": { "displayStatusUpdateAction": true, "maxDisplayedActions": 5, "actions": [ "damDownload", "addTo", "damEdit", "damCopyToWorkspace <s:red>damComposePicture", "damComposePicture <s:red>damComposeVideo", "damComposeVideo <s:red>damEmbed", "damEmbed <s:red>damReverseSearch", "damReverseSearch <s:red>damShare", "damShare" ] } }, "explore": { "footer": { "selection": { "actions": [ "addTo <s:red>downloadSelection", "downloadSelection <s:red>damSendByMailSelection", "damSendByMailSelection <s:red>damBoard", "updateAssetStatus <s:red>damLandingPage", "damBulkEdit <s:red>updateAssetStatus", "damCopyToWorkspace <s:red>damBulkEdit" ], "max-displayed-actions": "3 <s:red>2" } } } }, "portals": { "edit-sections": { "explore": { "footer": { "selection": { "max-displayed-actions": "2 <s:red>1" } } } }, "explore": { "footer": { "selection": { "actions": [ "addTo <s:red>portalsDownloadZip", "portalsDownloadZip <s:red>damBoard", "updateAssetStatus <s:red>damLandingPage", "damSendByMailSelection <s:red>updateAssetStatus", "damBulkEdit <s:red>damSendByMailSelection", "damCopyToWorkspace <s:red>damBulkEdit" ], "max-displayed-actions": "3 <s:red>2" } } }, "named-filters": { "portals-roles": { "i18n": "landingpages.landingpage-role", "class": "cw-wrapping-component-ai", "selectedValueOnDropdownLabel": true, "globalConstraintKey": "portalrole", "config": [ [ null, { "i18n": "general.owner <s:red>general.creator", "constraintKey": "or:portalrole.owner <s:red>or:portalrole.creator", "constraint": { "owner": { "eq": "${surfer.id}" } } }, { "i18n": "general.colaborator", "constraintKey": "or:portalrole.colaborator", "constraint": { "team": { "ct": "${surfer.id}" } } }, { "i18n": "general.viewer", "constraintKey": "or:portalrole.viewer", "constraint": { "viewers": { "ct": "${surfer.id}" } } }, { "i18n": "general.none", "constraintKey": "or:portalrole.none", "constraint": { "and": [ { "owner": { "neq": "${surfer.id}" } }, { "team": { "nct": "${surfer.id}" } }, { "viewers": { "nct": "${surfer.id}" } } ] } } ] ] } } }, "spaces": { "named-filters": { "spaces-roles": { "i18n": "spaces.filters.space-role", "class": "cw-wrapping-component-ai", "selectedValueOnDropdownLabel": true, "globalConstraintKey": "spacerole", "config": [ [ null, { "i18n": "general.owner <s:red>general.creator", "constraintKey": "or:spacerole.owner <s:red>or:spacerole.creator", "constraint": { "owner": { "eq": "${surfer.id}" } } }, { "i18n": "general.colaborator", "constraintKey": "or:spacerole.colaborator", "constraint": { "team": { "ct": "${surfer.id}" } } }, { "i18n": "general.none", "constraintKey": "or:spacerole.none", "constraint": { "and": [ { "owner": { "neq": "${surfer.id}" } }, { "team": { "nct": "${surfer.id}" } } ] } } ] ] } }, "details": { "collapsed-form": { "space": { "collaborate": { "searchUsersCursor": "transferOwnerSearchUsers" }, "default-opened-groups": [ "space" ] } } } } } @endjson

 

Plugins changes

PACKAGED_PortalBranch (ADDED)


PACKAGED_DAM_Utils

plugin.xml

  • Parameters:

    • UPDATED dam_denormalization_config:

      • default value:

        • image-20250408-225947.png
        • image-20250408-231029.png
        • image-20250408-231238.png
        • image-20250408-231316.png
        • image-20250408-231343.png
        • image-20250408-231421.png
        • image-20250408-231505.png
        • image-20250408-231528.png

           

{ "aliases": { "aiAttributeFromReport": "com.wedia.packaged.dam.triggers.datatransformers.impl.AiAttributeFromReport", "append": "com.wedia.packaged.dam.triggers.datatransformers.impl.AppendIfNotEmpty", "asChild": "com.wedia.packaged.dam.triggers.datatransformers.impl.StringToChild", "blurHash": "com.wedia.packaged.dam.triggers.datatransformers.impl.BlurhashTransformer", "booleanToActivated": "com.wedia.packaged.dam.triggers.datatransformers.impl.BooleanToActivatedTransformer", "countCommon": "com.wedia.packaged.dam.triggers.datatransformers.impl.CountCommonValues", "countZipEntries": "com.wedia.packaged.dam.triggers.datatransformers.impl.ResourceToZipFileEntriesCount", "dimensionMultiTag": "com.wedia.packaged.dam.triggers.datatransformers.impl.DimensionToMultiTagValue", "dimensionProperty": "com.wedia.packaged.dam.triggers.datatransformers.impl.DimensionToPropertyTransformer", "dimensionTag": "com.wedia.packaged.dam.triggers.datatransformers.impl.DimensionToTagValueTransformer", "duplicatesFinder": "com.wedia.packaged.dam.triggers.datatransformers.impl.DuplicatesFinderTransformer", "every": "com.wedia.packaged.dam.triggers.datatransformers.impl.EveryTransformer", "firstNonNull": "com.wedia.packaged.dam.triggers.datatransformers.impl.FirstNonNullValueTransformer", "geoCoords": "com.wedia.packaged.dam.triggers.datatransformers.impl.GeographicalsCoordinates", "getObjectProp": "com.wedia.packaged.dam.triggers.datatransformers.impl.GetInstancePropertyTransformer", "greaterThan": "com.wedia.packaged.dam.triggers.datatransformers.impl.GreaterThan", "ifElse": "com.wedia.packaged.dam.triggers.datatransformers.impl.IfElseTransformer", "ifEmpty": "com.wedia.packaged.dam.triggers.datatransformers.impl.DenormIfEmpty", "isAllowed": "com.wedia.packaged.dam.triggers.datatransformers.impl.IsAllowedBySecurity", "join": "com.wedia.packaged.dam.triggers.datatransformers.impl.JoinValuesTransformer", "lowerThan": "com.wedia.packaged.dam.triggers.datatransformers.impl.LowerThan", "negate": "com.wedia.packaged.dam.triggers.datatransformers.impl.NegationTransformer", "parseBoolean": "com.wedia.packaged.dam.triggers.datatransformers.impl.StringToBooleanTransformer", "parseDate": "com.wedia.packaged.dam.triggers.datatransformers.impl.DateTransformer", "parseExifDate": "com.wedia.packaged.dam.triggers.datatransformers.impl.ExifToDateTransformer", "pluginProperty": "com.wedia.packaged.dam.triggers.datatransformers.impl.PluginPropertyToStringTransformer", "prediction": "com.wedia.packaged.dam.triggers.datatransformers.impl.AiMapperTransformer", "propertyAsObject": "com.wedia.packaged.dam.triggers.datatransformers.impl.StringToPropertyAsObjectTransformer", "ratioToOrientation": "com.wedia.packaged.dam.triggers.datatransformers.impl.RatioToOrientationTransformer", "regexExtract": "com.wedia.packaged.dam.triggers.datatransformers.impl.RegExpPatternMatcher", "relFinder": "com.wedia.packaged.dam.triggers.datatransformers.impl.KeyToChildTransformer", "resource": "com.wedia.packaged.dam.triggers.datatransformers.impl.ResourceToPresetTransformer", "resourceFromFieldPattern": "com.wedia.packaged.dam.triggers.datatransformers.impl.PropertyToResourceTransformer", "resourcePath": "com.wedia.packaged.dam.triggers.datatransformers.impl.SelectorToPath", "resourceProperty": "com.wedia.packaged.dam.triggers.datatransformers.impl.ResourceToPropertyTransformer", "resourceToDimension": "com.wedia.packaged.dam.triggers.datatransformers.impl.ResourceToDimensionTransformer", "resourceToPreset": "com.wedia.packaged.dam.triggers.datatransformers.impl.ResourceToPresetTransformer", "rootTree": "com.wedia.packaged.dam.triggers.datatransformers.impl.TreeRootTransformer", "staticVal": "com.wedia.packaged.dam.triggers.datatransformers.impl.StaticPropertyTransformer", "stringEquals": "com.wedia.packaged.dam.triggers.datatransformers.impl.StringEqualsTransformer", "toAiReport": "com.wedia.packaged.dam.triggers.datatransformers.impl.ResourceToAiReport", "videoAspectRatio": "com.wedia.packaged.dam.triggers.datatransformers.impl.RatioToVideoAspectRatioTransformer" }, "presets": [ { "key": "getBinary", "classAlias": "resourceFromFieldPattern", "init": "binary" }, { "key": "getDimensions", "classAlias": "resourceToDimension", "input": { "preset": "getBinary" } }, { "key": "getFilePath", "classAlias": "resourcePath", "init": "binary" }, { "key": "getFileName", "classAlias": "regexExtract", "init": "^.*/([^/]*)$", "input": { "preset": "getFilePath" } }, { "key": "getAiReport", "classAlias": "toAiReport", "input": { "classAlias": "resourceToPreset", "init": "ia", "input": { "preset": "getBinary" } } }, { "key": "getRootNatureCode", "classAlias": "getObjectProp", "init": "code", "input": { "classAlias": "rootTree", "init": "assetnature" } }, { "key": "preventExecutionFromMassImport", "classAlias": "greaterThan", "init": 0, "input": { "classAlias": "countCommon", "init": [ "massimport" ], "input": { "classAlias": "propertyAsObject", "init": "tmpsource" } } }, { "key": "getJobType", "classAlias": "getObjectProp", "init": "type", "input": { "classAlias": "propertyAsObject", "init": "job" } }, { "key": "preventExecutionFromBulkEdit", "classAlias": "greaterThan", "init": 0, "input": { "classAlias": "countCommon", "init": [ "bulkedit" ], "input": { "preset": "getJobType" } } }, { "key": "isDuplicate", "classAlias": "lowerThan", "init": 1, "input": { "classAlias": "countCommon", "init": [ "null", "[]", "{}" ], "input": { "classAlias": "propertyAsObject", "init": "duplicates" } } }, { "key": "isSpaceItem", "classAlias": "lowerThan", "init": 1, "input": { "classAlias": "countCommon", "init": [ null ], "input": { "classAlias": "propertyAsObject", "init": "space" } } }, { "key": "isSpaceAsset", "classAlias": "greaterThan", "init": 0, "input": { "classAlias": "countCommon", "init": [ "space" ], "input": { "classAlias": "propertyAsObject", "init": "tmpsource" } } }, { "key": "canPublish", "classAlias": "every", "input": [ { "preset": "preventExecutionFromMassImport" }, { "classAlias": "isAllowed", "init": { "action": "changestatus", "params": { "newstatus": "6" } } } ] }, { "key": "canSubmit", "classAlias": "every", "input": [ { "preset": "preventExecutionFromMassImport" }, { "classAlias": "isAllowed", "init": { "action": "changestatus", "params": { "newstatus": "8" } } } ] } ], "transformations": [ { "objectSelector": "#damobject,damimport,transfer,massimportitem", "preventGuard": { "preset": "preventExecutionFromMassImport" }, "propertiesTransforms": [ { "fieldSelector": "name", "transformers": [ { "classAlias": "ifEmpty", "input": { "classAlias": "regexExtract", "init": "^(.*?)(?:\\.360\\.zip|\\.[^.]*)?$", "input": { "preset": "getFileName" } } } ] }, { "fieldSelector": "originalfilename", "transformers": [ { "preset": "getFileName" } ] }, { "fieldSelector": "assetnature", "transformers": [ { "classAlias": "asChild", "init": "code", "input": { "classAlias": "resourceProperty", "init": "contenttype", "input": { "preset": "getBinary" } } } ] }, { "fieldSelector": "rootnature", "transformers": [ { "classAlias": "rootTree", "init": "assetnature" } ] }, { "fieldSelector": "filesize", "transformers": [ { "classAlias": "resourceProperty", "init": "filesize", "input": { "preset": "getBinary" } } ] }, { "fieldSelector": "nbentries", "transformers": [ { "classAlias": "countZipEntries", "input": { "preset": "getBinary" } } ] } ] } ], "asyncTransformations": [ { "objectSelector": "#damobject", "propertiesTransforms": [ { "fieldSelector": "ai_caption", "transformers": [ { "classAlias": "aiAttributeFromReport", "init": "caption", "input": { "preset": "getAiReport" } } ] }, { "fieldSelector": "ai_concepts", "transformers": [ { "classAlias": "asChild", "init": "name", "input": { "classAlias": "aiAttributeFromReport", "init": "tags", "input": { "preset": "getAiReport" } } } ] }, { "fieldSelector": "ai_celebrities", "transformers": [ { "classAlias": "asChild", "init": "name", "input": { "classAlias": "aiAttributeFromReport", "init": "celebrities", "input": { "preset": "getAiReport" } } } ] }, { "fieldSelector": "ai_landmarks", "transformers": [ { "classAlias": "asChild", "init": "name", "input": { "classAlias": "aiAttributeFromReport", "init": "landmarks", "input": { "preset": "getAiReport" } } } ] }, { "fieldSelector": "ai_mainfg", "transformers": [ { "classAlias": "asChild", "init": "name", "input": { "classAlias": "aiAttributeFromReport", "init": "dominantColorForeground", "input": { "preset": "getAiReport" } } } ] }, { "fieldSelector": "ai_mainbg", "transformers": [ { "classAlias": "asChild", "init": "name", "input": { "classAlias": "aiAttributeFromReport", "init": "dominantColorBackground", "input": { "preset": "getAiReport" } } } ] }, { "fieldSelector": "ai_avgage", "transformers": [ { "classAlias": "aiAttributeFromReport", "init": "avgAge", "input": { "preset": "getAiReport" } } ] }, { "fieldSelector": "ai_nbfaces", "transformers": [ { "classAlias": "aiAttributeFromReport", "init": "nbFaces", "input": { "preset": "getAiReport" } } ] }, { "fieldSelector": "ai_nbfaces_baby", "transformers": [ { "classAlias": "aiAttributeFromReport", "init": "nbFacesOfAge0_3", "input": { "preset": "getAiReport" } } ] }, { "fieldSelector": "ai_nbfaces_children", "transformers": [ { "classAlias": "aiAttributeFromReport", "init": "nbFacesOfAge3_17", "input": { "preset": "getAiReport" } } ] }, { "fieldSelector": "ai_nbfaces_adult", "transformers": [ { "classAlias": "aiAttributeFromReport", "init": "nbFacesOfAge17_60", "input": { "preset": "getAiReport" } } ] }, { "fieldSelector": "ai_nbfaces_senior", "transformers": [ { "classAlias": "aiAttributeFromReport", "init": "nbFacesOfAge60_999", "input": { "preset": "getAiReport" } } ] }, { "fieldSelector": "ai_faces", "transformers": [ { "classAlias": "aiAttributeFromReport", "init": "namedFaces", "input": { "preset": "getAiReport" } } ] }, { "fieldSelector": "resorttheme", "transformers": [ { "classAlias": "prediction", "input": { "classAlias": "aiAttributeFromReport", "init": "mappers", "input": { "preset": "getAiReport" } } } ] }, { "fieldSelector": "resortthemesuggest", "transformers": [ { "classAlias": "prediction", "init": { "property": "resorttheme", "minConfidence": 0, "maxConfidence": 0.9 }, "input": { "classAlias": "aiAttributeFromReport", "init": "mappers", "input": { "preset": "getAiReport" } } } ] } ] }, { "objectSelector": "#damobject,damimport,massimportitem", "preventGuard": { "preset": "preventExecutionFromBulkEdit" }, "propertiesTransforms": [ { "fieldSelector": "blurhash", "transformers": [ { "classAlias": "blurHash", "init": { "components": 8 } } ] }, { "fieldSelector": "phavg", "transformers": [ { "classAlias": "ifElse", "input": [ { "classAlias": "negate", "input": { "classAlias": "stringEquals", "init": "image", "input": { "preset": "getRootNatureCode" } } }, { "classAlias": "staticVal", "init": "0" }, { "classAlias": "resourceProperty", "init": "phavg", "input": { "preset": "getBinary" } } ] } ] }, { "fieldSelector": "phdiff", "transformers": [ { "classAlias": "ifElse", "input": [ { "classAlias": "negate", "input": { "classAlias": "stringEquals", "init": "image", "input": { "preset": "getRootNatureCode" } } }, { "classAlias": "staticVal", "init": "0" }, { "classAlias": "resourceProperty", "init": "phdiff", "input": { "preset": "getBinary" } } ] } ] }, { "fieldSelector": "sha", "transformers": [ { "classAlias": "resourceProperty", "init": "sha256", "input": { "preset": "getBinary" } } ] }, { "fieldSelector": "duplicates", "transformers": [ { "classAlias": "duplicatesFinder", "init": { "objects": "#damobject,massimportitem" } } ] } ] }, { "objectSelector": "#damobject,damimport,massimportitem", "preventGuard": { "preset": "preventExecutionFromMassImport" }, "propertiesTransforms": [ { "fieldSelector": "keywords", "transformers": [ { "classAlias": "append", "input": { "classAlias": "asChild", "init": "name", "input": { "classAlias": "dimensionMultiTag", "init": "iptc:keywords", "input": { "preset": "getDimensions" } } } } ] }, { "fieldSelector": "description", "transformers": [ { "classAlias": "ifEmpty", "input": { "classAlias": "dimensionTag", "init": "iptc:2:120", "input": { "preset": "getDimensions" } } } ] }, { "fieldSelector": "width", "transformers": [ { "classAlias": "dimensionProperty", "init": "pxwidth", "input": { "preset": "getDimensions" } } ] }, { "fieldSelector": "height", "transformers": [ { "classAlias": "dimensionProperty", "init": "pxheight", "input": { "preset": "getDimensions" } } ] }, { "fieldSelector": "dpi", "transformers": [ { "classAlias": "dimensionProperty", "init": "xdpi", "input": { "preset": "getDimensions" } } ] }, { "fieldSelector": "duration", "transformers": [ { "classAlias": "dimensionProperty", "init": "duration", "input": { "preset": "getDimensions" } } ] }, { "fieldSelector": "clipped", "transformers": [ { "classAlias": "booleanToActivated", "input": { "classAlias": "parseBoolean", "input": { "classAlias": "dimensionTag", "init": "hasclipping", "input": { "preset": "getDimensions" } } } } ] }, { "fieldSelector": "colorspace", "transformers": [ { "classAlias": "asChild", "init": "code", "input": { "classAlias": "dimensionProperty", "init": "colorspace", "input": { "preset": "getDimensions" } } } ] }, { "fieldSelector": "nbpages", "transformers": [ { "classAlias": "resourceProperty", "init": "pagecount", "input": { "preset": "getBinary" } } ] }, { "fieldSelector": "photograph", "transformers": [ { "classAlias": "ifEmpty", "input": { "classAlias": "asChild", "init": "name", "input": { "classAlias": "dimensionTag", "init": "exif:artist", "input": { "preset": "getDimensions" } } } } ] }, { "fieldSelector": "latitude", "transformers": [ { "classAlias": "geoCoords", "init": "exif:gpslatitude", "input": { "preset": "getDimensions" } } ] }, { "fieldSelector": "longitude", "transformers": [ { "classAlias": "geoCoords", "init": "exif:gpslongitude", "input": { "preset": "getDimensions" } } ] }, { "fieldSelector": "assetformat", "transformers": [ { "classAlias": "ifElse", "input": [ { "classAlias": "stringEquals", "init": "image", "input": { "preset": "getRootNatureCode" } }, { "classAlias": "asChild", "init": "code", "input": { "classAlias": "ratioToOrientation", "init": "2", "input": { "classAlias": "dimensionProperty", "init": "ratio", "input": { "preset": "getDimensions" } } } } ] } ] }, { "fieldSelector": "videoratio", "transformers": [ { "classAlias": "ifElse", "input": [ { "classAlias": "stringEquals", "init": "video", "input": { "preset": "getRootNatureCode" } }, { "classAlias": "asChild", "init": "code", "input": { "classAlias": "videoAspectRatio", "input": { "classAlias": "dimensionProperty", "init": "ratio", "input": { "preset": "getDimensions" } } } } ] } ] }, { "fieldSelector": "resolution", "transformers": [ { "classAlias": "join", "init": "x", "input": [ { "classAlias": "dimensionProperty", "init": "xdpi", "input": { "preset": "getDimensions" } }, { "classAlias": "dimensionProperty", "init": "ydpi", "input": { "preset": "getDimensions" } } ] } ] } ] }, { "objectSelector": "#damobject", "preventGuard": { "classAlias": "negate", "input": { "preset": "isSpaceAsset" } }, "workflowTrigger": [ "publish" ] }, { "objectSelector": "#damobject", "preventGuard": { "classAlias": "negate", "input": { "preset": "canPublish" } }, "workflowTrigger": [ "publish" ] }, { "objectSelector": "#damobject", "preventGuard": { "classAlias": "negate", "input": { "preset": "canSubmit" } }, "workflowTrigger": [ "submit" ] }, { "objectSelector": "#damobject", "propertiesTransforms": [ { "fieldSelector": "tmpsource", "transformers": [ { "classAlias": "staticVal", "init": "" } ] } ] }, { "objectSelector": "massimportitem", "propertiesTransforms": [ { "fieldSelector": "tmpsource", "transformers": [ { "classAlias": "ifEmpty", "input": { "classAlias": "ifElse", "input": [ { "preset": "isSpaceItem" }, { "classAlias": "staticVal", "init": "space" }, { "classAlias": "staticVal", "init": "massimport" } ] } } ] } ] }, { "objectSelector": "massimportitem", "preventGuard": { "classAlias": "negate", "input": { "preset": "isSpaceItem" } }, "workflowTrigger": [ "tocheck" ] }, { "objectSelector": "massimportitem", "preventGuard": { "classAlias": "negate", "input": { "preset": "isDuplicate" } }, "workflowTrigger": [ "markduplicate" ] }, { "objectSelector": "massimportitem", "preventGuard": { "preset": "isSpaceItem" }, "workflowTrigger": [ "approve" ] } ], "asyncCallback": [ { "objectSelector": "#damobject", "plugin": "PACKAGED_DAM_Utils", "callbackClass": "com.wedia.packaged.dam.NotifyUserAsyncCallback", "callbackMethod": "notifyUser", "active": false, "runOnEmptyChanges": true } ] }
{ "aliases": { "aiAttributeFromReport": "com.wedia.packaged.dam.triggers.datatransformers.impl.AiAttributeFromReport", "append": "com.wedia.packaged.dam.triggers.datatransformers.impl.AppendIfNotEmpty", "asChild": "com.wedia.packaged.dam.triggers.datatransformers.impl.StringToChild", "blurHash": "com.wedia.packaged.dam.triggers.datatransformers.impl.BlurhashTransformer", "booleanToActivated": "com.wedia.packaged.dam.triggers.datatransformers.impl.BooleanToActivatedTransformer", "countCommon": "com.wedia.packaged.dam.triggers.datatransformers.impl.CountCommonValues", "countZipEntries": "com.wedia.packaged.dam.triggers.datatransformers.impl.ResourceToZipFileEntriesCount", "dimensionMultiTag": "com.wedia.packaged.dam.triggers.datatransformers.impl.DimensionToMultiTagValue", "dimensionProperty": "com.wedia.packaged.dam.triggers.datatransformers.impl.DimensionToPropertyTransformer", "dimensionTag": "com.wedia.packaged.dam.triggers.datatransformers.impl.DimensionToTagValueTransformer", "duplicatesFinder": "com.wedia.packaged.dam.triggers.datatransformers.impl.DuplicatesFinderTransformer", "every": "com.wedia.packaged.dam.triggers.datatransformers.impl.EveryTransformer", "firstNonNull": "com.wedia.packaged.dam.triggers.datatransformers.impl.FirstNonNullValueTransformer", "geoCoords": "com.wedia.packaged.dam.triggers.datatransformers.impl.GeographicalsCoordinates", "getObjectProp": "com.wedia.packaged.dam.triggers.datatransformers.impl.GetInstancePropertyTransformer", "greaterThan": "com.wedia.packaged.dam.triggers.datatransformers.impl.GreaterThan", "ifElse": "com.wedia.packaged.dam.triggers.datatransformers.impl.IfElseTransformer", "ifEmpty": "com.wedia.packaged.dam.triggers.datatransformers.impl.DenormIfEmpty", "isAllowed": "com.wedia.packaged.dam.triggers.datatransformers.impl.IsAllowedBySecurity", "join": "com.wedia.packaged.dam.triggers.datatransformers.impl.JoinValuesTransformer", "lowerThan": "com.wedia.packaged.dam.triggers.datatransformers.impl.LowerThan", "negate": "com.wedia.packaged.dam.triggers.datatransformers.impl.NegationTransformer", "parseBoolean": "com.wedia.packaged.dam.triggers.datatransformers.impl.StringToBooleanTransformer", "parseDate": "com.wedia.packaged.dam.triggers.datatransformers.impl.DateTransformer", "parseExifDate": "com.wedia.packaged.dam.triggers.datatransformers.impl.ExifToDateTransformer", "pluginProperty": "com.wedia.packaged.dam.triggers.datatransformers.impl.PluginPropertyToStringTransformer", "prediction": "com.wedia.packaged.dam.triggers.datatransformers.impl.AiMapperTransformer", "propertyAsObject": "com.wedia.packaged.dam.triggers.datatransformers.impl.StringToPropertyAsObjectTransformer", "ratioToOrientation": "com.wedia.packaged.dam.triggers.datatransformers.impl.RatioToOrientationTransformer", "regexExtract": "com.wedia.packaged.dam.triggers.datatransformers.impl.RegExpPatternMatcher", "relFinder": "com.wedia.packaged.dam.triggers.datatransformers.impl.KeyToChildTransformer", "resource": "com.wedia.packaged.dam.triggers.datatransformers.impl.ResourceToPresetTransformer", "resourceFromFieldPattern": "com.wedia.packaged.dam.triggers.datatransformers.impl.PropertyToResourceTransformer", "resourcePath": "com.wedia.packaged.dam.triggers.datatransformers.impl.SelectorToPath", "resourceProperty": "com.wedia.packaged.dam.triggers.datatransformers.impl.ResourceToPropertyTransformer", "resourceToDimension": "com.wedia.packaged.dam.triggers.datatransformers.impl.ResourceToDimensionTransformer", "resourceToPreset": "com.wedia.packaged.dam.triggers.datatransformers.impl.ResourceToPresetTransformer", "rootTree": "com.wedia.packaged.dam.triggers.datatransformers.impl.TreeRootTransformer", "staticVal": "com.wedia.packaged.dam.triggers.datatransformers.impl.StaticPropertyTransformer", "stringEquals": "com.wedia.packaged.dam.triggers.datatransformers.impl.StringEqualsTransformer", "toAiReport": "com.wedia.packaged.dam.triggers.datatransformers.impl.ResourceToAiReport", "videoAspectRatio": "com.wedia.packaged.dam.triggers.datatransformers.impl.RatioToVideoAspectRatioTransformer" }, "presets": [ { "key": "getBinary", "classAlias": "resourceFromFieldPattern", "init": "binary" }, { "key": "getDimensions", "classAlias": "resourceToDimension", "input": { "preset": "getBinary" } }, { "key": "getFilePath", "classAlias": "resourcePath", "init": "binary" }, { "key": "getFileName", "classAlias": "regexExtract", "init": "^.*/([^/]*)$", "input": { "preset": "getFilePath" } }, { "key": "getAiReport", "classAlias": "toAiReport", "input": { "classAlias": "resourceToPreset", "init": "ia", "input": { "preset": "getBinary" } } }, { "key": "getRootNatureCode", "classAlias": "getObjectProp", "init": "code", "input": { "classAlias": "rootTree", "init": "assetnature" } }, { "key": "preventExecutionFromMassImport", "classAlias": "greaterThan", "init": 0, "input": { "classAlias": "countCommon", "init": [ "massimport" ], "input": { "classAlias": "propertyAsObject", "init": "tmpsource" } } }, { "key": "getJobType", "classAlias": "getObjectProp", "init": "type", "input": { "classAlias": "propertyAsObject", "init": "job" } }, { "key": "isBulkEditItem", "classAlias": "greaterThan", "init": 0, "input": { "classAlias": "countCommon", "init": [ "bulkedit" ], "input": { "preset": "getJobType" } } }, { "key": "isDuplicate", "classAlias": "lowerThan", "init": 1, "input": { "classAlias": "countCommon", "init": [ "null", "[]", "{}" ], "input": { "classAlias": "propertyAsObject", "init": "duplicates" } } }, { "key": "isSpaceItem", "classAlias": "lowerThan", "init": 1, "input": { "classAlias": "countCommon", "init": [ null ], "input": { "classAlias": "propertyAsObject", "init": "space" } } }, { "key": "isSpaceAsset", "classAlias": "greaterThan", "init": 0, "input": { "classAlias": "countCommon", "init": [ "space" ], "input": { "classAlias": "propertyAsObject", "init": "tmpsource" } } }, { "key": "canPublish", "classAlias": "every", "input": [ { "preset": "preventExecutionFromMassImport" }, { "classAlias": "isAllowed", "init": { "action": "changestatus", "params": { "newstatus": "6" } } } ] }, { "key": "canSubmit", "classAlias": "every", "input": [ { "preset": "preventExecutionFromMassImport" }, { "classAlias": "isAllowed", "init": { "action": "changestatus", "params": { "newstatus": "8" } } } ] }, { "key": "isItemTypeEmpty", "classAlias": "greaterThan", "init": 0, "input": { "classAlias": "countCommon", "init": [ "null", " ", "" ], "input": { "classAlias": "propertyAsObject", "init": "itemtype" } } }, { "key": "isItemRealyNew", "classAlias": "ifElse", "input": [ { "preset": "isItemTypeEmpty" }, { "classAlias": "parseBoolean", "input": "true" }, { "classAlias": "greaterThan", "init": 0, "input": { "classAlias": "countCommon", "init": [ "index" ], "input": { "classAlias": "propertyAsObject", "init": "itemtype" } } } ] }, { "key": "preventExecutionWhenItemIsFromCopy", "classAlias": "negate", "input": { "preset": "isItemRealyNew" } }, { "key": "hasMassimportOrSpaceTmpSource", "classAlias": "greaterThan", "init": 0, "input": { "classAlias": "countCommon", "init": [ "space", "massimport" ], "input": { "classAlias": "propertyAsObject", "init": "tmpsource" } } }, { "key": "doNotComputeDuplicates", "classAlias": "ifElse", "input": [ { "preset": "hasMassimportOrSpaceTmpSource" }, { "preset": "isBulkEditItem" }, { "preset": "preventExecutionWhenItemIsFromCopy" } ] }, ], "transformations": [ { "objectSelector": "#damobject,damimport,transfer,massimportitem", "preventGuard": { "preset": "preventExecutionFromMassImport" }, "propertiesTransforms": [ { "fieldSelector": "name", "transformers": [ { "classAlias": "ifEmpty", "input": { "classAlias": "regexExtract", "init": "^(.*?)(?:\\.360\\.zip|\\.[^.]*)?$", "input": { "preset": "getFileName" } } } ] }, { "fieldSelector": "originalfilename", "transformers": [ { "preset": "getFileName" } ] }, { "fieldSelector": "assetnature", "transformers": [ { "classAlias": "asChild", "init": "code", "input": { "classAlias": "resourceProperty", "init": "contenttype", "input": { "preset": "getBinary" } } } ] }, { "fieldSelector": "rootnature", "transformers": [ { "classAlias": "rootTree", "init": "assetnature" } ] }, { "fieldSelector": "filesize", "transformers": [ { "classAlias": "resourceProperty", "init": "filesize", "input": { "preset": "getBinary" } } ] }, { "fieldSelector": "nbentries", "transformers": [ { "classAlias": "countZipEntries", "input": { "preset": "getBinary" } } ] } ] } ], "asyncTransformations": [ { "objectSelector": "#damobject", "propertiesTransforms": [ { "fieldSelector": "ai_caption", "transformers": [ { "classAlias": "aiAttributeFromReport", "init": "caption", "input": { "preset": "getAiReport" } } ] }, { "fieldSelector": "ai_concepts", "transformers": [ { "classAlias": "asChild", "init": "name", "input": { "classAlias": "aiAttributeFromReport", "init": "tags", "input": { "preset": "getAiReport" } } } ] }, { "fieldSelector": "ai_celebrities", "transformers": [ { "classAlias": "asChild", "init": "name", "input": { "classAlias": "aiAttributeFromReport", "init": "celebrities", "input": { "preset": "getAiReport" } } } ] }, { "fieldSelector": "ai_landmarks", "transformers": [ { "classAlias": "asChild", "init": "name", "input": { "classAlias": "aiAttributeFromReport", "init": "landmarks", "input": { "preset": "getAiReport" } } } ] }, { "fieldSelector": "ai_mainfg", "transformers": [ { "classAlias": "asChild", "init": "name", "input": { "classAlias": "aiAttributeFromReport", "init": "dominantColorForeground", "input": { "preset": "getAiReport" } } } ] }, { "fieldSelector": "ai_mainbg", "transformers": [ { "classAlias": "asChild", "init": "name", "input": { "classAlias": "aiAttributeFromReport", "init": "dominantColorBackground", "input": { "preset": "getAiReport" } } } ] }, { "fieldSelector": "ai_avgage", "transformers": [ { "classAlias": "aiAttributeFromReport", "init": "avgAge", "input": { "preset": "getAiReport" } } ] }, { "fieldSelector": "ai_nbfaces", "transformers": [ { "classAlias": "aiAttributeFromReport", "init": "nbFaces", "input": { "preset": "getAiReport" } } ] }, { "fieldSelector": "ai_nbfaces_baby", "transformers": [ { "classAlias": "aiAttributeFromReport", "init": "nbFacesOfAge0_3", "input": { "preset": "getAiReport" } } ] }, { "fieldSelector": "ai_nbfaces_children", "transformers": [ { "classAlias": "aiAttributeFromReport", "init": "nbFacesOfAge3_17", "input": { "preset": "getAiReport" } } ] }, { "fieldSelector": "ai_nbfaces_adult", "transformers": [ { "classAlias": "aiAttributeFromReport", "init": "nbFacesOfAge17_60", "input": { "preset": "getAiReport" } } ] }, { "fieldSelector": "ai_nbfaces_senior", "transformers": [ { "classAlias": "aiAttributeFromReport", "init": "nbFacesOfAge60_999", "input": { "preset": "getAiReport" } } ] }, { "fieldSelector": "ai_faces", "transformers": [ { "classAlias": "aiAttributeFromReport", "init": "namedFaces", "input": { "preset": "getAiReport" } } ] }, { "fieldSelector": "resorttheme", "transformers": [ { "classAlias": "prediction", "input": { "classAlias": "aiAttributeFromReport", "init": "mappers", "input": { "preset": "getAiReport" } } } ] }, { "fieldSelector": "resortthemesuggest", "transformers": [ { "classAlias": "prediction", "init": { "property": "resorttheme", "minConfidence": 0, "maxConfidence": 0.9 }, "input": { "classAlias": "aiAttributeFromReport", "init": "mappers", "input": { "preset": "getAiReport" } } } ] } ] }, { "objectSelector": "massimportitem", "preventGuard": { "preset": "doNotComputeDuplicates" }, "propertiesTransforms": [ { "fieldSelector": "blurhash", "transformers": [ { "classAlias": "blurHash", "init": { "components": 8 } } ] }, { "fieldSelector": "phavg", "transformers": [ { "classAlias": "ifElse", "input": [ { "classAlias": "negate", "input": { "classAlias": "stringEquals", "init": "image", "input": { "preset": "getRootNatureCode" } } }, { "classAlias": "staticVal", "init": "0" }, { "classAlias": "resourceProperty", "init": "phavg", "input": { "preset": "getBinary" } } ] } ] }, { "fieldSelector": "phdiff", "transformers": [ { "classAlias": "ifElse", "input": [ { "classAlias": "negate", "input": { "classAlias": "stringEquals", "init": "image", "input": { "preset": "getRootNatureCode" } } }, { "classAlias": "staticVal", "init": "0" }, { "classAlias": "resourceProperty", "init": "phdiff", "input": { "preset": "getBinary" } } ] } ] }, { "fieldSelector": "sha", "transformers": [ { "classAlias": "resourceProperty", "init": "sha256", "input": { "preset": "getBinary" } } ] }, { "fieldSelector": "duplicates", "transformers": [ { "classAlias": "duplicatesFinder", "init": { "objects": "#damobject,massimportitem" } } ] } ] }, { "objectSelector": "#damobject,damimport", "preventGuard": { "preset": "hasMassimportOrSpaceTmpSource" }, "propertiesTransforms": [ { "fieldSelector": "blurhash", "transformers": [ { "classAlias": "blurHash", "init": { "components": 8 } } ] }, { "fieldSelector": "phavg", "transformers": [ { "classAlias": "ifElse", "input": [ { "classAlias": "negate", "input": { "classAlias": "stringEquals", "init": "image", "input": { "preset": "getRootNatureCode" } } }, { "classAlias": "staticVal", "init": "0" }, { "classAlias": "resourceProperty", "init": "phavg", "input": { "preset": "getBinary" } } ] } ] }, { "fieldSelector": "phdiff", "transformers": [ { "classAlias": "ifElse", "input": [ { "classAlias": "negate", "input": { "classAlias": "stringEquals", "init": "image", "input": { "preset": "getRootNatureCode" } } }, { "classAlias": "staticVal", "init": "0" }, { "classAlias": "resourceProperty", "init": "phdiff", "input": { "preset": "getBinary" } } ] } ] }, { "fieldSelector": "sha", "transformers": [ { "classAlias": "resourceProperty", "init": "sha256", "input": { "preset": "getBinary" } } ] } ] }, { "objectSelector": "#damobject,damimport,massimportitem", "preventGuard": { "preset": "preventExecutionFromMassImport" }, "propertiesTransforms": [ { "fieldSelector": "keywords", "transformers": [ { "classAlias": "append", "input": { "classAlias": "asChild", "init": "name", "input": { "classAlias": "dimensionMultiTag", "init": "iptc:keywords", "input": { "preset": "getDimensions" } } } } ] }, { "fieldSelector": "description", "transformers": [ { "classAlias": "ifEmpty", "input": { "classAlias": "dimensionTag", "init": "iptc:2:120", "input": { "preset": "getDimensions" } } } ] }, { "fieldSelector": "width", "transformers": [ { "classAlias": "dimensionProperty", "init": "pxwidth", "input": { "preset": "getDimensions" } } ] }, { "fieldSelector": "height", "transformers": [ { "classAlias": "dimensionProperty", "init": "pxheight", "input": { "preset": "getDimensions" } } ] }, { "fieldSelector": "dpi", "transformers": [ { "classAlias": "dimensionProperty", "init": "xdpi", "input": { "preset": "getDimensions" } } ] }, { "fieldSelector": "duration", "transformers": [ { "classAlias": "dimensionProperty", "init": "duration", "input": { "preset": "getDimensions" } } ] }, { "fieldSelector": "clipped", "transformers": [ { "classAlias": "booleanToActivated", "input": { "classAlias": "parseBoolean", "input": { "classAlias": "dimensionTag", "init": "hasclipping", "input": { "preset": "getDimensions" } } } } ] }, { "fieldSelector": "colorspace", "transformers": [ { "classAlias": "asChild", "init": "code", "input": { "classAlias": "dimensionProperty", "init": "colorspace", "input": { "preset": "getDimensions" } } } ] }, { "fieldSelector": "nbpages", "transformers": [ { "classAlias": "resourceProperty", "init": "pagecount", "input": { "preset": "getBinary" } } ] }, { "fieldSelector": "photograph", "transformers": [ { "classAlias": "ifEmpty", "input": { "classAlias": "asChild", "init": "name", "input": { "classAlias": "dimensionTag", "init": "exif:artist", "input": { "preset": "getDimensions" } } } } ] }, { "fieldSelector": "latitude", "transformers": [ { "classAlias": "geoCoords", "init": "exif:gpslatitude", "input": { "preset": "getDimensions" } } ] }, { "fieldSelector": "longitude", "transformers": [ { "classAlias": "geoCoords", "init": "exif:gpslongitude", "input": { "preset": "getDimensions" } } ] }, { "fieldSelector": "assetformat", "transformers": [ { "classAlias": "ifElse", "input": [ { "classAlias": "stringEquals", "init": "image", "input": { "preset": "getRootNatureCode" } }, { "classAlias": "asChild", "init": "code", "input": { "classAlias": "ratioToOrientation", "init": "2", "input": { "classAlias": "dimensionProperty", "init": "ratio", "input": { "preset": "getDimensions" } } } } ] } ] }, { "fieldSelector": "videoratio", "transformers": [ { "classAlias": "ifElse", "input": [ { "classAlias": "stringEquals", "init": "video", "input": { "preset": "getRootNatureCode" } }, { "classAlias": "asChild", "init": "code", "input": { "classAlias": "videoAspectRatio", "input": { "classAlias": "dimensionProperty", "init": "ratio", "input": { "preset": "getDimensions" } } } } ] } ] }, { "fieldSelector": "resolution", "transformers": [ { "classAlias": "join", "init": "x", "input": [ { "classAlias": "dimensionProperty", "init": "xdpi", "input": { "preset": "getDimensions" } }, { "classAlias": "dimensionProperty", "init": "ydpi", "input": { "preset": "getDimensions" } } ] } ] } ] }, { "objectSelector": "#damobject", "preventGuard": { "classAlias": "negate", "input": { "preset": "isSpaceAsset" } }, "workflowTrigger": [ "publish" ] }, { "objectSelector": "#damobject", "preventGuard": { "classAlias": "negate", "input": { "preset": "canPublish" } }, "workflowTrigger": [ "publish" ] }, { "objectSelector": "#damobject", "preventGuard": { "classAlias": "negate", "input": { "preset": "canSubmit" } }, "workflowTrigger": [ "submit" ] }, { "objectSelector": "#damobject", "propertiesTransforms": [ { "fieldSelector": "tmpsource", "transformers": [ { "classAlias": "staticVal", "init": "" } ] } ] }, { "objectSelector": "massimportitem", "propertiesTransforms": [ { "fieldSelector": "tmpsource", "transformers": [ { "classAlias": "ifEmpty", "input": { "classAlias": "ifElse", "input": [ { "preset": "isSpaceItem" }, { "classAlias": "staticVal", "init": "space" }, { "classAlias": "staticVal", "init": "massimport" } ] } } ] } ] }, { "objectSelector": "massimportitem", "preventGuard": { "classAlias": "negate", "input": { "preset": "isSpaceItem" } }, "workflowTrigger": [ "tocheck" ] }, { "objectSelector": "massimportitem", "preventGuard": { "classAlias": "negate", "input": { "preset": "isDuplicate" } }, "workflowTrigger": [ "markduplicate" ] }, { "objectSelector": "massimportitem", "preventGuard": { "preset": "isSpaceItem" }, "workflowTrigger": [ "approve" ] } ], "asyncCallback": [ { "objectSelector": "#damobject", "plugin": "PACKAGED_DAM_Utils", "callbackClass": "com.wedia.packaged.dam.NotifyUserAsyncCallback", "callbackMethod": "notifyUser", "active": false, "runOnEmptyChanges": true } ] }

More info about the current denorm config here :


WXM_BO_Options

plugin.xml

  • Parameters:

    • ADDED com.noheto.upload.SecuredUpload.svg_as_vulnerable:

      • type: boolean

      • mandatory: false

      • description: Defines if svg suffixes are vulnerable suffixes.

      • default value: true


WXM_DAMDY

plugin.xml

  • Parameters:

    • ADDED variationprovider.ignore.images:

      • type: boolean

      • mandatory: false

      • description: Set to true to ignore images in VariationsProviders and therefore reduce evp calls

      • default value: true


PACKAGED_Security

Macros have been added through the plugin with the new version.
Theses macros are used on new security rules added by default for objectfile domain and it’s sendfile action. (More info below on the Security part)

plugin.xml

  • Parameters:

    • UPDATED exclude_ids_in_base_edit_list_role:

      • default value:

        • Old:

        ,4,
        • New:

        ,4,1,

security.xml

ADDED pkgIsPublishedDamobject

CONFIGHASTAG(objectname, 'damobject') AND GETSTATUSONLINE(objectname) = object.status

ADDED pkgSurferIsConnectedUser

surfer.isconnected='1' and surfer.roleid != '1'

ADDED pkgIsPublicPortal

objectname = 'portal' AND GETSTATUSONLINE(objectname) = object.status

 

Security changes

Objectfile domain is now enabled by default. It’s sendfile action has now 3 rules delivered by default. Theses 3 rules are allowing :

  • A connected user to view and download all variations

  • To view or download an published #damobject

  • To view the banner and the logo of a public portal

Added with : https://crossmedia.atlassian.net/browse/WXM-17775

Domains changes

objectfile

  • Enabled: false --> true

sendFile
  • Rules:

    • WEDIA PACKAGED - Connected users (ADDED)

      • Rule details

        • Description: If the user is logged in, then he is authorized to view and download all variations.

        • Enabled: true

        • Blocking: false

      • Expression:

      @pkgSurferIsConnectedUser()
    • WEDIA PACKAGED - DAM Published instances (ADDED)

      • Rule details

        • Description: If it's a DAM object and is published, then we have the rights to see it.

        • Enabled: true

        • Blocking: false

      • Expression:

      @pkgIsPublishedDamobject()
    • WEDIA PACKAGED - Public portal instances (ADDED)

      • Rule details

        • Description: If it's public portal, then we have the right to see it.

        • Enabled: true

        • Blocking: false

      • Expression:

      @pkgIsPublicPortal()

 

Media Copy to Workspace: MassImport API Update

Purpose of the "Unlinked Asset Copy" Feature

This feature allows importing an existing asset into a collaborative workspace without linking it to the original. Unlike linked copies (i.e., reindexing), publishing or modifying the item will not affect the original asset. The goal is to create a new, independent asset.

itemIds Parameter Update

The itemIds (or ids) parameter in the request body now supports JSON objects with specific keys, allowing more control over how assets are handled.

 

Supported format:

{ "itemIds": [ "123", // existing item ID "uid:type_id", // asset copied with link (default behavior) { "id": "uid:type_id", "link": false } // asset copied without link ], "metadata": {}, "itemData": {} }

 

Behavior of the link parameter key

  • true (default): linked copy (reindexing). The created item will point to the original asset, which will be updated on publication.

  • false: unlinked copy. A new item is created, and a new asset will be generated during publication.

 

Use of initialState

When performing an unlinked copy, properties from the source asset that are not directly mappable to the item structure are stored in an initialState object. This structure is later used during simulation and publication to ensure consistent behavior without altering existing processing logic.

 

Customizing Copy Behavior with Tags

Two field-level tags allow fine-grained control over what is copied from the asset into the item and eventually into the new asset:

  • rest_api_mass_import_copy_ignore
    ➤ Marks a field to be ignored during the creation of the item (only for unlinked copies).
    ➤ The field will not appear in the item.

  • rest_api_mass_import_copy_to_published
    ➤ Allows a field’s value to be transferred to the new asset during item publication.
    ➤ Useful for retaining edited content in the final published asset.

These tags make the unlinked copy process configurable, allowing teams to define exactly which data should be carried over and when — during the item creation or the final asset publication.

 

Additional technical information here :

 

Extending asset copy : Link when copy between DAM & Creative workflow

How to implement asset linking when copying between DAM and Creative Workflow

 

Related content