This thread discusses the article:
CBSubs 4.0.2 released with 9 new feautues and 28 bug fixes
The CBSubs GPL 4.0.2 release changelog is:
Features
5863 PHP 7 compatibility in CBSubs 4.0.2
5856 Use new CBLib Tables for all CBSubs database entries
5855 CBSubs Mailer plugin: Log mail send errors into history table
5844 CBSubs CB Field integration plugin: Add possibility to do maths on floating numbers stored in CB text fields, for instance with [RATE] for summing donations
5822 Add support for new GroupJive GJ 3.x by making CBSubs compatible to GJ 3.x
5820 Add support for negative promotions to Free plans to become paid (they were skiping the basket)
5817 Payment slip for offline gateway additional substitutions
5708 Improve backend invoice printing
5449 Change subscriptions expirations default mode from backend only to frontend and backend
Bug Fixes
5857 CBSubs Folder protect integration plugin: On newer Linux systems does not store password properly after registrations, logins, and user profile updates
5836 Promotion coupons: Default hint-description of coupon code is "0" instead of empty string
5824 triggerIntegrations is only loading cbsubs plugins
5818 Copy geographical zone throws duplicate entry SQL error
5816 Missing translations for CBSubs Content access errors
5760 Missing translations for invoice substitutions
5724 Price and Price-duration Substitutions in plain-text plan emails display HTML entities in promotion price display overrides and in standard discount displays
5723 Manual offline payments pop-up window for payment slip does not display always (depending on hash)
5722 CBSubs Promotions display overrides display overrides for promotions for viewing user instead of owner
5720 In Plan's Pending Email substitutions CBSubs Promotions calculating off viewing user instead of owner
5693 CBSubs Mailer: Must be in more than one possible subscription state causes broken query
5674 When displaying price overrides in basket a fatal error occurs
5669 Payment invoice item text substitutions not working properly
5640 Promotion with display override leads to error on registration page: Fatal error: Call to a member function loadSubscription() on a non-object in cbsubs.promotion.php on line 956
5639 onCPayUserStateChange is not firing after 100% discounted frontend subscription
5580 Module does not personalize plan titles
5557 User management filter for expiry date using wrong operator
5553 Also allow negative promotions when setting "How this promotion applies to items in a basket" is set to "Apply promotion amount to all applicable items in order until promotion amount is depleted"
5547 Front-end recording of payments leads to a blank page or Catchable fatal error
5543 CBSubs Module: Active subscriptions that are renewable in advance are missing the "renew now" link
5539 Required plan validation only displayed in first plan
5533 Radio plan selector on registration form touches text when viewed in narrow window, e.g. on mobile device
5522 Basket time-outs should happen based on last updated time instead of time initiated time
5508 Protection of joomla content category leads to protected category blog page when category list is also protected in plan
5506 Saving plan order causes fatal error
5488 CBSubs language file not working
5417 Invoice popup Price header alignment not working
5416 Regression since bugfix of bug #5344 in Automated Mailer: Triggers for dates before a date do not trigger correctly