Paid Memberships Pro - Version 2.2.5

Version Description

  • 2019-01-05 =
  • BUG FIX: Once again loading JavaScript on the update billing page when using Braintree.
  • BUG FIX: Loading Braintree JavaScript at checkout for free levels to support the variable pricing and donation add ons.
  • BUG FIX: Fixed issues with PayPal orders when using the pmpro_paypal_level_description filter.
  • BUG FIX/ENHANCEMENT: Responsive update for smaller device viewports for the Membership Levels table in the dashboard.
  • ENHANCEMENT: Added filters: pmpro_is_level_free, pmpro_is_level_trial, and pmpro_is_level_expiring.
Download this release

Release Info

Developer strangerstudios
Plugin Icon 128x128 Paid Memberships Pro
Version 2.2.5
Comparing to
See all releases

Code changes from version 2.2.4 to 2.2.5

CHANGELOG.txt CHANGED
@@ -1,4 +1,11 @@
1
  == Changelog ==
 
 
 
 
 
 
 
2
  = 2.2.4 - 2019-12-20 =
3
  * BUG FIX: Fixed issue with the update billing page when using the Stripe gateway.
4
 
1
  == Changelog ==
2
+ = 2.2.5 - 2019-01-05 =
3
+ * BUG FIX: Once again loading JavaScript on the update billing page when using Braintree.
4
+ * BUG FIX: Loading Braintree JavaScript at checkout for free levels to support the variable pricing and donation add ons.
5
+ * BUG FIX: Fixed issues with PayPal orders when using the pmpro_paypal_level_description filter.
6
+ * BUG FIX/ENHANCEMENT: Responsive update for smaller device viewports for the Membership Levels table in the dashboard.
7
+ * ENHANCEMENT: Added filters: pmpro_is_level_free, pmpro_is_level_trial, and pmpro_is_level_expiring.
8
+
9
  = 2.2.4 - 2019-12-20 =
10
  * BUG FIX: Fixed issue with the update billing page when using the Stripe gateway.
11
 
classes/gateways/class.pmprogateway_authorizenet.php CHANGED
@@ -302,7 +302,7 @@
302
  "x_exp_date" => $order->ExpirationDate,
303
 
304
  "x_amount" => $amount,
305
- "x_description" => $order->membership_level->name . " " . __("Membership", 'paid-memberships-pro' ),
306
 
307
  "x_first_name" => $order->FirstName,
308
  "x_last_name" => $order->LastName,
@@ -490,7 +490,7 @@
490
 
491
  "x_amount" => $amount,
492
  "x_tax" => $tax,
493
- "x_description" => $order->membership_level->name . " Membership",
494
 
495
  "x_first_name" => $order->FirstName,
496
  "x_last_name" => $order->LastName,
302
  "x_exp_date" => $order->ExpirationDate,
303
 
304
  "x_amount" => $amount,
305
+ "x_description" => apply_filters( 'pmpro_authorizenet_level_description', substr($order->membership_level->name . " at " . get_bloginfo("name"), 0, 127), $order->membership_level->name, $order, get_bloginfo("name")),
306
 
307
  "x_first_name" => $order->FirstName,
308
  "x_last_name" => $order->LastName,
490
 
491
  "x_amount" => $amount,
492
  "x_tax" => $tax,
493
+ "x_description" => apply_filters( 'pmpro_authorizenet_level_description', substr($order->membership_level->name . " at " . get_bloginfo("name"), 0, 127), $order->membership_level->name, $order, get_bloginfo("name")),
494
 
495
  "x_first_name" => $order->FirstName,
496
  "x_last_name" => $order->LastName,
classes/gateways/class.pmprogateway_braintree.php CHANGED
@@ -229,6 +229,7 @@ use Braintree\WebhookNotification as Braintree_WebhookNotification;
229
  if( ( $default_gateway == "braintree" || $current_gateway == "braintree" && empty($_REQUEST['review']))) //$_REQUEST['review'] means the PayPal Express review page
