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

Version Description

Download this release

Release Info

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

Code changes from version 220925 to 221028

readme.txt CHANGED
@@ -1,11 +1,11 @@
1
- === s2Member – Membership Plugin for All Kinds of Memberships, Content Restriction & Member Paid Access Subscriptions ===
2
 
3
  Plugin Name: s2Member Framework
4
  Plugin URI: https://s2member.com/
5
- Tags: membership, member, members only, memberships, content restriction, paid access, sell downloads, paypal, paid subscriptions, paid registration, custom login
6
- Version: 220925
7
- Stable tag: 220925
8
- Tested up to: 6.1-beta2-54351
9
  Requires at least: 4.2
10
  Requires PHP: 5.6.2
11
  Tested up to PHP: 8.1
@@ -26,55 +26,101 @@ PayPal Pro Integration: https://s2member.com/r/pp-account-types/
26
  Text Domain: s2member
27
  Domain Path: /src/includes/translations
28
 
29
- ❤️ Great membership plugin! Easy and quick to use. Monetize your site selling unlimited memberships, single payment or recurring paid subscriptions. Protect your content in a moment, and a moment later be ready to get payments for access. Simple and flexible. Protect the whole site, or just parts, even files for download.
30
 
31
  == Description ==
32
 
33
- Great membership plugin! Over 11 years of experience, development, releases... Still going and growing!
34
 
35
- Sell unlimited memberships, turning free subscribers into members (→ s. to member → s2Member), single payment or recurring paid subscriptions. Easy and quick to use. Protect your membership content in a moment, and a moment later be ready to get payments for member access. Easy to configure and very flexible. Protect the whole site, nothing, or just parts, even member files for paid downloads.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
 
37
  https://youtu.be/qlKn-I-0W6U
38
 
39
- Packed with features, but not required to use all, just those you want. Some of them:
40
-
41
- - Member user levels and custom access capabilities
42
- - Membership content protection (post, page, category, tag, etc)
43
- - Protect anything served by WP (post types, URLs)
44
- - Member file protection (sell downloads)
45
- - Prevent member account sharing (limit IPs, simultaneous logins)
46
- - Protect accounts (limit failed login attempts)
47
- - Cool security/trust badge with your domain
48
- - PayPal Standard buttons for membership payments (more in Pro)
49
- - Automatic member access demotion at end of paid access time
50
- - Tracking software integration (affiliates, etc)
51
- - Email services (Mailchimp, etc)
52
- - Notifications (signups, payments, etc)
53
- - Integrate with bbPress, BuddyPress for member communities
54
- - Compatible with any well coded theme (Elementor, Divi, etc)
55
- - Customize the WP login/registration look
56
- - Custom redirection after member login
57
- - Create custom profile fields for member accounts
58
- - Customize the user welcome email
59
-
60
- Not needed to know any PHP code or be a developer. Only code needed is copy-paste wp shortcodes, like for the paypal buttons.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
 
62
  = Some reasons to get s2Member Pro =
63
 
