Skip to content

Pluggable Payment Gateway email warnings (Upcoming payments, expiring payment methods, expiring memberships)

License

Notifications You must be signed in to change notification settings

eighty20results/e20r-payment-warning-pmpro

Repository files navigation

E20R Custom Payment Reminders for PMPro

Contributors: eighty20results
Tags: pmpro, membership, recurring payment warning, paid memberships pro, membership management, payment warning
Requires at least: 4.8
Tested up to: 5.4
Stable tag: 5.1

Generates and sends notices to active members for the supported membership plugin. The plugin will notify active members about any upcoming recurring payments, membership expirations and of any upcoming credit card expiration dates so the user can be informed and take action. The plugin receives its data directly from the supported payment gateways. This makes this plugin far more reliable and consistent in actually transmitting warnings/notices to your members.

Description

Being a more reliable and up-to-date notification system than the standard Recurring Payment Email Reminder add-on for Paid Memberships Pro, the E20R Payment Warning for PMPro plugin will utilize the most recent information generated by the payment gateway itself, rather than rely on disconnected data stored on your local WordPress site. Note that this plugin, to the best of our knowledge, is PCI-DSS compliant. It does not store payment data locally on your web server (The information used to process Credit Card transactions is only stored on the payment gateway itself, not on your site).

Installation

  1. Upload the e20r-payment-warning-pmpro directory to the /wp-content/plugins/ directory of your site.
  2. Activate the plugin through the 'Plugins' menu in WordPress.
  3. That's it. Settings are managed through the "Settings" -> "E20R Roles for PMPro" options/settings page.
  4. Licenses for the gateway modules(s) can be purchased on the Eighty/20 Results website

Frequently Asked Questions

I found a bug in the plugin

Please report your issue to us by using the E20R Custom Payment Reminders for PMPro issues page on github.com, and we will try to respond to your initial query within 1 business day.

Can I configure the plugin?

Yes, you can specify your company's billing address, the company name and select the message types to process for as well as the payment gateways to enable data collection for (assuming you have a valid license for it).

Go to the Payment Reminders settings page. The page can be found by navigating to /wp-admin/ -> "Settings" -> "Payment Reminders". The key settings should be listed there.

There are also a number of filter hooks for a programmer to use that will modify certain details of the plugin configuration.

What types of warning messages can this plugin send?

There are 3 default warning message types you can configure the plugin to process and send on the Payment Reminders Settings page. These 3 warning message types are:

  • Expiration,
  • Recurring Payment Warning and
  • Credit Card Expiration messages.

How do I change/update the email message templates?

All template handling is, as of v3.0 and later, managed as "Email Notices".

Email Notices are a form of WordPress posts and have their own taxonomy, so the 3 default warning message types can be created by going to the "Email Notices" menu option in the /wp-admin/ backend and selecting "New Email Notice".

The plugin creates the "E20R Payment Warning Notices" Email Type for you when it's activated, but there are no predefined message warning templates created for you.

For the plugin to send warning messages, it needs to be able to find at least one template for the Reminder Type it is processing. As a result, you will have to create that message and configure it to be sent on whatever day before the expiration/payment date. See the "Message Settings" metabox on the Edit Email Notice page after you have supplied a title and saved the new message template as a "E20R Payment Warning Notices" Email Type.

How do I select when (what day) to send the warning

After saving a Payment Warning Notice in the Email Notice section, when the message reloads, you'll notice a "Message Settings" metabox on the right-hand side of the Email Notice Editor page.

Here you can add/remove the "Send on day #" value(s). There are no limits to the number of days when that specific message can be sent.

Can the system send more than 1 message of a given type per day to the same user?

Yes, you can configure multiple different message templates of the same Message Type and for the same day.

Note that all of the configured message types will be sent at around the same time.

Messages are typically sent between 4:30am and 6am for the timezone your WordPress server is configured for - see the "Timezone" setting for WordPress on the "Settings" -> "General" page. By default, WordPress uses the "UTC" or GMT timezone. That is, unless you configure it to use something else. We recommend you select a timezone that reflects the majority of your site's audience.

How do I insert user specific information in the template?

The Email Notices supports the use of a predetermined number of what we call 'substitution variables'. You'll recognize a 'substitution variable' by the fact that it has a leading and trailing pair of '!!' (double bangs). For example: To display the first name of the user in the email greeting, you can use the !!first_name!! variable. As the plugin processes the message for that user, it will replace the !!first_name!! name with the actual first name of the user (assuming they've provided one).

Each payment warning message type has its own list of variables you can use, and the "Substitution Variables" metabox below the Email Notice editor field will be updated to reflect the supported variables once you select the "Reminder Type" and Save/Update the template (as a draft, for instance).

Is this plugin PCI-DSS compliant?

In short; It depends...

This plugin does not save the credit card number for any of your members. In accordance with the documentation from the Payment Card Industry association requirements, we're storing the brand of the card plus its last 4 digits (so members can tell which card it is). We also save the expiration month and expiration year so we can identify when to send a Credit Card Expiration Warning as needed.

Whether something is genuinely "compliant" with a requirement depends on whether it's solely in control of the environment. In this case, we're running as a plug-in for a WordPress based website. We do what we can to not violate the PCI-DSS requirements, but ultimately this plugin isn't in control of whether or not your site is PCI-DSS compliant.

Is this plugin GDPR compliant

First of all, see the PCI-DSS compliance question about when it comes to the caveat of whether or not this plugin can claim GDPR compliance.

That said, we're not able to provide your users with a list of data that is stored by this plugin, nor can we currently delete the information if they ask you to. So, if you are in a location where GDPR is a hard requirement for your customers, you may want to wait for version 5.0 of this plugin before you install it.

What data does the plugin save (from the payment gateway)?

We only fetch data for active members of the site (i.e. their PMPro membership status is "active"). Once a member becomes inactive, we delete their data from the local cache.

For members with recurring billing plans we save;

  • an identifier for the recurring billing/subscription plan,
  • the date when the next payment will be charged,
  • the payment status for their most recent payment,
  • a status text if the last payment failed,
  • the amount charged as the last payment,
  • the amount that will be attempted charged for the next payment and
  • whether their subscription/recurring billing plan is still active.

For members who's membership was paid with a one-time payment, we save;

  • an identifier for the charge/transaction that paid for the membership,
  • the amount they paid,
  • when they paid it (date) and
  • when their membership is scheduled to end (if applicable).

How often does the plugin download data from the gateway?

It depends on the membership level definitions, and to some extent the discount codes defined for the Membership plugin.

By default, the plugin attempts to calculate the "half-life" of the shortest membership period defined (either as a membership level or in a discount code) and set the schedule for data collection to be once every 1/2 the shortest membership period. For example, if you have a membership level that is defined as a week - 7 day - long membership, the data collection would be scheduled for once every 3 days.

In the cases where the "half-life" of the shortest membership level period is more than 1 week, the plugin will schedule data collection to happen at least once per week.

Limitations / Known Issues

The plugin currently supports the Stripe.com and PayPal payment gateways.

The PayPal gateway support does not include real-time IPN message handling for updated credit cards and subscription/billing plans.

Adding more gateways is on the road-map, but will require sponsorships. You can sponsor support for a new gateway by going to the Eighty / 20 Results Purchase page and purchase a sponsorship.

