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\ExportActivitiesFilterParams — getType() 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.