s2Member Framework (Member Roles, Capabilities, Membership, PayPal Members) - Version 221031

Version Description

Bug Fix PayPal IPNs being ignored since last release.

=

Download this release

Release Info

Developer clavaque
Plugin Icon 128x128 s2Member Framework (Member Roles, Capabilities, Membership, PayPal Members)
Version 221031
Comparing to
See all releases

Code changes from version 221028 to 221031

readme.txt CHANGED
@@ -3,8 +3,8 @@
3
  Plugin Name: s2Member Framework
4
  Plugin URI: https://s2member.com/
5
  Tags: membership, member, members only, memberships, paywall, content restriction, paid access, sell downloads, paypal, paid subscriptions, paid registration, custom login
6
- Version: 221028
7
- Stable tag: 221028
8
  Tested up to: 6.1-RC4-54709
9
  Requires at least: 4.2
10
  Requires PHP: 5.6.2
@@ -36,11 +36,11 @@ Domain Path: /src/includes/translations
36
 
37
  💵 Enjoy the benefits of getting paid repeatedly for access to your site!
38
 
39
- > ⭐⭐⭐⭐⭐ **Brilliant** "So glad I found this. It works brilliantly for our needs... love the seamless integration with PayPal. Everything we need. Thank you so much for creating this!" _-[zarverk2000](https://wordpress.org/support/topic/brilliant-1268/)_
40
 
41
  = The best way to make money from your WordPress site! =
42
 
43
- 🤩 Sell **unlimited memberships**, turn free subscribers into members (subscriber to member → s. 2 member → s2Member), with a single payment or recurring payments subscriptions.
44
 
45
  **Easy and quick to use.** Protect your membership content in a moment, and a moment later be ready to get payments for member access!
46
 
@@ -50,9 +50,9 @@ Domain Path: /src/includes/translations
50
 
51
  https://youtu.be/qlKn-I-0W6U
52
 
53
- > ⭐⭐⭐⭐⭐ **So much capacity & great support** "I’m a novice and was able to quickly figure it out. When I got stuck I go to the support forum and Cristian is there with a quick answer to get me going again." _-[blueruck](https://wordpress.org/support/topic/so-much-capacity-great-support/)_
54
 
55
- > ⭐⭐⭐⭐⭐ **The very best plugin and support service** "Great plugin, neat, easy to configure, and with interesting security features. A special mention to Cristian whose support is awesome, fast, clear even to free members like myself" _-[aflorarte](https://wordpress.org/support/topic/the-very-best-plugin-and-support-service/)_
56
 
57
  **Packed with features**, but not required to use them all, just those you want. Some of them:
58
 
@@ -78,13 +78,13 @@ https://youtu.be/qlKn-I-0W6U
78
 
79
  👉 Install and start using s2Member now! 🤩
80
 
81
- > ⭐⭐⭐⭐⭐ **Very Powerful Membership Plugin** "This membership plugin does a lot and has many, many configuration options to achieve whatever you want... I received extremely quick and reliable support." _-[liltrucks](https://wordpress.org/support/topic/very-powerful-membership-plugin/)_
82
 
83
- > ⭐⭐⭐⭐⭐ **Simple, Compatible, Secure, and Versatile!** "We are seriously impressed with this plugin and we highly recommend it... We have not found ANY limitations to what we are trying to accomplish... a very smooth process... straight-forward and user-friendly!... exceeded our expectations!" _-[tips4gamers](https://wordpress.org/support/topic/simple-compatible-secure-and-versatile/)_
84
 
85
- > ⭐⭐⭐⭐⭐ **Excellent plugin** "This plugin does everything it says on the box. It does it well... the functionality is absolutely spot on. The developers/maintainers are also active and helpful. Totally recommended!" _-[richardfoley](https://wordpress.org/support/topic/excellent-plugin-5188/)_
86
 
87
- > ⭐⭐⭐⭐⭐ **Best Membership Plugin I’ve Used** "I switched to s2 Member around 3 years ago after trying a few plugins. I found these other plugins inflexible and difficult to configure... Well worth investigating if you want a robust membership solution." _-[rnwhalley](https://wordpress.org/support/topic/best-membership-plugin-ive-used/)_
88
 
89
  🤖 Not needed to know any PHP code or be a developer. Only code needed is copy-paste wp shortcodes, like for the paypal buttons... But is also developer-friendly to customize your installation if wanted.
90
 
@@ -106,13 +106,13 @@ https://youtu.be/qlKn-I-0W6U
106
  ✅ Login and registration forms to use in pages/posts
107
  👉 [Click here for more](https://s2member.com/features/) 🙂
108
 
109
- > ⭐⭐⭐⭐⭐ **The Best Membership Plugin** "I have built with most Membership plugins and literally dozens using S2 Pro and I can tell you, bar none it is the best of all of them. Extremely powerful, anything you might want to do it can do... I highly recommend you try it out." _-[antwoords](https://wordpress.org/support/topic/the-best-membership-plugin-5/)_
110
 
111
- > ⭐⭐⭐⭐⭐ **Excellent plugin & top support** "We’ve used s2member pro on a few projects now & find it has met all our membership needs. Most impressive has been the support. Excellent communication, knowledgeable, friendly and super patient 🙂" _-[aaee6](https://wordpress.org/support/topic/excellent-plugin-top-support-3/)_
112
 
113
- > ⭐⭐⭐⭐⭐ **Awesome Support** "I’ve been using s2Member for 9 years... Amazing support of a high-end plugin and much appreciated. This is one of the reasons I stick with s2Member. Support has always been great!" _-[graphichome](https://wordpress.org/support/topic/awesome-support-712/)_
114
 
115
- > ⭐⭐⭐⭐⭐ **Wonderful Support** "Above and beyond. I’ve used this plugin for over ten years with various clients and whenever I need help, they’ve helped find a solution." _-[germars](https://wordpress.org/support/topic/wonderful-support-68/)_
116
 
117
  The free s2Member Framework integrates with PayPal Website Payments Standard (also free). Sell "Buy Now" or Membership access to your site. Restrict access to Roles, Capabilities, Posts, Pages, or anything else in WordPress.
118
 
@@ -174,11 +174,20 @@ Yes, s2Member Pro for Unlimited Sites is compatible with Multisite Networking. A
174
 
175
  Please see: <http://s2member.com/r/translations/>
176
 
 
 
 
 
 
177
  == Changelog ==
178
 
 
 
 
 
179
  = v221028 =
180
 
181
- - (Framework) **Fix**: Initialized some array keys to prevent PHP warnings in PayPal notify and return files. Thanks Greg Mulhauser for your help.
182
 
183
  - (Framework) **UI**: Widened the Logs viewer. Thanks Sim. See [thread 10064](https://f.wpsharks.com/t/10064)
184
 
3
  Plugin Name: s2Member Framework
4
  Plugin URI: https://s2member.com/
5
  Tags: membership, member, members only, memberships, paywall, content restriction, paid access, sell downloads, paypal, paid subscriptions, paid registration, custom login
6
+ Version: 221031
7
+ Stable tag: 221031
8
  Tested up to: 6.1-RC4-54709
9
  Requires at least: 4.2
10
  Requires PHP: 5.6.2
36
 
37
  💵 Enjoy the benefits of getting paid repeatedly for access to your site!
38
 
39
+ ⭐⭐⭐⭐⭐ _**Brilliant** "So glad I found this. It works brilliantly for our needs... love the seamless integration with PayPal. Everything we need. Thank you so much for creating this!" -[zarverk2000](https://wordpress.org/support/topic/brilliant-1268/)_
40
 
41
  = The best way to make money from your WordPress site! =
42
 
43
+ 🤩 Sell **unlimited memberships**, turn free subscribers into members (_subscriber to member → s. 2 member → s2Member_), with a single payment or recurring payments subscriptions.
44
 
45
  **Easy and quick to use.** Protect your membership content in a moment, and a moment later be ready to get payments for member access!
46
 
50
 
51
  https://youtu.be/qlKn-I-0W6U
52
 
53
+ ⭐⭐⭐⭐⭐ _**So much capacity & great support** "I’m a novice and was able to quickly figure it out. When I got stuck I go to the support forum and Cristian is there with a quick answer to get me going again." -[blueruck](https://wordpress.org/support/topic/so-much-capacity-great-support/)_
54
 
55
+ ⭐⭐⭐⭐⭐ _**The very best plugin and support service** "Great plugin, neat, easy to configure, and with interesting security features. A special mention to Cristian whose support is awesome, fast, clear even to free members like myself" -[aflorarte](https://wordpress.org/support/topic/the-very-best-plugin-and-support-service/)_
56
 
57
  **Packed with features**, but not required to use them all, just those you want. Some of them:
58
 
78
 
79
  👉 Install and start using s2Member now! 🤩
80
 
81
+ ⭐⭐⭐⭐⭐ _**Very Powerful Membership Plugin** "This membership plugin does a lot and has many, many configuration options to achieve whatever you want... I received extremely quick and reliable support." -[liltrucks](https://wordpress.org/support/topic/very-powerful-membership-plugin/)_
82
 
83
+ ⭐⭐⭐⭐⭐ _**Simple, Compatible, Secure, and Versatile!** "We are seriously impressed with this plugin and we highly recommend it... We have not found ANY limitations to what we are trying to accomplish... a very smooth process... straight-forward and user-friendly!... exceeded our expectations!" -[tips4gamers](https://wordpress.org/support/topic/simple-compatible-secure-and-versatile/)_
84
 
85
+ ⭐⭐⭐⭐⭐ _**Excellent plugin** "This plugin does everything it says on the box. It does it well... the functionality is absolutely spot on. The developers/maintainers are also active and helpful. Totally recommended!" -[richardfoley](https://wordpress.org/support/topic/excellent-plugin-5188/)_
86
 
87
+ ⭐⭐⭐⭐⭐ _**Best Membership Plugin I’ve Used** "I switched to s2 Member around 3 years ago after trying a few plugins. I found these other plugins inflexible and difficult to configure... Well worth investigating if you want a robust membership solution." -[rnwhalley](https://wordpress.org/support/topic/best-membership-plugin-ive-used/)_
88
 
89
  🤖 Not needed to know any PHP code or be a developer. Only code needed is copy-paste wp shortcodes, like for the paypal buttons... But is also developer-friendly to customize your installation if wanted.
90
 
106
  ✅ Login and registration forms to use in pages/posts
107
  👉 [Click here for more](https://s2member.com/features/) 🙂
108
 
109
+ ⭐⭐⭐⭐⭐ _**The Best Membership Plugin** "I have built with most Membership plugins and literally dozens using S2 Pro and I can tell you, bar none it is the best of all of them. Extremely powerful, anything you might want to do it can do... I highly recommend you try it out." -[antwoords](https://wordpress.org/support/topic/the-best-membership-plugin-5/)_
110
 
111
+ ⭐⭐⭐⭐⭐ _**Excellent plugin & top support** "We’ve used s2member pro on a few projects now & find it has met all our membership needs. Most impressive has been the support. Excellent communication, knowledgeable, friendly and super patient 🙂" -[aaee6](https://wordpress.org/support/topic/excellent-plugin-top-support-3/)_
112
 
113
+ ⭐⭐⭐⭐⭐ _**Awesome Support** "I’ve been using s2Member for 9 years... Amazing support of a high-end plugin and much appreciated. This is one of the reasons I stick with s2Member. Support has always been great!" -[graphichome](https://wordpress.org/support/topic/awesome-support-712/)_
114
 
115
+ ⭐⭐⭐⭐⭐ _**Wonderful Support** "Above and beyond. I’ve used this plugin for over ten years with various clients and whenever I need help, they’ve helped find a solution." -[germars](https://wordpress.org/support/topic/wonderful-support-68/)_
116
 
117
  The free s2Member Framework integrates with PayPal Website Payments Standard (also free). Sell "Buy Now" or Membership access to your site. Restrict access to Roles, Capabilities, Posts, Pages, or anything else in WordPress.
118
 
174
 
175
  Please see: <http://s2member.com/r/translations/>
176
 
177
+ == Upgrade Notice ==
178
+
179
+ = 221031 =
180
+ Bug Fix PayPal IPNs being ignored since last release.
181
+
182
  == Changelog ==
183
 
184
+ = v221031 =
185
+
186
+ - (Framework) **Bug Fix**: Fix PayPal IPNs being ignored because a bug in the last release. After updating to this release, you may want to [review your latest IPNs](https://www.paypal.com/merchantnotification/ipn/history) since updating to v221028, and re-send them from PayPal. See [thread 10208](https://f.wpsharks.com/t/10208)
187
+
188
  = v221028 =
189
 
190
+ - (Framework) **Fix**: Initialized some array keys to prevent PHP warnings in PayPal notify and return files. Thanks Greg M. for your help.
191
 
192
  - (Framework) **UI**: Widened the Logs viewer. Thanks Sim. See [thread 10064](https://f.wpsharks.com/t/10064)
193
 
s2member.php CHANGED
@@ -20,8 +20,8 @@
20
  */
21
  /* -- This section for WordPress parsing. ------------------------------------------------------------------------------
22
 
23
- Version: 221028
24
- Stable tag: 221028
25
 
26
  SSL Compatible: yes
27
  bbPress Compatible: yes
@@ -77,7 +77,7 @@ if(!defined('WPINC')) // MUST have WordPress.
77
  *
78
  * @var string
79
  */
80
- ${__FILE__}['tmp'] = '221028'; //version//
81
  if(!defined('WS_PLUGIN__S2MEMBER_VERSION'))
82
  define('WS_PLUGIN__S2MEMBER_VERSION', ${__FILE__}['tmp']);
83
  /**
20
  */
21
  /* -- This section for WordPress parsing. ------------------------------------------------------------------------------
22
 
23
+ Version: 221031
24
+ Stable tag: 221031
25
 
26
  SSL Compatible: yes
27
  bbPress Compatible: yes
77
  *
78
  * @var string
79
  */
80
+ ${__FILE__}['tmp'] = '221031'; //version//
81
  if(!defined('WS_PLUGIN__S2MEMBER_VERSION'))
82
  define('WS_PLUGIN__S2MEMBER_VERSION', ${__FILE__}['tmp']);
83
  /**
src/includes/classes/paypal-notify-in-subscr-modify-w-level.inc.php CHANGED
@@ -57,7 +57,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_modify_w_level')
57
  {
58
  $paypal['s2member_log'][] = 's2Member `txn_type` identified as ( `subscr_modify` ).';
59
 
60
- list ($paypal['level'], $paypal['ccaps']/*, $paypal['eotper'] */) = preg_split('/\:/', $paypal['item_number'], 2);
61
 
62
  $paypal['ip'] = (preg_match('/ip address/i', $paypal['option_name2']) && $paypal['option_selection2']) ? $paypal['option_selection2'] : '';
63
  $paypal['ip'] = (!$paypal['ip'] && preg_match('/^[a-z0-9]+~[0-9\.]+$/i', $paypal['invoice'])) ? preg_replace('/^[a-z0-9]+~/i', '', $paypal['invoice']) : $paypal['ip'];
57
  {
58
  $paypal['s2member_log'][] = 's2Member `txn_type` identified as ( `subscr_modify` ).';
59
 
60
+ list ($paypal['level'], $paypal['ccaps']/*, $paypal['eotper'] */) = preg_split('/\:/', $paypal['item_number'].':', 2);
61
 
62
  $paypal['ip'] = (preg_match('/ip address/i', $paypal['option_name2']) && $paypal['option_selection2']) ? $paypal['option_selection2'] : '';
63
  $paypal['ip'] = (!$paypal['ip'] && preg_match('/^[a-z0-9]+~[0-9\.]+$/i', $paypal['invoice'])) ? preg_replace('/^[a-z0-9]+~/i', '', $paypal['invoice']) : $paypal['ip'];
src/includes/classes/paypal-notify-in-subscr-or-rp-cancellation-w-level.inc.php CHANGED
@@ -60,7 +60,7 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_cancella
60
  {
61
  $paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `subscr_cancel|recurring_payment_profile_cancel|mp_cancel` ).";
62
 
63
- list ($paypal["level"], $paypal["ccaps"]) = preg_split ("/\:/", $paypal["item_number"], 3);
64
 
65
  $paypal["ip"] = (preg_match ("/ip address/i", $paypal["option_name2"]) && $paypal["option_selection2"]) ? $paypal["option_selection2"] : "";
66
  $paypal["ip"] = (!$paypal["ip"] && preg_match ("/^[a-z0-9]+~[0-9\.]+$/i", $paypal["invoice"])) ? preg_replace ("/^[a-z0-9]+~/i", "", $paypal["invoice"]) : $paypal["ip"];
60
  {
61
  $paypal["s2member_log"][] = "s2Member `txn_type` identified as ( `subscr_cancel|recurring_payment_profile_cancel|mp_cancel` ).";
62
 
63
+ list ($paypal["level"], $paypal["ccaps"]) = preg_split ("/\:/", $paypal["item_number"].':', 3);
64
 
65
  $paypal["ip"] = (preg_match ("/ip address/i", $paypal["option_name2"]) && $paypal["option_selection2"]) ? $paypal["option_selection2"] : "";
66
  $paypal["ip"] = (!$paypal["ip"] && preg_match ("/^[a-z0-9]+~[0-9\.]+$/i", $paypal["invoice"])) ? preg_replace ("/^[a-z0-9]+~/i", "", $paypal["invoice"]) : $paypal["ip"];
src/includes/classes/paypal-notify-in-subscr-or-rp-payment-w-level.inc.php CHANGED
@@ -67,7 +67,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_rp_payment_w_
67
  sleep(15); // Sleep here for a moment. PayPal sometimes sends a subscr_payment before the subscr_signup, subscr_modify.
68
  $paypal['s2member_log'][] = 'Awake. It\'s '.date('D M j, Y g:i:s a T').'. s2Member `txn_type` identified as '.$identified_as.'.';
69
  }
70
- list($paypal['level'], $paypal['ccaps']) = preg_split('/\:/', $paypal['item_number'], 3);
71
 
72
  $paypal['ip'] = (preg_match('/ip address/i', $paypal['option_name2']) && $paypal['option_selection2']) ? $paypal['option_selection2'] : '';
73
  $paypal['ip'] = (!$paypal['ip'] && preg_match('/^[a-z0-9]+~[0-9\.]+$/i', $paypal['invoice'])) ? preg_replace('/^[a-z0-9]+~/i', '', $paypal['invoice']) : $paypal['ip'];
67
  sleep(15); // Sleep here for a moment. PayPal sometimes sends a subscr_payment before the subscr_signup, subscr_modify.
68
  $paypal['s2member_log'][] = 'Awake. It\'s '.date('D M j, Y g:i:s a T').'. s2Member `txn_type` identified as '.$identified_as.'.';
69
  }
70
+ list($paypal['level'], $paypal['ccaps']) = preg_split('/\:/', $paypal['item_number'].':', 3);
71
 
72
  $paypal['ip'] = (preg_match('/ip address/i', $paypal['option_name2']) && $paypal['option_selection2']) ? $paypal['option_selection2'] : '';
73
  $paypal['ip'] = (!$paypal['ip'] && preg_match('/^[a-z0-9]+~[0-9\.]+$/i', $paypal['invoice'])) ? preg_replace('/^[a-z0-9]+~/i', '', $paypal['invoice']) : $paypal['ip'];
src/includes/classes/paypal-notify-in-subscr-or-wa-w-level.inc.php CHANGED
@@ -83,7 +83,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_subscr_or_wa_w_level'))
83
 
84
  $paypal['s2member_log'][] = 's2Member `txn_type` identified as ( `web_accept|subscr_signup` ).';
85
 
86
- @list ($paypal['level'], $paypal['ccaps'], $paypal['eotper']) = preg_split('/\:/', $paypal['item_number'], 3);
87
 
88
  $paypal['ip'] = (preg_match('/ip address/i', $paypal['option_name2']) && $paypal['option_selection2']) ? $paypal['option_selection2'] : '';
89
  $paypal['ip'] = (!$paypal['ip'] && preg_match('/^[a-z0-9]+~[0-9\.]+$/i', $paypal['invoice'])) ? preg_replace('/^[a-z0-9]+~/i', '', $paypal['invoice']) : $paypal['ip'];
83
 
84
  $paypal['s2member_log'][] = 's2Member `txn_type` identified as ( `web_accept|subscr_signup` ).';
85
 
86
+ @list ($paypal['level'], $paypal['ccaps'], $paypal['eotper']) = preg_split('/\:/', $paypal['item_number'].':', 3);
87
 
88
  $paypal['ip'] = (preg_match('/ip address/i', $paypal['option_name2']) && $paypal['option_selection2']) ? $paypal['option_selection2'] : '';
89
  $paypal['ip'] = (!$paypal['ip'] && preg_match('/^[a-z0-9]+~[0-9\.]+$/i', $paypal['invoice'])) ? preg_replace('/^[a-z0-9]+~/i', '', $paypal['invoice']) : $paypal['ip'];
src/includes/classes/paypal-notify-in-wa-ccaps-wo-level.inc.php CHANGED
@@ -58,7 +58,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_wa_ccaps_wo_level'))
58
  {
59
  $paypal['s2member_log'][] = 's2Member `txn_type` identified as ( `web_accept` ) w/ update vars for Capabilities w/o Level.';
60
 
61
- list ($paypal['level'], $paypal['ccaps'], $paypal['eotper']) = preg_split('/\:/', $paypal['item_number'], 3);
62
 
63
  $paypal['ip'] = (preg_match('/ip address/i', $paypal['option_name2']) && $paypal['option_selection2']) ? $paypal['option_selection2'] : '';
64
  $paypal['ip'] = (!$paypal['ip'] && preg_match('/^[a-z0-9]+~[0-9\.]+$/i', $paypal['invoice'])) ? preg_replace('/^[a-z0-9]+~/i', '', $paypal['invoice']) : $paypal['ip'];
58
  {
59
  $paypal['s2member_log'][] = 's2Member `txn_type` identified as ( `web_accept` ) w/ update vars for Capabilities w/o Level.';
60
 
61
+ list ($paypal['level'], $paypal['ccaps'], $paypal['eotper']) = preg_split('/\:/', $paypal['item_number'].':', 3);
62
 
63
  $paypal['ip'] = (preg_match('/ip address/i', $paypal['option_name2']) && $paypal['option_selection2']) ? $paypal['option_selection2'] : '';
64
  $paypal['ip'] = (!$paypal['ip'] && preg_match('/^[a-z0-9]+~[0-9\.]+$/i', $paypal['invoice'])) ? preg_replace('/^[a-z0-9]+~/i', '', $paypal['invoice']) : $paypal['ip'];
src/includes/classes/paypal-notify-in-web-accept-sp.inc.php CHANGED
@@ -57,7 +57,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in_web_accept_sp'))
57
  {
58
  $paypal['s2member_log'][] = 's2Member `txn_type` identified as ( `web_accept` ) for Specific Post/Page Access.';
59
 
60
- list (, $paypal['sp_ids'], $paypal['hours']) = preg_split('/\:/', $paypal['item_number'], 3);
61
 
62
  $paypal['ip'] = (preg_match('/ip address/i', $paypal['option_name2']) && $paypal['option_selection2']) ? $paypal['option_selection2'] : '';
63
  $paypal['ip'] = (!$paypal['ip'] && preg_match('/^[a-z0-9]+~[0-9\.]+$/i', $paypal['invoice'])) ? preg_replace('/^[a-z0-9]+~/i', '', $paypal['invoice']) : $paypal['ip'];
57
  {
58
  $paypal['s2member_log'][] = 's2Member `txn_type` identified as ( `web_accept` ) for Specific Post/Page Access.';
59
 
60
+ list (, $paypal['sp_ids'], $paypal['hours']) = preg_split('/\:/', $paypal['item_number'].':', 3);
61
 
62
  $paypal['ip'] = (preg_match('/ip address/i', $paypal['option_name2']) && $paypal['option_selection2']) ? $paypal['option_selection2'] : '';
63
  $paypal['ip'] = (!$paypal['ip'] && preg_match('/^[a-z0-9]+~[0-9\.]+$/i', $paypal['invoice'])) ? preg_replace('/^[a-z0-9]+~/i', '', $paypal['invoice']) : $paypal['ip'];
src/includes/classes/paypal-notify-in.inc.php CHANGED
@@ -73,9 +73,6 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in'))
73
  $_REQUEST['s2member_paypal_proxy'] = '';
74
  foreach (array('level', 'ccaps', 'option_name1', 'option_selection1', 'option_name2', 'option_selection2', 'invoice', 'payment_status', 'mc_currency', 's2member_paypal_proxy') as $key)
75
  $paypal[$key] = isset($paypal[$key]) ? $paypal[$key] : '';
76
- // Prevent list() warning when missing a value, e.g. no ccaps
77
- if (!empty($paypal['item_number']))
78
- $paypal['item_number'] .= ':';
79
 
80
  $paypal['s2member_log'][] = 'IPN received on: '.date('D M j, Y g:i:s a T');
81
  $paypal['s2member_log'][] = 's2Member POST vars verified '.((!empty($paypal['proxy_verified'])) ? 'with a Proxy Key' : 'through a POST back to PayPal.');
73
  $_REQUEST['s2member_paypal_proxy'] = '';
74
  foreach (array('level', 'ccaps', 'option_name1', 'option_selection1', 'option_name2', 'option_selection2', 'invoice', 'payment_status', 'mc_currency', 's2member_paypal_proxy') as $key)
75
  $paypal[$key] = isset($paypal[$key]) ? $paypal[$key] : '';
 
 
 
76
 
77
  $paypal['s2member_log'][] = 'IPN received on: '.date('D M j, Y g:i:s a T');
78
  $paypal['s2member_log'][] = 's2Member POST vars verified '.((!empty($paypal['proxy_verified'])) ? 'with a Proxy Key' : 'through a POST back to PayPal.');
src/includes/classes/paypal-return-in-subscr-modify-w-level.inc.php CHANGED
@@ -56,7 +56,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_return_in_subscr_modify_w_level')
56
  {
57
  $paypal['s2member_log'][] = 's2Member `txn_type` identified as ( `subscr_modify` ), a Subscription Modification.';
58
 
59
- list($paypal['level'], $paypal['ccaps']/*, $paypal['eotper'] */) = preg_split('/\:/', $paypal['item_number'], 2);
60
 
61
  $paypal['ip'] = (preg_match('/ip address/i', $paypal['option_name2']) && $paypal['option_selection2']) ? $paypal['option_selection2'] : '';
62
  $paypal['ip'] = (!$paypal['ip'] && preg_match('/^[a-z0-9]+~[0-9\.]+$/i', $paypal['invoice'])) ? preg_replace('/^[a-z0-9]+~/i', '', $paypal['invoice']) : $paypal['ip'];
56
  {
57
  $paypal['s2member_log'][] = 's2Member `txn_type` identified as ( `subscr_modify` ), a Subscription Modification.';
58
 
59
+ list($paypal['level'], $paypal['ccaps']/*, $paypal['eotper'] */) = preg_split('/\:/', $paypal['item_number'].':', 2);
60
 
61
  $paypal['ip'] = (preg_match('/ip address/i', $paypal['option_name2']) && $paypal['option_selection2']) ? $paypal['option_selection2'] : '';
62
  $paypal['ip'] = (!$paypal['ip'] && preg_match('/^[a-z0-9]+~[0-9\.]+$/i', $paypal['invoice'])) ? preg_replace('/^[a-z0-9]+~/i', '', $paypal['invoice']) : $paypal['ip'];
src/includes/classes/paypal-return-in-subscr-or-wa-w-level.inc.php CHANGED
@@ -58,7 +58,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_return_in_subscr_or_wa_w_level'))
58
  {
59
  $paypal['s2member_log'][] = 's2Member `txn_type` identified as ( `web_accept|subscr_signup|subscr_payment` ).';
60
 
61
- @list($paypal['level'], $paypal['ccaps'], $paypal['eotper']) = preg_split('/\:/', $paypal['item_number'], 3);
62
 
63
  $paypal['ip'] = (preg_match('/ip address/i', $paypal['option_name2']) && $paypal['option_selection2']) ? $paypal['option_selection2'] : '';
64
  $paypal['ip'] = (!$paypal['ip'] && preg_match('/^[a-z0-9]+~[0-9\.]+$/i', $paypal['invoice'])) ? preg_replace('/^[a-z0-9]+~/i', '', $paypal['invoice']) : $paypal['ip'];
58
  {
59
  $paypal['s2member_log'][] = 's2Member `txn_type` identified as ( `web_accept|subscr_signup|subscr_payment` ).';
60
 
61
+ @list($paypal['level'], $paypal['ccaps'], $paypal['eotper']) = preg_split('/\:/', $paypal['item_number'].':', 3);
62
 
63
  $paypal['ip'] = (preg_match('/ip address/i', $paypal['option_name2']) && $paypal['option_selection2']) ? $paypal['option_selection2'] : '';
64
  $paypal['ip'] = (!$paypal['ip'] && preg_match('/^[a-z0-9]+~[0-9\.]+$/i', $paypal['invoice'])) ? preg_replace('/^[a-z0-9]+~/i', '', $paypal['invoice']) : $paypal['ip'];
src/includes/classes/paypal-return-in-wa-ccaps-wo-level.inc.php CHANGED
@@ -58,7 +58,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_return_in_wa_ccaps_wo_level'))
58
  {
59
  $paypal['s2member_log'][] = 's2Member `txn_type` identified as ( `web_accept` ) w/ update vars for Capabilities w/o Level.';
60
 
61
- list ($paypal['level'], $paypal['ccaps'], $paypal['eotper']) = preg_split('/\:/', $paypal['item_number'], 3);
62
 
63
  $paypal['ip'] = (preg_match('/ip address/i', $paypal['option_name2']) && $paypal['option_selection2']) ? $paypal['option_selection2'] : '';
64
  $paypal['ip'] = (!$paypal['ip'] && preg_match('/^[a-z0-9]+~[0-9\.]+$/i', $paypal['invoice'])) ? preg_replace('/^[a-z0-9]+~/i', '', $paypal['invoice']) : $paypal['ip'];
58
  {
59
  $paypal['s2member_log'][] = 's2Member `txn_type` identified as ( `web_accept` ) w/ update vars for Capabilities w/o Level.';
60
 
61
+ list ($paypal['level'], $paypal['ccaps'], $paypal['eotper']) = preg_split('/\:/', $paypal['item_number'].':', 3);
62
 
63
  $paypal['ip'] = (preg_match('/ip address/i', $paypal['option_name2']) && $paypal['option_selection2']) ? $paypal['option_selection2'] : '';
64
  $paypal['ip'] = (!$paypal['ip'] && preg_match('/^[a-z0-9]+~[0-9\.]+$/i', $paypal['invoice'])) ? preg_replace('/^[a-z0-9]+~/i', '', $paypal['invoice']) : $paypal['ip'];
src/includes/classes/paypal-return-in-web-accept-sp.inc.php CHANGED
@@ -57,7 +57,7 @@ if(!class_exists('c_ws_plugin__s2member_paypal_return_in_web_accept_sp'))
57
  {
58
  $paypal['s2member_log'][] = 's2Member `txn_type` identified as ( `web_accept` ) for Specific Post/Page Access.';
59
 
60
- list (, $paypal['sp_ids'], $paypal['hours']) = preg_split('/\:/', $paypal['item_number'], 3);
61
 
62
  $paypal['ip'] = (preg_match('/ip address/i', $paypal['option_name2']) && $paypal['option_selection2']) ? $paypal['option_selection2'] : '';
63
  $paypal['ip'] = (!$paypal['ip'] && preg_match('/^[a-z0-9]+~[0-9\.]+$/i', $paypal['invoice'])) ? preg_replace('/^[a-z0-9]+~/i', '', $paypal['invoice']) : $paypal['ip'];
57
  {
58
  $paypal['s2member_log'][] = 's2Member `txn_type` identified as ( `web_accept` ) for Specific Post/Page Access.';
59
 
60
+ list (, $paypal['sp_ids'], $paypal['hours']) = preg_split('/\:/', $paypal['item_number'].':', 3);
61
 
62
  $paypal['ip'] = (preg_match('/ip address/i', $paypal['option_name2']) && $paypal['option_selection2']) ? $paypal['option_selection2'] : '';
63
  $paypal['ip'] = (!$paypal['ip'] && preg_match('/^[a-z0-9]+~[0-9\.]+$/i', $paypal['invoice'])) ? preg_replace('/^[a-z0-9]+~/i', '', $paypal['invoice']) : $paypal['ip'];
src/includes/classes/paypal-return-in.inc.php CHANGED
@@ -58,9 +58,6 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_return_in"))
58
  // Initialize a few array keys to prevent PHP warnings.
59
  foreach (array('level', 'ccaps', 'option_name1', 'option_selection1', 'option_name2', 'option_selection2', 'invoice', 'payment_status', 'mc_currency', 's2member_paypal_proxy') as $key)
60
  $paypal[$key] = isset($paypal[$key]) ? $paypal[$key] : '';
61
- // Prevent list() warning when missing a value, e.g. no ccaps
62
- if (!empty($paypal['item_number']))
63
- $paypal['item_number'] .= ':';
64
 
65
  $paypal["s2member_log"][] = "Return-Data received on: " . date ("D M j, Y g:i:s a T");
66
  $paypal["s2member_log"][] = "s2Member POST vars verified " . ((!empty($paypal["proxy_verified"])) ? "with a Proxy Key" : "through a POST back to PayPal.");
58
  // Initialize a few array keys to prevent PHP warnings.
59
  foreach (array('level', 'ccaps', 'option_name1', 'option_selection1', 'option_name2', 'option_selection2', 'invoice', 'payment_status', 'mc_currency', 's2member_paypal_proxy') as $key)
60
  $paypal[$key] = isset($paypal[$key]) ? $paypal[$key] : '';
 
 
 
61
 
62
  $paypal["s2member_log"][] = "Return-Data received on: " . date ("D M j, Y g:i:s a T");
63
  $paypal["s2member_log"][] = "s2Member POST vars verified " . ((!empty($paypal["proxy_verified"])) ? "with a Proxy Key" : "through a POST back to PayPal.");
src/includes/translations/s2member.pot CHANGED
@@ -2,9 +2,9 @@
2
  # This file is distributed under the same license as the package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: 221028\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/s2member\n"
7
- "POT-Creation-Date: 2022-10-27 22:54:45+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -4335,9 +4335,9 @@ msgstr ""
4335
  #: src/includes/classes/paypal-return-in-wa-ccaps-wo-level.inc.php:175
4336
  #: src/includes/classes/paypal-return-in-wa-ccaps-wo-level.inc.php:186
4337
  #: src/includes/classes/paypal-return-in-web-accept-sp.inc.php:127
4338
- #: src/includes/classes/paypal-return-in.inc.php:103
4339
- #: src/includes/classes/paypal-return-in.inc.php:124
4340
- #: src/includes/classes/paypal-return-in.inc.php:150
4341
  msgctxt "s2member-front"
4342
  msgid "Back To Home Page"
4343
  msgstr ""
@@ -4436,17 +4436,17 @@ msgctxt "s2member-front"
4436
  msgid "<strong>ERROR:</strong> Unable to generate Access Link.<br />Please contact Support for assistance."
4437
  msgstr ""
4438
 
4439
- #: src/includes/classes/paypal-return-in.inc.php:102
4440
  msgctxt "s2member-front"
4441
  msgid "<strong>ERROR:</strong> Unexpected <code>txn_type/status</code>.<br />The <code>txn_type/status</code> did not meet requirements.<br />Please contact Support for assistance."
4442
  msgstr ""
4443
 
4444
- #: src/includes/classes/paypal-return-in.inc.php:123
4445
  msgctxt "s2member-front"
4446
  msgid "<strong>ERROR:</strong> Unable to verify <code>$_SERVER[\"HTTP_HOST\"]</code>.<br />Please contact Support for assistance.<br /><br />If you are the site owner, please check the <code>custom</code> value in your Button Code. It MUST start with your domain name."
4447
  msgstr ""
4448
 
4449
- #: src/includes/classes/paypal-return-in.inc.php:149
4450
  msgctxt "s2member-front"
4451
  msgid "<strong>ERROR:</strong> Unable to verify <code>$_POST</code> vars.<br />Please contact Support for assistance.<br /><br />This is most likely related to an invalid configuration of s2Member, or a problem with server compatibility. If you are the site owner, and you're absolutely SURE that your configuration is valid, you may want to run some tests on your server, just to be sure <code>$_POST</code> variables are populated, and that your server is able to connect/communicate with your Payment Gateway over an HTTPS connection.<br /><br />s2Member uses the <code>WP_Http</code> class for remote connections; which will try to use <code>cURL</code> first, and then fall back on the <code>FOPEN</code> method when <code>cURL</code> is not available. On a Windows server, you may have to disable your <code>cURL</code> extension; and instead, set <code>allow_url_fopen = yes</code> in your php.ini file. The <code>cURL</code> extension (usually) does NOT support SSL connections on a Windows server.<br /><br />Please see <a href=\"http://www.s2member.com/forums/topic/ideal-server-configuration-for-s2member/\" target=\"_blank\">this thread</a> for details regarding the ideal server configuration for s2Member."
4452
  msgstr ""
2
  # This file is distributed under the same license as the package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: 221031\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/s2member\n"
7
+ "POT-Creation-Date: 2022-10-31 00:52:23+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
4335
  #: src/includes/classes/paypal-return-in-wa-ccaps-wo-level.inc.php:175
4336
  #: src/includes/classes/paypal-return-in-wa-ccaps-wo-level.inc.php:186
4337
  #: src/includes/classes/paypal-return-in-web-accept-sp.inc.php:127
4338
+ #: src/includes/classes/paypal-return-in.inc.php:100
4339
+ #: src/includes/classes/paypal-return-in.inc.php:121
4340
+ #: src/includes/classes/paypal-return-in.inc.php:147
4341
  msgctxt "s2member-front"
4342
  msgid "Back To Home Page"
4343
  msgstr ""
4436
  msgid "<strong>ERROR:</strong> Unable to generate Access Link.<br />Please contact Support for assistance."
4437
  msgstr ""
4438
 
4439
+ #: src/includes/classes/paypal-return-in.inc.php:99
4440
  msgctxt "s2member-front"
4441
  msgid "<strong>ERROR:</strong> Unexpected <code>txn_type/status</code>.<br />The <code>txn_type/status</code> did not meet requirements.<br />Please contact Support for assistance."
4442
  msgstr ""
4443
 
4444
+ #: src/includes/classes/paypal-return-in.inc.php:120
4445
  msgctxt "s2member-front"
4446
  msgid "<strong>ERROR:</strong> Unable to verify <code>$_SERVER[\"HTTP_HOST\"]</code>.<br />Please contact Support for assistance.<br /><br />If you are the site owner, please check the <code>custom</code> value in your Button Code. It MUST start with your domain name."
4447
  msgstr ""
4448
 
4449
+ #: src/includes/classes/paypal-return-in.inc.php:146
4450
  msgctxt "s2member-front"
4451
  msgid "<strong>ERROR:</strong> Unable to verify <code>$_POST</code> vars.<br />Please contact Support for assistance.<br /><br />This is most likely related to an invalid configuration of s2Member, or a problem with server compatibility. If you are the site owner, and you're absolutely SURE that your configuration is valid, you may want to run some tests on your server, just to be sure <code>$_POST</code> variables are populated, and that your server is able to connect/communicate with your Payment Gateway over an HTTPS connection.<br /><br />s2Member uses the <code>WP_Http</code> class for remote connections; which will try to use <code>cURL</code> first, and then fall back on the <code>FOPEN</code> method when <code>cURL</code> is not available. On a Windows server, you may have to disable your <code>cURL</code> extension; and instead, set <code>allow_url_fopen = yes</code> in your php.ini file. The <code>cURL</code> extension (usually) does NOT support SSL connections on a Windows server.<br /><br />Please see <a href=\"http://www.s2member.com/forums/topic/ideal-server-configuration-for-s2member/\" target=\"_blank\">this thread</a> for details regarding the ideal server configuration for s2Member."
4452
  msgstr ""
src/vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit6d82bbede45e400be5d087d6543b416a::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInitb449e787f57d052460d43513ef9b1a92::getLoader();
src/vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit6d82bbede45e400be5d087d6543b416a
6
  {
7
  private static $loader;
8
 
@@ -22,15 +22,15 @@ class ComposerAutoloaderInit6d82bbede45e400be5d087d6543b416a
22
  return self::$loader;
23
  }
24
 
25
- spl_autoload_register(array('ComposerAutoloaderInit6d82bbede45e400be5d087d6543b416a', 'loadClassLoader'), true, true);
26
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
27
- spl_autoload_unregister(array('ComposerAutoloaderInit6d82bbede45e400be5d087d6543b416a', 'loadClassLoader'));
28
 
29
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
30
  if ($useStaticLoader) {
31
  require_once __DIR__ . '/autoload_static.php';
32
 
33
- call_user_func(\Composer\Autoload\ComposerStaticInit6d82bbede45e400be5d087d6543b416a::getInitializer($loader));
34
  } else {
35
  $map = require __DIR__ . '/autoload_namespaces.php';
36
  foreach ($map as $namespace => $path) {
@@ -51,19 +51,19 @@ class ComposerAutoloaderInit6d82bbede45e400be5d087d6543b416a
51
  $loader->register(true);
52
 
53
  if ($useStaticLoader) {
54
- $includeFiles = Composer\Autoload\ComposerStaticInit6d82bbede45e400be5d087d6543b416a::$files;
55
  } else {
56
  $includeFiles = require __DIR__ . '/autoload_files.php';
57
  }
58
  foreach ($includeFiles as $fileIdentifier => $file) {
59
- composerRequire6d82bbede45e400be5d087d6543b416a($fileIdentifier, $file);
60
  }
61
 
62
  return $loader;
63
  }
64
  }
65
 
66
- function composerRequire6d82bbede45e400be5d087d6543b416a($fileIdentifier, $file)
67
  {
68
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
69
  require $file;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInitb449e787f57d052460d43513ef9b1a92
6
  {
7
  private static $loader;
8
 
22
  return self::$loader;
23
  }
24
 
25
+ spl_autoload_register(array('ComposerAutoloaderInitb449e787f57d052460d43513ef9b1a92', 'loadClassLoader'), true, true);
26
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
27
+ spl_autoload_unregister(array('ComposerAutoloaderInitb449e787f57d052460d43513ef9b1a92', 'loadClassLoader'));
28
 
29
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
30
  if ($useStaticLoader) {
31
  require_once __DIR__ . '/autoload_static.php';
32
 
33
+ call_user_func(\Composer\Autoload\ComposerStaticInitb449e787f57d052460d43513ef9b1a92::getInitializer($loader));
34
  } else {
35
  $map = require __DIR__ . '/autoload_namespaces.php';
36
  foreach ($map as $namespace => $path) {
51
  $loader->register(true);
52
 
53
  if ($useStaticLoader) {
54
+ $includeFiles = Composer\Autoload\ComposerStaticInitb449e787f57d052460d43513ef9b1a92::$files;
55
  } else {
56
  $includeFiles = require __DIR__ . '/autoload_files.php';
57
  }
58
  foreach ($includeFiles as $fileIdentifier => $file) {
59
+ composerRequireb449e787f57d052460d43513ef9b1a92($fileIdentifier, $file);
60
  }
61
 
62
  return $loader;
63
  }
64
  }
65
 
66
+ function composerRequireb449e787f57d052460d43513ef9b1a92($fileIdentifier, $file)
67
  {
68
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
69
  require $file;
src/vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit6d82bbede45e400be5d087d6543b416a
8
  {
9
  public static $files = array (
10
  '5255c38a0faeba867671b61dfda6d864' => __DIR__ . '/..' . '/paragonie/random_compat/lib/random.php',
@@ -30,7 +30,7 @@ class ComposerStaticInit6d82bbede45e400be5d087d6543b416a
30
  public static function getInitializer(ClassLoader $loader)
31
  {
32
  return \Closure::bind(function () use ($loader) {
33
- $loader->classMap = ComposerStaticInit6d82bbede45e400be5d087d6543b416a::$classMap;
34
 
35
  }, null, ClassLoader::class);
36
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInitb449e787f57d052460d43513ef9b1a92
8
  {
9
  public static $files = array (
10
  '5255c38a0faeba867671b61dfda6d864' => __DIR__ . '/..' . '/paragonie/random_compat/lib/random.php',
30
  public static function getInitializer(ClassLoader $loader)
31
  {
32
  return \Closure::bind(function () use ($loader) {
33
+ $loader->classMap = ComposerStaticInitb449e787f57d052460d43513ef9b1a92::$classMap;
34
 
35
  }, null, ClassLoader::class);
36
  }