64
- - Membership content dripping
65
- - Stripe, PayPal Pro, Authorize.Net, ClickBank
66
- - Unlimited membership levels
67
- - Membership renewal reminder emails
68
- - Single-step member registration and payment with pro-forms
69
- - Custom redirection after payment
70
- - Coupon codes and gift/redemption codes
71
- - Custom member offer redirections after login
72
- - Pro API for new integrations
73
- - Public members directory
74
- - Members bulk import/update/exporter
75
- - Multisite network support
76
- - Login and registration forms to use in pages/posts
77
- - [Click here for more](https://s2member.com/features/) :)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
 
79
  == Installation ==
80
 
@@ -130,6 +176,16 @@ Please see: <http://s2member.com/r/translations/>
130
 
131
  == Changelog ==
132
 
 
 
 
 
 
 
 
 
 
 
133
  = v220925 =
134
 
135
  - (Pro) **UI Enhancement**: In ClickBank Options admin page, added note about keeping IPN encryption disabled.
1
+ === s2Member – Best Membership Plugin for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions ===
2
 
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
11
  Tested up to PHP: 8.1
26
  Text Domain: s2member
27
  Domain Path: /src/includes/translations
28
 
29
+ ❤️ The best membership plugin! Easy and quick to use. Monetize your site selling unlimited memberships, single payment or recurring paid subscriptions. Protect your content in a moment, and a moment later be ready to get payments for access. Simple and flexible. Protect the whole site, or just parts, even files for download.
30
 
31
  == Description ==
32
 
33
+ ❤️ The **best membership plugin!** Over 11 years of experience, development, releases... Still going and growing!
34
 
35
+ **Start your membership profits!** Build your tribe, gather your followers, enroll your students, bring in your clients!
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
+
47
+ **Easy to configure and very flexible.** Protect the whole site, nothing, or just parts, even member files for paid downloads!
48
+
49
+ 👉 Install s2Member now and **make money!** 😀
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
+
59
+ ➡️ Member user levels and custom access capabilities
60
+ ➡️ Membership content protection (post, page, category, tag, etc)
61
+ ➡️ Protect anything served by WP (post types, URLs)
62
+ ➡️ Member file protection (sell downloads)
63
+ ➡️ Prevent member account sharing (limit IPs, simultaneous logins)
64
+ ➡️ Protect accounts (limit failed login attempts)
65
+ ➡️ Cool security/trust badge with your domain
66
+ ➡️ PayPal Standard buttons for membership payments (more in Pro)
67
+ ➡️ Automatic member access demotion at end of paid access time
68
+ ➡️ Tracking software integration (affiliates, etc)
69
+ ➡️ Email list services (Mailchimp, etc)
70
+ ➡️ Notifications (signups, payments, etc)
71
+ ➡️ Integrate with bbPress, BuddyPress for member communities
72
+ ➡️ Compatible with any well coded theme (Elementor, Divi, etc)
73
+ ➡️ Customize the WP login/registration look
74
+ ➡️ Custom redirection after member login
75
+ ➡️ Create custom profile fields for member accounts
76
+ ➡️ Customize the user welcome email
77
+ ➡️ And more!
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
 
91
  = Some reasons to get s2Member Pro =
92
 
93
+ Membership content dripping
94
+ Stripe, PayPal Pro, Authorize.Net, ClickBank
95
+ ✅ On-site one-step checkout with pro-forms (Stripe, PayPal, Auth.Net)
96
+ Unlimited membership levels
97
+ Membership renewal reminder emails
98
+ ✅ Single-step member registration and payment with pro-forms
99
+ Custom redirection after payment
100
+ Coupon codes and gift/redemption codes
101
+ Custom member offer redirections after login
102
+ Pro API for new integrations
103
+ Public members directory
104
+ Members bulk import/update/exporter
105
+ Multisite network support
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
+
119
+ Protect your WordPress Posts, Pages, Tags, Categories, URIs, BuddyPress, bbPress, and even portions of content within Posts, Pages, themes, plugins. **Easily configurable and highly extensible.** You can even protect downloadable files and streaming audio/video. Store files locally, or use s2Member's integration with Amazon S3/CloudFront.
120
+
121
+ s2Member is powered almost entirely by WordPress shortcodes, making advanced integrations quick and easy. Sell recurring (or non-recurring) subscriptions with lots of flexibility. Or sell "Buy Now" membership access in various ways. You can also sell specific Posts/Pages, sell member access to file downloads, or sell members Custom Capabilities that provide highly configurable access to specific portions of your content.
122
+
123
+ 👉 Install now s2Member and **start making money!** 😀
124
 
125
  == Installation ==
126
 
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
+
185
+ - (Framework) **UI**: Framework auto-update is now allowed when Pro add-on installed.
186
+
187
+ - (Pro) **UI**: The Pro updater now shows when a newer version available, not just when required.
188
+
189
  = v220925 =
190
 
191
  - (Pro) **UI Enhancement**: In ClickBank Options admin page, added note about keeping IPN encryption disabled.
s2member.php CHANGED
@@ -20,8 +20,8 @@
20
  */
21
  /* -- This section for WordPress parsing. ------------------------------------------------------------------------------
22
 
23
- Version: 220925
24
- Stable tag: 220925
25
 
26
  SSL Compatible: yes
27
  bbPress Compatible: yes
@@ -36,7 +36,7 @@ PayPal Pro Compatible: yes w/s2Member Pro
36
  Authorize.Net Compatible: yes w/s2Member Pro
37
  ClickBank Compatible: yes w/s2Member Pro
38
 
39
- Tested up to: 6.1-beta1-54288
40
  Requires at least: 4.2
41
 
42
  Requires PHP: 5.6.2
@@ -77,7 +77,7 @@ if(!defined('WPINC')) // MUST have WordPress.
77
  *
78
  * @var string
79
  */
80
- ${__FILE__}['tmp'] = '220925'; //version//
81
  if(!defined('WS_PLUGIN__S2MEMBER_VERSION'))
82
  define('WS_PLUGIN__S2MEMBER_VERSION', ${__FILE__}['tmp']);
83
  /**
@@ -186,3 +186,34 @@ else if(is_admin()) // Admin compatibility errors.
186
  }
187
  }
188
  unset(${__FILE__}); // Housekeeping.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  */
21
  /* -- This section for WordPress parsing. ------------------------------------------------------------------------------
22
 
23
+ Version: 221028
24
+ Stable tag: 221028
25
 
26
  SSL Compatible: yes
27
  bbPress Compatible: yes
36
  Authorize.Net Compatible: yes w/s2Member Pro
37
  ClickBank Compatible: yes w/s2Member Pro
38
 
39
+ Tested up to: 6.1-RC4-54709
40
  Requires at least: 4.2
41
 
42
  Requires PHP: 5.6.2
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
  /**
186
  }
187
  }
188
  unset(${__FILE__}); // Housekeeping.
189
+
190
+ //221026 Promo boo
191
+ if (is_admin() && !defined('WS_PLUGIN__S2MEMBER_PRO_VERSION')) {
192
+ // Dismiss
193
+ add_action('admin_init', function(){
194
+ $user_id = get_current_user_id();
195
+ if (isset($_GET['s2-dismiss-boo22']))
196
+ add_user_meta($user_id, 's2_notice_dismissed_boo22_3', 'true', true);
197
+ });
198
+ // Notice
199
+ add_action('admin_notices', function(){
200
+ $user_id = get_current_user_id();
201
+ $logo_url = $GLOBALS['WS_PLUGIN__']['s2member']['c']['dir_url'].'/src/images/logo-square-big.png';
202
+ $dismiss_url = add_query_arg('s2-dismiss-boo22', '', $_SERVER['REQUEST_URI']);
203
+ $color = '#ff6000';
204
+ if (isset($_GET['s2-show-notice']) || !get_user_meta($user_id, 's2_notice_dismissed_boo22_3')) {
205
+ echo '
206
+ <div class="notice" style="position:relative; border-left-color:'.$color.'; box-shadow: 0px 0px 6px 0px '.$color.' !important;">
207
+ <table><tr>
208
+ <td><a href="https://s2member.com/" target="_blank"><img src="'.$logo_url.'" height="70" width="70" align="top" style="padding-right:1em; filter: hue-rotate(-160deg) saturate(60) brightness(150%); -webkit-filter: hue-rotate(-160deg) saturate(60) brightness(150%);" /></a></td>
209
+ <td>
210
+ <span style="font-style:italic;">I\'m very happy you\'re using s2Member! 💕 so I discounted <a href="https://s2member.com/prices" target="_blank" style="color:'.$color.' !important; font-weight:bold;">20% OFF s2Member Pro</a> for you, if you get it now...<br />
211
+ Get paid more with <a href="https://s2member.com/testimonials/" target="_blank" style="color:'.$color.' !important; font-weight:bold;">s2Member Pro!</a> with Stripe on-site payments, success redirections, reminder emails, <a href="https://s2member.com/features/" target="_blank">and more!</a></span><br />
212
+ <b><i>This is a limited offer and expires soon...</i> ➡️ <i><a href="https://s2member.com/prices/" target="_blank">Secure your lifetime license NOW at the best price!</a></i></b> ⬅️ 🙂<br />
213
+ </td>
214
+ </tr></table>
215
+ <a href="'.$dismiss_url.'" class="notice-dismiss" style="text-decoration:none;"><span class="screen-reader-text">Dismiss this notice.</span></a>
216
+ </div>';
217
+ }
218
+ });
219
+ }
src/includes/classes/paypal-notify-in.inc.php CHANGED
@@ -62,11 +62,21 @@ if(!class_exists('c_ws_plugin__s2member_paypal_notify_in'))
62
  c_ws_plugin__s2member_email_configs::email_config_release(); // Release s2Member Filters.
63
 
64
  $paypal = array(); // Initialize PayPal array; we also reference this with a variable for a possible proxy handler.
 
65
  if(!empty($_REQUEST['s2member_paypal_proxy']) && in_array($_REQUEST['s2member_paypal_proxy'], array('alipay', 'stripe', 'authnet', 'clickbank', 'ccbill', 'google'), TRUE))
66
  ${esc_html(trim(stripslashes($_REQUEST['s2member_paypal_proxy'])))} = & $paypal; // Internal alias by reference.
67
 
68
  if(is_array($paypal = c_ws_plugin__s2member_paypal_utilities::paypal_postvars()) && ($_paypal = $paypal) && ($_paypal_s = serialize($_paypal)))
69
  {
 
 
 
 
 
 
 
 
 
70
  $paypal['s2member_log'][] = 'IPN received on: '.date('D M j, Y g:i:s a T');
71
  $paypal['s2member_log'][] = 's2Member POST vars verified '.((!empty($paypal['proxy_verified'])) ? 'with a Proxy Key' : 'through a POST back to PayPal.');
72
 
62
  c_ws_plugin__s2member_email_configs::email_config_release(); // Release s2Member Filters.
63
 
64
  $paypal = array(); // Initialize PayPal array; we also reference this with a variable for a possible proxy handler.
65
+
66
  if(!empty($_REQUEST['s2member_paypal_proxy']) && in_array($_REQUEST['s2member_paypal_proxy'], array('alipay', 'stripe', 'authnet', 'clickbank', 'ccbill', 'google'), TRUE))
67
  ${esc_html(trim(stripslashes($_REQUEST['s2member_paypal_proxy'])))} = & $paypal; // Internal alias by reference.
68
 
69
  if(is_array($paypal = c_ws_plugin__s2member_paypal_utilities::paypal_postvars()) && ($_paypal = $paypal) && ($_paypal_s = serialize($_paypal)))
70
  {
71
+ // Initialize a few array keys to prevent PHP warnings.
72
+ if (!isset($_REQUEST['s2member_paypal_proxy']))
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.');
82
 
src/includes/classes/paypal-return-in.inc.php CHANGED
@@ -55,6 +55,13 @@ if (!class_exists ("c_ws_plugin__s2member_paypal_return_in"))
55
 
56
  if (is_array($paypal = c_ws_plugin__s2member_paypal_utilities::paypal_postvars ()) && ($_paypal = $paypal) && ($_paypal_s = serialize ($_paypal)))
57
  {
 
 
 
 
 
 
 
58
  $paypal["s2member_log"][] = "Return-Data received on: " . date ("D M j, Y g:i:s a T");
59
  $paypal["s2member_log"][] = "s2Member POST vars verified " . ((!empty($paypal["proxy_verified"])) ? "with a Proxy Key" : "through a POST back to PayPal.");
60
 
55
 
56
  if (is_array($paypal = c_ws_plugin__s2member_paypal_utilities::paypal_postvars ()) && ($_paypal = $paypal) && ($_paypal_s = serialize ($_paypal)))
57
  {
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.");
67
 
src/includes/hooks.inc.php CHANGED
@@ -213,4 +213,5 @@ Register the activation | de-activation routines.
213
  register_activation_hook($GLOBALS['WS_PLUGIN__']['s2member']['c']['plugin_basename'], 'c_ws_plugin__s2member_installation::activate');
214
  register_deactivation_hook($GLOBALS['WS_PLUGIN__']['s2member']['c']['plugin_basename'], 'c_ws_plugin__s2member_installation::deactivate');
215
  register_uninstall_hook($GLOBALS['WS_PLUGIN__']['s2member']['c']['plugin_basename'], 'c_ws_plugin__s2member_installation::uninstall');
216
- add_filter('auto_update_plugin', 'c_ws_plugin__s2member_installation::auto_update_filter', PHP_INT_MAX-10, 2); // Disallow s2Member update.
 
213
  register_activation_hook($GLOBALS['WS_PLUGIN__']['s2member']['c']['plugin_basename'], 'c_ws_plugin__s2member_installation::activate');
214
  register_deactivation_hook($GLOBALS['WS_PLUGIN__']['s2member']['c']['plugin_basename'], 'c_ws_plugin__s2member_installation::deactivate');
215
  register_uninstall_hook($GLOBALS['WS_PLUGIN__']['s2member']['c']['plugin_basename'], 'c_ws_plugin__s2member_installation::uninstall');
216
+ //221024 Now that Pro add-on doesn't have to match Framework's version to remain active, it's safer to auto-update Framework.
217
+ // add_filter('auto_update_plugin', 'c_ws_plugin__s2member_installation::auto_update_filter', PHP_INT_MAX-10, 2); // Disallow s2Member update.
src/includes/menu-pages/menu-pages.css CHANGED
@@ -1445,6 +1445,9 @@ div.ws-menu-page textarea {
1445
  min-height: 5em;
1446
  line-height: 1.2em !important;
1447
  }
 
 
 
1448
 
1449
  div.ws-menu-page select {
1450
  background: #fff url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23555%22%2F%3E%3C%2Fsvg%3E') no-repeat right 5px top 55% !important;
1445
  min-height: 5em;
1446
  line-height: 1.2em !important;
1447
  }
1448
+ #ws-plugin--s2member-log-file-viewer {
1449
+ max-width: 100% !important;
1450
+ }
1451
 
1452
  div.ws-menu-page select {
1453
  background: #fff url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23555%22%2F%3E%3C%2Fsvg%3E') no-repeat right 5px top 55% !important;
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: 220925\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/s2member\n"
7
- "POT-Creation-Date: 2022-09-25 13:15:32+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:96
4339
- #: src/includes/classes/paypal-return-in.inc.php:117
4340
- #: src/includes/classes/paypal-return-in.inc.php:143
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:95
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:116
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:142
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: 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
  #: 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
  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 ""
src/vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInite64497be01e7d367bbe45cae35bacb5d::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit6d82bbede45e400be5d087d6543b416a::getLoader();
src/vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInite64497be01e7d367bbe45cae35bacb5d
6
  {
7
  private static $loader;
8
 
@@ -22,15 +22,15 @@ class ComposerAutoloaderInite64497be01e7d367bbe45cae35bacb5d
22
  return self::$loader;
23
  }
24
 
25
- spl_autoload_register(array('ComposerAutoloaderInite64497be01e7d367bbe45cae35bacb5d', 'loadClassLoader'), true, true);
26
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
27
- spl_autoload_unregister(array('ComposerAutoloaderInite64497be01e7d367bbe45cae35bacb5d', '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\ComposerStaticInite64497be01e7d367bbe45cae35bacb5d::getInitializer($loader));
34
  } else {
35
  $map = require __DIR__ . '/autoload_namespaces.php';
36
  foreach ($map as $namespace => $path) {
@@ -51,19 +51,19 @@ class ComposerAutoloaderInite64497be01e7d367bbe45cae35bacb5d
51
  $loader->register(true);
52
 
53
  if ($useStaticLoader) {
54
- $includeFiles = Composer\Autoload\ComposerStaticInite64497be01e7d367bbe45cae35bacb5d::$files;
55
  } else {
56
  $includeFiles = require __DIR__ . '/autoload_files.php';
57
  }
58
  foreach ($includeFiles as $fileIdentifier => $file) {
59
- composerRequiree64497be01e7d367bbe45cae35bacb5d($fileIdentifier, $file);
60
  }
61
 
62
  return $loader;
63
  }
64
  }
65
 
66
- function composerRequiree64497be01e7d367bbe45cae35bacb5d($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 ComposerAutoloaderInit6d82bbede45e400be5d087d6543b416a
6
  {
7
  private static $loader;
8
 
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
  $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;
src/vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInite64497be01e7d367bbe45cae35bacb5d
8
  {
9
  public static $files = array (
10
  '5255c38a0faeba867671b61dfda6d864' => __DIR__ . '/..' . '/paragonie/random_compat/lib/random.php',
@@ -30,7 +30,7 @@ class ComposerStaticInite64497be01e7d367bbe45cae35bacb5d
30
  public static function getInitializer(ClassLoader $loader)
31
  {
32
  return \Closure::bind(function () use ($loader) {
33
- $loader->classMap = ComposerStaticInite64497be01e7d367bbe45cae35bacb5d::$classMap;
34
 
35
  }, null, ClassLoader::class);
36
  }
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
  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
  }