If you sponsor the development of gateway support you will receive forum support for the lifespan of this plugin, plus a lifetime license key for one website of yours for all available and future plugin features.

Changelog

v5.1

  • ENHANCEMENT: Added new stripe API version (2020-03-02)
  • BUG FIX: Updated licensing module to better manage remote requests (improved performance)

v5.0

  • ENHANCEMENT: Upgraded the licensing code for the Stripe module
  • ENHANCEMENT: Decouple Stripe API version support updates from plugin releases
  • ENHANCEMENT: Build json file containing list of supported API versions
  • ENHANCEMENT: Generate and load supported Stripe API versions to upstream server
  • ENHANCEMENT: Can load the api version info for supported gateways from upstream server (once per day)
  • ENHANCEMENT: Add support for sending test message(s) to logged in user for Email Notices
  • ENHANCEMENT: Adding test data (for logged in user) if it doesn't exist
  • ENHANCEMENT: Add support for v3.0 of the E20R License utility module
  • ENHANCEMENT: Added PHPDoc blocks for class
  • ENHANCEMENT: Add 'e20r-email-notice-send-test-message' hook handler to trigger email notice test messages
  • ENHANCEMENT: Added support for new Stripe.com API versions
  • ENHANCEMENT: Making the base Gateway add-on class derive from the licensing client
  • ENHANCEMENT: composer autoloader updates
  • ENHANCEMENT: Moved plugin-update-checker to Utilities module
  • ENHANCEMENT: Added author info, etc to composer.json
  • ENHANCEMENT: Moving payment gateway add-on modules into own plugin directories
  • ENHANCEMENT: Renamed plugin
  • ENHANCEMENT: Disable updates for unlicensed add-on modules
  • ENHANCEMENT: Add support for v3 of the Licensing module
  • ENHANCEMENT: Add filter to list active add-ons
  • ENHANCEMENT: Adding support for sending test email notices from admin interface
  • ENHANCEMENT: Use updated Utilities module and plugin updater
  • BUG FIX: Would sometimes load the readme file for the add-on modules
  • BUG FIX: Didn't always load the 3rd-party payment gateway add-ons
  • BUG FIX: Don't load if License utility module isn't configured properly
  • BUG FIX: Try to avoid loop when plugin is installed on the licensing server itself
  • BUG FIX: Missing Try/Catch block for spl_autoload_register() function
  • BUG FIX: Size for the message schedule box was bad
  • BUG FIX: Clarify language for deleting data when deactivating the plugin
  • BUG FIX: PHP Warning, the timezone value wasn't always configured in the Stripe::Account object
  • BUG FIX: PHP Notice, plugin_settings wasn't consistently an array value
  • BUG FIX: Fixed PHP Notice when looking for template body text
  • BUG FIX: Debug logging caused PHP Notice
  • BUG FIX: Debug logging caused PHP Notice from User_Data class
  • BUG FIX: Typo when attempting to use is_wp_error() in gateway base class
  • BUG FIX: Refreshed the email-notice module

v4.5

  • BUG FIX: Data updates could loop for a long time (infinite)

v4.4.2

  • BUG FIX: Updated Utilities module

v4.4.1

  • ENHANCEMENT: Added more Stripe API versions. Currently included 2018-11-08

v4.4

  • ENHANCEMENT: Updated text in ccexpiring.html template
  • ENHANCEMENT: Add Credit Cart Expiration Message test hook
  • BUG FIX: No need to send out credit card expiration warning for non-recurring users
  • BUG FIX: Incorrect default message type to process when processing reminders
  • BUG FIX: Force values for $target_template and $template_type
  • BUG FIX: Didn't trigger error when $target_template or $template_type were empty
  • BUG FIX: Searching for email notice type returned too many results
  • BUG FIX: Running Reminder message handler incorrectly included too many templates
  • BUG FIX: Didn't load test hooks when configured

v4.3

  • ENHANCEMENT: Simplify the add-on specific option names and upgrade the database
  • ENHANCEMENT: Use new option names for add-ons and simplify add-on configuration
  • ENHANCEMENT: Trigger change of add-on option names when loading settings (if applicable)
  • ENHANCEMENT: Renamed render_addon_entry() method to render_addon_checkbox()
  • ENHANCEMENT: Add label to indicate payment gateway module licensing status when activated
  • ENHANCEMENT: No need to double-check when the decision had already been made to send the message
  • ENHANCEMENT: Send admin email every 7 days when there are license warnings (expiring or expired license(s))
  • ENHANCEMENT: Added PHPDoc blocks for all class variables in Payment_Reminder()
  • ENHANCEMENT: Added PHPDoc blocks for load_hooks() method in Payment_Reminder()
  • ENHANCEMENT: More debug logging for User_Data::save_to_db() function
  • BUG FIX: Load the payment reminder message filters on init (decides whether to send the message, etc)
  • BUG FIX: Don't return user_data before processing payment/subscription because email address changed
  • BUG FIX: Check and set license status when plugin is being deactivated
  • BUG FIX: Didn't check state of license when triggering toggle_addon handler
  • BUG FIX: For an add-on to be active, it also needed to be licensed (wrong behavior)
  • BUG FIX: For an add-on to have status 'active', it needs to be both active and licensed
  • BUG FIX: Didn't always trigger Payment_Reminder::should_send_reminder_message()
  • BUG FIX: Didn't trigger the 'e20r-payment-warning-send-email' filter which triggered date check of message(s)

v4.2

  • BUG FIX: Didn't check for boolean return from e20r_pw_addon_get_user_payments and e20r_pw_addon_get_user_subscriptions
  • BUG FIX: Returned Boolean when should return original User_Data structure

v4.1

  • BUG FIX: Make sure the loaded E20R_Background_Process class has the is_queue_good() method
  • ENHANCEMENT: Updated warning label for Timeout setting
  • ENHANCEMENT: Added Global_Settings::render_select(), creates SELECT HTML element using settings array in add_settings_field() method. Supports the following settings: 'select_options', 'option_default', 'option_label', 'option_default_label', 'option_name'
  • ENHANCEMENT: More dynamic Global_Setting::render_textbox() method; New settings available in array for add_settings_field() method. Supports the following settings; 'option_name', 'rows', 'cols', 'placeholder'
  • ENHANCEMENT: Added new global setting; data_fetch_timeout = 23 (hours)
  • ENHANCEMENT: Applied WP Code Style & reordered Global_Settings() class
  • ENHANCEMENT: Added static Fetch_User_Data::should_continue() method
  • ENHANCEMENT: Added static Fetch_User_Data::ending_fetch() method
  • ENHANCEMENT: Updated PHPDoc Fetch_User_Data::block for get_local_user_data() method
  • ENHANCEMENT: Applied WP Code Style to Fetch_User_Data() class
  • ENHANCEMENT: Refactored Handle_Payments::task()
  • ENHANCEMENT: Refactored Handle_Subscriptions::task()
  • ENHANCEMENT: Added timeout handling for background User Data Fetch tasks (Subscriptions and Payments)
  • ENHANCEMENT: Add filter to override configured timeout value: e20r-payment-warning-fetch-timeout (accepts 1 argument, an integer value for the number of hours the timeout is supposed to last. Can be negative)
  • ENHANCEMENT: Add debug setting for the Timeout handler for background jobs: E20R_DEBUG_TIMEOUT (boolean constant). Uses the e20r-payment-warning-fetch-timeout filter to set value to -2 (always timed out)

