[AdminModule]
  - Changed that 
AuditLogAdminPresenter (URL /admin/audit-log-admin/) now requires at least one filter condition to display records. remp/crm#2186 
  - Changed the registration of widgets - module now uses improved 
LazyWidgetManager and all widgets extend BaseLazyWidget class. remp/crm#2075 
  - Fixed universal search collision with other 
select2 searches present on the same page. remp/crm#2663 
[ApiModule]
  - Added support for JSON body logging (to complement POST and GET params). remp2020/crm-api-module#1
    
      - IMPORTANT: Please be aware, that your 
api_logs table and Hermes log text file might grow much faster. Consider rotation and periodical cleanup of this table/file. 
      - In general, we recommend to rotate the table manually and store the old logs outside of the database. You can get inspired in this gist. If you export the data before the migration, you’ll make the migration much faster.
 
    
   
  - Changed type of 
api_logs columns to utf8mb4_unicode_ci to avoid errors caused by funky raw bodies we now log. remp/crm#2655
    
      - IMPORTANT: This migration could take a long time, depending on the size of your 
api_logs table. It took us 2 hours to migrate ~7GiB table. Due to the mentioned, we don’t migrate the data to the new table and keep old API logs in the separate table. 
      - If you still decide you also want to migrate the data, set the ENV variable 
CRM_ALLOW_API_LOGS_DATA_MIGRATION to 1. The migration is non-blocking. 
    
   
  - Added blacklist/whitelist configuration for API logger. remp2020/crm-api-module#1
 
  - Fixed missing translations in the flash messages and forms. remp/crm#2636
 
[AppleAppstoreModule]
  - Added support to enforce gateway mode during online verification via payload. remp/dn-mofa#474
 
  - Changed the registration of widgets - module now uses improved 
LazyWidgetManager and all widgets extend BaseLazyWidget class. remp/crm#2075 
[ApplicationModule]
  - BREAKING: Changed 
ApplicationConfig->initAutoload() to not load configs from cache if cache expiration is set to zero. remp/crm#2605 
  - Added 
LazyWidgetManager to replace ineffective WidgetManager. remp/crm#2075
    
      - Update your modules which register widgets by now deprecated 
WidgetManager and use LazyWidgetManager instead. 
      - Update your widgets which extends now deprecated 
BaseWidget and use BaseLazyWidget instead. 
    
   
[ClvModule]
  - Changed the registration of widgets - module now uses improved 
LazyWidgetManager and all widgets extend BaseLazyWidget class. remp/crm#2075 
[FamilyModule]
  - Changed 
RequestsAdmin::default template. remp/crm#2599
    
      - Added link back to user from form page.
 
      - Added info that payment items are with VAT and we don’t support VAT change for these items at the moment.
 
      - Updated template to be responsive.
 
    
   
  - Fixed payment creation process in 
RequestFormFactory::formSucceed. It now copies also subscription type item’s meta into new payment item’s meta. remp/crm#2599 
  - Changed the registration of widgets - module now uses improved 
LazyWidgetManager and all widgets extend BaseLazyWidget class. remp/crm#2075 
[GiftsModule]
  - Changed the registration of widgets - module now uses improved 
LazyWidgetManager and all widgets extend BaseLazyWidget class. remp/crm#2075 
[GoPayModule]
  - Fixed notify URL API link generation. remp/crm#2645
 
[GooglePlayBillingModule]
  - Changed the registration of widgets - module now uses improved 
LazyWidgetManager and all widgets extend BaseLazyWidget class. remp/crm#2075 
  - Added 
offer_periods column to google_play_billing_subscription_types to support multiple trial periods of subscription type before switching to base plan. remp/crm#2635 
[InvoicesModule]
  - Changed the registration of widgets - module now uses improved 
LazyWidgetManager and all widgets extend BaseLazyWidget class. remp/crm#2075 
  - Fixed “empty string” fields in addresses, making them nulls. remp/crm#2513
 
[IssuesModule]
  - Added option 
--delete-remote-after into command issues:ftp-import (SyncFtpIssuesCommand). If used, remote files are deleted after download finished. remp/helpdesk#1434 
  - Changed the registration of widgets - module now uses improved 
LazyWidgetManager and all widgets extend BaseLazyWidget class. remp/crm#2075 
  - Fixed issues API links generation. remp/crm#2645
 
