- 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