v4.0

  • ENHANCEMENT: Refactored send_message() method
  • BUG FIX: Didn't process all activation activities consistently.
  • BUG FIX: SQL error when column & index exists prior to upgrade
  • BUG FIX: Possible DB error when upgrading table schema for plugin
  • BUG FIX: Incorrect namespace for DB_Tables() class
  • BUG FIX: DB_Tables() class had incorrect file name for autoloader
  • BUG FIX: Would sometimes fail to run due to bad queue data
  • BUG FIX: Didn't always find the Email Notices for this plugin to transmit/send
  • BUG FIX: Failed to generate a complete message with substitution variables expanded
  • BUG FIX: Didn't try to load message body when instantiating Email_Message() class
  • BUG FIX: Reminder override (only used to debug) was too strict
  • BUG FIX: Couldn't locate templates in some situations
  • BUG FIX: Moved message content filters to Email_Message() class
  • BUG FIX: payment_date substitution variable was incorrectly defined
  • BUG FIX: Numerous updates to Reminder_Editor::configure_cpt_templates() method
  • BUG FIX: Didn't load the Payment_Warning templates in a lot of circumstances
  • BUG FIX: Didn't process deactivation logic
  • BUG FIX: Load the expected module logic in all situations
  • BUG FIX: Load modules dependent on licensing
  • ENHANCEMENT: Add overrides when E20R_DEBUG_OVERRIDE constant is defined and true
  • ENHANCEMENT: Refactored get_gateway_class_name() method in payment gateway modules
  • ENHANCEMENT: Allow searching for a template by it's slug value (Reminder_Editor::find_template_by_slug())
  • ENHANCEMENT: Special processing for previous_payment_date substitution variable in Reminder_Editor::load_filter_value() method
  • ENHANCEMENT: Added previous_payment_date substitution variable (and help)
  • ENHANCEMENT: Added cancel_link substitution variable (and help)
  • ENHANCEMENT: Added cancel_link_login substitution variable (and help)
  • ENHANCEMENT: More efficient processing of substitution variables
  • ENHANCEMENT: Specifically handling email message body processing
  • ENHANCEMENT: Move DB Table create/remove operation to own class (DB_Tables)
  • ENHANCEMENT: Moved DB updates to own DB_Tables() class
  • ENHANCEMENT: Enable message transmission override when running in Payment Warning Debug mode
  • ENHANCEMENT: More efficient and consistent way of loading gateway modules

v3.8.3

  • ENHANCEMENT: Remove unused class instantiation
  • ENHANCEMENT: More precise debug logging in Fetch_User_Data class
  • ENHANCEMENT: Include the type of sub-handler being processed in the Large_Request_Handler class
  • ENHANCEMENT: Add support for version 2018-05-21 of the Stripe API
  • ENHANCEMENT: Better debug info for the next_payment_date() module
  • ENHANCEMENT: Add bug fixes from the Utilities submodule

v3.8.2

  • ENHANCEMENT: Added the 2/28/2018 API version support for Stripe

v3.8.1

  • ENHANCEMENT: Updated Utilities infrastructure to prepare for version 4.0 with GDPR support

v3.8

  • ENHANCEMENT: Added has_licensed_gateway() method
  • ENHANCEMENT: Added a standard gateway module
  • ENHANCEMENT: Refactored settings to Global_Settings class
  • ENHANCEMENT: Refactored WP Settings page for Payment Warnings to own class (Global_Settings)
  • ENHANCEMENT: Made load_options a static function for Global_Settings
  • ENHANCEMENT: Refactored membership plugin specific setting handlers
  • ENHANCEMENT: Refactored Membership module level settings
  • ENHANCEMENT: Fixed PHPDoc blocks for Global_Settings
  • ENHANCEMENT: Add new Stripe API versions to list
  • ENHANCEMENT: Be more discering about the hooks/filters being when not doing a CRON job or the user isn't logged in
  • ENHANCEMENT: Limit activity when not logged in or executing the CRON jobs
  • ENHANCEMENT: Only load certain actions if we're exclusively executing a CRON job
  • ENHANCEMENT: Only load certain actions if we're exclusively loading the WP backend
  • ENHANCEMENT: Updated Utilities module (now includes a custom is_admin() method and stub for Support)
  • ENHANCEMENT: Always load the remote webhook/silent post/IPN handler functions for the plugin
  • ENHANCEMENT: Removed unneeded DEBUG output
  • ENHANCEMENT: Don't load hooks for Reminder Editor unless user is logged in or we're executing a Cron job
  • BUG FIX: Fatal error in Payment_Reminder::load_schedule() method
  • BUG FIX: Need to load Cron job handlers when in wp-admin
  • BUG FIX: Changed all non-static calls to load_options() to Global_Settings::load_options()
  • BUG FIX: Attempted to load unneded actions/filters in Global_Settings
  • BUG FIX: Didn't use the Global_Settings::load_admin_settings() method for the admin_menu action

v3.7

  • ENHANCEMENT: Implemented IPN handler for locally cached PayPal gateway data
  • ENHANCEMENT: Added default Credit Card fields for PayPal IPN data
  • ENHANCEMENT: Added new Stripe API version (2018-01-23)
  • ENHANCEMENT: Only remove records if we're configured to do so
  • BUG FIX: Didn't properly complete a license status check & post/send warnings to admin
  • BUG FIX: Don't load webhook handler if there isn't one defined for the add-on

v3.6

  • ENHANCEMENT/FIX: Disallow accessing Email Notices on front-end of site (as a post/page or an archive)
  • ENHANCEMENT: Build debug and release kits for plugin

v3.5

  • ENHANCEMENT: Add 'purge records from local DB when stale' option on Payment Warnings settings page
  • ENHANCEMENT: Optionally trigger purge operation using 'e20r-payment-warning-clear-old-records' filter with the new setting
  • ENHANCEMENT: Add admin configurable purge operation at end of Payments info download job
  • ENHANCEMENT: Add admin configurable purge operation at end of Subscription info download job
  • ENHANCEMENT: Clarify debug message in Handle_Messages::complete() method
  • BUG FIX: Incorrect version number when 'e20rpw_db_version' option isn't set

v3.4

  • BUG FIX: Incorrect class type for try/catch operations in Stripe.com gateway add-on
  • BUG FIX: Incorrect class type for try/catch operations in Check gateway add-on

v3.3

  • ENHANCEMENT: Allow outside party to configure the message types available with the e20r-payment-warning-message-types filter
  • ENHANCEMENT: Default option value for the e20r_pw_sent_* options should be array( $today => array())
  • ENHANCEMENT: Message type text_value now matches the values from the e20rpw_warning_message_types filter
  • ENHANCEMENT: Preserve up to 30 days of message sent to logs (when we sent the message to the specified email address)
  • ENHANCEMENT: Added filter to allow configuration of number of days to preserve (e20r-payment-warning-admin-notice-log-days).
  • ENHANCEMENT: Support sending admin notices for user configured message types
  • BUG FIX: Message type text_value in Reminder_Editor::define_message_types() didn't match default e20rpw_warning_message_types filter values
  • BUG FIX: Sent too many admin notices to admin