[OnboardingModule]
  - Changed the registration of widgets - module now uses improved 
LazyWidgetManager and all widgets extend BaseLazyWidget class. remp/crm#2075 
[PaymentsModule]
  - Added support for configurable test host in gateways. remp/crm#2489
 
  - Updated 
tomaj/omnipay-tatra library to v4.2. 
  - Added message for users without auto-renew payments to inform about the possibility of change. remp/crm#2585
 
  - Changed composer dependency from 
miroc/omnipay-paypal-reference to rootpd/omnipay-paypal-reference. 
  - Changed the registration of widgets - module now uses improved 
LazyWidgetManager and all widgets extend BaseLazyWidget class. remp/crm#2075 
  - Fixed handling of custom amount when adding manual payment (route 
/payments/payments-admin/new). remp/helpdesk#1541 
  - Fixed access to payments presenter actions, added explicit validation of currently logged user. remp/crm#2630
 
  - Fixed 
CsobOneClick->charge() to stop recurrent payment if resultCode: "150", resultMessage: orig payment not authorized, oneclick card expired is returned from API. remp/crm#2627 
  - Fixed possible error when creating new payment with custom items if name of the item or vat was empty. remp/crm#2640
 
  - Added cart items to PayPal checkout page. remp/crm#2651
 
  - Fixed 
PaymentsRepository->copyPayment() - mark new payment as failed if we are unable to copy payment items (eg. missing subscription type item). remp/crm#2659 
  - Fixed validating 
subscription_start_at and subscription_end_at as date in edit payment form, only if start/end of subscription is set to manual. remp/helpdesk#1624 
[PrintModule]
  - Changed the registration of widgets - module now uses improved 
LazyWidgetManager and all widgets extend BaseLazyWidget class. remp/crm#2075 
[PrivatbankarModule]
  - Changed the registration of widgets - module now uses improved 
LazyWidgetManager and all widgets extend BaseLazyWidget class. remp/crm#2075 
[ProductsModule]
  - BREAKING: Changed signature of 
PostalFeeMessageConditionInterface. remp/crm#2637
    
      - The method 
getReachedMessage now requires two parameters, cart $products and postal fee condition $value. 
      - New method 
getNotReachedMessage which is intended to be displayed for users, who haven’t reached the condition yet. Method accepts the same set of parameters. 
    
   
  - Fixed search products by 
author query condition. remp/crm#1872 
  - Added 
SortShopProductsFormValidationDataProviderInterface used in SortShopProductsFormFactory to provide a way to define custom sorting (eg. alternate products of two categories). remp/crm#2464 
  - Changed the registration of widgets - module now uses improved 
LazyWidgetManager and all widgets extend BaseLazyWidget class. remp/crm#2075 
  - Fixed mistyped 
YesNoHelper latte filter call in TagsAdmin/default.latte file. Should be yesNo instead of YesNo. remp/helpdesk#1536 
  - Fixed missing translations in the flash messages. remp/crm#2636
 
  - Added ability to set form defaults for 
ProductsFormFactory. remp/crm#2648 
[RempMailerModule]
  - Changed the registration of widgets - module now uses improved 
LazyWidgetManager and all widgets extend BaseLazyWidget class. remp/crm#2075 
[RempPythiaModule]
  - Changed the registration of widgets - module now uses improved 
LazyWidgetManager and all widgets extend BaseLazyWidget class. remp/crm#2075 
[SalesFunnelModule]
  - IMPORTANT: Added unique index to 
