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

Version Description

Download this release

Release Info

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

Code changes from version 220809 to 220925

readme.txt CHANGED
@@ -1,86 +1,86 @@
1
- === s2Member® Framework (Membership, Member Level Roles, Access Capabilities, PayPal Members) ===
2
-
3
- Plugin Name: s2Member® Framework
4
- Plugin URI: http://s2member.com/
5
- Tags: membership, subscribers, subscriber, members only, roles, capabilities, capability, register, signup, paypal, ecommerce, restriction
6
- Version: 220809
7
- Stable tag: 220809
8
- Tested up to: 6.1-alpha-53862
9
  Requires at least: 4.2
10
  Requires PHP: 5.6.2
11
  Tested up to PHP: 8.1
12
  License: GNU General Public License v2 or later.
13
  Contributors: WebSharks, JasWSInc, raamdev, clavaque, eduan
14
- Author: WP Sharks
15
- Author URI: http://s2member.com/
16
- Donate link: http://s2member.com/donate/
17
- Beta link: http://s2member.com/beta-testers/
18
- Forum URI: http://s2member.com/r/forum/
19
- Privacy URI: http://s2member.com/privacy-policy/
20
- Changelog URI: http://s2member.com/changelog/
21
- Video Tutorials: http://s2member.com/r/s2member-videos/
22
- Knowledge Base: http://s2member.com/kb/
23
  More Updates: https://s2member.com/category/news-updates/
24
- Newsletter: http://s2member.com/r/subscribe/
25
- PayPal Pro Integration: http://s2member.com/r/pp-account-types/
26
  Text Domain: s2member
27
  Domain Path: /src/includes/translations
28
 
29
- s2Member® is a powerful free membership plugin for WordPress. Protect members only content with Member Level Roles and Access Capabilities.
30
 
31
  == Description ==
32
 