v3.2

  • BUG FIX: Didn't disable the default PMPro expiration warning emails

v3.1

  • ENHANCEMENT/FIX: Updated Utilities submodule to v2.0
  • BUG FIX: Didn't clear/remove the debug log(s) for the PayPal Merchants API library
  • BUG FIX: Renamed the example addon class to Example_Gateway_Addon and need to reflect that in licensing and settings/stubs to ignore

v3.0

  • ENHANCEMENT: Add .editorconfig
  • ENHANCEMENT: Remove old Email Editor functionality and replace it with the Email Notice submodule
  • ENHANCEMENT: Adding ability to change the action name for the background process
  • ENHANCEMENT: Add CreditCard Expiration warning admin message (when applicable)
  • ENHANCEMENT: Add data fetch for Credit Card Expiration warnings
  • ENHANCEMENT: Added documentation for functions/variables in Large_Request_Handler
  • ENHANCEMENT: Process multiple payment gateway data fetch operations at the same time
  • ENHANCEMENT: Specify the number of messages sent to each member (warning messages) in the admin notice(s)
  • ENHANCEMENT: Add 'load_schedule()' method to support Email Notice submodule
  • ENHANCEMENT: Refactored and added PHPDoc modules for all methods
  • ENHANCEMENT: Add all methods/capabilities needed to support Email Notice module & deactivate the old Template Editor functionality
  • ENHANCEMENT: Allow processing for multiple payment gateways (in Handle_Subscriptions and Handle_Payments classes)
  • ENHANCEMENT: Add support for processing payment & subscription data from multiple payment gateways at once in Payment Warning Add-on classes
  • ENHANCEMENT: Add support for locking/processing multiple payment gateways at the same time
  • ENHANCEMENT: Start using the Email Notice submodule to send/process/create warning messages
  • ENHANCEMENT: Allow sending multiple different messages on the same day to the same user
  • ENHANCEMENT: Add PHPDoc for all methods in Email_Message class
  • ENHANCEMENT: Refactored class.handle-payments.php
  • ENHANCEMENT: Refactored class.handle-subscriptions.php
  • ENHANCEMENT: Subscription & Payment data collection didn't always work when having multiple active gateways!
  • ENHANCEMENT: Update get_handler() method to support multiple different payment gateways and sending different message types.
  • ENHANCEMENT: Load licensed modules
  • ENHANCEMENT: Make the get_active_addons() method public
  • ENHANCEMENT: Add section to let admin set message types to activate/send warnings for in Payment Warning Settings
  • ENHANCEMENT: Add handlers for !!saved_cc_info!! and !!billing_address!! substitution variables for Payment Warnings
  • ENHANCEMENT: Add get_payment_info() method (generated list of credit card info from payment gateway)
  • ENHANCEMENT: Add format_billing_info() method (generates and formats the PMPro billing address on file for a user)
  • ENHANCEMENT: Add PHPDoc for some functions/methods
  • ENHANCEMENT: Add required implementations for custom_post_column() and set_custom_edit_columns() method (adds message type label in edit.php list for the defined Email Notice).
  • ENHANCEMENT: Renamed !!billing_info!! substitution variable to !!billing_address!!
  • ENHANCEMENT: Moved handlers for billing_address and saved_cc_info substitution variables to Email_Message class
  • ENHANCEMENT: Add PHPDoc blocks for methods in User_Data class
  • ENHANCEMENT: Add company_name setting
  • ENHANCEMENT: Configure the footer of the email notices using Payment Warning settings & filters
  • ENHANCEMENT: Add company_address option to Payment Warnings Settings page
  • ENHANCEMENT: Add render_textarea() method for Settings API
  • ENHANCEMENT: Including PayPal Merchant API library
  • ENHANCEMENT: Removing unused method from Email_Message() class
  • ENHANCEMENT: Refactor maybe_extract_class_name() method (now in parent gateway class)
  • ENHANCEMENT: Add 'gateway_module' column support to database table
  • ENHANCEMENT: Refactor filter/action hook loading to parent class for all add-ons
  • ENHANCEMENT: Make gateway name check more fuzzy in verify_gateway_processor() method
  • ENHANCEMENT: Make load_webhook_handler() method generic
  • ENHANCEMENT: Refactor maybe_extract_class_name() method and move to parent class for all add-ons
  • ENHANCEMENT: Improved PHPDoc blocks for methods & variables in E20R_PW_Gateway_Addon class
  • ENHANCEMENT: Specify the add-on module being processed in debug messages where it makes sense
  • ENHANCEMENT: Renamed from set_active_non_subscription_members() method to get_active_non_subscription_members()
  • ENHANCEMENT: Renamed set_active_subscription_members() to get_active_subscription_members()
  • ENHANCEMENT: Cache user records by type and payment warning add-on module
  • ENHANCEMENT: Added gateway_addon_check() method. Returns true if add-on name and payment gateway module matches
  • ENHANCEMENT: Clear all of the per add-on member data caches
  • ENHANCEMENT: When running in DEBUG mode, clear the cache for members every time
  • ENHANCEMENT: Allow Stripe add-on module to run in parallel with other payment warning add-on modules
  • ENHANCEMENT: Assign the type of add-on used to fetch an upstream user record in the local DB
  • ENHANCEMENT: Stripe specific get_gateway_class_name() method
  • ENHANCEMENT: Moved maybe_extract_class_name() method to parent class
  • ENHANCEMENT: Load standard hooks for this gateway in parent class
  • ENHANCEMENT: Improved documentation of Stripe_Gateway_Addon class
  • ENHANCEMENT: Various minor updates (doc & variable cast) to PayPal_Gateway_Addon class
  • ENHANCEMENT: Implement PayPal API calls with the PayPal Merchants API library
  • ENHANCEMENT: Add upstream fetch of subscription data for PayPal
  • ENHANCEMENT: Add upstream fetch of payment/transaction data for PayPal
  • ENHANCEMENT: Convert PayPal transaction timestamps to local (server local) timestamps
  • ENHANCEMENT: Add stub for handling relevant PayPal IPN messages
  • ENHANCEMENT: Allow admin to configure the PayPal service they use with PMPro
  • ENHANCEMENT: Update the Example_Gateway_Addon with expected/required method stubs & documentation
  • ENHANCEMENT: Rename Example_Addon to Example_Gateway_Addon to match naming structure of other implemented add-ons
  • ENHANCEMENT: Various required updates (required methods etc) for the incomplete Check Payment Gateway add-on
  • ENHANCEMENT: Refactor Cron_Handler class
  • ENHANCEMENT: Load data from all active and licensed payment gateway modules at once
  • ENHANCEMENT: Add @PHPDoc blocks for more variables in User_Data class
  • ENHANCEMENT: Add @PHPDoc blocks for more methods in User_Data class
  • ENHANCEMENT: Link User_Data class to the add-on being processed
  • ENHANCEMENT: Use boolean value to identify whether a local record has been loaded for the User_Data instance
  • ENHANCEMENT: Add public has_record_saved() method
  • ENHANCEMENT: Updated variable documentation (PHPDoc) for Handle_Subscriptions class
  • ENHANCEMENT: Set/get add-on using the Handle_Subscriptions class
  • ENHANCEMENT: Updated variable documentation (PHPDoc) for Handle_Payments class
  • ENHANCEMENT: Set/get add-on using the Handle_Payments class
  • ENHANCEMENT: Limit upstream data fetch operation to the add-on instantiating the Handle_Payments class
  • ENHANCEMENT: Add Upgrade() class/methods for new DB version
  • ENHANCEMENT: Bump required DB version number to support new table column for add-on type
  • ENHANCEMENT: Renamed e20r_pw_addon_add_remote_call_handler action hook to e20r_pw_addon_remote_call_handler
  • ENHANCEMENT: Prevent directory listing of logs directory (for Gateway library debug logs)
  • ENHANCEMENT: Prevent web server access to *.log files in logs/ directory
  • ENHANCEMENT/FIX: Configure Payment_Warning as the module using the Send_Email class
  • ENHANCEMENT/FIX: Don't show 'no records found' warning message for inactive add-on modules
  • BUG FIX: Didn't load the correct pmpro_save_membership_level action hook
  • BUG FIX: Don't trigger add-on check twice in load_addon_settings()
  • BUG FIX: Would try to process empty $user_data in task() method for Handle_Payments class
  • BUG FIX: Would try to process empty $user_data in task() method for Handle_Subscriptions class
  • BUG FIX: Skipped user if there wasn't a pre-existing record in the local DB
  • BUG FIX: Didn't exclude records for other payment gateway modules
  • BUG FIX: Would sometimes double the records to process in the get_all_user_records() method
  • BUG FIX: Only display Payment Warning message types for payment warning messages
  • BUG FIX: Don't internationalize date for payment in Stripe_Gateway_Addon class
  • BUG FIX: Removed e20r_pw_message_substitution_variables filter
  • BUG FIX: Didn't trigger e20r-email-notice-custom-variable-filter handlers for billing address & Credit Card data
  • BUG FIX: PHP Warning message in Email_Message class
  • BUG FIX: Typo in the !!saved_cc_info!! substitution variable handler
  • BUG FIX: Didn't clear the Active Addon cache when saving the Options page
  • BUG FIX: Incorrectly assumed the $e20r_pw_addons (array) list always contains the list of active add-ons
  • BUG FIX: Would cache an empty list of active add-ons (if they existed)
  • BUG FIX: Update get_reminder_type() to handle new Email Notice submodule
  • BUG FIX: Didn't use the supplied subscription ID
  • BUG FIX: Didn't properly handle fetching data from multiple active payment gateways
  • BUG FIX: Didn't dispatch the Payment Reminder queues properly
  • BUG FIX: Didn't always load/locate the proper queue handler for messages
  • BUG FIX: Didn't send all of the messages in the defined list of messages for that warning type
  • BUG FIX: Didn't load Credit Card user data correctly
  • BUG FIX: Didn't always process all types of warning messages
  • BUG FIX: Used localized date
  • BUG FIX: Only include active payment profiles for Credit Card Expiration Warnings