230
  {
231
  add_action('pmpro_checkout_preheader', array('PMProGateway_braintree', 'pmpro_checkout_preheader'));
 
232
  add_action( 'pmpro_save_membership_level', array( 'PMProGateway_braintree', 'pmpro_save_level_action') );
233
  add_action('pmpro_checkout_before_submit_button', array('PMProGateway_braintree', 'pmpro_checkout_before_submit_button'));
234
  add_action('pmpro_billing_before_submit_button', array('PMProGateway_braintree', 'pmpro_checkout_before_submit_button'));
@@ -364,7 +365,7 @@ use Braintree\WebhookNotification as Braintree_WebhookNotification;
364
 
365
  $default_gateway = pmpro_getOption("gateway");
366
 
367
- if(($gateway == "braintree" || $default_gateway == "braintree") && !pmpro_isLevelFree($pmpro_level)) {
368
  wp_enqueue_script("stripe", "https://js.braintreegateway.com/v1/braintree.js", array(), NULL);
369
  wp_register_script( 'pmpro_braintree',
370
  plugins_url( 'js/pmpro-braintree.js', PMPRO_BASE_FILE ),
229
  if( ( $default_gateway == "braintree" || $current_gateway == "braintree" && empty($_REQUEST['review']))) //$_REQUEST['review'] means the PayPal Express review page
230
  {
231
  add_action('pmpro_checkout_preheader', array('PMProGateway_braintree', 'pmpro_checkout_preheader'));
232
+ add_action( 'pmpro_billing_preheader', array( 'PMProGateway_braintree', 'pmpro_checkout_preheader' ) );
233
  add_action( 'pmpro_save_membership_level', array( 'PMProGateway_braintree', 'pmpro_save_level_action') );
234
  add_action('pmpro_checkout_before_submit_button', array('PMProGateway_braintree', 'pmpro_checkout_before_submit_button'));
235
  add_action('pmpro_billing_before_submit_button', array('PMProGateway_braintree', 'pmpro_checkout_before_submit_button'));
365
 
366
  $default_gateway = pmpro_getOption("gateway");
367
 
368
+ if(($gateway == "braintree" || $default_gateway == "braintree")) {
369
  wp_enqueue_script("stripe", "https://js.braintreegateway.com/v1/braintree.js", array(), NULL);
370
  wp_register_script( 'pmpro_braintree',
371
  plugins_url( 'js/pmpro-braintree.js', PMPRO_BASE_FILE ),
classes/gateways/class.pmprogateway_paypalexpress.php CHANGED
@@ -518,7 +518,7 @@
518
  $nvpStr .= "&BILLINGPERIOD=" . $order->BillingPeriod . "&BILLINGFREQUENCY=" . $order->BillingFrequency . "&AUTOBILLOUTAMT=AddToNextBilling&L_BILLINGTYPE0=RecurringPayments";
519
  $nvpStr .= "&DESC=" . urlencode( apply_filters( 'pmpro_paypal_level_description', substr($order->membership_level->name . " at " . get_bloginfo("name"), 0, 127), $order->membership_level->name, $order, get_bloginfo("name")) );
520
  $nvpStr .= "&NOTIFYURL=" . urlencode( add_query_arg( 'action', 'ipnhandler', admin_url('admin-ajax.php') ) );
521
- $nvpStr .= "&NOSHIPPING=1&L_BILLINGAGREEMENTDESCRIPTION0=" . urlencode(substr($order->membership_level->name . " at " . get_bloginfo("name"), 0, 127)) . "&L_PAYMENTTYPE0=Any";
522
 
523
  //if billing cycles are defined
524
  if(!empty($order->TotalBillingCycles))
518
  $nvpStr .= "&BILLINGPERIOD=" . $order->BillingPeriod . "&BILLINGFREQUENCY=" . $order->BillingFrequency . "&AUTOBILLOUTAMT=AddToNextBilling&L_BILLINGTYPE0=RecurringPayments";
519
  $nvpStr .= "&DESC=" . urlencode( apply_filters( 'pmpro_paypal_level_description', substr($order->membership_level->name . " at " . get_bloginfo("name"), 0, 127), $order->membership_level->name, $order, get_bloginfo("name")) );
520
  $nvpStr .= "&NOTIFYURL=" . urlencode( add_query_arg( 'action', 'ipnhandler', admin_url('admin-ajax.php') ) );
521
+ $nvpStr .= "&NOSHIPPING=1&L_BILLINGAGREEMENTDESCRIPTION0=" . urlencode( apply_filters( 'pmpro_paypal_level_description', substr($order->membership_level->name . " at " . get_bloginfo("name"), 0, 127), $order->membership_level->name, $order, get_bloginfo("name") ) ) . "&L_PAYMENTTYPE0=Any";
522
 
523
  //if billing cycles are defined
524
  if(!empty($order->TotalBillingCycles))
classes/gateways/class.pmprogateway_paypalstandard.php CHANGED
@@ -359,7 +359,7 @@
359
  'a3' => number_format($amount, 2, '.', ''),
360
  'p3' => $order->BillingFrequency,
361
  't3' => $period,
362
- 'item_name' => substr($order->membership_level->name . " at " . get_bloginfo("name"), 0, 127),
363
  'email' => $order->Email,
364
  'no_shipping' => '1',
365
  'shipping' => '0',
@@ -469,7 +469,7 @@
469
  'business' => pmpro_getOption("gateway_email"),
470
  'cmd' => '_xclick',
471
  'amount' => number_format($initial_payment, 2, '.', ''),
472
- 'item_name' => substr("{$order->membership_level->name} at " . get_bloginfo("name"), 0, 127),
473
  'email' => $order->Email,
474
  'no_shipping' => '1',
475
  'shipping' => '0',
359
  'a3' => number_format($amount, 2, '.', ''),
360
  'p3' => $order->BillingFrequency,
361
  't3' => $period,
362
+ 'item_name' => apply_filters( 'pmpro_paypal_level_description', substr($order->membership_level->name . " at " . get_bloginfo("name"), 0, 127), $order->membership_level->name, $order, get_bloginfo("name") ),
363
  'email' => $order->Email,
364
  'no_shipping' => '1',
365
  'shipping' => '0',
469
  'business' => pmpro_getOption("gateway_email"),
470
  'cmd' => '_xclick',
471
  'amount' => number_format($initial_payment, 2, '.', ''),
472
+ 'item_name' => apply_filters( 'pmpro_paypal_level_description', substr($order->membership_level->name . " at " . get_bloginfo("name"), 0, 127), $order->membership_level->name, $order, get_bloginfo("name") ),
473
  'email' => $order->Email,
474
  'no_shipping' => '1',
475
  'shipping' => '0',
css/frontend.css CHANGED
@@ -469,6 +469,10 @@ li.pmpro_more {
469
  Responsive Styles
470
  ---------------------------------------*/
471
  @media (max-width:768px) {
 
 
 
 
472
  .pmpro_checkout h3 span.pmpro_checkout-h3-name {
473
  display: block;
474
  }
469
  Responsive Styles
470
  ---------------------------------------*/
471
  @media (max-width:768px) {
472
+ #pmpro_account #pmpro_account-membership .pmpro_table td:nth-child(1),
473
+ #pmpro_levels_table td:nth-child(1) {
474
+ min-width: unset;
475
+ }
476
  .pmpro_checkout h3 span.pmpro_checkout-h3-name {
477
  display: block;
478
  }
includes/functions.php CHANGED
@@ -171,10 +171,13 @@ function pmpro_url( $page = null, $querystring = '', $scheme = null ) {
171
 
172
  function pmpro_isLevelFree( &$level ) {
173
  if ( ! empty( $level ) && $level->initial_payment <= 0 && $level->billing_amount <= 0 && $level->trial_amount <= 0 ) {
174
- return true;
175
  } else {
176
- return false;
177
  }
 
 
 
178
  }
179
 
180
  // Given an array of levels, will return true if all of them are free.
@@ -204,26 +207,35 @@ function pmpro_onlyFreeLevels() {
204
 
205
  function pmpro_isLevelRecurring( &$level ) {
206
  if ( ! empty( $level ) && ( $level->billing_amount > 0 || $level->trial_amount > 0 ) ) {
207
- return true;
208
  } else {
209
- return false;
210
  }
 
 
 
211
  }
212
 
213
  function pmpro_isLevelTrial( &$level ) {
214
  if ( ! empty( $level ) && ! empty( $level->trial_limit ) && $level->trial_limit > 0 ) {
215
- return true;
216
  } else {
217
- return false;
218
  }
 
 
 
219
  }
220
 
221
  function pmpro_isLevelExpiring( &$level ) {
222
  if ( ! empty( $level ) && ( ! empty( $level->expiration_number ) && $level->expiration_number > 0 ) || ! empty( $level->enddate ) ) {
223
- return true;
224
  } else {
225
- return false;
226
  }
 
 
 
227
  }
228
 
229
  /**
171
 
172
  function pmpro_isLevelFree( &$level ) {
173
  if ( ! empty( $level ) && $level->initial_payment <= 0 && $level->billing_amount <= 0 && $level->trial_amount <= 0 ) {
174
+ $r = true;
175
  } else {
176
+ $r = false;
177
  }
178
+
179
+ $r = apply_filters( 'pmpro_is_level_free', $r, $level );
180
+ return $r;
181
  }
182
 
183
  // Given an array of levels, will return true if all of them are free.
207
 
208
  function pmpro_isLevelRecurring( &$level ) {
209
  if ( ! empty( $level ) && ( $level->billing_amount > 0 || $level->trial_amount > 0 ) ) {
210
+ $r = true;
211
  } else {
212
+ $r = false;
213
  }
214
+
215
+ $r = apply_filters( 'pmpro_is_level_recurring', $r, $level );
216
+ return $r;
217
  }
218
 
219
  function pmpro_isLevelTrial( &$level ) {
220
  if ( ! empty( $level ) && ! empty( $level->trial_limit ) && $level->trial_limit > 0 ) {
221
+ $r = true;
222
  } else {
223
+ $r = false;
224
  }
225
+
226
+ $r = apply_filters( 'pmpro_is_level_trial', $r, $level );
227
+ return $r;
228
  }
229
 
230
  function pmpro_isLevelExpiring( &$level ) {
231
  if ( ! empty( $level ) && ( ! empty( $level->expiration_number ) && $level->expiration_number > 0 ) || ! empty( $level->enddate ) ) {
232
+ $r = true;
233
  } else {
234
+ $r = false;
235
  }
236
+
237
+ $r = apply_filters( 'pmpro_is_level_expiring', $r, $level );
238
+ return $r;
239
  }
240
 
241
  /**
paid-memberships-pro.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Paid Memberships Pro
4
  * Plugin URI: https://www.paidmembershipspro.com
5
  * Description: The most complete member management and membership subscriptions plugin for WordPress.
6
- * Version: 2.2.4
7
  * Author: Stranger Studios
8
  * Author URI: https://www.strangerstudios.com
9
  * Text Domain: paid-memberships-pro
@@ -16,7 +16,7 @@
16
  */
17
 
18
  // version constant
19
- define( 'PMPRO_VERSION', '2.2.4' );
20
  define( 'PMPRO_USER_AGENT', 'Paid Memberships Pro v' . PMPRO_VERSION . '; ' . site_url() );
21
  define( 'PMPRO_MIN_PHP_VERSION', '5.6' );
22
 
3
  * Plugin Name: Paid Memberships Pro
4
  * Plugin URI: https://www.paidmembershipspro.com
5
  * Description: The most complete member management and membership subscriptions plugin for WordPress.
6
+ * Version: 2.2.5
7
  * Author: Stranger Studios
8
  * Author URI: https://www.strangerstudios.com
9
  * Text Domain: paid-memberships-pro
16
  */
17
 
18
  // version constant
19
+ define( 'PMPRO_VERSION', '2.2.5' );
20
  define( 'PMPRO_USER_AGENT', 'Paid Memberships Pro v' . PMPRO_VERSION . '; ' . site_url() );
21
  define( 'PMPRO_MIN_PHP_VERSION', '5.6' );
22
 
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: strangerstudios
3
  Tags: membership, memberships, member, members, ecommerce, e-commerce, paypal, stripe, braintree, authorize.net, payflow, restrict access, restrict content, directory
4
  Requires at least: 4
5
  Tested up to: 5.3
6
- Stable tag: 2.2.4
7
 
8
  Get Paid with Paid Memberships Pro: The most complete member management and membership subscriptions plugin for your WordPress site.
9
 
@@ -128,6 +128,13 @@ Not sure? You can find out by doing a bit a research.
128
  [View All Screenshots](http://www.paidmembershipspro.com/features/screenshots/)
129
 
130
  == Changelog ==
 
 
 
 
 
 
 
131
  = 2.2.4 - 2019-12-20 =
132
  * BUG FIX: Fixed issue with the update billing page when using the Stripe gateway.
133
 
3
  Tags: membership, memberships, member, members, ecommerce, e-commerce, paypal, stripe, braintree, authorize.net, payflow, restrict access, restrict content, directory
4
  Requires at least: 4
5
  Tested up to: 5.3
6
+ Stable tag: 2.2.5
7
 
8
  Get Paid with Paid Memberships Pro: The most complete member management and membership subscriptions plugin for your WordPress site.
9
 
128
  [View All Screenshots](http://www.paidmembershipspro.com/features/screenshots/)
129
 
130
  == Changelog ==
131
+ = 2.2.5 - 2019-01-05 =
132
+ * BUG FIX: Once again loading JavaScript on the update billing page when using Braintree.
133
+ * BUG FIX: Loading Braintree JavaScript at checkout for free levels to support the variable pricing and donation add ons.
134
+ * BUG FIX: Fixed issues with PayPal orders when using the pmpro_paypal_level_description filter.
135
+ * BUG FIX/ENHANCEMENT: Responsive update for smaller device viewports for the Membership Levels table in the dashboard.
136
+ * ENHANCEMENT: Added filters: pmpro_is_level_free, pmpro_is_level_trial, and pmpro_is_level_expiring.
137
+
138
  = 2.2.4 - 2019-12-20 =
139
  * BUG FIX: Fixed issue with the update billing page when using the Stripe gateway.
140