- BREAKING: Changed AppleAppstoreGateway to use App Store Server API. remp/crm#3038
- Add required configs for App Store Server API in CRM admin settings.
- Added support for App Store Server Notifications V2. remp/crm#3038
- If you have your own implementation of
ServerToServerNotificationProcessorInterface, implement new ServerToServerNotificationV2ProcessorInterface interface.
- Use
/api/v2/apple-appstore/webhook API endpoint for V2 Notifications.
- Added
/api/v2/apple-appstore/verify-purchase API endpoint for payment confirmation from app. remp/crm#3038
- Endpoint uses App Store Server API instead of deprecated verifyReceipt Web Service Endpoint.
- Add required configs for App Store Server API in CRM admin settings.
- BREAKING: Changed minimal version of
nette/application to version 3.2.
- Due to newly introduced framework types, there is
$user Latte variable (of type \Nette\Security\User) in every Latte template.
- If you use
$user Latte variable of different type, you have to rename it to avoid type mismatch.
- BREAKING: Added
registerScenariosTriggers method to ApplicationModuleInterface.
- We recommend to extend
CrmModule in your module classes, or in case of implementing this interface directly, we recommend to implement empty method.
- Added button to GoogleBarGraph and GoogleLineGraph, to export/download data in CSV format. remp/crm#3117
- Fixed registration of
Contributte\FormMultiplier\DI\MultiplierExtension. remp/crm#3138
- The extension was supposed to be registered by
ApplicationModule, but it silently failed.
- Fixed possible XSS vulnerability and enabled proactively-before-disabled escaping of values. remp/crm#1794
- Added
escapehtml function both to PHP and Latte to escape HTML entities. remp/crm#1794
- Deprecated
SnippetsRepository->loadAllByIdentifier, use SnippetsRepository->loadByIdentifier instead. remp/crm#3029
- Fixed ‘Too Many Connections’ bug within PHPUnit tests by reconnecting to the database after each test.
- Added
EventGeneratorOutputProviderInterface for use with EventGeneratorInterface. remp/crm#1409
- We encourage to implement this interface/method in your custom event generators to provide output params to scenario validator.
- In the next major release the interface
EventGeneratorOutputProviderInterface will be merged to EventGeneratorInterface interface.
- IMPORTANT: Fixed active paid subscribers dashboard count and label for active subscribers with master subscription. remp/crm#3164
- Active paid subscribers metrics used to count all paid subscriptions (
is_paid=1) which also included accepted child subscriptions. Then we counted accepted child subscriptions once again and added to all paid subscriptions which caused the resulting number to be incorrect.
- Now we get all paid subscriptions the same way and add all unused child subscriptions related to active master subscriptions.
- Label for active subscribers with master subscription used to refer to the number of payments but we count the number of unique users with master subscription.
- Added
BeforeCreateRenewalPaymentEventHandler which prevents creating renewal payment for family subscriptions. remp/novydenik#1147
- Added
isFamilySubscriptionType method to FamilySubscriptionTypesRepository. remp/novydenik#1147
- Changed template variable
$user to $userRow, fixing type mismatch in RequestsAdminPresenter. remp/crm#3135
- Fixed possible XSS vulnerability and enabled proactively-before-disabled escaping of values. remp/crm#1794
- Added
mailto link for sending activation email to MasterFamilySubscriptionInfoWidget. remp/crm#3029
- Added attach invoice to
GiftPaymentStatusChangeHandler. remp/novydenik#1221
- Fixed variable name in templates so it doesn’t override
$user (which holds currently logged-in user).
- Added ability to store and handle voided pruchases. remp/crm#3031
- Added
google_play_voided_purchase_notifications table and related VoidedPurchaseNotificationsRepository.
- Added
VoidedPurchaseNotificationReceivedHandler which handles voided purchase notifications (refunding payment, cancelling subscription etc.).
- Modified
DeveloperNotificationPushWebhookApiHandler to store voided purchase notifications and removed Debugger::info call.
- Changed template variable
$user to $userRow, fixing type mismatch in InvoicesAdminPresenter. remp/crm#3135
- DEPRECATED: Deprecated state constants of
\Crm\PaymentsModule\Repositories\ParsedMailLogsRepository. remp/respekt#189
- Use
Crm\PaymentsModule\Models\ParsedMailLog\State enum instead.
- Fixed attempt to get previous recurrent charge on never charged recurrent payment, in
RecurrentPaymentsResolver::resolveSubscriptionType. remp/helpdesk#2566
- Added new
AttachRenewalPaymentGenericEvent scenarios generic event, which fires AttachRenewalPaymentEvent event. remp/novydenik#1147
- Added option to change payment data while copying payment in
PaymentsRepository::copyPayment. remp/novydenik#1147
- Fixed script which populates a database with testing data. remp/crm#3125
- Fixed broken move of processed payment emails to the configured folder.
- Changed template variable
$user to $userRow, fixing type mismatch in PaymentsAdminPresenter. remp/crm#3135
- Added
preventPaymentStatusUpdate argument to PaymentProcessor::complete method. respekt#150
- Fixed possibility of changing payment status to
fail in ConfirmCsobPaymentsCommand. respekt#150
- Fixed link back to user of the payment from payment edit screen.
- Fixed obtaining
clientIp from initial payment for CsobOneClick payment gateway. remp/crm#2990
- Added extracted implementation of
RecurrentPaymentScenarioConditionModel from Crm\ScenariosModule\Events\ConditionCheckEventHandler. remp/crm#1409
- Added ability to collect source bank account of parsed mail log and logging source bank account within
TatraBankaMailParser and CsobMailParser. remp/respekt#189
- Added ability to view source bank account and update state and note of parsed mail log. remp/respekt#189
- Fixed script which populates a database with testing data. remp/crm#3125
- Added interface to create claims for print issue. remp/respekt#40
- Added
ClaimButtonWidget with configurable options to show claim button for specific print subscription types.
- Added print address redirect functionality. remp/respekt#177
- Fixed calculation of delivered pieces which incorrectly ignored
changed status of export data. remp/respekt#199
- Added widget placeholder for actions (
print.admin.print_subscriptions.default.actions) to default screen of PrintSubscriptionsAdmin. remp/respekt#176
- Fixed possible XSS vulnerability and enabled proactively-before-disabled escaping of values. remp/crm#1794
- Changed product stats table to include sum row also to the head of the table. remp/novydenik#1244
- Rewritten existing hermes registrations/handlers to use new
TriggerManager to register ‘Trigger handlers’ events. remp/crm#1409
- Added extracted implementation of
OrderScenarioConditionalModel from Crm\ScenariosModule\Events\ConditionCheckEventHandler. remp/crm#1409
- Moved campaign api segment cache calls to Hermes task, because of missing calls on downtime. remp/crm#2983
- Added parameter
$successUrl to MailSettingsPresenter::renderSubscribeEmail(). remp/helpdesk#2533
- User will be redirected to this URL (if valid) after email is subscribed.
- Fixed possible XSS vulnerability and enabled proactively-before-disabled escaping of values. remp/crm#1794
- Changed
ChangeNewsletterSubscriptionsGenericEvent scenario generic event operator from “OR” to “AND”. remp/crm#3178
- This only affects UI, no functional change.
- IMPORTANT: Enabled sandbox mode for Twig templates. remp/crm#3176
- DEPRECATED: Deprecated
SalesFunnelEvent#getDeviceType method. remp/helpdesk#2667
- Parsing of device type should be preferably done in event handler instead of event constructor.
- Added information about the stored segment used in the sales funnel to the detail page and the list of sales funnels. remp/novydenik#1228
- Fixed registration process of unclaimed users within sales funnels. remp/crm#2803
- Fixed possible XSS vulnerability and enabled proactively-before-disabled escaping of values. remp/crm#1794
- Fixed slow loading time of sales funnel caused by slow device detection in
SalesFunnelEvent constructor. remp/helpdesk#2667
- Added tags and meta copying when creating a copy of the sales funnel. remp/helpdesk#2619
- DEPRECATED: Deprecated use of
EventsStorage public events to register new trigger handlers.
- IMPORTANT: Added
TriggerManager - a new official way to register trigger handlers for scenarios + rewritten existing registrations. remp/crm#1409
- We encourage using
TriggerManager to register new trigger handlers and to rewrite existing ones until the next major release, where the source of registered handlers will switch to TriggerManager instead of the current public events on top of EventsStorage.
- We found a few “Event Trigger” events that were listed by mistake or weren’t working as expected. To list all scenarios which is affected by this change and should be manually reviewed, run
scenarios:list_scenarios_to_review command.
- Added handling
renewal_payment_id to NotificationTemplateParamsTrait. remp/novydenik#1147
- Added ability to add additional scenario jobs parameters. remp/novydenik#1147
- Added
ScenarioGenericEventAdditionalParamsInterface interface which defines methods needed for adding additional parameters.
- Added support for handling additional job parameters to
RunGenericEventHandler. remp/novydenik#1147
- Added
AttachRenewalPaymentEvent event and AttachRenewalPaymentEventHandler handler which handles creating and attaching renewal payment to job parameters. remp/novydenik#1147
- Fixed scenario builder didn’t work with generic actions with empty options. remp/novydenik#1147
- Rewritten existing hermes registrations/handlers to use new
TriggerManager to register ‘Trigger handlers’ events. remp/crm#1409
- Changed existing implementation of condition models in
ConditionCheckEventHandler to registered separated condition models. remp/crm#1409
- Added
EventGeneratorOutputProviderInterface to existing BeforeRecurrentPaymentChargeEventGenerator and SubscriptionEndsEventGenerator. remp/crm#1409
- Added
user_id explicitly to output params.
- Scenarios now validates triggers with a given elements during creation and update. remp/crm#1409
- Added ability to validate stored segments before saving them (with option to skip the validation). remp/crm#3043
- Fixed invalid stored segments not giving a feedback in admin and showing meaningful error message with a reason instead. remp/crm#3043
- BREAKING: Changed signature of
\Crm\SubscriptionsModule\Repositories\SubscriptionsRepository::hasUserSubscriptionType() method. remp/crm#3129
- Method preserves parameter
userId, renames parameter subscriptionTypesCode to subscriptionTypeCode, renames parameter after to startTime, adds endTime parameter and removes parameter count.
- Method checks if users has subscription of given subscription type starting after
startTime parameter and ending before endTime parameter. If no datetime parameters provided, method uses no datetime boundaries.
- If you used
count parameter, you have to implement your own method because it was removed without replacement.
- BREAKING: Renamed method
SubscriptionsRepository::findDefaultForContentAccess to SubscriptionsRepository::findDefaultForLengthAndContentAccesses. remp/novydenik#1147
- Added
subscription_type_code parameter to /api/v1/subscriptions/create API endpoint. remp/crm#3051
- Either
subscription_type_id or subscription_type_code parameter must be filled.
- Changed template variable
$user to $userRow, fixing type mismatch in SubscriptionsAdminPresenter. remp/crm#3135
- Added widget
UserSubscriptionAddressWidget, containing address info extracted from subscription listing. remp/respekt#134
- Changed condition in subscription form to allow same
end_time as start_time (eg. when cancelling subscription manually). remp/crm#3158
- Added
subscriptionIsActiveOrInFuture method to SubscriptionsRepository. remp/crm#3031
- Fixed
ContentAccessRepository::usersWithAccessActiveBetween calculation, which returned incorrect results. remp/crm#3173
- The calculation was used only at print subscribers activity dashboard, the impact should be minimal.
- Added extracted implementation of
SubscriptionScenarioConditionModel from Crm\ScenariosModule\Events\ConditionCheckEventHandler. remp/crm#1409
- Changed template variable
$user to $userRow, fixing type mismatch in UpgradePresenter. remp/crm#3135
- Fixed possible XSS vulnerability and enabled proactively-before-disabled escaping of values. remp/crm#1794
- Added
GooglePresenter action actionCodeSignIn (at /users/google/code-sign-in), for processing Google authorization code retrieved via popup UX mode.
- For more details, see https://developers.google.com/identity/oauth2/web/guides/use-code-model.
- Added
uuid column into users table. Missing data for actual users have to generate by command user:generate_uuid_for_users and for new will be prefilled automatically. remp/novydenik#1215
- Removed constraint of linking a single connected account of same type to single user. remp/crm#3105
- Removed unique DB index on
user_id and type columns in user_connected_accounts.
- Adjusted UI in
/users/users/settings to be able to link multiple accounts.
- Added more data to personal data export. remp/crm#3122
- Changed template variable
$user to $userRow, fixing type mismatch in UserAdminPresenter and AdressAdminPresenter. remp/crm#3135
- Added login attempts data to user data download. remp/helpdesk#2621
- Added the prevention of multiple submits of user deleting form. remp/crm#2949
- Added Redis cache to DeviceDetector. remp/helpdesk#2667
- Fixed possible authentication of unclaimed users on the level of
UserAuthenticator; it’s not responsibility of single authenticators anymore. remp/crm#3133
- Fixed possible XSS vulnerability and enabled proactively-before-disabled escaping of values. remp/crm#1794
- Fixed unclaimed user sign in via SSO (Google/Apple). remp/crm#3133
- Added scenario criteria
UserGroupsCriteria to check if user is in user group. remp/respekt#178
- Added extracted implementation of
UserScenarioConditionModel from Crm\ScenariosModule\Events\ConditionCheckEventHandler. remp/crm#1409
- Added user’s UUID to the response of relevant login API handlers. remp/dn-mofa#538