Skip to main content
Version: 2026.1

Update Notices

Upgrade to 2026.1.0

Platform Requirements

  • Added support for PHP 8.5.
  • Removed support for PHP 8.3 and Symfony v6.

Removed ExtJS / Admin Classic UI

All legacy ExtJS-based admin controllers and frontend assets have been removed. The Admin Classic UI is no longer supported:

  • Removed src/Controller/Admin.php and all controllers under src/Controller/Admin/ (Activities, Customers, Duplicates, FilterDefinition, GDPRData, Helper, Rules, SegmentAssignment, Settings, Templates)
  • Removed src/Controller/Report/TermSegmentBuilderController.php
  • Removed all ExtJS JavaScript files under src/Resources/public/js/ (startup, config, ActivityView, CustomerView, CustomerDuplicates, SegmentAssignment, targeting, gdprDataProvider, etc.)
  • Removed all vendor font/icon assets (FontAwesome, Glyphicons, Ionicons) from src/Resources/public/admin/fonts/
  • Removed ExtJS data and tags JS for TermSegmentBuilder custom report definition
  • Removed src/CustomReport/Adapter/TermSegmentBuilder.php (adapter no longer needed)

Removed Newsletter Bundle Dependency

  • Removed hard dependency on pimcore/newsletter-bundle. The SegmentAddressSource class (src/Newsletter/AddressSource/SegmentAddressSource.php) which implemented AddressSourceAdapterInterface from the newsletter bundle has been removed. If you were using this class, implement your own adapter.

GDPR Data Provider Refactoring

  • Removed CustomerManagementFrameworkBundle\GDPR\DataProvider\Customers (was under src/GDPR/DataProvider/Customers.php, extending Pimcore\Bundle\AdminBundle\GDPR\DataProvider\DataObjects). Replaced by the new Studio-compatible provider:
    • New class: CustomerManagementFrameworkBundle\GDPR\StudioProvider\CustomerDataProvider (moved from src/Gdpr/Provider/CustomerDataProvider.php which was an internal class)
  • Removed src/Routing/StudioRouteLoader.php — Studio routing is now handled via services.yml configuration.

Studio Backend API (New)

All 45 legacy JSON admin endpoints have been migrated to modern Studio Backend API controllers. New Studio API controllers are available under src/Controller/Studio/:

  • Customer: Collection, Get, View (List, Detail)
  • Activity: Collection, Create, Delete, Get, Update, View (List, Detail)
  • AutomationRule: Collection, Create, Delete, Get, Update
  • Duplicate: Decline, View (List)
  • FilterDefinition: Create, Delete, Share, Update
  • Segment / SegmentGroup / SegmentAssignment: full CRUD
  • Helper endpoints: ActivityTypes, CustomerFieldList, GroupedSegments, NewsletterFilterFlags
  • Newsletter: EnqueueAll, GetQueueSize
  • Settings: GetApiKeys, UpdateApiKey
  • Customer Export: Init, Step, Download (src/Controller/Studio/Customer/Export/)
  • Term Segment Builder Definitions: Collection

New interfaces and services added:

  • CustomerManagementFrameworkBundle\Service\Studio\Customer\Export\ExportServiceInterface — new interface for managing multi-step customer export jobs
  • CustomerManagementFrameworkBundle\Service\Studio\Customer\View\ViewServiceInterface — now has additional renderCustomerDetail(int $id): string method (previously only renderCustomerList)

New hydrators with interfaces:

  • src/Hydrator/AutomationRuleHydratorInterface
  • src/Hydrator/FilterDefinitionHydratorInterface
  • src/Hydrator/HelperHydratorInterface
  • src/Hydrator/SegmentAssignmentHydratorInterface
  • src/Hydrator/TermSegmentBuilderDefinitionHydratorInterface

Studio UI Integration

  • Automation Rules editor is now fully implemented in the Studio UI (React/TypeScript modules under assets/studio/js/src/modules/automation-rules/)
  • Segment Assignments are now available as a tab in the Studio UI
  • GDPR Data Extractor: new DynamicTypeCustomerGDPRProvider dynamic type for the Studio GDPR module
  • Term Segment Builder Definition: new Studio UI adapter
  • Newsletter Data Object fields (NewsletterActive, NewsletterConfirmed) are now available as Studio class editor data types (core-extension/Pimcore/Model/DataObject/ClassDefinition/Data/)