v2.0

  • BUG FIX: Update Email Editor sources
  • BUG FIX: Refresh Utilities submodule to fix licensing issues
  • ENHANCEMENT: Framework for Check Gateway support

v1.9.16

  • ENHANCEMENT: Security update

v1.9.15

  • ENHANCEMENT: Move E20R_Async_Request class to Utilities submodule
  • ENHANCEMENT: Move E20R_Background_Process class to Utilities submodule
  • ENHANCEMENT: Remove unused namespaces from Fetch_User_Data class
  • ENHANCEMENT: Rename PayPal Gateway add-on module
  • ENHANCEMENT: Add OAuth2 Client Secret and Key settings to PayPal add-on settings
  • ENHANCEMENT: Move the PayPal REST API SDK library to libraries/
  • ENHANCEMENT: Upgraded Utilities submodule to include the Background processing library
  • BUG FIX: Didn't include Handle_Messages in move of Background Processing to Utilities module
  • BUG FIX: Didn't start the background job when we expected it to
  • BUG FIX: Fatal error if unexpected module/class file is present in add-on directory
  • BUG FIX: Didn't handle Stripe API errors well
  • BUG FIX: Report error if no transaction ID is found for Stripe charge/invoice

v1.9.14

  • BUG FIX: Didn't always load active recurring payment member data
  • BUG FIX: Didn't load previously recurring membership records that are now expiring
  • BUG FIX: Should always set status to 'recurring' in set_active_subscription_members()
  • BUG FIX: Handle situations where user has a recurring level and we have to auto-detect
  • ENHANCEMENT: Simplified config of non-recurring payment status (always active based on what PMPro believes)
  • ENHANCEMENT: Simplified config of status (always active based on what PMPro believes)
  • ENHANCEMENT: Reduce debug logging levels

v1.9.13

  • BUG FIX: Would sometimes double up on the entry count in the queue

v1.9.12

  • ENHANCEMENT/FIX: Clear old temporary data/keys/values from options table

v1.9.11

  • REFACTOR: Moved monitoring for background data collection job to fetch_gateway_payment_info action
  • BUG FIX: Moved monitoring cron job scheduler to Cron_Handler class

v1.9.10

  • ENHANCEMENT: Faster completion of scheduled job checks
  • ENHANCEMENT: Also add monitoring if the mutex is set
  • BUG FIX: Delay first execution of monitoring action

v1.9.9

  • ENHANCEMENT: Add monitoring for background data collection job
  • ENHANCEMENT: Clear mutex (lock) options (if they exists) once the background jobs are done/have completed
  • ENHANCEMENT: Added Cron schedule for 30 minute repeating check of background data collection status

v1.9.8

  • BUG FIX: Didn't trigger remote data update
  • ENHANCEMENT: Updated Utilities/Licensing modules

v1.9.7

  • ENHANCEMENT: Added array_isnt_empty() function which returns true if the array contains values (can still fail an '! empty()' call)
  • ENHANCEMENT: Simplify placeholder text for license input
  • BUG FIX: Problems when activating or managing multiple licenses from different plugin entities at the same time.
  • BUG FIX: Extra slashes in Subject
  • BUG FIX: Support new argument for e20r-license-add-new-licenses filter
  • BUG FIX: Would fail to save/activate valid licenses in certain situations

