Skip to main content
Version: 2026.2

Upgrade 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 an 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

Pimcore Studio Integration​

  • The Automation Rules editor is now fully implemented in Pimcore Studio (React/TypeScript modules under assets/studio/js/src/modules/automation-rules/).
  • Segment Assignments are now available as a tab in Pimcore Studio.
  • GDPR Data Extractor: new DynamicTypeCustomerGDPRProvider dynamic type for the Studio GDPR module.
  • Term Segment Builder Definition: new Pimcore Studio 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, the trailing semicolon was removed from @return void; to read @return void.
  • CustomerManagementFrameworkBundle\CustomerList\Filter\CustomerSegment: constructor and method signatures changed:
    • __construct(array $segments, ...): the $segments type hint was 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; the false default was replaced with '' (empty string).
  • CustomerManagementFrameworkBundle\ActionTrigger\RuleEnvironment: added __serialize(): array and __unserialize(array $data): void methods for the 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

Upgrade to Version 5.0​

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

Upgrade to Version 4.1.2​

  • CSS includes using the pimcore_head_link view helper are no longer wrapped in a deferred block. If you extend the CMF layout.html.twig template in your own code and embed additional CSS via the pimcore_head_link Twig extension, check that it still renders correctly.

Upgrade to Version 4​

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

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

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