Paid Memberships Pro - Version 1.8.2.2

Version Description

  • BUG: Fixed conflicts when other plugins with older Recaptcha libraries are also activated. Prefixed our copy of the Recaptcha library and functions with pmpro_ and added code to handle cases where an older version of recaptch is used at checkout.
  • BUG: Fixed warnings in pmpro_formatPrice. (Thanks, Andrea Carraro)
Download this release

Release Info

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

Code changes from version 1.8.2.1 to 1.8.2.2

includes/functions.php CHANGED
@@ -1832,8 +1832,8 @@ function pmpro_formatPrice($price)
1832
//format number do decimals, with decimal_separator and thousands_separator
1833
$formatted = number_format($price,
1834
(isset($pmpro_currencies[$pmpro_currency]['decimals']) ? (int)$pmpro_currencies[$pmpro_currency]['decimals'] : 2),
1835
- $pmpro_currencies[$pmpro_currency]['decimal_separator'],
1836
- $pmpro_currencies[$pmpro_currency]['thousands_separator']
1837
);
1838
1839
//which side is the symbol on?
1832
//format number do decimals, with decimal_separator and thousands_separator
1833
$formatted = number_format($price,
1834
(isset($pmpro_currencies[$pmpro_currency]['decimals']) ? (int)$pmpro_currencies[$pmpro_currency]['decimals'] : 2),
1835
+ (isset($pmpro_currencies[$pmpro_currency]['decimal_separator']) ? $pmpro_currencies[$pmpro_currency]['decimal_separator'] : '.'),
1836
+ (isset($pmpro_currencies[$pmpro_currency]['thousands_separator']) ? $pmpro_currencies[$pmpro_currency]['thousands_separator'] : ',')
1837
);
1838
1839
//which side is the symbol on?
includes/lib/recaptchalib.php CHANGED
@@ -1,5 +1,8 @@
1
<?php
2
/**
3
* This is a PHP library that handles calling reCAPTCHA.
4
* - Documentation and latest version
5
* https://developers.google.com/recaptcha/docs/php
@@ -33,13 +36,13 @@
33
/**
34
* A ReCaptchaResponse is returned from checkAnswer().
35
*/
36
- class ReCaptchaResponse
37
{
38
public $success;
39
public $errorCodes;
40
}
41
42
- class ReCaptcha
43
{
44
private static $_signupUrl = "https://www.google.com/recaptcha/admin";
45
private static $_siteVerifyUrl =
@@ -52,7 +55,7 @@ class ReCaptcha
52
*
53
* @param string $secret shared secret between site and ReCAPTCHA server.
54
*/
55
- function ReCaptcha($secret)
56
{
57
if ($secret == null || $secret == "") {
58
die("To use reCAPTCHA you must get an API key from <a href='"
@@ -108,7 +111,7 @@ class ReCaptcha
108
{
109
// Discard empty solution submissions
110
if ($response == null || strlen($response) == 0) {
111
- $recaptchaResponse = new ReCaptchaResponse();
112
$recaptchaResponse->success = false;
113
$recaptchaResponse->errorCodes = 'missing-input';
114
return $recaptchaResponse;
@@ -124,7 +127,7 @@ class ReCaptcha
124
)
125
);
126
$answers = json_decode($getResponse, true);
127
- $recaptchaResponse = new ReCaptchaResponse();
128
129
if (trim($answers['success']) == true) {
130
$recaptchaResponse->success = true;
1
<?php
2
/**
3
+ *
4
+ * Note: The class names have been prefixed with pmpro_ to avoid conflicts with other plugins.
5
+ *
6
* This is a PHP library that handles calling reCAPTCHA.
7
* - Documentation and latest version
8
* https://developers.google.com/recaptcha/docs/php
36
/**
37
* A ReCaptchaResponse is returned from checkAnswer().
38
*/
39
+ class pmpro_ReCaptchaResponse
40
{
41
public $success;
42
public $errorCodes;
43
}
44
45
+ class pmpro_ReCaptcha
46
{
47
private static $_signupUrl = "https://www.google.com/recaptcha/admin";
48
private static $_siteVerifyUrl =
55
*
56
* @param string $secret shared secret between site and ReCAPTCHA server.
57
*/
58
+ function pmpro_ReCaptcha($secret)
59
{
60
if ($secret == null || $secret == "") {
61
die("To use reCAPTCHA you must get an API key from <a href='"
111
{
112
// Discard empty solution submissions
113
if ($response == null || strlen($response) == 0) {
114
+ $recaptchaResponse = new pmpro_ReCaptchaResponse();
115
$recaptchaResponse->success = false;
116
$recaptchaResponse->errorCodes = 'missing-input';
117
return $recaptchaResponse;
127
)
128
);
129
$answers = json_decode($getResponse, true);
130
+ $recaptchaResponse = new pmpro_ReCaptchaResponse();
131
132
if (trim($answers['success']) == true) {
133
$recaptchaResponse->success = true;
includes/recaptcha.php CHANGED
@@ -12,32 +12,35 @@ function pmpro_init_recaptcha()
12
{
13
global $recaptcha_publickey, $recaptcha_privatekey;
14
15
- if(!class_exists("ReCaptcha"))
16
{
17
- require_once(PMPRO_DIR . "/includes/lib/recaptchalib.php");
18
}
19
20
if(!function_exists('recaptcha_get_html'))
21
{
22
- function recaptcha_get_html ($pubkey, $error = null, $use_ssl = false)
23
{
24
- $locale = get_locale();
25
- if(!empty($locale))
26
- {
27
- $parts = explode("_", $locale);
28
- $lang = $parts[0];
29
- }
30
- else
31
- $lang = "en";
32
-
33
- //filter
34
- $lang = apply_filters('pmpro_recaptcha_lang', $lang);
35
- ?>
36
- <div class="g-recaptcha" data-sitekey="<?php echo $pubkey;?>"></div>
37
- <script type="text/javascript"
38
- src="https://www.google.com/recaptcha/api.js?hl=<?php echo $lang;?>">
39
- </script>
40
- <?php
41
}
42
}
43
12
{
13
global $recaptcha_publickey, $recaptcha_privatekey;
14
15
+ require_once(PMPRO_DIR . "/includes/lib/recaptchalib.php");
16
+
17
+ function pmpro_recaptcha_get_html ($pubkey, $error = null, $use_ssl = false)
18
{
19
+ $locale = get_locale();
20
+ if(!empty($locale))
21
+ {
22
+ $parts = explode("_", $locale);
23
+ $lang = $parts[0];
24
+ }
25
+ else
26
+ $lang = "en";
27
+
28
+ //filter
29
+ $lang = apply_filters('pmpro_recaptcha_lang', $lang);
30
+ ?>
31
+ <div class="g-recaptcha" data-sitekey="<?php echo $pubkey;?>"></div>
32
+ <script type="text/javascript"
33
+ src="https://www.google.com/recaptcha/api.js?hl=<?php echo $lang;?>">
34
+ </script>
35
+ <?php
36
}
37
38
+ //for templates using the old recaptcha_get_html
39
if(!function_exists('recaptcha_get_html'))
40
{
41
+ function recaptcha_get_html($pubkey, $error = null, $use_ssl = false)
42
{
43
+ return pmpro_recaptcha_get_html($pubkey, $error, $use_ssl);
44
}
45
}
46
pages/checkout.php CHANGED
@@ -241,7 +241,7 @@
241
global $recaptcha, $recaptcha_publickey;
242
if($recaptcha == 2 || ($recaptcha == 1 && pmpro_isLevelFree($pmpro_level)))
243
{
244
- echo recaptcha_get_html($recaptcha_publickey, NULL, true);
245
}
246
?>
247
</div>
241
global $recaptcha, $recaptcha_publickey;
242
if($recaptcha == 2 || ($recaptcha == 1 && pmpro_isLevelFree($pmpro_level)))
243
{
244
+ echo pmpro_recaptcha_get_html($recaptcha_publickey, NULL, true);
245
}
246
?>
247
</div>
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.2.1
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.2.1");
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.2.2
7
Author: Stranger Studios
8
Author URI: http://www.strangerstudios.com
9
*/
13
*/
14
15
//version constant
16
+ define("PMPRO_VERSION", "1.8.2.2");
17
18
//if the session has been started yet, start it (ignore if running from command line)
19
if(defined('STDIN') )
preheaders/checkout.php CHANGED
@@ -390,11 +390,30 @@
390
global $recaptcha;
391
if (!$skip_account_fields && ($recaptcha == 2 || ($recaptcha == 1 && pmpro_isLevelFree($pmpro_level)))) {
392
global $recaptcha_privatekey;
393
- $reCaptcha = new ReCaptcha($recaptcha_privatekey);
394
- $resp = $reCaptcha->verifyResponse($_SERVER["REMOTE_ADDR"], $_POST["g-recaptcha-response"]);
395
396
- if (!$resp->success) {
397
- $pmpro_msg = sprintf(__("reCAPTCHA failed. (%s) Please try again.", "pmpro"), $resp->errorCodes);
398
$pmpro_msgt = "pmpro_error";
399
} else {
400
// Your code here to handle a successful verification
390
global $recaptcha;
391
if (!$skip_account_fields && ($recaptcha == 2 || ($recaptcha == 1 && pmpro_isLevelFree($pmpro_level)))) {
392
global $recaptcha_privatekey;
393
+
394
+ if(isset($_POST["recaptcha_challenge_field"]))
395
+ {
396
+ //using older recaptcha lib
397
+ $resp = recaptcha_check_answer($recaptcha_privatekey,
398
+ $_SERVER["REMOTE_ADDR"],
399
+ $_POST["recaptcha_challenge_field"],
400
+ $_POST["recaptcha_response_field"]);
401
+
402
+ $recaptcha_valid = $resp->is_valid;
403
+ $recaptcha_errors = $resp->error;
404
+ }
405
+ else
406
+ {
407
+ //using newer recaptcha lib
408
+ $reCaptcha = new pmpro_ReCaptcha($recaptcha_privatekey);
409
+ $resp = $reCaptcha->verifyResponse($_SERVER["REMOTE_ADDR"], $_POST["g-recaptcha-response"]);
410
+
411
+ $recaptcha_valid = $resp->success;
412
+ $recaptcha_errors = $resp->errorCodes;
413
+ }
414
415
+ if (!$recaptcha_valid) {
416
+ $pmpro_msg = sprintf(__("reCAPTCHA failed. (%s) Please try again.", "pmpro"), $recaptcha_errors);
417
$pmpro_msgt = "pmpro_error";
418
} else {
419
// Your code here to handle a successful verification
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.1.1
6
- Stable tag: 1.8.2.1
7
8
The easiest way to GET PAID with your WordPress site. Flexible content control by Membership Level, Reports, Affiliates and Discounts
9
@@ -102,6 +102,10 @@ Not sure? You can find out by doing a bit a research.
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.2.1 =
106
* BUG: Fixed issue where admins would get emails RE membership changes whenever a profile was updated even if the membership wasn't changed. (Thanks, chrisw123)
107
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.1.1
6
+ Stable tag: 1.8.2.2
7
8
The easiest way to GET PAID with your WordPress site. Flexible content control by Membership Level, Reports, Affiliates and Discounts
9
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.2.2 =
106
+ * BUG: Fixed conflicts when other plugins with older Recaptcha libraries are also activated. Prefixed our copy of the Recaptcha library and functions with pmpro_ and added code to handle cases where an older version of recaptch is used at checkout.
107
+ * BUG: Fixed warnings in pmpro_formatPrice. (Thanks, Andrea Carraro)
108
+
109
= 1.8.2.1 =
110
* BUG: Fixed issue where admins would get emails RE membership changes whenever a profile was updated even if the membership wasn't changed. (Thanks, chrisw123)
111