Upgrade Notices
Upgrade to 2026.1.0
Platform Requirements
- Added support for
PHP8.5. - Removed support for
PHP8.3and Symfonyv6.
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.phpand all controllers undersrc/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
TermSegmentBuildercustom report definition - Removed
src/CustomReport/Adapter/TermSegmentBuilder.php(adapter no longer needed)
Removed Newsletter Bundle Dependency
- Removed hard dependency on
pimcore/newsletter-bundle. TheSegmentAddressSourceclass (src/Newsletter/AddressSource/SegmentAddressSource.php), which implementedAddressSourceAdapterInterfacefrom 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 undersrc/GDPR/DataProvider/Customers.php, extendingPimcore\Bundle\AdminBundle\GDPR\DataProvider\DataObjects). Replaced by the new Studio-compatible provider:- New class:
CustomerManagementFrameworkBundle\GDPR\StudioProvider\CustomerDataProvider(moved fromsrc/Gdpr/Provider/CustomerDataProvider.php, which was an internal class)
- New class:
- Removed
src/Routing/StudioRouteLoader.php. Studio routing is now handled viaservices.ymlconfiguration.
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 jobsCustomerManagementFrameworkBundle\Service\Studio\Customer\View\ViewServiceInterface- now has an additionalrenderCustomerDetail(int $id): stringmethod (previously onlyrenderCustomerList)
New hydrators with interfaces:
src/Hydrator/AutomationRuleHydratorInterfacesrc/Hydrator/FilterDefinitionHydratorInterfacesrc/Hydrator/HelperHydratorInterfacesrc/Hydrator/SegmentAssignmentHydratorInterfacesrc/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
DynamicTypeCustomerGDPRProviderdynamic 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 fromstring/inttostring|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$segmentstype hint was updated fromDataObject\CustomerSegment[]toCustomerSegmentInterface[].addCustomerSegment(): parameter type changed fromDataObject\CustomerSegmenttoCustomerSegmentInterface.- Internal closures updated accordingly.
CustomerManagementFrameworkBundle\Filter\ExportActivitiesFilterParams:getType()andsetType()return/parameter type narrowed fromstring|booltostring; thefalsedefault was replaced with''(empty string).CustomerManagementFrameworkBundle\ActionTrigger\RuleEnvironment: added__serialize(): arrayand__unserialize(array $data): voidmethods for the PHP 8.1+ serialization interface.
Other Changes
- Removed Doctrine DBAL enum type mapping configuration (deprecated)
- Added
src/Setting/SegmentAssignmentSettingsProvider.phpfor configuring segment assignment settings - Added
src/Resources/config/generic_data_index.yamlfor Generic Data Index integration
Upgrade to Version 5.0
CustomerManagementFrameworkBundle\Newsletter\Queue\Item\DefaultNewsletterQueueItemconstructor removed the defaultnullvalue from the$customerparameter.
Upgrade to Version 4.1.2
- CSS includes using the
pimcore_head_linkview helper are no longer wrapped in a deferred block. If you extend the CMFlayout.html.twigtemplate in your own code and embed additional CSS via thepimcore_head_linkTwig 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 thessoIdentitiesfield in the Customer class.
Upgrade to Version 3
- Activate
Generate Type Declarationsfor all classes generated/used by the Customer Management Framework:CustomerCustomerSegmentCustomerSegmentGroupSsoIdentity
- Migrate all templates to twig.
- Add following line to your firewalls configuration in the
security.ymlof your app after thepimcore_adminfirewall.
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\ZendCompatibilitytoDoctrine\DBAL\Query\QueryBuilder. - Migrated
Zend\PaginatortoKnp\Component\Pager. FilterHandler::addFilterhas no operator as parameter anymore (as this was only considered withSearchQueryfilters). Use newBoolanCombinatorfor combining multiple filters with OR operator instead.AbstractObjectActivity::toArrayand GDPR exporter results might be different, as it utilizes newnormalizemethods instead of deprecatedgetDataForWebservicemethods.
Removed features in Version 3
- Removed
SegmentTrackedListenerfor 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.