33
- The free s2Member® Framework lets you protect WordPress content and offer users a secure checkout solution to get access.
34
-
35
- Easy to configure and highly extensible.
36
-
37
- You can protect the whole site, certain areas, or even just parts of pages.
38
-
39
- Sell recurring (or non-recurring) subscriptions with lots of flexibility. Or sell "Buy Now" access in various ways.
40
-
41
- Protect your WordPress posts, pages, tags, categories, URIs, BuddyPress/bbPress, and even portions of them.
42
-
43
- Provide highly configurable access to specific portions of your content with Levels or Access Capabilities.
44
-
45
- You can also protect downloadable files and streaming audio/video. Store files locally, or use s2Member's integration with Amazon S3 and CloudFront CDN.
46
-
47
- Sell specific Posts/Pages, File Downloads, or Access Capabilities.
48
-
49
- Sell access to your site's content with single "buy now" payments or recurring payments subscription Memberships.
50
-
51
- Integrates with PayPal's Website Payments Standard (also free).
52
-
53
- Like a cash machine, s2Member puts money back in your pocket. Monetize your website now with s2Member.
54
-
55
- Add now s2Member Framework to your site and start making money with it!
56
-
57
- = Some reasons to upgrade to "s2Member Pro" =
58
-
59
- - Unlimited Membership Levels.
60
- - Renewal reminder emails.
61
- - Content dripping.
62
- - Single-step registration and payment with s2Member Pro-forms.
63
- - Stripe, PayPal Pro and Authorize.Net integration via Pro-forms.
64
- - Pro-form Coupon Codes and Gift/Redemption Codes.
65
- - ClickBank buttons integration.
66
- - Pro API for new integrations.
67
- - Public Members Directory.
68
- - User bulk Import/Update/Exporter tools.
69
- - Multisite Network support.
70
- - Login and registration forms to include in your pages or posts.
71
- - ... and more!
72
-
73
- With thousands of customers, an intelligent open community, comprehensive documentation, video tutorials, APIs, the s2Member Codex, KB articles, and thousands of forum posts; s2Member just can't be beat!
74
-
75
- [-> Click Here for more details](http://s2member.com/)
 
 
76
 
77
  == Installation ==
78
 
79
- **NOTICE:** If you are an s2Member Pro customer in need of support, please use [our forum at s2Member.com](http://s2member.com/r/forum/).
80
-
81
- ---
82
 
83
- = s2Member is Very Easy to Install =
84
 
85
  Just like any other normal plugin:
86
 
@@ -90,13 +90,13 @@ Just like any other normal plugin:
90
 
91
  Here's a [quick-start video](https://www.youtube.com/watch?v=qlKn-I-0W6U) for a simple basic setup to get you started.
92
 
93
- = See Also (s2Member.com) =
94
 
95
  [Detailed installation/upgrade instructions](http://s2member.com/installation/).
96
 
97
  = Is s2Member compatible with Multisite Networking? =
98
 
99
- Yes, s2Member Pro for Unlimited Sites is compatible with Multisite Networking. After you enable Multisite Networking, with s2Member Framework and Pro enabled, navigate to `s2Member → Multisite (Config)` in the Dashboard on your Main Site.
100
 
101
  == Screenshots ==
102
 
@@ -110,11 +110,13 @@ Yes, s2Member Pro for Unlimited Sites is compatible with Multisite Networking. A
110
 
111
  == Frequently Asked Questions ==
112
 
113
- **NOTICE:** If you are an s2Member Pro customer in need of support, please use [our forum at s2Member.com](http://s2member.com/r/forum/).
114
 
115
- ---
 
 
116
 
117
- = Please Check the Following s2Member Resources =
118
 
119
  * s2Member FAQs: <http://s2member.com/faqs/>
120
  * Knowledge Base: <http://s2member.com/kb/>
@@ -126,342 +128,24 @@ Yes, s2Member Pro for Unlimited Sites is compatible with Multisite Networking. A
126
 
127
  Please see: <http://s2member.com/r/translations/>
128
 
129
- == License ==
130
-
131
- Copyright: © 2013 [WP Sharks](https://www.wpsharks.com/) (coded in the USA)
132
-
133
- Released under the terms of the [GNU General Public License](http://www.gnu.org/licenses/gpl-2.0.html).
134
-
135
- == Upgrade Notice ==
136
-
137
- = v160801 =
138
-
139
- (Maintenance Release) Upgrade immediately.
140
-
141
  == Changelog ==
142
 
143
- = v220809 =
144
-
145
- - (Framework) **Enhancement**: New `current_user_days_to_eot_less_than` function for conditionals. Useful when you want to show a message to a user on his last days of access before the EOT time in his profile. E.g. `[s2If current_user_days_to_eot_less_than(31)]Please renew your membership[/s2If]`. Kudos to Felix for his help, see [post 6783](https://f.wpsharks.com/t/6783).
146
-
147
- = v220421 =
148
-
149
- - (Framework & Pro) **Enhancement**: Improved PHP compatibility to 8.1.
150
-
151
- - (Framework) **UI Fix**: `More Updates` link fixed.
152
-
153
- = v220318 =
154
-
155
- - (Framework) **Enhancement**: New `current_user_gateway_is` function for conditionals. Useful for sites using more than one gateway. E.g. `[s2If current_user_gateway_is(stripe)] ...`
156
-
157
- - (Pro) **UI Fix**: Removed "Image Branding" setting from s2's Stripe options, not used in current integration.
158
-
159
- = v210526 =
160
-
161
- - (s2Member Framework & Pro) **UI Enhancement**: Started improving the admin interface. Lightened up the colors, and changed the layout a little bit.
162
-
163
- - (s2Member Framework) **UI Enhancement**: Added title tag to buttons to manage custom profile fields in admin, to improve use with screen-reader. [Thread 8836](https://f.wpsharks.com/t/8836/12)
164
-
165
- - (s2Member Pro) **UI Fix**: Fixed typo in pro-form `rrt` attribute description. [Issue 1204](https://github.com/wpsharks/s2member/issues/1204)
166
-
167
- - (s2Member Framework) **Bug Fix**: Registration Date sometimes wasn't formatted correctly with the s2Get shortcode. [Thread 8730](https://f.wpsharks.com/t/8730)
168
-
169
- = v210208 =
170
-
171
- - (s2Member Pro) **Enhancement**: In the Stripe integration, cancelling a subscription in the last minutes of a period, may cause the invoice for the new period to remain there and still be charged later. Now s2Member Pro attempts to find a draft or open invoice for the subscription being cancelled, and void it. Thanks Alan for reporting it. See [post 8386](https://f.wpsharks.com/t/8098).
172
-
173
- - (s2Member Pro) **UI Enhancement**: Improved Stripe pro-form error message when trying to create a subscription with a bad card. Thanks everyone that reported it. See [issue #1184](https://github.com/wpsharks/s2member/issues/1184), [post 6043](https://f.wpsharks.com/t/6043), and [post 8386](https://f.wpsharks.com/t/8386).
174
-
175
- - (s2Member Pro) **Enhancement**: Added the new action hooks `ws_plugin__s2member_pro_before_stripe_notify_event_switch` and `ws_plugin__s2member_pro_after_stripe_notify_event_switch` in the Stripe endpoint to allow customizations, e.g. new event handlers.
176
-
177
- - (s2Member Pro) **UI Fix**: Removed some leftover mentions of Bitcoin support in Stripe's options.
178
-
179
- - (s2Member Pro) **UI Fix**: Removed a couple of deprecated shortcode attributes from the documentation for Stripe's pro-form, leftovers from the old integration. Kudos to Debbie for bringing my attention to them. See [post 8053](https://f.wpsharks.com/t/8053).
180
-
181
- - (s2Member Framework) **UI Fix**: Fixed some broken links and video players in the admin pages.
182
-
183
- - (s2Member Framework) **Bug Fix**: Resolved a warning given when changing users role in bulk from the WP Admin > Users page.
184
-
185
- - (s2Member Server Scanner) **Bug Fix**: Updated the [Server Scanner](https://s2member.com/kb-article/server-scanner/) to remove some outdated warnings.
186
-
187
- = v201225 =
188
-
189
- - (s2Member Framework) **Bug Fix**: View Password icon WP's login page was not displaying correctly. Kudos to Beee4life for reporting it. See [issue #1187](https://github.com/wpsharks/s2member/issues/1187)
190
-
191
- - (s2Member Framework and Pro) **Enhancement**: Refactored PHP's deprecated _create_function_ with anonymous functions. Kudos to Berry for reporting it, see [post 6069](https://f.wpsharks.com/t/6069)
192
-
193
- - (s2Member Framework) **Bug Fix**: Added a check for empty return variable before trying to use it in paypal-utilities.inc.php.
194
-
195
- - (s2Member Framework) **Bug Fix**: Added checks for undefined indexes before trying to use them in paypal-return-in-subscr-or-wa-w-level.inc.php.
196
-
197
- - (s2Member Framework) **Bug Fix:** Added a check for undefined index before using it to define a couple of s2 constants. Kudos to Berry for reporting it, see [post 8181](https://f.wpsharks.com/t/8181/)
198
-
199
- - (s2Member Pro) **Bug Fix**: s2's payment notification when creating a Stripe subscription, was being sent twice. Added a check to ignore the webhook for the subscription's on-session first payment; s2's webhook endpoint is for off-session events.
200
-
201
- - (s2Member Framework) **Enhancement**: Added a new hook for the payment notification on subscription creation or buy now payments.
202
-
203
- - (s2Member Pro) **Bug Fix**: Stripe paid trials were accumulating on failed payment attempts, causing a larger charge when it finally succeeded. Kudos to Alan for his help through the many attempts to fix this one, see [post 7002](https://f.wpsharks.com/t/7002).
204
-
205
- - (s2Member Pro) **Enhancement**: Stripe duplicate payments were happening randomly to a few site owners, apparently from bad communication between their server and Stripe's. Added idempotency to prevent duplicates. Kudos to Alan and everyone in the forum that reported and gave details on this behavior, see [post 7002](https://f.wpsharks.com/t/7002)
206
-
207
- = v200301 =
208
-
209
- - (s2Member Pro) **Enhancement:** Added "Powered by Stripe" to Stripe pro-form's payment card field. Kudos to Josh, see [post 6716](https://f.wpsharks.com/t/6716).
210
-
211
- - (s2Member Pro) **Bug Fix:** Stripe subscription cancellations were not happening when they should. This release updates the API integration for it and fixes that behavior. Kudos to Matt for reporting it, see [post 6909](https://f.wpsharks.com/t/6909).
212
-
213
- - (s2Member Pro) **Bug Fix:** Updating the card with Stripe's pro-form sometimes gave an incorrect "missing billing method" error. Kudos to Corey, see [post 7058](https://f.wpsharks.com/t/7058).
214
-
215
- - (s2Member Pro) **Small fix:** Removed Bitcoin mention next to Stripe in Gateways list. Missed it in [v191022](https://s2member.com/s2member-v191022-now-available/).
216
-
217
- = v200221 =
218
-
219
- - (s2Member Pro) **Bug Fix:** In some rare cases, another plugin loaded Stripe's class before s2Member, so when s2 tried loading it there'd be an error. This release fixes the check for the class before trying to load it. See [issue #1170](https://github.com/wpsharks/s2member/issues/1170)
220
-
221
- **Note:** s2Member won't have control over what version of the Stripe SDK was loaded by the other plugin. You'll need to get that other plugin to have an up-to-date version. If you don't have another plugin loading Stripe, this is not relevant to you.
222
-
223
- - (s2Member Pro) **Bug Fix:** When using a 100% off coupon, requiring no payment, the Stripe pro-form was still loading the card field and requiring it, preventing the free signup. That's fixed in this release. See [issue #1171](https://github.com/wpsharks/s2member/issues/1171)
224
-
225
- - (s2Member Pro) **Bug Fix:** The Stripe pro-form, when given an invalid card, didn't give a clear error message for it, and instead just "invalid parameter". Now it shows the correct card error, making it possible for the customer to try a different card to complete the payment.
226
-
227
- - (s2Member Pro) **Feature Update:** The Indian Rupee was added to the list of currency symbols.
228
-
229
- - (s2Member Pro) **Feature Enhancement:** The s2Member Pro add-on, not being a regular plugin was not uploadable via the WP plugin manager. This made it necessary to FTP, which is complicated for some site owners. In this release I made it possible for the plugin manager to upload or remove the Pro add-on.
230
-
231
- **Note:** It still is not a regular plugin. The activation link or status in the plugins manager is irrelevant, but I couldn't find how to remove it. s2Member Pro activates automatically when its version matches the Framework's, and it'll be mentioned next to the Framework's version in the plugins manager.
232
-
233
- = v191022 =
234
-
235
- - (s2Member Pro) **Feature Enhancement:** The Stripe pro-forms can now handle 3D Secure 2 for [Strong Customer Authentication](https://stripe.com/guides/strong-customer-authentication), as required by the new European regulation that came into effect recently. Props to those in the beta testing group, especially Brice and Felix. See [thread 5585](https://f.wpsharks.com/t/5585/).
236
-
237
- - (s2Member Pro) **Feature Enhancement:** The Stripe pro-form now has the card field inline, instead of opening a modal to enter it. Before it required clicking the link to open the modal, enter the card details, submit that, and then submit the pro-form. Now you enter the card details as part of the pro-form. See [issue #588](https://github.com/wpsharks/s2member/issues/588).
238
-
239
- - (s2Member Pro) **Stripe Integration Updates:** Upgraded the Stripe PHP SDK from v1.18 to v7.4.0, and the API from 2015-07-13 to 2019-10-08. Upgraded the integration from the Charges API to the latest Payment Intents API. Upgraded the card input from the old Stripe Checkout modal, to the new Stripe.js and Elements.
240
-
241
- - (s2Member Pro) **Optimization:** Stripe's JavaScript now only gets included if the page has a Stripe pro-form.
242
-
243
- - (s2Member Pro) **Removed Stripe Bitcoin**: Stripe [dropped Bitcoin](https://stripe.com/blog/ending-bitcoin-support) last year, it's not available anymore. This update removes the Bitcoin options and mentions from the s2 admin pages.
244
-
245
- - (s2Member Pro) **Bug Fix:** Subscriptions without at trial were showing a "trialing" status in Stripe for the first period. This behavior has now been solved. It will only say trialing when you set a trial period (free or paid) in your Stripe pro-form shortcode. See [issue #1052](https://github.com/wpsharks/s2member/issues/1052).
246
-
247
- - (s2Member Pro) **Bug Fix:** The Stripe pro-form installments via the `rrt` shortcode attribute were charging an extra payment before ending the subscription. There was an error in the time calculation for this. This is solved in this release. Props to Brice. See [thread 5817](https://f.wpsharks.com/t/5817/).
248
-
249
- - (s2Member Pro) **Bug Fix:** Some payments through the Stripe pro-form were creating a new Stripe customer when the user was already a customer. The Stripe customer ID was not being saved correctly in the user's profile. This is solved in this release. Props to demeritcowboy for reporting it.
250
-
251
- = v190822 =
252
-
253
- - (s2Member) **PayPal Integration Update:** PayPal deprecated the subscription modification button. Using the old possible values for this, now gives an error on PayPal's site. This button has been removed from the PayPal Standard integration in s2Member. Props to Tim for reporting it, see [forum thread 5861](https://f.wpsharks.com/t/5861), and [issue #1157](https://github.com/wpsharks/s2member/issues/1157).
254
-
255
- - (s2Member) **Bug Fix:** PayPal would sometimes return the customer without the Custom Value expected by s2Member, incorrectly triggering an error. A small delay has now been added when needed to wait for PayPal to provide the missing value, so that the customer is met with the correct success message on return. Props to Josh Hartman for his help. See [forum thread 5250](https://f.wpsharks.com/t/5250).
256
-
257
- - (s2Member) **Bug Fix:** Google's URL shortening service has been [discontinued](https://developers.googleblog.com/2018/03/transitioning-google-url-shortener.html). The s2Member integration with it was removed in this release. Props to Felix Hartmann for reporting it.
258
-
259
- - (s2Member) **Feature Enhancement:** The popular URL shortening services have been abused in spam emails, and this can cause your site's emails with shortened signup URLs to end up in the spam folder. It's now possible to disable URL shortening when trying to avoid this problem. Props to Felix Hartmann for suggesting it. See [forum thread 5697](https://f.wpsharks.com/t/5697).
260
-
261
- - (s2Member Pro) **New Feature:** It is now possible to use a custom URL shortener other than the defaults in the s2Member Framework. This is particularly useful to use [YOURLS](http://yourls.org/) for your links, making them unique to your site, looking more professional and avoiding the spam filters issue mentioned above. For more info see this [forum post](https://f.wpsharks.com/t/5697/19).
262
-
263
- = v190617 =
264
-
265
- - (s2Member Pro) **Authorize.Net Hash Upgrade:** Authorize.Net [announced](https://support.authorize.net/s/article/MD5-Hash-End-of-Life-Signature-Key-Replacement) the end-of-life for their MD5 Hash in favor of their new SHA512 Signature Key. Support for this has been added to s2Member Pro. The MD5 Hash is not provided by Authorize.Net any more, so the field for it in s2Member has been disabled. Props @krumch for his work. For further details see [forum thread 5514](https://f.wpsharks.com/t/5514).
266
-
267
- **Note:** For those that already used the MD5 Hash in their configuration, it is kept there and will keep working while Authorize.Net accepts it, which will not be much longer. It's important to update your integration with the new Signature Key. Once you have your Signature Key in the s2Member configuration, it will be favored over the old MD5 Hash._
268
-
269
- - (s2Member Pro) **Bug Fix:** The multisite patch for `wp-admin/user_new.php` wasn't finding the code to replace because of changes in the latest releases of WordPress. It has now been updated, as well as the instructions in the Dashboard for those that prefer to apply it manually. Props @crazycoolcam for reporting it. For further details see [Issue #1132](https://github.com/wpsharks/s2member/issues/1132).
270
-
271
- **Note:** If you already had patched this file in the past, it's recommended that you remove the previous patch restoring it to the original file, and let s2Member Pro patch it again now, otherwise you risk getting it patched over the previous one and ending up with errors. After the new patch, please review that file to verify that it's correct._
272
-
273
- - (s2Member Pro) **Bug Fix:** The search results for `s2Member-List` were not being ordered as specified in the `orderby` attribute when this was a field from the `usermeta` table in the database, e.g. `first_name`, `last_name`. This is now fixed and working correctly. Props to @stevenwolock for reporting it. For further details see [Issue #1103](https://github.com/wpsharks/s2member/issues/1103).
274
-
275
- - (s2Member) **WP 5.2 Compat. Enhancement:** s2Member has been tested with WP up to 5.2.2-alpha. With `WP_DEBUG` enabled, only one "notice" was found. In `wp-login.php` it said 'login_headertitle is deprecated since version 5.2.0! Use login_headertext instead.' This release now uses `login_headertext` and doesn't get that notice anymore. Props Azunga for reporting it. See [forum thread 5962](https://f.wpsharks.com/t/5962).
276
-
277
- = v170722 =
278
-
279
- - (s2Member/s2Member Pro) **PayPal IPN Compatibility:** This release includes an updated PayPal IPN handler that is capable of reading number-suffixed IPN variables that are now being sent by PayPal's IPN system in some cases, for some customers. We strongly encourage all site owners to upgrade to this release as soon as possible, particularly if you're using PayPal to process transactions. Props @openmtbmap and @patdumond for reporting. See: [Issue #1112](https://github.com/websharks/s2member/issues/1112)
280
-
281
- = v170524 =
282
-
283
- - (s2Member/s2Member Pro) **PHP v7 Compat. Enhancements**: This release adds an integration with the [Defuse encryption library](https://github.com/defuse/php-encryption) for PHP, making it possible for s2Member to move away from the `mcrypt_*()` family of functions in versions of PHP >= 7.0.4, where the mcrypt library has been deprecated — `mcrypt_*()` will eventually be removed entirely.
284
-
285
- Starting with this release of s2Member, if you're running s2Member on PHP v7.0.4+, the Defuse library will be used automatically instead of mcrypt. See [Issue #1079](https://github.com/websharks/s2member/pull/1079).
286
-
287
- **Note:** Backward compatibility with mcrypt functions will remain for now, especially for the decryption of any data that was previously encrypted using RIJNDAEL-256; i.e., data encrypted by a previous release of the s2Member software. s2Member is capable of automatically determining the algorithm originally used to encrypt, which allows it to decrypt data using Defuse, else RIJNDAEL-256, else XOR as a last-ditch fallback.
288
-
289
- **API Functions:** `s2member_encrypt()` & `s2member_decrypt()`. These two API Functions provided by s2Member are impacted by this change. Starting with this release, if you're running s2Member on PHP v7.0.4+, the Defuse library is used automatically instead of the older mcrypt extension. Not to worry though; the `s2member_decrypt()` function is still capable of decrypting data encrypted by previous versions of the s2Member software.
290
-
291
- - (s2Member/s2Member Pro) **UI Fix:** All menu page notices should be given the `notice` class and the additional `notice-[type]` class instead of the older generic `updated` and `error` classes. Fixed in this release. Related to [Issue #1034](https://github.com/websharks/s2member/issues/1034)
292
-
293
- - (s2Member/s2Member Pro) **UI Fix:** Plugins displaying Dashboard-wide notices using the older `updated` and `error` classes should be handled better to avoid displaying them below the s2Member header (on s2Member menu pages) and with non-default WordPress styles. See: [Issue #1034](https://github.com/websharks/s2member/issues/1034)
294
-
295
- - (s2Member/s2Member Pro) **UI Fix:** Improving color highlighting in input fields following a media library insertion; e.g., when adding a custom logo to the login/registration page.
296
-
297
- - (s2Member Pro) **Bug Fix:** Merchants using PayPal Pro (Payflow Edition) to charge a fixed non-recurring fee following an initial 100% free trial period, were seeing their member accounts EOTd after the trial ended, instead of the EOT Time being set to the end of the fixed term period. Props @patdumond, James Hall, and many others for reporting this in the forums and at GitHub. See [Issue #1077](https://github.com/websharks/s2member/issues/1077).
298
-
299
- - (s2Member Pro) **Bug Fix:** Updating PHP syntax in Simple Export tool, for compatibility w/ modern versions of PHP. Props @patdumond for reporting and helping us locate the underlying cause of this problem. See [Issue #1055](https://github.com/websharks/s2member/issues/1055).
300
-
301
- - (s2Member Pro) **Stripe Bug Fix:** This releases corrects a seemingly rare conflict between s2Member and Stripe on certain mobile devices and in certain scenarios. In a case we examined, there was a problematic CSS `z-index` setting in the s2Member source code that was, at times, causing problems in the stacking order, which resulted in a user's inability to enter details into the Stripe popup form. In this release, s2Member's customization of the `z-index` stacking order has been removed entirely, as it is no longer necessary in the latest revision of the Stripe popup, which already handles `z-index` adequately. Props @jaspuduf for reporting and for helping us diagnose the problem. See [Issue #1057](https://github.com/websharks/s2member/issues/1057).
302
-
303
- - (s2Member/s2Member Pro) **Security Enhancement:** This release removes the `%%user_pass%%` Replacement Code from the API Registration Notification email that is sent to a site owner; i.e., when/if it is configured by a site owner. Props @patdumond see [Issue #954](https://github.com/websharks/s2member/issues/954). This Replacement Code was removed as a security precaution.
304
-
305
- - (s2Member/s2Member Pro) **Bug Fix:** Resolving internal warning: 'PHP Warning: Parameter 2 to c_ws_plugin__s2member_querys::_query_level_access_coms() expected to be a reference, value given'. This was resolved by removing the strict 'by reference' requirement from the list of parameters requested by s2Member.
306
-
307
- - (s2Member/s2Member Pro) **Bug Fix:** Resolving internal warning: 'PHP Warning: Illegal string offset 'user_id' in s2member/src/includes/classes/sc-eots-in.inc.php'. This was resolved by typecasting `$attr` to an array in cases where WordPress core passes this as a string; e.g., when there are no attributes.
308
-
309
- - (s2Member Pro) **Bug Fix:** Incorrect default option value for `reject_prepaid=""` attribute in Stripe Pro-Forms. See: [Issue #1089](https://github.com/websharks/s2member/issues/1089)
310
-
311
- = v170221 =
312
-
313
- - (s2Member/s2Member Pro) **JW Player v7:** This release adds support for JW Player v7 in the `[s2Stream /]` shortcode. See [Issue #774](https://github.com/websharks/s2member/issues/774).
314
-
315
- - (s2Member Pro) **Bug Fix:** Allow Pro-Forms to use `success="%%sp_access_url%%"` without issue. See [Issue #1024](https://github.com/websharks/s2member/issues/1024).
316
-
317
- - (s2Member/s2Member Pro) **AWS Region:** Adding AWS region `ap-northeast-2`. See [Issue #1033](https://github.com/websharks/s2member/issues/1033).
318
-
319
- - (s2Member/s2Member Pro) **AWS Region:** Adding AWS region `eu-west-2`. See [Issue #1033](https://github.com/websharks/s2member/issues/1033).
320
-
321
- - (s2Member) **Bug Fix:** This release corrects a minor server-side validation bug that was related to the use of non-personal email address. See [Thread #1195](https://forums.wpsharks.com/t/bugfix-file-custom-reg-fields-inc-php-missing-bracket/1195) and [Issue #1054](https://github.com/websharks/s2member/issues/1054).
322
-
323
- - (s2Member) **Bug Fix:** Updated several outdated links within the software; e.g., removing older `www.` references, correcting forum links, and more. Also corrected missing changelog. See [Issue #1027](https://github.com/websharks/s2member/issues/1027).
324
-
325
- - (s2Member Pro) **Pro Upgrader:** The pro upgrader has been refactored and now asks for your s2Member Pro License Key instead of your s2Member.com password. The next time you upgrade to the most recent version of s2Member Pro, you will be asked for your License Key. You can obtain your License Key by logging into your account at s2Member.com. Once logged in, visit your 'My Account' page, where you will find your License Key right at the top. See [Issue #668](https://github.com/websharks/s2member/issues/668).
326
-
327
- - (s2Member/s2Member Pro) **CloudFlare Compat.:** Enhancing compatibility with Rocket Loader via `data-cfasync="false"` on dynamic s2Member scripts. See: [Issue #1038](https://github.com/websharks/s2member/issues/1038).
328
-
329
- = v161129 =
330
-
331
- - (s2Member Pro) **Bug Fix:** Stripe refund notifications via the Stripe Webhook were always interpreted by s2Member as full refunds. This release corrects this bug so that s2Member will handle partial refunds via the Stripe API properly in all cases. Props @raamdev for reporting.
332
-
333
- - (s2Member/s2Member Pro) **Bug Fix:** Updating profile via `[s2Member-Profile /]` when changing email addresses may leave the old email address on configured email list servers in some scenarios. Props @renzms for reporting. For further details see [issue #1007](https://github.com/websharks/s2member/issues/1007).
334
-
335
- - (s2Member/s2Member Pro) **SSL Compatibility & Option Deprecation:** In previous versions of s2Member there was a setting in the UI that allowed you to force non-SSL redirects to the Login Welcome Page. By popular demand, this setting has been deprecated and removed from the UI.
336
-
337
- _**New Approach:** The new approach taken in the latest release of s2Member is to automatically detect when a non-SSL redirection should occur, and when it should not occur (i.e., when the default WordPress core behavior should remain as-is)._
338
-
339
- _s2Member does this by looking at the `FORCE_SSL_LOGIN` and `FORCE_SSL_ADMIN` settings in WordPress, and also at your configured `siteurl` option in WordPress. If you are not forcing SSL logins, or your `siteurl` begins with `https://` (indicating that your entire site is served over SSL), non-SSL redirects will no longer be forced by s2Member, which resolves problems on many sites that serve their entire site over SSL (a growing trend over the past couple years)._
340
-
341
- _Conversely, if `FORCE_SSL_LOGIN` or `FORCE_SSL_ADMIN` are true, and your configured `siteurl` option in WordPress does NOT begin with `https://` (e.g., just plain `http://`), then a non-SSL redirect **is** forced, as necessary, in order to avoid login cookie conflicts; i.e., the old behavior is preserved by this automatic detection._
342
-
343
- _Overall, this new approach improves compatibility with WordPress core, particularly on sites that serve all of their pages over `https://` (as recommended by Google)._
344
-
345
- _**Backward Compatibility:** As noted previously, the old option that allowed you to configure s2Member to force non-SSL redirects to the Login Welcome Page has been officially deprecated and removed from the UI. However, the old option does still exist internally, but only for backward compatibility. A WordPress filter is exposed that allows developers to alter the old setting if necessary. You can use the filter to force a `true` or `false` value._
346
-
347
- ```php
348
- <?php
349
- add_filter('ws_plugin__s2member_login_redirection_always_http', '__return_true');
350
- // OR add_filter('ws_plugin__s2member_login_redirection_always_http', '__return_false');
351
- ```
352
-
353
- - (s2Member/s2Member Pro) **Bug Fix:** Username/password email being sent to users whenever Custom Passwords are enabled in your s2Member configuration and registration occurs via the default `wp-login.php?action=register` form. Fixed in this release. See also: [issue #870](https://github.com/websharks/s2member/issues/870) if you'd like additional details.
354
-
355
- - (s2Member Pro) **Bug Fix:** In the `[s2Member-List /]` search box shortcode an empty `action=""` attribute produces a warning due to invalid syntax in HTML v5. Fixed in this release. See [Issue #1006](https://github.com/websharks/s2member/issues/1006)
356
-
357
- - (s2Member/s2Member Pro) **IP Detection:** This release improves s2Member's ability to determine the current user's IP address. s2Member now searches through `HTTP_CF_CONNECTING_IP`, `HTTP_CLIENT_IP`, `HTTP_X_FORWARDED_FOR`, `HTTP_X_FORWARDED`, `HTTP_X_CLUSTER_CLIENT_IP`, `HTTP_FORWARDED_FOR`, `HTTP_FORWARDED`, `HTTP_VIA`, and `REMOTE_ADDR` (in that order) to locate the first valid public IP address. Either IPv4 or IPv6. Among other things, this improves s2Member's compatibility with sites using CloudFlare. See also: [issue #526](https://github.com/websharks/s2member/issues/526) if you'd like additional details.
358
-
359
- - (s2Member Pro) **JSON API:** In the pro version it is now possible to use the s2Member Pro Remote Operations API to send and receive JSON input/output. This makes the Remote Operations API in s2Member compatible with a variety of scripting languages, not just PHP; i.e., prior to this release the Remote Operations API required that you always use PHP's `serialize()` and `unserialize()` functions when making API calls. The use of `serialize()` and `unserialize()` are no longer a requirement since input/output data is now sent and received in the more portable JSON format. For new code samples, please see: **Dashboard → s2Member → API / Scripting → Pro API For Remote Operations**. See also: [issue #987](https://github.com/websharks/s2member/issues/987) if you'd like additional details on this change.
360
-
361
- _**Note:** The old s2Member Pro Remote Operations API has been deprecated but will continue to function just like before (via `serialize()` and `unserialize()`) for the foreseeable future. Moving forward, we recommend the new JSON code samples. Again, you will find those under: **Dashboard → s2Member → API / Scripting → Pro API For Remote Operations**_
362
-
363
- - (s2Member/s2Member Pro) Enforce data types when determining PHP constants. See [this GitHub issue](https://github.com/websharks/s2member/issues/989) if you'd like further details.
364
-
365
- - (s2Member/s2Member Pro) **Phing Build Routines:** Starting with this release, developers working on the s2Member project are now able to perform builds of the software via the `websharks/phings` project; i.e., the structure of the plugin directories has been changed (slightly) to conform to Phing and PSR4 standards. This makes it easier for our developers to prepare and release new versions of the software in the future.
366
-
367
- = v160801 =
368
-
369
- - (s2Member/s2Member Pro) **WP v4.6 Compatibility.** A full round of tests was performed against this release of s2Member, s2Member Pro, and the upcoming release of WordPress v4.6. In particular, the new HTTP API needed testing, along with the new optimized loading sequence in WordPress v4.6. Our tests indicate there are no compatibility issues, and we therefore encourage all s2Member site owners to upgrade to WordPress v4.6 whenever it becomes available publicly.
370
-
371
- - (s2Member/s2Member Pro) **Bug Fix:** Allow for `<` and `>` to work in the `[s2If php="" /]` shortcode attribute as expected. Some Visual Editors convert these into `&lt;` and `&gt;`, so it's necessary to interpret them as such whenever the shortcode is parsed by s2Member.
372
-
373
- - (s2Member/s2Member Pro) **JS API:** Reducing the number of variables provided by the s2Member JavaScript API by default, and adding a new filter that allows them to all be enabled when/if desirable: `ws_plugin__s2member_js_api_constants_enable`. Props @JeffStarr for reporting.
374
-
375
- = v160503 =
376
-
377
- - (s2Member/s2Member Pro) **Security Enhancement:** This release forces `CURLOPT_SSL_VERIFYPEER` to a value of `TRUE` in the AWeber SDK that is used when/if you integrate with AWeber. In short, this forces AWeber to have a valid/verifiable SSL certificate before any data is exchanged between s2Member and the AWeber API behind-the-scenes. Props at WordPress security team for reporting this.
378
-
379
- = v160424 =
380
-
381
- - (s2Member/s2Member Pro) **PHP Compat./Bug Fix:** This follow-up release includes a patch that will prevent fatal errors when s2Member and/or s2Member Pro are installed on a site running PHP v5.2 or PHP v5.3; i.e., this release corrects a bug that was causing fatal errors on these older versions of PHP. _Note that s2Member and s2Member Pro are once again compatible with PHP v5.2+, up to PHP v7.0._ Props @krumch. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/938) for details.
382
-
383
- = v160423 =
384
-
385
- - (s2Member/s2Member Pro) **WP v4.5 Compatibility.** This release offers full compatibility with the latest release of WordPress v4.5. Nothing major was changed for standard WordPress installations, but there were a few subtle tweaks here and there to improve v4.5 compatibility. We encourage all users to upgrade right away.
386
-
387
- **NOTE: WP v4.5 for Multisite Networks running s2Member Pro:** This release corrects a bug first introduced in the previous release of s2Member Pro that resulted in an error message (`Uncaught Error: Class 'c_ws_plugin__s2member_mms_patches' not found`) when updating to WP v4.5. It has been corrected in this release, but in order to avoid this problem altogether please follow this procedure when upgrading WordPress.
388
-
389
- **WP v4.5 Multisite Upgrade Procedure:**
390
-
391
- - Upgrade s2Member and s2Member Pro ​_before_​ updating WordPress core.
392
- - Then upgrade WordPress core and observe that Multisite Patches are applied properly.
393
-
394
- _If you have already upgraded to WP v4.5 and worked past this issue by patching manually, that's fine. You can still upgrade s2Member and s2Member Pro. After the upgrade you may feel free to enable automatic patching again if that's desirable._
395
-
396
- - (s2Member/s2Member Pro) **Bug Fix:** This release corrects a bug first introduced in the previous release which was causing a PHP warning about `cf_stream_extn_resource_exclusions`. A symptom was to have mysterious problems with `[s2Stream /]` or the `[s2File /]` shortcode. Fixed in this release. Props at @raamdev @renzms for reporting. See also [this GitHub issue](https://github.com/websharks/s2member/issues/901) for details.
397
-
398
- - (s2Member/s2Member Pro) **PayPal SSL Compatibility:** This release of s2Member provides an `https://` IPN URL for PayPal IPN integrations. It also provides a helpful note (in the Dashboard) about a new requirement that PayPal has with respect to the IPN URL that you configure at PayPal.com. s2Member has been updated to help you with this new requirement.
399
-
400
- **New PayPal.com IPN Requirement:** PayPal.com is now requiring any new IPN URL that you configure to be entered as an `https://` URL; i.e., if you log into your PayPal.com account and try to configure a _brand new_ IPN URL, that URL _must_ use `https://`. PayPal.com will refuse it otherwise.
401
-
402
- However, the `notify_url=` parameter in standard PayPal buttons should continue to work with either `http://` or `https://`, and any existing configurations out there that still use an `http://` IPN URL should continue to work as well. So this is about planning for the future. We have been told that PayPal will eventually _require_ that all IPN URLs use an `https://` protocol; i.e., they will eventually stop supporting `http://` IPN URLs altogether (at some point in the future), they are not giving anyone a date yet. For this reason we strongly suggest that you [review the details given here](https://github.com/websharks/s2member/issues/914).
403
-
404
- Since PayPal is moving in a direction that will eventually require all site owners to have an SSL certificate in the future, s2Member's instructions (and the IPN URL it provides you with) will now be presented in the form of an `https://` URL with additional details to help you through the process of configuring an IPN handler for PayPal.
405
-
406
- See: **Dashboard → s2Member → PayPal Options → PayPal IPN Integration**
407
-
408
- Props @codeforest for reporting. See [this GitHub issue](https://github.com/websharks/s2member/issues/914) for further details.
409
-
410
- - (s2Member/s2Member Pro) **Bug Fix:** Email field on Registration page not shown as required via `*` symbol like other fields in this form. Caused by a change in WordPress core. Fixed in this release. Props @spottydog63 @renzms. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/907) for details.
411
-
412
- - (s2Member/s2Member Pro) **Bug Fix:** `E_NOTICE` level errors in cache handler when running in `WP_DEBUG` mode. Props at @KTS915 for reporting. Fixed in this release. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/917).
413
-
414
- - (s2Member/s2Member Pro) **i18n Compatibility:** This release of s2Member moves the `load_plugin_textdomain()` call into the `plugins_loaded` hook instead of it being run on `init`. Props @KTS915 for reporting. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/899) for details.
415
-
416
- - (s2Member Pro) **Multisite Patches:** Fixed a bug (`Uncaught Error: Class 'c_ws_plugin__s2member_mms_patches' not found`) whenever WordPress was being updated and Multisite Patches were being applied in the pro version of s2Member. See: [this GitHub issue](https://github.com/websharks/s2member/issues/929) for details.
417
-
418
- - (s2Member/s2Member Pro) **Security Enhancement:** This release of s2Member defaults PayPal Button Encryption to a value of `on` instead of `off`; i.e., there is a new default behavior. Existing s2Member installations are unaffected by this change, but if you install s2Member on a new site you will notice that (if using PayPal Buttons), Button Encryption will be enabled by default.
419
-
420
- _Note that in order for Button Encryption to work, you must fill-in the API credentials for s2Member under: **Dashboard → s2Member → PayPal Options → PayPal Account Details**_
421
-
422
- = v160303 =
423
-
424
- - (s2Member/s2Member Pro) **Comet Cache Compat.:** This release improves compatibility with Comet Cache (formerly ZenCache), whenever you have it configured to cache logged-in users. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/888). Props @KTS915 for reporting!
425
-
426
- - (s2Member Pro) **ClickBank IPN v6 Compat.:** Version 6 of the ClickBank IPN system was recently updated in a way that causes it to return `transactionType = CANCEL-TEST-REBILL` in test mode, instead of the previous value, which was: `TEST_CANCEL-REBILL`. s2Member Pro has been updated to understand either/or. See also [this GitHub issue](https://github.com/websharks/s2member/issues/882) for further details.
427
-
428
- - (s2Member Pro) **Stripe Bug Fix:** This release corrects a bug caused by typos in the source code that were preventing refunds from being processed as expected whenever Stripe was integrated. Props @YearOfBenj for reporting this important issue. Props @patdumond for relaying vital information. See also [this GitHub issue](https://github.com/websharks/s2member/issues/874) if you'd like additional details.
429
-
430
- - (s2Member Pro) **PayPal Bug Fix:** Under some conditions, the EOT behavior in s2Member Pro (when integrated with PayPal Pro) would immediately terminate access whenever a customer's subscription naturally expires. Recent versions of the Payflow system set the status to `EXPIRED`, and this was handled as an immediate EOT instead of as a delayed EOT that is subject to date calculations to determine the correct date on which a customer should lose access; i.e., based on what they have already paid for. Fixed in this release. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/873) if you'd like additional details.
431
-
432
- - (s2Member Pro) **One-Time Offer Bug Fix:** This release corrects some inconsistencies in the One-Time Offers system that comes with s2Member Pro. Symptoms included seemingly unpredictable behavior whenever redirections were configured without a specific Membership Level. Props @jacobposey for reporting. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/855) if you'd like additional details.
433
-
434
- - (s2Member/s2Member Pro) **Bug Fix:** s2Member was not properly respecting `DISALLOW_FILE_MODS` in a specific scenario related to GZIP. Props @renzms @kristineds. See also: [this GitHub issue](https://github.com/websharks/s2member/issues/832) for further details.
435
-
436
- - (s2Member,s2Member Pro) **Bug Fix:** Resolved a minor glitch in the **WordPress Dashboard → Settings → General** panel, where s2Member's notice regarding Open Registration was inadvertently forcing the entire page into italics. Props @renzms @kristineds @raamdev ~ See also: [this GitHub issue](https://github.com/websharks/s2member/issues/831) if you'd like additional details.
437
-
438
- - (s2Member/s2Member Pro) **PayPal Sandbox:** This release updates the inline documentation under the PayPal Account Settings section of s2Member. We now suggest that instead of enabling PayPal Sandbox Mode (sometimes buggy at best), that site owners run tests with low-dollar amounts against a live PayPal account instead; e.g., $0.01 test transactions in live mode work great also. See [this GitHub issue](https://github.com/websharks/s2member/issues/891) if you'd like additional details. Props @raamdev for mentioning this again.
439
-
440
- = v160120 =
441
-
442
- - (s2Member,s2Member Pro) **Bug Fix:** Resolved a minor glitch in the **WordPress Dashboard → Settings → General** panel, where s2Member's notice regarding Open Registration was inadvertently forcing the entire page into italics. Props @renzms @kristineds @raamdev ~ See also: [this GitHub issue](https://github.com/websharks/s2member/issues/831) if you'd like additional details.
443
-
444
- - (s2Member) **Multisite Support:** This release of s2Member (the free version only) removes full support for Multisite Networks, which is now a Pro feature; i.e., only available in the Pro version.
445
-
446
- ##### Is s2Member still compatible with WordPress Multisite Networking?
447
- Multisite support is no longer included in the s2Member Framework. However, it is available with s2Member Pro. s2Member Pro is compatible with Multisite Networking. After you enable Multisite Networking, install the s2Member Pro Add-On. Then, navigate to `s2Member → Multisite (Config)` in the Dashboard of your Main Site. You can learn more about s2Member Pro at [s2Member.com](http://s2member.com/).
448
 
449
- ##### I was using the free version in a Multisite Network before. What happened?
450
- s2Member (when running on a Multisite Network) requires minor alterations in WordPress core that are not compatible with plugins available at WordPress.org (i.e., not allowed) at this time. For this reason, full support for Multisite Networks is now available only in the pro version.
451
 
452
- ##### What if I already configured Multisite options on a site running the free version?
453
- If you already customized s2Member's Multisite Network configuration options in a previous release, those settings will remain and still be functional over the short-term; i.e., the functionality that makes s2Member compatible with Multisite Networking is still included, even in the s2Member Framework. However, the routines that deal with core patches, and those that allow you to change Multisite options are no longer available. You will need to acquire the Pro version. Or, you can revert to [a previous release](http://s2member.com/release-archive/). s2Member Framework v151218 is suggested if you go that route.
454
 
455
- _See also: [this GitHub issue](https://github.com/websharks/s2member/issues/850) for further details._
456
 
457
- = v151218 =
458
 
459
- - (s2Member Pro) **Reminder Email Notification Exclusions:** It is now possible to enable/disable EOT Renewal/Reminder Email notifications on a per-user basis. You can edit a user's profile in the WP Dashboard and check "_No (exclude)_" to prevent specific users from receiving any reminder emails that you configured. Props at @patdumond @luisrock. See also [this GitHub issue](https://github.com/websharks/s2member/issues/816).
460
 
461
- - (s2Member) **PHP v7 Compat.:** This release addresses one remaining issue with the `preg_replace` `/e` modifier as reported in [this GitHub issue](https://github.com/websharks/s2member/issues/811). Props @nerdworker for reporting. Thanks!
462
 
463
- - (s2Member/s2Member Pro) **WP v4.4 Compat.:** This release corrects an issue that impacted sites attempting to run s2Member on a Multisite Network; i.e., it corrects a problem with the `load.php` patch against the latest release of WordPress. Props @crazycoolcam for reporting! See also [this GitHub issue](https://github.com/websharks/s2member/issues/812).
464
 
465
- - (s2Member/s2Member Pro) **Getting Help:** This release adds a new menu page titled, "Getting Help w/ s2Member". This new section of your Dashboard provides quick & easy access to s2Member KB articles, suggestions, and our tech support department (for pro customers). Props @patdumond @raamdev. See also [this GitHub issue](https://github.com/websharks/s2member/issues/814).
466
 
467
- For older Changelog entries, please see the [changelog.md](https://github.com/websharks/s2member/blob/master/s2member/changelog.md) file.
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
12
  License: GNU General Public License v2 or later.
13
  Contributors: WebSharks, JasWSInc, raamdev, clavaque, eduan
14
+ Author: s2Member
15
+ Author URI: https://s2member.com/
16
+ Donate link: https://s2member.com/donate/
17
+ Beta link: https://s2member.com/beta-testers/
18
+ Forum URI: https://s2member.com/r/forum/
19
+ Privacy URI: https://s2member.com/privacy-policy/
20
+ Changelog URI: https://s2member.com/changelog/
21
+ Video Tutorials: https://s2member.com/r/s2member-videos/
22
+ Knowledge Base: https://s2member.com/kb/
23
  More Updates: https://s2member.com/category/news-updates/
24
+ Newsletter: https://s2member.com/r/subscribe/
25
+ 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
 
81
+ **NOTICE:** For help with s2Member Pro, please use [our forum](http://s2member.com/r/forum/).
 
 
82
 
83
+ = s2Member is very easy to install =
84
 
85
  Just like any other normal plugin:
86
 
90
 
91
  Here's a [quick-start video](https://www.youtube.com/watch?v=qlKn-I-0W6U) for a simple basic setup to get you started.
92
 
93
+ = See also =
94
 
95
  [Detailed installation/upgrade instructions](http://s2member.com/installation/).
96
 
97
  = Is s2Member compatible with Multisite Networking? =
98
 
99
+ Yes, requires s2Member Pro for Unlimited Sites. After you enable Multisite Networking, with s2Member Framework and Pro active, navigate to `s2Member → Multisite (Config)` in the Dashboard on your Main Site.
100
 
101
  == Screenshots ==
102
 
110
 
111
  == Frequently Asked Questions ==
112
 
113
+ **NOTICE:** For help with s2Member Pro, please use [our forum](http://s2member.com/r/forum/).
114
 
115
+ = Is s2Member compatible with Multisite Networking? =
116
+
117
+ Yes, s2Member Pro for Unlimited Sites is compatible with Multisite Networking. After you enable Multisite Networking, with s2Member Framework and Pro enabled, navigate to `s2Member → Multisite (Config)` in the Dashboard on your Main Site.
118
 
119
+ = Where can I find more information? =
120
 
121
  * s2Member FAQs: <http://s2member.com/faqs/>
122
  * Knowledge Base: <http://s2member.com/kb/>
128
 
129
  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.
 
136
 
137
+ - (Pro) **Enhancement**: Removed ClickBank's name from the notify, return, and success URLs, replaced with just `cb`. Kudos to Eduardo for telling me about this. See [thread 9910](https://f.wpsharks.com/t/9910)
 
138
 
139
+ - (Pro) **Enhancement**: Added a PayPal payment request ID to help prevent random/rare PayPal duplicate charges. Kudos to Nathan for his help. See [thread 7999](https://f.wpsharks.com/t/7999/27)
140
 
141
+ - (Framework) **UI Enhancement**: Admin page panels widened for larger displays.
142
 
143
+ - (Framework) **UI Enhancement**: Simplified Getting Started and Getting Help admin pages.
144
 
145
+ - (Framework) **UI Enhancement**: In PayPal Options admin page, updated paths and links to PayPal settings.
146
 
147
+ - (Framework) **Bug Fix**: Removed the Security Badge's link to the old Flash powered page on s2Member's site.
148
 
149
+ - (Pro) **UI Enhancement**: Small improvements to the Pro upgrader.
150
 
151
+ You can find the [full changelog here](https://s2member.com/changelog/).
s2member.php CHANGED
@@ -20,8 +20,8 @@
20
  */
21
  /* -- This section for WordPress parsing. ------------------------------------------------------------------------------
22
 
23
- Version: 220809
24
- Stable tag: 220809
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-alpha-53862
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'] = '220809'; //version//
81
  if(!defined('WS_PLUGIN__S2MEMBER_VERSION'))
82
  define('WS_PLUGIN__S2MEMBER_VERSION', ${__FILE__}['tmp']);
83
  /**
@@ -110,7 +110,7 @@ if(!defined('WS_PLUGIN__S2MEMBER_MIN_WP_VERSION'))
110
  *
111
  * @var string
112
  */
113
- ${__FILE__}['tmp'] = '210526'; //version//
114
  if(!defined('WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION'))
115
  define('WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION', ${__FILE__}['tmp']);
116
  /*
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
  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
  *
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
  /**
110
  *
111
  * @var string
112
  */
113
+ ${__FILE__}['tmp'] = '210526'; //!!!version//
114
  if(!defined('WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION'))
115
  define('WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION', ${__FILE__}['tmp']);
116
  /*
src/includes/menu-pages/help.inc.php CHANGED
@@ -38,7 +38,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_help"))
38
  c_ws_plugin__s2member_menu_pages_tb::display ();
39
  echo '</div>'."\n";
40
 
41
- echo '<h2>Getting Help w/ s2Member®</h2>' . "\n";
42
 
43
  echo '<table class="ws-menu-page-table">' . "\n";
44
  echo '<tbody class="ws-menu-page-table-tbody">' . "\n";
@@ -48,59 +48,46 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_help"))
48
  do_action("ws_plugin__s2member_during_help_page_before_left_sections", get_defined_vars ());
49
  do_action("ws_plugin__s2member_during_help_page_during_left_sections_before_help", get_defined_vars ());
50
 
51
- echo '<div class="ws-menu-page-group" title="Getting Help w/ s2Member" default-state="open">' . "\n";
52
 
53
  echo '<div class="ws-menu-page-section ws-plugin--s2member-help">' . "\n";
54
- echo '<p>s2Member is pretty easy to setup and install initially. Most of the official documentation is right here in your Dashboard (i.e., there is a lot of inline documentation built into the software). That being said, it can take some time to master everything there is to know about s2Member\'s advanced features. If you need assistance with s2Member, please search the <a href="http://s2member.com/kb/" target="_blank" rel="external">s2Member Knowledge Base</a>, <a href="http://s2member.com/r/videos/" target="_blank" rel="external">Video Tutorials</a>, <a href="http://s2member.com/r/forum/" target="_blank" rel="external">Forums</a> and <a href="http://s2member.com/r/codex/" target="_blank" rel="external">Codex</a>. If you are planning to do something creative with s2Member, you might want to <a href="https://s2member.com/r/jobs-wordpress-net/" target="_blank" rel="external">hire a freelance developer</a> to assist you.</p>' . "\n";
55
- echo '<p><strong>See also:</strong> <a href="http://s2member.com/r/common-troubleshooting-tips/" target="_blank" rel="external">s2Member Troubleshooting Guide</a> (please read this first if you\'re having trouble).</p>'."\n";
56
 
57
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
58
 
59
- echo '<h3 style="margin-bottom:0;">Testing Server Compatibility</h3>'."\n";
60
- echo '<p>Please download the <a href="http://s2member.com/r/server-scanner-info/">s2Member Server Scanner</a>. Unzip, upload via FTP; then open in a browser for a full report.</p>'."\n";
61
 
62
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
63
 
64
- echo '<h3 style="margin-bottom:0;">Troubleshooting Payment Gateway Integrations</h3>'."\n";
65
- echo '<p>Please use s2Member\'s <a href="'.esc_attr(admin_url("/admin.php?page=ws-plugin--s2member-logs")).'">Log Viewer</a>. Log files can be very helpful.</p>'."\n";
66
-
67
- echo '<div class="ws-menu-page-hr"></div>' . "\n";
68
-
69
- echo '<h3 style="margin-bottom:0;">Search s2Member KB Articles<em>!</em></h3>'."\n";
70
  echo '<form method="get" action="http://s2member.com/kb/" target="_blank" onsubmit="if(this.q.value === \'enter search terms...\') this.q.value = \'\';" autocomplete="off">'."\n";
71
  echo '<p><input type="text" name="kb_q" value="enter search terms..." style="width:60%;" onfocus="if(this.value === \'enter search terms...\') this.value = \'\';" onblur="if(this.value === \'\') this.value = \'enter search terms...\';" /> <input type="submit" value="Search" style="font-size:120%; font-weight:normal;" /></p>'."\n";
72
  echo '</form>'."\n";
73
 
74
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_help", get_defined_vars ());
75
-
76
- echo '</div>' . "\n";
77
-
78
- echo '</div>' . "\n";
79
-
80
- do_action("ws_plugin__s2member_during_help_page_during_left_sections_after_help", get_defined_vars ());
81
 
82
- do_action("ws_plugin__s2member_during_help_page_during_left_sections_before_support", get_defined_vars ());
83
 
84
- echo '<div class="ws-menu-page-group" title="s2Member Tech. Support (for Pro Customers)" default-state="open">' . "\n";
85
 
86
- echo '<div class="ws-menu-page-section ws-plugin--s2member-support">' . "\n";
87
- echo '<p style="max-width:900px;">Support for s2Member® is provided by WebSharks, Inc. Our customer support representatives are available Monday through Friday, excluding all major holidays. Or, you can discuss problems/solutions with others in our <a href="http://s2member.com/r/forums/" target="_blank" rel="external">public community forum</a>.</p>'."\n";
 
88
 
89
- echo '<ul>'."\n";
90
- echo '<li>For pre-sale questions please see: <a href="http://s2member.com/kb/kb-tag/pre-sale-faqs/" target="_blank" rel="external">Pre-Sale FAQs</a>.</li>'."\n";
91
- echo '<li>For installation instructions, please see: <a href="http://s2member.com/installation/" target="_blank" rel="external">Installing/Updating s2Member & s2Member Pro</a>.</li>'."\n";
92
- echo '<li>For troubleshooting (and documentation) please <a href="http://s2member.com/kb/" target="_blank" rel="external">search our Knowledge Base</a>.</li>'."\n";
93
- echo '<li>Paying customers in need of assistance may <a href="http://s2member.com/r/new-trouble-ticket/" target="_blank" rel="external">submit a trouble ticket</a>.</li>'."\n";
94
- echo '<li>If you have other questions, please <a href="http://s2member.com/r/new-pre-sale-inquiry/" target="_blank" rel="external">contact our sales dept</a>.</li>'."\n";
95
- echo '</ul>'."\n";
96
 
97
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_support", get_defined_vars ());
 
 
 
98
 
99
  echo '</div>' . "\n";
100
 
101
  echo '</div>' . "\n";
102
 
103
- do_action("ws_plugin__s2member_during_help_page_during_left_sections_after_support", get_defined_vars ());
104
 
105
  if (apply_filters("ws_plugin__s2member_during_help_page_during_left_sections_display_pro", !c_ws_plugin__s2member_utils_conds::pro_is_installed(), get_defined_vars ()))
106
  {
@@ -109,8 +96,10 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_help"))
109
  echo '<div class="ws-menu-page-group" title="Upgrading to s2Member Pro<em>!</em>" default-state="open">' . "\n";
110
 
111
  echo '<div class="ws-menu-page-section ws-plugin--s2member-pro">' . "\n";
112
- echo '<p>Among many other features/enhancements, <a href="http://s2member.com/" target="_blank" rel="external">s2Member Pro</a> comes pre-integrated with additional payment gateways that work with s2Member Pro-Forms (a powerful s2Member Pro feature). For instance, Stripe (most popular), PayPal Payments Pro, and Authorize.Net. Each of these payment gateways allow you to accept most major credit cards on-site; i.e., customers never leave your site! s2Member Pro-Forms also support PayPal Express Checkout (if you integrate with PayPal Pro); for customers who actually prefer to pay with PayPal.</p>' . "\n";
113
  echo '<p><strong>Learn more here:</strong> <a href="http://s2member.com/features/" target="_blank" rel="external">s2Member Pro Features</a></p>'."\n";
 
 
114
  do_action("ws_plugin__s2member_during_help_page_during_left_sections_during_pro", get_defined_vars ());
115
  echo '</div>' . "\n";
116
 
38
  c_ws_plugin__s2member_menu_pages_tb::display ();
39
  echo '</div>'."\n";
40
 
41
+ echo '<h2>Need Help?</h2>' . "\n";
42
 
43
  echo '<table class="ws-menu-page-table">' . "\n";
44
  echo '<tbody class="ws-menu-page-table-tbody">' . "\n";
48
  do_action("ws_plugin__s2member_during_help_page_before_left_sections", get_defined_vars ());
49
  do_action("ws_plugin__s2member_during_help_page_during_left_sections_before_help", get_defined_vars ());
50
 
51
+ echo '<div class="ws-menu-page-group" title="Don\'t worry :)" default-state="open">' . "\n";
52
 
53
  echo '<div class="ws-menu-page-section ws-plugin--s2member-help">' . "\n";
54
+ echo '<p>s2Member is pretty easy to setup. Most of the official documentation is inline, right next to what it applies.</p>',
55
+ '<p>You can also try searching <a href="https://google.com" target="_blank" rel="external">the web</a>, our <a href="http://s2member.com/kb/" target="_blank" rel="external">knowledge base</a>, <a href="http://s2member.com/r/videos/" target="_blank" rel="external">videos</a>, <a href="http://s2member.com/r/forum/" target="_blank" rel="external">forums</a>, or <a href="http://s2member.com/r/codex/" target="_blank" rel="external">codex</a>.' . "\n";
56
 
57
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
58
 
59
+ echo '<h3>Troubleshooting Tips</h3>';
60
+ echo '<p>Here\'s a collection of good things to try when <a href="http://s2member.com/r/common-troubleshooting-tips/" target="_blank" rel="external">troubleshooting</a>. Please read this first if you\'re having trouble.</p>'."\n";
61
 
62
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
63
 
64
+ echo '<h3>Search our Knowledge Base</h3>';
 
 
 
 
 
65
  echo '<form method="get" action="http://s2member.com/kb/" target="_blank" onsubmit="if(this.q.value === \'enter search terms...\') this.q.value = \'\';" autocomplete="off">'."\n";
66
  echo '<p><input type="text" name="kb_q" value="enter search terms..." style="width:60%;" onfocus="if(this.value === \'enter search terms...\') this.value = \'\';" onblur="if(this.value === \'\') this.value = \'enter search terms...\';" /> <input type="submit" value="Search" style="font-size:120%; font-weight:normal;" /></p>'."\n";
67
  echo '</form>'."\n";
68
 
69
+ echo '<div class="ws-menu-page-hr"></div>' . "\n";
 
 
 
 
 
 
70
 
71
+ echo '<h3>Search the Web</h3>';
72
 
73
+ echo '<p>A <a href="https://google.com" target="_blank" rel="external">Google search</a> for s2member and some keywords for what you\'re trying to solve/answer, is usually very helpful. You\'ll often get links to threads in our old forums, which are packed with helpful information, sometimes not easily found by other means.</p>'."\n";
74
 
75
+ echo '<form method="get" action="https://google.com/search" target="_blank" onsubmit="this.q.value = \'s2member \' + this.q.value;" autocomplete="off">'."\n";
76
+ echo '<p><input type="text" name="q" value="enter search terms..." style="width:60%;" onfocus="if(this.value === \'enter search terms...\') this.value = \'\';" onblur="if(this.value === \'\') this.value = \'enter search terms...\';" /> <input type="submit" value="Search" style="font-size:120%; font-weight:normal;" /></p>'."\n";
77
+ echo '</form>'."\n";
78
 
79
+ echo '<div class="ws-menu-page-hr"></div>' . "\n";
 
 
 
 
 
 
80
 
81
+ echo '<h3>Community Forum</h3>';
82
+ echo '<p>Come join us in our <a href="http://s2member.com/r/forums/" target="_blank" rel="external">community forum</a>.</p>'."\n";
83
+
84
+ do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_help", get_defined_vars ());
85
 
86
  echo '</div>' . "\n";
87
 
88
  echo '</div>' . "\n";
89
 
90
+ do_action("ws_plugin__s2member_during_help_page_during_left_sections_after_help", get_defined_vars ());
91
 
92
  if (apply_filters("ws_plugin__s2member_during_help_page_during_left_sections_display_pro", !c_ws_plugin__s2member_utils_conds::pro_is_installed(), get_defined_vars ()))
93
  {
96
  echo '<div class="ws-menu-page-group" title="Upgrading to s2Member Pro<em>!</em>" default-state="open">' . "\n";
97
 
98
  echo '<div class="ws-menu-page-section ws-plugin--s2member-pro">' . "\n";
99
+ echo '<p>Among many other features/enhancements, <a href="http://s2member.com/" target="_blank" rel="external">s2Member Pro</a> comes pre-integrated with additional payment gateways that work with s2Member Pro-Forms (a powerful s2Member Pro feature). For instance, Stripe (most popular), PayPal Payments Pro, and Authorize.Net. Each of these payment gateways allow you to accept most major credit cards on-site, so customers never leave your site! s2Member Pro-Forms also support PayPal Express Checkout, for customers who actually prefer to pay with PayPal.</p>' . "\n";
100
  echo '<p><strong>Learn more here:</strong> <a href="http://s2member.com/features/" target="_blank" rel="external">s2Member Pro Features</a></p>'."\n";
101
+ echo '<p>For pre-sale questions, please see: <a href="http://s2member.com/kb/kb-tag/pre-sale-faqs/" target="_blank" rel="external">Pre-Sale FAQs</a>.</p>'."\n";
102
+ echo '<p>If you have other questions, please <a href="http://s2member.com/r/new-pre-sale-inquiry/" target="_blank" rel="external">contact our sales dept</a>.</p>'."\n";
103
  do_action("ws_plugin__s2member_during_help_page_during_left_sections_during_pro", get_defined_vars ());
104
  echo '</div>' . "\n";
105
 
src/includes/menu-pages/menu-pages.css CHANGED
@@ -1092,7 +1092,6 @@ table.ws-menu-page-table div.ws-menu-page-r-group-header.open {
1092
  background: #f0f0f0;
1093
  border-radius: 0;
1094
  margin: 5px 0 0 0;
1095
- max-width: 676px;
1096
  }
1097
 
1098
  table.ws-menu-page-table div.ws-menu-page-group.open {
@@ -1105,7 +1104,6 @@ table.ws-menu-page-table div.ws-menu-page-group.open {
1105
  margin: 0;
1106
  padding: 25px;
1107
  width: 100%;
1108
- max-width: 700px;
1109
  border-left: 5px solid #72aee6;
1110
  }
1111
 
@@ -1118,7 +1116,7 @@ table.ws-menu-page-table div.ws-menu-page-group.open {
1118
 
1119
  table.ws-menu-page-table div.ws-menu-page-group-header.open,
1120
  table.ws-menu-page-table div.ws-menu-page-group.open {
1121
- background: white;
1122
  }
1123
 
1124
  .ws-menu-page-table {
@@ -1425,6 +1423,13 @@ div.ws-menu-page .ws-menu-page-warning-hilite code {
1425
  background: #f86368 !important;
1426
  }
1427
 
 
 
 
 
 
 
 
1428
  div.ws-menu-page input[type="text"],
1429
  div.ws-menu-page input[type="password"] {
1430
  border-left: 5px solid lightgray !important;
1092
  background: #f0f0f0;
1093
  border-radius: 0;
1094
  margin: 5px 0 0 0;
 
1095
  }
1096
 
1097
  table.ws-menu-page-table div.ws-menu-page-group.open {
1104
  margin: 0;
1105
  padding: 25px;
1106
  width: 100%;
 
1107
  border-left: 5px solid #72aee6;
1108
  }
1109
 
1116
 
1117
  table.ws-menu-page-table div.ws-menu-page-group-header.open,
1118
  table.ws-menu-page-table div.ws-menu-page-group.open {
1119
+ background: white !important;
1120
  }
1121
 
1122
  .ws-menu-page-table {
1423
  background: #f86368 !important;
1424
  }
1425
 
1426
+ #ws-plugin--s2member-pro-upgrade-username,
1427
+ #ws-plugin--s2member-pro-upgrade-password,
1428
+ #ws-plugin--s2member-pro-upgrade-submit {
1429
+ padding: 0 10px !important;
1430
+ margin: 5px 0 !important;
1431
+ }
1432
+
1433
  div.ws-menu-page input[type="text"],
1434
  div.ws-menu-page input[type="password"] {
1435
  border-left: 5px solid lightgray !important;
src/includes/menu-pages/paypal-ops.inc.php CHANGED
@@ -79,7 +79,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_paypal_ops"))
79
 
80
  echo '<td>'."\n";
81
  echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_paypal_merchant_id" id="ws-plugin--s2member-paypal-merchant-id" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_merchant_id"]).'" /><br />'."\n";
82
- echo 'At PayPal, see: <strong>ProfileSecure Merchant ID</strong>'."\n";
83
  echo '</td>'."\n";
84
 
85
  echo '</tr>'."\n";
@@ -96,7 +96,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_paypal_ops"))
96
 
97
  echo '<td>'."\n";
98
  echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_paypal_business" id="ws-plugin--s2member-paypal-business" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_business"]).'" /><br />'."\n";
99
- echo 'At PayPal, see: <strong>Profile → Email Accounts</strong>'."\n";
100
  echo '</td>'."\n";
101
 
102
  echo '</tr>'."\n";
@@ -120,7 +120,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_paypal_ops"))
120
 
121
  echo '<td>'."\n";
122
  echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_paypal_api_username" id="ws-plugin--s2member-paypal-api-username" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_username"]).'" /><br />'."\n";
123
- echo 'At PayPal, see: <strong>Profile → API Access (orRequest API Credentials)</strong>'."\n";
124
  echo '</td>'."\n";
125
 
126
  echo '</tr>'."\n";
@@ -137,7 +137,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_paypal_ops"))
137
 
138
  echo '<td>'."\n";
139
  echo '<input type="password" autocomplete="off" name="ws_plugin__s2member_paypal_api_password" id="ws-plugin--s2member-paypal-api-password" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_password"]).'" /><br />'."\n";
140
- echo 'At PayPal, see: <strong>Profile → API Access (orRequest API Credentials)</strong>'."\n";
141
  echo '</td>'."\n";
142
 
143
  echo '</tr>'."\n";
@@ -154,7 +154,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_paypal_ops"))
154
 
155
  echo '<td>'."\n";
156
  echo '<input type="password" autocomplete="off" name="ws_plugin__s2member_paypal_api_signature" id="ws-plugin--s2member-paypal-api-signature" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_signature"]).'" /><br />'."\n";
157
- echo 'At PayPal, see: <strong>Profile → API Access (or "Request API Credentials")</strong>'."\n";
158
  echo '</td>'."\n";
159
 
160
  echo '</tr>'."\n";
@@ -198,7 +198,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_paypal_ops"))
198
 
199
  echo '<td>'."\n";
200
  echo '<input type="radio" name="ws_plugin__s2member_paypal_btn_encryption" id="ws-plugin--s2member-paypal-btn-encryption-0" value="0"'.((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_btn_encryption"]) ? ' checked="checked"' : '').' /> <label for="ws-plugin--s2member-paypal-btn-encryption-0">No</label> &nbsp;&nbsp;&nbsp; <input type="radio" name="ws_plugin__s2member_paypal_btn_encryption" id="ws-plugin--s2member-paypal-btn-encryption-1" value="1"'.(($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_btn_encryption"]) ? ' checked="checked"' : '').' /> <label for="ws-plugin--s2member-paypal-btn-encryption-1">Yes, enable PayPal Button encryption.</label><br />'."\n";
201
- echo '<em>If enabled, all of your PayPal Button Shortcodes will produce <em>encrypted</em> PayPal Buttons. This improves security against fraudulent transactions. For extra security, you should update your PayPal account too, under: <strong>My Profile → Website Payment Preferences</strong>. You\'ll want to block all non-encrypted payments. <strong>Note:</strong> this will NOT work until you\'ve supplied s2Member with your PayPal Email Address, and also with your API Username/Password/Signature.</em>'."\n";
202
  echo '</td>'."\n";
203
 
204
  echo '</tr>'."\n";
@@ -252,7 +252,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_paypal_ops"))
252
  {
253
  do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_before_paypal_payflow_account_details", get_defined_vars());
254
 
255
- echo '<div class="ws-menu-page-group" title="Payflow Account Details">'."\n";
256
 
257
  echo '<div class="ws-menu-page-section ws-plugin--s2member-paypal-payflow-account-details-section">'."\n";
258
  echo '<a href="https://s2member.com/r/paypal/" target="_blank"><img src="'.esc_attr($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]).'/src/images/paypal-logo.png" class="ws-menu-page-right" style="width:125px; height:125px; border:0;" alt="." /></a>'."\n";
@@ -351,7 +351,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_paypal_ops"))
351
 
352
  echo '<div class="ws-menu-page-section ws-plugin--s2member-paypal-ipn-section">'."\n";
353
  echo '<h3>PayPal IPN / Instant Payment Notifications (required, please enable)</h3>'."\n";
354
- echo '<p>Log into your PayPal account and navigate to this section:<br /><strong>Account Profile → <a href="http://s2member.com/r/paypal-com-ipn-configuration-page/" target="_blank" rel="external">Instant Payment Notification Preferences</a></strong></p>'."\n";
355
  echo '<p>Edit your IPN settings &amp; turn IPN Notifications: <strong><code>On</code></strong></p>'."\n";
356
  echo '<p>You\'ll need your IPN URL, which is:<br /><code>'.esc_html(home_url("/?s2member_paypal_notify=1", "https")).'</code></p>'."\n";
357
  do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_ipn", get_defined_vars());
@@ -392,7 +392,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_paypal_ops"))
392
 
393
  echo '<div class="ws-menu-page-section ws-plugin--s2member-paypal-pdt-section">'."\n";
394
  echo '<h3>PayPal PDT Identity Token (required, please enable)</h3>'."\n";
395
- echo '<p>Log into your PayPal account and navigate to this section:<br /><strong>Account Profile → Website Payment Preferences</strong></p>'."\n";
396
  echo '<p>Turn the Auto-Return feature: <strong><code>On</code></strong></p>'."\n";
397
  echo '<p>You\'ll need your <a href="'.esc_attr(home_url("/?s2member_paypal_return=1&s2member_paypal_proxy=paypal&s2member_paypal_proxy_use=x-preview")).'" target="_blank" rel="external">Auto-Return URL</a>, which is:<br /><code>'.esc_html(home_url("/?s2member_paypal_return=1")).'</code></p>'."\n";
398
  echo '<p>You must also enable PDT (Payment Data Transfer): <strong><code>On</code></strong><br /><em>You\'ll be issued an Identity Token that you can enter below.</em></p>'."\n";
@@ -413,7 +413,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_paypal_ops"))
413
 
414
  echo '<td>'."\n";
415
  echo '<input type="password" autocomplete="off" name="ws_plugin__s2member_paypal_identity_token" id="ws-plugin--s2member-paypal-identity-token" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_identity_token"]).'" /><br />'."\n";
416
- echo 'Your PDT Identity Token will appear under <strong>Profile → Website Payment Preferences</strong> in your PayPal account.'."\n";
417
  echo '</td>'."\n";
418
 
419
  echo '</tr>'."\n";
79
 
80
  echo '<td>'."\n";
81
  echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_paypal_merchant_id" id="ws-plugin--s2member-paypal-merchant-id" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_merchant_id"]).'" /><br />'."\n";
82
+ echo 'At PayPal, see: <strong><a href="https://www.paypal.com/businessmanage/account/aboutBusiness" target="_blank" rel="external">Account Settings Business Information → PayPal Merchant ID</a></strong>'."\n";
83
  echo '</td>'."\n";
84
 
85
  echo '</tr>'."\n";
96
 
97
  echo '<td>'."\n";
98
  echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_paypal_business" id="ws-plugin--s2member-paypal-business" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_business"]).'" /><br />'."\n";
99
+ echo 'At PayPal, see: <strong><a href="https://www.paypal.com/businessmanage/account/accountOwner" target="_blank" rel="external">Account Settings Account Owner Information → Email Address</a></strong>'."\n";
100
  echo '</td>'."\n";
101
 
102
  echo '</tr>'."\n";
120
 
121
  echo '<td>'."\n";
122
  echo '<input type="text" autocomplete="off" name="ws_plugin__s2member_paypal_api_username" id="ws-plugin--s2member-paypal-api-username" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_username"]).'" /><br />'."\n";
123
+ echo 'At PayPal, see: <strong><a href="https://www.paypal.com/businessprofile/mytools/apiaccess/firstparty/signature" target="_blank" rel="external">Account Settings Website Payments → API Access → NVP/SOAP API integration (Classic)Manage API Credentials</a></strong>'."\n";
124
  echo '</td>'."\n";
125
 
126
  echo '</tr>'."\n";
137
 
138
  echo '<td>'."\n";
139
  echo '<input type="password" autocomplete="off" name="ws_plugin__s2member_paypal_api_password" id="ws-plugin--s2member-paypal-api-password" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_password"]).'" /><br />'."\n";
140
+ echo 'At PayPal, see: <strong><a href="https://www.paypal.com/businessprofile/mytools/apiaccess/firstparty/signature" target="_blank" rel="external">Account Settings Website Payments → API Access → NVP/SOAP API integration (Classic)Manage API Credentials</a></strong>'."\n";
141
  echo '</td>'."\n";
142
 
143
  echo '</tr>'."\n";
154
 
155
  echo '<td>'."\n";
156
  echo '<input type="password" autocomplete="off" name="ws_plugin__s2member_paypal_api_signature" id="ws-plugin--s2member-paypal-api-signature" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_signature"]).'" /><br />'."\n";
157
+ echo 'At PayPal, see: <strong><a href="https://www.paypal.com/businessprofile/mytools/apiaccess/firstparty/signature" target="_blank" rel="external">Account Settings Website Payments → API Access → NVP/SOAP API integration (Classic) Manage API Credentials</a></strong>'."\n";
158
  echo '</td>'."\n";
159
 
160
  echo '</tr>'."\n";
198
 
199
  echo '<td>'."\n";
200
  echo '<input type="radio" name="ws_plugin__s2member_paypal_btn_encryption" id="ws-plugin--s2member-paypal-btn-encryption-0" value="0"'.((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_btn_encryption"]) ? ' checked="checked"' : '').' /> <label for="ws-plugin--s2member-paypal-btn-encryption-0">No</label> &nbsp;&nbsp;&nbsp; <input type="radio" name="ws_plugin__s2member_paypal_btn_encryption" id="ws-plugin--s2member-paypal-btn-encryption-1" value="1"'.(($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_btn_encryption"]) ? ' checked="checked"' : '').' /> <label for="ws-plugin--s2member-paypal-btn-encryption-1">Yes, enable PayPal Button encryption.</label><br />'."\n";
201
+ echo '<em>If enabled, all of your PayPal Button Shortcodes will produce <em>encrypted</em> PayPal Buttons. This improves security against fraudulent transactions. For extra security, you should update your PayPal account too, under: <strong><a href="https://www.paypal.com/businessmanage/preferences/website" target="_blank" rel="external">Account Settings → Website Payments → Website Preferences → Encrypted Website Payments</a></strong>. You\'ll want to block all non-encrypted payments. <strong>Note:</strong> this will NOT work until you\'ve supplied s2Member with your PayPal Email Address, and also with your API Username/Password/Signature.</em>'."\n";
202
  echo '</td>'."\n";
203
 
204
  echo '</tr>'."\n";
252
  {
253
  do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_before_paypal_payflow_account_details", get_defined_vars());
254
 
255
+ echo '<div class="ws-menu-page-group" title="PayPal Pro Payflow Edition API Credentials">'."\n";
256
 
257
  echo '<div class="ws-menu-page-section ws-plugin--s2member-paypal-payflow-account-details-section">'."\n";
258
  echo '<a href="https://s2member.com/r/paypal/" target="_blank"><img src="'.esc_attr($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]).'/src/images/paypal-logo.png" class="ws-menu-page-right" style="width:125px; height:125px; border:0;" alt="." /></a>'."\n";
351
 
352
  echo '<div class="ws-menu-page-section ws-plugin--s2member-paypal-ipn-section">'."\n";
353
  echo '<h3>PayPal IPN / Instant Payment Notifications (required, please enable)</h3>'."\n";
354
+ echo '<p>Log into your PayPal account and navigate to this section:<br /><strong><a href="http://s2member.com/r/paypal-com-ipn-configuration-page/" target="_blank" rel="external">Account Settings → Website Payments → Instant Payment Notifications</a></strong></p>'."\n";
355
  echo '<p>Edit your IPN settings &amp; turn IPN Notifications: <strong><code>On</code></strong></p>'."\n";
356
  echo '<p>You\'ll need your IPN URL, which is:<br /><code>'.esc_html(home_url("/?s2member_paypal_notify=1", "https")).'</code></p>'."\n";
357
  do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_ipn", get_defined_vars());
392
 
393
  echo '<div class="ws-menu-page-section ws-plugin--s2member-paypal-pdt-section">'."\n";
394
  echo '<h3>PayPal PDT Identity Token (required, please enable)</h3>'."\n";
395
+ echo '<p>Log into your PayPal account and navigate to this section:<br /><strong><a href="https://www.paypal.com/businessmanage/preferences/website" target="_blank" rel="external">Account Settings → Website Payments → Website Preferences</a></strong></p>'."\n";
396
  echo '<p>Turn the Auto-Return feature: <strong><code>On</code></strong></p>'."\n";
397
  echo '<p>You\'ll need your <a href="'.esc_attr(home_url("/?s2member_paypal_return=1&s2member_paypal_proxy=paypal&s2member_paypal_proxy_use=x-preview")).'" target="_blank" rel="external">Auto-Return URL</a>, which is:<br /><code>'.esc_html(home_url("/?s2member_paypal_return=1")).'</code></p>'."\n";
398
  echo '<p>You must also enable PDT (Payment Data Transfer): <strong><code>On</code></strong><br /><em>You\'ll be issued an Identity Token that you can enter below.</em></p>'."\n";
413
 
414
  echo '<td>'."\n";
415
  echo '<input type="password" autocomplete="off" name="ws_plugin__s2member_paypal_identity_token" id="ws-plugin--s2member-paypal-identity-token" value="'.format_to_edit($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_identity_token"]).'" /><br />'."\n";
416
+ echo 'Your PDT Identity Token will appear under <strong>Account Settings → Website Payments → Website Preferences</strong> in your PayPal account.'."\n";
417
  echo '</td>'."\n";
418
 
419
  echo '</tr>'."\n";
src/includes/menu-pages/start.inc.php CHANGED
@@ -3,8 +3,8 @@
3
  /**
4
  * Getting Started.
5
  *
6
- * Copyright: © 2009-2011
7
- * {@link http://websharks-inc.com/ WebSharks, Inc.}
8
  * (coded in the USA)
9
  *
10
  * Released under the terms of the GNU General Public License.
@@ -19,261 +19,52 @@ if(!defined('WPINC')) // MUST have WordPress.
19
  exit ("Do not access this file directly.");
20
 
21
  if (!class_exists ("c_ws_plugin__s2member_menu_page_start"))
 
 
 
 
 
 
 
 
22
  {
23
- /**
24
- * Getting Started.
25
- *
26
- * @package s2Member\Menu_Pages
27
- * @since 110531
28
- */
29
- class c_ws_plugin__s2member_menu_page_start
30
- {
31
- public function __construct ()
32
- {
33
- echo '<div class="wrap ws-menu-page">' . "\n";
34
 
35
- echo '<div class="wp-header-end"></div>'."\n";
36
 
37
- echo '<div class="ws-menu-page-toolbox">'."\n";
38
- c_ws_plugin__s2member_menu_pages_tb::display ();
39
- echo '</div>'."\n";
40
 
41
- echo '<h2>Getting Started w/ s2Member®</h2>' . "\n";
42
 
43
- echo '<table class="ws-menu-page-table">' . "\n";
44
- echo '<tbody class="ws-menu-page-table-tbody">' . "\n";
45
- echo '<tr class="ws-menu-page-table-tr">' . "\n";
46
- echo '<td class="ws-menu-page-table-l">' . "\n";
47
 
48
- do_action("ws_plugin__s2member_during_start_page_before_left_sections", get_defined_vars ());
 
 
 
 
 
49
 
50
- if (apply_filters("ws_plugin__s2member_during_start_page_during_left_sections_display_registration_process", true, get_defined_vars ()))
51
- {
52
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_registration_process", get_defined_vars ());
53
 
54
- echo '<div class="ws-menu-page-group" title="The Registration Process" default-state="open">' . "\n";
 
 
55
 
56
- echo '<div class="ws-menu-page-section ws-plugin--s2member-registration-process-section">' . "\n";
57
- echo '<p>1. Users will go to your Membership Options Page (which you may configure; see: <em><strong>Dashboard → s2Member → General Options → Membership Options Page</strong></em>). On this Membership Options Page (that you create in WordPress) you\'ll insert the PayPal Subscription Buttons that were generated for you by s2Member.</p>' . "\n";
58
- echo '<p>2. A User will click on a PayPal Subscription Button from your Membership Options Page. They will be transferred over to PayPal in order to agree to your Membership terms and pricing. You can customize the Checkout Page Style, Pricing, Payment Periods, and more, whenever you generate your PayPal Buttons through s2Member.</p>' . "\n";
59
- echo '<p>3. Once a User has completed the Subscription Signup Process at PayPal, they\'ll be returned to your site, where they\'ll be activated by s2Member instantly, and given the opportunity to register a Username &amp; Password for their Membership. <em>(Note: they\'ll be allowed to register a Username &amp; Password even if you\'ve set \'Anyone Can Register\' to `Off` in your General WordPress options, because s2Member identifies the User as having paid for Membership access through PayPal)</em>.</p>' . "\n";
60
- echo '<p>s2Member will also send the User an email with instructions on how to register their Username &amp; Password, just in case they missed anything after checkout. That email will be sent to their PayPal email address. Much of this is handled through the PayPal IPN service behind-the-scenes, where PayPal and s2Member communicate with each other.</p>' . "\n";
61
- echo '<p>4. Once a User has completed checkout and registered a Username &amp; Password, they\'ll be able to log in. The first page they\'ll see after logging in will be your Login Welcome Page <em>(which you\'ll need to configure in the s2Member General Options panel)</em>. Your Login Welcome Page can contain whatever you like. You can design this Page in WordPress.</p>' . "\n";
62
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_registration_process", get_defined_vars ());
63
- echo '</div>' . "\n";
64
 
65
- echo '</div>' . "\n";
66
-
67
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_after_registration_process", get_defined_vars ());
68
- }
69
-
70
- if (apply_filters("ws_plugin__s2member_during_start_page_during_left_sections_display_log_reg_form", true, get_defined_vars ()))
71
- {
72
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_log_reg_form", get_defined_vars ());
73
-
74
- echo '<div class="ws-menu-page-group" title="Your Login/Registration Form" default-state="open">' . "\n";
75
-
76
- echo '<div class="ws-menu-page-section ws-plugin--s2member-login-reg-form-section">' . "\n";
77
- echo '<p>s2Member uses the existing WordPress Login/Registration system. This is the same Login/Registration Form that you use to access your WP Dashboard. However, with s2Member installed, your Login/Registration Forms can be customized <em>(i.e., re-branded)</em>. <em>See: <strong>s2Member → General Options → Login/Registration Design</strong>.</em> You can make the default Login/Registration Forms match your WordPress theme design by changing the background color/image, your logo image, add Custom Fields, and more<em>!</em></p>' . "\n";
78
- echo '<p>Since s2Member uses the default Login/Registration system for WordPress, s2Member is also compatible with themes and other plugins <em>(such as BuddyPress)</em>. If your theme has a login form built-in already, chances are, it\'s perfectly compatible with s2Member. There are also many plugins available that are designed to place login forms into your Sidebar. Many of those are also compatible with s2Member\'s integration. If you have any trouble, please check the <a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Forum URI")) . '" target="_blank" rel="external">s2Member Forums</a> for assistance.</p>' . "\n";
79
- echo ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && is_main_site ()) || c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '<div class="ws-menu-page-hr"></div>' . "\n" : '';
80
- echo (is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && is_main_site ()) ? '<p><em>The Main Site of a Multisite Blog Farm uses a different Registration Form. See: <strong>s2Member → General Options → Registration/Profile Fields</strong>.</em></p>' . "\n" : '';
81
- echo (c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '<p><em><strong>BuddyPress:</strong> BuddyPress will use its own Registration Form. See: <strong>s2Member → General Options → Registration/Profile Fields</strong>.</em></p>' . "\n" : '';
82
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_log_reg_form", get_defined_vars ());
83
- echo '</div>' . "\n";
84
-
85
- echo '</div>' . "\n";
86
-
87
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_after_log_reg_form", get_defined_vars ());
88
- }
89
-
90
- if (apply_filters("ws_plugin__s2member_during_start_page_during_left_sections_display_login_welcome_page", true, get_defined_vars ()))
91
- {
92
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_login_welcome_page", get_defined_vars ());
93
-
94
- echo '<div class="ws-menu-page-group" title="Your Login Welcome Page" default-state="open">' . "\n";
95
-
96
- echo '<div class="ws-menu-page-section ws-plugin--s2member-login-welcome-page-section">' . "\n";
97
- echo '<p>You create this special Page in WordPress. This is a "Page" not a Post. This is the first page Members will see after logging into your site.</p>' . "\n";
98
- echo '<p>You should go ahead and create an empty Page now, before you start configuring everything. Title it: <code>My Login Welcome Page</code> and click Publish.</p>' . "\n";
99
- echo '<p>Once you have all of your <strong>s2Member → General Options</strong> configured, and once you have a basic understanding of how s2Member works, go back and customize the title and content for this Page. You\'ll want to be creative with your Login Welcome Page. However, you should configure your <strong>s2Member → General Options</strong> first and test things out. That way you\'ll understand why this Page is important.</p>' . "\n";
100
- echo (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? '<p><strong>See also:</strong> This KB article: <a href="http://s2member.com/r/customizing-login-welcome-page/" target="_blank" rel="external">Customizing Your Login Welcome Page</a>.</p>'."\n" : '';
101
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_login_welcome_page", get_defined_vars ());
102
- echo '</div>' . "\n";
103
-
104
- echo '</div>' . "\n";
105
-
106
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_after_login_welcome_page", get_defined_vars ());
107
- }
108
-
109
- if (apply_filters("ws_plugin__s2member_during_start_page_during_left_sections_display_membership_options_page", true, get_defined_vars ()))
110
- {
111
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_membership_options_page", get_defined_vars ());
112
-
113
- echo '<div class="ws-menu-page-group" title="Your Membership Options Page" default-state="open">' . "\n";
114
-
115
- echo '<div class="ws-menu-page-section ws-plugin--s2member-membership-options-page-section">' . "\n";
116
- echo '<p>You create this special Page in WordPress. This is a "Page" not a Post. s2Member comes with a PayPal Button Generator. You will generate PayPal Buttons with s2Member, for each Membership Level that you plan to offer. Those buttons will be inserted into your Membership Options Page. If a User in the general public attempts to access an area of your site that is being protected by s2Member <em>(based on your configuration)</em>, s2Member will redirect the User to your Membership Options Page, where they can signup through PayPal and become a Member.</p>' . "\n";
117
- echo '<p>You should go ahead and create an empty Page now, before you start configuring everything. Title it: <code>My Membership Options Page</code> and click Publish.</p>' . "\n";
118
- echo '<p>Once you have all of your <strong>s2Member → General Options</strong> configured, and once you have a basic understanding of how s2Member works, go back and customize the title and content for this Page. You\'ll want to be creative with your Membership Options Page. However, you should configure your <strong>s2Member → General Options</strong> first and test things out. That way you\'ll understand why this Page is important.</p>' . "\n";
119
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_membership_options_page", get_defined_vars ());
120
- echo '</div>' . "\n";
121
-
122
- echo '</div>' . "\n";
123
-
124
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_after_membership_options_page", get_defined_vars ());
125
- }
126
-
127
- if (apply_filters("ws_plugin__s2member_during_start_page_during_left_sections_display_general_options", true, get_defined_vars ()))
128
- {
129
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_general_options", get_defined_vars ());
130
-
131
- echo '<div class="ws-menu-page-group" title="Your s2Member → General Options" default-state="open">' . "\n";
132
-
133
- echo '<div class="ws-menu-page-section ws-plugin--s2member-general-options-section">' . "\n";
134
- echo '<p>Once you have a Login Welcome Page and a Membership Options Page. Go to: <strong>s2Member → General Options</strong></p>' . "\n";
135
- echo '<p>From the s2Member General Options Panel you can setup your Membership offering. Including the design of your Login/Registration Form, any Custom Registration/Profile Fields you\'d like to create, Labels for each Membership Level, Open Registration (on/off), a Profile Editing Panel for Members, and more.</p>' . "\n";
136
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_general_options", get_defined_vars ());
137
- echo '</div>' . "\n";
138
-
139
- echo '</div>' . "\n";
140
-
141
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_after_general_options", get_defined_vars ());
142
- }
143
-
144
- if (apply_filters("ws_plugin__s2member_during_start_page_during_left_sections_display_restriction_options", true, get_defined_vars ()))
145
- {
146
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_restriction_options", get_defined_vars ());
147
-
148
- echo '<div class="ws-menu-page-group" title="Your s2Member → Restriction Options" default-state="open">' . "\n";
149
-
150
- echo '<div class="ws-menu-page-section ws-plugin--s2member-restriction-options-section">' . "\n";
151
- echo '<p>Once you have a Login Welcome Page and a Membership Options Page. Go to: <strong>s2Member → Restriction Options</strong></p>' . "\n";
152
- echo '<p>From the s2Member Restriction Options Panel you may restrict access to certain Posts, Pages, Tags, Categories, and/or URIs based on a Member\'s Level. The s2Member Options Panel makes it easy for you. All you do is type in the basics of what you want to restrict access to and those sections of your site will be off limits to non-Members.</p>' . "\n";
153
- echo (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? '<p>That being said, there are times when you might need to have greater control over which portions of your site can be viewed by non-Members, or Members at different Levels. This is where API Scripting with Conditionals comes in. <em>For more information, please check your Dashboard here: <strong>s2Member → API Scripting</strong></em>.</p>' . "\n" : '';
154
- echo (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? '<p><strong>See also:</strong> This KB article: <a href="http://s2member.com/r/simple-shortcode-conditionals/" target="_blank" rel="external">Simple Shortcode Conditionals</a>.</p>'."\n" : '';
155
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_restriction_options", get_defined_vars ());
156
- echo '</div>' . "\n";
157
-
158
- echo '</div>' . "\n";
159
-
160
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_after_restriction_options", get_defined_vars ());
161
- }
162
-
163
- if (apply_filters("ws_plugin__s2member_during_start_page_during_left_sections_display_automation_process", true, get_defined_vars ()))
164
- {
165
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_automation_process", get_defined_vars ());
166
-
167
- echo '<div class="ws-menu-page-group" title="Cancellations / Expirations / Terminations" default-state="open">' . "\n";
168
-
169
- echo '<div class="ws-menu-page-section ws-plugin--s2member-automation-process-section">' . "\n";
170
- echo '<p>You\'ll be happy to know that s2Member handles cancellations, expirations, failed payments, terminations <em>(e.g., refunds &amp; chargebacks)</em> for you automatically. If you log into your PayPal account and cancel a Member\'s Subscription, or, if the Member logs into their PayPal account and cancels their own Subscription, s2Member will be notified of these important changes and react accordingly through the PayPal IPN service that runs silently behind-the-scene.</p>' . "\n";
171
- echo '<p>The PayPal IPN service will notify s2Member whenever a Member\'s payments have been failing and/or whenever a Member\'s Subscription has expired for any reason. Even refunds &amp; chargeback reversals are supported through the IPN service. If you issue a refund to an unhappy Customer through PayPal, s2Member will be notified and the account for that Customer will either be demoted to a Free Subscriber or deleted automatically <em>(based on your configuration)</em>. The communication from PayPal → s2Member is seamless.</p>' . "\n";
172
- echo '<p><em><strong>Some Hairy Details:</strong> There might be times whenever you notice that a Member\'s Subscription has been cancelled through PayPal... but, s2Member continues allowing the User access to your site as a paid Member. Please don\'t be confused by this... in 99.9% of these cases, the reason for this is legitimate. s2Member will only remove the User\'s Membership privileges when an EOT (End Of Term) is processed, a refund occurs, a chargeback occurs, or when a cancellation occurs; which would later result in a delayed Auto-EOT by s2Member.</em></p>' . "\n";
173
- echo '<p><em>s2Member will not process an EOT until the User has completely used up the time they paid for. In other words, if a User signs up for a monthly Subscription on Jan 1st, and then cancels their Subscription on Jan 15th; technically, they should still be allowed to access the site for another 15 days, and then on Feb 1st, the time they paid for has completely elapsed. At that time, s2Member will remove their Membership privileges; by either demoting them to a Free Subscriber, or deleting their account from the system (based on your configuration). s2Member also calculates one extra day (24 hours) into its equation, just to make sure access is not removed sooner than a Customer might expect.</em></p>' . "\n";
174
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_automation_process", get_defined_vars ());
175
- echo '</div>' . "\n";
176
-
177
- echo '</div>' . "\n";
178
-
179
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_after_automation_process", get_defined_vars ());
180
- }
181
-
182
- if (apply_filters("ws_plugin__s2member_during_start_page_during_left_sections_display_upgrading_downgrading", true, get_defined_vars ()))
183
- {
184
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_upgrading_downgrading", get_defined_vars ());
185
-
186
- echo '<div class="ws-menu-page-group" title="Upgrading/Downgrading Accounts" default-state="open">' . "\n";
187
-
188
- echo '<div class="ws-menu-page-section ws-plugin--s2member-upgrading-downgrading-section">' . "\n";
189
- echo '<p>s2Member builds upon existing functionality offered through WordPress Roles and Capabilities. From your WordPress Dashboard, go to: <code>Users</code>. You can use bulk actions to modify Member Access Levels all at once, or click on an individual Member account to modify only their specific Access Level. If you want to temporarily demote a Member so they cannot access Membership privileges, set their Role to Subscriber. When you\'re ready to give them their Membership privileges back, change their Role back to one of the s2Member Levels.</p>' . "\n";
190
- echo '<p>All financial details, such as pricing, trial periods, subscription lengths, refunds, and other Customer service issues, should be handled by you—through your PayPal account; not through WordPress. Feel free to modify your Members\' Subscriptions via PayPal as often as you like. s2Member will be notified through the PayPal IPN service behind-the-scenes automatically. For example, if you log into PayPal and cancel a Member\'s paid Subscription, s2Member will be notified by PayPal behind-the-scenes, and s2Member will remove their Membership privileges at the correct point in time.</p>' . "\n";
191
- echo '<p>That being said, if you log into your WordPress Dashboard and delete a Member\'s account, you will still need to log into PayPal and cancel billing for the account you deleted. In other words, s2Member can be notified automatically about actions you take inside PayPal\'s interface, but PayPal cannot be notified of actions you take inside your WordPress Dashboard. At least, not in an automated fashion, as that would create a security issue for PayPal. Thus, automation works seamlessly from PayPal » s2Member, but not the other way around.</p>' . "\n";
192
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_upgrading_downgrading", get_defined_vars ());
193
- echo '</div>' . "\n";
194
-
195
- echo '<div class="ws-menu-page-hr ws-plugin--s2member-subscription-modification-section-hr"></div>' . "\n";
196
-
197
- echo '<div class="ws-menu-page-section ws-plugin--s2member-subscription-modification-section">' . "\n";
198
- echo '<h3>Giving Members the Ability to Modify their Own Subscription</h3>' . "\n";
199
- echo '<p>If you\'d like to give your Members <em>(and/or your Free Subscribers)</em> the ability to modify their billing plan, by switching to a more expensive option, or a less expensive option; generate a new PayPal Modification Button, using the s2Member PayPal Button Generator. Configure the updated Level, pricing, terms, etc. Then, make that new Modification Button available to Members who are logged into their existing account with you. For example, you might want to insert a "Level #2" Upgrade Button into your Login Welcome Page, which would up-sell existing Level #1 Members to a more expensive plan that you offer.</p>' . "\n";
200
- echo '<p><em><strong>Modification Process:</strong> When you send a Member to PayPal using a Subscription Modification Button, PayPal will ask them to login. Once they\'re logged in, instead of being able to signup for a new Membership, PayPal will provide them with the ability to upgrade and/or downgrade their existing Membership with you, by allowing them to switch to the Membership Plan that was specified in the Subscription Modification Button. PayPal handles this nicely, and you\'ll be happy to know that s2Member has been pre-configured to deal with this scenario as well, so that everything remains automated. Their Membership Access Level will either be promoted, or demoted, based on the actions they took at PayPal during the modification process. Once an existing Member completes their Subscription Modification at PayPal, they\'ll be brought back to their Login Welcome Page, instead of sending them to a registration screen.</em></p>' . "\n";
201
- echo '<p><em><strong>Also Works For Free Subscribers:</strong> Although a Free Subscriber does not have an existing PayPal Subscription, s2Member is capable of adapting to this scenario gracefully. Just make sure that your existing Free Subscribers (the ones who wish to upgrade) pay for their Membership through a Modification Button generated by s2Member. That will allow them to continue using their existing account with you. In other words, they can keep their existing Username (and anything already associated with that Username), rather than being forced to re-register after checkout.</em></p>' . "\n";
202
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_upgrading_downgrading_modifications", get_defined_vars ());
203
- echo '</div>' . "\n";
204
-
205
- echo '</div>' . "\n";
206
-
207
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_after_upgrading_downgrading", get_defined_vars ());
208
- }
209
-
210
- if (apply_filters("ws_plugin__s2member_during_start_page_during_left_sections_display_reg_before_checkout", true, get_defined_vars ()))
211
- {
212
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_reg_before_checkout", get_defined_vars ());
213
-
214
- echo '<div class="ws-menu-page-group" title="Registration Before Checkout?" default-state="open">' . "\n";
215
-
216
- echo '<div class="ws-menu-page-section ws-plugin--s2member-reg-before-checkout-section">' . "\n";
217
- echo '<p>By default, s2Member will send a Customer directly to PayPal, and only after checkout is completed does the Customer have the ability to register a Username/Password for access to your site. This process works very well in most cases, and it has the benefit of increasing conversion rates, because there are fewer obstacles for the Customer on their way to the actual checkout process at PayPal.</p>' . "\n";
218
- echo '<p>That being said, we believe the <em>ideal</em> approach is a <em>combined</em> Checkout/Registration process; in just one simple step <em>(available with <a href="http://s2member.com/prices/" target="_blank" rel="external">s2Member Pro</a> using Stripe™ (most popular), PayPal Pro integration, or through Authorize.Net)</em>. However, even with PayPal Standard Buttons, there is a way to accomplish Registration Before Checkout, thereby reversing the process—if you prefer it that way.</p>'."\n";
219
- echo '<p>With PayPal Standard Buttons, Registration before Checkout is accomplished by turning Open Registration <code>(on)</code>, and then making a PayPal Button available to Free Subscribers at Level #0. In other words, you can let Visitors register for free at Level #0 <em>(where they have access to very little perhaps)</em>, and then charge them for access to higher Member Levels [1-4]. For further details, please check your WordPress Dashboard here: <strong>s2Member → General Options → Open Registration</strong>.</p>' . "\n";
220
- echo '<p><em>s2Member\'s Simple Conditionals can help with you too. For instance, you could integrate a special PayPal Button on your Login Welcome Page that will only be seen by Free Subscribers at Level #0. Please check your WordPress Dashboard under: <strong>s2Member → Restriction Options → Simple Shortcode Conditionals</strong>. We also suggest reading over the documentation on PayPal Modification Buttons. See: <strong>s2Member → PayPal Buttons → Subscr. Modification Buttons</strong>.</em></p>' . "\n";
221
- echo (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? '<p><strong>See also:</strong> This KB article: <a href="http://s2member.com/r/simple-shortcode-conditionals/" target="_blank" rel="external">Simple Shortcode Conditionals</a>.</p>'."\n" : '';
222
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_reg_before_checkout", get_defined_vars ());
223
- echo '</div>' . "\n";
224
-
225
- echo '</div>' . "\n";
226
-
227
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_after_reg_before_checkout", get_defined_vars ());
228
- }
229
-
230
- if (apply_filters("ws_plugin__s2member_during_start_page_during_left_sections_display_themes", (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()), get_defined_vars ()))
231
- {
232
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_themes", get_defined_vars ());
233
-
234
- echo '<div class="ws-menu-page-group" title="Choosing The Perfect WordPress Theme" default-state="open">' . "\n";
235
-
236
- echo '<div class="ws-menu-page-section ws-plugin--s2member-themes">' . "\n";
237
- echo '<p>We recommend <a href="http://s2member.com/r/themeforest/" target="_blank" rel="external">ThemeForest</a>. This is a great place to find the perfect theme for your installation of WordPress—at very affordable prices.</p>' . "\n";
238
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_themes", get_defined_vars ());
239
- echo '</div>' . "\n";
240
- echo '</div>' . "\n";
241
-
242
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_after_themes", get_defined_vars ());
243
- }
244
-
245
- if (apply_filters("ws_plugin__s2member_during_start_page_during_left_sections_display_pro", (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()), get_defined_vars ()))
246
- {
247
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_pro", get_defined_vars ());
248
-
249
- echo '<div class="ws-menu-page-group" title="Upgrading to s2Member Pro<em>!</em>" default-state="open">' . "\n";
250
-
251
- echo '<div class="ws-menu-page-section ws-plugin--s2member-pro">' . "\n";
252
- echo '<p>Among many other features/enhancements, <a href="http://s2member.com/" target="_blank" rel="external">s2Member Pro</a> comes pre-integrated with additional payment gateways that work with s2Member Pro-Forms (a powerful s2Member Pro feature). For instance, Stripe (most popular; also supports Bitcoin), PayPal Payments Pro, and Authorize.Net. Each of these payment gateways allow you to accept most major credit cards on-site; i.e., customers never leave your site! s2Member Pro-Forms also support PayPal Express Checkout (if you integrate with PayPal Pro); for customers who actually prefer to pay with PayPal.</p>' . "\n";
253
- echo '<p><strong>Learn more here:</strong> <a href="http://s2member.com/features/" target="_blank" rel="external">s2Member Pro Features</a></p>'."\n";
254
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_pro", get_defined_vars ());
255
- echo '</div>' . "\n";
256
-
257
- echo '</div>' . "\n";
258
-
259
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_after_pro", get_defined_vars ());
260
- }
261
-
262
- do_action("ws_plugin__s2member_during_start_page_after_left_sections", get_defined_vars ());
263
-
264
- echo '</td>' . "\n";
265
-
266
- echo '<td class="ws-menu-page-table-r">' . "\n";
267
- c_ws_plugin__s2member_menu_pages_rs::display ();
268
- echo '</td>' . "\n";
269
-
270
- echo '</tr>' . "\n";
271
- echo '</tbody>' . "\n";
272
- echo '</table>' . "\n";
273
-
274
- echo '</div>' . "\n";
275
- }
276
- }
277
  }
 
278
 
279
  new c_ws_plugin__s2member_menu_page_start ();
3
  /**
4
  * Getting Started.
5
  *
6
+ * Copyright: © 2009-2022
7
+ * {@link http://wpsharks.com WP Sharks}
8
  * (coded in the USA)
9
  *
10
  * Released under the terms of the GNU General Public License.
19
  exit ("Do not access this file directly.");
20
 
21
  if (!class_exists ("c_ws_plugin__s2member_menu_page_start"))
22
+ {
23
+ /**
24
+ * Getting Started.
25
+ *
26
+ * @package s2Member\Menu_Pages
27
+ * @since 110531
28
+ */
29
+ class c_ws_plugin__s2member_menu_page_start
30
  {
31
+ public function __construct ()
32
+ {
33
+ echo '<div class="wrap ws-menu-page">' . "\n";
 
 
 
 
 
 
 
 
34
 
35
+ echo '<div class="wp-header-end"></div>'."\n";
36
 
37
+ echo '<div class="ws-menu-page-toolbox">'."\n";
38
+ c_ws_plugin__s2member_menu_pages_tb::display ();
39
+ echo '</div>'."\n";
40
 
41
+ echo '<h2>Quick Start</h2>' . "\n";
42
 
43
+ echo '<table class="ws-menu-page-table">' . "\n";
44
+ echo '<tbody class="ws-menu-page-table-tbody">' . "\n";
45
+ echo '<tr class="ws-menu-page-table-tr">' . "\n";
46
+ echo '<td class="ws-menu-page-table-l">' . "\n";
47
 
48
+ echo
49
+ '<div class="ws-menu-page-group" title="Getting Started Quick and Easy" default-state="open">',"\n",
50
+ '<div class="ws-menu-page-section ws-plugin--s2member-quick-start-section">',"\n",
51
+ '<iframe width="560" height="315" src="https://www.youtube.com/embed/videoseries?list=PL8gPolqFnYqtBVz0nVeN2sJgRVednq0jw" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>',"\n",
52
+ '</div>',"\n",
53
+ '</div>',"\n";
54
 
55
+ echo '</td>' . "\n";
 
 
56
 
57
+ echo '<td class="ws-menu-page-table-r">' . "\n";
58
+ c_ws_plugin__s2member_menu_pages_rs::display ();
59
+ echo '</td>' . "\n";
60
 
61
+ echo '</tr>' . "\n";
62
+ echo '</tbody>' . "\n";
63
+ echo '</table>' . "\n";
 
 
 
 
 
64
 
65
+ echo '</div>' . "\n";
66
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  }
68
+ }
69
 
70
  new c_ws_plugin__s2member_menu_page_start ();
src/includes/templates/badges/s-badge.php CHANGED
@@ -4,5 +4,5 @@ if(!defined('WPINC')) // MUST have WordPress.
4
  exit("Do not access this file directly.");
5
  ?>
6
  <div class="ws-plugin--s2member-s-badge">
7
- <a href="http://www.s2member.com/" onclick="window.open('http://www.s2member.com/s-badges/s-details.php?v=%%v%%&amp;site_url=%%site_url%%%%no_cache%%%%display_on_failure%%', '_popup', 'width=770,height=720,left='+((screen.width/2)-(770/2))+',screenX='+((screen.width/2)-(770/2))+',top='+((screen.height/2)-(720/2))+',screenY='+((screen.height/2)-(720/2))+',location=0,menubar=0,toolbar=0,scrollbars=0,resizable=1'); return false;" title="s2Member&reg;"><img src="//www.s2member.com/s-badges/s-badge.php?v=%%v%%&amp;site_url=%%site_url%%%%no_cache%%%%display_on_failure%%" %%width_height_attrs%% style="border:0; %%width_height_styles%%" alt="s2Member&reg;" title="<?php echo esc_attr(_x("s2Member&reg; (Security for WordPress&reg;)", "s2member-front", "s2member")); ?>" /></a>
8
  </div>
4
  exit("Do not access this file directly.");
5
  ?>
6
  <div class="ws-plugin--s2member-s-badge">
7
+ <img src="//www.s2member.com/s-badges/s-badge.php?v=%%v%%&amp;site_url=%%site_url%%%%no_cache%%%%display_on_failure%%" %%width_height_attrs%% style="border:0; %%width_height_styles%%" alt="s2Member&reg;" title="<?php echo esc_attr(_x("s2Member&reg; (Security for WordPress&reg;)", "s2member-front", "s2member")); ?>" />
8
  </div>
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: 220809\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/s2member\n"
7
- "POT-Creation-Date: 2022-08-09 00:11:54+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -140,24 +140,24 @@ msgstr ""
140
 
141
  #: pro/src/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:290
142
  #: pro/src/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:643
143
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:343
144
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:677
145
  #: pro/src/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:411
146
  #: pro/src/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:760
147
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:478
148
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:926
149
  msgctxt "s2member-front"
150
  msgid "<strong>Thank you.</strong> Your account has been updated."
151
  msgstr ""
152
 
153
  #: pro/src/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:498
154
  #: pro/src/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:764
155
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:507
156
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:834
157
  #: pro/src/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:592
158
  #: pro/src/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:915
159
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:750
160
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1084
161
  #: pro/src/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:565
162
  #: pro/src/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:839
163
  msgctxt "s2member-front"
@@ -170,18 +170,18 @@ msgstr ""
170
  #: pro/src/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:799
171
  #: pro/src/includes/classes/gateways/authnet/authnet-registration-in.inc.php:129
172
  #: pro/src/includes/classes/gateways/authnet/authnet-registration-in.inc.php:151
173
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:516
174
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:542
175
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:843
176
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:869
177
  #: pro/src/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:601
178
  #: pro/src/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:627
179
  #: pro/src/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:924
180
  #: pro/src/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:950
181
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:759
182
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:785
183
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1093
184
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1119
185
  #: pro/src/includes/classes/gateways/paypal/paypal-registration-in.inc.php:129
186
  #: pro/src/includes/classes/gateways/paypal/paypal-registration-in.inc.php:151
187
  #: pro/src/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:577
@@ -193,12 +193,12 @@ msgstr ""
193
 
194
  #: pro/src/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:529
195
  #: pro/src/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:790
196
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:533
197
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:860
198
  #: pro/src/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:618
199
  #: pro/src/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:941
200
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:776
201
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1110
202
  #: pro/src/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:566
203
  #: pro/src/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:840
204
  msgctxt "s2member-front"
@@ -206,9 +206,9 @@ msgid "<strong>Thank you.</strong> Your account has been approved.<br />&mdash;
206
  msgstr ""
207
 
208
  #: pro/src/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:810
209
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:880
210
  #: pro/src/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:961
211
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1130
212
  #: pro/src/includes/classes/gateways/paypal/paypal-update-pf-in.inc.php:136
213
  #: pro/src/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:855
214
  msgctxt "s2member-front"
@@ -1354,10 +1354,10 @@ msgctxt "s2member-front"
1354
  msgid "Please <a href=\"%s\" rel=\"nofollow\">log in at PayPal</a> to cancel your Subscription."
1355
  msgstr ""
1356
 
1357
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:355
1358
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:689
1359
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:495
1360
- #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:938
1361
  msgctxt "s2member-front"
1362
  msgid "<strong>Sorry.</strong> Your account is pending other changes. Please try again in 15 minutes."
1363
  msgstr ""
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"
140
 
141
  #: pro/src/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:290
142
  #: pro/src/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:643
143
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:346
144
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:680
145
  #: pro/src/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:411
146
  #: pro/src/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:760
147
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:481
148
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:929
149
  msgctxt "s2member-front"
150
  msgid "<strong>Thank you.</strong> Your account has been updated."
151
  msgstr ""
152
 
153
  #: pro/src/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:498
154
  #: pro/src/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:764
155
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:510
156
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:837
157
  #: pro/src/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:592
158
  #: pro/src/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:915
159
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:753
160
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1087
161
  #: pro/src/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:565
162
  #: pro/src/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:839
163
  msgctxt "s2member-front"
170
  #: pro/src/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:799
171
  #: pro/src/includes/classes/gateways/authnet/authnet-registration-in.inc.php:129
172
  #: pro/src/includes/classes/gateways/authnet/authnet-registration-in.inc.php:151
173
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:519
174
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:545
175
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:846
176
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:872
177
  #: pro/src/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:601
178
  #: pro/src/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:627
179
  #: pro/src/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:924
180
  #: pro/src/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:950
181
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:762
182
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:788
183
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1096
184
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1122
185
  #: pro/src/includes/classes/gateways/paypal/paypal-registration-in.inc.php:129
186
  #: pro/src/includes/classes/gateways/paypal/paypal-registration-in.inc.php:151
187
  #: pro/src/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:577
193
 
194
  #: pro/src/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:529
195
  #: pro/src/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:790
196
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:536
197
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:863
198
  #: pro/src/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:618
199
  #: pro/src/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:941
200
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:779
201
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1113
202
  #: pro/src/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:566
203
  #: pro/src/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:840
204
  msgctxt "s2member-front"
206
  msgstr ""
207
 
208
  #: pro/src/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:810
209
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:883
210
  #: pro/src/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:961
211
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1133
212
  #: pro/src/includes/classes/gateways/paypal/paypal-update-pf-in.inc.php:136
213
  #: pro/src/includes/classes/gateways/stripe/stripe-checkout-in.inc.php:855
214
  msgctxt "s2member-front"
1354
  msgid "Please <a href=\"%s\" rel=\"nofollow\">log in at PayPal</a> to cancel your Subscription."
1355
  msgstr ""
1356
 
1357
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:358
1358
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:692
1359
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:498
1360
+ #: pro/src/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:941
1361
  msgctxt "s2member-front"
1362
  msgid "<strong>Sorry.</strong> Your account is pending other changes. Please try again in 15 minutes."
1363
  msgstr ""
src/vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit51b7b92c212283cd86a618cf12e61a54::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInite64497be01e7d367bbe45cae35bacb5d::getLoader();
src/vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit51b7b92c212283cd86a618cf12e61a54
6
  {
7
  private static $loader;
8
 
@@ -22,15 +22,15 @@ class ComposerAutoloaderInit51b7b92c212283cd86a618cf12e61a54
22
  return self::$loader;
23
  }
24
 
25
- spl_autoload_register(array('ComposerAutoloaderInit51b7b92c212283cd86a618cf12e61a54', 'loadClassLoader'), true, true);
26
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
27
- spl_autoload_unregister(array('ComposerAutoloaderInit51b7b92c212283cd86a618cf12e61a54', '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\ComposerStaticInit51b7b92c212283cd86a618cf12e61a54::getInitializer($loader));
34
  } else {
35
  $map = require __DIR__ . '/autoload_namespaces.php';
36
  foreach ($map as $namespace => $path) {
@@ -51,19 +51,19 @@ class ComposerAutoloaderInit51b7b92c212283cd86a618cf12e61a54
51
  $loader->register(true);
52
 
53
  if ($useStaticLoader) {
54
- $includeFiles = Composer\Autoload\ComposerStaticInit51b7b92c212283cd86a618cf12e61a54::$files;
55
  } else {
56
  $includeFiles = require __DIR__ . '/autoload_files.php';
57
  }
58
  foreach ($includeFiles as $fileIdentifier => $file) {
59
- composerRequire51b7b92c212283cd86a618cf12e61a54($fileIdentifier, $file);
60
  }
61
 
62
  return $loader;
63
  }
64
  }
65
 
66
- function composerRequire51b7b92c212283cd86a618cf12e61a54($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 ComposerAutoloaderInite64497be01e7d367bbe45cae35bacb5d
6
  {
7
  private static $loader;
8
 
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
  $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;
src/vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit51b7b92c212283cd86a618cf12e61a54
8
  {
9
  public static $files = array (
10
  '5255c38a0faeba867671b61dfda6d864' => __DIR__ . '/..' . '/paragonie/random_compat/lib/random.php',
@@ -30,7 +30,7 @@ class ComposerStaticInit51b7b92c212283cd86a618cf12e61a54
30
  public static function getInitializer(ClassLoader $loader)
31
  {
32
  return \Closure::bind(function () use ($loader) {
33
- $loader->classMap = ComposerStaticInit51b7b92c212283cd86a618cf12e61a54::$classMap;
34
 
35
  }, null, ClassLoader::class);
36
  }
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
  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
  }