Version Description
- ENHANCEMENT: Added the pmpro_get_addons_timeout and pmpro_license_check_key_timeout filters to change the default timeout during addon and license key checks.
- BUG: Fixed error handling during addon and license key checks.
Download this release
Release Info
Developer | strangerstudios |
Plugin | Paid Memberships Pro |
Version | 1.8.5.1 |
Comparing to | |
See all releases |
Code changes from version 1.8.5 to 1.8.5.1
- adminpages/membershiplevels.php +2 -1
- classes/gateways/class.pmprogateway_paypalexpress.php +1 -3
- includes/addons.php +55 -27
- includes/license.php +24 -9
- paid-memberships-pro.php +2 -2
- readme.txt +6 -2
adminpages/membershiplevels.php
CHANGED
@@ -328,6 +328,7 @@
|
|
328 |
<?php
|
329 |
}
|
330 |
?>
|
|
|
331 |
</div>
|
332 |
</td>
|
333 |
</tr>
|
@@ -679,4 +680,4 @@
|
|
679 |
|
680 |
<?php
|
681 |
require_once(dirname(__FILE__) . "/admin_footer.php");
|
682 |
-
?>
|
328 |
<?php
|
329 |
}
|
330 |
?>
|
331 |
+
<p>[ ] Include this message in the Membership Confirmation Email</p>
|
332 |
</div>
|
333 |
</td>
|
334 |
</tr>
|
680 |
|
681 |
<?php
|
682 |
require_once(dirname(__FILE__) . "/admin_footer.php");
|
683 |
+
?>
|
classes/gateways/class.pmprogateway_paypalexpress.php
CHANGED
@@ -801,9 +801,7 @@
|
|
801 |
{
|
802 |
//get the subscription status
|
803 |
$status = $order->getGatewaySubscriptionStatus();
|
804 |
-
|
805 |
-
d($status);
|
806 |
-
|
807 |
if(!empty($status) && !empty($status['NEXTBILLINGDATE']))
|
808 |
{
|
809 |
//found the next billing date at PayPal, going to use that
|
801 |
{
|
802 |
//get the subscription status
|
803 |
$status = $order->getGatewaySubscriptionStatus();
|
804 |
+
|
|
|
|
|
805 |
if(!empty($status) && !empty($status['NEXTBILLINGDATE']))
|
806 |
{
|
807 |
//found the next billing date at PayPal, going to use that
|
includes/addons.php
CHANGED
@@ -13,6 +13,7 @@ function pmpro_setupAddonUpdateInfo()
|
|
13 |
add_filter('plugins_api', 'pmpro_plugins_api', 10, 3);
|
14 |
add_filter('pre_set_site_transient_update_plugins', 'pmpro_update_plugins_filter');
|
15 |
add_filter('http_request_args', 'pmpro_http_request_args_for_addons', 10, 2);
|
|
|
16 |
}
|
17 |
add_action('init', 'pmpro_setupAddonUpdateInfo');
|
18 |
|
@@ -30,27 +31,35 @@ function pmpro_getAddons()
|
|
30 |
//if no addons locally, we need to hit the server
|
31 |
if(empty($addons) || !empty($_REQUEST['force-check']) || current_time('timestamp') > $addons_timestamp+86400)
|
32 |
{
|
33 |
-
|
34 |
-
|
35 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
36 |
//test response
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
$addons = json_decode(wp_remote_retrieve_body($remote_addons), true);
|
50 |
-
delete_option('pmpro_addons');
|
51 |
-
add_option("pmpro_addons", $addons, NULL, 'no');
|
52 |
-
}
|
53 |
-
|
54 |
//save timestamp of last update
|
55 |
delete_option('pmpro_addons_timestamp');
|
56 |
add_option("pmpro_addons_timestamp", current_time('timestamp'), NULL, 'no');
|
@@ -174,12 +183,6 @@ function pmpro_plugins_api($api, $action = '', $args = null)
|
|
174 |
|
175 |
// Create a new stdClass object and populate it with our plugin information.
|
176 |
$api = pmpro_getPluginAPIObjectFromAddon($addon);
|
177 |
-
|
178 |
-
//get license key if one is available
|
179 |
-
$key = get_option("pmpro_license_key", "");
|
180 |
-
if(!empty($key) && !empty($api->download_link))
|
181 |
-
$api->download_link = add_query_arg("key", $key, $api->download_link);
|
182 |
-
|
183 |
return $api;
|
184 |
}
|
185 |
|
@@ -208,6 +211,31 @@ function pmpro_getPluginAPIObjectFromAddon($addon)
|
|
208 |
$api->sections['changelog'] = isset( $addon['Changelog'] ) ? $addon['Changelog'] : '';
|
209 |
$api->download_link = isset( $addon['Download'] ) ? $addon['Download'] : '';
|
210 |
$api->package = isset( $addon['Download'] ) ? $addon['Download'] : '';
|
211 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
212 |
return $api;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
213 |
}
|
13 |
add_filter('plugins_api', 'pmpro_plugins_api', 10, 3);
|
14 |
add_filter('pre_set_site_transient_update_plugins', 'pmpro_update_plugins_filter');
|
15 |
add_filter('http_request_args', 'pmpro_http_request_args_for_addons', 10, 2);
|
16 |
+
add_action('update_option_pmpro_license_key', 'pmpro_reset_update_plugins_cache', 10, 3);
|
17 |
}
|
18 |
add_action('init', 'pmpro_setupAddonUpdateInfo');
|
19 |
|
31 |
//if no addons locally, we need to hit the server
|
32 |
if(empty($addons) || !empty($_REQUEST['force-check']) || current_time('timestamp') > $addons_timestamp+86400)
|
33 |
{
|
34 |
+
/**
|
35 |
+
* Filter to change the timeout for this wp_remote_get() request.
|
36 |
+
*
|
37 |
+
* @since 1.8.5.1
|
38 |
+
*
|
39 |
+
* @param int $timeout The number of seconds before the request times out
|
40 |
+
*/
|
41 |
+
$timeout = apply_filters("pmpro_get_addons_timeout", 5);
|
42 |
+
|
43 |
+
//get em
|
44 |
+
$remote_addons = wp_remote_get(PMPRO_LICENSE_SERVER . "/addons/", $timeout);
|
45 |
+
|
46 |
+
//make sure we have at least an array to pass back
|
47 |
+
if(empty($addons))
|
48 |
+
$addons = array();
|
49 |
+
|
50 |
//test response
|
51 |
+
if(is_wp_error($remote_addons)) {
|
52 |
+
//error
|
53 |
+
pmpro_setMessage("Could not connect to the PMPro License Server to update addon information. Try again later.", "error");
|
54 |
+
}
|
55 |
+
elseif(!empty($r) && $r['response']['code'] == 200)
|
56 |
+
{
|
57 |
+
//update addons in cache
|
58 |
+
$addons = json_decode(wp_remote_retrieve_body($remote_addons), true);
|
59 |
+
delete_option('pmpro_addons');
|
60 |
+
add_option("pmpro_addons", $addons, NULL, 'no');
|
61 |
+
}
|
62 |
+
|
|
|
|
|
|
|
|
|
|
|
63 |
//save timestamp of last update
|
64 |
delete_option('pmpro_addons_timestamp');
|
65 |
add_option("pmpro_addons_timestamp", current_time('timestamp'), NULL, 'no');
|
183 |
|
184 |
// Create a new stdClass object and populate it with our plugin information.
|
185 |
$api = pmpro_getPluginAPIObjectFromAddon($addon);
|
|
|
|
|
|
|
|
|
|
|
|
|
186 |
return $api;
|
187 |
}
|
188 |
|
211 |
$api->sections['changelog'] = isset( $addon['Changelog'] ) ? $addon['Changelog'] : '';
|
212 |
$api->download_link = isset( $addon['Download'] ) ? $addon['Download'] : '';
|
213 |
$api->package = isset( $addon['Download'] ) ? $addon['Download'] : '';
|
214 |
+
|
215 |
+
//get license key if one is available
|
216 |
+
$key = get_option("pmpro_license_key", "");
|
217 |
+
if(!empty($key) && !empty($api->download_link))
|
218 |
+
$api->download_link = add_query_arg("key", $key, $api->download_link);
|
219 |
+
if(!empty($key) && !empty($api->package))
|
220 |
+
$api->package = add_query_arg("key", $key, $api->package);
|
221 |
+
|
222 |
return $api;
|
223 |
+
}
|
224 |
+
|
225 |
+
/**
|
226 |
+
* Force update of plugin update data when the PMPro License key is updated
|
227 |
+
*
|
228 |
+
* @since 2.0
|
229 |
+
*
|
230 |
+
* @param array $args Array of request args.
|
231 |
+
* @param string $url The URL to be pinged.
|
232 |
+
* @return array $args Amended array of request args.
|
233 |
+
*/
|
234 |
+
function pmpro_reset_update_plugins_cache($option, $old_value, $value)
|
235 |
+
{
|
236 |
+
if($option == "pmpro_license_key")
|
237 |
+
{
|
238 |
+
delete_option('pmpro_addons_timestamp');
|
239 |
+
delete_site_transient('update_themes');
|
240 |
+
}
|
241 |
}
|
includes/license.php
CHANGED
@@ -72,7 +72,7 @@ function pmpro_license_settings_page() {
|
|
72 |
//get saved license
|
73 |
$key = get_option("pmpro_license_key", "");
|
74 |
$pmpro_license_check = get_option("pmpro_license_check", array("license"=>false, "enddate"=>0));
|
75 |
-
|
76 |
//html for license settings page
|
77 |
if(defined('PMPRO_DIR'))
|
78 |
require_once(PMPRO_DIR . "/adminpages/admin_header.php");
|
@@ -189,9 +189,24 @@ function pmpro_license_check_key($key = NULL) {
|
|
189 |
{
|
190 |
//check license server
|
191 |
$url = add_query_arg(array('license'=>$key, 'domain'=>site_url()), PMPRO_LICENSE_SERVER);
|
192 |
-
|
193 |
-
|
194 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
195 |
{
|
196 |
$r = json_decode($r['body']);
|
197 |
|
@@ -215,13 +230,13 @@ function pmpro_license_check_key($key = NULL) {
|
|
215 |
|
216 |
delete_option('pmpro_license_check');
|
217 |
add_option('pmpro_license_check', array('license'=>false, 'enddate'=>0), NULL, 'no');
|
218 |
-
|
219 |
-
return false;
|
220 |
}
|
221 |
}
|
222 |
}
|
223 |
-
|
224 |
-
|
|
|
225 |
}
|
226 |
add_action('pmpro_license_check_key', 'pmpro_license_check_key');
|
227 |
|
@@ -255,7 +270,7 @@ function pmpro_license_nag() {
|
|
255 |
//blocked by constant?
|
256 |
if(defined('PMPRO_LICENSE_NAG') && !PMPRO_LICENSE_NAG)
|
257 |
return;
|
258 |
-
|
259 |
//valid license?
|
260 |
if(pmpro_license_isValid())
|
261 |
return;
|
72 |
//get saved license
|
73 |
$key = get_option("pmpro_license_key", "");
|
74 |
$pmpro_license_check = get_option("pmpro_license_check", array("license"=>false, "enddate"=>0));
|
75 |
+
|
76 |
//html for license settings page
|
77 |
if(defined('PMPRO_DIR'))
|
78 |
require_once(PMPRO_DIR . "/adminpages/admin_header.php");
|
189 |
{
|
190 |
//check license server
|
191 |
$url = add_query_arg(array('license'=>$key, 'domain'=>site_url()), PMPRO_LICENSE_SERVER);
|
192 |
+
|
193 |
+
/**
|
194 |
+
* Filter to change the timeout for this wp_remote_get() request.
|
195 |
+
*
|
196 |
+
* @since 1.8.5.1
|
197 |
+
*
|
198 |
+
* @param int $timeout The number of seconds before the request times out
|
199 |
+
*/
|
200 |
+
$timeout = apply_filters("pmpro_license_check_key_timeout", 5);
|
201 |
+
|
202 |
+
$r = wp_remote_get($url, array("timeout" => $timeout));
|
203 |
+
|
204 |
+
//test response
|
205 |
+
if(is_wp_error($r)) {
|
206 |
+
//error
|
207 |
+
pmpro_setMessage("Could not connect to the PMPro License Server to check key Try again later.", "error");
|
208 |
+
}
|
209 |
+
elseif(!empty($r) && $r['response']['code'] == 200)
|
210 |
{
|
211 |
$r = json_decode($r['body']);
|
212 |
|
230 |
|
231 |
delete_option('pmpro_license_check');
|
232 |
add_option('pmpro_license_check', array('license'=>false, 'enddate'=>0), NULL, 'no');
|
233 |
+
|
|
|
234 |
}
|
235 |
}
|
236 |
}
|
237 |
+
|
238 |
+
//no key or there was an error
|
239 |
+
return false;
|
240 |
}
|
241 |
add_action('pmpro_license_check_key', 'pmpro_license_check_key');
|
242 |
|
270 |
//blocked by constant?
|
271 |
if(defined('PMPRO_LICENSE_NAG') && !PMPRO_LICENSE_NAG)
|
272 |
return;
|
273 |
+
|
274 |
//valid license?
|
275 |
if(pmpro_license_isValid())
|
276 |
return;
|
paid-memberships-pro.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
Plugin Name: Paid Memberships Pro
|
4 |
Plugin URI: http://www.paidmembershipspro.com
|
5 |
Description: Plugin to Handle Memberships
|
6 |
-
Version: 1.8.5
|
7 |
Author: Stranger Studios
|
8 |
Author URI: http://www.strangerstudios.com
|
9 |
*/
|
@@ -13,7 +13,7 @@ Author URI: http://www.strangerstudios.com
|
|
13 |
*/
|
14 |
|
15 |
//version constant
|
16 |
-
define("PMPRO_VERSION", "1.8.5");
|
17 |
|
18 |
//if the session has been started yet, start it (ignore if running from command line)
|
19 |
if(defined('STDIN') )
|
3 |
Plugin Name: Paid Memberships Pro
|
4 |
Plugin URI: http://www.paidmembershipspro.com
|
5 |
Description: Plugin to Handle Memberships
|
6 |
+
Version: 1.8.5.1
|
7 |
Author: Stranger Studios
|
8 |
Author URI: http://www.strangerstudios.com
|
9 |
*/
|
13 |
*/
|
14 |
|
15 |
//version constant
|
16 |
+
define("PMPRO_VERSION", "1.8.5.1");
|
17 |
|
18 |
//if the session has been started yet, start it (ignore if running from command line)
|
19 |
if(defined('STDIN') )
|
readme.txt
CHANGED
@@ -3,7 +3,7 @@ Contributors: strangerstudios
|
|
3 |
Tags: memberships, membership, authorize.net, ecommerce, paypal, stripe, braintree, restrict access, restrict content, directory site, payflow
|
4 |
Requires at least: 3.5
|
5 |
Tested up to: 4.2.4
|
6 |
-
Stable tag: 1.8.5
|
7 |
|
8 |
The easiest way to GET PAID with your WordPress site. Flexible content control by Membership Level, Reports, Affiliates and Discounts
|
9 |
|
@@ -101,7 +101,11 @@ Not sure? You can find out by doing a bit a research.
|
|
101 |
3. Members are WordPress Users. PMPro provides a unique interface to view, filter and search Members or export your Members List.
|
102 |
4. Offer Membership Discounts with specific price rules (restricted by level, unique pricing for each level, # of uses, expiration date.)
|
103 |
|
104 |
-
== Changelog ==
|
|
|
|
|
|
|
|
|
105 |
= 1.8.5 =
|
106 |
* BUG: Fixed bug where the subscription_transaction_id was not showing up in the orders CSV export.
|
107 |
* BUG: Fixed bug where gateway subscriptions were not being cancelled when the "cancel at gateway" option was checked when changing a user's level on the edit user page.
|
3 |
Tags: memberships, membership, authorize.net, ecommerce, paypal, stripe, braintree, restrict access, restrict content, directory site, payflow
|
4 |
Requires at least: 3.5
|
5 |
Tested up to: 4.2.4
|
6 |
+
Stable tag: 1.8.5.1
|
7 |
|
8 |
The easiest way to GET PAID with your WordPress site. Flexible content control by Membership Level, Reports, Affiliates and Discounts
|
9 |
|
101 |
3. Members are WordPress Users. PMPro provides a unique interface to view, filter and search Members or export your Members List.
|
102 |
4. Offer Membership Discounts with specific price rules (restricted by level, unique pricing for each level, # of uses, expiration date.)
|
103 |
|
104 |
+
== Changelog ==
|
105 |
+
= 1.8.5.1 =
|
106 |
+
* ENHANCEMENT: Added the pmpro_get_addons_timeout and pmpro_license_check_key_timeout filters to change the default timeout during addon and license key checks.
|
107 |
+
* BUG: Fixed error handling during addon and license key checks.
|
108 |
+
|
109 |
= 1.8.5 =
|
110 |
* BUG: Fixed bug where the subscription_transaction_id was not showing up in the orders CSV export.
|
111 |
* BUG: Fixed bug where gateway subscriptions were not being cancelled when the "cancel at gateway" option was checked when changing a user's level on the edit user page.
|