v1.9.6

  • BUG FIX: Didn't always appear to clear job from queue on successful save during payment processing
  • BUG FIX: Would sometimes double up the times it processed a non-recurring payment record
  • BUG FIX: Would load credit cards in an unexpected format causing double-save operations
  • BUG FIX: Doubly certain we won't attempt to save the CC info twice
  • BUG FIX: Didn't return the correct/a membership level name
  • BUG FIX: Didn't use a consistent user_payment_status value ('active')
  • BUG FIX: Variable substitution for messages providing incorrect information
  • BUG FIX: Would sometimes process same batch twice
  • BUG FIX: Queue lock time variable wasn't initialized anywhere
  • BUG FIX: Would load too many templates to process messages for
  • BUG FIX: Incorrect namespace for Email_Message class action handlers
  • ENHANCEMENT: Update debug enabled AJAX handler
  • ENHANCEMENT: Load data from local DB, not upstream, when processing messages
  • ENHANCEMENT: Using new names for configure_remote_subscription_data_fetch() and configure_remote_payment_data_fetch() in Cron_Handler
  • ENHANCEMENT: Renamed get_remote_subscription_data() to configure_remote_subscription_data_fetch()
  • ENHANCEMENT: Renamed get_remote_payment_data() to configure_remote_payment_data_fetch()
  • ENHANCEMENT: Set cache timeout for active nonrecurring subscription data to 12 hours
  • ENHANCEMENT: Set cache duration to 12 hours for active_subscr_users
  • ENHANCEMENT: Set cache duration to 12 hours for all_active_users
  • ENHANCEMENT: Set cache duration to last 4 hours for current_{$type} (type specific) current records
  • ENHANCEMENT: Use local DB lookup (e20rpw_user_info table) for reminder/expiration notices
  • ENHANCEMENT: Refactor and move clear_queue() to parent class (E20R_Background_Process)
  • ENHANCEMENT: Refreshed Utilities tools/classes
  • ENHANCEMENT: Added fixes and updates from EWWW Image Optimizer code to background processing classes
  • ENHANCEMENT: Clear the message queue for the messages background handler
  • ENHANCEMENT: Refactor and move clear_queue() to parent class (E20R_Background_Process)
  • ENHANCEMENT: Transitioning to Utlities submodule (github) and License/Client_License classes for addon gateways
  • ENHANCEMENT: More descriptive placeholder for new license input
  • ENHANCEMENT: Uses static Email_Message::default_variable_help() function
  • ENHANCEMENT: Add PHPDoc for add_placeholder_variables()
  • ENHANCEMENT: Renamed get_remote_subscription_data() to configure_remote_subscription_data_fetch()
  • ENHANCEMENT: Renamed get_remote_payment_data() to configure_remote_payment_data_fetch()
  • ENHANCEMENT: Use configured date format for membership end date in email notices
  • ENHANCEMENT: Apply variable substitution via filter for template(s)/message type(s)
  • ENHANCEMENT: Made replace_variable_text() function static & a filter hook
  • ENHANCEMENT: Added e20rpw_variable_help filter to result of default_variable_help()
  • ENHANCEMENT: Add get_active_queue() method
  • ENHANCEMENT: Account for differences between single site & multisite columns in DB
  • ENHANCEMENT: Add error checking for unlock_process()
  • ENHANCEMENT: Add clear_queue() to core (parent) function

v1.9.5

  • BUG FIX: Only load active and non-recurring billing members
  • BUG FIX: Load all recurring payment records that are active (and w/o enddate) or have an enddate in the futur

v1.9.4

  • BUG FIX: Use appropriate autoload value for update_option()
  • BUG FIX: Didn't update the e20r_pw_next_gateway_check option value
  • BUG FIX: Return record list from set_active_subscription_members()
  • BUG FIX: Return record list from set_all_active_members()
  • BUG FIX: Would return whatever records were previously loaded if incorrect type was given
  • BUG FIX: Prevented from saving end of membership date due to typo in variable name
  • BUG FIX: Typo in reminder_type supplied for non-recurring memberships
  • BUG FIX: Didn't force the reminder type (recurring) for the user data when processing
  • BUG FIX: Didn't force the reminder type (expiration) for the user data when processing
  • BUG FIX: Returned boolean value when looking for email address for recipients of message(s)
  • ENHANCEMENT: Added error checking in get_remote_payment_data() for get_all_user_records() return values
  • ENHANCEMENT: No longer declaring the type of data to save (recurring/payment)
  • ENHANCEMENT: No longer need to specify type of record being saved in save_to_db()
  • ENHANCEMENT: Preventing get_remote_subscription_data() from running more than once at a time
  • ENHANCEMENT: Preventing get_remote_payment_data() from running more than once at a time
  • ENHANCEMENT: Remove subscription data fetch lock w/error checking & messages to dashboard
  • ENHANCEMENT: Remove non-recurring payment data fetch lock w/error checking & messages to dashboard

v1.9.3

  • BUG FIX: Didn't update the version number for the DB after successfully upgraded
  • ENHANCEMENT: Adding DB v3 update

v1.9.2

  • BUG FIX: Didn't use the default method - get_all_user_records() - when loading member/user data
  • BUG FIX: Explicitly instantiate User_Data() class for expiration or recurring billing info when loading
  • BUG FIX: Didn't always load the required user records in get_all_user_records() method
  • BUG FIX: Make default reminder processing option be 'ccexpiration' (Credit Cards) since all other options explicitly set their data type (recurring, expiring)
  • BUG FIX: Make default user record type option be 'ccexpiration' (Credit Cards) since all other options explicitly set their data type (recurring, expiring)
  • BUG FIX: Didn't always set the level ID we should expect for the member
  • BUG FIX: DB uses MySQL date string, got timestamp from membership level setting (seconds since epoch)
  • BUG FIX: Didn't set the correct end of (active) membership date for non-recurring members
  • BUG FIX: Didn't return error if date is bad or empty in set_end_of_membership_date()
  • BUG FIX: Should process default send email action before anything that could modify it
  • BUG FIX: Would fail to send notifications for non-recurring members
  • BUG FIX: Wouldn't respect skip admin notice setting
  • ENHANCEMENT/FIX: Add end of membership date if subscription plan is cancelled
  • ENHANCEMENT: Use local membership enddate if no date is supplied to set_end_of_membership_date() method
  • ENHANCEMENT: Remove any instance of the charge or subscription record data
  • ENHANCEMENT: Force the reminder_type based on whether the membership (for the user) is recurring or not
  • ENHANCEMENT: More debug logging and status checks when clearing the background job queue for payment handler
  • ENHANCEMENT: Name add_local_order() more appropriately for something only processing subscriptions (add_local_subscription_order())

v1.9.1

  • BUG FIX: Didn't use the correct table name when updating the DB

v1.9.0

  • BUG FIX: Fixed version numbering for DB tables
  • BUG FIX: Namespace fix for Licensing classes
  • ENHANCEMENT/FIX: Activation SQL for database table(s)
  • ENHANCEMENT/FIX: Update namespace for new Utilities submodule & relocation to Tools NS for Cron & Background job classes
  • ENHANCEMENT: Use Utilities as submodule
  • ENHANCEMENT: Move cron & background handler code to Tools/
  • ENHANCEMENT: Move Email Message handler code to Tools/
  • ENHANCEMENT: Move utilities (Utilities & Cache handling) classes to own submodule
  • ENHANCEMENT: Add option for info banner on completion of message operation
  • ENHANCEMENT: Add database upgrade infrastructure
  • ENHANCEMENT: Add Database Upgrade functionality
  • ENHANCEMENT: Use licensing/utilities submodule

###1.8.9

  • BUG FIX: Didn't send message for users in certain situations
  • BUG FIX: PHP Warning message fixed in send_admin_notice() method
  • BUG FIX: Didn't return actual value (implicit false actually retuned)
  • ENHANCEMENT: Code style improvements

v1.8.8

  • BUG FIX: Typo in help text for saved credit card info
  • ENHANCEMENT: Don't send email notice to admin if no messages of the type was sent
  • ENHANCEMENT: Add filter to let notice to admin get sent if no messages of the type was sent ('e20r-payment-warning-skip-admin-message-if-none-sent')