Interface and Return Type Changes

  • CustomerManagementFrameworkBundle\Model\ActivityExternalIdInterface::getId() — PHPDoc return type corrected from string/int to string|int (no functional change)
  • CustomerManagementFrameworkBundle\Model\ActivityStoreEntry\ActivityStoreEntryInterface::setMetadataItem() — PHPDoc corrected: trailing semicolon removed from @return void;@return void
  • CustomerManagementFrameworkBundle\CustomerList\Filter\CustomerSegment — constructor and method signatures changed:
    • __construct(array $segments, ...)$segments type hint updated from DataObject\CustomerSegment[] to CustomerSegmentInterface[]
    • addCustomerSegment() — parameter type changed from DataObject\CustomerSegment to CustomerSegmentInterface
    • Internal closures updated accordingly
  • CustomerManagementFrameworkBundle\Filter\ExportActivitiesFilterParamsgetType() and setType() return/parameter type narrowed from string|bool to string; false default replaced with '' (empty string)
  • CustomerManagementFrameworkBundle\ActionTrigger\RuleEnvironment — added __serialize(): array and __unserialize(array $data): void methods for PHP 8.1+ serialization interface

Other Changes

  • Removed Doctrine DBAL enum type mapping configuration (deprecated)
  • Added src/Setting/SegmentAssignmentSettingsProvider.php for configuring segment assignment settings
  • Added src/Resources/config/generic_data_index.yaml for Generic Data Index integration

Update to Version 5.0

  • CustomerManagementFrameworkBundle\Newsletter\Queue\Item/DefaultNewsletterQueueItem constructor removed default null value from $customer parameter.

Update to Version 4.1.2

  • CSS includes using the pimcore_head_link view helper are not within a deferred block anymore. If you extend the CMF layout.html.twig template in your custom code and embed additional CSS within your templates via the pimcore_head_link twig extension, check if they still are embedded correctly.

Update to Version 4

  • Execute SQL script src/Resources/sql/segmentAssignment/storedFunctionObject.sql, only for Pimcore 11.
  • Remove Single Sign On custom implementations & classes e.g. SSOIdentity, OAuth1Token, OAuth2Token and ssoIdentities field in Customer class.

Update to Version 3

  • Activate Generate Type Declarations for all classes generated/used by the Customer Management Framework:
    • Customer
    • CustomerSegment
    • CustomerSegmentGroup
    • SsoIdentity
  • Migrate all templates to twig.
  • Add following line to your firewalls configuration in the security.yml of your app after the pimcore_admin firewall.
security:
firewalls:
pimcore_admin:
# ...
cmf_webservice: '%customer_management_framework.firewall_settings%'
  • Webservices URLs changed to /__customermanagementframework/webservice/*
  • Execute all migrations of Customer Management Framework.

Additional code changes (that might affect your application)

  • Migrated SearchQueryParser\QueryBuilder\ZendCompatibility to Doctrine\DBAL\Query\QueryBuilder.
  • Migrated Zend\Paginator to Knp\Component\Pager.
  • FilterHandler::addFilter has no operator as parameter anymore (as this was only considered with SearchQuery filters). Use new BoolanCombinator for combining multiple filters with OR operator instead.
  • AbstractObjectActivity::toArray and GDPR exporter results might be different, as it utilizes new normalize methods instead of deprecated getDataForWebservice methods.

Removed features in Version 3

  • Removed SegmentTrackedListener for tracking tracked segments into Piwik/Matomo (as matomo integration is deprecated in Pimcore 6.9 and removed in Pimcore X).
  • Migrated all templates to php templates and removed templating helpers.
  • CSV Importer integration as it is also removed from Pimcore X. Use Pimcore Data Importer instead.

Update to Pimcore X

  • Update to Pimcore 6.9.
  • Update Customer Management Framework to latest version (compatible to Pimcore 6.9).
  • Execute all migrations of Customer Management Framework.
  • Update to Pimcore X.