sales_funnel.url_key table column. remp/crm#2665 
  - Fixed redirection of inactive sales funnels for full url (
http://crm.press/sales-funnel/sales-funnel-frontend/show?funnel=FUNNEL_CODE). remp/crm#2580
    
      - Redirection of short URL (
http://crm.press/FUNNEL_CODE) was implemented within remp/crm#847 but accessing full URL ended with a “funnel inactive” error. 
    
   
  - Added events 
SalesFunnelCreatedEvent and SalesFunnelUpdatedEvent. remp/crm#2483 
  - Added handler 
SalesFunnelChangedEventsHandler for both events to store short funnel URL (url_key) if caching is enabled. It will now cache short URLs of funnels also after seeding. No need to manually save sales funnel. remp/crm#2483 
  - Moved update of funnel’s 
last_conversion date when incrementing total_conversions into common method increment(). remp/crm#2483 
  - Changed the registration of widgets - module now uses improved 
LazyWidgetManager and all widgets extend BaseLazyWidget class. remp/crm#2075 
  - Added note to sales funnels. remp/crm#2604
 
[ScenariosModule]
  - Added soft delete and restore to scenarios. remp/crm#2531
    
      - Changed 
Engine to process only jobs of enabled scenarios that were created after scenario restore (if restored). 
      - Added deletion of unprocessable jobs. These are jobs of deleted scenarios or jobs created before scenario restore.
 
    
   
[SegmentsModule]
  - Fixed 
SegmentsTrait->seedSegment() trying to seed segment second time. It failed to find already seeded segment if it was soft-deleted. Previously used SegmentsRepository->findByCode() checks only active segments. remp/crm#886 
  - Changed the registration of widgets - module now uses improved 
LazyWidgetManager and all widgets extend BaseLazyWidget class. remp/crm#2075 
  - Fixed missing translations in the flash messages. remp/crm#2636
 
[SubscriptionsModule]
  - IMPORTANT: Added unique index to 
subscription_types.code table column. remp/crm#2665 
  - Changed the registration of widgets - module now uses improved 
LazyWidgetManager and all widgets extend BaseLazyWidget class. remp/crm#2075 
  - Fixed 
SubscriptionTypesAdmin::show template to load subscription-types-meta.value into form without any change to value. If raw value was JSON, jQuery would load it from data-value attribute as JSON object instead of string. Using base64 to overcome this issue. remp/crm#2620 
[UpgradesModule]
  - Changed the registration of widgets - module now uses improved 
LazyWidgetManager and all widgets extend BaseLazyWidget class. remp/crm#2075 
  - Changed evaluation of upgrade conditions to generate lower number of DB queries. remp/crm#2584
 
[SubscriptionsModule]
  - Added filter to the listing of subscription types in admin. remp/crm#2598
 
[UsersModule]
  - BREAKING: Changed return value of 
UserData#getUserToken function from false to null in case of no associated user data for token. remp/crm#2621 
  - DEPRECATED: Deprecated class 
SignInRedirectValidator. remp/crm#2113
    
      - Class is replaced by more generic 
RedirectValidator in application-module. 
      - The class will be removed in the future, make sure to replace any references to 
SignInRedirectValidator with RedirectValidator 
    
   
  - Added option to anonymize single user from admin without disabling anonymization conditions for all users. remp/crm#2102
    
      - Some users want to be removed and they don’t care that subscription is active or shop payment was made yesterday. Helpdesk should be able to anonymize user (after email / phone confirmation) without changing general settings used by system subroutines.
 
      - Reason of forced anonymization of active user is required.
 
    
   
  - Added option to force delete user data (into 
DeleteUserData->deleteData()) in case user’s removal is blocked by providers. This is helpful in case of user’s request to be removed despite of active subscription. remp/crm#2102 
  - Fixed scenario when address wasn’t updated if the change was minor and non-strict comparison evaluated it as non-change. remp/crm#2513
 
  - Added 
user_meta to login API endpoints (/api/v1/users/login, /api/v1/users/google-token-sign-in, /api/v1/users/apple-token-sign-in). remp/crm#2590 
  - Added parameter 
source to GooglePresenter and ApplePresenter presenters, having the same meaning as current n_source parameter. Both are now accepted, source having a priority. remp/crm#2594 
  - Fixed incorrect component name 
pnp to paginator in AbusiveUsersAdmin::default template. Missed while refactoring paginator to PreviousNextPaginator. remp/crm#2512 
  - Changed the registration of widgets - module now uses improved 
LazyWidgetManager and all widgets extend BaseLazyWidget class. remp/crm#2075 
  - Fixed possibility of Varnish “Unexpected content-range header” error for FileResponse-based downloads. remp/helpdesk#1523
 
  - Changed that 
UserDataLocaleResolver now loads locale from UserData - it fixes problem with locale synchronization relying on session data only. remp/crm#2621 
  - Fixed “empty string” fields in addresses, making them nulls. remp/crm#2513
 
  - Fixed synchronization problems with Google/Apple SignIn state (saving state to Redis instead of cookies). remp/crm#2114
 
  - Fixed “empty string” fields in addresses, making them nulls. remp/crm#2513