v1.8.6

  • BUG FIX: Didn't check if admin had enabled payment & subscription data download

v1.8.5

  • BUG FIX: Didn't run email notice transmission within the first day of activation

v1.8.4

  • BUG FIX: Didn't run data collection within the first day of activation

v1.8.3

  • BUG FIX: Database table creation failure

v1.8.2

  • BUG FIX: Invalid format array caused save errors for user data
  • BUG FIX: Didn't save the correct modified timestamp
  • BUG FIX: Incorrect column definition for e20rpw_user_info.modified
  • BUG FIX: Removed credit card admin notice (for now)
  • ENHANCEMENT: Added index for modified timestamp

v1.8.1

  • BUG FIX: Didn't render the Fetch from remote Payment Gateways setting

v1.8.0

  • BUG FIX: Would trigger upstream gateway data fetch for any message cron job
  • ENHANCEMENT/FIX: Synchronize name of Background Processing class constructor variables ($handle)
  • ENHANCEMENT/FIX: Only process Payment & Subscription data from remote payment gateways when explicitly permitted
  • ENHANCEMENT: Explicit control over background processing handles
  • ENHANCEMENT: Remove modified column data (want to use trigger to update timestamp)
  • ENHANCEMENT: Added debug to validate type of user record operation (insert or update)
  • ENHANCEMENT: Added E20R_DEBUG_OVERRIDE constant to force the gateway download delays in the schedule to be overridden when in WP_DEBUG (define())

v1.7.2

  • BUG FIX: Didn't update subscription info in local DB

v1.7.1

  • BUG FIX: Didn't save the current timestamp when modifying user's record
  • BUG FIX: Didn't use the subscription of charge ID to identify current/pre-exisiting record in DB
  • BUG FIX: Use default & ON UPDATE trigger value in DB for modified column

v1.7.0

  • BUG FIX: Don't exit if there's no current post ID when loading media
  • ENHANCEMENT/FIX: Clean up any weird template settings
  • ENHANCEMENT: Added default substitution variables w/help info
  • ENHANCEMENT: Add substitution variable help on Template Editor page

v1.6.6

  • BUG FIX: Sent duplicate notices to the same user

v1.6.5

  • BUG FIX: Didn't extract the correct credit card info for the Payment Details

v1.6.4

  • BUG FIX: Didn't always calculate the right number of sent message notifications
  • BUG FIX: Didn't send notification email for user

v1.6.3

  • BUG FIX: Didn't clear the charge/subscription data
  • ENHANCEMENT/FIX: Update record based on subscription or charge ID (not MemberOrder ID)
  • ENHANCEMENT: Better debug logging when clearing a scheduled event (on completion)
  • ENHANCEMENT: Upgrading Utilities class to v1.9
  • ENHANCEMENT: Use a membership agnostic option for fetching membership level specific data
  • ENHANCEMENT: Simplify debug output during license check loopback prevention

v1.6.2

  • BUG FIX: Cleaned up CSS file for plugin (not used)
  • BUG FIX: Didn't let PMPro Webhook actions to trigger for Stripe.com
  • BUG FIX: Empty Javascript & Style load caused 404 error in wp-admin backend
  • ENHANCEMENT/FIX: Use static constant (plugin_slug)
  • ENHANCEMENT: Refactored admin_enqueue_script()
  • ENHANCEMENT: Added webhook_handler() method to PayPal Express gateway add-on (stub)
  • ENHANCEMENT: Added PHPDoc for webhook_hander method()

v1.6.1

  • ENHANCEMENT/FIX: load_webhook_handler() checks that add-on is active before loading the AJAX handler(s)
  • ENHANCEMENT: Moved logic for load_webhook_handler() to E20R_PW_Gateway_Addon class
  • ENHANCEMENT: Handling most of the heavy lifting for the load_webhook_handler() method in the E20R_PW_Gateway_Addon class (Stripe.com add-on)
  • ENHANCEMENT: Handling most of the heavy lifting for the load_webhook_handler() method in the E20R_PW_Gateway_Addon class (PayPal Express add-on)
  • ENHANCEMENT: Added 'handler_name' attribute to global add-on settings array ($e20r_pw_addons) for PayPal Express addon
  • ENHANCEMENT: Added 'handler_name' attribute to global add-on settings array ($e20r_pw_addons) for Stripe.com addon
  • ENHANCEMENT: Added new API version to version array for Stripe.com

v1.6

  • BUG FIX: Would sometimes timeout during add-on/gateway activation
  • BUG FIX: Didn't consistently save the license status for the add-on being processed
  • BUG FIX: Used the wrong stub filter for the PayPal Express Gateway class
  • ENHANCEMENT/FIX: An add-on is only active if it's both licenseed and the is_active status (checkbox) is checked
  • ENHANCEMENT/FIX: Update licensing class to v1.4 - Includes fixes for invalid product key provided, etc
  • ENHANCEMENT/FIX: No longer checking license to enable the Template editor
  • ENHANCEMENT/FIX: Renamed the E20R_Stripe_Gateway_Addon class to Stripe_Gateway_Addon
  • ENHANCEMENT: Fix filter name: e20r_pw_addon_stripe_gateway_addon_name
  • ENHANCEMENT: Use the global settings when checking the status for the Stripe_Gateway_Addon activation logic
  • ENHANCEMENT: Simplify restoring values for is_active and active_license in the Stripe_Gateway_Addon config array
  • ENHANCEMENT: Rename 'add-ons' to the more descriptive 'Gateways' and fix the descriptive text for the options
  • ENHANCEMENT: Remove redundant 'Gateway' from label

v1.5.4

  • BUG FIX: DeBUG FIX: Selected the wrong template type for Recurring Payment warning (and credit card expiration warning)

v1.5.3

  • BUG FIX: Deactivate PayPal Express completely

v1.5.2

  • BUG FIX: Didn't always confirm that jobs were scheduled
  • ENHANCEMENT/FIX: Make plugin activation/deactivation functions static

v1.5.1

  • BUG FIX: Included escaped text in email body
  • BUG FIX: Would sometimes send multiple instances of same message to same user on same day
  • BUG FIX: Didn't correctly handle expiration and credit card expiration messages
  • BUG FIX: Uses has_active_subscription variable to determine staus for user record
  • BUG FIX: Didn't always send reminder message for non-recurring message types
  • BUG FIX: Set correct access for class parameters
  • BUG FIX: Update action hook handler for e20r_pw_addon_gateway_subscr_statuses filter in stripe gateway class
  • ENHANCEMENT/FIX: Incorrect template type for Credit Card Expiration message
  • ENHANCEMENT/FIX: Use dedicated template type setting for Credit Card expiration notice
  • ENHANCEMENT/FIX: Moved subscription mismatch handler to core gateway handler class
  • ENHANCEMENT/FIX: Moved email address mismatch handler to core gateway handler class
  • ENHANCEMENT/FIX: Add abstract load_webhook_handler() method to core gateway handler class
  • ENHANCEMENT/FIX: Add abstract get_local_customer_id() method to core gateway handler class
  • ENHANCEMENT: Load all active members to active_members variable (set_all_active_members() method)
  • ENHANCEMENT: Added cache clear for new all_active_members cache
  • ENHANCEMENT: No longer stores subscription or charge data in local db tables
  • ENHANCEMENT: Remove debug info from logs
  • ENHANCEMENT: Renamed should_send_payment_reminder() method to should_send_reminder_message()
  • ENHANCEMENT: Move save_subscription_mismatch action handler to core class
  • ENHANCEMENT: Rename valid_stripe_subscription_statuses() to valid_gateway_subscription_statuses()
  • ENHANCEMENT: Stop saving transaction data to local DB (subscriptions and charges)
  • ENHANCEMENT: Only used the subscription ID in the e20r_pw_addon_save_subscription_mismatch action hooks
  • ENHANCEMENT: Add initial framework for PayPal Express payment gateway add-on
  • ENHANCEMENT: Remove subscription list and charge list from local DB storage
  • ENHANCEMENT: Add ccexpiration as a valid reminder type
  • ENHANCEMENT: Add libraries directory to build script
  • ENHANCEMENT: Minor updates to Example add-on class stub
  • ENHANCEMENT: Add REST API library for PayPal/PayPal Express

v1.5

  • ENHANCEMENT: Add private next_scheduled() method to calculate the next timestamp for a Cron job in Cron_Handler
  • ENHANCEMENT: Use next_scheduled() method to provide timestamp for when Cron jobs start in Cron_Handler
  • ENHANCEMENT: Added updated_membership_level() method to Payment_Warning Class
  • ENHANCEMENT: Added update_discount_codes() method to Payment_Warning Class
  • ENHANCEMENT: Added get_util_cache_key() method to Utilities class
  • ENHANCEMENT/FIX: Dropping cache values for Cron schedules after discount code or level updates
  • BUG FIX: Displayed extra slash characters in message body
  • BUG FIX: Displayed extra slash charaters in message title/subject
  • BUG FIX: Didn't update the next scheduled option for the upstream gateway data collection operation

v1.4.4

  • BUG FIX: Didn't always identify the right user list for the Subject field

v1.4.3

  • BUG FIX: Didn't expand the user list properly for the notification message(s)

v1.4.2

  • BUG FIX: Didn't always allow cron job(s) to execute

v1.4.1

  • BUG FIX: Typo in e20r_payment_warning_schedule_override filter name
  • ENHANCEMENT: Add fetch_remote_info test method & override scheduled run info during DEBUG

v1.4

  • BUG FIX: Didn't set translation/language domain on init/startup of plugin
  • BUG FIX: Didn't always apply first-run logic on activation of plugin
  • BUG FIX: Attempted to run email notice cron jobs on activation
  • BUG FIX: Didn't schedule the background cron actions
  • BUG FIX: Clear all existing user entries in active_members member variable
  • BUG FIX: Would include too many users when loading active non_subscription based members/users
  • BUG FIX: Would include too many users when loading active subscription based members/users
  • BUG FIX: Didn't dispatch request handler for large number(s) of records to process
  • ENHANCEMENT: Reduce memory footprint during load of User_Data class
  • ENHANCEMENT: Allow coder to specify whether to load data or not in maybe_load_from_db() method
  • ENHANCEMENT: Allow override of recurring membership status (via variable - boolean)
  • ENHANCEMENT: Reduced memory footprint in initial load of user records (deferred data load to task hander).
  • ENHANCEMENT: Added get_action() method to Handle_Payments and Handle_Subscriptions classes
  • ENHANCEMENT: Don't run gateway check immediately on plugin activation
  • ENHANCEMENT: Allow override from manual initiation of plugin CRON job(s)
  • ENHANCEMENT: Removed unneeded logging
  • ENHANCEMENT: Rename get_active_members() methods to set_active_members()
  • ENHANCEMENT: Ignore orders that are made with a different gateway environment (live|sandbox) than the currently configured PMPro Payment Gateway key(s)/settings
  • ENHANCEMENT: Setting membership status manually
  • ENHANCEMENT: Clean up memory
  • ENHANCEMENT: Assign all active user records to active_members variable (avoid duplication)
  • ENHANCEMENT: Renamed handler array variable to task_handler
  • ENHANCEMENT: Improved debug logging for Subscription handler task() method
  • ENHANCEMENT: Added get_action() method

v1.3.1

  • BUG FIX: Would sometimes ignore settings for emailing warnings during scheduled events
  • BUG FIX: Wouldn't honor the delay frequency (reduce load on server
  • BUG FIX: Would stomp it's own large request handling for payments & subscriptions
  • ENHANCEMENT: Allow WP Crontrol plugin to manually override data fetch
  • ENHANCEMENT: Use different instances of the large request handler for subscriptions and payments
  • ENHANCEMENT: Use string identifier for the action name in Large_Request_Handler

v1.3

  • ENHANCEMENT: Update copyright notice (year)
  • ENHANCEMENT: Improved granularity for error/debug logging
  • ENHANCEMENT: Fetch background process handler(s) with Payment_Warnings::get_handler() method
  • ENHANCEMENT: Add get_handler() method to return the specified request handler
  • ENHANCEMENT: Add private variables for the request handlers to Payment_Warnings class
  • ENHANCEMENT: Use Payment_Warnings::get_handler() to fetch message handler
  • ENHANCEMENT: More descriptive variable name in constructor for Large_Request_Handler class
  • ENHANCEMENT/FIX: Move the required handler instantiations to the main Payment_Warnings class
  • ENHANCEMENT/FIX: Move all request based processing (background processing) to main Payment_Warnings class
  • BUG FIX: Didn't always handle message sending correctly
  • BUG FIX: Clean up schedule handling in E20R_Background_Process class
  • BUG FIX: Didn't always dispatch large requests

v1.2

  • BUG FIX: Didn't disable the default PMPro actions for expiration warnings, credit card expiration warnings and recurring payment notices if the equivalent functionality is active in this plugin
  • ENHANCEMENT: Add placeholder to allow adding PMPro Template Editor messages if present

v1.1

  • ENHANCEMENT: Add ability to process large number of users across multiple requests
  • ENHANCEMENT: Process at most 250 user data records at a time
  • ENHANCEMENT: Add filter to let admin set # of requests to process per dispatch (TODO: Make this a global setting)
  • ENHANCEMENT: Only trigger processing for subscriptions (payment warning data) if enabled
  • ENHANCEMENT: Use passed background processing handler class from received data in task() method
  • ENHANCEMENT: Removed unneeded debug logging from Background Processing class
  • ENHANCEMENT: Disable debug/test actions
  • ENHANCEMENT: Add readme.md documentation file for Github repo
  • ENHANCEMENT: Include readme.md file in build
  • BUG FIX: Would display incorrect debug message when plugin was licensed
  • BUG FIX: Attempted to save and dispatch background job during data loop in task() method
  • BUG FIX: Didn't dispatch large request handler properly (Now class is instantiated during/before plugins_loaded action hook to ensure proper execution)
  • BUG FIX: Attempted to save and dispatch large request handler data during loop
  • BUG FIX: Only process subscription data in get_remote_subscription_data() method
  • BUG FIX: Only process payment data in get_remote_payment_data() method
  • BUG FIX: Didn't include the amount_from_currency() method for Stripe specific amount formatting

v1.0

  • Initial Release (v1.0)
  • ENHANCEMENT: Prevent Cron jobs from running immediately